gitlab-ci-local 4.56.1 → 4.56.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/index.js +2 -2
- package/src/job.js +21 -19
- package/src/parser.js +2 -2
- package/src/variables-from-files.js +3 -3
package/src/parser.js
CHANGED
|
@@ -151,7 +151,7 @@ export class Parser {
|
|
|
151
151
|
baseName: jobName,
|
|
152
152
|
globalVariables: gitlabData.variables,
|
|
153
153
|
pipelineIid: pipelineIid,
|
|
154
|
-
predefinedVariables,
|
|
154
|
+
predefinedVariables: { ...predefinedVariables }, // NOTE: pass by value because predefinedVariables is mutated in the constructor
|
|
155
155
|
gitData,
|
|
156
156
|
variablesFromFiles,
|
|
157
157
|
matrixVariables: parallelMatrixVariables,
|
|
@@ -356,4 +356,4 @@ function getExpectedInputType(ctx) {
|
|
|
356
356
|
const { interpolationKey, inputsSpecification } = ctx;
|
|
357
357
|
return inputsSpecification.spec.inputs[interpolationKey]?.type || "string";
|
|
358
358
|
}
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM3QixPQUFPLEtBQUssWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDakMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFDLElBQUksSUFBSSx1QkFBdUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRTFFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLDhCQUE4QixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFHekYsTUFBTSxPQUFPLE1BQU07SUFFUCxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLFdB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Q0FBQztJQUNwQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFFLEdBQVE7SUFDNUIsTUFBTSxFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUMsR0FBRyxHQUFHLENBQUM7SUFDNUUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMxRyxNQUFNLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxLQUFLLENBQUEsMERBQTBELGNBQWMsc0JBQXNCLGdCQUFnQixrREFBa0QsQ0FBQyxDQUFDO0lBQ3hNLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFFLEdBQVE7SUFDbkMsTUFBTSxFQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3BELE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksSUFBSSxRQUFRLENBQUM7QUFDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZGVlcEV4dGVuZCBmcm9tIFwiZGVlcC1leHRlbmRcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSBcImpzLXlhbWxcIjtcbmltcG9ydCBwcmV0dHlIcnRpbWUgZnJvbSBcInByZXR0eS1ocnRpbWVcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2IuanNcIjtcbmltcG9ydCAqIGFzIERhdGFFeHBhbmRlciBmcm9tIFwiLi9kYXRhLWV4cGFuZGVyLmpzXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1ZhbGlkYXRvcn0gZnJvbSBcIi4vdmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgKiBhcyBwYXJhbGxlbCBmcm9tIFwiLi9wYXJhbGxlbC5qc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YS5qc1wiO1xuaW1wb3J0IHtQYXJzZXJJbmNsdWRlc30gZnJvbSBcIi4vcGFyc2VyLWluY2x1ZGVzLmpzXCI7XG5pbXBvcnQge1Byb2R1Y2Vyc30gZnJvbSBcIi4vcHJvZHVjZXJzLmpzXCI7XG5pbXBvcnQge1ZhcmlhYmxlc0Zyb21GaWxlc30gZnJvbSBcIi4vdmFyaWFibGVzLWZyb20tZmlsZXMuanNcIjtcbmltcG9ydCB7QXJndn0gZnJvbSBcIi4vYXJndi5qc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXMuanNcIjtcbmltcG9ydCB7aW5pdCBhcyBpbml0UHJlZGVmaW5lZFZhcmlhYmxlc30gZnJvbSBcIi4vcHJlZGVmaW5lZC12YXJpYWJsZXMuanNcIjtcblxuY29uc3QgTUFYX0ZVTkNUSU9OUyA9IDM7XG5jb25zdCBJTkNMVURFX0lOUFVUU19TVVBQT1JURURfVFlQRVMgPSBbXCJzdHJpbmdcIiwgXCJib29sZWFuXCIsIFwibnVtYmVyXCIsIFwiYXJyYXlcIl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnB1dFR5cGUgPSB0eXBlb2YgSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTW251bWJlcl07XG5cbmV4cG9ydCBjbGFzcyBQYXJzZXIge1xuXG4gICAgcHJpdmF0ZSBfc3RhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2dpdGxhYkRhdGE6IGFueTtcbiAgICBwcml2YXRlIF9qb2JOYW1lUGFkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHJlYWRvbmx5IGpvYnM6IEpvYltdO1xuICAgIHJlYWRvbmx5IGFyZ3Y6IEFyZ3Y7XG4gICAgcmVhZG9ubHkgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgcmVhZG9ubHkgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmFyZ3YgPSBhcmd2O1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IHdyaXRlU3RyZWFtcztcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IHBpcGVsaW5lSWlkO1xuICAgICAgICB0aGlzLmpvYnMgPSBqb2JzO1xuICAgICAgICB0aGlzLmV4cGFuZFZhcmlhYmxlcyA9IGV4cGFuZFZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBnZXQgc3RhZ2VzICgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFnZXM7XG4gICAgfVxuXG4gICAgZ2V0IGdpdGxhYkRhdGEgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2l0bGFiRGF0YTtcbiAgICB9XG5cbiAgICBnZXQgam9iTmFtZVBhZCAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvYk5hbWVQYWQgPz8gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihhcmd2LCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBqb2JzLCBleHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgYXdhaXQgcGFyc2VyLmluaXQoKTtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBhd2FpdCBWYWxpZGF0b3IucnVuKHBhcnNlci5qb2JzLCBwYXJzZXIuc3RhZ2VzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBwYXJzZXIuam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi5hcnRpZmFjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBqb2IuZGVsZXRlQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzaW5nVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICBjb25zdCBwYXRoVG9FeHBhbmRlZEdpdExhYkNpID0gcGF0aC5qb2luKGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyLCBcImV4cGFuZGVkLWdpdGxhYi1jaS55bWxcIik7XG4gICAgICAgIGZzLm1rZGlycFN5bmMocGF0aC5qb2luKGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyKSk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aFRvRXhwYW5kZWRHaXRMYWJDaSwgeWFtbC5kdW1wKHBhcnNlci5naXRsYWJEYXRhKSk7XG4gICAgICAgIGlmIChhcmd2LmNoaWxkUGlwZWxpbmVEZXB0aCA9PSAwKSB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IHBhcnNpbmcgYW5kIGRvd25sb2FkcyBmaW5pc2hlZCBpbiAke3ByZXR0eUhydGltZShwYXJzaW5nVGltZSl9Ln1cXG5gKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2Ygd2FybmluZ3MpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke3dhcm5pbmd9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gIyBTZWNvbmQgbGF5ZXIgb2YgY2hlY2sgZm9yIGVycm9ycyB0aGF0IGFyZSBub3QgY2F1Z2h0IGluIFZhbGlkYXRvci5ydW5cbiAgICAgICAgaWYgKHBhcnNlci5hcmd2Lmpzb25TY2hlbWFWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgIFZhbGlkYXRvci5qc29uU2NoZW1hVmFsaWRhdGlvbih7XG4gICAgICAgICAgICAgICAgcGF0aFRvRXhwYW5kZWRHaXRMYWJDaSxcbiAgICAgICAgICAgICAgICBnaXRMYWJDaUNvbmZpZzogcGFyc2VyLmdpdGxhYkRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChhcmd2LmNoaWxkUGlwZWxpbmVEZXB0aCA9PSAwKSB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IGpzb24gc2NoZW1hIHZhbGlkYXRlZCBpbiAke3ByZXR0eUhydGltZShwcm9jZXNzLmhydGltZSh0aW1lKSl9fVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZXI7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdCAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB0aGlzLmFyZ3Y7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IGFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCBmaWxlID0gYXJndi5maWxlO1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IHRoaXMucGlwZWxpbmVJaWQ7XG4gICAgICAgIGNvbnN0IGZldGNoSW5jbHVkZXMgPSBhcmd2LmZldGNoSW5jbHVkZXM7XG4gICAgICAgIGNvbnN0IGdpdERhdGEgPSBhd2FpdCBHaXREYXRhLmluaXQoY3dkLCB3cml0ZVN0cmVhbXMpO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXNGcm9tRmlsZXMgPSBhd2FpdCBWYXJpYWJsZXNGcm9tRmlsZXMuaW5pdChhcmd2LCB3cml0ZVN0cmVhbXMsIGdpdERhdGEpO1xuICAgICAgICBjb25zdCBlbnZNYXRjaGVkVmFyaWFibGVzID0gVXRpbHMuZmluZEVudk1hdGNoZWRWYXJpYWJsZXModmFyaWFibGVzRnJvbUZpbGVzKTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IGluaXRQcmVkZWZpbmVkVmFyaWFibGVzKHtnaXREYXRhLCBhcmd2LCBlbnZNYXRjaGVkVmFyaWFibGVzfSk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5lbnZNYXRjaGVkVmFyaWFibGVzLCAuLi5hcmd2LnZhcmlhYmxlfTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXModmFyaWFibGVzKTtcblxuICAgICAgICBsZXQgeWFtbERhdGFMaXN0OiBhbnlbXSA9IFt7c3RhZ2VzOiBbXCIucHJlXCIsIFwiYnVpbGRcIiwgXCJ0ZXN0XCIsIFwiZGVwbG95XCIsIFwiLnBvc3RcIl19XTtcbiAgICAgICAgY29uc3QgZ2l0bGFiQ2lEYXRhID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vJHtmaWxlfWAsIHt9LCB0aGlzLmV4cGFuZFZhcmlhYmxlcyk7XG5cbiAgICAgICAgeWFtbERhdGFMaXN0ID0geWFtbERhdGFMaXN0LmNvbmNhdChhd2FpdCBQYXJzZXJJbmNsdWRlcy5pbml0KGdpdGxhYkNpRGF0YSwge2FyZ3YsIGN3ZCwgc3RhdGVEaXIsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgdmFyaWFibGVzOiBleHBhbmRlZCwgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlcywgbWF4aW11bUluY2x1ZGVzOiBhcmd2Lm1heGltdW1JbmNsdWRlc30pKTtcbiAgICAgICAgUGFyc2VySW5jbHVkZXMucmVzZXRDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGdpdGxhYkNpTG9jYWxEYXRhID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC55bWxgLCB7fSwgdGhpcy5leHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICB5YW1sRGF0YUxpc3QgPSB5YW1sRGF0YUxpc3QuY29uY2F0KGF3YWl0IFBhcnNlckluY2x1ZGVzLmluaXQoZ2l0bGFiQ2lMb2NhbERhdGEsIHthcmd2LCBjd2QsIHN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMsIHZhcmlhYmxlczogZXhwYW5kZWQsIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXMsIG1heGltdW1JbmNsdWRlczogYXJndi5tYXhpbXVtSW5jbHVkZXN9KSk7XG4gICAgICAgIFBhcnNlckluY2x1ZGVzLnJlc2V0Q291bnQoKTtcblxuICAgICAgICBjb25zdCBnaXRsYWJEYXRhOiBhbnkgPSBkZWVwRXh0ZW5kKHt9LCAuLi55YW1sRGF0YUxpc3QpO1xuXG4gICAgICAgIC8vIEV4cGFuZCB2YXJpb3VzIGZpZWxkcyBpbiBnaXRsYWJEYXRhXG4gICAgICAgIERhdGFFeHBhbmRlci5qb2JFeHRlbmRzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIucmVmZXJlbmNlKGdpdGxhYkRhdGEsIGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZmxhdHRlbkxpc3RzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIudHJhbnNmb3JtRGVwcmVjYXRlZEdsb2JhbERlZmF1bHRTeW50YXgoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5pbmhlcml0RGVmYXVsdChnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLm5vcm1hbGl6ZShnaXRsYWJEYXRhKTtcblxuICAgICAgICBhc3NlcnQoZ2l0bGFiRGF0YS5zdGFnZXMgJiYgQXJyYXkuaXNBcnJheShnaXRsYWJEYXRhLnN0YWdlcyksIGNoYWxrYHt5ZWxsb3cgc3RhZ2VzOn0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICBpZiAoIWdpdGxhYkRhdGEuc3RhZ2VzLmluY2x1ZGVzKFwiLnByZVwiKSkge1xuICAgICAgICAgICAgZ2l0bGFiRGF0YS5zdGFnZXMudW5zaGlmdChcIi5wcmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFnaXRsYWJEYXRhLnN0YWdlcy5pbmNsdWRlcyhcIi5wb3N0XCIpKSB7XG4gICAgICAgICAgICBnaXRsYWJEYXRhLnN0YWdlcy5wdXNoKFwiLnBvc3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3RhZ2VzID0gZ2l0bGFiRGF0YS5zdGFnZXM7XG5cbiAgICAgICAgLy8gQ2hlY2sgam9iIHZhcmlhYmxlcyBmb3IgaW52YWxpZCBoYXNoIG9mIGtleSB2YWx1ZSBwYWlycywgYW5kIGNhc3QgbnVtYmVycyB0byBzdHJpbmdzXG4gICAgICAgIFV0aWxzLmZvckVhY2hSZWFsSm9iKGdpdGxhYkRhdGEsIChqb2JOYW1lLCBqb2JEYXRhKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQoam9iRGF0YS53aGVuICE9PSBcIm5ldmVyXCIsXG4gICAgICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBqb2JzOiR7am9iTmFtZX0gd2hlbjpuZXZlciBjYW4gb25seSBiZSB1c2VkIGluIGEgcnVsZXMgc2VjdGlvbiBvciB3b3JrZmxvdzpydWxlc2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIF92YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoam9iRGF0YS52YXJpYWJsZXMgfHwge30pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gX3ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgdmFsdWUgPSBcIlwiOyAvLyB2YXJpYWJsZSdzIHZhbHVlcyBhcmUgbnVsbGFibGVcbiAgICAgICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgY2hhbGtge2JsdWVCcmlnaHQgJHtqb2JOYW1lfX0gaGFzIGludmFsaWQgdmFyaWFibGVzIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLiAke2tleX09JHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBqb2JEYXRhLnZhcmlhYmxlc1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoam9iRGF0YS5zZXJ2aWNlcyA/PyBbXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gam9iRGF0YS5zZXJ2aWNlc1tpXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZXJ2aWNlLnZhcmlhYmxlcyB8fCB7fSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGtge2JsdWVCcmlnaHQgJHtqb2JOYW1lfS5zZXJ2aWNlc1ske2l9XX0gaGFzIGludmFsaWQgdmFyaWFibGVzIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLiAke2tleX09JHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGpvYkRhdGEuc2VydmljZXNbaV0udmFyaWFibGVzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZ2l0bGFiRGF0YSA9IGdpdGxhYkRhdGE7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgam9icyBhbmQgcHV0IHRoZW0gaW50byBzdGFnZXNcbiAgICAgICAgVXRpbHMuZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YSwgKGpvYk5hbWUsIGpvYkRhdGEpID0+IHtcbiAgICAgICAgICAgIGFzc2VydChnaXREYXRhICE9IG51bGwsIFwiZ2l0RGF0YSBtdXN0IGJlIHNldFwiKTtcbiAgICAgICAgICAgIGFzc2VydCh2YXJpYWJsZXNGcm9tRmlsZXMgIT0gbnVsbCwgXCJob21lVmFyaWFibGVzIG11c3QgYmUgc2V0XCIpO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gMTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCA9IHBhcmFsbGVsLm1hdHJpeFZhcmlhYmxlc0xpc3Qoam9iRGF0YSwgam9iTmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzIG9mIHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCkge1xuICAgICAgICAgICAgICAgIGxldCBtYXRyaXhKb2JOYW1lID0gam9iTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4Sm9iTmFtZSA9IGAke2pvYk5hbWV9OiBbJHtPYmplY3QudmFsdWVzKHBhcmFsbGVsTWF0cml4VmFyaWFibGVzID8/IFtdKS5qb2luKFwiLFwiKX1dYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFsbGVsLmlzUGxhaW5QYXJhbGxlbChqb2JEYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhKb2JOYW1lID0gYCR7am9iTmFtZX06IFske25vZGVJbmRleH0vJHtwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RofV1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYiA9IG5ldyBKb2Ioe1xuICAgICAgICAgICAgICAgICAgICBhcmd2LFxuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGpvYkRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG1hdHJpeEpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGJhc2VOYW1lOiBqb2JOYW1lLFxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZXM6IGdpdGxhYkRhdGEudmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZUlpZDogcGlwZWxpbmVJaWQsXG4gICAgICAgICAgICAgICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIGdpdERhdGEsXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc0Zyb21GaWxlcyxcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4VmFyaWFibGVzOiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4OiAoam9iRGF0YS5wYXJhbGxlbCAhPSBudWxsKSA/IG5vZGVJbmRleCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVzVG90YWw6IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmRTdGFnZSA9IHRoaXMuc3RhZ2VzLmluY2x1ZGVzKGpvYi5zdGFnZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZvdW5kU3RhZ2UsIGNoYWxrYHt5ZWxsb3cgc3RhZ2U6JHtqb2Iuc3RhZ2V9fSBub3QgZm91bmQgZm9yIHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fWApO1xuICAgICAgICAgICAgICAgIHRoaXMuam9icy5wdXNoKGpvYik7XG4gICAgICAgICAgICAgICAgbm9kZUluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFkZCBzb21lIHBhZGRpbmcgc28gdGhhdCBqb2IgbG9ncyBhcmUgbmljZWx5IGFsaWduZWRcbiAgICAgICAgLy8gYWxsb3cgdXNlcnMgdG8gb3ZlcnJpZGUgdGhpcyBpbiBjYXNlIHRoZXkgaGF2ZSByZWFsbHkgbG9uZyBqb2IgbmFtZSAoc2VlICM4NDApXG4gICAgICAgIGlmICh0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgIT09IG51bGwgJiYgdGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgam9icyA9IHRoaXMuYXJndi5qb2IubGVuZ3RoICE9PSAwID8gdGhpcy5hcmd2LmpvYiA6IHRoaXMuam9icztcbiAgICAgICAgICAgIGpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGpvYk5lZWRzTGVuZ3RoOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5uZWVkcyAmJiB0aGlzLmFyZ3Yuam9iLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmpvYnMuZmluZChqID0+IGouYmFzZU5hbWUgPT09IGpvYik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZD8ubmVlZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvYk5lZWRzTGVuZ3RoID0gZm91bmQubmVlZHMubWFwKGYgPT4gZi5qb2IubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBqb2JMZW5ndGggPSB0eXBlb2Ygam9iID09IFwic3RyaW5nXCIgPyBqb2IubGVuZ3RoIDogam9iLm5hbWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSBNYXRoLm1heChqb2JMZW5ndGgsIHRoaXMuX2pvYk5hbWVQYWQgPz8gMCwgLi4uam9iTmVlZHNMZW5ndGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IE1hdGgubWluKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyA/PyAwLCB0aGlzLl9qb2JOYW1lUGFkID8/IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IGpvYk5hbWVQYWQgb24gYWxsIGpvYnNcbiAgICAgICAgdGhpcy5qb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgam9iLmpvYk5hbWVQYWQgPSB0aGlzLmpvYk5hbWVQYWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIHByb2R1Y2VycyBmb3IgZWFjaCBqb2JcbiAgICAgICAgdGhpcy5qb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgam9iLnByb2R1Y2VycyA9IFByb2R1Y2Vycy5pbml0KHRoaXMuam9icywgdGhpcy5zdGFnZXMsIGpvYik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBsb2FkWWFtbCAoZmlsZVBhdGg6IHN0cmluZywgY3R4OiBhbnkgPSB7fSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IHltbFBhdGggPSBgJHtmaWxlUGF0aH1gO1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoeW1sUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoYCR7ZmlsZVBhdGh9YCwgXCJ1dGY4XCIpO1xuICAgICAgICBjb25zdCBmaWxlU3BsaXQgPSBmaWxlQ29udGVudC5zcGxpdCgvXFxyP1xcbi9nKTtcbiAgICAgICAgY29uc3QgZmlsZVNwbGl0Q2xvbmUgPSBmaWxlU3BsaXQuc2xpY2UoKTtcblxuICAgICAgICBsZXQgaW50ZXJhY3RpdmVNYXRjaCA9IG51bGw7XG4gICAgICAgIGxldCBkZXNjcmlwdGlvbk1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGluamVjdFNTSEFnZW50ID0gbnVsbDtcbiAgICAgICAgbGV0IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9IG51bGw7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGlmIChleHBhbmRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBmaWxlU3BsaXQpIHtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZU1hdGNoID0gIWludGVyYWN0aXZlTWF0Y2ggPyAvI1xccz9AXFxzP1tJaV1udGVyYWN0aXZlLy5leGVjKGxpbmUpIDogaW50ZXJhY3RpdmVNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmplY3RTU0hBZ2VudCA9ICFpbmplY3RTU0hBZ2VudCA/IC8jXFxzP0BcXHM/W0lpXW5qZWN0U1NIQWdlbnQvLmV4ZWMobGluZSkgOiBpbmplY3RTU0hBZ2VudDtcbiAgICAgICAgICAgICAgICBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSAhbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID8gLyNcXHM/QFxccz9Ob0FydGlmYWN0c1RvU291cmNlL2kuZXhlYyhsaW5lKSA6IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaDtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbk1hdGNoID0gIWRlc2NyaXB0aW9uTWF0Y2ggPyAvI1xccz9AXFxzP1tEZF1lc2NyaXB0aW9uICg/PGRlc2NyaXB0aW9uPi4qKS8uZXhlYyhsaW5lKSA6IGRlc2NyaXB0aW9uTWF0Y2g7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBqb2JNYXRjaCA9IC9cXHc6Ly5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChqb2JNYXRjaCAmJiAoaW50ZXJhY3RpdmVNYXRjaCB8fCBkZXNjcmlwdGlvbk1hdGNoIHx8IGluamVjdFNTSEFnZW50IHx8IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyYWN0aXZlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xJbnRlcmFjdGl2ZTogdHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsSW5qZWN0U1NIQWdlbnQ6IHRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChub0FydGlmYWN0c1RvU291cmNlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xBcnRpZmFjdHNUb1NvdXJjZTogZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbk1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBgICBnY2xEZXNjcmlwdGlvbjogJHtkZXNjcmlwdGlvbk1hdGNoPy5ncm91cHM/LmRlc2NyaXB0aW9uID8/IFwiXCJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbk1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IG5ldyB5YW1sLlR5cGUoXCIhcmVmZXJlbmNlXCIsIHtcbiAgICAgICAgICAgIGtpbmQ6IFwic2VxdWVuY2VcIixcbiAgICAgICAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3JlZmVyZW5jZURhdGE6IGRhdGF9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHlhbWwuREVGQVVMVF9TQ0hFTUEuZXh0ZW5kKFtyZWZlcmVuY2VUeXBlXSk7XG4gICAgICAgIGxldCBmaWxlRGF0YTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZURhdGEgPSB5YW1sLmxvYWRBbGwoZmlsZVNwbGl0Q2xvbmUuam9pbihcIlxcblwiKSwgbnVsbCwge3NjaGVtYX0pIGFzIGFueVtdO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgeWFtbC5ZQU1MRXhjZXB0aW9uICYmIGUucmVhc29uID09PSBcImR1cGxpY2F0ZWQgbWFwcGluZyBrZXlcIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGR1cGxpY2F0ZWQgbWFwcGluZyBrZXkgZGV0ZWN0ZWQhIFZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuIWApO1xuICAgICAgICAgICAgICAgIGZpbGVEYXRhID0geWFtbC5sb2FkQWxsKGZpbGVTcGxpdENsb25lLmpvaW4oXCJcXG5cIiksIG51bGwsIHtzY2hlbWEsIGpzb246IHRydWV9KSBhcyBhbnlbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlRGF0YS5sZW5ndGggPD0gMSkgcmV0dXJuIGZpbGVEYXRhWzBdO1xuXG4gICAgICAgIGlmIChpc0dpdGxhYlNwZWNGaWxlKGZpbGVEYXRhWzBdKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRzU3BlY2lmaWNhdGlvbjogYW55ID0gZmlsZURhdGFbMF07XG4gICAgICAgICAgICBjb25zdCB1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zOiBhbnkgPSBmaWxlRGF0YVsxXTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMgPSBKU09OLnN0cmluZ2lmeSh1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvKD88Zmlyc3RDaGFyPi4pPyg/PHNlY29uZENoYXI+Lik/XFwkXFxbXFxbXFxzKmlucHV0cy4oPzxpbnRlcnBvbGF0aW9uS2V5PltcXHctXSspXFxzKlxcfD9cXHMqKD88aW50ZXJwb2xhdGlvbkZ1bmN0aW9ucz4uKj8pXFxzKlxcXVxcXSg/PGxhc3RDaGFyPlteJF0pPy9nIC8vIGh0dHBzOi8vcmVnZXhyLmNvbS84MWMxNlxuICAgICAgICAgICAgICAgICAgICAsIChfOiBzdHJpbmcsIGZpcnN0Q2hhcjogc3RyaW5nLCBzZWNvbmRDaGFyOiBzdHJpbmcsIGludGVycG9sYXRpb25LZXk6IHN0cmluZywgaW50ZXJwb2xhdGlvbkZ1bmN0aW9uczogc3RyaW5nLCBsYXN0Q2hhcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb25GdW5jdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGFyID8/PSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2hhciA/Pz0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID8/PSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7aW5wdXRWYWx1ZSwgaW5wdXRUeXBlfSA9IHBhcnNlSW5jbHVkZUlucHV0cyhjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VHdvQ2hhciA9IGZpcnN0Q2hhciArIHNlY29uZENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNlY29uZENoYXIgPT0gXCJcXFwiXCIgJiYgbGFzdENoYXIgPT0gXCJcXFwiXCIpICYmIGZpcnN0Q2hhciAhPSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciArIEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogVGhpcyBiZWhhdmVzIHNsaWdodGx5IGRpZmZlcmVudGx5IGZyb20gZ2l0bGFiLmNvbS4gSSBjYW4ndCBjb21lIHVwIHdpdGggcHJhY3RpY2FsIHVzZSBjYXNlIHNvIGkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCB0aGUgZWZmb3J0IHRvIG1pbWljIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0VHdvQ2hhciArIEpTT04uc3RyaW5naWZ5KEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpKS5zbGljZSgxLCAtMSkgKyBsYXN0Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgSlNPTi5zdHJpbmdpZnkoaW5wdXRWYWx1ZSkgLy8gZW5zdXJlIGEgdmFsaWQganNvbiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMSwgLTEpIC8vIHJlbW92ZSB0aGUgc3Vycm91bmRpbmcgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbGFzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzZWNvbmRDaGFyID09IFwiXFxcIlwiICYmIGxhc3RDaGFyID09IFwiXFxcIlwiKSAmJiBmaXJzdENoYXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoYXIgKyBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXIgKyBpbnB1dFZhbHVlICsgbGFzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zd2l0Y2hTdGF0ZW1lbnRFeGhhdXN0aXZlQ2hlY2soaW5wdXRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShpbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGVEYXRhWzBdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNHaXRsYWJTcGVjRmlsZSAoZmlsZURhdGE6IGFueSkge1xuICAgIHJldHVybiBcInNwZWNcIiBpbiBmaWxlRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnRlcnBvbGF0aW9uS2V5IChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtjb25maWdGaWxlUGF0aCwgaW50ZXJwb2xhdGlvbktleSwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIgPSBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdW5rbm93biBpbnRlcnBvbGF0aW9uIGtleTogXFxgJHtpbnRlcnBvbGF0aW9uS2V5fVxcYC5gO1xuICAgIGFzc2VydChpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzPy5baW50ZXJwb2xhdGlvbktleV0gIT09IHVuZGVmaW5lZCwgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVycG9sYXRpb25GdW5jdGlvbnMgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2ludGVycG9sYXRpb25GdW5jdGlvbnMsIGNvbmZpZ0ZpbGVQYXRofSA9IGN0eDtcbiAgICBpZiAoaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyAhPSBcIlwiKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGludGVycG9sYXRpb24gZnVuY3Rpb25zIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHZpYSBnaXRsYWItY2ktbG9jYWwuIEZ1bmN0aW9ucyB3aWxsIGp1c3QgYmUgYSBuby1vcC5gKTtcbiAgICB9XG4gICAgYXNzZXJ0KGludGVycG9sYXRpb25GdW5jdGlvbnMuc3BsaXQoXCJ8XCIpLmxlbmd0aCA8PSBNQVhfRlVOQ1RJT05TLCBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdG9vIG1hbnkgZnVuY3Rpb25zIGluIGludGVycG9sYXRpb24gYmxvY2suYCk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5wdXQgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2NvbmZpZ0ZpbGVQYXRoLCBpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gZ2V0SW5wdXRWYWx1ZShjdHgpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0KG9wdGlvbnMuaW5jbHVkZXMoaW5wdXRWYWx1ZSksXG4gICAgICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogXFxge2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX1cXGAgaW5wdXQ6IFxcYHtibHVlQnJpZ2h0ICR7aW5wdXRWYWx1ZX19XFxgIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IGluIHRoZSBsaXN0IG9mIGFsbG93ZWQgb3B0aW9ucy5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZElucHV0VHlwZSA9IGdldEV4cGVjdGVkSW5wdXRUeXBlKGN0eCk7XG4gICAgYXNzZXJ0KElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFUy5pbmNsdWRlcyhleHBlY3RlZElucHV0VHlwZSksXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBoZWFkZXI6c3BlYzppbnB1dHM6e2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX0gaW5wdXQgdHlwZSB1bmtub3duIHZhbHVlOiB7Ymx1ZUJyaWdodCAke2V4cGVjdGVkSW5wdXRUeXBlfX0uYCk7XG5cbiAgICBjb25zdCBpbnB1dFR5cGUgPSBBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpID8gXCJhcnJheVwiIDogdHlwZW9mIGlucHV0VmFsdWU7XG4gICAgYXNzZXJ0KGlucHV0VHlwZSA9PT0gZXhwZWN0ZWRJbnB1dFR5cGUsXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEge2JsdWVCcmlnaHQgJHtleHBlY3RlZElucHV0VHlwZX19LmApO1xuXG4gICAgY29uc3QgcmVnZXggPSBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5yZWdleDtcbiAgICBpZiAocmVnZXgpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gc3BlYzppbnB1dHM6cmVnZXggaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmlhIGdpdGxhYi1jaS1sb2NhbC4gVGhpcyB3aWxsIGp1c3QgYmUgYSBuby1vcC5gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW5jbHVkZUlucHV0cyAoY3R4OiBhbnkpOiB7aW5wdXRWYWx1ZTogYW55OyBpbnB1dFR5cGU6IElucHV0VHlwZX0ge1xuICAgIHZhbGlkYXRlSW50ZXJwb2xhdGlvbktleShjdHgpO1xuICAgIHZhbGlkYXRlSW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyhjdHgpO1xuICAgIHZhbGlkYXRlSW5wdXQoY3R4KTtcbiAgICByZXR1cm4ge2lucHV0VmFsdWU6IGdldElucHV0VmFsdWUoY3R4KSwgaW5wdXRUeXBlOiBnZXRFeHBlY3RlZElucHV0VHlwZShjdHgpfTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRWYWx1ZSAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7aW5wdXRzLCBpbnRlcnBvbGF0aW9uS2V5LCBjb25maWdGaWxlUGF0aCwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XSB8fCBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5kZWZhdWx0O1xuICAgIGFzc2VydChpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQsIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcmVxdWlyZWQgdmFsdWUgaGFzIG5vdCBiZWVuIHByb3ZpZGVkLmApO1xuICAgIHJldHVybiBpbnB1dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBlY3RlZElucHV0VHlwZSAoY3R4OiBhbnkpOiBJbnB1dFR5cGUge1xuICAgIGNvbnN0IHtpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICByZXR1cm4gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8udHlwZSB8fCBcInN0cmluZ1wiO1xufVxuIl19
|
|
359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM3QixPQUFPLEtBQUssWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDakMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFDLElBQUksSUFBSSx1QkFBdUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRTFFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLDhCQUE4QixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFHekYsTUFBTSxPQUFPLE1BQU07SUFFUCxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLFdB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LENBQUMsQ0FBQztJQUM5Qiw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFFLEdBQVE7SUFDNUIsTUFBTSxFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUMsR0FBRyxHQUFHLENBQUM7SUFDNUUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMxRyxNQUFNLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxLQUFLLENBQUEsMERBQTBELGNBQWMsc0JBQXNCLGdCQUFnQixrREFBa0QsQ0FBQyxDQUFDO0lBQ3hNLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFFLEdBQVE7SUFDbkMsTUFBTSxFQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3BELE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksSUFBSSxRQUFRLENBQUM7QUFDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZGVlcEV4dGVuZCBmcm9tIFwiZGVlcC1leHRlbmRcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSBcImpzLXlhbWxcIjtcbmltcG9ydCBwcmV0dHlIcnRpbWUgZnJvbSBcInByZXR0eS1ocnRpbWVcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2IuanNcIjtcbmltcG9ydCAqIGFzIERhdGFFeHBhbmRlciBmcm9tIFwiLi9kYXRhLWV4cGFuZGVyLmpzXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1ZhbGlkYXRvcn0gZnJvbSBcIi4vdmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgKiBhcyBwYXJhbGxlbCBmcm9tIFwiLi9wYXJhbGxlbC5qc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YS5qc1wiO1xuaW1wb3J0IHtQYXJzZXJJbmNsdWRlc30gZnJvbSBcIi4vcGFyc2VyLWluY2x1ZGVzLmpzXCI7XG5pbXBvcnQge1Byb2R1Y2Vyc30gZnJvbSBcIi4vcHJvZHVjZXJzLmpzXCI7XG5pbXBvcnQge1ZhcmlhYmxlc0Zyb21GaWxlc30gZnJvbSBcIi4vdmFyaWFibGVzLWZyb20tZmlsZXMuanNcIjtcbmltcG9ydCB7QXJndn0gZnJvbSBcIi4vYXJndi5qc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXMuanNcIjtcbmltcG9ydCB7aW5pdCBhcyBpbml0UHJlZGVmaW5lZFZhcmlhYmxlc30gZnJvbSBcIi4vcHJlZGVmaW5lZC12YXJpYWJsZXMuanNcIjtcblxuY29uc3QgTUFYX0ZVTkNUSU9OUyA9IDM7XG5jb25zdCBJTkNMVURFX0lOUFVUU19TVVBQT1JURURfVFlQRVMgPSBbXCJzdHJpbmdcIiwgXCJib29sZWFuXCIsIFwibnVtYmVyXCIsIFwiYXJyYXlcIl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnB1dFR5cGUgPSB0eXBlb2YgSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTW251bWJlcl07XG5cbmV4cG9ydCBjbGFzcyBQYXJzZXIge1xuXG4gICAgcHJpdmF0ZSBfc3RhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2dpdGxhYkRhdGE6IGFueTtcbiAgICBwcml2YXRlIF9qb2JOYW1lUGFkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHJlYWRvbmx5IGpvYnM6IEpvYltdO1xuICAgIHJlYWRvbmx5IGFyZ3Y6IEFyZ3Y7XG4gICAgcmVhZG9ubHkgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgcmVhZG9ubHkgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmFyZ3YgPSBhcmd2O1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IHdyaXRlU3RyZWFtcztcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IHBpcGVsaW5lSWlkO1xuICAgICAgICB0aGlzLmpvYnMgPSBqb2JzO1xuICAgICAgICB0aGlzLmV4cGFuZFZhcmlhYmxlcyA9IGV4cGFuZFZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBnZXQgc3RhZ2VzICgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFnZXM7XG4gICAgfVxuXG4gICAgZ2V0IGdpdGxhYkRhdGEgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2l0bGFiRGF0YTtcbiAgICB9XG5cbiAgICBnZXQgam9iTmFtZVBhZCAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvYk5hbWVQYWQgPz8gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihhcmd2LCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBqb2JzLCBleHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgYXdhaXQgcGFyc2VyLmluaXQoKTtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBhd2FpdCBWYWxpZGF0b3IucnVuKHBhcnNlci5qb2JzLCBwYXJzZXIuc3RhZ2VzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBwYXJzZXIuam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi5hcnRpZmFjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBqb2IuZGVsZXRlQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzaW5nVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICBjb25zdCBwYXRoVG9FeHBhbmRlZEdpdExhYkNpID0gcGF0aC5qb2luKGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyLCBcImV4cGFuZGVkLWdpdGxhYi1jaS55bWxcIik7XG4gICAgICAgIGZzLm1rZGlycFN5bmMocGF0aC5qb2luKGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyKSk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aFRvRXhwYW5kZWRHaXRMYWJDaSwgeWFtbC5kdW1wKHBhcnNlci5naXRsYWJEYXRhKSk7XG4gICAgICAgIGlmIChhcmd2LmNoaWxkUGlwZWxpbmVEZXB0aCA9PSAwKSB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IHBhcnNpbmcgYW5kIGRvd25sb2FkcyBmaW5pc2hlZCBpbiAke3ByZXR0eUhydGltZShwYXJzaW5nVGltZSl9Ln1cXG5gKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2Ygd2FybmluZ3MpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke3dhcm5pbmd9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gIyBTZWNvbmQgbGF5ZXIgb2YgY2hlY2sgZm9yIGVycm9ycyB0aGF0IGFyZSBub3QgY2F1Z2h0IGluIFZhbGlkYXRvci5ydW5cbiAgICAgICAgaWYgKHBhcnNlci5hcmd2Lmpzb25TY2hlbWFWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgIFZhbGlkYXRvci5qc29uU2NoZW1hVmFsaWRhdGlvbih7XG4gICAgICAgICAgICAgICAgcGF0aFRvRXhwYW5kZWRHaXRMYWJDaSxcbiAgICAgICAgICAgICAgICBnaXRMYWJDaUNvbmZpZzogcGFyc2VyLmdpdGxhYkRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChhcmd2LmNoaWxkUGlwZWxpbmVEZXB0aCA9PSAwKSB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IGpzb24gc2NoZW1hIHZhbGlkYXRlZCBpbiAke3ByZXR0eUhydGltZShwcm9jZXNzLmhydGltZSh0aW1lKSl9fVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZXI7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdCAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB0aGlzLmFyZ3Y7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IGFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCBmaWxlID0gYXJndi5maWxlO1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IHRoaXMucGlwZWxpbmVJaWQ7XG4gICAgICAgIGNvbnN0IGZldGNoSW5jbHVkZXMgPSBhcmd2LmZldGNoSW5jbHVkZXM7XG4gICAgICAgIGNvbnN0IGdpdERhdGEgPSBhd2FpdCBHaXREYXRhLmluaXQoY3dkLCB3cml0ZVN0cmVhbXMpO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXNGcm9tRmlsZXMgPSBhd2FpdCBWYXJpYWJsZXNGcm9tRmlsZXMuaW5pdChhcmd2LCB3cml0ZVN0cmVhbXMsIGdpdERhdGEpO1xuICAgICAgICBjb25zdCBlbnZNYXRjaGVkVmFyaWFibGVzID0gVXRpbHMuZmluZEVudk1hdGNoZWRWYXJpYWJsZXModmFyaWFibGVzRnJvbUZpbGVzKTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IGluaXRQcmVkZWZpbmVkVmFyaWFibGVzKHtnaXREYXRhLCBhcmd2LCBlbnZNYXRjaGVkVmFyaWFibGVzfSk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5lbnZNYXRjaGVkVmFyaWFibGVzLCAuLi5hcmd2LnZhcmlhYmxlfTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXModmFyaWFibGVzKTtcblxuICAgICAgICBsZXQgeWFtbERhdGFMaXN0OiBhbnlbXSA9IFt7c3RhZ2VzOiBbXCIucHJlXCIsIFwiYnVpbGRcIiwgXCJ0ZXN0XCIsIFwiZGVwbG95XCIsIFwiLnBvc3RcIl19XTtcbiAgICAgICAgY29uc3QgZ2l0bGFiQ2lEYXRhID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vJHtmaWxlfWAsIHt9LCB0aGlzLmV4cGFuZFZhcmlhYmxlcyk7XG5cbiAgICAgICAgeWFtbERhdGFMaXN0ID0geWFtbERhdGFMaXN0LmNvbmNhdChhd2FpdCBQYXJzZXJJbmNsdWRlcy5pbml0KGdpdGxhYkNpRGF0YSwge2FyZ3YsIGN3ZCwgc3RhdGVEaXIsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgdmFyaWFibGVzOiBleHBhbmRlZCwgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlcywgbWF4aW11bUluY2x1ZGVzOiBhcmd2Lm1heGltdW1JbmNsdWRlc30pKTtcbiAgICAgICAgUGFyc2VySW5jbHVkZXMucmVzZXRDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGdpdGxhYkNpTG9jYWxEYXRhID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC55bWxgLCB7fSwgdGhpcy5leHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICB5YW1sRGF0YUxpc3QgPSB5YW1sRGF0YUxpc3QuY29uY2F0KGF3YWl0IFBhcnNlckluY2x1ZGVzLmluaXQoZ2l0bGFiQ2lMb2NhbERhdGEsIHthcmd2LCBjd2QsIHN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMsIHZhcmlhYmxlczogZXhwYW5kZWQsIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXMsIG1heGltdW1JbmNsdWRlczogYXJndi5tYXhpbXVtSW5jbHVkZXN9KSk7XG4gICAgICAgIFBhcnNlckluY2x1ZGVzLnJlc2V0Q291bnQoKTtcblxuICAgICAgICBjb25zdCBnaXRsYWJEYXRhOiBhbnkgPSBkZWVwRXh0ZW5kKHt9LCAuLi55YW1sRGF0YUxpc3QpO1xuXG4gICAgICAgIC8vIEV4cGFuZCB2YXJpb3VzIGZpZWxkcyBpbiBnaXRsYWJEYXRhXG4gICAgICAgIERhdGFFeHBhbmRlci5qb2JFeHRlbmRzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIucmVmZXJlbmNlKGdpdGxhYkRhdGEsIGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZmxhdHRlbkxpc3RzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIudHJhbnNmb3JtRGVwcmVjYXRlZEdsb2JhbERlZmF1bHRTeW50YXgoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5pbmhlcml0RGVmYXVsdChnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLm5vcm1hbGl6ZShnaXRsYWJEYXRhKTtcblxuICAgICAgICBhc3NlcnQoZ2l0bGFiRGF0YS5zdGFnZXMgJiYgQXJyYXkuaXNBcnJheShnaXRsYWJEYXRhLnN0YWdlcyksIGNoYWxrYHt5ZWxsb3cgc3RhZ2VzOn0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICBpZiAoIWdpdGxhYkRhdGEuc3RhZ2VzLmluY2x1ZGVzKFwiLnByZVwiKSkge1xuICAgICAgICAgICAgZ2l0bGFiRGF0YS5zdGFnZXMudW5zaGlmdChcIi5wcmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFnaXRsYWJEYXRhLnN0YWdlcy5pbmNsdWRlcyhcIi5wb3N0XCIpKSB7XG4gICAgICAgICAgICBnaXRsYWJEYXRhLnN0YWdlcy5wdXNoKFwiLnBvc3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3RhZ2VzID0gZ2l0bGFiRGF0YS5zdGFnZXM7XG5cbiAgICAgICAgLy8gQ2hlY2sgam9iIHZhcmlhYmxlcyBmb3IgaW52YWxpZCBoYXNoIG9mIGtleSB2YWx1ZSBwYWlycywgYW5kIGNhc3QgbnVtYmVycyB0byBzdHJpbmdzXG4gICAgICAgIFV0aWxzLmZvckVhY2hSZWFsSm9iKGdpdGxhYkRhdGEsIChqb2JOYW1lLCBqb2JEYXRhKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQoam9iRGF0YS53aGVuICE9PSBcIm5ldmVyXCIsXG4gICAgICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBqb2JzOiR7am9iTmFtZX0gd2hlbjpuZXZlciBjYW4gb25seSBiZSB1c2VkIGluIGEgcnVsZXMgc2VjdGlvbiBvciB3b3JrZmxvdzpydWxlc2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIF92YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoam9iRGF0YS52YXJpYWJsZXMgfHwge30pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gX3ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgdmFsdWUgPSBcIlwiOyAvLyB2YXJpYWJsZSdzIHZhbHVlcyBhcmUgbnVsbGFibGVcbiAgICAgICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgY2hhbGtge2JsdWVCcmlnaHQgJHtqb2JOYW1lfX0gaGFzIGludmFsaWQgdmFyaWFibGVzIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLiAke2tleX09JHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBqb2JEYXRhLnZhcmlhYmxlc1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoam9iRGF0YS5zZXJ2aWNlcyA/PyBbXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gam9iRGF0YS5zZXJ2aWNlc1tpXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZXJ2aWNlLnZhcmlhYmxlcyB8fCB7fSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGtge2JsdWVCcmlnaHQgJHtqb2JOYW1lfS5zZXJ2aWNlc1ske2l9XX0gaGFzIGludmFsaWQgdmFyaWFibGVzIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLiAke2tleX09JHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGpvYkRhdGEuc2VydmljZXNbaV0udmFyaWFibGVzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZ2l0bGFiRGF0YSA9IGdpdGxhYkRhdGE7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgam9icyBhbmQgcHV0IHRoZW0gaW50byBzdGFnZXNcbiAgICAgICAgVXRpbHMuZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YSwgKGpvYk5hbWUsIGpvYkRhdGEpID0+IHtcbiAgICAgICAgICAgIGFzc2VydChnaXREYXRhICE9IG51bGwsIFwiZ2l0RGF0YSBtdXN0IGJlIHNldFwiKTtcbiAgICAgICAgICAgIGFzc2VydCh2YXJpYWJsZXNGcm9tRmlsZXMgIT0gbnVsbCwgXCJob21lVmFyaWFibGVzIG11c3QgYmUgc2V0XCIpO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gMTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCA9IHBhcmFsbGVsLm1hdHJpeFZhcmlhYmxlc0xpc3Qoam9iRGF0YSwgam9iTmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzIG9mIHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCkge1xuICAgICAgICAgICAgICAgIGxldCBtYXRyaXhKb2JOYW1lID0gam9iTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4Sm9iTmFtZSA9IGAke2pvYk5hbWV9OiBbJHtPYmplY3QudmFsdWVzKHBhcmFsbGVsTWF0cml4VmFyaWFibGVzID8/IFtdKS5qb2luKFwiLFwiKX1dYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFsbGVsLmlzUGxhaW5QYXJhbGxlbChqb2JEYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhKb2JOYW1lID0gYCR7am9iTmFtZX06IFske25vZGVJbmRleH0vJHtwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RofV1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYiA9IG5ldyBKb2Ioe1xuICAgICAgICAgICAgICAgICAgICBhcmd2LFxuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGpvYkRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG1hdHJpeEpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGJhc2VOYW1lOiBqb2JOYW1lLFxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZXM6IGdpdGxhYkRhdGEudmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZUlpZDogcGlwZWxpbmVJaWQsXG4gICAgICAgICAgICAgICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXM6IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzfSwgLy8gTk9URTogcGFzcyBieSB2YWx1ZSBiZWNhdXNlIHByZWRlZmluZWRWYXJpYWJsZXMgaXMgbXV0YXRlZCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgZ2l0RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzRnJvbUZpbGVzLFxuICAgICAgICAgICAgICAgICAgICBtYXRyaXhWYXJpYWJsZXM6IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXg6IChqb2JEYXRhLnBhcmFsbGVsICE9IG51bGwpID8gbm9kZUluZGV4IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbm9kZXNUb3RhbDogcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZFN0YWdlID0gdGhpcy5zdGFnZXMuaW5jbHVkZXMoam9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZm91bmRTdGFnZSwgY2hhbGtge3llbGxvdyBzdGFnZToke2pvYi5zdGFnZX19IG5vdCBmb3VuZCBmb3Ige2JsdWVCcmlnaHQgJHtqb2IubmFtZX19YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5qb2JzLnB1c2goam9iKTtcbiAgICAgICAgICAgICAgICBub2RlSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRkIHNvbWUgcGFkZGluZyBzbyB0aGF0IGpvYiBsb2dzIGFyZSBuaWNlbHkgYWxpZ25lZFxuICAgICAgICAvLyBhbGxvdyB1c2VycyB0byBvdmVycmlkZSB0aGlzIGluIGNhc2UgdGhleSBoYXZlIHJlYWxseSBsb25nIGpvYiBuYW1lIChzZWUgIzg0MClcbiAgICAgICAgaWYgKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyAhPT0gbnVsbCAmJiB0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBqb2JzID0gdGhpcy5hcmd2LmpvYi5sZW5ndGggIT09IDAgPyB0aGlzLmFyZ3Yuam9iIDogdGhpcy5qb2JzO1xuICAgICAgICAgICAgam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgam9iTmVlZHNMZW5ndGg6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd2Lm5lZWRzICYmIHRoaXMuYXJndi5qb2IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuam9icy5maW5kKGogPT4gai5iYXNlTmFtZSA9PT0gam9iKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kPy5uZWVkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgam9iTmVlZHNMZW5ndGggPSBmb3VuZC5uZWVkcy5tYXAoZiA9PiBmLmpvYi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYkxlbmd0aCA9IHR5cGVvZiBqb2IgPT0gXCJzdHJpbmdcIiA/IGpvYi5sZW5ndGggOiBqb2IubmFtZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IE1hdGgubWF4KGpvYkxlbmd0aCwgdGhpcy5fam9iTmFtZVBhZCA/PyAwLCAuLi5qb2JOZWVkc0xlbmd0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gTWF0aC5taW4odGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nID8/IDAsIHRoaXMuX2pvYk5hbWVQYWQgPz8gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgam9iTmFtZVBhZCBvbiBhbGwgam9ic1xuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2Iuam9iTmFtZVBhZCA9IHRoaXMuam9iTmFtZVBhZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgcHJvZHVjZXJzIGZvciBlYWNoIGpvYlxuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2IucHJvZHVjZXJzID0gUHJvZHVjZXJzLmluaXQodGhpcy5qb2JzLCB0aGlzLnN0YWdlcywgam9iKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGxvYWRZYW1sIChmaWxlUGF0aDogc3RyaW5nLCBjdHg6IGFueSA9IHt9LCBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeW1sUGF0aCA9IGAke2ZpbGVQYXRofWA7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh5bWxQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtmaWxlUGF0aH1gLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGZpbGVTcGxpdCA9IGZpbGVDb250ZW50LnNwbGl0KC9cXHI/XFxuL2cpO1xuICAgICAgICBjb25zdCBmaWxlU3BsaXRDbG9uZSA9IGZpbGVTcGxpdC5zbGljZSgpO1xuXG4gICAgICAgIGxldCBpbnRlcmFjdGl2ZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICBsZXQgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgaWYgKGV4cGFuZFZhcmlhYmxlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZpbGVTcGxpdCkge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSAhaW50ZXJhY3RpdmVNYXRjaCA/IC8jXFxzP0BcXHM/W0lpXW50ZXJhY3RpdmUvLmV4ZWMobGluZSkgOiBpbnRlcmFjdGl2ZU1hdGNoO1xuICAgICAgICAgICAgICAgIGluamVjdFNTSEFnZW50ID0gIWluamVjdFNTSEFnZW50ID8gLyNcXHM/QFxccz9bSWldbmplY3RTU0hBZ2VudC8uZXhlYyhsaW5lKSA6IGluamVjdFNTSEFnZW50O1xuICAgICAgICAgICAgICAgIG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9ICFub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPyAvI1xccz9AXFxzP05vQXJ0aWZhY3RzVG9Tb3VyY2UvaS5leGVjKGxpbmUpIDogbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uTWF0Y2ggPSAhZGVzY3JpcHRpb25NYXRjaCA/IC8jXFxzP0BcXHM/W0RkXWVzY3JpcHRpb24gKD88ZGVzY3JpcHRpb24+LiopLy5leGVjKGxpbmUpIDogZGVzY3JpcHRpb25NYXRjaDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYk1hdGNoID0gL1xcdzovLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKGpvYk1hdGNoICYmIChpbnRlcmFjdGl2ZU1hdGNoIHx8IGRlc2NyaXB0aW9uTWF0Y2ggfHwgaW5qZWN0U1NIQWdlbnQgfHwgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJhY3RpdmVNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgXCIgIGdjbEludGVyYWN0aXZlOiB0cnVlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5qZWN0U1NIQWdlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xJbmplY3RTU0hBZ2VudDogdHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgXCIgIGdjbEFydGlmYWN0c1RvU291cmNlOiBmYWxzZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIGAgIGdjbERlc2NyaXB0aW9uOiAke2Rlc2NyaXB0aW9uTWF0Y2g/Lmdyb3Vwcz8uZGVzY3JpcHRpb24gPz8gXCJcIn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVNYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RTU0hBZ2VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWZlcmVuY2VUeXBlID0gbmV3IHlhbWwuVHlwZShcIiFyZWZlcmVuY2VcIiwge1xuICAgICAgICAgICAga2luZDogXCJzZXF1ZW5jZVwiLFxuICAgICAgICAgICAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7cmVmZXJlbmNlRGF0YTogZGF0YX07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0geWFtbC5ERUZBVUxUX1NDSEVNQS5leHRlbmQoW3JlZmVyZW5jZVR5cGVdKTtcbiAgICAgICAgbGV0IGZpbGVEYXRhO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlRGF0YSA9IHlhbWwubG9hZEFsbChmaWxlU3BsaXRDbG9uZS5qb2luKFwiXFxuXCIpLCBudWxsLCB7c2NoZW1hfSkgYXMgYW55W107XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB5YW1sLllBTUxFeGNlcHRpb24gJiYgZS5yZWFzb24gPT09IFwiZHVwbGljYXRlZCBtYXBwaW5nIGtleVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gZHVwbGljYXRlZCBtYXBwaW5nIGtleSBkZXRlY3RlZCEgVmFsdWVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4hYCk7XG4gICAgICAgICAgICAgICAgZmlsZURhdGEgPSB5YW1sLmxvYWRBbGwoZmlsZVNwbGl0Q2xvbmUuam9pbihcIlxcblwiKSwgbnVsbCwge3NjaGVtYSwganNvbjogdHJ1ZX0pIGFzIGFueVtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVEYXRhLmxlbmd0aCA8PSAxKSByZXR1cm4gZmlsZURhdGFbMF07XG5cbiAgICAgICAgaWYgKGlzR2l0bGFiU3BlY0ZpbGUoZmlsZURhdGFbMF0pKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dHNTcGVjaWZpY2F0aW9uOiBhbnkgPSBmaWxlRGF0YVswXTtcbiAgICAgICAgICAgIGNvbnN0IHVuaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnM6IGFueSA9IGZpbGVEYXRhWzFdO1xuXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucyA9IEpTT04uc3RyaW5naWZ5KHVuaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC8oPzxmaXJzdENoYXI+Lik/KD88c2Vjb25kQ2hhcj4uKT9cXCRcXFtcXFtcXHMqaW5wdXRzLig/PGludGVycG9sYXRpb25LZXk+W1xcdy1dKylcXHMqXFx8P1xccyooPzxpbnRlcnBvbGF0aW9uRnVuY3Rpb25zPi4qPylcXHMqXFxdXFxdKD88bGFzdENoYXI+W14kXSk/L2cgLy8gaHR0cHM6Ly9yZWdleHIuY29tLzgxYzE2XG4gICAgICAgICAgICAgICAgICAgICwgKF86IHN0cmluZywgZmlyc3RDaGFyOiBzdHJpbmcsIHNlY29uZENoYXI6IHN0cmluZywgaW50ZXJwb2xhdGlvbktleTogc3RyaW5nLCBpbnRlcnBvbGF0aW9uRnVuY3Rpb25zOiBzdHJpbmcsIGxhc3RDaGFyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHNTcGVjaWZpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoYXIgPz89IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRDaGFyID8/PSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXIgPz89IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtpbnB1dFZhbHVlLCBpbnB1dFR5cGV9ID0gcGFyc2VJbmNsdWRlSW5wdXRzKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RUd29DaGFyID0gZmlyc3RDaGFyICsgc2Vjb25kQ2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2Vjb25kQ2hhciA9PSBcIlxcXCJcIiAmJiBsYXN0Q2hhciA9PSBcIlxcXCJcIikgJiYgZmlyc3RDaGFyICE9IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGFyICsgSlNPTi5zdHJpbmdpZnkoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGJlaGF2ZXMgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZnJvbSBnaXRsYWIuY29tLiBJIGNhbid0IGNvbWUgdXAgd2l0aCBwcmFjdGljYWwgdXNlIGNhc2Ugc28gaSBkb24ndCB0aGluayBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgdG8gbWltaWMgdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RUd29DaGFyICsgSlNPTi5zdHJpbmdpZnkoSlNPTi5zdHJpbmdpZnkoaW5wdXRWYWx1ZSkpLnNsaWNlKDEsIC0xKSArIGxhc3RDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0VHdvQ2hhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBKU09OLnN0cmluZ2lmeShpbnB1dFZhbHVlKSAvLyBlbnN1cmUgYSB2YWxpZCBqc29uIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgxLCAtMSkgLy8gcmVtb3ZlIHRoZSBzdXJyb3VuZGluZyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsYXN0Q2hhcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNlY29uZENoYXIgPT0gXCJcXFwiXCIgJiYgbGFzdENoYXIgPT0gXCJcXFwiXCIpICYmIGZpcnN0Q2hhciAhPSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciArIGlucHV0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0VHdvQ2hhciArIGlucHV0VmFsdWUgKyBsYXN0Q2hhcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnN3aXRjaFN0YXRlbWVudEV4aGF1c3RpdmVDaGVjayhpbnB1dFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZURhdGFbMF07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0dpdGxhYlNwZWNGaWxlIChmaWxlRGF0YTogYW55KSB7XG4gICAgcmV0dXJuIFwic3BlY1wiIGluIGZpbGVEYXRhO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVycG9sYXRpb25LZXkgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2NvbmZpZ0ZpbGVQYXRoLCBpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICBjb25zdCBpbnZhbGlkSW50ZXJwb2xhdGlvbktleUVyciA9IGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiB1bmtub3duIGludGVycG9sYXRpb24ga2V5OiBcXGAke2ludGVycG9sYXRpb25LZXl9XFxgLmA7XG4gICAgYXNzZXJ0KGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHM/LltpbnRlcnBvbGF0aW9uS2V5XSAhPT0gdW5kZWZpbmVkLCBpbnZhbGlkSW50ZXJwb2xhdGlvbktleUVycik7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7aW50ZXJwb2xhdGlvbkZ1bmN0aW9ucywgY29uZmlnRmlsZVBhdGh9ID0gY3R4O1xuICAgIGlmIChpbnRlcnBvbGF0aW9uRnVuY3Rpb25zICE9IFwiXCIpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gaW50ZXJwb2xhdGlvbiBmdW5jdGlvbnMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmlhIGdpdGxhYi1jaS1sb2NhbC4gRnVuY3Rpb25zIHdpbGwganVzdCBiZSBhIG5vLW9wLmApO1xuICAgIH1cbiAgICBhc3NlcnQoaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucy5zcGxpdChcInxcIikubGVuZ3RoIDw9IE1BWF9GVU5DVElPTlMsIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiB0b28gbWFueSBmdW5jdGlvbnMgaW4gaW50ZXJwb2xhdGlvbiBibG9jay5gKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnB1dCAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7Y29uZmlnRmlsZVBhdGgsIGludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBnZXRJbnB1dFZhbHVlKGN0eCk7XG5cbiAgICBjb25zdCBvcHRpb25zID0gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8ub3B0aW9ucztcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBhc3NlcnQob3B0aW9ucy5pbmNsdWRlcyhpbnB1dFZhbHVlKSxcbiAgICAgICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogXFxge2JsdWVCcmlnaHQgJHtpbnB1dFZhbHVlfX1cXGAgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyBub3QgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBvcHRpb25zLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkSW5wdXRUeXBlID0gZ2V0RXhwZWN0ZWRJbnB1dFR5cGUoY3R4KTtcbiAgICBhc3NlcnQoSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTLmluY2x1ZGVzKGV4cGVjdGVkSW5wdXRUeXBlKSxcbiAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IGhlYWRlcjpzcGVjOmlucHV0czp7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fSBpbnB1dCB0eXBlIHVua25vd24gdmFsdWU6IHtibHVlQnJpZ2h0ICR7ZXhwZWN0ZWRJbnB1dFR5cGV9fS5gKTtcblxuICAgIGNvbnN0IGlucHV0VHlwZSA9IEFycmF5LmlzQXJyYXkoaW5wdXRWYWx1ZSkgPyBcImFycmF5XCIgOiB0eXBlb2YgaW5wdXRWYWx1ZTtcbiAgICBhc3NlcnQoaW5wdXRUeXBlID09PSBleHBlY3RlZElucHV0VHlwZSxcbiAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiBwcm92aWRlZCB2YWx1ZSBpcyBub3QgYSB7Ymx1ZUJyaWdodCAke2V4cGVjdGVkSW5wdXRUeXBlfX0uYCk7XG5cbiAgICBjb25zdCByZWdleCA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LnJlZ2V4O1xuICAgIGlmIChyZWdleCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBzcGVjOmlucHV0czpyZWdleCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2aWEgZ2l0bGFiLWNpLWxvY2FsLiBUaGlzIHdpbGwganVzdCBiZSBhIG5vLW9wLmApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VJbmNsdWRlSW5wdXRzIChjdHg6IGFueSk6IHtpbnB1dFZhbHVlOiBhbnk7IGlucHV0VHlwZTogSW5wdXRUeXBlfSB7XG4gICAgdmFsaWRhdGVJbnRlcnBvbGF0aW9uS2V5KGN0eCk7XG4gICAgdmFsaWRhdGVJbnRlcnBvbGF0aW9uRnVuY3Rpb25zKGN0eCk7XG4gICAgdmFsaWRhdGVJbnB1dChjdHgpO1xuICAgIHJldHVybiB7aW5wdXRWYWx1ZTogZ2V0SW5wdXRWYWx1ZShjdHgpLCBpbnB1dFR5cGU6IGdldEV4cGVjdGVkSW5wdXRUeXBlKGN0eCl9O1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dFZhbHVlIChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtpbnB1dHMsIGludGVycG9sYXRpb25LZXksIGNvbmZpZ0ZpbGVQYXRoLCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gaW5wdXRzW2ludGVycG9sYXRpb25LZXldIHx8IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LmRlZmF1bHQ7XG4gICAgYXNzZXJ0KGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCwgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiByZXF1aXJlZCB2YWx1ZSBoYXMgbm90IGJlZW4gcHJvdmlkZWQuYCk7XG4gICAgcmV0dXJuIGlucHV0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldEV4cGVjdGVkSW5wdXRUeXBlIChjdHg6IGFueSk6IElucHV0VHlwZSB7XG4gICAgY29uc3Qge2ludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIHJldHVybiBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy50eXBlIHx8IFwic3RyaW5nXCI7XG59XG4iXX0=
|
|
@@ -43,12 +43,12 @@ export class VariablesFromFiles {
|
|
|
43
43
|
const { type, values } = unpack(val);
|
|
44
44
|
for (const [matcher, content] of Object.entries(values)) {
|
|
45
45
|
assert(typeof content == "string", `${key}.${matcher} content must be text or multiline text`);
|
|
46
|
-
if (isDotEnv || type === "variable" || (type === null && !/^[
|
|
46
|
+
if (isDotEnv || type === "variable" || (type === null && !/^[/~]/.exec(content))) {
|
|
47
47
|
const regexp = matcher === "*" ? /.*/g : new RegExp(`^${matcher.replace(/\*/g, ".*")}$`, "g");
|
|
48
48
|
variables[key] = variables[key] ?? { type: "variable", environments: [] };
|
|
49
49
|
variables[key].environments.push({ content, regexp, regexpPriority: matcher.length, scopePriority });
|
|
50
50
|
}
|
|
51
|
-
else if (type === null && /^[
|
|
51
|
+
else if (type === null && /^[/~]/.exec(content)) {
|
|
52
52
|
const fileSource = content.replace(/^~\/(.*)/, `${homeDir}/$1`);
|
|
53
53
|
const regexp = matcher === "*" ? /.*/g : new RegExp(`^${matcher.replace(/\*/g, ".*")}$`, "g");
|
|
54
54
|
variables[key] = variables[key] ?? { type: "file", environments: [] };
|
|
@@ -133,4 +133,4 @@ export class VariablesFromFiles {
|
|
|
133
133
|
return key.replace(":", "/");
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLWZyb20tZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2YXJpYWJsZXMtZnJvbS1maWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQWE1QixNQUFNLE9BQU8sa0JBQWtCO0lBRTNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLElBQVUsRUFBRSxZQUEwQixFQUFFLE9BQWdCO1FBQ3ZFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsT0FBTyxJQUFJLFFBQVEsZ0JBQWdCLENBQUM7UUFDakUsTUFBTSxTQUFTLEdBQW1DLEVBQUUsQ0FBQztRQUNyRCxJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxZQUFZLEdBQVEsRUFBRSxDQUFDO1FBRTNCLElBQUksZUFBZSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLEdBQUcseUNBQXlDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLDZH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LENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zLmpzXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhLmpzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gXCJqcy15YW1sXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3YuanNcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENJQ0RWYXJpYWJsZSB7XG4gICAgdHlwZTogXCJmaWxlXCIgfCBcInZhcmlhYmxlXCI7XG4gICAgZW52aXJvbm1lbnRzOiB7XG4gICAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICAgICAgcmVnZXhwOiBSZWdFeHA7XG4gICAgICAgIHJlZ2V4cFByaW9yaXR5OiBudW1iZXI7XG4gICAgICAgIHNjb3BlUHJpb3JpdHk6IG51bWJlcjtcbiAgICAgICAgZmlsZVNvdXJjZT86IHN0cmluZztcbiAgICB9W107XG59XG5cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZXNGcm9tRmlsZXMge1xuXG4gICAgc3RhdGljIGFzeW5jIGluaXQgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBnaXREYXRhOiBHaXREYXRhKTogUHJvbWlzZTx7W25hbWU6IHN0cmluZ106IENJQ0RWYXJpYWJsZX0+IHtcbiAgICAgICAgY29uc3QgY3dkID0gYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgaG9tZURpciA9IGFyZ3YuaG9tZTtcbiAgICAgICAgY29uc3QgcmVtb3RlVmFyaWFibGVzID0gYXJndi5yZW1vdGVWYXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGF1dG9Db21wbGV0aW5nID0gYXJndi5hdXRvQ29tcGxldGluZztcbiAgICAgICAgY29uc3QgaG9tZVZhcmlhYmxlc0ZpbGUgPSBgJHtob21lRGlyfS8ke3N0YXRlRGlyfS92YXJpYWJsZXMueW1sYDtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IENJQ0RWYXJpYWJsZX0gPSB7fTtcbiAgICAgICAgbGV0IHJlbW90ZUZpbGVEYXRhOiBhbnkgPSB7fTtcbiAgICAgICAgbGV0IGhvbWVGaWxlRGF0YTogYW55ID0ge307XG5cbiAgICAgICAgaWYgKHJlbW90ZVZhcmlhYmxlcyAmJiAhYXV0b0NvbXBsZXRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gLyg/PHVybD5naXRALio/KT0oPzxmaWxlPi4qPyk9KD88cmVmPi4qKS8uZXhlYyhyZW1vdGVWYXJpYWJsZXMpO1xuICAgICAgICAgICAgYXNzZXJ0KG1hdGNoICE9IG51bGwsIFwiLS1yZW1vdGUtdmFyaWFibGVzIGlzIG1hbGZvcm1lZCB1c2UgJ2dpdEBnaXRsYWIuY29tOmZpcmVjb3cvZXhhbXBsZS5naXQ9Z2l0bGFiLXZhcmlhYmxlcy55bWw9bWFzdGVyJyBzeW50YXhcIik7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBtYXRjaC5ncm91cHM/LnVybDtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBtYXRjaC5ncm91cHM/LmZpbGU7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBtYXRjaC5ncm91cHM/LnJlZjtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IFV0aWxzLmJhc2goYHNldCAtZW91IHBpcGVmYWlsOyBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0ke3VybH0gJHtyZWZ9ICR7ZmlsZX0gfCB0YXIgLXhPICR7ZmlsZX1gLCBjd2QpO1xuICAgICAgICAgICAgcmVtb3RlRmlsZURhdGEgPSB5YW1sLmxvYWQoYCR7cmVzLnN0ZG91dH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGhvbWVWYXJpYWJsZXNGaWxlKSkge1xuICAgICAgICAgICAgaG9tZUZpbGVEYXRhID0geWFtbC5sb2FkKGF3YWl0IGZzLnJlYWRGaWxlKGhvbWVWYXJpYWJsZXNGaWxlLCBcInV0ZjhcIiksIHtzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bnBhY2sgPSAodjogYW55KToge3ZhbHVlczogYW55OyB0eXBlOiBcImZpbGVcIiB8IFwidmFyaWFibGVcIiB8IG51bGx9ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhdGNoQWxsOiB7dmFsdWVzOiBhbnk7IHR5cGU6IFwiZmlsZVwiIHwgXCJ2YXJpYWJsZVwiIHwgbnVsbH0gPSB7dmFsdWVzOiB7fSwgdHlwZTogbnVsbH07XG4gICAgICAgICAgICAgICAgY2F0Y2hBbGwudmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgY2F0Y2hBbGwudmFsdWVzW1wiKlwiXSA9IHY7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGNoQWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2LnR5cGUgPSB2LnR5cGUgPz8gXCJ2YXJpYWJsZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFkZFRvVmFyaWFibGVzID0gYXN5bmMgKGtleTogc3RyaW5nLCB2YWw6IGFueSwgc2NvcGVQcmlvcml0eTogbnVtYmVyLCBpc0RvdEVudiA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7dHlwZSwgdmFsdWVzfSA9IHVucGFjayh2YWwpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbWF0Y2hlciwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXModmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgY29udGVudCA9PSBcInN0cmluZ1wiLCBgJHtrZXl9LiR7bWF0Y2hlcn0gY29udGVudCBtdXN0IGJlIHRleHQgb3IgbXVsdGlsaW5lIHRleHRgKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEb3RFbnYgfHwgdHlwZSA9PT0gXCJ2YXJpYWJsZVwiIHx8ICh0eXBlID09PSBudWxsICYmICEvXlsvfH5dLy5leGVjKGNvbnRlbnQpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleHAgPSBtYXRjaGVyID09PSBcIipcIiA/IC8uKi9nIDogbmV3IFJlZ0V4cChgXiR7bWF0Y2hlci5yZXBsYWNlKC9cXCovZywgXCIuKlwiKX0kYCwgXCJnXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHZhcmlhYmxlc1trZXldID8/IHt0eXBlOiBcInZhcmlhYmxlXCIsIGVudmlyb25tZW50czogW119O1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XS5lbnZpcm9ubWVudHMucHVzaCh7Y29udGVudCwgcmVnZXhwLCByZWdleHBQcmlvcml0eTogbWF0Y2hlci5sZW5ndGgsIHNjb3BlUHJpb3JpdHl9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IG51bGwgJiYgL15bL3x+XS8uZXhlYyhjb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlU291cmNlID0gY29udGVudC5yZXBsYWNlKC9eflxcLyguKikvLCBgJHtob21lRGlyfS8kMWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleHAgPSBtYXRjaGVyID09PSBcIipcIiA/IC8uKi9nIDogbmV3IFJlZ0V4cChgXiR7bWF0Y2hlci5yZXBsYWNlKC9cXCovZywgXCIuKlwiKX0kYCwgXCJnXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHZhcmlhYmxlc1trZXldID8/IHt0eXBlOiBcImZpbGVcIiwgZW52aXJvbm1lbnRzOiBbXX07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGZpbGVTb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XS5lbnZpcm9ubWVudHMucHVzaCh7Y29udGVudCwgcmVnZXhwLCByZWdleHBQcmlvcml0eTogbWF0Y2hlci5sZW5ndGgsIHNjb3BlUHJpb3JpdHksIGZpbGVTb3VyY2V9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldLmVudmlyb25tZW50cy5wdXNoKHtjb250ZW50OiBgd2FybjogJHtrZXl9IGlzIHBvaW50aW5nIHRvIGludmFsaWQgcGF0aFxcbmAsIHJlZ2V4cCwgcmVnZXhwUHJpb3JpdHk6IG1hdGNoZXIubGVuZ3RoLCBzY29wZVByaW9yaXR5fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiZmlsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4cCA9IG1hdGNoZXIgPT09IFwiKlwiID8gLy4qL2cgOiBuZXcgUmVnRXhwKGBeJHttYXRjaGVyLnJlcGxhY2UoL1xcKi9nLCBcIi4qXCIpfSRgLCBcImdcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldID0gdmFyaWFibGVzW2tleV0gPz8ge3R5cGU6IFwiZmlsZVwiLCBlbnZpcm9ubWVudHM6IFtdfTtcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzW2tleV0uZW52aXJvbm1lbnRzLnB1c2goe2NvbnRlbnQsIHJlZ2V4cCwgcmVnZXhwUHJpb3JpdHk6IG1hdGNoZXIubGVuZ3RoLCBzY29wZVByaW9yaXR5fSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgJHtrZXl9IHdhcyBub3QgaGFuZGxlZCBwcm9wZXJseWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhZGRWYXJpYWJsZUZpbGVUb1ZhcmlhYmxlcyA9IGFzeW5jIChmaWxlRGF0YTogYW55LCBmaWxlUHJpb3JpdHk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZ2xvYmFsS2V5LCBnbG9iYWxFbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoZmlsZURhdGE/Lmdsb2JhbCA/PyB7fSkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhZGRUb1ZhcmlhYmxlcyhnbG9iYWxLZXksIGdsb2JhbEVudHJ5LCAxICsgZmlsZVByaW9yaXR5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ3JvdXBVcmwgPSBgJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS9gO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZ3JvdXBLZXksIGdyb3VwRW50cmllc10gb2YgT2JqZWN0LmVudHJpZXMoZmlsZURhdGE/Lmdyb3VwID8/IHt9KSkge1xuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBVcmwuaW5jbHVkZXModGhpcy5ub3JtYWxpemVQcm9qZWN0S2V5KGdyb3VwS2V5LCB3cml0ZVN0cmVhbXMpKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGdyb3VwRW50cmllcyAhPSBudWxsLCBcImdyb3VwRW50cmllcyBjYW5ub3QgYmUgbnVsbC91bmRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KFV0aWxzLmlzT2JqZWN0KGdyb3VwRW50cmllcyksIFwiZ3JvdXAgZW50cmllcyBpbiB2YXJpYWJsZSBmaWxlcyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhncm91cEVudHJpZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGFkZFRvVmFyaWFibGVzKGssIHYsIDIgKyBmaWxlUHJpb3JpdHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHJvamVjdFVybCA9IGAke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0uZ2l0YDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW3Byb2plY3RLZXksIHByb2plY3RFbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyhmaWxlRGF0YT8ucHJvamVjdCA/PyBbXSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RVcmwuaW5jbHVkZXModGhpcy5ub3JtYWxpemVQcm9qZWN0S2V5KHByb2plY3RLZXksIHdyaXRlU3RyZWFtcykpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBhc3NlcnQocHJvamVjdEVudHJpZXMgIT0gbnVsbCwgXCJwcm9qZWN0RW50cmllcyBjYW5ub3QgYmUgbnVsbC91bmRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KFV0aWxzLmlzT2JqZWN0KHByb2plY3RFbnRyaWVzKSwgXCJwcm9qZWN0IGVudHJpZXMgaW4gdmFyaWFibGUgZmlsZXMgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocHJvamVjdEVudHJpZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGFkZFRvVmFyaWFibGVzKGssIHYsIDMgKyBmaWxlUHJpb3JpdHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBhZGRWYXJpYWJsZUZpbGVUb1ZhcmlhYmxlcyhyZW1vdGVGaWxlRGF0YSwgMCk7XG4gICAgICAgIGF3YWl0IGFkZFZhcmlhYmxlRmlsZVRvVmFyaWFibGVzKGhvbWVGaWxlRGF0YSwgMTApO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RWYXJpYWJsZXNGaWxlID0gYCR7YXJndi5jd2R9LyR7YXJndi52YXJpYWJsZXNGaWxlfWA7XG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHByb2plY3RWYXJpYWJsZXNGaWxlKSkge1xuICAgICAgICAgICAgbGV0IGlzRG90RW52Rm9ybWF0ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0VmFyaWFibGVzRmlsZVJhd0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9qZWN0VmFyaWFibGVzRmlsZSwgXCJ1dGY4XCIpO1xuICAgICAgICAgICAgbGV0IHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhID0geWFtbC5sb2FkKHByb2plY3RWYXJpYWJsZXNGaWxlUmF3Q29udGVudCwge3NjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUF9KSA/PyB7fTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YocHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhKSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpc0RvdEVudkZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSA9IGRvdGVudi5wYXJzZShwcm9qZWN0VmFyaWFibGVzRmlsZVJhd0NvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIHlhbWwuWUFNTEV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpc0RvdEVudkZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSA9IGRvdGVudi5wYXJzZShwcm9qZWN0VmFyaWFibGVzRmlsZVJhd0NvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2VydChwcm9qZWN0VmFyaWFibGVzRmlsZURhdGEgIT0gbnVsbCwgXCJwcm9qZWN0RW50cmllcyBjYW5ub3QgYmUgbnVsbC91bmRlZmluZWRcIik7XG4gICAgICAgICAgICBhc3NlcnQoVXRpbHMuaXNPYmplY3QocHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhKSwgYCR7YXJndi5jd2R9Ly5naXRsYWItY2ktbG9jYWwtdmFyaWFibGVzLnltbCBtdXN0IGNvbnRhaW4gYW4gb2JqZWN0YCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwcm9qZWN0VmFyaWFibGVzRmlsZURhdGEpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkVG9WYXJpYWJsZXMoaywgdiwgMjQsIGlzRG90RW52Rm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFyT2JqIG9mIE9iamVjdC52YWx1ZXModmFyaWFibGVzKSkge1xuICAgICAgICAgICAgdmFyT2JqLmVudmlyb25tZW50cy5zb3J0KChhLCBiKSA9PiBiLnNjb3BlUHJpb3JpdHkgLSBhLnNjb3BlUHJpb3JpdHkpO1xuICAgICAgICAgICAgdmFyT2JqLmVudmlyb25tZW50cy5zb3J0KChhLCBiKSA9PiBiLnJlZ2V4cFByaW9yaXR5IC0gYS5yZWdleHBQcmlvcml0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFyaWFibGVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBub3JtYWxpemVQcm9qZWN0S2V5IChrZXk6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWtleS5pbmNsdWRlcyhcIjpcIikpIHJldHVybiBrZXk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBXQVJOSU5HOiBJbnRlcnByZXRpbmcgJyR7a2V5fScgYXMgJyR7a2V5LnJlcGxhY2UoXCI6XCIsIFwiL1wiKX0nfVxcbmApO1xuICAgICAgICByZXR1cm4ga2V5LnJlcGxhY2UoXCI6XCIsIFwiL1wiKTtcbiAgICB9XG59XG4iXX0=
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLWZyb20tZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2YXJpYWJsZXMtZnJvbS1maWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQWE1QixNQUFNLE9BQU8sa0JBQWtCO0lBRTNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLElBQVUsRUFBRSxZQUEwQixFQUFFLE9BQWdCO1FBQ3ZFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsT0FBTyxJQUFJLFFBQVEsZ0JBQWdCLENBQUM7UUFDakUsTUFBTSxTQUFTLEdBQW1DLEVBQUUsQ0FBQztRQUNyRCxJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxZQUFZLEdBQVEsRUFBRSxDQUFDO1FBRTNCLElBQUksZUFBZSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLEdBQUcseUNBQXlDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLDZH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LENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zLmpzXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhLmpzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gXCJqcy15YW1sXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3YuanNcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENJQ0RWYXJpYWJsZSB7XG4gICAgdHlwZTogXCJmaWxlXCIgfCBcInZhcmlhYmxlXCI7XG4gICAgZW52aXJvbm1lbnRzOiB7XG4gICAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICAgICAgcmVnZXhwOiBSZWdFeHA7XG4gICAgICAgIHJlZ2V4cFByaW9yaXR5OiBudW1iZXI7XG4gICAgICAgIHNjb3BlUHJpb3JpdHk6IG51bWJlcjtcbiAgICAgICAgZmlsZVNvdXJjZT86IHN0cmluZztcbiAgICB9W107XG59XG5cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZXNGcm9tRmlsZXMge1xuXG4gICAgc3RhdGljIGFzeW5jIGluaXQgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBnaXREYXRhOiBHaXREYXRhKTogUHJvbWlzZTx7W25hbWU6IHN0cmluZ106IENJQ0RWYXJpYWJsZX0+IHtcbiAgICAgICAgY29uc3QgY3dkID0gYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgaG9tZURpciA9IGFyZ3YuaG9tZTtcbiAgICAgICAgY29uc3QgcmVtb3RlVmFyaWFibGVzID0gYXJndi5yZW1vdGVWYXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGF1dG9Db21wbGV0aW5nID0gYXJndi5hdXRvQ29tcGxldGluZztcbiAgICAgICAgY29uc3QgaG9tZVZhcmlhYmxlc0ZpbGUgPSBgJHtob21lRGlyfS8ke3N0YXRlRGlyfS92YXJpYWJsZXMueW1sYDtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IENJQ0RWYXJpYWJsZX0gPSB7fTtcbiAgICAgICAgbGV0IHJlbW90ZUZpbGVEYXRhOiBhbnkgPSB7fTtcbiAgICAgICAgbGV0IGhvbWVGaWxlRGF0YTogYW55ID0ge307XG5cbiAgICAgICAgaWYgKHJlbW90ZVZhcmlhYmxlcyAmJiAhYXV0b0NvbXBsZXRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gLyg/PHVybD5naXRALio/KT0oPzxmaWxlPi4qPyk9KD88cmVmPi4qKS8uZXhlYyhyZW1vdGVWYXJpYWJsZXMpO1xuICAgICAgICAgICAgYXNzZXJ0KG1hdGNoICE9IG51bGwsIFwiLS1yZW1vdGUtdmFyaWFibGVzIGlzIG1hbGZvcm1lZCB1c2UgJ2dpdEBnaXRsYWIuY29tOmZpcmVjb3cvZXhhbXBsZS5naXQ9Z2l0bGFiLXZhcmlhYmxlcy55bWw9bWFzdGVyJyBzeW50YXhcIik7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBtYXRjaC5ncm91cHM/LnVybDtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBtYXRjaC5ncm91cHM/LmZpbGU7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBtYXRjaC5ncm91cHM/LnJlZjtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IFV0aWxzLmJhc2goYHNldCAtZW91IHBpcGVmYWlsOyBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0ke3VybH0gJHtyZWZ9ICR7ZmlsZX0gfCB0YXIgLXhPICR7ZmlsZX1gLCBjd2QpO1xuICAgICAgICAgICAgcmVtb3RlRmlsZURhdGEgPSB5YW1sLmxvYWQoYCR7cmVzLnN0ZG91dH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGhvbWVWYXJpYWJsZXNGaWxlKSkge1xuICAgICAgICAgICAgaG9tZUZpbGVEYXRhID0geWFtbC5sb2FkKGF3YWl0IGZzLnJlYWRGaWxlKGhvbWVWYXJpYWJsZXNGaWxlLCBcInV0ZjhcIiksIHtzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bnBhY2sgPSAodjogYW55KToge3ZhbHVlczogYW55OyB0eXBlOiBcImZpbGVcIiB8IFwidmFyaWFibGVcIiB8IG51bGx9ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhdGNoQWxsOiB7dmFsdWVzOiBhbnk7IHR5cGU6IFwiZmlsZVwiIHwgXCJ2YXJpYWJsZVwiIHwgbnVsbH0gPSB7dmFsdWVzOiB7fSwgdHlwZTogbnVsbH07XG4gICAgICAgICAgICAgICAgY2F0Y2hBbGwudmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgY2F0Y2hBbGwudmFsdWVzW1wiKlwiXSA9IHY7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGNoQWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2LnR5cGUgPSB2LnR5cGUgPz8gXCJ2YXJpYWJsZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFkZFRvVmFyaWFibGVzID0gYXN5bmMgKGtleTogc3RyaW5nLCB2YWw6IGFueSwgc2NvcGVQcmlvcml0eTogbnVtYmVyLCBpc0RvdEVudiA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7dHlwZSwgdmFsdWVzfSA9IHVucGFjayh2YWwpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbWF0Y2hlciwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXModmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgY29udGVudCA9PSBcInN0cmluZ1wiLCBgJHtrZXl9LiR7bWF0Y2hlcn0gY29udGVudCBtdXN0IGJlIHRleHQgb3IgbXVsdGlsaW5lIHRleHRgKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEb3RFbnYgfHwgdHlwZSA9PT0gXCJ2YXJpYWJsZVwiIHx8ICh0eXBlID09PSBudWxsICYmICEvXlsvfl0vLmV4ZWMoY29udGVudCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4cCA9IG1hdGNoZXIgPT09IFwiKlwiID8gLy4qL2cgOiBuZXcgUmVnRXhwKGBeJHttYXRjaGVyLnJlcGxhY2UoL1xcKi9nLCBcIi4qXCIpfSRgLCBcImdcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldID0gdmFyaWFibGVzW2tleV0gPz8ge3R5cGU6IFwidmFyaWFibGVcIiwgZW52aXJvbm1lbnRzOiBbXX07XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldLmVudmlyb25tZW50cy5wdXNoKHtjb250ZW50LCByZWdleHAsIHJlZ2V4cFByaW9yaXR5OiBtYXRjaGVyLmxlbmd0aCwgc2NvcGVQcmlvcml0eX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gbnVsbCAmJiAvXlsvfl0vLmV4ZWMoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZVNvdXJjZSA9IGNvbnRlbnQucmVwbGFjZSgvXn5cXC8oLiopLywgYCR7aG9tZURpcn0vJDFgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVnZXhwID0gbWF0Y2hlciA9PT0gXCIqXCIgPyAvLiovZyA6IG5ldyBSZWdFeHAoYF4ke21hdGNoZXIucmVwbGFjZSgvXFwqL2csIFwiLipcIil9JGAsIFwiZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzW2tleV0gPSB2YXJpYWJsZXNba2V5XSA/PyB7dHlwZTogXCJmaWxlXCIsIGVudmlyb25tZW50czogW119O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlU291cmNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzW2tleV0uZW52aXJvbm1lbnRzLnB1c2goe2NvbnRlbnQsIHJlZ2V4cCwgcmVnZXhwUHJpb3JpdHk6IG1hdGNoZXIubGVuZ3RoLCBzY29wZVByaW9yaXR5LCBmaWxlU291cmNlfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XS5lbnZpcm9ubWVudHMucHVzaCh7Y29udGVudDogYHdhcm46ICR7a2V5fSBpcyBwb2ludGluZyB0byBpbnZhbGlkIHBhdGhcXG5gLCByZWdleHAsIHJlZ2V4cFByaW9yaXR5OiBtYXRjaGVyLmxlbmd0aCwgc2NvcGVQcmlvcml0eX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcImZpbGVcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleHAgPSBtYXRjaGVyID09PSBcIipcIiA/IC8uKi9nIDogbmV3IFJlZ0V4cChgXiR7bWF0Y2hlci5yZXBsYWNlKC9cXCovZywgXCIuKlwiKX0kYCwgXCJnXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHZhcmlhYmxlc1trZXldID8/IHt0eXBlOiBcImZpbGVcIiwgZW52aXJvbm1lbnRzOiBbXX07XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldLmVudmlyb25tZW50cy5wdXNoKHtjb250ZW50LCByZWdleHAsIHJlZ2V4cFByaW9yaXR5OiBtYXRjaGVyLmxlbmd0aCwgc2NvcGVQcmlvcml0eX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSwgYCR7a2V5fSB3YXMgbm90IGhhbmRsZWQgcHJvcGVybHlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYWRkVmFyaWFibGVGaWxlVG9WYXJpYWJsZXMgPSBhc3luYyAoZmlsZURhdGE6IGFueSwgZmlsZVByaW9yaXR5OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2dsb2JhbEtleSwgZ2xvYmFsRW50cnldIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVEYXRhPy5nbG9iYWwgPz8ge30pKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkVG9WYXJpYWJsZXMoZ2xvYmFsS2V5LCBnbG9iYWxFbnRyeSwgMSArIGZpbGVQcmlvcml0eSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwVXJsID0gYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vYDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2dyb3VwS2V5LCBncm91cEVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVEYXRhPy5ncm91cCA/PyB7fSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWdyb3VwVXJsLmluY2x1ZGVzKHRoaXMubm9ybWFsaXplUHJvamVjdEtleShncm91cEtleSwgd3JpdGVTdHJlYW1zKSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGFzc2VydChncm91cEVudHJpZXMgIT0gbnVsbCwgXCJncm91cEVudHJpZXMgY2Fubm90IGJlIG51bGwvdW5kZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChVdGlscy5pc09iamVjdChncm91cEVudHJpZXMpLCBcImdyb3VwIGVudHJpZXMgaW4gdmFyaWFibGUgZmlsZXMgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXBFbnRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZGRUb1ZhcmlhYmxlcyhrLCB2LCAyICsgZmlsZVByaW9yaXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByb2plY3RVcmwgPSBgJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9LmdpdGA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtwcm9qZWN0S2V5LCBwcm9qZWN0RW50cmllc10gb2YgT2JqZWN0LmVudHJpZXMoZmlsZURhdGE/LnByb2plY3QgPz8gW10pKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0VXJsLmluY2x1ZGVzKHRoaXMubm9ybWFsaXplUHJvamVjdEtleShwcm9qZWN0S2V5LCB3cml0ZVN0cmVhbXMpKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHByb2plY3RFbnRyaWVzICE9IG51bGwsIFwicHJvamVjdEVudHJpZXMgY2Fubm90IGJlIG51bGwvdW5kZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChVdGlscy5pc09iamVjdChwcm9qZWN0RW50cmllcyksIFwicHJvamVjdCBlbnRyaWVzIGluIHZhcmlhYmxlIGZpbGVzIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHByb2plY3RFbnRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZGRUb1ZhcmlhYmxlcyhrLCB2LCAzICsgZmlsZVByaW9yaXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYWRkVmFyaWFibGVGaWxlVG9WYXJpYWJsZXMocmVtb3RlRmlsZURhdGEsIDApO1xuICAgICAgICBhd2FpdCBhZGRWYXJpYWJsZUZpbGVUb1ZhcmlhYmxlcyhob21lRmlsZURhdGEsIDEwKTtcblxuICAgICAgICBjb25zdCBwcm9qZWN0VmFyaWFibGVzRmlsZSA9IGAke2FyZ3YuY3dkfS8ke2FyZ3YudmFyaWFibGVzRmlsZX1gO1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhwcm9qZWN0VmFyaWFibGVzRmlsZSkpIHtcbiAgICAgICAgICAgIGxldCBpc0RvdEVudkZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdFZhcmlhYmxlc0ZpbGVSYXdDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocHJvamVjdFZhcmlhYmxlc0ZpbGUsIFwidXRmOFwiKTtcbiAgICAgICAgICAgIGxldCBwcm9qZWN0VmFyaWFibGVzRmlsZURhdGE7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSA9IHlhbWwubG9hZChwcm9qZWN0VmFyaWFibGVzRmlsZVJhd0NvbnRlbnQsIHtzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BfSkgPz8ge307XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEb3RFbnZGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0VmFyaWFibGVzRmlsZURhdGEgPSBkb3RlbnYucGFyc2UocHJvamVjdFZhcmlhYmxlc0ZpbGVSYXdDb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB5YW1sLllBTUxFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEb3RFbnZGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0VmFyaWFibGVzRmlsZURhdGEgPSBkb3RlbnYucGFyc2UocHJvamVjdFZhcmlhYmxlc0ZpbGVSYXdDb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3NlcnQocHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhICE9IG51bGwsIFwicHJvamVjdEVudHJpZXMgY2Fubm90IGJlIG51bGwvdW5kZWZpbmVkXCIpO1xuICAgICAgICAgICAgYXNzZXJ0KFV0aWxzLmlzT2JqZWN0KHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSksIGAke2FyZ3YuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsLXZhcmlhYmxlcy55bWwgbXVzdCBjb250YWluIGFuIG9iamVjdGApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGFkZFRvVmFyaWFibGVzKGssIHYsIDI0LCBpc0RvdEVudkZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZhck9iaiBvZiBPYmplY3QudmFsdWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIHZhck9iai5lbnZpcm9ubWVudHMuc29ydCgoYSwgYikgPT4gYi5zY29wZVByaW9yaXR5IC0gYS5zY29wZVByaW9yaXR5KTtcbiAgICAgICAgICAgIHZhck9iai5lbnZpcm9ubWVudHMuc29ydCgoYSwgYikgPT4gYi5yZWdleHBQcmlvcml0eSAtIGEucmVnZXhwUHJpb3JpdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgbm9ybWFsaXplUHJvamVjdEtleSAoa2V5OiBzdHJpbmcsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFrZXkuaW5jbHVkZXMoXCI6XCIpKSByZXR1cm4ga2V5O1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgV0FSTklORzogSW50ZXJwcmV0aW5nICcke2tleX0nIGFzICcke2tleS5yZXBsYWNlKFwiOlwiLCBcIi9cIil9J31cXG5gKTtcbiAgICAgICAgcmV0dXJuIGtleS5yZXBsYWNlKFwiOlwiLCBcIi9cIik7XG4gICAgfVxufVxuIl19
|