cdk-nextjs 0.7.9 → 0.7.11
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/.jsii +3 -3
- package/README.md +1 -1
- package/docs/harness-coverage.md +1 -1
- package/docs/nextjs-private-apis.md +128 -0
- package/lib/adapter/adapter.mjs +276 -24
- package/lib/adapter/build-outputs.d.ts +1 -1
- package/lib/adapter/build-outputs.js +29 -13
- package/lib/adapter/build-outputs.test.js +35 -7
- package/lib/adapter/cache-handler.d.ts +1 -1
- package/lib/adapter/cache-handler.js +1 -1
- package/lib/adapter/cache-kinds.d.ts +12 -1
- package/lib/adapter/cache-kinds.js +16 -4
- package/lib/adapter/init-cache.js +7 -7
- package/lib/adapter/local-file-cache-handler.d.ts +1 -1
- package/lib/adapter/local-file-cache-handler.js +1 -1
- package/lib/adapter/memory-cache-handler.d.ts +2 -2
- package/lib/adapter/memory-cache-handler.js +1 -1
- package/lib/adapter/s3-cache-handler.d.ts +2 -2
- package/lib/adapter/s3-cache-handler.js +1 -1
- package/lib/adapter/use-cache-common.d.ts +1 -1
- package/lib/adapter/use-cache-common.js +1 -1
- package/lib/adapter/use-cache-common.test.js +1 -1
- package/lib/adapter/use-cache-default-handler.d.ts +1 -1
- package/lib/adapter/use-cache-default-handler.js +1 -1
- package/lib/adapter/use-cache-handlers.test.js +1 -1
- package/lib/adapter/use-cache-remote-handler.d.ts +1 -1
- package/lib/adapter/use-cache-remote-handler.js +1 -1
- package/lib/cdk-nextjs-version.d.ts +10 -0
- package/lib/cdk-nextjs-version.js +15 -0
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.js +7 -6
- package/lib/nextjs-build/nextjs-build.test.js +16 -3
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.js +5 -5
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/root-constructs/nextjs-base-construct.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.js +1 -1
- package/lib/root-constructs/nextjs-global-functions.js +1 -1
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/lib/runtime/core.test.js +17 -8
- package/lib/runtime/dispatch.js +4 -5
- package/lib/runtime/image.js +43 -32
- package/lib/runtime/image.test.js +27 -26
- package/lib/runtime/lambda.mjs +276 -36
- package/lib/runtime/manifest.d.ts +34 -8
- package/lib/runtime/manifest.js +7 -5
- package/lib/runtime/server.mjs +276 -36
- package/package.json +1 -1
- package/scripts/capture-adapter-fixture.mjs +13 -1
- package/scripts/zero-config-build.mjs +5 -1
|
@@ -6,10 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const promises_1 = require("node:fs/promises");
|
|
7
7
|
const node_os_1 = require("node:os");
|
|
8
8
|
const node_path_1 = require("node:path");
|
|
9
|
+
const node_url_1 = require("node:url");
|
|
9
10
|
const app_playground_base_path_json_1 = __importDefault(require("./__fixtures__/app-playground-base-path.json"));
|
|
10
11
|
const app_playground_json_1 = __importDefault(require("./__fixtures__/app-playground.json"));
|
|
11
12
|
const pages_i18n_json_1 = __importDefault(require("./__fixtures__/pages-i18n.json"));
|
|
12
13
|
const build_outputs_1 = require("./build-outputs");
|
|
14
|
+
const cdk_nextjs_version_1 = require("../cdk-nextjs-version");
|
|
13
15
|
const manifest_1 = require("../runtime/manifest");
|
|
14
16
|
/**
|
|
15
17
|
* The fixtures are real `onBuildComplete` contexts captured by
|
|
@@ -50,8 +52,8 @@ afterEach(() => {
|
|
|
50
52
|
describe.each(Object.keys(fixtures))("buildAdapterManifest(%s)", (name) => {
|
|
51
53
|
const ctx = asContext(fixtures[name]);
|
|
52
54
|
const { manifest, groups: [{ staging }], } = build(ctx);
|
|
53
|
-
it("stamps the
|
|
54
|
-
expect(manifest.
|
|
55
|
+
it("stamps the cdk-nextjs version and build identity", () => {
|
|
56
|
+
expect(manifest.cdkNextjsVersion).toBe(cdk_nextjs_version_1.CDK_NEXTJS_VERSION);
|
|
55
57
|
expect(manifest.buildId).toBe(ctx.buildId);
|
|
56
58
|
expect(manifest.relativeProjectDir).toBe(name.startsWith("pages-i18n") ? "pages-i18n" : "app-playground");
|
|
57
59
|
});
|
|
@@ -65,6 +67,14 @@ describe.each(Object.keys(fixtures))("buildAdapterManifest(%s)", (name) => {
|
|
|
65
67
|
generateEtags: true,
|
|
66
68
|
i18n: ctx.config.i18n ?? null,
|
|
67
69
|
deploymentId: "",
|
|
70
|
+
images: ctx.config.images,
|
|
71
|
+
experimental: ctx.config.experimental ?? {},
|
|
72
|
+
// Dist-dir-relative when set (the adapter always sets one at build);
|
|
73
|
+
// see the cacheHandler test below for the path itself.
|
|
74
|
+
cacheHandler: ctx.config.cacheHandler
|
|
75
|
+
? expect.stringMatching(/^[^/]/)
|
|
76
|
+
: null,
|
|
77
|
+
cacheMaxMemorySize: ctx.config.cacheMaxMemorySize,
|
|
68
78
|
});
|
|
69
79
|
});
|
|
70
80
|
it("persists ctx.routing verbatim", () => {
|
|
@@ -152,6 +162,28 @@ describe("buildAdapterManifest edge cases", () => {
|
|
|
152
162
|
// the assertion fires — proving the default is wired and not just the option.
|
|
153
163
|
expect(() => (0, build_outputs_1.buildAdapterManifest)(asContext(app_playground_json_1.default))).toThrow(/must run from the Next.js project directory/);
|
|
154
164
|
});
|
|
165
|
+
it("records cacheHandler relative to the dist dir, as required-server-files.json does", () => {
|
|
166
|
+
const ctx = asContext(app_playground_json_1.default);
|
|
167
|
+
const handler = (0, node_path_1.join)(ctx.repoRoot, "node_modules/cdk-nextjs/cache.mjs");
|
|
168
|
+
for (const cacheHandler of [handler, (0, node_url_1.pathToFileURL)(handler).href]) {
|
|
169
|
+
const { manifest } = build({
|
|
170
|
+
...ctx,
|
|
171
|
+
config: { ...ctx.config, cacheHandler },
|
|
172
|
+
});
|
|
173
|
+
expect(manifest.config.cacheHandler).toBe((0, node_path_1.relative)(ctx.distDir, handler).split(node_path_1.sep).join("/"));
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
it("copies experimental as JSON, dropping function-valued entries", () => {
|
|
177
|
+
const ctx = asContext(app_playground_json_1.default);
|
|
178
|
+
const { manifest } = build({
|
|
179
|
+
...ctx,
|
|
180
|
+
config: {
|
|
181
|
+
...ctx.config,
|
|
182
|
+
experimental: { imgOptConcurrency: 2, someHook: () => undefined },
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
expect(manifest.config.experimental).toEqual({ imgOptConcurrency: 2 });
|
|
186
|
+
});
|
|
155
187
|
it("records the deploymentId, reduced to what a cache key prefix can hold", () => {
|
|
156
188
|
// `NextjsBuild` suffixes its `buildId` with it: next pins the build ID
|
|
157
189
|
// itself once `deploymentId` is set.
|
|
@@ -483,8 +515,6 @@ describe("writeBuildOutputs", () => {
|
|
|
483
515
|
await (0, promises_1.symlink)(".pnpm/next@1.0.0/node_modules/next", (0, node_path_1.join)(repoRoot, "node_modules", "next"));
|
|
484
516
|
}
|
|
485
517
|
const files = [
|
|
486
|
-
"dist/server/config-shared.js",
|
|
487
|
-
"dist/shared/lib/image-config.js",
|
|
488
518
|
"dist/server/image-optimizer.js",
|
|
489
519
|
"dist/server/serve-static.js",
|
|
490
520
|
"dist/server/lib/router-utils/instrumentation-globals.external.js",
|
|
@@ -811,8 +841,6 @@ describe("writeBuildOutputs", () => {
|
|
|
811
841
|
const has = (name, file) => (0, promises_1.lstat)((0, node_path_1.join)(result.stagedGroups.find((it) => it.name === name).path, "node_modules", "next", "dist", file)).then(() => true, () => false);
|
|
812
842
|
for (const file of [
|
|
813
843
|
"server/image-optimizer.js",
|
|
814
|
-
"shared/lib/image-config.js",
|
|
815
|
-
"server/config-shared.js",
|
|
816
844
|
"shared/lib/match-remote-pattern.js",
|
|
817
845
|
]) {
|
|
818
846
|
await expect(has("default", file)).resolves.toBe(true);
|
|
@@ -877,4 +905,4 @@ describe("writeBuildOutputs", () => {
|
|
|
877
905
|
});
|
|
878
906
|
});
|
|
879
907
|
});
|
|
880
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtb3V0cHV0cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvYnVpbGQtb3V0cHV0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0NBTzBCO0FBQzFCLHFDQUFpQztBQUNqQyx5Q0FBeUQ7QUFDekQsaUhBQWlGO0FBQ2pGLDZGQUErRDtBQUMvRCxxRkFBdUQ7QUFDdkQsbURBSXlCO0FBQ3pCLGtEQUF1RDtBQUV2RDs7OztHQUlHO0FBQ0gsTUFBTSxRQUFRLEdBQUc7SUFDZixnQkFBZ0IsRUFBRSw2QkFBYTtJQUMvQiwwQkFBMEIsRUFBRSx1Q0FBcUI7SUFDakQsWUFBWSxFQUFFLHlCQUFTO0NBQ2YsQ0FBQztBQUVYLDBFQUEwRTtBQUMxRSxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQWdCLEVBQXdCLEVBQUUsQ0FDM0QsZUFBZSxDQUFDLE9BQU8sQ0FBeUIsQ0FBQztBQUVuRDs7Ozs7R0FLRztBQUNILE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBeUIsRUFBRSxFQUFFLENBQzFDLElBQUEsb0NBQW9CLEVBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQzFELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBeUIsRUFBRSxFQUFFLENBQzFDLElBQUEsaUNBQWlCLEVBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBRXZEOzs7O0dBSUc7QUFDSCxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQWlELEVBQUUsRUFBRTtJQUNyRSxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGLFVB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O2FBQ3ZCLENBQUMsQ0FDSCxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhFQUE4RSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVGLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7WUFDM0MsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsb0NBQW9CLEVBQUMsR0FBRyxFQUFFO2dCQUN4QixRQUFRLEVBQUUsR0FBRyxDQUFDLFVBQVU7Z0JBQ3hCLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7YUFDL0QsQ0FBQyxDQUNILENBQUMsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgbHN0YXQsXG4gIG1rZGlyLFxuICBta2R0ZW1wLFxuICByZWFkRmlsZSxcbiAgc3ltbGluayxcbiAgd3JpdGVGaWxlLFxufSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlbGF0aXZlLCBzZXAgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgYXBwUGxheWdyb3VuZEJhc2VQYXRoIGZyb20gXCIuL19fZml4dHVyZXNfXy9hcHAtcGxheWdyb3VuZC1iYXNlLXBhdGguanNvblwiO1xuaW1wb3J0IGFwcFBsYXlncm91bmQgZnJvbSBcIi4vX19maXh0dXJlc19fL2FwcC1wbGF5Z3JvdW5kLmpzb25cIjtcbmltcG9ydCBwYWdlc0kxOG4gZnJvbSBcIi4vX19maXh0dXJlc19fL3BhZ2VzLWkxOG4uanNvblwiO1xuaW1wb3J0IHtcbiAgQnVpbGRDb21wbGV0ZUNvbnRleHQsXG4gIGJ1aWxkQWRhcHRlck1hbmlmZXN0LFxuICB3cml0ZUJ1aWxkT3V0cHV0cyxcbn0gZnJvbSBcIi4vYnVpbGQtb3V0cHV0c1wiO1xuaW1wb3J0IHsgUlVOVElNRV9ESVJfTkFNRSB9IGZyb20gXCIuLi9ydW50aW1lL21hbmlmZXN0XCI7XG5cbi8qKlxuICogVGhlIGZpeHR1cmVzIGFyZSByZWFsIGBvbkJ1aWxkQ29tcGxldGVgIGNvbnRleHRzIGNhcHR1cmVkIGJ5XG4gKiBgc2NyaXB0cy9jYXB0dXJlLWFkYXB0ZXItZml4dHVyZS5tanNgLCB3aXRoIGFic29sdXRlIHBhdGhzIHJld3JpdHRlbiB0byBhXG4gKiBgL3JlcG9gIHBsYWNlaG9sZGVyLiBSZWdlbmVyYXRlIHRoZW0gd2hlbiBgbmV4dGAgaXMgdXBncmFkZWQuXG4gKi9cbmNvbnN0IGZpeHR1cmVzID0ge1xuICBcImFwcC1wbGF5Z3JvdW5kXCI6IGFwcFBsYXlncm91bmQsXG4gIFwiYXBwLXBsYXlncm91bmQtYmFzZS1wYXRoXCI6IGFwcFBsYXlncm91bmRCYXNlUGF0aCxcbiAgXCJwYWdlcy1pMThuXCI6IHBhZ2VzSTE4bixcbn0gYXMgY29uc3Q7XG5cbi8qKiBGaXh0dXJlcyBhcmUgSlNPTiwgc28gdGhlIHN0cnVjdHVyYWwgY2FzdCBpcyB0aGUgcG9pbnQgb2YgdGhlIGNhc3QuICovXG5jb25zdCBhc0NvbnRleHQgPSAoZml4dHVyZTogdW5rbm93bik6IEJ1aWxkQ29tcGxldGVDb250ZXh0ID0+XG4gIHN0cnVjdHVyZWRDbG9uZShmaXh0dXJlKSBhcyBCdWlsZENvbXBsZXRlQ29udGV4dDtcblxuLyoqXG4gKiBgYnVpbGRBZGFwdGVyTWFuaWZlc3RgIHJlcXVpcmVzIHRoZSBidWlsZCBjd2QgdG8gYmUgdGhlIHByb2plY3QgZGlyIOKAlCBzZWVcbiAqIGBhc3NlcnRCdWlsZEN3ZGAuIFRoZSBmaXh0dXJlcycgcHJvamVjdCBkaXJzIGFyZSBzeW50aGV0aWMgYC9yZXBvL+KApmAgcGF0aHMsIHNvXG4gKiBldmVyeSBjYWxsIHN1cHBsaWVzIGl0IHJhdGhlciB0aGFuIGxldHRpbmcgaXQgZGVmYXVsdCB0byBgcHJvY2Vzcy5jd2QoKWAuIFRoZVxuICogYXNzZXJ0aW9uIGl0c2VsZiBpcyBjb3ZlcmVkIHNlcGFyYXRlbHkgYmVsb3cuXG4gKi9cbmNvbnN0IGJ1aWxkID0gKGN0eDogQnVpbGRDb21wbGV0ZUNvbnRleHQpID0+XG4gIGJ1aWxkQWRhcHRlck1hbmlmZXN0KGN0eCwgeyBidWlsZEN3ZDogY3R4LnByb2plY3REaXIgfSk7XG5jb25zdCB3cml0ZSA9IChjdHg6IEJ1aWxkQ29tcGxldGVDb250ZXh0KSA9PlxuICB3cml0ZUJ1aWxkT3V0cHV0cyhjdHgsIHsgYnVpbGRDd2Q6IGN0eC5wcm9qZWN0RGlyIH0pO1xuXG4vKipcbiAqIFRoZSBvbmUgZGVwbG95bWVudCByb290IGFuIHVuc3BsaXQgYnVpbGQgc3RhZ2VzLiBBc3NlcnRlZCByYXRoZXIgdGhhbiBpbmRleGVkXG4gKiBzbyBhIHJlZ3Jlc3Npb24gdGhhdCBzdGFydHMgc3BsaXR0aW5nIHVuYXNrZWQgZmFpbHMgaGVyZSBpbnN0ZWFkIG9mIHNpbGVudGx5XG4gKiBjaGVja2luZyBncm91cCAwLlxuICovXG5jb25zdCBzb2xlUm9vdCA9IChyZXN1bHQ6IHsgc3RhZ2VkR3JvdXBzOiBBcnJheTx7IHBhdGg6IHN0cmluZyB9PiB9KSA9PiB7XG4gIGV4cGVjdChyZXN1bHQuc3RhZ2VkR3JvdXBzKS50b0hhdmVMZW5ndGgoMSk7XG4gIHJldHVybiByZXN1bHQuc3RhZ2VkR3JvdXBzWzBdLnBhdGg7XG59O1xuXG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgLy8gYG1heER1cmF0aW9uYCB3YXJuaW5ncyBhcmUgZXhwZWN0ZWQgZnJvbSB0aGUgcGFnZXMtaTE4biBmaXh0dXJlLlxuICBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xufSk7XG5cbmFmdGVyRWFjaCgoKSA9PiB7XG4gIGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG59KTtcblxuZGVzY3JpYmUuZWFjaChPYmplY3Qua2V5cyhmaXh0dXJlcykgYXMgQXJyYXk8a2V5b2YgdHlwZW9mIGZpeHR1cmVzPikoXG4gIFwiYnVpbGRBZGFwdGVyTWFuaWZlc3QoJXMpXCIsXG4gIChuYW1lKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGZpeHR1cmVzW25hbWVdKTtcbiAgICBjb25zdCB7XG4gICAgICBtYW5pZmVzdCxcbiAgICAgIGdyb3VwczogW3sgc3RhZ2luZyB9XSxcbiAgICB9ID0gYnVpbGQoY3R4KTtcblxuICAgIGl0KFwic3RhbXBzIHRoZSBtYW5pZmVzdCB2ZXJzaW9uIGFuZCBidWlsZCBpZGVudGl0eVwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QobWFuaWZlc3QudmVyc2lvbikudG9CZSgxKTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdC5idWlsZElkKS50b0JlKGN0eC5idWlsZElkKTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIpLnRvQmUoXG4gICAgICAgIG5hbWUuc3RhcnRzV2l0aChcInBhZ2VzLWkxOG5cIikgPyBcInBhZ2VzLWkxOG5cIiA6IFwiYXBwLXBsYXlncm91bmRcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcImNvcGllcyB0aGUgY29uZmlnIGZpZWxkcyB0aGUgcnVudGltZSByb3V0ZXIgbmVlZHNcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KG1hbmlmZXN0LmNvbmZpZykudG9FcXVhbCh7XG4gICAgICAgIGJhc2VQYXRoOiBjdHguY29uZmlnLmJhc2VQYXRoID8/IFwiXCIsXG4gICAgICAgIHRyYWlsaW5nU2xhc2g6IGN0eC5jb25maWcudHJhaWxpbmdTbGFzaCA9PT0gdHJ1ZSxcbiAgICAgICAgYXNzZXRQcmVmaXg6IGN0eC5jb25maWcuYXNzZXRQcmVmaXggPz8gXCJcIixcbiAgICAgICAgZGlzdERpcjogXCIubmV4dFwiLFxuICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgZ2VuZXJhdGVFdGFnczogdHJ1ZSxcbiAgICAgICAgaTE4bjogY3R4LmNvbmZpZy5pMThuID8/IG51bGwsXG4gICAgICAgIGRlcGxveW1lbnRJZDogXCJcIixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJwZXJzaXN0cyBjdHgucm91dGluZyB2ZXJiYXRpbVwiLCAoKSA9PiB7XG4gICAgICAvLyBgQG5leHQvcm91dGluZ2AncyBgcmVzb2x2ZVJvdXRlc2AgY29uc3VtZXMgdGhpcyB3aG9sZSBvYmplY3Q7IGFueXRoaW5nIHdlXG4gICAgICAvLyByZXNoYXBlIGhlcmUgaXMgYSBiZWhhdmlvciBkaWZmZXJlbmNlIGZyb20gYG5leHQgc3RhcnRgLlxuICAgICAgZXhwZWN0KG1hbmlmZXN0LnJvdXRpbmcpLnRvRXF1YWwoY3R4LnJvdXRpbmcpO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0LnJvdXRpbmcpLnRvSGF2ZVByb3BlcnR5KFwibWlkZGxld2FyZU1hdGNoZXJzXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJtYXBzIGV2ZXJ5IGludm9jYWJsZSBvdXRwdXQgcGF0aG5hbWUgdG8gYW4gZW50cnlwb2ludFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICAgICAgLi4uY3R4Lm91dHB1dHMucGFnZXMsXG4gICAgICAgIC4uLmN0eC5vdXRwdXRzLnBhZ2VzQXBpLFxuICAgICAgICAuLi5jdHgub3V0cHV0cy5hcHBQYWdlcyxcbiAgICAgICAgLi4uY3R4Lm91dHB1dHMuYXBwUm91dGVzLFxuICAgICAgXS5tYXAoKG8pID0+IG8ucGF0aG5hbWUpO1xuICAgICAgLy8gUGx1cyBkeW5hbWljIHByZXJlbmRlciB0ZW1wbGF0ZXMsIHdoaWNoIGBhZGRQcmVyZW5kZXJQYXRobmFtZXNgIG1hcHMgdG9cbiAgICAgIC8vIHRoZSBlbnRyeXBvaW50IG9mIHRoZSByb3V0ZSB0aGF0IG93bnMgdGhlbS4gTm9uZSBvZiB0aGVzZSBmaXh0dXJlcyBoYXMgYVxuICAgICAgLy8gZ2F0ZWQgZHluYW1pYyByb3V0ZSwgc28gbm8gKmNvbmNyZXRlKiBwcmVyZW5kZXIgcGF0aG5hbWUgaXMgYWRkZWQgLSBzZWVcbiAgICAgIC8vIHRoZSByb290LXBhcmFtcyB0ZXN0IGJlbG93LlxuICAgICAgY29uc3QgdGVtcGxhdGVzID0gY3R4Lm91dHB1dHMucHJlcmVuZGVyc1xuICAgICAgICAuZmlsdGVyKChvKSA9PiBvLnBhdGhuYW1lLmluY2x1ZGVzKFwiW1wiKSlcbiAgICAgICAgLm1hcCgobykgPT4gby5wYXRobmFtZSk7XG4gICAgICBleHBlY3QoT2JqZWN0LmtleXMobWFuaWZlc3QuZW50cnlwb2ludHMpLnNvcnQoKSkudG9FcXVhbChcbiAgICAgICAgWy4uLm5ldyBTZXQoWy4uLmV4cGVjdGVkLCAuLi50ZW1wbGF0ZXNdKV0uc29ydCgpLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgW3BhdGhuYW1lLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3QuZW50cnlwb2ludHMpKSB7XG4gICAgICAgIGV4cGVjdChlbnRyeS5maWxlUGF0aCkudG9NYXRjaCgvXlteL10vKTtcbiAgICAgICAgZXhwZWN0KGVudHJ5LmZpbGVQYXRoKS5ub3QudG9Db250YWluKFwiXFxcXFwiKTtcbiAgICAgICAgZXhwZWN0KHN0YWdpbmcuaGFzKGVudHJ5LmZpbGVQYXRoKSkudG9CZSh0cnVlKTtcbiAgICAgICAgZXhwZWN0KGVudHJ5LmlkKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgIGV4cGVjdChbXCJhcHAtcGFnZVwiLCBcImFwcC1yb3V0ZVwiLCBcInBhZ2VcIiwgXCJwYWdlLWFwaVwiXSkudG9Db250YWluKFxuICAgICAgICAgIGVudHJ5LnR5cGUsXG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdChwYXRobmFtZSkudG9CZVRydXRoeSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoXCJsaXN0cyBwYXRobmFtZXMgYXMgdGhlIHNvcnRlZCB1bmlvbiBvZiBlbnRyeXBvaW50cyBhbmQgc3RhdGljIGZpbGVzXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChtYW5pZmVzdC5wYXRobmFtZXMpLnRvRXF1YWwoWy4uLm1hbmlmZXN0LnBhdGhuYW1lc10uc29ydCgpKTtcbiAgICAgIGV4cGVjdChuZXcgU2V0KG1hbmlmZXN0LnBhdGhuYW1lcykuc2l6ZSkudG9CZShtYW5pZmVzdC5wYXRobmFtZXMubGVuZ3RoKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1hbmlmZXN0LmVudHJ5cG9pbnRzKSkge1xuICAgICAgICBleHBlY3QobWFuaWZlc3QucGF0aG5hbWVzKS50b0NvbnRhaW4oa2V5KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBjdHgub3V0cHV0cy5zdGF0aWNGaWxlcykge1xuICAgICAgICBleHBlY3QobWFuaWZlc3QucGF0aG5hbWVzKS50b0NvbnRhaW4oZmlsZS5wYXRobmFtZSk7XG4gICAgICB9XG4gICAgICAvLyBPbmUgcmVwb3J0ZWQgcGF0aG5hbWUgY2FuIHByb2R1Y2UgdHdvIGtleXMgLSBhIGAvaW5kZXhgIHN0YXRpYyBmaWxlIGlzXG4gICAgICAvLyBhbHNvIHNlcnZlZCBhdCBgL2AsIHNlZSB0aGUgc3RhdGljLWhvbWUtcGFnZSB0ZXN0cyBiZWxvdy4gTm9uZSBvZiB0aGVzZVxuICAgICAgLy8gZml4dHVyZXMgaGFzIG9uZSwgc28gaGVyZSB0aGUgdHdvIHNldHMgY29pbmNpZGUuXG4gICAgICBleHBlY3QoT2JqZWN0LmtleXMobWFuaWZlc3Quc3RhdGljRmlsZXMpKS50b0VxdWFsKFxuICAgICAgICBbLi4ubmV3IFNldChjdHgub3V0cHV0cy5zdGF0aWNGaWxlcy5tYXAoKGYpID0+IGYucGF0aG5hbWUpKV0uc29ydCgpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwibWFwcyBlYWNoIHN0YXRpYyBmaWxlIHRvIGEgcmVwby1yb290LXJlbGF0aXZlIGtleVwiLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IFtwYXRobmFtZSwga2V5XSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5zdGF0aWNGaWxlcykpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gY3R4Lm91dHB1dHMuc3RhdGljRmlsZXMuZmluZChcbiAgICAgICAgICAoZikgPT4gZi5wYXRobmFtZSA9PT0gcGF0aG5hbWUsXG4gICAgICAgICkhO1xuICAgICAgICBleHBlY3Qoa2V5KS50b0JlKG91dHB1dC5maWxlUGF0aC5yZXBsYWNlKFwiL3JlcG8vXCIsIFwiXCIpKTtcbiAgICAgICAgZXhwZWN0KGtleS5zdGFydHNXaXRoKFwiL1wiKSkudG9CZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdChcInN0YWdlcyB0aGUgc3RhdGljIGZpbGVzIG5vdGhpbmcgaW4gZnJvbnQgb2YgdGhlIGNvbXB1dGUgc2VydmVzXCIsICgpID0+IHtcbiAgICAgIC8vIGA8ZGlzdERpcj4vc3RhdGljYCBnb2VzIHRvIFMzOyBgPGRpc3REaXI+L3NlcnZlci8qKmAgKDQwNC5odG1sLFxuICAgICAgLy8gZmF2aWNvbi5pY28uYm9keSwgZnVsbHktc3RhdGljIFBhZ2VzIFJvdXRlciBIVE1MKSBkb2VzIG5vdCwgc28gdGhlXG4gICAgICAvLyBydW50aW1lIG11c3QgYmUgYWJsZSB0byByZWFkIGl0IG9mZiBkaXNrLlxuICAgICAgZm9yIChjb25zdCBbcGF0aG5hbWUsIGtleV0gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3Quc3RhdGljRmlsZXMpKSB7XG4gICAgICAgIGNvbnN0IHNlcnZlZEJ5UzMgPSBwYXRobmFtZS5pbmNsdWRlcyhcIi9fbmV4dC9zdGF0aWMvXCIpO1xuICAgICAgICBleHBlY3Qoc3RhZ2luZy5oYXMoa2V5KSkudG9CZSghc2VydmVkQnlTMyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdChcInN0YWdlcyBvbmx5IGtleXMgdGhhdCBsYW5kIGluc2lkZSB0aGUgZGVwbG95bWVudCByb290XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChzdGFnaW5nLnNpemUpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHN0YWdpbmcua2V5cygpKSB7XG4gICAgICAgIGV4cGVjdChrZXkpLm5vdC50b0JlKFwiXCIpO1xuICAgICAgICBleHBlY3Qoa2V5LnN0YXJ0c1dpdGgoXCIvXCIpKS50b0JlKGZhbHNlKTtcbiAgICAgICAgZXhwZWN0KGtleS5zdGFydHNXaXRoKFwiLi5cIikpLnRvQmUoZmFsc2UpO1xuICAgICAgICBleHBlY3Qoa2V5LnN0YXJ0c1dpdGgoYCR7UlVOVElNRV9ESVJfTkFNRX0vYCkpLnRvQmUoZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHRyYWNlZCBgbmV4dGAgY2xvc3VyZSBpcyBtZXJnZWQgaW50byBldmVyeSBvdXRwdXQsIHNvIHN0YWdpbmcgaXMgZmFyXG4gICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIHN1bSBvZiB0aGUgcGVyLW91dHB1dCBgYXNzZXRzYCBtYXBzLlxuICAgICAgZXhwZWN0KHN0YWdpbmcuc2l6ZSkudG9CZUxlc3NUaGFuKFxuICAgICAgICBjdHgub3V0cHV0cy5hcHBQYWdlcy5sZW5ndGggKiAxMDAgK1xuICAgICAgICAgIGN0eC5vdXRwdXRzLnBhZ2VzLmxlbmd0aCAqIDEwMCArXG4gICAgICAgICAgMTAwMCxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0sXG4pO1xuXG5kZXNjcmliZShcImJ1aWxkQWRhcHRlck1hbmlmZXN0IGVkZ2UgY2FzZXNcIiwgKCkgPT4ge1xuICBpdChcInRocm93cyB3aGVuIGBuZXh0IGJ1aWxkYCByYW4gZnJvbSBvdXRzaWRlIHRoZSBwcm9qZWN0IGRpcmVjdG9yeVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGV4cGVjdCgoKSA9PiBidWlsZEFkYXB0ZXJNYW5pZmVzdChjdHgsIHsgYnVpbGRDd2Q6IFwiL3JlcG9cIiB9KSkudG9UaHJvdyhcbiAgICAgIC9tdXN0IHJ1biBmcm9tIHRoZSBOZXh0LmpzIHByb2plY3QgZGlyZWN0b3J5LyxcbiAgICApO1xuICB9KTtcblxuICBpdChcImRlZmF1bHRzIHRoZSBidWlsZCBjd2QgdG8gcHJvY2Vzcy5jd2QoKVwiLCAoKSA9PiB7XG4gICAgLy8gV2hpY2ggaXMgdGhpcyBwYWNrYWdlJ3Mgcm9vdCwgbmV2ZXIgYSBmaXh0dXJlJ3MgYC9yZXBvL+KApmAgcHJvamVjdCBkaXIsIHNvXG4gICAgLy8gdGhlIGFzc2VydGlvbiBmaXJlcyDigJQgcHJvdmluZyB0aGUgZGVmYXVsdCBpcyB3aXJlZCBhbmQgbm90IGp1c3QgdGhlIG9wdGlvbi5cbiAgICBleHBlY3QoKCkgPT4gYnVpbGRBZGFwdGVyTWFuaWZlc3QoYXNDb250ZXh0KGFwcFBsYXlncm91bmQpKSkudG9UaHJvdyhcbiAgICAgIC9tdXN0IHJ1biBmcm9tIHRoZSBOZXh0LmpzIHByb2plY3QgZGlyZWN0b3J5LyxcbiAgICApO1xuICB9KTtcblxuICBpdChcInJlY29yZHMgdGhlIGRlcGxveW1lbnRJZCwgcmVkdWNlZCB0byB3aGF0IGEgY2FjaGUga2V5IHByZWZpeCBjYW4gaG9sZFwiLCAoKSA9PiB7XG4gICAgLy8gYE5leHRqc0J1aWxkYCBzdWZmaXhlcyBpdHMgYGJ1aWxkSWRgIHdpdGggaXQ6IG5leHQgcGlucyB0aGUgYnVpbGQgSURcbiAgICAvLyBpdHNlbGYgb25jZSBgZGVwbG95bWVudElkYCBpcyBzZXQuXG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGJ1aWxkKHtcbiAgICAgIC4uLmN0eCxcbiAgICAgIGNvbmZpZzogeyAuLi5jdHguY29uZmlnLCBkZXBsb3ltZW50SWQ6IFwidjEuMi9tYWluXCIgfSxcbiAgICB9KTtcbiAgICBleHBlY3QobWFuaWZlc3QuY29uZmlnLmRlcGxveW1lbnRJZCkudG9CZShcInYxLTItbWFpblwiKTtcbiAgfSk7XG5cbiAgLy8gYGNhY2hlT2JqZWN0TmFtZWAgbGVhdmVzIHRoZSBge2J1aWxkSWR9L2AgcHJlZml4IDEyOCBieXRlczsgcGFzdCB0aGF0IGFcbiAgLy8gbG9uZyBlbm91Z2ggY2FjaGUgbmFtZSB3b3VsZCBiZSByZWplY3RlZCBieSBTMyBhbmQgbmV2ZXIgY2FjaGVkLlxuICBpdChcInRocm93cyB3aGVuIHRoZSBidWlsZCBJRCBhbmQgZGVwbG95bWVudElkIGxlYXZlIG5vIHJvb20gZm9yIGNhY2hlIG5hbWVzXCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgY29uc3Qgd2l0aERlcGxveW1lbnRJZCA9IChkZXBsb3ltZW50SWQ6IHN0cmluZykgPT5cbiAgICAgIGJ1aWxkKHsgLi4uY3R4LCBjb25maWc6IHsgLi4uY3R4LmNvbmZpZywgZGVwbG95bWVudElkIH0gfSk7XG4gICAgY29uc3Qgcm9vbSA9IDEyNyAtIGN0eC5idWlsZElkLmxlbmd0aCAtIDE7XG4gICAgZXhwZWN0KCgpID0+IHdpdGhEZXBsb3ltZW50SWQoXCJkXCIucmVwZWF0KHJvb20pKSkubm90LnRvVGhyb3coKTtcbiAgICBleHBlY3QoKCkgPT4gd2l0aERlcGxveW1lbnRJZChcImRcIi5yZXBlYXQocm9vbSArIDEpKSkudG9UaHJvdyhcbiAgICAgIC9Vc2UgYSBzaG9ydGVyIGRlcGxveW1lbnRJZC8sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJibGFtZXMgdGhlIGJ1aWxkIElEIGFsb25lIHdoZW4gdGhlIGFwcCBzZXRzIG5vIGRlcGxveW1lbnRJZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgYnVpbGQoe1xuICAgICAgICAuLi5jdHgsXG4gICAgICAgIGJ1aWxkSWQ6IFwiYlwiLnJlcGVhdCgxMjgpLFxuICAgICAgICBjb25maWc6IHsgLi4uY3R4LmNvbmZpZywgZGVwbG95bWVudElkOiBcIlwiIH0sXG4gICAgICB9KSxcbiAgICApLnRvVGhyb3coL1RoZSBidWlsZCBJRCBpcyAxMjggYnl0ZXMuKlVzZSBhIHNob3J0ZXIgZ2VuZXJhdGVCdWlsZElkXFwuLyk7XG4gIH0pO1xuXG4gIGl0KFwia2V5cyBsb2NhbGUgdmFyaWFudHMgb2Ygb25lIHBhZ2UgdG8gdGhlIHNhbWUgZW50cnlwb2ludCBmaWxlXCIsICgpID0+IHtcbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBidWlsZChhc0NvbnRleHQocGFnZXNJMThuKSk7XG4gICAgLy8gaTE4biBmYW5zIG9uZSBwYWdlIG91dCBpbnRvIG9uZSBvdXRwdXQgcGVyIGxvY2FsZSwgcGx1cyBhXG4gICAgLy8gYC9fbmV4dC9kYXRhLzxidWlsZElkPi/igKZqc29uYCBzaWJsaW5nIGVhY2guIFRoZXkgc2hhcmUgYGZpbGVQYXRoYCBhbmRcbiAgICAvLyBgdHlwZWA7IGBpZGAgc3RheXMgcGVyLXBhdGhuYW1lIChsb2NhbGUtcHJlZml4ZWQpLCBzbyBpdCBpcyBub3QgYSBkZWR1cCBrZXkuXG4gICAgY29uc3Qgc3NyID0gW1xuICAgICAgXCIvc3NyXCIsXG4gICAgICBcIi9lbi1VUy9zc3JcIixcbiAgICAgIFwiL2ZyL3NzclwiLFxuICAgICAgXCIvbmwtTkwvc3NyXCIsXG4gICAgICBgL19uZXh0L2RhdGEvJHttYW5pZmVzdC5idWlsZElkfS9mci9zc3IuanNvbmAsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IHBhdGhuYW1lIG9mIHNzcikge1xuICAgICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW3BhdGhuYW1lXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGZpbGVQYXRoOiBtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9zc3JcIl0uZmlsZVBhdGgsXG4gICAgICAgIHR5cGU6IFwicGFnZVwiLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbcGF0aG5hbWVdLmlkKS50b0JlKHBhdGhuYW1lKTtcbiAgICB9XG4gICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL3NzclwiXS50eXBlKS50b0JlKFwicGFnZVwiKTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvYXBpL2hlbGxvXCJdLnR5cGUpLnRvQmUoXCJwYWdlLWFwaVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJjYXJyaWVzIGJhc2VQYXRoIGluIHBhdGhuYW1lcyBidXQgbm90IGluIGVudHJ5cG9pbnQgaWRzXCIsICgpID0+IHtcbiAgICAvLyBgb3V0cHV0LnBhdGhuYW1lYCBpcyBiYXNlUGF0aC1wcmVmaXhlZCB3aGlsZSBgb3V0cHV0LmlkYCBpcyBub3QuIERpc3BhdGNoXG4gICAgLy8ga2V5cyBvZmYgdGhlIHBhdGhuYW1lLCBzbyB0aGUgcHJlZml4IGhhcyB0byBzdGF5LlxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGJ1aWxkKGFzQ29udGV4dChhcHBQbGF5Z3JvdW5kQmFzZVBhdGgpKTtcbiAgICBleHBlY3QobWFuaWZlc3QuY29uZmlnLmJhc2VQYXRoKS50b0JlKFwiL3Byb2RcIik7XG4gICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL3Byb2QvYXBpL2hlYWx0aFwiXSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvcHJvZC9hcGkvaGVhbHRoXCJdLmlkKS50b0JlKFwiL2FwaS9oZWFsdGhcIik7XG4gICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2FwaS9oZWFsdGhcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEEgUGFnZXMgUm91dGVyIGhvbWUgcGFnZSByZWFjaGVzIHVzIGFzIGAvaW5kZXhgLCB3aGljaGV2ZXIgcG9wdWxhdGlvbiBpdCBsYW5kc1xuICAgKiBpbjogYG5vcm1hbGl6ZVBhZ2VQYXRoKFwiL1wiKWAgaXMgYFwiL2luZGV4XCJgLCBhbmQgdGhlIGFkYXB0ZXIgaG9vayB1c2VzIGl0IGZvciBhXG4gICAqIGZ1bGx5LXN0YXRpYyBwYWdlJ3MgYFNUQVRJQ19GSUxFYCBhbmQgZm9yIGFuIFNTRy9TU1IgcGFnZSdzIGBQQUdFU2Agb3V0cHV0XG4gICAqIGFsaWtlLiBOb3RoaW5nIGVsc2UgaW4gdGhlIG91dHB1dHMgY2FycmllcyBgL2AsIHNvIHRoZSBtYXBwaW5nIHVuZGVyIHRlc3QgaXNcbiAgICogdGhlIG9ubHkgdGhpbmcgdGhhdCBtYWtlcyB0aGUgaG9tZSBwYWdlIHJvdXRhYmxlLlxuICAgKi9cbiAgZnVuY3Rpb24gd2l0aEhvbWVQYWdlKFxuICAgIGJhc2VQYXRoOiBzdHJpbmcsXG4gICAga2luZDogXCJzdGF0aWNcIiB8IFwiaW52b2NhYmxlXCIsXG4gICk6IFJldHVyblR5cGU8dHlwZW9mIGJ1aWxkPiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KHBhZ2VzSTE4bik7XG4gICAgY3R4LmNvbmZpZy5pMThuID0gbnVsbDtcbiAgICBjdHguY29uZmlnLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgY3R4Lm91dHB1dHMuc3RhdGljRmlsZXMgPSBbXTtcbiAgICBjdHgub3V0cHV0cy5wcmVyZW5kZXJzID0gW107XG4gICAgY29uc3QgcGFnZSA9IGN0eC5vdXRwdXRzLnBhZ2VzLmZpbmQoKG8pID0+IG8ucGF0aG5hbWUgPT09IFwiL3NzclwiKSE7XG4gICAgY3R4Lm91dHB1dHMucGFnZXMgPVxuICAgICAga2luZCA9PT0gXCJpbnZvY2FibGVcIlxuICAgICAgICA/IFt7IC4uLnBhZ2UsIGlkOiBcIi9pbmRleFwiLCBwYXRobmFtZTogYCR7YmFzZVBhdGh9L2luZGV4YCB9XVxuICAgICAgICA6IFtdO1xuICAgIGlmIChraW5kID09PSBcInN0YXRpY1wiKSB7XG4gICAgICBjdHgub3V0cHV0cy5zdGF0aWNGaWxlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIi9cIixcbiAgICAgICAgICBwYXRobmFtZTogYCR7YmFzZVBhdGh9L2luZGV4YCxcbiAgICAgICAgICB0eXBlOiBcIlNUQVRJQ19GSUxFXCIsXG4gICAgICAgICAgZmlsZVBhdGg6IFwiL3JlcG8vcGFnZXMtaTE4bi8ubmV4dC9zZXJ2ZXIvcGFnZXMvaW5kZXguaHRtbFwiLFxuICAgICAgICB9LFxuICAgICAgXSBhcyB0eXBlb2YgY3R4Lm91dHB1dHMuc3RhdGljRmlsZXM7XG4gICAgfVxuICAgIHJldHVybiBidWlsZChjdHgpO1xuICB9XG5cbiAgaXQoXCJyb3V0ZXMgYSBmdWxseS1zdGF0aWMgUGFnZXMgUm91dGVyIGhvbWUgcGFnZSBhdCBgL2AsIG5vdCBgL2luZGV4YFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gd2l0aEhvbWVQYWdlKFwiXCIsIFwic3RhdGljXCIpO1xuICAgIGNvbnN0IGh0bWwgPSBcInBhZ2VzLWkxOG4vLm5leHQvc2VydmVyL3BhZ2VzL2luZGV4Lmh0bWxcIjtcblxuICAgIGV4cGVjdChtYW5pZmVzdC5zdGF0aWNGaWxlc1tcIi9cIl0pLnRvQmUoaHRtbCk7XG4gICAgZXhwZWN0KG1hbmlmZXN0LnBhdGhuYW1lcykudG9Db250YWluKFwiL1wiKTtcbiAgICAvLyBLZXB0IGFzIHdlbGwgYXMgYC9gOiBuZXh0J3MgbWluaW1hbCBtb2RlIHJld3JpdGVzIGAvaW5kZXhgIHRvIGAvYCBiZWZvcmVcbiAgICAvLyBtYXRjaGluZywgc28gaXQgYW5zd2VycyB0aGVyZSB0b28uXG4gICAgZXhwZWN0KG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiL2luZGV4XCJdKS50b0JlKGh0bWwpO1xuICB9KTtcblxuICBpdChcInJvdXRlcyBhbiBTU0cgb3IgU1NSIGhvbWUgcGFnZSdzIGVudHJ5cG9pbnQgYXQgYC9gIGFzIHdlbGxcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IHdpdGhIb21lUGFnZShcIlwiLCBcImludm9jYWJsZVwiKTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvXCJdKS50b0VxdWFsKG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2luZGV4XCJdKTtcbiAgICBleHBlY3QobWFuaWZlc3QucGF0aG5hbWVzKS50b0NvbnRhaW4oXCIvXCIpO1xuICAgIC8vIFRoZSBvdXRwdXQncyBvd24gYGlkYCBpcyB3aGF0IG5leHQgcmVwb3J0ZWQsIGFuZCBvbmx5IG5hbWVzIHRoZSBlbnRyeXBvaW50XG4gICAgLy8gaW4gZGlhZ25vc3RpY3MgYW5kIGdyb3VwIG93bmVyc2hpcCAtIGl0IGlzIG5vdCBhIGtleSBpbnRvIGFueXRoaW5nLlxuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9cIl0uaWQpLnRvQmUoXCIvaW5kZXhcIik7XG4gIH0pO1xuXG4gIGl0KFwicm91dGVzIHRoYXQgaG9tZSBwYWdlIHVuZGVyIGJhc2VQYXRoIGF0IHRoZSBiYXNlUGF0aCBpdHNlbGZcIiwgKCkgPT4ge1xuICAgIC8vIGAvcHJvZGAsIG5vdCBgL3Byb2QvYCDigJQgd2hpY2ggaXMgaG93IHRoZSBBcHAgUm91dGVyIGZpeHR1cmUgcmVwb3J0cyBpdHMgb3duXG4gICAgLy8gaG9tZSBwYWdlLlxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IHdpdGhIb21lUGFnZShcIi9wcm9kXCIsIFwic3RhdGljXCIpO1xuICAgIGV4cGVjdChPYmplY3Qua2V5cyhtYW5pZmVzdC5zdGF0aWNGaWxlcykpLnRvRXF1YWwoW1wiL3Byb2RcIiwgXCIvcHJvZC9pbmRleFwiXSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGFuIEFwcCBSb3V0ZXIgYC9pbmRleGAgcm91dGUgYXQgYC9pbmRleGBcIiwgKCkgPT4ge1xuICAgIC8vIGBhcHAvaW5kZXgvcGFnZS50c3hgIGlzIGEgcmVhbCByb3V0ZS4gT25seSB0aGUgUGFnZXMgUm91dGVyIHJlcG9ydHMgaXRzXG4gICAgLy8gaG9tZSBwYWdlIGFzIGAvaW5kZXhgLlxuICAgIGNvbnN0IGN0eCA9IGFzQ29udGV4dChhcHBQbGF5Z3JvdW5kKTtcbiAgICBjb25zdCBob21lID0gY3R4Lm91dHB1dHMuYXBwUGFnZXMuZmluZCgobykgPT4gby5wYXRobmFtZSA9PT0gXCIvXCIpITtcbiAgICBjb25zdCBpbmRleEZpbGUgPSBob21lLmZpbGVQYXRoLnJlcGxhY2UoL3BhZ2VcXC5qcyQvLCBcImluZGV4L3BhZ2UuanNcIik7XG4gICAgY3R4Lm91dHB1dHMuYXBwUGFnZXMucHVzaCh7XG4gICAgICAuLi5ob21lLFxuICAgICAgaWQ6IFwiL2luZGV4XCIsXG4gICAgICBwYXRobmFtZTogXCIvaW5kZXhcIixcbiAgICAgIGZpbGVQYXRoOiBpbmRleEZpbGUsXG4gICAgfSk7XG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYnVpbGQoY3R4KTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvXCJdLmZpbGVQYXRoKS5ub3QudG9CZShcbiAgICAgIG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2luZGV4XCJdLmZpbGVQYXRoLFxuICAgICk7XG4gICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2luZGV4XCJdLmZpbGVQYXRoKS50b01hdGNoKC9pbmRleFxcL3BhZ2VcXC5qcyQvKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWNvcmRzIG1pZGRsZXdhcmUgd2l0aG91dCBkdXBsaWNhdGluZyBpdHMgbWF0Y2hlcnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG1hbmlmZXN0LFxuICAgICAgZ3JvdXBzOiBbeyBzdGFnaW5nIH1dLFxuICAgIH0gPSBidWlsZChhc0NvbnRleHQoYXBwUGxheWdyb3VuZCkpO1xuICAgIGV4cGVjdChtYW5pZmVzdC5taWRkbGV3YXJlKS5ub3QudG9CZU51bGwoKTtcbiAgICBleHBlY3QobWFuaWZlc3QubWlkZGxld2FyZSEuZmlsZVBhdGgpLnRvTWF0Y2goL15bXi9dLyk7XG4gICAgZXhwZWN0KHN0YWdpbmcuaGFzKG1hbmlmZXN0Lm1pZGRsZXdhcmUhLmZpbGVQYXRoKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QobWFuaWZlc3QubWlkZGxld2FyZSkubm90LnRvSGF2ZVByb3BlcnR5KFwibWF0Y2hlcnNcIik7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0OiBub01pZGRsZXdhcmUgfSA9IGJ1aWxkKGFzQ29udGV4dChwYWdlc0kxOG4pKTtcbiAgICBleHBlY3Qobm9NaWRkbGV3YXJlLm1pZGRsZXdhcmUpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KFwibWFwcyBhIFBhZ2VzIFJvdXRlciBkYXRhLXJvdXRlIHRlbXBsYXRlIHRvIGl0cyBvd25pbmcgcm91dGVcIiwgKCkgPT4ge1xuICAgIC8vIGAvX25leHQvZGF0YS88YnVpbGRJZD4vPGxvY2FsZT4vYmxvZy9bc2x1Z10uanNvbmAgZXhpc3RzIG9ubHkgYXMgYVxuICAgIC8vIHByZXJlbmRlci4gV2l0aG91dCBpdCwgdGhlIElTUiBkYXRhIFVSTHMgYG5leHQgc3RhcnRgIHNlcnZlcyB3b3VsZCA0MDQuXG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYnVpbGQoYXNDb250ZXh0KHBhZ2VzSTE4bikpO1xuICAgIGNvbnN0IGRhdGFUZW1wbGF0ZSA9IGAvX25leHQvZGF0YS8ke21hbmlmZXN0LmJ1aWxkSWR9L2ZyL2Jsb2cvW3NsdWddLmpzb25gO1xuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tkYXRhVGVtcGxhdGVdKS50b0VxdWFsKHtcbiAgICAgIGlkOiBkYXRhVGVtcGxhdGUsXG4gICAgICBmaWxlUGF0aDogbWFuaWZlc3QuZW50cnlwb2ludHNbXCIvZnIvYmxvZy9bc2x1Z11cIl0uZmlsZVBhdGgsXG4gICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICB9KTtcbiAgICBleHBlY3QobWFuaWZlc3QucGF0aG5hbWVzKS50b0NvbnRhaW4oZGF0YVRlbXBsYXRlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWdpc3RlcnMgYSBzdGF0aWMgZ2V0U3RhdGljUHJvcHMgcGFnZSdzIGRhdGEgcm91dGUsIHdoaWNoIG5vIHJ1bGUgcmVhY2hlc1wiLCAoKSA9PiB7XG4gICAgLy8gYHRlc3QvZTJlL25vLXBhZ2UtcHJvcHNgOiBgL19uZXh0L2RhdGEvPGJ1aWxkSWQ+L2dzcC5qc29uYCA0MDQnZCB3aGlsZVxuICAgIC8vIGBuZXh0IHN0YXJ0YCBzZXJ2ZXMgaXQgMjAwLCBzbyBldmVyeSBjbGllbnQtc2lkZSBuYXZpZ2F0aW9uIGludG8gdGhlIHBhZ2VcbiAgICAvLyBmZWxsIGJhY2sgdG8gYSBmdWxsIHBhZ2UgbG9hZC4gYG5leHQgYnVpbGRgIGVtaXRzIGEgYGR5bmFtaWNSb3V0ZXNgIHJ1bGUgZm9yXG4gICAgLy8gYSBkYXRhIHJvdXRlIG9ubHkgd2hlbiB0aGUgcGFnZSBpcyBkeW5hbWljIG9yIHRoZSBhcHAgaGFzIG1pZGRsZXdhcmUsIHNvXG4gICAgLy8gd2l0aG91dCBtaWRkbGV3YXJlIGEgKnN0YXRpYyogcGFnZSdzIGRhdGEgcm91dGUgYXJyaXZlcyBhcyBhIGNvbmNyZXRlXG4gICAgLy8gcHJlcmVuZGVyIHBhdGhuYW1lIHdpdGggbm90aGluZyB0byBtYXRjaCBpdC4gUmVwcm9kdWNlZCBvbiBgcGFnZXMtaTE4bmAsXG4gICAgLy8gd2hvc2UgY2FwdHVyZWQgcHJlcmVuZGVycyBhcmUgYWxsIGR5bmFtaWMsIGJ5IHJlbmFtaW5nIG9uZS5cbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQocGFnZXNJMThuKTtcbiAgICBjb25zdCBkYXRhUm91dGUgPSBgL19uZXh0L2RhdGEvJHtjdHguYnVpbGRJZH0vZW4tVVMvZ3NwLmpzb25gO1xuICAgIGNvbnN0IGNvbmNyZXRlID0gY3R4Lm91dHB1dHMucHJlcmVuZGVycy5maW5kKChpdCkgPT5cbiAgICAgIGl0LnBhdGhuYW1lLmVuZHNXaXRoKFwiaGVsbG8uanNvblwiKSxcbiAgICApITtcbiAgICBjb25jcmV0ZS5wYXRobmFtZSA9IGRhdGFSb3V0ZTtcbiAgICBjb25jcmV0ZS5pZCA9IGRhdGFSb3V0ZTtcbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBidWlsZChjdHgpO1xuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tkYXRhUm91dGVdKS50b0VxdWFsKHtcbiAgICAgIGlkOiBkYXRhUm91dGUsXG4gICAgICBmaWxlUGF0aDogbWFuaWZlc3QuZW50cnlwb2ludHNbXCIvZW4tVVMvYmxvZy9bc2x1Z11cIl0uZmlsZVBhdGgsXG4gICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICB9KTtcblxuICAgIC8vIEFuZCB0aGUgZHluYW1pYyBwYWdlJ3Mgb3duIGNvbmNyZXRlIGRhdGEgcGF0aG5hbWUgc3RheXMgb3V0OiB0aGUgdW5nYXRlZFxuICAgIC8vIGDigKYvYmxvZy9bc2x1Z10uanNvbmAgcnVsZSBhbHJlYWR5IHJlYWNoZXMgaXQsIGFuZCB0aGF0IHJ1bGUgaXMgd2hlcmUgdGhlXG4gICAgLy8gYG54dFBzbHVnYCBwYXJhbSBjb21lcyBmcm9tIOKAlCByZXNvbHZpbmcgdGhlIHJlcXVlc3QgdG8gaXRzZWxmIHdvdWxkIGRyb3AgaXQuXG4gICAgY29uc3QgeyBtYW5pZmVzdDogY2FwdHVyZWQgfSA9IGJ1aWxkKGFzQ29udGV4dChwYWdlc0kxOG4pKTtcbiAgICBleHBlY3QoXG4gICAgICBjYXB0dXJlZC5lbnRyeXBvaW50c1tcbiAgICAgICAgYC9fbmV4dC9kYXRhLyR7Y2FwdHVyZWQuYnVpbGRJZH0vZW4tVVMvYmxvZy9oZWxsby5qc29uYFxuICAgICAgXSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYW4gQXBwIFJvdXRlciBmYWxsYmFjayB0ZW1wbGF0ZSBvbiBpdHMgb3duIGVudHJ5cG9pbnRcIiwgKCkgPT4ge1xuICAgIC8vIGAvaXNyL1tpZF1gIGlzIGEgcHJlcmVuZGVyICphbmQqIGFuIGFwcFBhZ2VzIG91dHB1dC4gVGhlIG91dHB1dCB3aW5zLCBzb1xuICAgIC8vIGBpZGAgc3RheXMgdGhlIHJvdXRlJ3Mgb3duIHJhdGhlciB0aGFuIGJlaW5nIHJld3JpdHRlbi5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBidWlsZChhc0NvbnRleHQoYXBwUGxheWdyb3VuZCkpO1xuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9pc3IvW2lkXVwiXS5pZCkudG9CZShcIi9pc3IvW2lkXVwiKTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvaXNyL1tpZF0ucnNjXCJdKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcImFkZHMgYSBjb25jcmV0ZSBwcmVyZW5kZXIgcGF0aG5hbWUgd2hlbiBvbmx5IGEgZ2F0ZWQgcnVsZSBtYXRjaGVzIGl0XCIsICgpID0+IHtcbiAgICAvLyBXaGF0IGEgcm9vdC1wYXJhbXMgYXBwIHByb2R1Y2VzOiBgYXBwL1tsb2NhbGVdL3BhZ2UudHN4YCB3aXRoXG4gICAgLy8gYGdlbmVyYXRlU3RhdGljUGFyYW1zKClgIGFuZCBubyBgYXBwL2xheW91dC50c3hgLiBUaGUgcGFyYW1zIGNhbiBuZXZlciBiZVxuICAgIC8vIGZpbGxlZCBhdCByZXF1ZXN0IHRpbWUsIHNvIGBuZXh0IGJ1aWxkYCBlbWl0cyB0aGUgYGR5bmFtaWNSb3V0ZXNgIHJ1bGUgd2l0aCBhXG4gICAgLy8gZHJhZnQtbW9kZSBgaGFzYCBhbmQgZXhwZWN0cyB0aGUgcGxhdGZvcm0gdG8gc2VydmUgYC9lbmAgZnJvbSB0aGUgcHJlcmVuZGVyLlxuICAgIC8vIE1lYXN1cmVkIGFnYWluc3QgYHRlc3QvZTJlL2FwcC1kaXIvcGFyYWxsZWwtcm91dGVzLXJvb3QtcGFyYW0tZHluYW1pYy1jaGlsZGAsXG4gICAgLy8gd2hlcmUgZXZlcnkgVVJMIG9mIHRoZSBhcHAgNDA0J2QuIFJlcHJvZHVjZWQgaGVyZSBieSBnYXRpbmdcbiAgICAvLyBgYXBwLXBsYXlncm91bmRgJ3MgYC9pc3IvW2lkXWAgcnVsZXMsIHdoaWNoIG5vIGNvbW1pdHRlZCBjYXB0dXJlIGRvZXMuXG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGZvciAoY29uc3Qgcm91dGUgb2YgY3R4LnJvdXRpbmcuZHluYW1pY1JvdXRlcykge1xuICAgICAgaWYgKHJvdXRlLnNvdXJjZVJlZ2V4LmluY2x1ZGVzKFwiaXNyXCIpKSB7XG4gICAgICAgIHJvdXRlLmhhcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IFwiY29va2llXCIsIGtleTogXCJfX3ByZXJlbmRlcl9ieXBhc3NcIiwgdmFsdWU6IFwic2VjcmV0XCIgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYnVpbGQoY3R4KTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvaXNyLzFcIl0pLnRvRXF1YWwoe1xuICAgICAgaWQ6IFwiL2lzci8xXCIsXG4gICAgICBmaWxlUGF0aDogbWFuaWZlc3QuZW50cnlwb2ludHNbXCIvaXNyL1tpZF1cIl0uZmlsZVBhdGgsXG4gICAgICB0eXBlOiBcImFwcC1wYWdlXCIsXG4gICAgfSk7XG4gICAgLy8gVGhlIFJTQyBhbmQgc2VnbWVudC1wcmVmZXRjaCB2YXJpYW50cyB0b286IHRoZXkgYXJlIHRoZSBVUkxzIGEgY2xpZW50LXNpZGVcbiAgICAvLyBuYXZpZ2F0aW9uIGFza3MgZm9yLCBzbyB3aXRob3V0IHRoZW0gdGhlIGFwcCByZW5kZXJzIGFuZCBuZXZlciBoeWRyYXRlcy5cbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvaXNyLzEucnNjXCJdKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChcbiAgICAgIG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2lzci8xLnNlZ21lbnRzL2lzci8kZCRpZC9fX1BBR0VfXy5zZWdtZW50LnJzY1wiXSxcbiAgICApLnRvQmVEZWZpbmVkKCk7XG4gICAgLy8gVW5tdXRhdGVkLCB0aGUgc2FtZSBwYXRobmFtZXMgc3RheSBvdXQ6IHRoZSB1bmdhdGVkIHJ1bGUgYWxyZWFkeSByZWFjaGVzXG4gICAgLy8gYC9pc3IvW2lkXWAsIHdoaWNoIGlzIHdoZXJlIHRoZSBgbnh0UGlkYCBwYXJhbSBjb21lcyBmcm9tLlxuICAgIGNvbnN0IHsgbWFuaWZlc3Q6IHVuZ2F0ZWQgfSA9IGJ1aWxkKGFzQ29udGV4dChhcHBQbGF5Z3JvdW5kKSk7XG4gICAgZXhwZWN0KHVuZ2F0ZWQuZW50cnlwb2ludHNbXCIvaXNyLzFcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QodW5nYXRlZC5lbnRyeXBvaW50c1tcIi9pc3IvMS5yc2NcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICAvLyBBbmQgYSBwYXRobmFtZSBubyBydWxlIG1hdGNoZXMgYXQgYWxsIHN0YXlzIG91dCBlaXRoZXIgd2F5OiBgcmVzb2x2ZVJvdXRlc2BcbiAgICAvLyBuZXZlciByZXNvbHZlcyBhIHN0YXRpYyByb3V0ZSdzIHNlZ21lbnQgb3V0cHV0cywgc28gbGlzdGluZyB0aGVtIGlzIHdlaWdodC5cbiAgICBleHBlY3QoXG4gICAgICBtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9pbmRleC5zZWdtZW50cy9fdHJlZS5zZWdtZW50LnJzY1wiXSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgcHVibGljLyBvdXQgb2YgdGhlIG1hbmlmZXN0IGFuZCB0aGUgc3RhZ2luZyBwbGFuXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBUaGUgY29udGFpbmVyIHJ1bnRpbWUgbGlzdHMgYHB1YmxpYy9gIG9mZiBkaXNrIGF0IGNvbGQgc3RhcnRcbiAgICAvLyAoYHJlYWRQdWJsaWNGaWxlc2ApLCBiZWNhdXNlIG9ubHkgdGhlIGRpc2sgaGFzIHdoYXQgYSBgcG9zdGJ1aWxkYCB3cm90ZVxuICAgIC8vIGludG8gaXQgYWZ0ZXIgdGhpcyBob29rIHJhbjsgYW5kIHRoZSBMYW1iZGEgdHlwZXMgbmV2ZXIgc2VydmUgaXQuXG4gICAgY29uc3QgcmVwb1Jvb3QgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1wdWJsaWMtXCIpKTtcbiAgICAvLyBFdmVyeSBwYXRoIGluIHRoZSBmaXh0dXJlLCByZWJhc2VkIGZyb20gYC9yZXBvYCBvbnRvIGEgcmVhbCBkaXJlY3RvcnkuXG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KFxuICAgICAgSlNPTi5wYXJzZShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoYXBwUGxheWdyb3VuZEJhc2VQYXRoKS5yZXBsYWNlQWxsKFxuICAgICAgICAgICdcIi9yZXBvJyxcbiAgICAgICAgICBgXCIke3JlcG9Sb290fWAsXG4gICAgICAgICksXG4gICAgICApLFxuICAgICk7XG4gICAgYXdhaXQgbWtkaXIoam9pbihjdHgucHJvamVjdERpciwgXCJwdWJsaWNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGN0eC5wcm9qZWN0RGlyLCBcInB1YmxpY1wiLCBcInRlc3QudHh0XCIpLCBcImhlbGxvXCIpO1xuXG4gICAgY29uc3Qge1xuICAgICAgbWFuaWZlc3QsXG4gICAgICBncm91cHM6IFt7IHN0YWdpbmcgfV0sXG4gICAgfSA9IGJ1aWxkKGN0eCk7XG4gICAgZXhwZWN0KFxuICAgICAgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdC5zdGF0aWNGaWxlcykuZmlsdGVyKChrZXkpID0+XG4gICAgICAgIGtleS5pbmNsdWRlcyhcIi9wdWJsaWMvXCIpLFxuICAgICAgKSxcbiAgICApLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChtYW5pZmVzdC5wYXRobmFtZXMpLm5vdC50b0NvbnRhaW4oXCIvcHJvZC90ZXN0LnR4dFwiKTtcbiAgICBleHBlY3QoXG4gICAgICBbLi4uc3RhZ2luZy5rZXlzKCldLmZpbHRlcigoa2V5KSA9PiBrZXkuaW5jbHVkZXMoXCIvcHVibGljL1wiKSksXG4gICAgKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJ3YXJucyBpbnN0ZWFkIG9mIHRocm93aW5nIHdoZW4gYSB0ZW1wbGF0ZSBoYXMgbm8gb3duaW5nIHJvdXRlXCIsICgpID0+IHtcbiAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQocGFnZXNJMThuKTtcbiAgICBjdHgub3V0cHV0cy5wcmVyZW5kZXJzWzBdLnJvdXRlID0gXCIvZ29uZS9bc2x1Z11cIjtcbiAgICBjdHgub3V0cHV0cy5wcmVyZW5kZXJzWzBdLnBhdGhuYW1lID0gXCIvZ29uZS9bc2x1Z11cIjtcbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBidWlsZChjdHgpO1xuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9nb25lL1tzbHVnXVwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChcbiAgICAgIHdhcm4ubW9jay5jYWxsc1xuICAgICAgICAubWFwKChjYWxsKSA9PiBTdHJpbmcoY2FsbFswXSkpXG4gICAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UuaW5jbHVkZXMoXCJ3aWxsIDQwNFwiKSksXG4gICAgKS50b0VxdWFsKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCcvZ29uZS9bc2x1Z10gKHJvdXRlOiBcIi9nb25lL1tzbHVnXVwiKScpLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcIndhcm5zIG9uY2UgcGVyIHVuc3VwcG9ydGVkIHJvdXRlIGNvbmZpZyBrZXlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGJ1aWxkKGFzQ29udGV4dChwYWdlc0kxOG4pKTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHdhcm4ubW9jay5jYWxscy5tYXAoKGNhbGwpID0+IFN0cmluZyhjYWxsWzBdKSk7XG4gICAgZXhwZWN0KG1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS5pbmNsdWRlcyhcImBtYXhEdXJhdGlvbmBcIikpKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KG1lc3NhZ2VzWzBdKS50b0NvbnRhaW4oXCJzc3JcIik7XG4gICAgZXhwZWN0KG1lc3NhZ2VzWzBdKS50b0NvbnRhaW4oXCJvdmVycmlkZXNcIik7XG4gICAgZXhwZWN0KG1lc3NhZ2VzLnNvbWUoKG0pID0+IG0uaW5jbHVkZXMoXCJgcHJlZmVycmVkUmVnaW9uYFwiKSkpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInRocm93cyBvbiBhbiBlZGdlLXJ1bnRpbWUgb3V0cHV0XCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgY3R4Lm91dHB1dHMuYXBwUm91dGVzWzBdLnJ1bnRpbWUgPSBcImVkZ2VcIjtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdyhcbiAgICAgIC9jYW5ub3QgZGVwbG95IHJvdXRlcyBidWlsdCBmb3IgdGhlIGVkZ2UgcnVudGltZS8sXG4gICAgKTtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdyhjdHgub3V0cHV0cy5hcHBSb3V0ZXNbMF0uc291cmNlUGFnZSk7XG4gIH0pO1xuXG4gIGl0KFwiYmxhbWVzIG1pZGRsZXdhcmUsIG5vdCBgL2AsIGZvciBlZGdlLXJ1bnRpbWUgbWlkZGxld2FyZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGNvbnN0IG1pZGRsZXdhcmUgPSBjdHgub3V0cHV0cy5taWRkbGV3YXJlO1xuICAgIGlmICghbWlkZGxld2FyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZml4dHVyZSBoYXMgbm8gbWlkZGxld2FyZSBvdXRwdXRcIik7XG4gICAgfVxuICAgIC8vIFdoYXQgYSBsZWdhY3kgYG1pZGRsZXdhcmUudHNgIGJ1aWxkcyB0by4gSXRzIGBzb3VyY2VQYWdlYCBpcyBgL2AsIHNvIHRoZVxuICAgIC8vIHJlZ3Jlc3Npb24gZ3VhcmRlZCBoZXJlIGlzIHRoZSBtZXNzYWdlIHRlbGxpbmcgYW4gYXV0aG9yIHRvIGVkaXQgdGhlIGhvbWVcbiAgICAvLyBwYWdlLlxuICAgIG1pZGRsZXdhcmUucnVudGltZSA9IFwiZWRnZVwiO1xuXG4gICAgZXhwZWN0KCgpID0+IGJ1aWxkKGN0eCkpLnRvVGhyb3coXG4gICAgICAvY2Fubm90IGRlcGxveSBtaWRkbGV3YXJlIGJ1aWx0IGZvciB0aGUgZWRnZSBydW50aW1lLyxcbiAgICApO1xuICAgIGV4cGVjdCgoKSA9PiBidWlsZChjdHgpKS50b1Rocm93KG1pZGRsZXdhcmUuZmlsZVBhdGgpO1xuICAgIC8vIEJvdGggd2F5cyBvdXQ6IGBtaWRkbGV3YXJlLnRzYCBvbmx5IGRlZmF1bHRzIHRvIGVkZ2UuXG4gICAgZXhwZWN0KCgpID0+IGJ1aWxkKGN0eCkpLnRvVGhyb3coL3J1bnRpbWU6IFwibm9kZWpzXCIvKTtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdygvcHJveHlcXC50cy8pO1xuICAgIGV4cGVjdCgoKSA9PiBidWlsZChjdHgpKS5ub3QudG9UaHJvdygvZWRnZS1vbmx5Lyk7XG4gICAgZXhwZWN0KCgpID0+IGJ1aWxkKGN0eCkpLm5vdC50b1Rocm93KFxuICAgICAgL2Nhbm5vdCBkZXBsb3kgcm91dGVzIGJ1aWx0IGZvciB0aGUgZWRnZSBydW50aW1lLyxcbiAgICApO1xuICB9KTtcblxuICBpdChcInRocm93cyB3aGVuIHR3byBvdXRwdXRzIG1hcCBvbmUga2V5IHRvIGRpZmZlcmVudCBjb250ZW50XCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgY29uc3QgW2ZpcnN0LCBzZWNvbmRdID0gY3R4Lm91dHB1dHMuYXBwUGFnZXM7XG4gICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoZmlyc3QuYXNzZXRzKVswXTtcbiAgICBmaXJzdC5hc3NldHNIYXNoZXNba2V5XSA9IFwiaGFzaC1hXCI7XG4gICAgc2Vjb25kLmFzc2V0c1trZXldID0gZmlyc3QuYXNzZXRzW2tleV07XG4gICAgc2Vjb25kLmFzc2V0c0hhc2hlc1trZXldID0gXCJoYXNoLWJcIjtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdygvbWFwIFwiW15cIl0rXCIgdG8gZGlmZmVyZW50IGNvbnRlbnQvKTtcbiAgfSk7XG5cbiAgaXQoXCJ0aHJvd3Mgb24gYW4gYXNzZXQga2V5IG91dHNpZGUgdGhlIGRlcGxveW1lbnQgcm9vdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGN0eC5vdXRwdXRzLmFwcFBhZ2VzWzBdLmFzc2V0c1tcIi4uL2VzY2FwZS5qc1wiXSA9IFwiL2Vsc2V3aGVyZS9lc2NhcGUuanNcIjtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdygvb3V0c2lkZSB0aGUgZGVwbG95bWVudCByb290Lyk7XG4gIH0pO1xuXG4gIGl0KFwidGhyb3dzIG9uIGFuIGFzc2V0IGtleSBzaGFkb3dpbmcgdGhlIHJlc2VydmVkIHJ1bnRpbWUgZGlyZWN0b3J5XCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgY3R4Lm91dHB1dHMuYXBwUGFnZXNbMF0uYXNzZXRzW2Ake1JVTlRJTUVfRElSX05BTUV9L2xhbWJkYS5tanNgXSA9XG4gICAgICBcIi9yZXBvL3doYXRldmVyLm1qc1wiO1xuICAgIGV4cGVjdCgoKSA9PiBidWlsZChjdHgpKS50b1Rocm93KFxuICAgICAgbmV3IFJlZ0V4cChgXCIke1JVTlRJTUVfRElSX05BTUV9L1wiIGlzIHJlc2VydmVkYCksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJ0aHJvd3Mgd2hlbiB0d28gb3V0cHV0cyBjbGFpbSBvbmUgcGF0aG5hbWUgZnJvbSBkaWZmZXJlbnQgZmlsZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IGFzQ29udGV4dChhcHBQbGF5Z3JvdW5kKTtcbiAgICBjdHgub3V0cHV0cy5hcHBSb3V0ZXNbMF0ucGF0aG5hbWUgPSBjdHgub3V0cHV0cy5hcHBQYWdlc1swXS5wYXRobmFtZTtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdygvY2xhaW0gdGhlIHBhdGhuYW1lIFwiW15cIl0rXCIvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ3cml0ZUJ1aWxkT3V0cHV0c1wiLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBCdWlsZHMgYSB0aHJvd2F3YXkgcmVwbyBvbiBkaXNrIHNvIHN0YWdpbmcgY2FuIGJlIGV4ZXJjaXNlZCBmb3IgcmVhbDpcbiAgICogZml4dHVyZSBzb3VyY2VzIGFyZSBgL3JlcG9gIHBsYWNlaG9sZGVycyBhbmQgY2Fubm90IGJlIGNvcGllZC5cbiAgICovXG4gIC8qKlxuICAgKiBBIGBuZXh0YCBpbnN0YWxsIGp1c3QgcmVhbCBlbm91Z2ggZm9yIHtAbGluayBhZGRSdW50aW1lTmV4dENsb3N1cmV9OiB0aGVcbiAgICogbW9kdWxlcyBgc3JjL3J1bnRpbWUvaW1hZ2UudHNgIHJlcXVpcmVzLCBvbmUgZmlsZSBvbmx5IHRoZSB0cmFjZSByZWFjaGVzLCBhbmRcbiAgICogYSBzdGFuZC1pbiBmb3IgbmV4dCdzIHZlbmRvcmVkIGBAdmVyY2VsL25mdGAgdGhhdCByZXBvcnRzIHRoZW0uIFRyYWNpbmcgZm9yXG4gICAqIHJlYWwgaXMgbmV4dCdzIGpvYiwgbm90IG91cnM7IHdoYXQgaXMgdW5kZXIgdGVzdCBpcyB0aGF0IHRoZSBjbG9zdXJlIGlzXG4gICAqIHJlc29sdmVkIGZyb20gdGhlIHByb2plY3QgZGlyIGFuZCBzdGFnZWQgdW5kZXIgcmVwby1yb290LXJlbGF0aXZlIGtleXMuXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBpbnN0YWxsRmFrZU5leHQoXG4gICAgcmVwb1Jvb3Q6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IHBucG0/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgLy8gVW5kZXIgcG5wbSwgYG5leHRgIGxpdmVzIGluIHRoZSB2aXJ0dWFsIHN0b3JlIGJlaGluZCBhIGxpbmssIGFuZCBpdHMgb3duXG4gICAgLy8gZGVwZW5kZW5jaWVzIGFyZSBsaW5rcyBiZXNpZGUgaXQuXG4gICAgY29uc3Qgc3RvcmVNb2R1bGVzID0gam9pbihcbiAgICAgIHJlcG9Sb290LFxuICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgIFwiLnBucG1cIixcbiAgICAgIFwibmV4dEAxLjAuMFwiLFxuICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICApO1xuICAgIGNvbnN0IG5leHRSb290ID0gb3B0aW9ucy5wbnBtXG4gICAgICA/IGpvaW4oc3RvcmVNb2R1bGVzLCBcIm5leHRcIilcbiAgICAgIDogam9pbihyZXBvUm9vdCwgXCJub2RlX21vZHVsZXNcIiwgXCJuZXh0XCIpO1xuICAgIGlmIChvcHRpb25zLnBucG0pIHtcbiAgICAgIGNvbnN0IG5leHRFbnYgPSBqb2luKFxuICAgICAgICByZXBvUm9vdCxcbiAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgXCIucG5wbVwiLFxuICAgICAgICBcIkBuZXh0K2VudkAxLjAuMFwiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgICBcIkBuZXh0XCIsXG4gICAgICAgIFwiZW52XCIsXG4gICAgICApO1xuICAgICAgYXdhaXQgbWtkaXIobmV4dEVudiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihuZXh0RW52LCBcImluZGV4LmpzXCIpLCBcIi8vIEBuZXh0L2VudlxcblwiKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgICAgam9pbihuZXh0RW52LCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBcIkBuZXh0L2VudlwiLCBtYWluOiBcImluZGV4LmpzXCIgfSksXG4gICAgICApO1xuICAgICAgYXdhaXQgbWtkaXIoam9pbihzdG9yZU1vZHVsZXMsIFwiQG5leHRcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgc3ltbGluayhcbiAgICAgICAgXCIuLi8uLi8uLi9AbmV4dCtlbnZAMS4wLjAvbm9kZV9tb2R1bGVzL0BuZXh0L2VudlwiLFxuICAgICAgICBqb2luKHN0b3JlTW9kdWxlcywgXCJAbmV4dFwiLCBcImVudlwiKSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBta2RpcihuZXh0Um9vdCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCBzeW1saW5rKFxuICAgICAgICBcIi5wbnBtL25leHRAMS4wLjAvbm9kZV9tb2R1bGVzL25leHRcIixcbiAgICAgICAgam9pbihyZXBvUm9vdCwgXCJub2RlX21vZHVsZXNcIiwgXCJuZXh0XCIpLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICBcImRpc3Qvc2VydmVyL2NvbmZpZy1zaGFyZWQuanNcIixcbiAgICAgIFwiZGlzdC9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZy5qc1wiLFxuICAgICAgXCJkaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIixcbiAgICAgIFwiZGlzdC9zZXJ2ZXIvc2VydmUtc3RhdGljLmpzXCIsXG4gICAgICBcImRpc3Qvc2VydmVyL2xpYi9yb3V0ZXItdXRpbHMvaW5zdHJ1bWVudGF0aW9uLWdsb2JhbHMuZXh0ZXJuYWwuanNcIixcbiAgICAgIC8vIFJlYWNoZWQgb25seSB0aHJvdWdoIHRoZSB0cmFjZSwgaS5lLiB0aGUgcmVhc29uIHRyYWNpbmcgaXMgbmVlZGVkLlxuICAgICAgXCJkaXN0L3NoYXJlZC9saWIvbWF0Y2gtcmVtb3RlLXBhdHRlcm4uanNcIixcbiAgICBdO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgcGF0aCA9IGpvaW4obmV4dFJvb3QsIGZpbGUpO1xuICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUocGF0aCwgYC8vICR7ZmlsZX1cXG5gKTtcbiAgICB9XG4gICAgLy8gTm8gYGV4cG9ydHNgIGZpZWxkOiBgbmV4dC9kaXN0LyoqYCBpcyByZXF1aXJlZCBieSBwYXRoLlxuICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgIGpvaW4obmV4dFJvb3QsIFwicGFja2FnZS5qc29uXCIpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBcIm5leHRcIiwgdmVyc2lvbjogXCIwLjAuMC10ZXN0XCIgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYWNlciA9IGpvaW4obmV4dFJvb3QsIFwiZGlzdFwiLCBcImNvbXBpbGVkXCIsIFwiQHZlcmNlbFwiLCBcIm5mdFwiKTtcbiAgICBhd2FpdCBta2Rpcih0cmFjZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgIGpvaW4odHJhY2VyLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJAdmVyY2VsL25mdFwiLCBtYWluOiBcImluZGV4LmpzXCIgfSksXG4gICAgKTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKHRyYWNlciwgXCJpbmRleC5qc1wiKSxcbiAgICAgIC8vIFJlYWwgbmZ0IHJldHVybnMgcGF0aHMgcmVsYXRpdmUgdG8gYGJhc2VgLCB3aGljaCBpcyB0aGUgcmVwbyByb290IHRoZVxuICAgICAgLy8gYWRhcHRlciBwYXNzZXMuXG4gICAgICBgY29uc3QgcHJlZml4ID0gJHtKU09OLnN0cmluZ2lmeShyZWxhdGl2ZShyZXBvUm9vdCwgbmV4dFJvb3QpLnNwbGl0KHNlcCkuam9pbihcIi9cIikpfTtcXG5gICtcbiAgICAgICAgXCJjb25zdCB7IHJlYWxwYXRoU3luYyB9ID0gcmVxdWlyZSgnbm9kZTpmcycpO1xcblwiICtcbiAgICAgICAgXCJjb25zdCB7IHJlbGF0aXZlIH0gPSByZXF1aXJlKCdub2RlOnBhdGgnKTtcXG5cIiArXG4gICAgICAgIFwiZXhwb3J0cy5ub2RlRmlsZVRyYWNlID0gYXN5bmMgKGVudHJpZXMsIHsgYmFzZSB9KSA9PiB7XFxuXCIgK1xuICAgICAgICAvLyBMaWtlIHJlYWwgbmZ0LCB0aGUgZW50cmllcyB0aGVtc2VsdmVzIGFyZSBpbiB0aGUgbGlzdC5cbiAgICAgICAgXCIgIGNvbnN0IHRyYWNlZCA9IGVudHJpZXNcXG5cIiArXG4gICAgICAgIFwiICAgIC5tYXAoKGUpID0+IHJlbGF0aXZlKHJlYWxwYXRoU3luYyhiYXNlKSwgZSkpXFxuXCIgK1xuICAgICAgICBcIiAgICAuZmlsdGVyKChlKSA9PiAhZS5zdGFydHNXaXRoKCcuLicpKTtcXG5cIiArXG4gICAgICAgIFwiICBpZiAodHJhY2VkLnNvbWUoKGUpID0+IGUuZW5kc1dpdGgoJ2ltYWdlLW9wdGltaXplci5qcycpKSkge1xcblwiICtcbiAgICAgICAgXCIgICAgdHJhY2VkLnB1c2goYCR7cHJlZml4fS9kaXN0L3NoYXJlZC9saWIvbWF0Y2gtcmVtb3RlLXBhdHRlcm4uanNgKTtcXG5cIiArXG4gICAgICAgIFwiICB9XFxuXCIgK1xuICAgICAgICBcIiAgcmV0dXJuIHsgZmlsZUxpc3Q6IG5ldyBTZXQodHJhY2VkKSB9O1xcblwiICtcbiAgICAgICAgXCJ9O1xcblwiLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBtYWtlUmVwbyhcbiAgICBvcHRpb25zOiB7IHdpdGhOZXh0PzogYm9vbGVhbjsgcG5wbU5leHQ/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgcmVwb1Jvb3QgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1zdGFnaW5nLVwiKSk7XG4gICAgaWYgKG9wdGlvbnMud2l0aE5leHQgfHwgb3B0aW9ucy5wbnBtTmV4dCkge1xuICAgICAgYXdhaXQgaW5zdGFsbEZha2VOZXh0KHJlcG9Sb290LCB7IHBucG06IG9wdGlvbnMucG5wbU5leHQgfSk7XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3REaXIgPSBqb2luKHJlcG9Sb290LCBcImFwcFwiKTtcbiAgICBjb25zdCBkaXN0RGlyID0gam9pbihwcm9qZWN0RGlyLCBcIi5uZXh0XCIpO1xuICAgIGNvbnN0IGVudHJ5ID0gam9pbihkaXN0RGlyLCBcInNlcnZlclwiLCBcImFwcFwiLCBcInBhZ2UuanNcIik7XG4gICAgY29uc3QgZGVwID0gam9pbihwcm9qZWN0RGlyLCBcIm5vZGVfbW9kdWxlc1wiLCBcImRlcFwiKTtcbiAgICBjb25zdCBzdG9yZSA9IGpvaW4ocmVwb1Jvb3QsIFwic3RvcmVcIiwgXCJwa2dcIik7XG4gICAgLy8gcG5wbSdzIHZpcnR1YWwgc3RvcmU6IG9uZSBwYWNrYWdlIHJlYWNoYWJsZSBvbmx5IGZyb20gaW5zaWRlIGl0LCBhbmQgb25lXG4gICAgLy8gdGhhdCBhbHNvIGhhcyBhIGxvZ2ljYWwgcGF0aCAoYGFwcC9ub2RlX21vZHVsZXMvZGVwYCkuXG4gICAgY29uc3QgdmlydHVhbFN0b3JlID0gam9pbihyZXBvUm9vdCwgXCJub2RlX21vZHVsZXNcIiwgXCIucG5wbVwiKTtcbiAgICBjb25zdCBoaWRkZW4gPSBqb2luKFxuICAgICAgdmlydHVhbFN0b3JlLFxuICAgICAgXCJoZWxwZXJzQDEuMC4wXCIsXG4gICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgXCJAc2NvcGVcIixcbiAgICAgIFwiaGVscGVyc1wiLFxuICAgICk7XG4gICAgY29uc3QgZGVwSW5TdG9yZSA9IGpvaW4odmlydHVhbFN0b3JlLCBcImRlcEAxLjAuMFwiLCBcIm5vZGVfbW9kdWxlc1wiLCBcImRlcFwiKTtcbiAgICAvLyBUaGUgc2hhcGUgdGhhdCBtYWtlcyBhIHN0b3JlIHBhY2thZ2UgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBzdG9yZVxuICAgIC8vIHBhY2thZ2U6IGEgbGluayBiZXR3ZWVuIHR3byBzdG9yZSBkaXJlY3Rvcmllcywgbm8gZmlsZXMgb2YgaXRzIG93bi5cbiAgICBjb25zdCBoaWRkZW5MaW5rID0gam9pbihcbiAgICAgIHZpcnR1YWxTdG9yZSxcbiAgICAgIFwiZGVwQDEuMC4wXCIsXG4gICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgXCJAc2NvcGVcIixcbiAgICAgIFwiaGVscGVyc1wiLFxuICAgICk7XG5cbiAgICBhd2FpdCBta2Rpcihqb2luKGRpc3REaXIsIFwic2VydmVyXCIsIFwiYXBwXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBFdmVyeSBkZXBsb3ltZW50IHJvb3QgbmVlZHMgdGhpcywgYW5kIGBsb2FkUnVudGltZWAgcmVmdXNlcyB0byBzZXJ2ZVxuICAgIC8vIHdpdGhvdXQgaXQsIHNvIHRoZSBzdGFnaW5nIHBsYW4gY2FycmllcyBpdCBpbmRlcGVuZGVudGx5IG9mIGFueSBvdXRwdXQnc1xuICAgIC8vIHRyYWNlZCBhc3NldHMuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oZGlzdERpciwgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiKSwgXCJ7fVxcblwiKTtcbiAgICBhd2FpdCBta2RpcihkZXAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IG1rZGlyKHN0b3JlLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBta2RpcihoaWRkZW4sIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IG1rZGlyKGRlcEluU3RvcmUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShlbnRyeSwgXCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xcblwiKTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihkZXAsIFwiaW5kZXguanNcIiksIFwiLy8gZGVwXFxuXCIpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHN0b3JlLCBcImluZGV4LmpzXCIpLCBcIi8vIHN0b3JlXFxuXCIpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGhpZGRlbiwgXCJpbmRleC5qc1wiKSwgXCIvLyBoZWxwZXJzXFxuXCIpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGRlcEluU3RvcmUsIFwiaW5kZXguanNcIiksIFwiLy8gZGVwXFxuXCIpO1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoaGlkZGVuTGluayksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN5bWxpbmsoXG4gICAgICBqb2luKFxuICAgICAgICBcIi4uXCIsXG4gICAgICAgIFwiLi5cIixcbiAgICAgICAgXCIuLlwiLFxuICAgICAgICBcImhlbHBlcnNAMS4wLjBcIixcbiAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgXCJAc2NvcGVcIixcbiAgICAgICAgXCJoZWxwZXJzXCIsXG4gICAgICApLFxuICAgICAgaGlkZGVuTGluayxcbiAgICApO1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHByb2plY3REaXIsIFwiLmVudlwiKSwgXCJTSEFSRUQ9MVxcblwiKTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihwcm9qZWN0RGlyLCBcIi5lbnYucHJvZHVjdGlvblwiKSwgXCJQUk9EPTFcXG5cIik7XG4gICAgLy8gQSByZWxhdGl2ZSBsaW5rIHdob3NlIHRhcmdldCBpcyBpdHNlbGYgc3RhZ2VkOiBwbnBtJ3MgY29tbW9uIHNoYXBlLlxuICAgIGF3YWl0IHN5bWxpbmsoXCJkZXBcIiwgam9pbihwcm9qZWN0RGlyLCBcIm5vZGVfbW9kdWxlc1wiLCBcInJlbC1saW5rXCIpKTtcbiAgICAvLyBBbiBhYnNvbHV0ZSBsaW5rIG91dCBvZiB0aGUgdHJlZTogc3RhZ2luZyBtdXN0IG1hdGVyaWFsaXplIGl0IGluc3RlYWQuXG4gICAgYXdhaXQgc3ltbGluayhzdG9yZSwgam9pbihwcm9qZWN0RGlyLCBcIm5vZGVfbW9kdWxlc1wiLCBcImFicy1saW5rXCIpKTtcblxuICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgIGlkOiBcIi9cIixcbiAgICAgIHBhdGhuYW1lOiBcIi9cIixcbiAgICAgIHNvdXJjZVBhZ2U6IFwiL3BhZ2VcIixcbiAgICAgIGZpbGVQYXRoOiBlbnRyeSxcbiAgICAgIHJ1bnRpbWU6IFwibm9kZWpzXCIsXG4gICAgICBjb25maWc6IHt9LFxuICAgICAgYXNzZXRzOiB7XG4gICAgICAgIFwiYXBwL25vZGVfbW9kdWxlcy9kZXAvaW5kZXguanNcIjogam9pbihkZXAsIFwiaW5kZXguanNcIiksXG4gICAgICAgIFwiYXBwL25vZGVfbW9kdWxlcy9yZWwtbGlua1wiOiBqb2luKFxuICAgICAgICAgIHByb2plY3REaXIsXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcInJlbC1saW5rXCIsXG4gICAgICAgICksXG4gICAgICAgIFwiYXBwL25vZGVfbW9kdWxlcy9hYnMtbGlua1wiOiBqb2luKFxuICAgICAgICAgIHByb2plY3REaXIsXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcImFicy1saW5rXCIsXG4gICAgICAgICksXG4gICAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL2hlbHBlcnNAMS4wLjAvbm9kZV9tb2R1bGVzL0BzY29wZS9oZWxwZXJzL2luZGV4LmpzXCI6XG4gICAgICAgICAgam9pbihoaWRkZW4sIFwiaW5kZXguanNcIiksXG4gICAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL2RlcEAxLjAuMC9ub2RlX21vZHVsZXMvZGVwL2luZGV4LmpzXCI6IGpvaW4oXG4gICAgICAgICAgZGVwSW5TdG9yZSxcbiAgICAgICAgICBcImluZGV4LmpzXCIsXG4gICAgICAgICksXG4gICAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL2RlcEAxLjAuMC9ub2RlX21vZHVsZXMvQHNjb3BlL2hlbHBlcnNcIjogaGlkZGVuTGluayxcbiAgICAgIH0sXG4gICAgICBhc3NldHNIYXNoZXM6IHt9LFxuICAgIH07XG5cbiAgICBjb25zdCBjdHggPSB7XG4gICAgICByZXBvUm9vdCxcbiAgICAgIHByb2plY3REaXIsXG4gICAgICBkaXN0RGlyLFxuICAgICAgYnVpbGRJZDogXCJ0ZXN0LWJ1aWxkXCIsXG4gICAgICBuZXh0VmVyc2lvbjogXCIxNi4zLjVcIixcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBiYXNlUGF0aDogXCJcIixcbiAgICAgICAgdHJhaWxpbmdTbGFzaDogZmFsc2UsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIlwiLFxuICAgICAgICBpMThuOiBudWxsLFxuICAgICAgfSxcbiAgICAgIHJvdXRpbmc6IHsgZHluYW1pY1JvdXRlczogW10gfSxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgcGFnZXM6IFtdLFxuICAgICAgICBwYWdlc0FwaTogW10sXG4gICAgICAgIGFwcFBhZ2VzOiBbb3V0cHV0XSxcbiAgICAgICAgYXBwUm91dGVzOiBbXSxcbiAgICAgICAgcHJlcmVuZGVyczogW10sXG4gICAgICAgIHN0YXRpY0ZpbGVzOiBbXSxcbiAgICAgICAgbWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9IGFzIHVua25vd24gYXMgQnVpbGRDb21wbGV0ZUNvbnRleHQ7XG5cbiAgICByZXR1cm4geyBjdHgsIHJlcG9Sb290IH07XG4gIH1cblxuICBpdChcInN0YWdlcyB0aGUgdHJlZSwgcHJlc2VydmVzIHN5bWxpbmtzLCBhbmQgd3JpdGVzIHRoZSBtYW5pZmVzdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjdHggfSA9IGF3YWl0IG1ha2VSZXBvKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JpdGUoY3R4KTtcblxuICAgIGV4cGVjdChzb2xlUm9vdChyZXN1bHQpKS50b0JlKFxuICAgICAgam9pbihjdHguZGlzdERpciwgXCJjZGstbmV4dGpzLWFkYXB0ZXJcIiwgXCJhcHBcIiksXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YWdlZCA9ICguLi5wYXJ0czogc3RyaW5nW10pID0+IGpvaW4oc29sZVJvb3QocmVzdWx0KSwgLi4ucGFydHMpO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHJlYWRGaWxlKHN0YWdlZChcImFwcFwiLCBcIi5uZXh0XCIsIFwic2VydmVyXCIsIFwiYXBwXCIsIFwicGFnZS5qc1wiKSwgXCJ1dGY4XCIpLFxuICAgICkucmVzb2x2ZXMudG9Db250YWluKFwibW9kdWxlLmV4cG9ydHNcIik7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgcmVhZEZpbGUoc3RhZ2VkKFwiYXBwXCIsIFwibm9kZV9tb2R1bGVzXCIsIFwiZGVwXCIsIFwiaW5kZXguanNcIiksIFwidXRmOFwiKSxcbiAgICApLnJlc29sdmVzLnRvQ29udGFpbihcImRlcFwiKTtcblxuICAgIC8vIGBjb3B5RmlsZWAgZmFpbHMgb3V0cmlnaHQgb24gYSBkaXJlY3Rvcnkgc3ltbGluaywgYW5kIGRlcmVmZXJlbmNpbmcgdGhlXG4gICAgLy8gcG5wbSBzdG9yZSB0cmlwbGVzIHRoZSB0cmVlIGFnYWluc3QgdGhlIDI1MCBNQiB1bnppcHBlZCBMYW1iZGEgbGltaXQuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgbHN0YXQoc3RhZ2VkKFwiYXBwXCIsIFwibm9kZV9tb2R1bGVzXCIsIFwicmVsLWxpbmtcIikpLnRoZW4oKHMpID0+XG4gICAgICAgIHMuaXNTeW1ib2xpY0xpbmsoKSxcbiAgICAgICksXG4gICAgKS5yZXNvbHZlcy50b0JlKHRydWUpO1xuICAgIC8vIFBvaW50cyBvdXRzaWRlIHRoZSBkZXBsb3ltZW50IHJvb3QsIHNvIGl0IHdvdWxkIGRhbmdsZSBpbiBMYW1iZGEuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgbHN0YXQoc3RhZ2VkKFwiYXBwXCIsIFwibm9kZV9tb2R1bGVzXCIsIFwiYWJzLWxpbmtcIikpLnRoZW4oKHMpID0+XG4gICAgICAgIHMuaXNTeW1ib2xpY0xpbmsoKSxcbiAgICAgICksXG4gICAgKS5yZXNvbHZlcy50b0JlKGZhbHNlKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICByZWFkRmlsZShzdGFnZWQoXCJhcHBcIiwgXCJub2RlX21vZHVsZXNcIiwgXCJhYnMtbGlua1wiLCBcImluZGV4LmpzXCIpLCBcInV0ZjhcIiksXG4gICAgKS5yZXNvbHZlcy50b0NvbnRhaW4oXCJzdG9yZVwiKTtcblxuICAgIC8vIGB3cml0ZVN0YW5kYWxvbmVEaXJlY3RvcnlgIGNvcGllcyB0aGVzZTsgYG9uQnVpbGRDb21wbGV0ZWAgaGFzIG5vXG4gICAgLy8gZXF1aXZhbGVudCwgc28gZHJvcHBpbmcgYG91dHB1dDogXCJzdGFuZGFsb25lXCJgIGRyb3BzIHRoZW0gc2lsZW50bHkuXG4gICAgYXdhaXQgZXhwZWN0KHJlYWRGaWxlKHN0YWdlZChcImFwcFwiLCBcIi5lbnZcIiksIFwidXRmOFwiKSkucmVzb2x2ZXMudG9Db250YWluKFxuICAgICAgXCJTSEFSRUQ9MVwiLFxuICAgICk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgcmVhZEZpbGUoc3RhZ2VkKFwiYXBwXCIsIFwiLmVudi5wcm9kdWN0aW9uXCIpLCBcInV0ZjhcIiksXG4gICAgKS5yZXNvbHZlcy50b0NvbnRhaW4oXCJQUk9EPTFcIik7XG5cbiAgICBjb25zdCB3cml0dGVuID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShyZXN1bHQubWFuaWZlc3RQYXRoLCBcInV0ZjhcIikpO1xuICAgIGV4cGVjdCh3cml0dGVuKS50b0VxdWFsKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzdWx0Lm1hbmlmZXN0KSkpO1xuICAgIGV4cGVjdCh3cml0dGVuLnJlbGF0aXZlUHJvamVjdERpcikudG9CZShcImFwcFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgc3RvcmUtb25seSBwYWNrYWdlcyBpbiB0aGUgc3RvcmUsIGJlaGluZCB0aGVpciBsaW5rc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjdHggfSA9IGF3YWl0IG1ha2VSZXBvKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JpdGUoY3R4KTtcbiAgICBjb25zdCBzdGFnZWQgPSAoLi4ucGFydHM6IHN0cmluZ1tdKSA9PiBqb2luKHNvbGVSb290KHJlc3VsdCksIC4uLnBhcnRzKTtcblxuICAgIC8vIE5vZGUgcmVzb2x2ZXMgYEBzY29wZS9oZWxwZXJzYCBmcm9tIGBkZXBgIHRocm91Z2ggdGhlIHN0b3JlIGxpbmssIGFzIGl0XG4gICAgLy8gZG9lcyBpbiB0aGUgd29ya3NwYWNlLCBzbyBsb25nIGFzIG5vdGhpbmcgZGVyZWZlcmVuY2VzIHRoZSB0cmVlICh0aGVcbiAgICAvLyBGdW5jdGlvbnMgemlwIGtlZXBzIGxpbmtzIGFzIGxpbmtzKS4gQSBjb3B5IGF0IHRoZSByb290IGlzIGRlYWQgd2VpZ2h0LlxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGxzdGF0KHN0YWdlZChcIm5vZGVfbW9kdWxlc1wiLCBcIkBzY29wZVwiLCBcImhlbHBlcnNcIikpLFxuICAgICkucmVqZWN0cy50b1Rocm93KC9FTk9FTlQvKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBsc3RhdChcbiAgICAgICAgc3RhZ2VkKFxuICAgICAgICAgIFwibm9kZV9tb2R1bGVzXCIsXG4gICAgICAgICAgXCIucG5wbVwiLFxuICAgICAgICAgIFwiZGVwQDEuMC4wXCIsXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcIkBzY29wZVwiLFxuICAgICAgICAgIFwiaGVscGVyc1wiLFxuICAgICAgICApLFxuICAgICAgKS50aGVuKChzKSA9PiBzLmlzU3ltYm9saWNMaW5rKCkpLFxuICAgICkucmVzb2x2ZXMudG9CZSh0cnVlKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICByZWFkRmlsZShcbiAgICAgICAgc3RhZ2VkKFxuICAgICAgICAgIFwibm9kZV9tb2R1bGVzXCIsXG4gICAgICAgICAgXCIucG5wbVwiLFxuICAgICAgICAgIFwiZGVwQDEuMC4wXCIsXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcIkBzY29wZVwiLFxuICAgICAgICAgIFwiaGVscGVyc1wiLFxuICAgICAgICAgIFwiaW5kZXguanNcIixcbiAgICAgICAgKSxcbiAgICAgICAgXCJ1dGY4XCIsXG4gICAgICApLFxuICAgICkucmVzb2x2ZXMudG9Db250YWluKFwiaGVscGVyc1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJzdGFnZXMgdGhlIG5leHQgY2xvc3VyZSB0aGUgcnVudGltZSdzIGltYWdlIG9wdGltaXplciByZXF1aXJlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gYG5leHQgYnVpbGRgIHRyYWNlcyB3aGF0IHRoZSAqYXBwKiByZWFjaGVzLCBhbmQgbm8gYXBwIHJlYWNoZXMgbmV4dCdzXG4gICAgLy8gaW1hZ2Ugb3B0aW1pemVyLCBzbyB3aXRob3V0IHRoaXMgZXZlcnkgL19uZXh0L2ltYWdlIHJlcXVlc3QgNTAwcyBvbiBhXG4gICAgLy8gTU9EVUxFX05PVF9GT1VORCB0aGF0IG5vdGhpbmcgaW4gdGhlIGJ1aWxkIHdhcm5lZCBhYm91dC5cbiAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVJlcG8oeyB3aXRoTmV4dDogdHJ1ZSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cml0ZShjdHgpO1xuICAgIGNvbnN0IHN0YWdlZCA9ICguLi5wYXJ0czogc3RyaW5nW10pID0+IGpvaW4oc29sZVJvb3QocmVzdWx0KSwgLi4ucGFydHMpO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgcmVhZEZpbGUoXG4gICAgICAgIHN0YWdlZChcIm5vZGVfbW9kdWxlc1wiLCBcIm5leHRcIiwgXCJkaXN0XCIsIFwic2VydmVyXCIsIFwiaW1hZ2Utb3B0aW1pemVyLmpzXCIpLFxuICAgICAgICBcInV0ZjhcIixcbiAgICAgICksXG4gICAgKS5yZXNvbHZlcy50b0NvbnRhaW4oXCJpbWFnZS1vcHRpbWl6ZXJcIik7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgcmVhZEZpbGUoXG4gICAgICAgIHN0YWdlZChcbiAgICAgICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgICAgIFwibmV4dFwiLFxuICAgICAgICAgIFwiZGlzdFwiLFxuICAgICAgICAgIFwic2hhcmVkXCIsXG4gICAgICAgICAgXCJsaWJcIixcbiAgICAgICAgICBcIm1hdGNoLXJlbW90ZS1wYXR0ZXJuLmpzXCIsXG4gICAgICAgICksXG4gICAgICAgIFwidXRmOFwiLFxuICAgICAgKSxcbiAgICApLnJlc29sdmVzLnRvQ29udGFpbihcIm1hdGNoLXJlbW90ZS1wYXR0ZXJuXCIpO1xuICB9KTtcblxuICBpdChcInN0YWdlcyB0aGUgbGluayBuZXh0IHJlc29sdmVzIEBuZXh0L2VudiB0aHJvdWdoIHVuZGVyIHBucG1cIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFRoZSB0cmFjZSBzdGFydHMgYXQgYEBuZXh0L2VudmAncyByZWFsIHBhdGggYW5kIHNvIG5ldmVyIHJlY29yZHMgdGhlXG4gICAgLy8gbGluayBiZXNpZGUgYG5leHRgOyB3aXRob3V0IGl0IGV2ZXJ5IGNvbGQgc3RhcnQgdGhyZXcgXCJDYW5ub3QgZmluZFxuICAgIC8vIG1vZHVsZSAnQG5leHQvZW52J1wiLlxuICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlUmVwbyh7IHBucG1OZXh0OiB0cnVlIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyaXRlKGN0eCk7XG4gICAgY29uc3QgbGluayA9IGpvaW4oXG4gICAgICBzb2xlUm9vdChyZXN1bHQpLFxuICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgIFwiLnBucG1cIixcbiAgICAgIFwibmV4dEAxLjAuMFwiLFxuICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgIFwiQG5leHRcIixcbiAgICAgIFwiZW52XCIsXG4gICAgKTtcbiAgICBleHBlY3QoKGF3YWl0IGxzdGF0KGxpbmspKS5pc1N5bWJvbGljTGluaygpKS50b0JlKHRydWUpO1xuICAgIGF3YWl0IGV4cGVjdChyZWFkRmlsZShqb2luKGxpbmssIFwiaW5kZXguanNcIiksIFwidXRmOFwiKSkucmVzb2x2ZXMudG9Db250YWluKFxuICAgICAgXCJAbmV4dC9lbnZcIixcbiAgICApO1xuICB9KTtcblxuICBpdChcIndhcm5zIGluc3RlYWQgb2YgZmFpbGluZyB3aGVuIG5leHQgY2Fubm90IGJlIHJlc29sdmVkIGZvciB0cmFjaW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVJlcG8oKTtcbiAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBhd2FpdCBleHBlY3Qod3JpdGUoY3R4KSkucmVzb2x2ZXMudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3Qod2FybikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcIi9fbmV4dC9pbWFnZSB3aWxsIGZhaWwgYXQgcnVudGltZVwiKSxcbiAgICApO1xuICB9KTtcblxuICBpdChcInJlbW92ZXMgYSBwcmV2aW91cyBidWlsZCdzIHRyZWUgYmVmb3JlIHN0YWdpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlUmVwbygpO1xuICAgIGNvbnN0IGZpcnN0ID0gYXdhaXQgd3JpdGUoY3R4KTtcbiAgICBjb25zdCBzdGFsZSA9IGpvaW4oc29sZVJvb3QoZmlyc3QpLCBcImFwcFwiLCBcInN0YWxlLmpzXCIpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShzdGFsZSwgXCIvLyByZW1vdmVkIHJvdXRlXFxuXCIpO1xuXG4gICAgYXdhaXQgd3JpdGUoY3R4KTtcbiAgICBhd2FpdCBleHBlY3QobHN0YXQoc3RhbGUpKS5yZWplY3RzLnRvVGhyb3coL0VOT0VOVC8pO1xuICB9KTtcblxuICBkZXNjcmliZShcIndpdGggZnVuY3Rpb25Hcm91cHNcIiwgKCkgPT4ge1xuICAgIC8qKlxuICAgICAqIFR3byByb3V0ZXMgd2l0aCBvbmUgYXNzZXQgZWFjaCwgc28gXCJ0aGUgZ3JvdXAncyB0cmVlIGhvbGRzIGl0cyBvd24gcm91dGVcbiAgICAgKiBhbmQgbm90IHRoZSBvdGhlcidzXCIgaXMgY2hlY2thYmxlIGJ5IGZpbGUuIERlbGliZXJhdGVseSBub3QgYG1ha2VSZXBvYCdzXG4gICAgICogcmVwbzogaXRzIHNpbmdsZSBvdXRwdXQgY2Fubm90IGJlIHNwbGl0LlxuICAgICAqL1xuICAgIGFzeW5jIGZ1bmN0aW9uIG1ha2VTcGxpdHRhYmxlUmVwbyhcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgd2l0aE5vdEZvdW5kPzogYm9vbGVhbjtcbiAgICAgICAgd2l0aFBhZ2VzU3NyPzogYm9vbGVhbjtcbiAgICAgICAgd2l0aE5leHQ/OiBib29sZWFuO1xuICAgICAgfSA9IHt9LFxuICAgICkge1xuICAgICAgY29uc3QgcmVwb1Jvb3QgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1ncm91cHMtXCIpKTtcbiAgICAgIGlmIChvcHRpb25zLndpdGhOZXh0KSB7XG4gICAgICAgIGF3YWl0IGluc3RhbGxGYWtlTmV4dChyZXBvUm9vdCk7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9qZWN0RGlyID0gam9pbihyZXBvUm9vdCwgXCJhcHBcIik7XG4gICAgICBjb25zdCBkaXN0RGlyID0gam9pbihwcm9qZWN0RGlyLCBcIi5uZXh0XCIpO1xuICAgICAgYXdhaXQgbWtkaXIoam9pbihkaXN0RGlyLCBcInNlcnZlclwiLCBcImFwcFwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihkaXN0RGlyLCBcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIpLCBcInt9XFxuXCIpO1xuXG4gICAgICBjb25zdCBvdXRwdXRGb3IgPSBhc3luYyAobmFtZTogc3RyaW5nLCBwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gam9pbihkaXN0RGlyLCBcInNlcnZlclwiLCBcImFwcFwiLCBgJHtuYW1lfS5qc2ApO1xuICAgICAgICBjb25zdCBhc3NldCA9IGpvaW4ocHJvamVjdERpciwgXCJub2RlX21vZHVsZXNcIiwgbmFtZSwgXCJpbmRleC5qc1wiKTtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShhc3NldCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUoZW50cnksIGAvLyAke25hbWV9XFxuYCk7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShhc3NldCwgYC8vICR7bmFtZX0gZGVwXFxuYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IHBhdGhuYW1lLFxuICAgICAgICAgIHBhdGhuYW1lLFxuICAgICAgICAgIHNvdXJjZVBhZ2U6IHBhdGhuYW1lLFxuICAgICAgICAgIGZpbGVQYXRoOiBlbnRyeSxcbiAgICAgICAgICBydW50aW1lOiBcIm5vZGVqc1wiLFxuICAgICAgICAgIGNvbmZpZzoge30sXG4gICAgICAgICAgYXNzZXRzOiB7IFtgYXBwL25vZGVfbW9kdWxlcy8ke25hbWV9L2luZGV4LmpzYF06IGFzc2V0IH0sXG4gICAgICAgICAgYXNzZXRzSGFzaGVzOiB7fSxcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgcmVwb1Jvb3QsXG4gICAgICAgIHByb2plY3REaXIsXG4gICAgICAgIGRpc3REaXIsXG4gICAgICAgIGJ1aWxkSWQ6IFwidGVzdC1idWlsZFwiLFxuICAgICAgICBuZXh0VmVyc2lvbjogXCIxNi4zLjVcIixcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgYmFzZVBhdGg6IFwiXCIsXG4gICAgICAgICAgdHJhaWxpbmdTbGFzaDogZmFsc2UsXG4gICAgICAgICAgYXNzZXRQcmVmaXg6IFwiXCIsXG4gICAgICAgICAgaTE4bjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgcm91dGluZzogeyBkeW5hbWljUm91dGVzOiBbXSB9LFxuICAgICAgICBvdXRwdXRzOiB7XG4gICAgICAgICAgcGFnZXM6IG9wdGlvbnMud2l0aFBhZ2VzU3NyXG4gICAgICAgICAgICA/IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IG91dHB1dEZvcihcInNzclwiLCBcIi9zc3JcIik7XG4gICAgICAgICAgICAgICAgLy8gQSBzZXBhcmF0ZSBvdXRwdXQsIHdpdGggaXRzIG93biBpZCwgYmFja2VkIGJ5IHRoZSBzYW1lIGZpbGUuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YVJvdXRlID0gXCIvX25leHQvZGF0YS90ZXN0LWJ1aWxkL3Nzci5qc29uXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtwYWdlLCB7IC4uLnBhZ2UsIGlkOiBkYXRhUm91dGUsIHBhdGhuYW1lOiBkYXRhUm91dGUgfV07XG4gICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgcGFnZXNBcGk6IFtdLFxuICAgICAgICAgIGFwcFBhZ2VzOiBbXG4gICAgICAgICAgICBhd2FpdCBvdXRwdXRGb3IoXCJob21lXCIsIFwiL1wiKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLndpdGhOb3RGb3VuZFxuICAgICAgICAgICAgICA/IFthd2FpdCBvdXRwdXRGb3IoXCJub3QtZm91bmRcIiwgXCIvX25vdC1mb3VuZFwiKV1cbiAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhcHBSb3V0ZXM6IFthd2FpdCBvdXRwdXRGb3IoXCJyZXBvcnRzXCIsIFwiL2FwaS9yZXBvcnRzL1tpZF1cIildLFxuICAgICAgICAgIHByZXJlbmRlcnM6IFtdLFxuICAgICAgICAgIHN0YXRpY0ZpbGVzOiBbXSxcbiAgICAgICAgICBtaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9IGFzIHVua25vd24gYXMgQnVpbGRDb21wbGV0ZUNvbnRleHQ7XG4gICAgICByZXR1cm4geyBjdHggfTtcbiAgICB9XG5cbiAgICBjb25zdCBncm91cHMgPSBbeyBuYW1lOiBcInJlcG9ydHNcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfV07XG5cbiAgICBpdChcInJlY29yZHMgdGhlIGFzc2lnbm1lbnQgaW4gdGhlIG1hbmlmZXN0IGV2ZXJ5IGdyb3VwIHNoYXJlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVNwbGl0dGFibGVSZXBvKCk7XG4gICAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBidWlsZEFkYXB0ZXJNYW5pZmVzdChjdHgsIHtcbiAgICAgICAgYnVpbGRDd2Q6IGN0eC5wcm9qZWN0RGlyLFxuICAgICAgICBmdW5jdGlvbkdyb3VwczogZ3JvdXBzLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobWFuaWZlc3QuZ3JvdXBzKS50b0VxdWFsKHtcbiAgICAgICAgZGVmYXVsdDogW1wiL1wiXSxcbiAgICAgICAgcmVwb3J0czogW1wiL2FwaS9yZXBvcnRzL1tpZF1cIl0sXG4gICAgICB9KTtcbiAgICAgIC8vIFdoYXQgc3ludGggY29tcGFyZXMgaXRzIG93biBwcm9wcyB3aXRoLCB0byBjYXRjaCBhIHN0YWxlIGJ1aWxkLlxuICAgICAgZXhwZWN0KG1hbmlmZXN0LmZ1bmN0aW9uR3JvdXBzKS50b0VxdWFsKGdyb3Vwcyk7XG4gICAgICAvLyBBbmQgd2hhdCBpdCBkZXBsb3lzLCBhcyB0aGUgYXNzaWdubWVudCBjaGVja2VkIGl0LlxuICAgICAgZXhwZWN0KG1hbmlmZXN0LmJlaGF2aW9ycykudG9FcXVhbChbXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cDogXCJyZXBvcnRzXCIsXG4gICAgICAgICAgcm91dGU6IFwiL2FwaS9yZXBvcnRzLyoqXCIsXG4gICAgICAgICAgcGF0dGVybjogXCJhcGkvcmVwb3J0cy8qXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwic3RhZ2VzIG9uZSB0cmVlIHBlciBncm91cCwgZWFjaCBob2xkaW5nIG9ubHkgaXRzIG93biByb3V0ZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjdHggfSA9IGF3YWl0IG1ha2VTcGxpdHRhYmxlUmVwbygpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JpdGVCdWlsZE91dHB1dHMoY3R4LCB7XG4gICAgICAgIGJ1aWxkQ3dkOiBjdHgucHJvamVjdERpcixcbiAgICAgICAgZnVuY3Rpb25Hcm91cHM6IGdyb3VwcyxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0LnN0YWdlZEdyb3Vwcy5tYXAoKGdyb3VwKSA9PiBncm91cC5uYW1lKS5zb3J0KCkpLnRvRXF1YWwoW1xuICAgICAgICBcImRlZmF1bHRcIixcbiAgICAgICAgXCJyZXBvcnRzXCIsXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IHBhdGhPZiA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSByZXN1bHQuc3RhZ2VkR3JvdXBzLmZpbmQoKGl0KSA9PiBpdC5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3RhZ2VkIGdyb3VwIFwiJHtuYW1lfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyb3VwLnBhdGg7XG4gICAgICB9O1xuICAgICAgLy8gVW5kZXIgYGdyb3Vwcy88bmFtZT4vYCwgc28gbmVpdGhlciBjYW4gY29sbGlkZSB3aXRoIHRoZSB1bnNwbGl0IGxheW91dC5cbiAgICAgIGV4cGVjdChwYXRoT2YoXCJyZXBvcnRzXCIpKS50b0JlKFxuICAgICAgICBqb2luKGN0eC5kaXN0RGlyLCBcImNkay1uZXh0anMtYWRhcHRlclwiLCBcImdyb3Vwc1wiLCBcInJlcG9ydHNcIiksXG4gICAgICApO1xuICAgICAgZXhwZWN0KHBhdGhPZihcImRlZmF1bHRcIikpLnRvQmUoXG4gICAgICAgIGpvaW4oY3R4LmRpc3REaXIsIFwiY2RrLW5leHRqcy1hZGFwdGVyXCIsIFwiZ3JvdXBzXCIsIFwiZGVmYXVsdFwiKSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGhhcyA9IChuYW1lOiBzdHJpbmcsIC4uLnBhcnRzOiBzdHJpbmdbXSkgPT5cbiAgICAgICAgbHN0YXQoam9pbihwYXRoT2YobmFtZSksIC4uLnBhcnRzKSkudGhlbihcbiAgICAgICAgICAoKSA9PiB0cnVlLFxuICAgICAgICAgICgpID0+IGZhbHNlLFxuICAgICAgICApO1xuICAgICAgYXdhaXQgZXhwZWN0KFxuICAgICAgICBoYXMoXCJyZXBvcnRzXCIsIFwiYXBwXCIsIFwiLm5leHRcIiwgXCJzZXJ2ZXJcIiwgXCJhcHBcIiwgXCJyZXBvcnRzLmpzXCIpLFxuICAgICAgKS5yZXNvbHZlcy50b0JlKHRydWUpO1xuICAgICAgYXdhaXQgZXhwZWN0KFxuICAgICAgICBoYXMoXCJyZXBvcnRzXCIsIFwiYXBwXCIsIFwibm9kZV9tb2R1bGVzXCIsIFwicmVwb3J0c1wiLCBcImluZGV4LmpzXCIpLFxuICAgICAgKS5yZXNvbHZlcy50b0JlKHRydWUpO1xuICAgICAgLy8gVGhlIHBvaW50IG9mIHNwbGl0dGluZzogdGhlIG90aGVyIGdyb3VwJ3Mgcm91dGUgaXMgYWJzZW50LlxuICAgICAgYXdhaXQgZXhwZWN0KFxuICAgICAgICBoYXMoXCJyZXBvcnRzXCIsIFwiYXBwXCIsIFwiLm5leHRcIiwgXCJzZXJ2ZXJcIiwgXCJhcHBcIiwgXCJob21lLmpzXCIpLFxuICAgICAgKS5yZXNvbHZlcy50b0JlKGZhbHNlKTtcbiAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgaGFzKFwiZGVmYXVsdFwiLCBcImFwcFwiLCBcIi5uZXh0XCIsIFwic2VydmVyXCIsIFwiYXBwXCIsIFwiaG9tZS5qc1wiKSxcbiAgICAgICkucmVzb2x2ZXMudG9CZSh0cnVlKTtcbiAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgaGFzKFwiZGVmYXVsdFwiLCBcImFwcFwiLCBcIi5uZXh0XCIsIFwic2VydmVyXCIsIFwiYXBwXCIsIFwicmVwb3J0cy5qc1wiKSxcbiAgICAgICkucmVzb2x2ZXMudG9CZShmYWxzZSk7XG4gICAgICAvLyBUaGUgbWFuaWZlc3QgaXMgd3JpdHRlbiBvbmNlLCBhYm92ZSB0aGUgZ3JvdXBzOyBgTmV4dGpzQnVpbGRgIGNvcGllcyBpdFxuICAgICAgLy8gYW5kIHRoZSBydW50aW1lIHNoZWxsIGludG8gZWFjaCBncm91cCdzIHJlc2VydmVkIHJ1bnRpbWUgZGlyIGFmdGVyd2FyZHMsXG4gICAgICAvLyBzbyBubyBncm91cCdzIHN0YWdlZCB0cmVlIG1heSBjb250YWluIHRoYXQgZGlyZWN0b3J5IHlldC5cbiAgICAgIGV4cGVjdChyZXN1bHQubWFuaWZlc3RQYXRoKS50b0JlKFxuICAgICAgICBqb2luKGN0eC5kaXN0RGlyLCBcImNkay1uZXh0anMtYWRhcHRlclwiLCBcIm1hbmlmZXN0Lmpzb25cIiksXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFtcImRlZmF1bHRcIiwgXCJyZXBvcnRzXCJdKSB7XG4gICAgICAgIGF3YWl0IGV4cGVjdChoYXMobmFtZSwgUlVOVElNRV9ESVJfTkFNRSkpLnJlc29sdmVzLnRvQmUoZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCBpcyBub3QgYW55IG91dHB1dCdzIHRyYWNlZCBhc3NldCwgc28gYVxuICAgICAgLy8gZ3JvdXAgdGhhdCByZWFjaGVzIGl0IG9ubHkgdGhyb3VnaCB0aGUgb3V0cHV0cyBpdCBvd25zIGRvZXMgbm90IGdldCBpdCAtXG4gICAgICAvLyBhbmQgYGxvYWRSdW50aW1lYCBwcm9iZXMgZm9yIGl0IGJlZm9yZSBzZXJ2aW5nIGFueXRoaW5nLCBzbyB0aGUgd2hvbGVcbiAgICAgIC8vIHJvb3QgYW5zd2VycyBcInRoZSBkZXBsb3ltZW50IHBhY2thZ2UgaXMgaW5jb21wbGV0ZVwiIHdpdGhvdXQgaXQuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW1wiZGVmYXVsdFwiLCBcInJlcG9ydHNcIl0pIHtcbiAgICAgICAgYXdhaXQgZXhwZWN0KFxuICAgICAgICAgIGhhcyhuYW1lLCBcImFwcFwiLCBcIi5uZXh0XCIsIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIiksXG4gICAgICAgICkucmVzb2x2ZXMudG9CZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KFwic3RhZ2VzIHRoZSBpbWFnZSBvcHRpbWl6ZXIgaW50byBkZWZhdWx0IG9ubHksIHNlcnZlLXN0YXRpYyBpbnRvIGV2ZXJ5IGdyb3VwXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE9ubHkgYGRlZmF1bHRgIGFuc3dlcnMgYC9fbmV4dC9pbWFnZWAsIGFuZCB0aGUgb3B0aW1pemVyIGlzIHdoYXQgcHVsbHNcbiAgICAgIC8vIGBzaGFycGAgaW47IHByZXJlbmRlcmVkIGFuZCBzdGF0aWMgcmVzdWx0cyBhcmUgc2VydmVkIHdpdGhcbiAgICAgIC8vIGBzZXJ2ZS1zdGF0aWNgIGluIHdoaWNoZXZlciBncm91cCB0aGV5IGxhbmQuXG4gICAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVNwbGl0dGFibGVSZXBvKHsgd2l0aE5leHQ6IHRydWUgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cml0ZUJ1aWxkT3V0cHV0cyhjdHgsIHtcbiAgICAgICAgYnVpbGRDd2Q6IGN0eC5wcm9qZWN0RGlyLFxuICAgICAgICBmdW5jdGlvbkdyb3VwczogZ3JvdXBzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBoYXMgPSAobmFtZTogc3RyaW5nLCBmaWxlOiBzdHJpbmcpID0+XG4gICAgICAgIGxzdGF0KFxuICAgICAgICAgIGpvaW4oXG4gICAgICAgICAgICByZXN1bHQuc3RhZ2VkR3JvdXBzLmZpbmQoKGl0KSA9PiBpdC5uYW1lID09PSBuYW1lKSEucGF0aCxcbiAgICAgICAgICAgIFwibm9kZV9tb2R1bGVzXCIsXG4gICAgICAgICAgICBcIm5leHRcIixcbiAgICAgICAgICAgIFwiZGlzdFwiLFxuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICApLFxuICAgICAgICApLnRoZW4oXG4gICAgICAgICAgKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAoKSA9PiBmYWxzZSxcbiAgICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBbXG4gICAgICAgIFwic2VydmVyL2ltYWdlLW9wdGltaXplci5qc1wiLFxuICAgICAgICBcInNoYXJlZC9saWIvaW1hZ2UtY29uZmlnLmpzXCIsXG4gICAgICAgIFwic2VydmVyL2NvbmZpZy1zaGFyZWQuanNcIixcbiAgICAgICAgXCJzaGFyZWQvbGliL21hdGNoLXJlbW90ZS1wYXR0ZXJuLmpzXCIsXG4gICAgICBdKSB7XG4gICAgICAgIGF3YWl0IGV4cGVjdChoYXMoXCJkZWZhdWx0XCIsIGZpbGUpKS5yZXNvbHZlcy50b0JlKHRydWUpO1xuICAgICAgICBhd2FpdCBleHBlY3QoaGFzKFwicmVwb3J0c1wiLCBmaWxlKSkucmVzb2x2ZXMudG9CZShmYWxzZSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW1wiZGVmYXVsdFwiLCBcInJlcG9ydHNcIl0pIHtcbiAgICAgICAgYXdhaXQgZXhwZWN0KGhhcyhuYW1lLCBcInNlcnZlci9zZXJ2ZS1zdGF0aWMuanNcIikpLnJlc29sdmVzLnRvQmUodHJ1ZSk7XG4gICAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgICBoYXMoXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgXCJzZXJ2ZXIvbGliL3JvdXRlci11dGlscy9pbnN0cnVtZW50YXRpb24tZ2xvYmFscy5leHRlcm5hbC5qc1wiLFxuICAgICAgICAgICksXG4gICAgICAgICkucmVzb2x2ZXMudG9CZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KFwic3RhZ2VzIHRoZSBub3QtZm91bmQgcGFnZSBpbnRvIGV2ZXJ5IGdyb3VwLCBub3Qgb25seSBpdHMgb3duZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhlIHJ1bnRpbWUgcmVuZGVycyBhIDQwNCB3aXRoIHRoZSBtYW5pZmVzdCdzIGAvX25vdC1mb3VuZGAgd2hlcmV2ZXIgdGhlXG4gICAgICAvLyByZXF1ZXN0IGxhbmRlZCwgc28gYC9hcGkvcmVwb3J0cy9ub3BlYCBuZWVkcyBpdCBpbiB0aGUgcmVwb3J0cyBncm91cC5cbiAgICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlU3BsaXR0YWJsZVJlcG8oeyB3aXRoTm90Rm91bmQ6IHRydWUgfSk7XG4gICAgICBjb25zdCB7IGdyb3Vwczogc3RhZ2VkLCBtYW5pZmVzdCB9ID0gYnVpbGRBZGFwdGVyTWFuaWZlc3QoY3R4LCB7XG4gICAgICAgIGJ1aWxkQ3dkOiBjdHgucHJvamVjdERpcixcbiAgICAgICAgZnVuY3Rpb25Hcm91cHM6IGdyb3VwcyxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0Lmdyb3Vwcz8uZGVmYXVsdCkudG9Db250YWluKFwiL19ub3QtZm91bmRcIik7XG4gICAgICBleHBlY3Qoc3RhZ2VkLm1hcCgoZ3JvdXApID0+IGdyb3VwLm5hbWUpLnNvcnQoKSkudG9FcXVhbChbXG4gICAgICAgIFwiZGVmYXVsdFwiLFxuICAgICAgICBcInJlcG9ydHNcIixcbiAgICAgIF0pO1xuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBzdGFnZWQpIHtcbiAgICAgICAgZXhwZWN0KFsuLi5ncm91cC5zdGFnaW5nLmtleXMoKV0pLnRvQ29udGFpbihcbiAgICAgICAgICBcImFwcC8ubmV4dC9zZXJ2ZXIvYXBwL25vdC1mb3VuZC5qc1wiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoXCJrZWVwcyBhIFBhZ2VzIFJvdXRlciBwYWdlJ3MgZGF0YSByb3V0ZSBpbiB0aGUgcGFnZSdzIGdyb3VwXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlU3BsaXR0YWJsZVJlcG8oeyB3aXRoUGFnZXNTc3I6IHRydWUgfSk7XG4gICAgICBjb25zdCB7IGdyb3Vwczogc3RhZ2VkLCBtYW5pZmVzdCB9ID0gYnVpbGRBZGFwdGVyTWFuaWZlc3QoY3R4LCB7XG4gICAgICAgIGJ1aWxkQ3dkOiBjdHgucHJvamVjdERpcixcbiAgICAgICAgZnVuY3Rpb25Hcm91cHM6IFt7IG5hbWU6IFwic3NyXCIsIHJvdXRlczogW1wiL3NzclwiXSB9XSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0Lmdyb3Vwcz8uc3NyKS50b0VxdWFsKFtcbiAgICAgICAgXCIvX25leHQvZGF0YS90ZXN0LWJ1aWxkL3Nzci5qc29uXCIsXG4gICAgICAgIFwiL3NzclwiLFxuICAgICAgXSk7XG4gICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBzdGFnZWQuZmluZCgoZ3JvdXApID0+IGdyb3VwLm5hbWUgPT09IFwiZGVmYXVsdFwiKSE7XG4gICAgICAvLyBPdGhlcndpc2UgdGhlIHBhZ2UgYW5kIGl0cyB0cmFjZSBzaGlwIGluIHRoZSBkZWZhdWx0IHppcCBhcyB3ZWxsLlxuICAgICAgZXhwZWN0KFsuLi5kZWZhdWx0R3JvdXAuc3RhZ2luZy5rZXlzKCldKS5ub3QudG9Db250YWluKFxuICAgICAgICBcImFwcC8ubmV4dC9zZXJ2ZXIvYXBwL3Nzci5qc1wiLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVmdXNlcyB0byBzcGxpdCBhbiBpMThuIGFwcCwgd2hvc2Ugcm91dGVzIGFyZSBsb2NhbGUtcHJlZml4ZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjdHggfSA9IGF3YWl0IG1ha2VTcGxpdHRhYmxlUmVwbygpO1xuICAgICAgY29uc3QgaTE4bkN0eCA9IHtcbiAgICAgICAgLi4uY3R4LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi5jdHguY29uZmlnLFxuICAgICAgICAgIGkxOG46IHsgbG9jYWxlczogW1wiZW5cIl0sIGRlZmF1bHRMb2NhbGU6IFwiZW5cIiB9LFxuICAgICAgICB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIEJ1aWxkQ29tcGxldGVDb250ZXh0O1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGJ1aWxkQWRhcHRlck1hbmlmZXN0KGkxOG5DdHgsIHtcbiAgICAgICAgICBidWlsZEN3ZDogY3R4LnByb2plY3REaXIsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cHM6IGdyb3VwcyxcbiAgICAgICAgfSksXG4gICAgICApLnRvVGhyb3coL2Nhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGBpMThuYC8pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJ0aHJvd3Mgb24gYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBub3RoaW5nLCByYXRoZXIgdGhhbiBzaWxlbnRseSBub3Qgc3BsaXR0aW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlU3BsaXR0YWJsZVJlcG8oKTtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBidWlsZEFkYXB0ZXJNYW5pZmVzdChjdHgsIHtcbiAgICAgICAgICBidWlsZEN3ZDogY3R4LnByb2plY3REaXIsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cHM6IFt7IG5hbWU6IFwidHlwb1wiLCByb3V0ZXM6IFtcIi9hcGkvcmVwb3J0LyoqXCJdIH1dLFxuICAgICAgICB9KSxcbiAgICAgICkudG9UaHJvdygvbWF0Y2hlcyBubyByb3V0ZSBpbiB0aGlzIGJ1aWxkLyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
908
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtb3V0cHV0cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvYnVpbGQtb3V0cHV0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0NBTzBCO0FBQzFCLHFDQUFpQztBQUNqQyx5Q0FBeUQ7QUFDekQsdUNBQXlDO0FBQ3pDLGlIQUFpRjtBQUNqRiw2RkFBK0Q7QUFDL0QscUZBQXVEO0FBQ3ZELG1EQUl5QjtBQUN6Qiw4REFBMkQ7QUFDM0Qsa0RBQXVEO0FBRXZEOzs7O0dBSUc7QUFDSCxNQUFNLFFBQVEsR0FBRztJQUNmLGdCQUFnQixFQUFFLDZCQUFhO0lBQy9CLDBCQUEwQixFQUFFLHVDQUFxQjtJQUNqRCxZQUFZLEVBQUUseUJBQVM7Q0FDZixDQUFDO0FBRVgsMEVBQTBFO0FBQzFFLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBZ0IsRUFBd0IsRUFBRSxDQUMzRCxlQUFlLENBQUMsT0FBTyxDQUF5QixDQUFDO0FBRW5EOzs7OztHQUtHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUF5QixFQUFFLEVBQUUsQ0FDMUMsSUFBQSxvQ0FBb0IsRUFBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDMUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUF5QixFQUFFLEVBQUUsQ0FDMUMsSUFBQSxpQ0FBaUIsRUFBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFFdkQ7Ozs7R0FJRztBQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBaUQsRUFBRSxFQUFFO0lBQ3JFLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENB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TUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztZQUMzQyxNQUFNLE9BQU8sR0FBRztnQkFDZCxHQUFHLEdBQUc7Z0JBQ04sTUFBTSxFQUFFO29CQUNOLEdBQUcsR0FBRyxDQUFDLE1BQU07b0JBQ2IsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRTtpQkFDL0M7YUFDaUMsQ0FBQztZQUNyQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSxvQ0FBb0IsRUFBQyxPQUFPLEVBQUU7Z0JBQzVCLFFBQVEsRUFBRSxHQUFHLENBQUMsVUFBVTtnQkFDeEIsY0FBYyxFQUFFLE1BQU07YUFDdkIsQ0FBQyxDQUNILENBQUMsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOEVBQThFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUYsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSxvQ0FBb0IsRUFBQyxHQUFHLEVBQUU7Z0JBQ3hCLFFBQVEsRUFBRSxHQUFHLENBQUMsVUFBVTtnQkFDeEIsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQzthQUMvRCxDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBsc3RhdCxcbiAgbWtkaXIsXG4gIG1rZHRlbXAsXG4gIHJlYWRGaWxlLFxuICBzeW1saW5rLFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVsYXRpdmUsIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCBhcHBQbGF5Z3JvdW5kQmFzZVBhdGggZnJvbSBcIi4vX19maXh0dXJlc19fL2FwcC1wbGF5Z3JvdW5kLWJhc2UtcGF0aC5qc29uXCI7XG5pbXBvcnQgYXBwUGxheWdyb3VuZCBmcm9tIFwiLi9fX2ZpeHR1cmVzX18vYXBwLXBsYXlncm91bmQuanNvblwiO1xuaW1wb3J0IHBhZ2VzSTE4biBmcm9tIFwiLi9fX2ZpeHR1cmVzX18vcGFnZXMtaTE4bi5qc29uXCI7XG5pbXBvcnQge1xuICBCdWlsZENvbXBsZXRlQ29udGV4dCxcbiAgYnVpbGRBZGFwdGVyTWFuaWZlc3QsXG4gIHdyaXRlQnVpbGRPdXRwdXRzLFxufSBmcm9tIFwiLi9idWlsZC1vdXRwdXRzXCI7XG5pbXBvcnQgeyBDREtfTkVYVEpTX1ZFUlNJT04gfSBmcm9tIFwiLi4vY2RrLW5leHRqcy12ZXJzaW9uXCI7XG5pbXBvcnQgeyBSVU5USU1FX0RJUl9OQU1FIH0gZnJvbSBcIi4uL3J1bnRpbWUvbWFuaWZlc3RcIjtcblxuLyoqXG4gKiBUaGUgZml4dHVyZXMgYXJlIHJlYWwgYG9uQnVpbGRDb21wbGV0ZWAgY29udGV4dHMgY2FwdHVyZWQgYnlcbiAqIGBzY3JpcHRzL2NhcHR1cmUtYWRhcHRlci1maXh0dXJlLm1qc2AsIHdpdGggYWJzb2x1dGUgcGF0aHMgcmV3cml0dGVuIHRvIGFcbiAqIGAvcmVwb2AgcGxhY2Vob2xkZXIuIFJlZ2VuZXJhdGUgdGhlbSB3aGVuIGBuZXh0YCBpcyB1cGdyYWRlZC5cbiAqL1xuY29uc3QgZml4dHVyZXMgPSB7XG4gIFwiYXBwLXBsYXlncm91bmRcIjogYXBwUGxheWdyb3VuZCxcbiAgXCJhcHAtcGxheWdyb3VuZC1iYXNlLXBhdGhcIjogYXBwUGxheWdyb3VuZEJhc2VQYXRoLFxuICBcInBhZ2VzLWkxOG5cIjogcGFnZXNJMThuLFxufSBhcyBjb25zdDtcblxuLyoqIEZpeHR1cmVzIGFyZSBKU09OLCBzbyB0aGUgc3RydWN0dXJhbCBjYXN0IGlzIHRoZSBwb2ludCBvZiB0aGUgY2FzdC4gKi9cbmNvbnN0IGFzQ29udGV4dCA9IChmaXh0dXJlOiB1bmtub3duKTogQnVpbGRDb21wbGV0ZUNvbnRleHQgPT5cbiAgc3RydWN0dXJlZENsb25lKGZpeHR1cmUpIGFzIEJ1aWxkQ29tcGxldGVDb250ZXh0O1xuXG4vKipcbiAqIGBidWlsZEFkYXB0ZXJNYW5pZmVzdGAgcmVxdWlyZXMgdGhlIGJ1aWxkIGN3ZCB0byBiZSB0aGUgcHJvamVjdCBkaXIg4oCUIHNlZVxuICogYGFzc2VydEJ1aWxkQ3dkYC4gVGhlIGZpeHR1cmVzJyBwcm9qZWN0IGRpcnMgYXJlIHN5bnRoZXRpYyBgL3JlcG8v4oCmYCBwYXRocywgc29cbiAqIGV2ZXJ5IGNhbGwgc3VwcGxpZXMgaXQgcmF0aGVyIHRoYW4gbGV0dGluZyBpdCBkZWZhdWx0IHRvIGBwcm9jZXNzLmN3ZCgpYC4gVGhlXG4gKiBhc3NlcnRpb24gaXRzZWxmIGlzIGNvdmVyZWQgc2VwYXJhdGVseSBiZWxvdy5cbiAqL1xuY29uc3QgYnVpbGQgPSAoY3R4OiBCdWlsZENvbXBsZXRlQ29udGV4dCkgPT5cbiAgYnVpbGRBZGFwdGVyTWFuaWZlc3QoY3R4LCB7IGJ1aWxkQ3dkOiBjdHgucHJvamVjdERpciB9KTtcbmNvbnN0IHdyaXRlID0gKGN0eDogQnVpbGRDb21wbGV0ZUNvbnRleHQpID0+XG4gIHdyaXRlQnVpbGRPdXRwdXRzKGN0eCwgeyBidWlsZEN3ZDogY3R4LnByb2plY3REaXIgfSk7XG5cbi8qKlxuICogVGhlIG9uZSBkZXBsb3ltZW50IHJvb3QgYW4gdW5zcGxpdCBidWlsZCBzdGFnZXMuIEFzc2VydGVkIHJhdGhlciB0aGFuIGluZGV4ZWRcbiAqIHNvIGEgcmVncmVzc2lvbiB0aGF0IHN0YXJ0cyBzcGxpdHRpbmcgdW5hc2tlZCBmYWlscyBoZXJlIGluc3RlYWQgb2Ygc2lsZW50bHlcbiAqIGNoZWNraW5nIGdyb3VwIDAuXG4gKi9cbmNvbnN0IHNvbGVSb290ID0gKHJlc3VsdDogeyBzdGFnZWRHcm91cHM6IEFycmF5PHsgcGF0aDogc3RyaW5nIH0+IH0pID0+IHtcbiAgZXhwZWN0KHJlc3VsdC5zdGFnZWRHcm91cHMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgcmV0dXJuIHJlc3VsdC5zdGFnZWRHcm91cHNbMF0ucGF0aDtcbn07XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICAvLyBgbWF4RHVyYXRpb25gIHdhcm5pbmdzIGFyZSBleHBlY3RlZCBmcm9tIHRoZSBwYWdlcy1pMThuIGZpeHR1cmUuXG4gIGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgamVzdC5yZXN0b3JlQWxsTW9ja3MoKTtcbn0pO1xuXG5kZXNjcmliZS5lYWNoKE9iamVjdC5rZXlzKGZpeHR1cmVzKSBhcyBBcnJheTxrZXlvZiB0eXBlb2YgZml4dHVyZXM+KShcbiAgXCJidWlsZEFkYXB0ZXJNYW5pZmVzdCglcylcIixcbiAgKG5hbWUpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoZml4dHVyZXNbbmFtZV0pO1xuICAgIGNvbnN0IHtcbiAgICAgIG1hbmlmZXN0LFxuICAgICAgZ3JvdXBzOiBbeyBzdGFnaW5nIH1dLFxuICAgIH0gPSBidWlsZChjdHgpO1xuXG4gICAgaXQoXCJzdGFtcHMgdGhlIGNkay1uZXh0anMgdmVyc2lvbiBhbmQgYnVpbGQgaWRlbnRpdHlcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KG1hbmlmZXN0LmNka05leHRqc1ZlcnNpb24pLnRvQmUoQ0RLX05FWFRKU19WRVJTSU9OKTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdC5idWlsZElkKS50b0JlKGN0eC5idWlsZElkKTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIpLnRvQmUoXG4gICAgICAgIG5hbWUuc3RhcnRzV2l0aChcInBhZ2VzLWkxOG5cIikgPyBcInBhZ2VzLWkxOG5cIiA6IFwiYXBwLXBsYXlncm91bmRcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcImNvcGllcyB0aGUgY29uZmlnIGZpZWxkcyB0aGUgcnVudGltZSByb3V0ZXIgbmVlZHNcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KG1hbmlmZXN0LmNvbmZpZykudG9FcXVhbCh7XG4gICAgICAgIGJhc2VQYXRoOiBjdHguY29uZmlnLmJhc2VQYXRoID8/IFwiXCIsXG4gICAgICAgIHRyYWlsaW5nU2xhc2g6IGN0eC5jb25maWcudHJhaWxpbmdTbGFzaCA9PT0gdHJ1ZSxcbiAgICAgICAgYXNzZXRQcmVmaXg6IGN0eC5jb25maWcuYXNzZXRQcmVmaXggPz8gXCJcIixcbiAgICAgICAgZGlzdERpcjogXCIubmV4dFwiLFxuICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgZ2VuZXJhdGVFdGFnczogdHJ1ZSxcbiAgICAgICAgaTE4bjogY3R4LmNvbmZpZy5pMThuID8/IG51bGwsXG4gICAgICAgIGRlcGxveW1lbnRJZDogXCJcIixcbiAgICAgICAgaW1hZ2VzOiBjdHguY29uZmlnLmltYWdlcyxcbiAgICAgICAgZXhwZXJpbWVudGFsOiBjdHguY29uZmlnLmV4cGVyaW1lbnRhbCA/PyB7fSxcbiAgICAgICAgLy8gRGlzdC1kaXItcmVsYXRpdmUgd2hlbiBzZXQgKHRoZSBhZGFwdGVyIGFsd2F5cyBzZXRzIG9uZSBhdCBidWlsZCk7XG4gICAgICAgIC8vIHNlZSB0aGUgY2FjaGVIYW5kbGVyIHRlc3QgYmVsb3cgZm9yIHRoZSBwYXRoIGl0c2VsZi5cbiAgICAgICAgY2FjaGVIYW5kbGVyOiBjdHguY29uZmlnLmNhY2hlSGFuZGxlclxuICAgICAgICAgID8gZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9eW14vXS8pXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBjYWNoZU1heE1lbW9yeVNpemU6IGN0eC5jb25maWcuY2FjaGVNYXhNZW1vcnlTaXplLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcInBlcnNpc3RzIGN0eC5yb3V0aW5nIHZlcmJhdGltXCIsICgpID0+IHtcbiAgICAgIC8vIGBAbmV4dC9yb3V0aW5nYCdzIGByZXNvbHZlUm91dGVzYCBjb25zdW1lcyB0aGlzIHdob2xlIG9iamVjdDsgYW55dGhpbmcgd2VcbiAgICAgIC8vIHJlc2hhcGUgaGVyZSBpcyBhIGJlaGF2aW9yIGRpZmZlcmVuY2UgZnJvbSBgbmV4dCBzdGFydGAuXG4gICAgICBleHBlY3QobWFuaWZlc3Qucm91dGluZykudG9FcXVhbChjdHgucm91dGluZyk7XG4gICAgICBleHBlY3QobWFuaWZlc3Qucm91dGluZykudG9IYXZlUHJvcGVydHkoXCJtaWRkbGV3YXJlTWF0Y2hlcnNcIik7XG4gICAgfSk7XG5cbiAgICBpdChcIm1hcHMgZXZlcnkgaW52b2NhYmxlIG91dHB1dCBwYXRobmFtZSB0byBhbiBlbnRyeXBvaW50XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gW1xuICAgICAgICAuLi5jdHgub3V0cHV0cy5wYWdlcyxcbiAgICAgICAgLi4uY3R4Lm91dHB1dHMucGFnZXNBcGksXG4gICAgICAgIC4uLmN0eC5vdXRwdXRzLmFwcFBhZ2VzLFxuICAgICAgICAuLi5jdHgub3V0cHV0cy5hcHBSb3V0ZXMsXG4gICAgICBdLm1hcCgobykgPT4gby5wYXRobmFtZSk7XG4gICAgICAvLyBQbHVzIGR5bmFtaWMgcHJlcmVuZGVyIHRlbXBsYXRlcywgd2hpY2ggYGFkZFByZXJlbmRlclBhdGhuYW1lc2AgbWFwcyB0b1xuICAgICAgLy8gdGhlIGVudHJ5cG9pbnQgb2YgdGhlIHJvdXRlIHRoYXQgb3ducyB0aGVtLiBOb25lIG9mIHRoZXNlIGZpeHR1cmVzIGhhcyBhXG4gICAgICAvLyBnYXRlZCBkeW5hbWljIHJvdXRlLCBzbyBubyAqY29uY3JldGUqIHByZXJlbmRlciBwYXRobmFtZSBpcyBhZGRlZCAtIHNlZVxuICAgICAgLy8gdGhlIHJvb3QtcGFyYW1zIHRlc3QgYmVsb3cuXG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBjdHgub3V0cHV0cy5wcmVyZW5kZXJzXG4gICAgICAgIC5maWx0ZXIoKG8pID0+IG8ucGF0aG5hbWUuaW5jbHVkZXMoXCJbXCIpKVxuICAgICAgICAubWFwKChvKSA9PiBvLnBhdGhuYW1lKTtcbiAgICAgIGV4cGVjdChPYmplY3Qua2V5cyhtYW5pZmVzdC5lbnRyeXBvaW50cykuc29ydCgpKS50b0VxdWFsKFxuICAgICAgICBbLi4ubmV3IFNldChbLi4uZXhwZWN0ZWQsIC4uLnRlbXBsYXRlc10pXS5zb3J0KCksXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBbcGF0aG5hbWUsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5lbnRyeXBvaW50cykpIHtcbiAgICAgICAgZXhwZWN0KGVudHJ5LmZpbGVQYXRoKS50b01hdGNoKC9eW14vXS8pO1xuICAgICAgICBleHBlY3QoZW50cnkuZmlsZVBhdGgpLm5vdC50b0NvbnRhaW4oXCJcXFxcXCIpO1xuICAgICAgICBleHBlY3Qoc3RhZ2luZy5oYXMoZW50cnkuZmlsZVBhdGgpKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3QoZW50cnkuaWQpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KFtcImFwcC1wYWdlXCIsIFwiYXBwLXJvdXRlXCIsIFwicGFnZVwiLCBcInBhZ2UtYXBpXCJdKS50b0NvbnRhaW4oXG4gICAgICAgICAgZW50cnkudHlwZSxcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0KHBhdGhuYW1lKS50b0JlVHJ1dGh5KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdChcImxpc3RzIHBhdGhuYW1lcyBhcyB0aGUgc29ydGVkIHVuaW9uIG9mIGVudHJ5cG9pbnRzIGFuZCBzdGF0aWMgZmlsZXNcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KG1hbmlmZXN0LnBhdGhuYW1lcykudG9FcXVhbChbLi4ubWFuaWZlc3QucGF0aG5hbWVzXS5zb3J0KCkpO1xuICAgICAgZXhwZWN0KG5ldyBTZXQobWFuaWZlc3QucGF0aG5hbWVzKS5zaXplKS50b0JlKG1hbmlmZXN0LnBhdGhuYW1lcy5sZW5ndGgpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWFuaWZlc3QuZW50cnlwb2ludHMpKSB7XG4gICAgICAgIGV4cGVjdChtYW5pZmVzdC5wYXRobmFtZXMpLnRvQ29udGFpbihrZXkpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGN0eC5vdXRwdXRzLnN0YXRpY0ZpbGVzKSB7XG4gICAgICAgIGV4cGVjdChtYW5pZmVzdC5wYXRobmFtZXMpLnRvQ29udGFpbihmaWxlLnBhdGhuYW1lKTtcbiAgICAgIH1cbiAgICAgIC8vIE9uZSByZXBvcnRlZCBwYXRobmFtZSBjYW4gcHJvZHVjZSB0d28ga2V5cyAtIGEgYC9pbmRleGAgc3RhdGljIGZpbGUgaXNcbiAgICAgIC8vIGFsc28gc2VydmVkIGF0IGAvYCwgc2VlIHRoZSBzdGF0aWMtaG9tZS1wYWdlIHRlc3RzIGJlbG93LiBOb25lIG9mIHRoZXNlXG4gICAgICAvLyBmaXh0dXJlcyBoYXMgb25lLCBzbyBoZXJlIHRoZSB0d28gc2V0cyBjb2luY2lkZS5cbiAgICAgIGV4cGVjdChPYmplY3Qua2V5cyhtYW5pZmVzdC5zdGF0aWNGaWxlcykpLnRvRXF1YWwoXG4gICAgICAgIFsuLi5uZXcgU2V0KGN0eC5vdXRwdXRzLnN0YXRpY0ZpbGVzLm1hcCgoZikgPT4gZi5wYXRobmFtZSkpXS5zb3J0KCksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJtYXBzIGVhY2ggc3RhdGljIGZpbGUgdG8gYSByZXBvLXJvb3QtcmVsYXRpdmUga2V5XCIsICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgW3BhdGhuYW1lLCBrZXldIG9mIE9iamVjdC5lbnRyaWVzKG1hbmlmZXN0LnN0YXRpY0ZpbGVzKSkge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBjdHgub3V0cHV0cy5zdGF0aWNGaWxlcy5maW5kKFxuICAgICAgICAgIChmKSA9PiBmLnBhdGhuYW1lID09PSBwYXRobmFtZSxcbiAgICAgICAgKSE7XG4gICAgICAgIGV4cGVjdChrZXkpLnRvQmUob3V0cHV0LmZpbGVQYXRoLnJlcGxhY2UoXCIvcmVwby9cIiwgXCJcIikpO1xuICAgICAgICBleHBlY3Qoa2V5LnN0YXJ0c1dpdGgoXCIvXCIpKS50b0JlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KFwic3RhZ2VzIHRoZSBzdGF0aWMgZmlsZXMgbm90aGluZyBpbiBmcm9udCBvZiB0aGUgY29tcHV0ZSBzZXJ2ZXNcIiwgKCkgPT4ge1xuICAgICAgLy8gYDxkaXN0RGlyPi9zdGF0aWNgIGdvZXMgdG8gUzM7IGA8ZGlzdERpcj4vc2VydmVyLyoqYCAoNDA0Lmh0bWwsXG4gICAgICAvLyBmYXZpY29uLmljby5ib2R5LCBmdWxseS1zdGF0aWMgUGFnZXMgUm91dGVyIEhUTUwpIGRvZXMgbm90LCBzbyB0aGVcbiAgICAgIC8vIHJ1bnRpbWUgbXVzdCBiZSBhYmxlIHRvIHJlYWQgaXQgb2ZmIGRpc2suXG4gICAgICBmb3IgKGNvbnN0IFtwYXRobmFtZSwga2V5XSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5zdGF0aWNGaWxlcykpIHtcbiAgICAgICAgY29uc3Qgc2VydmVkQnlTMyA9IHBhdGhuYW1lLmluY2x1ZGVzKFwiL19uZXh0L3N0YXRpYy9cIik7XG4gICAgICAgIGV4cGVjdChzdGFnaW5nLmhhcyhrZXkpKS50b0JlKCFzZXJ2ZWRCeVMzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KFwic3RhZ2VzIG9ubHkga2V5cyB0aGF0IGxhbmQgaW5zaWRlIHRoZSBkZXBsb3ltZW50IHJvb3RcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KHN0YWdpbmcuc2l6ZSkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc3RhZ2luZy5rZXlzKCkpIHtcbiAgICAgICAgZXhwZWN0KGtleSkubm90LnRvQmUoXCJcIik7XG4gICAgICAgIGV4cGVjdChrZXkuc3RhcnRzV2l0aChcIi9cIikpLnRvQmUoZmFsc2UpO1xuICAgICAgICBleHBlY3Qoa2V5LnN0YXJ0c1dpdGgoXCIuLlwiKSkudG9CZShmYWxzZSk7XG4gICAgICAgIGV4cGVjdChrZXkuc3RhcnRzV2l0aChgJHtSVU5USU1FX0RJUl9OQU1FfS9gKSkudG9CZShmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBUaGUgdHJhY2VkIGBuZXh0YCBjbG9zdXJlIGlzIG1lcmdlZCBpbnRvIGV2ZXJ5IG91dHB1dCwgc28gc3RhZ2luZyBpcyBmYXJcbiAgICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgc3VtIG9mIHRoZSBwZXItb3V0cHV0IGBhc3NldHNgIG1hcHMuXG4gICAgICBleHBlY3Qoc3RhZ2luZy5zaXplKS50b0JlTGVzc1RoYW4oXG4gICAgICAgIGN0eC5vdXRwdXRzLmFwcFBhZ2VzLmxlbmd0aCAqIDEwMCArXG4gICAgICAgICAgY3R4Lm91dHB1dHMucGFnZXMubGVuZ3RoICogMTAwICtcbiAgICAgICAgICAxMDAwLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSxcbik7XG5cbmRlc2NyaWJlKFwiYnVpbGRBZGFwdGVyTWFuaWZlc3QgZWRnZSBjYXNlc1wiLCAoKSA9PiB7XG4gIGl0KFwidGhyb3dzIHdoZW4gYG5leHQgYnVpbGRgIHJhbiBmcm9tIG91dHNpZGUgdGhlIHByb2plY3QgZGlyZWN0b3J5XCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgZXhwZWN0KCgpID0+IGJ1aWxkQWRhcHRlck1hbmlmZXN0KGN0eCwgeyBidWlsZEN3ZDogXCIvcmVwb1wiIH0pKS50b1Rocm93KFxuICAgICAgL211c3QgcnVuIGZyb20gdGhlIE5leHQuanMgcHJvamVjdCBkaXJlY3RvcnkvLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiZGVmYXVsdHMgdGhlIGJ1aWxkIGN3ZCB0byBwcm9jZXNzLmN3ZCgpXCIsICgpID0+IHtcbiAgICAvLyBXaGljaCBpcyB0aGlzIHBhY2thZ2UncyByb290LCBuZXZlciBhIGZpeHR1cmUncyBgL3JlcG8v4oCmYCBwcm9qZWN0IGRpciwgc29cbiAgICAvLyB0aGUgYXNzZXJ0aW9uIGZpcmVzIOKAlCBwcm92aW5nIHRoZSBkZWZhdWx0IGlzIHdpcmVkIGFuZCBub3QganVzdCB0aGUgb3B0aW9uLlxuICAgIGV4cGVjdCgoKSA9PiBidWlsZEFkYXB0ZXJNYW5pZmVzdChhc0NvbnRleHQoYXBwUGxheWdyb3VuZCkpKS50b1Rocm93KFxuICAgICAgL211c3QgcnVuIGZyb20gdGhlIE5leHQuanMgcHJvamVjdCBkaXJlY3RvcnkvLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmVjb3JkcyBjYWNoZUhhbmRsZXIgcmVsYXRpdmUgdG8gdGhlIGRpc3QgZGlyLCBhcyByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbiBkb2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgY29uc3QgaGFuZGxlciA9IGpvaW4oY3R4LnJlcG9Sb290LCBcIm5vZGVfbW9kdWxlcy9jZGstbmV4dGpzL2NhY2hlLm1qc1wiKTtcbiAgICBmb3IgKGNvbnN0IGNhY2hlSGFuZGxlciBvZiBbaGFuZGxlciwgcGF0aFRvRmlsZVVSTChoYW5kbGVyKS5ocmVmXSkge1xuICAgICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYnVpbGQoe1xuICAgICAgICAuLi5jdHgsXG4gICAgICAgIGNvbmZpZzogeyAuLi5jdHguY29uZmlnLCBjYWNoZUhhbmRsZXIgfSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0LmNvbmZpZy5jYWNoZUhhbmRsZXIpLnRvQmUoXG4gICAgICAgIHJlbGF0aXZlKGN0eC5kaXN0RGlyLCBoYW5kbGVyKS5zcGxpdChzZXApLmpvaW4oXCIvXCIpLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiY29waWVzIGV4cGVyaW1lbnRhbCBhcyBKU09OLCBkcm9wcGluZyBmdW5jdGlvbi12YWx1ZWQgZW50cmllc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGJ1aWxkKHtcbiAgICAgIC4uLmN0eCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi5jdHguY29uZmlnLFxuICAgICAgICBleHBlcmltZW50YWw6IHsgaW1nT3B0Q29uY3VycmVuY3k6IDIsIHNvbWVIb29rOiAoKSA9PiB1bmRlZmluZWQgfSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBCdWlsZENvbXBsZXRlQ29udGV4dFtcImNvbmZpZ1wiXSxcbiAgICB9KTtcbiAgICBleHBlY3QobWFuaWZlc3QuY29uZmlnLmV4cGVyaW1lbnRhbCkudG9FcXVhbCh7IGltZ09wdENvbmN1cnJlbmN5OiAyIH0pO1xuICB9KTtcblxuICBpdChcInJlY29yZHMgdGhlIGRlcGxveW1lbnRJZCwgcmVkdWNlZCB0byB3aGF0IGEgY2FjaGUga2V5IHByZWZpeCBjYW4gaG9sZFwiLCAoKSA9PiB7XG4gICAgLy8gYE5leHRqc0J1aWxkYCBzdWZmaXhlcyBpdHMgYGJ1aWxkSWRgIHdpdGggaXQ6IG5leHQgcGlucyB0aGUgYnVpbGQgSURcbiAgICAvLyBpdHNlbGYgb25jZSBgZGVwbG95bWVudElkYCBpcyBzZXQuXG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGJ1aWxkKHtcbiAgICAgIC4uLmN0eCxcbiAgICAgIGNvbmZpZzogeyAuLi5jdHguY29uZmlnLCBkZXBsb3ltZW50SWQ6IFwidjEuMi9tYWluXCIgfSxcbiAgICB9KTtcbiAgICBleHBlY3QobWFuaWZlc3QuY29uZmlnLmRlcGxveW1lbnRJZCkudG9CZShcInYxLTItbWFpblwiKTtcbiAgfSk7XG5cbiAgLy8gYGNhY2hlT2JqZWN0TmFtZWAgbGVhdmVzIHRoZSBge2J1aWxkSWR9L2AgcHJlZml4IDEyOCBieXRlczsgcGFzdCB0aGF0IGFcbiAgLy8gbG9uZyBlbm91Z2ggY2FjaGUgbmFtZSB3b3VsZCBiZSByZWplY3RlZCBieSBTMyBhbmQgbmV2ZXIgY2FjaGVkLlxuICBpdChcInRocm93cyB3aGVuIHRoZSBidWlsZCBJRCBhbmQgZGVwbG95bWVudElkIGxlYXZlIG5vIHJvb20gZm9yIGNhY2hlIG5hbWVzXCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgY29uc3Qgd2l0aERlcGxveW1lbnRJZCA9IChkZXBsb3ltZW50SWQ6IHN0cmluZykgPT5cbiAgICAgIGJ1aWxkKHsgLi4uY3R4LCBjb25maWc6IHsgLi4uY3R4LmNvbmZpZywgZGVwbG95bWVudElkIH0gfSk7XG4gICAgY29uc3Qgcm9vbSA9IDEyNyAtIGN0eC5idWlsZElkLmxlbmd0aCAtIDE7XG4gICAgZXhwZWN0KCgpID0+IHdpdGhEZXBsb3ltZW50SWQoXCJkXCIucmVwZWF0KHJvb20pKSkubm90LnRvVGhyb3coKTtcbiAgICBleHBlY3QoKCkgPT4gd2l0aERlcGxveW1lbnRJZChcImRcIi5yZXBlYXQocm9vbSArIDEpKSkudG9UaHJvdyhcbiAgICAgIC9Vc2UgYSBzaG9ydGVyIGRlcGxveW1lbnRJZC8sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJibGFtZXMgdGhlIGJ1aWxkIElEIGFsb25lIHdoZW4gdGhlIGFwcCBzZXRzIG5vIGRlcGxveW1lbnRJZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgYnVpbGQoe1xuICAgICAgICAuLi5jdHgsXG4gICAgICAgIGJ1aWxkSWQ6IFwiYlwiLnJlcGVhdCgxMjgpLFxuICAgICAgICBjb25maWc6IHsgLi4uY3R4LmNvbmZpZywgZGVwbG95bWVudElkOiBcIlwiIH0sXG4gICAgICB9KSxcbiAgICApLnRvVGhyb3coL1RoZSBidWlsZCBJRCBpcyAxMjggYnl0ZXMuKlVzZSBhIHNob3J0ZXIgZ2VuZXJhdGVCdWlsZElkXFwuLyk7XG4gIH0pO1xuXG4gIGl0KFwia2V5cyBsb2NhbGUgdmFyaWFudHMgb2Ygb25lIHBhZ2UgdG8gdGhlIHNhbWUgZW50cnlwb2ludCBmaWxlXCIsICgpID0+IHtcbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBidWlsZChhc0NvbnRleHQocGFnZXNJMThuKSk7XG4gICAgLy8gaTE4biBmYW5zIG9uZSBwYWdlIG91dCBpbnRvIG9uZSBvdXRwdXQgcGVyIGxvY2FsZSwgcGx1cyBhXG4gICAgLy8gYC9fbmV4dC9kYXRhLzxidWlsZElkPi/igKZqc29uYCBzaWJsaW5nIGVhY2guIFRoZXkgc2hhcmUgYGZpbGVQYXRoYCBhbmRcbiAgICAvLyBgdHlwZWA7IGBpZGAgc3RheXMgcGVyLXBhdGhuYW1lIChsb2NhbGUtcHJlZml4ZWQpLCBzbyBpdCBpcyBub3QgYSBkZWR1cCBrZXkuXG4gICAgY29uc3Qgc3NyID0gW1xuICAgICAgXCIvc3NyXCIsXG4gICAgICBcIi9lbi1VUy9zc3JcIixcbiAgICAgIFwiL2ZyL3NzclwiLFxuICAgICAgXCIvbmwtTkwvc3NyXCIsXG4gICAgICBgL19uZXh0L2RhdGEvJHttYW5pZmVzdC5idWlsZElkfS9mci9zc3IuanNvbmAsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IHBhdGhuYW1lIG9mIHNzcikge1xuICAgICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW3BhdGhuYW1lXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGZpbGVQYXRoOiBtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9zc3JcIl0uZmlsZVBhdGgsXG4gICAgICAgIHR5cGU6IFwicGFnZVwiLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbcGF0aG5hbWVdLmlkKS50b0JlKHBhdGhuYW1lKTtcbiAgICB9XG4gICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL3NzclwiXS50eXBlKS50b0JlKFwicGFnZVwiKTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvYXBpL2hlbGxvXCJdLnR5cGUpLnRvQmUoXCJwYWdlLWFwaVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJjYXJyaWVzIGJhc2VQYXRoIGluIHBhdGhuYW1lcyBidXQgbm90IGluIGVudHJ5cG9pbnQgaWRzXCIsICgpID0+IHtcbiAgICAvLyBgb3V0cHV0LnBhdGhuYW1lYCBpcyBiYXNlUGF0aC1wcmVmaXhlZCB3aGlsZSBgb3V0cHV0LmlkYCBpcyBub3QuIERpc3BhdGNoXG4gICAgLy8ga2V5cyBvZmYgdGhlIHBhdGhuYW1lLCBzbyB0aGUgcHJlZml4IGhhcyB0byBzdGF5LlxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGJ1aWxkKGFzQ29udGV4dChhcHBQbGF5Z3JvdW5kQmFzZVBhdGgpKTtcbiAgICBleHBlY3QobWFuaWZlc3QuY29uZmlnLmJhc2VQYXRoKS50b0JlKFwiL3Byb2RcIik7XG4gICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL3Byb2QvYXBpL2hlYWx0aFwiXSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvcHJvZC9hcGkvaGVhbHRoXCJdLmlkKS50b0JlKFwiL2FwaS9oZWFsdGhcIik7XG4gICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2FwaS9oZWFsdGhcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEEgUGFnZXMgUm91dGVyIGhvbWUgcGFnZSByZWFjaGVzIHVzIGFzIGAvaW5kZXhgLCB3aGljaGV2ZXIgcG9wdWxhdGlvbiBpdCBsYW5kc1xuICAgKiBpbjogYG5vcm1hbGl6ZVBhZ2VQYXRoKFwiL1wiKWAgaXMgYFwiL2luZGV4XCJgLCBhbmQgdGhlIGFkYXB0ZXIgaG9vayB1c2VzIGl0IGZvciBhXG4gICAqIGZ1bGx5LXN0YXRpYyBwYWdlJ3MgYFNUQVRJQ19GSUxFYCBhbmQgZm9yIGFuIFNTRy9TU1IgcGFnZSdzIGBQQUdFU2Agb3V0cHV0XG4gICAqIGFsaWtlLiBOb3RoaW5nIGVsc2UgaW4gdGhlIG91dHB1dHMgY2FycmllcyBgL2AsIHNvIHRoZSBtYXBwaW5nIHVuZGVyIHRlc3QgaXNcbiAgICogdGhlIG9ubHkgdGhpbmcgdGhhdCBtYWtlcyB0aGUgaG9tZSBwYWdlIHJvdXRhYmxlLlxuICAgKi9cbiAgZnVuY3Rpb24gd2l0aEhvbWVQYWdlKFxuICAgIGJhc2VQYXRoOiBzdHJpbmcsXG4gICAga2luZDogXCJzdGF0aWNcIiB8IFwiaW52b2NhYmxlXCIsXG4gICk6IFJldHVyblR5cGU8dHlwZW9mIGJ1aWxkPiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KHBhZ2VzSTE4bik7XG4gICAgY3R4LmNvbmZpZy5pMThuID0gbnVsbDtcbiAgICBjdHguY29uZmlnLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgY3R4Lm91dHB1dHMuc3RhdGljRmlsZXMgPSBbXTtcbiAgICBjdHgub3V0cHV0cy5wcmVyZW5kZXJzID0gW107XG4gICAgY29uc3QgcGFnZSA9IGN0eC5vdXRwdXRzLnBhZ2VzLmZpbmQoKG8pID0+IG8ucGF0aG5hbWUgPT09IFwiL3NzclwiKSE7XG4gICAgY3R4Lm91dHB1dHMucGFnZXMgPVxuICAgICAga2luZCA9PT0gXCJpbnZvY2FibGVcIlxuICAgICAgICA/IFt7IC4uLnBhZ2UsIGlkOiBcIi9pbmRleFwiLCBwYXRobmFtZTogYCR7YmFzZVBhdGh9L2luZGV4YCB9XVxuICAgICAgICA6IFtdO1xuICAgIGlmIChraW5kID09PSBcInN0YXRpY1wiKSB7XG4gICAgICBjdHgub3V0cHV0cy5zdGF0aWNGaWxlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIi9cIixcbiAgICAgICAgICBwYXRobmFtZTogYCR7YmFzZVBhdGh9L2luZGV4YCxcbiAgICAgICAgICB0eXBlOiBcIlNUQVRJQ19GSUxFXCIsXG4gICAgICAgICAgZmlsZVBhdGg6IFwiL3JlcG8vcGFnZXMtaTE4bi8ubmV4dC9zZXJ2ZXIvcGFnZXMvaW5kZXguaHRtbFwiLFxuICAgICAgICB9LFxuICAgICAgXSBhcyB0eXBlb2YgY3R4Lm91dHB1dHMuc3RhdGljRmlsZXM7XG4gICAgfVxuICAgIHJldHVybiBidWlsZChjdHgpO1xuICB9XG5cbiAgaXQoXCJyb3V0ZXMgYSBmdWxseS1zdGF0aWMgUGFnZXMgUm91dGVyIGhvbWUgcGFnZSBhdCBgL2AsIG5vdCBgL2luZGV4YFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gd2l0aEhvbWVQYWdlKFwiXCIsIFwic3RhdGljXCIpO1xuICAgIGNvbnN0IGh0bWwgPSBcInBhZ2VzLWkxOG4vLm5leHQvc2VydmVyL3BhZ2VzL2luZGV4Lmh0bWxcIjtcblxuICAgIGV4cGVjdChtYW5pZmVzdC5zdGF0aWNGaWxlc1tcIi9cIl0pLnRvQmUoaHRtbCk7XG4gICAgZXhwZWN0KG1hbmlmZXN0LnBhdGhuYW1lcykudG9Db250YWluKFwiL1wiKTtcbiAgICAvLyBLZXB0IGFzIHdlbGwgYXMgYC9gOiBuZXh0J3MgbWluaW1hbCBtb2RlIHJld3JpdGVzIGAvaW5kZXhgIHRvIGAvYCBiZWZvcmVcbiAgICAvLyBtYXRjaGluZywgc28gaXQgYW5zd2VycyB0aGVyZSB0b28uXG4gICAgZXhwZWN0KG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiL2luZGV4XCJdKS50b0JlKGh0bWwpO1xuICB9KTtcblxuICBpdChcInJvdXRlcyBhbiBTU0cgb3IgU1NSIGhvbWUgcGFnZSdzIGVudHJ5cG9pbnQgYXQgYC9gIGFzIHdlbGxcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IHdpdGhIb21lUGFnZShcIlwiLCBcImludm9jYWJsZVwiKTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvXCJdKS50b0VxdWFsKG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2luZGV4XCJdKTtcbiAgICBleHBlY3QobWFuaWZlc3QucGF0aG5hbWVzKS50b0NvbnRhaW4oXCIvXCIpO1xuICAgIC8vIFRoZSBvdXRwdXQncyBvd24gYGlkYCBpcyB3aGF0IG5leHQgcmVwb3J0ZWQsIGFuZCBvbmx5IG5hbWVzIHRoZSBlbnRyeXBvaW50XG4gICAgLy8gaW4gZGlhZ25vc3RpY3MgYW5kIGdyb3VwIG93bmVyc2hpcCAtIGl0IGlzIG5vdCBhIGtleSBpbnRvIGFueXRoaW5nLlxuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9cIl0uaWQpLnRvQmUoXCIvaW5kZXhcIik7XG4gIH0pO1xuXG4gIGl0KFwicm91dGVzIHRoYXQgaG9tZSBwYWdlIHVuZGVyIGJhc2VQYXRoIGF0IHRoZSBiYXNlUGF0aCBpdHNlbGZcIiwgKCkgPT4ge1xuICAgIC8vIGAvcHJvZGAsIG5vdCBgL3Byb2QvYCDigJQgd2hpY2ggaXMgaG93IHRoZSBBcHAgUm91dGVyIGZpeHR1cmUgcmVwb3J0cyBpdHMgb3duXG4gICAgLy8gaG9tZSBwYWdlLlxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IHdpdGhIb21lUGFnZShcIi9wcm9kXCIsIFwic3RhdGljXCIpO1xuICAgIGV4cGVjdChPYmplY3Qua2V5cyhtYW5pZmVzdC5zdGF0aWNGaWxlcykpLnRvRXF1YWwoW1wiL3Byb2RcIiwgXCIvcHJvZC9pbmRleFwiXSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGFuIEFwcCBSb3V0ZXIgYC9pbmRleGAgcm91dGUgYXQgYC9pbmRleGBcIiwgKCkgPT4ge1xuICAgIC8vIGBhcHAvaW5kZXgvcGFnZS50c3hgIGlzIGEgcmVhbCByb3V0ZS4gT25seSB0aGUgUGFnZXMgUm91dGVyIHJlcG9ydHMgaXRzXG4gICAgLy8gaG9tZSBwYWdlIGFzIGAvaW5kZXhgLlxuICAgIGNvbnN0IGN0eCA9IGFzQ29udGV4dChhcHBQbGF5Z3JvdW5kKTtcbiAgICBjb25zdCBob21lID0gY3R4Lm91dHB1dHMuYXBwUGFnZXMuZmluZCgobykgPT4gby5wYXRobmFtZSA9PT0gXCIvXCIpITtcbiAgICBjb25zdCBpbmRleEZpbGUgPSBob21lLmZpbGVQYXRoLnJlcGxhY2UoL3BhZ2VcXC5qcyQvLCBcImluZGV4L3BhZ2UuanNcIik7XG4gICAgY3R4Lm91dHB1dHMuYXBwUGFnZXMucHVzaCh7XG4gICAgICAuLi5ob21lLFxuICAgICAgaWQ6IFwiL2luZGV4XCIsXG4gICAgICBwYXRobmFtZTogXCIvaW5kZXhcIixcbiAgICAgIGZpbGVQYXRoOiBpbmRleEZpbGUsXG4gICAgfSk7XG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYnVpbGQoY3R4KTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvXCJdLmZpbGVQYXRoKS5ub3QudG9CZShcbiAgICAgIG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2luZGV4XCJdLmZpbGVQYXRoLFxuICAgICk7XG4gICAgZXhwZWN0KG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2luZGV4XCJdLmZpbGVQYXRoKS50b01hdGNoKC9pbmRleFxcL3BhZ2VcXC5qcyQvKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWNvcmRzIG1pZGRsZXdhcmUgd2l0aG91dCBkdXBsaWNhdGluZyBpdHMgbWF0Y2hlcnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG1hbmlmZXN0LFxuICAgICAgZ3JvdXBzOiBbeyBzdGFnaW5nIH1dLFxuICAgIH0gPSBidWlsZChhc0NvbnRleHQoYXBwUGxheWdyb3VuZCkpO1xuICAgIGV4cGVjdChtYW5pZmVzdC5taWRkbGV3YXJlKS5ub3QudG9CZU51bGwoKTtcbiAgICBleHBlY3QobWFuaWZlc3QubWlkZGxld2FyZSEuZmlsZVBhdGgpLnRvTWF0Y2goL15bXi9dLyk7XG4gICAgZXhwZWN0KHN0YWdpbmcuaGFzKG1hbmlmZXN0Lm1pZGRsZXdhcmUhLmZpbGVQYXRoKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QobWFuaWZlc3QubWlkZGxld2FyZSkubm90LnRvSGF2ZVByb3BlcnR5KFwibWF0Y2hlcnNcIik7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0OiBub01pZGRsZXdhcmUgfSA9IGJ1aWxkKGFzQ29udGV4dChwYWdlc0kxOG4pKTtcbiAgICBleHBlY3Qobm9NaWRkbGV3YXJlLm1pZGRsZXdhcmUpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KFwibWFwcyBhIFBhZ2VzIFJvdXRlciBkYXRhLXJvdXRlIHRlbXBsYXRlIHRvIGl0cyBvd25pbmcgcm91dGVcIiwgKCkgPT4ge1xuICAgIC8vIGAvX25leHQvZGF0YS88YnVpbGRJZD4vPGxvY2FsZT4vYmxvZy9bc2x1Z10uanNvbmAgZXhpc3RzIG9ubHkgYXMgYVxuICAgIC8vIHByZXJlbmRlci4gV2l0aG91dCBpdCwgdGhlIElTUiBkYXRhIFVSTHMgYG5leHQgc3RhcnRgIHNlcnZlcyB3b3VsZCA0MDQuXG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYnVpbGQoYXNDb250ZXh0KHBhZ2VzSTE4bikpO1xuICAgIGNvbnN0IGRhdGFUZW1wbGF0ZSA9IGAvX25leHQvZGF0YS8ke21hbmlmZXN0LmJ1aWxkSWR9L2ZyL2Jsb2cvW3NsdWddLmpzb25gO1xuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tkYXRhVGVtcGxhdGVdKS50b0VxdWFsKHtcbiAgICAgIGlkOiBkYXRhVGVtcGxhdGUsXG4gICAgICBmaWxlUGF0aDogbWFuaWZlc3QuZW50cnlwb2ludHNbXCIvZnIvYmxvZy9bc2x1Z11cIl0uZmlsZVBhdGgsXG4gICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICB9KTtcbiAgICBleHBlY3QobWFuaWZlc3QucGF0aG5hbWVzKS50b0NvbnRhaW4oZGF0YVRlbXBsYXRlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWdpc3RlcnMgYSBzdGF0aWMgZ2V0U3RhdGljUHJvcHMgcGFnZSdzIGRhdGEgcm91dGUsIHdoaWNoIG5vIHJ1bGUgcmVhY2hlc1wiLCAoKSA9PiB7XG4gICAgLy8gYHRlc3QvZTJlL25vLXBhZ2UtcHJvcHNgOiBgL19uZXh0L2RhdGEvPGJ1aWxkSWQ+L2dzcC5qc29uYCA0MDQnZCB3aGlsZVxuICAgIC8vIGBuZXh0IHN0YXJ0YCBzZXJ2ZXMgaXQgMjAwLCBzbyBldmVyeSBjbGllbnQtc2lkZSBuYXZpZ2F0aW9uIGludG8gdGhlIHBhZ2VcbiAgICAvLyBmZWxsIGJhY2sgdG8gYSBmdWxsIHBhZ2UgbG9hZC4gYG5leHQgYnVpbGRgIGVtaXRzIGEgYGR5bmFtaWNSb3V0ZXNgIHJ1bGUgZm9yXG4gICAgLy8gYSBkYXRhIHJvdXRlIG9ubHkgd2hlbiB0aGUgcGFnZSBpcyBkeW5hbWljIG9yIHRoZSBhcHAgaGFzIG1pZGRsZXdhcmUsIHNvXG4gICAgLy8gd2l0aG91dCBtaWRkbGV3YXJlIGEgKnN0YXRpYyogcGFnZSdzIGRhdGEgcm91dGUgYXJyaXZlcyBhcyBhIGNvbmNyZXRlXG4gICAgLy8gcHJlcmVuZGVyIHBhdGhuYW1lIHdpdGggbm90aGluZyB0byBtYXRjaCBpdC4gUmVwcm9kdWNlZCBvbiBgcGFnZXMtaTE4bmAsXG4gICAgLy8gd2hvc2UgY2FwdHVyZWQgcHJlcmVuZGVycyBhcmUgYWxsIGR5bmFtaWMsIGJ5IHJlbmFtaW5nIG9uZS5cbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQocGFnZXNJMThuKTtcbiAgICBjb25zdCBkYXRhUm91dGUgPSBgL19uZXh0L2RhdGEvJHtjdHguYnVpbGRJZH0vZW4tVVMvZ3NwLmpzb25gO1xuICAgIGNvbnN0IGNvbmNyZXRlID0gY3R4Lm91dHB1dHMucHJlcmVuZGVycy5maW5kKChpdCkgPT5cbiAgICAgIGl0LnBhdGhuYW1lLmVuZHNXaXRoKFwiaGVsbG8uanNvblwiKSxcbiAgICApITtcbiAgICBjb25jcmV0ZS5wYXRobmFtZSA9IGRhdGFSb3V0ZTtcbiAgICBjb25jcmV0ZS5pZCA9IGRhdGFSb3V0ZTtcbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBidWlsZChjdHgpO1xuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tkYXRhUm91dGVdKS50b0VxdWFsKHtcbiAgICAgIGlkOiBkYXRhUm91dGUsXG4gICAgICBmaWxlUGF0aDogbWFuaWZlc3QuZW50cnlwb2ludHNbXCIvZW4tVVMvYmxvZy9bc2x1Z11cIl0uZmlsZVBhdGgsXG4gICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICB9KTtcblxuICAgIC8vIEFuZCB0aGUgZHluYW1pYyBwYWdlJ3Mgb3duIGNvbmNyZXRlIGRhdGEgcGF0aG5hbWUgc3RheXMgb3V0OiB0aGUgdW5nYXRlZFxuICAgIC8vIGDigKYvYmxvZy9bc2x1Z10uanNvbmAgcnVsZSBhbHJlYWR5IHJlYWNoZXMgaXQsIGFuZCB0aGF0IHJ1bGUgaXMgd2hlcmUgdGhlXG4gICAgLy8gYG54dFBzbHVnYCBwYXJhbSBjb21lcyBmcm9tIOKAlCByZXNvbHZpbmcgdGhlIHJlcXVlc3QgdG8gaXRzZWxmIHdvdWxkIGRyb3AgaXQuXG4gICAgY29uc3QgeyBtYW5pZmVzdDogY2FwdHVyZWQgfSA9IGJ1aWxkKGFzQ29udGV4dChwYWdlc0kxOG4pKTtcbiAgICBleHBlY3QoXG4gICAgICBjYXB0dXJlZC5lbnRyeXBvaW50c1tcbiAgICAgICAgYC9fbmV4dC9kYXRhLyR7Y2FwdHVyZWQuYnVpbGRJZH0vZW4tVVMvYmxvZy9oZWxsby5qc29uYFxuICAgICAgXSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYW4gQXBwIFJvdXRlciBmYWxsYmFjayB0ZW1wbGF0ZSBvbiBpdHMgb3duIGVudHJ5cG9pbnRcIiwgKCkgPT4ge1xuICAgIC8vIGAvaXNyL1tpZF1gIGlzIGEgcHJlcmVuZGVyICphbmQqIGFuIGFwcFBhZ2VzIG91dHB1dC4gVGhlIG91dHB1dCB3aW5zLCBzb1xuICAgIC8vIGBpZGAgc3RheXMgdGhlIHJvdXRlJ3Mgb3duIHJhdGhlciB0aGFuIGJlaW5nIHJld3JpdHRlbi5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBidWlsZChhc0NvbnRleHQoYXBwUGxheWdyb3VuZCkpO1xuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9pc3IvW2lkXVwiXS5pZCkudG9CZShcIi9pc3IvW2lkXVwiKTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvaXNyL1tpZF0ucnNjXCJdKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcImFkZHMgYSBjb25jcmV0ZSBwcmVyZW5kZXIgcGF0aG5hbWUgd2hlbiBvbmx5IGEgZ2F0ZWQgcnVsZSBtYXRjaGVzIGl0XCIsICgpID0+IHtcbiAgICAvLyBXaGF0IGEgcm9vdC1wYXJhbXMgYXBwIHByb2R1Y2VzOiBgYXBwL1tsb2NhbGVdL3BhZ2UudHN4YCB3aXRoXG4gICAgLy8gYGdlbmVyYXRlU3RhdGljUGFyYW1zKClgIGFuZCBubyBgYXBwL2xheW91dC50c3hgLiBUaGUgcGFyYW1zIGNhbiBuZXZlciBiZVxuICAgIC8vIGZpbGxlZCBhdCByZXF1ZXN0IHRpbWUsIHNvIGBuZXh0IGJ1aWxkYCBlbWl0cyB0aGUgYGR5bmFtaWNSb3V0ZXNgIHJ1bGUgd2l0aCBhXG4gICAgLy8gZHJhZnQtbW9kZSBgaGFzYCBhbmQgZXhwZWN0cyB0aGUgcGxhdGZvcm0gdG8gc2VydmUgYC9lbmAgZnJvbSB0aGUgcHJlcmVuZGVyLlxuICAgIC8vIE1lYXN1cmVkIGFnYWluc3QgYHRlc3QvZTJlL2FwcC1kaXIvcGFyYWxsZWwtcm91dGVzLXJvb3QtcGFyYW0tZHluYW1pYy1jaGlsZGAsXG4gICAgLy8gd2hlcmUgZXZlcnkgVVJMIG9mIHRoZSBhcHAgNDA0J2QuIFJlcHJvZHVjZWQgaGVyZSBieSBnYXRpbmdcbiAgICAvLyBgYXBwLXBsYXlncm91bmRgJ3MgYC9pc3IvW2lkXWAgcnVsZXMsIHdoaWNoIG5vIGNvbW1pdHRlZCBjYXB0dXJlIGRvZXMuXG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGZvciAoY29uc3Qgcm91dGUgb2YgY3R4LnJvdXRpbmcuZHluYW1pY1JvdXRlcykge1xuICAgICAgaWYgKHJvdXRlLnNvdXJjZVJlZ2V4LmluY2x1ZGVzKFwiaXNyXCIpKSB7XG4gICAgICAgIHJvdXRlLmhhcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IFwiY29va2llXCIsIGtleTogXCJfX3ByZXJlbmRlcl9ieXBhc3NcIiwgdmFsdWU6IFwic2VjcmV0XCIgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYnVpbGQoY3R4KTtcbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvaXNyLzFcIl0pLnRvRXF1YWwoe1xuICAgICAgaWQ6IFwiL2lzci8xXCIsXG4gICAgICBmaWxlUGF0aDogbWFuaWZlc3QuZW50cnlwb2ludHNbXCIvaXNyL1tpZF1cIl0uZmlsZVBhdGgsXG4gICAgICB0eXBlOiBcImFwcC1wYWdlXCIsXG4gICAgfSk7XG4gICAgLy8gVGhlIFJTQyBhbmQgc2VnbWVudC1wcmVmZXRjaCB2YXJpYW50cyB0b286IHRoZXkgYXJlIHRoZSBVUkxzIGEgY2xpZW50LXNpZGVcbiAgICAvLyBuYXZpZ2F0aW9uIGFza3MgZm9yLCBzbyB3aXRob3V0IHRoZW0gdGhlIGFwcCByZW5kZXJzIGFuZCBuZXZlciBoeWRyYXRlcy5cbiAgICBleHBlY3QobWFuaWZlc3QuZW50cnlwb2ludHNbXCIvaXNyLzEucnNjXCJdKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChcbiAgICAgIG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2lzci8xLnNlZ21lbnRzL2lzci8kZCRpZC9fX1BBR0VfXy5zZWdtZW50LnJzY1wiXSxcbiAgICApLnRvQmVEZWZpbmVkKCk7XG4gICAgLy8gVW5tdXRhdGVkLCB0aGUgc2FtZSBwYXRobmFtZXMgc3RheSBvdXQ6IHRoZSB1bmdhdGVkIHJ1bGUgYWxyZWFkeSByZWFjaGVzXG4gICAgLy8gYC9pc3IvW2lkXWAsIHdoaWNoIGlzIHdoZXJlIHRoZSBgbnh0UGlkYCBwYXJhbSBjb21lcyBmcm9tLlxuICAgIGNvbnN0IHsgbWFuaWZlc3Q6IHVuZ2F0ZWQgfSA9IGJ1aWxkKGFzQ29udGV4dChhcHBQbGF5Z3JvdW5kKSk7XG4gICAgZXhwZWN0KHVuZ2F0ZWQuZW50cnlwb2ludHNbXCIvaXNyLzFcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QodW5nYXRlZC5lbnRyeXBvaW50c1tcIi9pc3IvMS5yc2NcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICAvLyBBbmQgYSBwYXRobmFtZSBubyBydWxlIG1hdGNoZXMgYXQgYWxsIHN0YXlzIG91dCBlaXRoZXIgd2F5OiBgcmVzb2x2ZVJvdXRlc2BcbiAgICAvLyBuZXZlciByZXNvbHZlcyBhIHN0YXRpYyByb3V0ZSdzIHNlZ21lbnQgb3V0cHV0cywgc28gbGlzdGluZyB0aGVtIGlzIHdlaWdodC5cbiAgICBleHBlY3QoXG4gICAgICBtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9pbmRleC5zZWdtZW50cy9fdHJlZS5zZWdtZW50LnJzY1wiXSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgcHVibGljLyBvdXQgb2YgdGhlIG1hbmlmZXN0IGFuZCB0aGUgc3RhZ2luZyBwbGFuXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBUaGUgY29udGFpbmVyIHJ1bnRpbWUgbGlzdHMgYHB1YmxpYy9gIG9mZiBkaXNrIGF0IGNvbGQgc3RhcnRcbiAgICAvLyAoYHJlYWRQdWJsaWNGaWxlc2ApLCBiZWNhdXNlIG9ubHkgdGhlIGRpc2sgaGFzIHdoYXQgYSBgcG9zdGJ1aWxkYCB3cm90ZVxuICAgIC8vIGludG8gaXQgYWZ0ZXIgdGhpcyBob29rIHJhbjsgYW5kIHRoZSBMYW1iZGEgdHlwZXMgbmV2ZXIgc2VydmUgaXQuXG4gICAgY29uc3QgcmVwb1Jvb3QgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1wdWJsaWMtXCIpKTtcbiAgICAvLyBFdmVyeSBwYXRoIGluIHRoZSBmaXh0dXJlLCByZWJhc2VkIGZyb20gYC9yZXBvYCBvbnRvIGEgcmVhbCBkaXJlY3RvcnkuXG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KFxuICAgICAgSlNPTi5wYXJzZShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoYXBwUGxheWdyb3VuZEJhc2VQYXRoKS5yZXBsYWNlQWxsKFxuICAgICAgICAgICdcIi9yZXBvJyxcbiAgICAgICAgICBgXCIke3JlcG9Sb290fWAsXG4gICAgICAgICksXG4gICAgICApLFxuICAgICk7XG4gICAgYXdhaXQgbWtkaXIoam9pbihjdHgucHJvamVjdERpciwgXCJwdWJsaWNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGN0eC5wcm9qZWN0RGlyLCBcInB1YmxpY1wiLCBcInRlc3QudHh0XCIpLCBcImhlbGxvXCIpO1xuXG4gICAgY29uc3Qge1xuICAgICAgbWFuaWZlc3QsXG4gICAgICBncm91cHM6IFt7IHN0YWdpbmcgfV0sXG4gICAgfSA9IGJ1aWxkKGN0eCk7XG4gICAgZXhwZWN0KFxuICAgICAgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdC5zdGF0aWNGaWxlcykuZmlsdGVyKChrZXkpID0+XG4gICAgICAgIGtleS5pbmNsdWRlcyhcIi9wdWJsaWMvXCIpLFxuICAgICAgKSxcbiAgICApLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChtYW5pZmVzdC5wYXRobmFtZXMpLm5vdC50b0NvbnRhaW4oXCIvcHJvZC90ZXN0LnR4dFwiKTtcbiAgICBleHBlY3QoXG4gICAgICBbLi4uc3RhZ2luZy5rZXlzKCldLmZpbHRlcigoa2V5KSA9PiBrZXkuaW5jbHVkZXMoXCIvcHVibGljL1wiKSksXG4gICAgKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJ3YXJucyBpbnN0ZWFkIG9mIHRocm93aW5nIHdoZW4gYSB0ZW1wbGF0ZSBoYXMgbm8gb3duaW5nIHJvdXRlXCIsICgpID0+IHtcbiAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQocGFnZXNJMThuKTtcbiAgICBjdHgub3V0cHV0cy5wcmVyZW5kZXJzWzBdLnJvdXRlID0gXCIvZ29uZS9bc2x1Z11cIjtcbiAgICBjdHgub3V0cHV0cy5wcmVyZW5kZXJzWzBdLnBhdGhuYW1lID0gXCIvZ29uZS9bc2x1Z11cIjtcbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBidWlsZChjdHgpO1xuICAgIGV4cGVjdChtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9nb25lL1tzbHVnXVwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChcbiAgICAgIHdhcm4ubW9jay5jYWxsc1xuICAgICAgICAubWFwKChjYWxsKSA9PiBTdHJpbmcoY2FsbFswXSkpXG4gICAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UuaW5jbHVkZXMoXCJ3aWxsIDQwNFwiKSksXG4gICAgKS50b0VxdWFsKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCcvZ29uZS9bc2x1Z10gKHJvdXRlOiBcIi9nb25lL1tzbHVnXVwiKScpLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcIndhcm5zIG9uY2UgcGVyIHVuc3VwcG9ydGVkIHJvdXRlIGNvbmZpZyBrZXlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGJ1aWxkKGFzQ29udGV4dChwYWdlc0kxOG4pKTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHdhcm4ubW9jay5jYWxscy5tYXAoKGNhbGwpID0+IFN0cmluZyhjYWxsWzBdKSk7XG4gICAgZXhwZWN0KG1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS5pbmNsdWRlcyhcImBtYXhEdXJhdGlvbmBcIikpKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KG1lc3NhZ2VzWzBdKS50b0NvbnRhaW4oXCJzc3JcIik7XG4gICAgZXhwZWN0KG1lc3NhZ2VzWzBdKS50b0NvbnRhaW4oXCJvdmVycmlkZXNcIik7XG4gICAgZXhwZWN0KG1lc3NhZ2VzLnNvbWUoKG0pID0+IG0uaW5jbHVkZXMoXCJgcHJlZmVycmVkUmVnaW9uYFwiKSkpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInRocm93cyBvbiBhbiBlZGdlLXJ1bnRpbWUgb3V0cHV0XCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgY3R4Lm91dHB1dHMuYXBwUm91dGVzWzBdLnJ1bnRpbWUgPSBcImVkZ2VcIjtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdyhcbiAgICAgIC9jYW5ub3QgZGVwbG95IHJvdXRlcyBidWlsdCBmb3IgdGhlIGVkZ2UgcnVudGltZS8sXG4gICAgKTtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdyhjdHgub3V0cHV0cy5hcHBSb3V0ZXNbMF0uc291cmNlUGFnZSk7XG4gIH0pO1xuXG4gIGl0KFwiYmxhbWVzIG1pZGRsZXdhcmUsIG5vdCBgL2AsIGZvciBlZGdlLXJ1bnRpbWUgbWlkZGxld2FyZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGNvbnN0IG1pZGRsZXdhcmUgPSBjdHgub3V0cHV0cy5taWRkbGV3YXJlO1xuICAgIGlmICghbWlkZGxld2FyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZml4dHVyZSBoYXMgbm8gbWlkZGxld2FyZSBvdXRwdXRcIik7XG4gICAgfVxuICAgIC8vIFdoYXQgYSBsZWdhY3kgYG1pZGRsZXdhcmUudHNgIGJ1aWxkcyB0by4gSXRzIGBzb3VyY2VQYWdlYCBpcyBgL2AsIHNvIHRoZVxuICAgIC8vIHJlZ3Jlc3Npb24gZ3VhcmRlZCBoZXJlIGlzIHRoZSBtZXNzYWdlIHRlbGxpbmcgYW4gYXV0aG9yIHRvIGVkaXQgdGhlIGhvbWVcbiAgICAvLyBwYWdlLlxuICAgIG1pZGRsZXdhcmUucnVudGltZSA9IFwiZWRnZVwiO1xuXG4gICAgZXhwZWN0KCgpID0+IGJ1aWxkKGN0eCkpLnRvVGhyb3coXG4gICAgICAvY2Fubm90IGRlcGxveSBtaWRkbGV3YXJlIGJ1aWx0IGZvciB0aGUgZWRnZSBydW50aW1lLyxcbiAgICApO1xuICAgIGV4cGVjdCgoKSA9PiBidWlsZChjdHgpKS50b1Rocm93KG1pZGRsZXdhcmUuZmlsZVBhdGgpO1xuICAgIC8vIEJvdGggd2F5cyBvdXQ6IGBtaWRkbGV3YXJlLnRzYCBvbmx5IGRlZmF1bHRzIHRvIGVkZ2UuXG4gICAgZXhwZWN0KCgpID0+IGJ1aWxkKGN0eCkpLnRvVGhyb3coL3J1bnRpbWU6IFwibm9kZWpzXCIvKTtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdygvcHJveHlcXC50cy8pO1xuICAgIGV4cGVjdCgoKSA9PiBidWlsZChjdHgpKS5ub3QudG9UaHJvdygvZWRnZS1vbmx5Lyk7XG4gICAgZXhwZWN0KCgpID0+IGJ1aWxkKGN0eCkpLm5vdC50b1Rocm93KFxuICAgICAgL2Nhbm5vdCBkZXBsb3kgcm91dGVzIGJ1aWx0IGZvciB0aGUgZWRnZSBydW50aW1lLyxcbiAgICApO1xuICB9KTtcblxuICBpdChcInRocm93cyB3aGVuIHR3byBvdXRwdXRzIG1hcCBvbmUga2V5IHRvIGRpZmZlcmVudCBjb250ZW50XCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgY29uc3QgW2ZpcnN0LCBzZWNvbmRdID0gY3R4Lm91dHB1dHMuYXBwUGFnZXM7XG4gICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoZmlyc3QuYXNzZXRzKVswXTtcbiAgICBmaXJzdC5hc3NldHNIYXNoZXNba2V5XSA9IFwiaGFzaC1hXCI7XG4gICAgc2Vjb25kLmFzc2V0c1trZXldID0gZmlyc3QuYXNzZXRzW2tleV07XG4gICAgc2Vjb25kLmFzc2V0c0hhc2hlc1trZXldID0gXCJoYXNoLWJcIjtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdygvbWFwIFwiW15cIl0rXCIgdG8gZGlmZmVyZW50IGNvbnRlbnQvKTtcbiAgfSk7XG5cbiAgaXQoXCJ0aHJvd3Mgb24gYW4gYXNzZXQga2V5IG91dHNpZGUgdGhlIGRlcGxveW1lbnQgcm9vdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gYXNDb250ZXh0KGFwcFBsYXlncm91bmQpO1xuICAgIGN0eC5vdXRwdXRzLmFwcFBhZ2VzWzBdLmFzc2V0c1tcIi4uL2VzY2FwZS5qc1wiXSA9IFwiL2Vsc2V3aGVyZS9lc2NhcGUuanNcIjtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdygvb3V0c2lkZSB0aGUgZGVwbG95bWVudCByb290Lyk7XG4gIH0pO1xuXG4gIGl0KFwidGhyb3dzIG9uIGFuIGFzc2V0IGtleSBzaGFkb3dpbmcgdGhlIHJlc2VydmVkIHJ1bnRpbWUgZGlyZWN0b3J5XCIsICgpID0+IHtcbiAgICBjb25zdCBjdHggPSBhc0NvbnRleHQoYXBwUGxheWdyb3VuZCk7XG4gICAgY3R4Lm91dHB1dHMuYXBwUGFnZXNbMF0uYXNzZXRzW2Ake1JVTlRJTUVfRElSX05BTUV9L2xhbWJkYS5tanNgXSA9XG4gICAgICBcIi9yZXBvL3doYXRldmVyLm1qc1wiO1xuICAgIGV4cGVjdCgoKSA9PiBidWlsZChjdHgpKS50b1Rocm93KFxuICAgICAgbmV3IFJlZ0V4cChgXCIke1JVTlRJTUVfRElSX05BTUV9L1wiIGlzIHJlc2VydmVkYCksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJ0aHJvd3Mgd2hlbiB0d28gb3V0cHV0cyBjbGFpbSBvbmUgcGF0aG5hbWUgZnJvbSBkaWZmZXJlbnQgZmlsZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IGFzQ29udGV4dChhcHBQbGF5Z3JvdW5kKTtcbiAgICBjdHgub3V0cHV0cy5hcHBSb3V0ZXNbMF0ucGF0aG5hbWUgPSBjdHgub3V0cHV0cy5hcHBQYWdlc1swXS5wYXRobmFtZTtcbiAgICBleHBlY3QoKCkgPT4gYnVpbGQoY3R4KSkudG9UaHJvdygvY2xhaW0gdGhlIHBhdGhuYW1lIFwiW15cIl0rXCIvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ3cml0ZUJ1aWxkT3V0cHV0c1wiLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBCdWlsZHMgYSB0aHJvd2F3YXkgcmVwbyBvbiBkaXNrIHNvIHN0YWdpbmcgY2FuIGJlIGV4ZXJjaXNlZCBmb3IgcmVhbDpcbiAgICogZml4dHVyZSBzb3VyY2VzIGFyZSBgL3JlcG9gIHBsYWNlaG9sZGVycyBhbmQgY2Fubm90IGJlIGNvcGllZC5cbiAgICovXG4gIC8qKlxuICAgKiBBIGBuZXh0YCBpbnN0YWxsIGp1c3QgcmVhbCBlbm91Z2ggZm9yIHtAbGluayBhZGRSdW50aW1lTmV4dENsb3N1cmV9OiB0aGVcbiAgICogbW9kdWxlcyBgc3JjL3J1bnRpbWUvaW1hZ2UudHNgIHJlcXVpcmVzLCBvbmUgZmlsZSBvbmx5IHRoZSB0cmFjZSByZWFjaGVzLCBhbmRcbiAgICogYSBzdGFuZC1pbiBmb3IgbmV4dCdzIHZlbmRvcmVkIGBAdmVyY2VsL25mdGAgdGhhdCByZXBvcnRzIHRoZW0uIFRyYWNpbmcgZm9yXG4gICAqIHJlYWwgaXMgbmV4dCdzIGpvYiwgbm90IG91cnM7IHdoYXQgaXMgdW5kZXIgdGVzdCBpcyB0aGF0IHRoZSBjbG9zdXJlIGlzXG4gICAqIHJlc29sdmVkIGZyb20gdGhlIHByb2plY3QgZGlyIGFuZCBzdGFnZWQgdW5kZXIgcmVwby1yb290LXJlbGF0aXZlIGtleXMuXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBpbnN0YWxsRmFrZU5leHQoXG4gICAgcmVwb1Jvb3Q6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IHBucG0/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgLy8gVW5kZXIgcG5wbSwgYG5leHRgIGxpdmVzIGluIHRoZSB2aXJ0dWFsIHN0b3JlIGJlaGluZCBhIGxpbmssIGFuZCBpdHMgb3duXG4gICAgLy8gZGVwZW5kZW5jaWVzIGFyZSBsaW5rcyBiZXNpZGUgaXQuXG4gICAgY29uc3Qgc3RvcmVNb2R1bGVzID0gam9pbihcbiAgICAgIHJlcG9Sb290LFxuICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgIFwiLnBucG1cIixcbiAgICAgIFwibmV4dEAxLjAuMFwiLFxuICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICApO1xuICAgIGNvbnN0IG5leHRSb290ID0gb3B0aW9ucy5wbnBtXG4gICAgICA/IGpvaW4oc3RvcmVNb2R1bGVzLCBcIm5leHRcIilcbiAgICAgIDogam9pbihyZXBvUm9vdCwgXCJub2RlX21vZHVsZXNcIiwgXCJuZXh0XCIpO1xuICAgIGlmIChvcHRpb25zLnBucG0pIHtcbiAgICAgIGNvbnN0IG5leHRFbnYgPSBqb2luKFxuICAgICAgICByZXBvUm9vdCxcbiAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgXCIucG5wbVwiLFxuICAgICAgICBcIkBuZXh0K2VudkAxLjAuMFwiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgICBcIkBuZXh0XCIsXG4gICAgICAgIFwiZW52XCIsXG4gICAgICApO1xuICAgICAgYXdhaXQgbWtkaXIobmV4dEVudiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihuZXh0RW52LCBcImluZGV4LmpzXCIpLCBcIi8vIEBuZXh0L2VudlxcblwiKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgICAgam9pbihuZXh0RW52LCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBcIkBuZXh0L2VudlwiLCBtYWluOiBcImluZGV4LmpzXCIgfSksXG4gICAgICApO1xuICAgICAgYXdhaXQgbWtkaXIoam9pbihzdG9yZU1vZHVsZXMsIFwiQG5leHRcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgc3ltbGluayhcbiAgICAgICAgXCIuLi8uLi8uLi9AbmV4dCtlbnZAMS4wLjAvbm9kZV9tb2R1bGVzL0BuZXh0L2VudlwiLFxuICAgICAgICBqb2luKHN0b3JlTW9kdWxlcywgXCJAbmV4dFwiLCBcImVudlwiKSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBta2RpcihuZXh0Um9vdCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCBzeW1saW5rKFxuICAgICAgICBcIi5wbnBtL25leHRAMS4wLjAvbm9kZV9tb2R1bGVzL25leHRcIixcbiAgICAgICAgam9pbihyZXBvUm9vdCwgXCJub2RlX21vZHVsZXNcIiwgXCJuZXh0XCIpLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICBcImRpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc1wiLFxuICAgICAgXCJkaXN0L3NlcnZlci9zZXJ2ZS1zdGF0aWMuanNcIixcbiAgICAgIFwiZGlzdC9zZXJ2ZXIvbGliL3JvdXRlci11dGlscy9pbnN0cnVtZW50YXRpb24tZ2xvYmFscy5leHRlcm5hbC5qc1wiLFxuICAgICAgLy8gUmVhY2hlZCBvbmx5IHRocm91Z2ggdGhlIHRyYWNlLCBpLmUuIHRoZSByZWFzb24gdHJhY2luZyBpcyBuZWVkZWQuXG4gICAgICBcImRpc3Qvc2hhcmVkL2xpYi9tYXRjaC1yZW1vdGUtcGF0dGVybi5qc1wiLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBwYXRoID0gam9pbihuZXh0Um9vdCwgZmlsZSk7XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBgLy8gJHtmaWxlfVxcbmApO1xuICAgIH1cbiAgICAvLyBObyBgZXhwb3J0c2AgZmllbGQ6IGBuZXh0L2Rpc3QvKipgIGlzIHJlcXVpcmVkIGJ5IHBhdGguXG4gICAgYXdhaXQgd3JpdGVGaWxlKFxuICAgICAgam9pbihuZXh0Um9vdCwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IFwibmV4dFwiLCB2ZXJzaW9uOiBcIjAuMC4wLXRlc3RcIiB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgdHJhY2VyID0gam9pbihuZXh0Um9vdCwgXCJkaXN0XCIsIFwiY29tcGlsZWRcIiwgXCJAdmVyY2VsXCIsIFwibmZ0XCIpO1xuICAgIGF3YWl0IG1rZGlyKHRyYWNlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKFxuICAgICAgam9pbih0cmFjZXIsIFwicGFja2FnZS5qc29uXCIpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBcIkB2ZXJjZWwvbmZ0XCIsIG1haW46IFwiaW5kZXguanNcIiB9KSxcbiAgICApO1xuICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgIGpvaW4odHJhY2VyLCBcImluZGV4LmpzXCIpLFxuICAgICAgLy8gUmVhbCBuZnQgcmV0dXJucyBwYXRocyByZWxhdGl2ZSB0byBgYmFzZWAsIHdoaWNoIGlzIHRoZSByZXBvIHJvb3QgdGhlXG4gICAgICAvLyBhZGFwdGVyIHBhc3Nlcy5cbiAgICAgIGBjb25zdCBwcmVmaXggPSAke0pTT04uc3RyaW5naWZ5KHJlbGF0aXZlKHJlcG9Sb290LCBuZXh0Um9vdCkuc3BsaXQoc2VwKS5qb2luKFwiL1wiKSl9O1xcbmAgK1xuICAgICAgICBcImNvbnN0IHsgcmVhbHBhdGhTeW5jIH0gPSByZXF1aXJlKCdub2RlOmZzJyk7XFxuXCIgK1xuICAgICAgICBcImNvbnN0IHsgcmVsYXRpdmUgfSA9IHJlcXVpcmUoJ25vZGU6cGF0aCcpO1xcblwiICtcbiAgICAgICAgXCJleHBvcnRzLm5vZGVGaWxlVHJhY2UgPSBhc3luYyAoZW50cmllcywgeyBiYXNlIH0pID0+IHtcXG5cIiArXG4gICAgICAgIC8vIExpa2UgcmVhbCBuZnQsIHRoZSBlbnRyaWVzIHRoZW1zZWx2ZXMgYXJlIGluIHRoZSBsaXN0LlxuICAgICAgICBcIiAgY29uc3QgdHJhY2VkID0gZW50cmllc1xcblwiICtcbiAgICAgICAgXCIgICAgLm1hcCgoZSkgPT4gcmVsYXRpdmUocmVhbHBhdGhTeW5jKGJhc2UpLCBlKSlcXG5cIiArXG4gICAgICAgIFwiICAgIC5maWx0ZXIoKGUpID0+ICFlLnN0YXJ0c1dpdGgoJy4uJykpO1xcblwiICtcbiAgICAgICAgXCIgIGlmICh0cmFjZWQuc29tZSgoZSkgPT4gZS5lbmRzV2l0aCgnaW1hZ2Utb3B0aW1pemVyLmpzJykpKSB7XFxuXCIgK1xuICAgICAgICBcIiAgICB0cmFjZWQucHVzaChgJHtwcmVmaXh9L2Rpc3Qvc2hhcmVkL2xpYi9tYXRjaC1yZW1vdGUtcGF0dGVybi5qc2ApO1xcblwiICtcbiAgICAgICAgXCIgIH1cXG5cIiArXG4gICAgICAgIFwiICByZXR1cm4geyBmaWxlTGlzdDogbmV3IFNldCh0cmFjZWQpIH07XFxuXCIgK1xuICAgICAgICBcIn07XFxuXCIsXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG1ha2VSZXBvKFxuICAgIG9wdGlvbnM6IHsgd2l0aE5leHQ/OiBib29sZWFuOyBwbnBtTmV4dD86IGJvb2xlYW4gfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCByZXBvUm9vdCA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgXCJjZGstbmV4dGpzLXN0YWdpbmctXCIpKTtcbiAgICBpZiAob3B0aW9ucy53aXRoTmV4dCB8fCBvcHRpb25zLnBucG1OZXh0KSB7XG4gICAgICBhd2FpdCBpbnN0YWxsRmFrZU5leHQocmVwb1Jvb3QsIHsgcG5wbTogb3B0aW9ucy5wbnBtTmV4dCB9KTtcbiAgICB9XG4gICAgY29uc3QgcHJvamVjdERpciA9IGpvaW4ocmVwb1Jvb3QsIFwiYXBwXCIpO1xuICAgIGNvbnN0IGRpc3REaXIgPSBqb2luKHByb2plY3REaXIsIFwiLm5leHRcIik7XG4gICAgY29uc3QgZW50cnkgPSBqb2luKGRpc3REaXIsIFwic2VydmVyXCIsIFwiYXBwXCIsIFwicGFnZS5qc1wiKTtcbiAgICBjb25zdCBkZXAgPSBqb2luKHByb2plY3REaXIsIFwibm9kZV9tb2R1bGVzXCIsIFwiZGVwXCIpO1xuICAgIGNvbnN0IHN0b3JlID0gam9pbihyZXBvUm9vdCwgXCJzdG9yZVwiLCBcInBrZ1wiKTtcbiAgICAvLyBwbnBtJ3MgdmlydHVhbCBzdG9yZTogb25lIHBhY2thZ2UgcmVhY2hhYmxlIG9ubHkgZnJvbSBpbnNpZGUgaXQsIGFuZCBvbmVcbiAgICAvLyB0aGF0IGFsc28gaGFzIGEgbG9naWNhbCBwYXRoIChgYXBwL25vZGVfbW9kdWxlcy9kZXBgKS5cbiAgICBjb25zdCB2aXJ0dWFsU3RvcmUgPSBqb2luKHJlcG9Sb290LCBcIm5vZGVfbW9kdWxlc1wiLCBcIi5wbnBtXCIpO1xuICAgIGNvbnN0IGhpZGRlbiA9IGpvaW4oXG4gICAgICB2aXJ0dWFsU3RvcmUsXG4gICAgICBcImhlbHBlcnNAMS4wLjBcIixcbiAgICAgIFwibm9kZV9tb2R1bGVzXCIsXG4gICAgICBcIkBzY29wZVwiLFxuICAgICAgXCJoZWxwZXJzXCIsXG4gICAgKTtcbiAgICBjb25zdCBkZXBJblN0b3JlID0gam9pbih2aXJ0dWFsU3RvcmUsIFwiZGVwQDEuMC4wXCIsIFwibm9kZV9tb2R1bGVzXCIsIFwiZGVwXCIpO1xuICAgIC8vIFRoZSBzaGFwZSB0aGF0IG1ha2VzIGEgc3RvcmUgcGFja2FnZSByZWFjaGFibGUgZnJvbSBhbm90aGVyIHN0b3JlXG4gICAgLy8gcGFja2FnZTogYSBsaW5rIGJldHdlZW4gdHdvIHN0b3JlIGRpcmVjdG9yaWVzLCBubyBmaWxlcyBvZiBpdHMgb3duLlxuICAgIGNvbnN0IGhpZGRlbkxpbmsgPSBqb2luKFxuICAgICAgdmlydHVhbFN0b3JlLFxuICAgICAgXCJkZXBAMS4wLjBcIixcbiAgICAgIFwibm9kZV9tb2R1bGVzXCIsXG4gICAgICBcIkBzY29wZVwiLFxuICAgICAgXCJoZWxwZXJzXCIsXG4gICAgKTtcblxuICAgIGF3YWl0IG1rZGlyKGpvaW4oZGlzdERpciwgXCJzZXJ2ZXJcIiwgXCJhcHBcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIEV2ZXJ5IGRlcGxveW1lbnQgcm9vdCBuZWVkcyB0aGlzLCBhbmQgYGxvYWRSdW50aW1lYCByZWZ1c2VzIHRvIHNlcnZlXG4gICAgLy8gd2l0aG91dCBpdCwgc28gdGhlIHN0YWdpbmcgcGxhbiBjYXJyaWVzIGl0IGluZGVwZW5kZW50bHkgb2YgYW55IG91dHB1dCdzXG4gICAgLy8gdHJhY2VkIGFzc2V0cy5cbiAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihkaXN0RGlyLCBcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIpLCBcInt9XFxuXCIpO1xuICAgIGF3YWl0IG1rZGlyKGRlcCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgbWtkaXIoc3RvcmUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IG1rZGlyKGhpZGRlbiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgbWtkaXIoZGVwSW5TdG9yZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGVudHJ5LCBcIm1vZHVsZS5leHBvcnRzID0ge307XFxuXCIpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGRlcCwgXCJpbmRleC5qc1wiKSwgXCIvLyBkZXBcXG5cIik7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oc3RvcmUsIFwiaW5kZXguanNcIiksIFwiLy8gc3RvcmVcXG5cIik7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oaGlkZGVuLCBcImluZGV4LmpzXCIpLCBcIi8vIGhlbHBlcnNcXG5cIik7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oZGVwSW5TdG9yZSwgXCJpbmRleC5qc1wiKSwgXCIvLyBkZXBcXG5cIik7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShoaWRkZW5MaW5rKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgc3ltbGluayhcbiAgICAgIGpvaW4oXG4gICAgICAgIFwiLi5cIixcbiAgICAgICAgXCIuLlwiLFxuICAgICAgICBcIi4uXCIsXG4gICAgICAgIFwiaGVscGVyc0AxLjAuMFwiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgICBcIkBzY29wZVwiLFxuICAgICAgICBcImhlbHBlcnNcIixcbiAgICAgICksXG4gICAgICBoaWRkZW5MaW5rLFxuICAgICk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4ocHJvamVjdERpciwgXCIuZW52XCIpLCBcIlNIQVJFRD0xXFxuXCIpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHByb2plY3REaXIsIFwiLmVudi5wcm9kdWN0aW9uXCIpLCBcIlBST0Q9MVxcblwiKTtcbiAgICAvLyBBIHJlbGF0aXZlIGxpbmsgd2hvc2UgdGFyZ2V0IGlzIGl0c2VsZiBzdGFnZWQ6IHBucG0ncyBjb21tb24gc2hhcGUuXG4gICAgYXdhaXQgc3ltbGluayhcImRlcFwiLCBqb2luKHByb2plY3REaXIsIFwibm9kZV9tb2R1bGVzXCIsIFwicmVsLWxpbmtcIikpO1xuICAgIC8vIEFuIGFic29sdXRlIGxpbmsgb3V0IG9mIHRoZSB0cmVlOiBzdGFnaW5nIG11c3QgbWF0ZXJpYWxpemUgaXQgaW5zdGVhZC5cbiAgICBhd2FpdCBzeW1saW5rKHN0b3JlLCBqb2luKHByb2plY3REaXIsIFwibm9kZV9tb2R1bGVzXCIsIFwiYWJzLWxpbmtcIikpO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgaWQ6IFwiL1wiLFxuICAgICAgcGF0aG5hbWU6IFwiL1wiLFxuICAgICAgc291cmNlUGFnZTogXCIvcGFnZVwiLFxuICAgICAgZmlsZVBhdGg6IGVudHJ5LFxuICAgICAgcnVudGltZTogXCJub2RlanNcIixcbiAgICAgIGNvbmZpZzoge30sXG4gICAgICBhc3NldHM6IHtcbiAgICAgICAgXCJhcHAvbm9kZV9tb2R1bGVzL2RlcC9pbmRleC5qc1wiOiBqb2luKGRlcCwgXCJpbmRleC5qc1wiKSxcbiAgICAgICAgXCJhcHAvbm9kZV9tb2R1bGVzL3JlbC1saW5rXCI6IGpvaW4oXG4gICAgICAgICAgcHJvamVjdERpcixcbiAgICAgICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgICAgIFwicmVsLWxpbmtcIixcbiAgICAgICAgKSxcbiAgICAgICAgXCJhcHAvbm9kZV9tb2R1bGVzL2Ficy1saW5rXCI6IGpvaW4oXG4gICAgICAgICAgcHJvamVjdERpcixcbiAgICAgICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgICAgIFwiYWJzLWxpbmtcIixcbiAgICAgICAgKSxcbiAgICAgICAgXCJub2RlX21vZHVsZXMvLnBucG0vaGVscGVyc0AxLjAuMC9ub2RlX21vZHVsZXMvQHNjb3BlL2hlbHBlcnMvaW5kZXguanNcIjpcbiAgICAgICAgICBqb2luKGhpZGRlbiwgXCJpbmRleC5qc1wiKSxcbiAgICAgICAgXCJub2RlX21vZHVsZXMvLnBucG0vZGVwQDEuMC4wL25vZGVfbW9kdWxlcy9kZXAvaW5kZXguanNcIjogam9pbihcbiAgICAgICAgICBkZXBJblN0b3JlLFxuICAgICAgICAgIFwiaW5kZXguanNcIixcbiAgICAgICAgKSxcbiAgICAgICAgXCJub2RlX21vZHVsZXMvLnBucG0vZGVwQDEuMC4wL25vZGVfbW9kdWxlcy9Ac2NvcGUvaGVscGVyc1wiOiBoaWRkZW5MaW5rLFxuICAgICAgfSxcbiAgICAgIGFzc2V0c0hhc2hlczoge30sXG4gICAgfTtcblxuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgIHJlcG9Sb290LFxuICAgICAgcHJvamVjdERpcixcbiAgICAgIGRpc3REaXIsXG4gICAgICBidWlsZElkOiBcInRlc3QtYnVpbGRcIixcbiAgICAgIG5leHRWZXJzaW9uOiBcIjE2LjMuNVwiLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGJhc2VQYXRoOiBcIlwiLFxuICAgICAgICB0cmFpbGluZ1NsYXNoOiBmYWxzZSxcbiAgICAgICAgYXNzZXRQcmVmaXg6IFwiXCIsXG4gICAgICAgIGkxOG46IG51bGwsXG4gICAgICB9LFxuICAgICAgcm91dGluZzogeyBkeW5hbWljUm91dGVzOiBbXSB9LFxuICAgICAgb3V0cHV0czoge1xuICAgICAgICBwYWdlczogW10sXG4gICAgICAgIHBhZ2VzQXBpOiBbXSxcbiAgICAgICAgYXBwUGFnZXM6IFtvdXRwdXRdLFxuICAgICAgICBhcHBSb3V0ZXM6IFtdLFxuICAgICAgICBwcmVyZW5kZXJzOiBbXSxcbiAgICAgICAgc3RhdGljRmlsZXM6IFtdLFxuICAgICAgICBtaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0gYXMgdW5rbm93biBhcyBCdWlsZENvbXBsZXRlQ29udGV4dDtcblxuICAgIHJldHVybiB7IGN0eCwgcmVwb1Jvb3QgfTtcbiAgfVxuXG4gIGl0KFwic3RhZ2VzIHRoZSB0cmVlLCBwcmVzZXJ2ZXMgc3ltbGlua3MsIGFuZCB3cml0ZXMgdGhlIG1hbmlmZXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVJlcG8oKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cml0ZShjdHgpO1xuXG4gICAgZXhwZWN0KHNvbGVSb290KHJlc3VsdCkpLnRvQmUoXG4gICAgICBqb2luKGN0eC5kaXN0RGlyLCBcImNkay1uZXh0anMtYWRhcHRlclwiLCBcImFwcFwiKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhZ2VkID0gKC4uLnBhcnRzOiBzdHJpbmdbXSkgPT4gam9pbihzb2xlUm9vdChyZXN1bHQpLCAuLi5wYXJ0cyk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgcmVhZEZpbGUoc3RhZ2VkKFwiYXBwXCIsIFwiLm5leHRcIiwgXCJzZXJ2ZXJcIiwgXCJhcHBcIiwgXCJwYWdlLmpzXCIpLCBcInV0ZjhcIiksXG4gICAgKS5yZXNvbHZlcy50b0NvbnRhaW4oXCJtb2R1bGUuZXhwb3J0c1wiKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICByZWFkRmlsZShzdGFnZWQoXCJhcHBcIiwgXCJub2RlX21vZHVsZXNcIiwgXCJkZXBcIiwgXCJpbmRleC5qc1wiKSwgXCJ1dGY4XCIpLFxuICAgICkucmVzb2x2ZXMudG9Db250YWluKFwiZGVwXCIpO1xuXG4gICAgLy8gYGNvcHlGaWxlYCBmYWlscyBvdXRyaWdodCBvbiBhIGRpcmVjdG9yeSBzeW1saW5rLCBhbmQgZGVyZWZlcmVuY2luZyB0aGVcbiAgICAvLyBwbnBtIHN0b3JlIHRyaXBsZXMgdGhlIHRyZWUgYWdhaW5zdCB0aGUgMjUwIE1CIHVuemlwcGVkIExhbWJkYSBsaW1pdC5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBsc3RhdChzdGFnZWQoXCJhcHBcIiwgXCJub2RlX21vZHVsZXNcIiwgXCJyZWwtbGlua1wiKSkudGhlbigocykgPT5cbiAgICAgICAgcy5pc1N5bWJvbGljTGluaygpLFxuICAgICAgKSxcbiAgICApLnJlc29sdmVzLnRvQmUodHJ1ZSk7XG4gICAgLy8gUG9pbnRzIG91dHNpZGUgdGhlIGRlcGxveW1lbnQgcm9vdCwgc28gaXQgd291bGQgZGFuZ2xlIGluIExhbWJkYS5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBsc3RhdChzdGFnZWQoXCJhcHBcIiwgXCJub2RlX21vZHVsZXNcIiwgXCJhYnMtbGlua1wiKSkudGhlbigocykgPT5cbiAgICAgICAgcy5pc1N5bWJvbGljTGluaygpLFxuICAgICAgKSxcbiAgICApLnJlc29sdmVzLnRvQmUoZmFsc2UpO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHJlYWRGaWxlKHN0YWdlZChcImFwcFwiLCBcIm5vZGVfbW9kdWxlc1wiLCBcImFicy1saW5rXCIsIFwiaW5kZXguanNcIiksIFwidXRmOFwiKSxcbiAgICApLnJlc29sdmVzLnRvQ29udGFpbihcInN0b3JlXCIpO1xuXG4gICAgLy8gYHdyaXRlU3RhbmRhbG9uZURpcmVjdG9yeWAgY29waWVzIHRoZXNlOyBgb25CdWlsZENvbXBsZXRlYCBoYXMgbm9cbiAgICAvLyBlcXVpdmFsZW50LCBzbyBkcm9wcGluZyBgb3V0cHV0OiBcInN0YW5kYWxvbmVcImAgZHJvcHMgdGhlbSBzaWxlbnRseS5cbiAgICBhd2FpdCBleHBlY3QocmVhZEZpbGUoc3RhZ2VkKFwiYXBwXCIsIFwiLmVudlwiKSwgXCJ1dGY4XCIpKS5yZXNvbHZlcy50b0NvbnRhaW4oXG4gICAgICBcIlNIQVJFRD0xXCIsXG4gICAgKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICByZWFkRmlsZShzdGFnZWQoXCJhcHBcIiwgXCIuZW52LnByb2R1Y3Rpb25cIiksIFwidXRmOFwiKSxcbiAgICApLnJlc29sdmVzLnRvQ29udGFpbihcIlBST0Q9MVwiKTtcblxuICAgIGNvbnN0IHdyaXR0ZW4gPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKHJlc3VsdC5tYW5pZmVzdFBhdGgsIFwidXRmOFwiKSk7XG4gICAgZXhwZWN0KHdyaXR0ZW4pLnRvRXF1YWwoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXN1bHQubWFuaWZlc3QpKSk7XG4gICAgZXhwZWN0KHdyaXR0ZW4ucmVsYXRpdmVQcm9qZWN0RGlyKS50b0JlKFwiYXBwXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBzdG9yZS1vbmx5IHBhY2thZ2VzIGluIHRoZSBzdG9yZSwgYmVoaW5kIHRoZWlyIGxpbmtzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVJlcG8oKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cml0ZShjdHgpO1xuICAgIGNvbnN0IHN0YWdlZCA9ICguLi5wYXJ0czogc3RyaW5nW10pID0+IGpvaW4oc29sZVJvb3QocmVzdWx0KSwgLi4ucGFydHMpO1xuXG4gICAgLy8gTm9kZSByZXNvbHZlcyBgQHNjb3BlL2hlbHBlcnNgIGZyb20gYGRlcGAgdGhyb3VnaCB0aGUgc3RvcmUgbGluaywgYXMgaXRcbiAgICAvLyBkb2VzIGluIHRoZSB3b3Jrc3BhY2UsIHNvIGxvbmcgYXMgbm90aGluZyBkZXJlZmVyZW5jZXMgdGhlIHRyZWUgKHRoZVxuICAgIC8vIEZ1bmN0aW9ucyB6aXAga2VlcHMgbGlua3MgYXMgbGlua3MpLiBBIGNvcHkgYXQgdGhlIHJvb3QgaXMgZGVhZCB3ZWlnaHQuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgbHN0YXQoc3RhZ2VkKFwibm9kZV9tb2R1bGVzXCIsIFwiQHNjb3BlXCIsIFwiaGVscGVyc1wiKSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coL0VOT0VOVC8pO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGxzdGF0KFxuICAgICAgICBzdGFnZWQoXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcIi5wbnBtXCIsXG4gICAgICAgICAgXCJkZXBAMS4wLjBcIixcbiAgICAgICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgICAgIFwiQHNjb3BlXCIsXG4gICAgICAgICAgXCJoZWxwZXJzXCIsXG4gICAgICAgICksXG4gICAgICApLnRoZW4oKHMpID0+IHMuaXNTeW1ib2xpY0xpbmsoKSksXG4gICAgKS5yZXNvbHZlcy50b0JlKHRydWUpO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHJlYWRGaWxlKFxuICAgICAgICBzdGFnZWQoXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcIi5wbnBtXCIsXG4gICAgICAgICAgXCJkZXBAMS4wLjBcIixcbiAgICAgICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgICAgIFwiQHNjb3BlXCIsXG4gICAgICAgICAgXCJoZWxwZXJzXCIsXG4gICAgICAgICAgXCJpbmRleC5qc1wiLFxuICAgICAgICApLFxuICAgICAgICBcInV0ZjhcIixcbiAgICAgICksXG4gICAgKS5yZXNvbHZlcy50b0NvbnRhaW4oXCJoZWxwZXJzXCIpO1xuICB9KTtcblxuICBpdChcInN0YWdlcyB0aGUgbmV4dCBjbG9zdXJlIHRoZSBydW50aW1lJ3MgaW1hZ2Ugb3B0aW1pemVyIHJlcXVpcmVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBgbmV4dCBidWlsZGAgdHJhY2VzIHdoYXQgdGhlICphcHAqIHJlYWNoZXMsIGFuZCBubyBhcHAgcmVhY2hlcyBuZXh0J3NcbiAgICAvLyBpbWFnZSBvcHRpbWl6ZXIsIHNvIHdpdGhvdXQgdGhpcyBldmVyeSAvX25leHQvaW1hZ2UgcmVxdWVzdCA1MDBzIG9uIGFcbiAgICAvLyBNT0RVTEVfTk9UX0ZPVU5EIHRoYXQgbm90aGluZyBpbiB0aGUgYnVpbGQgd2FybmVkIGFib3V0LlxuICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlUmVwbyh7IHdpdGhOZXh0OiB0cnVlIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyaXRlKGN0eCk7XG4gICAgY29uc3Qgc3RhZ2VkID0gKC4uLnBhcnRzOiBzdHJpbmdbXSkgPT4gam9pbihzb2xlUm9vdChyZXN1bHQpLCAuLi5wYXJ0cyk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICByZWFkRmlsZShcbiAgICAgICAgc3RhZ2VkKFwibm9kZV9tb2R1bGVzXCIsIFwibmV4dFwiLCBcImRpc3RcIiwgXCJzZXJ2ZXJcIiwgXCJpbWFnZS1vcHRpbWl6ZXIuanNcIiksXG4gICAgICAgIFwidXRmOFwiLFxuICAgICAgKSxcbiAgICApLnJlc29sdmVzLnRvQ29udGFpbihcImltYWdlLW9wdGltaXplclwiKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICByZWFkRmlsZShcbiAgICAgICAgc3RhZ2VkKFxuICAgICAgICAgIFwibm9kZV9tb2R1bGVzXCIsXG4gICAgICAgICAgXCJuZXh0XCIsXG4gICAgICAgICAgXCJkaXN0XCIsXG4gICAgICAgICAgXCJzaGFyZWRcIixcbiAgICAgICAgICBcImxpYlwiLFxuICAgICAgICAgIFwibWF0Y2gtcmVtb3RlLXBhdHRlcm4uanNcIixcbiAgICAgICAgKSxcbiAgICAgICAgXCJ1dGY4XCIsXG4gICAgICApLFxuICAgICkucmVzb2x2ZXMudG9Db250YWluKFwibWF0Y2gtcmVtb3RlLXBhdHRlcm5cIik7XG4gIH0pO1xuXG4gIGl0KFwic3RhZ2VzIHRoZSBsaW5rIG5leHQgcmVzb2x2ZXMgQG5leHQvZW52IHRocm91Z2ggdW5kZXIgcG5wbVwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gVGhlIHRyYWNlIHN0YXJ0cyBhdCBgQG5leHQvZW52YCdzIHJlYWwgcGF0aCBhbmQgc28gbmV2ZXIgcmVjb3JkcyB0aGVcbiAgICAvLyBsaW5rIGJlc2lkZSBgbmV4dGA7IHdpdGhvdXQgaXQgZXZlcnkgY29sZCBzdGFydCB0aHJldyBcIkNhbm5vdCBmaW5kXG4gICAgLy8gbW9kdWxlICdAbmV4dC9lbnYnXCIuXG4gICAgY29uc3QgeyBjdHggfSA9IGF3YWl0IG1ha2VSZXBvKHsgcG5wbU5leHQ6IHRydWUgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JpdGUoY3R4KTtcbiAgICBjb25zdCBsaW5rID0gam9pbihcbiAgICAgIHNvbGVSb290KHJlc3VsdCksXG4gICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgXCIucG5wbVwiLFxuICAgICAgXCJuZXh0QDEuMC4wXCIsXG4gICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgXCJAbmV4dFwiLFxuICAgICAgXCJlbnZcIixcbiAgICApO1xuICAgIGV4cGVjdCgoYXdhaXQgbHN0YXQobGluaykpLmlzU3ltYm9saWNMaW5rKCkpLnRvQmUodHJ1ZSk7XG4gICAgYXdhaXQgZXhwZWN0KHJlYWRGaWxlKGpvaW4obGluaywgXCJpbmRleC5qc1wiKSwgXCJ1dGY4XCIpKS5yZXNvbHZlcy50b0NvbnRhaW4oXG4gICAgICBcIkBuZXh0L2VudlwiLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwid2FybnMgaW5zdGVhZCBvZiBmYWlsaW5nIHdoZW4gbmV4dCBjYW5ub3QgYmUgcmVzb2x2ZWQgZm9yIHRyYWNpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlUmVwbygpO1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGF3YWl0IGV4cGVjdCh3cml0ZShjdHgpKS5yZXNvbHZlcy50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdCh3YXJuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiL19uZXh0L2ltYWdlIHdpbGwgZmFpbCBhdCBydW50aW1lXCIpLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmVtb3ZlcyBhIHByZXZpb3VzIGJ1aWxkJ3MgdHJlZSBiZWZvcmUgc3RhZ2luZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjdHggfSA9IGF3YWl0IG1ha2VSZXBvKCk7XG4gICAgY29uc3QgZmlyc3QgPSBhd2FpdCB3cml0ZShjdHgpO1xuICAgIGNvbnN0IHN0YWxlID0gam9pbihzb2xlUm9vdChmaXJzdCksIFwiYXBwXCIsIFwic3RhbGUuanNcIik7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHN0YWxlLCBcIi8vIHJlbW92ZWQgcm91dGVcXG5cIik7XG5cbiAgICBhd2FpdCB3cml0ZShjdHgpO1xuICAgIGF3YWl0IGV4cGVjdChsc3RhdChzdGFsZSkpLnJlamVjdHMudG9UaHJvdygvRU5PRU5ULyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwid2l0aCBmdW5jdGlvbkdyb3Vwc1wiLCAoKSA9PiB7XG4gICAgLyoqXG4gICAgICogVHdvIHJvdXRlcyB3aXRoIG9uZSBhc3NldCBlYWNoLCBzbyBcInRoZSBncm91cCdzIHRyZWUgaG9sZHMgaXRzIG93biByb3V0ZVxuICAgICAqIGFuZCBub3QgdGhlIG90aGVyJ3NcIiBpcyBjaGVja2FibGUgYnkgZmlsZS4gRGVsaWJlcmF0ZWx5IG5vdCBgbWFrZVJlcG9gJ3NcbiAgICAgKiByZXBvOiBpdHMgc2luZ2xlIG91dHB1dCBjYW5ub3QgYmUgc3BsaXQuXG4gICAgICovXG4gICAgYXN5bmMgZnVuY3Rpb24gbWFrZVNwbGl0dGFibGVSZXBvKFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICB3aXRoTm90Rm91bmQ/OiBib29sZWFuO1xuICAgICAgICB3aXRoUGFnZXNTc3I/OiBib29sZWFuO1xuICAgICAgICB3aXRoTmV4dD86IGJvb2xlYW47XG4gICAgICB9ID0ge30sXG4gICAgKSB7XG4gICAgICBjb25zdCByZXBvUm9vdCA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgXCJjZGstbmV4dGpzLWdyb3Vwcy1cIikpO1xuICAgICAgaWYgKG9wdGlvbnMud2l0aE5leHQpIHtcbiAgICAgICAgYXdhaXQgaW5zdGFsbEZha2VOZXh0KHJlcG9Sb290KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByb2plY3REaXIgPSBqb2luKHJlcG9Sb290LCBcImFwcFwiKTtcbiAgICAgIGNvbnN0IGRpc3REaXIgPSBqb2luKHByb2plY3REaXIsIFwiLm5leHRcIik7XG4gICAgICBhd2FpdCBta2Rpcihqb2luKGRpc3REaXIsIFwic2VydmVyXCIsIFwiYXBwXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGRpc3REaXIsIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIiksIFwie31cXG5cIik7XG5cbiAgICAgIGNvbnN0IG91dHB1dEZvciA9IGFzeW5jIChuYW1lOiBzdHJpbmcsIHBhdGhuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBqb2luKGRpc3REaXIsIFwic2VydmVyXCIsIFwiYXBwXCIsIGAke25hbWV9LmpzYCk7XG4gICAgICAgIGNvbnN0IGFzc2V0ID0gam9pbihwcm9qZWN0RGlyLCBcIm5vZGVfbW9kdWxlc1wiLCBuYW1lLCBcImluZGV4LmpzXCIpO1xuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKGFzc2V0KSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShlbnRyeSwgYC8vICR7bmFtZX1cXG5gKTtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGFzc2V0LCBgLy8gJHtuYW1lfSBkZXBcXG5gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogcGF0aG5hbWUsXG4gICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgc291cmNlUGFnZTogcGF0aG5hbWUsXG4gICAgICAgICAgZmlsZVBhdGg6IGVudHJ5LFxuICAgICAgICAgIHJ1bnRpbWU6IFwibm9kZWpzXCIsXG4gICAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgICAgICBhc3NldHM6IHsgW2BhcHAvbm9kZV9tb2R1bGVzLyR7bmFtZX0vaW5kZXguanNgXTogYXNzZXQgfSxcbiAgICAgICAgICBhc3NldHNIYXNoZXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICByZXBvUm9vdCxcbiAgICAgICAgcHJvamVjdERpcixcbiAgICAgICAgZGlzdERpcixcbiAgICAgICAgYnVpbGRJZDogXCJ0ZXN0LWJ1aWxkXCIsXG4gICAgICAgIG5leHRWZXJzaW9uOiBcIjE2LjMuNVwiLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBiYXNlUGF0aDogXCJcIixcbiAgICAgICAgICB0cmFpbGluZ1NsYXNoOiBmYWxzZSxcbiAgICAgICAgICBhc3NldFByZWZpeDogXCJcIixcbiAgICAgICAgICBpMThuOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICByb3V0aW5nOiB7IGR5bmFtaWNSb3V0ZXM6IFtdIH0sXG4gICAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgICBwYWdlczogb3B0aW9ucy53aXRoUGFnZXNTc3JcbiAgICAgICAgICAgID8gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgb3V0cHV0Rm9yKFwic3NyXCIsIFwiL3NzclwiKTtcbiAgICAgICAgICAgICAgICAvLyBBIHNlcGFyYXRlIG91dHB1dCwgd2l0aCBpdHMgb3duIGlkLCBiYWNrZWQgYnkgdGhlIHNhbWUgZmlsZS5cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhUm91dGUgPSBcIi9fbmV4dC9kYXRhL3Rlc3QtYnVpbGQvc3NyLmpzb25cIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3BhZ2UsIHsgLi4ucGFnZSwgaWQ6IGRhdGFSb3V0ZSwgcGF0aG5hbWU6IGRhdGFSb3V0ZSB9XTtcbiAgICAgICAgICAgICAgfSkoKVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICBwYWdlc0FwaTogW10sXG4gICAgICAgICAgYXBwUGFnZXM6IFtcbiAgICAgICAgICAgIGF3YWl0IG91dHB1dEZvcihcImhvbWVcIiwgXCIvXCIpLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMud2l0aE5vdEZvdW5kXG4gICAgICAgICAgICAgID8gW2F3YWl0IG91dHB1dEZvcihcIm5vdC1mb3VuZFwiLCBcIi9fbm90LWZvdW5kXCIpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFwcFJvdXRlczogW2F3YWl0IG91dHB1dEZvcihcInJlcG9ydHNcIiwgXCIvYXBpL3JlcG9ydHMvW2lkXVwiKV0sXG4gICAgICAgICAgcHJlcmVuZGVyczogW10sXG4gICAgICAgICAgc3RhdGljRmlsZXM6IFtdLFxuICAgICAgICAgIG1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBCdWlsZENvbXBsZXRlQ29udGV4dDtcbiAgICAgIHJldHVybiB7IGN0eCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwcyA9IFt7IG5hbWU6IFwicmVwb3J0c1wiLCByb3V0ZXM6IFtcIi9hcGkvcmVwb3J0cy8qKlwiXSB9XTtcblxuICAgIGl0KFwicmVjb3JkcyB0aGUgYXNzaWdubWVudCBpbiB0aGUgbWFuaWZlc3QgZXZlcnkgZ3JvdXAgc2hhcmVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlU3BsaXR0YWJsZVJlcG8oKTtcbiAgICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGJ1aWxkQWRhcHRlck1hbmlmZXN0KGN0eCwge1xuICAgICAgICBidWlsZEN3ZDogY3R4LnByb2plY3REaXIsXG4gICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBncm91cHMsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdC5ncm91cHMpLnRvRXF1YWwoe1xuICAgICAgICBkZWZhdWx0OiBbXCIvXCJdLFxuICAgICAgICByZXBvcnRzOiBbXCIvYXBpL3JlcG9ydHMvW2lkXVwiXSxcbiAgICAgIH0pO1xuICAgICAgLy8gV2hhdCBzeW50aCBjb21wYXJlcyBpdHMgb3duIHByb3BzIHdpdGgsIHRvIGNhdGNoIGEgc3RhbGUgYnVpbGQuXG4gICAgICBleHBlY3QobWFuaWZlc3QuZnVuY3Rpb25Hcm91cHMpLnRvRXF1YWwoZ3JvdXBzKTtcbiAgICAgIC8vIEFuZCB3aGF0IGl0IGRlcGxveXMsIGFzIHRoZSBhc3NpZ25tZW50IGNoZWNrZWQgaXQuXG4gICAgICBleHBlY3QobWFuaWZlc3QuYmVoYXZpb3JzKS50b0VxdWFsKFtcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwOiBcInJlcG9ydHNcIixcbiAgICAgICAgICByb3V0ZTogXCIvYXBpL3JlcG9ydHMvKipcIixcbiAgICAgICAgICBwYXR0ZXJuOiBcImFwaS9yZXBvcnRzLypcIixcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzdGFnZXMgb25lIHRyZWUgcGVyIGdyb3VwLCBlYWNoIGhvbGRpbmcgb25seSBpdHMgb3duIHJvdXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVNwbGl0dGFibGVSZXBvKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cml0ZUJ1aWxkT3V0cHV0cyhjdHgsIHtcbiAgICAgICAgYnVpbGRDd2Q6IGN0eC5wcm9qZWN0RGlyLFxuICAgICAgICBmdW5jdGlvbkdyb3VwczogZ3JvdXBzLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuc3RhZ2VkR3JvdXBzLm1hcCgoZ3JvdXApID0+IGdyb3VwLm5hbWUpLnNvcnQoKSkudG9FcXVhbChbXG4gICAgICAgIFwiZGVmYXVsdFwiLFxuICAgICAgICBcInJlcG9ydHNcIixcbiAgICAgIF0pO1xuICAgICAgY29uc3QgcGF0aE9mID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHJlc3VsdC5zdGFnZWRHcm91cHMuZmluZCgoaXQpID0+IGl0Lm5hbWUgPT09IG5hbWUpO1xuICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdGFnZWQgZ3JvdXAgXCIke25hbWV9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3JvdXAucGF0aDtcbiAgICAgIH07XG4gICAgICAvLyBVbmRlciBgZ3JvdXBzLzxuYW1lPi9gLCBzbyBuZWl0aGVyIGNhbiBjb2xsaWRlIHdpdGggdGhlIHVuc3BsaXQgbGF5b3V0LlxuICAgICAgZXhwZWN0KHBhdGhPZihcInJlcG9ydHNcIikpLnRvQmUoXG4gICAgICAgIGpvaW4oY3R4LmRpc3REaXIsIFwiY2RrLW5leHRqcy1hZGFwdGVyXCIsIFwiZ3JvdXBzXCIsIFwicmVwb3J0c1wiKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QocGF0aE9mKFwiZGVmYXVsdFwiKSkudG9CZShcbiAgICAgICAgam9pbihjdHguZGlzdERpciwgXCJjZGstbmV4dGpzLWFkYXB0ZXJcIiwgXCJncm91cHNcIiwgXCJkZWZhdWx0XCIpLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaGFzID0gKG5hbWU6IHN0cmluZywgLi4ucGFydHM6IHN0cmluZ1tdKSA9PlxuICAgICAgICBsc3RhdChqb2luKHBhdGhPZihuYW1lKSwgLi4ucGFydHMpKS50aGVuKFxuICAgICAgICAgICgpID0+IHRydWUsXG4gICAgICAgICAgKCkgPT4gZmFsc2UsXG4gICAgICAgICk7XG4gICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgIGhhcyhcInJlcG9ydHNcIiwgXCJhcHBcIiwgXCIubmV4dFwiLCBcInNlcnZlclwiLCBcImFwcFwiLCBcInJlcG9ydHMuanNcIiksXG4gICAgICApLnJlc29sdmVzLnRvQmUodHJ1ZSk7XG4gICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgIGhhcyhcInJlcG9ydHNcIiwgXCJhcHBcIiwgXCJub2RlX21vZHVsZXNcIiwgXCJyZXBvcnRzXCIsIFwiaW5kZXguanNcIiksXG4gICAgICApLnJlc29sdmVzLnRvQmUodHJ1ZSk7XG4gICAgICAvLyBUaGUgcG9pbnQgb2Ygc3BsaXR0aW5nOiB0aGUgb3RoZXIgZ3JvdXAncyByb3V0ZSBpcyBhYnNlbnQuXG4gICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgIGhhcyhcInJlcG9ydHNcIiwgXCJhcHBcIiwgXCIubmV4dFwiLCBcInNlcnZlclwiLCBcImFwcFwiLCBcImhvbWUuanNcIiksXG4gICAgICApLnJlc29sdmVzLnRvQmUoZmFsc2UpO1xuICAgICAgYXdhaXQgZXhwZWN0KFxuICAgICAgICBoYXMoXCJkZWZhdWx0XCIsIFwiYXBwXCIsIFwiLm5leHRcIiwgXCJzZXJ2ZXJcIiwgXCJhcHBcIiwgXCJob21lLmpzXCIpLFxuICAgICAgKS5yZXNvbHZlcy50b0JlKHRydWUpO1xuICAgICAgYXdhaXQgZXhwZWN0KFxuICAgICAgICBoYXMoXCJkZWZhdWx0XCIsIFwiYXBwXCIsIFwiLm5leHRcIiwgXCJzZXJ2ZXJcIiwgXCJhcHBcIiwgXCJyZXBvcnRzLmpzXCIpLFxuICAgICAgKS5yZXNvbHZlcy50b0JlKGZhbHNlKTtcbiAgICAgIC8vIFRoZSBtYW5pZmVzdCBpcyB3cml0dGVuIG9uY2UsIGFib3ZlIHRoZSBncm91cHM7IGBOZXh0anNCdWlsZGAgY29waWVzIGl0XG4gICAgICAvLyBhbmQgdGhlIHJ1bnRpbWUgc2hlbGwgaW50byBlYWNoIGdyb3VwJ3MgcmVzZXJ2ZWQgcnVudGltZSBkaXIgYWZ0ZXJ3YXJkcyxcbiAgICAgIC8vIHNvIG5vIGdyb3VwJ3Mgc3RhZ2VkIHRyZWUgbWF5IGNvbnRhaW4gdGhhdCBkaXJlY3RvcnkgeWV0LlxuICAgICAgZXhwZWN0KHJlc3VsdC5tYW5pZmVzdFBhdGgpLnRvQmUoXG4gICAgICAgIGpvaW4oY3R4LmRpc3REaXIsIFwiY2RrLW5leHRqcy1hZGFwdGVyXCIsIFwibWFuaWZlc3QuanNvblwiKSxcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW1wiZGVmYXVsdFwiLCBcInJlcG9ydHNcIl0pIHtcbiAgICAgICAgYXdhaXQgZXhwZWN0KGhhcyhuYW1lLCBSVU5USU1FX0RJUl9OQU1FKSkucmVzb2x2ZXMudG9CZShmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBgcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25gIGlzIG5vdCBhbnkgb3V0cHV0J3MgdHJhY2VkIGFzc2V0LCBzbyBhXG4gICAgICAvLyBncm91cCB0aGF0IHJlYWNoZXMgaXQgb25seSB0aHJvdWdoIHRoZSBvdXRwdXRzIGl0IG93bnMgZG9lcyBub3QgZ2V0IGl0IC1cbiAgICAgIC8vIGFuZCBgbG9hZFJ1bnRpbWVgIHByb2JlcyBmb3IgaXQgYmVmb3JlIHNlcnZpbmcgYW55dGhpbmcsIHNvIHRoZSB3aG9sZVxuICAgICAgLy8gcm9vdCBhbnN3ZXJzIFwidGhlIGRlcGxveW1lbnQgcGFja2FnZSBpcyBpbmNvbXBsZXRlXCIgd2l0aG91dCBpdC5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBbXCJkZWZhdWx0XCIsIFwicmVwb3J0c1wiXSkge1xuICAgICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgICAgaGFzKG5hbWUsIFwiYXBwXCIsIFwiLm5leHRcIiwgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiKSxcbiAgICAgICAgKS5yZXNvbHZlcy50b0JlKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoXCJzdGFnZXMgdGhlIGltYWdlIG9wdGltaXplciBpbnRvIGRlZmF1bHQgb25seSwgc2VydmUtc3RhdGljIGludG8gZXZlcnkgZ3JvdXBcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gT25seSBgZGVmYXVsdGAgYW5zd2VycyBgL19uZXh0L2ltYWdlYCwgYW5kIHRoZSBvcHRpbWl6ZXIgaXMgd2hhdCBwdWxsc1xuICAgICAgLy8gYHNoYXJwYCBpbjsgcHJlcmVuZGVyZWQgYW5kIHN0YXRpYyByZXN1bHRzIGFyZSBzZXJ2ZWQgd2l0aFxuICAgICAgLy8gYHNlcnZlLXN0YXRpY2AgaW4gd2hpY2hldmVyIGdyb3VwIHRoZXkgbGFuZC5cbiAgICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlU3BsaXR0YWJsZVJlcG8oeyB3aXRoTmV4dDogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyaXRlQnVpbGRPdXRwdXRzKGN0eCwge1xuICAgICAgICBidWlsZEN3ZDogY3R4LnByb2plY3REaXIsXG4gICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBncm91cHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGhhcyA9IChuYW1lOiBzdHJpbmcsIGZpbGU6IHN0cmluZykgPT5cbiAgICAgICAgbHN0YXQoXG4gICAgICAgICAgam9pbihcbiAgICAgICAgICAgIHJlc3VsdC5zdGFnZWRHcm91cHMuZmluZCgoaXQpID0+IGl0Lm5hbWUgPT09IG5hbWUpIS5wYXRoLFxuICAgICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICAgIFwibmV4dFwiLFxuICAgICAgICAgICAgXCJkaXN0XCIsXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICksXG4gICAgICAgICkudGhlbihcbiAgICAgICAgICAoKSA9PiB0cnVlLFxuICAgICAgICAgICgpID0+IGZhbHNlLFxuICAgICAgICApO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIFtcbiAgICAgICAgXCJzZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCIsXG4gICAgICAgIFwic2hhcmVkL2xpYi9tYXRjaC1yZW1vdGUtcGF0dGVybi5qc1wiLFxuICAgICAgXSkge1xuICAgICAgICBhd2FpdCBleHBlY3QoaGFzKFwiZGVmYXVsdFwiLCBmaWxlKSkucmVzb2x2ZXMudG9CZSh0cnVlKTtcbiAgICAgICAgYXdhaXQgZXhwZWN0KGhhcyhcInJlcG9ydHNcIiwgZmlsZSkpLnJlc29sdmVzLnRvQmUoZmFsc2UpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFtcImRlZmF1bHRcIiwgXCJyZXBvcnRzXCJdKSB7XG4gICAgICAgIGF3YWl0IGV4cGVjdChoYXMobmFtZSwgXCJzZXJ2ZXIvc2VydmUtc3RhdGljLmpzXCIpKS5yZXNvbHZlcy50b0JlKHRydWUpO1xuICAgICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgICAgaGFzKFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIFwic2VydmVyL2xpYi9yb3V0ZXItdXRpbHMvaW5zdHJ1bWVudGF0aW9uLWdsb2JhbHMuZXh0ZXJuYWwuanNcIixcbiAgICAgICAgICApLFxuICAgICAgICApLnJlc29sdmVzLnRvQmUodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdChcInN0YWdlcyB0aGUgbm90LWZvdW5kIHBhZ2UgaW50byBldmVyeSBncm91cCwgbm90IG9ubHkgaXRzIG93bmVyXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoZSBydW50aW1lIHJlbmRlcnMgYSA0MDQgd2l0aCB0aGUgbWFuaWZlc3QncyBgL19ub3QtZm91bmRgIHdoZXJldmVyIHRoZVxuICAgICAgLy8gcmVxdWVzdCBsYW5kZWQsIHNvIGAvYXBpL3JlcG9ydHMvbm9wZWAgbmVlZHMgaXQgaW4gdGhlIHJlcG9ydHMgZ3JvdXAuXG4gICAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVNwbGl0dGFibGVSZXBvKHsgd2l0aE5vdEZvdW5kOiB0cnVlIH0pO1xuICAgICAgY29uc3QgeyBncm91cHM6IHN0YWdlZCwgbWFuaWZlc3QgfSA9IGJ1aWxkQWRhcHRlck1hbmlmZXN0KGN0eCwge1xuICAgICAgICBidWlsZEN3ZDogY3R4LnByb2plY3REaXIsXG4gICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBncm91cHMsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdC5ncm91cHM/LmRlZmF1bHQpLnRvQ29udGFpbihcIi9fbm90LWZvdW5kXCIpO1xuICAgICAgZXhwZWN0KHN0YWdlZC5tYXAoKGdyb3VwKSA9PiBncm91cC5uYW1lKS5zb3J0KCkpLnRvRXF1YWwoW1xuICAgICAgICBcImRlZmF1bHRcIixcbiAgICAgICAgXCJyZXBvcnRzXCIsXG4gICAgICBdKTtcbiAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3RhZ2VkKSB7XG4gICAgICAgIGV4cGVjdChbLi4uZ3JvdXAuc3RhZ2luZy5rZXlzKCldKS50b0NvbnRhaW4oXG4gICAgICAgICAgXCJhcHAvLm5leHQvc2VydmVyL2FwcC9ub3QtZm91bmQuanNcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KFwia2VlcHMgYSBQYWdlcyBSb3V0ZXIgcGFnZSdzIGRhdGEgcm91dGUgaW4gdGhlIHBhZ2UncyBncm91cFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVNwbGl0dGFibGVSZXBvKHsgd2l0aFBhZ2VzU3NyOiB0cnVlIH0pO1xuICAgICAgY29uc3QgeyBncm91cHM6IHN0YWdlZCwgbWFuaWZlc3QgfSA9IGJ1aWxkQWRhcHRlck1hbmlmZXN0KGN0eCwge1xuICAgICAgICBidWlsZEN3ZDogY3R4LnByb2plY3REaXIsXG4gICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBbeyBuYW1lOiBcInNzclwiLCByb3V0ZXM6IFtcIi9zc3JcIl0gfV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdC5ncm91cHM/LnNzcikudG9FcXVhbChbXG4gICAgICAgIFwiL19uZXh0L2RhdGEvdGVzdC1idWlsZC9zc3IuanNvblwiLFxuICAgICAgICBcIi9zc3JcIixcbiAgICAgIF0pO1xuICAgICAgY29uc3QgZGVmYXVsdEdyb3VwID0gc3RhZ2VkLmZpbmQoKGdyb3VwKSA9PiBncm91cC5uYW1lID09PSBcImRlZmF1bHRcIikhO1xuICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBwYWdlIGFuZCBpdHMgdHJhY2Ugc2hpcCBpbiB0aGUgZGVmYXVsdCB6aXAgYXMgd2VsbC5cbiAgICAgIGV4cGVjdChbLi4uZGVmYXVsdEdyb3VwLnN0YWdpbmcua2V5cygpXSkubm90LnRvQ29udGFpbihcbiAgICAgICAgXCJhcHAvLm5leHQvc2VydmVyL2FwcC9zc3IuanNcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlZnVzZXMgdG8gc3BsaXQgYW4gaTE4biBhcHAsIHdob3NlIHJvdXRlcyBhcmUgbG9jYWxlLXByZWZpeGVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY3R4IH0gPSBhd2FpdCBtYWtlU3BsaXR0YWJsZVJlcG8oKTtcbiAgICAgIGNvbnN0IGkxOG5DdHggPSB7XG4gICAgICAgIC4uLmN0eCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4uY3R4LmNvbmZpZyxcbiAgICAgICAgICBpMThuOiB7IGxvY2FsZXM6IFtcImVuXCJdLCBkZWZhdWx0TG9jYWxlOiBcImVuXCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBCdWlsZENvbXBsZXRlQ29udGV4dDtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBidWlsZEFkYXB0ZXJNYW5pZmVzdChpMThuQ3R4LCB7XG4gICAgICAgICAgYnVpbGRDd2Q6IGN0eC5wcm9qZWN0RGlyLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBncm91cHMsXG4gICAgICAgIH0pLFxuICAgICAgKS50b1Rocm93KC9jYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgaTE4bmAvKTtcbiAgICB9KTtcblxuICAgIGl0KFwidGhyb3dzIG9uIGEgcGF0dGVybiB0aGF0IG1hdGNoZXMgbm90aGluZywgcmF0aGVyIHRoYW4gc2lsZW50bHkgbm90IHNwbGl0dGluZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGN0eCB9ID0gYXdhaXQgbWFrZVNwbGl0dGFibGVSZXBvKCk7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYnVpbGRBZGFwdGVyTWFuaWZlc3QoY3R4LCB7XG4gICAgICAgICAgYnVpbGRDd2Q6IGN0eC5wcm9qZWN0RGlyLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBbeyBuYW1lOiBcInR5cG9cIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydC8qKlwiXSB9XSxcbiAgICAgICAgfSksXG4gICAgICApLnRvVGhyb3coL21hdGNoZXMgbm8gcm91dGUgaW4gdGhpcyBidWlsZC8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|