@mnaoumov/typescript-dev-toolkit 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -41,21 +41,19 @@ var import_node_path = require('node:path');
|
|
|
41
41
|
var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
|
|
42
42
|
var import_env_toggle = require('./env-toggle.cjs');
|
|
43
43
|
var import_exec = require('./exec.cjs');
|
|
44
|
+
var import_npm = require('./npm.cjs');
|
|
44
45
|
var import_package_manager = require('./package-manager.cjs');
|
|
45
46
|
const PACKAGE_MANAGER_RUN_COMMAND = (0, import_package_manager.getPackageManagerRunCommand)().join(" ");
|
|
46
|
-
const
|
|
47
|
+
const SPELLCHECK_SCRIPT_NAME = "spellcheck";
|
|
48
|
+
const SPELLCHECK_COMMAND = toScriptCommand(SPELLCHECK_SCRIPT_NAME);
|
|
47
49
|
const EXECUTABLE_PATH_RESERVE = 260;
|
|
48
50
|
const TOKENIZER_UNSAFE_CHARACTERS_REG_EXP = /[\s"']/g;
|
|
49
|
-
const
|
|
50
|
-
"*.{ts,tsx,mts}": [
|
|
51
|
-
|
|
52
|
-
`${PACKAGE_MANAGER_RUN_COMMAND} format --`
|
|
53
|
-
],
|
|
54
|
-
"*.md": [
|
|
55
|
-
`${PACKAGE_MANAGER_RUN_COMMAND} lint:md:fix --`
|
|
56
|
-
]
|
|
51
|
+
const WRITER_SCRIPT_NAMES = {
|
|
52
|
+
"*.{ts,tsx,mts}": ["lint:fix", "format"],
|
|
53
|
+
"*.md": ["lint:md:fix"]
|
|
57
54
|
};
|
|
58
|
-
const
|
|
55
|
+
const WRITER_TASKS = toWriterTasks(() => true);
|
|
56
|
+
const obsidianDevUtilsConfig = partitionSpellcheck(WRITER_TASKS, true);
|
|
59
57
|
const NANO_STAGED_ENV_VARIABLE = "NANO_STAGED";
|
|
60
58
|
function getNanoStagedConfig(options) {
|
|
61
59
|
(0, import_env_toggle.loadEnvFileIfExists)();
|
|
@@ -64,15 +62,18 @@ function getNanoStagedConfig(options) {
|
|
|
64
62
|
`);
|
|
65
63
|
import_node_process.default.exit(0);
|
|
66
64
|
}
|
|
65
|
+
const scriptNames = new Set(Object.keys((0, import_npm.readPackageJsonSync)().scripts ?? {}));
|
|
66
|
+
const hasAllSharedScripts = [SPELLCHECK_SCRIPT_NAME, ...Object.values(WRITER_SCRIPT_NAMES).flat()].every((scriptName) => scriptNames.has(scriptName));
|
|
67
67
|
const additionalWriterTasks = options?.additionalWriterTasks ?? {};
|
|
68
|
-
if (Object.keys(additionalWriterTasks).length === 0) {
|
|
68
|
+
if (hasAllSharedScripts && Object.keys(additionalWriterTasks).length === 0) {
|
|
69
69
|
return obsidianDevUtilsConfig;
|
|
70
70
|
}
|
|
71
|
-
const
|
|
71
|
+
const writerTasks = toWriterTasks((scriptName) => scriptNames.has(scriptName));
|
|
72
|
+
const duplicatePattern = Object.keys(additionalWriterTasks).find((pattern) => Object.hasOwn(writerTasks, pattern));
|
|
72
73
|
if (duplicatePattern !== void 0) {
|
|
73
74
|
throw new Error(`nano-staged writer pattern '${duplicatePattern}' is already a shared writer pattern.`);
|
|
74
75
|
}
|
|
75
|
-
return partitionSpellcheck({ ...
|
|
76
|
+
return partitionSpellcheck({ ...writerTasks, ...additionalWriterTasks }, scriptNames.has(SPELLCHECK_SCRIPT_NAME));
|
|
76
77
|
}
|
|
77
78
|
function batchCommandArguments(prefix, commandArguments) {
|
|
78
79
|
const emptyLength = (0, import_exec.getEffectiveCommandLineLength)("");
|
|
@@ -95,13 +96,16 @@ function batchCommandArguments(prefix, commandArguments) {
|
|
|
95
96
|
}
|
|
96
97
|
return batches;
|
|
97
98
|
}
|
|
98
|
-
function partitionSpellcheck(writerTasks) {
|
|
99
|
+
function partitionSpellcheck(writerTasks, shouldSpellcheck) {
|
|
100
|
+
if (!shouldSpellcheck) {
|
|
101
|
+
return Object.fromEntries(Object.entries(writerTasks).map(([pattern, commands]) => [pattern, toBatchedTask(commands)]));
|
|
102
|
+
}
|
|
99
103
|
const patterns = Object.keys(writerTasks);
|
|
100
104
|
const patternWithSlash = patterns.find((pattern) => pattern.includes("/"));
|
|
101
105
|
if (patternWithSlash !== void 0) {
|
|
102
106
|
throw new Error(`nano-staged writer pattern '${patternWithSlash}' contains '/', which the spellcheck partition cannot express.`);
|
|
103
107
|
}
|
|
104
|
-
const complementPattern = `!(${patterns.map((pattern) => `${pattern}!(?)`).join("|")})*`;
|
|
108
|
+
const complementPattern = patterns.length === 0 ? "*" : `!(${patterns.map((pattern) => `${pattern}!(?)`).join("|")})*`;
|
|
105
109
|
const config = {
|
|
106
110
|
[complementPattern]: toBatchedTask([SPELLCHECK_COMMAND])
|
|
107
111
|
};
|
|
@@ -124,9 +128,22 @@ function toCommandArgument(filename) {
|
|
|
124
128
|
}
|
|
125
129
|
return commandArgument.replaceAll(TOKENIZER_UNSAFE_CHARACTERS_REG_EXP, "?");
|
|
126
130
|
}
|
|
131
|
+
function toScriptCommand(scriptName) {
|
|
132
|
+
return `${PACKAGE_MANAGER_RUN_COMMAND} ${scriptName} --`;
|
|
133
|
+
}
|
|
134
|
+
function toWriterTasks(shouldIncludeScript) {
|
|
135
|
+
const writerTasks = {};
|
|
136
|
+
for (const [pattern, scriptNames] of Object.entries(WRITER_SCRIPT_NAMES)) {
|
|
137
|
+
const commands = scriptNames.filter((scriptName) => shouldIncludeScript(scriptName)).map((scriptName) => toScriptCommand(scriptName));
|
|
138
|
+
if (commands.length > 0) {
|
|
139
|
+
writerTasks[pattern] = commands;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return writerTasks;
|
|
143
|
+
}
|
|
127
144
|
// Annotate the CommonJS export names for ESM import in node:
|
|
128
145
|
0 && (module.exports = {
|
|
129
146
|
getNanoStagedConfig,
|
|
130
147
|
obsidianDevUtilsConfig
|
|
131
148
|
});
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbm8tc3RhZ2VkLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIGZvciBwcmUtY29tbWl0IGhvb2tzLlxuICovXG5cbmltcG9ydCB7XG4gIGlzQWJzb2x1dGUsXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBpc0VudlZhcmlhYmxlT2ZmLFxuICBsb2FkRW52RmlsZUlmRXhpc3RzXG59IGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5pbXBvcnQge1xuICBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aCxcbiAgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RoXG59IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQgfSBmcm9tICcuL3BhY2thZ2UtbWFuYWdlci50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdldE5hbm9TdGFnZWRDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE5hbm9TdGFnZWRDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFJlcG8tc3BlY2lmaWMgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBuYW5vLXN0YWdlZCBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICAgKlxuICAgKiBFYWNoIGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhbmQgaXRzIGZpbGVzIHJlbW92ZWQgZnJvbSB0aGUgc3BlbGxjaGVjay1vbmx5IGtleSwgZXhhY3RseSBsaWtlIHRoZSBzaGFyZWRcbiAgICogd3JpdGVycy4gQSBwYXR0ZXJuIG11c3Qgbm90IGNvbnRhaW4gYC9gLCBhbmQgbXVzdCBub3QgcmVwZWF0IGEgc2hhcmVkIHdyaXRlciBwYXR0ZXJuLiBFYWNoIGNvbW1hbmQgaXMgYVxuICAgKiBwcmVmaXggdGhlIHN0YWdlZCBwYXRocyBhcmUgYXBwZW5kZWQgdG8sIGluIGJhdGNoZXMsIGxpa2UgdGhlIHNoYXJlZCBvbmVzIChgbnBtIHJ1biBsaW50OmZpeCAtLWApLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFdyaXRlclRhc2tzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+Pjtcbn1cblxuLyoqXG4gKiBBIG5hbm8tc3RhZ2VkIGNvbmZpZ3VyYXRpb24gd2hvc2UgZXZlcnkga2V5IGlzIGEge0BsaW5rIE5hbm9TdGFnZWRUYXNrfS5cbiAqL1xuZXhwb3J0IHR5cGUgTmFub1N0YWdlZENvbmZpZyA9IFJlY29yZDxzdHJpbmcsIE5hbm9TdGFnZWRUYXNrPjtcblxuLyoqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCBuYW5vLXN0YWdlZCB0YXNrOiBpdCByZWNlaXZlcyB0aGUgc3RhZ2VkIGZpbGVzIGl0cyBwYXR0ZXJuIGNsYWltcyBhbmQgcmV0dXJucyB0aGVcbiAqIGNvbW1hbmRzIHRvIHJ1biBvdmVyIHRoZW0sIGluIG9yZGVyLlxuICovXG5leHBvcnQgdHlwZSBOYW5vU3RhZ2VkVGFzayA9IChjb250ZXh0OiBOYW5vU3RhZ2VkVGFza0NvbnRleHQpID0+IHN0cmluZ1tdO1xuXG4vKipcbiAqIFdoYXQgbmFuby1zdGFnZWQgcGFzc2VzIHRvIGEgZnVuY3Rpb24tdmFsdWVkIHRhc2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFub1N0YWdlZFRhc2tDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRocyBvZiB0aGUgc3RhZ2VkIGZpbGVzIHRoZSB0YXNrJ3MgcGF0dGVybiBjbGFpbXMuXG4gICAqL1xuICByZWFkb25seSBmaWxlbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBgPG1hbmFnZXI+IHJ1bmAgcHJlZml4IGV2ZXJ5IHRhc2sgYmVsb3cgaXMgYnVpbHQgb24sIHJlc29sdmVkIG9uY2UgZm9yIHRoZSBwcm9jZXNzLlxuICpcbiAqIERldGVjdGlvbiBwcm9iZXMgZm9yIGEgbG9ja2ZpbGUgYmVzaWRlIGBwYWNrYWdlLmpzb25gLCBzbyBpdCBpcyBhIGhhbmRmdWwgb2YgYGV4aXN0c1N5bmNgIGNhbGxzIGFuZFxuICogbm90aGluZyBtb3JlIFx1MjAxNCBubyBgLmVudmAgcmVhZCBhbmQgbm8gYHByb2Nlc3MuZXhpdGAsIHdoaWNoIGlzIHdoYXQgbGV0cyBpdCBzaXQgYXQgbW9kdWxlIHNjb3BlLlxuICovXG5jb25zdCBQQUNLQUdFX01BTkFHRVJfUlVOX0NPTU1BTkQgPSBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoKS5qb2luKCcgJyk7XG5cbmNvbnN0IFNQRUxMQ0hFQ0tfQ09NTUFORCA9IGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gc3BlbGxjaGVjayAtLWA7XG5cbi8qKlxuICogUm9vbSBsZWZ0IGluIGV2ZXJ5IGJhdGNoIGZvciB0aGUgcmVzb2x2ZWQgcGF0aCBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyJ3MgZXhlY3V0YWJsZS5cbiAqXG4gKiBuYW5vLXN0YWdlZCBydW5zIGBucG1gIGFzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBucG0uY21kYCAoYDxjb21zcGVjPiAvRCAvUyAvQyBcIjxwYXRoPlwiIFwiPGFyZz5cIiBcdTIwMjZgKSwgd2hpY2hcbiAqIHRoZSBiYXRjaCBjYW5ub3Qgc2VlLCBzbyBhIGZ1bGwgV2luZG93cyBgTUFYX1BBVEhgIGlzIHNldCBhc2lkZSBmb3IgaXQuXG4gKi9cbmNvbnN0IEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFID0gMjYwO1xuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXJzIG5hbm8tc3RhZ2VkJ3MgY29tbWFuZCB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IGluc2lkZSBhbiBhcmd1bWVudC5cbiAqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCB0YXNrIHJldHVybnMgaXRzIGNvbW1hbmRzIGFzIFNUUklOR1MsIGFuZCBuYW5vLXN0YWdlZCBzcGxpdHMgZWFjaCBvbmUgd2l0aFxuICogYHN0cmluZ0FyZ3ZUb0FycmF5YCwgd2hpY2ggZW1pdHMgYSBxdW90ZWQgdG9rZW4gdHdpY2UgKG9uY2UgYmFyZSwgb25jZSB3aXRoIGl0cyBxdW90ZXMpIGFuZCBoYXMgbm8gZXNjYXBlLlxuICogU28gYSBwYXRoIGhvbGRpbmcgd2hpdGVzcGFjZSBvciBhIHF1b3RlIGNhbm5vdCBiZSBwYXNzZWQgYXMgaXRzZWxmLlxuICovXG5jb25zdCBUT0tFTklaRVJfVU5TQUZFX0NIQVJBQ1RFUlNfUkVHX0VYUCA9IC9bXFxzXCInXS9nO1xuXG4vKipcbiAqIFRoZSB0YXNrcyB0aGF0IFJFV1JJVEUgYSBzdGFnZWQgZmlsZSwga2V5ZWQgYnkgdGhlIG5hbm8tc3RhZ2VkIHBhdHRlcm4gdGhhdCBjbGFpbXMgaXQuXG4gKlxuICogYGxpbnQ6Zml4YCBhbmQgYGZvcm1hdGAgYm90aCByZXdyaXRlIHRoZSBmaWxlLCBzbyB0aGV5IGhhdmUgdG8gc2hhcmUgb25lIGtleTogbmFuby1zdGFnZWQgcnVucyBpdHNcbiAqIHBlci1wYXR0ZXJuIGdyb3VwcyB1bmRlciBgUHJvbWlzZS5hbGxgIChgcnVuKClgIGluIGBuYW5vLXN0YWdlZC9saWIvY21kLXJ1bm5lci5qc2ApLCBhbmQgc2VxdWVuY2VzIG9ubHlcbiAqIHRoZSBjb21tYW5kcyBJTlNJREUgYSBzaW5nbGUga2V5J3MgYXJyYXkgKGBydW5UYXNrKClgLCBhIGBmb3IgLi4uIG9mIGF3YWl0YCkuIFNwbGl0IGFjcm9zcyB0d28ga2V5cyB0aGV5XG4gKiByYWNlLCB3aGljaGV2ZXIgZmluaXNoZXMgbGFzdCB3aW5zLCBhbmQgdGhlIGNvbW1pdCBzdGFnZXMgYnl0ZXMgdGhhdCBuZWl0aGVyIHRvb2wgd291bGQgaGF2ZSBwcm9kdWNlZCBvblxuICogaXRzIG93bi5cbiAqXG4gKiBTbyBkbyBOT1QgZXhwcmVzcyBhIGRpcmVjdG9yeSBleGNsdXNpb24gYnkgZ2l2aW5nIG9uZSBvZiB0aGVzZSB0d28gaXRzIG93biBuZWdhdGVkIGtleSAtLSB0aGF0IHNpbGVudGx5XG4gKiB0YWtlcyB0aGUgb3JkZXJpbmcgYXdheS4gQW4gZXhjbHVzaW9uIGJlbG9uZ3MgaW4gdGhlIGV4Y2x1ZGVkIHRvb2wncyBvd24gY29uZmlnLCB3aGVyZSBFU0xpbnQnc1xuICogYGdsb2JhbElnbm9yZXNgIGFscmVhZHkgcHV0cyBpdDogYSBwYXRoIEVTTGludCBpZ25vcmVzIGlzIHJlcG9ydGVkIGFzIGEgd2FybmluZyBhbmQgZXhpdHMgMCB3aGVuIGl0IGlzXG4gKiBwYXNzZWQgZXhwbGljaXRseSwgc28gaXQgY29zdHMgYSBjb25zb2xlIGxpbmUgcmF0aGVyIHRoYW4gYSBmYWlsZWQgY29tbWl0IGFuZCBuZWVkcyBubyBrZXkgaGVyZS5cbiAqL1xuY29uc3QgV1JJVEVSX1RBU0tTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+ID0ge1xuICAnKi57dHMsdHN4LG10c30nOiBbXG4gICAgYCR7UEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EfSBsaW50OmZpeCAtLWAsXG4gICAgYCR7UEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EfSBmb3JtYXQgLS1gXG4gIF0sXG4gICcqLm1kJzogW1xuICAgIGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gbGludDptZDpmaXggLS1gXG4gIF1cbn07XG5cbi8qKlxuICogTmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0aGF0IHJ1bnMgZmlsZS1iYXNlZCBsaW50LCBmb3JtYXQsIGFuZCBzcGVsbGNoZWNrIG9uIHN0YWdlZCBmaWxlcy5cbiAqXG4gKiBPbmx5IGluY2x1ZGVzIHRvb2xzIHRoYXQgY2FuIG9wZXJhdGUgb24gaW5kaXZpZHVhbCBmaWxlcy4gV2hvbGUtcHJvamVjdCBjaGVja3NcbiAqIChUeXBlU2NyaXB0IGNvbXBpbGF0aW9uLCB1bml0IHRlc3RzKSBhcmUgbGVmdCB0byBDSS5cbiAqXG4gKiBDb21tYW5kcyBydW4gdGhyb3VnaCB0aGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZSBcdTIwMTQgYG5wbSBydW4gLi4uIC0tYCwgYGJ1biBydW4gLi4uIC0tYCwgYW5kXG4gKiBzbyBvbiBcdTIwMTQgc28gbmFuby1zdGFnZWQgZmlsZSBwYXRocyBhcmUgZm9yd2FyZGVkIGFzIENMSSBhcmd1bWVudHMsIGJhdGNoZWQgdG8gZml0IHRoZSBjb21tYW5kIGxpbmUgKHNlZVxuICogYHRvQmF0Y2hlZFRhc2tgKS5cbiAqXG4gKiBTcGVsbGNoZWNrIGlzIHBhcnRpdGlvbmVkIGFjcm9zcyB0aGUga2V5cyByYXRoZXIgdGhhbiBnaXZlbiBhIGNhdGNoLWFsbCBgJyonYCBrZXkgKHNlZVxuICogYHBhcnRpdGlvblNwZWxsY2hlY2tgKS4gQSByZXBvIGFkZGluZyBhIGZpbGUtcmV3cml0aW5nIHRhc2sgb2YgaXRzIG93biBwYXNzZXMgaXQgdG9cbiAqIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfSBhcyBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCByYXRoZXIgdGhhbiBzcHJlYWRpbmcgdGhpcyBvYmplY3QgYW5kIGFkZGluZyBhIGtleSxcbiAqIHdoaWNoIHdvdWxkIHJlaW50cm9kdWNlIHRoZSBvdmVybGFwIGZvciB0aGF0IGtleSdzIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTmFub1N0YWdlZENvbmZpZyA9IHBhcnRpdGlvblNwZWxsY2hlY2soV1JJVEVSX1RBU0tTKTtcblxuY29uc3QgTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFID0gJ05BTk9fU1RBR0VEJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0byB1c2UsIGhvbm9yaW5nIGEgcGVyLWRldmVsb3BlciBvcHQtb3V0LlxuICpcbiAqIExvYWRzIGEgZ2l0aWdub3JlZCBgLmVudmAgaWYgcHJlc2VudCwgdGhlbiBcdTIwMTQgd2hlbiBgTkFOT19TVEFHRURgIGlzIHNldCB0byBhbiBvZmYgdmFsdWUgKGAwYCwgYGZhbHNlYCxcbiAqIGBvZmZgLCBvciBgbm9gKSBcdTIwMTQgcHJpbnRzIGEgbm90aWNlIGFuZCBleGl0cyB0aGUgcHJvY2VzcyBzdWNjZXNzZnVsbHkgc28gdGhlIHByZS1jb21taXQgY2hlY2tzIGFyZVxuICogc2tpcHBlZC4gVGhpcyBtaXJyb3JzIGh1c2t5J3Mgb3duIGBIVVNLWT0wYCBzd2l0Y2gsIGJ1dCBzY29wZWQgdG8gdGhlIG5hbm8tc3RhZ2VkIHN0ZXAgKHNvIHRoZVxuICogY29tbWl0LW1zZyBob29rIHN0aWxsIHJ1bnMpLiBPdGhlcndpc2UgaXQgcmV0dXJucyB7QGxpbmsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZ30sIG9yIFx1MjAxNCB3aGVuXG4gKiBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgZ2l2ZW4gXHUyMDE0IHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gcmUtcGFydGl0aW9uZWQgd2l0aCB0aG9zZSB3cml0ZXJzIGFkZGVkLlxuICpcbiAqIGBOQU5PX1NUQUdFRGAgaXMgbm90IGFuIG5wbSBzY3JpcHQsIHNvIGl0IGNhcnJpZXMgaXRzIG93biBzd2l0Y2ggcmF0aGVyIHRoYW4gdGhlIHNjcmlwdC1uYW1lLWRlcml2ZWQgb25lXG4gKiBldmVyeSBucG0gc2NyaXB0IGdldHMgXHUyMDE0IGJ1dCBib3RoIHNoYXJlIHRoZSBzYW1lIG5vdGlvbiBvZiBhbiBvZmYgdmFsdWUsIHZpYSB7QGxpbmsgaXNFbnZWYXJpYWJsZU9mZn0uXG4gKlxuICogVGhpcyBpcyBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIG1vZHVsZS1sZXZlbCBjb2RlIHNvIGltcG9ydGluZyB0aGUgcGFja2FnZSBiYXJyZWwgbmV2ZXIgdHJpZ2dlcnMgdGhlXG4gKiBgLmVudmAgcmVhZCBvciB0aGUgcHJvY2VzcyBleGl0OyBjYWxsIGl0IGZyb20gdGhlIHRoaW4gYHNjcmlwdHMvbmFuby1zdGFnZWQtY29uZmlnLnRzYCBlbnRyeS4gUmVzb2x2aW5nIHRoZVxuICogcGFja2FnZSBtYW5hZ2VyIGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBkb2VzIHJ1biBhdCBtb2R1bGUgc2NvcGUsIGFuZCBpdCBkb2VzIG5laXRoZXIgb2YgdGhvc2UgdHdvXG4gKiB0aGluZ3MgXHUyMDE0IGl0IG9ubHkgcHJvYmVzIGZvciBhIGxvY2tmaWxlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbmFsIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgbmFuby1zdGFnZWQgdGFzayBjb25maWd1cmF0aW9uLiBEb2VzIG5vdCByZXR1cm4gd2hlbiB0aGUgb3B0LW91dCBpcyBhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW5vU3RhZ2VkQ29uZmlnKG9wdGlvbnM/OiBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyk6IE5hbm9TdGFnZWRDb25maWcge1xuICBsb2FkRW52RmlsZUlmRXhpc3RzKCk7XG5cbiAgaWYgKGlzRW52VmFyaWFibGVPZmYoTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFKSkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBuYW5vLXN0YWdlZDogc2tpcHBlZCAoJHtOQU5PX1NUQUdFRF9FTlZfVkFSSUFCTEV9IGlzIG9mZikuXFxuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgY29uc3QgYWRkaXRpb25hbFdyaXRlclRhc2tzID0gb3B0aW9ucz8uYWRkaXRpb25hbFdyaXRlclRhc2tzID8/IHt9O1xuICBpZiAoT2JqZWN0LmtleXMoYWRkaXRpb25hbFdyaXRlclRhc2tzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JzaWRpYW5EZXZVdGlsc0NvbmZpZztcbiAgfVxuXG4gIGNvbnN0IGR1cGxpY2F0ZVBhdHRlcm4gPSBPYmplY3Qua2V5cyhhZGRpdGlvbmFsV3JpdGVyVGFza3MpLmZpbmQoKHBhdHRlcm4pID0+IE9iamVjdC5oYXNPd24oV1JJVEVSX1RBU0tTLCBwYXR0ZXJuKSk7XG4gIGlmIChkdXBsaWNhdGVQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5hbm8tc3RhZ2VkIHdyaXRlciBwYXR0ZXJuICcke2R1cGxpY2F0ZVBhdHRlcm59JyBpcyBhbHJlYWR5IGEgc2hhcmVkIHdyaXRlciBwYXR0ZXJuLmApO1xuICB9XG5cbiAgcmV0dXJuIHBhcnRpdGlvblNwZWxsY2hlY2soeyAuLi5XUklURVJfVEFTS1MsIC4uLmFkZGl0aW9uYWxXcml0ZXJUYXNrcyB9KTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgY29tbWFuZCBhcmd1bWVudHMgaW50byBiYXRjaGVzIHRoYXQgZWFjaCBmaXQgb25lIGNvbW1hbmQgbGluZSBhZnRlciBhIGdpdmVuIHByZWZpeC5cbiAqXG4gKiBFYWNoIGFyZ3VtZW50IGlzIGNvc3RlZCBhcyBuYW5vLXN0YWdlZCBwYXNzZXMgaXQgb24gV2luZG93cyBcdTIwMTQgcXVvdGVkLCB0aGVuIGBeYC1lc2NhcGVkIGJ5IGBjbWQuZXhlYCdzXG4gKiBydWxlcyBcdTIwMTQgdGhyb3VnaCB7QGxpbmsgZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGh9LCBhbmQgdGhlIGJ1ZGdldCBpcyB7QGxpbmsgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RofSxcbiAqIHdoaWNoIGFscmVhZHkgaG9sZHMgYmFjayB0aGUgcmVzZXJ2ZSBmb3IgdGhlIGBucG1gIFx1MjE5MiBgY21kLmV4ZWAgXHUyMTkyIGAuYmluYCBzaGltIGNoYWluIHJlLWV4cGFuZGluZyB0aGVcbiAqIGFyZ3VtZW50cy4gQW4gYXJndW1lbnQgdG9vIGxvbmcgZm9yIGFueSBiYXRjaCBzdGlsbCBnZXRzIGEgYmF0Y2ggb2YgaXRzIG93bjogaXQgZmFpbHMgbG91ZGx5IHRoZXJlLCB3aGljaFxuICogZHJvcHBpbmcgaXQgd291bGQgbm90LlxuICpcbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgY29tbWFuZCB0aGUgYXJndW1lbnRzIGFyZSBhcHBlbmRlZCB0by5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0byBzcGxpdC5cbiAqIEByZXR1cm5zIFRoZSBiYXRjaGVzLCBpbiBvcmRlciwgdG9nZXRoZXIgaG9sZGluZyBldmVyeSBhcmd1bWVudCBvbmNlLlxuICovXG5mdW5jdGlvbiBiYXRjaENvbW1hbmRBcmd1bWVudHMocHJlZml4OiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGVtcHR5TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoJycpO1xuICBjb25zdCBidWRnZXQgPSBnZXRNYXhCYXRjaENvbW1hbmRMZW5ndGgoKSAtIEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFIC0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgocHJlZml4KTtcbiAgY29uc3QgYmF0Y2hlczogc3RyaW5nW11bXSA9IFtdO1xuICBsZXQgYmF0Y2g6IHN0cmluZ1tdID0gW107XG4gIGxldCBiYXRjaExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCBjb21tYW5kQXJndW1lbnQgb2YgY29tbWFuZEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3VtZW50TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoYCBcIiR7Y29tbWFuZEFyZ3VtZW50fVwiYCkgLSBlbXB0eUxlbmd0aDtcbiAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCAmJiBiYXRjaExlbmd0aCArIGFyZ3VtZW50TGVuZ3RoID4gYnVkZ2V0KSB7XG4gICAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICAgICAgYmF0Y2ggPSBbXTtcbiAgICAgIGJhdGNoTGVuZ3RoID0gMDtcbiAgICB9XG4gICAgYmF0Y2gucHVzaChjb21tYW5kQXJndW1lbnQpO1xuICAgIGJhdGNoTGVuZ3RoICs9IGFyZ3VtZW50TGVuZ3RoO1xuICB9XG5cbiAgaWYgKGJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICB9XG5cbiAgcmV0dXJuIGJhdGNoZXM7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiBpbiB3aGljaCBzcGVsbGNoZWNrIG5ldmVyIHJlYWRzIGEgZmlsZSB3aGlsZSBhbm90aGVyIHRhc2sgcmV3cml0ZXMgaXQuXG4gKlxuICogVGhlIHNhbWUgYFByb21pc2UuYWxsYCB0aGF0IGZvcmNlcyB0d28gd3JpdGVycyBpbnRvIG9uZSBrZXkgbWFrZXMgYSBjYXRjaC1hbGwgYCcqJ2Agc3BlbGxjaGVjayBrZXkgcnVuXG4gKiBDT05DVVJSRU5UTFkgd2l0aCBldmVyeSB3cml0ZXIga2V5LCBzbyBjc3BlbGwgd291bGQgcmVhZCBhIGZpbGUgdGhhdCBFU0xpbnQgb3IgZHByaW50IGlzIHJld3JpdGluZyBpblxuICogcGxhY2UgLS0gYSBzcHVyaW91cyBmaW5kaW5nIG9uIGEgaGFsZi13cml0dGVuIGZpbGUsIG9yIGEgcGFzcyBvdmVyIGNvbnRlbnQgdGhhdCBpcyBub3Qgd2hhdCBnZXRzXG4gKiBjb21taXR0ZWQuIFNvIHRoZSBzdGFnZWQgZmlsZXMgYXJlIFBBUlRJVElPTkVEIGluc3RlYWQ6XG4gKlxuICogLSBldmVyeSB3cml0ZXIga2V5IGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhcyBpdHMgTEFTVCBjb21tYW5kLCBzbyBpdCByZWFkcyB0aGF0IGtleSdzIGZpbGVzIGFmdGVyIHRoZXlcbiAqICAgaGF2ZSBiZWVuIHJld3JpdHRlbjtcbiAqIC0gb25lIGNvbXBsZW1lbnQga2V5IHNwZWxsY2hlY2tzIGV4YWN0bHkgdGhlIGZpbGVzIG5vIHdyaXRlciBrZXkgY2xhaW1zLlxuICpcbiAqIFRoZSBjb21wbGVtZW50IGlzIHdyaXR0ZW4gaW4gbmFuby1zdGFnZWQncyBvd24gZ2xvYiBkaWFsZWN0LCB3aGljaCBjb21waWxlcyBgISguLi4pYCB0byBhIGxvb2thaGVhZCB0aGF0XG4gKiBpcyBOT1QgYW5jaG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aDogYCEoKi5tZCkqYCB3b3VsZCBleGNsdWRlIGBub3Rlcy5tZC5iYWtgIHRvby4gQSBuZXN0ZWQgYCEoPylgXG4gKiBjb21waWxlcyB0byBgKD8hLilgLCB3aGljaCBJUyBhbiBlbmQgYW5jaG9yLCBzbyBlYWNoIGFsdGVybmF0aXZlIGlzIHN1ZmZpeGVkIHdpdGggaXQuIEEgd3JpdGVyIHBhdHRlcm5cbiAqIGNvbnRhaW5pbmcgYC9gIHdvdWxkIHN3aXRjaCBuYW5vLXN0YWdlZCBpbnRvIGdsb2JzdGFyIG1vZGUsIHdoZXJlIGAqYCBzdG9wcyBjcm9zc2luZyBkaXJlY3RvcmllcyBhbmQgdGhlXG4gKiBjb25zdHJ1Y3Rpb24gbm8gbG9uZ2VyIGhvbGRzIC0tIGhlbmNlIHRoZSB0aHJvdy4gVGhlIHVuaXQgdGVzdCBwaW5zIHRoZSBwYXJ0aXRpb24gYWdhaW5zdCB0aGUgaW5zdGFsbGVkXG4gKiBuYW5vLXN0YWdlZCBjb21waWxlciwgc28gYSByZWxlYXNlIHRoYXQgY2hhbmdlcyBpdHMgZGlhbGVjdCBmYWlscyB0aGVyZSByYXRoZXIgdGhhbiBpbiBhIGNvbW1pdC5cbiAqXG4gKiBAcGFyYW0gd3JpdGVyVGFza3MgLSBUaGUgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIHdpdGggdGhlIHNwZWxsY2hlY2sgc3RlcCBwYXJ0aXRpb25lZCBhY3Jvc3MgdGhlIGtleXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvblNwZWxsY2hlY2sod3JpdGVyVGFza3M6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4pOiBOYW5vU3RhZ2VkQ29uZmlnIHtcbiAgY29uc3QgcGF0dGVybnMgPSBPYmplY3Qua2V5cyh3cml0ZXJUYXNrcyk7XG4gIGNvbnN0IHBhdHRlcm5XaXRoU2xhc2ggPSBwYXR0ZXJucy5maW5kKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLmluY2x1ZGVzKCcvJykpO1xuICBpZiAocGF0dGVybldpdGhTbGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBuYW5vLXN0YWdlZCB3cml0ZXIgcGF0dGVybiAnJHtwYXR0ZXJuV2l0aFNsYXNofScgY29udGFpbnMgJy8nLCB3aGljaCB0aGUgc3BlbGxjaGVjayBwYXJ0aXRpb24gY2Fubm90IGV4cHJlc3MuYCk7XG4gIH1cblxuICBjb25zdCBjb21wbGVtZW50UGF0dGVybiA9IGAhKCR7cGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBgJHtwYXR0ZXJufSEoPylgKS5qb2luKCd8Jyl9KSpgO1xuICBjb25zdCBjb25maWc6IE5hbm9TdGFnZWRDb25maWcgPSB7XG4gICAgW2NvbXBsZW1lbnRQYXR0ZXJuXTogdG9CYXRjaGVkVGFzayhbU1BFTExDSEVDS19DT01NQU5EXSlcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBjb21tYW5kc10gb2YgT2JqZWN0LmVudHJpZXMod3JpdGVyVGFza3MpKSB7XG4gICAgY29uZmlnW3BhdHRlcm5dID0gdG9CYXRjaGVkVGFzayhbLi4uY29tbWFuZHMsIFNQRUxMQ0hFQ0tfQ09NTUFORF0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB0YXNrIHRoYXQgcnVucyBlYWNoIGNvbW1hbmQgb3ZlciBldmVyeSBzdGFnZWQgZmlsZSBpdCByZWNlaXZlcywgaW4gYXMgbWFueSBiYXRjaGVzIGFzIHRoZSBjb21tYW5kXG4gKiBsaW5lIG5lZWRzLlxuICpcbiAqIG5hbm8tc3RhZ2VkIGFwcGVuZHMgYSBzdHJpbmcgdGFzaydzIGZpbGVzIHRvIE9ORSBjb21tYW5kLCBzbyBhIGNvbW1pdCBzdGFnaW5nIGEgZmV3IGh1bmRyZWQgZmlsZXMgcmFuXG4gKiBgbnBtIHJ1biBsaW50OmZpeCAtLSA8ZXZlcnkgcGF0aD5gIGFuZCBmYWlsZWQgb24gV2luZG93cyB3aXRoIGBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nLmAsIHJlZnVzaW5nXG4gKiBleGFjdGx5IHRoZSB3aG9sZS1yZXBvIGNvbW1pdHMgdGhhdCBtb3N0IG5lZWQgdGhlIGhvb2suIEEgZnVuY3Rpb24tdmFsdWVkIHRhc2sgYnVpbGRzIGl0cyBvd24gY29tbWFuZHNcbiAqIGluc3RlYWQsIGFuZCB0aGVzZSBhcmUgYmF0Y2hlZCBhZ2FpbnN0IHRoZSBzYW1lIGJ1ZGdldCBgZXhlYygpYCB1c2VzIChzZWUgYGJhdGNoQ29tbWFuZEFyZ3VtZW50c2ApLlxuICpcbiAqIFRoZSBjb21tYW5kcyBrZWVwIHRoZWlyIG9yZGVyOiBldmVyeSBiYXRjaCBvZiB0aGUgZmlyc3QgY29tbWFuZCBydW5zIGJlZm9yZSBhbnkgYmF0Y2ggb2YgdGhlIHNlY29uZCxcbiAqIGJlY2F1c2UgbmFuby1zdGFnZWQgcnVucyBvbmUga2V5J3MgY29tbWFuZHMgb25lIGFmdGVyIGFub3RoZXIsIHNvIGEgd3JpdGVyIHN0aWxsIGZpbmlzaGVzIGJlZm9yZSB0aGUgbmV4dFxuICogd3JpdGVyLCBhbmQgc3BlbGxjaGVjayBzdGlsbCByZWFkcyB0aGUgcmV3cml0dGVuIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBjb21tYW5kIHByZWZpeGVzLCBpbiB0aGUgb3JkZXIgdGhleSBydW4uXG4gKiBAcmV0dXJucyBUaGUgdGFzay5cbiAqL1xuZnVuY3Rpb24gdG9CYXRjaGVkVGFzayhjb21tYW5kczogcmVhZG9ubHkgc3RyaW5nW10pOiBOYW5vU3RhZ2VkVGFzayB7XG4gIHJldHVybiAoeyBmaWxlbmFtZXMgfSkgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRBcmd1bWVudHMgPSBmaWxlbmFtZXMubWFwKChmaWxlbmFtZSkgPT4gdG9Db21tYW5kQXJndW1lbnQoZmlsZW5hbWUpKTtcbiAgICByZXR1cm4gY29tbWFuZHMuZmxhdE1hcCgoY29tbWFuZCkgPT4gYmF0Y2hDb21tYW5kQXJndW1lbnRzKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMpLm1hcCgoYmF0Y2gpID0+IGAke2NvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWApKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUdXJucyBhIHN0YWdlZCBmaWxlJ3MgYWJzb2x1dGUgcGF0aCBpbnRvIHRoZSBhcmd1bWVudCBhIGJhdGNoZWQgdGFzayBwYXNzZXMgZm9yIGl0LlxuICpcbiAqIFRoZSBwYXRoIGlzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB3aGVyZSBuYW5vLXN0YWdlZCBhbmQgdGhlIHRhc2sgYm90aCBydW4sIHdoaWNoIHJvdWdobHlcbiAqIGhhbHZlcyBpdHMgbGVuZ3RoIGFuZCBzbyB0aGUgbnVtYmVyIG9mIGJhdGNoZXM7IGEgcGF0aCBvdXRzaWRlIGl0IHN0YXlzIGFic29sdXRlLiBBIHJlbGF0aXZlIHBhdGggc3RhcnRpbmdcbiAqIHdpdGggYC1gIGdldHMgYC4vYCwgc28gbm8gdG9vbCByZWFkcyBpdCBhcyBhbiBvcHRpb24uXG4gKlxuICogV2hpdGVzcGFjZSBhbmQgcXVvdGVzIGJlY29tZSBgP2AsIGJlY2F1c2UgbmFuby1zdGFnZWQncyB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IHRoZW0gKHNlZVxuICoge0BsaW5rIFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQfSkuIEV2ZXJ5IHRvb2wgdGhlIHRhc2tzIHJ1biAoRVNMaW50LCBkcHJpbnQsIGNzcGVsbCxcbiAqIG1hcmtkb3dubGludC1jbGkyKSB0YWtlcyBpdHMgcGF0aHMgYXMgZ2xvYnMsIGFuZCBgP2AgbWF0Y2hlcyBleGFjdGx5IHRoZSBvbmUgY2hhcmFjdGVyIGl0IHJlcGxhY2VkLCBzbyB0aGVcbiAqIGZpbGUgaXMgc3RpbGwgZm91bmQ7IGEgc2libGluZyBkaWZmZXJpbmcgb25seSBpbiB0aGF0IGNoYXJhY3RlciB3b3VsZCBtYXRjaCB0b28sIHdoaWNoIGNvc3RzIGEgbGludCBvZiBhblxuICogZXh0cmEgZmlsZSwgbm90IGEgbWlzc2VkIG9uZS5cbiAqXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc3RhZ2VkIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZEFyZ3VtZW50KGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlbmFtZSk7XG4gIGxldCBjb21tYW5kQXJndW1lbnQgPSAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJykgfHwgaXNBYnNvbHV0ZShyZWxhdGl2ZVBhdGgpID8gZmlsZW5hbWUgOiByZWxhdGl2ZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBpZiAoY29tbWFuZEFyZ3VtZW50LnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbW1hbmRBcmd1bWVudCA9IGAuLyR7Y29tbWFuZEFyZ3VtZW50fWA7XG4gIH1cbiAgcmV0dXJuIGNvbW1hbmRBcmd1bWVudC5yZXBsYWNlQWxsKFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQLCAnPycpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsdUJBR087QUFDUCwwQkFBb0I7QUFFcEIsd0JBR087QUFDUCxrQkFHTztBQUNQLDZCQUE0QztBQTJDNUMsTUFBTSxrQ0FBOEIsb0RBQTRCLEVBQUUsS0FBSyxHQUFHO0FBRTFFLE1BQU0scUJBQXFCLEdBQUcsMkJBQTJCO0FBUXpELE1BQU0sMEJBQTBCO0FBU2hDLE1BQU0sc0NBQXNDO0FBZ0I1QyxNQUFNLGVBQTREO0FBQUEsRUFDaEUsa0JBQWtCO0FBQUEsSUFDaEIsR0FBRywyQkFBMkI7QUFBQSxJQUM5QixHQUFHLDJCQUEyQjtBQUFBLEVBQ2hDO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTixHQUFHLDJCQUEyQjtBQUFBLEVBQ2hDO0FBQ0Y7QUFpQk8sTUFBTSx5QkFBMkMsb0JBQW9CLFlBQVk7QUFFeEYsTUFBTSwyQkFBMkI7QUFzQjFCLFNBQVMsb0JBQW9CLFNBQXdEO0FBQzFGLDZDQUFvQjtBQUVwQixVQUFJLG9DQUFpQix3QkFBd0IsR0FBRztBQUM5Qyx3QkFBQUEsUUFBUSxPQUFPLE1BQU0seUJBQXlCLHdCQUF3QjtBQUFBLENBQWE7QUFDbkYsd0JBQUFBLFFBQVEsS0FBSyxDQUFDO0FBQUEsRUFDaEI7QUFFQSxRQUFNLHdCQUF3QixTQUFTLHlCQUF5QixDQUFDO0FBQ2pFLE1BQUksT0FBTyxLQUFLLHFCQUFxQixFQUFFLFdBQVcsR0FBRztBQUNuRCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sbUJBQW1CLE9BQU8sS0FBSyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsWUFBWSxPQUFPLE9BQU8sY0FBYyxPQUFPLENBQUM7QUFDbEgsTUFBSSxxQkFBcUIsUUFBVztBQUNsQyxVQUFNLElBQUksTUFBTSwrQkFBK0IsZ0JBQWdCLHVDQUF1QztBQUFBLEVBQ3hHO0FBRUEsU0FBTyxvQkFBb0IsRUFBRSxHQUFHLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQztBQUMxRTtBQWVBLFNBQVMsc0JBQXNCLFFBQWdCLGtCQUFpRDtBQUM5RixRQUFNLGtCQUFjLDJDQUE4QixFQUFFO0FBQ3BELFFBQU0sYUFBUyxzQ0FBeUIsSUFBSSw4QkFBMEIsMkNBQThCLE1BQU07QUFDMUcsUUFBTSxVQUFzQixDQUFDO0FBQzdCLE1BQUksUUFBa0IsQ0FBQztBQUN2QixNQUFJLGNBQWM7QUFFbEIsYUFBVyxtQkFBbUIsa0JBQWtCO0FBQzlDLFVBQU0scUJBQWlCLDJDQUE4QixLQUFLLGVBQWUsR0FBRyxJQUFJO0FBQ2hGLFFBQUksTUFBTSxTQUFTLEtBQUssY0FBYyxpQkFBaUIsUUFBUTtBQUM3RCxjQUFRLEtBQUssS0FBSztBQUNsQixjQUFRLENBQUM7QUFDVCxvQkFBYztBQUFBLElBQ2hCO0FBQ0EsVUFBTSxLQUFLLGVBQWU7QUFDMUIsbUJBQWU7QUFBQSxFQUNqQjtBQUVBLE1BQUksTUFBTSxTQUFTLEdBQUc7QUFDcEIsWUFBUSxLQUFLLEtBQUs7QUFBQSxFQUNwQjtBQUVBLFNBQU87QUFDVDtBQXdCQSxTQUFTLG9CQUFvQixhQUE0RTtBQUN2RyxRQUFNLFdBQVcsT0FBTyxLQUFLLFdBQVc7QUFDeEMsUUFBTSxtQkFBbUIsU0FBUyxLQUFLLENBQUMsWUFBWSxRQUFRLFNBQVMsR0FBRyxDQUFDO0FBQ3pFLE1BQUkscUJBQXFCLFFBQVc7QUFDbEMsVUFBTSxJQUFJLE1BQU0sK0JBQStCLGdCQUFnQixnRUFBZ0U7QUFBQSxFQUNqSTtBQUVBLFFBQU0sb0JBQW9CLEtBQUssU0FBUyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ3BGLFFBQU0sU0FBMkI7QUFBQSxJQUMvQixDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztBQUFBLEVBQ3pEO0FBRUEsYUFBVyxDQUFDLFNBQVMsUUFBUSxLQUFLLE9BQU8sUUFBUSxXQUFXLEdBQUc7QUFDN0QsV0FBTyxPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsVUFBVSxrQkFBa0IsQ0FBQztBQUFBLEVBQ25FO0FBRUEsU0FBTztBQUNUO0FBa0JBLFNBQVMsY0FBYyxVQUE2QztBQUNsRSxTQUFPLENBQUMsRUFBRSxVQUFVLE1BQU07QUFDeEIsVUFBTSxtQkFBbUIsVUFBVSxJQUFJLENBQUMsYUFBYSxrQkFBa0IsUUFBUSxDQUFDO0FBQ2hGLFdBQU8sU0FBUyxRQUFRLENBQUMsWUFBWSxzQkFBc0IsU0FBUyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUFBLEVBQ3ZJO0FBQ0Y7QUFrQkEsU0FBUyxrQkFBa0IsVUFBMEI7QUFDbkQsUUFBTSxtQkFBZSwyQkFBUyxvQkFBQUEsUUFBUSxJQUFJLEdBQUcsUUFBUTtBQUNyRCxNQUFJLG1CQUFtQixhQUFhLFdBQVcsSUFBSSxTQUFLLDZCQUFXLFlBQVksSUFBSSxXQUFXLGNBQWMsV0FBVyxNQUFNLEdBQUc7QUFDaEksTUFBSSxnQkFBZ0IsV0FBVyxHQUFHLEdBQUc7QUFDbkMsc0JBQWtCLEtBQUssZUFBZTtBQUFBLEVBQ3hDO0FBQ0EsU0FBTyxnQkFBZ0IsV0FBVyxxQ0FBcUMsR0FBRztBQUM1RTsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbm8tc3RhZ2VkLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIGZvciBwcmUtY29tbWl0IGhvb2tzLlxuICovXG5cbmltcG9ydCB7XG4gIGlzQWJzb2x1dGUsXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBpc0VudlZhcmlhYmxlT2ZmLFxuICBsb2FkRW52RmlsZUlmRXhpc3RzXG59IGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5pbXBvcnQge1xuICBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aCxcbiAgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RoXG59IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb25TeW5jIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZU1hbmFnZXJSdW5Db21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXBvLXNwZWNpZmljIGZpbGUtcmV3cml0aW5nIHRhc2tzLCBrZXllZCBieSB0aGUgbmFuby1zdGFnZWQgcGF0dGVybiB0aGF0IGNsYWltcyB0aGVpciBmaWxlcy5cbiAgICpcbiAgICogRWFjaCBnZXRzIHNwZWxsY2hlY2sgYXBwZW5kZWQgYW5kIGl0cyBmaWxlcyByZW1vdmVkIGZyb20gdGhlIHNwZWxsY2hlY2stb25seSBrZXksIGV4YWN0bHkgbGlrZSB0aGUgc2hhcmVkXG4gICAqIHdyaXRlcnMuIEEgcGF0dGVybiBtdXN0IG5vdCBjb250YWluIGAvYCwgYW5kIG11c3Qgbm90IHJlcGVhdCBhIHNoYXJlZCB3cml0ZXIgcGF0dGVybi4gRWFjaCBjb21tYW5kIGlzIGFcbiAgICogcHJlZml4IHRoZSBzdGFnZWQgcGF0aHMgYXJlIGFwcGVuZGVkIHRvLCBpbiBiYXRjaGVzLCBsaWtlIHRoZSBzaGFyZWQgb25lcyAoYG5wbSBydW4gbGludDpmaXggLS1gKS5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxXcml0ZXJUYXNrcz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj47XG59XG5cbi8qKlxuICogQSBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIHdob3NlIGV2ZXJ5IGtleSBpcyBhIHtAbGluayBOYW5vU3RhZ2VkVGFza30uXG4gKi9cbmV4cG9ydCB0eXBlIE5hbm9TdGFnZWRDb25maWcgPSBSZWNvcmQ8c3RyaW5nLCBOYW5vU3RhZ2VkVGFzaz47XG5cbi8qKlxuICogQSBmdW5jdGlvbi12YWx1ZWQgbmFuby1zdGFnZWQgdGFzazogaXQgcmVjZWl2ZXMgdGhlIHN0YWdlZCBmaWxlcyBpdHMgcGF0dGVybiBjbGFpbXMgYW5kIHJldHVybnMgdGhlXG4gKiBjb21tYW5kcyB0byBydW4gb3ZlciB0aGVtLCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IHR5cGUgTmFub1N0YWdlZFRhc2sgPSAoY29udGV4dDogTmFub1N0YWdlZFRhc2tDb250ZXh0KSA9PiBzdHJpbmdbXTtcblxuLyoqXG4gKiBXaGF0IG5hbm8tc3RhZ2VkIHBhc3NlcyB0byBhIGZ1bmN0aW9uLXZhbHVlZCB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hbm9TdGFnZWRUYXNrQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aHMgb2YgdGhlIHN0YWdlZCBmaWxlcyB0aGUgdGFzaydzIHBhdHRlcm4gY2xhaW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZW5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgYDxtYW5hZ2VyPiBydW5gIHByZWZpeCBldmVyeSB0YXNrIGJlbG93IGlzIGJ1aWx0IG9uLCByZXNvbHZlZCBvbmNlIGZvciB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBEZXRlY3Rpb24gcHJvYmVzIGZvciBhIGxvY2tmaWxlIGJlc2lkZSBgcGFja2FnZS5qc29uYCwgc28gaXQgaXMgYSBoYW5kZnVsIG9mIGBleGlzdHNTeW5jYCBjYWxscyBhbmRcbiAqIG5vdGhpbmcgbW9yZSBcdTIwMTQgbm8gYC5lbnZgIHJlYWQgYW5kIG5vIGBwcm9jZXNzLmV4aXRgLCB3aGljaCBpcyB3aGF0IGxldHMgaXQgc2l0IGF0IG1vZHVsZSBzY29wZS5cbiAqL1xuY29uc3QgUEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EID0gZ2V0UGFja2FnZU1hbmFnZXJSdW5Db21tYW5kKCkuam9pbignICcpO1xuXG5jb25zdCBTUEVMTENIRUNLX1NDUklQVF9OQU1FID0gJ3NwZWxsY2hlY2snO1xuXG5jb25zdCBTUEVMTENIRUNLX0NPTU1BTkQgPSB0b1NjcmlwdENvbW1hbmQoU1BFTExDSEVDS19TQ1JJUFRfTkFNRSk7XG5cbi8qKlxuICogUm9vbSBsZWZ0IGluIGV2ZXJ5IGJhdGNoIGZvciB0aGUgcmVzb2x2ZWQgcGF0aCBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyJ3MgZXhlY3V0YWJsZS5cbiAqXG4gKiBuYW5vLXN0YWdlZCBydW5zIGBucG1gIGFzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBucG0uY21kYCAoYDxjb21zcGVjPiAvRCAvUyAvQyBcIjxwYXRoPlwiIFwiPGFyZz5cIiBcdTIwMjZgKSwgd2hpY2hcbiAqIHRoZSBiYXRjaCBjYW5ub3Qgc2VlLCBzbyBhIGZ1bGwgV2luZG93cyBgTUFYX1BBVEhgIGlzIHNldCBhc2lkZSBmb3IgaXQuXG4gKi9cbmNvbnN0IEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFID0gMjYwO1xuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXJzIG5hbm8tc3RhZ2VkJ3MgY29tbWFuZCB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IGluc2lkZSBhbiBhcmd1bWVudC5cbiAqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCB0YXNrIHJldHVybnMgaXRzIGNvbW1hbmRzIGFzIFNUUklOR1MsIGFuZCBuYW5vLXN0YWdlZCBzcGxpdHMgZWFjaCBvbmUgd2l0aFxuICogYHN0cmluZ0FyZ3ZUb0FycmF5YCwgd2hpY2ggZW1pdHMgYSBxdW90ZWQgdG9rZW4gdHdpY2UgKG9uY2UgYmFyZSwgb25jZSB3aXRoIGl0cyBxdW90ZXMpIGFuZCBoYXMgbm8gZXNjYXBlLlxuICogU28gYSBwYXRoIGhvbGRpbmcgd2hpdGVzcGFjZSBvciBhIHF1b3RlIGNhbm5vdCBiZSBwYXNzZWQgYXMgaXRzZWxmLlxuICovXG5jb25zdCBUT0tFTklaRVJfVU5TQUZFX0NIQVJBQ1RFUlNfUkVHX0VYUCA9IC9bXFxzXCInXS9nO1xuXG4vKipcbiAqIFRoZSBucG0gc2NyaXB0cyB0aGF0IFJFV1JJVEUgYSBzdGFnZWQgZmlsZSwgaW4gdGhlIG9yZGVyIHRoZXkgcnVuLCBrZXllZCBieSB0aGUgbmFuby1zdGFnZWQgcGF0dGVybiB0aGF0XG4gKiBjbGFpbXMgaXQuXG4gKlxuICogYGxpbnQ6Zml4YCBhbmQgYGZvcm1hdGAgYm90aCByZXdyaXRlIHRoZSBmaWxlLCBzbyB0aGV5IGhhdmUgdG8gc2hhcmUgb25lIGtleTogbmFuby1zdGFnZWQgcnVucyBpdHNcbiAqIHBlci1wYXR0ZXJuIGdyb3VwcyB1bmRlciBgUHJvbWlzZS5hbGxgIChgcnVuKClgIGluIGBuYW5vLXN0YWdlZC9saWIvY21kLXJ1bm5lci5qc2ApLCBhbmQgc2VxdWVuY2VzIG9ubHlcbiAqIHRoZSBjb21tYW5kcyBJTlNJREUgYSBzaW5nbGUga2V5J3MgYXJyYXkgKGBydW5UYXNrKClgLCBhIGBmb3IgLi4uIG9mIGF3YWl0YCkuIFNwbGl0IGFjcm9zcyB0d28ga2V5cyB0aGV5XG4gKiByYWNlLCB3aGljaGV2ZXIgZmluaXNoZXMgbGFzdCB3aW5zLCBhbmQgdGhlIGNvbW1pdCBzdGFnZXMgYnl0ZXMgdGhhdCBuZWl0aGVyIHRvb2wgd291bGQgaGF2ZSBwcm9kdWNlZCBvblxuICogaXRzIG93bi5cbiAqXG4gKiBTbyBkbyBOT1QgZXhwcmVzcyBhIGRpcmVjdG9yeSBleGNsdXNpb24gYnkgZ2l2aW5nIG9uZSBvZiB0aGVzZSB0d28gaXRzIG93biBuZWdhdGVkIGtleSAtLSB0aGF0IHNpbGVudGx5XG4gKiB0YWtlcyB0aGUgb3JkZXJpbmcgYXdheS4gQW4gZXhjbHVzaW9uIGJlbG9uZ3MgaW4gdGhlIGV4Y2x1ZGVkIHRvb2wncyBvd24gY29uZmlnLCB3aGVyZSBFU0xpbnQnc1xuICogYGdsb2JhbElnbm9yZXNgIGFscmVhZHkgcHV0cyBpdDogYSBwYXRoIEVTTGludCBpZ25vcmVzIGlzIHJlcG9ydGVkIGFzIGEgd2FybmluZyBhbmQgZXhpdHMgMCB3aGVuIGl0IGlzXG4gKiBwYXNzZWQgZXhwbGljaXRseSwgc28gaXQgY29zdHMgYSBjb25zb2xlIGxpbmUgcmF0aGVyIHRoYW4gYSBmYWlsZWQgY29tbWl0IGFuZCBuZWVkcyBubyBrZXkgaGVyZS5cbiAqL1xuY29uc3QgV1JJVEVSX1NDUklQVF9OQU1FUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+PiA9IHtcbiAgJyoue3RzLHRzeCxtdHN9JzogWydsaW50OmZpeCcsICdmb3JtYXQnXSxcbiAgJyoubWQnOiBbJ2xpbnQ6bWQ6Zml4J11cbn07XG5cbmNvbnN0IFdSSVRFUl9UQVNLUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+PiA9IHRvV3JpdGVyVGFza3MoKCkgPT4gdHJ1ZSk7XG5cbi8qKlxuICogTmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0aGF0IHJ1bnMgZmlsZS1iYXNlZCBsaW50LCBmb3JtYXQsIGFuZCBzcGVsbGNoZWNrIG9uIHN0YWdlZCBmaWxlcy5cbiAqXG4gKiBPbmx5IGluY2x1ZGVzIHRvb2xzIHRoYXQgY2FuIG9wZXJhdGUgb24gaW5kaXZpZHVhbCBmaWxlcy4gV2hvbGUtcHJvamVjdCBjaGVja3NcbiAqIChUeXBlU2NyaXB0IGNvbXBpbGF0aW9uLCB1bml0IHRlc3RzKSBhcmUgbGVmdCB0byBDSS5cbiAqXG4gKiBDb21tYW5kcyBydW4gdGhyb3VnaCB0aGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZSBcdTIwMTQgYG5wbSBydW4gLi4uIC0tYCwgYGJ1biBydW4gLi4uIC0tYCwgYW5kXG4gKiBzbyBvbiBcdTIwMTQgc28gbmFuby1zdGFnZWQgZmlsZSBwYXRocyBhcmUgZm9yd2FyZGVkIGFzIENMSSBhcmd1bWVudHMsIGJhdGNoZWQgdG8gZml0IHRoZSBjb21tYW5kIGxpbmUgKHNlZVxuICogYHRvQmF0Y2hlZFRhc2tgKS5cbiAqXG4gKiBTcGVsbGNoZWNrIGlzIHBhcnRpdGlvbmVkIGFjcm9zcyB0aGUga2V5cyByYXRoZXIgdGhhbiBnaXZlbiBhIGNhdGNoLWFsbCBgJyonYCBrZXkgKHNlZVxuICogYHBhcnRpdGlvblNwZWxsY2hlY2tgKS4gQSByZXBvIGFkZGluZyBhIGZpbGUtcmV3cml0aW5nIHRhc2sgb2YgaXRzIG93biBwYXNzZXMgaXQgdG9cbiAqIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfSBhcyBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCByYXRoZXIgdGhhbiBzcHJlYWRpbmcgdGhpcyBvYmplY3QgYW5kIGFkZGluZyBhIGtleSxcbiAqIHdoaWNoIHdvdWxkIHJlaW50cm9kdWNlIHRoZSBvdmVybGFwIGZvciB0aGF0IGtleSdzIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTmFub1N0YWdlZENvbmZpZyA9IHBhcnRpdGlvblNwZWxsY2hlY2soV1JJVEVSX1RBU0tTLCB0cnVlKTtcblxuY29uc3QgTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFID0gJ05BTk9fU1RBR0VEJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0byB1c2UsIGhvbm9yaW5nIGEgcGVyLWRldmVsb3BlciBvcHQtb3V0LlxuICpcbiAqIExvYWRzIGEgZ2l0aWdub3JlZCBgLmVudmAgaWYgcHJlc2VudCwgdGhlbiBcdTIwMTQgd2hlbiBgTkFOT19TVEFHRURgIGlzIHNldCB0byBhbiBvZmYgdmFsdWUgKGAwYCwgYGZhbHNlYCxcbiAqIGBvZmZgLCBvciBgbm9gKSBcdTIwMTQgcHJpbnRzIGEgbm90aWNlIGFuZCBleGl0cyB0aGUgcHJvY2VzcyBzdWNjZXNzZnVsbHkgc28gdGhlIHByZS1jb21taXQgY2hlY2tzIGFyZVxuICogc2tpcHBlZC4gVGhpcyBtaXJyb3JzIGh1c2t5J3Mgb3duIGBIVVNLWT0wYCBzd2l0Y2gsIGJ1dCBzY29wZWQgdG8gdGhlIG5hbm8tc3RhZ2VkIHN0ZXAgKHNvIHRoZVxuICogY29tbWl0LW1zZyBob29rIHN0aWxsIHJ1bnMpLiBPdGhlcndpc2UgaXQgcmV0dXJucyB7QGxpbmsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZ30sIG9yIFx1MjAxNCB3aGVuXG4gKiBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgZ2l2ZW4gXHUyMDE0IHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gcmUtcGFydGl0aW9uZWQgd2l0aCB0aG9zZSB3cml0ZXJzIGFkZGVkLlxuICpcbiAqIEEgc2hhcmVkIHRhc2sgd2hvc2UgbnBtIHNjcmlwdCB0aGUgcHJvamVjdCdzIGBwYWNrYWdlLmpzb25gIGRvZXMgbm90IGRlY2xhcmUgaXMgbGVmdCBvdXQsIHNvIGEgcHJvamVjdFxuICogd2l0aG91dCwgc2F5LCBtYXJrZG93bmxpbnQgZG9lcyBub3QgZmFpbCBpdHMgZmlyc3QgY29tbWl0IHRoYXQgc3RhZ2VzIGEgYC5tZGAgZmlsZSBvbiBhIG1pc3Npbmcgc2NyaXB0LiBBXG4gKiB3cml0ZXIgcGF0dGVybiBsZWZ0IHdpdGggbm8gd3JpdGVyIGlzIGRyb3BwZWQsIGFuZCBzcGVsbGNoZWNrIHJ1bnMgb25seSB3aGVuIGBzcGVsbGNoZWNrYCBpcyBkZWNsYXJlZCwgaW5cbiAqIHdoaWNoIGNhc2UgaXRzIGZpbGVzIGZhbGwgdG8gdGhlIHNwZWxsY2hlY2stb25seSBrZXkuIFRoZSBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgdGhlIGNhbGxlcidzIG93biBhbmRcbiAqIGFyZSBrZXB0IGFzIGdpdmVuLlxuICpcbiAqIGBOQU5PX1NUQUdFRGAgaXMgbm90IGFuIG5wbSBzY3JpcHQsIHNvIGl0IGNhcnJpZXMgaXRzIG93biBzd2l0Y2ggcmF0aGVyIHRoYW4gdGhlIHNjcmlwdC1uYW1lLWRlcml2ZWQgb25lXG4gKiBldmVyeSBucG0gc2NyaXB0IGdldHMgXHUyMDE0IGJ1dCBib3RoIHNoYXJlIHRoZSBzYW1lIG5vdGlvbiBvZiBhbiBvZmYgdmFsdWUsIHZpYSB7QGxpbmsgaXNFbnZWYXJpYWJsZU9mZn0uXG4gKlxuICogVGhpcyBpcyBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIG1vZHVsZS1sZXZlbCBjb2RlIHNvIGltcG9ydGluZyB0aGUgcGFja2FnZSBiYXJyZWwgbmV2ZXIgdHJpZ2dlcnMgdGhlXG4gKiBgLmVudmAgcmVhZCBvciB0aGUgcHJvY2VzcyBleGl0OyBjYWxsIGl0IGZyb20gdGhlIHRoaW4gYHNjcmlwdHMvbmFuby1zdGFnZWQtY29uZmlnLnRzYCBlbnRyeS4gUmVzb2x2aW5nIHRoZVxuICogcGFja2FnZSBtYW5hZ2VyIGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBkb2VzIHJ1biBhdCBtb2R1bGUgc2NvcGUsIGFuZCBpdCBkb2VzIG5laXRoZXIgb2YgdGhvc2UgdHdvXG4gKiB0aGluZ3MgXHUyMDE0IGl0IG9ubHkgcHJvYmVzIGZvciBhIGxvY2tmaWxlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbmFsIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgbmFuby1zdGFnZWQgdGFzayBjb25maWd1cmF0aW9uLiBEb2VzIG5vdCByZXR1cm4gd2hlbiB0aGUgb3B0LW91dCBpcyBhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW5vU3RhZ2VkQ29uZmlnKG9wdGlvbnM/OiBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyk6IE5hbm9TdGFnZWRDb25maWcge1xuICBsb2FkRW52RmlsZUlmRXhpc3RzKCk7XG5cbiAgaWYgKGlzRW52VmFyaWFibGVPZmYoTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFKSkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBuYW5vLXN0YWdlZDogc2tpcHBlZCAoJHtOQU5PX1NUQUdFRF9FTlZfVkFSSUFCTEV9IGlzIG9mZikuXFxuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgY29uc3Qgc2NyaXB0TmFtZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHJlYWRQYWNrYWdlSnNvblN5bmMoKS5zY3JpcHRzID8/IHt9KSk7XG4gIGNvbnN0IGhhc0FsbFNoYXJlZFNjcmlwdHMgPSBbU1BFTExDSEVDS19TQ1JJUFRfTkFNRSwgLi4uT2JqZWN0LnZhbHVlcyhXUklURVJfU0NSSVBUX05BTUVTKS5mbGF0KCldXG4gICAgLmV2ZXJ5KChzY3JpcHROYW1lKSA9PiBzY3JpcHROYW1lcy5oYXMoc2NyaXB0TmFtZSkpO1xuICBjb25zdCBhZGRpdGlvbmFsV3JpdGVyVGFza3MgPSBvcHRpb25zPy5hZGRpdGlvbmFsV3JpdGVyVGFza3MgPz8ge307XG4gIGlmIChoYXNBbGxTaGFyZWRTY3JpcHRzICYmIE9iamVjdC5rZXlzKGFkZGl0aW9uYWxXcml0ZXJUYXNrcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9ic2lkaWFuRGV2VXRpbHNDb25maWc7XG4gIH1cblxuICBjb25zdCB3cml0ZXJUYXNrcyA9IHRvV3JpdGVyVGFza3MoKHNjcmlwdE5hbWUpID0+IHNjcmlwdE5hbWVzLmhhcyhzY3JpcHROYW1lKSk7XG4gIGNvbnN0IGR1cGxpY2F0ZVBhdHRlcm4gPSBPYmplY3Qua2V5cyhhZGRpdGlvbmFsV3JpdGVyVGFza3MpLmZpbmQoKHBhdHRlcm4pID0+IE9iamVjdC5oYXNPd24od3JpdGVyVGFza3MsIHBhdHRlcm4pKTtcbiAgaWYgKGR1cGxpY2F0ZVBhdHRlcm4gIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbmFuby1zdGFnZWQgd3JpdGVyIHBhdHRlcm4gJyR7ZHVwbGljYXRlUGF0dGVybn0nIGlzIGFscmVhZHkgYSBzaGFyZWQgd3JpdGVyIHBhdHRlcm4uYCk7XG4gIH1cblxuICByZXR1cm4gcGFydGl0aW9uU3BlbGxjaGVjayh7IC4uLndyaXRlclRhc2tzLCAuLi5hZGRpdGlvbmFsV3JpdGVyVGFza3MgfSwgc2NyaXB0TmFtZXMuaGFzKFNQRUxMQ0hFQ0tfU0NSSVBUX05BTUUpKTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgY29tbWFuZCBhcmd1bWVudHMgaW50byBiYXRjaGVzIHRoYXQgZWFjaCBmaXQgb25lIGNvbW1hbmQgbGluZSBhZnRlciBhIGdpdmVuIHByZWZpeC5cbiAqXG4gKiBFYWNoIGFyZ3VtZW50IGlzIGNvc3RlZCBhcyBuYW5vLXN0YWdlZCBwYXNzZXMgaXQgb24gV2luZG93cyBcdTIwMTQgcXVvdGVkLCB0aGVuIGBeYC1lc2NhcGVkIGJ5IGBjbWQuZXhlYCdzXG4gKiBydWxlcyBcdTIwMTQgdGhyb3VnaCB7QGxpbmsgZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGh9LCBhbmQgdGhlIGJ1ZGdldCBpcyB7QGxpbmsgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RofSxcbiAqIHdoaWNoIGFscmVhZHkgaG9sZHMgYmFjayB0aGUgcmVzZXJ2ZSBmb3IgdGhlIGBucG1gIFx1MjE5MiBgY21kLmV4ZWAgXHUyMTkyIGAuYmluYCBzaGltIGNoYWluIHJlLWV4cGFuZGluZyB0aGVcbiAqIGFyZ3VtZW50cy4gQW4gYXJndW1lbnQgdG9vIGxvbmcgZm9yIGFueSBiYXRjaCBzdGlsbCBnZXRzIGEgYmF0Y2ggb2YgaXRzIG93bjogaXQgZmFpbHMgbG91ZGx5IHRoZXJlLCB3aGljaFxuICogZHJvcHBpbmcgaXQgd291bGQgbm90LlxuICpcbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgY29tbWFuZCB0aGUgYXJndW1lbnRzIGFyZSBhcHBlbmRlZCB0by5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0byBzcGxpdC5cbiAqIEByZXR1cm5zIFRoZSBiYXRjaGVzLCBpbiBvcmRlciwgdG9nZXRoZXIgaG9sZGluZyBldmVyeSBhcmd1bWVudCBvbmNlLlxuICovXG5mdW5jdGlvbiBiYXRjaENvbW1hbmRBcmd1bWVudHMocHJlZml4OiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGVtcHR5TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoJycpO1xuICBjb25zdCBidWRnZXQgPSBnZXRNYXhCYXRjaENvbW1hbmRMZW5ndGgoKSAtIEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFIC0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgocHJlZml4KTtcbiAgY29uc3QgYmF0Y2hlczogc3RyaW5nW11bXSA9IFtdO1xuICBsZXQgYmF0Y2g6IHN0cmluZ1tdID0gW107XG4gIGxldCBiYXRjaExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCBjb21tYW5kQXJndW1lbnQgb2YgY29tbWFuZEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3VtZW50TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoYCBcIiR7Y29tbWFuZEFyZ3VtZW50fVwiYCkgLSBlbXB0eUxlbmd0aDtcbiAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCAmJiBiYXRjaExlbmd0aCArIGFyZ3VtZW50TGVuZ3RoID4gYnVkZ2V0KSB7XG4gICAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICAgICAgYmF0Y2ggPSBbXTtcbiAgICAgIGJhdGNoTGVuZ3RoID0gMDtcbiAgICB9XG4gICAgYmF0Y2gucHVzaChjb21tYW5kQXJndW1lbnQpO1xuICAgIGJhdGNoTGVuZ3RoICs9IGFyZ3VtZW50TGVuZ3RoO1xuICB9XG5cbiAgaWYgKGJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICB9XG5cbiAgcmV0dXJuIGJhdGNoZXM7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiBpbiB3aGljaCBzcGVsbGNoZWNrIG5ldmVyIHJlYWRzIGEgZmlsZSB3aGlsZSBhbm90aGVyIHRhc2sgcmV3cml0ZXMgaXQuXG4gKlxuICogVGhlIHNhbWUgYFByb21pc2UuYWxsYCB0aGF0IGZvcmNlcyB0d28gd3JpdGVycyBpbnRvIG9uZSBrZXkgbWFrZXMgYSBjYXRjaC1hbGwgYCcqJ2Agc3BlbGxjaGVjayBrZXkgcnVuXG4gKiBDT05DVVJSRU5UTFkgd2l0aCBldmVyeSB3cml0ZXIga2V5LCBzbyBjc3BlbGwgd291bGQgcmVhZCBhIGZpbGUgdGhhdCBFU0xpbnQgb3IgZHByaW50IGlzIHJld3JpdGluZyBpblxuICogcGxhY2UgLS0gYSBzcHVyaW91cyBmaW5kaW5nIG9uIGEgaGFsZi13cml0dGVuIGZpbGUsIG9yIGEgcGFzcyBvdmVyIGNvbnRlbnQgdGhhdCBpcyBub3Qgd2hhdCBnZXRzXG4gKiBjb21taXR0ZWQuIFNvIHRoZSBzdGFnZWQgZmlsZXMgYXJlIFBBUlRJVElPTkVEIGluc3RlYWQ6XG4gKlxuICogLSBldmVyeSB3cml0ZXIga2V5IGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhcyBpdHMgTEFTVCBjb21tYW5kLCBzbyBpdCByZWFkcyB0aGF0IGtleSdzIGZpbGVzIGFmdGVyIHRoZXlcbiAqICAgaGF2ZSBiZWVuIHJld3JpdHRlbjtcbiAqIC0gb25lIGNvbXBsZW1lbnQga2V5IHNwZWxsY2hlY2tzIGV4YWN0bHkgdGhlIGZpbGVzIG5vIHdyaXRlciBrZXkgY2xhaW1zLlxuICpcbiAqIFRoZSBjb21wbGVtZW50IGlzIHdyaXR0ZW4gaW4gbmFuby1zdGFnZWQncyBvd24gZ2xvYiBkaWFsZWN0LCB3aGljaCBjb21waWxlcyBgISguLi4pYCB0byBhIGxvb2thaGVhZCB0aGF0XG4gKiBpcyBOT1QgYW5jaG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aDogYCEoKi5tZCkqYCB3b3VsZCBleGNsdWRlIGBub3Rlcy5tZC5iYWtgIHRvby4gQSBuZXN0ZWQgYCEoPylgXG4gKiBjb21waWxlcyB0byBgKD8hLilgLCB3aGljaCBJUyBhbiBlbmQgYW5jaG9yLCBzbyBlYWNoIGFsdGVybmF0aXZlIGlzIHN1ZmZpeGVkIHdpdGggaXQuIEEgd3JpdGVyIHBhdHRlcm5cbiAqIGNvbnRhaW5pbmcgYC9gIHdvdWxkIHN3aXRjaCBuYW5vLXN0YWdlZCBpbnRvIGdsb2JzdGFyIG1vZGUsIHdoZXJlIGAqYCBzdG9wcyBjcm9zc2luZyBkaXJlY3RvcmllcyBhbmQgdGhlXG4gKiBjb25zdHJ1Y3Rpb24gbm8gbG9uZ2VyIGhvbGRzIC0tIGhlbmNlIHRoZSB0aHJvdy4gVGhlIHVuaXQgdGVzdCBwaW5zIHRoZSBwYXJ0aXRpb24gYWdhaW5zdCB0aGUgaW5zdGFsbGVkXG4gKiBuYW5vLXN0YWdlZCBjb21waWxlciwgc28gYSByZWxlYXNlIHRoYXQgY2hhbmdlcyBpdHMgZGlhbGVjdCBmYWlscyB0aGVyZSByYXRoZXIgdGhhbiBpbiBhIGNvbW1pdC5cbiAqXG4gKiBXaXRob3V0IHNwZWxsY2hlY2sgdGhlcmUgaXMgbm90aGluZyB0byBwYXJ0aXRpb246IGVhY2ggd3JpdGVyIGtleSBydW5zIGl0cyBvd24gY29tbWFuZHMsIGFuZCBubyBjb21wbGVtZW50XG4gKiBrZXkgaXMgZW1pdHRlZC5cbiAqXG4gKiBAcGFyYW0gd3JpdGVyVGFza3MgLSBUaGUgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICogQHBhcmFtIHNob3VsZFNwZWxsY2hlY2sgLSBXaGV0aGVyIHRoZSBwcm9qZWN0IGhhcyBhIGBzcGVsbGNoZWNrYCBzY3JpcHQgdG8gcnVuLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIHdpdGggdGhlIHNwZWxsY2hlY2sgc3RlcCBwYXJ0aXRpb25lZCBhY3Jvc3MgdGhlIGtleXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvblNwZWxsY2hlY2sod3JpdGVyVGFza3M6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4sIHNob3VsZFNwZWxsY2hlY2s6IGJvb2xlYW4pOiBOYW5vU3RhZ2VkQ29uZmlnIHtcbiAgaWYgKCFzaG91bGRTcGVsbGNoZWNrKSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh3cml0ZXJUYXNrcykubWFwKChbcGF0dGVybiwgY29tbWFuZHNdKSA9PiBbcGF0dGVybiwgdG9CYXRjaGVkVGFzayhjb21tYW5kcyldKSk7XG4gIH1cblxuICBjb25zdCBwYXR0ZXJucyA9IE9iamVjdC5rZXlzKHdyaXRlclRhc2tzKTtcbiAgY29uc3QgcGF0dGVybldpdGhTbGFzaCA9IHBhdHRlcm5zLmZpbmQoKHBhdHRlcm4pID0+IHBhdHRlcm4uaW5jbHVkZXMoJy8nKSk7XG4gIGlmIChwYXR0ZXJuV2l0aFNsYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5hbm8tc3RhZ2VkIHdyaXRlciBwYXR0ZXJuICcke3BhdHRlcm5XaXRoU2xhc2h9JyBjb250YWlucyAnLycsIHdoaWNoIHRoZSBzcGVsbGNoZWNrIHBhcnRpdGlvbiBjYW5ub3QgZXhwcmVzcy5gKTtcbiAgfVxuXG4gIC8vIGAhKCkqYCB3b3VsZCBjb21waWxlIHRvIGEgbG9va2FoZWFkIHRoYXQgcmVqZWN0cyBldmVyeSBwYXRoLCBzbyB3aXRoIG5vIHdyaXRlciB0aGUgY29tcGxlbWVudCBpcyBldmVyeXRoaW5nLlxuICBjb25zdCBjb21wbGVtZW50UGF0dGVybiA9IHBhdHRlcm5zLmxlbmd0aCA9PT0gMCA/ICcqJyA6IGAhKCR7cGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBgJHtwYXR0ZXJufSEoPylgKS5qb2luKCd8Jyl9KSpgO1xuICBjb25zdCBjb25maWc6IE5hbm9TdGFnZWRDb25maWcgPSB7XG4gICAgW2NvbXBsZW1lbnRQYXR0ZXJuXTogdG9CYXRjaGVkVGFzayhbU1BFTExDSEVDS19DT01NQU5EXSlcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBjb21tYW5kc10gb2YgT2JqZWN0LmVudHJpZXMod3JpdGVyVGFza3MpKSB7XG4gICAgY29uZmlnW3BhdHRlcm5dID0gdG9CYXRjaGVkVGFzayhbLi4uY29tbWFuZHMsIFNQRUxMQ0hFQ0tfQ09NTUFORF0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB0YXNrIHRoYXQgcnVucyBlYWNoIGNvbW1hbmQgb3ZlciBldmVyeSBzdGFnZWQgZmlsZSBpdCByZWNlaXZlcywgaW4gYXMgbWFueSBiYXRjaGVzIGFzIHRoZSBjb21tYW5kXG4gKiBsaW5lIG5lZWRzLlxuICpcbiAqIG5hbm8tc3RhZ2VkIGFwcGVuZHMgYSBzdHJpbmcgdGFzaydzIGZpbGVzIHRvIE9ORSBjb21tYW5kLCBzbyBhIGNvbW1pdCBzdGFnaW5nIGEgZmV3IGh1bmRyZWQgZmlsZXMgcmFuXG4gKiBgbnBtIHJ1biBsaW50OmZpeCAtLSA8ZXZlcnkgcGF0aD5gIGFuZCBmYWlsZWQgb24gV2luZG93cyB3aXRoIGBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nLmAsIHJlZnVzaW5nXG4gKiBleGFjdGx5IHRoZSB3aG9sZS1yZXBvIGNvbW1pdHMgdGhhdCBtb3N0IG5lZWQgdGhlIGhvb2suIEEgZnVuY3Rpb24tdmFsdWVkIHRhc2sgYnVpbGRzIGl0cyBvd24gY29tbWFuZHNcbiAqIGluc3RlYWQsIGFuZCB0aGVzZSBhcmUgYmF0Y2hlZCBhZ2FpbnN0IHRoZSBzYW1lIGJ1ZGdldCBgZXhlYygpYCB1c2VzIChzZWUgYGJhdGNoQ29tbWFuZEFyZ3VtZW50c2ApLlxuICpcbiAqIFRoZSBjb21tYW5kcyBrZWVwIHRoZWlyIG9yZGVyOiBldmVyeSBiYXRjaCBvZiB0aGUgZmlyc3QgY29tbWFuZCBydW5zIGJlZm9yZSBhbnkgYmF0Y2ggb2YgdGhlIHNlY29uZCxcbiAqIGJlY2F1c2UgbmFuby1zdGFnZWQgcnVucyBvbmUga2V5J3MgY29tbWFuZHMgb25lIGFmdGVyIGFub3RoZXIsIHNvIGEgd3JpdGVyIHN0aWxsIGZpbmlzaGVzIGJlZm9yZSB0aGUgbmV4dFxuICogd3JpdGVyLCBhbmQgc3BlbGxjaGVjayBzdGlsbCByZWFkcyB0aGUgcmV3cml0dGVuIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBjb21tYW5kIHByZWZpeGVzLCBpbiB0aGUgb3JkZXIgdGhleSBydW4uXG4gKiBAcmV0dXJucyBUaGUgdGFzay5cbiAqL1xuZnVuY3Rpb24gdG9CYXRjaGVkVGFzayhjb21tYW5kczogcmVhZG9ubHkgc3RyaW5nW10pOiBOYW5vU3RhZ2VkVGFzayB7XG4gIHJldHVybiAoeyBmaWxlbmFtZXMgfSkgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRBcmd1bWVudHMgPSBmaWxlbmFtZXMubWFwKChmaWxlbmFtZSkgPT4gdG9Db21tYW5kQXJndW1lbnQoZmlsZW5hbWUpKTtcbiAgICByZXR1cm4gY29tbWFuZHMuZmxhdE1hcCgoY29tbWFuZCkgPT4gYmF0Y2hDb21tYW5kQXJndW1lbnRzKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMpLm1hcCgoYmF0Y2gpID0+IGAke2NvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWApKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUdXJucyBhIHN0YWdlZCBmaWxlJ3MgYWJzb2x1dGUgcGF0aCBpbnRvIHRoZSBhcmd1bWVudCBhIGJhdGNoZWQgdGFzayBwYXNzZXMgZm9yIGl0LlxuICpcbiAqIFRoZSBwYXRoIGlzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB3aGVyZSBuYW5vLXN0YWdlZCBhbmQgdGhlIHRhc2sgYm90aCBydW4sIHdoaWNoIHJvdWdobHlcbiAqIGhhbHZlcyBpdHMgbGVuZ3RoIGFuZCBzbyB0aGUgbnVtYmVyIG9mIGJhdGNoZXM7IGEgcGF0aCBvdXRzaWRlIGl0IHN0YXlzIGFic29sdXRlLiBBIHJlbGF0aXZlIHBhdGggc3RhcnRpbmdcbiAqIHdpdGggYC1gIGdldHMgYC4vYCwgc28gbm8gdG9vbCByZWFkcyBpdCBhcyBhbiBvcHRpb24uXG4gKlxuICogV2hpdGVzcGFjZSBhbmQgcXVvdGVzIGJlY29tZSBgP2AsIGJlY2F1c2UgbmFuby1zdGFnZWQncyB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IHRoZW0gKHNlZVxuICoge0BsaW5rIFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQfSkuIEV2ZXJ5IHRvb2wgdGhlIHRhc2tzIHJ1biAoRVNMaW50LCBkcHJpbnQsIGNzcGVsbCxcbiAqIG1hcmtkb3dubGludC1jbGkyKSB0YWtlcyBpdHMgcGF0aHMgYXMgZ2xvYnMsIGFuZCBgP2AgbWF0Y2hlcyBleGFjdGx5IHRoZSBvbmUgY2hhcmFjdGVyIGl0IHJlcGxhY2VkLCBzbyB0aGVcbiAqIGZpbGUgaXMgc3RpbGwgZm91bmQ7IGEgc2libGluZyBkaWZmZXJpbmcgb25seSBpbiB0aGF0IGNoYXJhY3RlciB3b3VsZCBtYXRjaCB0b28sIHdoaWNoIGNvc3RzIGEgbGludCBvZiBhblxuICogZXh0cmEgZmlsZSwgbm90IGEgbWlzc2VkIG9uZS5cbiAqXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc3RhZ2VkIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZEFyZ3VtZW50KGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlbmFtZSk7XG4gIGxldCBjb21tYW5kQXJndW1lbnQgPSAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJykgfHwgaXNBYnNvbHV0ZShyZWxhdGl2ZVBhdGgpID8gZmlsZW5hbWUgOiByZWxhdGl2ZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBpZiAoY29tbWFuZEFyZ3VtZW50LnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbW1hbmRBcmd1bWVudCA9IGAuLyR7Y29tbWFuZEFyZ3VtZW50fWA7XG4gIH1cbiAgcmV0dXJuIGNvbW1hbmRBcmd1bWVudC5yZXBsYWNlQWxsKFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQLCAnPycpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZCBwcmVmaXggdGhhdCBydW5zIGFuIG5wbSBzY3JpcHQgb3ZlciB0aGUgcGF0aHMgYXBwZW5kZWQgdG8gaXQuXG4gKlxuICogQHBhcmFtIHNjcmlwdE5hbWUgLSBUaGUgc2NyaXB0IG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBwcmVmaXgsIHN1Y2ggYXMgYG5wbSBydW4gbGludDpmaXggLS1gLlxuICovXG5mdW5jdGlvbiB0b1NjcmlwdENvbW1hbmQoc2NyaXB0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gJHtzY3JpcHROYW1lfSAtLWA7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzaGFyZWQgd3JpdGVyIHRhc2tzIGZyb20ge0BsaW5rIFdSSVRFUl9TQ1JJUFRfTkFNRVN9LCBrZWVwaW5nIG9ubHkgdGhlIHNjcmlwdHMgYSBmaWx0ZXIgYWNjZXB0c1xuICogYW5kIGRyb3BwaW5nIGEgcGF0dGVybiBsZWZ0IHdpdGggbm9uZS5cbiAqXG4gKiBAcGFyYW0gc2hvdWxkSW5jbHVkZVNjcmlwdCAtIFdoZXRoZXIgdG8gcnVuIGEgZ2l2ZW4gc2NyaXB0LlxuICogQHJldHVybnMgVGhlIHdyaXRlciB0YXNrcywga2V5ZWQgYnkgdGhlIHBhdHRlcm4gdGhhdCBjbGFpbXMgdGhlaXIgZmlsZXMuXG4gKi9cbmZ1bmN0aW9uIHRvV3JpdGVyVGFza3Moc2hvdWxkSW5jbHVkZVNjcmlwdDogKHNjcmlwdE5hbWU6IHN0cmluZykgPT4gYm9vbGVhbik6IFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPiB7XG4gIGNvbnN0IHdyaXRlclRhc2tzOiBSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4gPSB7fTtcbiAgZm9yIChjb25zdCBbcGF0dGVybiwgc2NyaXB0TmFtZXNdIG9mIE9iamVjdC5lbnRyaWVzKFdSSVRFUl9TQ1JJUFRfTkFNRVMpKSB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBzY3JpcHROYW1lcy5maWx0ZXIoKHNjcmlwdE5hbWUpID0+IHNob3VsZEluY2x1ZGVTY3JpcHQoc2NyaXB0TmFtZSkpLm1hcCgoc2NyaXB0TmFtZSkgPT4gdG9TY3JpcHRDb21tYW5kKHNjcmlwdE5hbWUpKTtcbiAgICBpZiAoY29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgd3JpdGVyVGFza3NbcGF0dGVybl0gPSBjb21tYW5kcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdyaXRlclRhc2tzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsdUJBR087QUFDUCwwQkFBb0I7QUFFcEIsd0JBR087QUFDUCxrQkFHTztBQUNQLGlCQUFvQztBQUNwQyw2QkFBNEM7QUEyQzVDLE1BQU0sa0NBQThCLG9EQUE0QixFQUFFLEtBQUssR0FBRztBQUUxRSxNQUFNLHlCQUF5QjtBQUUvQixNQUFNLHFCQUFxQixnQkFBZ0Isc0JBQXNCO0FBUWpFLE1BQU0sMEJBQTBCO0FBU2hDLE1BQU0sc0NBQXNDO0FBaUI1QyxNQUFNLHNCQUFtRTtBQUFBLEVBQ3ZFLGtCQUFrQixDQUFDLFlBQVksUUFBUTtBQUFBLEVBQ3ZDLFFBQVEsQ0FBQyxhQUFhO0FBQ3hCO0FBRUEsTUFBTSxlQUE0RCxjQUFjLE1BQU0sSUFBSTtBQWlCbkYsTUFBTSx5QkFBMkMsb0JB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
|
|
@@ -60,6 +60,12 @@ export declare const obsidianDevUtilsConfig: NanoStagedConfig;
|
|
|
60
60
|
* commit-msg hook still runs). Otherwise it returns {@link obsidianDevUtilsConfig}, or — when
|
|
61
61
|
* `additionalWriterTasks` are given — the same configuration re-partitioned with those writers added.
|
|
62
62
|
*
|
|
63
|
+
* A shared task whose npm script the project's `package.json` does not declare is left out, so a project
|
|
64
|
+
* without, say, markdownlint does not fail its first commit that stages a `.md` file on a missing script. A
|
|
65
|
+
* writer pattern left with no writer is dropped, and spellcheck runs only when `spellcheck` is declared, in
|
|
66
|
+
* which case its files fall to the spellcheck-only key. The `additionalWriterTasks` are the caller's own and
|
|
67
|
+
* are kept as given.
|
|
68
|
+
*
|
|
63
69
|
* `NANO_STAGED` is not an npm script, so it carries its own switch rather than the script-name-derived one
|
|
64
70
|
* every npm script gets — but both share the same notion of an off value, via {@link isEnvVariableOff}.
|
|
65
71
|
*
|
|
@@ -60,6 +60,12 @@ export declare const obsidianDevUtilsConfig: NanoStagedConfig;
|
|
|
60
60
|
* commit-msg hook still runs). Otherwise it returns {@link obsidianDevUtilsConfig}, or — when
|
|
61
61
|
* `additionalWriterTasks` are given — the same configuration re-partitioned with those writers added.
|
|
62
62
|
*
|
|
63
|
+
* A shared task whose npm script the project's `package.json` does not declare is left out, so a project
|
|
64
|
+
* without, say, markdownlint does not fail its first commit that stages a `.md` file on a missing script. A
|
|
65
|
+
* writer pattern left with no writer is dropped, and spellcheck runs only when `spellcheck` is declared, in
|
|
66
|
+
* which case its files fall to the spellcheck-only key. The `additionalWriterTasks` are the caller's own and
|
|
67
|
+
* are kept as given.
|
|
68
|
+
*
|
|
63
69
|
* `NANO_STAGED` is not an npm script, so it carries its own switch rather than the script-name-derived one
|
|
64
70
|
* every npm script gets — but both share the same notion of an off value, via {@link isEnvVariableOff}.
|
|
65
71
|
*
|
|
@@ -16,21 +16,19 @@ import {
|
|
|
16
16
|
getEffectiveCommandLineLength,
|
|
17
17
|
getMaxBatchCommandLength
|
|
18
18
|
} from "./exec.mjs";
|
|
19
|
+
import { readPackageJsonSync } from "./npm.mjs";
|
|
19
20
|
import { getPackageManagerRunCommand } from "./package-manager.mjs";
|
|
20
21
|
const PACKAGE_MANAGER_RUN_COMMAND = getPackageManagerRunCommand().join(" ");
|
|
21
|
-
const
|
|
22
|
+
const SPELLCHECK_SCRIPT_NAME = "spellcheck";
|
|
23
|
+
const SPELLCHECK_COMMAND = toScriptCommand(SPELLCHECK_SCRIPT_NAME);
|
|
22
24
|
const EXECUTABLE_PATH_RESERVE = 260;
|
|
23
25
|
const TOKENIZER_UNSAFE_CHARACTERS_REG_EXP = /[\s"']/g;
|
|
24
|
-
const
|
|
25
|
-
"*.{ts,tsx,mts}": [
|
|
26
|
-
|
|
27
|
-
`${PACKAGE_MANAGER_RUN_COMMAND} format --`
|
|
28
|
-
],
|
|
29
|
-
"*.md": [
|
|
30
|
-
`${PACKAGE_MANAGER_RUN_COMMAND} lint:md:fix --`
|
|
31
|
-
]
|
|
26
|
+
const WRITER_SCRIPT_NAMES = {
|
|
27
|
+
"*.{ts,tsx,mts}": ["lint:fix", "format"],
|
|
28
|
+
"*.md": ["lint:md:fix"]
|
|
32
29
|
};
|
|
33
|
-
const
|
|
30
|
+
const WRITER_TASKS = toWriterTasks(() => true);
|
|
31
|
+
const obsidianDevUtilsConfig = partitionSpellcheck(WRITER_TASKS, true);
|
|
34
32
|
const NANO_STAGED_ENV_VARIABLE = "NANO_STAGED";
|
|
35
33
|
function getNanoStagedConfig(options) {
|
|
36
34
|
loadEnvFileIfExists();
|
|
@@ -39,15 +37,18 @@ function getNanoStagedConfig(options) {
|
|
|
39
37
|
`);
|
|
40
38
|
process.exit(0);
|
|
41
39
|
}
|
|
40
|
+
const scriptNames = new Set(Object.keys(readPackageJsonSync().scripts ?? {}));
|
|
41
|
+
const hasAllSharedScripts = [SPELLCHECK_SCRIPT_NAME, ...Object.values(WRITER_SCRIPT_NAMES).flat()].every((scriptName) => scriptNames.has(scriptName));
|
|
42
42
|
const additionalWriterTasks = options?.additionalWriterTasks ?? {};
|
|
43
|
-
if (Object.keys(additionalWriterTasks).length === 0) {
|
|
43
|
+
if (hasAllSharedScripts && Object.keys(additionalWriterTasks).length === 0) {
|
|
44
44
|
return obsidianDevUtilsConfig;
|
|
45
45
|
}
|
|
46
|
-
const
|
|
46
|
+
const writerTasks = toWriterTasks((scriptName) => scriptNames.has(scriptName));
|
|
47
|
+
const duplicatePattern = Object.keys(additionalWriterTasks).find((pattern) => Object.hasOwn(writerTasks, pattern));
|
|
47
48
|
if (duplicatePattern !== void 0) {
|
|
48
49
|
throw new Error(`nano-staged writer pattern '${duplicatePattern}' is already a shared writer pattern.`);
|
|
49
50
|
}
|
|
50
|
-
return partitionSpellcheck({ ...
|
|
51
|
+
return partitionSpellcheck({ ...writerTasks, ...additionalWriterTasks }, scriptNames.has(SPELLCHECK_SCRIPT_NAME));
|
|
51
52
|
}
|
|
52
53
|
function batchCommandArguments(prefix, commandArguments) {
|
|
53
54
|
const emptyLength = getEffectiveCommandLineLength("");
|
|
@@ -70,13 +71,16 @@ function batchCommandArguments(prefix, commandArguments) {
|
|
|
70
71
|
}
|
|
71
72
|
return batches;
|
|
72
73
|
}
|
|
73
|
-
function partitionSpellcheck(writerTasks) {
|
|
74
|
+
function partitionSpellcheck(writerTasks, shouldSpellcheck) {
|
|
75
|
+
if (!shouldSpellcheck) {
|
|
76
|
+
return Object.fromEntries(Object.entries(writerTasks).map(([pattern, commands]) => [pattern, toBatchedTask(commands)]));
|
|
77
|
+
}
|
|
74
78
|
const patterns = Object.keys(writerTasks);
|
|
75
79
|
const patternWithSlash = patterns.find((pattern) => pattern.includes("/"));
|
|
76
80
|
if (patternWithSlash !== void 0) {
|
|
77
81
|
throw new Error(`nano-staged writer pattern '${patternWithSlash}' contains '/', which the spellcheck partition cannot express.`);
|
|
78
82
|
}
|
|
79
|
-
const complementPattern = `!(${patterns.map((pattern) => `${pattern}!(?)`).join("|")})*`;
|
|
83
|
+
const complementPattern = patterns.length === 0 ? "*" : `!(${patterns.map((pattern) => `${pattern}!(?)`).join("|")})*`;
|
|
80
84
|
const config = {
|
|
81
85
|
[complementPattern]: toBatchedTask([SPELLCHECK_COMMAND])
|
|
82
86
|
};
|
|
@@ -99,8 +103,21 @@ function toCommandArgument(filename) {
|
|
|
99
103
|
}
|
|
100
104
|
return commandArgument.replaceAll(TOKENIZER_UNSAFE_CHARACTERS_REG_EXP, "?");
|
|
101
105
|
}
|
|
106
|
+
function toScriptCommand(scriptName) {
|
|
107
|
+
return `${PACKAGE_MANAGER_RUN_COMMAND} ${scriptName} --`;
|
|
108
|
+
}
|
|
109
|
+
function toWriterTasks(shouldIncludeScript) {
|
|
110
|
+
const writerTasks = {};
|
|
111
|
+
for (const [pattern, scriptNames] of Object.entries(WRITER_SCRIPT_NAMES)) {
|
|
112
|
+
const commands = scriptNames.filter((scriptName) => shouldIncludeScript(scriptName)).map((scriptName) => toScriptCommand(scriptName));
|
|
113
|
+
if (commands.length > 0) {
|
|
114
|
+
writerTasks[pattern] = commands;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return writerTasks;
|
|
118
|
+
}
|
|
102
119
|
export {
|
|
103
120
|
getNanoStagedConfig,
|
|
104
121
|
obsidianDevUtilsConfig
|
|
105
122
|
};
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbm8tc3RhZ2VkLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIGZvciBwcmUtY29tbWl0IGhvb2tzLlxuICovXG5cbmltcG9ydCB7XG4gIGlzQWJzb2x1dGUsXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBpc0VudlZhcmlhYmxlT2ZmLFxuICBsb2FkRW52RmlsZUlmRXhpc3RzXG59IGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5pbXBvcnQge1xuICBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aCxcbiAgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RoXG59IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQgfSBmcm9tICcuL3BhY2thZ2UtbWFuYWdlci50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdldE5hbm9TdGFnZWRDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE5hbm9TdGFnZWRDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFJlcG8tc3BlY2lmaWMgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBuYW5vLXN0YWdlZCBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICAgKlxuICAgKiBFYWNoIGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhbmQgaXRzIGZpbGVzIHJlbW92ZWQgZnJvbSB0aGUgc3BlbGxjaGVjay1vbmx5IGtleSwgZXhhY3RseSBsaWtlIHRoZSBzaGFyZWRcbiAgICogd3JpdGVycy4gQSBwYXR0ZXJuIG11c3Qgbm90IGNvbnRhaW4gYC9gLCBhbmQgbXVzdCBub3QgcmVwZWF0IGEgc2hhcmVkIHdyaXRlciBwYXR0ZXJuLiBFYWNoIGNvbW1hbmQgaXMgYVxuICAgKiBwcmVmaXggdGhlIHN0YWdlZCBwYXRocyBhcmUgYXBwZW5kZWQgdG8sIGluIGJhdGNoZXMsIGxpa2UgdGhlIHNoYXJlZCBvbmVzIChgbnBtIHJ1biBsaW50OmZpeCAtLWApLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFdyaXRlclRhc2tzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+Pjtcbn1cblxuLyoqXG4gKiBBIG5hbm8tc3RhZ2VkIGNvbmZpZ3VyYXRpb24gd2hvc2UgZXZlcnkga2V5IGlzIGEge0BsaW5rIE5hbm9TdGFnZWRUYXNrfS5cbiAqL1xuZXhwb3J0IHR5cGUgTmFub1N0YWdlZENvbmZpZyA9IFJlY29yZDxzdHJpbmcsIE5hbm9TdGFnZWRUYXNrPjtcblxuLyoqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCBuYW5vLXN0YWdlZCB0YXNrOiBpdCByZWNlaXZlcyB0aGUgc3RhZ2VkIGZpbGVzIGl0cyBwYXR0ZXJuIGNsYWltcyBhbmQgcmV0dXJucyB0aGVcbiAqIGNvbW1hbmRzIHRvIHJ1biBvdmVyIHRoZW0sIGluIG9yZGVyLlxuICovXG5leHBvcnQgdHlwZSBOYW5vU3RhZ2VkVGFzayA9IChjb250ZXh0OiBOYW5vU3RhZ2VkVGFza0NvbnRleHQpID0+IHN0cmluZ1tdO1xuXG4vKipcbiAqIFdoYXQgbmFuby1zdGFnZWQgcGFzc2VzIHRvIGEgZnVuY3Rpb24tdmFsdWVkIHRhc2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFub1N0YWdlZFRhc2tDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRocyBvZiB0aGUgc3RhZ2VkIGZpbGVzIHRoZSB0YXNrJ3MgcGF0dGVybiBjbGFpbXMuXG4gICAqL1xuICByZWFkb25seSBmaWxlbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBgPG1hbmFnZXI+IHJ1bmAgcHJlZml4IGV2ZXJ5IHRhc2sgYmVsb3cgaXMgYnVpbHQgb24sIHJlc29sdmVkIG9uY2UgZm9yIHRoZSBwcm9jZXNzLlxuICpcbiAqIERldGVjdGlvbiBwcm9iZXMgZm9yIGEgbG9ja2ZpbGUgYmVzaWRlIGBwYWNrYWdlLmpzb25gLCBzbyBpdCBpcyBhIGhhbmRmdWwgb2YgYGV4aXN0c1N5bmNgIGNhbGxzIGFuZFxuICogbm90aGluZyBtb3JlIFx1MjAxNCBubyBgLmVudmAgcmVhZCBhbmQgbm8gYHByb2Nlc3MuZXhpdGAsIHdoaWNoIGlzIHdoYXQgbGV0cyBpdCBzaXQgYXQgbW9kdWxlIHNjb3BlLlxuICovXG5jb25zdCBQQUNLQUdFX01BTkFHRVJfUlVOX0NPTU1BTkQgPSBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoKS5qb2luKCcgJyk7XG5cbmNvbnN0IFNQRUxMQ0hFQ0tfQ09NTUFORCA9IGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gc3BlbGxjaGVjayAtLWA7XG5cbi8qKlxuICogUm9vbSBsZWZ0IGluIGV2ZXJ5IGJhdGNoIGZvciB0aGUgcmVzb2x2ZWQgcGF0aCBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyJ3MgZXhlY3V0YWJsZS5cbiAqXG4gKiBuYW5vLXN0YWdlZCBydW5zIGBucG1gIGFzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBucG0uY21kYCAoYDxjb21zcGVjPiAvRCAvUyAvQyBcIjxwYXRoPlwiIFwiPGFyZz5cIiBcdTIwMjZgKSwgd2hpY2hcbiAqIHRoZSBiYXRjaCBjYW5ub3Qgc2VlLCBzbyBhIGZ1bGwgV2luZG93cyBgTUFYX1BBVEhgIGlzIHNldCBhc2lkZSBmb3IgaXQuXG4gKi9cbmNvbnN0IEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFID0gMjYwO1xuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXJzIG5hbm8tc3RhZ2VkJ3MgY29tbWFuZCB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IGluc2lkZSBhbiBhcmd1bWVudC5cbiAqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCB0YXNrIHJldHVybnMgaXRzIGNvbW1hbmRzIGFzIFNUUklOR1MsIGFuZCBuYW5vLXN0YWdlZCBzcGxpdHMgZWFjaCBvbmUgd2l0aFxuICogYHN0cmluZ0FyZ3ZUb0FycmF5YCwgd2hpY2ggZW1pdHMgYSBxdW90ZWQgdG9rZW4gdHdpY2UgKG9uY2UgYmFyZSwgb25jZSB3aXRoIGl0cyBxdW90ZXMpIGFuZCBoYXMgbm8gZXNjYXBlLlxuICogU28gYSBwYXRoIGhvbGRpbmcgd2hpdGVzcGFjZSBvciBhIHF1b3RlIGNhbm5vdCBiZSBwYXNzZWQgYXMgaXRzZWxmLlxuICovXG5jb25zdCBUT0tFTklaRVJfVU5TQUZFX0NIQVJBQ1RFUlNfUkVHX0VYUCA9IC9bXFxzXCInXS9nO1xuXG4vKipcbiAqIFRoZSB0YXNrcyB0aGF0IFJFV1JJVEUgYSBzdGFnZWQgZmlsZSwga2V5ZWQgYnkgdGhlIG5hbm8tc3RhZ2VkIHBhdHRlcm4gdGhhdCBjbGFpbXMgaXQuXG4gKlxuICogYGxpbnQ6Zml4YCBhbmQgYGZvcm1hdGAgYm90aCByZXdyaXRlIHRoZSBmaWxlLCBzbyB0aGV5IGhhdmUgdG8gc2hhcmUgb25lIGtleTogbmFuby1zdGFnZWQgcnVucyBpdHNcbiAqIHBlci1wYXR0ZXJuIGdyb3VwcyB1bmRlciBgUHJvbWlzZS5hbGxgIChgcnVuKClgIGluIGBuYW5vLXN0YWdlZC9saWIvY21kLXJ1bm5lci5qc2ApLCBhbmQgc2VxdWVuY2VzIG9ubHlcbiAqIHRoZSBjb21tYW5kcyBJTlNJREUgYSBzaW5nbGUga2V5J3MgYXJyYXkgKGBydW5UYXNrKClgLCBhIGBmb3IgLi4uIG9mIGF3YWl0YCkuIFNwbGl0IGFjcm9zcyB0d28ga2V5cyB0aGV5XG4gKiByYWNlLCB3aGljaGV2ZXIgZmluaXNoZXMgbGFzdCB3aW5zLCBhbmQgdGhlIGNvbW1pdCBzdGFnZXMgYnl0ZXMgdGhhdCBuZWl0aGVyIHRvb2wgd291bGQgaGF2ZSBwcm9kdWNlZCBvblxuICogaXRzIG93bi5cbiAqXG4gKiBTbyBkbyBOT1QgZXhwcmVzcyBhIGRpcmVjdG9yeSBleGNsdXNpb24gYnkgZ2l2aW5nIG9uZSBvZiB0aGVzZSB0d28gaXRzIG93biBuZWdhdGVkIGtleSAtLSB0aGF0IHNpbGVudGx5XG4gKiB0YWtlcyB0aGUgb3JkZXJpbmcgYXdheS4gQW4gZXhjbHVzaW9uIGJlbG9uZ3MgaW4gdGhlIGV4Y2x1ZGVkIHRvb2wncyBvd24gY29uZmlnLCB3aGVyZSBFU0xpbnQnc1xuICogYGdsb2JhbElnbm9yZXNgIGFscmVhZHkgcHV0cyBpdDogYSBwYXRoIEVTTGludCBpZ25vcmVzIGlzIHJlcG9ydGVkIGFzIGEgd2FybmluZyBhbmQgZXhpdHMgMCB3aGVuIGl0IGlzXG4gKiBwYXNzZWQgZXhwbGljaXRseSwgc28gaXQgY29zdHMgYSBjb25zb2xlIGxpbmUgcmF0aGVyIHRoYW4gYSBmYWlsZWQgY29tbWl0IGFuZCBuZWVkcyBubyBrZXkgaGVyZS5cbiAqL1xuY29uc3QgV1JJVEVSX1RBU0tTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+ID0ge1xuICAnKi57dHMsdHN4LG10c30nOiBbXG4gICAgYCR7UEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EfSBsaW50OmZpeCAtLWAsXG4gICAgYCR7UEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EfSBmb3JtYXQgLS1gXG4gIF0sXG4gICcqLm1kJzogW1xuICAgIGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gbGludDptZDpmaXggLS1gXG4gIF1cbn07XG5cbi8qKlxuICogTmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0aGF0IHJ1bnMgZmlsZS1iYXNlZCBsaW50LCBmb3JtYXQsIGFuZCBzcGVsbGNoZWNrIG9uIHN0YWdlZCBmaWxlcy5cbiAqXG4gKiBPbmx5IGluY2x1ZGVzIHRvb2xzIHRoYXQgY2FuIG9wZXJhdGUgb24gaW5kaXZpZHVhbCBmaWxlcy4gV2hvbGUtcHJvamVjdCBjaGVja3NcbiAqIChUeXBlU2NyaXB0IGNvbXBpbGF0aW9uLCB1bml0IHRlc3RzKSBhcmUgbGVmdCB0byBDSS5cbiAqXG4gKiBDb21tYW5kcyBydW4gdGhyb3VnaCB0aGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZSBcdTIwMTQgYG5wbSBydW4gLi4uIC0tYCwgYGJ1biBydW4gLi4uIC0tYCwgYW5kXG4gKiBzbyBvbiBcdTIwMTQgc28gbmFuby1zdGFnZWQgZmlsZSBwYXRocyBhcmUgZm9yd2FyZGVkIGFzIENMSSBhcmd1bWVudHMsIGJhdGNoZWQgdG8gZml0IHRoZSBjb21tYW5kIGxpbmUgKHNlZVxuICogYHRvQmF0Y2hlZFRhc2tgKS5cbiAqXG4gKiBTcGVsbGNoZWNrIGlzIHBhcnRpdGlvbmVkIGFjcm9zcyB0aGUga2V5cyByYXRoZXIgdGhhbiBnaXZlbiBhIGNhdGNoLWFsbCBgJyonYCBrZXkgKHNlZVxuICogYHBhcnRpdGlvblNwZWxsY2hlY2tgKS4gQSByZXBvIGFkZGluZyBhIGZpbGUtcmV3cml0aW5nIHRhc2sgb2YgaXRzIG93biBwYXNzZXMgaXQgdG9cbiAqIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfSBhcyBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCByYXRoZXIgdGhhbiBzcHJlYWRpbmcgdGhpcyBvYmplY3QgYW5kIGFkZGluZyBhIGtleSxcbiAqIHdoaWNoIHdvdWxkIHJlaW50cm9kdWNlIHRoZSBvdmVybGFwIGZvciB0aGF0IGtleSdzIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTmFub1N0YWdlZENvbmZpZyA9IHBhcnRpdGlvblNwZWxsY2hlY2soV1JJVEVSX1RBU0tTKTtcblxuY29uc3QgTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFID0gJ05BTk9fU1RBR0VEJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0byB1c2UsIGhvbm9yaW5nIGEgcGVyLWRldmVsb3BlciBvcHQtb3V0LlxuICpcbiAqIExvYWRzIGEgZ2l0aWdub3JlZCBgLmVudmAgaWYgcHJlc2VudCwgdGhlbiBcdTIwMTQgd2hlbiBgTkFOT19TVEFHRURgIGlzIHNldCB0byBhbiBvZmYgdmFsdWUgKGAwYCwgYGZhbHNlYCxcbiAqIGBvZmZgLCBvciBgbm9gKSBcdTIwMTQgcHJpbnRzIGEgbm90aWNlIGFuZCBleGl0cyB0aGUgcHJvY2VzcyBzdWNjZXNzZnVsbHkgc28gdGhlIHByZS1jb21taXQgY2hlY2tzIGFyZVxuICogc2tpcHBlZC4gVGhpcyBtaXJyb3JzIGh1c2t5J3Mgb3duIGBIVVNLWT0wYCBzd2l0Y2gsIGJ1dCBzY29wZWQgdG8gdGhlIG5hbm8tc3RhZ2VkIHN0ZXAgKHNvIHRoZVxuICogY29tbWl0LW1zZyBob29rIHN0aWxsIHJ1bnMpLiBPdGhlcndpc2UgaXQgcmV0dXJucyB7QGxpbmsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZ30sIG9yIFx1MjAxNCB3aGVuXG4gKiBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgZ2l2ZW4gXHUyMDE0IHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gcmUtcGFydGl0aW9uZWQgd2l0aCB0aG9zZSB3cml0ZXJzIGFkZGVkLlxuICpcbiAqIGBOQU5PX1NUQUdFRGAgaXMgbm90IGFuIG5wbSBzY3JpcHQsIHNvIGl0IGNhcnJpZXMgaXRzIG93biBzd2l0Y2ggcmF0aGVyIHRoYW4gdGhlIHNjcmlwdC1uYW1lLWRlcml2ZWQgb25lXG4gKiBldmVyeSBucG0gc2NyaXB0IGdldHMgXHUyMDE0IGJ1dCBib3RoIHNoYXJlIHRoZSBzYW1lIG5vdGlvbiBvZiBhbiBvZmYgdmFsdWUsIHZpYSB7QGxpbmsgaXNFbnZWYXJpYWJsZU9mZn0uXG4gKlxuICogVGhpcyBpcyBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIG1vZHVsZS1sZXZlbCBjb2RlIHNvIGltcG9ydGluZyB0aGUgcGFja2FnZSBiYXJyZWwgbmV2ZXIgdHJpZ2dlcnMgdGhlXG4gKiBgLmVudmAgcmVhZCBvciB0aGUgcHJvY2VzcyBleGl0OyBjYWxsIGl0IGZyb20gdGhlIHRoaW4gYHNjcmlwdHMvbmFuby1zdGFnZWQtY29uZmlnLnRzYCBlbnRyeS4gUmVzb2x2aW5nIHRoZVxuICogcGFja2FnZSBtYW5hZ2VyIGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBkb2VzIHJ1biBhdCBtb2R1bGUgc2NvcGUsIGFuZCBpdCBkb2VzIG5laXRoZXIgb2YgdGhvc2UgdHdvXG4gKiB0aGluZ3MgXHUyMDE0IGl0IG9ubHkgcHJvYmVzIGZvciBhIGxvY2tmaWxlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbmFsIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgbmFuby1zdGFnZWQgdGFzayBjb25maWd1cmF0aW9uLiBEb2VzIG5vdCByZXR1cm4gd2hlbiB0aGUgb3B0LW91dCBpcyBhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW5vU3RhZ2VkQ29uZmlnKG9wdGlvbnM/OiBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyk6IE5hbm9TdGFnZWRDb25maWcge1xuICBsb2FkRW52RmlsZUlmRXhpc3RzKCk7XG5cbiAgaWYgKGlzRW52VmFyaWFibGVPZmYoTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFKSkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBuYW5vLXN0YWdlZDogc2tpcHBlZCAoJHtOQU5PX1NUQUdFRF9FTlZfVkFSSUFCTEV9IGlzIG9mZikuXFxuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgY29uc3QgYWRkaXRpb25hbFdyaXRlclRhc2tzID0gb3B0aW9ucz8uYWRkaXRpb25hbFdyaXRlclRhc2tzID8/IHt9O1xuICBpZiAoT2JqZWN0LmtleXMoYWRkaXRpb25hbFdyaXRlclRhc2tzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JzaWRpYW5EZXZVdGlsc0NvbmZpZztcbiAgfVxuXG4gIGNvbnN0IGR1cGxpY2F0ZVBhdHRlcm4gPSBPYmplY3Qua2V5cyhhZGRpdGlvbmFsV3JpdGVyVGFza3MpLmZpbmQoKHBhdHRlcm4pID0+IE9iamVjdC5oYXNPd24oV1JJVEVSX1RBU0tTLCBwYXR0ZXJuKSk7XG4gIGlmIChkdXBsaWNhdGVQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5hbm8tc3RhZ2VkIHdyaXRlciBwYXR0ZXJuICcke2R1cGxpY2F0ZVBhdHRlcm59JyBpcyBhbHJlYWR5IGEgc2hhcmVkIHdyaXRlciBwYXR0ZXJuLmApO1xuICB9XG5cbiAgcmV0dXJuIHBhcnRpdGlvblNwZWxsY2hlY2soeyAuLi5XUklURVJfVEFTS1MsIC4uLmFkZGl0aW9uYWxXcml0ZXJUYXNrcyB9KTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgY29tbWFuZCBhcmd1bWVudHMgaW50byBiYXRjaGVzIHRoYXQgZWFjaCBmaXQgb25lIGNvbW1hbmQgbGluZSBhZnRlciBhIGdpdmVuIHByZWZpeC5cbiAqXG4gKiBFYWNoIGFyZ3VtZW50IGlzIGNvc3RlZCBhcyBuYW5vLXN0YWdlZCBwYXNzZXMgaXQgb24gV2luZG93cyBcdTIwMTQgcXVvdGVkLCB0aGVuIGBeYC1lc2NhcGVkIGJ5IGBjbWQuZXhlYCdzXG4gKiBydWxlcyBcdTIwMTQgdGhyb3VnaCB7QGxpbmsgZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGh9LCBhbmQgdGhlIGJ1ZGdldCBpcyB7QGxpbmsgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RofSxcbiAqIHdoaWNoIGFscmVhZHkgaG9sZHMgYmFjayB0aGUgcmVzZXJ2ZSBmb3IgdGhlIGBucG1gIFx1MjE5MiBgY21kLmV4ZWAgXHUyMTkyIGAuYmluYCBzaGltIGNoYWluIHJlLWV4cGFuZGluZyB0aGVcbiAqIGFyZ3VtZW50cy4gQW4gYXJndW1lbnQgdG9vIGxvbmcgZm9yIGFueSBiYXRjaCBzdGlsbCBnZXRzIGEgYmF0Y2ggb2YgaXRzIG93bjogaXQgZmFpbHMgbG91ZGx5IHRoZXJlLCB3aGljaFxuICogZHJvcHBpbmcgaXQgd291bGQgbm90LlxuICpcbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgY29tbWFuZCB0aGUgYXJndW1lbnRzIGFyZSBhcHBlbmRlZCB0by5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0byBzcGxpdC5cbiAqIEByZXR1cm5zIFRoZSBiYXRjaGVzLCBpbiBvcmRlciwgdG9nZXRoZXIgaG9sZGluZyBldmVyeSBhcmd1bWVudCBvbmNlLlxuICovXG5mdW5jdGlvbiBiYXRjaENvbW1hbmRBcmd1bWVudHMocHJlZml4OiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGVtcHR5TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoJycpO1xuICBjb25zdCBidWRnZXQgPSBnZXRNYXhCYXRjaENvbW1hbmRMZW5ndGgoKSAtIEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFIC0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgocHJlZml4KTtcbiAgY29uc3QgYmF0Y2hlczogc3RyaW5nW11bXSA9IFtdO1xuICBsZXQgYmF0Y2g6IHN0cmluZ1tdID0gW107XG4gIGxldCBiYXRjaExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCBjb21tYW5kQXJndW1lbnQgb2YgY29tbWFuZEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3VtZW50TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoYCBcIiR7Y29tbWFuZEFyZ3VtZW50fVwiYCkgLSBlbXB0eUxlbmd0aDtcbiAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCAmJiBiYXRjaExlbmd0aCArIGFyZ3VtZW50TGVuZ3RoID4gYnVkZ2V0KSB7XG4gICAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICAgICAgYmF0Y2ggPSBbXTtcbiAgICAgIGJhdGNoTGVuZ3RoID0gMDtcbiAgICB9XG4gICAgYmF0Y2gucHVzaChjb21tYW5kQXJndW1lbnQpO1xuICAgIGJhdGNoTGVuZ3RoICs9IGFyZ3VtZW50TGVuZ3RoO1xuICB9XG5cbiAgaWYgKGJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICB9XG5cbiAgcmV0dXJuIGJhdGNoZXM7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiBpbiB3aGljaCBzcGVsbGNoZWNrIG5ldmVyIHJlYWRzIGEgZmlsZSB3aGlsZSBhbm90aGVyIHRhc2sgcmV3cml0ZXMgaXQuXG4gKlxuICogVGhlIHNhbWUgYFByb21pc2UuYWxsYCB0aGF0IGZvcmNlcyB0d28gd3JpdGVycyBpbnRvIG9uZSBrZXkgbWFrZXMgYSBjYXRjaC1hbGwgYCcqJ2Agc3BlbGxjaGVjayBrZXkgcnVuXG4gKiBDT05DVVJSRU5UTFkgd2l0aCBldmVyeSB3cml0ZXIga2V5LCBzbyBjc3BlbGwgd291bGQgcmVhZCBhIGZpbGUgdGhhdCBFU0xpbnQgb3IgZHByaW50IGlzIHJld3JpdGluZyBpblxuICogcGxhY2UgLS0gYSBzcHVyaW91cyBmaW5kaW5nIG9uIGEgaGFsZi13cml0dGVuIGZpbGUsIG9yIGEgcGFzcyBvdmVyIGNvbnRlbnQgdGhhdCBpcyBub3Qgd2hhdCBnZXRzXG4gKiBjb21taXR0ZWQuIFNvIHRoZSBzdGFnZWQgZmlsZXMgYXJlIFBBUlRJVElPTkVEIGluc3RlYWQ6XG4gKlxuICogLSBldmVyeSB3cml0ZXIga2V5IGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhcyBpdHMgTEFTVCBjb21tYW5kLCBzbyBpdCByZWFkcyB0aGF0IGtleSdzIGZpbGVzIGFmdGVyIHRoZXlcbiAqICAgaGF2ZSBiZWVuIHJld3JpdHRlbjtcbiAqIC0gb25lIGNvbXBsZW1lbnQga2V5IHNwZWxsY2hlY2tzIGV4YWN0bHkgdGhlIGZpbGVzIG5vIHdyaXRlciBrZXkgY2xhaW1zLlxuICpcbiAqIFRoZSBjb21wbGVtZW50IGlzIHdyaXR0ZW4gaW4gbmFuby1zdGFnZWQncyBvd24gZ2xvYiBkaWFsZWN0LCB3aGljaCBjb21waWxlcyBgISguLi4pYCB0byBhIGxvb2thaGVhZCB0aGF0XG4gKiBpcyBOT1QgYW5jaG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aDogYCEoKi5tZCkqYCB3b3VsZCBleGNsdWRlIGBub3Rlcy5tZC5iYWtgIHRvby4gQSBuZXN0ZWQgYCEoPylgXG4gKiBjb21waWxlcyB0byBgKD8hLilgLCB3aGljaCBJUyBhbiBlbmQgYW5jaG9yLCBzbyBlYWNoIGFsdGVybmF0aXZlIGlzIHN1ZmZpeGVkIHdpdGggaXQuIEEgd3JpdGVyIHBhdHRlcm5cbiAqIGNvbnRhaW5pbmcgYC9gIHdvdWxkIHN3aXRjaCBuYW5vLXN0YWdlZCBpbnRvIGdsb2JzdGFyIG1vZGUsIHdoZXJlIGAqYCBzdG9wcyBjcm9zc2luZyBkaXJlY3RvcmllcyBhbmQgdGhlXG4gKiBjb25zdHJ1Y3Rpb24gbm8gbG9uZ2VyIGhvbGRzIC0tIGhlbmNlIHRoZSB0aHJvdy4gVGhlIHVuaXQgdGVzdCBwaW5zIHRoZSBwYXJ0aXRpb24gYWdhaW5zdCB0aGUgaW5zdGFsbGVkXG4gKiBuYW5vLXN0YWdlZCBjb21waWxlciwgc28gYSByZWxlYXNlIHRoYXQgY2hhbmdlcyBpdHMgZGlhbGVjdCBmYWlscyB0aGVyZSByYXRoZXIgdGhhbiBpbiBhIGNvbW1pdC5cbiAqXG4gKiBAcGFyYW0gd3JpdGVyVGFza3MgLSBUaGUgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIHdpdGggdGhlIHNwZWxsY2hlY2sgc3RlcCBwYXJ0aXRpb25lZCBhY3Jvc3MgdGhlIGtleXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvblNwZWxsY2hlY2sod3JpdGVyVGFza3M6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4pOiBOYW5vU3RhZ2VkQ29uZmlnIHtcbiAgY29uc3QgcGF0dGVybnMgPSBPYmplY3Qua2V5cyh3cml0ZXJUYXNrcyk7XG4gIGNvbnN0IHBhdHRlcm5XaXRoU2xhc2ggPSBwYXR0ZXJucy5maW5kKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLmluY2x1ZGVzKCcvJykpO1xuICBpZiAocGF0dGVybldpdGhTbGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBuYW5vLXN0YWdlZCB3cml0ZXIgcGF0dGVybiAnJHtwYXR0ZXJuV2l0aFNsYXNofScgY29udGFpbnMgJy8nLCB3aGljaCB0aGUgc3BlbGxjaGVjayBwYXJ0aXRpb24gY2Fubm90IGV4cHJlc3MuYCk7XG4gIH1cblxuICBjb25zdCBjb21wbGVtZW50UGF0dGVybiA9IGAhKCR7cGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBgJHtwYXR0ZXJufSEoPylgKS5qb2luKCd8Jyl9KSpgO1xuICBjb25zdCBjb25maWc6IE5hbm9TdGFnZWRDb25maWcgPSB7XG4gICAgW2NvbXBsZW1lbnRQYXR0ZXJuXTogdG9CYXRjaGVkVGFzayhbU1BFTExDSEVDS19DT01NQU5EXSlcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBjb21tYW5kc10gb2YgT2JqZWN0LmVudHJpZXMod3JpdGVyVGFza3MpKSB7XG4gICAgY29uZmlnW3BhdHRlcm5dID0gdG9CYXRjaGVkVGFzayhbLi4uY29tbWFuZHMsIFNQRUxMQ0hFQ0tfQ09NTUFORF0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB0YXNrIHRoYXQgcnVucyBlYWNoIGNvbW1hbmQgb3ZlciBldmVyeSBzdGFnZWQgZmlsZSBpdCByZWNlaXZlcywgaW4gYXMgbWFueSBiYXRjaGVzIGFzIHRoZSBjb21tYW5kXG4gKiBsaW5lIG5lZWRzLlxuICpcbiAqIG5hbm8tc3RhZ2VkIGFwcGVuZHMgYSBzdHJpbmcgdGFzaydzIGZpbGVzIHRvIE9ORSBjb21tYW5kLCBzbyBhIGNvbW1pdCBzdGFnaW5nIGEgZmV3IGh1bmRyZWQgZmlsZXMgcmFuXG4gKiBgbnBtIHJ1biBsaW50OmZpeCAtLSA8ZXZlcnkgcGF0aD5gIGFuZCBmYWlsZWQgb24gV2luZG93cyB3aXRoIGBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nLmAsIHJlZnVzaW5nXG4gKiBleGFjdGx5IHRoZSB3aG9sZS1yZXBvIGNvbW1pdHMgdGhhdCBtb3N0IG5lZWQgdGhlIGhvb2suIEEgZnVuY3Rpb24tdmFsdWVkIHRhc2sgYnVpbGRzIGl0cyBvd24gY29tbWFuZHNcbiAqIGluc3RlYWQsIGFuZCB0aGVzZSBhcmUgYmF0Y2hlZCBhZ2FpbnN0IHRoZSBzYW1lIGJ1ZGdldCBgZXhlYygpYCB1c2VzIChzZWUgYGJhdGNoQ29tbWFuZEFyZ3VtZW50c2ApLlxuICpcbiAqIFRoZSBjb21tYW5kcyBrZWVwIHRoZWlyIG9yZGVyOiBldmVyeSBiYXRjaCBvZiB0aGUgZmlyc3QgY29tbWFuZCBydW5zIGJlZm9yZSBhbnkgYmF0Y2ggb2YgdGhlIHNlY29uZCxcbiAqIGJlY2F1c2UgbmFuby1zdGFnZWQgcnVucyBvbmUga2V5J3MgY29tbWFuZHMgb25lIGFmdGVyIGFub3RoZXIsIHNvIGEgd3JpdGVyIHN0aWxsIGZpbmlzaGVzIGJlZm9yZSB0aGUgbmV4dFxuICogd3JpdGVyLCBhbmQgc3BlbGxjaGVjayBzdGlsbCByZWFkcyB0aGUgcmV3cml0dGVuIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBjb21tYW5kIHByZWZpeGVzLCBpbiB0aGUgb3JkZXIgdGhleSBydW4uXG4gKiBAcmV0dXJucyBUaGUgdGFzay5cbiAqL1xuZnVuY3Rpb24gdG9CYXRjaGVkVGFzayhjb21tYW5kczogcmVhZG9ubHkgc3RyaW5nW10pOiBOYW5vU3RhZ2VkVGFzayB7XG4gIHJldHVybiAoeyBmaWxlbmFtZXMgfSkgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRBcmd1bWVudHMgPSBmaWxlbmFtZXMubWFwKChmaWxlbmFtZSkgPT4gdG9Db21tYW5kQXJndW1lbnQoZmlsZW5hbWUpKTtcbiAgICByZXR1cm4gY29tbWFuZHMuZmxhdE1hcCgoY29tbWFuZCkgPT4gYmF0Y2hDb21tYW5kQXJndW1lbnRzKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMpLm1hcCgoYmF0Y2gpID0+IGAke2NvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWApKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUdXJucyBhIHN0YWdlZCBmaWxlJ3MgYWJzb2x1dGUgcGF0aCBpbnRvIHRoZSBhcmd1bWVudCBhIGJhdGNoZWQgdGFzayBwYXNzZXMgZm9yIGl0LlxuICpcbiAqIFRoZSBwYXRoIGlzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB3aGVyZSBuYW5vLXN0YWdlZCBhbmQgdGhlIHRhc2sgYm90aCBydW4sIHdoaWNoIHJvdWdobHlcbiAqIGhhbHZlcyBpdHMgbGVuZ3RoIGFuZCBzbyB0aGUgbnVtYmVyIG9mIGJhdGNoZXM7IGEgcGF0aCBvdXRzaWRlIGl0IHN0YXlzIGFic29sdXRlLiBBIHJlbGF0aXZlIHBhdGggc3RhcnRpbmdcbiAqIHdpdGggYC1gIGdldHMgYC4vYCwgc28gbm8gdG9vbCByZWFkcyBpdCBhcyBhbiBvcHRpb24uXG4gKlxuICogV2hpdGVzcGFjZSBhbmQgcXVvdGVzIGJlY29tZSBgP2AsIGJlY2F1c2UgbmFuby1zdGFnZWQncyB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IHRoZW0gKHNlZVxuICoge0BsaW5rIFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQfSkuIEV2ZXJ5IHRvb2wgdGhlIHRhc2tzIHJ1biAoRVNMaW50LCBkcHJpbnQsIGNzcGVsbCxcbiAqIG1hcmtkb3dubGludC1jbGkyKSB0YWtlcyBpdHMgcGF0aHMgYXMgZ2xvYnMsIGFuZCBgP2AgbWF0Y2hlcyBleGFjdGx5IHRoZSBvbmUgY2hhcmFjdGVyIGl0IHJlcGxhY2VkLCBzbyB0aGVcbiAqIGZpbGUgaXMgc3RpbGwgZm91bmQ7IGEgc2libGluZyBkaWZmZXJpbmcgb25seSBpbiB0aGF0IGNoYXJhY3RlciB3b3VsZCBtYXRjaCB0b28sIHdoaWNoIGNvc3RzIGEgbGludCBvZiBhblxuICogZXh0cmEgZmlsZSwgbm90IGEgbWlzc2VkIG9uZS5cbiAqXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc3RhZ2VkIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZEFyZ3VtZW50KGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlbmFtZSk7XG4gIGxldCBjb21tYW5kQXJndW1lbnQgPSAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJykgfHwgaXNBYnNvbHV0ZShyZWxhdGl2ZVBhdGgpID8gZmlsZW5hbWUgOiByZWxhdGl2ZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBpZiAoY29tbWFuZEFyZ3VtZW50LnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbW1hbmRBcmd1bWVudCA9IGAuLyR7Y29tbWFuZEFyZ3VtZW50fWA7XG4gIH1cbiAgcmV0dXJuIGNvbW1hbmRBcmd1bWVudC5yZXBsYWNlQWxsKFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQLCAnPycpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sYUFBYTtBQUVwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQ0FBbUM7QUEyQzVDLE1BQU0sOEJBQThCLDRCQUE0QixFQUFFLEtBQUssR0FBRztBQUUxRSxNQUFNLHFCQUFxQixHQUFHLDJCQUEyQjtBQVF6RCxNQUFNLDBCQUEwQjtBQVNoQyxNQUFNLHNDQUFzQztBQWdCNUMsTUFBTSxlQUE0RDtBQUFBLEVBQ2hFLGtCQUFrQjtBQUFBLElBQ2hCLEdBQUcsMkJBQTJCO0FBQUEsSUFDOUIsR0FBRywyQkFBMkI7QUFBQSxFQUNoQztBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sR0FBRywyQkFBMkI7QUFBQSxFQUNoQztBQUNGO0FBaUJPLE1BQU0seUJBQTJDLG9CQUFvQixZQUFZO0FBRXhGLE1BQU0sMkJBQTJCO0FBc0IxQixTQUFTLG9CQUFvQixTQUF3RDtBQUMxRixzQkFBb0I7QUFFcEIsTUFBSSxpQkFBaUIsd0JBQXdCLEdBQUc7QUFDOUMsWUFBUSxPQUFPLE1BQU0seUJBQXlCLHdCQUF3QjtBQUFBLENBQWE7QUFDbkYsWUFBUSxLQUFLLENBQUM7QUFBQSxFQUNoQjtBQUVBLFFBQU0sd0JBQXdCLFNBQVMseUJBQXlCLENBQUM7QUFDakUsTUFBSSxPQUFPLEtBQUsscUJBQXFCLEVBQUUsV0FBVyxHQUFHO0FBQ25ELFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxtQkFBbUIsT0FBTyxLQUFLLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxZQUFZLE9BQU8sT0FBTyxjQUFjLE9BQU8sQ0FBQztBQUNsSCxNQUFJLHFCQUFxQixRQUFXO0FBQ2xDLFVBQU0sSUFBSSxNQUFNLCtCQUErQixnQkFBZ0IsdUNBQXVDO0FBQUEsRUFDeEc7QUFFQSxTQUFPLG9CQUFvQixFQUFFLEdBQUcsY0FBYyxHQUFHLHNCQUFzQixDQUFDO0FBQzFFO0FBZUEsU0FBUyxzQkFBc0IsUUFBZ0Isa0JBQWlEO0FBQzlGLFFBQU0sY0FBYyw4QkFBOEIsRUFBRTtBQUNwRCxRQUFNLFNBQVMseUJBQXlCLElBQUksMEJBQTBCLDhCQUE4QixNQUFNO0FBQzFHLFFBQU0sVUFBc0IsQ0FBQztBQUM3QixNQUFJLFFBQWtCLENBQUM7QUFDdkIsTUFBSSxjQUFjO0FBRWxCLGFBQVcsbUJBQW1CLGtCQUFrQjtBQUM5QyxVQUFNLGlCQUFpQiw4QkFBOEIsS0FBSyxlQUFlLEdBQUcsSUFBSTtBQUNoRixRQUFJLE1BQU0sU0FBUyxLQUFLLGNBQWMsaUJBQWlCLFFBQVE7QUFDN0QsY0FBUSxLQUFLLEtBQUs7QUFDbEIsY0FBUSxDQUFDO0FBQ1Qsb0JBQWM7QUFBQSxJQUNoQjtBQUNBLFVBQU0sS0FBSyxlQUFlO0FBQzFCLG1CQUFlO0FBQUEsRUFDakI7QUFFQSxNQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3BCLFlBQVEsS0FBSyxLQUFLO0FBQUEsRUFDcEI7QUFFQSxTQUFPO0FBQ1Q7QUF3QkEsU0FBUyxvQkFBb0IsYUFBNEU7QUFDdkcsUUFBTSxXQUFXLE9BQU8sS0FBSyxXQUFXO0FBQ3hDLFFBQU0sbUJBQW1CLFNBQVMsS0FBSyxDQUFDLFlBQVksUUFBUSxTQUFTLEdBQUcsQ0FBQztBQUN6RSxNQUFJLHFCQUFxQixRQUFXO0FBQ2xDLFVBQU0sSUFBSSxNQUFNLCtCQUErQixnQkFBZ0IsZ0VBQWdFO0FBQUEsRUFDakk7QUFFQSxRQUFNLG9CQUFvQixLQUFLLFNBQVMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUNwRixRQUFNLFNBQTJCO0FBQUEsSUFDL0IsQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLENBQUMsa0JBQWtCLENBQUM7QUFBQSxFQUN6RDtBQUVBLGFBQVcsQ0FBQyxTQUFTLFFBQVEsS0FBSyxPQUFPLFFBQVEsV0FBVyxHQUFHO0FBQzdELFdBQU8sT0FBTyxJQUFJLGNBQWMsQ0FBQyxHQUFHLFVBQVUsa0JBQWtCLENBQUM7QUFBQSxFQUNuRTtBQUVBLFNBQU87QUFDVDtBQWtCQSxTQUFTLGNBQWMsVUFBNkM7QUFDbEUsU0FBTyxDQUFDLEVBQUUsVUFBVSxNQUFNO0FBQ3hCLFVBQU0sbUJBQW1CLFVBQVUsSUFBSSxDQUFDLGFBQWEsa0JBQWtCLFFBQVEsQ0FBQztBQUNoRixXQUFPLFNBQVMsUUFBUSxDQUFDLFlBQVksc0JBQXNCLFNBQVMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFBQSxFQUN2STtBQUNGO0FBa0JBLFNBQVMsa0JBQWtCLFVBQTBCO0FBQ25ELFFBQU0sZUFBZSxTQUFTLFFBQVEsSUFBSSxHQUFHLFFBQVE7QUFDckQsTUFBSSxtQkFBbUIsYUFBYSxXQUFXLElBQUksS0FBSyxXQUFXLFlBQVksSUFBSSxXQUFXLGNBQWMsV0FBVyxNQUFNLEdBQUc7QUFDaEksTUFBSSxnQkFBZ0IsV0FBVyxHQUFHLEdBQUc7QUFDbkMsc0JBQWtCLEtBQUssZUFBZTtBQUFBLEVBQ3hDO0FBQ0EsU0FBTyxnQkFBZ0IsV0FBVyxxQ0FBcUMsR0FBRztBQUM1RTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbm8tc3RhZ2VkLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIGZvciBwcmUtY29tbWl0IGhvb2tzLlxuICovXG5cbmltcG9ydCB7XG4gIGlzQWJzb2x1dGUsXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBpc0VudlZhcmlhYmxlT2ZmLFxuICBsb2FkRW52RmlsZUlmRXhpc3RzXG59IGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5pbXBvcnQge1xuICBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aCxcbiAgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RoXG59IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb25TeW5jIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZU1hbmFnZXJSdW5Db21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXBvLXNwZWNpZmljIGZpbGUtcmV3cml0aW5nIHRhc2tzLCBrZXllZCBieSB0aGUgbmFuby1zdGFnZWQgcGF0dGVybiB0aGF0IGNsYWltcyB0aGVpciBmaWxlcy5cbiAgICpcbiAgICogRWFjaCBnZXRzIHNwZWxsY2hlY2sgYXBwZW5kZWQgYW5kIGl0cyBmaWxlcyByZW1vdmVkIGZyb20gdGhlIHNwZWxsY2hlY2stb25seSBrZXksIGV4YWN0bHkgbGlrZSB0aGUgc2hhcmVkXG4gICAqIHdyaXRlcnMuIEEgcGF0dGVybiBtdXN0IG5vdCBjb250YWluIGAvYCwgYW5kIG11c3Qgbm90IHJlcGVhdCBhIHNoYXJlZCB3cml0ZXIgcGF0dGVybi4gRWFjaCBjb21tYW5kIGlzIGFcbiAgICogcHJlZml4IHRoZSBzdGFnZWQgcGF0aHMgYXJlIGFwcGVuZGVkIHRvLCBpbiBiYXRjaGVzLCBsaWtlIHRoZSBzaGFyZWQgb25lcyAoYG5wbSBydW4gbGludDpmaXggLS1gKS5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxXcml0ZXJUYXNrcz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj47XG59XG5cbi8qKlxuICogQSBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIHdob3NlIGV2ZXJ5IGtleSBpcyBhIHtAbGluayBOYW5vU3RhZ2VkVGFza30uXG4gKi9cbmV4cG9ydCB0eXBlIE5hbm9TdGFnZWRDb25maWcgPSBSZWNvcmQ8c3RyaW5nLCBOYW5vU3RhZ2VkVGFzaz47XG5cbi8qKlxuICogQSBmdW5jdGlvbi12YWx1ZWQgbmFuby1zdGFnZWQgdGFzazogaXQgcmVjZWl2ZXMgdGhlIHN0YWdlZCBmaWxlcyBpdHMgcGF0dGVybiBjbGFpbXMgYW5kIHJldHVybnMgdGhlXG4gKiBjb21tYW5kcyB0byBydW4gb3ZlciB0aGVtLCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IHR5cGUgTmFub1N0YWdlZFRhc2sgPSAoY29udGV4dDogTmFub1N0YWdlZFRhc2tDb250ZXh0KSA9PiBzdHJpbmdbXTtcblxuLyoqXG4gKiBXaGF0IG5hbm8tc3RhZ2VkIHBhc3NlcyB0byBhIGZ1bmN0aW9uLXZhbHVlZCB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hbm9TdGFnZWRUYXNrQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aHMgb2YgdGhlIHN0YWdlZCBmaWxlcyB0aGUgdGFzaydzIHBhdHRlcm4gY2xhaW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZW5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgYDxtYW5hZ2VyPiBydW5gIHByZWZpeCBldmVyeSB0YXNrIGJlbG93IGlzIGJ1aWx0IG9uLCByZXNvbHZlZCBvbmNlIGZvciB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBEZXRlY3Rpb24gcHJvYmVzIGZvciBhIGxvY2tmaWxlIGJlc2lkZSBgcGFja2FnZS5qc29uYCwgc28gaXQgaXMgYSBoYW5kZnVsIG9mIGBleGlzdHNTeW5jYCBjYWxscyBhbmRcbiAqIG5vdGhpbmcgbW9yZSBcdTIwMTQgbm8gYC5lbnZgIHJlYWQgYW5kIG5vIGBwcm9jZXNzLmV4aXRgLCB3aGljaCBpcyB3aGF0IGxldHMgaXQgc2l0IGF0IG1vZHVsZSBzY29wZS5cbiAqL1xuY29uc3QgUEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EID0gZ2V0UGFja2FnZU1hbmFnZXJSdW5Db21tYW5kKCkuam9pbignICcpO1xuXG5jb25zdCBTUEVMTENIRUNLX1NDUklQVF9OQU1FID0gJ3NwZWxsY2hlY2snO1xuXG5jb25zdCBTUEVMTENIRUNLX0NPTU1BTkQgPSB0b1NjcmlwdENvbW1hbmQoU1BFTExDSEVDS19TQ1JJUFRfTkFNRSk7XG5cbi8qKlxuICogUm9vbSBsZWZ0IGluIGV2ZXJ5IGJhdGNoIGZvciB0aGUgcmVzb2x2ZWQgcGF0aCBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyJ3MgZXhlY3V0YWJsZS5cbiAqXG4gKiBuYW5vLXN0YWdlZCBydW5zIGBucG1gIGFzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBucG0uY21kYCAoYDxjb21zcGVjPiAvRCAvUyAvQyBcIjxwYXRoPlwiIFwiPGFyZz5cIiBcdTIwMjZgKSwgd2hpY2hcbiAqIHRoZSBiYXRjaCBjYW5ub3Qgc2VlLCBzbyBhIGZ1bGwgV2luZG93cyBgTUFYX1BBVEhgIGlzIHNldCBhc2lkZSBmb3IgaXQuXG4gKi9cbmNvbnN0IEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFID0gMjYwO1xuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXJzIG5hbm8tc3RhZ2VkJ3MgY29tbWFuZCB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IGluc2lkZSBhbiBhcmd1bWVudC5cbiAqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCB0YXNrIHJldHVybnMgaXRzIGNvbW1hbmRzIGFzIFNUUklOR1MsIGFuZCBuYW5vLXN0YWdlZCBzcGxpdHMgZWFjaCBvbmUgd2l0aFxuICogYHN0cmluZ0FyZ3ZUb0FycmF5YCwgd2hpY2ggZW1pdHMgYSBxdW90ZWQgdG9rZW4gdHdpY2UgKG9uY2UgYmFyZSwgb25jZSB3aXRoIGl0cyBxdW90ZXMpIGFuZCBoYXMgbm8gZXNjYXBlLlxuICogU28gYSBwYXRoIGhvbGRpbmcgd2hpdGVzcGFjZSBvciBhIHF1b3RlIGNhbm5vdCBiZSBwYXNzZWQgYXMgaXRzZWxmLlxuICovXG5jb25zdCBUT0tFTklaRVJfVU5TQUZFX0NIQVJBQ1RFUlNfUkVHX0VYUCA9IC9bXFxzXCInXS9nO1xuXG4vKipcbiAqIFRoZSBucG0gc2NyaXB0cyB0aGF0IFJFV1JJVEUgYSBzdGFnZWQgZmlsZSwgaW4gdGhlIG9yZGVyIHRoZXkgcnVuLCBrZXllZCBieSB0aGUgbmFuby1zdGFnZWQgcGF0dGVybiB0aGF0XG4gKiBjbGFpbXMgaXQuXG4gKlxuICogYGxpbnQ6Zml4YCBhbmQgYGZvcm1hdGAgYm90aCByZXdyaXRlIHRoZSBmaWxlLCBzbyB0aGV5IGhhdmUgdG8gc2hhcmUgb25lIGtleTogbmFuby1zdGFnZWQgcnVucyBpdHNcbiAqIHBlci1wYXR0ZXJuIGdyb3VwcyB1bmRlciBgUHJvbWlzZS5hbGxgIChgcnVuKClgIGluIGBuYW5vLXN0YWdlZC9saWIvY21kLXJ1bm5lci5qc2ApLCBhbmQgc2VxdWVuY2VzIG9ubHlcbiAqIHRoZSBjb21tYW5kcyBJTlNJREUgYSBzaW5nbGUga2V5J3MgYXJyYXkgKGBydW5UYXNrKClgLCBhIGBmb3IgLi4uIG9mIGF3YWl0YCkuIFNwbGl0IGFjcm9zcyB0d28ga2V5cyB0aGV5XG4gKiByYWNlLCB3aGljaGV2ZXIgZmluaXNoZXMgbGFzdCB3aW5zLCBhbmQgdGhlIGNvbW1pdCBzdGFnZXMgYnl0ZXMgdGhhdCBuZWl0aGVyIHRvb2wgd291bGQgaGF2ZSBwcm9kdWNlZCBvblxuICogaXRzIG93bi5cbiAqXG4gKiBTbyBkbyBOT1QgZXhwcmVzcyBhIGRpcmVjdG9yeSBleGNsdXNpb24gYnkgZ2l2aW5nIG9uZSBvZiB0aGVzZSB0d28gaXRzIG93biBuZWdhdGVkIGtleSAtLSB0aGF0IHNpbGVudGx5XG4gKiB0YWtlcyB0aGUgb3JkZXJpbmcgYXdheS4gQW4gZXhjbHVzaW9uIGJlbG9uZ3MgaW4gdGhlIGV4Y2x1ZGVkIHRvb2wncyBvd24gY29uZmlnLCB3aGVyZSBFU0xpbnQnc1xuICogYGdsb2JhbElnbm9yZXNgIGFscmVhZHkgcHV0cyBpdDogYSBwYXRoIEVTTGludCBpZ25vcmVzIGlzIHJlcG9ydGVkIGFzIGEgd2FybmluZyBhbmQgZXhpdHMgMCB3aGVuIGl0IGlzXG4gKiBwYXNzZWQgZXhwbGljaXRseSwgc28gaXQgY29zdHMgYSBjb25zb2xlIGxpbmUgcmF0aGVyIHRoYW4gYSBmYWlsZWQgY29tbWl0IGFuZCBuZWVkcyBubyBrZXkgaGVyZS5cbiAqL1xuY29uc3QgV1JJVEVSX1NDUklQVF9OQU1FUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+PiA9IHtcbiAgJyoue3RzLHRzeCxtdHN9JzogWydsaW50OmZpeCcsICdmb3JtYXQnXSxcbiAgJyoubWQnOiBbJ2xpbnQ6bWQ6Zml4J11cbn07XG5cbmNvbnN0IFdSSVRFUl9UQVNLUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+PiA9IHRvV3JpdGVyVGFza3MoKCkgPT4gdHJ1ZSk7XG5cbi8qKlxuICogTmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0aGF0IHJ1bnMgZmlsZS1iYXNlZCBsaW50LCBmb3JtYXQsIGFuZCBzcGVsbGNoZWNrIG9uIHN0YWdlZCBmaWxlcy5cbiAqXG4gKiBPbmx5IGluY2x1ZGVzIHRvb2xzIHRoYXQgY2FuIG9wZXJhdGUgb24gaW5kaXZpZHVhbCBmaWxlcy4gV2hvbGUtcHJvamVjdCBjaGVja3NcbiAqIChUeXBlU2NyaXB0IGNvbXBpbGF0aW9uLCB1bml0IHRlc3RzKSBhcmUgbGVmdCB0byBDSS5cbiAqXG4gKiBDb21tYW5kcyBydW4gdGhyb3VnaCB0aGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZSBcdTIwMTQgYG5wbSBydW4gLi4uIC0tYCwgYGJ1biBydW4gLi4uIC0tYCwgYW5kXG4gKiBzbyBvbiBcdTIwMTQgc28gbmFuby1zdGFnZWQgZmlsZSBwYXRocyBhcmUgZm9yd2FyZGVkIGFzIENMSSBhcmd1bWVudHMsIGJhdGNoZWQgdG8gZml0IHRoZSBjb21tYW5kIGxpbmUgKHNlZVxuICogYHRvQmF0Y2hlZFRhc2tgKS5cbiAqXG4gKiBTcGVsbGNoZWNrIGlzIHBhcnRpdGlvbmVkIGFjcm9zcyB0aGUga2V5cyByYXRoZXIgdGhhbiBnaXZlbiBhIGNhdGNoLWFsbCBgJyonYCBrZXkgKHNlZVxuICogYHBhcnRpdGlvblNwZWxsY2hlY2tgKS4gQSByZXBvIGFkZGluZyBhIGZpbGUtcmV3cml0aW5nIHRhc2sgb2YgaXRzIG93biBwYXNzZXMgaXQgdG9cbiAqIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfSBhcyBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCByYXRoZXIgdGhhbiBzcHJlYWRpbmcgdGhpcyBvYmplY3QgYW5kIGFkZGluZyBhIGtleSxcbiAqIHdoaWNoIHdvdWxkIHJlaW50cm9kdWNlIHRoZSBvdmVybGFwIGZvciB0aGF0IGtleSdzIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTmFub1N0YWdlZENvbmZpZyA9IHBhcnRpdGlvblNwZWxsY2hlY2soV1JJVEVSX1RBU0tTLCB0cnVlKTtcblxuY29uc3QgTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFID0gJ05BTk9fU1RBR0VEJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0byB1c2UsIGhvbm9yaW5nIGEgcGVyLWRldmVsb3BlciBvcHQtb3V0LlxuICpcbiAqIExvYWRzIGEgZ2l0aWdub3JlZCBgLmVudmAgaWYgcHJlc2VudCwgdGhlbiBcdTIwMTQgd2hlbiBgTkFOT19TVEFHRURgIGlzIHNldCB0byBhbiBvZmYgdmFsdWUgKGAwYCwgYGZhbHNlYCxcbiAqIGBvZmZgLCBvciBgbm9gKSBcdTIwMTQgcHJpbnRzIGEgbm90aWNlIGFuZCBleGl0cyB0aGUgcHJvY2VzcyBzdWNjZXNzZnVsbHkgc28gdGhlIHByZS1jb21taXQgY2hlY2tzIGFyZVxuICogc2tpcHBlZC4gVGhpcyBtaXJyb3JzIGh1c2t5J3Mgb3duIGBIVVNLWT0wYCBzd2l0Y2gsIGJ1dCBzY29wZWQgdG8gdGhlIG5hbm8tc3RhZ2VkIHN0ZXAgKHNvIHRoZVxuICogY29tbWl0LW1zZyBob29rIHN0aWxsIHJ1bnMpLiBPdGhlcndpc2UgaXQgcmV0dXJucyB7QGxpbmsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZ30sIG9yIFx1MjAxNCB3aGVuXG4gKiBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgZ2l2ZW4gXHUyMDE0IHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gcmUtcGFydGl0aW9uZWQgd2l0aCB0aG9zZSB3cml0ZXJzIGFkZGVkLlxuICpcbiAqIEEgc2hhcmVkIHRhc2sgd2hvc2UgbnBtIHNjcmlwdCB0aGUgcHJvamVjdCdzIGBwYWNrYWdlLmpzb25gIGRvZXMgbm90IGRlY2xhcmUgaXMgbGVmdCBvdXQsIHNvIGEgcHJvamVjdFxuICogd2l0aG91dCwgc2F5LCBtYXJrZG93bmxpbnQgZG9lcyBub3QgZmFpbCBpdHMgZmlyc3QgY29tbWl0IHRoYXQgc3RhZ2VzIGEgYC5tZGAgZmlsZSBvbiBhIG1pc3Npbmcgc2NyaXB0LiBBXG4gKiB3cml0ZXIgcGF0dGVybiBsZWZ0IHdpdGggbm8gd3JpdGVyIGlzIGRyb3BwZWQsIGFuZCBzcGVsbGNoZWNrIHJ1bnMgb25seSB3aGVuIGBzcGVsbGNoZWNrYCBpcyBkZWNsYXJlZCwgaW5cbiAqIHdoaWNoIGNhc2UgaXRzIGZpbGVzIGZhbGwgdG8gdGhlIHNwZWxsY2hlY2stb25seSBrZXkuIFRoZSBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgdGhlIGNhbGxlcidzIG93biBhbmRcbiAqIGFyZSBrZXB0IGFzIGdpdmVuLlxuICpcbiAqIGBOQU5PX1NUQUdFRGAgaXMgbm90IGFuIG5wbSBzY3JpcHQsIHNvIGl0IGNhcnJpZXMgaXRzIG93biBzd2l0Y2ggcmF0aGVyIHRoYW4gdGhlIHNjcmlwdC1uYW1lLWRlcml2ZWQgb25lXG4gKiBldmVyeSBucG0gc2NyaXB0IGdldHMgXHUyMDE0IGJ1dCBib3RoIHNoYXJlIHRoZSBzYW1lIG5vdGlvbiBvZiBhbiBvZmYgdmFsdWUsIHZpYSB7QGxpbmsgaXNFbnZWYXJpYWJsZU9mZn0uXG4gKlxuICogVGhpcyBpcyBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIG1vZHVsZS1sZXZlbCBjb2RlIHNvIGltcG9ydGluZyB0aGUgcGFja2FnZSBiYXJyZWwgbmV2ZXIgdHJpZ2dlcnMgdGhlXG4gKiBgLmVudmAgcmVhZCBvciB0aGUgcHJvY2VzcyBleGl0OyBjYWxsIGl0IGZyb20gdGhlIHRoaW4gYHNjcmlwdHMvbmFuby1zdGFnZWQtY29uZmlnLnRzYCBlbnRyeS4gUmVzb2x2aW5nIHRoZVxuICogcGFja2FnZSBtYW5hZ2VyIGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBkb2VzIHJ1biBhdCBtb2R1bGUgc2NvcGUsIGFuZCBpdCBkb2VzIG5laXRoZXIgb2YgdGhvc2UgdHdvXG4gKiB0aGluZ3MgXHUyMDE0IGl0IG9ubHkgcHJvYmVzIGZvciBhIGxvY2tmaWxlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbmFsIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgbmFuby1zdGFnZWQgdGFzayBjb25maWd1cmF0aW9uLiBEb2VzIG5vdCByZXR1cm4gd2hlbiB0aGUgb3B0LW91dCBpcyBhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW5vU3RhZ2VkQ29uZmlnKG9wdGlvbnM/OiBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyk6IE5hbm9TdGFnZWRDb25maWcge1xuICBsb2FkRW52RmlsZUlmRXhpc3RzKCk7XG5cbiAgaWYgKGlzRW52VmFyaWFibGVPZmYoTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFKSkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBuYW5vLXN0YWdlZDogc2tpcHBlZCAoJHtOQU5PX1NUQUdFRF9FTlZfVkFSSUFCTEV9IGlzIG9mZikuXFxuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgY29uc3Qgc2NyaXB0TmFtZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHJlYWRQYWNrYWdlSnNvblN5bmMoKS5zY3JpcHRzID8/IHt9KSk7XG4gIGNvbnN0IGhhc0FsbFNoYXJlZFNjcmlwdHMgPSBbU1BFTExDSEVDS19TQ1JJUFRfTkFNRSwgLi4uT2JqZWN0LnZhbHVlcyhXUklURVJfU0NSSVBUX05BTUVTKS5mbGF0KCldXG4gICAgLmV2ZXJ5KChzY3JpcHROYW1lKSA9PiBzY3JpcHROYW1lcy5oYXMoc2NyaXB0TmFtZSkpO1xuICBjb25zdCBhZGRpdGlvbmFsV3JpdGVyVGFza3MgPSBvcHRpb25zPy5hZGRpdGlvbmFsV3JpdGVyVGFza3MgPz8ge307XG4gIGlmIChoYXNBbGxTaGFyZWRTY3JpcHRzICYmIE9iamVjdC5rZXlzKGFkZGl0aW9uYWxXcml0ZXJUYXNrcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9ic2lkaWFuRGV2VXRpbHNDb25maWc7XG4gIH1cblxuICBjb25zdCB3cml0ZXJUYXNrcyA9IHRvV3JpdGVyVGFza3MoKHNjcmlwdE5hbWUpID0+IHNjcmlwdE5hbWVzLmhhcyhzY3JpcHROYW1lKSk7XG4gIGNvbnN0IGR1cGxpY2F0ZVBhdHRlcm4gPSBPYmplY3Qua2V5cyhhZGRpdGlvbmFsV3JpdGVyVGFza3MpLmZpbmQoKHBhdHRlcm4pID0+IE9iamVjdC5oYXNPd24od3JpdGVyVGFza3MsIHBhdHRlcm4pKTtcbiAgaWYgKGR1cGxpY2F0ZVBhdHRlcm4gIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbmFuby1zdGFnZWQgd3JpdGVyIHBhdHRlcm4gJyR7ZHVwbGljYXRlUGF0dGVybn0nIGlzIGFscmVhZHkgYSBzaGFyZWQgd3JpdGVyIHBhdHRlcm4uYCk7XG4gIH1cblxuICByZXR1cm4gcGFydGl0aW9uU3BlbGxjaGVjayh7IC4uLndyaXRlclRhc2tzLCAuLi5hZGRpdGlvbmFsV3JpdGVyVGFza3MgfSwgc2NyaXB0TmFtZXMuaGFzKFNQRUxMQ0hFQ0tfU0NSSVBUX05BTUUpKTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgY29tbWFuZCBhcmd1bWVudHMgaW50byBiYXRjaGVzIHRoYXQgZWFjaCBmaXQgb25lIGNvbW1hbmQgbGluZSBhZnRlciBhIGdpdmVuIHByZWZpeC5cbiAqXG4gKiBFYWNoIGFyZ3VtZW50IGlzIGNvc3RlZCBhcyBuYW5vLXN0YWdlZCBwYXNzZXMgaXQgb24gV2luZG93cyBcdTIwMTQgcXVvdGVkLCB0aGVuIGBeYC1lc2NhcGVkIGJ5IGBjbWQuZXhlYCdzXG4gKiBydWxlcyBcdTIwMTQgdGhyb3VnaCB7QGxpbmsgZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGh9LCBhbmQgdGhlIGJ1ZGdldCBpcyB7QGxpbmsgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RofSxcbiAqIHdoaWNoIGFscmVhZHkgaG9sZHMgYmFjayB0aGUgcmVzZXJ2ZSBmb3IgdGhlIGBucG1gIFx1MjE5MiBgY21kLmV4ZWAgXHUyMTkyIGAuYmluYCBzaGltIGNoYWluIHJlLWV4cGFuZGluZyB0aGVcbiAqIGFyZ3VtZW50cy4gQW4gYXJndW1lbnQgdG9vIGxvbmcgZm9yIGFueSBiYXRjaCBzdGlsbCBnZXRzIGEgYmF0Y2ggb2YgaXRzIG93bjogaXQgZmFpbHMgbG91ZGx5IHRoZXJlLCB3aGljaFxuICogZHJvcHBpbmcgaXQgd291bGQgbm90LlxuICpcbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgY29tbWFuZCB0aGUgYXJndW1lbnRzIGFyZSBhcHBlbmRlZCB0by5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0byBzcGxpdC5cbiAqIEByZXR1cm5zIFRoZSBiYXRjaGVzLCBpbiBvcmRlciwgdG9nZXRoZXIgaG9sZGluZyBldmVyeSBhcmd1bWVudCBvbmNlLlxuICovXG5mdW5jdGlvbiBiYXRjaENvbW1hbmRBcmd1bWVudHMocHJlZml4OiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGVtcHR5TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoJycpO1xuICBjb25zdCBidWRnZXQgPSBnZXRNYXhCYXRjaENvbW1hbmRMZW5ndGgoKSAtIEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFIC0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgocHJlZml4KTtcbiAgY29uc3QgYmF0Y2hlczogc3RyaW5nW11bXSA9IFtdO1xuICBsZXQgYmF0Y2g6IHN0cmluZ1tdID0gW107XG4gIGxldCBiYXRjaExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCBjb21tYW5kQXJndW1lbnQgb2YgY29tbWFuZEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3VtZW50TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoYCBcIiR7Y29tbWFuZEFyZ3VtZW50fVwiYCkgLSBlbXB0eUxlbmd0aDtcbiAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCAmJiBiYXRjaExlbmd0aCArIGFyZ3VtZW50TGVuZ3RoID4gYnVkZ2V0KSB7XG4gICAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICAgICAgYmF0Y2ggPSBbXTtcbiAgICAgIGJhdGNoTGVuZ3RoID0gMDtcbiAgICB9XG4gICAgYmF0Y2gucHVzaChjb21tYW5kQXJndW1lbnQpO1xuICAgIGJhdGNoTGVuZ3RoICs9IGFyZ3VtZW50TGVuZ3RoO1xuICB9XG5cbiAgaWYgKGJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICB9XG5cbiAgcmV0dXJuIGJhdGNoZXM7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiBpbiB3aGljaCBzcGVsbGNoZWNrIG5ldmVyIHJlYWRzIGEgZmlsZSB3aGlsZSBhbm90aGVyIHRhc2sgcmV3cml0ZXMgaXQuXG4gKlxuICogVGhlIHNhbWUgYFByb21pc2UuYWxsYCB0aGF0IGZvcmNlcyB0d28gd3JpdGVycyBpbnRvIG9uZSBrZXkgbWFrZXMgYSBjYXRjaC1hbGwgYCcqJ2Agc3BlbGxjaGVjayBrZXkgcnVuXG4gKiBDT05DVVJSRU5UTFkgd2l0aCBldmVyeSB3cml0ZXIga2V5LCBzbyBjc3BlbGwgd291bGQgcmVhZCBhIGZpbGUgdGhhdCBFU0xpbnQgb3IgZHByaW50IGlzIHJld3JpdGluZyBpblxuICogcGxhY2UgLS0gYSBzcHVyaW91cyBmaW5kaW5nIG9uIGEgaGFsZi13cml0dGVuIGZpbGUsIG9yIGEgcGFzcyBvdmVyIGNvbnRlbnQgdGhhdCBpcyBub3Qgd2hhdCBnZXRzXG4gKiBjb21taXR0ZWQuIFNvIHRoZSBzdGFnZWQgZmlsZXMgYXJlIFBBUlRJVElPTkVEIGluc3RlYWQ6XG4gKlxuICogLSBldmVyeSB3cml0ZXIga2V5IGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhcyBpdHMgTEFTVCBjb21tYW5kLCBzbyBpdCByZWFkcyB0aGF0IGtleSdzIGZpbGVzIGFmdGVyIHRoZXlcbiAqICAgaGF2ZSBiZWVuIHJld3JpdHRlbjtcbiAqIC0gb25lIGNvbXBsZW1lbnQga2V5IHNwZWxsY2hlY2tzIGV4YWN0bHkgdGhlIGZpbGVzIG5vIHdyaXRlciBrZXkgY2xhaW1zLlxuICpcbiAqIFRoZSBjb21wbGVtZW50IGlzIHdyaXR0ZW4gaW4gbmFuby1zdGFnZWQncyBvd24gZ2xvYiBkaWFsZWN0LCB3aGljaCBjb21waWxlcyBgISguLi4pYCB0byBhIGxvb2thaGVhZCB0aGF0XG4gKiBpcyBOT1QgYW5jaG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aDogYCEoKi5tZCkqYCB3b3VsZCBleGNsdWRlIGBub3Rlcy5tZC5iYWtgIHRvby4gQSBuZXN0ZWQgYCEoPylgXG4gKiBjb21waWxlcyB0byBgKD8hLilgLCB3aGljaCBJUyBhbiBlbmQgYW5jaG9yLCBzbyBlYWNoIGFsdGVybmF0aXZlIGlzIHN1ZmZpeGVkIHdpdGggaXQuIEEgd3JpdGVyIHBhdHRlcm5cbiAqIGNvbnRhaW5pbmcgYC9gIHdvdWxkIHN3aXRjaCBuYW5vLXN0YWdlZCBpbnRvIGdsb2JzdGFyIG1vZGUsIHdoZXJlIGAqYCBzdG9wcyBjcm9zc2luZyBkaXJlY3RvcmllcyBhbmQgdGhlXG4gKiBjb25zdHJ1Y3Rpb24gbm8gbG9uZ2VyIGhvbGRzIC0tIGhlbmNlIHRoZSB0aHJvdy4gVGhlIHVuaXQgdGVzdCBwaW5zIHRoZSBwYXJ0aXRpb24gYWdhaW5zdCB0aGUgaW5zdGFsbGVkXG4gKiBuYW5vLXN0YWdlZCBjb21waWxlciwgc28gYSByZWxlYXNlIHRoYXQgY2hhbmdlcyBpdHMgZGlhbGVjdCBmYWlscyB0aGVyZSByYXRoZXIgdGhhbiBpbiBhIGNvbW1pdC5cbiAqXG4gKiBXaXRob3V0IHNwZWxsY2hlY2sgdGhlcmUgaXMgbm90aGluZyB0byBwYXJ0aXRpb246IGVhY2ggd3JpdGVyIGtleSBydW5zIGl0cyBvd24gY29tbWFuZHMsIGFuZCBubyBjb21wbGVtZW50XG4gKiBrZXkgaXMgZW1pdHRlZC5cbiAqXG4gKiBAcGFyYW0gd3JpdGVyVGFza3MgLSBUaGUgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICogQHBhcmFtIHNob3VsZFNwZWxsY2hlY2sgLSBXaGV0aGVyIHRoZSBwcm9qZWN0IGhhcyBhIGBzcGVsbGNoZWNrYCBzY3JpcHQgdG8gcnVuLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIHdpdGggdGhlIHNwZWxsY2hlY2sgc3RlcCBwYXJ0aXRpb25lZCBhY3Jvc3MgdGhlIGtleXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvblNwZWxsY2hlY2sod3JpdGVyVGFza3M6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4sIHNob3VsZFNwZWxsY2hlY2s6IGJvb2xlYW4pOiBOYW5vU3RhZ2VkQ29uZmlnIHtcbiAgaWYgKCFzaG91bGRTcGVsbGNoZWNrKSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh3cml0ZXJUYXNrcykubWFwKChbcGF0dGVybiwgY29tbWFuZHNdKSA9PiBbcGF0dGVybiwgdG9CYXRjaGVkVGFzayhjb21tYW5kcyldKSk7XG4gIH1cblxuICBjb25zdCBwYXR0ZXJucyA9IE9iamVjdC5rZXlzKHdyaXRlclRhc2tzKTtcbiAgY29uc3QgcGF0dGVybldpdGhTbGFzaCA9IHBhdHRlcm5zLmZpbmQoKHBhdHRlcm4pID0+IHBhdHRlcm4uaW5jbHVkZXMoJy8nKSk7XG4gIGlmIChwYXR0ZXJuV2l0aFNsYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5hbm8tc3RhZ2VkIHdyaXRlciBwYXR0ZXJuICcke3BhdHRlcm5XaXRoU2xhc2h9JyBjb250YWlucyAnLycsIHdoaWNoIHRoZSBzcGVsbGNoZWNrIHBhcnRpdGlvbiBjYW5ub3QgZXhwcmVzcy5gKTtcbiAgfVxuXG4gIC8vIGAhKCkqYCB3b3VsZCBjb21waWxlIHRvIGEgbG9va2FoZWFkIHRoYXQgcmVqZWN0cyBldmVyeSBwYXRoLCBzbyB3aXRoIG5vIHdyaXRlciB0aGUgY29tcGxlbWVudCBpcyBldmVyeXRoaW5nLlxuICBjb25zdCBjb21wbGVtZW50UGF0dGVybiA9IHBhdHRlcm5zLmxlbmd0aCA9PT0gMCA/ICcqJyA6IGAhKCR7cGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBgJHtwYXR0ZXJufSEoPylgKS5qb2luKCd8Jyl9KSpgO1xuICBjb25zdCBjb25maWc6IE5hbm9TdGFnZWRDb25maWcgPSB7XG4gICAgW2NvbXBsZW1lbnRQYXR0ZXJuXTogdG9CYXRjaGVkVGFzayhbU1BFTExDSEVDS19DT01NQU5EXSlcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBjb21tYW5kc10gb2YgT2JqZWN0LmVudHJpZXMod3JpdGVyVGFza3MpKSB7XG4gICAgY29uZmlnW3BhdHRlcm5dID0gdG9CYXRjaGVkVGFzayhbLi4uY29tbWFuZHMsIFNQRUxMQ0hFQ0tfQ09NTUFORF0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB0YXNrIHRoYXQgcnVucyBlYWNoIGNvbW1hbmQgb3ZlciBldmVyeSBzdGFnZWQgZmlsZSBpdCByZWNlaXZlcywgaW4gYXMgbWFueSBiYXRjaGVzIGFzIHRoZSBjb21tYW5kXG4gKiBsaW5lIG5lZWRzLlxuICpcbiAqIG5hbm8tc3RhZ2VkIGFwcGVuZHMgYSBzdHJpbmcgdGFzaydzIGZpbGVzIHRvIE9ORSBjb21tYW5kLCBzbyBhIGNvbW1pdCBzdGFnaW5nIGEgZmV3IGh1bmRyZWQgZmlsZXMgcmFuXG4gKiBgbnBtIHJ1biBsaW50OmZpeCAtLSA8ZXZlcnkgcGF0aD5gIGFuZCBmYWlsZWQgb24gV2luZG93cyB3aXRoIGBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nLmAsIHJlZnVzaW5nXG4gKiBleGFjdGx5IHRoZSB3aG9sZS1yZXBvIGNvbW1pdHMgdGhhdCBtb3N0IG5lZWQgdGhlIGhvb2suIEEgZnVuY3Rpb24tdmFsdWVkIHRhc2sgYnVpbGRzIGl0cyBvd24gY29tbWFuZHNcbiAqIGluc3RlYWQsIGFuZCB0aGVzZSBhcmUgYmF0Y2hlZCBhZ2FpbnN0IHRoZSBzYW1lIGJ1ZGdldCBgZXhlYygpYCB1c2VzIChzZWUgYGJhdGNoQ29tbWFuZEFyZ3VtZW50c2ApLlxuICpcbiAqIFRoZSBjb21tYW5kcyBrZWVwIHRoZWlyIG9yZGVyOiBldmVyeSBiYXRjaCBvZiB0aGUgZmlyc3QgY29tbWFuZCBydW5zIGJlZm9yZSBhbnkgYmF0Y2ggb2YgdGhlIHNlY29uZCxcbiAqIGJlY2F1c2UgbmFuby1zdGFnZWQgcnVucyBvbmUga2V5J3MgY29tbWFuZHMgb25lIGFmdGVyIGFub3RoZXIsIHNvIGEgd3JpdGVyIHN0aWxsIGZpbmlzaGVzIGJlZm9yZSB0aGUgbmV4dFxuICogd3JpdGVyLCBhbmQgc3BlbGxjaGVjayBzdGlsbCByZWFkcyB0aGUgcmV3cml0dGVuIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBjb21tYW5kIHByZWZpeGVzLCBpbiB0aGUgb3JkZXIgdGhleSBydW4uXG4gKiBAcmV0dXJucyBUaGUgdGFzay5cbiAqL1xuZnVuY3Rpb24gdG9CYXRjaGVkVGFzayhjb21tYW5kczogcmVhZG9ubHkgc3RyaW5nW10pOiBOYW5vU3RhZ2VkVGFzayB7XG4gIHJldHVybiAoeyBmaWxlbmFtZXMgfSkgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRBcmd1bWVudHMgPSBmaWxlbmFtZXMubWFwKChmaWxlbmFtZSkgPT4gdG9Db21tYW5kQXJndW1lbnQoZmlsZW5hbWUpKTtcbiAgICByZXR1cm4gY29tbWFuZHMuZmxhdE1hcCgoY29tbWFuZCkgPT4gYmF0Y2hDb21tYW5kQXJndW1lbnRzKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMpLm1hcCgoYmF0Y2gpID0+IGAke2NvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWApKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUdXJucyBhIHN0YWdlZCBmaWxlJ3MgYWJzb2x1dGUgcGF0aCBpbnRvIHRoZSBhcmd1bWVudCBhIGJhdGNoZWQgdGFzayBwYXNzZXMgZm9yIGl0LlxuICpcbiAqIFRoZSBwYXRoIGlzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB3aGVyZSBuYW5vLXN0YWdlZCBhbmQgdGhlIHRhc2sgYm90aCBydW4sIHdoaWNoIHJvdWdobHlcbiAqIGhhbHZlcyBpdHMgbGVuZ3RoIGFuZCBzbyB0aGUgbnVtYmVyIG9mIGJhdGNoZXM7IGEgcGF0aCBvdXRzaWRlIGl0IHN0YXlzIGFic29sdXRlLiBBIHJlbGF0aXZlIHBhdGggc3RhcnRpbmdcbiAqIHdpdGggYC1gIGdldHMgYC4vYCwgc28gbm8gdG9vbCByZWFkcyBpdCBhcyBhbiBvcHRpb24uXG4gKlxuICogV2hpdGVzcGFjZSBhbmQgcXVvdGVzIGJlY29tZSBgP2AsIGJlY2F1c2UgbmFuby1zdGFnZWQncyB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IHRoZW0gKHNlZVxuICoge0BsaW5rIFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQfSkuIEV2ZXJ5IHRvb2wgdGhlIHRhc2tzIHJ1biAoRVNMaW50LCBkcHJpbnQsIGNzcGVsbCxcbiAqIG1hcmtkb3dubGludC1jbGkyKSB0YWtlcyBpdHMgcGF0aHMgYXMgZ2xvYnMsIGFuZCBgP2AgbWF0Y2hlcyBleGFjdGx5IHRoZSBvbmUgY2hhcmFjdGVyIGl0IHJlcGxhY2VkLCBzbyB0aGVcbiAqIGZpbGUgaXMgc3RpbGwgZm91bmQ7IGEgc2libGluZyBkaWZmZXJpbmcgb25seSBpbiB0aGF0IGNoYXJhY3RlciB3b3VsZCBtYXRjaCB0b28sIHdoaWNoIGNvc3RzIGEgbGludCBvZiBhblxuICogZXh0cmEgZmlsZSwgbm90IGEgbWlzc2VkIG9uZS5cbiAqXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc3RhZ2VkIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZEFyZ3VtZW50KGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlbmFtZSk7XG4gIGxldCBjb21tYW5kQXJndW1lbnQgPSAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJykgfHwgaXNBYnNvbHV0ZShyZWxhdGl2ZVBhdGgpID8gZmlsZW5hbWUgOiByZWxhdGl2ZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBpZiAoY29tbWFuZEFyZ3VtZW50LnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbW1hbmRBcmd1bWVudCA9IGAuLyR7Y29tbWFuZEFyZ3VtZW50fWA7XG4gIH1cbiAgcmV0dXJuIGNvbW1hbmRBcmd1bWVudC5yZXBsYWNlQWxsKFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQLCAnPycpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZCBwcmVmaXggdGhhdCBydW5zIGFuIG5wbSBzY3JpcHQgb3ZlciB0aGUgcGF0aHMgYXBwZW5kZWQgdG8gaXQuXG4gKlxuICogQHBhcmFtIHNjcmlwdE5hbWUgLSBUaGUgc2NyaXB0IG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBwcmVmaXgsIHN1Y2ggYXMgYG5wbSBydW4gbGludDpmaXggLS1gLlxuICovXG5mdW5jdGlvbiB0b1NjcmlwdENvbW1hbmQoc2NyaXB0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gJHtzY3JpcHROYW1lfSAtLWA7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzaGFyZWQgd3JpdGVyIHRhc2tzIGZyb20ge0BsaW5rIFdSSVRFUl9TQ1JJUFRfTkFNRVN9LCBrZWVwaW5nIG9ubHkgdGhlIHNjcmlwdHMgYSBmaWx0ZXIgYWNjZXB0c1xuICogYW5kIGRyb3BwaW5nIGEgcGF0dGVybiBsZWZ0IHdpdGggbm9uZS5cbiAqXG4gKiBAcGFyYW0gc2hvdWxkSW5jbHVkZVNjcmlwdCAtIFdoZXRoZXIgdG8gcnVuIGEgZ2l2ZW4gc2NyaXB0LlxuICogQHJldHVybnMgVGhlIHdyaXRlciB0YXNrcywga2V5ZWQgYnkgdGhlIHBhdHRlcm4gdGhhdCBjbGFpbXMgdGhlaXIgZmlsZXMuXG4gKi9cbmZ1bmN0aW9uIHRvV3JpdGVyVGFza3Moc2hvdWxkSW5jbHVkZVNjcmlwdDogKHNjcmlwdE5hbWU6IHN0cmluZykgPT4gYm9vbGVhbik6IFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPiB7XG4gIGNvbnN0IHdyaXRlclRhc2tzOiBSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4gPSB7fTtcbiAgZm9yIChjb25zdCBbcGF0dGVybiwgc2NyaXB0TmFtZXNdIG9mIE9iamVjdC5lbnRyaWVzKFdSSVRFUl9TQ1JJUFRfTkFNRVMpKSB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBzY3JpcHROYW1lcy5maWx0ZXIoKHNjcmlwdE5hbWUpID0+IHNob3VsZEluY2x1ZGVTY3JpcHQoc2NyaXB0TmFtZSkpLm1hcCgoc2NyaXB0TmFtZSkgPT4gdG9TY3JpcHRDb21tYW5kKHNjcmlwdE5hbWUpKTtcbiAgICBpZiAoY29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgd3JpdGVyVGFza3NbcGF0dGVybl0gPSBjb21tYW5kcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdyaXRlclRhc2tzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sYUFBYTtBQUVwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxtQ0FBbUM7QUEyQzVDLE1BQU0sOEJBQThCLDRCQUE0QixFQUFFLEtBQUssR0FBRztBQUUxRSxNQUFNLHlCQUF5QjtBQUUvQixNQUFNLHFCQUFxQixnQkFBZ0Isc0JBQXNCO0FBUWpFLE1BQU0sMEJBQTBCO0FBU2hDLE1BQU0sc0NBQXNDO0FBaUI1QyxNQUFNLHNCQUFtRTtBQUFBLEVBQ3ZFLGtCQUFrQixDQUFDLFlBQVksUUFBUTtBQUFBLEVBQ3ZDLFFBQVEsQ0FBQyxhQUFhO0FBQ3hCO0FBRUEsTUFBTSxlQUE0RCxjQUFjLE1BQU0s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
|
package/package.json
CHANGED