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
package/lib/runtime/core.test.js
CHANGED
|
@@ -10,6 +10,7 @@ const node_path_1 = require("node:path");
|
|
|
10
10
|
const node_stream_1 = require("node:stream");
|
|
11
11
|
const node_zlib_1 = require("node:zlib");
|
|
12
12
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
13
|
+
const image_config_js_1 = require("next/dist/shared/lib/image-config.js");
|
|
13
14
|
const core_1 = require("./core");
|
|
14
15
|
const build_outputs_1 = require("../adapter/build-outputs");
|
|
15
16
|
const request_1 = require("./http/request");
|
|
@@ -212,6 +213,13 @@ function stageDeployment(middlewareSource = MIDDLEWARE_STUB, transformManifest =
|
|
|
212
213
|
// The fixture is a real captured context, as JSON: the structural cast is the
|
|
213
214
|
// point of the cast (see `build-outputs.test.ts`).
|
|
214
215
|
const ctx = structuredClone(app_playground_json_1.default);
|
|
216
|
+
// The fixture's `config` holds only the routing fields; a real one is
|
|
217
|
+
// resolved and has every image default.
|
|
218
|
+
ctx.config = {
|
|
219
|
+
...ctx.config,
|
|
220
|
+
images: image_config_js_1.imageConfigDefault,
|
|
221
|
+
experimental: {},
|
|
222
|
+
};
|
|
215
223
|
const manifest = transformManifest((0, build_outputs_1.buildAdapterManifest)(ctx, { buildCwd: ctx.projectDir }).manifest);
|
|
216
224
|
// Realpath because `loadRuntime` chdirs, and macOS's /var is a symlink to
|
|
217
225
|
// /private/var: the cwd the entrypoints report would not match otherwise.
|
|
@@ -1019,13 +1027,14 @@ describe("a Pages Router 404", () => {
|
|
|
1019
1027
|
});
|
|
1020
1028
|
describe("/_next/image with images turned off", () => {
|
|
1021
1029
|
it("answers the app's 404, no-store, instead of optimizing", async () => {
|
|
1022
|
-
// `images.unoptimized`, as
|
|
1023
|
-
// `
|
|
1024
|
-
const staged = stageDeployment()
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1030
|
+
// `images.unoptimized`, as the adapter copies it into the manifest from
|
|
1031
|
+
// `ctx.config`.
|
|
1032
|
+
const staged = stageDeployment(undefined, (manifest) => ({
|
|
1033
|
+
...manifest,
|
|
1034
|
+
config: {
|
|
1035
|
+
...manifest.config,
|
|
1036
|
+
images: { ...manifest.config.images, unoptimized: true },
|
|
1037
|
+
},
|
|
1029
1038
|
}));
|
|
1030
1039
|
const unoptimized = await (0, core_1.loadRuntime)(staged);
|
|
1031
1040
|
const sink = new CollectingSink();
|
|
@@ -1699,4 +1708,4 @@ describe("revalidatedPageRoutes", () => {
|
|
|
1699
1708
|
]);
|
|
1700
1709
|
});
|
|
1701
1710
|
});
|
|
1702
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvY29yZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQVFpQjtBQUNqQixxQ0FBaUM7QUFDakMseUNBQTBDO0FBQzFDLDZDQUFpRDtBQUNqRCx5Q0FBNkU7QUFDN0Usa0RBQThDO0FBQzlDLGlDQU9nQjtBQUNoQiw0REFHa0M7QUFDbEMsNENBQXFEO0FBR3JELHlDQU1vQjtBQUNwQixpREFBcUQ7QUFDckQsc0dBQXdFO0FBRXhFOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFlLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdUh2QixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sZUFBZSxHQUFHOzs7Ozs7Ozs7Ozs7O0NBYXZCLENBQUM7QUFFRixNQUFNLGNBQWM7SUFJaUI7SUFINUIsSUFBSSxDQUFnQjtJQUNYLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFFdEMsWUFBbUMsZUFBZSxLQUFLO1FBQXBCLGlCQUFZLEdBQVosWUFBWSxDQUFRO0lBQUcsQ0FBQztJQUVwRCxLQUFLLENBQUMsSUFBa0I7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixPQUFPLElBQUksc0JBQVEsQ0FBQztZQUNsQixLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRO2dCQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsUUFBUSxFQUFFLENBQUM7WUFDYixDQUFD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Q0FBQztRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0VBQXNFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDcEYsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSwwRUFBMEU7UUFDMUUscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0UsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzRCxNQUFNLElBQUksR0FBRyxNQUFN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QUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJlYWxwYXRoU3luYyxcbiAgcm1TeW5jLFxuICBzeW1saW5rU3luYyxcbiAgd3JpdGVGaWxlU3luYyxcbn0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgUmVhZGFibGUsIFdyaXRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgeyBjb25zdGFudHMgYXMgemxpYkNvbnN0YW50cywgZ3VuemlwU3luYywgZ3ppcFN5bmMgfSBmcm9tIFwibm9kZTp6bGliXCI7XG5pbXBvcnQgeyBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB7XG4gIGxvYWRSdW50aW1lLFxuICBOZXh0anNSdW50aW1lLFxuICByZXZhbGlkYXRlZFBhZ2VSb3V0ZXMsXG4gIFJ1bnRpbWVSZXF1ZXN0LFxuICBzcGxpdEJvZHksXG4gIHdpdGhvdXRJbnRlcm5hbEhlYWRlcnMsXG59IGZyb20gXCIuL2NvcmVcIjtcbmltcG9ydCB7XG4gIEJ1aWxkQ29tcGxldGVDb250ZXh0LFxuICBidWlsZEFkYXB0ZXJNYW5pZmVzdCxcbn0gZnJvbSBcIi4uL2FkYXB0ZXIvYnVpbGQtb3V0cHV0c1wiO1xuaW1wb3J0IHsgU2hpbUluY29taW5nTWVzc2FnZSB9IGZyb20gXCIuL2h0dHAvcmVxdWVzdFwiO1xuaW1wb3J0IHsgUmVzcG9uc2VIZWFkIH0gZnJvbSBcIi4vaHR0cC9yZXNwb25zZVwiO1xuaW1wb3J0IHsgUmVzcG9uc2VTaW5rIH0gZnJvbSBcIi4vaHR0cC9zaW5rXCI7XG5pbXBvcnQge1xuICBBZGFwdGVyTWFuaWZlc3QsXG4gIGRlcGxveWVkTWFuaWZlc3RQYXRoLFxuICBQVUJMSUNfRklMRVNfRklMRV9OQU1FLFxuICBSRVZBTElEQVRFRF9QQUdFX0hPT0ssXG4gIFJVTlRJTUVfRElSX05BTUUsXG59IGZyb20gXCIuL21hbmlmZXN0XCI7XG5pbXBvcnQgeyBUQUdfTUFOSUZFU1RfU1lNQk9MIH0gZnJvbSBcIi4vdGFnLW1hbmlmZXN0XCI7XG5pbXBvcnQgYXBwUGxheWdyb3VuZCBmcm9tIFwiLi4vYWRhcHRlci9fX2ZpeHR1cmVzX18vYXBwLXBsYXlncm91bmQuanNvblwiO1xuXG4vKipcbiAqIEV2ZXJ5IGVudHJ5cG9pbnQgaW4gdGhlIHN0YWdlZCB0cmVlIGlzIHRoaXMgbW9kdWxlLiBJdCByZXBvcnRzIGJhY2sgd2hhdCB0aGVcbiAqIHJ1bnRpbWUgaGFuZGVkIGl0IOKAlCB0aGUgcmV3cml0dGVuIGByZXEudXJsYCwgdGhlIGByZXF1ZXN0TWV0YWAgZmllbGRzIE5leHQuanNcbiAqIHJlYWRzLCB0aGUgY3dkIOKAlCB3aGljaCBpcyB0aGUgd2hvbGUgY29udHJhY3QgYmV0d2VlbiB0aGUgcnVudGltZSBhbmQgYSByZWFsXG4gKiBidWlsdCBlbnRyeXBvaW50LCBhbmQgaXQgaXMgb3RoZXJ3aXNlIG9ubHkgb2JzZXJ2YWJsZSBieSBydW5uaW5nIE5leHQuanMuXG4gKi9cbmNvbnN0IEVOVFJZUE9JTlRfU1RVQiA9IGBcbmNvbnN0IHsgd3JpdGVGaWxlU3luYyB9ID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAocmVxLCByZXMsIGN0eCkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwsIFwiaHR0cHM6Ly9zdHViLnRlc3RcIik7XG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcImJvb21FdmVyeXdoZXJlXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidGhlIGVycm9yIHBhZ2UgZXhwbG9kZWQgdG9vXCIpO1xuICB9XG4gIC8vIFNhbWUgcmVjdXJzaW9uIGd1YXJkIGFzIFxcYHJlbmRlcjQwNFxcYCBiZWxvdzogdGhlIGVycm9yIHBhZ2UgaXMgcmVuZGVyZWQgZm9yXG4gIC8vIHRoZSBVUkwgdGhhdCB3YXMgYXNrZWQgZm9yLCBzbyBhbiB1bmd1YXJkZWQgdGhyb3cgd291bGQgcmVwZWF0IGZvcmV2ZXIuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcImJvb21cIikgJiYgIV9fZmlsZW5hbWUuaW5jbHVkZXMoXCJfZXJyb3JcIikpIHtcbiAgICAvLyBBIHJlbmRlciB0aGF0IGRlc2NyaWJlZCBpdHMgYm9keSBiZWZvcmUgaXQgdGhyZXcuXG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIsIFwiMTIzNFwiKTtcbiAgICByZXMuc2V0SGVhZGVyKFwiRVRhZ1wiLCAnXCJzdGFsZVwiJyk7XG4gICAgLy8gV2hhdCBcXGBnZXRTZXJ2ZXJTaWRlUHJvcHNcXGAgKG9yIGEgXFxgaGVhZGVycygpXFxgIHJ1bGUpIGNhbiBsZWF2ZSBiZWhpbmQuXG4gICAgcmVzLnNldEhlYWRlcihcIkNhY2hlLUNvbnRyb2xcIiwgXCJzLW1heGFnZT02MFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyb3V0ZSBleHBsb2RlZFwiKTtcbiAgfVxuICAvLyBXaGF0IGJvdGggcm91dGVycyBkbyBmb3IgXFxgbm90Rm91bmQoKVxcYCB0aGV5IGNhbm5vdCByZW5kZXIgdGhlbXNlbHZlcy4gT25seVxuICAvLyB0aGUgcm91dGUgdGhhdCBnYXZlIHVwIGRvZXMgaXQ6IHRoZSBydW50aW1lIHJlbmRlcnMgdGhlIDQwNCBhZ2FpbnN0IHRoZVxuICAvLyAqc2FtZSogVVJMLCBzbyB0aGUgbm90LWZvdW5kIG1vZHVsZSByZWFjaGluZyBoZXJlIGFnYWluIHdvdWxkIHJlY3Vyc2UuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcInJlbmRlcjQwNFwiKSAmJiAhX19maWxlbmFtZS5pbmNsdWRlcyhcIl9ub3QtZm91bmRcIikpIHtcbiAgICBhd2FpdCBjdHgucmVxdWVzdE1ldGEucmVuZGVyNDA0KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFxcYHJlcy5yZXZhbGlkYXRlKHRhcmdldClcXGAgZnJvbSBhIFBhZ2VzIEFQSSByb3V0ZSwgc3BlbGxlZCBvdXQ6IHRoZSBydW50aW1lXG4gIC8vIHN1cHBsaWVzIFxcYHJlcXVlc3RNZXRhLnJldmFsaWRhdGVcXGAsIGFuZCB3aGF0IGNvbWVzIGJhY2sgaXMgZWl0aGVyIG5vdGhpbmcgb3JcbiAgLy8gdGhlIFxcYEludmFsaWQgcmVzcG9uc2UgPHN0YXR1cz5cXGAgdGhpcyByZXBvcnRzLlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJyZXZhbGlkYXRlXCIpKSB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY3R4LnJlcXVlc3RNZXRhLnJldmFsaWRhdGUoe1xuICAgICAgICB1cmxQYXRoOiB1cmwuc2VhcmNoUGFyYW1zLmdldChcInJldmFsaWRhdGVcIiksXG4gICAgICAgIGhlYWRlcnM6IHsgXCJ4LXByZXJlbmRlci1yZXZhbGlkYXRlXCI6IFwicHJldmlldy1pZFwiIH0sXG4gICAgICAgIG9wdHM6IHsgdW5zdGFibGVfb25seUdlbmVyYXRlZDogdXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJvbmx5R2VuZXJhdGVkXCIpIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoeyByZXZhbGlkYXRlZDogZXJyb3IgPT09IG51bGwsIGVycm9yIH0pKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gTGV0cyBhIHRlc3Qgc2VlIHRoZSByZXF1ZXN0IGEgcmV2YWxpZGF0aW9uIHJlbmRlcmVkLCB3aG9zZSByZXNwb25zZSB0aGVcbiAgLy8gcnVudGltZSBkaXNjYXJkcy5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwicmVjb3JkT3JpZ2luXCIpKSB7XG4gICAgd3JpdGVGaWxlU3luYyhwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfTUFSS0VSLCBjdHgucmVxdWVzdE1ldGEuaW5pdFVSTCk7XG4gIH1cbiAgLy8gTGV0cyBhIHJldmFsaWRhdGlvbiB0YXJnZXQgYW5zd2VyIHNvbWV0aGluZyBvdGhlciB0aGFuIDIwMC5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwic3RhdHVzXCIpKSB7XG4gICAgcmVzLnN0YXR1c0NvZGUgPSBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzdGF0dXNcIikpO1xuICB9XG4gIC8vIFdoYXQgYSBwcmVyZW5kZXJlZCBcXGAvX25vdC1mb3VuZFxcYCBkb2VzOiBpdCBzZW5kcyB0aGUgQ2FjaGUtQ29udHJvbCBvZiBpdHNcbiAgLy8gb3duIGNhY2hlIGVudHJ5LCBhIHllYXIgZm9yIG9uZSB0aGF0IG5ldmVyIHJldmFsaWRhdGVzIOKAlCBidXQgb25seSB3aGVuIHRoZVxuICAvLyByZXNwb25zZSBoYXMgbm9uZSB5ZXQsIGFzIFxcYHNlbmRSZW5kZXJSZXN1bHRcXGAgYW5kIFxcYHBhZ2VzLWhhbmRsZXIuanNcXGAgZG8uXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcImNhY2hlQ29udHJvbFwiKSAmJiAhcmVzLmdldEhlYWRlcihcIkNhY2hlLUNvbnRyb2xcIikpIHtcbiAgICByZXMuc2V0SGVhZGVyKFwiQ2FjaGUtQ29udHJvbFwiLCB1cmwuc2VhcmNoUGFyYW1zLmdldChcImNhY2hlQ29udHJvbFwiKSk7XG4gIH1cbiAgLy8gQSByb3V0ZSB0aGF0IHJlYWRzIGl0cyByZXF1ZXN0IGJvZHksIHJlcG9ydGluZyB3aGF0IGFycml2ZWQuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcInJlYWRCb2R5XCIpKSB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZXEpIGxlbmd0aCArPSBjaHVuay5sZW5ndGg7XG4gICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeSh7IGJvZHlMZW5ndGg6IGxlbmd0aCB9KSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIEEgUGFnZXMgQVBJIHJvdXRlIHRoYXQgcmV0dXJucyBiZWZvcmUgaXQgaXMgZG9uZSB3cml0aW5nOiB3aGF0XG4gIC8vIFxcYHN0cmVhbS5waXBlKHJlcylcXGAgYW5kIGEgY2FsbGJhY2stc3R5bGUgXFxgcmVzLmpzb24oKVxcYCBib3RoIGxvb2sgbGlrZS5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwiZW5kTGF0ZXJcIikpIHtcbiAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiKTtcbiAgICByZXMud3JpdGUoXCJmaXJzdCxcIik7XG4gICAgc2V0VGltZW91dCgoKSA9PiByZXMuZW5kKFwic2Vjb25kXCIpLCAxMCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFdoYXQgTmV4dCdzIFxcYEFmdGVyQ29udGV4dFxcYCBkb2VzOiB3b3JrIHJlZ2lzdGVyZWQgd2l0aCBcXGB3YWl0VW50aWxcXGAgYWZ0ZXJcbiAgLy8gdGhlIHJlc3BvbnNlLCBmcm9tIGluc2lkZSB3b3JrIHRoYXQgd2FzIGl0c2VsZiByZWdpc3RlcmVkIHdpdGggaXQuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcImxhdGVXYWl0VW50aWxcIikpIHtcbiAgICBjdHgud2FpdFVudGlsKFxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGN0eC53YWl0VW50aWwoXG4gICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZUxhdGUpID0+XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiwgXCJsYXRlXCIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVMYXRlKCk7XG4gICAgICAgICAgICAgIH0sIDEwKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIDEwKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJ3YWl0VW50aWxcIikpIHtcbiAgICBjdHgud2FpdFVudGlsKFxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdyaXRlRmlsZVN5bmMocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiwgXCJkb25lXCIpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgMTApLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gIHJlcy5lbmQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZmlsZTogX19maWxlbmFtZSxcbiAgICAgIHVybDogcmVxLnVybCxcbiAgICAgIGluaXRVUkw6IGN0eC5yZXF1ZXN0TWV0YSAmJiBjdHgucmVxdWVzdE1ldGEuaW5pdFVSTCxcbiAgICAgIGhvc3RuYW1lOiBjdHgucmVxdWVzdE1ldGEgJiYgY3R4LnJlcXVlc3RNZXRhLmhvc3RuYW1lLFxuICAgICAgcXVlcnk6IGN0eC5yZXF1ZXN0TWV0YSAmJiBjdHgucmVxdWVzdE1ldGEucXVlcnksXG4gICAgICBwYXJhbXM6IChjdHgucmVxdWVzdE1ldGEgJiYgY3R4LnJlcXVlc3RNZXRhLnBhcmFtcykgfHwgbnVsbCxcbiAgICAgIGhhc1JlbmRlcjQwNDogQm9vbGVhbihjdHgucmVxdWVzdE1ldGEgJiYgY3R4LnJlcXVlc3RNZXRhLnJlbmRlcjQwNCksXG4gICAgICB3YWl0VW50aWw6IHR5cGVvZiBjdHgud2FpdFVudGlsLFxuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaGVhZGVyOiByZXEuaGVhZGVyc1tcIngtZnJvbS1taWRkbGV3YXJlXCJdIHx8IG51bGwsXG4gICAgICBuZXh0UmVzdW1lOiByZXEuaGVhZGVyc1tcIm5leHQtcmVzdW1lXCJdIHx8IG51bGwsXG4gICAgICBtYXRjaGVkUGF0aDogcmVxLmhlYWRlcnNbXCJ4LW1hdGNoZWQtcGF0aFwiXSB8fCBudWxsLFxuICAgICAgY29va2llOiByZXEuaGVhZGVycy5jb29raWUgfHwgbnVsbCxcbiAgICB9KSxcbiAgKTtcbn07XG5gO1xuXG4vKipcbiAqIGBOZXh0UmVzcG9uc2UubmV4dCh7IHJlcXVlc3Q6IHsgaGVhZGVycyB9IH0pYCwgc3BlbGxlZCBvdXQgaW4gdGhlIHdpcmUgcHJvdG9jb2xcbiAqIE5leHQuanMgdXNlczogYHgtbWlkZGxld2FyZS1vdmVycmlkZS1oZWFkZXJzYCBsaXN0cyAqZXZlcnkqIHJlcXVlc3QgaGVhZGVyIHRoZVxuICogcm91dGUgc2hvdWxkIHNlZSDigJQgZHJvcHBpbmcgb25lIGhlcmUgaXMgaG93IGEgcmVhbCBhcHAgbG9zZXMgYGFjY2VwdC1lbmNvZGluZ2AuXG4gKi9cbmNvbnN0IE1JRERMRVdBUkVfU1RVQiA9IGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7IFwieC1taWRkbGV3YXJlLW5leHRcIjogXCIxXCIgfSk7XG4gIGNvbnN0IG5hbWVzID0gW107XG4gIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgaGVhZGVycy5zZXQoXCJ4LW1pZGRsZXdhcmUtcmVxdWVzdC1cIiArIG5hbWUsIHZhbHVlKTtcbiAgfSk7XG4gIG5hbWVzLnB1c2goXCJ4LWZyb20tbWlkZGxld2FyZVwiKTtcbiAgaGVhZGVycy5zZXQoXCJ4LW1pZGRsZXdhcmUtcmVxdWVzdC14LWZyb20tbWlkZGxld2FyZVwiLCBcInllc1wiKTtcbiAgaGVhZGVycy5zZXQoXCJ4LW1pZGRsZXdhcmUtb3ZlcnJpZGUtaGVhZGVyc1wiLCBuYW1lcy5qb2luKFwiLFwiKSk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBoZWFkZXJzIH0pO1xufTtcbmA7XG5cbmNsYXNzIENvbGxlY3RpbmdTaW5rIGltcGxlbWVudHMgUmVzcG9uc2VTaW5rIHtcbiAgcHVibGljIGhlYWQ/OiBSZXNwb25zZUhlYWQ7XG4gIHB1YmxpYyByZWFkb25seSBjaHVua3M6IEJ1ZmZlcltdID0gW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBwYWRFbXB0eUJvZHkgPSBmYWxzZSkge31cblxuICBwdWJsaWMgYmVnaW4oaGVhZDogUmVzcG9uc2VIZWFkKTogV3JpdGFibGUge1xuICAgIHRoaXMuaGVhZCA9IGhlYWQ7XG4gICAgY29uc3QgY2h1bmtzID0gdGhpcy5jaHVua3M7XG4gICAgcmV0dXJuIG5ldyBXcml0YWJsZSh7XG4gICAgICB3cml0ZShjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYm9keSgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KHRoaXMuY2h1bmtzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZShwYXRoOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcgfCBCdWZmZXIpOiB2b2lkIHtcbiAgbWtkaXJTeW5jKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGNvbnRlbnRzKTtcbn1cblxuY29uc3QgRkFWSUNPTiA9IEJ1ZmZlci5mcm9tKFwiMDAwMDAxMDAtZmFrZS1pY29uXCIsIFwidXRmLThcIik7XG5jb25zdCBOT1RfRk9VTkRfSFRNTCA9IFwiPGh0bWw+PGJvZHk+cHJlcmVuZGVyZWQgNDA0PC9ib2R5PjwvaHRtbD5cIjtcbmNvbnN0IEVSUk9SX0hUTUwgPSBcIjxodG1sPjxib2R5PnByZXJlbmRlcmVkIDUwMDwvYm9keT48L2h0bWw+XCI7XG4vKipcbiAqIFdoYXQgYSBjb250YWluZXIgaW1hZ2UgY29waWVzIGludG8gYHB1YmxpYy9gLiBOYW1lcyBgc2VuZGAgYW5kIHRoZSBleGFjdFxuICogbWF0Y2ggaW4gYEBuZXh0L3JvdXRpbmdgIGVhY2ggZ290IHdyb25nOiBhIGAlYCB0aGF0IGlzIG5vdCBhbiBlc2NhcGUsIG9uZSB0aGF0XG4gKiBsb29rcyBsaWtlIG9uZSBuZXh0IHRvIHRoZSBmaWxlIGl0IGRlY29kZXMgdG8sIGFuZCBhbiBgQGAgYSBicm93c2VyIGxlYXZlc1xuICogYWxvbmUuXG4gKi9cbmNvbnN0IFBVQkxJQ19GSUxFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJ0ZXN0LnR4dFwiOiBcImhlbGxvIGZyb20gcHVibGljXCIsXG4gIFwiMTAwJS5wbmdcIjogXCJhIGxpdGVyYWwgcGVyY2VudFwiLFxuICBcImElMjBiLnR4dFwiOiBcInRoZSBmaWxlIG5hbWVkIHdpdGggYSBwZXJjZW50XCIsXG4gIFwiYSBiLnR4dFwiOiBcInRoZSBmaWxlIG5hbWVkIHdpdGggYSBzcGFjZVwiLFxuICBcImltYWdlcy9sb2dvQDJ4LnBuZ1wiOiBcImF0IHNpZ25cIixcbn07XG5cbi8qKlxuICogTWF0ZXJpYWxpemVzIHRoZSB0cmVlIGEgZGVwbG95bWVudCBzdGFnZXM6IHRoZSBtYW5pZmVzdCB1bmRlclxuICogYGNkay1uZXh0anMtcnVudGltZS9gLCBhIHN0dWIgYXQgZXZlcnkgZW50cnlwb2ludCBgZmlsZVBhdGhgLCB0aGUgc3RhdGljIGZpbGVzXG4gKiB0aGUgbWFuaWZlc3QgcG9pbnRzIGF0LCBhbmQgdGhlIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAgYGxvYWRSdW50aW1lYFxuICogcHJvYmVzIGZvci5cbiAqL1xuZnVuY3Rpb24gc3RhZ2VEZXBsb3ltZW50KFxuICBtaWRkbGV3YXJlU291cmNlID0gTUlERExFV0FSRV9TVFVCLFxuICB0cmFuc2Zvcm1NYW5pZmVzdDogKG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3QpID0+IEFkYXB0ZXJNYW5pZmVzdCA9IChpdCkgPT5cbiAgICBpdCxcbik6IHN0cmluZyB7XG4gIC8vIFRoZSBmaXh0dXJlIGlzIGEgcmVhbCBjYXB0dXJlZCBjb250ZXh0LCBhcyBKU09OOiB0aGUgc3RydWN0dXJhbCBjYXN0IGlzIHRoZVxuICAvLyBwb2ludCBvZiB0aGUgY2FzdCAoc2VlIGBidWlsZC1vdXRwdXRzLnRlc3QudHNgKS5cbiAgY29uc3QgY3R4ID0gc3RydWN0dXJlZENsb25lKGFwcFBsYXlncm91bmQpIGFzIHVua25vd24gYXMgQnVpbGRDb21wbGV0ZUNvbnRleHQ7XG4gIGNvbnN0IG1hbmlmZXN0ID0gdHJhbnNmb3JtTWFuaWZlc3QoXG4gICAgYnVpbGRBZGFwdGVyTWFuaWZlc3QoY3R4LCB7IGJ1aWxkQ3dkOiBjdHgucHJvamVjdERpciB9KS5tYW5pZmVzdCxcbiAgKTtcbiAgLy8gUmVhbHBhdGggYmVjYXVzZSBgbG9hZFJ1bnRpbWVgIGNoZGlycywgYW5kIG1hY09TJ3MgL3ZhciBpcyBhIHN5bWxpbmsgdG9cbiAgLy8gL3ByaXZhdGUvdmFyOiB0aGUgY3dkIHRoZSBlbnRyeXBvaW50cyByZXBvcnQgd291bGQgbm90IG1hdGNoIG90aGVyd2lzZS5cbiAgY29uc3Qgcm9vdCA9IHJlYWxwYXRoU3luYyhta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcImNkay1uZXh0anMtY29yZS1cIikpKTtcblxuICB3cml0ZShkZXBsb3llZE1hbmlmZXN0UGF0aChyb290KSwgSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QpKTtcbiAgd3JpdGUoXG4gICAgam9pbihyb290LCBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsIFwiLm5leHQvcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIiksXG4gICAgSlNPTi5zdHJpbmdpZnkoeyB2ZXJzaW9uOiAxLCBjb25maWc6IHt9IH0pLFxuICApO1xuICAvLyBBIGRlcGxveWVkIHRyZWUgY2FycmllcyB0aGUgYG5leHRgIGNsb3N1cmUgYG5leHQgYnVpbGRgIHRyYWNlZCwgdW5kZXIgdGhlXG4gIC8vICpwcm9qZWN0KiBkaXIgcmF0aGVyIHRoYW4gbmV4dCB0byB0aGUgcnVudGltZSBzaGVsbCDigJQgd2hpY2ggaXMgdGhlIHdob2xlXG4gIC8vIHJlYXNvbiBgbmV4dC1tb2R1bGVzLnRzYCBleGlzdHMuIExpbmtpbmcgdGhpcyByZXBvJ3Mgb3duIGBub2RlX21vZHVsZXNgIGluXG4gIC8vIHJlcHJvZHVjZXMgdGhhdCwgc28gYHNlcnZlU3RhdGljYCBoZXJlIHJlc29sdmVzIGJ5IHRoZSBzYW1lIHdhbGsgaXQgZG9lcyBpblxuICAvLyBMYW1iZGEgaW5zdGVhZCBvZiB0aGUgdGVzdCBxdWlldGx5IGV4ZXJjaXNpbmcgYSBkaWZmZXJlbnQgbG9va3VwLlxuICBzeW1saW5rU3luYyhcbiAgICBqb2luKF9fZGlybmFtZSwgXCIuLi8uLi9ub2RlX21vZHVsZXNcIiksXG4gICAgam9pbihyb290LCBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsIFwibm9kZV9tb2R1bGVzXCIpLFxuICApO1xuXG4gIGZvciAoY29uc3QgZW50cnlwb2ludCBvZiBPYmplY3QudmFsdWVzKG1hbmlmZXN0LmVudHJ5cG9pbnRzKSkge1xuICAgIHdyaXRlKGpvaW4ocm9vdCwgZW50cnlwb2ludC5maWxlUGF0aCksIEVOVFJZUE9JTlRfU1RVQik7XG4gIH1cbiAgd3JpdGUoam9pbihyb290LCBtYW5pZmVzdC5taWRkbGV3YXJlIS5maWxlUGF0aCksIG1pZGRsZXdhcmVTb3VyY2UpO1xuXG4gIHdyaXRlKGpvaW4ocm9vdCwgbWFuaWZlc3Quc3RhdGljRmlsZXNbXCIvZmF2aWNvbi5pY29cIl0pLCBGQVZJQ09OKTtcbiAgLy8gQWJzZW50IGluIHRoZSBkZXBsb3ltZW50cyB0aGUgUGFnZXMgNDA0IGFuZCBlcnJvci1wYWdlIGxhZGRlciB0ZXN0cyBzdGFnZS5cbiAgaWYgKG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiLzQwNFwiXSkge1xuICAgIHdyaXRlKGpvaW4ocm9vdCwgbWFuaWZlc3Quc3RhdGljRmlsZXNbXCIvNDA0XCJdKSwgTk9UX0ZPVU5EX0hUTUwpO1xuICB9XG4gIGlmIChtYW5pZmVzdC5zdGF0aWNGaWxlc1tcIi81MDBcIl0pIHtcbiAgICB3cml0ZShqb2luKHJvb3QsIG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiLzUwMFwiXSksIEVSUk9SX0hUTUwpO1xuICB9XG4gIGZvciAoY29uc3QgW2ZpbGUsIGNvbnRlbnRzXSBvZiBPYmplY3QuZW50cmllcyhQVUJMSUNfRklMRVMpKSB7XG4gICAgd3JpdGUoam9pbihyb290LCBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsIFwicHVibGljXCIsIGZpbGUpLCBjb250ZW50cyk7XG4gIH1cbiAgLy8gQXN5bmMgb24gcHVycG9zZTogYGxvYWRSdW50aW1lYCBoYXMgdG8gYXdhaXQgYHJlZ2lzdGVyKClgLCBub3QganVzdCBjYWxsIGl0LlxuICB3cml0ZShcbiAgICBqb2luKHJvb3QsIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpciwgXCIubmV4dC9zZXJ2ZXIvaW5zdHJ1bWVudGF0aW9uLmpzXCIpLFxuICAgIFwiZXhwb3J0cy5yZWdpc3RlciA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KCgpID0+IHtcIiArXG4gICAgICBcIiBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfUkVHSVNURVJFRCA9ICd5ZXMnOyByZXNvbHZlKCk7IH0sIDEwKSk7XFxuXCIsXG4gICk7XG4gIC8vIGAuZW52YCByYXRoZXIgdGhhbiBgLmVudi5wcm9kdWN0aW9uYDogYEBuZXh0L2VudmAgcGlja3MgdGhlIG1vZGUgZnJvbVxuICAvLyBOT0RFX0VOViwgd2hpY2ggamVzdCBzZXRzIHRvIFwidGVzdFwiLlxuICB3cml0ZShcbiAgICBqb2luKHJvb3QsIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpciwgXCIuZW52XCIpLFxuICAgIFwiQ0RLX05FWFRKU19URVNUX0ZST01fRU5WX0ZJTEU9ZnJvbS1maWxlXFxuQ0RLX05FWFRKU19URVNUX1NFVF9CWV9MQU1CREE9ZnJvbS1maWxlXFxuXCIsXG4gICk7XG4gIHJldHVybiByb290O1xufVxuXG5sZXQgcm9vdDogc3RyaW5nO1xubGV0IHJ1bnRpbWU6IE5leHRqc1J1bnRpbWU7XG5jb25zdCBvcmlnaW5hbEN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbmJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gIGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gIHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9TRVRfQllfTEFNQkRBID0gXCJmcm9tLWxhbWJkYVwiO1xuICByb290ID0gc3RhZ2VEZXBsb3ltZW50KCk7XG4gIC8vIGBsb2FkUnVudGltZWAgY2hkaXJzLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgaXQuXG4gIHJ1bnRpbWUgPSBhd2FpdCBsb2FkUnVudGltZShyb290KTtcbn0pO1xuXG5hZnRlckFsbCgoKSA9PiB7XG4gIHByb2Nlc3MuY2hkaXIob3JpZ2luYWxDd2QpO1xuICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xufSk7XG5cbi8qKiBPbmUgcmVxdWVzdCB0aHJvdWdoIHRoZSByZWFsIGBoYW5kbGVgLCB3aXRoIHRoZSByZXNwb25zZSBjb2xsZWN0ZWQuICovXG5hc3luYyBmdW5jdGlvbiBzZW5kKFxuICByZXF1ZXN0OiBQYXJ0aWFsPFJ1bnRpbWVSZXF1ZXN0PiAmIHsgdXJsOiBzdHJpbmcgfSxcbiAgcGFkRW1wdHlCb2R5ID0gZmFsc2UsXG4pOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsocGFkRW1wdHlCb2R5KTtcbiAgYXdhaXQgcnVudGltZS5oYW5kbGUoXG4gICAge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSxcbiAgICAgIC4uLnJlcXVlc3QsXG4gICAgfSxcbiAgICBzaW5rLFxuICApO1xuICByZXR1cm4gc2luaztcbn1cblxuLyoqIFRoZSBKU09OIGFuIGVudHJ5cG9pbnQgc3R1YiBhbnN3ZXJzIHdpdGguICovXG5mdW5jdGlvbiBzdHViQm9keShzaW5rOiBDb2xsZWN0aW5nU2luayk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgZW5jb2RpbmcgPSBzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdO1xuICBjb25zdCBib2R5ID0gZW5jb2RpbmcgPT09IFwiZ3ppcFwiID8gZ3VuemlwU3luYyhzaW5rLmJvZHkpIDogc2luay5ib2R5O1xuICByZXR1cm4gSlNPTi5wYXJzZShib2R5LnRvU3RyaW5nKFwidXRmLThcIikpO1xufVxuXG5kZXNjcmliZShcImxvYWRSdW50aW1lXCIsICgpID0+IHtcbiAgaXQoXCJjaGRpcnMgdG8gdGhlIHN0YWdlZCBwcm9qZWN0IGRpciwgYmVjYXVzZSBlbnRyeXBvaW50cyByZXNvbHZlIGFnYWluc3QgY3dkXCIsICgpID0+IHtcbiAgICBleHBlY3QocHJvY2Vzcy5jd2QoKSkudG9CZShqb2luKHJvb3QsIFwiYXBwLXBsYXlncm91bmRcIikpO1xuICB9KTtcblxuICBpdChcImxvYWRzIHRoZSBzdGFnZWQgZW52IGZpbGVzIHRoZSB3YXkgbmV4dCBzdGFydCBkb2VzLCB3aXRob3V0IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9uJ3MgZW52aXJvbm1lbnRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfRlJPTV9FTlZfRklMRSkudG9CZShcImZyb20tZmlsZVwiKTtcbiAgICBleHBlY3QocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX1NFVF9CWV9MQU1CREEpLnRvQmUoXCJmcm9tLWxhbWJkYVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhd2FpdHMgaW5zdHJ1bWVudGF0aW9uIHJlZ2lzdGVyKCkgYmVmb3JlIGFueSBlbnRyeXBvaW50IG9yIG1pZGRsZXdhcmUgbG9hZHMsIGFzIG5leHQgc3RhcnQgZG9lc1wiLCAoKSA9PiB7XG4gICAgLy8gTW9kdWxlLXNjb3BlIGNvZGUgaW4gbWlkZGxld2FyZSBhbmQgZW50cnlwb2ludHMgcmVhZHMgd2hhdCBgcmVnaXN0ZXIoKWBcbiAgICAvLyBzZXRzICgjMjc5KSwgYW5kIG5vdGhpbmcgaXMgbG9hZGVkIHVudGlsIGBsb2FkUnVudGltZWAgaGFzIHJldHVybmVkLlxuICAgIGV4cGVjdChwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfUkVHSVNURVJFRCkudG9CZShcInllc1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJleHBsYWlucyBhIGRlcGxveW1lbnQgcGFja2FnZSB3aXRoIG5vIG1hbmlmZXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbXB0eSA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1lbXB0eS1cIikpO1xuICAgIGF3YWl0IGV4cGVjdChsb2FkUnVudGltZShlbXB0eSkpLnJlamVjdHMudG9UaHJvdyhcbiAgICAgIC9Db3VsZCBub3QgcmVhZCB0aGUgY2RrLW5leHRqcyBhZGFwdGVyIG1hbmlmZXN0LyxcbiAgICApO1xuICB9KTtcblxuICBpdChcImV4cGxhaW5zIGEgZGVwbG95bWVudCBwYWNrYWdlIG1pc3NpbmcgdGhlIHN0YWdlZCBwcm9qZWN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXJ0aWFsID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJjZGstbmV4dGpzLXBhcnRpYWwtXCIpKTtcbiAgICB3cml0ZShcbiAgICAgIGRlcGxveWVkTWFuaWZlc3RQYXRoKHBhcnRpYWwpLFxuICAgICAgcmVhZEZpbGVTeW5jKGRlcGxveWVkTWFuaWZlc3RQYXRoKHJvb3QpLCBcInV0Zi04XCIpLFxuICAgICk7XG4gICAgYXdhaXQgZXhwZWN0KGxvYWRSdW50aW1lKHBhcnRpYWwpKS5yZWplY3RzLnRvVGhyb3coXG4gICAgICAvZG9lcyBub3QgY29udGFpbiB0aGUgc3RhZ2VkIE5leHQuanMgcHJvamVjdC8sXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJOZXh0anNSdW50aW1lLmhhbmRsZVwiLCAoKSA9PiB7XG4gIGl0KFwiaW52b2tlcyB0aGUgbWF0Y2hlZCBlbnRyeXBvaW50IHdpdGggdGhlIHJlcXVlc3RNZXRhIE5leHQuanMgcmVhZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgY29uc3QgYm9keSA9IHN0dWJCb2R5KHNpbmspO1xuICAgIGV4cGVjdChib2R5LmZpbGUpLnRvQmUoXG4gICAgICBqb2luKHJvb3QsIFwiYXBwLXBsYXlncm91bmQvLm5leHQvc2VydmVyL2FwcC9wYWdlLmpzXCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGJvZHkudXJsKS50b0JlKFwiL1wiKTtcbiAgICAvLyBXaXRob3V0IGBpbml0VVJMYCwgYFJvdXRlTW9kdWxlLnByZXBhcmVgIGZhbGxzIGJhY2sgdG8gYGh0dHA6Ly9sb2NhbGhvc3RgLlxuICAgIGV4cGVjdChib2R5LmluaXRVUkwpLnRvQmUoXCJodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0L1wiKTtcbiAgICBleHBlY3QoYm9keS5ob3N0bmFtZSkudG9CZShcInNob3AuZXhhbXBsZS50ZXN0XCIpO1xuICAgIGV4cGVjdChib2R5Lmhhc1JlbmRlcjQwNCkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoYm9keS53YWl0VW50aWwpLnRvQmUoXCJmdW5jdGlvblwiKTtcbiAgICBleHBlY3QoYm9keS5jd2QpLnRvQmUoam9pbihyb290LCBcImFwcC1wbGF5Z3JvdW5kXCIpKTtcbiAgfSk7XG5cbiAgaXQoXCJ0cnVzdHMgeC1mb3J3YXJkZWQtaG9zdCBvdmVyIHRoZSBob3N0IENsb3VkRnJvbnQgcmV3cm90ZSwgd2hlbiB0aGUgc2hlbGwgc2F5cyB0b1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJvcmlnaW4uY2xvdWRmcm9udC5pbnRlcm5hbFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJ3d3cuZXhhbXBsZS50ZXN0XCIsXG4gICAgICB9LFxuICAgICAgdHJ1c3RGb3J3YXJkZWRIb3N0OiB0cnVlLFxuICAgIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly93d3cuZXhhbXBsZS50ZXN0L1wiKTtcbiAgfSk7XG5cbiAgLy8gT25seSB0aGUgQ2xvdWRGcm9udCBmdW5jdGlvbiBpbiBmcm9udCBvZiAqZnVuY3Rpb24qIGNvbXB1dGUgb3ZlcndyaXRlcyB0aGlzXG4gIC8vIGhlYWRlciwgc28gb24gQ29udGFpbmVycyBhbmQgdGhlIFJlZ2lvbmFsIHR5cGVzIGl0IGFycml2ZXMgZnJvbSB0aGUgY2xpZW50OlxuICAvLyBob25vcmluZyBpdCBsZXQgYFgtRm9yd2FyZGVkLUhvc3Q6IGV2aWwuZXhhbXBsZWAgcG9pbnQgZXZlcnkgYWJzb2x1dGUgVVJMXG4gIC8vIHRoZSBhcHAgYnVpbHQsIGEgcGFzc3dvcmQtcmVzZXQgbGluayBzYXksIGF0IGV2aWwuZXhhbXBsZS5cbiAgaXQoXCJpZ25vcmVzIHgtZm9yd2FyZGVkLWhvc3QgdW5sZXNzIHRoZSBzaGVsbCB0cnVzdHMgaXQsIGxpa2UgbmV4dCBzdGFydFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJldmlsLmV4YW1wbGVcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmluaXRVUkwpLnRvQmUoXCJodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0L1wiKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuaG9zdG5hbWUpLnRvQmUoXCJzaG9wLmV4YW1wbGUudGVzdFwiKTtcbiAgfSk7XG5cbiAgLy8gQSB2YWx1ZSB0aGF0IGNhbm5vdCBiZSBhIFVSTCBhdXRob3JpdHkgbWFkZSBgbmV3IFVSTGAgdGhyb3csIGFuZCBvbiB0aGVcbiAgLy8gTGFtYmRhIHNoZWxscyDigJQgd2hvc2UgaGFuZGxlcnMgd3JhcCBub3RoaW5nIOKAlCB0aGF0IGlzIGFuIGludm9jYXRpb24gZXJyb3IgYW5kXG4gIC8vIGEgNTAyIHJhdGhlciB0aGFuIGEgcmVzcG9uc2UuXG4gIGl0LmVhY2goW1xuICAgIFtcImEgc3BhY2VcIiwgXCJleGEgbXBsZS50ZXN0XCJdLFxuICAgIFtcImEgc2NoZW1lXCIsIFwiaHR0cHM6Ly93d3cuZXhhbXBsZS50ZXN0XCJdLFxuICAgIFtcImEgcGF0aFwiLCBcInd3dy5leGFtcGxlLnRlc3QvZXZpbFwiXSxcbiAgICBbXCJjcmVkZW50aWFsc1wiLCBcInVzZXJAd3d3LmV4YW1wbGUudGVzdFwiXSxcbiAgICBbXCJub3RoaW5nXCIsIFwiXCJdLFxuICBdKShcbiAgICBcImlnbm9yZXMgYW4geC1mb3J3YXJkZWQtaG9zdCBjb250YWluaW5nICVzIGFuZCBmYWxscyBiYWNrIHRvIGhvc3RcIixcbiAgICBhc3luYyAoX2xhYmVsLCBmb3J3YXJkZWQpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgICAgdXJsOiBcIi9cIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIixcbiAgICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogZm9yd2FyZGVkLFxuICAgICAgICB9LFxuICAgICAgICB0cnVzdEZvcndhcmRlZEhvc3Q6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly9zaG9wLmV4YW1wbGUudGVzdC9cIik7XG4gICAgfSxcbiAgKTtcblxuICAvLyBNdWx0aXBsZSBwcm94aWVzIGVhY2ggYXBwZW5kLCBhbmQgb25seSB0aGUgZmlyc3QgdmFsdWUgaXMgdGhpcyBob3Ancy5cbiAgaXQoXCJ0YWtlcyB0aGUgZmlyc3QgdmFsdWUgb2YgYSBjb21tYS1qb2luZWQgeC1mb3J3YXJkZWQtaG9zdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJvcmlnaW4uY2xvdWRmcm9udC5pbnRlcm5hbFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJ3d3cuZXhhbXBsZS50ZXN0LCBpbm5lci5leGFtcGxlLnRlc3RcIixcbiAgICAgIH0sXG4gICAgICB0cnVzdEZvcndhcmRlZEhvc3Q6IHRydWUsXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmluaXRVUkwpLnRvQmUoXCJodHRwczovL3d3dy5leGFtcGxlLnRlc3QvXCIpO1xuICB9KTtcblxuICBpdChcImlnbm9yZXMgYW4geC1mb3J3YXJkZWQtcHJvdG8gdGhhdCBpcyBub3QgaHR0cCBvciBodHRwc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLXByb3RvXCI6IFwiamF2YXNjcmlwdFwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuaW5pdFVSTCkudG9CZShcImh0dHBzOi8vc2hvcC5leGFtcGxlLnRlc3QvXCIpO1xuICB9KTtcblxuICBpdChcImhhbmRzIGEgZHluYW1pYyByb3V0ZSBpdHMgcGFyYW1zIGFzIG54dFAgcXVlcnkgdmFsdWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvaXNyLzQyXCIgfSk7XG4gICAgY29uc3QgYm9keSA9IHN0dWJCb2R5KHNpbmspO1xuICAgIGV4cGVjdChib2R5LmZpbGUpLnRvQmUoXG4gICAgICBqb2luKHJvb3QsIFwiYXBwLXBsYXlncm91bmQvLm5leHQvc2VydmVyL2FwcC9pc3IvW2lkXS9wYWdlLmpzXCIpLFxuICAgICk7XG4gICAgLy8gVGhlIGRvY3VtZW50ZWQgZGVwbG95ZWQtcHJveHkgY29udHJhY3Q6IGBwcmVwYXJlKClgIHJlY292ZXJzIGBwYXJhbXNgXG4gICAgLy8gZnJvbSB0aGVzZSwgd2hpY2ggaXMgd2h5IGByZXF1ZXN0TWV0YS5wYXJhbXNgIGlzIGxlZnQgdW5zZXQuXG4gICAgZXhwZWN0KGJvZHkudXJsKS50b0JlKFwiL2lzci80Mj9ueHRQaWQ9NDJcIik7XG4gICAgZXhwZWN0KGJvZHkucXVlcnkpLnRvRXF1YWwoeyBueHRQaWQ6IFwiNDJcIiB9KTtcbiAgICBleHBlY3QoYm9keS5wYXJhbXMpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KFwiaGFuZHMgb3ZlciBhIGNhcHR1cmUgd2l0aCBhbiBlbmNvZGVkIGRlbGltaXRlciBhcyByZXF1ZXN0TWV0YS5wYXJhbXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFRoZSBvbmUgZXhjZXB0aW9uIHRvIHRoZSBjb250cmFjdCBhYm92ZSwgYmVjYXVzZSB0d28gZGVjb2RlcyBhbmQgYSBzcGxpdFxuICAgIC8vIHdvdWxkIHR1cm4gdGhpcyBpbnRvIHRocmVlIHBhcmFtcyBhbmQgbWFrZSBgbm9ybWFsaXplUGFnZVBhdGhgIHRocm93OyBzZWVcbiAgICAvLyBgb3V0T2ZCYW5kUm91dGVQYXJhbXNgLiBUaGUgYG54dFBgIHZhbHVlIGhhcyB0byAqbGVhdmUqIHRoZSBxdWVyeSDigJQgYW5kXG4gICAgLy8gdGhlcmVmb3JlIHRoZSBVUkwg4oCUIG9yIGBwcmVwYXJlYCBwcmVmZXJzIGl0IGFuZCB0aGUgc3BsaXQgaXMgYmFjay5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvaXNyL2ElMkZiXCIgfSk7XG4gICAgY29uc3QgYm9keSA9IHN0dWJCb2R5KHNpbmspO1xuICAgIGV4cGVjdChib2R5LnVybCkudG9CZShcIi9pc3IvYSUyRmJcIik7XG4gICAgZXhwZWN0KGJvZHkucXVlcnkpLnRvRXF1YWwoe30pO1xuICAgIGV4cGVjdChib2R5LnBhcmFtcykudG9FcXVhbCh7IGlkOiBcImEvYlwiIH0pO1xuICB9KTtcblxuICBpdChcInJ1bnMgbWlkZGxld2FyZSBhbmQgYXBwbGllcyB0aGUgcmVxdWVzdCBoZWFkZXJzIGl0IG92ZXJyb2RlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvXCIgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmhlYWRlcikudG9CZShcInllc1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJzZXJ2ZXMgYSBzdGF0aWMgZmlsZSBvdXQgb2YgdGhlIHN0YWdlZCB0cmVlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvZmF2aWNvbi5pY29cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keSkudG9FcXVhbChGQVZJQ09OKTtcbiAgICAvLyBUeXBlZCBmcm9tIHRoZSByb3V0ZSdzIGV4dGVuc2lvbiwgbm90IHRoZSBmaWxlJ3M6IGEgc3RhdGljIG1ldGFkYXRhIHJvdXRlXG4gICAgLy8gaXMgc3RhZ2VkIGFzIGBmYXZpY29uLmljby5ib2R5YCwgYW5kIGAuYm9keWAgaXMgbm90IGEgbWVkaWEgdHlwZS4gU2VlXG4gICAgLy8gYHNldEJvZHlGaWxlQ29udGVudFR5cGVgIGluIHN0YXRpYy1maWxlcy50cy5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKS50b0JlKFwiaW1hZ2UveC1pY29uXCIpO1xuICB9KTtcblxuICBpdChcInNlcnZlcyBwdWJsaWMvIG9mZiBkaXNrLCB1bmRlciB0aGUgbmFtZSB0aGUgZmlsZSBhY3R1YWxseSBoYXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsIH0pO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgICAgcmV0dXJuIHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgIH07XG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvdGVzdC50eHRcIikpLnRvQmUoXCJoZWxsbyBmcm9tIHB1YmxpY1wiKTtcbiAgICAvLyBgc2VuZGAgZGVjb2RlcyB0aGUgcGF0aCBpdCBpcyBnaXZlbiwgc28gYSByYXcgZmlsZXN5c3RlbSBwYXRoIGZhaWxlZCB0b1xuICAgIC8vIGRlY29kZSAoYDEwMCUucG5nYCwgYW4gZW1wdHkgNDAwKSBvciBkZWNvZGVkIHRvIGFub3RoZXIgZmlsZS5cbiAgICBleHBlY3QoYXdhaXQgYm9keShcIi8xMDAlMjUucG5nXCIpKS50b0JlKFwiYSBsaXRlcmFsIHBlcmNlbnRcIik7XG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvYSUyNTIwYi50eHRcIikpLnRvQmUoXCJ0aGUgZmlsZSBuYW1lZCB3aXRoIGEgcGVyY2VudFwiKTtcbiAgICBleHBlY3QoYXdhaXQgYm9keShcIi9hJTIwYi50eHRcIikpLnRvQmUoXCJ0aGUgZmlsZSBuYW1lZCB3aXRoIGEgc3BhY2VcIik7XG4gICAgLy8gQm90aCB3YXlzIGEgbGluayBjYW4gc3BlbGwgaXQuXG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvaW1hZ2VzL2xvZ29AMngucG5nXCIpKS50b0JlKFwiYXQgc2lnblwiKTtcbiAgICBleHBlY3QoYXdhaXQgYm9keShcIi9pbWFnZXMvbG9nbyU0MDJ4LnBuZ1wiKSkudG9CZShcImF0IHNpZ25cIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyA0MDUgdG8gYSBwdWJsaWMvIGZpbGUgcmVxdWVzdGVkIHdpdGggYSBtZXRob2Qgb3RoZXIgdGhhbiBHRVRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGBzZW5kYCBzZXJ2ZXMgYW55IG1ldGhvZDsgYG5leHQgc3RhcnRgIGRvZXMgbm90LlxuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi90ZXN0LnR4dFwiLCBtZXRob2Q6IFwiREVMRVRFXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDUpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMuYWxsb3cpLnRvQmUoXCJHRVQsIEhFQURcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS5ub3QudG9Db250YWluKFwiaGVsbG8gZnJvbSBwdWJsaWNcIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhbiB1bmtub3duIHBhdGggdGhyb3VnaCB0aGUgL19ub3QtZm91bmQgZW50cnlwb2ludFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL25vcGU/cT0xXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5maWxlKS50b0JlKFxuICAgICAgam9pbihyb290LCBcImFwcC1wbGF5Z3JvdW5kLy5uZXh0L3NlcnZlci9hcHAvX25vdC1mb3VuZC9wYWdlLmpzXCIpLFxuICAgICk7XG4gICAgLy8gVGhlIHJlcXVlc3RlZCBwYXRoLCBub3QgYC9fbm90LWZvdW5kYDogdGhlIEFwcCBSb3V0ZXIgcHV0cyB0aGlzIGluIHRoZSBSU0NcbiAgICAvLyBwYXlsb2FkIGFzIHRoZSBjYW5vbmljYWwgVVJMLCBzbyByZW5kZXJpbmcgdGhlIG1vZHVsZSBhZ2FpbnN0IGl0cyBvd25cbiAgICAvLyBwYXRobmFtZSB3b3VsZCBoYW5kIHRoZSBjbGllbnQgdGhlIHdyb25nIGB1c2VQYXRobmFtZSgpYCBhbmQgaGlzdG9yeSBlbnRyeS5cbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFwiL25vcGU/cT0xXCIpO1xuICB9KTtcblxuICBpdChcImNhdGNoZXMgdXAgb24gY2FjaGUgdGFncyBiZWZvcmUgcmVuZGVyaW5nIGEgcGFnZSBvciB0aGUgL19ub3QtZm91bmQgcGFnZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsID0gZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPjtcbiAgICBjb25zdCBjYXRjaFVwID0gamVzdC5mbihhc3luYyAocmVuZGVyOiAoKSA9PiBQcm9taXNlPHVua25vd24+KSA9PiByZW5kZXIoKSk7XG4gICAgY29uc3QgcHJldmlvdXMgPSBnbG9iYWxbVEFHX01BTklGRVNUX1NZTUJPTF07XG4gICAgZ2xvYmFsW1RBR19NQU5JRkVTVF9TWU1CT0xdID0geyBjYXRjaFVwIH07XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmQoeyB1cmw6IFwiL1wiIH0pO1xuICAgICAgZXhwZWN0KGNhdGNoVXApLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIGF3YWl0IHNlbmQoeyB1cmw6IFwiL25vcGVcIiB9KTtcbiAgICAgIGV4cGVjdChjYXRjaFVwKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGdsb2JhbFtUQUdfTUFOSUZFU1RfU1lNQk9MXSA9IHByZXZpb3VzO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGFuIHVua25vd24gcGF0aCBuby1zdG9yZSwgd2hhdGV2ZXIgdGhlIC9fbm90LWZvdW5kIGVudHJ5IHNlbmRzXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBBIHByZXJlbmRlcmVkIGAvX25vdC1mb3VuZGAgaXMgYSBjYWNoZSBISVQgd2l0aCBhIHllYXItbG9uZyBgcy1tYXhhZ2VgLFxuICAgIC8vIGFuZCB0aGUgQ0ROIHdvdWxkIGtlZXAgdGhpcyA0MDQgZm9yIHRoYXQgbG9uZyDigJQgcGFzdCB0aGUgZGVwbG95IHRoYXQgYWRkc1xuICAgIC8vIHRoZSByb3V0ZS4gYG5leHQgc3RhcnRgIGFuc3dlcnMgYW4gdW5tYXRjaGVkIHBhdGggbm8tc3RvcmUuXG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBgL25vcGU/Y2FjaGVDb250cm9sPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFwicy1tYXhhZ2U9MzE1MzYwMDBcIil9YCxcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICBcInByaXZhdGUsIG5vLWNhY2hlLCBuby1zdG9yZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGVcIixcbiAgICApO1xuICB9KTtcblxuICBpdChcInJlbmRlcnMgdGhlIDQwNCBwYWdlIHdoZW4gYSByb3V0ZSBjYWxscyByZXF1ZXN0TWV0YS5yZW5kZXI0MDQoKVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZW5kZXI0MDQ9MVwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICAvLyBXaGF0ZXZlciB0aGUgcm91dGUgdGhhdCBnYXZlIHVwIHdhcyByZW5kZXJpbmcsIGZvciB0aGUgc2FtZSByZWFzb24uXG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLnVybCkudG9CZShcIi8/cmVuZGVyNDA0PTFcIik7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgcmVuZGVyNDA0KCkgNDA0IHRoZSBDYWNoZS1Db250cm9sIGl0cyByb3V0ZSBnYXZlIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBgbm90Rm91bmQoKWAgZnJvbSBhbiBJU1IgcGFnZSBpcyBhIGNhY2hlYWJsZSByZXN1bHQgb2YgdGhhdCBwYWdlLCBrZXB0IGZvclxuICAgIC8vIGl0cyByZXZhbGlkYXRlIHBlcmlvZCwgc28gdGhlIG5vLXN0b3JlIGZvciB1bm1hdGNoZWQgcGF0aHMgbXVzdCBub3RcbiAgICAvLyByZWFjaCBpdC5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IGAvP3JlbmRlcjQwND0xJmNhY2hlQ29udHJvbD0ke2VuY29kZVVSSUNvbXBvbmVudChcInMtbWF4YWdlPTYwXCIpfWAsXG4gICAgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFwicy1tYXhhZ2U9NjBcIik7XG4gIH0pO1xuXG4gIGl0KFwicnVucyByZXF1ZXN0TWV0YS5yZXZhbGlkYXRlKCkgYWdhaW5zdCBpdHNlbGYsIG5vdCBvdmVyIHRoZSBuZXR3b3JrXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvP3JldmFsaWRhdGU9JTJGXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9FcXVhbCh7IHJldmFsaWRhdGVkOiB0cnVlLCBlcnJvcjogbnVsbCB9KTtcbiAgfSk7XG5cbiAgaXQoXCJyZW5kZXJzIGEgcmV2YWxpZGF0aW9uIGZvciB0aGUgcHVibGljIG9yaWdpbiB0aGUgY2FsbGVyIHdhcyBzZXJ2ZWQgb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlciA9IGpvaW4ocm9vdCwgXCJyZXZhbGlkYXRlLW9yaWdpbi1tYXJrZXJcIik7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiA9IG1hcmtlcjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZCh7XG4gICAgICAgIHVybDogXCIvP3JldmFsaWRhdGU9JTJGJTNGcmVjb3JkT3JpZ2luJTNEMVwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgaG9zdDogXCJhYmMxMjMubGFtYmRhLXVybC51cy1lYXN0LTEub24uYXdzXCIsXG4gICAgICAgICAgXCJ4LWZvcndhcmRlZC1ob3N0XCI6IFwic2hvcC5leGFtcGxlLnRlc3RcIixcbiAgICAgICAgICBcIngtZm9yd2FyZGVkLXByb3RvXCI6IFwiaHR0cHNcIixcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1c3RGb3J3YXJkZWRIb3N0OiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVhZEZpbGVTeW5jKG1hcmtlciwgXCJ1dGYtOFwiKSkudG9CZShcbiAgICAgICAgXCJodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0Lz9yZWNvcmRPcmlnaW49MVwiLFxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9NQVJLRVI7XG4gICAgfVxuICB9KTtcblxuICBpdChcImZhaWxzIGEgcmV2YWxpZGF0aW9uIHdob3NlIHRhcmdldCBkaWQgbm90IGFuc3dlciAyMDBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkYlM0ZzdGF0dXMlM0Q1MDBcIiB9KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykpLnRvRXF1YWwoe1xuICAgICAgcmV2YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgZXJyb3I6IFwiSW52YWxpZCByZXNwb25zZSA1MDBcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJpbnZhbGlkYXRpbmcgdGhlIENETiBjb3B5IG9mIGEgcmV2YWxpZGF0ZWQgcGFnZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgaG9va0tleSA9IFJFVkFMSURBVEVEX1BBR0VfSE9PSztcbiAgICBjb25zdCBnbG9iYWxzID0gZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPjtcbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgZGVsZXRlIGdsb2JhbHNbaG9va0tleV07XG4gICAgfSk7XG5cbiAgICBpdChcImhhbmRzIHRoZSBjYWNoZSBoYW5kbGVyJ3MgaG9vayB0aGUgcGFnZSBhbmQgaXRzIF9uZXh0L2RhdGEgcm91dGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaG9vayA9IGplc3QuZm4oYXN5bmMgKCkgPT4ge30pO1xuICAgICAgZ2xvYmFsc1tob29rS2V5XSA9IGhvb2s7XG4gICAgICBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkZpc3IlMkY0MlwiIH0pO1xuICAgICAgZXhwZWN0KGhvb2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIGV4cGVjdChob29rKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXG4gICAgICAgIFwiL2lzci80MlwiLFxuICAgICAgICBgL19uZXh0L2RhdGEvJHtydW50aW1lLm1hbmlmZXN0LmJ1aWxkSWR9L2lzci80Mi5qc29uYCxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJuYW1lcyB0aGUgcm9vdCdzIGRhdGEgcm91dGUgaW5kZXguanNvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBob29rID0gamVzdC5mbihhc3luYyAoKSA9PiB7fSk7XG4gICAgICBnbG9iYWxzW2hvb2tLZXldID0gaG9vaztcbiAgICAgIGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZXZhbGlkYXRlPSUyRlwiIH0pO1xuICAgICAgZXhwZWN0KGhvb2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFtcbiAgICAgICAgXCIvXCIsXG4gICAgICAgIGAvX25leHQvZGF0YS8ke3J1bnRpbWUubWFuaWZlc3QuYnVpbGRJZH0vaW5kZXguanNvbmAsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgbm90aGluZyB3aGVuIHRoZSByZXZhbGlkYXRpb24gZmFpbGVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhvb2sgPSBqZXN0LmZuKGFzeW5jICgpID0+IHt9KTtcbiAgICAgIGdsb2JhbHNbaG9va0tleV0gPSBob29rO1xuICAgICAgYXdhaXQgc2VuZCh7IHVybDogXCIvP3JldmFsaWRhdGU9JTJGJTNGc3RhdHVzJTNENTAwXCIgfSk7XG4gICAgICBleHBlY3QoaG9vaykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic3RpbGwgcmVwb3J0cyBzdWNjZXNzIHdoZW4gdGhlIGludmFsaWRhdGlvbiBmYWlsc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICAgIGdsb2JhbHNbaG9va0tleV0gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvb01hbnlJbnZhbGlkYXRpb25zSW5Qcm9ncmVzc1wiKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvP3JldmFsaWRhdGU9JTJGXCIgfSk7XG4gICAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykpLnRvRXF1YWwoeyByZXZhbGlkYXRlZDogdHJ1ZSwgZXJyb3I6IG51bGwgfSk7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwic3RyaXBzIHRoZSBpbnRlcm5hbCBoZWFkZXJzIG5leHQgc3RhcnQgZG9lcyBub3QgaG9ub3IgZnJvbSBhIGNsaWVudFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLFxuICAgICAgICBcIm5leHQtcmVzdW1lXCI6IFwiMVwiLFxuICAgICAgICBcIngtbWF0Y2hlZC1wYXRoXCI6IFwiL2FkbWluXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuZXh0UmVzdW1lOiBudWxsLFxuICAgICAgbWF0Y2hlZFBhdGg6IG51bGwsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IGltYWdlcyA9ICgpID0+XG4gICAgKFxuICAgICAgcnVudGltZSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgaW1hZ2VzOiB7XG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZmV0Y2hJbnRlcm5hbDogKFxuICAgICAgICAgICAgICBocmVmOiBzdHJpbmcsXG4gICAgICAgICAgICAgIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgICAgICAgICAgICAgbWF4aW11bUJvZHk6IG51bWJlcixcbiAgICAgICAgICAgICkgPT4gUHJvbWlzZTx7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICAgICAgICAgICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICAgIGJvZHk6IEJ1ZmZlcjtcbiAgICAgICAgICAgICAgdG9vTGFyZ2U/OiBib29sZWFuO1xuICAgICAgICAgICAgfT47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApLmltYWdlcztcblxuICBpdChcImZldGNoZXMgYW4gaW1hZ2Ugc291cmNlIGZyb20gYSByb3V0ZSBoYW5kbGVyLCBpbiBwcm9jZXNzIGFuZCB3aXRob3V0IGNvb2tpZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdlciA9IG5ldyBTaGltSW5jb21pbmdNZXNzYWdlKHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIHVybDogXCIvX25leHQvaW1hZ2U/dXJsPSUyRmFwaSUyRmhlYWx0aCUzRmF2YXRhciUzRDQyJnc9NjQmcT03NVwiLFxuICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIGNvb2tpZTogXCJzZXNzaW9uPXNlY3JldFwiIH0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpbWFnZXMoKS5vcHRpb25zLmZldGNoSW50ZXJuYWwoXG4gICAgICBcIi9hcGkvaGVhbHRoP2F2YXRhcj00MlwiLFxuICAgICAgdmlld2VyLFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcbiAgICBleHBlY3QocmVzcG9uc2Uuc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSk7XG4gICAgZXhwZWN0KGJvZHkuZmlsZSkudG9Db250YWluKFwiYXBpL2hlYWx0aFwiKTtcbiAgICBleHBlY3QoYm9keS51cmwpLnRvQmUoXCIvYXBpL2hlYWx0aD9hdmF0YXI9NDJcIik7XG4gICAgZXhwZWN0KGJvZHkuaW5pdFVSTCkudG9CZShcImh0dHBzOi8vc2hvcC5leGFtcGxlLnRlc3QvYXBpL2hlYWx0aD9hdmF0YXI9NDJcIik7XG4gICAgZXhwZWN0KGJvZHkuY29va2llKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICAvLyBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgOiBhIHJvdXRlIHN0cmVhbWluZyBhIGxhcmdlIGJvZHkgbXVzdCBub3QgYmVcbiAgLy8gYnVmZmVyZWQgd2hvbGUsIGFzIGBuZXh0IHN0YXJ0YCdzIGBmZXRjaEludGVybmFsSW1hZ2VgIGRvZXMgbm90LlxuICBpdChcInN0b3BzIHJlYWRpbmcgYW4gaW1hZ2Ugc291cmNlIHJvdXRlIHBhc3QgbWF4aW11bVJlc3BvbnNlQm9keVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpbWFnZXMoKS5vcHRpb25zLmZldGNoSW50ZXJuYWwoXG4gICAgICAgIFwiL2FwaS9oZWFsdGg/YXZhdGFyPTQyXCIsXG4gICAgICAgIG5ldyBTaGltSW5jb21pbmdNZXNzYWdlKHtcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgdXJsOiBcIi9fbmV4dC9pbWFnZT91cmw9JTJGYXBpJTJGaGVhbHRoJTNGYXZhdGFyJTNENDImdz02NCZxPTc1XCIsXG4gICAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSxcbiAgICAgICAgfSksXG4gICAgICAgIDEwLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS50b29MYXJnZSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5ib2R5Lmxlbmd0aCkudG9CZSgwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicmVkaXJlY3RzIGEgdHJhaWxpbmcgc2xhc2gsIHdpdGggdGhlIFJlZnJlc2ggZmFsbGJhY2sgZm9yIGEgMzA4XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvaXNyLzQyL1wiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMzA4KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmxvY2F0aW9uKS50b0JlKFwiL2lzci80MlwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLnJlZnJlc2gpLnRvQmUoXCIwO3VybD0vaXNyLzQyXCIpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIi9pc3IvNDJcIik7XG4gIH0pO1xuXG4gIGl0KFwiZ3ppcHMgYSBzdHJlYW1lZCBIVE1MIHJlc3BvbnNlIGZvciBhIGNsaWVudCB0aGF0IGFjY2VwdHMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogXCIvXCIsXG4gICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiwgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZShcImd6aXBcIik7XG4gICAgZXhwZWN0KGd1bnppcFN5bmMoc2luay5ib2R5KS50b1N0cmluZyhcInV0Zi04XCIpKS50b0NvbnRhaW4oXCJpbml0VVJMXCIpO1xuICB9KTtcblxuICBpdChcImF3YWl0cyB3YWl0VW50aWwgd29yayBiZWZvcmUgcmVzb2x2aW5nLCBzaW5jZSBMYW1iZGEgZnJlZXplcyBvbiByZXR1cm5cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlciA9IGpvaW4ocm9vdCwgXCJ3YWl0dW50aWwtbWFya2VyXCIpO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9NQVJLRVIgPSBtYXJrZXI7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmQoeyB1cmw6IFwiLz93YWl0VW50aWw9MVwiIH0pO1xuICAgICAgLy8gV3JpdHRlbiBieSBhIHRpbWVyIHRoZSBlbnRyeXBvaW50IHJlZ2lzdGVyZWQsIGFmdGVyIHRoZSByZXNwb25zZSBlbmRlZC5cbiAgICAgIGV4cGVjdChyZWFkRmlsZVN5bmMobWFya2VyLCBcInV0Zi04XCIpKS50b0JlKFwiZG9uZVwiKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9NQVJLRVI7XG4gICAgfVxuICB9KTtcblxuICBpdChcInNlcnZlcyB0aGUgcHJlcmVuZGVyZWQgNTAwIHdoZW4gYW4gZW50cnlwb2ludCB0aHJvd3MgYmVmb3JlIHNlbmRpbmcgYSBoZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/Ym9vbT0xXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg1MDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShFUlJPUl9IVE1MKTtcbiAgICAvLyBBIGBDYWNoZS1Db250cm9sYCB0aGUgcmVuZGVyIHRoYXQgdGhyZXcgaGFkIGFscmVhZHkgc2V0IHdvdWxkIG90aGVyd2lzZVxuICAgIC8vIHN0YXkgb24gdGhlIHJlc3BvbnNlIGFuZCBnZXQgdGhlIDUwMCBjYWNoZWQgYXQgdGhlIGVkZ2UuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICBcInByaXZhdGUsIG5vLWNhY2hlLCBuby1zdG9yZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGVcIixcbiAgICApO1xuICAgIGV4cGVjdChlcnJvcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBcIlVuaGFuZGxlZCBlcnJvciB3aGlsZSBoYW5kbGluZyB0aGUgcmVxdWVzdDpcIixcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHsgbWVzc2FnZTogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoXCJleHBsb2RlZFwiKSB9KSxcbiAgICApO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwic3RyZWFtcyBtaWRkbGV3YXJlJ3Mgb3duIFJlc3BvbnNlIHdoZW4gaXQgYW5zd2VycyB0aGUgcmVxdWVzdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQSBzZWNvbmQgZGVwbG95bWVudCwgYmVjYXVzZSB0aGUgbWlkZGxld2FyZSBtb2R1bGUgaXMgbWVtb2l6ZWQgcGVyIHJ1bnRpbWUuXG4gICAgY29uc3QgcmVzcG9uZGluZyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+XG4gIG5ldyBSZXNwb25zZShcImRlbmllZFwiLCB7XG4gICAgc3RhdHVzOiA0MDEsXG4gICAgc3RhdHVzVGV4dDogXCJVbmF1dGhvcml6ZWRcIixcbiAgICBoZWFkZXJzOiBbXG4gICAgICBbXCJjb250ZW50LXR5cGVcIiwgXCJ0ZXh0L3BsYWluXCJdLFxuICAgICAgW1wic2V0LWNvb2tpZVwiLCBcInNpZD07IFBhdGg9LzsgZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVFwiXSxcbiAgICAgIFtcInNldC1jb29raWVcIiwgXCJmbGFnPTE7IFBhdGg9L1wiXSxcbiAgICBdLFxuICB9KTtcbmApLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHJlc3BvbmRpbmcuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybDogXCIvXCIsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICAvLyBgcmVzb2x2ZVJvdXRlc2Agb25seSByZXBvcnRzIHRoYXQgbWlkZGxld2FyZSByZXNwb25kZWQ7IHRoZSBib2R5IGNvbWVzXG4gICAgLy8gYmFjayBmcm9tIHRoZSBpbnZva2VyLCBvbiB0aGUgYG1pZGRsZXdhcmUtcmVzcG9uZGVkYCByZXN1bHQuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDEpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c01lc3NhZ2UpLnRvQmUoXCJVbmF1dGhvcml6ZWRcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uY29va2llcykudG9FcXVhbChbXG4gICAgICBcInNpZD07IFBhdGg9LzsgZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVFwiLFxuICAgICAgXCJmbGFnPTE7IFBhdGg9L1wiLFxuICAgIF0pO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcImRlbmllZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGEgbWlzc2luZyBidWlsZCBhc3NldCBuby1zdG9yZSwgbm90IHVuZGVyIGl0cyBpbW11dGFibGUgcnVsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gSW4gdGhlIG1hbmlmZXN0IGJ1dCBub3Qgb24gZGlzayDigJQgYHN0YWdlRGVwbG95bWVudGAgd3JpdGVzIG5vIGNodW5rcywgdGhlXG4gICAgLy8gd2F5IGEgTGFtYmRhIHBhY2thZ2Ugc2hpcHMgbm9uZSAodGhleSBhcmUgb24gUzMgYmVoaW5kIENsb3VkRnJvbnQpLlxuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9fbmV4dC9zdGF0aWMvY2h1bmtzLzAtcXNiM3p6NmY0YzcuanNcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICBcInByaXZhdGUsIG5vLWNhY2hlLCBuby1zdG9yZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGVcIixcbiAgICApO1xuICB9KTtcblxuICAvLyBgbmV4dCBzdGFydGAgYW5zd2VycyB0aGVzZSB3aXRob3V0IHJlbmRlcmluZyB0aGUgNDA0IHBhZ2UgKGByb3V0ZXItc2VydmVyLmpzYCxcbiAgLy8gdGhlIFwiNDA0IGNhc2VcIik6IG5vdGhpbmcgd291bGQgZGlzcGxheSBpdCwgYW5kIHJlbmRlcmluZyBpcyB0aGUgY29zdC5cbiAgaXQuZWFjaChbXG4gICAgW1wiYSBtaXNzaW5nIGJ1aWxkIGFzc2V0XCIsIFwiL19uZXh0L3N0YXRpYy9jaHVua3MvMC1xc2Izeno2ZjRjNy5qc1wiXSxcbiAgICBbXCJhIGJ1aWxkIGFzc2V0IG5vIGRlcGxveSBwcm9kdWNlZFwiLCBcIi9fbmV4dC9zdGF0aWMvY2h1bmtzL3N0YWxlLTAwMDAuanNcIl0sXG4gIF0pKFwiYW5zd2VycyAlcyB3aXRoIGEgcGxhaW4tdGV4dCBOb3QgRm91bmRcIiwgYXN5bmMgKF9uYW1lLCB1cmwpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybCB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSkudG9CZShcbiAgICAgIFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiLFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICBcInByaXZhdGUsIG5vLWNhY2hlLCBuby1zdG9yZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGVcIixcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIk5vdCBGb3VuZFwiKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbXCJpbWFnZVwiLCBcInNjcmlwdFwiLCBcImZvbnRcIiwgXCJzdHlsZVwiXSkoXG4gICAgXCJhbnN3ZXJzIGFuIHVua25vd24gcGF0aCBmZXRjaGVkIGFzIGEgJXMgc3VicmVzb3VyY2Ugd2l0aCBhIHBsYWluLXRleHQgTm90IEZvdW5kXCIsXG4gICAgYXN5bmMgKGRlc3QpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgICAgdXJsOiBcIi9ub3BlLnBuZ1wiLFxuICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiwgXCJzZWMtZmV0Y2gtZGVzdFwiOiBkZXN0IH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFxuICAgICAgICBcInByaXZhdGUsIG5vLWNhY2hlLCBuby1zdG9yZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGVcIixcbiAgICAgICk7XG4gICAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJOb3QgRm91bmRcIik7XG4gICAgfSxcbiAgKTtcblxuICBpdC5lYWNoKFtcbiAgICAvLyBBIG5hdmlnYXRpb24sIGFuZCBgZmV0Y2goKWAg4oCUIHdoaWNoIGlzIGhvdyBhbiBSU0MgcmVxdWVzdCBnb2VzLlxuICAgIFtcImEgZG9jdW1lbnRcIiwgXCJHRVRcIiwgXCJkb2N1bWVudFwiXSxcbiAgICBbXCJhIGZldGNoXCIsIFwiR0VUXCIsIFwiZW1wdHlcIl0sXG4gICAgLy8gYG5leHQgc3RhcnRgIG9ubHkgc2hvcnQtY2lyY3VpdHMgR0VUIGFuZCBIRUFELlxuICAgIFtcImFuIGltYWdlIFBPU1RcIiwgXCJQT1NUXCIsIFwiaW1hZ2VcIl0sXG4gIF0pKFwic3RpbGwgcmVuZGVycyB0aGUgNDA0IHBhZ2UgZm9yICVzXCIsIGFzeW5jIChfbmFtZSwgbWV0aG9kLCBkZXN0KSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9ub3BlXCIsXG4gICAgICBtZXRob2QsXG4gICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiwgXCJzZWMtZmV0Y2gtZGVzdFwiOiBkZXN0IH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5maWxlKS50b0NvbnRhaW4oXCJfbm90LWZvdW5kXCIpO1xuICB9KTtcblxuICBpdChcInNldHRsZXMgYW5kIGRlc3Ryb3lzIHRoZSByZXNwb25zZSB3aGVuIHRoZSBzaW5rIGNhbm5vdCB0YWtlIHRoZSBoZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIC8vIFdoYXQgdGhlIExhbWJkYSBzaW5rJ3MgYHdyaXRlSGVhZGAgZG9lcyB3aXRoIGEgaGVhZGVyIHZhbHVlIGl0IHJlamVjdHMuXG4gICAgY29uc3QgaGFuZGxlZCA9IHJ1bnRpbWUuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybDogXCIvXCIsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW4oKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBjb250ZW50XCIpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIGF3YWl0IGV4cGVjdChoYW5kbGVkKS5yZXNvbHZlcy50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KGVycm9yKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFwiVGhlIHJlc3BvbnNlIHN0cmVhbSBkaWQgbm90IGNvbXBsZXRlOlwiLFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBtZXNzYWdlOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcImhlYWRlclwiKSB9KSxcbiAgICApO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwic3RyZWFtcyBhbiB1cGxvYWQgdGhyb3VnaCBtaWRkbGV3YXJlIHRvIHRoZSByb3V0ZSBpbnRhY3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNodW5rID0gQnVmZmVyLmFsbG9jKDY0ICogMTAyNCwgMSk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi8/cmVhZEJvZHk9MVwiLFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGJvZHk6IFJlYWRhYmxlLmZyb20oQXJyYXkuZnJvbSh7IGxlbmd0aDogMzIgfSwgKCkgPT4gY2h1bmspKSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykpLnRvRXF1YWwoeyBib2R5TGVuZ3RoOiAzMiAqIGNodW5rLmxlbmd0aCB9KTtcbiAgfSk7XG5cbiAgLy8gVGhlIExhbWJkYSBzaGVsbCdzIGJvZHk6IGFscmVhZHkgaW4gbWVtb3J5LCBhcyBhIEJ1ZmZlci5cbiAgaXQoXCJwYXNzZXMgYSBCdWZmZXIgdXBsb2FkIHRocm91Z2ggbWlkZGxld2FyZSB0byB0aGUgcm91dGUgaW50YWN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gQnVmZmVyLmFsbG9jKDEwMjQgKiAxMDI0LCAxKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvP3JlYWRCb2R5PTFcIiwgbWV0aG9kOiBcIlBPU1RcIiwgYm9keSB9KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykpLnRvRXF1YWwoeyBib2R5TGVuZ3RoOiBib2R5Lmxlbmd0aCB9KTtcbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyBtaWRkbGV3YXJlJ3MgYm9keSBvbmx5IGFzIGZhc3QgYXMgdGhlIGNsaWVudCB0YWtlcyBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcHVsbHMgPSB7IGNvdW50OiAwIH07XG4gICAgKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLl9fY2RrTmV4dGpzUHVsbHMgPSBwdWxscztcbiAgICBjb25zdCBzdHJlYW1pbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChgXG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PlxuICBuZXcgUmVzcG9uc2UoXG4gICAgbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCBwdWxscyA9IGdsb2JhbFRoaXMuX19jZGtOZXh0anNQdWxscztcbiAgICAgICAgcHVsbHMuY291bnQgKz0gMTtcbiAgICAgICAgaWYgKHB1bGxzLmNvdW50ID4gMTAwMCkgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICBlbHNlIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSgxNiAqIDEwMjQpKTtcbiAgICAgIH0sXG4gICAgfSksXG4gICk7XG5gKSxcbiAgICApO1xuICAgIC8vIEEgY2xpZW50IHRoYXQgdGFrZXMgbm90aGluZyB1bnRpbCByZWxlYXNlZC5cbiAgICBsZXQgcmVsZWFzZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJsb2NrZWQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKHJlbGVhc2UgPSByZXNvbHZlKSk7XG4gICAgY29uc3Qgc2luazogUmVzcG9uc2VTaW5rID0ge1xuICAgICAgYmVnaW46ICgpID0+XG4gICAgICAgIG5ldyBXcml0YWJsZSh7XG4gICAgICAgICAgd3JpdGUoX2NodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2b2lkIGJsb2NrZWQudGhlbigoKSA9PiBjYWxsYmFjaygpKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZWQgPSBzdHJlYW1pbmcuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybDogXCIvXCIsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcbiAgICAvLyAxMDAwIGNodW5rcyBhcmUgMTYgTWlCOyBhIGZldyBoaWdoV2F0ZXJNYXJrcycgd29ydGggaXMgYWxsIHRoYXQgbWF5IGJlXG4gICAgLy8gYnVmZmVyZWQgZm9yIGEgY2xpZW50IHRoYXQgaXMgbm90IHJlYWRpbmcuXG4gICAgZXhwZWN0KHB1bGxzLmNvdW50KS50b0JlTGVzc1RoYW4oNTApO1xuICAgIHJlbGVhc2UhKCk7XG4gICAgYXdhaXQgaGFuZGxlZDtcbiAgICBleHBlY3QocHVsbHMuY291bnQpLnRvQmUoMTAwMSk7XG4gIH0pO1xuXG4gIGl0KFwicGFkcyBhbiBlbXB0eSBib2R5IHdoZW4gdGhlIHNoZWxsIGFza3MsIHNvIEFQSSBHYXRld2F5IGRvZXMgbm90IDUwMlwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoXG4gICAgICB7XG4gICAgICAgIHVybDogXCIvXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCBcImlmLW5vbmUtbWF0Y2hcIjogXCJ4XCIgfSxcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgICk7XG4gICAgLy8gQSByZWFsIDMwNCBpcyBub3QgcmVhY2hhYmxlIHRocm91Z2ggYSBzdHViIGVudHJ5cG9pbnQsIHNvIHRoaXMgb25seVxuICAgIC8vIGFzc2VydHMgdGhlIHBhZGRpbmcgZG9lcyBub3QgY29ycnVwdCBhIG5vcm1hbCBib2R5LlxuICAgIGV4cGVjdChzaW5rLmJvZHkubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMSk7XG4gIH0pO1xuXG4gIGl0KFwiZW1pdHMgZWFjaCBjb29raWUgbWlkZGxld2FyZSBzZXQgZXhhY3RseSBvbmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBgSGVhZGVycy5lbnRyaWVzKClgIHlpZWxkcyBgc2V0LWNvb2tpZWAgb25jZSBwZXIgY29va2llLCBzbyBhcHBlbmRpbmcgdGhlXG4gICAgLy8gd2hvbGUgYGdldFNldENvb2tpZSgpYCBhcnJheSBwZXIgZW50cnkgZW1pdHRlZCBOwrIgb2YgdGhlbTogdHdvIGNvb2tpZXNcbiAgICAvLyBhcnJpdmVkIGF0IHRoZSBicm93c2VyIGFzIGE9MSwgYj0yLCBhPTEsIGI9Mi4gQSBkdXBsaWNhdGVkIGBTZXQtQ29va2llYCBpc1xuICAgIC8vIG5vdCBoYXJtbGVzcyBlaXRoZXIgLSBhIHNlc3Npb24gY29va2llIGFuZCBpdHMgb3duIGNvcHkgcmFjZS5cbiAgICBjb25zdCBjb250aW51aW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoYFxuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT5cbiAgbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICBoZWFkZXJzOiBbXG4gICAgICBbXCJ4LW1pZGRsZXdhcmUtbmV4dFwiLCBcIjFcIl0sXG4gICAgICBbXCJzZXQtY29va2llXCIsIFwiYT0xOyBQYXRoPS9cIl0sXG4gICAgICBbXCJzZXQtY29va2llXCIsIFwiYj0yOyBQYXRoPS9cIl0sXG4gICAgXSxcbiAgfSk7XG5gKSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCBjb250aW51aW5nLmhhbmRsZShcbiAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IFwiL1wiLCBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9IH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uY29va2llcykudG9FcXVhbChbXCJhPTE7IFBhdGg9L1wiLCBcImI9MjsgUGF0aD0vXCJdKTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBOZXh0LmpzJ3MgcGFnZSBoYW5kbGVycyByZXBvcnQgYW4gZXJyb3IgYW5kIHRoZW4gcmV0aHJvdywgbGVhdmluZyB0aGUgZXJyb3IgcGFnZVxuICogdG8gd2hhdGV2ZXIgaG9zdHMgdGhlbSwgc28gdGhpcyBsYWRkZXIgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBtYWtlcyBhXG4gKiBgcGFnZXMvX2Vycm9yYCByZWFjaGFibGUuIGB0ZXN0L2UyZS9hc3luYy1tb2R1bGVzYCBpcyB0aGUgbWVhc3VyZW1lbnQ6XG4gKiBgL21ha2UtZXJyb3JgIHRocm93cyBpbiBgZ2V0U2VydmVyU2lkZVByb3BzYCBhbmQgZXhwZWN0cyBcImhlbGxvIGVycm9yXCIuXG4gKi9cbmRlc2NyaWJlKFwiYSBQYWdlcyBBUEkgcm91dGVcIiwgKCkgPT4ge1xuICBpdChcImlzIGxlZnQgdG8gZW5kIGl0cyBvd24gcmVzcG9uc2UsIGFzIG5leHQgc3RhcnQgbGVhdmVzIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYWdlc0FwaSA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgKG1hbmlmZXN0KSA9PiAoe1xuICAgICAgICAuLi5tYW5pZmVzdCxcbiAgICAgICAgZW50cnlwb2ludHM6IHtcbiAgICAgICAgICAuLi5tYW5pZmVzdC5lbnRyeXBvaW50cyxcbiAgICAgICAgICBcIi9hcGkvaGVhbHRoXCI6IHtcbiAgICAgICAgICAgIC4uLm1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2FwaS9oZWFsdGhcIl0sXG4gICAgICAgICAgICB0eXBlOiBcInBhZ2UtYXBpXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCBwYWdlc0FwaS5oYW5kbGUoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgdXJsOiBcIi9hcGkvaGVhbHRoP2VuZExhdGVyPTFcIixcbiAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSxcbiAgICAgIH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiZmlyc3Qsc2Vjb25kXCIpO1xuICB9KTtcblxuICBpdChcImlzIHN0aWxsIGVuZGVkIGZvciBhIHJvdXRlIG9mIGFueSBvdGhlciBraW5kXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvYXBpL2hlYWx0aD9lbmRMYXRlcj0xXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiZmlyc3QsXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlcy5yZXZhbGlkYXRlKCkgYWNyb3NzIGZ1bmN0aW9uR3JvdXBzXCIsICgpID0+IHtcbiAgLy8gVGhlIG90aGVyIGdyb3VwJ3MgcGFnZSByZW5kZXJzIGFzIGEgNDA0LCB3aGljaCBgdW5zdGFibGVfb25seUdlbmVyYXRlZGBcbiAgLy8gYWxvbmUgd291bGQgYWNjZXB0IGFzIFwibm90IGdlbmVyYXRlZFwiLlxuICBpdC5lYWNoKFtcbiAgICBbXCJcIiwgXCIvP3JldmFsaWRhdGU9JTJGaXNyJTJGMVwiXSxcbiAgICBbXCIgd2l0aCB1bnN0YWJsZV9vbmx5R2VuZXJhdGVkXCIsIFwiLz9yZXZhbGlkYXRlPSUyRmlzciUyRjEmb25seUdlbmVyYXRlZD0xXCJdLFxuICBdKShcInNheXMgd2hpY2ggZ3JvdXAgb3ducyBhIHBhZ2UgaXQgY2Fubm90IHJlbmRlciVzXCIsIGFzeW5jIChfLCB1cmwpID0+IHtcbiAgICBsZXQgbWlzc2luZyA9IFwiXCI7XG4gICAgY29uc3Qgc3RhZ2VkID0gc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgKG1hbmlmZXN0KSA9PiB7XG4gICAgICBtaXNzaW5nID0gbWFuaWZlc3QuZW50cnlwb2ludHNbXCIvaXNyL1tpZF1cIl0uZmlsZVBhdGg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5tYW5pZmVzdCxcbiAgICAgICAgZ3JvdXBzOiB7XG4gICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMobWFuaWZlc3QuZW50cnlwb2ludHMpLmZpbHRlcihcbiAgICAgICAgICAgICh0ZW1wbGF0ZSkgPT4gdGVtcGxhdGUgIT09IFwiL2lzci9baWRdXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBibG9nOiBbXCIvaXNyL1tpZF1cIl0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJtU3luYyhqb2luKHN0YWdlZCwgbWlzc2luZykpO1xuICAgIGNvbnN0IGdyb3VwZWQgPSBhd2FpdCBsb2FkUnVudGltZShzdGFnZWQpO1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVAgPSBcImRlZmF1bHRcIjtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgICAgYXdhaXQgZ3JvdXBlZC5oYW5kbGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmssXG4gICAgICApO1xuICAgICAgY29uc3QgeyBlcnJvciB9ID0gSlNPTi5wYXJzZShzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSk7XG4gICAgICBleHBlY3QoZXJyb3IpLnRvTWF0Y2goL15JbnZhbGlkIHJlc3BvbnNlIDQwNDogLyk7XG4gICAgICBleHBlY3QoZXJyb3IpLnRvQ29udGFpbignZ3JvdXAgXCJibG9nXCInKTtcbiAgICAgIGV4cGVjdChlcnJvcikudG9Db250YWluKCcoXCJkZWZhdWx0XCIpJyk7XG4gICAgICAvLyBUaGUgZXJyb3IgZXhwbGFpbnMgaXQ7IHRoZSBtaXNyb3V0ZWQtcmVxdWVzdCB3YXJuaW5nIHdvdWxkIG5vdC5cbiAgICAgIGV4cGVjdCh3YXJuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUDtcbiAgICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwid2l0aG91dEludGVybmFsSGVhZGVyc1wiLCAoKSA9PiB7XG4gIGl0KFwiZHJvcHMgZXZlcnkgaGVhZGVyIG9uIE5leHQncyBpbnRlcm5hbCBsaXN0XCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICB3aXRob3V0SW50ZXJuYWxIZWFkZXJzKFxuICAgICAgICB7XG4gICAgICAgICAgaG9zdDogXCJhLnRlc3RcIixcbiAgICAgICAgICBcIm5leHQtcmVzdW1lXCI6IFwiMVwiLFxuICAgICAgICAgIFwieC1taWRkbGV3YXJlLXJld3JpdGVcIjogXCIveFwiLFxuICAgICAgICAgIFwieC1uZXh0anMtZGF0YVwiOiBcIjFcIixcbiAgICAgICAgfSxcbiAgICAgICAgXCIvYmxvZ1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgKSxcbiAgICApLnRvRXF1YWwoeyBob3N0OiBcImEudGVzdFwiIH0pO1xuICB9KTtcblxuICBpdChcIm1hcmtzIGEgX25leHQvZGF0YSByZXF1ZXN0IGFzIG9uZSwgYXMgbmV4dCBzdGFydCdzIHJvdXRlciBkb2VzXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICB3aXRob3V0SW50ZXJuYWxIZWFkZXJzKHt9LCBcIi9iYXNlL19uZXh0L2RhdGEvYWJjL2Jsb2cuanNvbj94PTFcIiwgXCIvYmFzZVwiKSxcbiAgICApLnRvRXF1YWwoeyBcIngtbmV4dGpzLWRhdGFcIjogXCIxXCIgfSk7XG4gICAgZXhwZWN0KHdpdGhvdXRJbnRlcm5hbEhlYWRlcnMoe30sIFwiL19uZXh0L2RhdGEvYWJjL2Jsb2dcIiwgXCJcIikpLnRvRXF1YWwoe30pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInRoZSBlcnJvciBwYWdlIGxhZGRlclwiLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBBbiBhcHAgd2l0aCBhIGN1c3RvbSBgcGFnZXMvX2Vycm9yYCB0aGF0IGNhbm5vdCBiZSBwcmVyZW5kZXJlZCDigJQgb25lIHdpdGhcbiAgICogYGdldEluaXRpYWxQcm9wc2AsIG9yIGEgYHBhZ2VzL19hcHBgIHRoYXQgaGFzIGl0LiBUaGUgZml4dHVyZSBpcyBBcHAgUm91dGVyLFxuICAgKiBzbyBib3RoIGhhbHZlcyBoYXZlIHRvIGJlIGFycmFuZ2VkOiBkcm9wIHRoZSBwcmVyZW5kZXJlZCBgLzUwMGAgbmV4dCBlbWl0cyBieVxuICAgKiBkZWZhdWx0LCBhbmQgYWRkIHRoZSBlbnRyeXBvaW50LlxuICAgKi9cbiAgY29uc3Qgd2l0aEVycm9yUGFnZSA9IChtYW5pZmVzdDogQWRhcHRlck1hbmlmZXN0KTogQWRhcHRlck1hbmlmZXN0ID0+IHtcbiAgICBjb25zdCB7IFwiLzUwMFwiOiBfcHJlcmVuZGVyZWQsIC4uLnN0YXRpY0ZpbGVzIH0gPSBtYW5pZmVzdC5zdGF0aWNGaWxlcztcbiAgICByZXR1cm4ge1xuICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICBzdGF0aWNGaWxlcyxcbiAgICAgIGVudHJ5cG9pbnRzOiB7XG4gICAgICAgIC4uLm1hbmlmZXN0LmVudHJ5cG9pbnRzLFxuICAgICAgICBcIi9fZXJyb3JcIjoge1xuICAgICAgICAgIC4uLm1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL19ub3QtZm91bmRcIl0sXG4gICAgICAgICAgaWQ6IFwiL19lcnJvclwiLFxuICAgICAgICAgIGZpbGVQYXRoOiBqb2luKFxuICAgICAgICAgICAgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLFxuICAgICAgICAgICAgXCIubmV4dC9zZXJ2ZXIvcGFnZXMvX2Vycm9yLmpzXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcblxuICBhc3luYyBmdW5jdGlvbiBzZW5kVG8oXG4gICAgd2l0aExhZGRlcjogTmV4dGpzUnVudGltZSxcbiAgICB1cmw6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCB3aXRoTGFkZGVyLmhhbmRsZShcbiAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmwsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICByZXR1cm4gc2luaztcbiAgfVxuXG4gIGl0KFwiaW52b2tlcyAvX2Vycm9yIHdoZW4gdGhlIGJ1aWxkIGhhcyBubyBwcmVyZW5kZXJlZCAvNTAwXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IHJlbmRlcmluZyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgd2l0aEVycm9yUGFnZSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKHJlbmRlcmluZywgXCIvP2Jvb209MVwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgLy8gUmVuZGVyZWQgZm9yIHRoZSBVUkwgdGhhdCB3YXMgYXNrZWQgZm9yLCBhbmQgd2l0aCB0aGUgc3RhdHVzIGFscmVhZHkgc2V0OlxuICAgIC8vIGBfZXJyb3JgJ3MgYGdldEluaXRpYWxQcm9wc2AgcmVhZHMgYHJlcy5zdGF0dXNDb2RlYCB0byBnZXQgaXRzIG93biBwcm9wLlxuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5maWxlKS50b0NvbnRhaW4oXCJwYWdlcy9fZXJyb3IuanNcIik7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLnVybCkudG9CZShcIi8/Ym9vbT0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMuZXRhZykudG9CZVVuZGVmaW5lZCgpO1xuICAgIC8vIE5vdCB0aGUgdGhyb3dpbmcgcmVuZGVyJ3MgYHMtbWF4YWdlPTYwYDogYSBjYWNoZWQgNTAwIGF0IENsb3VkRnJvbnQuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvTWF0Y2goL25vLXN0b3JlLyk7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJkcm9wcyB0aGUgZmFpbGVkIHJlbmRlcidzIENvbnRlbnQtTGVuZ3RoIGFuZCBFVGFnIGZyb20gYSBwcmVyZW5kZXJlZCAvNTAwXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/Ym9vbT0xXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg1MDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShFUlJPUl9IVE1MKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1sZW5ndGhcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmV0YWcpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcImZhbGxzIGJhY2sgdG8gcGxhaW4gdGV4dCB3aGVuIHRoZSBlcnJvciBwYWdlIHRocm93cyB0b29cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3QgcmVuZGVyaW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCB3aXRoRXJyb3JQYWdlKSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8ocmVuZGVyaW5nLCBcIi8/Ym9vbUV2ZXJ5d2hlcmU9MVwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFxuICAgICAgXCJwcml2YXRlLCBuby1jYWNoZSwgbm8tc3RvcmUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlXCIsXG4gICAgKTtcbiAgICBleHBlY3QoZXJyb3IpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgXCJUaGUgZXJyb3IgcGFnZSBpdHNlbGYgZmFpbGVkIHRvIHJlbmRlcjpcIixcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHsgbWVzc2FnZTogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoXCJ0b29cIikgfSksXG4gICAgKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgcGxhaW4gdGV4dCBmb3IgYW4gYXBwIHdpdGggbm8gZXJyb3IgcGFnZSBhdCBhbGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3QgYmFyZSA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgXCIvNTAwXCI6IF9wcmVyZW5kZXJlZCwgLi4uc3RhdGljRmlsZXMgfSA9IG1hbmlmZXN0LnN0YXRpY0ZpbGVzO1xuICAgICAgICByZXR1cm4geyAuLi5tYW5pZmVzdCwgc3RhdGljRmlsZXMgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmRUbyhiYXJlLCBcIi8/Ym9vbT0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNTAwKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJhIFBhZ2VzIFJvdXRlciA0MDRcIiwgKCkgPT4ge1xuICAvKiogVGhlIGZpeHR1cmUgaXMgQXBwIFJvdXRlcjogd2l0aG91dCBgL19ub3QtZm91bmRgLCBhIDQwNCBpcyB0aGUgUGFnZXMgb25lLiAqL1xuICBjb25zdCB3aXRob3V0Tm90Rm91bmQgPSAobWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdCk6IEFkYXB0ZXJNYW5pZmVzdCA9PiB7XG4gICAgY29uc3QgeyBcIi9fbm90LWZvdW5kXCI6IF9hcHBSb3V0ZXIsIC4uLmVudHJ5cG9pbnRzIH0gPSBtYW5pZmVzdC5lbnRyeXBvaW50cztcbiAgICByZXR1cm4geyAuLi5tYW5pZmVzdCwgZW50cnlwb2ludHMgfTtcbiAgfTtcblxuICBhc3luYyBmdW5jdGlvbiBzZW5kVG8oXG4gICAgcGFnZXM6IE5leHRqc1J1bnRpbWUsXG4gICAgdXJsOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcGFnZXMuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybCwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIHJldHVybiBzaW5rO1xuICB9XG5cbiAgaXQoXCJzZXJ2ZXMgdGhlIHByZXJlbmRlcmVkIDQwNC5odG1sIGZvciBhbiB1bmtub3duIHBhdGggYW5kIGZvciByZW5kZXI0MDQoKVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFnZXMgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIHdpdGhvdXROb3RGb3VuZCksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHVybCBvZiBbXCIvbm9wZVwiLCBcIi8/cmVuZGVyNDA0PTFcIl0pIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8ocGFnZXMsIHVybCk7XG4gICAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKS50b0JlKFxuICAgICAgICBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShOT1RfRk9VTkRfSFRNTCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcInJlbmRlcnMgYSBwYWdlcy80MDQgZW50cnlwb2ludCBmb3IgdGhlIHBhdGggdGhhdCB3YXMgYXNrZWQgZm9yXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBXaGF0IGEgYGdldEluaXRpYWxQcm9wc2AgaW4gYHBhZ2VzL19hcHBgIG1ha2VzIG9mIGBwYWdlcy80MDQuanNgLlxuICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+IHtcbiAgICAgICAgY29uc3Qgd2l0aG91dEFwcCA9IHdpdGhvdXROb3RGb3VuZChtYW5pZmVzdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ud2l0aG91dEFwcCxcbiAgICAgICAgICBlbnRyeXBvaW50czoge1xuICAgICAgICAgICAgLi4ud2l0aG91dEFwcC5lbnRyeXBvaW50cyxcbiAgICAgICAgICAgIFwiLzQwNFwiOiB7XG4gICAgICAgICAgICAgIC4uLm1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL19ub3QtZm91bmRcIl0sXG4gICAgICAgICAgICAgIGlkOiBcIi80MDRcIixcbiAgICAgICAgICAgICAgZmlsZVBhdGg6IGpvaW4oXG4gICAgICAgICAgICAgICAgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLFxuICAgICAgICAgICAgICAgIFwiLm5leHQvc2VydmVyL3BhZ2VzLzQwNC5qc1wiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKHBhZ2VzLCBcIi9ub3BlP3E9MVwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmZpbGUpLnRvQ29udGFpbihcInBhZ2VzLzQwNC5qc1wiKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFwiL25vcGU/cT0xXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgcGxhaW4gdGV4dCB3aGVuIHRoZSBhcHAgaGFzIG5vIDQwNCBwYWdlIGF0IGFsbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYmFyZSA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgXCIvNDA0XCI6IF9wcmVyZW5kZXJlZCwgLi4uc3RhdGljRmlsZXMgfSA9IG1hbmlmZXN0LnN0YXRpY0ZpbGVzO1xuICAgICAgICByZXR1cm4geyAuLi53aXRob3V0Tm90Rm91bmQobWFuaWZlc3QpLCBzdGF0aWNGaWxlcyB9O1xuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKGJhcmUsIFwiLz9yZW5kZXI0MDQ9MVwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZC5cIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiL19uZXh0L2ltYWdlIHdpdGggaW1hZ2VzIHR1cm5lZCBvZmZcIiwgKCkgPT4ge1xuICBpdChcImFuc3dlcnMgdGhlIGFwcCdzIDQwNCwgbm8tc3RvcmUsIGluc3RlYWQgb2Ygb3B0aW1pemluZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gYGltYWdlcy51bm9wdGltaXplZGAsIGFzIGBuZXh0IHN0YXJ0YCByZWFkcyBpdCBmcm9tXG4gICAgLy8gYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYC5cbiAgICBjb25zdCBzdGFnZWQgPSBzdGFnZURlcGxveW1lbnQoKTtcbiAgICBjb25zdCBtYW5pZmVzdDogQWRhcHRlck1hbmlmZXN0ID0gSlNPTi5wYXJzZShcbiAgICAgIHJlYWRGaWxlU3luYyhkZXBsb3llZE1hbmlmZXN0UGF0aChzdGFnZWQpLCBcInV0Zi04XCIpLFxuICAgICk7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKFxuICAgICAgICBzdGFnZWQsXG4gICAgICAgIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpcixcbiAgICAgICAgXCIubmV4dC9yZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiLFxuICAgICAgKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgY29uZmlnOiB7IGV4cGVyaW1lbnRhbDoge30sIGltYWdlczogeyB1bm9wdGltaXplZDogdHJ1ZSB9IH0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHVub3B0aW1pemVkID0gYXdhaXQgbG9hZFJ1bnRpbWUoc3RhZ2VkKTtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgdW5vcHRpbWl6ZWQuaGFuZGxlKFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIHVybDogXCIvX25leHQvaW1hZ2U/dXJsPSUyRmZhdmljb24uaWNvJnc9NjQmcT03NVwiLFxuICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICBcInByaXZhdGUsIG5vLWNhY2hlLCBuby1zdG9yZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGVcIixcbiAgICApO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5maWxlKS50b0NvbnRhaW4oXCJfbm90LWZvdW5kL3BhZ2UuanNcIik7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLnVybCkudG9CZShcbiAgICAgIFwiL19uZXh0L2ltYWdlP3VybD0lMkZmYXZpY29uLmljbyZ3PTY0JnE9NzVcIixcbiAgICApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImFuIGV4dGVybmFsIHJld3JpdGVcIiwgKCkgPT4ge1xuICAvKipcbiAgICogYE5leHRSZXNwb25zZS5yZXdyaXRlKFwiaHR0cHM6Ly/igKZcIilgOiBhbiBhYnNvbHV0ZSBkZXN0aW5hdGlvbiBtYWtlc1xuICAgKiBgcmVzb2x2ZVJvdXRlc2AgcmVwb3J0IGFuIGBleHRlcm5hbFJld3JpdGVgLCB3aGljaCB0aGUgcnVudGltZSBwcm94aWVzIHdpdGhcbiAgICogYGZldGNoYCBpbnN0ZWFkIG9mIHJvdXRpbmcgdG8gYW4gZW50cnlwb2ludC5cbiAgICovXG4gIGNvbnN0IEVYVEVSTkFMX1JFV1JJVEVfTUlERExFV0FSRSA9IGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+XG4gIG5ldyBSZXNwb25zZShudWxsLCB7XG4gICAgaGVhZGVyczogeyBcIngtbWlkZGxld2FyZS1yZXdyaXRlXCI6IFwiaHR0cHM6Ly91cHN0cmVhbS50ZXN0L2Zyb20tb3JpZ2luXCIgfSxcbiAgfSk7XG5gO1xuXG4gIGNvbnN0IE9SSUdJTl9CT0RZID0gXCI8aHRtbD5mcm9tIHRoZSBvcmlnaW48L2h0bWw+XCI7XG5cbiAgLyoqXG4gICAqIFdoYXQgdW5kaWNpIGhhbmRzIGJhY2sgZm9yIGEgZ3ppcCBvcmlnaW4sIHdoaWNoIGlzIHRoZSB3aG9sZSBwb2ludCBvZiB0aGVzZVxuICAgKiB0ZXN0czogYGZldGNoYCBkZWNvZGVzIHRoZSBib2R5IGFuZCBsZWF2ZXMgYm90aCBgY29udGVudC1lbmNvZGluZ2AgYW5kIHRoZVxuICAgKiAqZW5jb2RlZCogYGNvbnRlbnQtbGVuZ3RoYCBiZWhpbmQsIGRlc2NyaWJpbmcgYnl0ZXMgaXQgYWxyZWFkeSBkaXNjYXJkZWQuXG4gICAqL1xuICBmdW5jdGlvbiBnemlwTGFiZWxsZWRQbGFpbnRleHQoKTogUmVzcG9uc2Uge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoT1JJR0lOX0JPRFksIHtcbiAgICAgIHN0YXR1czogMjAwLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgICBcImNvbnRlbnQtZW5jb2RpbmdcIjogXCJnemlwXCIsXG4gICAgICAgIFwiY29udGVudC1sZW5ndGhcIjogU3RyaW5nKGd6aXBTeW5jKE9SSUdJTl9CT0RZKS5ieXRlTGVuZ3RoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBsZXQgcHJveHlpbmc6IE5leHRqc1J1bnRpbWU7XG4gIGxldCBmZXRjaE1vY2s6IGplc3QuU3B5SW5zdGFuY2U7XG5cbiAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICBwcm94eWluZyA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlRGVwbG95bWVudChFWFRFUk5BTF9SRVdSSVRFX01JRERMRVdBUkUpKTtcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZmV0Y2hNb2NrID0gamVzdFxuICAgICAgLnNweU9uKGdsb2JhbFRoaXMsIFwiZmV0Y2hcIilcbiAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShnemlwTGFiZWxsZWRQbGFpbnRleHQoKSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgZmV0Y2hNb2NrLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHByb3h5KFxuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbiAgICB0cnVzdEZvcndhcmRlZEhvc3QgPSBmYWxzZSxcbiAgKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCBwcm94eWluZy5oYW5kbGUoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgdXJsOiBcIi9hbnl0aGluZ1wiLFxuICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiwgLi4uaGVhZGVycyB9LFxuICAgICAgICB0cnVzdEZvcndhcmRlZEhvc3QsXG4gICAgICB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIHJldHVybiBzaW5rO1xuICB9XG5cbiAgY29uc3QgU0lHTkVEID0ge1xuICAgIGF1dGhvcml6YXRpb246XG4gICAgICBcIkFXUzQtSE1BQy1TSEEyNTYgQ3JlZGVudGlhbD1BS0lBLzIwMjYwOTI4L3VzLWVhc3QtMS9sYW1iZGEvYXdzNF9yZXF1ZXN0XCIsXG4gICAgXCJ4LWFtei1kYXRlXCI6IFwiMjAyNjA5MjhUMDAwMDAwWlwiLFxuICAgIFwieC1hbXotY29udGVudC1zaGEyNTZcIjogXCJVTlNJR05FRC1QQVlMT0FEXCIsXG4gICAgXCJ4LWFtei1zZWN1cml0eS10b2tlblwiOiBcInRva2VuXCIsXG4gIH07XG5cbiAgLy8gRm9yd2FyZGVkLCBPQUMncyBzaWduYXR1cmUgd291bGQgbGV0IHRoZSB1cHN0cmVhbSByZXBsYXkgdGhlIHJlcXVlc3RcbiAgLy8gYWdhaW5zdCB0aGUgRnVuY3Rpb24gVVJMLlxuICBpdChcImRvZXMgbm90IGZvcndhcmQgdGhlIFNpZ1Y0IGhlYWRlcnMgb2YgYW4gSUFNLXZlcmlmaWVkIHJlcXVlc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KFNJR05FRCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gKGZldGNoTW9jay5tb2NrLmNhbGxzWzBdWzFdIGFzIFJlcXVlc3RJbml0KVxuICAgICAgLmhlYWRlcnMgYXMgSGVhZGVycztcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoU0lHTkVEKSkge1xuICAgICAgZXhwZWN0KGhlYWRlcnMuaGFzKG5hbWUpKS50b0JlKGZhbHNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEFueXdoZXJlIGVsc2UgdGhleSBhcmUgdGhlIGNsaWVudCdzIG93biwgd2hpY2ggYG5leHQgc3RhcnRgIGZvcndhcmRzLlxuICBpdChcImZvcndhcmRzIHRoZSBjbGllbnQncyBvd24gQXV0aG9yaXphdGlvbiBhbmQgeC1hbXotKiBoZWFkZXJzXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBwcm94eShTSUdORUQpO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IChmZXRjaE1vY2subW9jay5jYWxsc1swXVsxXSBhcyBSZXF1ZXN0SW5pdClcbiAgICAgIC5oZWFkZXJzIGFzIEhlYWRlcnM7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFNJR05FRCkpIHtcbiAgICAgIGV4cGVjdChoZWFkZXJzLmdldChuYW1lKSkudG9CZSh2YWx1ZSk7XG4gICAgfVxuICB9KTtcblxuICBpdChcInByb3hpZXMgdGhlIHJlcXVlc3QgdG8gdGhlIHJld3JpdHRlbiBvcmlnaW5cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBwcm94eSgpO1xuXG4gICAgZXhwZWN0KFN0cmluZyhmZXRjaE1vY2subW9jay5jYWxsc1swXVswXSkpLnRvQmUoXG4gICAgICBcImh0dHBzOi8vdXBzdHJlYW0udGVzdC9mcm9tLW9yaWdpblwiLFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pLnRvQmUoXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gIH0pO1xuXG4gIC8vIHVuZGljaSB0aHJvd3Mgb24gdGhlc2UgKGBleHBlY3Q6IDEwMC1jb250aW51ZWAgZnJvbSBjdXJsIGZvciBhIGxhcmdlIFBPU1QsXG4gIC8vIGBrZWVwLWFsaXZlYCBmcm9tIGFuIEhUVFAvMS4wIGNsaWVudCksIHdoaWNoIGFuc3dlcmVkIHRoZSByZXF1ZXN0IHdpdGggYSA1MDAuXG4gIGl0KFwiZG9lcyBub3QgZm9yd2FyZCB0aGUgaGVhZGVycyB0aGF0IGRlc2NyaWJlIHRoZSBjbGllbnQncyBjb25uZWN0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBwcm94eSh7XG4gICAgICBleHBlY3Q6IFwiMTAwLWNvbnRpbnVlXCIsXG4gICAgICBcImtlZXAtYWxpdmVcIjogXCJ0aW1lb3V0PTVcIixcbiAgICAgIHVwZ3JhZGU6IFwid2Vic29ja2V0XCIsXG4gICAgICBjb25uZWN0aW9uOiBcImtlZXAtYWxpdmUsIHVwZ3JhZGVcIixcbiAgICAgIFwieC1rZXB0XCI6IFwieWVzXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gKGZldGNoTW9jay5tb2NrLmNhbGxzWzBdWzFdIGFzIFJlcXVlc3RJbml0KVxuICAgICAgLmhlYWRlcnMgYXMgSGVhZGVycztcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW1xuICAgICAgXCJob3N0XCIsXG4gICAgICBcImV4cGVjdFwiLFxuICAgICAgXCJrZWVwLWFsaXZlXCIsXG4gICAgICBcInVwZ3JhZGVcIixcbiAgICAgIFwiY29ubmVjdGlvblwiLFxuICAgIF0pIHtcbiAgICAgIGV4cGVjdChoZWFkZXJzLmhhcyhuYW1lKSkudG9CZShmYWxzZSk7XG4gICAgfVxuICAgIGV4cGVjdChoZWFkZXJzLmdldChcIngta2VwdFwiKSkudG9CZShcInllc1wiKTtcbiAgfSk7XG5cbiAgLy8gVGhlIHJlcXVlc3QgYm9keSBpcyBmb3J3YXJkZWQgYXMgcmVjZWl2ZWQsIHNvIGl0cyBlbmNvZGluZyBoYXMgdG8gZ28gd2l0aFxuICAvLyBpdDogYSBnemlwIHVwbG9hZCBhcnJpdmluZyB1bmxhYmVsbGVkIGlzIGdhcmJhZ2UgdG8gdGhlIHVwc3RyZWFtLlxuICBpdChcImZvcndhcmRzIHRoZSByZXF1ZXN0J3MgY29udGVudC1lbmNvZGluZyB3aXRoIGl0cyBib2R5XCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBwcm94eSh7IFwiY29udGVudC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9KTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSAoZmV0Y2hNb2NrLm1vY2suY2FsbHNbMF1bMV0gYXMgUmVxdWVzdEluaXQpXG4gICAgICAuaGVhZGVycyBhcyBIZWFkZXJzO1xuICAgIGV4cGVjdChoZWFkZXJzLmdldChcImNvbnRlbnQtZW5jb2RpbmdcIikpLnRvQmUoXCJnemlwXCIpO1xuICB9KTtcblxuICAvLyBGb3J3YXJkaW5nIHRoZSBvcmlnaW4ncyBgY29udGVudC1lbmNvZGluZ2Agb3ZlciBhIGJvZHkgYGZldGNoYCBhbHJlYWR5XG4gIC8vIGRlY29kZWQgZmFpbHMgdGhlIHdob2xlIHJlc3BvbnNlIGluIHRoZSBicm93c2VyIHdpdGhcbiAgLy8gRVJSX0NPTlRFTlRfREVDT0RJTkdfRkFJTEVELCB1bmRlciBhIGBDb250ZW50LUxlbmd0aGAgdGhhdCBkZXNjcmliZXMgdGhlXG4gIC8vIGNvbXByZXNzZWQgYnl0ZXMuIE5vdGhpbmcgZG93bnN0cmVhbSByZXBhaXJzIGl0IGVpdGhlcjogYHNob3VsZEd6aXBgXG4gIC8vIGRlY2xpbmVzIGFzIHNvb24gYXMgYGNvbnRlbnQtZW5jb2RpbmdgIGlzIHNldC5cbiAgaXQoXCJkcm9wcyB0aGUgY29udGVudC1lbmNvZGluZyBhbmQgbGVuZ3RoIGZldGNoIGFscmVhZHkgY29uc3VtZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBwcm94eSgpO1xuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1sZW5ndGhcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoT1JJR0lOX0JPRFkpO1xuICB9KTtcblxuICAvLyBUaGUgb3RoZXIgaGFsZiBvZiBpdDogd2l0aCB0aGUgc3RhbGUgbGFiZWwgZ29uZSwgdGhlIHNpbmsgaXMgZnJlZSB0b1xuICAvLyBjb21wcmVzcyB0aGUgcGxhaW50ZXh0IGl0c2VsZiDigJQgYW5kIG5vdyB0aGUgZW5jb2RpbmcgaXQgYWR2ZXJ0aXNlcyBpcyB0aGVcbiAgLy8gb25lIHRoZSBieXRlcyBhY3R1YWxseSBjYXJyeS5cbiAgaXQoXCJyZS1jb21wcmVzc2VzIHRoZSBkZWNvZGVkIGJvZHkgd2hlbiB0aGUgY2xpZW50IGFjY2VwdHMgZ3ppcFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHByb3h5KHsgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSk7XG5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZShcImd6aXBcIik7XG4gICAgZXhwZWN0KGd1bnppcFN5bmMoc2luay5ib2R5KS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKE9SSUdJTl9CT0RZKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJhIHN0cmVhbWVkIGV4dGVybmFsIHJld3JpdGVcIiwgKCkgPT4ge1xuICBjb25zdCBFWFRFUk5BTF9SRVdSSVRFX01JRERMRVdBUkUgPSBgXG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PlxuICBuZXcgUmVzcG9uc2UobnVsbCwge1xuICAgIGhlYWRlcnM6IHsgXCJ4LW1pZGRsZXdhcmUtcmV3cml0ZVwiOiBcImh0dHBzOi8vdXBzdHJlYW0udGVzdC9ldmVudHNcIiB9LFxuICB9KTtcbmA7XG5cbiAgbGV0IHByb3h5aW5nOiBOZXh0anNSdW50aW1lO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgcHJveHlpbmcgPSBhd2FpdCBsb2FkUnVudGltZShzdGFnZURlcGxveW1lbnQoRVhURVJOQUxfUkVXUklURV9NSURETEVXQVJFKSk7XG4gIH0pO1xuXG4gIC8vIFNlcnZlci1zZW50IGV2ZW50cyB0aHJvdWdoIGEgcmV3cml0ZSwgZ3ppcHBlZCBiZWNhdXNlIGB0ZXh0L2V2ZW50LXN0cmVhbWBcbiAgLy8gaXMgYHRleHQvKmA6IHdpdGhvdXQgYSBmbHVzaCBwZXIgY2h1bmssIHRoZSBmaXJzdCBldmVudCBzYXQgaW4gemxpYidzXG4gIC8vIGJ1ZmZlciB1bnRpbCB0aGUgb3JpZ2luIGNsb3NlZCB0aGUgc3RyZWFtLlxuICBpdChcImZsdXNoZXMgZWFjaCBjaHVuayB0aHJvdWdoIHRoZSBjb21wcmVzc29yIGFzIGl0IGFycml2ZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGxldCByZWxlYXNlITogKCkgPT4gdm9pZDtcbiAgICBjb25zdCBoZWxkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IChyZWxlYXNlID0gcmVzb2x2ZSkpO1xuICAgIGNvbnN0IGZldGNoTW9jayA9IGplc3Quc3B5T24oZ2xvYmFsVGhpcywgXCJmZXRjaFwiKS5tb2NrUmVzb2x2ZWRWYWx1ZShcbiAgICAgIG5ldyBSZXNwb25zZShcbiAgICAgICAgbmV3IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+KHtcbiAgICAgICAgICBhc3luYyBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFwiZGF0YTogZmlyc3RcXG5cXG5cIikpO1xuICAgICAgICAgICAgYXdhaXQgaGVsZDtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJkYXRhOiBzZWNvbmRcXG5cXG5cIikpO1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiIH0gfSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgICAgY29uc3QgaGFuZGxlZCA9IHByb3h5aW5nLmhhbmRsZShcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICB1cmw6IFwiL2V2ZW50c1wiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9LFxuICAgICAgICB9LFxuICAgICAgICBzaW5rLFxuICAgICAgKTtcbiAgICAgIC8vIFBvbGwgcmF0aGVyIHRoYW4gc2xlZXAgYSBmaXhlZCB0aW1lOiB0aGUgZmlyc3QgZXZlbnQgaGFzIHRvIHJlYWNoIHRoZVxuICAgICAgLy8gc2luayB3aGlsZSB0aGUgb3JpZ2luIGlzIHN0aWxsIGhvbGRpbmcgdGhlIHN0cmVhbSBvcGVuLlxuICAgICAgY29uc3Qgc29GYXIgPSAoKTogc3RyaW5nID0+XG4gICAgICAgIGd1bnppcFN5bmMoc2luay5ib2R5LCB7XG4gICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWJDb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICB9KS50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MCAmJiAhc29GYXIoKTsgaSsrKSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSk7XG4gICAgICB9XG4gICAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZShcImd6aXBcIik7XG4gICAgICBleHBlY3Qoc29GYXIoKSkudG9CZShcImRhdGE6IGZpcnN0XFxuXFxuXCIpO1xuICAgICAgcmVsZWFzZSgpO1xuICAgICAgYXdhaXQgaGFuZGxlZDtcbiAgICAgIGV4cGVjdChndW56aXBTeW5jKHNpbmsuYm9keSkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcbiAgICAgICAgXCJkYXRhOiBmaXJzdFxcblxcbmRhdGE6IHNlY29uZFxcblxcblwiLFxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVsZWFzZSgpO1xuICAgICAgZmV0Y2hNb2NrLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImEgUmVzcG9uc2UgbWlkZGxld2FyZSBhbnN3ZXJzIHdpdGggaXRzZWxmXCIsICgpID0+IHtcbiAgY29uc3QgTUlERExFV0FSRV9CT0RZID0gXCI8aHRtbD5mcm9tIG1pZGRsZXdhcmU8L2h0bWw+XCI7XG5cbiAgLyoqXG4gICAqIGByZXR1cm4gZmV0Y2godXBzdHJlYW0pYCBmcm9tIGBwcm94eS50c2AsIGFzIHRoZSBydW50aW1lIHNlZXMgaXQ6IG1pZGRsZXdhcmVcbiAgICogcnVucyBpbiBwcm9jZXNzLCBzbyBpdHMgYGZldGNoYCBpcyB1bmRpY2ksIHdoaWNoIGRlY29kZWQgYSBnemlwIHVwc3RyZWFtXG4gICAqIGFuZCBrZXB0IHRoZSB1cHN0cmVhbSdzIGBjb250ZW50LWVuY29kaW5nYCBhbmQgZW5jb2RlZCBgY29udGVudC1sZW5ndGhgLlxuICAgKi9cbiAgY29uc3QgRkVUQ0hFRF9SRVNQT05TRV9NSURETEVXQVJFID0gYFxuY29uc3QgeyBnemlwU3luYyB9ID0gcmVxdWlyZShcIm5vZGU6emxpYlwiKTtcbmNvbnN0IGJvZHkgPSAke0pTT04uc3RyaW5naWZ5KE1JRERMRVdBUkVfQk9EWSl9O1xuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT5cbiAgbmV3IFJlc3BvbnNlKGJvZHksIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgXCJjb250ZW50LWVuY29kaW5nXCI6IFwiZ3ppcFwiLFxuICAgICAgXCJjb250ZW50LWxlbmd0aFwiOiBTdHJpbmcoZ3ppcFN5bmMoYm9keSkuYnl0ZUxlbmd0aCksXG4gICAgICBcInRyYW5zZmVyLWVuY29kaW5nXCI6IFwiY2h1bmtlZFwiLFxuICAgICAgXCJ4LWZyb20tdXBzdHJlYW1cIjogXCJ5ZXNcIixcbiAgICB9LFxuICB9KTtcbmA7XG5cbiAgbGV0IHJlc3BvbmRpbmc6IE5leHRqc1J1bnRpbWU7XG5cbiAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICByZXNwb25kaW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoRkVUQ0hFRF9SRVNQT05TRV9NSURETEVXQVJFKSxcbiAgICApO1xuICB9KTtcblxuICAvLyBXaGF0IGBuZXh0IHN0YXJ0YCBkb2VzIHRvbzogdGhlIHNhbmRib3ggZGVsZXRlcyB0aGVzZSB0aHJlZVxuICAvLyAoYEZPUkJJRERFTl9IRUFERVJTYCkgZnJvbSBldmVyeSBtaWRkbGV3YXJlIHJlc3BvbnNlLlxuICBpdChcImRyb3BzIHRoZSBmcmFtaW5nIGhlYWRlcnMgdGhhdCBkZXNjcmliZWQgdGhlIHVwc3RyZWFtJ3MgYnl0ZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCByZXNwb25kaW5nLmhhbmRsZShcbiAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IFwiL1wiLCBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9IH0sXG4gICAgICBzaW5rLFxuICAgICk7XG5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJ0cmFuc2Zlci1lbmNvZGluZ1wiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJ4LWZyb20tdXBzdHJlYW1cIl0pLnRvQmUoXCJ5ZXNcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKE1JRERMRVdBUkVfQk9EWSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogTGFzdCBpbiB0aGUgZmlsZSwgYmVjYXVzZSBgbG9hZFJ1bnRpbWVgIGNoZGlyczogdGhlIHRlc3RzIGFib3ZlIGFzc2VydCBvbiB0aGVcbiAqIGN3ZCB0aGUgc2hhcmVkIGRlcGxveW1lbnQgc2V0LlxuICovXG5kZXNjcmliZShcInRoZSByZXNvbHZlZCBxdWVyeSBhIHJld3JpdGUgcHJvZHVjZWRcIiwgKCkgPT4ge1xuICAvKipcbiAgICogYHRlc3QvZTJlL2xpbmstd2l0aC1hcGktcmV3cml0ZWAncyBydWxlLCBhcyBpdCBsYW5kcyBpbiB0aGUgbWFuaWZlc3Q6IGFcbiAgICogYGJlZm9yZUZpbGVzYCByZXdyaXRlIHdob3NlIGNvbmRpdGlvbiBpcyBhIHF1ZXJ5IHBhcmFtIHRoZSBkZXN0aW5hdGlvbiBrZWVwcy5cbiAgICovXG4gIGNvbnN0IHdpdGhTZWxmTWF0Y2hpbmdSZXdyaXRlID0gKFxuICAgIG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3QsXG4gICk6IEFkYXB0ZXJNYW5pZmVzdCA9PlxuICAgICh7XG4gICAgICAuLi5tYW5pZmVzdCxcbiAgICAgIHJvdXRpbmc6IHtcbiAgICAgICAgLi4uKG1hbmlmZXN0LnJvdXRpbmcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLFxuICAgICAgICBiZWZvcmVGaWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZTogXCIvOnBhdGgoLiopXCIsXG4gICAgICAgICAgICBzb3VyY2VSZWdleDogXCJeKD86XFxcXC8oLiopKSg/OlxcXFwvKT8kXCIsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogXCIvP2Zyb209JTJGJDFcIixcbiAgICAgICAgICAgIGhhczogW3sgdHlwZTogXCJxdWVyeVwiLCBrZXk6IFwianNvblwiLCB2YWx1ZTogXCJ0cnVlXCIgfV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSkgYXMgQWRhcHRlck1hbmlmZXN0O1xuXG4gIC8qKlxuICAgKiBgUm91dGVNb2R1bGUucHJlcGFyZWAgcmUtcnVucyB0aGUgY29uZmlnJ3MgcmV3cml0ZXMgYWdhaW5zdCBgcmVxLnVybGBcbiAgICogdW5jb25kaXRpb25hbGx5LCBhbmQgYHJlcS51cmxgIGlzIHRoZSB0YXJnZXQgdGhlIHJld3JpdGUgYWxyZWFkeSBwcm9kdWNlZCAtXG4gICAqIHNvIGEgcnVsZSB0aGF0IHN0aWxsIG1hdGNoZXMgaXRzIG93biBvdXRwdXQgZ2V0cyBhcHBsaWVkIHR3aWNlLiBIZXJlIHRoYXRcbiAgICogdHVybmVkIGBmcm9tPS9zb21lL3JvdXRlL2ZvcmAgaW50byBgZnJvbT0vYCwgd2hpY2ggaXMgd2hhdCBtYWRlXG4gICAqIGB0ZXN0L2UyZS9saW5rLXdpdGgtYXBpLXJld3JpdGVgIGFuc3dlciBge1wiZnJvbVwiOlwiL2FwaS9qc29uXCJ9YCB3aGVyZVxuICAgKiBgbmV4dCBzdGFydGAgYW5zd2VycyBge1wiZnJvbVwiOlwiL3NvbWUvcm91dGUvZm9yXCJ9YC4gU3RhdGluZyB0aGUgcmVzb2x2ZWQgcXVlcnlcbiAgICogYXMgYHJlcXVlc3RNZXRhLnF1ZXJ5YCBpcyB3aGF0IGBwcmVwYXJlYCBwcmVmZXJzIG92ZXIgYW55dGhpbmcgaXQgcmUtZGVyaXZlcyxcbiAgICogc28gdGhlIHJvdXRlIHNlZXMgdGhlIGZpcnN0IHBhc3MgcmF0aGVyIHRoYW4gdGhlIHNlY29uZC5cbiAgICovXG4gIGl0KFwiaXMgaGFuZGVkIG92ZXIgYXMgcmVxdWVzdE1ldGEucXVlcnksIG5vdCBsZWZ0IHRvIGJlIHJlLWRlcml2ZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJld3JpdGluZyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgd2l0aFNlbGZNYXRjaGluZ1Jld3JpdGUpLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHJld3JpdGluZy5oYW5kbGUoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgdXJsOiBcIi9zb21lL3JvdXRlL2Zvcj9qc29uPXRydWVcIixcbiAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSxcbiAgICAgIH0sXG4gICAgICBzaW5rLFxuICAgICk7XG5cbiAgICBjb25zdCBib2R5ID0gc3R1YkJvZHkoc2luayk7XG4gICAgLy8gSXRzIG93biBzdGFnZWQgdHJlZSwgc28gbm90IGByb290YDogdGhlIHJld3JpdGUgaXMgdGhlIHBvaW50LlxuICAgIGV4cGVjdChib2R5LmZpbGUpLnRvQ29udGFpbihcIi5uZXh0L3NlcnZlci9hcHAvcGFnZS5qc1wiKTtcbiAgICBleHBlY3QoYm9keS5xdWVyeSkudG9FcXVhbCh7IGpzb246IFwidHJ1ZVwiLCBmcm9tOiBcIi9zb21lL3JvdXRlL2ZvclwiIH0pO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIGAvL2Agd2l0aCBgMzA4IC0+IC9gIGFuZCBgL2FwaS8vanNvbmAgd2l0aFxuICogYDMwOCAtPiAvYXBpL2pzb25gOyB0aGlzIHJ1bnRpbWUgdXNlZCB0byBhbnN3ZXIgNTAwIGFuZCA0MDQuIFRoZSA1MDAgaXMgdGhlXG4gKiByZWFzb24gdGhlIGNoZWNrIHJ1bnMgYmVmb3JlIGFueXRoaW5nIHBhcnNlcyB0aGUgdGFyZ2V0OiBgbmV3IFVSTChcIi8vXCIsIGJhc2UpYFxuICogcmVhZHMgYSBsZWFkaW5nIGAvL2AgYXMgcHJvdG9jb2wtcmVsYXRpdmUgYW5kIHRha2VzIHRoZSBmaXJzdCBwYXRoIHNlZ21lbnQgZm9yXG4gKiB0aGUgaG9zdC4gRm91bmQgYnkgYHRlc3QvZTJlL2h5ZHJhdGlvbmAsIHdoaWNoIHJlcXVlc3RzIGV4YWN0bHkgYC8vYCwgYW5kIGJ5XG4gKiBgdGVzdC9lMmUvaTE4bi1pZ25vcmUtcmVkaXJlY3Qtc291cmNlLWxvY2FsZS9yZWRpcmVjdHMtd2l0aC1iYXNlcGF0aGAsIHdob3NlXG4gKiBsb2NhbGUgbGlzdCBpbmNsdWRlcyBgJydgIGFuZCBzbyBhc2tzIGZvciBgL2Jhc2VwYXRoLy90by1zdmAuXG4gKi9cbmRlc2NyaWJlKFwiYSBwYXRoIHdpdGggcmVwZWF0ZWQgc2xhc2hlcyBvciBhIGJhY2tzbGFzaFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIFtcIi8vXCIsIFwiL1wiXSxcbiAgICBbXCIvLy9cIiwgXCIvXCJdLFxuICAgIFtcIi9hcGkvL2pzb25cIiwgXCIvYXBpL2pzb25cIl0sXG4gICAgW1wiL2Jhc2VwYXRoLy90by1zdlwiLCBcIi9iYXNlcGF0aC90by1zdlwiXSxcbiAgICBbXCIvYVxcXFxiXCIsIFwiL2EvYlwiXSxcbiAgICAvLyBUaGUgcXVlcnkgaXMgY2FycmllZCBhY3Jvc3MgdW50b3VjaGVkLCByZXBlYXRlZCBzbGFzaGVzIGFuZCBhbGwuXG4gICAgW1wiLy9zb21lL3JvdXRlP2pzb249dHJ1ZSZuZXh0PS8veFwiLCBcIi9zb21lL3JvdXRlP2pzb249dHJ1ZSZuZXh0PS8veFwiXSxcbiAgXSkoXCJyZWRpcmVjdHMgJXMgdG8gJXMgd2l0aCBhIDMwOFwiLCBhc3luYyAoZnJvbSwgdG8pID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogZnJvbSB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDMwOCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5sb2NhdGlvbikudG9CZSh0byk7XG4gICAgLy8gTmV4dC5qcyBzZW5kcyB0aGUgZGVzdGluYXRpb24gYXMgdGhlIGJvZHkgdG9vLlxuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZSh0byk7XG4gIH0pO1xuXG4gIC8qKiBgJTVDYCBpcyBhIGNoYXJhY3RlciBpbiBhIHNlZ21lbnQsIG5vdCBhIHNlcGFyYXRvciAtIGFzIGluIE5leHQuanMuICovXG4gIGl0KFwibGVhdmVzIGFuIGVuY29kZWQgYmFja3NsYXNoIGFsb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvYSU1Q2JcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS5ub3QudG9CZSgzMDgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInNwbGl0Qm9keVwiLCAoKSA9PiB7XG4gIGNvbnN0IENIVU5LID0gQnVmZmVyLmFsbG9jKDE2ICogMTAyNCwgNyk7XG4gIGNvbnN0IHVwbG9hZCA9ICgpID0+XG4gICAgUmVhZGFibGUuZnJvbShcbiAgICAgIEFycmF5LmZyb20oeyBsZW5ndGg6IDggfSwgKCkgPT4gQ0hVTkspLFxuICAgICAgeyBvYmplY3RNb2RlOiBmYWxzZSB9LFxuICAgICk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZHJhaW4oc3RyZWFtOiBBc3luY0l0ZXJhYmxlPFVpbnQ4QXJyYXk+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgICAgbGVuZ3RoICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxuXG4gIC8vIEEgdGVlIGJ1ZmZlcnMgZm9yIHRoZSBicmFuY2ggdGhhdCBpcyBiZWhpbmQsIHNvIHRoZSBtaWRkbGV3YXJlIGJyYW5jaCB0aGF0XG4gIC8vIG5vdGhpbmcgcmVhZHMgd291bGQgb3RoZXJ3aXNlIGhvbGQgZXZlcnkgYnl0ZSB0aGUgcm91dGUgc3RyZWFtcy5cbiAgaXQoXCJjYW5jZWxzIHRoZSBtaWRkbGV3YXJlIGNvcHkgb25jZSBkaXNwYXRjaCBpcyBkb25lIHdpdGggaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBzcGxpdEJvZHkodXBsb2FkKCksIHRydWUpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG5cbiAgICBjb25zdCByZWFkZXIgPSBib2R5LmZvckRpc3BhdGNoLmdldFJlYWRlcigpO1xuICAgIGV4cGVjdChhd2FpdCByZWFkZXIucmVhZCgpKS50b0VxdWFsKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICBleHBlY3QoYXdhaXQgZHJhaW4oYm9keS5mb3JSZXF1ZXN0IGFzIFJlYWRhYmxlKSkudG9CZSg4ICogQ0hVTksubGVuZ3RoKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgdGhlIG1pZGRsZXdhcmUgY29weSBhbG9uZSB3aGVuIG1pZGRsZXdhcmUgaXMgcmVhZGluZyBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHNwbGl0Qm9keSh1cGxvYWQoKSwgdHJ1ZSk7XG4gICAgY29uc3QgcmVhZGluZyA9IGRyYWluKFxuICAgICAgYm9keS5mb3JEaXNwYXRjaCBhcyB1bmtub3duIGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4sXG4gICAgKTtcbiAgICBib2R5LnJlbGVhc2VVbnJlYWQoZmFsc2UpO1xuXG4gICAgZXhwZWN0KGF3YWl0IHJlYWRpbmcpLnRvQmUoOCAqIENIVU5LLmxlbmd0aCk7XG4gIH0pO1xuXG4gIC8vIE1pZGRsZXdhcmUgYW5zd2VyZWQsIHBvc3NpYmx5IHdpdGggdGhlIHVwbG9hZCBhcyBpdHMgb3duIGJvZHk7IGByZXFgIGlzXG4gIC8vIG5ldmVyIHJlYWQsIHNvIGl0cyBjb3B5IGlzIHRoZSBvbmUgdGhhdCB3b3VsZCBwaWxlIHVwLlxuICBpdChcInJlbGVhc2VzIHRoZSByb3V0ZSdzIGNvcHkgd2hlbiBtaWRkbGV3YXJlIGFuc3dlcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gc3BsaXRCb2R5KHVwbG9hZCgpLCB0cnVlKTtcbiAgICBib2R5LnJlbGVhc2VVbnJlYWQodHJ1ZSk7XG5cbiAgICBleHBlY3QoKGJvZHkuZm9yUmVxdWVzdCBhcyBSZWFkYWJsZSkuZGVzdHJveWVkKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChcbiAgICAgIGF3YWl0IGRyYWluKGJvZHkuZm9yRGlzcGF0Y2ggYXMgdW5rbm93biBhcyBBc3luY0l0ZXJhYmxlPFVpbnQ4QXJyYXk+KSxcbiAgICApLnRvQmUoOCAqIENIVU5LLmxlbmd0aCk7XG4gIH0pO1xuXG4gIC8vIEV2ZXJ5IExhbWJkYSByZXF1ZXN0IHdpdGggYSBib2R5OiB0aGUgc2hlbGwgaGFuZHMgdGhlIHJ1bnRpbWUgYSBCdWZmZXIuXG4gIGl0KFwicmVhZHMgYSBCdWZmZXIgYm9keSB0d2ljZSwgd2hvbGUgZWFjaCB0aW1lXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBCdWZmZXIuZnJvbShcInhcIi5yZXBlYXQoMTAwXzAwMCkpO1xuICAgIGNvbnN0IGJvZHkgPSBzcGxpdEJvZHkoc291cmNlLCB0cnVlKTtcbiAgICBib2R5LnJlbGVhc2VVbnJlYWQoZmFsc2UpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgYXdhaXQgZHJhaW4oYm9keS5mb3JEaXNwYXRjaCBhcyB1bmtub3duIGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pLFxuICAgICkudG9CZShzb3VyY2UubGVuZ3RoKTtcbiAgICBleHBlY3QoKGJvZHkuZm9yUmVxdWVzdCBhcyBCdWZmZXIpLmxlbmd0aCkudG9CZShzb3VyY2UubGVuZ3RoKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBzcGxpdCBhdCBhbGwgd2l0aG91dCBtaWRkbGV3YXJlXCIsICgpID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB1cGxvYWQoKTtcbiAgICBjb25zdCBib2R5ID0gc3BsaXRCb2R5KHNvdXJjZSwgZmFsc2UpO1xuICAgIGV4cGVjdChib2R5LmZvclJlcXVlc3QpLnRvQmUoc291cmNlKTtcbiAgICBib2R5LnJlbGVhc2VVbnJlYWQoZmFsc2UpO1xuICAgIGV4cGVjdChzb3VyY2UuZGVzdHJveWVkKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ3YWl0VW50aWxcIiwgKCkgPT4ge1xuICBpdChcImF3YWl0cyB3b3JrIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhlIGZpcnN0IGJhdGNoIHNldHRsZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlciA9IGpvaW4ocm9vdCwgXCJsYXRlLXdhaXQtdW50aWwtbWFya2VyXCIpO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9NQVJLRVIgPSBtYXJrZXI7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9sYXRlV2FpdFVudGlsPTFcIiB9KTtcbiAgICAgIGV4cGVjdChyZWFkRmlsZVN5bmMobWFya2VyLCBcInV0Zi04XCIpKS50b0JlKFwibGF0ZVwiKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9NQVJLRVI7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImEgcHJlcmVuZGVyZWQgc3RhdHVzIHBhZ2UsIHJlcXVlc3RlZCBkaXJlY3RseVwiLCAoKSA9PiB7XG4gIGl0KFwiYW5zd2VycyAvNDA0IHdpdGggYSA0MDQsIGFzIG5leHQgc3RhcnQgZG9lc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLzQwNFwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoTk9UX0ZPVU5EX0hUTUwpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgLzUwMCB3aXRoIGEgNTAwXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvNTAwXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg1MDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShFUlJPUl9IVE1MKTtcbiAgfSk7XG5cbiAgaXQoXCJzdGlsbCBzZXJ2ZXMgdGhlbSB0byBhIFBPU1QsIHdoaWNoIG5leHQgc3RhcnQgZG9lcyBub3QgNDA1XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvNDA0XCIsIG1ldGhvZDogXCJQT1NUXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImFuIGF1dG8tZXhwb3J0ZWQgUGFnZXMgUm91dGVyIHBhZ2VcIiwgKCkgPT4ge1xuICBjb25zdCBBQk9VVF9IVE1MID0gXCI8aHRtbD48Ym9keT5hYm91dDwvYm9keT48L2h0bWw+XCI7XG4gIGxldCBwYWdlczogTmV4dGpzUnVudGltZTtcblxuICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgIGxldCBhYm91dEZpbGUgPSBcIlwiO1xuICAgIGNvbnN0IHN0YWdlZCA9IHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4ge1xuICAgICAgYWJvdXRGaWxlID0gYCR7bWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyfS8ubmV4dC9zZXJ2ZXIvcGFnZXMvYWJvdXQuaHRtbGA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5tYW5pZmVzdCxcbiAgICAgICAgc3RhdGljRmlsZXM6IHsgLi4ubWFuaWZlc3Quc3RhdGljRmlsZXMsIFwiL2Fib3V0XCI6IGFib3V0RmlsZSB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB3cml0ZShqb2luKHN0YWdlZCwgYWJvdXRGaWxlKSwgQUJPVVRfSFRNTCk7XG4gICAgcGFnZXMgPSBhd2FpdCBsb2FkUnVudGltZShzdGFnZWQpO1xuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBzZW5kVG8obWV0aG9kOiBzdHJpbmcpOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHBhZ2VzLmhhbmRsZShcbiAgICAgIHsgbWV0aG9kLCB1cmw6IFwiL2Fib3V0XCIsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICByZXR1cm4gc2luaztcbiAgfVxuXG4gIGl0KFwiaXMgc2VydmVkIHRvIGEgR0VUXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKFwiR0VUXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoQUJPVVRfSFRNTCk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhbnkgb3RoZXIgbWV0aG9kIHdpdGggYSA0MDUsIGFzIG5leHQgc3RhcnQgZG9lc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmRUbyhcIlBPU1RcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDUpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMuYWxsb3cpLnRvQmUoXCJHRVQsIEhFQURcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYSByb3V0ZSBwYWNrYWdlZCBpbnRvIGFub3RoZXIgZnVuY3Rpb25Hcm91cHMgZ3JvdXBcIiwgKCkgPT4ge1xuICBsZXQgZ3JvdXBlZDogTmV4dGpzUnVudGltZTtcblxuICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgIGxldCBtaXNzaW5nID0gXCJcIjtcbiAgICBjb25zdCBzdGFnZWQgPSBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+IHtcbiAgICAgIG1pc3NpbmcgPSBtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9pc3IvW2lkXVwiXS5maWxlUGF0aDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiBPYmplY3Qua2V5cyhtYW5pZmVzdC5lbnRyeXBvaW50cykuZmlsdGVyKFxuICAgICAgICAgICAgKHRlbXBsYXRlKSA9PiB0ZW1wbGF0ZSAhPT0gXCIvaXNyL1tpZF1cIixcbiAgICAgICAgICApLFxuICAgICAgICAgIGJsb2c6IFtcIi9pc3IvW2lkXVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcm1TeW5jKGpvaW4oc3RhZ2VkLCBtaXNzaW5nKSk7XG4gICAgZ3JvdXBlZCA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlZCk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldCh1cmw6IHN0cmluZyk6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0ZVTkNUSU9OX0dST1VQID0gXCJkZWZhdWx0XCI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICAgIGF3YWl0IGdyb3VwZWQuaGFuZGxlKFxuICAgICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsLCBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9IH0sXG4gICAgICAgIHNpbmssXG4gICAgICApO1xuICAgICAgcmV0dXJuIHNpbms7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0ZVTkNUSU9OX0dST1VQO1xuICAgICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBlZGdlIG1hdGNoZXMgY2FzZS1zZW5zaXRpdmVseSBhbmQgTmV4dC5qcyBkb2Vzbid0OiBgL0lTUi8xYCBtaXNzZWQgdGhlXG4gIC8vIGBibG9nYCBncm91cCdzIGJlaGF2aW9yIG9ubHkgYmVjYXVzZSBvZiBpdHMgY2FzZS5cbiAgaXQoXCJyZWRpcmVjdHMgYSBVUkwgdGhhdCBkaWZmZXJzIG9ubHkgaW4gY2FzZSB0byBpdHMgY2Fub25pY2FsIHNwZWxsaW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgZ2V0KFwiL0lTUi8xP3g9MVwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDMwOCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5sb2NhdGlvbikudG9CZShcIi9pc3IvMT94PTFcIik7XG4gIH0pO1xuXG4gIGl0KFwia2VlcHMgdGhlIGNhc2Ugb2YgYSBkeW5hbWljIHNlZ21lbnQncyB2YWx1ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9JU1IvQWJDXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMzA4KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmxvY2F0aW9uKS50b0JlKFwiL2lzci9BYkNcIik7XG4gIH0pO1xuXG4gIC8vIGAvX25leHQvaW1hZ2VgIHJ1bnMgaW4gdGhlIGRlZmF1bHQgZ3JvdXAgYW5kIHJlbmRlcnMgYSBzb3VyY2UgdGhhdCBpcyBub3RcbiAgLy8gYSBmaWxlIGluIHByb2Nlc3M6IGZvciBvbmUgc2VydmVkIGJ5IGFub3RoZXIgZ3JvdXAsIHRoYXQgcmVuZGVyZWQgdGhlIDQwNFxuICAvLyBwYWdlIGFuZCBoYW5kZWQgaXRzIEhUTUwgdG8gdGhlIG9wdGltaXplciBhcyB0aGUgaW1hZ2UuXG4gIGl0KFwicmVwb3J0cyBhbiBpbWFnZSBzb3VyY2UgaW4gYW5vdGhlciBncm91cCByYXRoZXIgdGhhbiBmZXRjaGluZyBpdHMgNDA0IHBhZ2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVAgPSBcImRlZmF1bHRcIjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmV0Y2hJbnRlcm5hbCA9IChcbiAgICAgICAgZ3JvdXBlZCBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICBmZXRjaEludGVybmFsOiAoXG4gICAgICAgICAgICBocmVmOiBzdHJpbmcsXG4gICAgICAgICAgICByZXE6IHVua25vd24sXG4gICAgICAgICAgKSA9PiBQcm9taXNlPHtcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICAgICAgICAgIGJvZHk6IEJ1ZmZlcjtcbiAgICAgICAgICAgIG90aGVyR3JvdXA/OiBzdHJpbmc7XG4gICAgICAgICAgfT47XG4gICAgICAgIH1cbiAgICAgICkuZmV0Y2hJbnRlcm5hbC5iaW5kKGdyb3VwZWQpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaEludGVybmFsKFxuICAgICAgICBcIi9pc3IvMVwiLFxuICAgICAgICBuZXcgU2hpbUluY29taW5nTWVzc2FnZSh7XG4gICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgIHVybDogXCIvX25leHQvaW1hZ2U/dXJsPSUyRmlzciUyRjEmdz02NCZxPTc1XCIsXG4gICAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b01hdGNoT2JqZWN0KHsgb3RoZXJHcm91cDogXCJibG9nXCIgfSk7XG4gICAgICBleHBlY3QocmVzcG9uc2UuYm9keS5sZW5ndGgpLnRvQmUoMCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0ZVTkNUSU9OX0dST1VQO1xuICAgICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJpcyBhIDQwNCwgbm90IGEgNTAwLCB3aGVuIGNhc2UgaXMgbm90IHRoZSBkaWZmZXJlbmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0ZVTkNUSU9OX0dST1VQID0gXCJkZWZhdWx0XCI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICAgIGF3YWl0IGdyb3VwZWQuaGFuZGxlKFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgIHVybDogXCIvaXNyLzFcIixcbiAgICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgICB9LFxuICAgICAgICBzaW5rLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b01hdGNoKC9uby1zdG9yZS8pO1xuICAgICAgZXhwZWN0KFN0cmluZyh3YXJuLm1vY2suY2FsbHNbMF0/LlswXSkpLnRvQ29udGFpbignZ3JvdXAgXCJibG9nXCInKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVA7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInB1YmxpYy8gb24gdGhlIExhbWJkYSB0eXBlc1wiLCAoKSA9PiB7XG4gIGxldCBsYW1iZGE6IE5leHRqc1J1bnRpbWU7XG4gIGNvbnN0IHNlbmQkID0gamVzdC5zcHlPbihTM0NsaWVudC5wcm90b3R5cGUsIFwic2VuZFwiKTtcblxuICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHN0YWdlZCA9IHN0YWdlRGVwbG95bWVudCgpO1xuICAgIGNvbnN0IG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgcmVhZEZpbGVTeW5jKGRlcGxveWVkTWFuaWZlc3RQYXRoKHN0YWdlZCksIFwidXRmLThcIiksXG4gICAgKTtcbiAgICAvLyBXaGF0IGEgTGFtYmRhIHppcCBjYXJyaWVzOiB0aGUgbGlzdCwgbm90IHRoZSBmaWxlcy5cbiAgICBybVN5bmMoam9pbihzdGFnZWQsIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpciwgXCJwdWJsaWNcIiksIHtcbiAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3cml0ZShcbiAgICAgIGpvaW4oc3RhZ2VkLCBSVU5USU1FX0RJUl9OQU1FLCBQVUJMSUNfRklMRVNfRklMRV9OQU1FKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KFtcImZlZWQueG1sXCIsIFwiaW1hZ2VzL2xvZ29AMngucG5nXCJdKSxcbiAgICApO1xuICAgIGxhbWJkYSA9IG5ldyBOZXh0anNSdW50aW1lKHtcbiAgICAgIGRlcGxveW1lbnRSb290OiBzdGFnZWQsXG4gICAgICBtYW5pZmVzdCxcbiAgICAgIGJ1Y2tldDogXCJhc3NldHNcIixcbiAgICAgIGJ1Y2tldEtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiBzZW5kJC5tb2NrUmVzZXQoKSk7XG4gIGFmdGVyQWxsKCgpID0+IHNlbmQkLm1vY2tSZXN0b3JlKCkpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG4gICk6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgbGFtYmRhLmhhbmRsZShcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICB1cmwsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCAuLi5oZWFkZXJzIH0sXG4gICAgICB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIHJldHVybiBzaW5rO1xuICB9XG5cbiAgaXQoXCJzdHJlYW1zIGEgbGlzdGVkIGZpbGUgZnJvbSB0aGUgYXNzZXRzIGJ1Y2tldCwgdW5kZXIgaXRzIGtleSBwcmVmaXhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQkLm1vY2tJbXBsZW1lbnRhdGlvbigoYXN5bmMgKCkgPT4gKHtcbiAgICAgIEJvZHk6IFJlYWRhYmxlLmZyb20oW0J1ZmZlci5mcm9tKFwiPHJzcy8+XCIpXSksXG4gICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9yc3MreG1sXCIsXG4gICAgICBDb250ZW50TGVuZ3RoOiA2LFxuICAgICAgRVRhZzogJ1wiZTFcIicsXG4gICAgICBMYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKFwiMjAyNi0wMS0wMlQwMzowNDowNVpcIiksXG4gICAgfSkpIGFzIG5ldmVyKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgZ2V0KFwiL2ZlZWQueG1sXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCI8cnNzLz5cIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSkudG9CZShcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5ldGFnKS50b0JlKCdcImUxXCInKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcInB1YmxpYywgbWF4LWFnZT0wXCIpO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBzZW5kJC5tb2NrLmNhbGxzWzBdWzBdIGFzIHVua25vd24gYXMge1xuICAgICAgaW5wdXQ6IHsgQnVja2V0OiBzdHJpbmc7IEtleTogc3RyaW5nIH07XG4gICAgfTtcbiAgICBleHBlY3QoY29tbWFuZC5pbnB1dCkudG9NYXRjaE9iamVjdCh7XG4gICAgICBCdWNrZXQ6IFwiYXNzZXRzXCIsXG4gICAgICBLZXk6IFwiYmFzZS9mZWVkLnhtbFwiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcInVzZXMgdGhlIGZpbGUncyByZWFsIG5hbWUgYXMgdGhlIGtleVwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCJwbmdcIildKSxcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGF3YWl0IGdldChcIi9pbWFnZXMvbG9nb0AyeC5wbmdcIik7XG4gICAgY29uc3QgY29tbWFuZCA9IHNlbmQkLm1vY2suY2FsbHNbMF1bMF0gYXMgdW5rbm93biBhcyB7XG4gICAgICBpbnB1dDogeyBLZXk6IHN0cmluZyB9O1xuICAgIH07XG4gICAgZXhwZWN0KGNvbW1hbmQuaW5wdXQuS2V5KS50b0JlKFwiYmFzZS9pbWFnZXMvbG9nb0AyeC5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhIG1hdGNoaW5nIElmLU5vbmUtTWF0Y2ggd2l0aCB0aGUgMzA0IFMzIGdhdmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQkLm1vY2tJbXBsZW1lbnRhdGlvbigoYXN5bmMgKCkgPT4ge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoXCJOb3QgTW9kaWZpZWRcIiksIHtcbiAgICAgICAgbmFtZTogXCJOb3RNb2RpZmllZFwiLFxuICAgICAgICAkbWV0YWRhdGE6IHsgaHR0cFN0YXR1c0NvZGU6IDMwNCB9LFxuICAgICAgfSk7XG4gICAgfSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIiwgeyBcImlmLW5vbmUtbWF0Y2hcIjogJ1wiZTFcIicgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgzMDQpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkubGVuZ3RoKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcImZhbGxzIHRocm91Z2ggdG8gdGhlIDQwNCB3aGVuIHRoZSBvYmplY3QgaXMgZ29uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIk5vU3VjaEtleVwiKSwge1xuICAgICAgICBuYW1lOiBcIk5vU3VjaEtleVwiLFxuICAgICAgICAkbWV0YWRhdGE6IHsgaHR0cFN0YXR1c0NvZGU6IDQwNCB9LFxuICAgICAgfSk7XG4gICAgfSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICB9KTtcblxuICBpdChcImZvcndhcmRzIGEgUmFuZ2UgYW5kIGFuc3dlcnMgUzMncyAyMDZcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQkLm1vY2tJbXBsZW1lbnRhdGlvbigoYXN5bmMgKCkgPT4gKHtcbiAgICAgIEJvZHk6IFJlYWRhYmxlLmZyb20oW0J1ZmZlci5mcm9tKFwicnNzXCIpXSksXG4gICAgICBDb250ZW50TGVuZ3RoOiAzLFxuICAgICAgQ29udGVudFJhbmdlOiBcImJ5dGVzIDEtMy82XCIsXG4gICAgICBBY2NlcHRSYW5nZXM6IFwiYnl0ZXNcIixcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIiwgeyByYW5nZTogXCJieXRlcz0xLTNcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwNik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtcmFuZ2VcIl0pLnRvQmUoXCJieXRlcyAxLTMvNlwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiYWNjZXB0LXJhbmdlc1wiXSkudG9CZShcImJ5dGVzXCIpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcInJzc1wiKTtcbiAgICBjb25zdCBjb21tYW5kID0gc2VuZCQubW9jay5jYWxsc1swXVswXSBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlucHV0OiB7IFJhbmdlPzogc3RyaW5nIH07XG4gICAgfTtcbiAgICBleHBlY3QoY29tbWFuZC5pbnB1dC5SYW5nZSkudG9CZShcImJ5dGVzPTEtM1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGFuIHVuc2F0aXNmaWFibGUgUmFuZ2Ugd2l0aCBhIDQxNlwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIkludmFsaWRSYW5nZVwiKSwge1xuICAgICAgICBuYW1lOiBcIkludmFsaWRSYW5nZVwiLFxuICAgICAgICAkbWV0YWRhdGE6IHsgaHR0cFN0YXR1c0NvZGU6IDQxNiB9LFxuICAgICAgfSk7XG4gICAgfSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIiwgeyByYW5nZTogXCJieXRlcz05OTktXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MTYpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkubGVuZ3RoKS50b0JlKDApO1xuICB9KTtcblxuICAvLyBTMyBjYW4ndCBldmFsdWF0ZSBJZi1SYW5nZSwgYW5kIGlnbm9yaW5nIFJhbmdlIGlzIGFsd2F5cyBhbGxvd2VkLlxuICBpdChcImRyb3BzIHRoZSBSYW5nZSB3aGVuIElmLVJhbmdlIGlzIHByZXNlbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQkLm1vY2tJbXBsZW1lbnRhdGlvbigoYXN5bmMgKCkgPT4gKHtcbiAgICAgIEJvZHk6IFJlYWRhYmxlLmZyb20oW0J1ZmZlci5mcm9tKFwiPHJzcy8+XCIpXSksXG4gICAgfSkpIGFzIG5ldmVyKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgZ2V0KFwiL2ZlZWQueG1sXCIsIHtcbiAgICAgIHJhbmdlOiBcImJ5dGVzPTEtM1wiLFxuICAgICAgXCJpZi1yYW5nZVwiOiAnXCJlMVwiJyxcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgY29uc3QgY29tbWFuZCA9IHNlbmQkLm1vY2suY2FsbHNbMF1bMF0gYXMgdW5rbm93biBhcyB7XG4gICAgICBpbnB1dDogeyBSYW5nZT86IHN0cmluZyB9O1xuICAgIH07XG4gICAgZXhwZWN0KGNvbW1hbmQuaW5wdXQuUmFuZ2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJ1c2VzIHRoZSBvYmplY3QncyBvd24gQ2FjaGUtQ29udHJvbCwgYXMgdGhlIGVkZ2Ugc2VydmVzIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+ICh7XG4gICAgICBCb2R5OiBSZWFkYWJsZS5mcm9tKFtCdWZmZXIuZnJvbShcIjxyc3MvPlwiKV0pLFxuICAgICAgQ2FjaGVDb250cm9sOiBcInB1YmxpYywgbWF4LWFnZT0zNjAwXCIsXG4gICAgfSkpIGFzIG5ldmVyKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgZ2V0KFwiL2ZlZWQueG1sXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFwicHVibGljLCBtYXgtYWdlPTM2MDBcIik7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGFuIHVubGlzdGVkIHBhdGggdG8gdGhlIGFwcFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZ2V0KFwiL3Rlc3QudHh0XCIpO1xuICAgIGV4cGVjdChzZW5kJCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJyZXZhbGlkYXRlZFBhZ2VSb3V0ZXNcIiwgKCkgPT4ge1xuICBjb25zdCBtYW5pZmVzdCA9IChpMThuOiB1bmtub3duKSA9PlxuICAgICh7IGJ1aWxkSWQ6IFwiYjFcIiwgY29uZmlnOiB7IGkxOG4gfSB9KSBhcyB1bmtub3duIGFzIEFkYXB0ZXJNYW5pZmVzdDtcbiAgY29uc3QgaTE4biA9IHsgbG9jYWxlczogW1wiZW5cIiwgXCJmclwiXSwgZGVmYXVsdExvY2FsZTogXCJlblwiIH07XG5cbiAgaXQoXCJpcyB0aGUgcm91dGUgYW5kIGl0cyBkYXRhIHJvdXRlIHdpdGhvdXQgaTE4blwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9ibG9nXCIsIG1hbmlmZXN0KG51bGwpKSkudG9FcXVhbChbXG4gICAgICBbXCIvYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2Jsb2cuanNvblwiXSxcbiAgICBdKTtcbiAgICBleHBlY3QocmV2YWxpZGF0ZWRQYWdlUm91dGVzKFwiL1wiLCBtYW5pZmVzdChudWxsKSkpLnRvRXF1YWwoW1xuICAgICAgW1wiL1wiLCBcIi9fbmV4dC9kYXRhL2IxL2luZGV4Lmpzb25cIl0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBOZXh0IGNsaWVudCBwdXRzIHRoZSBsb2NhbGUgaW4gZXZlcnkgZGF0YSBocmVmLCB0aGUgZGVmYXVsdCBpbmNsdWRlZC5cbiAgaXQoXCJwdXRzIHRoZSBkZWZhdWx0IGxvY2FsZSBpbiB0aGUgZGF0YSByb3V0ZSwgYW5kIGludmFsaWRhdGVzIGJvdGggSFRNTCBzcGVsbGluZ3NcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXZhbGlkYXRlZFBhZ2VSb3V0ZXMoXCIvYmxvZ1wiLCBtYW5pZmVzdChpMThuKSkpLnRvRXF1YWwoW1xuICAgICAgW1wiL2Jsb2dcIiwgXCIvX25leHQvZGF0YS9iMS9lbi9ibG9nLmpzb25cIl0sXG4gICAgICBbXCIvZW4vYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2VuL2Jsb2cuanNvblwiXSxcbiAgICBdKTtcbiAgICBleHBlY3QocmV2YWxpZGF0ZWRQYWdlUm91dGVzKFwiL2VuL2Jsb2dcIiwgbWFuaWZlc3QoaTE4bikpKS50b0VxdWFsKFtcbiAgICAgIFtcIi9ibG9nXCIsIFwiL19uZXh0L2RhdGEvYjEvZW4vYmxvZy5qc29uXCJdLFxuICAgICAgW1wiL2VuL2Jsb2dcIiwgXCIvX25leHQvZGF0YS9iMS9lbi9ibG9nLmpzb25cIl0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwibmFtZXMgdGhlIHJvb3QncyBkYXRhIHJvdXRlIGFmdGVyIHRoZSBsb2NhbGVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXZhbGlkYXRlZFBhZ2VSb3V0ZXMoXCIvXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvXCIsIFwiL19uZXh0L2RhdGEvYjEvZW4uanNvblwiXSxcbiAgICAgIFtcIi9lblwiLCBcIi9fbmV4dC9kYXRhL2IxL2VuLmpzb25cIl0sXG4gICAgXSk7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9mclwiLCBtYW5pZmVzdChpMThuKSkpLnRvRXF1YWwoW1xuICAgICAgW1wiL2ZyXCIsIFwiL19uZXh0L2RhdGEvYjEvZnIuanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyBhbm90aGVyIGxvY2FsZSdzIHBhZ2UgdG8gaXRzIG93biBwcmVmaXhcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXZhbGlkYXRlZFBhZ2VSb3V0ZXMoXCIvZnIvYmxvZ1wiLCBtYW5pZmVzdChpMThuKSkpLnRvRXF1YWwoW1xuICAgICAgW1wiL2ZyL2Jsb2dcIiwgXCIvX25leHQvZGF0YS9iMS9mci9ibG9nLmpzb25cIl0sXG4gICAgXSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
1711
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvY29yZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQVFpQjtBQUNqQixxQ0FBaUM7QUFDakMseUNBQTBDO0FBQzFDLDZDQUFpRDtBQUNqRCx5Q0FBNkU7QUFDN0Usa0RBQThDO0FBQzlDLDBFQUEwRTtBQUMxRSxpQ0FPZ0I7QUFDaEIsNERBR2tDO0FBQ2xDLDRDQUFxRDtBQUdyRCx5Q0FNb0I7QUFDcEIsaURBQXFEO0FBQ3JELHNHQUF3RTtBQUV4RTs7Ozs7R0FLRztBQUNILE1BQU0sZUFBZSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXVIdkIsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLGVBQWUsR0FBRzs7Ozs7Ozs7Ozs7OztDQWF2QixDQUFDO0FBRUYsTUFBTSxjQUFjO0lBSWlCO0lBSDVCLElBQUksQ0FBZ0I7SUFDWCxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRXRDLFlBQW1DLGVBQWUsS0FBSztRQUFwQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtJQUFHLENBQUM7SUFFcEQsS0FBSyxDQUFDLElBQWtCO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsT0FBTyxJQUFJLHNCQUFRLENBQUM7WUFDbEIsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUTtnQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLFFBQVEsRUFBRSxD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QzVDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7XG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHJlYWRGaWxlU3luYyxcbiAgcmVhbHBhdGhTeW5jLFxuICBybVN5bmMsXG4gIHN5bWxpbmtTeW5jLFxuICB3cml0ZUZpbGVTeW5jLFxufSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBSZWFkYWJsZSwgV3JpdGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB7IGNvbnN0YW50cyBhcyB6bGliQ29uc3RhbnRzLCBndW56aXBTeW5jLCBnemlwU3luYyB9IGZyb20gXCJub2RlOnpsaWJcIjtcbmltcG9ydCB7IFMzQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IHsgaW1hZ2VDb25maWdEZWZhdWx0IH0gZnJvbSBcIm5leHQvZGlzdC9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZy5qc1wiO1xuaW1wb3J0IHtcbiAgbG9hZFJ1bnRpbWUsXG4gIE5leHRqc1J1bnRpbWUsXG4gIHJldmFsaWRhdGVkUGFnZVJvdXRlcyxcbiAgUnVudGltZVJlcXVlc3QsXG4gIHNwbGl0Qm9keSxcbiAgd2l0aG91dEludGVybmFsSGVhZGVycyxcbn0gZnJvbSBcIi4vY29yZVwiO1xuaW1wb3J0IHtcbiAgQnVpbGRDb21wbGV0ZUNvbnRleHQsXG4gIGJ1aWxkQWRhcHRlck1hbmlmZXN0LFxufSBmcm9tIFwiLi4vYWRhcHRlci9idWlsZC1vdXRwdXRzXCI7XG5pbXBvcnQgeyBTaGltSW5jb21pbmdNZXNzYWdlIH0gZnJvbSBcIi4vaHR0cC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyBSZXNwb25zZUhlYWQgfSBmcm9tIFwiLi9odHRwL3Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBSZXNwb25zZVNpbmsgfSBmcm9tIFwiLi9odHRwL3NpbmtcIjtcbmltcG9ydCB7XG4gIEFkYXB0ZXJNYW5pZmVzdCxcbiAgZGVwbG95ZWRNYW5pZmVzdFBhdGgsXG4gIFBVQkxJQ19GSUxFU19GSUxFX05BTUUsXG4gIFJFVkFMSURBVEVEX1BBR0VfSE9PSyxcbiAgUlVOVElNRV9ESVJfTkFNRSxcbn0gZnJvbSBcIi4vbWFuaWZlc3RcIjtcbmltcG9ydCB7IFRBR19NQU5JRkVTVF9TWU1CT0wgfSBmcm9tIFwiLi90YWctbWFuaWZlc3RcIjtcbmltcG9ydCBhcHBQbGF5Z3JvdW5kIGZyb20gXCIuLi9hZGFwdGVyL19fZml4dHVyZXNfXy9hcHAtcGxheWdyb3VuZC5qc29uXCI7XG5cbi8qKlxuICogRXZlcnkgZW50cnlwb2ludCBpbiB0aGUgc3RhZ2VkIHRyZWUgaXMgdGhpcyBtb2R1bGUuIEl0IHJlcG9ydHMgYmFjayB3aGF0IHRoZVxuICogcnVudGltZSBoYW5kZWQgaXQg4oCUIHRoZSByZXdyaXR0ZW4gYHJlcS51cmxgLCB0aGUgYHJlcXVlc3RNZXRhYCBmaWVsZHMgTmV4dC5qc1xuICogcmVhZHMsIHRoZSBjd2Qg4oCUIHdoaWNoIGlzIHRoZSB3aG9sZSBjb250cmFjdCBiZXR3ZWVuIHRoZSBydW50aW1lIGFuZCBhIHJlYWxcbiAqIGJ1aWx0IGVudHJ5cG9pbnQsIGFuZCBpdCBpcyBvdGhlcndpc2Ugb25seSBvYnNlcnZhYmxlIGJ5IHJ1bm5pbmcgTmV4dC5qcy5cbiAqL1xuY29uc3QgRU5UUllQT0lOVF9TVFVCID0gYFxuY29uc3QgeyB3cml0ZUZpbGVTeW5jIH0gPSByZXF1aXJlKFwibm9kZTpmc1wiKTtcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jIChyZXEsIHJlcywgY3R4KSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCwgXCJodHRwczovL3N0dWIudGVzdFwiKTtcbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwiYm9vbUV2ZXJ5d2hlcmVcIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZXJyb3IgcGFnZSBleHBsb2RlZCB0b29cIik7XG4gIH1cbiAgLy8gU2FtZSByZWN1cnNpb24gZ3VhcmQgYXMgXFxgcmVuZGVyNDA0XFxgIGJlbG93OiB0aGUgZXJyb3IgcGFnZSBpcyByZW5kZXJlZCBmb3JcbiAgLy8gdGhlIFVSTCB0aGF0IHdhcyBhc2tlZCBmb3IsIHNvIGFuIHVuZ3VhcmRlZCB0aHJvdyB3b3VsZCByZXBlYXQgZm9yZXZlci5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwiYm9vbVwiKSAmJiAhX19maWxlbmFtZS5pbmNsdWRlcyhcIl9lcnJvclwiKSkge1xuICAgIC8vIEEgcmVuZGVyIHRoYXQgZGVzY3JpYmVkIGl0cyBib2R5IGJlZm9yZSBpdCB0aHJldy5cbiAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIiwgXCIxMjM0XCIpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJFVGFnXCIsICdcInN0YWxlXCInKTtcbiAgICAvLyBXaGF0IFxcYGdldFNlcnZlclNpZGVQcm9wc1xcYCAob3IgYSBcXGBoZWFkZXJzKClcXGAgcnVsZSkgY2FuIGxlYXZlIGJlaGluZC5cbiAgICByZXMuc2V0SGVhZGVyKFwiQ2FjaGUtQ29udHJvbFwiLCBcInMtbWF4YWdlPTYwXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcInJvdXRlIGV4cGxvZGVkXCIpO1xuICB9XG4gIC8vIFdoYXQgYm90aCByb3V0ZXJzIGRvIGZvciBcXGBub3RGb3VuZCgpXFxgIHRoZXkgY2Fubm90IHJlbmRlciB0aGVtc2VsdmVzLiBPbmx5XG4gIC8vIHRoZSByb3V0ZSB0aGF0IGdhdmUgdXAgZG9lcyBpdDogdGhlIHJ1bnRpbWUgcmVuZGVycyB0aGUgNDA0IGFnYWluc3QgdGhlXG4gIC8vICpzYW1lKiBVUkwsIHNvIHRoZSBub3QtZm91bmQgbW9kdWxlIHJlYWNoaW5nIGhlcmUgYWdhaW4gd291bGQgcmVjdXJzZS5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwicmVuZGVyNDA0XCIpICYmICFfX2ZpbGVuYW1lLmluY2x1ZGVzKFwiX25vdC1mb3VuZFwiKSkge1xuICAgIGF3YWl0IGN0eC5yZXF1ZXN0TWV0YS5yZW5kZXI0MDQoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gXFxgcmVzLnJldmFsaWRhdGUodGFyZ2V0KVxcYCBmcm9tIGEgUGFnZXMgQVBJIHJvdXRlLCBzcGVsbGVkIG91dDogdGhlIHJ1bnRpbWVcbiAgLy8gc3VwcGxpZXMgXFxgcmVxdWVzdE1ldGEucmV2YWxpZGF0ZVxcYCwgYW5kIHdoYXQgY29tZXMgYmFjayBpcyBlaXRoZXIgbm90aGluZyBvclxuICAvLyB0aGUgXFxgSW52YWxpZCByZXNwb25zZSA8c3RhdHVzPlxcYCB0aGlzIHJlcG9ydHMuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcInJldmFsaWRhdGVcIikpIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjdHgucmVxdWVzdE1ldGEucmV2YWxpZGF0ZSh7XG4gICAgICAgIHVybFBhdGg6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwicmV2YWxpZGF0ZVwiKSxcbiAgICAgICAgaGVhZGVyczogeyBcIngtcHJlcmVuZGVyLXJldmFsaWRhdGVcIjogXCJwcmV2aWV3LWlkXCIgfSxcbiAgICAgICAgb3B0czogeyB1bnN0YWJsZV9vbmx5R2VuZXJhdGVkOiB1cmwuc2VhcmNoUGFyYW1zLmhhcyhcIm9ubHlHZW5lcmF0ZWRcIikgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICB9XG4gICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeSh7IHJldmFsaWRhdGVkOiBlcnJvciA9PT0gbnVsbCwgZXJyb3IgfSkpO1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBMZXRzIGEgdGVzdCBzZWUgdGhlIHJlcXVlc3QgYSByZXZhbGlkYXRpb24gcmVuZGVyZWQsIHdob3NlIHJlc3BvbnNlIHRoZVxuICAvLyBydW50aW1lIGRpc2NhcmRzLlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJyZWNvcmRPcmlnaW5cIikpIHtcbiAgICB3cml0ZUZpbGVTeW5jKHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9NQVJLRVIsIGN0eC5yZXF1ZXN0TWV0YS5pbml0VVJMKTtcbiAgfVxuICAvLyBMZXRzIGEgcmV2YWxpZGF0aW9uIHRhcmdldCBhbnN3ZXIgc29tZXRoaW5nIG90aGVyIHRoYW4gMjAwLlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJzdGF0dXNcIikpIHtcbiAgICByZXMuc3RhdHVzQ29kZSA9IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldChcInN0YXR1c1wiKSk7XG4gIH1cbiAgLy8gV2hhdCBhIHByZXJlbmRlcmVkIFxcYC9fbm90LWZvdW5kXFxgIGRvZXM6IGl0IHNlbmRzIHRoZSBDYWNoZS1Db250cm9sIG9mIGl0c1xuICAvLyBvd24gY2FjaGUgZW50cnksIGEgeWVhciBmb3Igb25lIHRoYXQgbmV2ZXIgcmV2YWxpZGF0ZXMg4oCUIGJ1dCBvbmx5IHdoZW4gdGhlXG4gIC8vIHJlc3BvbnNlIGhhcyBub25lIHlldCwgYXMgXFxgc2VuZFJlbmRlclJlc3VsdFxcYCBhbmQgXFxgcGFnZXMtaGFuZGxlci5qc1xcYCBkby5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwiY2FjaGVDb250cm9sXCIpICYmICFyZXMuZ2V0SGVhZGVyKFwiQ2FjaGUtQ29udHJvbFwiKSkge1xuICAgIHJlcy5zZXRIZWFkZXIoXCJDYWNoZS1Db250cm9sXCIsIHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiY2FjaGVDb250cm9sXCIpKTtcbiAgfVxuICAvLyBBIHJvdXRlIHRoYXQgcmVhZHMgaXRzIHJlcXVlc3QgYm9keSwgcmVwb3J0aW5nIHdoYXQgYXJyaXZlZC5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwicmVhZEJvZHlcIikpIHtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlcSkgbGVuZ3RoICs9IGNodW5rLmxlbmd0aDtcbiAgICByZXMuZW5kKEpTT04uc3RyaW5naWZ5KHsgYm9keUxlbmd0aDogbGVuZ3RoIH0pKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gQSBQYWdlcyBBUEkgcm91dGUgdGhhdCByZXR1cm5zIGJlZm9yZSBpdCBpcyBkb25lIHdyaXRpbmc6IHdoYXRcbiAgLy8gXFxgc3RyZWFtLnBpcGUocmVzKVxcYCBhbmQgYSBjYWxsYmFjay1zdHlsZSBcXGByZXMuanNvbigpXFxgIGJvdGggbG9vayBsaWtlLlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJlbmRMYXRlclwiKSkge1xuICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgIHJlcy53cml0ZShcImZpcnN0LFwiKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHJlcy5lbmQoXCJzZWNvbmRcIiksIDEwKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gV2hhdCBOZXh0J3MgXFxgQWZ0ZXJDb250ZXh0XFxgIGRvZXM6IHdvcmsgcmVnaXN0ZXJlZCB3aXRoIFxcYHdhaXRVbnRpbFxcYCBhZnRlclxuICAvLyB0aGUgcmVzcG9uc2UsIGZyb20gaW5zaWRlIHdvcmsgdGhhdCB3YXMgaXRzZWxmIHJlZ2lzdGVyZWQgd2l0aCBpdC5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwibGF0ZVdhaXRVbnRpbFwiKSkge1xuICAgIGN0eC53YWl0VW50aWwoXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY3R4LndhaXRVbnRpbChcbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlTGF0ZSkgPT5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfTUFSS0VSLCBcImxhdGVcIik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZUxhdGUoKTtcbiAgICAgICAgICAgICAgfSwgMTApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgMTApLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcIndhaXRVbnRpbFwiKSkge1xuICAgIGN0eC53YWl0VW50aWwoXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgd3JpdGVGaWxlU3luYyhwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfTUFSS0VSLCBcImRvbmVcIik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCAxMCksXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgcmVzLmVuZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBmaWxlOiBfX2ZpbGVuYW1lLFxuICAgICAgdXJsOiByZXEudXJsLFxuICAgICAgaW5pdFVSTDogY3R4LnJlcXVlc3RNZXRhICYmIGN0eC5yZXF1ZXN0TWV0YS5pbml0VVJMLFxuICAgICAgaG9zdG5hbWU6IGN0eC5yZXF1ZXN0TWV0YSAmJiBjdHgucmVxdWVzdE1ldGEuaG9zdG5hbWUsXG4gICAgICBxdWVyeTogY3R4LnJlcXVlc3RNZXRhICYmIGN0eC5yZXF1ZXN0TWV0YS5xdWVyeSxcbiAgICAgIHBhcmFtczogKGN0eC5yZXF1ZXN0TWV0YSAmJiBjdHgucmVxdWVzdE1ldGEucGFyYW1zKSB8fCBudWxsLFxuICAgICAgaGFzUmVuZGVyNDA0OiBCb29sZWFuKGN0eC5yZXF1ZXN0TWV0YSAmJiBjdHgucmVxdWVzdE1ldGEucmVuZGVyNDA0KSxcbiAgICAgIHdhaXRVbnRpbDogdHlwZW9mIGN0eC53YWl0VW50aWwsXG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICBoZWFkZXI6IHJlcS5oZWFkZXJzW1wieC1mcm9tLW1pZGRsZXdhcmVcIl0gfHwgbnVsbCxcbiAgICAgIG5leHRSZXN1bWU6IHJlcS5oZWFkZXJzW1wibmV4dC1yZXN1bWVcIl0gfHwgbnVsbCxcbiAgICAgIG1hdGNoZWRQYXRoOiByZXEuaGVhZGVyc1tcIngtbWF0Y2hlZC1wYXRoXCJdIHx8IG51bGwsXG4gICAgICBjb29raWU6IHJlcS5oZWFkZXJzLmNvb2tpZSB8fCBudWxsLFxuICAgIH0pLFxuICApO1xufTtcbmA7XG5cbi8qKlxuICogYE5leHRSZXNwb25zZS5uZXh0KHsgcmVxdWVzdDogeyBoZWFkZXJzIH0gfSlgLCBzcGVsbGVkIG91dCBpbiB0aGUgd2lyZSBwcm90b2NvbFxuICogTmV4dC5qcyB1c2VzOiBgeC1taWRkbGV3YXJlLW92ZXJyaWRlLWhlYWRlcnNgIGxpc3RzICpldmVyeSogcmVxdWVzdCBoZWFkZXIgdGhlXG4gKiByb3V0ZSBzaG91bGQgc2VlIOKAlCBkcm9wcGluZyBvbmUgaGVyZSBpcyBob3cgYSByZWFsIGFwcCBsb3NlcyBgYWNjZXB0LWVuY29kaW5nYC5cbiAqL1xuY29uc3QgTUlERExFV0FSRV9TVFVCID0gYFxuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHsgXCJ4LW1pZGRsZXdhcmUtbmV4dFwiOiBcIjFcIiB9KTtcbiAgY29uc3QgbmFtZXMgPSBbXTtcbiAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICBoZWFkZXJzLnNldChcIngtbWlkZGxld2FyZS1yZXF1ZXN0LVwiICsgbmFtZSwgdmFsdWUpO1xuICB9KTtcbiAgbmFtZXMucHVzaChcIngtZnJvbS1taWRkbGV3YXJlXCIpO1xuICBoZWFkZXJzLnNldChcIngtbWlkZGxld2FyZS1yZXF1ZXN0LXgtZnJvbS1taWRkbGV3YXJlXCIsIFwieWVzXCIpO1xuICBoZWFkZXJzLnNldChcIngtbWlkZGxld2FyZS1vdmVycmlkZS1oZWFkZXJzXCIsIG5hbWVzLmpvaW4oXCIsXCIpKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IGhlYWRlcnMgfSk7XG59O1xuYDtcblxuY2xhc3MgQ29sbGVjdGluZ1NpbmsgaW1wbGVtZW50cyBSZXNwb25zZVNpbmsge1xuICBwdWJsaWMgaGVhZD86IFJlc3BvbnNlSGVhZDtcbiAgcHVibGljIHJlYWRvbmx5IGNodW5rczogQnVmZmVyW10gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHBhZEVtcHR5Qm9keSA9IGZhbHNlKSB7fVxuXG4gIHB1YmxpYyBiZWdpbihoZWFkOiBSZXNwb25zZUhlYWQpOiBXcml0YWJsZSB7XG4gICAgdGhpcy5oZWFkID0gaGVhZDtcbiAgICBjb25zdCBjaHVua3MgPSB0aGlzLmNodW5rcztcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKHtcbiAgICAgIHdyaXRlKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBib2R5KCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQodGhpcy5jaHVua3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlKHBhdGg6IHN0cmluZywgY29udGVudHM6IHN0cmluZyB8IEJ1ZmZlcik6IHZvaWQge1xuICBta2RpclN5bmMoZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMocGF0aCwgY29udGVudHMpO1xufVxuXG5jb25zdCBGQVZJQ09OID0gQnVmZmVyLmZyb20oXCIwMDAwMDEwMC1mYWtlLWljb25cIiwgXCJ1dGYtOFwiKTtcbmNvbnN0IE5PVF9GT1VORF9IVE1MID0gXCI8aHRtbD48Ym9keT5wcmVyZW5kZXJlZCA0MDQ8L2JvZHk+PC9odG1sPlwiO1xuY29uc3QgRVJST1JfSFRNTCA9IFwiPGh0bWw+PGJvZHk+cHJlcmVuZGVyZWQgNTAwPC9ib2R5PjwvaHRtbD5cIjtcbi8qKlxuICogV2hhdCBhIGNvbnRhaW5lciBpbWFnZSBjb3BpZXMgaW50byBgcHVibGljL2AuIE5hbWVzIGBzZW5kYCBhbmQgdGhlIGV4YWN0XG4gKiBtYXRjaCBpbiBgQG5leHQvcm91dGluZ2AgZWFjaCBnb3Qgd3Jvbmc6IGEgYCVgIHRoYXQgaXMgbm90IGFuIGVzY2FwZSwgb25lIHRoYXRcbiAqIGxvb2tzIGxpa2Ugb25lIG5leHQgdG8gdGhlIGZpbGUgaXQgZGVjb2RlcyB0bywgYW5kIGFuIGBAYCBhIGJyb3dzZXIgbGVhdmVzXG4gKiBhbG9uZS5cbiAqL1xuY29uc3QgUFVCTElDX0ZJTEVTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcInRlc3QudHh0XCI6IFwiaGVsbG8gZnJvbSBwdWJsaWNcIixcbiAgXCIxMDAlLnBuZ1wiOiBcImEgbGl0ZXJhbCBwZXJjZW50XCIsXG4gIFwiYSUyMGIudHh0XCI6IFwidGhlIGZpbGUgbmFtZWQgd2l0aCBhIHBlcmNlbnRcIixcbiAgXCJhIGIudHh0XCI6IFwidGhlIGZpbGUgbmFtZWQgd2l0aCBhIHNwYWNlXCIsXG4gIFwiaW1hZ2VzL2xvZ29AMngucG5nXCI6IFwiYXQgc2lnblwiLFxufTtcblxuLyoqXG4gKiBNYXRlcmlhbGl6ZXMgdGhlIHRyZWUgYSBkZXBsb3ltZW50IHN0YWdlczogdGhlIG1hbmlmZXN0IHVuZGVyXG4gKiBgY2RrLW5leHRqcy1ydW50aW1lL2AsIGEgc3R1YiBhdCBldmVyeSBlbnRyeXBvaW50IGBmaWxlUGF0aGAsIHRoZSBzdGF0aWMgZmlsZXNcbiAqIHRoZSBtYW5pZmVzdCBwb2ludHMgYXQsIGFuZCB0aGUgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCBgbG9hZFJ1bnRpbWVgXG4gKiBwcm9iZXMgZm9yLlxuICovXG5mdW5jdGlvbiBzdGFnZURlcGxveW1lbnQoXG4gIG1pZGRsZXdhcmVTb3VyY2UgPSBNSURETEVXQVJFX1NUVUIsXG4gIHRyYW5zZm9ybU1hbmlmZXN0OiAobWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdCkgPT4gQWRhcHRlck1hbmlmZXN0ID0gKGl0KSA9PlxuICAgIGl0LFxuKTogc3RyaW5nIHtcbiAgLy8gVGhlIGZpeHR1cmUgaXMgYSByZWFsIGNhcHR1cmVkIGNvbnRleHQsIGFzIEpTT046IHRoZSBzdHJ1Y3R1cmFsIGNhc3QgaXMgdGhlXG4gIC8vIHBvaW50IG9mIHRoZSBjYXN0IChzZWUgYGJ1aWxkLW91dHB1dHMudGVzdC50c2ApLlxuICBjb25zdCBjdHggPSBzdHJ1Y3R1cmVkQ2xvbmUoYXBwUGxheWdyb3VuZCkgYXMgdW5rbm93biBhcyBCdWlsZENvbXBsZXRlQ29udGV4dDtcbiAgLy8gVGhlIGZpeHR1cmUncyBgY29uZmlnYCBob2xkcyBvbmx5IHRoZSByb3V0aW5nIGZpZWxkczsgYSByZWFsIG9uZSBpc1xuICAvLyByZXNvbHZlZCBhbmQgaGFzIGV2ZXJ5IGltYWdlIGRlZmF1bHQuXG4gIGN0eC5jb25maWcgPSB7XG4gICAgLi4uY3R4LmNvbmZpZyxcbiAgICBpbWFnZXM6IGltYWdlQ29uZmlnRGVmYXVsdCxcbiAgICBleHBlcmltZW50YWw6IHt9LFxuICB9IGFzIEJ1aWxkQ29tcGxldGVDb250ZXh0W1wiY29uZmlnXCJdO1xuICBjb25zdCBtYW5pZmVzdCA9IHRyYW5zZm9ybU1hbmlmZXN0KFxuICAgIGJ1aWxkQWRhcHRlck1hbmlmZXN0KGN0eCwgeyBidWlsZEN3ZDogY3R4LnByb2plY3REaXIgfSkubWFuaWZlc3QsXG4gICk7XG4gIC8vIFJlYWxwYXRoIGJlY2F1c2UgYGxvYWRSdW50aW1lYCBjaGRpcnMsIGFuZCBtYWNPUydzIC92YXIgaXMgYSBzeW1saW5rIHRvXG4gIC8vIC9wcml2YXRlL3ZhcjogdGhlIGN3ZCB0aGUgZW50cnlwb2ludHMgcmVwb3J0IHdvdWxkIG5vdCBtYXRjaCBvdGhlcndpc2UuXG4gIGNvbnN0IHJvb3QgPSByZWFscGF0aFN5bmMobWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJjZGstbmV4dGpzLWNvcmUtXCIpKSk7XG5cbiAgd3JpdGUoZGVwbG95ZWRNYW5pZmVzdFBhdGgocm9vdCksIEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0KSk7XG4gIHdyaXRlKFxuICAgIGpvaW4ocm9vdCwgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLCBcIi5uZXh0L3JlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIpLFxuICAgIEpTT04uc3RyaW5naWZ5KHsgdmVyc2lvbjogMSwgY29uZmlnOiB7fSB9KSxcbiAgKTtcbiAgLy8gQSBkZXBsb3llZCB0cmVlIGNhcnJpZXMgdGhlIGBuZXh0YCBjbG9zdXJlIGBuZXh0IGJ1aWxkYCB0cmFjZWQsIHVuZGVyIHRoZVxuICAvLyAqcHJvamVjdCogZGlyIHJhdGhlciB0aGFuIG5leHQgdG8gdGhlIHJ1bnRpbWUgc2hlbGwg4oCUIHdoaWNoIGlzIHRoZSB3aG9sZVxuICAvLyByZWFzb24gYG5leHQtbW9kdWxlcy50c2AgZXhpc3RzLiBMaW5raW5nIHRoaXMgcmVwbydzIG93biBgbm9kZV9tb2R1bGVzYCBpblxuICAvLyByZXByb2R1Y2VzIHRoYXQsIHNvIGBzZXJ2ZVN0YXRpY2AgaGVyZSByZXNvbHZlcyBieSB0aGUgc2FtZSB3YWxrIGl0IGRvZXMgaW5cbiAgLy8gTGFtYmRhIGluc3RlYWQgb2YgdGhlIHRlc3QgcXVpZXRseSBleGVyY2lzaW5nIGEgZGlmZmVyZW50IGxvb2t1cC5cbiAgc3ltbGlua1N5bmMoXG4gICAgam9pbihfX2Rpcm5hbWUsIFwiLi4vLi4vbm9kZV9tb2R1bGVzXCIpLFxuICAgIGpvaW4ocm9vdCwgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLCBcIm5vZGVfbW9kdWxlc1wiKSxcbiAgKTtcblxuICBmb3IgKGNvbnN0IGVudHJ5cG9pbnQgb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdC5lbnRyeXBvaW50cykpIHtcbiAgICB3cml0ZShqb2luKHJvb3QsIGVudHJ5cG9pbnQuZmlsZVBhdGgpLCBFTlRSWVBPSU5UX1NUVUIpO1xuICB9XG4gIHdyaXRlKGpvaW4ocm9vdCwgbWFuaWZlc3QubWlkZGxld2FyZSEuZmlsZVBhdGgpLCBtaWRkbGV3YXJlU291cmNlKTtcblxuICB3cml0ZShqb2luKHJvb3QsIG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiL2Zhdmljb24uaWNvXCJdKSwgRkFWSUNPTik7XG4gIC8vIEFic2VudCBpbiB0aGUgZGVwbG95bWVudHMgdGhlIFBhZ2VzIDQwNCBhbmQgZXJyb3ItcGFnZSBsYWRkZXIgdGVzdHMgc3RhZ2UuXG4gIGlmIChtYW5pZmVzdC5zdGF0aWNGaWxlc1tcIi80MDRcIl0pIHtcbiAgICB3cml0ZShqb2luKHJvb3QsIG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiLzQwNFwiXSksIE5PVF9GT1VORF9IVE1MKTtcbiAgfVxuICBpZiAobWFuaWZlc3Quc3RhdGljRmlsZXNbXCIvNTAwXCJdKSB7XG4gICAgd3JpdGUoam9pbihyb290LCBtYW5pZmVzdC5zdGF0aWNGaWxlc1tcIi81MDBcIl0pLCBFUlJPUl9IVE1MKTtcbiAgfVxuICBmb3IgKGNvbnN0IFtmaWxlLCBjb250ZW50c10gb2YgT2JqZWN0LmVudHJpZXMoUFVCTElDX0ZJTEVTKSkge1xuICAgIHdyaXRlKGpvaW4ocm9vdCwgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLCBcInB1YmxpY1wiLCBmaWxlKSwgY29udGVudHMpO1xuICB9XG4gIC8vIEFzeW5jIG9uIHB1cnBvc2U6IGBsb2FkUnVudGltZWAgaGFzIHRvIGF3YWl0IGByZWdpc3RlcigpYCwgbm90IGp1c3QgY2FsbCBpdC5cbiAgd3JpdGUoXG4gICAgam9pbihyb290LCBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsIFwiLm5leHQvc2VydmVyL2luc3RydW1lbnRhdGlvbi5qc1wiKSxcbiAgICBcImV4cG9ydHMucmVnaXN0ZXIgPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dCgoKSA9PiB7XCIgK1xuICAgICAgXCIgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX1JFR0lTVEVSRUQgPSAneWVzJzsgcmVzb2x2ZSgpOyB9LCAxMCkpO1xcblwiLFxuICApO1xuICAvLyBgLmVudmAgcmF0aGVyIHRoYW4gYC5lbnYucHJvZHVjdGlvbmA6IGBAbmV4dC9lbnZgIHBpY2tzIHRoZSBtb2RlIGZyb21cbiAgLy8gTk9ERV9FTlYsIHdoaWNoIGplc3Qgc2V0cyB0byBcInRlc3RcIi5cbiAgd3JpdGUoXG4gICAgam9pbihyb290LCBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsIFwiLmVudlwiKSxcbiAgICBcIkNES19ORVhUSlNfVEVTVF9GUk9NX0VOVl9GSUxFPWZyb20tZmlsZVxcbkNES19ORVhUSlNfVEVTVF9TRVRfQllfTEFNQkRBPWZyb20tZmlsZVxcblwiLFxuICApO1xuICByZXR1cm4gcm9vdDtcbn1cblxubGV0IHJvb3Q6IHN0cmluZztcbmxldCBydW50aW1lOiBOZXh0anNSdW50aW1lO1xuY29uc3Qgb3JpZ2luYWxDd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG5iZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfU0VUX0JZX0xBTUJEQSA9IFwiZnJvbS1sYW1iZGFcIjtcbiAgcm9vdCA9IHN0YWdlRGVwbG95bWVudCgpO1xuICAvLyBgbG9hZFJ1bnRpbWVgIGNoZGlycywgd2hpY2ggaXMgdGhlIHBvaW50IG9mIGl0LlxuICBydW50aW1lID0gYXdhaXQgbG9hZFJ1bnRpbWUocm9vdCk7XG59KTtcblxuYWZ0ZXJBbGwoKCkgPT4ge1xuICBwcm9jZXNzLmNoZGlyKG9yaWdpbmFsQ3dkKTtcbiAgamVzdC5yZXN0b3JlQWxsTW9ja3MoKTtcbn0pO1xuXG4vKiogT25lIHJlcXVlc3QgdGhyb3VnaCB0aGUgcmVhbCBgaGFuZGxlYCwgd2l0aCB0aGUgcmVzcG9uc2UgY29sbGVjdGVkLiAqL1xuYXN5bmMgZnVuY3Rpb24gc2VuZChcbiAgcmVxdWVzdDogUGFydGlhbDxSdW50aW1lUmVxdWVzdD4gJiB7IHVybDogc3RyaW5nIH0sXG4gIHBhZEVtcHR5Qm9keSA9IGZhbHNlLFxuKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKHBhZEVtcHR5Qm9keSk7XG4gIGF3YWl0IHJ1bnRpbWUuaGFuZGxlKFxuICAgIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICAuLi5yZXF1ZXN0LFxuICAgIH0sXG4gICAgc2luayxcbiAgKTtcbiAgcmV0dXJuIHNpbms7XG59XG5cbi8qKiBUaGUgSlNPTiBhbiBlbnRyeXBvaW50IHN0dWIgYW5zd2VycyB3aXRoLiAqL1xuZnVuY3Rpb24gc3R1YkJvZHkoc2luazogQ29sbGVjdGluZ1NpbmspOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IGVuY29kaW5nID0gc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXTtcbiAgY29uc3QgYm9keSA9IGVuY29kaW5nID09PSBcImd6aXBcIiA/IGd1bnppcFN5bmMoc2luay5ib2R5KSA6IHNpbmsuYm9keTtcbiAgcmV0dXJuIEpTT04ucGFyc2UoYm9keS50b1N0cmluZyhcInV0Zi04XCIpKTtcbn1cblxuZGVzY3JpYmUoXCJsb2FkUnVudGltZVwiLCAoKSA9PiB7XG4gIGl0KFwiY2hkaXJzIHRvIHRoZSBzdGFnZWQgcHJvamVjdCBkaXIsIGJlY2F1c2UgZW50cnlwb2ludHMgcmVzb2x2ZSBhZ2FpbnN0IGN3ZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHByb2Nlc3MuY3dkKCkpLnRvQmUoam9pbihyb290LCBcImFwcC1wbGF5Z3JvdW5kXCIpKTtcbiAgfSk7XG5cbiAgaXQoXCJsb2FkcyB0aGUgc3RhZ2VkIGVudiBmaWxlcyB0aGUgd2F5IG5leHQgc3RhcnQgZG9lcywgd2l0aG91dCBvdmVycmlkaW5nIHRoZSBmdW5jdGlvbidzIGVudmlyb25tZW50XCIsICgpID0+IHtcbiAgICBleHBlY3QocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX0ZST01fRU5WX0ZJTEUpLnRvQmUoXCJmcm9tLWZpbGVcIik7XG4gICAgZXhwZWN0KHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9TRVRfQllfTEFNQkRBKS50b0JlKFwiZnJvbS1sYW1iZGFcIik7XG4gIH0pO1xuXG4gIGl0KFwiYXdhaXRzIGluc3RydW1lbnRhdGlvbiByZWdpc3RlcigpIGJlZm9yZSBhbnkgZW50cnlwb2ludCBvciBtaWRkbGV3YXJlIGxvYWRzLCBhcyBuZXh0IHN0YXJ0IGRvZXNcIiwgKCkgPT4ge1xuICAgIC8vIE1vZHVsZS1zY29wZSBjb2RlIGluIG1pZGRsZXdhcmUgYW5kIGVudHJ5cG9pbnRzIHJlYWRzIHdoYXQgYHJlZ2lzdGVyKClgXG4gICAgLy8gc2V0cyAoIzI3OSksIGFuZCBub3RoaW5nIGlzIGxvYWRlZCB1bnRpbCBgbG9hZFJ1bnRpbWVgIGhhcyByZXR1cm5lZC5cbiAgICBleHBlY3QocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX1JFR0lTVEVSRUQpLnRvQmUoXCJ5ZXNcIik7XG4gIH0pO1xuXG4gIGl0KFwiZXhwbGFpbnMgYSBkZXBsb3ltZW50IHBhY2thZ2Ugd2l0aCBubyBtYW5pZmVzdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW1wdHkgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcImNkay1uZXh0anMtZW1wdHktXCIpKTtcbiAgICBhd2FpdCBleHBlY3QobG9hZFJ1bnRpbWUoZW1wdHkpKS5yZWplY3RzLnRvVGhyb3coXG4gICAgICAvQ291bGQgbm90IHJlYWQgdGhlIGNkay1uZXh0anMgYWRhcHRlciBtYW5pZmVzdC8sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJleHBsYWlucyBhIGRlcGxveW1lbnQgcGFja2FnZSBtaXNzaW5nIHRoZSBzdGFnZWQgcHJvamVjdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFydGlhbCA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1wYXJ0aWFsLVwiKSk7XG4gICAgd3JpdGUoXG4gICAgICBkZXBsb3llZE1hbmlmZXN0UGF0aChwYXJ0aWFsKSxcbiAgICAgIHJlYWRGaWxlU3luYyhkZXBsb3llZE1hbmlmZXN0UGF0aChyb290KSwgXCJ1dGYtOFwiKSxcbiAgICApO1xuICAgIGF3YWl0IGV4cGVjdChsb2FkUnVudGltZShwYXJ0aWFsKSkucmVqZWN0cy50b1Rocm93KFxuICAgICAgL2RvZXMgbm90IGNvbnRhaW4gdGhlIHN0YWdlZCBOZXh0LmpzIHByb2plY3QvLFxuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiTmV4dGpzUnVudGltZS5oYW5kbGVcIiwgKCkgPT4ge1xuICBpdChcImludm9rZXMgdGhlIG1hdGNoZWQgZW50cnlwb2ludCB3aXRoIHRoZSByZXF1ZXN0TWV0YSBOZXh0LmpzIHJlYWRzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGNvbnN0IGJvZHkgPSBzdHViQm9keShzaW5rKTtcbiAgICBleHBlY3QoYm9keS5maWxlKS50b0JlKFxuICAgICAgam9pbihyb290LCBcImFwcC1wbGF5Z3JvdW5kLy5uZXh0L3NlcnZlci9hcHAvcGFnZS5qc1wiKSxcbiAgICApO1xuICAgIGV4cGVjdChib2R5LnVybCkudG9CZShcIi9cIik7XG4gICAgLy8gV2l0aG91dCBgaW5pdFVSTGAsIGBSb3V0ZU1vZHVsZS5wcmVwYXJlYCBmYWxscyBiYWNrIHRvIGBodHRwOi8vbG9jYWxob3N0YC5cbiAgICBleHBlY3QoYm9keS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly9zaG9wLmV4YW1wbGUudGVzdC9cIik7XG4gICAgZXhwZWN0KGJvZHkuaG9zdG5hbWUpLnRvQmUoXCJzaG9wLmV4YW1wbGUudGVzdFwiKTtcbiAgICBleHBlY3QoYm9keS5oYXNSZW5kZXI0MDQpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGJvZHkud2FpdFVudGlsKS50b0JlKFwiZnVuY3Rpb25cIik7XG4gICAgZXhwZWN0KGJvZHkuY3dkKS50b0JlKGpvaW4ocm9vdCwgXCJhcHAtcGxheWdyb3VuZFwiKSk7XG4gIH0pO1xuXG4gIGl0KFwidHJ1c3RzIHgtZm9yd2FyZGVkLWhvc3Qgb3ZlciB0aGUgaG9zdCBDbG91ZEZyb250IHJld3JvdGUsIHdoZW4gdGhlIHNoZWxsIHNheXMgdG9cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogXCIvXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIGhvc3Q6IFwib3JpZ2luLmNsb3VkZnJvbnQuaW50ZXJuYWxcIixcbiAgICAgICAgXCJ4LWZvcndhcmRlZC1ob3N0XCI6IFwid3d3LmV4YW1wbGUudGVzdFwiLFxuICAgICAgfSxcbiAgICAgIHRydXN0Rm9yd2FyZGVkSG9zdDogdHJ1ZSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuaW5pdFVSTCkudG9CZShcImh0dHBzOi8vd3d3LmV4YW1wbGUudGVzdC9cIik7XG4gIH0pO1xuXG4gIC8vIE9ubHkgdGhlIENsb3VkRnJvbnQgZnVuY3Rpb24gaW4gZnJvbnQgb2YgKmZ1bmN0aW9uKiBjb21wdXRlIG92ZXJ3cml0ZXMgdGhpc1xuICAvLyBoZWFkZXIsIHNvIG9uIENvbnRhaW5lcnMgYW5kIHRoZSBSZWdpb25hbCB0eXBlcyBpdCBhcnJpdmVzIGZyb20gdGhlIGNsaWVudDpcbiAgLy8gaG9ub3JpbmcgaXQgbGV0IGBYLUZvcndhcmRlZC1Ib3N0OiBldmlsLmV4YW1wbGVgIHBvaW50IGV2ZXJ5IGFic29sdXRlIFVSTFxuICAvLyB0aGUgYXBwIGJ1aWx0LCBhIHBhc3N3b3JkLXJlc2V0IGxpbmsgc2F5LCBhdCBldmlsLmV4YW1wbGUuXG4gIGl0KFwiaWdub3JlcyB4LWZvcndhcmRlZC1ob3N0IHVubGVzcyB0aGUgc2hlbGwgdHJ1c3RzIGl0LCBsaWtlIG5leHQgc3RhcnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogXCIvXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIixcbiAgICAgICAgXCJ4LWZvcndhcmRlZC1ob3N0XCI6IFwiZXZpbC5leGFtcGxlXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly9zaG9wLmV4YW1wbGUudGVzdC9cIik7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmhvc3RuYW1lKS50b0JlKFwic2hvcC5leGFtcGxlLnRlc3RcIik7XG4gIH0pO1xuXG4gIC8vIEEgdmFsdWUgdGhhdCBjYW5ub3QgYmUgYSBVUkwgYXV0aG9yaXR5IG1hZGUgYG5ldyBVUkxgIHRocm93LCBhbmQgb24gdGhlXG4gIC8vIExhbWJkYSBzaGVsbHMg4oCUIHdob3NlIGhhbmRsZXJzIHdyYXAgbm90aGluZyDigJQgdGhhdCBpcyBhbiBpbnZvY2F0aW9uIGVycm9yIGFuZFxuICAvLyBhIDUwMiByYXRoZXIgdGhhbiBhIHJlc3BvbnNlLlxuICBpdC5lYWNoKFtcbiAgICBbXCJhIHNwYWNlXCIsIFwiZXhhIG1wbGUudGVzdFwiXSxcbiAgICBbXCJhIHNjaGVtZVwiLCBcImh0dHBzOi8vd3d3LmV4YW1wbGUudGVzdFwiXSxcbiAgICBbXCJhIHBhdGhcIiwgXCJ3d3cuZXhhbXBsZS50ZXN0L2V2aWxcIl0sXG4gICAgW1wiY3JlZGVudGlhbHNcIiwgXCJ1c2VyQHd3dy5leGFtcGxlLnRlc3RcIl0sXG4gICAgW1wibm90aGluZ1wiLCBcIlwiXSxcbiAgXSkoXG4gICAgXCJpZ25vcmVzIGFuIHgtZm9yd2FyZGVkLWhvc3QgY29udGFpbmluZyAlcyBhbmQgZmFsbHMgYmFjayB0byBob3N0XCIsXG4gICAgYXN5bmMgKF9sYWJlbCwgZm9yd2FyZGVkKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICAgIHVybDogXCIvXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsXG4gICAgICAgICAgXCJ4LWZvcndhcmRlZC1ob3N0XCI6IGZvcndhcmRlZCxcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1c3RGb3J3YXJkZWRIb3N0OiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuaW5pdFVSTCkudG9CZShcImh0dHBzOi8vc2hvcC5leGFtcGxlLnRlc3QvXCIpO1xuICAgIH0sXG4gICk7XG5cbiAgLy8gTXVsdGlwbGUgcHJveGllcyBlYWNoIGFwcGVuZCwgYW5kIG9ubHkgdGhlIGZpcnN0IHZhbHVlIGlzIHRoaXMgaG9wJ3MuXG4gIGl0KFwidGFrZXMgdGhlIGZpcnN0IHZhbHVlIG9mIGEgY29tbWEtam9pbmVkIHgtZm9yd2FyZGVkLWhvc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogXCIvXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIGhvc3Q6IFwib3JpZ2luLmNsb3VkZnJvbnQuaW50ZXJuYWxcIixcbiAgICAgICAgXCJ4LWZvcndhcmRlZC1ob3N0XCI6IFwid3d3LmV4YW1wbGUudGVzdCwgaW5uZXIuZXhhbXBsZS50ZXN0XCIsXG4gICAgICB9LFxuICAgICAgdHJ1c3RGb3J3YXJkZWRIb3N0OiB0cnVlLFxuICAgIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly93d3cuZXhhbXBsZS50ZXN0L1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJpZ25vcmVzIGFuIHgtZm9yd2FyZGVkLXByb3RvIHRoYXQgaXMgbm90IGh0dHAgb3IgaHR0cHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogXCIvXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIixcbiAgICAgICAgXCJ4LWZvcndhcmRlZC1wcm90b1wiOiBcImphdmFzY3JpcHRcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmluaXRVUkwpLnRvQmUoXCJodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0L1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJoYW5kcyBhIGR5bmFtaWMgcm91dGUgaXRzIHBhcmFtcyBhcyBueHRQIHF1ZXJ5IHZhbHVlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL2lzci80MlwiIH0pO1xuICAgIGNvbnN0IGJvZHkgPSBzdHViQm9keShzaW5rKTtcbiAgICBleHBlY3QoYm9keS5maWxlKS50b0JlKFxuICAgICAgam9pbihyb290LCBcImFwcC1wbGF5Z3JvdW5kLy5uZXh0L3NlcnZlci9hcHAvaXNyL1tpZF0vcGFnZS5qc1wiKSxcbiAgICApO1xuICAgIC8vIFRoZSBkb2N1bWVudGVkIGRlcGxveWVkLXByb3h5IGNvbnRyYWN0OiBgcHJlcGFyZSgpYCByZWNvdmVycyBgcGFyYW1zYFxuICAgIC8vIGZyb20gdGhlc2UsIHdoaWNoIGlzIHdoeSBgcmVxdWVzdE1ldGEucGFyYW1zYCBpcyBsZWZ0IHVuc2V0LlxuICAgIGV4cGVjdChib2R5LnVybCkudG9CZShcIi9pc3IvNDI/bnh0UGlkPTQyXCIpO1xuICAgIGV4cGVjdChib2R5LnF1ZXJ5KS50b0VxdWFsKHsgbnh0UGlkOiBcIjQyXCIgfSk7XG4gICAgZXhwZWN0KGJvZHkucGFyYW1zKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICBpdChcImhhbmRzIG92ZXIgYSBjYXB0dXJlIHdpdGggYW4gZW5jb2RlZCBkZWxpbWl0ZXIgYXMgcmVxdWVzdE1ldGEucGFyYW1zXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBUaGUgb25lIGV4Y2VwdGlvbiB0byB0aGUgY29udHJhY3QgYWJvdmUsIGJlY2F1c2UgdHdvIGRlY29kZXMgYW5kIGEgc3BsaXRcbiAgICAvLyB3b3VsZCB0dXJuIHRoaXMgaW50byB0aHJlZSBwYXJhbXMgYW5kIG1ha2UgYG5vcm1hbGl6ZVBhZ2VQYXRoYCB0aHJvdzsgc2VlXG4gICAgLy8gYG91dE9mQmFuZFJvdXRlUGFyYW1zYC4gVGhlIGBueHRQYCB2YWx1ZSBoYXMgdG8gKmxlYXZlKiB0aGUgcXVlcnkg4oCUIGFuZFxuICAgIC8vIHRoZXJlZm9yZSB0aGUgVVJMIOKAlCBvciBgcHJlcGFyZWAgcHJlZmVycyBpdCBhbmQgdGhlIHNwbGl0IGlzIGJhY2suXG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL2lzci9hJTJGYlwiIH0pO1xuICAgIGNvbnN0IGJvZHkgPSBzdHViQm9keShzaW5rKTtcbiAgICBleHBlY3QoYm9keS51cmwpLnRvQmUoXCIvaXNyL2ElMkZiXCIpO1xuICAgIGV4cGVjdChib2R5LnF1ZXJ5KS50b0VxdWFsKHt9KTtcbiAgICBleHBlY3QoYm9keS5wYXJhbXMpLnRvRXF1YWwoeyBpZDogXCJhL2JcIiB9KTtcbiAgfSk7XG5cbiAgaXQoXCJydW5zIG1pZGRsZXdhcmUgYW5kIGFwcGxpZXMgdGhlIHJlcXVlc3QgaGVhZGVycyBpdCBvdmVycm9kZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL1wiIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5oZWFkZXIpLnRvQmUoXCJ5ZXNcIik7XG4gIH0pO1xuXG4gIGl0KFwic2VydmVzIGEgc3RhdGljIGZpbGUgb3V0IG9mIHRoZSBzdGFnZWQgdHJlZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL2Zhdmljb24uaWNvXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkpLnRvRXF1YWwoRkFWSUNPTik7XG4gICAgLy8gVHlwZWQgZnJvbSB0aGUgcm91dGUncyBleHRlbnNpb24sIG5vdCB0aGUgZmlsZSdzOiBhIHN0YXRpYyBtZXRhZGF0YSByb3V0ZVxuICAgIC8vIGlzIHN0YWdlZCBhcyBgZmF2aWNvbi5pY28uYm9keWAsIGFuZCBgLmJvZHlgIGlzIG5vdCBhIG1lZGlhIHR5cGUuIFNlZVxuICAgIC8vIGBzZXRCb2R5RmlsZUNvbnRlbnRUeXBlYCBpbiBzdGF0aWMtZmlsZXMudHMuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSkudG9CZShcImltYWdlL3gtaWNvblwiKTtcbiAgfSk7XG5cbiAgaXQoXCJzZXJ2ZXMgcHVibGljLyBvZmYgZGlzaywgdW5kZXIgdGhlIG5hbWUgdGhlIGZpbGUgYWN0dWFsbHkgaGFzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXN5bmMgKHVybDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybCB9KTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICAgIHJldHVybiBzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKTtcbiAgICB9O1xuICAgIGV4cGVjdChhd2FpdCBib2R5KFwiL3Rlc3QudHh0XCIpKS50b0JlKFwiaGVsbG8gZnJvbSBwdWJsaWNcIik7XG4gICAgLy8gYHNlbmRgIGRlY29kZXMgdGhlIHBhdGggaXQgaXMgZ2l2ZW4sIHNvIGEgcmF3IGZpbGVzeXN0ZW0gcGF0aCBmYWlsZWQgdG9cbiAgICAvLyBkZWNvZGUgKGAxMDAlLnBuZ2AsIGFuIGVtcHR5IDQwMCkgb3IgZGVjb2RlZCB0byBhbm90aGVyIGZpbGUuXG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvMTAwJTI1LnBuZ1wiKSkudG9CZShcImEgbGl0ZXJhbCBwZXJjZW50XCIpO1xuICAgIGV4cGVjdChhd2FpdCBib2R5KFwiL2ElMjUyMGIudHh0XCIpKS50b0JlKFwidGhlIGZpbGUgbmFtZWQgd2l0aCBhIHBlcmNlbnRcIik7XG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvYSUyMGIudHh0XCIpKS50b0JlKFwidGhlIGZpbGUgbmFtZWQgd2l0aCBhIHNwYWNlXCIpO1xuICAgIC8vIEJvdGggd2F5cyBhIGxpbmsgY2FuIHNwZWxsIGl0LlxuICAgIGV4cGVjdChhd2FpdCBib2R5KFwiL2ltYWdlcy9sb2dvQDJ4LnBuZ1wiKSkudG9CZShcImF0IHNpZ25cIik7XG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvaW1hZ2VzL2xvZ28lNDAyeC5wbmdcIikpLnRvQmUoXCJhdCBzaWduXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgNDA1IHRvIGEgcHVibGljLyBmaWxlIHJlcXVlc3RlZCB3aXRoIGEgbWV0aG9kIG90aGVyIHRoYW4gR0VUXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBgc2VuZGAgc2VydmVzIGFueSBtZXRob2Q7IGBuZXh0IHN0YXJ0YCBkb2VzIG5vdC5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvdGVzdC50eHRcIiwgbWV0aG9kOiBcIkRFTEVURVwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA1KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmFsbG93KS50b0JlKFwiR0VULCBIRUFEXCIpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkubm90LnRvQ29udGFpbihcImhlbGxvIGZyb20gcHVibGljXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgYW4gdW5rbm93biBwYXRoIHRocm91Z2ggdGhlIC9fbm90LWZvdW5kIGVudHJ5cG9pbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9ub3BlP3E9MVwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuZmlsZSkudG9CZShcbiAgICAgIGpvaW4ocm9vdCwgXCJhcHAtcGxheWdyb3VuZC8ubmV4dC9zZXJ2ZXIvYXBwL19ub3QtZm91bmQvcGFnZS5qc1wiKSxcbiAgICApO1xuICAgIC8vIFRoZSByZXF1ZXN0ZWQgcGF0aCwgbm90IGAvX25vdC1mb3VuZGA6IHRoZSBBcHAgUm91dGVyIHB1dHMgdGhpcyBpbiB0aGUgUlNDXG4gICAgLy8gcGF5bG9hZCBhcyB0aGUgY2Fub25pY2FsIFVSTCwgc28gcmVuZGVyaW5nIHRoZSBtb2R1bGUgYWdhaW5zdCBpdHMgb3duXG4gICAgLy8gcGF0aG5hbWUgd291bGQgaGFuZCB0aGUgY2xpZW50IHRoZSB3cm9uZyBgdXNlUGF0aG5hbWUoKWAgYW5kIGhpc3RvcnkgZW50cnkuXG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLnVybCkudG9CZShcIi9ub3BlP3E9MVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJjYXRjaGVzIHVwIG9uIGNhY2hlIHRhZ3MgYmVmb3JlIHJlbmRlcmluZyBhIHBhZ2Ugb3IgdGhlIC9fbm90LWZvdW5kIHBhZ2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbCA9IGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj47XG4gICAgY29uc3QgY2F0Y2hVcCA9IGplc3QuZm4oYXN5bmMgKHJlbmRlcjogKCkgPT4gUHJvbWlzZTx1bmtub3duPikgPT4gcmVuZGVyKCkpO1xuICAgIGNvbnN0IHByZXZpb3VzID0gZ2xvYmFsW1RBR19NQU5JRkVTVF9TWU1CT0xdO1xuICAgIGdsb2JhbFtUQUdfTUFOSUZFU1RfU1lNQk9MXSA9IHsgY2F0Y2hVcCB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kKHsgdXJsOiBcIi9cIiB9KTtcbiAgICAgIGV4cGVjdChjYXRjaFVwKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBhd2FpdCBzZW5kKHsgdXJsOiBcIi9ub3BlXCIgfSk7XG4gICAgICBleHBlY3QoY2F0Y2hVcCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBnbG9iYWxbVEFHX01BTklGRVNUX1NZTUJPTF0gPSBwcmV2aW91cztcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhbiB1bmtub3duIHBhdGggbm8tc3RvcmUsIHdoYXRldmVyIHRoZSAvX25vdC1mb3VuZCBlbnRyeSBzZW5kc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQSBwcmVyZW5kZXJlZCBgL19ub3QtZm91bmRgIGlzIGEgY2FjaGUgSElUIHdpdGggYSB5ZWFyLWxvbmcgYHMtbWF4YWdlYCxcbiAgICAvLyBhbmQgdGhlIENETiB3b3VsZCBrZWVwIHRoaXMgNDA0IGZvciB0aGF0IGxvbmcg4oCUIHBhc3QgdGhlIGRlcGxveSB0aGF0IGFkZHNcbiAgICAvLyB0aGUgcm91dGUuIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIGFuIHVubWF0Y2hlZCBwYXRoIG5vLXN0b3JlLlxuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogYC9ub3BlP2NhY2hlQ29udHJvbD0ke2VuY29kZVVSSUNvbXBvbmVudChcInMtbWF4YWdlPTMxNTM2MDAwXCIpfWAsXG4gICAgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFxuICAgICAgXCJwcml2YXRlLCBuby1jYWNoZSwgbm8tc3RvcmUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlXCIsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZW5kZXJzIHRoZSA0MDQgcGFnZSB3aGVuIGEgcm91dGUgY2FsbHMgcmVxdWVzdE1ldGEucmVuZGVyNDA0KClcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmVuZGVyNDA0PTFcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgLy8gV2hhdGV2ZXIgdGhlIHJvdXRlIHRoYXQgZ2F2ZSB1cCB3YXMgcmVuZGVyaW5nLCBmb3IgdGhlIHNhbWUgcmVhc29uLlxuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS51cmwpLnRvQmUoXCIvP3JlbmRlcjQwND0xXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhIHJlbmRlcjQwNCgpIDQwNCB0aGUgQ2FjaGUtQ29udHJvbCBpdHMgcm91dGUgZ2F2ZSBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gYG5vdEZvdW5kKClgIGZyb20gYW4gSVNSIHBhZ2UgaXMgYSBjYWNoZWFibGUgcmVzdWx0IG9mIHRoYXQgcGFnZSwga2VwdCBmb3JcbiAgICAvLyBpdHMgcmV2YWxpZGF0ZSBwZXJpb2QsIHNvIHRoZSBuby1zdG9yZSBmb3IgdW5tYXRjaGVkIHBhdGhzIG11c3Qgbm90XG4gICAgLy8gcmVhY2ggaXQuXG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBgLz9yZW5kZXI0MDQ9MSZjYWNoZUNvbnRyb2w9JHtlbmNvZGVVUklDb21wb25lbnQoXCJzLW1heGFnZT02MFwiKX1gLFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcInMtbWF4YWdlPTYwXCIpO1xuICB9KTtcblxuICBpdChcInJ1bnMgcmVxdWVzdE1ldGEucmV2YWxpZGF0ZSgpIGFnYWluc3QgaXRzZWxmLCBub3Qgb3ZlciB0aGUgbmV0d29ya1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZXZhbGlkYXRlPSUyRlwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykpLnRvRXF1YWwoeyByZXZhbGlkYXRlZDogdHJ1ZSwgZXJyb3I6IG51bGwgfSk7XG4gIH0pO1xuXG4gIGl0KFwicmVuZGVycyBhIHJldmFsaWRhdGlvbiBmb3IgdGhlIHB1YmxpYyBvcmlnaW4gdGhlIGNhbGxlciB3YXMgc2VydmVkIG9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXIgPSBqb2luKHJvb3QsIFwicmV2YWxpZGF0ZS1vcmlnaW4tbWFya2VyXCIpO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9NQVJLRVIgPSBtYXJrZXI7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmQoe1xuICAgICAgICB1cmw6IFwiLz9yZXZhbGlkYXRlPSUyRiUzRnJlY29yZE9yaWdpbiUzRDFcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGhvc3Q6IFwiYWJjMTIzLmxhbWJkYS11cmwudXMtZWFzdC0xLm9uLmF3c1wiLFxuICAgICAgICAgIFwieC1mb3J3YXJkZWQtaG9zdFwiOiBcInNob3AuZXhhbXBsZS50ZXN0XCIsXG4gICAgICAgICAgXCJ4LWZvcndhcmRlZC1wcm90b1wiOiBcImh0dHBzXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHRydXN0Rm9yd2FyZGVkSG9zdDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlYWRGaWxlU3luYyhtYXJrZXIsIFwidXRmLThcIikpLnRvQmUoXG4gICAgICAgIFwiaHR0cHM6Ly9zaG9wLmV4YW1wbGUudGVzdC8/cmVjb3JkT3JpZ2luPTFcIixcbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfTUFSS0VSO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJmYWlscyBhIHJldmFsaWRhdGlvbiB3aG9zZSB0YXJnZXQgZGlkIG5vdCBhbnN3ZXIgMjAwXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvP3JldmFsaWRhdGU9JTJGJTNGc3RhdHVzJTNENTAwXCIgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspKS50b0VxdWFsKHtcbiAgICAgIHJldmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGVycm9yOiBcIkludmFsaWQgcmVzcG9uc2UgNTAwXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiaW52YWxpZGF0aW5nIHRoZSBDRE4gY29weSBvZiBhIHJldmFsaWRhdGVkIHBhZ2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2tLZXkgPSBSRVZBTElEQVRFRF9QQUdFX0hPT0s7XG4gICAgY29uc3QgZ2xvYmFscyA9IGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj47XG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBnbG9iYWxzW2hvb2tLZXldO1xuICAgIH0pO1xuXG4gICAgaXQoXCJoYW5kcyB0aGUgY2FjaGUgaGFuZGxlcidzIGhvb2sgdGhlIHBhZ2UgYW5kIGl0cyBfbmV4dC9kYXRhIHJvdXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhvb2sgPSBqZXN0LmZuKGFzeW5jICgpID0+IHt9KTtcbiAgICAgIGdsb2JhbHNbaG9va0tleV0gPSBob29rO1xuICAgICAgYXdhaXQgc2VuZCh7IHVybDogXCIvP3JldmFsaWRhdGU9JTJGaXNyJTJGNDJcIiB9KTtcbiAgICAgIGV4cGVjdChob29rKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBleHBlY3QoaG9vaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoW1xuICAgICAgICBcIi9pc3IvNDJcIixcbiAgICAgICAgYC9fbmV4dC9kYXRhLyR7cnVudGltZS5tYW5pZmVzdC5idWlsZElkfS9pc3IvNDIuanNvbmAsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwibmFtZXMgdGhlIHJvb3QncyBkYXRhIHJvdXRlIGluZGV4Lmpzb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaG9vayA9IGplc3QuZm4oYXN5bmMgKCkgPT4ge30pO1xuICAgICAgZ2xvYmFsc1tob29rS2V5XSA9IGhvb2s7XG4gICAgICBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkZcIiB9KTtcbiAgICAgIGV4cGVjdChob29rKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXG4gICAgICAgIFwiL1wiLFxuICAgICAgICBgL19uZXh0L2RhdGEvJHtydW50aW1lLm1hbmlmZXN0LmJ1aWxkSWR9L2luZGV4Lmpzb25gLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIG5vdGhpbmcgd2hlbiB0aGUgcmV2YWxpZGF0aW9uIGZhaWxlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBob29rID0gamVzdC5mbihhc3luYyAoKSA9PiB7fSk7XG4gICAgICBnbG9iYWxzW2hvb2tLZXldID0gaG9vaztcbiAgICAgIGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZXZhbGlkYXRlPSUyRiUzRnN0YXR1cyUzRDUwMFwiIH0pO1xuICAgICAgZXhwZWN0KGhvb2spLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInN0aWxsIHJlcG9ydHMgc3VjY2VzcyB3aGVuIHRoZSBpbnZhbGlkYXRpb24gZmFpbHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgICBnbG9iYWxzW2hvb2tLZXldID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUb29NYW55SW52YWxpZGF0aW9uc0luUHJvZ3Jlc3NcIik7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZXZhbGlkYXRlPSUyRlwiIH0pO1xuICAgICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspKS50b0VxdWFsKHsgcmV2YWxpZGF0ZWQ6IHRydWUsIGVycm9yOiBudWxsIH0pO1xuICAgICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdChcInN0cmlwcyB0aGUgaW50ZXJuYWwgaGVhZGVycyBuZXh0IHN0YXJ0IGRvZXMgbm90IGhvbm9yIGZyb20gYSBjbGllbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogXCIvXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIixcbiAgICAgICAgXCJuZXh0LXJlc3VtZVwiOiBcIjFcIixcbiAgICAgICAgXCJ4LW1hdGNoZWQtcGF0aFwiOiBcIi9hZG1pblwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmV4dFJlc3VtZTogbnVsbCxcbiAgICAgIG1hdGNoZWRQYXRoOiBudWxsLFxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCBpbWFnZXMgPSAoKSA9PlxuICAgIChcbiAgICAgIHJ1bnRpbWUgYXMgdW5rbm93biBhcyB7XG4gICAgICAgIGltYWdlczoge1xuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGZldGNoSW50ZXJuYWw6IChcbiAgICAgICAgICAgICAgaHJlZjogc3RyaW5nLFxuICAgICAgICAgICAgICByZXE6IFNoaW1JbmNvbWluZ01lc3NhZ2UsXG4gICAgICAgICAgICAgIG1heGltdW1Cb2R5OiBudW1iZXIsXG4gICAgICAgICAgICApID0+IFByb21pc2U8e1xuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gICAgICAgICAgICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgICBib2R5OiBCdWZmZXI7XG4gICAgICAgICAgICAgIHRvb0xhcmdlPzogYm9vbGVhbjtcbiAgICAgICAgICAgIH0+O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKS5pbWFnZXM7XG5cbiAgaXQoXCJmZXRjaGVzIGFuIGltYWdlIHNvdXJjZSBmcm9tIGEgcm91dGUgaGFuZGxlciwgaW4gcHJvY2VzcyBhbmQgd2l0aG91dCBjb29raWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB2aWV3ZXIgPSBuZXcgU2hpbUluY29taW5nTWVzc2FnZSh7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICB1cmw6IFwiL19uZXh0L2ltYWdlP3VybD0lMkZhcGklMkZoZWFsdGglM0ZhdmF0YXIlM0Q0MiZ3PTY0JnE9NzVcIixcbiAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCBjb29raWU6IFwic2Vzc2lvbj1zZWNyZXRcIiB9LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaW1hZ2VzKCkub3B0aW9ucy5mZXRjaEludGVybmFsKFxuICAgICAgXCIvYXBpL2hlYWx0aD9hdmF0YXI9NDJcIixcbiAgICAgIHZpZXdlcixcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG4gICAgZXhwZWN0KHJlc3BvbnNlLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXNwb25zZS5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpO1xuICAgIGV4cGVjdChib2R5LmZpbGUpLnRvQ29udGFpbihcImFwaS9oZWFsdGhcIik7XG4gICAgZXhwZWN0KGJvZHkudXJsKS50b0JlKFwiL2FwaS9oZWFsdGg/YXZhdGFyPTQyXCIpO1xuICAgIGV4cGVjdChib2R5LmluaXRVUkwpLnRvQmUoXCJodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0L2FwaS9oZWFsdGg/YXZhdGFyPTQyXCIpO1xuICAgIGV4cGVjdChib2R5LmNvb2tpZSkudG9CZU51bGwoKTtcbiAgfSk7XG5cbiAgLy8gYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YDogYSByb3V0ZSBzdHJlYW1pbmcgYSBsYXJnZSBib2R5IG11c3Qgbm90IGJlXG4gIC8vIGJ1ZmZlcmVkIHdob2xlLCBhcyBgbmV4dCBzdGFydGAncyBgZmV0Y2hJbnRlcm5hbEltYWdlYCBkb2VzIG5vdC5cbiAgaXQoXCJzdG9wcyByZWFkaW5nIGFuIGltYWdlIHNvdXJjZSByb3V0ZSBwYXN0IG1heGltdW1SZXNwb25zZUJvZHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaW1hZ2VzKCkub3B0aW9ucy5mZXRjaEludGVybmFsKFxuICAgICAgICBcIi9hcGkvaGVhbHRoP2F2YXRhcj00MlwiLFxuICAgICAgICBuZXcgU2hpbUluY29taW5nTWVzc2FnZSh7XG4gICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgIHVybDogXCIvX25leHQvaW1hZ2U/dXJsPSUyRmFwaSUyRmhlYWx0aCUzRmF2YXRhciUzRDQyJnc9NjQmcT03NVwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICAgIH0pLFxuICAgICAgICAxMCxcbiAgICAgICk7XG4gICAgICBleHBlY3QocmVzcG9uc2UudG9vTGFyZ2UpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzcG9uc2UuYm9keS5sZW5ndGgpLnRvQmUoMCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcInJlZGlyZWN0cyBhIHRyYWlsaW5nIHNsYXNoLCB3aXRoIHRoZSBSZWZyZXNoIGZhbGxiYWNrIGZvciBhIDMwOFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL2lzci80Mi9cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDMwOCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5sb2NhdGlvbikudG9CZShcIi9pc3IvNDJcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5yZWZyZXNoKS50b0JlKFwiMDt1cmw9L2lzci80MlwiKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCIvaXNyLzQyXCIpO1xuICB9KTtcblxuICBpdChcImd6aXBzIGEgc3RyZWFtZWQgSFRNTCByZXNwb25zZSBmb3IgYSBjbGllbnQgdGhhdCBhY2NlcHRzIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IFwiL1wiLFxuICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIFwiYWNjZXB0LWVuY29kaW5nXCI6IFwiZ3ppcFwiIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmUoXCJnemlwXCIpO1xuICAgIGV4cGVjdChndW56aXBTeW5jKHNpbmsuYm9keSkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9Db250YWluKFwiaW5pdFVSTFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhd2FpdHMgd2FpdFVudGlsIHdvcmsgYmVmb3JlIHJlc29sdmluZywgc2luY2UgTGFtYmRhIGZyZWV6ZXMgb24gcmV0dXJuXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXIgPSBqb2luKHJvb3QsIFwid2FpdHVudGlsLW1hcmtlclwiKTtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfTUFSS0VSID0gbWFya2VyO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/d2FpdFVudGlsPTFcIiB9KTtcbiAgICAgIC8vIFdyaXR0ZW4gYnkgYSB0aW1lciB0aGUgZW50cnlwb2ludCByZWdpc3RlcmVkLCBhZnRlciB0aGUgcmVzcG9uc2UgZW5kZWQuXG4gICAgICBleHBlY3QocmVhZEZpbGVTeW5jKG1hcmtlciwgXCJ1dGYtOFwiKSkudG9CZShcImRvbmVcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfTUFSS0VSO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJzZXJ2ZXMgdGhlIHByZXJlbmRlcmVkIDUwMCB3aGVuIGFuIGVudHJ5cG9pbnQgdGhyb3dzIGJlZm9yZSBzZW5kaW5nIGEgaGVhZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvP2Jvb209MVwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNTAwKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoRVJST1JfSFRNTCk7XG4gICAgLy8gQSBgQ2FjaGUtQ29udHJvbGAgdGhlIHJlbmRlciB0aGF0IHRocmV3IGhhZCBhbHJlYWR5IHNldCB3b3VsZCBvdGhlcndpc2VcbiAgICAvLyBzdGF5IG9uIHRoZSByZXNwb25zZSBhbmQgZ2V0IHRoZSA1MDAgY2FjaGVkIGF0IHRoZSBlZGdlLlxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFxuICAgICAgXCJwcml2YXRlLCBuby1jYWNoZSwgbm8tc3RvcmUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlXCIsXG4gICAgKTtcbiAgICBleHBlY3QoZXJyb3IpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgXCJVbmhhbmRsZWQgZXJyb3Igd2hpbGUgaGFuZGxpbmcgdGhlIHJlcXVlc3Q6XCIsXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IG1lc3NhZ2U6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiZXhwbG9kZWRcIikgfSksXG4gICAgKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcInN0cmVhbXMgbWlkZGxld2FyZSdzIG93biBSZXNwb25zZSB3aGVuIGl0IGFuc3dlcnMgdGhlIHJlcXVlc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEEgc2Vjb25kIGRlcGxveW1lbnQsIGJlY2F1c2UgdGhlIG1pZGRsZXdhcmUgbW9kdWxlIGlzIG1lbW9pemVkIHBlciBydW50aW1lLlxuICAgIGNvbnN0IHJlc3BvbmRpbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChgXG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PlxuICBuZXcgUmVzcG9uc2UoXCJkZW5pZWRcIiwge1xuICAgIHN0YXR1czogNDAxLFxuICAgIHN0YXR1c1RleHQ6IFwiVW5hdXRob3JpemVkXCIsXG4gICAgaGVhZGVyczogW1xuICAgICAgW1wiY29udGVudC10eXBlXCIsIFwidGV4dC9wbGFpblwiXSxcbiAgICAgIFtcInNldC1jb29raWVcIiwgXCJzaWQ9OyBQYXRoPS87IGV4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVRcIl0sXG4gICAgICBbXCJzZXQtY29va2llXCIsIFwiZmxhZz0xOyBQYXRoPS9cIl0sXG4gICAgXSxcbiAgfSk7XG5gKSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCByZXNwb25kaW5nLmhhbmRsZShcbiAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IFwiL1wiLCBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9IH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgLy8gYHJlc29sdmVSb3V0ZXNgIG9ubHkgcmVwb3J0cyB0aGF0IG1pZGRsZXdhcmUgcmVzcG9uZGVkOyB0aGUgYm9keSBjb21lc1xuICAgIC8vIGJhY2sgZnJvbSB0aGUgaW52b2tlciwgb24gdGhlIGBtaWRkbGV3YXJlLXJlc3BvbmRlZGAgcmVzdWx0LlxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDAxKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNNZXNzYWdlKS50b0JlKFwiVW5hdXRob3JpemVkXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmNvb2tpZXMpLnRvRXF1YWwoW1xuICAgICAgXCJzaWQ9OyBQYXRoPS87IGV4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVRcIixcbiAgICAgIFwiZmxhZz0xOyBQYXRoPS9cIixcbiAgICBdKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJkZW5pZWRcIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhIG1pc3NpbmcgYnVpbGQgYXNzZXQgbm8tc3RvcmUsIG5vdCB1bmRlciBpdHMgaW1tdXRhYmxlIHJ1bGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEluIHRoZSBtYW5pZmVzdCBidXQgbm90IG9uIGRpc2sg4oCUIGBzdGFnZURlcGxveW1lbnRgIHdyaXRlcyBubyBjaHVua3MsIHRoZVxuICAgIC8vIHdheSBhIExhbWJkYSBwYWNrYWdlIHNoaXBzIG5vbmUgKHRoZXkgYXJlIG9uIFMzIGJlaGluZCBDbG91ZEZyb250KS5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvX25leHQvc3RhdGljL2NodW5rcy8wLXFzYjN6ejZmNGM3LmpzXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFxuICAgICAgXCJwcml2YXRlLCBuby1jYWNoZSwgbm8tc3RvcmUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlXCIsXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gYG5leHQgc3RhcnRgIGFuc3dlcnMgdGhlc2Ugd2l0aG91dCByZW5kZXJpbmcgdGhlIDQwNCBwYWdlIChgcm91dGVyLXNlcnZlci5qc2AsXG4gIC8vIHRoZSBcIjQwNCBjYXNlXCIpOiBub3RoaW5nIHdvdWxkIGRpc3BsYXkgaXQsIGFuZCByZW5kZXJpbmcgaXMgdGhlIGNvc3QuXG4gIGl0LmVhY2goW1xuICAgIFtcImEgbWlzc2luZyBidWlsZCBhc3NldFwiLCBcIi9fbmV4dC9zdGF0aWMvY2h1bmtzLzAtcXNiM3p6NmY0YzcuanNcIl0sXG4gICAgW1wiYSBidWlsZCBhc3NldCBubyBkZXBsb3kgcHJvZHVjZWRcIiwgXCIvX25leHQvc3RhdGljL2NodW5rcy9zdGFsZS0wMDAwLmpzXCJdLFxuICBdKShcImFuc3dlcnMgJXMgd2l0aCBhIHBsYWluLXRleHQgTm90IEZvdW5kXCIsIGFzeW5jIChfbmFtZSwgdXJsKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmwgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pLnRvQmUoXG4gICAgICBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIixcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFxuICAgICAgXCJwcml2YXRlLCBuby1jYWNoZSwgbm8tc3RvcmUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlXCIsXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJOb3QgRm91bmRcIik7XG4gIH0pO1xuXG4gIGl0LmVhY2goW1wiaW1hZ2VcIiwgXCJzY3JpcHRcIiwgXCJmb250XCIsIFwic3R5bGVcIl0pKFxuICAgIFwiYW5zd2VycyBhbiB1bmtub3duIHBhdGggZmV0Y2hlZCBhcyBhICVzIHN1YnJlc291cmNlIHdpdGggYSBwbGFpbi10ZXh0IE5vdCBGb3VuZFwiLFxuICAgIGFzeW5jIChkZXN0KSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICAgIHVybDogXCIvbm9wZS5wbmdcIixcbiAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIFwic2VjLWZldGNoLWRlc3RcIjogZGVzdCB9LFxuICAgICAgfSk7XG4gICAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgICAgXCJwcml2YXRlLCBuby1jYWNoZSwgbm8tc3RvcmUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiTm90IEZvdW5kXCIpO1xuICAgIH0sXG4gICk7XG5cbiAgaXQuZWFjaChbXG4gICAgLy8gQSBuYXZpZ2F0aW9uLCBhbmQgYGZldGNoKClgIOKAlCB3aGljaCBpcyBob3cgYW4gUlNDIHJlcXVlc3QgZ29lcy5cbiAgICBbXCJhIGRvY3VtZW50XCIsIFwiR0VUXCIsIFwiZG9jdW1lbnRcIl0sXG4gICAgW1wiYSBmZXRjaFwiLCBcIkdFVFwiLCBcImVtcHR5XCJdLFxuICAgIC8vIGBuZXh0IHN0YXJ0YCBvbmx5IHNob3J0LWNpcmN1aXRzIEdFVCBhbmQgSEVBRC5cbiAgICBbXCJhbiBpbWFnZSBQT1NUXCIsIFwiUE9TVFwiLCBcImltYWdlXCJdLFxuICBdKShcInN0aWxsIHJlbmRlcnMgdGhlIDQwNCBwYWdlIGZvciAlc1wiLCBhc3luYyAoX25hbWUsIG1ldGhvZCwgZGVzdCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogXCIvbm9wZVwiLFxuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIFwic2VjLWZldGNoLWRlc3RcIjogZGVzdCB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuZmlsZSkudG9Db250YWluKFwiX25vdC1mb3VuZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJzZXR0bGVzIGFuZCBkZXN0cm95cyB0aGUgcmVzcG9uc2Ugd2hlbiB0aGUgc2luayBjYW5ub3QgdGFrZSB0aGUgaGVhZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICAvLyBXaGF0IHRoZSBMYW1iZGEgc2luaydzIGB3cml0ZUhlYWRgIGRvZXMgd2l0aCBhIGhlYWRlciB2YWx1ZSBpdCByZWplY3RzLlxuICAgIGNvbnN0IGhhbmRsZWQgPSBydW50aW1lLmhhbmRsZShcbiAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IFwiL1wiLCBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9IH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luKCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgY29udGVudFwiKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhd2FpdCBleHBlY3QoaGFuZGxlZCkucmVzb2x2ZXMudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChlcnJvcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBcIlRoZSByZXNwb25zZSBzdHJlYW0gZGlkIG5vdCBjb21wbGV0ZTpcIixcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHsgbWVzc2FnZTogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoXCJoZWFkZXJcIikgfSksXG4gICAgKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcInN0cmVhbXMgYW4gdXBsb2FkIHRocm91Z2ggbWlkZGxld2FyZSB0byB0aGUgcm91dGUgaW50YWN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjaHVuayA9IEJ1ZmZlci5hbGxvYyg2NCAqIDEwMjQsIDEpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogXCIvP3JlYWRCb2R5PTFcIixcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBib2R5OiBSZWFkYWJsZS5mcm9tKEFycmF5LmZyb20oeyBsZW5ndGg6IDMyIH0sICgpID0+IGNodW5rKSksXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspKS50b0VxdWFsKHsgYm9keUxlbmd0aDogMzIgKiBjaHVuay5sZW5ndGggfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBMYW1iZGEgc2hlbGwncyBib2R5OiBhbHJlYWR5IGluIG1lbW9yeSwgYXMgYSBCdWZmZXIuXG4gIGl0KFwicGFzc2VzIGEgQnVmZmVyIHVwbG9hZCB0aHJvdWdoIG1pZGRsZXdhcmUgdG8gdGhlIHJvdXRlIGludGFjdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IEJ1ZmZlci5hbGxvYygxMDI0ICogMTAyNCwgMSk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZWFkQm9keT0xXCIsIG1ldGhvZDogXCJQT1NUXCIsIGJvZHkgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspKS50b0VxdWFsKHsgYm9keUxlbmd0aDogYm9keS5sZW5ndGggfSk7XG4gIH0pO1xuXG4gIGl0KFwicmVhZHMgbWlkZGxld2FyZSdzIGJvZHkgb25seSBhcyBmYXN0IGFzIHRoZSBjbGllbnQgdGFrZXMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHB1bGxzID0geyBjb3VudDogMCB9O1xuICAgIChnbG9iYWxUaGlzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5fX2Nka05leHRqc1B1bGxzID0gcHVsbHM7XG4gICAgY29uc3Qgc3RyZWFtaW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoYFxuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT5cbiAgbmV3IFJlc3BvbnNlKFxuICAgIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgcHVsbHMgPSBnbG9iYWxUaGlzLl9fY2RrTmV4dGpzUHVsbHM7XG4gICAgICAgIHB1bGxzLmNvdW50ICs9IDE7XG4gICAgICAgIGlmIChwdWxscy5jb3VudCA+IDEwMDApIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgZWxzZSBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoMTYgKiAxMDI0KSk7XG4gICAgICB9LFxuICAgIH0pLFxuICApO1xuYCksXG4gICAgKTtcbiAgICAvLyBBIGNsaWVudCB0aGF0IHRha2VzIG5vdGhpbmcgdW50aWwgcmVsZWFzZWQuXG4gICAgbGV0IHJlbGVhc2U6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBibG9ja2VkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IChyZWxlYXNlID0gcmVzb2x2ZSkpO1xuICAgIGNvbnN0IHNpbms6IFJlc3BvbnNlU2luayA9IHtcbiAgICAgIGJlZ2luOiAoKSA9PlxuICAgICAgICBuZXcgV3JpdGFibGUoe1xuICAgICAgICAgIHdyaXRlKF9jaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdm9pZCBibG9ja2VkLnRoZW4oKCkgPT4gY2FsbGJhY2soKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVkID0gc3RyZWFtaW5nLmhhbmRsZShcbiAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IFwiL1wiLCBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9IH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gICAgLy8gMTAwMCBjaHVua3MgYXJlIDE2IE1pQjsgYSBmZXcgaGlnaFdhdGVyTWFya3MnIHdvcnRoIGlzIGFsbCB0aGF0IG1heSBiZVxuICAgIC8vIGJ1ZmZlcmVkIGZvciBhIGNsaWVudCB0aGF0IGlzIG5vdCByZWFkaW5nLlxuICAgIGV4cGVjdChwdWxscy5jb3VudCkudG9CZUxlc3NUaGFuKDUwKTtcbiAgICByZWxlYXNlISgpO1xuICAgIGF3YWl0IGhhbmRsZWQ7XG4gICAgZXhwZWN0KHB1bGxzLmNvdW50KS50b0JlKDEwMDEpO1xuICB9KTtcblxuICBpdChcInBhZHMgYW4gZW1wdHkgYm9keSB3aGVuIHRoZSBzaGVsbCBhc2tzLCBzbyBBUEkgR2F0ZXdheSBkb2VzIG5vdCA1MDJcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKFxuICAgICAge1xuICAgICAgICB1cmw6IFwiL1wiLFxuICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiwgXCJpZi1ub25lLW1hdGNoXCI6IFwieFwiIH0sXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIC8vIEEgcmVhbCAzMDQgaXMgbm90IHJlYWNoYWJsZSB0aHJvdWdoIGEgc3R1YiBlbnRyeXBvaW50LCBzbyB0aGlzIG9ubHlcbiAgICAvLyBhc3NlcnRzIHRoZSBwYWRkaW5nIGRvZXMgbm90IGNvcnJ1cHQgYSBub3JtYWwgYm9keS5cbiAgICBleHBlY3Qoc2luay5ib2R5Lmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDEpO1xuICB9KTtcblxuICBpdChcImVtaXRzIGVhY2ggY29va2llIG1pZGRsZXdhcmUgc2V0IGV4YWN0bHkgb25jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gYEhlYWRlcnMuZW50cmllcygpYCB5aWVsZHMgYHNldC1jb29raWVgIG9uY2UgcGVyIGNvb2tpZSwgc28gYXBwZW5kaW5nIHRoZVxuICAgIC8vIHdob2xlIGBnZXRTZXRDb29raWUoKWAgYXJyYXkgcGVyIGVudHJ5IGVtaXR0ZWQgTsKyIG9mIHRoZW06IHR3byBjb29raWVzXG4gICAgLy8gYXJyaXZlZCBhdCB0aGUgYnJvd3NlciBhcyBhPTEsIGI9MiwgYT0xLCBiPTIuIEEgZHVwbGljYXRlZCBgU2V0LUNvb2tpZWAgaXNcbiAgICAvLyBub3QgaGFybWxlc3MgZWl0aGVyIC0gYSBzZXNzaW9uIGNvb2tpZSBhbmQgaXRzIG93biBjb3B5IHJhY2UuXG4gICAgY29uc3QgY29udGludWluZyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+XG4gIG5ldyBSZXNwb25zZShudWxsLCB7XG4gICAgaGVhZGVyczogW1xuICAgICAgW1wieC1taWRkbGV3YXJlLW5leHRcIiwgXCIxXCJdLFxuICAgICAgW1wic2V0LWNvb2tpZVwiLCBcImE9MTsgUGF0aD0vXCJdLFxuICAgICAgW1wic2V0LWNvb2tpZVwiLCBcImI9MjsgUGF0aD0vXCJdLFxuICAgIF0sXG4gIH0pO1xuYCksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgY29udGludWluZy5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBcIi9cIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmNvb2tpZXMpLnRvRXF1YWwoW1wiYT0xOyBQYXRoPS9cIiwgXCJiPTI7IFBhdGg9L1wiXSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogTmV4dC5qcydzIHBhZ2UgaGFuZGxlcnMgcmVwb3J0IGFuIGVycm9yIGFuZCB0aGVuIHJldGhyb3csIGxlYXZpbmcgdGhlIGVycm9yIHBhZ2VcbiAqIHRvIHdoYXRldmVyIGhvc3RzIHRoZW0sIHNvIHRoaXMgbGFkZGVyIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgbWFrZXMgYVxuICogYHBhZ2VzL19lcnJvcmAgcmVhY2hhYmxlLiBgdGVzdC9lMmUvYXN5bmMtbW9kdWxlc2AgaXMgdGhlIG1lYXN1cmVtZW50OlxuICogYC9tYWtlLWVycm9yYCB0aHJvd3MgaW4gYGdldFNlcnZlclNpZGVQcm9wc2AgYW5kIGV4cGVjdHMgXCJoZWxsbyBlcnJvclwiLlxuICovXG5kZXNjcmliZShcImEgUGFnZXMgQVBJIHJvdXRlXCIsICgpID0+IHtcbiAgaXQoXCJpcyBsZWZ0IHRvIGVuZCBpdHMgb3duIHJlc3BvbnNlLCBhcyBuZXh0IHN0YXJ0IGxlYXZlcyBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFnZXNBcGkgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4gKHtcbiAgICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICAgIGVudHJ5cG9pbnRzOiB7XG4gICAgICAgICAgLi4ubWFuaWZlc3QuZW50cnlwb2ludHMsXG4gICAgICAgICAgXCIvYXBpL2hlYWx0aFwiOiB7XG4gICAgICAgICAgICAuLi5tYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9hcGkvaGVhbHRoXCJdLFxuICAgICAgICAgICAgdHlwZTogXCJwYWdlLWFwaVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcGFnZXNBcGkuaGFuZGxlKFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIHVybDogXCIvYXBpL2hlYWx0aD9lbmRMYXRlcj0xXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcImZpcnN0LHNlY29uZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJpcyBzdGlsbCBlbmRlZCBmb3IgYSByb3V0ZSBvZiBhbnkgb3RoZXIga2luZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL2FwaS9oZWFsdGg/ZW5kTGF0ZXI9MVwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcImZpcnN0LFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJyZXMucmV2YWxpZGF0ZSgpIGFjcm9zcyBmdW5jdGlvbkdyb3Vwc1wiLCAoKSA9PiB7XG4gIC8vIFRoZSBvdGhlciBncm91cCdzIHBhZ2UgcmVuZGVycyBhcyBhIDQwNCwgd2hpY2ggYHVuc3RhYmxlX29ubHlHZW5lcmF0ZWRgXG4gIC8vIGFsb25lIHdvdWxkIGFjY2VwdCBhcyBcIm5vdCBnZW5lcmF0ZWRcIi5cbiAgaXQuZWFjaChbXG4gICAgW1wiXCIsIFwiLz9yZXZhbGlkYXRlPSUyRmlzciUyRjFcIl0sXG4gICAgW1wiIHdpdGggdW5zdGFibGVfb25seUdlbmVyYXRlZFwiLCBcIi8/cmV2YWxpZGF0ZT0lMkZpc3IlMkYxJm9ubHlHZW5lcmF0ZWQ9MVwiXSxcbiAgXSkoXCJzYXlzIHdoaWNoIGdyb3VwIG93bnMgYSBwYWdlIGl0IGNhbm5vdCByZW5kZXIlc1wiLCBhc3luYyAoXywgdXJsKSA9PiB7XG4gICAgbGV0IG1pc3NpbmcgPSBcIlwiO1xuICAgIGNvbnN0IHN0YWdlZCA9IHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4ge1xuICAgICAgbWlzc2luZyA9IG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2lzci9baWRdXCJdLmZpbGVQYXRoO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGRlZmF1bHQ6IE9iamVjdC5rZXlzKG1hbmlmZXN0LmVudHJ5cG9pbnRzKS5maWx0ZXIoXG4gICAgICAgICAgICAodGVtcGxhdGUpID0+IHRlbXBsYXRlICE9PSBcIi9pc3IvW2lkXVwiLFxuICAgICAgICAgICksXG4gICAgICAgICAgYmxvZzogW1wiL2lzci9baWRdXCJdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBybVN5bmMoam9pbihzdGFnZWQsIG1pc3NpbmcpKTtcbiAgICBjb25zdCBncm91cGVkID0gYXdhaXQgbG9hZFJ1bnRpbWUoc3RhZ2VkKTtcbiAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0ZVTkNUSU9OX0dST1VQID0gXCJkZWZhdWx0XCI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICAgIGF3YWl0IGdyb3VwZWQuaGFuZGxlKFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgICB9LFxuICAgICAgICBzaW5rLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IEpTT04ucGFyc2Uoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpO1xuICAgICAgZXhwZWN0KGVycm9yKS50b01hdGNoKC9eSW52YWxpZCByZXNwb25zZSA0MDQ6IC8pO1xuICAgICAgZXhwZWN0KGVycm9yKS50b0NvbnRhaW4oJ2dyb3VwIFwiYmxvZ1wiJyk7XG4gICAgICBleHBlY3QoZXJyb3IpLnRvQ29udGFpbignKFwiZGVmYXVsdFwiKScpO1xuICAgICAgLy8gVGhlIGVycm9yIGV4cGxhaW5zIGl0OyB0aGUgbWlzcm91dGVkLXJlcXVlc3Qgd2FybmluZyB3b3VsZCBub3QuXG4gICAgICBleHBlY3Qod2Fybikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVA7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIndpdGhvdXRJbnRlcm5hbEhlYWRlcnNcIiwgKCkgPT4ge1xuICBpdChcImRyb3BzIGV2ZXJ5IGhlYWRlciBvbiBOZXh0J3MgaW50ZXJuYWwgbGlzdFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgd2l0aG91dEludGVybmFsSGVhZGVycyhcbiAgICAgICAge1xuICAgICAgICAgIGhvc3Q6IFwiYS50ZXN0XCIsXG4gICAgICAgICAgXCJuZXh0LXJlc3VtZVwiOiBcIjFcIixcbiAgICAgICAgICBcIngtbWlkZGxld2FyZS1yZXdyaXRlXCI6IFwiL3hcIixcbiAgICAgICAgICBcIngtbmV4dGpzLWRhdGFcIjogXCIxXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiL2Jsb2dcIixcbiAgICAgICAgXCJcIixcbiAgICAgICksXG4gICAgKS50b0VxdWFsKHsgaG9zdDogXCJhLnRlc3RcIiB9KTtcbiAgfSk7XG5cbiAgaXQoXCJtYXJrcyBhIF9uZXh0L2RhdGEgcmVxdWVzdCBhcyBvbmUsIGFzIG5leHQgc3RhcnQncyByb3V0ZXIgZG9lc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgd2l0aG91dEludGVybmFsSGVhZGVycyh7fSwgXCIvYmFzZS9fbmV4dC9kYXRhL2FiYy9ibG9nLmpzb24/eD0xXCIsIFwiL2Jhc2VcIiksXG4gICAgKS50b0VxdWFsKHsgXCJ4LW5leHRqcy1kYXRhXCI6IFwiMVwiIH0pO1xuICAgIGV4cGVjdCh3aXRob3V0SW50ZXJuYWxIZWFkZXJzKHt9LCBcIi9fbmV4dC9kYXRhL2FiYy9ibG9nXCIsIFwiXCIpKS50b0VxdWFsKHt9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ0aGUgZXJyb3IgcGFnZSBsYWRkZXJcIiwgKCkgPT4ge1xuICAvKipcbiAgICogQW4gYXBwIHdpdGggYSBjdXN0b20gYHBhZ2VzL19lcnJvcmAgdGhhdCBjYW5ub3QgYmUgcHJlcmVuZGVyZWQg4oCUIG9uZSB3aXRoXG4gICAqIGBnZXRJbml0aWFsUHJvcHNgLCBvciBhIGBwYWdlcy9fYXBwYCB0aGF0IGhhcyBpdC4gVGhlIGZpeHR1cmUgaXMgQXBwIFJvdXRlcixcbiAgICogc28gYm90aCBoYWx2ZXMgaGF2ZSB0byBiZSBhcnJhbmdlZDogZHJvcCB0aGUgcHJlcmVuZGVyZWQgYC81MDBgIG5leHQgZW1pdHMgYnlcbiAgICogZGVmYXVsdCwgYW5kIGFkZCB0aGUgZW50cnlwb2ludC5cbiAgICovXG4gIGNvbnN0IHdpdGhFcnJvclBhZ2UgPSAobWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdCk6IEFkYXB0ZXJNYW5pZmVzdCA9PiB7XG4gICAgY29uc3QgeyBcIi81MDBcIjogX3ByZXJlbmRlcmVkLCAuLi5zdGF0aWNGaWxlcyB9ID0gbWFuaWZlc3Quc3RhdGljRmlsZXM7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgc3RhdGljRmlsZXMsXG4gICAgICBlbnRyeXBvaW50czoge1xuICAgICAgICAuLi5tYW5pZmVzdC5lbnRyeXBvaW50cyxcbiAgICAgICAgXCIvX2Vycm9yXCI6IHtcbiAgICAgICAgICAuLi5tYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9fbm90LWZvdW5kXCJdLFxuICAgICAgICAgIGlkOiBcIi9fZXJyb3JcIixcbiAgICAgICAgICBmaWxlUGF0aDogam9pbihcbiAgICAgICAgICAgIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpcixcbiAgICAgICAgICAgIFwiLm5leHQvc2VydmVyL3BhZ2VzL19lcnJvci5qc1wiLFxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH07XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2VuZFRvKFxuICAgIHdpdGhMYWRkZXI6IE5leHRqc1J1bnRpbWUsXG4gICAgdXJsOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgd2l0aExhZGRlci5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsLCBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9IH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgcmV0dXJuIHNpbms7XG4gIH1cblxuICBpdChcImludm9rZXMgL19lcnJvciB3aGVuIHRoZSBidWlsZCBoYXMgbm8gcHJlcmVuZGVyZWQgLzUwMFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBjb25zdCByZW5kZXJpbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIHdpdGhFcnJvclBhZ2UpLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmRUbyhyZW5kZXJpbmcsIFwiLz9ib29tPTFcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg1MDApO1xuICAgIC8vIFJlbmRlcmVkIGZvciB0aGUgVVJMIHRoYXQgd2FzIGFza2VkIGZvciwgYW5kIHdpdGggdGhlIHN0YXR1cyBhbHJlYWR5IHNldDpcbiAgICAvLyBgX2Vycm9yYCdzIGBnZXRJbml0aWFsUHJvcHNgIHJlYWRzIGByZXMuc3RhdHVzQ29kZWAgdG8gZ2V0IGl0cyBvd24gcHJvcC5cbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuZmlsZSkudG9Db250YWluKFwicGFnZXMvX2Vycm9yLmpzXCIpO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS51cmwpLnRvQmUoXCIvP2Jvb209MVwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1sZW5ndGhcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmV0YWcpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAvLyBOb3QgdGhlIHRocm93aW5nIHJlbmRlcidzIGBzLW1heGFnZT02MGA6IGEgY2FjaGVkIDUwMCBhdCBDbG91ZEZyb250LlxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b01hdGNoKC9uby1zdG9yZS8pO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwiZHJvcHMgdGhlIGZhaWxlZCByZW5kZXIncyBDb250ZW50LUxlbmd0aCBhbmQgRVRhZyBmcm9tIGEgcHJlcmVuZGVyZWQgLzUwMFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvP2Jvb209MVwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNTAwKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoRVJST1JfSFRNTCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5ldGFnKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJmYWxscyBiYWNrIHRvIHBsYWluIHRleHQgd2hlbiB0aGUgZXJyb3IgcGFnZSB0aHJvd3MgdG9vXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IHJlbmRlcmluZyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgd2l0aEVycm9yUGFnZSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKHJlbmRlcmluZywgXCIvP2Jvb21FdmVyeXdoZXJlPTFcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg1MDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gICAgZXhwZWN0KGVycm9yKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFwiVGhlIGVycm9yIHBhZ2UgaXRzZWxmIGZhaWxlZCB0byByZW5kZXI6XCIsXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IG1lc3NhZ2U6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwidG9vXCIpIH0pLFxuICAgICk7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIHBsYWluIHRleHQgZm9yIGFuIGFwcCB3aXRoIG5vIGVycm9yIHBhZ2UgYXQgYWxsXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IGJhcmUgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IFwiLzUwMFwiOiBfcHJlcmVuZGVyZWQsIC4uLnN0YXRpY0ZpbGVzIH0gPSBtYW5pZmVzdC5zdGF0aWNGaWxlcztcbiAgICAgICAgcmV0dXJuIHsgLi4ubWFuaWZlc3QsIHN0YXRpY0ZpbGVzIH07XG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8oYmFyZSwgXCIvP2Jvb209MVwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYSBQYWdlcyBSb3V0ZXIgNDA0XCIsICgpID0+IHtcbiAgLyoqIFRoZSBmaXh0dXJlIGlzIEFwcCBSb3V0ZXI6IHdpdGhvdXQgYC9fbm90LWZvdW5kYCwgYSA0MDQgaXMgdGhlIFBhZ2VzIG9uZS4gKi9cbiAgY29uc3Qgd2l0aG91dE5vdEZvdW5kID0gKG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3QpOiBBZGFwdGVyTWFuaWZlc3QgPT4ge1xuICAgIGNvbnN0IHsgXCIvX25vdC1mb3VuZFwiOiBfYXBwUm91dGVyLCAuLi5lbnRyeXBvaW50cyB9ID0gbWFuaWZlc3QuZW50cnlwb2ludHM7XG4gICAgcmV0dXJuIHsgLi4ubWFuaWZlc3QsIGVudHJ5cG9pbnRzIH07XG4gIH07XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2VuZFRvKFxuICAgIHBhZ2VzOiBOZXh0anNSdW50aW1lLFxuICAgIHVybDogc3RyaW5nLFxuICApOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHBhZ2VzLmhhbmRsZShcbiAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmwsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICByZXR1cm4gc2luaztcbiAgfVxuXG4gIGl0KFwic2VydmVzIHRoZSBwcmVyZW5kZXJlZCA0MDQuaHRtbCBmb3IgYW4gdW5rbm93biBwYXRoIGFuZCBmb3IgcmVuZGVyNDA0KClcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCB3aXRob3V0Tm90Rm91bmQpLFxuICAgICk7XG4gICAgZm9yIChjb25zdCB1cmwgb2YgW1wiL25vcGVcIiwgXCIvP3JlbmRlcjQwND0xXCJdKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKHBhZ2VzLCB1cmwpO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSkudG9CZShcbiAgICAgICAgXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICAgICk7XG4gICAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoTk9UX0ZPVU5EX0hUTUwpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJyZW5kZXJzIGEgcGFnZXMvNDA0IGVudHJ5cG9pbnQgZm9yIHRoZSBwYXRoIHRoYXQgd2FzIGFza2VkIGZvclwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gV2hhdCBhIGBnZXRJbml0aWFsUHJvcHNgIGluIGBwYWdlcy9fYXBwYCBtYWtlcyBvZiBgcGFnZXMvNDA0LmpzYC5cbiAgICBjb25zdCBwYWdlcyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHdpdGhvdXRBcHAgPSB3aXRob3V0Tm90Rm91bmQobWFuaWZlc3QpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLndpdGhvdXRBcHAsXG4gICAgICAgICAgZW50cnlwb2ludHM6IHtcbiAgICAgICAgICAgIC4uLndpdGhvdXRBcHAuZW50cnlwb2ludHMsXG4gICAgICAgICAgICBcIi80MDRcIjoge1xuICAgICAgICAgICAgICAuLi5tYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9fbm90LWZvdW5kXCJdLFxuICAgICAgICAgICAgICBpZDogXCIvNDA0XCIsXG4gICAgICAgICAgICAgIGZpbGVQYXRoOiBqb2luKFxuICAgICAgICAgICAgICAgIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpcixcbiAgICAgICAgICAgICAgICBcIi5uZXh0L3NlcnZlci9wYWdlcy80MDQuanNcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmRUbyhwYWdlcywgXCIvbm9wZT9xPTFcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5maWxlKS50b0NvbnRhaW4oXCJwYWdlcy80MDQuanNcIik7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLnVybCkudG9CZShcIi9ub3BlP3E9MVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIHBsYWluIHRleHQgd2hlbiB0aGUgYXBwIGhhcyBubyA0MDQgcGFnZSBhdCBhbGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJhcmUgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IFwiLzQwNFwiOiBfcHJlcmVuZGVyZWQsIC4uLnN0YXRpY0ZpbGVzIH0gPSBtYW5pZmVzdC5zdGF0aWNGaWxlcztcbiAgICAgICAgcmV0dXJuIHsgLi4ud2l0aG91dE5vdEZvdW5kKG1hbmlmZXN0KSwgc3RhdGljRmlsZXMgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmRUbyhiYXJlLCBcIi8/cmVuZGVyNDA0PTFcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIlRoaXMgcGFnZSBjb3VsZCBub3QgYmUgZm91bmQuXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIi9fbmV4dC9pbWFnZSB3aXRoIGltYWdlcyB0dXJuZWQgb2ZmXCIsICgpID0+IHtcbiAgaXQoXCJhbnN3ZXJzIHRoZSBhcHAncyA0MDQsIG5vLXN0b3JlLCBpbnN0ZWFkIG9mIG9wdGltaXppbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGBpbWFnZXMudW5vcHRpbWl6ZWRgLCBhcyB0aGUgYWRhcHRlciBjb3BpZXMgaXQgaW50byB0aGUgbWFuaWZlc3QgZnJvbVxuICAgIC8vIGBjdHguY29uZmlnYC5cbiAgICBjb25zdCBzdGFnZWQgPSBzdGFnZURlcGxveW1lbnQodW5kZWZpbmVkLCAobWFuaWZlc3QpID0+ICh7XG4gICAgICAuLi5tYW5pZmVzdCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi5tYW5pZmVzdC5jb25maWcsXG4gICAgICAgIGltYWdlczogeyAuLi4obWFuaWZlc3QuY29uZmlnLmltYWdlcyBhcyBvYmplY3QpLCB1bm9wdGltaXplZDogdHJ1ZSB9LFxuICAgICAgfSxcbiAgICB9KSk7XG4gICAgY29uc3QgdW5vcHRpbWl6ZWQgPSBhd2FpdCBsb2FkUnVudGltZShzdGFnZWQpO1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCB1bm9wdGltaXplZC5oYW5kbGUoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgdXJsOiBcIi9fbmV4dC9pbWFnZT91cmw9JTJGZmF2aWNvbi5pY28mdz02NCZxPTc1XCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmZpbGUpLnRvQ29udGFpbihcIl9ub3QtZm91bmQvcGFnZS5qc1wiKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFxuICAgICAgXCIvX25leHQvaW1hZ2U/dXJsPSUyRmZhdmljb24uaWNvJnc9NjQmcT03NVwiLFxuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYW4gZXh0ZXJuYWwgcmV3cml0ZVwiLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBgTmV4dFJlc3BvbnNlLnJld3JpdGUoXCJodHRwczovL+KAplwiKWA6IGFuIGFic29sdXRlIGRlc3RpbmF0aW9uIG1ha2VzXG4gICAqIGByZXNvbHZlUm91dGVzYCByZXBvcnQgYW4gYGV4dGVybmFsUmV3cml0ZWAsIHdoaWNoIHRoZSBydW50aW1lIHByb3hpZXMgd2l0aFxuICAgKiBgZmV0Y2hgIGluc3RlYWQgb2Ygcm91dGluZyB0byBhbiBlbnRyeXBvaW50LlxuICAgKi9cbiAgY29uc3QgRVhURVJOQUxfUkVXUklURV9NSURETEVXQVJFID0gYFxuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT5cbiAgbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICBoZWFkZXJzOiB7IFwieC1taWRkbGV3YXJlLXJld3JpdGVcIjogXCJodHRwczovL3Vwc3RyZWFtLnRlc3QvZnJvbS1vcmlnaW5cIiB9LFxuICB9KTtcbmA7XG5cbiAgY29uc3QgT1JJR0lOX0JPRFkgPSBcIjxodG1sPmZyb20gdGhlIG9yaWdpbjwvaHRtbD5cIjtcblxuICAvKipcbiAgICogV2hhdCB1bmRpY2kgaGFuZHMgYmFjayBmb3IgYSBnemlwIG9yaWdpbiwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoZXNlXG4gICAqIHRlc3RzOiBgZmV0Y2hgIGRlY29kZXMgdGhlIGJvZHkgYW5kIGxlYXZlcyBib3RoIGBjb250ZW50LWVuY29kaW5nYCBhbmQgdGhlXG4gICAqICplbmNvZGVkKiBgY29udGVudC1sZW5ndGhgIGJlaGluZCwgZGVzY3JpYmluZyBieXRlcyBpdCBhbHJlYWR5IGRpc2NhcmRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIGd6aXBMYWJlbGxlZFBsYWludGV4dCgpOiBSZXNwb25zZSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShPUklHSU5fQk9EWSwge1xuICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgIFwiY29udGVudC1lbmNvZGluZ1wiOiBcImd6aXBcIixcbiAgICAgICAgXCJjb250ZW50LWxlbmd0aFwiOiBTdHJpbmcoZ3ppcFN5bmMoT1JJR0lOX0JPRFkpLmJ5dGVMZW5ndGgpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBwcm94eWluZzogTmV4dGpzUnVudGltZTtcbiAgbGV0IGZldGNoTW9jazogamVzdC5TcHlJbnN0YW5jZTtcblxuICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgIHByb3h5aW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoc3RhZ2VEZXBsb3ltZW50KEVYVEVSTkFMX1JFV1JJVEVfTUlERExFV0FSRSkpO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBmZXRjaE1vY2sgPSBqZXN0XG4gICAgICAuc3B5T24oZ2xvYmFsVGhpcywgXCJmZXRjaFwiKVxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKGd6aXBMYWJlbGxlZFBsYWludGV4dCgpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmZXRjaE1vY2subW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcHJveHkoXG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuICAgIHRydXN0Rm9yd2FyZGVkSG9zdCA9IGZhbHNlLFxuICApOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHByb3h5aW5nLmhhbmRsZShcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICB1cmw6IFwiL2FueXRoaW5nXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCAuLi5oZWFkZXJzIH0sXG4gICAgICAgIHRydXN0Rm9yd2FyZGVkSG9zdCxcbiAgICAgIH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgcmV0dXJuIHNpbms7XG4gIH1cblxuICBjb25zdCBTSUdORUQgPSB7XG4gICAgYXV0aG9yaXphdGlvbjpcbiAgICAgIFwiQVdTNC1ITUFDLVNIQTI1NiBDcmVkZW50aWFsPUFLSUEvMjAyNjA5MjgvdXMtZWFzdC0xL2xhbWJkYS9hd3M0X3JlcXVlc3RcIixcbiAgICBcIngtYW16LWRhdGVcIjogXCIyMDI2MDkyOFQwMDAwMDBaXCIsXG4gICAgXCJ4LWFtei1jb250ZW50LXNoYTI1NlwiOiBcIlVOU0lHTkVELVBBWUxPQURcIixcbiAgICBcIngtYW16LXNlY3VyaXR5LXRva2VuXCI6IFwidG9rZW5cIixcbiAgfTtcblxuICAvLyBGb3J3YXJkZWQsIE9BQydzIHNpZ25hdHVyZSB3b3VsZCBsZXQgdGhlIHVwc3RyZWFtIHJlcGxheSB0aGUgcmVxdWVzdFxuICAvLyBhZ2FpbnN0IHRoZSBGdW5jdGlvbiBVUkwuXG4gIGl0KFwiZG9lcyBub3QgZm9yd2FyZCB0aGUgU2lnVjQgaGVhZGVycyBvZiBhbiBJQU0tdmVyaWZpZWQgcmVxdWVzdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcHJveHkoU0lHTkVELCB0cnVlKTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSAoZmV0Y2hNb2NrLm1vY2suY2FsbHNbMF1bMV0gYXMgUmVxdWVzdEluaXQpXG4gICAgICAuaGVhZGVycyBhcyBIZWFkZXJzO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhTSUdORUQpKSB7XG4gICAgICBleHBlY3QoaGVhZGVycy5oYXMobmFtZSkpLnRvQmUoZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQW55d2hlcmUgZWxzZSB0aGV5IGFyZSB0aGUgY2xpZW50J3Mgb3duLCB3aGljaCBgbmV4dCBzdGFydGAgZm9yd2FyZHMuXG4gIGl0KFwiZm9yd2FyZHMgdGhlIGNsaWVudCdzIG93biBBdXRob3JpemF0aW9uIGFuZCB4LWFtei0qIGhlYWRlcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KFNJR05FRCk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gKGZldGNoTW9jay5tb2NrLmNhbGxzWzBdWzFdIGFzIFJlcXVlc3RJbml0KVxuICAgICAgLmhlYWRlcnMgYXMgSGVhZGVycztcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoU0lHTkVEKSkge1xuICAgICAgZXhwZWN0KGhlYWRlcnMuZ2V0KG5hbWUpKS50b0JlKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicHJveGllcyB0aGUgcmVxdWVzdCB0byB0aGUgcmV3cml0dGVuIG9yaWdpblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHByb3h5KCk7XG5cbiAgICBleHBlY3QoU3RyaW5nKGZldGNoTW9jay5tb2NrLmNhbGxzWzBdWzBdKSkudG9CZShcbiAgICAgIFwiaHR0cHM6Ly91cHN0cmVhbS50ZXN0L2Zyb20tb3JpZ2luXCIsXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSkudG9CZShcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgfSk7XG5cbiAgLy8gdW5kaWNpIHRocm93cyBvbiB0aGVzZSAoYGV4cGVjdDogMTAwLWNvbnRpbnVlYCBmcm9tIGN1cmwgZm9yIGEgbGFyZ2UgUE9TVCxcbiAgLy8gYGtlZXAtYWxpdmVgIGZyb20gYW4gSFRUUC8xLjAgY2xpZW50KSwgd2hpY2ggYW5zd2VyZWQgdGhlIHJlcXVlc3Qgd2l0aCBhIDUwMC5cbiAgaXQoXCJkb2VzIG5vdCBmb3J3YXJkIHRoZSBoZWFkZXJzIHRoYXQgZGVzY3JpYmUgdGhlIGNsaWVudCdzIGNvbm5lY3Rpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KHtcbiAgICAgIGV4cGVjdDogXCIxMDAtY29udGludWVcIixcbiAgICAgIFwia2VlcC1hbGl2ZVwiOiBcInRpbWVvdXQ9NVwiLFxuICAgICAgdXBncmFkZTogXCJ3ZWJzb2NrZXRcIixcbiAgICAgIGNvbm5lY3Rpb246IFwia2VlcC1hbGl2ZSwgdXBncmFkZVwiLFxuICAgICAgXCJ4LWtlcHRcIjogXCJ5ZXNcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSAoZmV0Y2hNb2NrLm1vY2suY2FsbHNbMF1bMV0gYXMgUmVxdWVzdEluaXQpXG4gICAgICAuaGVhZGVycyBhcyBIZWFkZXJzO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBbXG4gICAgICBcImhvc3RcIixcbiAgICAgIFwiZXhwZWN0XCIsXG4gICAgICBcImtlZXAtYWxpdmVcIixcbiAgICAgIFwidXBncmFkZVwiLFxuICAgICAgXCJjb25uZWN0aW9uXCIsXG4gICAgXSkge1xuICAgICAgZXhwZWN0KGhlYWRlcnMuaGFzKG5hbWUpKS50b0JlKGZhbHNlKTtcbiAgICB9XG4gICAgZXhwZWN0KGhlYWRlcnMuZ2V0KFwieC1rZXB0XCIpKS50b0JlKFwieWVzXCIpO1xuICB9KTtcblxuICAvLyBUaGUgcmVxdWVzdCBib2R5IGlzIGZvcndhcmRlZCBhcyByZWNlaXZlZCwgc28gaXRzIGVuY29kaW5nIGhhcyB0byBnbyB3aXRoXG4gIC8vIGl0OiBhIGd6aXAgdXBsb2FkIGFycml2aW5nIHVubGFiZWxsZWQgaXMgZ2FyYmFnZSB0byB0aGUgdXBzdHJlYW0uXG4gIGl0KFwiZm9yd2FyZHMgdGhlIHJlcXVlc3QncyBjb250ZW50LWVuY29kaW5nIHdpdGggaXRzIGJvZHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KHsgXCJjb250ZW50LWVuY29kaW5nXCI6IFwiZ3ppcFwiIH0pO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IChmZXRjaE1vY2subW9jay5jYWxsc1swXVsxXSBhcyBSZXF1ZXN0SW5pdClcbiAgICAgIC5oZWFkZXJzIGFzIEhlYWRlcnM7XG4gICAgZXhwZWN0KGhlYWRlcnMuZ2V0KFwiY29udGVudC1lbmNvZGluZ1wiKSkudG9CZShcImd6aXBcIik7XG4gIH0pO1xuXG4gIC8vIEZvcndhcmRpbmcgdGhlIG9yaWdpbidzIGBjb250ZW50LWVuY29kaW5nYCBvdmVyIGEgYm9keSBgZmV0Y2hgIGFscmVhZHlcbiAgLy8gZGVjb2RlZCBmYWlscyB0aGUgd2hvbGUgcmVzcG9uc2UgaW4gdGhlIGJyb3dzZXIgd2l0aFxuICAvLyBFUlJfQ09OVEVOVF9ERUNPRElOR19GQUlMRUQsIHVuZGVyIGEgYENvbnRlbnQtTGVuZ3RoYCB0aGF0IGRlc2NyaWJlcyB0aGVcbiAgLy8gY29tcHJlc3NlZCBieXRlcy4gTm90aGluZyBkb3duc3RyZWFtIHJlcGFpcnMgaXQgZWl0aGVyOiBgc2hvdWxkR3ppcGBcbiAgLy8gZGVjbGluZXMgYXMgc29vbiBhcyBgY29udGVudC1lbmNvZGluZ2AgaXMgc2V0LlxuICBpdChcImRyb3BzIHRoZSBjb250ZW50LWVuY29kaW5nIGFuZCBsZW5ndGggZmV0Y2ggYWxyZWFkeSBjb25zdW1lZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHByb3h5KCk7XG5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShPUklHSU5fQk9EWSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBvdGhlciBoYWxmIG9mIGl0OiB3aXRoIHRoZSBzdGFsZSBsYWJlbCBnb25lLCB0aGUgc2luayBpcyBmcmVlIHRvXG4gIC8vIGNvbXByZXNzIHRoZSBwbGFpbnRleHQgaXRzZWxmIOKAlCBhbmQgbm93IHRoZSBlbmNvZGluZyBpdCBhZHZlcnRpc2VzIGlzIHRoZVxuICAvLyBvbmUgdGhlIGJ5dGVzIGFjdHVhbGx5IGNhcnJ5LlxuICBpdChcInJlLWNvbXByZXNzZXMgdGhlIGRlY29kZWQgYm9keSB3aGVuIHRoZSBjbGllbnQgYWNjZXB0cyBnemlwXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcHJveHkoeyBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9KTtcblxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlKFwiZ3ppcFwiKTtcbiAgICBleHBlY3QoZ3VuemlwU3luYyhzaW5rLmJvZHkpLnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoT1JJR0lOX0JPRFkpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImEgc3RyZWFtZWQgZXh0ZXJuYWwgcmV3cml0ZVwiLCAoKSA9PiB7XG4gIGNvbnN0IEVYVEVSTkFMX1JFV1JJVEVfTUlERExFV0FSRSA9IGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+XG4gIG5ldyBSZXNwb25zZShudWxsLCB7XG4gICAgaGVhZGVyczogeyBcIngtbWlkZGxld2FyZS1yZXdyaXRlXCI6IFwiaHR0cHM6Ly91cHN0cmVhbS50ZXN0L2V2ZW50c1wiIH0sXG4gIH0pO1xuYDtcblxuICBsZXQgcHJveHlpbmc6IE5leHRqc1J1bnRpbWU7XG5cbiAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICBwcm94eWluZyA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlRGVwbG95bWVudChFWFRFUk5BTF9SRVdSSVRFX01JRERMRVdBUkUpKTtcbiAgfSk7XG5cbiAgLy8gU2VydmVyLXNlbnQgZXZlbnRzIHRocm91Z2ggYSByZXdyaXRlLCBnemlwcGVkIGJlY2F1c2UgYHRleHQvZXZlbnQtc3RyZWFtYFxuICAvLyBpcyBgdGV4dC8qYDogd2l0aG91dCBhIGZsdXNoIHBlciBjaHVuaywgdGhlIGZpcnN0IGV2ZW50IHNhdCBpbiB6bGliJ3NcbiAgLy8gYnVmZmVyIHVudGlsIHRoZSBvcmlnaW4gY2xvc2VkIHRoZSBzdHJlYW0uXG4gIGl0KFwiZmx1c2hlcyBlYWNoIGNodW5rIHRocm91Z2ggdGhlIGNvbXByZXNzb3IgYXMgaXQgYXJyaXZlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHJlbGVhc2UhOiAoKSA9PiB2b2lkO1xuICAgIGNvbnN0IGhlbGQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKHJlbGVhc2UgPSByZXNvbHZlKSk7XG4gICAgY29uc3QgZmV0Y2hNb2NrID0gamVzdC5zcHlPbihnbG9iYWxUaGlzLCBcImZldGNoXCIpLm1vY2tSZXNvbHZlZFZhbHVlKFxuICAgICAgbmV3IFJlc3BvbnNlKFxuICAgICAgICBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgICAgICAgIGFzeW5jIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJkYXRhOiBmaXJzdFxcblxcblwiKSk7XG4gICAgICAgICAgICBhd2FpdCBoZWxkO1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcImRhdGE6IHNlY29uZFxcblxcblwiKSk7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvZXZlbnQtc3RyZWFtXCIgfSB9LFxuICAgICAgKSxcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgICBjb25zdCBoYW5kbGVkID0gcHJveHlpbmcuaGFuZGxlKFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgIHVybDogXCIvZXZlbnRzXCIsXG4gICAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIFwiYWNjZXB0LWVuY29kaW5nXCI6IFwiZ3ppcFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmssXG4gICAgICApO1xuICAgICAgLy8gUG9sbCByYXRoZXIgdGhhbiBzbGVlcCBhIGZpeGVkIHRpbWU6IHRoZSBmaXJzdCBldmVudCBoYXMgdG8gcmVhY2ggdGhlXG4gICAgICAvLyBzaW5rIHdoaWxlIHRoZSBvcmlnaW4gaXMgc3RpbGwgaG9sZGluZyB0aGUgc3RyZWFtIG9wZW4uXG4gICAgICBjb25zdCBzb0ZhciA9ICgpOiBzdHJpbmcgPT5cbiAgICAgICAgZ3VuemlwU3luYyhzaW5rLmJvZHksIHtcbiAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYkNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgIH0pLnRvU3RyaW5nKFwidXRmLThcIik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwICYmICFzb0ZhcigpOyBpKyspIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKTtcbiAgICAgIH1cbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlKFwiZ3ppcFwiKTtcbiAgICAgIGV4cGVjdChzb0ZhcigpKS50b0JlKFwiZGF0YTogZmlyc3RcXG5cXG5cIik7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBhd2FpdCBoYW5kbGVkO1xuICAgICAgZXhwZWN0KGd1bnppcFN5bmMoc2luay5ib2R5KS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFxuICAgICAgICBcImRhdGE6IGZpcnN0XFxuXFxuZGF0YTogc2Vjb25kXFxuXFxuXCIsXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBmZXRjaE1vY2subW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYSBSZXNwb25zZSBtaWRkbGV3YXJlIGFuc3dlcnMgd2l0aCBpdHNlbGZcIiwgKCkgPT4ge1xuICBjb25zdCBNSURETEVXQVJFX0JPRFkgPSBcIjxodG1sPmZyb20gbWlkZGxld2FyZTwvaHRtbD5cIjtcblxuICAvKipcbiAgICogYHJldHVybiBmZXRjaCh1cHN0cmVhbSlgIGZyb20gYHByb3h5LnRzYCwgYXMgdGhlIHJ1bnRpbWUgc2VlcyBpdDogbWlkZGxld2FyZVxuICAgKiBydW5zIGluIHByb2Nlc3MsIHNvIGl0cyBgZmV0Y2hgIGlzIHVuZGljaSwgd2hpY2ggZGVjb2RlZCBhIGd6aXAgdXBzdHJlYW1cbiAgICogYW5kIGtlcHQgdGhlIHVwc3RyZWFtJ3MgYGNvbnRlbnQtZW5jb2RpbmdgIGFuZCBlbmNvZGVkIGBjb250ZW50LWxlbmd0aGAuXG4gICAqL1xuICBjb25zdCBGRVRDSEVEX1JFU1BPTlNFX01JRERMRVdBUkUgPSBgXG5jb25zdCB7IGd6aXBTeW5jIH0gPSByZXF1aXJlKFwibm9kZTp6bGliXCIpO1xuY29uc3QgYm9keSA9ICR7SlNPTi5zdHJpbmdpZnkoTUlERExFV0FSRV9CT0RZKX07XG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PlxuICBuZXcgUmVzcG9uc2UoYm9keSwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICBcImNvbnRlbnQtZW5jb2RpbmdcIjogXCJnemlwXCIsXG4gICAgICBcImNvbnRlbnQtbGVuZ3RoXCI6IFN0cmluZyhnemlwU3luYyhib2R5KS5ieXRlTGVuZ3RoKSxcbiAgICAgIFwidHJhbnNmZXItZW5jb2RpbmdcIjogXCJjaHVua2VkXCIsXG4gICAgICBcIngtZnJvbS11cHN0cmVhbVwiOiBcInllc1wiLFxuICAgIH0sXG4gIH0pO1xuYDtcblxuICBsZXQgcmVzcG9uZGluZzogTmV4dGpzUnVudGltZTtcblxuICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgIHJlc3BvbmRpbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChGRVRDSEVEX1JFU1BPTlNFX01JRERMRVdBUkUpLFxuICAgICk7XG4gIH0pO1xuXG4gIC8vIFdoYXQgYG5leHQgc3RhcnRgIGRvZXMgdG9vOiB0aGUgc2FuZGJveCBkZWxldGVzIHRoZXNlIHRocmVlXG4gIC8vIChgRk9SQklEREVOX0hFQURFUlNgKSBmcm9tIGV2ZXJ5IG1pZGRsZXdhcmUgcmVzcG9uc2UuXG4gIGl0KFwiZHJvcHMgdGhlIGZyYW1pbmcgaGVhZGVycyB0aGF0IGRlc2NyaWJlZCB0aGUgdXBzdHJlYW0ncyBieXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHJlc3BvbmRpbmcuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybDogXCIvXCIsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcblxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcInRyYW5zZmVyLWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcIngtZnJvbS11cHN0cmVhbVwiXSkudG9CZShcInllc1wiKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoTUlERExFV0FSRV9CT0RZKTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBMYXN0IGluIHRoZSBmaWxlLCBiZWNhdXNlIGBsb2FkUnVudGltZWAgY2hkaXJzOiB0aGUgdGVzdHMgYWJvdmUgYXNzZXJ0IG9uIHRoZVxuICogY3dkIHRoZSBzaGFyZWQgZGVwbG95bWVudCBzZXQuXG4gKi9cbmRlc2NyaWJlKFwidGhlIHJlc29sdmVkIHF1ZXJ5IGEgcmV3cml0ZSBwcm9kdWNlZFwiLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBgdGVzdC9lMmUvbGluay13aXRoLWFwaS1yZXdyaXRlYCdzIHJ1bGUsIGFzIGl0IGxhbmRzIGluIHRoZSBtYW5pZmVzdDogYVxuICAgKiBgYmVmb3JlRmlsZXNgIHJld3JpdGUgd2hvc2UgY29uZGl0aW9uIGlzIGEgcXVlcnkgcGFyYW0gdGhlIGRlc3RpbmF0aW9uIGtlZXBzLlxuICAgKi9cbiAgY29uc3Qgd2l0aFNlbGZNYXRjaGluZ1Jld3JpdGUgPSAoXG4gICAgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdCxcbiAgKTogQWRhcHRlck1hbmlmZXN0ID0+XG4gICAgKHtcbiAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgcm91dGluZzoge1xuICAgICAgICAuLi4obWFuaWZlc3Qucm91dGluZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksXG4gICAgICAgIGJlZm9yZUZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlOiBcIi86cGF0aCguKilcIixcbiAgICAgICAgICAgIHNvdXJjZVJlZ2V4OiBcIl4oPzpcXFxcLyguKikpKD86XFxcXC8pPyRcIixcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBcIi8/ZnJvbT0lMkYkMVwiLFxuICAgICAgICAgICAgaGFzOiBbeyB0eXBlOiBcInF1ZXJ5XCIsIGtleTogXCJqc29uXCIsIHZhbHVlOiBcInRydWVcIiB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KSBhcyBBZGFwdGVyTWFuaWZlc3Q7XG5cbiAgLyoqXG4gICAqIGBSb3V0ZU1vZHVsZS5wcmVwYXJlYCByZS1ydW5zIHRoZSBjb25maWcncyByZXdyaXRlcyBhZ2FpbnN0IGByZXEudXJsYFxuICAgKiB1bmNvbmRpdGlvbmFsbHksIGFuZCBgcmVxLnVybGAgaXMgdGhlIHRhcmdldCB0aGUgcmV3cml0ZSBhbHJlYWR5IHByb2R1Y2VkIC1cbiAgICogc28gYSBydWxlIHRoYXQgc3RpbGwgbWF0Y2hlcyBpdHMgb3duIG91dHB1dCBnZXRzIGFwcGxpZWQgdHdpY2UuIEhlcmUgdGhhdFxuICAgKiB0dXJuZWQgYGZyb209L3NvbWUvcm91dGUvZm9yYCBpbnRvIGBmcm9tPS9gLCB3aGljaCBpcyB3aGF0IG1hZGVcbiAgICogYHRlc3QvZTJlL2xpbmstd2l0aC1hcGktcmV3cml0ZWAgYW5zd2VyIGB7XCJmcm9tXCI6XCIvYXBpL2pzb25cIn1gIHdoZXJlXG4gICAqIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIGB7XCJmcm9tXCI6XCIvc29tZS9yb3V0ZS9mb3JcIn1gLiBTdGF0aW5nIHRoZSByZXNvbHZlZCBxdWVyeVxuICAgKiBhcyBgcmVxdWVzdE1ldGEucXVlcnlgIGlzIHdoYXQgYHByZXBhcmVgIHByZWZlcnMgb3ZlciBhbnl0aGluZyBpdCByZS1kZXJpdmVzLFxuICAgKiBzbyB0aGUgcm91dGUgc2VlcyB0aGUgZmlyc3QgcGFzcyByYXRoZXIgdGhhbiB0aGUgc2Vjb25kLlxuICAgKi9cbiAgaXQoXCJpcyBoYW5kZWQgb3ZlciBhcyByZXF1ZXN0TWV0YS5xdWVyeSwgbm90IGxlZnQgdG8gYmUgcmUtZGVyaXZlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmV3cml0aW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCB3aXRoU2VsZk1hdGNoaW5nUmV3cml0ZSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcmV3cml0aW5nLmhhbmRsZShcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICB1cmw6IFwiL3NvbWUvcm91dGUvZm9yP2pzb249dHJ1ZVwiLFxuICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgfSxcbiAgICAgIHNpbmssXG4gICAgKTtcblxuICAgIGNvbnN0IGJvZHkgPSBzdHViQm9keShzaW5rKTtcbiAgICAvLyBJdHMgb3duIHN0YWdlZCB0cmVlLCBzbyBub3QgYHJvb3RgOiB0aGUgcmV3cml0ZSBpcyB0aGUgcG9pbnQuXG4gICAgZXhwZWN0KGJvZHkuZmlsZSkudG9Db250YWluKFwiLm5leHQvc2VydmVyL2FwcC9wYWdlLmpzXCIpO1xuICAgIGV4cGVjdChib2R5LnF1ZXJ5KS50b0VxdWFsKHsganNvbjogXCJ0cnVlXCIsIGZyb206IFwiL3NvbWUvcm91dGUvZm9yXCIgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogYG5leHQgc3RhcnRgIGFuc3dlcnMgYC8vYCB3aXRoIGAzMDggLT4gL2AgYW5kIGAvYXBpLy9qc29uYCB3aXRoXG4gKiBgMzA4IC0+IC9hcGkvanNvbmA7IHRoaXMgcnVudGltZSB1c2VkIHRvIGFuc3dlciA1MDAgYW5kIDQwNC4gVGhlIDUwMCBpcyB0aGVcbiAqIHJlYXNvbiB0aGUgY2hlY2sgcnVucyBiZWZvcmUgYW55dGhpbmcgcGFyc2VzIHRoZSB0YXJnZXQ6IGBuZXcgVVJMKFwiLy9cIiwgYmFzZSlgXG4gKiByZWFkcyBhIGxlYWRpbmcgYC8vYCBhcyBwcm90b2NvbC1yZWxhdGl2ZSBhbmQgdGFrZXMgdGhlIGZpcnN0IHBhdGggc2VnbWVudCBmb3JcbiAqIHRoZSBob3N0LiBGb3VuZCBieSBgdGVzdC9lMmUvaHlkcmF0aW9uYCwgd2hpY2ggcmVxdWVzdHMgZXhhY3RseSBgLy9gLCBhbmQgYnlcbiAqIGB0ZXN0L2UyZS9pMThuLWlnbm9yZS1yZWRpcmVjdC1zb3VyY2UtbG9jYWxlL3JlZGlyZWN0cy13aXRoLWJhc2VwYXRoYCwgd2hvc2VcbiAqIGxvY2FsZSBsaXN0IGluY2x1ZGVzIGAnJ2AgYW5kIHNvIGFza3MgZm9yIGAvYmFzZXBhdGgvL3RvLXN2YC5cbiAqL1xuZGVzY3JpYmUoXCJhIHBhdGggd2l0aCByZXBlYXRlZCBzbGFzaGVzIG9yIGEgYmFja3NsYXNoXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgW1wiLy9cIiwgXCIvXCJdLFxuICAgIFtcIi8vL1wiLCBcIi9cIl0sXG4gICAgW1wiL2FwaS8vanNvblwiLCBcIi9hcGkvanNvblwiXSxcbiAgICBbXCIvYmFzZXBhdGgvL3RvLXN2XCIsIFwiL2Jhc2VwYXRoL3RvLXN2XCJdLFxuICAgIFtcIi9hXFxcXGJcIiwgXCIvYS9iXCJdLFxuICAgIC8vIFRoZSBxdWVyeSBpcyBjYXJyaWVkIGFjcm9zcyB1bnRvdWNoZWQsIHJlcGVhdGVkIHNsYXNoZXMgYW5kIGFsbC5cbiAgICBbXCIvL3NvbWUvcm91dGU/anNvbj10cnVlJm5leHQ9Ly94XCIsIFwiL3NvbWUvcm91dGU/anNvbj10cnVlJm5leHQ9Ly94XCJdLFxuICBdKShcInJlZGlyZWN0cyAlcyB0byAlcyB3aXRoIGEgMzA4XCIsIGFzeW5jIChmcm9tLCB0bykgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBmcm9tIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMzA4KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmxvY2F0aW9uKS50b0JlKHRvKTtcbiAgICAvLyBOZXh0LmpzIHNlbmRzIHRoZSBkZXN0aW5hdGlvbiBhcyB0aGUgYm9keSB0b28uXG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKHRvKTtcbiAgfSk7XG5cbiAgLyoqIGAlNUNgIGlzIGEgY2hhcmFjdGVyIGluIGEgc2VnbWVudCwgbm90IGEgc2VwYXJhdG9yIC0gYXMgaW4gTmV4dC5qcy4gKi9cbiAgaXQoXCJsZWF2ZXMgYW4gZW5jb2RlZCBiYWNrc2xhc2ggYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9hJTVDYlwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLm5vdC50b0JlKDMwOCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwic3BsaXRCb2R5XCIsICgpID0+IHtcbiAgY29uc3QgQ0hVTksgPSBCdWZmZXIuYWxsb2MoMTYgKiAxMDI0LCA3KTtcbiAgY29uc3QgdXBsb2FkID0gKCkgPT5cbiAgICBSZWFkYWJsZS5mcm9tKFxuICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogOCB9LCAoKSA9PiBDSFVOSyksXG4gICAgICB7IG9iamVjdE1vZGU6IGZhbHNlIH0sXG4gICAgKTtcblxuICBhc3luYyBmdW5jdGlvbiBkcmFpbihzdHJlYW06IEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICBsZW5ndGggKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgLy8gQSB0ZWUgYnVmZmVycyBmb3IgdGhlIGJyYW5jaCB0aGF0IGlzIGJlaGluZCwgc28gdGhlIG1pZGRsZXdhcmUgYnJhbmNoIHRoYXRcbiAgLy8gbm90aGluZyByZWFkcyB3b3VsZCBvdGhlcndpc2UgaG9sZCBldmVyeSBieXRlIHRoZSByb3V0ZSBzdHJlYW1zLlxuICBpdChcImNhbmNlbHMgdGhlIG1pZGRsZXdhcmUgY29weSBvbmNlIGRpc3BhdGNoIGlzIGRvbmUgd2l0aCBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHNwbGl0Qm9keSh1cGxvYWQoKSwgdHJ1ZSk7XG4gICAgYm9keS5yZWxlYXNlVW5yZWFkKGZhbHNlKTtcblxuICAgIGNvbnN0IHJlYWRlciA9IGJvZHkuZm9yRGlzcGF0Y2guZ2V0UmVhZGVyKCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWRlci5yZWFkKCkpLnRvRXF1YWwoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xuICAgIGV4cGVjdChhd2FpdCBkcmFpbihib2R5LmZvclJlcXVlc3QgYXMgUmVhZGFibGUpKS50b0JlKDggKiBDSFVOSy5sZW5ndGgpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyB0aGUgbWlkZGxld2FyZSBjb3B5IGFsb25lIHdoZW4gbWlkZGxld2FyZSBpcyByZWFkaW5nIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gc3BsaXRCb2R5KHVwbG9hZCgpLCB0cnVlKTtcbiAgICBjb25zdCByZWFkaW5nID0gZHJhaW4oXG4gICAgICBib2R5LmZvckRpc3BhdGNoIGFzIHVua25vd24gYXMgQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PixcbiAgICApO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG5cbiAgICBleHBlY3QoYXdhaXQgcmVhZGluZykudG9CZSg4ICogQ0hVTksubGVuZ3RoKTtcbiAgfSk7XG5cbiAgLy8gTWlkZGxld2FyZSBhbnN3ZXJlZCwgcG9zc2libHkgd2l0aCB0aGUgdXBsb2FkIGFzIGl0cyBvd24gYm9keTsgYHJlcWAgaXNcbiAgLy8gbmV2ZXIgcmVhZCwgc28gaXRzIGNvcHkgaXMgdGhlIG9uZSB0aGF0IHdvdWxkIHBpbGUgdXAuXG4gIGl0KFwicmVsZWFzZXMgdGhlIHJvdXRlJ3MgY29weSB3aGVuIG1pZGRsZXdhcmUgYW5zd2VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBzcGxpdEJvZHkodXBsb2FkKCksIHRydWUpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZCh0cnVlKTtcblxuICAgIGV4cGVjdCgoYm9keS5mb3JSZXF1ZXN0IGFzIFJlYWRhYmxlKS5kZXN0cm95ZWQpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KFxuICAgICAgYXdhaXQgZHJhaW4oYm9keS5mb3JEaXNwYXRjaCBhcyB1bmtub3duIGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pLFxuICAgICkudG9CZSg4ICogQ0hVTksubGVuZ3RoKTtcbiAgfSk7XG5cbiAgLy8gRXZlcnkgTGFtYmRhIHJlcXVlc3Qgd2l0aCBhIGJvZHk6IHRoZSBzaGVsbCBoYW5kcyB0aGUgcnVudGltZSBhIEJ1ZmZlci5cbiAgaXQoXCJyZWFkcyBhIEJ1ZmZlciBib2R5IHR3aWNlLCB3aG9sZSBlYWNoIHRpbWVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IEJ1ZmZlci5mcm9tKFwieFwiLnJlcGVhdCgxMDBfMDAwKSk7XG4gICAgY29uc3QgYm9keSA9IHNwbGl0Qm9keShzb3VyY2UsIHRydWUpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG5cbiAgICBleHBlY3QoXG4gICAgICBhd2FpdCBkcmFpbihib2R5LmZvckRpc3BhdGNoIGFzIHVua25vd24gYXMgQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PiksXG4gICAgKS50b0JlKHNvdXJjZS5sZW5ndGgpO1xuICAgIGV4cGVjdCgoYm9keS5mb3JSZXF1ZXN0IGFzIEJ1ZmZlcikubGVuZ3RoKS50b0JlKHNvdXJjZS5sZW5ndGgpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IHNwbGl0IGF0IGFsbCB3aXRob3V0IG1pZGRsZXdhcmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHVwbG9hZCgpO1xuICAgIGNvbnN0IGJvZHkgPSBzcGxpdEJvZHkoc291cmNlLCBmYWxzZSk7XG4gICAgZXhwZWN0KGJvZHkuZm9yUmVxdWVzdCkudG9CZShzb3VyY2UpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG4gICAgZXhwZWN0KHNvdXJjZS5kZXN0cm95ZWQpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIndhaXRVbnRpbFwiLCAoKSA9PiB7XG4gIGl0KFwiYXdhaXRzIHdvcmsgcmVnaXN0ZXJlZCBhZnRlciB0aGUgZmlyc3QgYmF0Y2ggc2V0dGxlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gam9pbihyb290LCBcImxhdGUtd2FpdC11bnRpbC1tYXJrZXJcIik7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiA9IG1hcmtlcjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZCh7IHVybDogXCIvP2xhdGVXYWl0VW50aWw9MVwiIH0pO1xuICAgICAgZXhwZWN0KHJlYWRGaWxlU3luYyhtYXJrZXIsIFwidXRmLThcIikpLnRvQmUoXCJsYXRlXCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUjtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYSBwcmVyZW5kZXJlZCBzdGF0dXMgcGFnZSwgcmVxdWVzdGVkIGRpcmVjdGx5XCIsICgpID0+IHtcbiAgaXQoXCJhbnN3ZXJzIC80MDQgd2l0aCBhIDQwNCwgYXMgbmV4dCBzdGFydCBkb2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvNDA0XCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShOT1RfRk9VTkRfSFRNTCk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyAvNTAwIHdpdGggYSA1MDBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi81MDBcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKEVSUk9SX0hUTUwpO1xuICB9KTtcblxuICBpdChcInN0aWxsIHNlcnZlcyB0aGVtIHRvIGEgUE9TVCwgd2hpY2ggbmV4dCBzdGFydCBkb2VzIG5vdCA0MDVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi80MDRcIiwgbWV0aG9kOiBcIlBPU1RcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYW4gYXV0by1leHBvcnRlZCBQYWdlcyBSb3V0ZXIgcGFnZVwiLCAoKSA9PiB7XG4gIGNvbnN0IEFCT1VUX0hUTUwgPSBcIjxodG1sPjxib2R5PmFib3V0PC9ib2R5PjwvaHRtbD5cIjtcbiAgbGV0IHBhZ2VzOiBOZXh0anNSdW50aW1lO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgbGV0IGFib3V0RmlsZSA9IFwiXCI7XG4gICAgY29uc3Qgc3RhZ2VkID0gc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgKG1hbmlmZXN0KSA9PiB7XG4gICAgICBhYm91dEZpbGUgPSBgJHttYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXJ9Ly5uZXh0L3NlcnZlci9wYWdlcy9hYm91dC5odG1sYDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICBzdGF0aWNGaWxlczogeyAuLi5tYW5pZmVzdC5zdGF0aWNGaWxlcywgXCIvYWJvdXRcIjogYWJvdXRGaWxlIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHdyaXRlKGpvaW4oc3RhZ2VkLCBhYm91dEZpbGUpLCBBQk9VVF9IVE1MKTtcbiAgICBwYWdlcyA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlZCk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUbyhtZXRob2Q6IHN0cmluZyk6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcGFnZXMuaGFuZGxlKFxuICAgICAgeyBtZXRob2QsIHVybDogXCIvYWJvdXRcIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIHJldHVybiBzaW5rO1xuICB9XG5cbiAgaXQoXCJpcyBzZXJ2ZWQgdG8gYSBHRVRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8oXCJHRVRcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShBQk9VVF9IVE1MKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGFueSBvdGhlciBtZXRob2Qgd2l0aCBhIDQwNSwgYXMgbmV4dCBzdGFydCBkb2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKFwiUE9TVFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5hbGxvdykudG9CZShcIkdFVCwgSEVBRFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJhIHJvdXRlIHBhY2thZ2VkIGludG8gYW5vdGhlciBmdW5jdGlvbkdyb3VwcyBncm91cFwiLCAoKSA9PiB7XG4gIGxldCBncm91cGVkOiBOZXh0anNSdW50aW1lO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgbGV0IG1pc3NpbmcgPSBcIlwiO1xuICAgIGNvbnN0IHN0YWdlZCA9IHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4ge1xuICAgICAgbWlzc2luZyA9IG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2lzci9baWRdXCJdLmZpbGVQYXRoO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGRlZmF1bHQ6IE9iamVjdC5rZXlzKG1hbmlmZXN0LmVudHJ5cG9pbnRzKS5maWx0ZXIoXG4gICAgICAgICAgICAodGVtcGxhdGUpID0+IHRlbXBsYXRlICE9PSBcIi9pc3IvW2lkXVwiLFxuICAgICAgICAgICksXG4gICAgICAgICAgYmxvZzogW1wiL2lzci9baWRdXCJdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBybVN5bmMoam9pbihzdGFnZWQsIG1pc3NpbmcpKTtcbiAgICBncm91cGVkID0gYXdhaXQgbG9hZFJ1bnRpbWUoc3RhZ2VkKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0KHVybDogc3RyaW5nKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVAgPSBcImRlZmF1bHRcIjtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgICAgYXdhaXQgZ3JvdXBlZC5oYW5kbGUoXG4gICAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmwsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgICAgc2luayxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc2luaztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVA7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGVkZ2UgbWF0Y2hlcyBjYXNlLXNlbnNpdGl2ZWx5IGFuZCBOZXh0LmpzIGRvZXNuJ3Q6IGAvSVNSLzFgIG1pc3NlZCB0aGVcbiAgLy8gYGJsb2dgIGdyb3VwJ3MgYmVoYXZpb3Igb25seSBiZWNhdXNlIG9mIGl0cyBjYXNlLlxuICBpdChcInJlZGlyZWN0cyBhIFVSTCB0aGF0IGRpZmZlcnMgb25seSBpbiBjYXNlIHRvIGl0cyBjYW5vbmljYWwgc3BlbGxpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvSVNSLzE/eD0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMzA4KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmxvY2F0aW9uKS50b0JlKFwiL2lzci8xP3g9MVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB0aGUgY2FzZSBvZiBhIGR5bmFtaWMgc2VnbWVudCdzIHZhbHVlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgZ2V0KFwiL0lTUi9BYkNcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgzMDgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMubG9jYXRpb24pLnRvQmUoXCIvaXNyL0FiQ1wiKTtcbiAgfSk7XG5cbiAgLy8gYC9fbmV4dC9pbWFnZWAgcnVucyBpbiB0aGUgZGVmYXVsdCBncm91cCBhbmQgcmVuZGVycyBhIHNvdXJjZSB0aGF0IGlzIG5vdFxuICAvLyBhIGZpbGUgaW4gcHJvY2VzczogZm9yIG9uZSBzZXJ2ZWQgYnkgYW5vdGhlciBncm91cCwgdGhhdCByZW5kZXJlZCB0aGUgNDA0XG4gIC8vIHBhZ2UgYW5kIGhhbmRlZCBpdHMgSFRNTCB0byB0aGUgb3B0aW1pemVyIGFzIHRoZSBpbWFnZS5cbiAgaXQoXCJyZXBvcnRzIGFuIGltYWdlIHNvdXJjZSBpbiBhbm90aGVyIGdyb3VwIHJhdGhlciB0aGFuIGZldGNoaW5nIGl0cyA0MDQgcGFnZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUCA9IFwiZGVmYXVsdFwiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZXRjaEludGVybmFsID0gKFxuICAgICAgICBncm91cGVkIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIGZldGNoSW50ZXJuYWw6IChcbiAgICAgICAgICAgIGhyZWY6IHN0cmluZyxcbiAgICAgICAgICAgIHJlcTogdW5rbm93bixcbiAgICAgICAgICApID0+IFByb21pc2U8e1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgICAgICAgICAgYm9keTogQnVmZmVyO1xuICAgICAgICAgICAgb3RoZXJHcm91cD86IHN0cmluZztcbiAgICAgICAgICB9PjtcbiAgICAgICAgfVxuICAgICAgKS5mZXRjaEludGVybmFsLmJpbmQoZ3JvdXBlZCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoSW50ZXJuYWwoXG4gICAgICAgIFwiL2lzci8xXCIsXG4gICAgICAgIG5ldyBTaGltSW5jb21pbmdNZXNzYWdlKHtcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgdXJsOiBcIi9fbmV4dC9pbWFnZT91cmw9JTJGaXNyJTJGMSZ3PTY0JnE9NzVcIixcbiAgICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBleHBlY3QocmVzcG9uc2UpLnRvTWF0Y2hPYmplY3QoeyBvdGhlckdyb3VwOiBcImJsb2dcIiB9KTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5ib2R5Lmxlbmd0aCkudG9CZSgwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVA7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcImlzIGEgNDA0LCBub3QgYSA1MDAsIHdoZW4gY2FzZSBpcyBub3QgdGhlIGRpZmZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVAgPSBcImRlZmF1bHRcIjtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgICAgYXdhaXQgZ3JvdXBlZC5oYW5kbGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgdXJsOiBcIi9pc3IvMVwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmssXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvTWF0Y2goL25vLXN0b3JlLyk7XG4gICAgICBleHBlY3QoU3RyaW5nKHdhcm4ubW9jay5jYWxsc1swXT8uWzBdKSkudG9Db250YWluKCdncm91cCBcImJsb2dcIicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUDtcbiAgICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicHVibGljLyBvbiB0aGUgTGFtYmRhIHR5cGVzXCIsICgpID0+IHtcbiAgbGV0IGxhbWJkYTogTmV4dGpzUnVudGltZTtcbiAgY29uc3Qgc2VuZCQgPSBqZXN0LnNweU9uKFMzQ2xpZW50LnByb3RvdHlwZSwgXCJzZW5kXCIpO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhZ2VkID0gc3RhZ2VEZXBsb3ltZW50KCk7XG4gICAgY29uc3QgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICByZWFkRmlsZVN5bmMoZGVwbG95ZWRNYW5pZmVzdFBhdGgoc3RhZ2VkKSwgXCJ1dGYtOFwiKSxcbiAgICApO1xuICAgIC8vIFdoYXQgYSBMYW1iZGEgemlwIGNhcnJpZXM6IHRoZSBsaXN0LCBub3QgdGhlIGZpbGVzLlxuICAgIHJtU3luYyhqb2luKHN0YWdlZCwgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLCBcInB1YmxpY1wiKSwge1xuICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdyaXRlKFxuICAgICAgam9pbihzdGFnZWQsIFJVTlRJTUVfRElSX05BTUUsIFBVQkxJQ19GSUxFU19GSUxFX05BTUUpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoW1wiZmVlZC54bWxcIiwgXCJpbWFnZXMvbG9nb0AyeC5wbmdcIl0pLFxuICAgICk7XG4gICAgbGFtYmRhID0gbmV3IE5leHRqc1J1bnRpbWUoe1xuICAgICAgZGVwbG95bWVudFJvb3Q6IHN0YWdlZCxcbiAgICAgIG1hbmlmZXN0LFxuICAgICAgYnVja2V0OiBcImFzc2V0c1wiLFxuICAgICAgYnVja2V0S2V5UHJlZml4OiBcImJhc2VcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHNlbmQkLm1vY2tSZXNldCgpKTtcbiAgYWZ0ZXJBbGwoKCkgPT4gc2VuZCQubW9ja1Jlc3RvcmUoKSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbiAgKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCBsYW1iZGEuaGFuZGxlKFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIHVybCxcbiAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIC4uLmhlYWRlcnMgfSxcbiAgICAgIH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgcmV0dXJuIHNpbms7XG4gIH1cblxuICBpdChcInN0cmVhbXMgYSBsaXN0ZWQgZmlsZSBmcm9tIHRoZSBhc3NldHMgYnVja2V0LCB1bmRlciBpdHMga2V5IHByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCI8cnNzLz5cIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIixcbiAgICAgIENvbnRlbnRMZW5ndGg6IDYsXG4gICAgICBFVGFnOiAnXCJlMVwiJyxcbiAgICAgIExhc3RNb2RpZmllZDogbmV3IERhdGUoXCIyMDI2LTAxLTAyVDAzOjA0OjA1WlwiKSxcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIjxyc3MvPlwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKS50b0JlKFwiYXBwbGljYXRpb24vcnNzK3htbFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmV0YWcpLnRvQmUoJ1wiZTFcIicpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFwicHVibGljLCBtYXgtYWdlPTBcIik7XG4gICAgY29uc3QgY29tbWFuZCA9IHNlbmQkLm1vY2suY2FsbHNbMF1bMF0gYXMgdW5rbm93biBhcyB7XG4gICAgICBpbnB1dDogeyBCdWNrZXQ6IHN0cmluZzsgS2V5OiBzdHJpbmcgfTtcbiAgICB9O1xuICAgIGV4cGVjdChjb21tYW5kLmlucHV0KS50b01hdGNoT2JqZWN0KHtcbiAgICAgIEJ1Y2tldDogXCJhc3NldHNcIixcbiAgICAgIEtleTogXCJiYXNlL2ZlZWQueG1sXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwidXNlcyB0aGUgZmlsZSdzIHJlYWwgbmFtZSBhcyB0aGUga2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+ICh7XG4gICAgICBCb2R5OiBSZWFkYWJsZS5mcm9tKFtCdWZmZXIuZnJvbShcInBuZ1wiKV0pLFxuICAgIH0pKSBhcyBuZXZlcik7XG4gICAgYXdhaXQgZ2V0KFwiL2ltYWdlcy9sb2dvQDJ4LnBuZ1wiKTtcbiAgICBjb25zdCBjb21tYW5kID0gc2VuZCQubW9jay5jYWxsc1swXVswXSBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlucHV0OiB7IEtleTogc3RyaW5nIH07XG4gICAgfTtcbiAgICBleHBlY3QoY29tbWFuZC5pbnB1dC5LZXkpLnRvQmUoXCJiYXNlL2ltYWdlcy9sb2dvQDJ4LnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGEgbWF0Y2hpbmcgSWYtTm9uZS1NYXRjaCB3aXRoIHRoZSAzMDQgUzMgZ2F2ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIk5vdCBNb2RpZmllZFwiKSwge1xuICAgICAgICBuYW1lOiBcIk5vdE1vZGlmaWVkXCIsXG4gICAgICAgICRtZXRhZGF0YTogeyBodHRwU3RhdHVzQ29kZTogMzA0IH0sXG4gICAgICB9KTtcbiAgICB9KSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiLCB7IFwiaWYtbm9uZS1tYXRjaFwiOiAnXCJlMVwiJyB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDMwNCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS5sZW5ndGgpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgdGhyb3VnaCB0byB0aGUgNDA0IHdoZW4gdGhlIG9iamVjdCBpcyBnb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiTm9TdWNoS2V5XCIpLCB7XG4gICAgICAgIG5hbWU6IFwiTm9TdWNoS2V5XCIsXG4gICAgICAgICRtZXRhZGF0YTogeyBodHRwU3RhdHVzQ29kZTogNDA0IH0sXG4gICAgICB9KTtcbiAgICB9KSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gIH0pO1xuXG4gIGl0KFwiZm9yd2FyZHMgYSBSYW5nZSBhbmQgYW5zd2VycyBTMydzIDIwNlwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCJyc3NcIildKSxcbiAgICAgIENvbnRlbnRMZW5ndGg6IDMsXG4gICAgICBDb250ZW50UmFuZ2U6IFwiYnl0ZXMgMS0zLzZcIixcbiAgICAgIEFjY2VwdFJhbmdlczogXCJieXRlc1wiLFxuICAgIH0pKSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiLCB7IHJhbmdlOiBcImJ5dGVzPTEtM1wiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjA2KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1yYW5nZVwiXSkudG9CZShcImJ5dGVzIDEtMy82XCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJhY2NlcHQtcmFuZ2VzXCJdKS50b0JlKFwiYnl0ZXNcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwicnNzXCIpO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBzZW5kJC5tb2NrLmNhbGxzWzBdWzBdIGFzIHVua25vd24gYXMge1xuICAgICAgaW5wdXQ6IHsgUmFuZ2U/OiBzdHJpbmcgfTtcbiAgICB9O1xuICAgIGV4cGVjdChjb21tYW5kLmlucHV0LlJhbmdlKS50b0JlKFwiYnl0ZXM9MS0zXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgYW4gdW5zYXRpc2ZpYWJsZSBSYW5nZSB3aXRoIGEgNDE2XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiSW52YWxpZFJhbmdlXCIpLCB7XG4gICAgICAgIG5hbWU6IFwiSW52YWxpZFJhbmdlXCIsXG4gICAgICAgICRtZXRhZGF0YTogeyBodHRwU3RhdHVzQ29kZTogNDE2IH0sXG4gICAgICB9KTtcbiAgICB9KSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiLCB7IHJhbmdlOiBcImJ5dGVzPTk5OS1cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQxNik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS5sZW5ndGgpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIC8vIFMzIGNhbid0IGV2YWx1YXRlIElmLVJhbmdlLCBhbmQgaWdub3JpbmcgUmFuZ2UgaXMgYWx3YXlzIGFsbG93ZWQuXG4gIGl0KFwiZHJvcHMgdGhlIFJhbmdlIHdoZW4gSWYtUmFuZ2UgaXMgcHJlc2VudFwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCI8cnNzLz5cIildKSxcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIiwge1xuICAgICAgcmFuZ2U6IFwiYnl0ZXM9MS0zXCIsXG4gICAgICBcImlmLXJhbmdlXCI6ICdcImUxXCInLFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBjb25zdCBjb21tYW5kID0gc2VuZCQubW9jay5jYWxsc1swXVswXSBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlucHV0OiB7IFJhbmdlPzogc3RyaW5nIH07XG4gICAgfTtcbiAgICBleHBlY3QoY29tbWFuZC5pbnB1dC5SYW5nZSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInVzZXMgdGhlIG9iamVjdCdzIG93biBDYWNoZS1Db250cm9sLCBhcyB0aGUgZWRnZSBzZXJ2ZXMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQkLm1vY2tJbXBsZW1lbnRhdGlvbigoYXN5bmMgKCkgPT4gKHtcbiAgICAgIEJvZHk6IFJlYWRhYmxlLmZyb20oW0J1ZmZlci5mcm9tKFwiPHJzcy8+XCIpXSksXG4gICAgICBDYWNoZUNvbnRyb2w6IFwicHVibGljLCBtYXgtYWdlPTM2MDBcIixcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXCJwdWJsaWMsIG1heC1hZ2U9MzYwMFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYW4gdW5saXN0ZWQgcGF0aCB0byB0aGUgYXBwXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBnZXQoXCIvdGVzdC50eHRcIik7XG4gICAgZXhwZWN0KHNlbmQkKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJldmFsaWRhdGVkUGFnZVJvdXRlc1wiLCAoKSA9PiB7XG4gIGNvbnN0IG1hbmlmZXN0ID0gKGkxOG46IHVua25vd24pID0+XG4gICAgKHsgYnVpbGRJZDogXCJiMVwiLCBjb25maWc6IHsgaTE4biB9IH0pIGFzIHVua25vd24gYXMgQWRhcHRlck1hbmlmZXN0O1xuICBjb25zdCBpMThuID0geyBsb2NhbGVzOiBbXCJlblwiLCBcImZyXCJdLCBkZWZhdWx0TG9jYWxlOiBcImVuXCIgfTtcblxuICBpdChcImlzIHRoZSByb3V0ZSBhbmQgaXRzIGRhdGEgcm91dGUgd2l0aG91dCBpMThuXCIsICgpID0+IHtcbiAgICBleHBlY3QocmV2YWxpZGF0ZWRQYWdlUm91dGVzKFwiL2Jsb2dcIiwgbWFuaWZlc3QobnVsbCkpKS50b0VxdWFsKFtcbiAgICAgIFtcIi9ibG9nXCIsIFwiL19uZXh0L2RhdGEvYjEvYmxvZy5qc29uXCJdLFxuICAgIF0pO1xuICAgIGV4cGVjdChyZXZhbGlkYXRlZFBhZ2VSb3V0ZXMoXCIvXCIsIG1hbmlmZXN0KG51bGwpKSkudG9FcXVhbChbXG4gICAgICBbXCIvXCIsIFwiL19uZXh0L2RhdGEvYjEvaW5kZXguanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgLy8gVGhlIE5leHQgY2xpZW50IHB1dHMgdGhlIGxvY2FsZSBpbiBldmVyeSBkYXRhIGhyZWYsIHRoZSBkZWZhdWx0IGluY2x1ZGVkLlxuICBpdChcInB1dHMgdGhlIGRlZmF1bHQgbG9jYWxlIGluIHRoZSBkYXRhIHJvdXRlLCBhbmQgaW52YWxpZGF0ZXMgYm90aCBIVE1MIHNwZWxsaW5nc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9ibG9nXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2VuL2Jsb2cuanNvblwiXSxcbiAgICAgIFtcIi9lbi9ibG9nXCIsIFwiL19uZXh0L2RhdGEvYjEvZW4vYmxvZy5qc29uXCJdLFxuICAgIF0pO1xuICAgIGV4cGVjdChyZXZhbGlkYXRlZFBhZ2VSb3V0ZXMoXCIvZW4vYmxvZ1wiLCBtYW5pZmVzdChpMThuKSkpLnRvRXF1YWwoW1xuICAgICAgW1wiL2Jsb2dcIiwgXCIvX25leHQvZGF0YS9iMS9lbi9ibG9nLmpzb25cIl0sXG4gICAgICBbXCIvZW4vYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2VuL2Jsb2cuanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJuYW1lcyB0aGUgcm9vdCdzIGRhdGEgcm91dGUgYWZ0ZXIgdGhlIGxvY2FsZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9cIiwgbWFuaWZlc3QoaTE4bikpKS50b0VxdWFsKFtcbiAgICAgIFtcIi9cIiwgXCIvX25leHQvZGF0YS9iMS9lbi5qc29uXCJdLFxuICAgICAgW1wiL2VuXCIsIFwiL19uZXh0L2RhdGEvYjEvZW4uanNvblwiXSxcbiAgICBdKTtcbiAgICBleHBlY3QocmV2YWxpZGF0ZWRQYWdlUm91dGVzKFwiL2ZyXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvZnJcIiwgXCIvX25leHQvZGF0YS9iMS9mci5qc29uXCJdLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImtlZXBzIGFub3RoZXIgbG9jYWxlJ3MgcGFnZSB0byBpdHMgb3duIHByZWZpeFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9mci9ibG9nXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvZnIvYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2ZyL2Jsb2cuanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG59KTtcbiJdfQ==
|