@dbx-tools/core 0.9.40 → 0.9.43
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/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/src/config-utils.js +4 -10
- package/package.json +2 -2
- package/src/config-utils.ts +10 -7
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.43";
|
|
7
7
|
export * as bin from "./src/bin.ts";
|
|
8
8
|
export * as brandFiles from "./src/brand-files.ts";
|
|
9
9
|
export * as bundle from "./src/bundle.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.43";
|
|
3
3
|
export * as bin from "./src/bin.ts";
|
|
4
4
|
export * as brandFiles from "./src/brand-files.ts";
|
|
5
5
|
export * as bundle from "./src/bundle.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.43";
|
|
6
6
|
export * as bin from "./src/bin.js";
|
|
7
7
|
export * as brandFiles from "./src/brand-files.js";
|
|
8
8
|
export * as bundle from "./src/bundle.js";
|
|
@@ -16,4 +16,4 @@ export * as projectUtils from "./src/project-utils.js";
|
|
|
16
16
|
export { BrandContextSchema, defaultBrandContext, parseBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand-files.js";
|
|
17
17
|
export { MAX_TCP_PORT, ENV_ONLY, valueSchema, bundleResourceSchema, bundleEnvEntrySchema, bundleAppSchema, appEnvEntrySchema, appSchema } from "./src/config-utils.js";
|
|
18
18
|
export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.js";
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3ZLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvY29yZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjQzXCI7XG5leHBvcnQgKiBhcyBiaW4gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmRGaWxlcyBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCAqIGFzIGJ1bmRsZSBmcm9tIFwiLi9zcmMvYnVuZGxlLnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWdVdGlscyBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgKiBhcyBkZXBlbmRlbmN5UmVzb2x2ZXIgZnJvbSBcIi4vc3JjL2RlcGVuZGVuY3ktcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIGV4ZWMgZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGUgZnJvbSBcIi4vc3JjL2ZpbGUudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVMb2NrIGZyb20gXCIuL3NyYy9maWxlLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2Nlc3NMb2NrIGZyb20gXCIuL3NyYy9wcm9jZXNzLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2plY3RVdGlscyBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuZXhwb3J0IHR5cGUgeyBCaW5Db250ZXh0LCBCaW5TZWxlY3Rpb25Db250ZXh0LCBCaW5TZWxlY3RvciwgQmluVmVyc2lvbk91dHB1dCwgQmluVmVyc2lvblBhcnNlciwgQmluT3B0aW9ucywgQmluVXJsUmVzb2x2ZUNvbnRleHQsIEJpblNvdXJjZSwgQmluVXJsIH0gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0IHsgQnJhbmRDb250ZXh0U2NoZW1hLCBkZWZhdWx0QnJhbmRDb250ZXh0LCBwYXJzZUJyYW5kQ29udGV4dCwgYnJhbmRDb250ZXh0SnNvblNjaGVtYSwgYnJhbmRDb250ZXh0UHJvbXB0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLWZpbGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCwgQnJhbmRDb250ZXh0SW5wdXQgfSBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCB7IE1BWF9UQ1BfUE9SVCwgRU5WX09OTFksIHZhbHVlU2NoZW1hLCBidW5kbGVSZXNvdXJjZVNjaGVtYSwgYnVuZGxlRW52RW50cnlTY2hlbWEsIGJ1bmRsZUFwcFNjaGVtYSwgYXBwRW52RW50cnlTY2hlbWEsIGFwcFNjaGVtYSB9IGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29uZmlnTWFwVmFsdWUsIENvbmZpZ0RhdGEsIENvbmZpZ1NvdXJjZSwgQ29uZmlnT3B0aW9ucywgQ29uZmlnRmlsZSB9IGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGVwZW5kZW5jeVJlc29sdmVyT3B0aW9ucywgRGVwZW5kZW5jeUluZm8sIFJlc29sdmVkTnBtVmVyc2lvbiwgTnBtU3BlY2lmaWVySW5wdXQsIFJlc29sdmVkTnBtRGVwZW5kZW5jaWVzLCBNaXNzaW5nRGVwZW5kZW5jeUluZm8gfSBmcm9tIFwiLi9zcmMvZGVwZW5kZW5jeS1yZXNvbHZlci50c1wiO1xuZXhwb3J0IHsgQ09NTUFORF9OT1RfRk9VTkRfRVhJVF9DT0RFIH0gZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRXhlY1N0ZGlvLCBMaW5lSGFuZGxlciwgU3RkaW9PcHRpb24sIEV4ZWNSZXN1bHQsIENoaWxkUHJvY2Vzc1Jlc3VsdCwgRXhlY09wdGlvbnMsIFN5bmNFeGVjU3RkaW8sIFN5bmNFeGVjT3B0aW9ucywgU3Bhd25BcmdzIH0gZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRmlsZUxvY2tCYWNrZW5kLCBGaWxlTG9ja0FjcXVpc2l0aW9uLCBGaWxlTG9ja09wdGlvbnMsIEZpbGVMb2NrTGVhc2UgfSBmcm9tIFwiLi9zcmMvZmlsZS1sb2NrLnRzXCI7XG5leHBvcnQgdHlwZSB7IFByb2plY3RDb250ZXh0LCBOcG1SZWdpc3RyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuIl19
|
package/lib/src/config-utils.js
CHANGED
|
@@ -33,7 +33,7 @@ import { spawnSync } from "node:child_process";
|
|
|
33
33
|
import { readFileSync } from "node:fs";
|
|
34
34
|
import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
35
35
|
import { parseEnv } from "node:util";
|
|
36
|
-
import { environmentUtils, json, log, object, stringUtils } from "@dbx-tools/shared-core";
|
|
36
|
+
import { environmentUtils, json, log, object, options as sharedOptions, stringUtils, } from "@dbx-tools/shared-core";
|
|
37
37
|
import { parse as parseYaml } from "yaml";
|
|
38
38
|
import { z } from "zod";
|
|
39
39
|
import { cachedRecord, statSync } from "./file.js";
|
|
@@ -50,7 +50,7 @@ const NODE_ENV_ALTERNATIVES = {
|
|
|
50
50
|
development: ["dev"],
|
|
51
51
|
};
|
|
52
52
|
/** Highest valid TCP port number. */
|
|
53
|
-
export const MAX_TCP_PORT =
|
|
53
|
+
export const MAX_TCP_PORT = sharedOptions.MAX_TCP_PORT;
|
|
54
54
|
/** Boolean environment override for project `.env` reads. */
|
|
55
55
|
const CONFIG_DOTENV_KEY = "DBX_TOOLS_CONFIG_DOTENV";
|
|
56
56
|
/** Boolean environment override for Databricks bundle reads. */
|
|
@@ -67,13 +67,7 @@ export const valueSchema = z
|
|
|
67
67
|
.refine((value) => !/\$\{[^}]+\}/.test(value), {
|
|
68
68
|
message: "Interpolated values are not allowed",
|
|
69
69
|
});
|
|
70
|
-
const portValueSchema =
|
|
71
|
-
if (typeof input === "number")
|
|
72
|
-
return input;
|
|
73
|
-
if (typeof input !== "string" || !/^\d+$/.test(input.trim()))
|
|
74
|
-
return Number.NaN;
|
|
75
|
-
return Number(input.trim());
|
|
76
|
-
}, z.number().int().min(1).max(MAX_TCP_PORT));
|
|
70
|
+
const portValueSchema = sharedOptions.tcpPortSchema;
|
|
77
71
|
const positiveNumberValue = z.preprocess((input) => object.toNumber(input), z.number().positive());
|
|
78
72
|
const positiveIntValue = positiveNumberValue.transform(Math.floor);
|
|
79
73
|
/** A named bundle or App resource; concrete resource fields pass through. */
|
|
@@ -591,4 +585,4 @@ function loadAppFile(cwd) {
|
|
|
591
585
|
});
|
|
592
586
|
return data === undefined ? undefined : { path, data };
|
|
593
587
|
}
|
|
594
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxJQUFJLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekYsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztBQStDOUQsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDO0FBQ2xDLE1BQU0sZUFBZSxHQUE0QixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RixNQUFNLGlCQUFpQixHQUFHLENBQUMsZ0JB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Q0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGF5ZXJlZCBjb25maWd1cmF0aW9uIGxvb2t1cDogZW52aXJvbm1lbnQsIGAuZW52YCwgYnVuZGxlLCBhbmQgYGFwcC55YW1sYC5cbiAqXG4gKiBFdmVyeSBwYWNrYWdlIHJlc29sdmVzIHNldHRpbmdzIHRoZSBzYW1lIHdheTogdGFrZSB0aGUgY2FsbGVyJ3MgdmFsdWUsIGVsc2VcbiAqIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLCBlbHNlIGEgZGVmYXVsdC4gTG9jYWwgZGV2ZWxvcG1lbnQgYWRkcyB0d28gZmFsbGJhY2tcbiAqIGxvY2F0aW9uczogYC5lbnZgIGZpbGVzLCBvbmUgQXBwJ3MgYHJlc291cmNlcy5hcHBzLjxhcHA+LmNvbmZpZy5lbnZgIGluXG4gKiBgZGF0YWJyaWNrcy55bWxgLCBhbmQgbGl0ZXJhbCBlbnYgdmFsdWVzIGluIGBhcHAueWFtbGAgLyBgYXBwLnltbGAuXG4gKlxuICoge0BsaW5rIHZhbHVlc30gaXMgTEFaWSAoYW4gYG9iamVjdC5TZXF1ZW5jZWApLCBzbyBgZGF0YWJyaWNrcyBidW5kbGUgdmFsaWRhdGVgXG4gKiBpcyBvbmx5IHNwYXduZWQgd2hlbiB0aGUgZW52aXJvbm1lbnQgYW5kIGAuZW52YCBib3RoIG1pc3NlZDsgYXBwIFlBTUwgaXMgb25seVxuICogcmVhZCBhZnRlciB0aGUgYnVuZGxlIHNvdXJjZSBhbHNvIG1pc3NlZC5cbiAqXG4gKiBJbnNpZGUgYSBkZXBsb3llZCBEYXRhYnJpY2tzIEFwcCBhbGwgdGhyZWUgZmlsZSBzb3VyY2VzIGFyZSBza2lwcGVkIGJ5IGRlZmF1bHRcbiAqICh7QGxpbmsgaXNEYXRhYnJpY2tzQXBwRW52fSk6IHRoZSBwbGF0Zm9ybSBoYXMgYWxyZWFkeSB0dXJuZWQgdGhlbSBpbnRvIHJlYWxcbiAqIGVudmlyb25tZW50IHZhcmlhYmxlcywgdGhlcmUgaXMgbm8gYnVuZGxlIHRvIHZhbGlkYXRlLCBhbmQgdGhlIGBkYXRhYnJpY2tzYFxuICogQ0xJIGlzIG5vdCBvbiB0aGUgaW1hZ2UuIEJvb2xlYW4gZW52aXJvbm1lbnQgb3ZlcnJpZGVzIGNhbiBmb3JjZSBlaXRoZXIgZmlsZVxuICogc291cmNlIG9uIG9yIG9mZiB3aGVuIGEgdG9vbCBuZWVkcyBkaWZmZXJlbnQgYmVoYXZpb3IuXG4gKlxuICogT25seSB0aGUgc2luZ2xlIGJ1bmRsZSBhcHAncyBgY29uZmlnLmVudmAgYW5kIGxpdGVyYWwgYXBwIFlBTUwgYGVudltdLnZhbHVlYFxuICogZW50cmllcyBhcmUgY29uc3VsdGVkLiBSb290IGJ1bmRsZSBgdmFyaWFibGVzYCBhcmUgbm90OiB0aGV5IGFyZSBhdXRob3JpbmdcbiAqIGlucHV0cyBmb3IgdGhlIGJ1bmRsZSBpdHNlbGYgKGludGVycG9sYXRlZCBpbnRvIHRhcmdldHMsIHJlc291cmNlcywgYW5kIHBhdGhzKSxcbiAqIHNvIHRyZWF0aW5nIG9uZSBhcyBhIHByb2Nlc3Mgc2V0dGluZyByZXNvbHZlcyBuYW1lcyB0aGUgZGVwbG95ZWQgYXBwIG5ldmVyIHNlZXMuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgdGhlIHJlcG9zaXRvcnktd2lkZSBvd25lciBmb3IgbGF5ZXJlZCBjb25maWd1cmF0aW9uLiBSZXVzZSBpdFxuICogaW5zdGVhZCBvZiBhZGRpbmcgbG9jYWwgZW52aXJvbm1lbnQtbmFtZSBnZW5lcmF0aW9uLCBgLmVudmAgcmVhZGVycywgYnVuZGxlXG4gKiB2YWxpZGF0aW9uLCBBcHAgWUFNTCBwYXJzaW5nLCBvciBzY2FsYXIgY29lcmNpb24gcG9saWN5LlxuICpcbiAqIE5vZGUtb25seSAoYGNoaWxkX3Byb2Nlc3NgLCBgZnNgLCBgcHJvY2Vzc2ApLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgaXNBYnNvbHV0ZSwgcmVsYXRpdmUsIHJlc29sdmUsIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBhcnNlRW52IH0gZnJvbSBcIm5vZGU6dXRpbFwiO1xuaW1wb3J0IHsgZW52aXJvbm1lbnRVdGlscywganNvbiwgbG9nLCBvYmplY3QsIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlWWFtbCB9IGZyb20gXCJ5YW1sXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgY2FjaGVkUmVjb3JkLCBzdGF0U3luYyB9IGZyb20gXCIuL2ZpbGUudHNcIjtcbmltcG9ydCB7IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5LCByb290IGFzIHJlc29sdmVQcm9qZWN0Um9vdCB9IGZyb20gXCIuL3Byb2plY3QtdXRpbHMudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImNvbmZpZ1wiKTtcbmNvbnN0IGNvbmZpZ0ZpbGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbnR5cGUgQ29uZmlnS2V5ID0gc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG5cbi8qKiBTY2FsYXIgb3IgbGlzdCB2YWx1ZSBhY2NlcHRlZCBieSBhbiBpbi1tZW1vcnkgY29uZmlndXJhdGlvbiBtYXAuICovXG5leHBvcnQgdHlwZSBDb25maWdNYXBWYWx1ZSA9IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZDtcbi8qKiBJbW11dGFibGUgc3RyaW5nLWtleWVkIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHVzZWQgYnkgdGhlIGBjb25maWdgIHNvdXJjZS4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZ0RhdGEgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBDb25maWdNYXBWYWx1ZT4+O1xuXG4vKiogV2hlcmUgYSB2YWx1ZSBtYXkgY29tZSBmcm9tLCBjb25zdWx0ZWQgaW4gdGhlIG9yZGVyIGdpdmVuLiAqL1xuZXhwb3J0IHR5cGUgQ29uZmlnU291cmNlID0gXCJjb25maWdcIiB8IFwiZW52XCIgfCBcImRvdGVudlwiIHwgXCJidW5kbGVcIiB8IFwiYXBwXCI7XG5cbi8qKiBTb3VyY2Ugb3JkZXIsIG5hbWVzcGFjZXMsIHBhcnNlZCBmaWxlcywgYW5kIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB2YWx1ZSByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIE91dGVybW9zdCBuYW1lc3BhY2VzIHRyaWVkIGJlZm9yZSBlYWNoIGtleS4gRGVmYXVsdHMgdG8gYERCWF9UT09MU2AuXG4gICAqL1xuICBzY29wZT86IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogQ2FwYWJpbGl0eSBuYW1lc3BhY2VzIGluc2VydGVkIGFmdGVyIHRoZSBzY29wZSBhbmQgYmVmb3JlIGVhY2gga2V5LiAqL1xuICBwcmVmaXg/OiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIENvbnN0YW50IGNvbmZpZyBtYXBzIHJlYWQgYnkgdGhlIGBjb25maWdgIHNvdXJjZS4gKi9cbiAgZGF0YT86IENvbmZpZ0RhdGEgfCByZWFkb25seSBDb25maWdEYXRhW107XG4gIC8qKiBQYXJzZWQgYnVuZGxlIGRhdGEgdXNlZCBpbnN0ZWFkIG9mIGxvYWRpbmcgYGRhdGFicmlja3MueW1sYC4gKi9cbiAgYnVuZGxlRGF0YT86IENvbmZpZ0ZpbGUgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIEF1dGgtcmVzb2x2ZWQgRGF0YWJyaWNrcyBwcm9maWxlIHBhc3NlZCBleHBsaWNpdGx5IHRvIGJ1bmRsZSB2YWxpZGF0aW9uLiAqL1xuICBidW5kbGVQcm9maWxlPzogc3RyaW5nO1xuICAvKiogUGFyc2VkIGFwcCBZQU1MIGRhdGEgdXNlZCBpbnN0ZWFkIG9mIGxvYWRpbmcgYGFwcC55YW1sYC4gKi9cbiAgYXBwRGF0YT86IENvbmZpZ0ZpbGUgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFNvdXJjZXMgaW4gcHJlY2VkZW5jZSBvcmRlci4gRGVmYXVsdDogYGNvbmZpZ2AsIGBlbnZgLCBgZG90ZW52YCwgYGJ1bmRsZWAsIGBhcHBgLiAqL1xuICBzb3VyY2VzPzogQ29uZmlnU291cmNlIHwgcmVhZG9ubHkgQ29uZmlnU291cmNlW107XG4gIC8qKiBEaXJlY3RvcnkgdG8gcmVzb2x2ZSBgLmVudmAgYW5kIHRoZSBidW5kbGUgZnJvbS4gRGVmYXVsdDogYHByb2Nlc3MuY3dkKClgLiAqL1xuICBjd2Q/OiBzdHJpbmc7XG59XG5cbi8qKiBPbmUgcmVzb2x2ZWQgdmFsdWUsIHRhZ2dlZCB3aXRoIHRoZSBrZXkgYW5kIHNvdXJjZSBpdCBjYW1lIGZyb20uICovXG5pbnRlcmZhY2UgQ29uZmlnVmFsdWUge1xuICBrZXk6IHN0cmluZztcbiAgc291cmNlOiBDb25maWdTb3VyY2U7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKiBBIGNvbmZpZyBmaWxlIGZvdW5kIG9uIGRpc2ssIHdpdGggaXRzIHBhcnNlZCBjb250ZW50cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnRmlsZSB7XG4gIHBhdGg6IHN0cmluZztcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmNvbnN0IERFRkFVTFRfU0NPUEUgPSBcIkRCWF9UT09MU1wiO1xuY29uc3QgREVGQVVMVF9TT1VSQ0VTOiByZWFkb25seSBDb25maWdTb3VyY2VbXSA9IFtcImNvbmZpZ1wiLCBcImVudlwiLCBcImRvdGVudlwiLCBcImJ1bmRsZVwiLCBcImFwcFwiXTtcbmNvbnN0IEJVTkRMRV9GSUxFX05BTUVTID0gW1wiZGF0YWJyaWNrcy55bWxcIiwgXCJkYXRhYnJpY2tzLnlhbWxcIl0gYXMgY29uc3Q7XG5jb25zdCBBUFBfRklMRV9OQU1FUyA9IFtcImFwcC55YW1sXCIsIFwiYXBwLnltbFwiXSBhcyBjb25zdDtcbmNvbnN0IERPVEVOVl9GSUxFX05BTUUgPSBcIi5lbnZcIjtcbmNvbnN0IE5PREVfRU5WX0FMVEVSTkFUSVZFUyA9IHtcbiAgcHJvZHVjdGlvbjogW1wicHJvZFwiXSxcbiAgZGV2ZWxvcG1lbnQ6IFtcImRldlwiXSxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPjtcblxuLyoqIEhpZ2hlc3QgdmFsaWQgVENQIHBvcnQgbnVtYmVyLiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9UQ1BfUE9SVCA9IDY1XzUzNTtcblxuLyoqIEJvb2xlYW4gZW52aXJvbm1lbnQgb3ZlcnJpZGUgZm9yIHByb2plY3QgYC5lbnZgIHJlYWRzLiAqL1xuY29uc3QgQ09ORklHX0RPVEVOVl9LRVkgPSBcIkRCWF9UT09MU19DT05GSUdfRE9URU5WXCI7XG5cbi8qKiBCb29sZWFuIGVudmlyb25tZW50IG92ZXJyaWRlIGZvciBEYXRhYnJpY2tzIGJ1bmRsZSByZWFkcy4gKi9cbmNvbnN0IENPTkZJR19CVU5ETEVfS0VZID0gXCJEQlhfVE9PTFNfQ09ORklHX0JVTkRMRVwiO1xuXG4vKiogQm9vbGVhbiBlbnZpcm9ubWVudCBvdmVycmlkZSBmb3IgRGF0YWJyaWNrcyBBcHAgWUFNTCByZWFkcy4gKi9cbmNvbnN0IENPTkZJR19BUFBfS0VZID0gXCJEQlhfVE9PTFNfQ09ORklHX0FQUFwiO1xuXG4vKiogRXhhY3QgcHJvY2Vzcy1lbnZpcm9ubWVudCBsb29rdXAgZm9yIGNhbGxlcnMgdGhhdCBkbyBub3QgcmVhZCBsb2NhbCBjb25maWcgZmlsZXMuICovXG5leHBvcnQgY29uc3QgRU5WX09OTFkgPSB7IHNjb3BlOiBbXSBhcyBjb25zdCwgc291cmNlczogXCJlbnZcIiBhcyBjb25zdCB9O1xuXG4vKiogTm9uLWVtcHR5IGxpdGVyYWwgY29uZmlndXJhdGlvbiB2YWx1ZSB3aXRoIHVucmVzb2x2ZWQgaW50ZXJwb2xhdGlvbiByZWplY3RlZC4gKi9cbmV4cG9ydCBjb25zdCB2YWx1ZVNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC50cmltKClcbiAgLm1pbigxKVxuICAucmVmaW5lKCh2YWx1ZTogc3RyaW5nKSA9PiAhL1xcJFxce1tefV0rXFx9Ly50ZXN0KHZhbHVlKSwge1xuICAgIG1lc3NhZ2U6IFwiSW50ZXJwb2xhdGVkIHZhbHVlcyBhcmUgbm90IGFsbG93ZWRcIixcbiAgfSk7XG5cbmNvbnN0IHBvcnRWYWx1ZVNjaGVtYSA9IHoucHJlcHJvY2VzcygoaW5wdXQpID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGlucHV0O1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSBcInN0cmluZ1wiIHx8ICEvXlxcZCskLy50ZXN0KGlucHV0LnRyaW0oKSkpIHJldHVybiBOdW1iZXIuTmFOO1xuICByZXR1cm4gTnVtYmVyKGlucHV0LnRyaW0oKSk7XG59LCB6Lm51bWJlcigpLmludCgpLm1pbigxKS5tYXgoTUFYX1RDUF9QT1JUKSk7XG5cbmNvbnN0IHBvc2l0aXZlTnVtYmVyVmFsdWUgPSB6LnByZXByb2Nlc3MoKGlucHV0KSA9PiBvYmplY3QudG9OdW1iZXIoaW5wdXQpLCB6Lm51bWJlcigpLnBvc2l0aXZlKCkpO1xuY29uc3QgcG9zaXRpdmVJbnRWYWx1ZSA9IHBvc2l0aXZlTnVtYmVyVmFsdWUudHJhbnNmb3JtKE1hdGguZmxvb3IpO1xuXG4vKiogQSBuYW1lZCBidW5kbGUgb3IgQXBwIHJlc291cmNlOyBjb25jcmV0ZSByZXNvdXJjZSBmaWVsZHMgcGFzcyB0aHJvdWdoLiAqL1xuZXhwb3J0IGNvbnN0IGJ1bmRsZVJlc291cmNlU2NoZW1hID0gei5vYmplY3QoeyBuYW1lOiB2YWx1ZVNjaGVtYS5vcHRpb25hbCgpIH0pLnBhc3N0aHJvdWdoKCk7XG5cbi8qKiBEYXRhYnJpY2tzIGJ1bmRsZSBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudCBlbnRyeS4gKi9cbmV4cG9ydCBjb25zdCBidW5kbGVFbnZFbnRyeVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogdmFsdWVTY2hlbWEub3B0aW9uYWwoKSxcbiAgdmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmFsdWVfZnJvbTogdmFsdWVTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG4vKiogRGF0YWJyaWNrcyBidW5kbGUgYXBwbGljYXRpb24gZmllbGRzIHVzZWQgYnkgbG9jYWwgY29uZmlndXJhdGlvbiByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGJ1bmRsZUFwcFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogdmFsdWVTY2hlbWEub3B0aW9uYWwoKSxcbiAgY29uZmlnOiB6Lm9iamVjdCh7IGVudjogei5hcnJheShidW5kbGVFbnZFbnRyeVNjaGVtYSkub3B0aW9uYWwoKSB9KS5vcHRpb25hbCgpLFxuICByZXNvdXJjZXM6IHouYXJyYXkoYnVuZGxlUmVzb3VyY2VTY2hlbWEpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIERhdGFicmlja3MgQXBwIFlBTUwgZW52aXJvbm1lbnQgZW50cnkuICovXG5leHBvcnQgY29uc3QgYXBwRW52RW50cnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHZhbHVlU2NoZW1hLFxuICB2YWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB2YWx1ZUZyb206IHZhbHVlU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIERhdGFicmlja3MgQXBwIFlBTUwgZmllbGRzIHVzZWQgYnkgbG9jYWwgY29uZmlndXJhdGlvbiByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGFwcFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW52OiB6LmFycmF5KGFwcEVudkVudHJ5U2NoZW1hKS5vcHRpb25hbCgpLFxuICByZXNvdXJjZXM6IHouYXJyYXkoYnVuZGxlUmVzb3VyY2VTY2hlbWEpLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgYnVuZGxlQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICByZXNvdXJjZXM6IHoub2JqZWN0KHsgYXBwczogei5yZWNvcmQoei5zdHJpbmcoKSwgYnVuZGxlQXBwU2NoZW1hKS5vcHRpb25hbCgpIH0pLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIEZsYXR0ZW4gdGhlIHNpbmdsZSBidW5kbGUgQXBwJ3MgYGNvbmZpZy5lbnZgLCByZXNvbHZpbmcgcmVzb3VyY2UgcmVmZXJlbmNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQnVuZGxlRW52KGRhdGE6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gYnVuZGxlQ29uZmlnU2NoZW1hLnNhZmVQYXJzZShkYXRhKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHt9O1xuICBjb25zdCBhcHBzID0gT2JqZWN0LnZhbHVlcyhwYXJzZWQuZGF0YS5yZXNvdXJjZXM/LmFwcHMgPz8ge30pO1xuICBpZiAoYXBwcy5sZW5ndGggIT09IDEpIHJldHVybiB7fTtcbiAgY29uc3QgYXBwID0gYXBwc1swXTtcbiAgY29uc3QgcmVzb3VyY2VzID0gbmV3IE1hcChcbiAgICAoYXBwPy5yZXNvdXJjZXMgPz8gW10pXG4gICAgICAuZmlsdGVyKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UubmFtZSlcbiAgICAgIC5tYXAoKHJlc291cmNlKSA9PiBbcmVzb3VyY2UubmFtZSEsIHJlc291cmNlXSBhcyBjb25zdCksXG4gICk7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFwcD8uY29uZmlnPy5lbnYgPz8gW10pIHtcbiAgICBpZiAoIWVudHJ5Lm5hbWUpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGxpdGVyYWwgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UoZW50cnkudmFsdWUpO1xuICAgIGlmIChsaXRlcmFsLnN1Y2Nlc3MpIHtcbiAgICAgIHJlc3VsdFtlbnRyeS5uYW1lXSA9IGxpdGVyYWwuZGF0YTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByZWZlcmVuY2VkID0gZW50cnkudmFsdWVfZnJvbVxuICAgICAgPyByZXNvdXJjZVZhbHVlKHJlc291cmNlcy5nZXQoZW50cnkudmFsdWVfZnJvbSkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAocmVmZXJlbmNlZCkgcmVzdWx0W2VudHJ5Lm5hbWVdID0gcmVmZXJlbmNlZDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogRmxhdHRlbiBgYXBwLnlhbWxgIGVudiBlbnRyaWVzLCByZXNvbHZpbmcgYHZhbHVlRnJvbWAgcmVzb3VyY2UgcmVmZXJlbmNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQXBwRW52KGRhdGE6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gYXBwU2NoZW1hLnNhZmVQYXJzZShkYXRhKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHt9O1xuICBjb25zdCByZXNvdXJjZXMgPSBuZXcgTWFwKFxuICAgIChwYXJzZWQuZGF0YS5yZXNvdXJjZXMgPz8gW10pXG4gICAgICAuZmlsdGVyKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UubmFtZSlcbiAgICAgIC5tYXAoKHJlc291cmNlKSA9PiBbcmVzb3VyY2UubmFtZSEsIHJlc291cmNlXSBhcyBjb25zdCksXG4gICk7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBhcnNlZC5kYXRhLmVudiA/PyBbXSkge1xuICAgIGNvbnN0IGxpdGVyYWwgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UoZW50cnkudmFsdWUpO1xuICAgIGlmIChsaXRlcmFsLnN1Y2Nlc3MpIHtcbiAgICAgIHJlc3VsdFtlbnRyeS5uYW1lXSA9IGxpdGVyYWwuZGF0YTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByZWZlcmVuY2VkID0gZW50cnkudmFsdWVGcm9tID8gcmVzb3VyY2VWYWx1ZShyZXNvdXJjZXMuZ2V0KGVudHJ5LnZhbHVlRnJvbSkpIDogdW5kZWZpbmVkO1xuICAgIGlmIChyZWZlcmVuY2VkKSByZXN1bHRbZW50cnkubmFtZV0gPSByZWZlcmVuY2VkO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlVmFsdWUocmVzb3VyY2U6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IHBhdGggb2YgW1xuICAgIFtcInNxbF93YXJlaG91c2VcIiwgXCJpZFwiXSxcbiAgICBbXCJnZW5pZV9zcGFjZVwiLCBcInNwYWNlX2lkXCJdLFxuICAgIFtcInBvc3RncmVzXCIsIFwiZW5kcG9pbnRcIl0sXG4gICAgW1wicG9zdGdyZXNcIiwgXCJkYXRhYmFzZVwiXSxcbiAgICBbXCJwb3N0Z3Jlc1wiLCBcImJyYW5jaFwiXSxcbiAgXSBhcyBjb25zdCkge1xuICAgIGxldCB2YWx1ZSA9IHJlc291cmNlO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXRoKSB2YWx1ZSA9IG9iamVjdC5pc1JlY29yZCh2YWx1ZSkgPyB2YWx1ZVtwYXJ0XSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJzZWQgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UodmFsdWUpO1xuICAgIGlmIChwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHBhcnNlZC5kYXRhO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBXYWxrIGEgZG90LXNlcGFyYXRlZCBwYXRoIHRocm91Z2ggcGFyc2VkIGJ1bmRsZSBkYXRhLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1bmRsZVBhdGgoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgY3VycmVudDogdW5rbm93biA9IGRhdGE7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoIW9iamVjdC5pc1JlY29yZChjdXJyZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBuZXh0ID0gY3VycmVudFtwYXJ0c1tpbmRleF0hXTtcbiAgICBpZiAoaW5kZXggPT09IHBhcnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGNvbnN0IGRpcmVjdCA9IHZhbHVlU2NoZW1hLnNhZmVQYXJzZShuZXh0KTtcbiAgICAgIGlmIChkaXJlY3Quc3VjY2VzcykgcmV0dXJuIGRpcmVjdC5kYXRhO1xuICAgICAgaWYgKG9iamVjdC5pc1JlY29yZChuZXh0KSkge1xuICAgICAgICBjb25zdCBuZXN0ZWQgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UobmV4dC52YWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXN0ZWQuc3VjY2VzcyA/IG5lc3RlZC5kYXRhIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IG5leHQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYSBEYXRhYnJpY2tzIEFwcCBydW50aW1lIGZyb20gaXRzIHJlcXVpcmVkIG5hbWUsIGhvc3QsIGFuZCBwb3J0LlxuICpcbiAqIGBEQlhfVE9PTFNfREFUQUJSSUNLU19BUFBfRU5WYCB0YWtlcyBwcmVjZWRlbmNlIHdoZW4gaXQgY29udGFpbnMgYSByZWNvZ25pemVkXG4gKiBib29sZWFuIHZhbHVlLiBUaGlzIGxldHMgbG9jYWwgdG9vbHMgZW11bGF0ZSB0aGUgZGVwbG95ZWQgcnVudGltZSAoYHRydWVgKSBvclxuICogbGV0cyB1bnVzdWFsIGRlcGxveWVkIHByb2Nlc3NlcyByZXRhaW4gbG9jYWwgY29uZmlnIGxvb2t1cCAoYGZhbHNlYCkuIEFuXG4gKiBhYnNlbnQgb3IgdW5yZWNvZ25pemVkIG92ZXJyaWRlIGZhbGxzIGJhY2sgdG8gc3RydWN0dXJhbCBkZXRlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFicmlja3NBcHBFbnYoXG4gIHNvdXJjZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiA9IHByb2Nlc3MuZW52LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbnZpcm9ubWVudFV0aWxzLmlzRGF0YWJyaWNrc0FwcEVudihzb3VyY2UpO1xufVxuXG4vKiogRXhhY3QsIHVwcGVyY2FzZSwgYW5kIHRva2VuaXplZC11cHBlcmNhc2UgbmFtZXMgZm9yIGEgaHVtYW4tZnJpZW5kbHkga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudmlyb25tZW50S2V5cyhuYW1lOiBzdHJpbmcpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gW107XG4gIHJldHVybiBvYmplY3RcbiAgICAuc2VxdWVuY2UoXG4gICAgICB0cmltbWVkLFxuICAgICAgdHJpbW1lZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgQXJyYXkuZnJvbShzdHJpbmdVdGlscy50b2tlbml6ZSh0cmltbWVkKSkuam9pbihcIl9cIikudG9VcHBlckNhc2UoKSxcbiAgICApXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5kaXN0aW5jdCgpXG4gICAgLnRvQXJyYXkoKTtcbn1cblxuLyoqIENhbmRpZGF0ZSBuYW1lcyBpbiBzY29wZSwgcHJlZml4LCBhbmQgaW5wdXQgcHJlY2VkZW5jZSBvcmRlci4gKi9cbmZ1bmN0aW9uIGtleXMoXG4gIGlucHV0OiBDb25maWdLZXksXG4gIG9wdGlvbnM6IFBpY2s8Q29uZmlnT3B0aW9ucywgXCJzY29wZVwiIHwgXCJwcmVmaXhcIj4gPSB7fSxcbik6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgY29uc3Qgc2NvcGVzID0gb2JqZWN0XG4gICAgLnNlcXVlbmNlKG9wdGlvbnMuc2NvcGUgPz8gREVGQVVMVF9TQ09QRSlcbiAgICAubWFwKHN0cmluZ1V0aWxzLnRyaW1Ub0VtcHR5KVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZGlzdGluY3QoKVxuICAgIC50b0FycmF5KCk7XG4gIGNvbnN0IHByZWZpeGVzID1cbiAgICBvcHRpb25zLnByZWZpeCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IFtdXG4gICAgICA6IG9iamVjdFxuICAgICAgICAgIC5zZXF1ZW5jZShvcHRpb25zLnByZWZpeClcbiAgICAgICAgICAubWFwKHN0cmluZ1V0aWxzLnRyaW1Ub0VtcHR5KVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuZGlzdGluY3QoKVxuICAgICAgICAgIC50b0FycmF5KCk7XG4gIHJldHVybiBvYmplY3RcbiAgICAuc2VxdWVuY2UoaW5wdXQpXG4gICAgLm1hcChzdHJpbmdVdGlscy50cmltVG9FbXB0eSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmRpc3RpbmN0KClcbiAgICAuZmxhdE1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBwcmVmaXhlZCA9IHByZWZpeGVzLmxlbmd0aCA+IDAgPyBwcmVmaXhlcy5tYXAoKHByZWZpeCkgPT4gYCR7cHJlZml4fV8ke2tleX1gKSA6IFtrZXldO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uc2NvcGVzLmZsYXRNYXAoKHNjb3BlKSA9PiBwcmVmaXhlZC5tYXAoKG5hbWUpID0+IGAke3Njb3BlfV8ke25hbWV9YCkpLFxuICAgICAgICAuLi5wcmVmaXhlZCxcbiAgICAgICAga2V5LFxuICAgICAgXTtcbiAgICB9KVxuICAgIC5kaXN0aW5jdCgpXG4gICAgLnRvQXJyYXkoKTtcbn1cblxuLyoqXG4gKiBFdmVyeSB2YWx1ZSB0aGF0IHJlc29sdmVzIGZvciBgaW5wdXRgLCBpbiBzb3VyY2UtdGhlbi1rZXkgcHJlY2VkZW5jZSBvcmRlcixcbiAqIGFzIGEgTEFaWSBzZXF1ZW5jZTogbm90aGluZyBwYXN0IHRoZSBmaXJzdCBjb25zdW1lZCBlbGVtZW50IGlzIHJlYWQsIHNvXG4gKiBgdmFsdWVzKGtleSkuYXQoMClgIG5ldmVyIHNwYXducyB0aGUgRGF0YWJyaWNrcyBDTEkgd2hlbiB0aGUgZW52aXJvbm1lbnRcbiAqIGFscmVhZHkgYW5zd2VyZWQuXG4gKlxuICovXG5mdW5jdGlvbiB2YWx1ZXMoaW5wdXQ6IENvbmZpZ0tleSwgb3B0aW9uczogQ29uZmlnT3B0aW9ucyA9IHt9KTogb2JqZWN0LlNlcXVlbmNlPENvbmZpZ1ZhbHVlPiB7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBrZXlzKGlucHV0LCBvcHRpb25zKTtcbiAgY29uc3Qgc291cmNlcyA9IGNvbmZpZ1NvdXJjZXMob3B0aW9ucyk7XG4gIHJldHVybiBvYmplY3Quc2VxdWVuY2Uoe1xuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBHZW5lcmF0b3I8Q29uZmlnVmFsdWU+IHtcbiAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXAgb2YgcmVhZChzb3VyY2UsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdNYXBWYWx1ZShtYXBba2V5XSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHlpZWxkIHsga2V5LCBzb3VyY2UsIHZhbHVlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ1NvdXJjZXMob3B0aW9uczogQ29uZmlnT3B0aW9ucyk6IHJlYWRvbmx5IENvbmZpZ1NvdXJjZVtdIHtcbiAgY29uc3Qgc291cmNlczogQ29uZmlnU291cmNlW10gPSBbXG4gICAgLi4ub2JqZWN0LnNlcXVlbmNlPENvbmZpZ1NvdXJjZT4ob3B0aW9ucy5zb3VyY2VzID8/IERFRkFVTFRfU09VUkNFUykuZGlzdGluY3QoKSxcbiAgXTtcbiAgaWYgKG9wdGlvbnMuZGF0YSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc291cmNlcyAhPT0gdW5kZWZpbmVkICYmICFzb3VyY2VzLmluY2x1ZGVzKFwiY29uZmlnXCIpKSB7XG4gICAgc291cmNlcy5wdXNoKFwiY29uZmlnXCIpO1xuICB9XG4gIHJldHVybiBzb3VyY2VzO1xufVxuXG5mdW5jdGlvbiBjb25maWdNYXBWYWx1ZSh2YWx1ZTogQ29uZmlnTWFwVmFsdWUgfCB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChlbnRyeSk7XG4gICAgICBpZiAocmVzb2x2ZWQgIT09IG51bGwpIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwodmFsdWUpO1xufVxuXG4vKipcbiAqIFRoZSBmaXJzdCB2YWx1ZSB0aGF0IHJlc29sdmVzIGZvciBgaW5wdXRgLCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZG9tYWluID0gY29uZmlnLnRleHQoW1wiVFVOTkVMX1BVQkxJQ19ET01BSU5cIiwgXCJQVUJMSUNfRE9NQUlOXCJdKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRleHQoaW5wdXQ6IENvbmZpZ0tleSwgb3B0aW9uczogQ29uZmlnT3B0aW9ucyA9IHt9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlcyhpbnB1dCwgb3B0aW9ucykuYXQoMCk/LnZhbHVlO1xufVxuXG4vKiogUmVzb2x2ZSBhIGh1bWFuLWZyaWVuZGx5IG5hbWUgdGhyb3VnaCB7QGxpbmsgZW52aXJvbm1lbnRLZXlzfSBhbmQge0BsaW5rIHRleHR9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVWYWx1ZShuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IENvbmZpZ09wdGlvbnMgPSB7fSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0ZXh0KGVudmlyb25tZW50S2V5cyhuYW1lKSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogVGhlIFBSSU1BUlkgKGZ1bGx5LXNjb3BlZCkgbmFtZSBmb3IgYGlucHV0YCAtIHdoYXQgdG8gcHJpbnQgaW4gYSBsb2cgbGluZSBvciBhblxuICogZXJyb3IsIHNvIHRoZSBtZXNzYWdlIG5hbWVzIHRoZSB2YXJpYWJsZSBhIHJlYWRlciBzaG91bGQgc2V0LiBEbyBub3QgaW5kZXhcbiAqIGBrZXlzKC4uLilbMF1gIGZvciB0aGlzIGlmIGBpbnB1dGAgbWF5IGJlIGEgYmFyZSBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGxvZ2dlci53YXJuKGAke2NvbmZpZy5uYW1lKEpXVF9TRUNSRVRfRU5WKX0gaXMgbm90IHNldGApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZShcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgb3B0aW9uczogUGljazxDb25maWdPcHRpb25zLCBcInNjb3BlXCIgfCBcInByZWZpeFwiPiA9IHt9LFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGtleXMoaW5wdXQsIG9wdGlvbnMpWzBdID8/IFwiXCI7XG59XG5cbi8qKlxuICogU2FmZSBgLmVudi48bmFtZT5gIHN1ZmZpeGVzIGZvciBhIE5vZGUgZW52aXJvbm1lbnQsIGV4YWN0IHNwZWxsaW5nIGZpcnN0LlxuICogS25vd24gbG9uZyBhbmQgc2hvcnQgbmFtZXMgYXJlIGludGVyY2hhbmdlYWJsZTsgdW5rbm93biBuYW1lcyBwYXNzIHRocm91Z2guXG4gKi9cbmZ1bmN0aW9uIG5vZGVFbnZOYW1lcyhub2RlRW52OiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBuYW1lID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChub2RlRW52KT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFuYW1lIHx8ICEvXlthLXowLTlfLV0rJC8udGVzdChuYW1lKSkgcmV0dXJuIFtdO1xuICBmb3IgKGNvbnN0IFtjYW5vbmljYWwsIGFsdGVybmF0aXZlc10gb2YgT2JqZWN0LmVudHJpZXMoTk9ERV9FTlZfQUxURVJOQVRJVkVTKSkge1xuICAgIGNvbnN0IG5hbWVzOiByZWFkb25seSBzdHJpbmdbXSA9IGFsdGVybmF0aXZlcztcbiAgICBpZiAobmFtZSA9PT0gY2Fub25pY2FsIHx8IG5hbWVzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gWy4uLm9iamVjdC5zZXF1ZW5jZShuYW1lLCBjYW5vbmljYWwsIGFsdGVybmF0aXZlcykuZGlzdGluY3QoKV07XG4gICAgfVxuICB9XG4gIHJldHVybiBbbmFtZV07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHN0cmluZzogYGNvbmZpZ3VyZWRgIHdoZW4gbm9uLWVtcHR5LCBlbHNlIHtAbGluayB0ZXh0fSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqXG4gKiBUaGUgY29lcmNpb24gcnVsZXMgYXJlIGRlbGliZXJhdGVseSBsb29zZSAoYG9uYCAvIGB5ZXNgIC8gYDFgIGFyZSBhbGxcbiAqIGB0cnVlYCkgYmVjYXVzZSB2YWx1ZXMgbWF5IGNvbWUgZnJvbSBhIGZpbGUgYSBodW1hbiB0eXBlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uZmlnLnN0cmluZyhvcHRpb25zLmhvc3QsIFwiU01UUF9IT1NUXCIpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBzdHJpbmdVdGlscy50cmltVG9OdWxsKGNvbmZpZ3VyZWQpID8/IHRleHQoaW5wdXQsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBib29sZWFuIHRocm91Z2ggYG9iamVjdC50b0Jvb2xlYW5gLiBgdW5kZWZpbmVkYCB3aGVuIG5laXRoZXIgc291cmNlXG4gKiBpcyBpbnRlcnByZXRhYmxlLCBzbyB0aGUgY2FsbGVyIHBpY2tzIGEgZGVmYXVsdCB3aXRoIGA/P2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuKFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gb2JqZWN0LnRvQm9vbGVhbihjb25maWd1cmVkKSA/PyBvYmplY3QudG9Cb29sZWFuKHRleHQoaW5wdXQsIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgcG9zaXRpdmUgbnVtYmVyIHRoYXQgbWF5IGJlIGZyYWN0aW9uYWwgKGEgc2NvcmUgdGhyZXNob2xkLCBhIHJhdGlvKS5cbiAqIFVzZSB7QGxpbmsgcG9zaXRpdmVJbnR9IGZvciBhIGNvdW50LCBwb3J0LCBvciB0aW1lb3V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpdmVOdW1iZXIoXG4gIGNvbmZpZ3VyZWQ6IHVua25vd24sXG4gIGlucHV0OiBDb25maWdLZXksXG4gIGZhbGxiYWNrOiBudW1iZXIsXG4gIG9wdGlvbnM/OiBDb25maWdPcHRpb25zLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgZnJvbUNvbmZpZyA9IHBvc2l0aXZlTnVtYmVyVmFsdWUuc2FmZVBhcnNlKGNvbmZpZ3VyZWQpO1xuICBpZiAoZnJvbUNvbmZpZy5zdWNjZXNzKSByZXR1cm4gZnJvbUNvbmZpZy5kYXRhO1xuICBjb25zdCBmcm9tU291cmNlcyA9IHBvc2l0aXZlTnVtYmVyVmFsdWUuc2FmZVBhcnNlKHRleHQoaW5wdXQsIG9wdGlvbnMpKTtcbiAgcmV0dXJuIGZyb21Tb3VyY2VzLnN1Y2Nlc3MgPyBmcm9tU291cmNlcy5kYXRhIDogZmFsbGJhY2s7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHBvc2l0aXZlIGludGVnZXIgKGEgcG9ydCwgYSB0aW1lb3V0LCBhIHBhZ2Ugc2l6ZSksIGZsb29yZWQuIEFcbiAqIG5vbi1udW1lcmljIG9yIG5vbi1wb3NpdGl2ZSB2YWx1ZSBpcyB0cmVhdGVkIGFzIEFCU0VOVCByYXRoZXIgdGhhbiBmYXRhbCAtXG4gKiB0aGVzZSBhcmUgY2VpbGluZ3Mgd2hlcmUgYSBzYW5lIGRlZmF1bHQgYmVhdHMgYSBib290IGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGl2ZUludChcbiAgY29uZmlndXJlZDogdW5rbm93bixcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgZmFsbGJhY2s6IG51bWJlcixcbiAgb3B0aW9ucz86IENvbmZpZ09wdGlvbnMsXG4pOiBudW1iZXIge1xuICBjb25zdCBmcm9tQ29uZmlnID0gcG9zaXRpdmVJbnRWYWx1ZS5zYWZlUGFyc2UoY29uZmlndXJlZCk7XG4gIGlmIChmcm9tQ29uZmlnLnN1Y2Nlc3MpIHJldHVybiBmcm9tQ29uZmlnLmRhdGE7XG4gIGNvbnN0IGZyb21Tb3VyY2VzID0gcG9zaXRpdmVJbnRWYWx1ZS5zYWZlUGFyc2UodGV4dChpbnB1dCwgb3B0aW9ucykpO1xuICByZXR1cm4gZnJvbVNvdXJjZXMuc3VjY2VzcyA/IGZyb21Tb3VyY2VzLmRhdGEgOiBNYXRoLmZsb29yKGZhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgVENQIHBvcnQgYmV0d2VlbiAxIGFuZCB7QGxpbmsgTUFYX1RDUF9QT1JUfS4gSW52YWxpZCBjb25maWd1cmVkIG9yXG4gKiBzb3VyY2VkIHZhbHVlcyBmYWxsIGJhY2sgdG8gdGhlIGNhbGxlcidzIGRlZmF1bHQsIHdoaWNoIG1heSBiZSBhIHNlbnRpbmVsXG4gKiBzdWNoIGFzIGAwYCB3aGVuIHRoZSBjYWxsZXIgdXNlcyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3J0KFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBmYWxsYmFjazogbnVtYmVyLFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IG51bWJlciB7XG4gIGNvbnN0IGZyb21Db25maWcgPSBwb3J0VmFsdWVTY2hlbWEuc2FmZVBhcnNlKGNvbmZpZ3VyZWQpO1xuICBpZiAoZnJvbUNvbmZpZy5zdWNjZXNzKSByZXR1cm4gZnJvbUNvbmZpZy5kYXRhO1xuICBjb25zdCBmcm9tU291cmNlcyA9IHBvcnRWYWx1ZVNjaGVtYS5zYWZlUGFyc2UodGV4dChpbnB1dCwgb3B0aW9ucykpO1xuICByZXR1cm4gZnJvbVNvdXJjZXMuc3VjY2VzcyA/IGZyb21Tb3VyY2VzLmRhdGEgOiBmYWxsYmFjaztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgbGlzdCB0aHJvdWdoIGBzdHJpbmdVdGlscy5wYXJzZUxpc3RgLCBzbyBhbiBhcnJheSBmcm9tIHR5cGVkIGNvbmZpZyBhbmQgYVxuICogYFwiYSwgYiBjXCJgIHN0cmluZyBub3JtYWxpemUgaWRlbnRpY2FsbHkuIGBbXWAgd2hlbiBuZWl0aGVyIHNvdXJjZSBoYXMgZW50cmllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3QoXG4gIGNvbmZpZ3VyZWQ6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgdHJhbnNmb3JtPzogKGVudHJ5OiBzdHJpbmcpID0+IHN0cmluZyxcbiAgb3B0aW9ucz86IENvbmZpZ09wdGlvbnMsXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGZyb21Db25maWcgPSBzdHJpbmdVdGlscy5wYXJzZUxpc3QoY29uZmlndXJlZCwgdHJhbnNmb3JtKTtcbiAgcmV0dXJuIGZyb21Db25maWcubGVuZ3RoID4gMFxuICAgID8gZnJvbUNvbmZpZ1xuICAgIDogc3RyaW5nVXRpbHMucGFyc2VMaXN0KHRleHQoaW5wdXQsIG9wdGlvbnMpLCB0cmFuc2Zvcm0pO1xufVxuXG4vKipcbiAqIFRoZSBEYXRhYnJpY2tzIGJ1bmRsZSBvdXRwdXQgZm9yIGBjd2RgIC0gYGRhdGFicmlja3MgYnVuZGxlIHZhbGlkYXRlIC0tb3V0cHV0XG4gKiBqc29uYCBydW4gZnJvbSB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgYGRhdGFicmlja3MueW1sYCwgd2l0aCB0aGUgY29uZmlnIGZpbGUnc1xuICogcGF0aC4gQSBub24temVybyB2YWxpZGF0aW9uIG1heSBzdGlsbCByZXR1cm4gcGFydGlhbCBKU09OIHdpdGggdXNhYmxlIEFwcFxuICogY29uZmlnLiBgdW5kZWZpbmVkYCB3aGVuIGJ1bmRsZSByZWFkcyBhcmUgZGlzYWJsZWQsIHRoZSBwcm9jZXNzIGlzIHByb2R1Y3Rpb25cbiAqIG9yIGEgZGVwbG95ZWQgQXBwIHdpdGhvdXQgYW4gZXhwbGljaXQgb3ZlcnJpZGUsIHRoZXJlIGlzIG5vIGJ1bmRsZSwgb3IgdGhlXG4gKiBDTEkgcHJvZHVjZXMgbm8gSlNPTi5cbiAqXG4gKiBQYXJzZWQgdmFsaWRhdGlvbiBvdXRwdXQgaXMgY2FjaGVkIGJ5IGJ1bmRsZSBwYXRoIGFuZCBEYXRhYnJpY2tzIHByb2ZpbGUuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVuZGxlRmlsZShjd2Q/OiBzdHJpbmcgfCBudWxsLCBwcm9maWxlPzogc3RyaW5nIHwgbnVsbCk6IENvbmZpZ0ZpbGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBvdmVycmlkZSA9IG9iamVjdC50b0Jvb2xlYW4ocHJvY2Vzcy5lbnZbQ09ORklHX0JVTkRMRV9LRVldKTtcbiAgaWYgKG92ZXJyaWRlID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIG92ZXJyaWRlID09PSB1bmRlZmluZWQgJiZcbiAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlY/LnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBcInByb2R1Y3Rpb25cIiB8fCBpc0RhdGFicmlja3NBcHBFbnYoKSlcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KGN3ZCk7XG4gIHJldHVybiBsb2FkQnVuZGxlRmlsZShyZXNvbHZlZCwgc3RyaW5nVXRpbHMudHJpbVRvTnVsbChwcm9maWxlKSk7XG59XG5cbi8qKiBUaGUgcGFyc2VkIGBhcHAueWFtbGAgLyBgYXBwLnltbGAgZm9yIGBjd2RgLCB3aGVuIGxvY2FsIEFwcCBjb25maWcgcmVhZHMgYXJlIGVuYWJsZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwRmlsZShjd2Q/OiBzdHJpbmcgfCBudWxsKTogQ29uZmlnRmlsZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVuYWJsZWQgPSBvYmplY3QudG9Cb29sZWFuKHByb2Nlc3MuZW52W0NPTkZJR19BUFBfS0VZXSkgPz8gIWlzRGF0YWJyaWNrc0FwcEVudigpO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBsb2FkQXBwRmlsZShyZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpKTtcbn1cblxuLyoqIFRoZSBzaW5nbGUgYnVuZGxlIEFwcCdzIHJlc29sdmVkIGVudmlyb25tZW50LCB3aGVuIGF2YWlsYWJsZS4gKi9cbmZ1bmN0aW9uIGJ1bmRsZUVudmlyb25tZW50KG9wdGlvbnM6IENvbmZpZ09wdGlvbnMpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGF0YSA9XG4gICAgc291cmNlRGF0YShvcHRpb25zLmJ1bmRsZURhdGEpID8/IGJ1bmRsZUZpbGUob3B0aW9ucy5jd2QsIG9wdGlvbnMuYnVuZGxlUHJvZmlsZSk/LmRhdGE7XG4gIHJldHVybiBkYXRhID8gZmxhdHRlbkJ1bmRsZUVudihkYXRhKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXBwRW52aXJvbm1lbnQob3B0aW9uczogQ29uZmlnT3B0aW9ucyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCBkYXRhID0gc291cmNlRGF0YShvcHRpb25zLmFwcERhdGEpID8/IGFwcEZpbGUob3B0aW9ucy5jd2QpPy5kYXRhO1xuICByZXR1cm4gZGF0YSA/IGZsYXR0ZW5BcHBFbnYoZGF0YSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNvdXJjZURhdGEoXG4gIHNvdXJjZTogQ29uZmlnRmlsZSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKFwicGF0aFwiIGluIHNvdXJjZSAmJiB0eXBlb2Ygc291cmNlLnBhdGggPT09IFwic3RyaW5nXCIgJiYgb2JqZWN0LmlzUmVjb3JkKHNvdXJjZS5kYXRhKSkge1xuICAgIHJldHVybiBzb3VyY2UuZGF0YTtcbiAgfVxuICByZXR1cm4gc291cmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogUGFyc2VkIGAuZW52YCBmb3IgYGN3ZGAsIG9yIGB7fWA7IHBhcnNlZCBmaWxlIGRhdGEgaXMgY2FjaGVkIGJ5IHBhdGguICovXG5mdW5jdGlvbiBkb3RlbnYoY3dkPzogc3RyaW5nIHwgbnVsbCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBlbmFibGVkID0gb2JqZWN0LnRvQm9vbGVhbihwcm9jZXNzLmVudltDT05GSUdfRE9URU5WX0tFWV0pID8/ICFpc0RhdGFicmlja3NBcHBFbnYoKTtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm4ge307XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgcmV0dXJuIGxvYWREb3RlbnYocmVzb2x2ZWQsIG5vZGVFbnZOYW1lcyhwcm9jZXNzLmVudi5OT0RFX0VOVikpO1xufVxuXG4vKiogTWFwcyBmb3Igb25lIHNvdXJjZSBpbiBwcmVjZWRlbmNlIG9yZGVyLiAqL1xuZnVuY3Rpb24gcmVhZChcbiAgc291cmNlOiBDb25maWdTb3VyY2UsXG4gIG9wdGlvbnM6IENvbmZpZ09wdGlvbnMsXG4pOiBvYmplY3QuU2VxdWVuY2U8UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gIHJldHVybiBvYmplY3Quc2VxdWVuY2Uoe1xuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBHZW5lcmF0b3I8UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgICBjYXNlIFwiY29uZmlnXCI6IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICB5aWVsZCogZGF0YTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgeWllbGQgZGF0YSBhcyBDb25maWdEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZW52XCI6XG4gICAgICAgICAgeWllbGQgcHJvY2Vzcy5lbnY7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkb3RlbnZcIjpcbiAgICAgICAgICB5aWVsZCBkb3RlbnYob3B0aW9ucy5jd2QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYnVuZGxlXCI6IHtcbiAgICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IGJ1bmRsZUVudmlyb25tZW50KG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChlbnZpcm9ubWVudCkgeWllbGQgZW52aXJvbm1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImFwcFwiOiB7XG4gICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBhcHBFbnZpcm9ubWVudChvcHRpb25zKTtcbiAgICAgICAgICBpZiAoZW52aXJvbm1lbnQpIHlpZWxkIGVudmlyb25tZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5rbm93biBjb25maWcgc291cmNlOiAke3NvdXJjZX1gKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBMb2NhdGUgYG5hbWVzYCBmcm9tIGBjd2RgIG91dHdhcmQuIGBjd2RgIGl0c2VsZiBpcyBjaGVja2VkIGJlZm9yZSB0aGVcbiAqIGRpc2NvdmVyZWQgcHJvamVjdCByb290cyBzbyBhIHBhY2thZ2UtbG9jYWwgZmlsZSB3aW5zIG92ZXIgdGhlIHdvcmtzcGFjZSdzLlxuICovXG5mdW5jdGlvbiBmaW5kQ29uZmlnRmlsZShjd2Q6IHN0cmluZywgbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3RhcnQgPSByZXNvbHZlKGN3ZCk7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtzdGFydCwgLi4ubmFtZXNdKTtcbiAgaWYgKGNvbmZpZ0ZpbGVDYWNoZS5oYXMoa2V5KSkgcmV0dXJuIGNvbmZpZ0ZpbGVDYWNoZS5nZXQoa2V5KTtcbiAgY29uc3Qgcm9vdCA9IHJlc29sdmVQcm9qZWN0Um9vdChzdGFydCk7XG4gIGNvbnN0IHBhdGhGcm9tUm9vdCA9IHJvb3QgPyByZWxhdGl2ZShyb290LCBzdGFydCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvdW5kYXJ5ID1cbiAgICByb290ICYmXG4gICAgcGF0aEZyb21Sb290ICE9PSB1bmRlZmluZWQgJiZcbiAgICAhaXNBYnNvbHV0ZShwYXRoRnJvbVJvb3QpICYmXG4gICAgcGF0aEZyb21Sb290ICE9PSBcIi4uXCIgJiZcbiAgICAhcGF0aEZyb21Sb290LnN0YXJ0c1dpdGgoYC4uJHtzZXB9YClcbiAgICAgID8gcm9vdFxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGRpciA9IHN0YXJ0OyA7IGRpciA9IGRpcm5hbWUoZGlyKSkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgY29uc3QgcGF0aCA9IHJlc29sdmUoZGlyLCBuYW1lKTtcbiAgICAgIGlmIChzdGF0U3luYyhwYXRoKT8uaXNGaWxlKCkpIHtcbiAgICAgICAgY29uZmlnRmlsZUNhY2hlLnNldChrZXksIHBhdGgpO1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJvdW5kYXJ5ID09PSB1bmRlZmluZWQgfHwgZGlyID09PSBib3VuZGFyeSkgYnJlYWs7XG4gIH1cbiAgY29uZmlnRmlsZUNhY2hlLnNldChrZXksIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxvYWREb3RlbnYoXG4gIGN3ZDogc3RyaW5nLFxuICBlbnZpcm9ubWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG5hbWVzID0gWy4uLmVudmlyb25tZW50cy5tYXAoKG5hbWUpID0+IGAke0RPVEVOVl9GSUxFX05BTUV9LiR7bmFtZX1gKSwgRE9URU5WX0ZJTEVfTkFNRV07XG4gIGNvbnN0IHBhdGggPSBmaW5kQ29uZmlnRmlsZShjd2QsIG5hbWVzKTtcbiAgaWYgKCFwYXRoKSByZXR1cm4ge307XG4gIHJldHVybiAoXG4gICAgY2FjaGVkUmVjb3JkKEpTT04uc3RyaW5naWZ5KFtcImRvdGVudlwiLCBwYXRoXSksICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwYXJzZUVudihyZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIud2FybihcImZhaWxlZCB0byByZWFkIGRvdGVudiBmaWxlXCIsIHsgcGF0aCB9KTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgIH0pID8/IHt9XG4gICk7XG59XG5cbmZ1bmN0aW9uIGxvYWRCdW5kbGVGaWxlKGN3ZDogc3RyaW5nLCBwcm9maWxlOiBzdHJpbmcgfCBudWxsKTogQ29uZmlnRmlsZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdGggPSBmaW5kQ29uZmlnRmlsZShjd2QsIEJVTkRMRV9GSUxFX05BTUVTKTtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBkYXRhID0gY2FjaGVkUmVjb3JkKEpTT04uc3RyaW5naWZ5KFtcImJ1bmRsZVwiLCBwYXRoLCBwcm9maWxlXSksICgpID0+IHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgXCJidW5kbGVcIixcbiAgICAgIFwidmFsaWRhdGVcIixcbiAgICAgIFwiLS1vdXRwdXRcIixcbiAgICAgIFwianNvblwiLFxuICAgICAgLi4uKHByb2ZpbGUgPT09IG51bGwgPyBbXSA6IFtcIi0tcHJvZmlsZVwiLCBwcm9maWxlXSksXG4gICAgXTtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHsgLi4ucHJvY2Vzcy5lbnYgfTtcbiAgICBkZWxldGUgZW52aXJvbm1lbnQuREFUQUJSSUNLU19DT05GSUdfUFJPRklMRTtcbiAgICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJkYXRhYnJpY2tzXCIsIGFyZ3MsIHtcbiAgICAgIGN3ZDogcmVzb2x2ZShwYXRoLCBcIi4uXCIpLFxuICAgICAgZW52OiBlbnZpcm9ubWVudCxcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICB9KTtcbiAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHJlc3VsdC5zdGRvdXQpO1xuICAgIGNvbnN0IGVycm9yID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChyZXN1bHQuc3RkZXJyKTtcbiAgICBpZiAob3V0cHV0ID09PSBudWxsKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJidW5kbGUgdmFsaWRhdGUgcHJvZHVjZWQgbm8gSlNPTlwiLCB7IHBhdGgsIHN0YXR1czogcmVzdWx0LnN0YXR1cywgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKG91dHB1dCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiZmFpbGVkIHRvIHBhcnNlIGJ1bmRsZSB2YWxpZGF0ZSBvdXRwdXRcIiwgeyBwYXRoLCBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgcGFydGlhbCBidW5kbGUgb3V0cHV0XCIsIHsgcGF0aCwgc3RhdHVzOiByZXN1bHQuc3RhdHVzLCBlcnJvciB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSk7XG4gIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHBhdGgsIGRhdGEgfTtcbn1cblxuZnVuY3Rpb24gbG9hZEFwcEZpbGUoY3dkOiBzdHJpbmcpOiBDb25maWdGaWxlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGF0aCA9IGZpbmRDb25maWdGaWxlKGN3ZCwgQVBQX0ZJTEVfTkFNRVMpO1xuICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRhdGEgPSBjYWNoZWRSZWNvcmQoSlNPTi5zdHJpbmdpZnkoW1wiYXBwXCIsIHBhdGhdKSwgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVlhbWwocmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKSk7XG4gICAgICByZXR1cm4gb2JqZWN0LmlzUmVjb3JkKHBhcnNlZCkgPyBwYXJzZWQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIud2FybihcImZhaWxlZCB0byBwYXJzZSBhcHAgeWFtbFwiLCB7IHBhdGggfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHBhdGgsIGRhdGEgfTtcbn1cbiJdfQ==
|
|
588
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLElBQUksRUFDSixHQUFHLEVBQ0gsTUFBTSxFQUNOLE9BQU8sSUFBSSxhQUFhLEVBQ3hCLFdBQVcsR0FDWixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLElBQUksSUFBSSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXpGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7QUErQzlELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQztBQUNsQyxNQUFNLGVBQWUsR0FBNEIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFVLENBQUM7QUFDekUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFVLENBQUM7QUFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDaEMsTUFBTSxxQkFBcUIsR0FBRztJQUM1QixVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDcEIsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDO0NBQ2dDLENBQUM7QUFFdkQscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO0FBRXZELDZEQUE2RDtBQUM3RCxNQUFNLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDO0FBRXBELGdFQUFnRTtBQUNoRSxNQUFNLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDO0FBRXBELGtFQUFrRTtBQUNsRSxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQztBQUU5Qyx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQVcsRUFBRSxPQUFPLEVBQUUsS0FBYyxFQUFFLENBQUM7QUFFeEUsb0ZBQW9GO0FBQ3BGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDO0tBQ3pCLE1BQU0sRUFBRTtLQUNSLElBQUksRUFBRTtLQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDTixNQUFNLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUNyRCxPQUFPLEVBQUUscUNBQXFDO0NBQy9DLENBQUMsQ0FBQztBQUVMLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUM7QUFFcEQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ25HLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUVuRSw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBRTdGLHVEQUF1RDtBQUN2RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNDLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFO0lBQzVCLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVCLFVBQVUsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFO0NBQ25DLENBQUMsQ0FBQztBQUVILG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0QyxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRTtJQUM1QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUM5RSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUNwRCxDQUFDLENBQUM7QUFFSCw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxJQUFJLEVBQUUsV0FBVztJQUNqQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixTQUFTLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRTtDQUNsQyxDQUFDLENBQUM7QUFFSCx5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDaEMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDcEQsQ0FBQyxDQUFDO0FBRUgsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDM0YsQ0FBQyxDQUFDO0FBRUgsbUZBQW1GO0FBQ25GLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFhO0lBQzVDLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMvQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FDdkIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQztTQUNuQixNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDbkMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFLLEVBQUUsUUFBUSxDQUFVLENBQUMsQ0FDMUQsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7SUFDMUMsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7WUFBRSxTQUFTO1FBQzFCLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQyxTQUFTO1FBQ1gsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVO1lBQ2pDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksVUFBVTtZQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO0lBQ2xELENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsaUZBQWlGO0FBQ2pGLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBYTtJQUN6QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9CLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUN2QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztTQUMxQixNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDbkMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFLLEVBQUUsUUFBUSxDQUFVLENBQUMsQ0FDMUQsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7SUFDMUMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDbEMsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQy9GLElBQUksVUFBVTtZQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO0lBQ2xELENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsUUFBaUI7SUFDdEMsS0FBSyxNQUFNLElBQUksSUFBSTtRQUNqQixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM7UUFDdkIsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDO1FBQzNCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUN4QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDeEIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO0tBQ2QsRUFBRSxDQUFDO1FBQ1gsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSTtZQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNsRixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksTUFBTSxDQUFDLE9BQU87WUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUE2QixFQUFFLElBQVk7SUFDdkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN6QyxJQUFJLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDNUIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBRSxDQUFDLENBQUM7UUFDcEMsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLElBQUksTUFBTSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbEQsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsU0FBNkMsT0FBTyxDQUFDLEdBQUc7SUFFeEQsT0FBTyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWTtJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN4QixPQUFPLE1BQU07U0FDVixRQUFRLENBQ1AsT0FBTyxFQUNQLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFDckIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUNsRTtTQUNBLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixRQUFRLEVBQUU7U0FDVixPQUFPLEVBQUUsQ0FBQztBQUNmLENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsU0FBUyxJQUFJLENBQ1gsS0FBZ0IsRUFDaEIsVUFBbUQsRUFBRTtJQUVyRCxNQUFNLE1BQU0sR0FBRyxNQUFNO1NBQ2xCLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQztTQUN4QyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztTQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDO1NBQ2YsUUFBUSxFQUFFO1NBQ1YsT0FBTyxFQUFFLENBQUM7SUFDYixNQUFNLFFBQVEsR0FDWixPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVM7UUFDMUIsQ0FBQyxDQUFDLEVBQUU7UUFDSixDQUFDLENBQUMsTUFBTTthQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQ3hCLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO2FBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDZixRQUFRLEVBQUU7YUFDVixPQUFPLEVBQUUsQ0FBQztJQUNuQixPQUFPLE1BQU07U0FDVixRQUFRLENBQUMsS0FBSyxDQUFDO1NBQ2YsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7U0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNmLFFBQVEsRUFBRTtTQUNWLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ2YsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUYsT0FBTztZQUNMLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4RSxHQUFHLFFBQVE7WUFDWCxHQUFHO1NBQ0osQ0FBQztJQUNKLENBQUMsQ0FBQztTQUNELFFBQVEsRUFBRTtTQUNWLE9BQU8sRUFBRSxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsTUFBTSxDQUFDLEtBQWdCLEVBQUUsVUFBeUIsRUFBRTtJQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDaEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDN0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3hDLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQzdCLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxLQUFLLEtBQUssSUFBSTs0QkFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztvQkFDbkQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsT0FBc0I7SUFDM0MsTUFBTSxPQUFPLEdBQW1CO1FBQzlCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBZSxPQUFPLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtLQUNoRixDQUFDO0lBQ0YsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMvRixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBK0I7SUFDckQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMxQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLElBQUksUUFBUSxLQUFLLElBQUk7Z0JBQUUsT0FBTyxRQUFRLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUFDLEtBQWdCLEVBQUUsVUFBeUIsRUFBRTtJQUNoRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUM3QyxDQUFDO0FBRUQsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBWSxFQUFFLFVBQXlCLEVBQUU7SUFDcEUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FDbEIsS0FBZ0IsRUFDaEIsVUFBbUQsRUFBRTtJQUVyRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxPQUFnQjtJQUNwQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzVELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3BELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztRQUM5RSxNQUFNLEtBQUssR0FBc0IsWUFBWSxDQUFDO1FBQzlDLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDcEIsVUFBbUIsRUFDbkIsS0FBZ0IsRUFDaEIsT0FBdUI7SUFFdkIsT0FBTyxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQ3JCLFVBQW1CLEVBQ25CLEtBQWdCLEVBQ2hCLE9BQXVCO0lBRXZCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsVUFBbUIsRUFDbkIsS0FBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsT0FBdUI7SUFFdkIsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdELElBQUksVUFBVSxDQUFDLE9BQU87UUFBRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RSxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLFVBQW1CLEVBQ25CLEtBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLE9BQXVCO0lBRXZCLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxRCxJQUFJLFVBQVUsQ0FBQyxPQUFPO1FBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQy9DLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDckUsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FDbEIsVUFBbUIsRUFDbkIsS0FBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsT0FBdUI7SUFFdkIsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6RCxJQUFJLFVBQVUsQ0FBQyxPQUFPO1FBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQy9DLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUNsQixVQUF5RCxFQUN6RCxLQUFnQixFQUNoQixTQUFxQyxFQUNyQyxPQUF1QjtJQUV2QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRSxPQUFPLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUMxQixDQUFDLENBQUMsVUFBVTtRQUNaLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQW1CLEVBQUUsT0FBdUI7SUFDckUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUNsRSxJQUFJLFFBQVEsS0FBSyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDekMsSUFDRSxRQUFRLEtBQUssU0FBUztRQUN0QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksSUFBSSxrQkFBa0IsRUFBRSxDQUFDLEVBQ3JGLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsT0FBTyxjQUFjLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsNEZBQTRGO0FBQzVGLE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBbUI7SUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3ZGLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDL0IsT0FBTyxXQUFXLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLFNBQVMsaUJBQWlCLENBQUMsT0FBc0I7SUFDL0MsTUFBTSxJQUFJLEdBQ1IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ3pGLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxPQUFzQjtJQUM1QyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ3ZFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2pCLE1BQXdEO0lBRXhELElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDOUIsSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4RixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sTUFBaUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLFNBQVMsTUFBTSxDQUFDLEdBQW1CO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzFGLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDeEIsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsT0FBTyxVQUFVLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELCtDQUErQztBQUMvQyxTQUFTLElBQUksQ0FDWCxNQUFvQixFQUNwQixPQUFzQjtJQUV0QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDaEIsUUFBUSxNQUFNLEVBQUUsQ0FBQztnQkFDZixLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ2QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDMUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3hCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDZCxDQUFDO3lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUM5QixNQUFNLElBQWtCLENBQUM7b0JBQzNCLENBQUM7b0JBQ0QsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssS0FBSztvQkFDUixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ2xCLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsTUFBTTtnQkFDUixLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ2QsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQy9DLElBQUksV0FBVzt3QkFBRSxNQUFNLFdBQVcsQ0FBQztvQkFDbkMsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDWCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVDLElBQUksV0FBVzt3QkFBRSxNQUFNLFdBQVcsQ0FBQztvQkFDbkMsTUFBTTtnQkFDUixDQUFDO2dCQUNEO29CQUNFLE1BQU0sSUFBSSxTQUFTLENBQUMsMEJBQTBCLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjLENBQUMsR0FBVyxFQUFFLEtBQXdCO0lBQzNELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlELE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlELE1BQU0sUUFBUSxHQUNaLElBQUk7UUFDSixZQUFZLEtBQUssU0FBUztRQUMxQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDekIsWUFBWSxLQUFLLElBQUk7UUFDckIsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLElBQUk7UUFDTixDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLEtBQUssSUFBSSxHQUFHLEdBQUcsS0FBSyxHQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDN0IsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLFFBQVE7WUFBRSxNQUFNO0lBQ3hELENBQUM7SUFDRCxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwQyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2pCLEdBQVcsRUFDWCxZQUErQjtJQUUvQixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDL0YsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3JCLE9BQU8sQ0FDTCxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxJQUFJLENBQUM7WUFDSCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDVCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEdBQVcsRUFBRSxPQUFzQjtJQUN6RCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM1QixNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7UUFDeEUsTUFBTSxJQUFJLEdBQUc7WUFDWCxRQUFRO1lBQ1IsVUFBVTtZQUNWLFVBQVU7WUFDVixNQUFNO1lBQ04sR0FBRyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDcEQsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkMsT0FBTyxXQUFXLENBQUMseUJBQXlCLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUU7WUFDM0MsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ3hCLEdBQUcsRUFBRSxXQUFXO1lBQ2hCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1NBQ2xDLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN6RixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUN2RixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekQsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVCLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO1FBQzVELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDckQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbEQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExheWVyZWQgY29uZmlndXJhdGlvbiBsb29rdXA6IGVudmlyb25tZW50LCBgLmVudmAsIGJ1bmRsZSwgYW5kIGBhcHAueWFtbGAuXG4gKlxuICogRXZlcnkgcGFja2FnZSByZXNvbHZlcyBzZXR0aW5ncyB0aGUgc2FtZSB3YXk6IHRha2UgdGhlIGNhbGxlcidzIHZhbHVlLCBlbHNlXG4gKiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgZWxzZSBhIGRlZmF1bHQuIExvY2FsIGRldmVsb3BtZW50IGFkZHMgdHdvIGZhbGxiYWNrXG4gKiBsb2NhdGlvbnM6IGAuZW52YCBmaWxlcywgb25lIEFwcCdzIGByZXNvdXJjZXMuYXBwcy48YXBwPi5jb25maWcuZW52YCBpblxuICogYGRhdGFicmlja3MueW1sYCwgYW5kIGxpdGVyYWwgZW52IHZhbHVlcyBpbiBgYXBwLnlhbWxgIC8gYGFwcC55bWxgLlxuICpcbiAqIHtAbGluayB2YWx1ZXN9IGlzIExBWlkgKGFuIGBvYmplY3QuU2VxdWVuY2VgKSwgc28gYGRhdGFicmlja3MgYnVuZGxlIHZhbGlkYXRlYFxuICogaXMgb25seSBzcGF3bmVkIHdoZW4gdGhlIGVudmlyb25tZW50IGFuZCBgLmVudmAgYm90aCBtaXNzZWQ7IGFwcCBZQU1MIGlzIG9ubHlcbiAqIHJlYWQgYWZ0ZXIgdGhlIGJ1bmRsZSBzb3VyY2UgYWxzbyBtaXNzZWQuXG4gKlxuICogSW5zaWRlIGEgZGVwbG95ZWQgRGF0YWJyaWNrcyBBcHAgYWxsIHRocmVlIGZpbGUgc291cmNlcyBhcmUgc2tpcHBlZCBieSBkZWZhdWx0XG4gKiAoe0BsaW5rIGlzRGF0YWJyaWNrc0FwcEVudn0pOiB0aGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgdHVybmVkIHRoZW0gaW50byByZWFsXG4gKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHRoZXJlIGlzIG5vIGJ1bmRsZSB0byB2YWxpZGF0ZSwgYW5kIHRoZSBgZGF0YWJyaWNrc2BcbiAqIENMSSBpcyBub3Qgb24gdGhlIGltYWdlLiBCb29sZWFuIGVudmlyb25tZW50IG92ZXJyaWRlcyBjYW4gZm9yY2UgZWl0aGVyIGZpbGVcbiAqIHNvdXJjZSBvbiBvciBvZmYgd2hlbiBhIHRvb2wgbmVlZHMgZGlmZmVyZW50IGJlaGF2aW9yLlxuICpcbiAqIE9ubHkgdGhlIHNpbmdsZSBidW5kbGUgYXBwJ3MgYGNvbmZpZy5lbnZgIGFuZCBsaXRlcmFsIGFwcCBZQU1MIGBlbnZbXS52YWx1ZWBcbiAqIGVudHJpZXMgYXJlIGNvbnN1bHRlZC4gUm9vdCBidW5kbGUgYHZhcmlhYmxlc2AgYXJlIG5vdDogdGhleSBhcmUgYXV0aG9yaW5nXG4gKiBpbnB1dHMgZm9yIHRoZSBidW5kbGUgaXRzZWxmIChpbnRlcnBvbGF0ZWQgaW50byB0YXJnZXRzLCByZXNvdXJjZXMsIGFuZCBwYXRocyksXG4gKiBzbyB0cmVhdGluZyBvbmUgYXMgYSBwcm9jZXNzIHNldHRpbmcgcmVzb2x2ZXMgbmFtZXMgdGhlIGRlcGxveWVkIGFwcCBuZXZlciBzZWVzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIHRoZSByZXBvc2l0b3J5LXdpZGUgb3duZXIgZm9yIGxheWVyZWQgY29uZmlndXJhdGlvbi4gUmV1c2UgaXRcbiAqIGluc3RlYWQgb2YgYWRkaW5nIGxvY2FsIGVudmlyb25tZW50LW5hbWUgZ2VuZXJhdGlvbiwgYC5lbnZgIHJlYWRlcnMsIGJ1bmRsZVxuICogdmFsaWRhdGlvbiwgQXBwIFlBTUwgcGFyc2luZywgb3Igc2NhbGFyIGNvZXJjaW9uIHBvbGljeS5cbiAqXG4gKiBOb2RlLW9ubHkgKGBjaGlsZF9wcm9jZXNzYCwgYGZzYCwgYHByb2Nlc3NgKS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGlzQWJzb2x1dGUsIHJlbGF0aXZlLCByZXNvbHZlLCBzZXAgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwYXJzZUVudiB9IGZyb20gXCJub2RlOnV0aWxcIjtcbmltcG9ydCB7XG4gIGVudmlyb25tZW50VXRpbHMsXG4gIGpzb24sXG4gIGxvZyxcbiAgb2JqZWN0LFxuICBvcHRpb25zIGFzIHNoYXJlZE9wdGlvbnMsXG4gIHN0cmluZ1V0aWxzLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VZYW1sIH0gZnJvbSBcInlhbWxcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBjYWNoZWRSZWNvcmQsIHN0YXRTeW5jIH0gZnJvbSBcIi4vZmlsZS50c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnksIHJvb3QgYXMgcmVzb2x2ZVByb2plY3RSb290IH0gZnJvbSBcIi4vcHJvamVjdC11dGlscy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiY29uZmlnXCIpO1xuY29uc3QgY29uZmlnRmlsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxudHlwZSBDb25maWdLZXkgPSBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXTtcblxuLyoqIFNjYWxhciBvciBsaXN0IHZhbHVlIGFjY2VwdGVkIGJ5IGFuIGluLW1lbW9yeSBjb25maWd1cmF0aW9uIG1hcC4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZ01hcFZhbHVlID0gc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkO1xuLyoqIEltbXV0YWJsZSBzdHJpbmcta2V5ZWQgY29uZmlndXJhdGlvbiB2YWx1ZXMgdXNlZCBieSB0aGUgYGNvbmZpZ2Agc291cmNlLiAqL1xuZXhwb3J0IHR5cGUgQ29uZmlnRGF0YSA9IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIENvbmZpZ01hcFZhbHVlPj47XG5cbi8qKiBXaGVyZSBhIHZhbHVlIG1heSBjb21lIGZyb20sIGNvbnN1bHRlZCBpbiB0aGUgb3JkZXIgZ2l2ZW4uICovXG5leHBvcnQgdHlwZSBDb25maWdTb3VyY2UgPSBcImNvbmZpZ1wiIHwgXCJlbnZcIiB8IFwiZG90ZW52XCIgfCBcImJ1bmRsZVwiIHwgXCJhcHBcIjtcblxuLyoqIFNvdXJjZSBvcmRlciwgbmFtZXNwYWNlcywgcGFyc2VkIGZpbGVzLCBhbmQgd29ya2luZyBkaXJlY3RvcnkgZm9yIHZhbHVlIHJlc29sdXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ09wdGlvbnMge1xuICAvKipcbiAgICogT3V0ZXJtb3N0IG5hbWVzcGFjZXMgdHJpZWQgYmVmb3JlIGVhY2gga2V5LiBEZWZhdWx0cyB0byBgREJYX1RPT0xTYC5cbiAgICovXG4gIHNjb3BlPzogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBDYXBhYmlsaXR5IG5hbWVzcGFjZXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIHNjb3BlIGFuZCBiZWZvcmUgZWFjaCBrZXkuICovXG4gIHByZWZpeD86IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogQ29uc3RhbnQgY29uZmlnIG1hcHMgcmVhZCBieSB0aGUgYGNvbmZpZ2Agc291cmNlLiAqL1xuICBkYXRhPzogQ29uZmlnRGF0YSB8IHJlYWRvbmx5IENvbmZpZ0RhdGFbXTtcbiAgLyoqIFBhcnNlZCBidW5kbGUgZGF0YSB1c2VkIGluc3RlYWQgb2YgbG9hZGluZyBgZGF0YWJyaWNrcy55bWxgLiAqL1xuICBidW5kbGVEYXRhPzogQ29uZmlnRmlsZSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogQXV0aC1yZXNvbHZlZCBEYXRhYnJpY2tzIHByb2ZpbGUgcGFzc2VkIGV4cGxpY2l0bHkgdG8gYnVuZGxlIHZhbGlkYXRpb24uICovXG4gIGJ1bmRsZVByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKiBQYXJzZWQgYXBwIFlBTUwgZGF0YSB1c2VkIGluc3RlYWQgb2YgbG9hZGluZyBgYXBwLnlhbWxgLiAqL1xuICBhcHBEYXRhPzogQ29uZmlnRmlsZSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU291cmNlcyBpbiBwcmVjZWRlbmNlIG9yZGVyLiBEZWZhdWx0OiBgY29uZmlnYCwgYGVudmAsIGBkb3RlbnZgLCBgYnVuZGxlYCwgYGFwcGAuICovXG4gIHNvdXJjZXM/OiBDb25maWdTb3VyY2UgfCByZWFkb25seSBDb25maWdTb3VyY2VbXTtcbiAgLyoqIERpcmVjdG9yeSB0byByZXNvbHZlIGAuZW52YCBhbmQgdGhlIGJ1bmRsZSBmcm9tLiBEZWZhdWx0OiBgcHJvY2Vzcy5jd2QoKWAuICovXG4gIGN3ZD86IHN0cmluZztcbn1cblxuLyoqIE9uZSByZXNvbHZlZCB2YWx1ZSwgdGFnZ2VkIHdpdGggdGhlIGtleSBhbmQgc291cmNlIGl0IGNhbWUgZnJvbS4gKi9cbmludGVyZmFjZSBDb25maWdWYWx1ZSB7XG4gIGtleTogc3RyaW5nO1xuICBzb3VyY2U6IENvbmZpZ1NvdXJjZTtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqIEEgY29uZmlnIGZpbGUgZm91bmQgb24gZGlzaywgd2l0aCBpdHMgcGFyc2VkIGNvbnRlbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdGaWxlIHtcbiAgcGF0aDogc3RyaW5nO1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuY29uc3QgREVGQVVMVF9TQ09QRSA9IFwiREJYX1RPT0xTXCI7XG5jb25zdCBERUZBVUxUX1NPVVJDRVM6IHJlYWRvbmx5IENvbmZpZ1NvdXJjZVtdID0gW1wiY29uZmlnXCIsIFwiZW52XCIsIFwiZG90ZW52XCIsIFwiYnVuZGxlXCIsIFwiYXBwXCJdO1xuY29uc3QgQlVORExFX0ZJTEVfTkFNRVMgPSBbXCJkYXRhYnJpY2tzLnltbFwiLCBcImRhdGFicmlja3MueWFtbFwiXSBhcyBjb25zdDtcbmNvbnN0IEFQUF9GSUxFX05BTUVTID0gW1wiYXBwLnlhbWxcIiwgXCJhcHAueW1sXCJdIGFzIGNvbnN0O1xuY29uc3QgRE9URU5WX0ZJTEVfTkFNRSA9IFwiLmVudlwiO1xuY29uc3QgTk9ERV9FTlZfQUxURVJOQVRJVkVTID0ge1xuICBwcm9kdWN0aW9uOiBbXCJwcm9kXCJdLFxuICBkZXZlbG9wbWVudDogW1wiZGV2XCJdLFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+O1xuXG4vKiogSGlnaGVzdCB2YWxpZCBUQ1AgcG9ydCBudW1iZXIuICovXG5leHBvcnQgY29uc3QgTUFYX1RDUF9QT1JUID0gc2hhcmVkT3B0aW9ucy5NQVhfVENQX1BPUlQ7XG5cbi8qKiBCb29sZWFuIGVudmlyb25tZW50IG92ZXJyaWRlIGZvciBwcm9qZWN0IGAuZW52YCByZWFkcy4gKi9cbmNvbnN0IENPTkZJR19ET1RFTlZfS0VZID0gXCJEQlhfVE9PTFNfQ09ORklHX0RPVEVOVlwiO1xuXG4vKiogQm9vbGVhbiBlbnZpcm9ubWVudCBvdmVycmlkZSBmb3IgRGF0YWJyaWNrcyBidW5kbGUgcmVhZHMuICovXG5jb25zdCBDT05GSUdfQlVORExFX0tFWSA9IFwiREJYX1RPT0xTX0NPTkZJR19CVU5ETEVcIjtcblxuLyoqIEJvb2xlYW4gZW52aXJvbm1lbnQgb3ZlcnJpZGUgZm9yIERhdGFicmlja3MgQXBwIFlBTUwgcmVhZHMuICovXG5jb25zdCBDT05GSUdfQVBQX0tFWSA9IFwiREJYX1RPT0xTX0NPTkZJR19BUFBcIjtcblxuLyoqIEV4YWN0IHByb2Nlc3MtZW52aXJvbm1lbnQgbG9va3VwIGZvciBjYWxsZXJzIHRoYXQgZG8gbm90IHJlYWQgbG9jYWwgY29uZmlnIGZpbGVzLiAqL1xuZXhwb3J0IGNvbnN0IEVOVl9PTkxZID0geyBzY29wZTogW10gYXMgY29uc3QsIHNvdXJjZXM6IFwiZW52XCIgYXMgY29uc3QgfTtcblxuLyoqIE5vbi1lbXB0eSBsaXRlcmFsIGNvbmZpZ3VyYXRpb24gdmFsdWUgd2l0aCB1bnJlc29sdmVkIGludGVycG9sYXRpb24gcmVqZWN0ZWQuICovXG5leHBvcnQgY29uc3QgdmFsdWVTY2hlbWEgPSB6XG4gIC5zdHJpbmcoKVxuICAudHJpbSgpXG4gIC5taW4oMSlcbiAgLnJlZmluZSgodmFsdWU6IHN0cmluZykgPT4gIS9cXCRcXHtbXn1dK1xcfS8udGVzdCh2YWx1ZSksIHtcbiAgICBtZXNzYWdlOiBcIkludGVycG9sYXRlZCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkXCIsXG4gIH0pO1xuXG5jb25zdCBwb3J0VmFsdWVTY2hlbWEgPSBzaGFyZWRPcHRpb25zLnRjcFBvcnRTY2hlbWE7XG5cbmNvbnN0IHBvc2l0aXZlTnVtYmVyVmFsdWUgPSB6LnByZXByb2Nlc3MoKGlucHV0KSA9PiBvYmplY3QudG9OdW1iZXIoaW5wdXQpLCB6Lm51bWJlcigpLnBvc2l0aXZlKCkpO1xuY29uc3QgcG9zaXRpdmVJbnRWYWx1ZSA9IHBvc2l0aXZlTnVtYmVyVmFsdWUudHJhbnNmb3JtKE1hdGguZmxvb3IpO1xuXG4vKiogQSBuYW1lZCBidW5kbGUgb3IgQXBwIHJlc291cmNlOyBjb25jcmV0ZSByZXNvdXJjZSBmaWVsZHMgcGFzcyB0aHJvdWdoLiAqL1xuZXhwb3J0IGNvbnN0IGJ1bmRsZVJlc291cmNlU2NoZW1hID0gei5vYmplY3QoeyBuYW1lOiB2YWx1ZVNjaGVtYS5vcHRpb25hbCgpIH0pLnBhc3N0aHJvdWdoKCk7XG5cbi8qKiBEYXRhYnJpY2tzIGJ1bmRsZSBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudCBlbnRyeS4gKi9cbmV4cG9ydCBjb25zdCBidW5kbGVFbnZFbnRyeVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogdmFsdWVTY2hlbWEub3B0aW9uYWwoKSxcbiAgdmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmFsdWVfZnJvbTogdmFsdWVTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG4vKiogRGF0YWJyaWNrcyBidW5kbGUgYXBwbGljYXRpb24gZmllbGRzIHVzZWQgYnkgbG9jYWwgY29uZmlndXJhdGlvbiByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGJ1bmRsZUFwcFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogdmFsdWVTY2hlbWEub3B0aW9uYWwoKSxcbiAgY29uZmlnOiB6Lm9iamVjdCh7IGVudjogei5hcnJheShidW5kbGVFbnZFbnRyeVNjaGVtYSkub3B0aW9uYWwoKSB9KS5vcHRpb25hbCgpLFxuICByZXNvdXJjZXM6IHouYXJyYXkoYnVuZGxlUmVzb3VyY2VTY2hlbWEpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIERhdGFicmlja3MgQXBwIFlBTUwgZW52aXJvbm1lbnQgZW50cnkuICovXG5leHBvcnQgY29uc3QgYXBwRW52RW50cnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHZhbHVlU2NoZW1hLFxuICB2YWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB2YWx1ZUZyb206IHZhbHVlU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIERhdGFicmlja3MgQXBwIFlBTUwgZmllbGRzIHVzZWQgYnkgbG9jYWwgY29uZmlndXJhdGlvbiByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGFwcFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW52OiB6LmFycmF5KGFwcEVudkVudHJ5U2NoZW1hKS5vcHRpb25hbCgpLFxuICByZXNvdXJjZXM6IHouYXJyYXkoYnVuZGxlUmVzb3VyY2VTY2hlbWEpLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgYnVuZGxlQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICByZXNvdXJjZXM6IHoub2JqZWN0KHsgYXBwczogei5yZWNvcmQoei5zdHJpbmcoKSwgYnVuZGxlQXBwU2NoZW1hKS5vcHRpb25hbCgpIH0pLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIEZsYXR0ZW4gdGhlIHNpbmdsZSBidW5kbGUgQXBwJ3MgYGNvbmZpZy5lbnZgLCByZXNvbHZpbmcgcmVzb3VyY2UgcmVmZXJlbmNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQnVuZGxlRW52KGRhdGE6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gYnVuZGxlQ29uZmlnU2NoZW1hLnNhZmVQYXJzZShkYXRhKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHt9O1xuICBjb25zdCBhcHBzID0gT2JqZWN0LnZhbHVlcyhwYXJzZWQuZGF0YS5yZXNvdXJjZXM/LmFwcHMgPz8ge30pO1xuICBpZiAoYXBwcy5sZW5ndGggIT09IDEpIHJldHVybiB7fTtcbiAgY29uc3QgYXBwID0gYXBwc1swXTtcbiAgY29uc3QgcmVzb3VyY2VzID0gbmV3IE1hcChcbiAgICAoYXBwPy5yZXNvdXJjZXMgPz8gW10pXG4gICAgICAuZmlsdGVyKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UubmFtZSlcbiAgICAgIC5tYXAoKHJlc291cmNlKSA9PiBbcmVzb3VyY2UubmFtZSEsIHJlc291cmNlXSBhcyBjb25zdCksXG4gICk7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFwcD8uY29uZmlnPy5lbnYgPz8gW10pIHtcbiAgICBpZiAoIWVudHJ5Lm5hbWUpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGxpdGVyYWwgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UoZW50cnkudmFsdWUpO1xuICAgIGlmIChsaXRlcmFsLnN1Y2Nlc3MpIHtcbiAgICAgIHJlc3VsdFtlbnRyeS5uYW1lXSA9IGxpdGVyYWwuZGF0YTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByZWZlcmVuY2VkID0gZW50cnkudmFsdWVfZnJvbVxuICAgICAgPyByZXNvdXJjZVZhbHVlKHJlc291cmNlcy5nZXQoZW50cnkudmFsdWVfZnJvbSkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAocmVmZXJlbmNlZCkgcmVzdWx0W2VudHJ5Lm5hbWVdID0gcmVmZXJlbmNlZDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogRmxhdHRlbiBgYXBwLnlhbWxgIGVudiBlbnRyaWVzLCByZXNvbHZpbmcgYHZhbHVlRnJvbWAgcmVzb3VyY2UgcmVmZXJlbmNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQXBwRW52KGRhdGE6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gYXBwU2NoZW1hLnNhZmVQYXJzZShkYXRhKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHt9O1xuICBjb25zdCByZXNvdXJjZXMgPSBuZXcgTWFwKFxuICAgIChwYXJzZWQuZGF0YS5yZXNvdXJjZXMgPz8gW10pXG4gICAgICAuZmlsdGVyKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UubmFtZSlcbiAgICAgIC5tYXAoKHJlc291cmNlKSA9PiBbcmVzb3VyY2UubmFtZSEsIHJlc291cmNlXSBhcyBjb25zdCksXG4gICk7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBhcnNlZC5kYXRhLmVudiA/PyBbXSkge1xuICAgIGNvbnN0IGxpdGVyYWwgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UoZW50cnkudmFsdWUpO1xuICAgIGlmIChsaXRlcmFsLnN1Y2Nlc3MpIHtcbiAgICAgIHJlc3VsdFtlbnRyeS5uYW1lXSA9IGxpdGVyYWwuZGF0YTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByZWZlcmVuY2VkID0gZW50cnkudmFsdWVGcm9tID8gcmVzb3VyY2VWYWx1ZShyZXNvdXJjZXMuZ2V0KGVudHJ5LnZhbHVlRnJvbSkpIDogdW5kZWZpbmVkO1xuICAgIGlmIChyZWZlcmVuY2VkKSByZXN1bHRbZW50cnkubmFtZV0gPSByZWZlcmVuY2VkO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlVmFsdWUocmVzb3VyY2U6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IHBhdGggb2YgW1xuICAgIFtcInNxbF93YXJlaG91c2VcIiwgXCJpZFwiXSxcbiAgICBbXCJnZW5pZV9zcGFjZVwiLCBcInNwYWNlX2lkXCJdLFxuICAgIFtcInBvc3RncmVzXCIsIFwiZW5kcG9pbnRcIl0sXG4gICAgW1wicG9zdGdyZXNcIiwgXCJkYXRhYmFzZVwiXSxcbiAgICBbXCJwb3N0Z3Jlc1wiLCBcImJyYW5jaFwiXSxcbiAgXSBhcyBjb25zdCkge1xuICAgIGxldCB2YWx1ZSA9IHJlc291cmNlO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXRoKSB2YWx1ZSA9IG9iamVjdC5pc1JlY29yZCh2YWx1ZSkgPyB2YWx1ZVtwYXJ0XSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJzZWQgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UodmFsdWUpO1xuICAgIGlmIChwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHBhcnNlZC5kYXRhO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBXYWxrIGEgZG90LXNlcGFyYXRlZCBwYXRoIHRocm91Z2ggcGFyc2VkIGJ1bmRsZSBkYXRhLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1bmRsZVBhdGgoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgY3VycmVudDogdW5rbm93biA9IGRhdGE7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoIW9iamVjdC5pc1JlY29yZChjdXJyZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBuZXh0ID0gY3VycmVudFtwYXJ0c1tpbmRleF0hXTtcbiAgICBpZiAoaW5kZXggPT09IHBhcnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGNvbnN0IGRpcmVjdCA9IHZhbHVlU2NoZW1hLnNhZmVQYXJzZShuZXh0KTtcbiAgICAgIGlmIChkaXJlY3Quc3VjY2VzcykgcmV0dXJuIGRpcmVjdC5kYXRhO1xuICAgICAgaWYgKG9iamVjdC5pc1JlY29yZChuZXh0KSkge1xuICAgICAgICBjb25zdCBuZXN0ZWQgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UobmV4dC52YWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXN0ZWQuc3VjY2VzcyA/IG5lc3RlZC5kYXRhIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IG5leHQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYSBEYXRhYnJpY2tzIEFwcCBydW50aW1lIGZyb20gaXRzIHJlcXVpcmVkIG5hbWUsIGhvc3QsIGFuZCBwb3J0LlxuICpcbiAqIGBEQlhfVE9PTFNfREFUQUJSSUNLU19BUFBfRU5WYCB0YWtlcyBwcmVjZWRlbmNlIHdoZW4gaXQgY29udGFpbnMgYSByZWNvZ25pemVkXG4gKiBib29sZWFuIHZhbHVlLiBUaGlzIGxldHMgbG9jYWwgdG9vbHMgZW11bGF0ZSB0aGUgZGVwbG95ZWQgcnVudGltZSAoYHRydWVgKSBvclxuICogbGV0cyB1bnVzdWFsIGRlcGxveWVkIHByb2Nlc3NlcyByZXRhaW4gbG9jYWwgY29uZmlnIGxvb2t1cCAoYGZhbHNlYCkuIEFuXG4gKiBhYnNlbnQgb3IgdW5yZWNvZ25pemVkIG92ZXJyaWRlIGZhbGxzIGJhY2sgdG8gc3RydWN0dXJhbCBkZXRlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFicmlja3NBcHBFbnYoXG4gIHNvdXJjZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiA9IHByb2Nlc3MuZW52LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbnZpcm9ubWVudFV0aWxzLmlzRGF0YWJyaWNrc0FwcEVudihzb3VyY2UpO1xufVxuXG4vKiogRXhhY3QsIHVwcGVyY2FzZSwgYW5kIHRva2VuaXplZC11cHBlcmNhc2UgbmFtZXMgZm9yIGEgaHVtYW4tZnJpZW5kbHkga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudmlyb25tZW50S2V5cyhuYW1lOiBzdHJpbmcpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gW107XG4gIHJldHVybiBvYmplY3RcbiAgICAuc2VxdWVuY2UoXG4gICAgICB0cmltbWVkLFxuICAgICAgdHJpbW1lZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgQXJyYXkuZnJvbShzdHJpbmdVdGlscy50b2tlbml6ZSh0cmltbWVkKSkuam9pbihcIl9cIikudG9VcHBlckNhc2UoKSxcbiAgICApXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5kaXN0aW5jdCgpXG4gICAgLnRvQXJyYXkoKTtcbn1cblxuLyoqIENhbmRpZGF0ZSBuYW1lcyBpbiBzY29wZSwgcHJlZml4LCBhbmQgaW5wdXQgcHJlY2VkZW5jZSBvcmRlci4gKi9cbmZ1bmN0aW9uIGtleXMoXG4gIGlucHV0OiBDb25maWdLZXksXG4gIG9wdGlvbnM6IFBpY2s8Q29uZmlnT3B0aW9ucywgXCJzY29wZVwiIHwgXCJwcmVmaXhcIj4gPSB7fSxcbik6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgY29uc3Qgc2NvcGVzID0gb2JqZWN0XG4gICAgLnNlcXVlbmNlKG9wdGlvbnMuc2NvcGUgPz8gREVGQVVMVF9TQ09QRSlcbiAgICAubWFwKHN0cmluZ1V0aWxzLnRyaW1Ub0VtcHR5KVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZGlzdGluY3QoKVxuICAgIC50b0FycmF5KCk7XG4gIGNvbnN0IHByZWZpeGVzID1cbiAgICBvcHRpb25zLnByZWZpeCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IFtdXG4gICAgICA6IG9iamVjdFxuICAgICAgICAgIC5zZXF1ZW5jZShvcHRpb25zLnByZWZpeClcbiAgICAgICAgICAubWFwKHN0cmluZ1V0aWxzLnRyaW1Ub0VtcHR5KVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuZGlzdGluY3QoKVxuICAgICAgICAgIC50b0FycmF5KCk7XG4gIHJldHVybiBvYmplY3RcbiAgICAuc2VxdWVuY2UoaW5wdXQpXG4gICAgLm1hcChzdHJpbmdVdGlscy50cmltVG9FbXB0eSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmRpc3RpbmN0KClcbiAgICAuZmxhdE1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBwcmVmaXhlZCA9IHByZWZpeGVzLmxlbmd0aCA+IDAgPyBwcmVmaXhlcy5tYXAoKHByZWZpeCkgPT4gYCR7cHJlZml4fV8ke2tleX1gKSA6IFtrZXldO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uc2NvcGVzLmZsYXRNYXAoKHNjb3BlKSA9PiBwcmVmaXhlZC5tYXAoKG5hbWUpID0+IGAke3Njb3BlfV8ke25hbWV9YCkpLFxuICAgICAgICAuLi5wcmVmaXhlZCxcbiAgICAgICAga2V5LFxuICAgICAgXTtcbiAgICB9KVxuICAgIC5kaXN0aW5jdCgpXG4gICAgLnRvQXJyYXkoKTtcbn1cblxuLyoqXG4gKiBFdmVyeSB2YWx1ZSB0aGF0IHJlc29sdmVzIGZvciBgaW5wdXRgLCBpbiBzb3VyY2UtdGhlbi1rZXkgcHJlY2VkZW5jZSBvcmRlcixcbiAqIGFzIGEgTEFaWSBzZXF1ZW5jZTogbm90aGluZyBwYXN0IHRoZSBmaXJzdCBjb25zdW1lZCBlbGVtZW50IGlzIHJlYWQsIHNvXG4gKiBgdmFsdWVzKGtleSkuYXQoMClgIG5ldmVyIHNwYXducyB0aGUgRGF0YWJyaWNrcyBDTEkgd2hlbiB0aGUgZW52aXJvbm1lbnRcbiAqIGFscmVhZHkgYW5zd2VyZWQuXG4gKlxuICovXG5mdW5jdGlvbiB2YWx1ZXMoaW5wdXQ6IENvbmZpZ0tleSwgb3B0aW9uczogQ29uZmlnT3B0aW9ucyA9IHt9KTogb2JqZWN0LlNlcXVlbmNlPENvbmZpZ1ZhbHVlPiB7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBrZXlzKGlucHV0LCBvcHRpb25zKTtcbiAgY29uc3Qgc291cmNlcyA9IGNvbmZpZ1NvdXJjZXMob3B0aW9ucyk7XG4gIHJldHVybiBvYmplY3Quc2VxdWVuY2Uoe1xuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBHZW5lcmF0b3I8Q29uZmlnVmFsdWU+IHtcbiAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXAgb2YgcmVhZChzb3VyY2UsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdNYXBWYWx1ZShtYXBba2V5XSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHlpZWxkIHsga2V5LCBzb3VyY2UsIHZhbHVlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ1NvdXJjZXMob3B0aW9uczogQ29uZmlnT3B0aW9ucyk6IHJlYWRvbmx5IENvbmZpZ1NvdXJjZVtdIHtcbiAgY29uc3Qgc291cmNlczogQ29uZmlnU291cmNlW10gPSBbXG4gICAgLi4ub2JqZWN0LnNlcXVlbmNlPENvbmZpZ1NvdXJjZT4ob3B0aW9ucy5zb3VyY2VzID8/IERFRkFVTFRfU09VUkNFUykuZGlzdGluY3QoKSxcbiAgXTtcbiAgaWYgKG9wdGlvbnMuZGF0YSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc291cmNlcyAhPT0gdW5kZWZpbmVkICYmICFzb3VyY2VzLmluY2x1ZGVzKFwiY29uZmlnXCIpKSB7XG4gICAgc291cmNlcy5wdXNoKFwiY29uZmlnXCIpO1xuICB9XG4gIHJldHVybiBzb3VyY2VzO1xufVxuXG5mdW5jdGlvbiBjb25maWdNYXBWYWx1ZSh2YWx1ZTogQ29uZmlnTWFwVmFsdWUgfCB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChlbnRyeSk7XG4gICAgICBpZiAocmVzb2x2ZWQgIT09IG51bGwpIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwodmFsdWUpO1xufVxuXG4vKipcbiAqIFRoZSBmaXJzdCB2YWx1ZSB0aGF0IHJlc29sdmVzIGZvciBgaW5wdXRgLCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZG9tYWluID0gY29uZmlnLnRleHQoW1wiVFVOTkVMX1BVQkxJQ19ET01BSU5cIiwgXCJQVUJMSUNfRE9NQUlOXCJdKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRleHQoaW5wdXQ6IENvbmZpZ0tleSwgb3B0aW9uczogQ29uZmlnT3B0aW9ucyA9IHt9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlcyhpbnB1dCwgb3B0aW9ucykuYXQoMCk/LnZhbHVlO1xufVxuXG4vKiogUmVzb2x2ZSBhIGh1bWFuLWZyaWVuZGx5IG5hbWUgdGhyb3VnaCB7QGxpbmsgZW52aXJvbm1lbnRLZXlzfSBhbmQge0BsaW5rIHRleHR9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVWYWx1ZShuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IENvbmZpZ09wdGlvbnMgPSB7fSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0ZXh0KGVudmlyb25tZW50S2V5cyhuYW1lKSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogVGhlIFBSSU1BUlkgKGZ1bGx5LXNjb3BlZCkgbmFtZSBmb3IgYGlucHV0YCAtIHdoYXQgdG8gcHJpbnQgaW4gYSBsb2cgbGluZSBvciBhblxuICogZXJyb3IsIHNvIHRoZSBtZXNzYWdlIG5hbWVzIHRoZSB2YXJpYWJsZSBhIHJlYWRlciBzaG91bGQgc2V0LiBEbyBub3QgaW5kZXhcbiAqIGBrZXlzKC4uLilbMF1gIGZvciB0aGlzIGlmIGBpbnB1dGAgbWF5IGJlIGEgYmFyZSBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGxvZ2dlci53YXJuKGAke2NvbmZpZy5uYW1lKEpXVF9TRUNSRVRfRU5WKX0gaXMgbm90IHNldGApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZShcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgb3B0aW9uczogUGljazxDb25maWdPcHRpb25zLCBcInNjb3BlXCIgfCBcInByZWZpeFwiPiA9IHt9LFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGtleXMoaW5wdXQsIG9wdGlvbnMpWzBdID8/IFwiXCI7XG59XG5cbi8qKlxuICogU2FmZSBgLmVudi48bmFtZT5gIHN1ZmZpeGVzIGZvciBhIE5vZGUgZW52aXJvbm1lbnQsIGV4YWN0IHNwZWxsaW5nIGZpcnN0LlxuICogS25vd24gbG9uZyBhbmQgc2hvcnQgbmFtZXMgYXJlIGludGVyY2hhbmdlYWJsZTsgdW5rbm93biBuYW1lcyBwYXNzIHRocm91Z2guXG4gKi9cbmZ1bmN0aW9uIG5vZGVFbnZOYW1lcyhub2RlRW52OiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBuYW1lID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChub2RlRW52KT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFuYW1lIHx8ICEvXlthLXowLTlfLV0rJC8udGVzdChuYW1lKSkgcmV0dXJuIFtdO1xuICBmb3IgKGNvbnN0IFtjYW5vbmljYWwsIGFsdGVybmF0aXZlc10gb2YgT2JqZWN0LmVudHJpZXMoTk9ERV9FTlZfQUxURVJOQVRJVkVTKSkge1xuICAgIGNvbnN0IG5hbWVzOiByZWFkb25seSBzdHJpbmdbXSA9IGFsdGVybmF0aXZlcztcbiAgICBpZiAobmFtZSA9PT0gY2Fub25pY2FsIHx8IG5hbWVzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gWy4uLm9iamVjdC5zZXF1ZW5jZShuYW1lLCBjYW5vbmljYWwsIGFsdGVybmF0aXZlcykuZGlzdGluY3QoKV07XG4gICAgfVxuICB9XG4gIHJldHVybiBbbmFtZV07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHN0cmluZzogYGNvbmZpZ3VyZWRgIHdoZW4gbm9uLWVtcHR5LCBlbHNlIHtAbGluayB0ZXh0fSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqXG4gKiBUaGUgY29lcmNpb24gcnVsZXMgYXJlIGRlbGliZXJhdGVseSBsb29zZSAoYG9uYCAvIGB5ZXNgIC8gYDFgIGFyZSBhbGxcbiAqIGB0cnVlYCkgYmVjYXVzZSB2YWx1ZXMgbWF5IGNvbWUgZnJvbSBhIGZpbGUgYSBodW1hbiB0eXBlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uZmlnLnN0cmluZyhvcHRpb25zLmhvc3QsIFwiU01UUF9IT1NUXCIpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBzdHJpbmdVdGlscy50cmltVG9OdWxsKGNvbmZpZ3VyZWQpID8/IHRleHQoaW5wdXQsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBib29sZWFuIHRocm91Z2ggYG9iamVjdC50b0Jvb2xlYW5gLiBgdW5kZWZpbmVkYCB3aGVuIG5laXRoZXIgc291cmNlXG4gKiBpcyBpbnRlcnByZXRhYmxlLCBzbyB0aGUgY2FsbGVyIHBpY2tzIGEgZGVmYXVsdCB3aXRoIGA/P2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuKFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gb2JqZWN0LnRvQm9vbGVhbihjb25maWd1cmVkKSA/PyBvYmplY3QudG9Cb29sZWFuKHRleHQoaW5wdXQsIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgcG9zaXRpdmUgbnVtYmVyIHRoYXQgbWF5IGJlIGZyYWN0aW9uYWwgKGEgc2NvcmUgdGhyZXNob2xkLCBhIHJhdGlvKS5cbiAqIFVzZSB7QGxpbmsgcG9zaXRpdmVJbnR9IGZvciBhIGNvdW50LCBwb3J0LCBvciB0aW1lb3V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpdmVOdW1iZXIoXG4gIGNvbmZpZ3VyZWQ6IHVua25vd24sXG4gIGlucHV0OiBDb25maWdLZXksXG4gIGZhbGxiYWNrOiBudW1iZXIsXG4gIG9wdGlvbnM/OiBDb25maWdPcHRpb25zLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgZnJvbUNvbmZpZyA9IHBvc2l0aXZlTnVtYmVyVmFsdWUuc2FmZVBhcnNlKGNvbmZpZ3VyZWQpO1xuICBpZiAoZnJvbUNvbmZpZy5zdWNjZXNzKSByZXR1cm4gZnJvbUNvbmZpZy5kYXRhO1xuICBjb25zdCBmcm9tU291cmNlcyA9IHBvc2l0aXZlTnVtYmVyVmFsdWUuc2FmZVBhcnNlKHRleHQoaW5wdXQsIG9wdGlvbnMpKTtcbiAgcmV0dXJuIGZyb21Tb3VyY2VzLnN1Y2Nlc3MgPyBmcm9tU291cmNlcy5kYXRhIDogZmFsbGJhY2s7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHBvc2l0aXZlIGludGVnZXIgKGEgcG9ydCwgYSB0aW1lb3V0LCBhIHBhZ2Ugc2l6ZSksIGZsb29yZWQuIEFcbiAqIG5vbi1udW1lcmljIG9yIG5vbi1wb3NpdGl2ZSB2YWx1ZSBpcyB0cmVhdGVkIGFzIEFCU0VOVCByYXRoZXIgdGhhbiBmYXRhbCAtXG4gKiB0aGVzZSBhcmUgY2VpbGluZ3Mgd2hlcmUgYSBzYW5lIGRlZmF1bHQgYmVhdHMgYSBib290IGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGl2ZUludChcbiAgY29uZmlndXJlZDogdW5rbm93bixcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgZmFsbGJhY2s6IG51bWJlcixcbiAgb3B0aW9ucz86IENvbmZpZ09wdGlvbnMsXG4pOiBudW1iZXIge1xuICBjb25zdCBmcm9tQ29uZmlnID0gcG9zaXRpdmVJbnRWYWx1ZS5zYWZlUGFyc2UoY29uZmlndXJlZCk7XG4gIGlmIChmcm9tQ29uZmlnLnN1Y2Nlc3MpIHJldHVybiBmcm9tQ29uZmlnLmRhdGE7XG4gIGNvbnN0IGZyb21Tb3VyY2VzID0gcG9zaXRpdmVJbnRWYWx1ZS5zYWZlUGFyc2UodGV4dChpbnB1dCwgb3B0aW9ucykpO1xuICByZXR1cm4gZnJvbVNvdXJjZXMuc3VjY2VzcyA/IGZyb21Tb3VyY2VzLmRhdGEgOiBNYXRoLmZsb29yKGZhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgVENQIHBvcnQgYmV0d2VlbiAxIGFuZCB7QGxpbmsgTUFYX1RDUF9QT1JUfS4gSW52YWxpZCBjb25maWd1cmVkIG9yXG4gKiBzb3VyY2VkIHZhbHVlcyBmYWxsIGJhY2sgdG8gdGhlIGNhbGxlcidzIGRlZmF1bHQsIHdoaWNoIG1heSBiZSBhIHNlbnRpbmVsXG4gKiBzdWNoIGFzIGAwYCB3aGVuIHRoZSBjYWxsZXIgdXNlcyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3J0KFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBmYWxsYmFjazogbnVtYmVyLFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IG51bWJlciB7XG4gIGNvbnN0IGZyb21Db25maWcgPSBwb3J0VmFsdWVTY2hlbWEuc2FmZVBhcnNlKGNvbmZpZ3VyZWQpO1xuICBpZiAoZnJvbUNvbmZpZy5zdWNjZXNzKSByZXR1cm4gZnJvbUNvbmZpZy5kYXRhO1xuICBjb25zdCBmcm9tU291cmNlcyA9IHBvcnRWYWx1ZVNjaGVtYS5zYWZlUGFyc2UodGV4dChpbnB1dCwgb3B0aW9ucykpO1xuICByZXR1cm4gZnJvbVNvdXJjZXMuc3VjY2VzcyA/IGZyb21Tb3VyY2VzLmRhdGEgOiBmYWxsYmFjaztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgbGlzdCB0aHJvdWdoIGBzdHJpbmdVdGlscy5wYXJzZUxpc3RgLCBzbyBhbiBhcnJheSBmcm9tIHR5cGVkIGNvbmZpZyBhbmQgYVxuICogYFwiYSwgYiBjXCJgIHN0cmluZyBub3JtYWxpemUgaWRlbnRpY2FsbHkuIGBbXWAgd2hlbiBuZWl0aGVyIHNvdXJjZSBoYXMgZW50cmllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3QoXG4gIGNvbmZpZ3VyZWQ6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgdHJhbnNmb3JtPzogKGVudHJ5OiBzdHJpbmcpID0+IHN0cmluZyxcbiAgb3B0aW9ucz86IENvbmZpZ09wdGlvbnMsXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGZyb21Db25maWcgPSBzdHJpbmdVdGlscy5wYXJzZUxpc3QoY29uZmlndXJlZCwgdHJhbnNmb3JtKTtcbiAgcmV0dXJuIGZyb21Db25maWcubGVuZ3RoID4gMFxuICAgID8gZnJvbUNvbmZpZ1xuICAgIDogc3RyaW5nVXRpbHMucGFyc2VMaXN0KHRleHQoaW5wdXQsIG9wdGlvbnMpLCB0cmFuc2Zvcm0pO1xufVxuXG4vKipcbiAqIFRoZSBEYXRhYnJpY2tzIGJ1bmRsZSBvdXRwdXQgZm9yIGBjd2RgIC0gYGRhdGFicmlja3MgYnVuZGxlIHZhbGlkYXRlIC0tb3V0cHV0XG4gKiBqc29uYCBydW4gZnJvbSB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgYGRhdGFicmlja3MueW1sYCwgd2l0aCB0aGUgY29uZmlnIGZpbGUnc1xuICogcGF0aC4gQSBub24temVybyB2YWxpZGF0aW9uIG1heSBzdGlsbCByZXR1cm4gcGFydGlhbCBKU09OIHdpdGggdXNhYmxlIEFwcFxuICogY29uZmlnLiBgdW5kZWZpbmVkYCB3aGVuIGJ1bmRsZSByZWFkcyBhcmUgZGlzYWJsZWQsIHRoZSBwcm9jZXNzIGlzIHByb2R1Y3Rpb25cbiAqIG9yIGEgZGVwbG95ZWQgQXBwIHdpdGhvdXQgYW4gZXhwbGljaXQgb3ZlcnJpZGUsIHRoZXJlIGlzIG5vIGJ1bmRsZSwgb3IgdGhlXG4gKiBDTEkgcHJvZHVjZXMgbm8gSlNPTi5cbiAqXG4gKiBQYXJzZWQgdmFsaWRhdGlvbiBvdXRwdXQgaXMgY2FjaGVkIGJ5IGJ1bmRsZSBwYXRoIGFuZCBEYXRhYnJpY2tzIHByb2ZpbGUuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVuZGxlRmlsZShjd2Q/OiBzdHJpbmcgfCBudWxsLCBwcm9maWxlPzogc3RyaW5nIHwgbnVsbCk6IENvbmZpZ0ZpbGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBvdmVycmlkZSA9IG9iamVjdC50b0Jvb2xlYW4ocHJvY2Vzcy5lbnZbQ09ORklHX0JVTkRMRV9LRVldKTtcbiAgaWYgKG92ZXJyaWRlID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIG92ZXJyaWRlID09PSB1bmRlZmluZWQgJiZcbiAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlY/LnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBcInByb2R1Y3Rpb25cIiB8fCBpc0RhdGFicmlja3NBcHBFbnYoKSlcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KGN3ZCk7XG4gIHJldHVybiBsb2FkQnVuZGxlRmlsZShyZXNvbHZlZCwgc3RyaW5nVXRpbHMudHJpbVRvTnVsbChwcm9maWxlKSk7XG59XG5cbi8qKiBUaGUgcGFyc2VkIGBhcHAueWFtbGAgLyBgYXBwLnltbGAgZm9yIGBjd2RgLCB3aGVuIGxvY2FsIEFwcCBjb25maWcgcmVhZHMgYXJlIGVuYWJsZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwRmlsZShjd2Q/OiBzdHJpbmcgfCBudWxsKTogQ29uZmlnRmlsZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVuYWJsZWQgPSBvYmplY3QudG9Cb29sZWFuKHByb2Nlc3MuZW52W0NPTkZJR19BUFBfS0VZXSkgPz8gIWlzRGF0YWJyaWNrc0FwcEVudigpO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBsb2FkQXBwRmlsZShyZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpKTtcbn1cblxuLyoqIFRoZSBzaW5nbGUgYnVuZGxlIEFwcCdzIHJlc29sdmVkIGVudmlyb25tZW50LCB3aGVuIGF2YWlsYWJsZS4gKi9cbmZ1bmN0aW9uIGJ1bmRsZUVudmlyb25tZW50KG9wdGlvbnM6IENvbmZpZ09wdGlvbnMpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGF0YSA9XG4gICAgc291cmNlRGF0YShvcHRpb25zLmJ1bmRsZURhdGEpID8/IGJ1bmRsZUZpbGUob3B0aW9ucy5jd2QsIG9wdGlvbnMuYnVuZGxlUHJvZmlsZSk/LmRhdGE7XG4gIHJldHVybiBkYXRhID8gZmxhdHRlbkJ1bmRsZUVudihkYXRhKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXBwRW52aXJvbm1lbnQob3B0aW9uczogQ29uZmlnT3B0aW9ucyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCBkYXRhID0gc291cmNlRGF0YShvcHRpb25zLmFwcERhdGEpID8/IGFwcEZpbGUob3B0aW9ucy5jd2QpPy5kYXRhO1xuICByZXR1cm4gZGF0YSA/IGZsYXR0ZW5BcHBFbnYoZGF0YSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNvdXJjZURhdGEoXG4gIHNvdXJjZTogQ29uZmlnRmlsZSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKFwicGF0aFwiIGluIHNvdXJjZSAmJiB0eXBlb2Ygc291cmNlLnBhdGggPT09IFwic3RyaW5nXCIgJiYgb2JqZWN0LmlzUmVjb3JkKHNvdXJjZS5kYXRhKSkge1xuICAgIHJldHVybiBzb3VyY2UuZGF0YTtcbiAgfVxuICByZXR1cm4gc291cmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogUGFyc2VkIGAuZW52YCBmb3IgYGN3ZGAsIG9yIGB7fWA7IHBhcnNlZCBmaWxlIGRhdGEgaXMgY2FjaGVkIGJ5IHBhdGguICovXG5mdW5jdGlvbiBkb3RlbnYoY3dkPzogc3RyaW5nIHwgbnVsbCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBlbmFibGVkID0gb2JqZWN0LnRvQm9vbGVhbihwcm9jZXNzLmVudltDT05GSUdfRE9URU5WX0tFWV0pID8/ICFpc0RhdGFicmlja3NBcHBFbnYoKTtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm4ge307XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgcmV0dXJuIGxvYWREb3RlbnYocmVzb2x2ZWQsIG5vZGVFbnZOYW1lcyhwcm9jZXNzLmVudi5OT0RFX0VOVikpO1xufVxuXG4vKiogTWFwcyBmb3Igb25lIHNvdXJjZSBpbiBwcmVjZWRlbmNlIG9yZGVyLiAqL1xuZnVuY3Rpb24gcmVhZChcbiAgc291cmNlOiBDb25maWdTb3VyY2UsXG4gIG9wdGlvbnM6IENvbmZpZ09wdGlvbnMsXG4pOiBvYmplY3QuU2VxdWVuY2U8UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gIHJldHVybiBvYmplY3Quc2VxdWVuY2Uoe1xuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBHZW5lcmF0b3I8UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgICBjYXNlIFwiY29uZmlnXCI6IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICB5aWVsZCogZGF0YTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgeWllbGQgZGF0YSBhcyBDb25maWdEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZW52XCI6XG4gICAgICAgICAgeWllbGQgcHJvY2Vzcy5lbnY7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkb3RlbnZcIjpcbiAgICAgICAgICB5aWVsZCBkb3RlbnYob3B0aW9ucy5jd2QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYnVuZGxlXCI6IHtcbiAgICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IGJ1bmRsZUVudmlyb25tZW50KG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChlbnZpcm9ubWVudCkgeWllbGQgZW52aXJvbm1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImFwcFwiOiB7XG4gICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBhcHBFbnZpcm9ubWVudChvcHRpb25zKTtcbiAgICAgICAgICBpZiAoZW52aXJvbm1lbnQpIHlpZWxkIGVudmlyb25tZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5rbm93biBjb25maWcgc291cmNlOiAke3NvdXJjZX1gKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBMb2NhdGUgYG5hbWVzYCBmcm9tIGBjd2RgIG91dHdhcmQuIGBjd2RgIGl0c2VsZiBpcyBjaGVja2VkIGJlZm9yZSB0aGVcbiAqIGRpc2NvdmVyZWQgcHJvamVjdCByb290cyBzbyBhIHBhY2thZ2UtbG9jYWwgZmlsZSB3aW5zIG92ZXIgdGhlIHdvcmtzcGFjZSdzLlxuICovXG5mdW5jdGlvbiBmaW5kQ29uZmlnRmlsZShjd2Q6IHN0cmluZywgbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3RhcnQgPSByZXNvbHZlKGN3ZCk7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtzdGFydCwgLi4ubmFtZXNdKTtcbiAgaWYgKGNvbmZpZ0ZpbGVDYWNoZS5oYXMoa2V5KSkgcmV0dXJuIGNvbmZpZ0ZpbGVDYWNoZS5nZXQoa2V5KTtcbiAgY29uc3Qgcm9vdCA9IHJlc29sdmVQcm9qZWN0Um9vdChzdGFydCk7XG4gIGNvbnN0IHBhdGhGcm9tUm9vdCA9IHJvb3QgPyByZWxhdGl2ZShyb290LCBzdGFydCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvdW5kYXJ5ID1cbiAgICByb290ICYmXG4gICAgcGF0aEZyb21Sb290ICE9PSB1bmRlZmluZWQgJiZcbiAgICAhaXNBYnNvbHV0ZShwYXRoRnJvbVJvb3QpICYmXG4gICAgcGF0aEZyb21Sb290ICE9PSBcIi4uXCIgJiZcbiAgICAhcGF0aEZyb21Sb290LnN0YXJ0c1dpdGgoYC4uJHtzZXB9YClcbiAgICAgID8gcm9vdFxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGRpciA9IHN0YXJ0OyA7IGRpciA9IGRpcm5hbWUoZGlyKSkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgY29uc3QgcGF0aCA9IHJlc29sdmUoZGlyLCBuYW1lKTtcbiAgICAgIGlmIChzdGF0U3luYyhwYXRoKT8uaXNGaWxlKCkpIHtcbiAgICAgICAgY29uZmlnRmlsZUNhY2hlLnNldChrZXksIHBhdGgpO1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJvdW5kYXJ5ID09PSB1bmRlZmluZWQgfHwgZGlyID09PSBib3VuZGFyeSkgYnJlYWs7XG4gIH1cbiAgY29uZmlnRmlsZUNhY2hlLnNldChrZXksIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxvYWREb3RlbnYoXG4gIGN3ZDogc3RyaW5nLFxuICBlbnZpcm9ubWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG5hbWVzID0gWy4uLmVudmlyb25tZW50cy5tYXAoKG5hbWUpID0+IGAke0RPVEVOVl9GSUxFX05BTUV9LiR7bmFtZX1gKSwgRE9URU5WX0ZJTEVfTkFNRV07XG4gIGNvbnN0IHBhdGggPSBmaW5kQ29uZmlnRmlsZShjd2QsIG5hbWVzKTtcbiAgaWYgKCFwYXRoKSByZXR1cm4ge307XG4gIHJldHVybiAoXG4gICAgY2FjaGVkUmVjb3JkKEpTT04uc3RyaW5naWZ5KFtcImRvdGVudlwiLCBwYXRoXSksICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwYXJzZUVudihyZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIud2FybihcImZhaWxlZCB0byByZWFkIGRvdGVudiBmaWxlXCIsIHsgcGF0aCB9KTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgIH0pID8/IHt9XG4gICk7XG59XG5cbmZ1bmN0aW9uIGxvYWRCdW5kbGVGaWxlKGN3ZDogc3RyaW5nLCBwcm9maWxlOiBzdHJpbmcgfCBudWxsKTogQ29uZmlnRmlsZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdGggPSBmaW5kQ29uZmlnRmlsZShjd2QsIEJVTkRMRV9GSUxFX05BTUVTKTtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBkYXRhID0gY2FjaGVkUmVjb3JkKEpTT04uc3RyaW5naWZ5KFtcImJ1bmRsZVwiLCBwYXRoLCBwcm9maWxlXSksICgpID0+IHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgXCJidW5kbGVcIixcbiAgICAgIFwidmFsaWRhdGVcIixcbiAgICAgIFwiLS1vdXRwdXRcIixcbiAgICAgIFwianNvblwiLFxuICAgICAgLi4uKHByb2ZpbGUgPT09IG51bGwgPyBbXSA6IFtcIi0tcHJvZmlsZVwiLCBwcm9maWxlXSksXG4gICAgXTtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHsgLi4ucHJvY2Vzcy5lbnYgfTtcbiAgICBkZWxldGUgZW52aXJvbm1lbnQuREFUQUJSSUNLU19DT05GSUdfUFJPRklMRTtcbiAgICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJkYXRhYnJpY2tzXCIsIGFyZ3MsIHtcbiAgICAgIGN3ZDogcmVzb2x2ZShwYXRoLCBcIi4uXCIpLFxuICAgICAgZW52OiBlbnZpcm9ubWVudCxcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICB9KTtcbiAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHJlc3VsdC5zdGRvdXQpO1xuICAgIGNvbnN0IGVycm9yID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChyZXN1bHQuc3RkZXJyKTtcbiAgICBpZiAob3V0cHV0ID09PSBudWxsKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJidW5kbGUgdmFsaWRhdGUgcHJvZHVjZWQgbm8gSlNPTlwiLCB7IHBhdGgsIHN0YXR1czogcmVzdWx0LnN0YXR1cywgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKG91dHB1dCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiZmFpbGVkIHRvIHBhcnNlIGJ1bmRsZSB2YWxpZGF0ZSBvdXRwdXRcIiwgeyBwYXRoLCBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgcGFydGlhbCBidW5kbGUgb3V0cHV0XCIsIHsgcGF0aCwgc3RhdHVzOiByZXN1bHQuc3RhdHVzLCBlcnJvciB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSk7XG4gIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHBhdGgsIGRhdGEgfTtcbn1cblxuZnVuY3Rpb24gbG9hZEFwcEZpbGUoY3dkOiBzdHJpbmcpOiBDb25maWdGaWxlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGF0aCA9IGZpbmRDb25maWdGaWxlKGN3ZCwgQVBQX0ZJTEVfTkFNRVMpO1xuICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRhdGEgPSBjYWNoZWRSZWNvcmQoSlNPTi5zdHJpbmdpZnkoW1wiYXBwXCIsIHBhdGhdKSwgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVlhbWwocmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKSk7XG4gICAgICByZXR1cm4gb2JqZWN0LmlzUmVjb3JkKHBhcnNlZCkgPyBwYXJzZWQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIud2FybihcImZhaWxlZCB0byBwYXJzZSBhcHAgeWFtbFwiLCB7IHBhdGggfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHBhdGgsIGRhdGEgfTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"typescript": "^5.9.3"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
28
|
+
"@dbx-tools/shared-core": "^0.9.43",
|
|
29
29
|
"extract-zip": "^2.0.1",
|
|
30
30
|
"proper-lockfile": "^4.1.2",
|
|
31
31
|
"semver": "^7.7.3",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"./package.json": "./package.json"
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
|
-
"version": "0.9.
|
|
90
|
+
"version": "0.9.43",
|
|
91
91
|
"types": "./lib/index.d.ts",
|
|
92
92
|
"dbxToolsConfig": {
|
|
93
93
|
"tags": [
|
package/src/config-utils.ts
CHANGED
|
@@ -34,7 +34,14 @@ import { spawnSync } from "node:child_process";
|
|
|
34
34
|
import { readFileSync } from "node:fs";
|
|
35
35
|
import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
36
36
|
import { parseEnv } from "node:util";
|
|
37
|
-
import {
|
|
37
|
+
import {
|
|
38
|
+
environmentUtils,
|
|
39
|
+
json,
|
|
40
|
+
log,
|
|
41
|
+
object,
|
|
42
|
+
options as sharedOptions,
|
|
43
|
+
stringUtils,
|
|
44
|
+
} from "@dbx-tools/shared-core";
|
|
38
45
|
import { parse as parseYaml } from "yaml";
|
|
39
46
|
import { z } from "zod";
|
|
40
47
|
import { cachedRecord, statSync } from "./file.ts";
|
|
@@ -99,7 +106,7 @@ const NODE_ENV_ALTERNATIVES = {
|
|
|
99
106
|
} as const satisfies Record<string, readonly string[]>;
|
|
100
107
|
|
|
101
108
|
/** Highest valid TCP port number. */
|
|
102
|
-
export const MAX_TCP_PORT =
|
|
109
|
+
export const MAX_TCP_PORT = sharedOptions.MAX_TCP_PORT;
|
|
103
110
|
|
|
104
111
|
/** Boolean environment override for project `.env` reads. */
|
|
105
112
|
const CONFIG_DOTENV_KEY = "DBX_TOOLS_CONFIG_DOTENV";
|
|
@@ -122,11 +129,7 @@ export const valueSchema = z
|
|
|
122
129
|
message: "Interpolated values are not allowed",
|
|
123
130
|
});
|
|
124
131
|
|
|
125
|
-
const portValueSchema =
|
|
126
|
-
if (typeof input === "number") return input;
|
|
127
|
-
if (typeof input !== "string" || !/^\d+$/.test(input.trim())) return Number.NaN;
|
|
128
|
-
return Number(input.trim());
|
|
129
|
-
}, z.number().int().min(1).max(MAX_TCP_PORT));
|
|
132
|
+
const portValueSchema = sharedOptions.tcpPortSchema;
|
|
130
133
|
|
|
131
134
|
const positiveNumberValue = z.preprocess((input) => object.toNumber(input), z.number().positive());
|
|
132
135
|
const positiveIntValue = positiveNumberValue.transform(Math.floor);
|