sliftutils 1.7.138 → 1.7.140
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/misc/dist/strings.ts.cache +2 -2
- package/misc/https/dist/certs.ts.cache +2 -2
- package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
- package/package.json +1 -1
- package/security/machines/dist/machines.ts.cache +13 -13
- package/storage/remoteStorage/createArchives.ts +82 -76
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +3 -4
- package/storage/remoteStorage/dist/createArchives.ts.cache +82 -81
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +3 -3
- package/storage/remoteStorage/dist/storageController.ts.cache +3 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.ellipsize = void 0;
|
|
4
4
|
function ellipsize(text, maxLength) {
|
|
@@ -9,4 +9,4 @@ function ellipsize(text, maxLength) {
|
|
|
9
9
|
}
|
|
10
10
|
exports.ellipsize = ellipsize;
|
|
11
11
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsU0FBUyxDQUFDLElBQVksRUFBRSxTQUFpQjtJQUNyRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNoRCxDQUFDO0FBTEQsOEJBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZWxsaXBzaXplKHRleHQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA8PSBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0LnNsaWNlKDAsIG1heExlbmd0aCAtIDMpICsgXCIuLi5cIjtcbn1cbiJdfQ==
|
|
12
|
-
/* _JS_SOURCE_HASH = "
|
|
12
|
+
/* _JS_SOURCE_HASH = "2940a18b46d3e6b0349b3768588927e9002bfc3a985f2b84c32f2ad2f84813ff"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
/// <reference path="./node-forge-ed25519.d.ts" />
|
|
3
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
4
|
if (k2 === undefined) k2 = k;
|
|
@@ -474,4 +474,4 @@ function getOwnNodeIdAllowUndefined() {
|
|
|
474
474
|
}
|
|
475
475
|
exports.getOwnNodeIdAllowUndefined = getOwnNodeIdAllowUndefined;
|
|
476
476
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsa0RBQWtEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRCwrbkJBQStuQjtBQUMvbkIsc0lBQXNJO0FBRXRJLGlEQUFpRDtBQUVqRCx1RUFBK0Q7QUFDL0Qsa0RBQW9DO0FBR3BDLHlEQUEwRDtBQUUxRCwwREFBK0I7QUFDL0Isb0RBQTRCO0FBQzVCLDZEQUFpRTtBQUNqRSxtRUFBOEY7QUFDOUYsNkRBQWtIO0FBQ2xILG1FQUFnRTtBQUNoRSw2REFBMEU7QUFDMUUscUVBQWtHO0FBQ2xHLHdDQUF1QztBQUV2QyxJQUFBLHNCQUFPLEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsSUFBQSxzQkFBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRW5ELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUV6QixRQUFBLGtCQUFrQixHQUFHLHNDQUFzQyxDQUFDO0FBRTVELFFBQUEsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO0FBR2pELFNBQVMsZ0JBQWdCLENBQUMsTUFBYztJQUNwQyxPQUFPLElBQUEsb0NBQVcsRUFBc0IsTUFBTSxFQUFFLDBCQUFrQixDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxtRkFBbUY7QUFDbkYsU0FBZ0IsdUJBQXVCLENBQUMsTUFBYztJQUNsRCxPQUFPLElBQUEsNENBQW1CLEVBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSwwQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUZELDBEQUVDO0FBRUQsa0dBQWtHO0FBQ2xHLFNBQWdCLHVCQUF1QjtJQUNuQyxPQUFPLElBQUEsNkNB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LENBQUMsSUFBQSxjQUFJLEVBQUMsR0FBRyxFQUFFO0lBQzdELElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixPQUFPLGdCQUFnQixDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVKLFNBQWdCLFlBQVk7SUFDeEIsSUFBSSxNQUFNLEdBQUcsK0JBQWMsQ0FBQyxhQUFhLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBTkQsb0NBTUM7QUFFRCxTQUFnQiwwQkFBMEI7SUFDdEMsT0FBTywrQkFBYyxDQUFDLGFBQWEsQ0FBQztBQUN4QyxDQUFDO0FBRkQsZ0VBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi9ub2RlLWZvcmdlLWVkMjU1MTkuZC50c1wiIC8+XG5cbi8vIE5PVEU6IFdlIGNhbid0IHVzZSBjcnlwdG8uc3VidGxlIChub24tZXh0cmFjdGFibGUgQ3J5cHRvS2V5cykgZm9yIG91ciBrZXlzLCBiZWNhdXNlIHN1YnRsZSBpcyBhc3luY2hyb25vdXMsIGFuZCBldmVyeXRoaW5nIGhlcmUgKGtleSBnZW5lcmF0aW9uLCBjZXJ0IGNyZWF0aW9uLCBzaWduaW5nKSBtdXN0IGJlIGF2YWlsYWJsZSBzeW5jaHJvbm91c2x5LiBUaGUgb25seSByZWFsIGJlbmVmaXQgb2Ygc3VidGxlIGlzIHRoYXQgYSBjcm9zcy1zaXRlIHNjcmlwdGluZyBhdHRhY2sgY2FuJ3QgZXhmaWx0cmF0ZSB0aGUga2V5LiBXaGljaCwgd2hpbGUgbmljZSwgaXMgb2YgbWlub3IgYmVuZWZpdCwgYXMgdGhlIGNyb3NzLXNpdGUgc2NyaXB0IGNhbiBhbHJlYWR5IGRvIHF1aXRlIGEgYml0IG9mIGRhbWFnZSBhbnl3YXkgd2l0aCBhY2Nlc3MuIEFuZCBpZiB0aGF0IGhhcHBlbnMsIHRoZSBmaXJzdCB0aGluZyB0aGUgdXNlciBpcyBwcm9iYWJseSBnb2luZyB0byBkbyBpcyByZXNldCBhbGwgdGhlaXIgY3JlZGVudGlhbHMsIHdoaWNoIHNvbHZlcyB0aGUgY2FzZSBvZiB0aGUga2V5IGJlaW5nIGV4ZmlsdHJhdGVkIGFueXdheSAoYnkgdGVsbGluZyB0aGUgc2VydmVyIHRvIHN0b3AgdHJ1c3RpbmcgYWxsIGlkZW50aXRpZXMpLlxuLy8gTk9URTogV2UgYXJlIGp1c3Qgbm90IGdvaW5nIHRvIHN1cHBvcnQgSFRUUFMgYnJvd3NlciBjZXJ0cy4gT3VyIGNvZGUgaXMgcHVyZWx5IGZvciBpZGVudGlmaWNhdGlvbiwgYW5kIHNvIGl0IG9ubHkgc3VwcG9ydHMgRUQyNTUxOS5cblxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzUyODAjcGFnZS00MlxuXG5pbXBvcnQgeyBzZXRGbGFnIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL2NvbXBpbGVGbGFnc1wiO1xuaW1wb3J0ICogYXMgZm9yZ2UgZnJvbSBcIm5vZGUtZm9yZ2VcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBmc1N5bmMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBjYWNoZSwgbGF6eSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcbmltcG9ydCB7IGlzTm9kZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCBzaGEyNjUgZnJvbSBcImpzLXNoYTI1NlwiO1xuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyB0cnVzdENlcnRpZmljYXRlIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2VydFN0b3JlXCI7XG5pbXBvcnQgeyBtZWFzdXJlQmxvY2ssIG1lYXN1cmVGbmMsIG1lYXN1cmVXcmFwIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvcHJvZmlsaW5nL21lYXN1cmVcIjtcbmltcG9ydCB7IGdldE5vZGVJZERvbWFpbiwgZ2V0Tm9kZUlkRG9tYWluTWF5YmVVbmRlZmluZWQsIGdldE5vZGVJZExvY2F0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBTb2NrZXRGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25cIjtcbmltcG9ydCB7IHJlc2V0QWxsTm9kZUNhbGxGYWN0b3JpZXMgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9ub2RlQ2FjaGVcIjtcbmltcG9ydCB7IGdldEtleVN0b3JlLCBERVZfZ2V0S2V5U3RvcmVQYXRoLCBERVZfbGlzdEtleVN0b3JlQXBwcyB9IGZyb20gXCIuL3BlcnNpc3RlbnRMb2NhbFN0b3JhZ2VcIjtcbmltcG9ydCB7IGVsbGlwc2l6ZSB9IGZyb20gXCIuLi9zdHJpbmdzXCI7XG5cbnNldEZsYWcocmVxdWlyZSwgXCJub2RlLWZvcmdlXCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5zZXRGbGFnKHJlcXVpcmUsIFwianMtc2hhMjU2XCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5cbmNvbnN0IHRpbWVJbkRheSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XG5cbmV4cG9ydCBjb25zdCBDQV9OT1RfRk9VTkRfRVJST1IgPSBcIjE4YWE3MzE4LWY4OGYtNGQyZC1iNDFmLTNkYWY0YTQzMzgyN1wiO1xuXG5leHBvcnQgY29uc3QgaWRlbnRpdHlTdG9yYWdlS2V5ID0gXCJtYWNoaW5lQ0FfMTRcIjtcbmV4cG9ydCB0eXBlIElkZW50aXR5U3RvcmFnZVR5cGUgPSB7IGRvbWFpbjogc3RyaW5nOyBjZXJ0QjY0OiBzdHJpbmc7IGtleUI2NDogc3RyaW5nIH07XG5cbmZ1bmN0aW9uIGdldElkZW50aXR5U3RvcmUoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0S2V5U3RvcmU8SWRlbnRpdHlTdG9yYWdlVHlwZT4oZG9tYWluLCBpZGVudGl0eVN0b3JhZ2VLZXkpO1xufVxuXG4vLyBKdXN0IHVzZWQgZm9yIG1hY2hpbmUgbWFpbnRlbmFuY2UgKGZpbmRpbmcgYSBtYWNoaW5lJ3MgaWRlbnRpdHkgZmlsZSBvbiBkaXNrLCBleCB0byBjb3B5IGl0IHRvXG4vLyBhbm90aGVyIG1hY2hpbmUgb3ZlciBzc2gpLiBORVZFUiBhY2Nlc3MgdGhpcyB1bmxlc3MgZXhwbGljaXRseSBnaXZlbiBwZXJtaXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIERFVl9nZXRJZGVudGl0eUZpbGVQYXRoKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gREVWX2dldEtleVN0b3JlUGF0aCh7IGFwcE5hbWU6IGRvbWFpbiwga2V5OiBpZGVudGl0eVN0b3JhZ2VLZXkgfSk7XG59XG5cbi8vIEV2ZXJ5IGRvbWFpbiB0aGlzIG1hY2hpbmUgaGFzIGFuIGlkZW50aXR5IHVuZGVyLiBNYWNoaW5lIG1haW50ZW5hbmNlIG9ubHksIGxpa2UgdGhlIHBhdGggYWJvdmUuXG5leHBvcnQgZnVuY3Rpb24gREVWX2xpc3RJZGVudGl0eURvbWFpbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBERVZfbGlzdEtleVN0b3JlQXBwcyhpZGVudGl0eVN0b3JhZ2VLZXkpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFg1MDlLZXlQYWlyIHsgZG9tYWluOiBzdHJpbmc7IGNlcnQ6IEJ1ZmZlcjsga2V5OiBCdWZmZXI7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vbk5hbWUoY2VydDogQnVmZmVyIHwgc3RyaW5nKSB7XG4gICAgbGV0IHN1YmplY3QgPSBuZXcgY3J5cHRvLlg1MDlDZXJ0aWZpY2F0ZShjZXJ0KS5zdWJqZWN0O1xuICAgIGxldCBzdWJqZWN0S1ZQcyA9IG5ldyBNYXAoc3ViamVjdC5zcGxpdChcIixcIikubWFwKHggPT4geC50cmltKCkuc3BsaXQoXCI9XCIpKS5tYXAoeCA9PiBbeFswXSwgeC5zbGljZSgxKS5qb2luKFwiPVwiKV0pKTtcbiAgICBsZXQgY29tbW9uTmFtZSA9IHN1YmplY3RLVlBzLmdldChcIkNOXCIpO1xuICAgIGlmICghY29tbW9uTmFtZSkgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tb24gbmFtZSBpbiBzdWJqZWN0OiAke3N1YmplY3R9YCk7XG4gICAgcmV0dXJuIGNvbW1vbk5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVYNTA5KFxuICAgIGNvbmZpZzoge1xuICAgICAgICBkb21haW46IHN0cmluZztcbiAgICAgICAgaXNzdWVyOiBYNTA5S2V5UGFpciB8IFwic2VsZlwiO1xuICAgICAgICBsaWZlU3BhbjogbnVtYmVyO1xuICAgICAgICBrZXlQYWlyOiB7XG4gICAgICAgICAgICBwdWJsaWNLZXk6IGZvcmdlLkVkMjU1MTlQdWJsaWNLZXk7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBmb3JnZS5FZDI1NTE5UHJpdmF0ZUtleTtcbiAgICAgICAgfTtcbiAgICB9XG4pOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIG1lYXN1cmVCbG9jayhmdW5jdGlvbiBjcmVhdGVYNTA5KCkge1xuICAgICAgICBsZXQgeyBkb21haW4sIGlzc3VlciwgbGlmZVNwYW4sIGtleVBhaXIgfSA9IGNvbmZpZztcblxuICAgICAgICBsZXQgY2VydE9iaiA9IGZvcmdlLnBraS5jcmVhdGVDZXJ0aWZpY2F0ZSgpO1xuICAgICAgICBjZXJ0T2JqLnB1YmxpY0tleSA9IGtleVBhaXIucHVibGljS2V5IGFzIHVua25vd24gYXMgZm9yZ2UucGtpLlB1YmxpY0tleTtcbiAgICAgICAgY2VydE9iai5zZXJpYWxOdW1iZXIgPSBcIjAxXCI7XG4gICAgICAgIC8vIEdpdmUgaXQgNSBtaW51dGVzIGJlZm9yZSBub3cuIElmIHdlIGdpdmUgaXQgdG9vIG11Y2ggdGltZSwgaXQgY2FuIGxvb2sgbGlrZSB0aGUgY2VydCBpcyByZWFsbHkgb2xkLCB3aGljaCB3aWxsIHRyaWdnZXIgdmFyaW91cyBwcm9jZXNzZXMgdG8gdHJ5IHRvIGdldCBhIGZyZXNoZXIgb25lIChhcyBpZiBpdCBsYXN0cyBmb3IgMSBob3VyLCBidXQgd2Ugc2V0IG5vdEJlZm9yZSB0byAxIG1vbnRoIGFnbywgaXQgbG9va3MgMSBtb250aCBvbGQsIGFuZCBzbyBhbG1vc3QgZXhwaXJlZCwgd2hlbiBpdCBpc24ndC4uLilcbiAgICAgICAgY2VydE9iai52YWxpZGl0eS5ub3RCZWZvcmUgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCAqIDYwICogNSk7XG4gICAgICAgIGNlcnRPYmoudmFsaWRpdHkubm90QWZ0ZXIgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgbGlmZVNwYW4pO1xuXG4gICAgICAgIGNvbnN0IGNvbW1vbk5hbWVBdHRycyA9IFt7IG5hbWU6IFwiY29tbW9uTmFtZVwiLCB2YWx1ZTogZG9tYWluIH1dO1xuICAgICAgICBjZXJ0T2JqLnNldFN1YmplY3QoY29tbW9uTmFtZUF0dHJzKTtcblxuICAgICAgICBpZiAoaXNzdWVyID09PSBcInNlbGZcIikge1xuICAgICAgICAgICAgY2VydE9iai5zZXRJc3N1ZXIoY29tbW9uTmFtZUF0dHJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNlcnRPYmouc2V0SXNzdWVyKGZvcmdlLnBraS5jZXJ0aWZpY2F0ZUZyb21QZW0oaXNzdWVyLmNlcnQudG9TdHJpbmcoKSkuc3ViamVjdC5hdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBleHRlbnNpb25zID0gW107XG4gICAgICAgIGNvbnN0IGlzQ0EgPSBpc3N1ZXIgPT09IFwic2VsZlwiO1xuICAgICAgICBpZiAoaXNDQSkge1xuICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKHsgbmFtZTogXCJiYXNpY0NvbnN0cmFpbnRzXCIsIGNBOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsSG9zdERvbWFpbiA9IFwiMTI3LTAtMC0xLlwiICsgZG9tYWluLnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG5cbiAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKC4uLltcbiAgICAgICAgICAgIHsgbmFtZTogXCJrZXlVc2FnZVwiLCBrZXlDZXJ0U2lnbjogaXNDQSwgZGlnaXRhbFNpZ25hdHVyZTogdHJ1ZSwgbm9uUmVwdWRpYXRpb246IHRydWUsIGtleUVuY2lwaGVybWVudDogdHJ1ZSwgZGF0YUVuY2lwaGVybWVudDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInN1YmplY3RLZXlJZGVudGlmaWVyXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInN1YmplY3RBbHROYW1lXCIsXG4gICAgICAgICAgICAgICAgYWx0TmFtZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAyLCB2YWx1ZTogZG9tYWluIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogMiwgdmFsdWU6IFwiKi5cIiArIGRvbWFpbiB9LFxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBsb2NhbEhvc3REb21haW4gfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogTm8gbG9uZ2VyIGFsbG93IDEyNy4wLjAuMSAoeyB0eXBlOiA3LCBpcDogXCIxMjcuMC4wLjFcIiB9KSwgdG8gbWFrZSB0aGlzIG1vcmUgc2VjdXJlLiBXZSBtaWdodCBlbmFibGUgdGhpcyBiZWhhdmlvciBiZWhpbmQgYSBmbGFnLCBmb3IgZGV2ZWxvcG1lbnQuXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIE5PVEU6IG5hbWVDb25zdHJhaW50cyByZXF1aXJlIG91ciBmb3JrZWQgbm9kZS1mb3JnZSAoXCJub2RlLWZvcmdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3NsaWZ0aXN0L2ZvcmdlI2U2MTgxODFiNDY5YjA3YmRjNzBiOTY4YjAzOTFiZWI4ZWY1ZmVjZDZcIikuIENocm9tZSBpZ25vcmVzIHRoZW0gKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNzIwODMpLCBidXQgb3VyIG93biB2YWxpZGF0aW9uICh2YWxpZGF0ZUNBQ2VydC92YWxpZGF0ZUNlcnRpZmljYXRlKSBlbmZvcmNlcyB0aGVtLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibmFtZUNvbnN0cmFpbnRzXCIsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkU3VidHJlZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAyLCB2YWx1ZTogZm9yZ2UudXRpbC5lbmNvZGVVdGY4KGRvbWFpbikgfSxcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAyLCB2YWx1ZTogZm9yZ2UudXRpbC5lbmNvZGVVdGY4KGxvY2FsSG9zdERvbWFpbikgfSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgY2VydE9iai5zZXRFeHRlbnNpb25zKGV4dGVuc2lvbnMpO1xuXG5cbiAgICAgICAgbWVhc3VyZUJsb2NrKGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgICAgICAgICBpZiAoaXNzdWVyID09PSBcInNlbGZcIikge1xuICAgICAgICAgICAgICAgIGNlcnRPYmouc2lnbihrZXlQYWlyLnByaXZhdGVLZXkgYXMgYW55KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2VydE9iai5zaWduKGZvcmdlLmVkMjU1MTkucHJpdmF0ZUtleUZyb21QZW0oaXNzdWVyLmtleS50b1N0cmluZygpKSBhcyBhbnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbWVhc3VyZUJsb2NrKGZ1bmN0aW9uIHRvUGVtcygpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9tYWluLFxuICAgICAgICAgICAgICAgIGNlcnQ6IEJ1ZmZlci5mcm9tKGZvcmdlLnBraS5jZXJ0aWZpY2F0ZVRvUGVtKGNlcnRPYmopKSxcbiAgICAgICAgICAgICAgICBrZXk6IEJ1ZmZlci5mcm9tKHByaXZhdGVLZXlUb1BlbShrZXlQYWlyLnByaXZhdGVLZXkpKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByaXZhdGVLZXlUb1BlbShrZXk6IGZvcmdlLkVkMjU1MTlQcml2YXRlS2V5KSB7XG4gICAgcmV0dXJuIGZvcmdlLmVkMjU1MTkucHJpdmF0ZUtleVRvUGVtKGtleSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDZXJ0KFBFTW9yREVSOiBzdHJpbmcgfCBCdWZmZXIpIHtcbiAgICByZXR1cm4gZm9yZ2UucGtpLmNlcnRpZmljYXRlRnJvbVBlbShub3JtYWxpemVDZXJ0VG9QRU0oUEVNb3JERVIpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RUQyNTUxOVB1YmxpY0tleShjZXJ0UGFyc2VkOiBmb3JnZS5wa2kuQ2VydGlmaWNhdGUpOiBmb3JnZS5FZDI1NTE5UHVibGljS2V5IHtcbiAgICBsZXQgcHVibGljS2V5ID0gY2VydFBhcnNlZC5wdWJsaWNLZXk7XG4gICAgaWYgKCEoXCJwdWJsaWNLZXlCeXRlc1wiIGluIHB1YmxpY0tleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IEVEMjU1MTkgY2VydGlmaWNhdGVzIGFyZSBzdXBwb3J0ZWQsIHRoZSBjZXJ0aWZpY2F0ZSBwdWJsaWMga2V5IGlzIG5vdCBFRDI1NTE5IChzdWJqZWN0OiAke2NlcnRQYXJzZWQuc3ViamVjdC5nZXRGaWVsZChcIkNOXCIpPy52YWx1ZX0pYCk7XG4gICAgfVxuICAgIHJldHVybiBwdWJsaWNLZXkgYXMgdW5rbm93biBhcyBmb3JnZS5FZDI1NTE5UHVibGljS2V5O1xufVxuXG4vLyBHZXRzIGEgdW5pcXVlIHZhbHVlIHRvIHJlcHJlc2VudCB0aGUgcHVibGljIGtleVxuZXhwb3J0IGZ1bmN0aW9uIGdldFB1YmxpY0lkZW50aWZpZXIoUEVNb3JERVI6IHN0cmluZyB8IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGdldEVEMjU1MTlQdWJsaWNLZXkocGFyc2VDZXJ0KFBFTW9yREVSKSkucHVibGljS2V5Qnl0ZXMpO1xufVxuXG5leHBvcnQgY29uc3Qgc2lnbiA9IG1lYXN1cmVXcmFwKGZ1bmN0aW9uIHNpZ24oa2V5UGFpcjogeyBrZXk6IHN0cmluZyB8IEJ1ZmZlciB9LCBkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBsZXQgZGF0YVN0ciA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIGxldCBwcml2YXRlS2V5ID0gZm9yZ2UuZWQyNTUxOS5wcml2YXRlS2V5RnJvbVBlbShrZXlQYWlyLmtleS50b1N0cmluZygpKTtcbiAgICByZXR1cm4gcHJpdmF0ZUtleS5zaWduKGRhdGFTdHIpO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnkoY2VydDogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgZGF0YTogdW5rbm93bikge1xuICAgIGxldCBjZXJ0T2JqID0gcGFyc2VDZXJ0KGNlcnQpO1xuICAgIGxldCBwdWJsaWNLZXkgPSBnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRPYmopO1xuICAgIGxldCBkYXRhU3RyID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgaWYgKCFwdWJsaWNLZXkudmVyaWZ5KGRhdGFTdHIsIHNpZ25hdHVyZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZC4gU2lnbmF0dXJlOiAke0pTT04uc3RyaW5naWZ5KHNpZ25hdHVyZSl9IHwgRGF0YTogJHtlbGxpcHNpemUoZGF0YVN0ciwgMTAyNCl9YCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDZXJ0VG9QRU0oUEVNb3JERVI6IHN0cmluZyB8IEJ1ZmZlcik6IHN0cmluZyB7XG4gICAgaWYgKFBFTW9yREVSLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChcIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVwiKSkge1xuICAgICAgICByZXR1cm4gUEVNb3JERVIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgUEVNb3JERVIgPSBQRU1vckRFUi50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgICByZXR1cm4gXCItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cXG5cIiArIFBFTW9yREVSICsgXCJcXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXCI7XG59XG5cbi8vIEJhc2UzMiAoUkZDIDQ2NDgsIGxvd2VyY2FzZSwgdW5wYWRkZWQpLCBhcyBkb21haW4gbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIHdoaWNoIHJ1bGVzIG91dCBiYXNlNjQvaGV4LXdpdGgtY2FzZVxuY29uc3QgYmFzZTMyQWxwaGFiZXQgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MjM0NTY3XCI7XG5mdW5jdGlvbiBlbmNvZGVCYXNlMzIoYnl0ZXM6IEJ1ZmZlcik6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgbGV0IGJpdENvdW50ID0gMDtcbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIGZvciAobGV0IGJ5dGUgb2YgYnl0ZXMpIHtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCBieXRlO1xuICAgICAgICBiaXRDb3VudCArPSA4O1xuICAgICAgICB3aGlsZSAoYml0Q291bnQgPj0gNSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGJhc2UzMkFscGhhYmV0Wyh2YWx1ZSA+Pj4gKGJpdENvdW50IC0gNSkpICYgMzFdO1xuICAgICAgICAgICAgYml0Q291bnQgLT0gNTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYml0Q291bnQgPiAwKSB7XG4gICAgICAgIHJlc3VsdCArPSBiYXNlMzJBbHBoYWJldFsodmFsdWUgPDwgKDUgLSBiaXRDb3VudCkpICYgMzFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShwdWJsaWNLZXk6IHsgcHVibGljS2V5Qnl0ZXM6IEJ1ZmZlciB9IHwgQnVmZmVyKSB7XG4gICAgbGV0IGJ5dGVzOiBCdWZmZXI7XG4gICAgaWYgKFwicHVibGljS2V5Qnl0ZXNcIiBpbiBwdWJsaWNLZXkpIHtcbiAgICAgICAgYnl0ZXMgPSBwdWJsaWNLZXkucHVibGljS2V5Qnl0ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMgPSBwdWJsaWNLZXk7XG4gICAgfVxuICAgIHJldHVybiBcImJcIiArIGVuY29kZUJhc2UzMihCdWZmZXIuZnJvbShzaGEyNjUuc2hhMjU2LmFycmF5KEJ1ZmZlci5mcm9tKGJ5dGVzKSkpKS5zbGljZSgwLCAyMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNBQ2VydChkb21haW46IHN0cmluZywgY2VydDogc3RyaW5nIHwgQnVmZmVyKSB7XG4gICAgbGV0IGNlcnRQYXJzZWQgPSBwYXJzZUNlcnQoY2VydCk7XG5cbiAgICBsZXQgc3ViamVjdCA9IGNlcnRQYXJzZWQuc3ViamVjdC5nZXRGaWVsZChcIkNOXCIpLnZhbHVlIGFzIHN0cmluZztcbiAgICBsZXQgbG9jYWxob3N0RG9tYWluID0gXCIxMjctMC0wLTEuXCIgKyBzdWJqZWN0LnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG5cbiAgICBsZXQgZG9tYWluUGFydHMgPSBzdWJqZWN0LnNwbGl0KFwiLlwiKS5yZXZlcnNlKCk7XG5cbiAgICBsZXQgcm9vdERvbWFpblBhcnNlZCA9IFtkb21haW5QYXJ0cy5zaGlmdCgpLCBkb21haW5QYXJ0cy5zaGlmdCgpXS5yZXZlcnNlKCkuam9pbihcIi5cIik7XG4gICAgaWYgKHJvb3REb21haW5QYXJzZWQgIT09IGRvbWFpbikge1xuICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCwgYXMgb3VyIHRydXN0IHN0b3JlIGNvbnRhaW5zIG1vcmUgdGhlbiBqdXN0IE9VUiBjZXJ0aWZpY2F0ZXMsIHNvIGlmIHdlIGFsbG93IGFueSBkb21haW5zIHRoZW4gcmVhbCBkb21haW5zIGNhbiBpbXBlcnNvbmF0ZSBhbnlvbmUhIEl0IGhhcyB0byBiZSBPVVIgZG9tYWluIHRvIGJlIHRydXN0ZWQhXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgcm9vdCBkb21haW4gc2hvdWxkIGJlICR7ZG9tYWlufSwgYnV0IGlzICR7cm9vdERvbWFpblBhcnNlZH1gKTtcbiAgICB9XG4gICAgLy8gVE9ETzogTWF5YmUganVzdCBza2lwIGlmIGl0IGlzbid0IGEgaGFzaCBzdHJpbmc/XG4gICAgaWYgKGRvbWFpblBhcnRzWzBdID09PSBcIm5vcHJveHlcIikge1xuICAgICAgICBkb21haW5QYXJ0cy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGxldCBjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0ID0gKGRvbWFpblBhcnRzLnNoaWZ0KCkgfHwgXCJcIikuc3BsaXQoXCItXCIpLnNsaWNlKC0xKVswXTtcbiAgICBsZXQgY2VydEFjdHVhbFB1YmxpY0tleVBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRQYXJzZWQpKTtcbiAgICBpZiAoY2VydEV4cGVjdGVkUHVibGljS2V5UGFydCAhPT0gY2VydEFjdHVhbFB1YmxpY0tleVBhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBwdWJsaWMga2V5IGluIHRoZSB1cmwgaXMgJHtjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0fSwgYnV0IGluIHRoZSBjZXJ0IGlzICR7Y2VydEFjdHVhbFB1YmxpY0tleVBhcnR9YCk7XG4gICAgfVxuXG4gICAgLy8gQUxTTywgcmVxdWlyZSBuYW1lIGNvbnN0cmFpbnRzIHRvIGJlIHByZXNlbnQsIGFuZCB0byByZXN0cmljdCB0byB0aGUgXCJDTlwiXG4gICAgbGV0IG5hbWVDb25zdHJhaW50cyA9IGNlcnRQYXJzZWQuZ2V0RXh0ZW5zaW9uKFwibmFtZUNvbnN0cmFpbnRzXCIpIGFzIGFueTtcbiAgICBpZiAoIW5hbWVDb25zdHJhaW50cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVzID0gbmFtZUNvbnN0cmFpbnRzLnBlcm1pdHRlZFN1YnRyZWVzO1xuICAgIGlmICghc3VidHJlZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBtdXN0IGhhdmUgbmFtZUNvbnN0cmFpbnRzLnBlcm1pdHRlZFN1YnRyZWVzYCk7XG4gICAgfVxuICAgIGxldCBzdWJ0cmVlVmFsdWVzID0gc3VidHJlZXMubWFwKCh4OiBhbnkpID0+IHgudmFsdWUpO1xuICAgIC8vIElnbm9yZSBsb2NhbGhvc3REb21haW4sIGFzIGl0IGNhbiBhbHdheXMgc2FmZWx5IGJlIGFsbG93ZWQgKHRoZSBzYW1lIG1hY2hpbmUgaXMgYWx3YXlzIGFsbG93ZWQpLlxuICAgIHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlVmFsdWVzLmZpbHRlcigoeDogc3RyaW5nKSA9PiB4ICE9PSBsb2NhbGhvc3REb21haW4pO1xuICAgIGlmIChzdWJ0cmVlVmFsdWVzLmxlbmd0aCAhPT0gMSB8fCBzdWJ0cmVlVmFsdWVzWzBdICE9PSBzdWJqZWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgbXVzdCBoYXZlIGEgc2luZ2xlIGNvbnN0cmFpbmVkIGRvbWFpbiAoaGFkICR7SlNPTi5zdHJpbmdpZnkoc3VidHJlZVZhbHVlcyl9KWApO1xuICAgIH1cblxuICAgIHZhbGlkYXRlQWx0TmFtZXMoY2VydFBhcnNlZCwgc3ViamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNlcnRpZmljYXRlKGRvbWFpbjogc3RyaW5nLCBjZXJ0OiBCdWZmZXIgfCBzdHJpbmcsIGlzc3VlckNlcnQ6IEJ1ZmZlciB8IHN0cmluZykge1xuICAgIHZhbGlkYXRlQ0FDZXJ0KGRvbWFpbiwgaXNzdWVyQ2VydCk7XG5cbiAgICBsZXQgY2VydFBhcnNlZCA9IHBhcnNlQ2VydChjZXJ0KTtcbiAgICBsZXQgc3ViamVjdCA9IGNlcnRQYXJzZWQuc3ViamVjdC5nZXRGaWVsZChcIkNOXCIpLnZhbHVlIGFzIHN0cmluZztcbiAgICBsZXQgbG9jYWxob3N0RG9tYWluID0gXCIxMjctMC0wLTEuXCIgKyBzdWJqZWN0LnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG5cbiAgICBsZXQgZG9tYWluUGFydHMgPSBzdWJqZWN0LnNwbGl0KFwiLlwiKS5yZXZlcnNlKCk7XG5cbiAgICBsZXQgcm9vdERvbWFpblBhcnNlZCA9IFtkb21haW5QYXJ0cy5zaGlmdCgpLCBkb21haW5QYXJ0cy5zaGlmdCgpXS5yZXZlcnNlKCkuam9pbihcIi5cIik7XG4gICAgaWYgKHJvb3REb21haW5QYXJzZWQgIT09IGRvbWFpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIHJvb3QgZG9tYWluIHNob3VsZCBiZSAke2RvbWFpbn0sIGJ1dCBpcyAke3Jvb3REb21haW5QYXJzZWR9YCk7XG4gICAgfVxuICAgIC8vIFRPRE86IE1heWJlIGp1c3Qgc2tpcCBpZiBpdCBpc24ndCBhIGhhc2ggc3RyaW5nP1xuICAgIGlmIChkb21haW5QYXJ0c1swXSA9PT0gXCJub3Byb3h5XCIpIHtcbiAgICAgICAgZG9tYWluUGFydHMuc2hpZnQoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNzdWVyQ2VydFBhcnNlZCA9IHBhcnNlQ2VydChpc3N1ZXJDZXJ0KTtcblxuICAgIGxldCBpc3N1ZXJFeHBlY3RlZFB1YmxpY0tleVBhcnQgPSBkb21haW5QYXJ0cy5zaGlmdCgpIHx8IFwiXCI7XG4gICAgbGV0IGlzc3VlckFjdHVhbFB1YmxpY0tleVBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShnZXRFRDI1NTE5UHVibGljS2V5KGlzc3VlckNlcnRQYXJzZWQpKTtcbiAgICBpZiAoaXNzdWVyRXhwZWN0ZWRQdWJsaWNLZXlQYXJ0ICE9PSBpc3N1ZXJBY3R1YWxQdWJsaWNLZXlQYXJ0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSXNzdWVyIHB1YmxpYyBrZXkgaW4gdGhlIHVybCBpcyAke2lzc3VlckV4cGVjdGVkUHVibGljS2V5UGFydH0sIGJ1dCBpbiB0aGUgY2VydCBpcyAke2lzc3VlckFjdHVhbFB1YmxpY0tleVBhcnR9YCk7XG4gICAgfVxuXG4gICAgLy8gVGFrZSB0aGUgbGFzdCBwYXJ0XG4gICAgbGV0IGNlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnQgPSBkb21haW5QYXJ0cy5zaGlmdCgpIHx8IFwiXCI7XG4gICAgbGV0IGNlcnRBY3R1YWxQdWJsaWNLZXlQYXJ0ID0gZ2V0RG9tYWluUGFydEZyb21QdWJsaWNLZXkoZ2V0RUQyNTUxOVB1YmxpY0tleShjZXJ0UGFyc2VkKSk7XG4gICAgaWYgKGNlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnQgIT09IGNlcnRBY3R1YWxQdWJsaWNLZXlQYXJ0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgcHVibGljIGtleSBpbiB0aGUgdXJsIGlzICR7Y2VydEV4cGVjdGVkUHVibGljS2V5UGFydH0sIGJ1dCBpbiB0aGUgY2VydCBpcyAke2NlcnRBY3R1YWxQdWJsaWNLZXlQYXJ0fWApO1xuICAgIH1cblxuXG4gICAgbGV0IG5hbWVDb25zdHJhaW50cyA9IGlzc3VlckNlcnRQYXJzZWQuZ2V0RXh0ZW5zaW9uKFwibmFtZUNvbnN0cmFpbnRzXCIpIGFzIGFueTtcbiAgICBpZiAoIW5hbWVDb25zdHJhaW50cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENBIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVzID0gbmFtZUNvbnN0cmFpbnRzLnBlcm1pdHRlZFN1YnRyZWVzO1xuICAgIGlmICghc3VidHJlZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDQSBtdXN0IGhhdmUgbmFtZUNvbnN0cmFpbnRzLnBlcm1pdHRlZFN1YnRyZWVzYCk7XG4gICAgfVxuICAgIGxldCBzdWJ0cmVlVmFsdWVzID0gc3VidHJlZXMubWFwKCh4OiBhbnkpID0+IHgudmFsdWUpO1xuICAgIC8vIElnbm9yZSBsb2NhbGhvc3REb21haW4sIGFzIGl0IGNhbiBhbHdheXMgc2FmZWx5IGJlIGFsbG93ZWQgKHRoZSBzYW1lIG1hY2hpbmUgaXMgYWx3YXlzIGFsbG93ZWQpLlxuICAgIHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlVmFsdWVzLmZpbHRlcigoeDogc3RyaW5nKSA9PiB4ICE9PSBsb2NhbGhvc3REb21haW4pO1xuICAgIGlmIChzdWJ0cmVlVmFsdWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENBIG11c3QgaGF2ZSBhIHNpbmdsZSBjb25zdHJhaW5lZCBkb21haW4gKGhhZCAke0pTT04uc3RyaW5naWZ5KHN1YnRyZWVWYWx1ZXMpfSlgKTtcbiAgICB9XG5cbiAgICBsZXQgc3VidHJlZSA9IHN1YnRyZWVWYWx1ZXNbMF07XG4gICAgaWYgKHN1YnRyZWUgIT09IHN1YmplY3QgJiYgIXN1YmplY3QuZW5kc1dpdGgoXCIuXCIgKyBzdWJ0cmVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIG11c3QgYmUgYSBzdWJ0cmVlIG9mIHRoZSBDQSAoQ0E6ICR7c3VidHJlZX0sIGNlcnQ6ICR7c3ViamVjdH0pYCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVBbHROYW1lcyhjZXJ0UGFyc2VkLCBzdWJqZWN0KTtcblxuICAgIC8vIFZlcmlmeSBpc3N1ZXIgQUNUVUFMTFkgc2lnbmVkIGNlcnRQYXJzZWRcbiAgICBpZiAoIWlzc3VlckNlcnRQYXJzZWQudmVyaWZ5KGNlcnRQYXJzZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSXNzdWVyIGRpZCBub3Qgc2lnbiBjZXJ0aWZpY2F0ZWApO1xuICAgIH1cbn1cblxuLy8gUmVxdWlyZSBhbHQgbmFtZXMgdG8gYmUgZWl0aGVyIGVxdWFsIHRvIFwiQ05cIiwgb3IgYSBzdWJ0cmVlIG9mIFwiQ05cIlxuZnVuY3Rpb24gdmFsaWRhdGVBbHROYW1lcyhjZXJ0UGFyc2VkOiBmb3JnZS5wa2kuQ2VydGlmaWNhdGUsIHN1YmplY3Q6IHN0cmluZykge1xuICAgIGxldCBsb2NhbGhvc3REb21haW4gPSBcIjEyNy0wLTAtMS5cIiArIHN1YmplY3Quc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgIGxldCBhbHROYW1lc09iaiA9IGNlcnRQYXJzZWQuZ2V0RXh0ZW5zaW9uKFwic3ViamVjdEFsdE5hbWVcIikgYXMgYW55O1xuICAgIGxldCBhbHROYW1lcyA9IGFsdE5hbWVzT2JqPy5hbHROYW1lcy5tYXAoKHg6IGFueSkgPT4geC52YWx1ZSk7XG4gICAgLy8gQWxsb3cgbG9jYWxob3N0RG9tYWluLCBhcyBpdCBjYW4gYWx3YXlzIHNhZmVseSBiZSBhbGxvd2VkXG4gICAgYWx0TmFtZXMgPSBhbHROYW1lcy5maWx0ZXIoKHg6IHN0cmluZykgPT4geCAhPT0gbG9jYWxob3N0RG9tYWluKTtcbiAgICBpZiAoXG4gICAgICAgIGFsdE5hbWVzLnNvbWUoKHg6IHN0cmluZykgPT5cbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgeCA9PT0gc3ViamVjdFxuICAgICAgICAgICAgICAgIHx8IHguZW5kc1dpdGgoXCIuXCIgKyBzdWJqZWN0KVxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IFdlIGRvbid0IGFsbG93IDEyNy4wLjAuMSAofHwgeCA9PT0gQnVmZmVyLmZyb20oWzEyNywgMCwgMCwgMV0pLnRvU3RyaW5nKCkpLCBiZWNhdXNlIGl0IGlzIHNvIGVhc3kgdG8gcHVibGlzaCBhIDEyNy4wLjAuMSBBIHJlY29yZCwgYW5kIGV2ZW4gdG8gZ2VuZXJhdGUgYSByZWFsIGNlcnQsIHNvIHdlIHNob3VsZCBqdXN0IGRvIHRoYXQsIGFuZCBrZWVwIGl0IHNlY3VyZS4gSWYgd2UgbmVlZCB0aGlzIGZvciBkZXZlbG9wbWVudCB3ZSBjYW4gcHV0IGl0IGJlaGluZCBhIGZsYWcsIHNvIG5vbi1kZXZlbG9wbWVudCBpbnN0YW5jZXMgYXJlIHN0aWxsIHNlY3VyZS5cbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWx0IG5hbWVzLiBNdXN0IGJlIHN1YnRyZWVzIG9mIHRoZSBzdWJqZWN0IChDTikgJHtKU09OLnN0cmluZ2lmeShzdWJqZWN0KX0sIHdhcyAke0pTT04uc3RyaW5naWZ5KGFsdE5hbWVzKX1gKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlS2V5UGFpcigpIHtcbiAgICByZXR1cm4gbWVhc3VyZUJsb2NrKGZ1bmN0aW9uIGdlbmVyYXRlS2V5UGFpcigpIHtcbiAgICAgICAgLy8gTk9URTogV2UgdXNlIEVEMjU1MTkgYmVjYXVzZSBpdCBjYW4gZ2VuZXJhdGUga2V5cyBhYm91dCAxMFggZmFzdGVyIHRoYW4gUlNBICh3aGljaCBpcyBzdGlsbCBzbG93LCB+Nm1zIG9uIG15IG1hY2hpbmUsIHNvIHdlIERFRklOSVRFTFkgZG9uJ3Qgd2FudCBpdCB0byBiZSAxMFggc2xvd2VyISkgLSBodHRwczovL3NlY3VyaXR5LnN0YWNrZXhjaGFuZ2UuY29tL2EvMjM2OTQzLzI4MjM2N1xuICAgICAgICByZXR1cm4gZm9yZ2UuZWQyNTUxOS5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ0EoZG9tYWluOiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXlQYWlyID0gZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgbGV0IGNhUHVibGljS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGtleVBhaXIucHVibGljS2V5KTtcbiAgICBsZXQgZnVsbERvbWFpbiA9IGAke2NhUHVibGljS2V5UGFydH0uJHtkb21haW59YDtcbiAgICByZXR1cm4gY3JlYXRlWDUwOSh7IGRvbWFpbjogZnVsbERvbWFpbiwgaXNzdWVyOiBcInNlbGZcIiwga2V5UGFpciwgbGlmZVNwYW46IHRpbWVJbkRheSAqIDM2NSAqIDIwIH0pO1xufVxuXG5sZXQgaWRlbnRpdHlDQSA9IGNhY2hlKChkb21haW46IHN0cmluZykgPT4gbGF6eSgoKTogWDUwOUtleVBhaXIgPT4ge1xuICAgIGxldCBpZGVudGl0eUNBQ2FjaGVkID0gZ2V0SWRlbnRpdHlTdG9yZShkb21haW4pO1xuICAgIGxldCBjYUNhY2hlZCA9IGlkZW50aXR5Q0FDYWNoZWQuZ2V0KCk7XG4gICAgaWYgKCFjYUNhY2hlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgR2VuZXJhdGluZyBuZXcgaWRlbnRpdHkgQ0FgKTtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2VuZXJhdGVDQShkb21haW4pO1xuICAgICAgICBjYUNhY2hlZCA9IHtcbiAgICAgICAgICAgIGRvbWFpbjogdmFsdWUuZG9tYWluLFxuICAgICAgICAgICAgY2VydEI2NDogdmFsdWUuY2VydC50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgICAgIGtleUI2NDogdmFsdWUua2V5LnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICB9O1xuICAgICAgICBpZGVudGl0eUNBQ2FjaGVkLnNldChjYUNhY2hlZCk7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgIGRvbWFpbjogY2FDYWNoZWQuZG9tYWluLFxuICAgICAgICBjZXJ0OiBCdWZmZXIuZnJvbShjYUNhY2hlZC5jZXJ0QjY0LCBcImJhc2U2NFwiKSxcbiAgICAgICAga2V5OiBCdWZmZXIuZnJvbShjYUNhY2hlZC5rZXlCNjQsIFwiYmFzZTY0XCIpLFxuICAgIH07XG4gICAgdHJ1c3RDZXJ0aWZpY2F0ZShyZXN1bHQuY2VydC50b1N0cmluZygpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufSkpO1xuXG4vLyBJTVBPUlRBTlQhIFdlIGRvIG5vdCBlbWJlZCBhbnkgZGVidWcgaW5mbyBpbiB0aGlzIGRvbWFpbi4gSWYgd2UgZGlkLCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dC4uLiBwb3RlbnRhbGx5IGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgYXMgaWYgdGhlIGRlYnVnIGluZm8gKHN1Y2ggYXMgYSBwcmVmaXgpIGlzIHVzZWQgdG8gaWRlbnRpZnkgd2hhdCBhIGNlcnRpZmljYXRlIGlzIGZvciwgaXQgd291bGQgYmUgZWFzeSBmb3IgYW4gYXR0YWNrIHRvIGZvcmdlIHRoaXMgKGFzIHRoZSBkZWJ1ZyBpbmZvIHdvbid0IGJlIHNlY3VyZWQpLiBTbyBpdCBpcyBtdWNoIGJldHRlciB0byBrZWVwIHRoZSBjZXJ0aWZpY2F0ZSBvcGFxdWUsIGFuZCB0aGVuIHJlcXVpcmUgYW55IG1ldGFkYXRhIHRvIGJlIGFjdHVhbGx5IHZldHRlZCAoYW5kIGhvcGVmdWxseSBzdG9yZWQgaW4gYSBVSSwgc2hvd2luZyBJUCwgdGltZSwgZXRjKS5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDZXJ0RnJvbUNBKGNvbmZpZzoge1xuICAgIENBS2V5UGFpcjogWDUwOUtleVBhaXI7XG59KTogWDUwOUtleVBhaXIge1xuICAgIHJldHVybiBtZWFzdXJlQmxvY2soZnVuY3Rpb24gY3JlYXRlQ2VydEZyb21DQSgpIHtcbiAgICAgICAgbGV0IHsgQ0FLZXlQYWlyIH0gPSBjb25maWc7XG4gICAgICAgIGNvbnN0IGtleVBhaXIgPSBnZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgICAgbGV0IGRvbWFpbktleVBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShrZXlQYWlyLnB1YmxpY0tleSk7XG4gICAgICAgIGxldCBmdWxsRG9tYWluID0gYCR7ZG9tYWluS2V5UGFydH0uJHtjb25maWcuQ0FLZXlQYWlyLmRvbWFpbn1gO1xuICAgICAgICByZXR1cm4gY3JlYXRlWDUwOSh7XG4gICAgICAgICAgICBkb21haW46IGZ1bGxEb21haW4sXG4gICAgICAgICAgICBpc3N1ZXI6IENBS2V5UGFpcixcbiAgICAgICAgICAgIGtleVBhaXIsXG4gICAgICAgICAgICBsaWZlU3BhbjogdGltZUluRGF5ICogMzY1ICogMTAsXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKGRvbWFpbk5hbWVPck5vZGVJZDogc3RyaW5nLCBkb21haW46IHN0cmluZykge1xuICAgIHJldHVybiBkZWNvZGVOb2RlSWRBc3NlcnQoZG9tYWluTmFtZU9yTm9kZUlkLCBkb21haW4sIFwiYWxsb3dNaXNzaW5nVGhyZWFkSWRcIikubWFjaGluZUlkO1xufVxuXG5leHBvcnQgdHlwZSBOb2RlSWRQYXJ0cyA9IHtcbiAgICB0aHJlYWRJZDogc3RyaW5nO1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGRvbWFpbjogc3RyaW5nO1xuICAgIHBvcnQ6IG51bWJlcjtcbn07XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlTm9kZUlkKG5vZGVJZDogc3RyaW5nLCBkb21haW46IHN0cmluZywgYWxsb3dNaXNzaW5nVGhyZWFkSWQ/OiBcImFsbG93TWlzc2luZ1RocmVhZElkXCIpOiBOb2RlSWRQYXJ0cyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGxvY2F0aW9uT2JqID0gZ2V0Tm9kZUlkTG9jYXRpb24obm9kZUlkKTtcbiAgICBpZiAoIWxvY2F0aW9uT2JqKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBwYXJ0cyA9IGxvY2F0aW9uT2JqLmFkZHJlc3Muc3BsaXQoXCIuXCIpO1xuICAgIC8vIE5PVEU6IFdlIGhhdmUgdG8gb25seSBhbGxvdyBsb2NhbGhvc3QgZG9tYWlucyBvbiBvdXIgb3duIGRvbWFpbiwgYXMgdGhlIHVuZGVybHlpbmcgZG9tYWluIGdldHMgc3RyaXBwZWQgd2hlbiB3ZSdyZSBsb29raW5nIGF0IHRoZSBtYWNoaW5lSWQuIFNvIGlmIHdlIGFsbG93ZWQgbG9jYWxob3N0IGRvbWFpbnMgb24gb3RoZXIgZG9tYWlucywgYSBzZXJ2ZXIgY291bGQgdHJpY2sgdXMgaW50byBjb25uZWN0aW5nIHRvIGl0LCBhbmQgdGhlbiBvbmNlIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBpdCBjb3VsZCB0YWxrIGJhY2sgYW5kIHdlIHdvdWxkIHRoaW5rIGl0IGhhcyBhIGxvY2FsaG9zdCBtYWNoaW5lSWQsIHdoaWNoIGlzIGltcGxpY2l0bHkgdHJ1c3RlZCwgd2hpY2ggd291bGQgdGhlbiBnaXZlIGl0IGFjY2VzcyB0byBldmVyeXRoaW5nLlxuICAgIGlmIChsb2NhdGlvbk9iai5hZGRyZXNzID09PSBgMTI3LTAtMC0xLiR7ZG9tYWlufWAgJiYgbm9kZUlkLmluY2x1ZGVzKFwiOlwiKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGhyZWFkSWQ6IFwiXCIsXG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHBhcnRzLmF0KC0zKSB8fCBcIlwiLFxuICAgICAgICAgICAgZG9tYWluOiBwYXJ0cy5zbGljZSgtMikuam9pbihcIi5cIiksXG4gICAgICAgICAgICBwb3J0OiBsb2NhdGlvbk9iai5wb3J0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBsZXQgaXNWYWxpZCA9IHBhcnRzLmxlbmd0aCA+PSA0IHx8IGFsbG93TWlzc2luZ1RocmVhZElkICYmIHBhcnRzLmxlbmd0aCA9PT0gMztcbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGhyZWFkSWQ6IHBhcnRzLmF0KC00KSB8fCBcIlwiLFxuICAgICAgICBtYWNoaW5lSWQ6IHBhcnRzLmF0KC0zKSB8fCBcIlwiLFxuICAgICAgICBkb21haW46IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSB8fCBcIlwiLFxuICAgICAgICBwb3J0OiBsb2NhdGlvbk9iai5wb3J0LFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlTm9kZUlkQXNzZXJ0KG5vZGVJZDogc3RyaW5nLCBkb21haW46IHN0cmluZywgYWxsb3dNaXNzaW5nVGhyZWFkSWQ/OiBcImFsbG93TWlzc2luZ1RocmVhZElkXCIpOiBOb2RlSWRQYXJ0cyB7XG4gICAgbGV0IHJlc3VsdCA9IGRlY29kZU5vZGVJZChub2RlSWQsIGRvbWFpbiwgYWxsb3dNaXNzaW5nVGhyZWFkSWQpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBub2RlSWQ6ICR7SlNPTi5zdHJpbmdpZnkobm9kZUlkKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOb2RlSWQocGFydHM6IE5vZGVJZFBhcnRzKSB7XG4gICAgcmV0dXJuIGAke3BhcnRzLnRocmVhZElkfS4ke3BhcnRzLm1hY2hpbmVJZH0uJHtwYXJ0cy5kb21haW59OiR7cGFydHMucG9ydH1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0SWRlbnRpdHlDQVJhdyhkb21haW46IHN0cmluZywganNvbjogc3RyaW5nKSB7XG4gICAgbGV0IGlkZW50aXR5Q0FDYWNoZWQgPSBnZXRJZGVudGl0eVN0b3JlKGRvbWFpbik7XG4gICAgbGV0IG9iaiA9IEpTT04ucGFyc2UoanNvbikgYXMge1xuICAgICAgICBkb21haW46IHN0cmluZztcbiAgICAgICAgY2VydEI2NDogc3RyaW5nO1xuICAgICAgICBrZXlCNjQ6IHN0cmluZztcbiAgICB9O1xuICAgIGxldCBjYSA9IHtcbiAgICAgICAgZG9tYWluOiBvYmouZG9tYWluLFxuICAgICAgICBjZXJ0OiBCdWZmZXIuZnJvbShvYmouY2VydEI2NCwgXCJiYXNlNjRcIiksXG4gICAgICAgIGtleTogQnVmZmVyLmZyb20ob2JqLmtleUI2NCwgXCJiYXNlNjRcIiksXG4gICAgfTtcbiAgICB0cnVzdENlcnRpZmljYXRlKGNhLmNlcnQudG9TdHJpbmcoKSk7XG4gICAgaWRlbnRpdHlDQShkb21haW4pLnNldChjYSk7XG4gICAgZ2V0VGhyZWFkS2V5Q2VydEJhc2UoZG9tYWluKS5yZXNldCgpO1xuICAgIGlkZW50aXR5Q0FDYWNoZWQuc2V0KG9iaik7XG4gICAgcmVzZXRBbGxOb2RlQ2FsbEZhY3RvcmllcygpO1xufVxuXG4vLyBOT1RFOiBUaGUgaWRlbnRpdHkgQ0EgaXMgYXZhaWxhYmxlIHN5bmNocm9ub3VzbHkgKHN0b3JhZ2UgaXMgZnMvbG9jYWxTdG9yYWdlLCBib3RoIHN5bmNocm9ub3VzKSwgc28gdGhpcyBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBzdGFydHVwIGNvZGUgdGhhdCBhd2FpdHMgaXQuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZElkZW50aXR5Q0EoZG9tYWluOiBzdHJpbmcpIHtcbiAgICBpZGVudGl0eUNBKGRvbWFpbikoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGl0eUNBKGRvbWFpbjogc3RyaW5nKTogWDUwOUtleVBhaXIge1xuICAgIHJldHVybiBpZGVudGl0eUNBKGRvbWFpbikoKTtcbn1cblxuLy8gVE9ETzogUmVwbGFjZSB0aGlzIHdpdGggYSBkYXRhYmFzZSwgc28gaXQgaXMgZWFzeSBmb3IgdXMgdG8gdHJ1c3QgQ0FzIGNyb3NzIG1hY2hpbmUsIGFuZCBldmVuIGhhdmUgbXVsdGlwbGUgdXNlcnMsIGV0YywgZXRjLlxuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aXR5Q0FQcm9taXNlKGRvbWFpbjogc3RyaW5nKTogWDUwOUtleVBhaXIge1xuICAgIHJldHVybiBpZGVudGl0eUNBKGRvbWFpbikoKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duTWFjaGluZUlkKGRvbWFpbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGdldE1hY2hpbmVJZChnZXRJZGVudGl0eUNBKGRvbWFpbikuZG9tYWluLCBkb21haW4pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE93blRocmVhZElkKGRvbWFpbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRlY29kZU5vZGVJZEFzc2VydChnZXRUaHJlYWRLZXlDZXJ0KGRvbWFpbikuZG9tYWluLCBkb21haW4pLnRocmVhZElkO1xufVxuXG4vKiogUGFydCBvZiB0aGUgbWFjaGluZUlkIGNvbWVzIGZyb20gdGhlIHB1YmxpY0tleSwgc28gd2UgY2FuIHVzZSBpdCB0byB2ZXJpZnkuXG5cbiAgICBGYWlybHkgd2VhazogaXQgb25seSBwcm92ZXMgdGhlIGlkIG5hbWVzIHRoaXMga2V5LCBub3QgdGhhdCB0aGUgY2FsbGVyIGhvbGRzIHRoZSBrZXkgLSB1c3VhbGx5IGFcbiAgICBiZXR0ZXIgd29ya2Zsb3cgc2hvdWxkIGJlIHVzZWQsIHdpdGggYSBiYWNrIGFuZCBmb3J0aCAoZXgsIHZhbGlkYXRlQ2VydGlmaWNhdGUgb3ZlciBhIHNpZ25lZFxuICAgIGV4Y2hhbmdlKS4gSW4gc29tZSBjYXNlcyBpdCBpcyBzdWZmaWNpZW50LCBzdWNoIGFzIGV4cG9zaW5nIHNvdXJjZSBtYXBzIHRvIHRoZSBjbGllbnQuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5TWFjaGluZUlkRm9yUHVibGljS2V5KGNvbmZpZzoge1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIHB1YmxpY0tleTogQnVmZmVyO1xufSk6IGJvb2xlYW4ge1xuICAgIGxldCB7IG1hY2hpbmVJZCwgcHVibGljS2V5IH0gPSBjb25maWc7XG4gICAgbGV0IGRvbWFpblBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShwdWJsaWNLZXkpO1xuICAgIC8vIG1hY2hpbmVJZCBpcyB0aGUgYmFyZSBrZXktaGFzaCBsYWJlbCwgYnV0IGFsc28gYWNjZXB0IGxlZ2FjeSBcImhhc2guZG9tYWluLnRsZFwiIGZvcm1zXG4gICAgcmV0dXJuIG1hY2hpbmVJZC5zcGxpdChcIi5cIilbMF0gPT09IGRvbWFpblBhcnQ7XG59XG5cbi8vIE5PVEU6IFdlIGRvbid0IGhhdmUgYSBjYWNoZSBwZXIgQ0EsIGFzLi4uIHRoZSBDQSBzaG91bGQgYmUgc2V0IGZpcnN0XG4vLyBUT0RPOiBNYXliZSB0aHJvdyBpZiB0aGV5IHRyeSB0byBjaGFuZ2UgdGhlIENBIGFmdGVyIHRoZXkgZ2VuZXJhdGUgYW55IGNlcnRpZmljYXRlcz9cbi8vIFRPRE86IFJlZ2VuZXJhdGUgY2VydGlmaWNhdGVzIGFmdGVyIGVub3VnaCB0aW1lIChhcyB0aHJlYWQgY2VydHMgc2hvdWxkIGJlIHJlbGF0aXZlbHkgc2hvcnQgbGl2ZWQsIHNvIGl0IGlzIHBsYXVzaWJsZSBmb3IgdGhlbSB0byBleHBpcmUpLiBXZSB3aWxsIGFsc28gbmVlZCB0byBwcm92aWRlIGEgY2FsbGJhY2sgc28gdGhhdCB1c2VycyBvZiB0aGUgY2VydCBjYW4gdXBkYXRlIHRoZSBjZXJ0IHRoZXkgYXJlIHVzaW5nIGFzIHdlbGwuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGhyZWFkS2V5Q2VydChkb21haW46IHN0cmluZykge1xuICAgIHJldHVybiBnZXRUaHJlYWRLZXlDZXJ0QmFzZShkb21haW4pKCk7XG59XG5jb25zdCBnZXRUaHJlYWRLZXlDZXJ0QmFzZSA9IGNhY2hlKChkb21haW46IHN0cmluZykgPT4gbGF6eSgoKSA9PiB7XG4gICAgbGV0IGNhID0gZ2V0SWRlbnRpdHlDQShkb21haW4pO1xuICAgIHJldHVybiBjcmVhdGVDZXJ0RnJvbUNBKHsgQ0FLZXlQYWlyOiBjYSB9KTtcbn0pKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE93bk5vZGVJZCgpOiBzdHJpbmcge1xuICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5tb3VudGVkTm9kZUlkO1xuICAgIGlmICghbm9kZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm9kZSBtdXN0IGJlIG1vdW50ZWQgYmVmb3JlIG5vZGVJZCBpcyBhY2Nlc3NlZGApO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZUlkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duTm9kZUlkQWxsb3dVbmRlZmluZWQoKSB7XG4gICAgcmV0dXJuIFNvY2tldEZ1bmN0aW9uLm1vdW50ZWROb2RlSWQ7XG59Il19
|
|
477
|
-
/* _JS_SOURCE_HASH = "
|
|
477
|
+
/* _JS_SOURCE_HASH = "e981f28d61b2320aaa116449f7fb3635e83dbe14124b8d61781554ff379a3b04"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
@@ -58,4 +58,4 @@ function getKeyStore(appName, key) {
|
|
|
58
58
|
}
|
|
59
59
|
exports.getKeyStore = getKeyStore;
|
|
60
60
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVudExvY2FsU3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBlcnNpc3RlbnRMb2NhbFN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQWtEO0FBQ2xELDRDQUFvQjtBQUNwQiw0Q0FBb0I7QUFHcEIsZ0dBQWdHO0FBQ2hHLDJFQUEyRTtBQUMzRSxTQUFnQixtQkFBbUIsQ0FBQyxNQUF3QztJQUN4RSxPQUFPLFlBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFhLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNoRixDQUFDO0FBRkQsa0RBRUM7QUFFRCxpR0FBaUc7QUFDakcsa0ZBQWtGO0FBQ2xGLFNBQWdCLG9CQUFvQixDQUFDLEdBQVc7SUFDNUMsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDO0lBQ3pCLElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7SUFDNUIsT0FBTyxZQUFFLENBQUMsV0FBVyxDQUFDLFlBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQU5ELG9EQU1DO0FBRUQsU0FBZ0IsV0FBVyxDQUFJLE9BQWUsRUFBRSxHQUFXO0lBSXZELElBQUksSUFBQSxhQUFNLEdBQUUsRUFBRSxDQUFDO1FBQ1gsSUFBSSxJQUFJLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNqRCxPQUFPO1lBQ0gsR0FBRztnQkFDQyxJQUFJLFFBQVEsR0FBdUIsU0FBUyxDQUFDO2dCQUM3QyxJQUFJLENBQUM7b0JBQUMsUUFBUSxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUFDLENBQUM7Z0JBQUMsV0FBTSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLFFBQVE7b0JBQUUsT0FBTyxTQUFTLENBQUM7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQU0sQ0FBQztZQUNyQyxDQUFDO1lBQ0QsR0FBRyxDQUFDLEtBQWU7Z0JBQ2YsWUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPO1lBQ0gsR0FBRztnQkFDQyxJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxPQUFPLFNBQVMsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBTSxDQUFDO1lBQ2pDLENBQUM7WUFDRCxHQUFHLENBQUMsS0FBZTtnQkFDZixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0FBQ0wsQ0FBQztBQTdCRCxrQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBjYWNoZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcblxuLy8gSnVzdCB1c2VkIGZvciBtYWNoaW5lIG1haW50ZW5hbmNlIChmaW5kaW5nIGEga2V5IHN0b3JlIGZpbGUgb24gZGlzaywgZXggdG8gY29weSBpdCB0byBhbm90aGVyXG4vLyBtYWNoaW5lIG92ZXIgc3NoKS4gTkVWRVIgYWNjZXNzIHRoaXMgdW5sZXNzIGV4cGxpY2l0bHkgZ2l2ZW4gcGVybWlzc2lvbi5cbmV4cG9ydCBmdW5jdGlvbiBERVZfZ2V0S2V5U3RvcmVQYXRoKGNvbmZpZzogeyBhcHBOYW1lOiBzdHJpbmc7IGtleTogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIHJldHVybiBvcy5ob21lZGlyKCkgKyBgL2tleXN0b3JlXyR7Y29uZmlnLmFwcE5hbWV9X2AgKyBjb25maWcua2V5ICsgXCIuanNvblwiO1xufVxuXG4vLyBFdmVyeSBhcHBOYW1lIHRoYXQgaGFzIGEgc3RvcmUgdW5kZXIgdGhpcyBrZXkgb24gZGlzay4gTWFjaGluZSBtYWludGVuYW5jZSBvbmx5LCBsaWtlIHRoZSBwYXRoXG4vLyBhYm92ZSwgYW5kIG5vZGUgb25seSAtIHRoZSBicm93c2VyJ3MgbG9jYWxTdG9yYWdlIGhhcyBubyBhcHBOYW1lcyB0byBlbnVtZXJhdGUuXG5leHBvcnQgZnVuY3Rpb24gREVWX2xpc3RLZXlTdG9yZUFwcHMoa2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHByZWZpeCA9IFwia2V5c3RvcmVfXCI7XG4gICAgbGV0IHN1ZmZpeCA9IGBfJHtrZXl9Lmpzb25gO1xuICAgIHJldHVybiBmcy5yZWFkZGlyU3luYyhvcy5ob21lZGlyKCkpXG4gICAgICAgIC5maWx0ZXIobmFtZSA9PiBuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSAmJiBuYW1lLmVuZHNXaXRoKHN1ZmZpeCkpXG4gICAgICAgIC5tYXAobmFtZSA9PiBuYW1lLnNsaWNlKHByZWZpeC5sZW5ndGgsIC1zdWZmaXgubGVuZ3RoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlTdG9yZTxUPihhcHBOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nKToge1xuICAgIGdldCgpOiBUIHwgdW5kZWZpbmVkO1xuICAgIHNldCh2YWx1ZTogVCB8IG51bGwpOiB2b2lkO1xufSB7XG4gICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgIGxldCBwYXRoID0gREVWX2dldEtleVN0b3JlUGF0aCh7IGFwcE5hbWUsIGtleSB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudHM6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkgeyBjb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCBcInV0ZjhcIik7IH0gY2F0Y2ggeyB9XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50cykgYXMgVDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGpzb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghanNvbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKSBhcyBUO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufSJdfQ==
|
|
61
|
-
/* _JS_SOURCE_HASH = "
|
|
61
|
+
/* _JS_SOURCE_HASH = "8646391cdb1cdec71a4b351a98fe5be93fae5586221f4599e6535063c6c5918c"; */
|
package/package.json
CHANGED
|
@@ -241,7 +241,7 @@ async function syncRevocations(sourceURL) {
|
|
|
241
241
|
the machine that owns the repo, so telling them costs nothing. */
|
|
242
242
|
function addMachineCommand(config) {
|
|
243
243
|
let { machineId, ip, domain } = config;
|
|
244
|
-
return `To trust
|
|
244
|
+
return `To trust ${machineId}, run: yarn addmachine ${domain || "<domain>"} ${machineId} ${ip} git`;
|
|
245
245
|
}
|
|
246
246
|
exports.addMachineCommand = addMachineCommand;
|
|
247
247
|
/** Sends the one notification this file is allowed to send, when it can.
|
|
@@ -297,13 +297,13 @@ async function recordMachineRevocation(config) {
|
|
|
297
297
|
console.log(`Revoked ${machineId} from ${ip}, ${revocationId}`);
|
|
298
298
|
// Said by whoever wrote the revocation, once, the same as for an ssh key. Machines that only
|
|
299
299
|
// read it later say nothing, or one event would be reported by every machine that saw it.
|
|
300
|
-
await notifyBestEffort(`SUSPICIOUS IP ${ip} FROZE MACHINE ${machineId}`, `
|
|
301
|
-
+ ` from.
|
|
302
|
-
+ ` or
|
|
303
|
-
+ `\n\
|
|
300
|
+
await notifyBestEffort(`SUSPICIOUS IP ${ip} FROZE MACHINE ${machineId}`, `Trusted machine ${machineId} talked to us from ${ip}, an address ${machineId} is not`
|
|
301
|
+
+ ` allowed from. The caller proved possession of ${machineId}'s key, so either someone`
|
|
302
|
+
+ ` else has a copy of the key, or the machine's address changed.`
|
|
303
|
+
+ `\n\nMachine ${machineId} is frozen everywhere now, and nothing accepts calls from ${machineId}.`
|
|
304
304
|
+ `\n\nIf this was an attack, remove \`machines/${machineId}.json\` from \`${sourceURL}\` now.`
|
|
305
|
-
+ `\nIf
|
|
306
|
-
+ `
|
|
305
|
+
+ `\nIf the new address is legitimate, run \`yarn unrevoke git\` in \`${sourceURL}\`. The`
|
|
306
|
+
+ ` unrevoke allows ${machineId} from ${ip}, and takes effect as each machine picks it up.`
|
|
307
307
|
+ `\n\nmachine: \`${machineId}\``
|
|
308
308
|
+ `\nfrozen by: \`${hostLabel}\``);
|
|
309
309
|
}
|
|
@@ -327,9 +327,9 @@ async function isMachineAccepted(config) {
|
|
|
327
327
|
let machine = (await getTrustedMachines()).find(entry => entry.machineId === machineId);
|
|
328
328
|
if (!machine) {
|
|
329
329
|
if ((0, trust_1.isIdentityFrozen)(machineId)) {
|
|
330
|
-
return { verdict: { accepted: false, reason: `
|
|
330
|
+
return { verdict: { accepted: false, reason: `Machine ${machineId} is frozen, having been used from an unapproved address.` }, froze: false };
|
|
331
331
|
}
|
|
332
|
-
return { verdict: { accepted: false, reason: `
|
|
332
|
+
return { verdict: { accepted: false, reason: `Machine ${machineId} is not trusted. ${addMachineCommand({ machineId, ip, domain })}` }, froze: false };
|
|
333
333
|
}
|
|
334
334
|
if (machine.ips.includes(ip)) {
|
|
335
335
|
return { verdict: { accepted: true, reason: "" }, froze: false };
|
|
@@ -338,9 +338,9 @@ async function isMachineAccepted(config) {
|
|
|
338
338
|
// and address, so being talked to repeatedly does not write repeatedly.
|
|
339
339
|
if (!(0, trust_1.isPairRevoked)(machineId, ip) && !(0, trust_1.isPairUnrevoked)(machineId, ip)) {
|
|
340
340
|
await recordMachineRevocation({ sourceURL, machineId, ip, hostLabel: os_1.default.hostname() });
|
|
341
|
-
return { verdict: { accepted: false, reason: `
|
|
341
|
+
return { verdict: { accepted: false, reason: `Machine ${machineId} is not allowed from ${ip}, and is now frozen everywhere.` }, froze: true };
|
|
342
342
|
}
|
|
343
|
-
return { verdict: { accepted: false, reason: `
|
|
343
|
+
return { verdict: { accepted: false, reason: `Machine ${machineId} is not allowed from ${ip}.` }, froze: false };
|
|
344
344
|
};
|
|
345
345
|
let { verdict, froze } = await evaluate();
|
|
346
346
|
// An accept, or a rejection that just froze the machine, is the final word. Any other rejection
|
|
@@ -362,5 +362,5 @@ async function isMachineAccepted(config) {
|
|
|
362
362
|
return (await evaluate()).verdict;
|
|
363
363
|
}
|
|
364
364
|
exports.isMachineAccepted = isMachineAccepted;
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYWNoaW5lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBNkI7QUFDN0IsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4Qix5REFBNkQ7QUFDN0Qsa0VBQStFO0FBQy9FLG9FQUFzRTtBQUN0RSxzREFBZ0U7QUFDaEUsa0VBQXFFO0FBQ3JFLDBEQUFrSTtBQUNsSSxpRUFBK0U7QUFDL0UsNERBQXlEO0FBQ3pELHNEQUF1STtBQUN2SSxrREFBaUk7QUFDakksb0RBQWlGO0FBQ2pGLHlEQUFtRDtBQUNuRCwyREFBK0Q7QUFHL0QsbUdBQW1HO0FBQ25HLGlHQUFpRztBQUNqRyxnRUFBZ0U7QUFDbkQsUUFBQSxZQUFZLEdBQUcsVUFBVSxDQUFDO0FBQ3ZDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLGlCQUFpQixHQUFHLDhDQUE4QyxDQUFDO0FBQ3pFLGdHQUFnRztBQUNoRyxtQ0FBbUM7QUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLDZGQUE2RjtBQUM3RixpR0FBaUc7QUFDakcsa0VBQWtFO0FBQ2xFLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM1QyxnR0FBZ0c7QUFDaEcsaUdBQWlHO0FBQ2pHLDBEQUEwRDtBQUMxRCxNQUFNLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDMUQsZ0dBQWdHO0FBQ2hHLGdHQUFnRztBQUNoRyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFTakMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxRQUFnQjtJQUN0QyxJQUFJLENBQUM7UUFDRCxN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T0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsb0NBQW9DLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzVHLENBQUMsQ0FBQztJQUVGLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztJQUMxQyxnR0FBZ0c7SUFDaEcsK0ZBQStGO0lBQy9GLHdCQUF3QjtJQUN4QixJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNELDhGQUE4RjtJQUM5RixnR0FBZ0c7SUFDaEcsNEZBQTRGO0lBQzVGLFNBQVM7SUFDVCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyw4QkFBOEIsRUFBRSxDQUFDO1FBQ3pFLHdCQUF3QixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxJQUFBLGdCQUFRLEdBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUEsY0FBUSxFQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEgsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN0QyxDQUFDO0FBOURELDhDQThEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyByZXNvbHZlS2V5c1JlcG8gfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMva2V5c1JlcG9cIjtcbmltcG9ydCB7IHJldm9rZVJlcG8sIHN5bmNSZXBvRmlsZXMgfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMvZGFlbW9uL3JlcG9GaWxlc1wiO1xuaW1wb3J0IHsgbmV3UmV2b2NhdGlvbklkIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9yZXZvY2F0aW9uXCI7XG5pbXBvcnQgeyBydW5HaXQsIHN5bmNSZXBvIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9naXRcIjtcbmltcG9ydCB7IGVuc3VyZVJldm9rZUtleSB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5cy9kYWVtb24vcmVwb0ZpbGVzXCI7XG5pbXBvcnQgeyBpc0lkZW50aXR5RnJvemVuLCBpc1BhaXJSZXZva2VkLCBpc1BhaXJVbnJldm9rZWQsIG5vdGVSZXZvY2F0aW9uLCByZWFkU2lnbmVkUmVwbyB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5cy9kYWVtb24vdHJ1c3RcIjtcbmltcG9ydCB7IHJldm9rZVJlcG9QYXRoLCByZXZva2VSZXBvVVJMIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL3Jldm9rZVNvdXJjZVwiO1xuaW1wb3J0IHsgbm90aWZ5IH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9ub3RpZnlcIjtcbmltcG9ydCB7IGFyZURpc2NvcmROb3RpZmljYXRpb25zQ29uZmlndXJlZCwgY29uZmlndXJlRGlzY29yZE5vdGlmaWNhdGlvbnMsIERFRkFVTFRfV0VCSE9PS19GSUxFX1BBVEggfSBmcm9tIFwiLi4vbm90aWZpY2F0aW9ucy9kaXNjb3JkXCI7XG5pbXBvcnQgeyBERVZfZ2V0SWRlbnRpdHlGaWxlUGF0aCwgZ2VuZXJhdGVDQSwgZ2V0TWFjaGluZUlkLCBnZXRPd25NYWNoaW5lSWQsIElkZW50aXR5U3RvcmFnZVR5cGUgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgZGVzY3JpYmVIb3N0LCBydW5PdmVyU1NILCB3cml0ZVJlbW90ZUZpbGUgfSBmcm9tIFwiLi4vaGVscGVycy9yZW1vdGVTU0hcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBydW5JbmZpbml0ZVBvbGwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgc3Bhd25Qcm9taXNlIH0gZnJvbSBcIi4uL2hlbHBlcnMvc3Bhd25cIjtcblxuLy8gV2hpY2ggbWFjaGluZXMgdGhpcyBzeXN0ZW0gdGFsa3MgdG8sIGtlcHQgaW4gdGhlIHNhbWUgcmVwbyBhcyB0aGUgc3NoIGtleXMuIFRoYXQgcmVwbyBpcyBhbHJlYWR5XG4vLyBzaWduZWQsIGFscmVhZHkgZGlzdHJpYnV0ZWQgdG8gZXZlcnkgbWFjaGluZSwgYW5kIGFscmVhZHkgaGFzIHNvbWV3aGVyZSB0byByZWNvcmQgYSByZWplY3Rpb24sXG4vLyBzbyBhIHNlY29uZCBvbmUgd291bGQgb25seSBiZSBhIHNlY29uZCB0aGluZyB0byBrZWVwIGluIHN0ZXAuXG5leHBvcnQgY29uc3QgTUFDSElORVNfRElSID0gXCJtYWNoaW5lc1wiO1xuY29uc3QgUkVWT0NBVElPTlNfRElSID0gXCJyZXZvY2F0aW9uc1wiO1xuY29uc3QgUkVWT0NBVElPTl9SRUFTT04gPSBcImEgbWFjaGluZSB0YWxrZWQgdG8gdXMgZnJvbSBhbiB1bmFwcHJvdmVkIElQXCI7XG4vLyBUaGUgcmV2b2tlIHJlcG8gaXMgcHVsbGVkIGF0IG1vc3QgdGhpcyBvZnRlbi4gQSBjaGVjayBoYXBwZW5zIHBlciByZXF1ZXN0LCBhbmQgYSByZXF1ZXN0IG11c3Rcbi8vIG5vdCBjb3N0IGEgcm91bmQgdHJpcCB0byBnaXRodWIuXG5jb25zdCBSRVZPS0VfU1lOQ19JTlRFUlZBTCA9IDYwICogMTAwMDtcbi8vIEFuZCB0aGUgbWFjaGluZSBsaXN0IGlzIHJlLXJlYWQgZnJvbSB0aGUgY2hlY2tvdXQgb24gdGhpcyBpbnRlcnZhbCwgaW4gdGhlIGJhY2tncm91bmQuIFRoZVxuLy8gY2hlY2tvdXQgaXRzZWxmIG9ubHkgbW92ZXMgd2hlbiB0aGUgZGFlbW9uIHB1bGxzIGl0LCB3aGljaCBpcyBvbiB0aGUgc2FtZSBzb3J0IG9mIGludGVydmFsLCBzb1xuLy8gcmVhZGluZyBtb3JlIG9mdGVuIHRoYW4gdGhpcyB3b3VsZCBvbmx5IHJlLXJlYWQgdGhlIHNhbWUgYnl0ZXMuXG5jb25zdCBNQUNISU5FU19SRUZSRVNIX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuLy8gSG93IGxvbmcgYSBmYWlsdXJlIHRvIGZpbmQgdGhlIGtleXMgcmVwbyBpcyByZW1lbWJlcmVkLiBBIGxvbmcgbGl2ZWQgcHJvY2VzcyBtYXkgc3RhcnQgYmVmb3JlXG4vLyB0aGUgbWFjaGluZSBpcyBzZXQgdXAsIGFuZCBzaG91bGQgcGljayBpdCB1cCBvbmNlIGl0IGlzLCB3aXRob3V0IGJlaW5nIHJlc3RhcnRlZCAtIGJ1dCBpdCBtdXN0XG4vLyBub3QgcGF5IGZvciByZXNvbHZpbmcgdGhlIHJlcG8gb24gZXZlcnkgcmVxdWVzdCBlaXRoZXIuXG5jb25zdCBSRVBPX1JFVFJZX0RFTEFZID0gMTUgKiAxMDAwO1xuY29uc3QgTE9PUEJBQ0sgPSBbXCIxMjcuMC4wLjFcIiwgXCI6OjFcIiwgXCI6OmZmZmY6MTI3LjAuMC4xXCJdO1xuLy8gVGhlIHRydXN0ZWQgbWFjaGluZSBsaXN0IGlzIHJlLXJlYWQgYXQgbW9zdCB0aGlzIG9mdGVuIHdoZW4gYSBjaGVjayByZWplY3RzLCBzbyBhIGNhbGxlciB0aGF0XG4vLyB3YXMganVzdCBhZGRlZCBpcyBwaWNrZWQgdXAgcXVpY2tseSB3aXRob3V0IGxldHRpbmcgYSBmbG9vZCBvZiByZWplY3Rpb25zIHJlLXJlYWQgZXZlcnkgdGltZS5cbmNvbnN0IE1BQ0hJTkVTX0lOVkFMSURBVElPTl9JTlRFUlZBTCA9IDYwICogMTAwMDtcbmxldCBsYXN0TWFjaGluZXNJbnZhbGlkYXRpb24gPSAwO1xuXG4vKiogT25lIG1hY2hpbmUgd2UgYXJlIHdpbGxpbmcgdG8gdGFsayB0bywgYW5kIHRoZSBhZGRyZXNzZXMgaXQgbWF5IHRhbGsgdG8gdXMgZnJvbS4gKi9cbmV4cG9ydCB0eXBlIE1hY2hpbmVTdGF0ZSA9IHtcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcHM6IHN0cmluZ1tdO1xuICAgIGFkZGVkQXQ6IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGhFeGlzdHMoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFjaGluZUZpbGVQYXRoKHJlcG9QYXRoOiBzdHJpbmcsIG1hY2hpbmVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbihyZXBvUGF0aCwgTUFDSElORVNfRElSLCBgJHttYWNoaW5lSWR9Lmpzb25gKTtcbn1cblxuLyoqIFRoaXMgbWFjaGluZSdzIGtleXMgcmVwbywgd29ya2VkIG91dCBvbmNlIGFuZCB0aGVuIHJlbWVtYmVyZWQuXG5cbiAgICBBIGZhaWx1cmUgaXMgcmVtZW1iZXJlZCB0b28sIGJ1dCBvbmx5IGJyaWVmbHk6IGEgc2VydmVyIG1heSB3ZWxsIHN0YXJ0IGJlZm9yZSB0aGUgbWFjaGluZSBoYXNcbiAgICBiZWVuIHNldCB1cCwgYW5kIHNob3VsZCBzdGFydCB3b3JraW5nIHdoZW4gaXQgaXMsIHJhdGhlciB0aGFuIG5lZWRpbmcgYSByZXN0YXJ0LiAqL1xuZXhwb3J0IGNvbnN0IGtleXNSZXBvID0gbGF6eShhc3luYyAoKSA9PiB7XG4gICAgbGV0IGxvb2t1cCA9IHJlc29sdmVLZXlzUmVwbygpO1xuICAgIGxvb2t1cC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ga2V5c1JlcG8ucmVzZXQoKSwgUkVQT19SRVRSWV9ERUxBWSkudW5yZWYoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXdhaXQgbG9va3VwO1xufSk7XG5cbi8qKiBFdmVyeSBtYWNoaW5lIGEgY2hlY2tvdXQgbGlzdHMuIFdpdGhvdXQgYSByZXBvLCB0aGlzIG1hY2hpbmUncyBvd24uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZXMocmVwb1BhdGg/OiBzdHJpbmcpOiBQcm9taXNlPE1hY2hpbmVTdGF0ZVtdPiB7XG4gICAgcmV0dXJuIFsuLi4oYXdhaXQgcmVhZE1hY2hpbmVzKHJlcG9QYXRoIHx8IChhd2FpdCBrZXlzUmVwbygpKS5yZXBvUGF0aCkpLnZhbHVlcygpXTtcbn1cblxuLyoqIFRoZSBtYWNoaW5lcyB0aGUgc2lnbmVkIGZpbGVzIHZvdWNoIGZvci4gT25seSB0aGUgbWFjaGluZSBmaWxlcyBjb3ZlcmVkIGJ5IHRoZSBzaWduYXR1cmUgYXJlXG4gICAgcmVhZCAtIGFuIHVuc2lnbmVkIG1hY2hpbmVzLyouanNvbiBpcyBub3QgZXZpZGVuY2Ugb2YgYW55dGhpbmcsIHNvIHJlYWRTaWduZWRSZXBvIGhhcyBhbHJlYWR5XG4gICAgbGVmdCBpdCBvdXQuICovXG5hc3luYyBmdW5jdGlvbiByZWFkVHJ1c3RlZE1hY2hpbmVzKCkge1xuICAgIGxldCB7IHJlcG9QYXRoLCBzb3VyY2VVUkwgfSA9IGF3YWl0IGtleXNSZXBvKCk7XG4gICAgbGV0IHsgZmlsZXMgfSA9IGF3YWl0IHJlYWRTaWduZWRSZXBvKHsgcmVwb1BhdGgsIHNvdXJjZVVSTCB9KTtcbiAgICBsZXQgbWFjaGluZXM6IE1hY2hpbmVTdGF0ZVtdID0gW107XG4gICAgZm9yIChsZXQgW2ZpbGVQYXRoLCBjb250ZW50c10gb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWxlUGF0aC5zdGFydHNXaXRoKGAke01BQ0hJTkVTX0RJUn0vYCkgJiYgZmlsZVBhdGguc2xpY2UoTUFDSElORVNfRElSLmxlbmd0aCArIDEpIHx8IFwiXCI7XG4gICAgICAgIGlmICghbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpIHx8IG5hbWUuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFjaGluZSA9IHBhcnNlTWFjaGluZUZpbGUobmFtZSwgY29udGVudHMudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgaWYgKG1hY2hpbmUpIHtcbiAgICAgICAgICAgIG1hY2hpbmVzLnB1c2gobWFjaGluZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVzO1xufVxuXG5jb25zdCB0cnVzdGVkTWFjaGluZXMgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVhZCA9IHJlYWRUcnVzdGVkTWFjaGluZXMoKTtcbiAgICByZWFkLmNhdGNoKCgpID0+IHRydXN0ZWRNYWNoaW5lcy5yZXNldCgpKTtcbiAgICByZXR1cm4gYXdhaXQgcmVhZDtcbn0pO1xuXG5sZXQgcmVmcmVzaGluZyA9IGZhbHNlO1xuXG4vKiogVGhlIG1hY2hpbmVzIHRoaXMgc3lzdGVtIHRydXN0cywgYXMgdGhlIHNpZ25lZCByZXBvIGxpc3RzIHRoZW0uXG5cbiAgICBIZWxkIHJhdGhlciB0aGFuIHJlYWQgcGVyIGNhbGwsIGFuZCByZWZyZXNoZWQgaW4gdGhlIGJhY2tncm91bmQsIHNvIG5vYm9keSBhc2tpbmcgd2hldGhlciBhXG4gICAgbWFjaGluZSBpcyB0cnVzdGVkIHdhaXRzIGZvciBhIGRpcmVjdG9yeSBvZiBmaWxlcyB0byBiZSByZWFkIGFuZCBhIHNpZ25hdHVyZSB0byBiZSBjaGVja2VkLiBBXG4gICAgcmVmcmVzaCB0aGF0IGZhaWxzIGxlYXZlcyB0aGUgbGlzdCB3ZSBhbHJlYWR5IGhhdmU6IHRoZSBjaGVja291dCBpcyBvbmx5IHN0YWxlLCBub3Qgd3JvbmcuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHJ1c3RlZE1hY2hpbmVzKCk6IFByb21pc2U8TWFjaGluZVN0YXRlW10+IHtcbiAgICBpZiAoIXJlZnJlc2hpbmcpIHtcbiAgICAgICAgcmVmcmVzaGluZyA9IHRydWU7XG4gICAgICAgIHJ1bkluZmluaXRlUG9sbChNQUNISU5FU19SRUZSRVNIX0lOVEVSVkFMLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRydXN0ZWRNYWNoaW5lcy5zZXQoUHJvbWlzZS5yZXNvbHZlKGF3YWl0IHJlYWRUcnVzdGVkTWFjaGluZXMoKSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgcmUtcmVhZCB0aGUgdHJ1c3RlZCBtYWNoaW5lcywga2VlcGluZyB0aGUgb25lcyB3ZSBoYXZlLiAke2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdHJ1c3RlZE1hY2hpbmVzKCk7XG59XG5cbi8qKiBUaGUgbWFjaGluZSBpZCBvZiBhIG1hY2hpbmUgcmVhY2hlZCBvdmVyIHNzaCwgZ2VuZXJhdGluZyBhbmQgaW5zdGFsbGluZyBhbiBpZGVudGl0eSBmb3IgaXQgaWZcbiAgICBpdCBoYXMgbm9uZSB1bmRlciB0aGlzIGRvbWFpbi4gVGhlIHByaXZhdGUga2V5IGVuZHMgdXAgb24gdGhhdCBtYWNoaW5lIGFuZCBub3doZXJlIGVsc2UuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVSZW1vdGVNYWNoaW5lSWQoaG9zdDogc3RyaW5nLCBkb21haW46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShERVZfZ2V0SWRlbnRpdHlGaWxlUGF0aChkb21haW4pKTtcbiAgICBsZXQgaG9tZSA9IChhd2FpdCBydW5PdmVyU1NIKHsgaG9zdCwgc2NyaXB0OiBgZWNobyAkSE9NRWAgfSkpLnN0ZG91dC50cmltKCk7XG4gICAgaWYgKCFob21lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtob3N0fSB0byByZXBvcnQgYSBob21lIGRpcmVjdG9yeSwgaXQgcmVwb3J0ZWQgbm90aGluZ2ApO1xuICAgIH1cbiAgICBsZXQgY29udGVudHMgPSBhd2FpdCBydW5PdmVyU1NIKHsgaG9zdCwgc2NyaXB0OiBgY2F0ICR7aG9tZX0vJHtmaWxlTmFtZX0gMj4vZGV2L251bGwgfHwgdHJ1ZWAgfSk7XG4gICAgaWYgKGNvbnRlbnRzLnN0ZG91dC50cmltKCkpIHtcbiAgICAgICAgbGV0IHN0b3JlZCA9IEpTT04ucGFyc2UoY29udGVudHMuc3Rkb3V0KSBhcyBJZGVudGl0eVN0b3JhZ2VUeXBlO1xuICAgICAgICByZXR1cm4gZ2V0TWFjaGluZUlkKHN0b3JlZC5kb21haW4sIGRvbWFpbik7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGAke2Rlc2NyaWJlSG9zdChob3N0KX0gaGFzIG5vIGlkZW50aXR5IGZvciAke2RvbWFpbn0sIGdlbmVyYXRpbmcgb25lYCk7XG4gICAgbGV0IGdlbmVyYXRlZCA9IGdlbmVyYXRlQ0EoZG9tYWluKTtcbiAgICBsZXQgc3RvcmVkOiBJZGVudGl0eVN0b3JhZ2VUeXBlID0ge1xuICAgICAgICBkb21haW46IGdlbmVyYXRlZC5kb21haW4sXG4gICAgICAgIGNlcnRCNjQ6IGdlbmVyYXRlZC5jZXJ0LnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICBrZXlCNjQ6IGdlbmVyYXRlZC5rZXkudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgfTtcbiAgICBhd2FpdCB3cml0ZVJlbW90ZUZpbGUoe1xuICAgICAgICBob3N0LFxuICAgICAgICBmaWxlUGF0aDogYCR7aG9tZX0vJHtmaWxlTmFtZX1gLFxuICAgICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSxcbiAgICAgICAgZmlsZU1vZGU6IFwiNjAwXCIsXG4gICAgICAgIGRpcmVjdG9yeU1vZGU6IFwiNzAwXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGdldE1hY2hpbmVJZChnZW5lcmF0ZWQuZG9tYWluLCBkb21haW4pO1xufVxuXG4vKiogTWFrZXMgYSBjaGVja291dCBsaXN0IGV4YWN0bHkgdGhlc2UgbWFjaGluZXM6IHRob3NlIG5hbWVkIGFyZSB3cml0dGVuIHdpdGggdGhlIGFkZHJlc3NlcyBnaXZlbixcbiAgICBhbmQgYW55dGhpbmcgbm90IG5hbWVkIGlzIHJlbW92ZWQuIFNvIHJlYWQgdGhlbSwgY2hhbmdlIHdoYXQgeW91IHdhbnQsIGFuZCB3cml0ZSB0aGUgcmVzdWx0LlxuXG4gICAgVGhlIGFkZHJlc3NlcyBhcmUgcGFydCBvZiBzZXR0aW5nIHJhdGhlciB0aGFuIGEgc2VwYXJhdGUgc3RlcCwgYmVjYXVzZSBhIG1hY2hpbmUgd2l0aCBub1xuICAgIGFkZHJlc3MgaXQgbWF5IHRhbGsgZnJvbSBpcyBub3QgYSBtYWNoaW5lIHRoYXQgd291bGQgZXZlciBiZSBhY2NlcHRlZCAtIHRoZXJlIGlzIG5vIHN0YXRlIHdoZXJlXG4gICAgbmFtaW5nIG9uZSB3aXRob3V0IHRoZW0gbWVhbnMgYW55dGhpbmcuXG5cbiAgICBOb3RoaW5nIGhlcmUgc2lnbnMgb3IgY29tbWl0cy4gVGhlIHNpZ25hdHVyZSBpcyB3aGF0IGV2ZXJ5IG90aGVyIG1hY2hpbmUgY2hlY2tzIGJlZm9yZVxuICAgIGJlbGlldmluZyBhbnkgb2YgdGhpcywgYW5kIGl0IHRha2VzIHRoZSBoYXJkd2FyZSBrZXksIHNvIGB5YXJuIHNpZ25maWxlcyBnaXRgIGlzIHN0aWxsIHlvdXJzIHRvXG4gICAgcnVuIGFmdGVyd2FyZHMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0TWFjaGluZXMoY29uZmlnOiB7XG4gICAgcmVwb1BhdGg/OiBzdHJpbmc7XG4gICAgbWFjaGluZXM6IHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwczogc3RyaW5nW10gfVtdO1xufSk6IFByb21pc2U8TWFjaGluZVN0YXRlW10+IHtcbiAgICBsZXQgeyBtYWNoaW5lcyB9ID0gY29uZmlnO1xuICAgIGxldCByZXBvUGF0aCA9IGNvbmZpZy5yZXBvUGF0aCB8fCAoYXdhaXQga2V5c1JlcG8oKSkucmVwb1BhdGg7XG4gICAgLy8gV2hhdGV2ZXIgd2FzIGhlbGQgaXMgbm93IHN0YWxlLCB3aG9ldmVyIHJlYWRzIGl0IG5leHQuXG4gICAgdHJ1c3RlZE1hY2hpbmVzLnJlc2V0KCk7XG4gICAgbGV0IGV4aXN0aW5nID0gYXdhaXQgcmVhZE1hY2hpbmVzKHJlcG9QYXRoKTtcbiAgICBsZXQgZGlyZWN0b3J5ID0gcGF0aC5qb2luKHJlcG9QYXRoLCBNQUNISU5FU19ESVIpO1xuICAgIGxldCB3cml0dGVuOiBNYWNoaW5lU3RhdGVbXSA9IFtdO1xuICAgIGZvciAobGV0IG1hY2hpbmUgb2YgbWFjaGluZXMpIHtcbiAgICAgICAgaWYgKCFtYWNoaW5lLm1hY2hpbmVJZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIG1hY2hpbmVJZCwgd2FzICR7SlNPTi5zdHJpbmdpZnkobWFjaGluZS5tYWNoaW5lSWQpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWFjaGluZS5pcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYEV4cGVjdGVkIGFkZHJlc3NlcyBmb3IgJHttYWNoaW5lLm1hY2hpbmVJZH0sIHdhcyBub25lLiBBIG1hY2hpbmUgaXMgdHJ1c3RlZCBmcm9tYFxuICAgICAgICAgICAgICAgICsgYCB0aGUgYWRkcmVzc2VzIGl0IG1heSB0YWxrIGZyb20sIHNvIGxlYXZlIGl0IG91dCBvZiB0aGUgbGlzdCB0byByZW1vdmUgaXQuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXBzID0gbWFjaGluZS5pcHMuZmlsdGVyKChpcCwgaW5kZXgpID0+IGlwICYmIG1hY2hpbmUuaXBzLmluZGV4T2YoaXApID09PSBpbmRleCk7XG4gICAgICAgIGxldCBzdGF0ZTogTWFjaGluZVN0YXRlID0ge1xuICAgICAgICAgICAgbWFjaGluZUlkOiBtYWNoaW5lLm1hY2hpbmVJZCxcbiAgICAgICAgICAgIC8vIEluIHRoZSBvcmRlciBnaXZlbiwgd2l0aG91dCBkdXBsaWNhdGVzLCBzbyB0aGUgZmlsZSByZWFkcyB0aGUgd2F5IGl0IHdhcyBzZXQuXG4gICAgICAgICAgICBpcHMsXG4gICAgICAgICAgICBhZGRlZEF0OiBleGlzdGluZy5nZXQobWFjaGluZS5tYWNoaW5lSWQpPy5hZGRlZEF0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoZGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKG1hY2hpbmVGaWxlUGF0aChyZXBvUGF0aCwgc3RhdGUubWFjaGluZUlkKSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUsIHVuZGVmaW5lZCwgNCkgKyBcIlxcblwiKTtcbiAgICAgICAgd3JpdHRlbi5wdXNoKHN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBXaGF0ZXZlciB0aGUgcmVwbyBoYWQgYW5kIHRoZSBjYWxsZXIgZGlkIG5vdCBuYW1lIGlzIG5vIGxvbmdlciB0cnVzdGVkLlxuICAgIGZvciAobGV0IG1hY2hpbmVJZCBvZiBleGlzdGluZy5rZXlzKCkpIHtcbiAgICAgICAgaWYgKCFtYWNoaW5lcy5zb21lKG1hY2hpbmUgPT4gbWFjaGluZS5tYWNoaW5lSWQgPT09IG1hY2hpbmVJZCkpIHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnJtKG1hY2hpbmVGaWxlUGF0aChyZXBvUGF0aCwgbWFjaGluZUlkKSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd3JpdHRlbjtcbn1cblxuZnVuY3Rpb24gcGFyc2VNYWNoaW5lRmlsZShuYW1lOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpOiBNYWNoaW5lU3RhdGUgfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IHBhcnNlZC5tYWNoaW5lSWQgfHwgbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiXCIpO1xuICAgICAgICByZXR1cm4geyBtYWNoaW5lSWQsIGlwczogcGFyc2VkLmlwcyB8fCBbXSwgYWRkZWRBdDogcGFyc2VkLmFkZGVkQXQgfHwgXCJcIiB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIHVucmVhZGFibGUgbWFjaGluZSBmaWxlICR7bmFtZX0uICR7ZX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbi8qKiBFdmVyeSBtYWNoaW5lIGZpbGUgb24gZGlzay4gRm9yIGVkaXRpbmcgdGhlIHJlcG8sIG5vdCBmb3IgZGVjaWRpbmcgdHJ1c3QgLSB0cnVzdCByZWFkcyB0aGVcbiAgICBzaWduZWQgZmlsZXMgdGhyb3VnaCByZWFkVHJ1c3RlZE1hY2hpbmVzLiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZE1hY2hpbmVzKHJlcG9QYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgbWFjaGluZXMgPSBuZXcgTWFwPHN0cmluZywgTWFjaGluZVN0YXRlPigpO1xuICAgIGxldCBkaXJlY3RvcnkgPSBwYXRoLmpvaW4ocmVwb1BhdGgsIE1BQ0hJTkVTX0RJUik7XG4gICAgbGV0IG5hbWVzID0gYXdhaXQgZnMucmVhZGRpcihkaXJlY3RvcnkpLmNhdGNoKCgpID0+IFtdIGFzIHN0cmluZ1tdKTtcbiAgICBmb3IgKGxldCBuYW1lIG9mIG5hbWVzLnNvcnQoKSkge1xuICAgICAgICBpZiAoIW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hY2hpbmUgPSBwYXJzZU1hY2hpbmVGaWxlKG5hbWUsIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihkaXJlY3RvcnksIG5hbWUpLCBcInV0ZjhcIikuY2F0Y2goKCkgPT4gXCJcIikpO1xuICAgICAgICBpZiAobWFjaGluZSkge1xuICAgICAgICAgICAgbWFjaGluZXMuc2V0KG1hY2hpbmUubWFjaGluZUlkLCBtYWNoaW5lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZXM7XG59XG5cbmxldCBsYXN0UmV2b2tlU3luYyA9IDA7XG5cbi8qKiBQdWxscyB0aGUga2V5cyByZXBvIGFuZCBpdHMgcmV2b2tlIHJlcG8sIGF0IG1vc3Qgb25jZSBhIFJFVk9LRV9TWU5DX0lOVEVSVkFMLCBiZWNhdXNlIHRoaXMgaXNcbiAgICBhc2tlZCBwZXIgcmVxdWVzdC4gQm90aCwgc2luY2UgZWl0aGVyIGNoYW5naW5nIGNoYW5nZXMgdGhlIGFuc3dlcjogdGhlIGtleXMgcmVwbyBjYXJyaWVzIHRoZVxuICAgIG1hY2hpbmVzIGFuZCB1bnJldm9rZXMsIHRoZSByZXZva2UgcmVwbyBjYXJyaWVzIHRoZSByZXZvY2F0aW9ucy4gQSBzeW5jIHRoYXQgZmFpbHMgbGVhdmVzIHRoZVxuICAgIGNoZWNrb3V0cyB3ZSBhbHJlYWR5IGhhdmUuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jUmV2b2NhdGlvbnMoc291cmNlVVJMOiBzdHJpbmcpIHtcbiAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RSZXZva2VTeW5jIDwgUkVWT0tFX1NZTkNfSU5URVJWQUwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsYXN0UmV2b2tlU3luYyA9IERhdGUubm93KCk7XG4gICAgYXdhaXQgc3luY1JlcG8oc291cmNlVVJMKS5jYXRjaChlID0+IGNvbnNvbGUubG9nKGBDb3VsZCBub3Qgc3luYyAke3NvdXJjZVVSTH0sIHVzaW5nIHRoZSBjaGVja291dCBhbHJlYWR5IGhlcmUuICR7ZX1gKSk7XG4gICAgYXdhaXQgc3luY1JlcG9GaWxlcyhyZXZva2VSZXBvKHNvdXJjZVVSTCkpLmNhdGNoKGUgPT4gY29uc29sZS5sb2coYENvdWxkIG5vdCBzeW5jICR7cmV2b2tlUmVwb1VSTChzb3VyY2VVUkwpfSwgdXNpbmcgdGhlIHJldm9jYXRpb25zIGFscmVhZHkgYWJzb3JiZWQuICR7ZX1gKSk7XG59XG5cbi8qKiBXaGF0IHRvIHJ1biB0byB0cnVzdCBhIG1hY2hpbmUgdGhhdCBoYXMganVzdCBiZWVuIHJlZnVzZWQuXG5cbiAgICBFdmVyeXRoaW5nIGluIGl0IGlzIGFscmVhZHkga25vd24gdG8gd2hvZXZlciBpcyBiZWluZyByZWZ1c2VkOiB0aGVpciBtYWNoaW5lIGlkLCB0aGUgYWRkcmVzcyB3ZVxuICAgIHNhdyB0aGVtIGF0LCBhbmQgdGhlIGRvbWFpbiB0aGV5IGp1c3QgdGFsa2VkIHRvLiBIYW5kaW5nIGl0IGJhY2sgc2F2ZXMgdGhlbSB3b3JraW5nIG91dCB0aGVcbiAgICBwYXJ0cyBvZiBhIGNvbW1hbmQgdGhleSBoYXZlIGV2ZXJ5IHJpZ2h0IHRvIGtub3cuIFJ1bm5pbmcgaXQgc3RpbGwgdGFrZXMgdGhlIGhhcmR3YXJlIGtleSBvblxuICAgIHRoZSBtYWNoaW5lIHRoYXQgb3ducyB0aGUgcmVwbywgc28gdGVsbGluZyB0aGVtIGNvc3RzIG5vdGhpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTWFjaGluZUNvbW1hbmQoY29uZmlnOiB7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nOyBkb21haW4/OiBzdHJpbmcgfSkge1xuICAgIGxldCB7IG1hY2hpbmVJZCwgaXAsIGRvbWFpbiB9ID0gY29uZmlnO1xuICAgIHJldHVybiBgVG8gdHJ1c3QgaXQsIHJ1bjogeWFybiBhZGRtYWNoaW5lICR7ZG9tYWluIHx8IFwiPGRvbWFpbj5cIn0gJHttYWNoaW5lSWR9ICR7aXB9IGdpdGA7XG59XG5cbi8qKiBTZW5kcyB0aGUgb25lIG5vdGlmaWNhdGlvbiB0aGlzIGZpbGUgaXMgYWxsb3dlZCB0byBzZW5kLCB3aGVuIGl0IGNhbi5cblxuICAgIFRoZSBkYWVtb24gY29uZmlndXJlcyBub3RpZmljYXRpb25zIG9uIHN0YXJ0dXAgYW5kIHdvdWxkIHNpbXBseSBzZW5kLiBUaGlzIGNhbiBhbHNvIHJ1biBpbiBzb21lXG4gICAgb3RoZXIgcHJvY2Vzcywgd2hpY2ggaGFzIG5vdCwgc28gdGhlIHdlYmhvb2sgaXMgcGlja2VkIHVwIGhlcmUgaWYgaXQgaXMgcmVhZGFibGUuIEEgbWFjaGluZVxuICAgIHdpdGggbm8gd2ViaG9vayBzZXQgdXAgc3RpbGwgcmVjb3JkcyB0aGUgcmV2b2NhdGlvbiAtIGJlaW5nIHVuYWJsZSB0byB0ZWxsIGFueW9uZSBpcyBub3QgYVxuICAgIHJlYXNvbiB0byBrZWVwIGFjY2VwdGluZyBhIG1hY2hpbmUgdGhhdCBpcyBiZWluZyBtaXN1c2VkLiAqL1xuYXN5bmMgZnVuY3Rpb24gbm90aWZ5QmVzdEVmZm9ydChoZWFkbGluZTogc3RyaW5nLCBib2R5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAoIWFyZURpc2NvcmROb3RpZmljYXRpb25zQ29uZmlndXJlZCgpKSB7XG4gICAgICAgICAgICAvLyBSZWFkIGZpcnN0OiBjb25maWd1cmVEaXNjb3JkTm90aWZpY2F0aW9ucyBleGl0cyB0aGUgcHJvY2VzcyB3aGVuIHRoZSBmaWxlIGlzIG1pc3NpbmcsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyByaWdodCBmb3IgdGhlIGRhZW1vbiBhdCBzdGFydHVwIGFuZCB3cm9uZyBmb3IgYSBsaWJyYXJ5IGNhbGwuXG4gICAgICAgICAgICBhd2FpdCBmcy5yZWFkRmlsZShERUZBVUxUX1dFQkhPT0tfRklMRV9QQVRILCBcInV0ZjhcIik7XG4gICAgICAgICAgICBhd2FpdCBjb25maWd1cmVEaXNjb3JkTm90aWZpY2F0aW9ucyh7IGZpbGVQYXRoOiBERUZBVUxUX1dFQkhPT0tfRklMRV9QQVRIIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5vdGlmeShoZWFkbGluZSwgYm9keSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IHNlbmQgYSBub3RpZmljYXRpb24gYWJvdXQgdGhpcywgaXQgaXMgb25seSBpbiB0aGUgbG9nLiAke2V9YCk7XG4gICAgfVxufVxuXG4vKiogUmVjb3JkcyB0aGF0IGEgbWFjaGluZSB3ZSBhY2NlcHQgdGFsa2VkIHRvIHVzIGZyb20gYW4gYWRkcmVzcyBpdCBpcyBub3QgYWxsb3dlZCBmcm9tLiBPbmUgcGVyXG4gICAgbWFjaGluZSBhbmQgYWRkcmVzcywgc28gYSBzZWNvbmQgYWRkcmVzcyBpcyBhIHNlY29uZCByZXZvY2F0aW9uIGFuZCBhbiB1bnJldm9rZSBvZiB0aGUgZmlyc3RcbiAgICBkb2VzIG5vdCBjb3ZlciBpdC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlY29yZE1hY2hpbmVSZXZvY2F0aW9uKGNvbmZpZzoge1xuICAgIHNvdXJjZVVSTDogc3RyaW5nO1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgaG9zdExhYmVsOiBzdHJpbmc7XG59KSB7XG4gICAgbGV0IHsgc291cmNlVVJMLCBtYWNoaW5lSWQsIGlwLCBob3N0TGFiZWwgfSA9IGNvbmZpZztcbiAgICBsZXQgcmVwb1BhdGggPSByZXZva2VSZXBvUGF0aChzb3VyY2VVUkwpO1xuICAgIGxldCBrZXlQYXRoID0gYXdhaXQgZW5zdXJlUmV2b2tlS2V5KHNvdXJjZVVSTCk7XG4gICAgbGV0IHJldm9jYXRpb25JZCA9IG5ld1Jldm9jYXRpb25JZChtYWNoaW5lSWQpO1xuICAgIGxldCBkaXJlY3RvcnkgPSBwYXRoLmpvaW4ocmVwb1BhdGgsIFJFVk9DQVRJT05TX0RJUik7XG4gICAgYXdhaXQgZnMubWtkaXIoZGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGRpcmVjdG9yeSwgYCR7cmV2b2NhdGlvbklkfS5qc29uYCksIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcmV2b2NhdGlvbklkLFxuICAgICAgICBtYWNoaW5lSWQsXG4gICAgICAgIGlwLFxuICAgICAgICByZXZva2VkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgcmV2b2tlZEJ5OiBob3N0TGFiZWwsXG4gICAgICAgIHJlYXNvbjogUkVWT0NBVElPTl9SRUFTT04sXG4gICAgfSwgdW5kZWZpbmVkLCA0KSArIFwiXFxuXCIpO1xuXG4gICAgYXdhaXQgcnVuR2l0KHsgYXJnczogW1wiYWRkXCIsIFwiLUFcIl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGggfSk7XG4gICAgYXdhaXQgcnVuR2l0KHtcbiAgICAgICAgYXJnczogW1wiLWNcIiwgXCJ1c2VyLmVtYWlsPXBvcnRzZWN1cmVAbG9jYWxob3N0XCIsIFwiLWNcIiwgXCJ1c2VyLm5hbWU9cG9ydHNlY3VyZVwiLCBcImNvbW1pdFwiLCBcIi1tXCIsIGByZXZva2UgJHtyZXZvY2F0aW9uSWR9YF0sXG4gICAgICAgIGN3ZDogcmVwb1BhdGgsIGtleVBhdGgsXG4gICAgfSk7XG4gICAgbGV0IHB1c2ggPSBhd2FpdCBydW5HaXQoeyBhcmdzOiBbXCJwdXNoXCIsIFwib3JpZ2luXCIsIFwiSEVBRFwiXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCwgYWxsb3dGYWlsdXJlOiB0cnVlIH0pO1xuICAgIGlmIChwdXNoLnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAvLyBBbm90aGVyIG1hY2hpbmUgbW9zdCBsaWtlbHkgcmVjb3JkZWQgdGhlIHNhbWUgdGhpbmcgZmlyc3QsIGFuZCB0aGUgbmV4dCByZWFkIHBpY2tzIGl0IHVwLlxuICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IHB1c2ggdGhlIHJldm9jYXRpb24gb2YgJHttYWNoaW5lSWR9IGZyb20gJHtpcH0uICR7KHB1c2guc3Rkb3V0ICsgcHVzaC5zdGRlcnIpLnRyaW0oKX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBub3RlUmV2b2NhdGlvbihyZXZvY2F0aW9uSWQsIG1hY2hpbmVJZCwgaXApO1xuICAgIGNvbnNvbGUubG9nKGBSZXZva2VkICR7bWFjaGluZUlkfSBmcm9tICR7aXB9LCAke3Jldm9jYXRpb25JZH1gKTtcblxuICAgIC8vIFNhaWQgYnkgd2hvZXZlciB3cm90ZSB0aGUgcmV2b2NhdGlvbiwgb25jZSwgdGhlIHNhbWUgYXMgZm9yIGFuIHNzaCBrZXkuIE1hY2hpbmVzIHRoYXQgb25seVxuICAgIC8vIHJlYWQgaXQgbGF0ZXIgc2F5IG5vdGhpbmcsIG9yIG9uZSBldmVudCB3b3VsZCBiZSByZXBvcnRlZCBieSBldmVyeSBtYWNoaW5lIHRoYXQgc2F3IGl0LlxuICAgIGF3YWl0IG5vdGlmeUJlc3RFZmZvcnQoXG4gICAgICAgIGBTVVNQSUNJT1VTIElQICR7aXB9IEZST1pFIE1BQ0hJTkUgJHttYWNoaW5lSWR9YCxcbiAgICAgICAgYEEgbWFjaGluZSB3ZSB0cnVzdCB0YWxrZWQgdG8gdXMgZnJvbSAke2lwfSwgd2hpY2ggaXMgbm90IGFuIGFkZHJlc3MgaXQgaXMgYWxsb3dlZCB0byB0YWxrYFxuICAgICAgICArIGAgZnJvbS4gSXQgcHJvdmVkIGl0IGhvbGRzIHRoYXQgbWFjaGluZSdzIGtleSwgc28gZWl0aGVyIHNvbWVvbmUgZWxzZSBoYXMgYSBjb3B5IG9mIGl0LGBcbiAgICAgICAgKyBgIG9yIHRoYXQgbWFjaGluZSdzIGFkZHJlc3MgY2hhbmdlZC5gXG4gICAgICAgICsgYFxcblxcbkl0IGlzIGZyb3plbiBldmVyeXdoZXJlIG5vdywgYW5kIG5vdGhpbmcgYWNjZXB0cyBpdC5gXG4gICAgICAgICsgYFxcblxcbklmIHRoaXMgd2FzIGFuIGF0dGFjaywgcmVtb3ZlIFxcYG1hY2hpbmVzLyR7bWFjaGluZUlkfS5qc29uXFxgIGZyb20gXFxgJHtzb3VyY2VVUkx9XFxgIG5vdy5gXG4gICAgICAgICsgYFxcbklmIGl0IHdhcyBsZWdpdGltYXRlLCBydW4gXFxgeWFybiB1bnJldm9rZSBnaXRcXGAgaW4gdGhhdCByZXBvLiBJdCBhbGxvd3MgJHtpcH0gZm9yIHRoYXRgXG4gICAgICAgICsgYCBtYWNoaW5lLCBhbmQgdGFrZXMgZWZmZWN0IGFzIGVhY2ggbWFjaGluZSBwaWNrcyBpdCB1cC5gXG4gICAgICAgICsgYFxcblxcbm1hY2hpbmU6IFxcYCR7bWFjaGluZUlkfVxcYGBcbiAgICAgICAgKyBgXFxuZnJvemVuIGJ5OiBcXGAke2hvc3RMYWJlbH1cXGBgXG4gICAgKTtcbn1cblxuLyoqIFdoZXRoZXIgd2Ugd2lsbCB0YWxrIHRvIHRoaXMgbWFjaGluZSwgY29taW5nIGZyb20gdGhpcyBhZGRyZXNzLlxuXG4gICAgQm90aCBoYWx2ZXMgYXJlIHJlcXVpcmVkIGFuZCBuZWl0aGVyIGlzIGEgZ3Vlc3M6IHRoZSBjYWxsZXIga25vd3MgdGhlIG1hY2hpbmUgaWQgYmVjYXVzZSB0aGVcbiAgICBjb25uZWN0aW9uIHByb3ZlZCBpdCwgYW5kIGtub3dzIHRoZSBhZGRyZXNzIGJlY2F1c2UgdGhlIHBhY2tldHMgY2FtZSBmcm9tIHRoZXJlLiBBIG1hY2hpbmUgd2VcbiAgICBkbyBub3QgbGlzdCBpcyBzaW1wbHkgbm90IGFjY2VwdGVkLiBBIG1hY2hpbmUgd2UgZG8gbGlzdCwgYXJyaXZpbmcgZnJvbSBhbiBhZGRyZXNzIGl0IGRvZXMgbm90XG4gICAgaGF2ZSwgaXMgdHJlYXRlZCBhcyB0aGUgc2FtZSBraW5kIG9mIGV2ZW50IGFzIGEgc3RvbGVuIHNzaCBrZXkgLSBpdCBpcyByZXZva2VkIGV2ZXJ5d2hlcmUsIGFuZFxuICAgIHN0YXlzIHJldm9rZWQgdW50aWwgYW4gdW5yZXZva2UgYWxsb3dzIHRoYXQgbWFjaGluZSBmcm9tIHRoYXQgYWRkcmVzcy5cblxuICAgIFNheXMgd2h5IHdoZW4gdGhlIGFuc3dlciBpcyBubywgYmVjYXVzZSB0aGUgdGhyZWUgd2F5cyB0byBiZSByZWZ1c2VkIGFyZSBlbnRpcmVseSBkaWZmZXJlbnRcbiAgICB0aGluZ3MgdG8gYSBwZXJzb24gcmVhZGluZyBpdDogbmV2ZXIgdHJ1c3RlZCBhdCBhbGwsIHRydXN0ZWQgYnV0IGZyb3plbiwgb3IgdHJ1c3RlZCBhbmQgdGFsa2luZ1xuICAgIGZyb20gc29tZXdoZXJlIGl0IHNob3VsZCBub3QgYmUuXG5cbiAgICBUaHJvd3Mgd2hlbiB0aGUgcmVwbyBpdHNlbGYgY2Fubm90IGJlIHJlYWQgb3IgaXMgbm90IHNpZ25lZCwgcmF0aGVyIHRoYW4gYW5zd2VyaW5nIGZhbHNlOiB0aGF0XG4gICAgaXMgYSBicm9rZW4gaW5zdGFsbGF0aW9uLCBub3QgYSByZWplY3RlZCBtYWNoaW5lLCBhbmQgdGhlIHR3byBkZXNlcnZlIGRpZmZlcmVudCBoYW5kbGluZy4gKi9cbmV4cG9ydCB0eXBlIE1hY2hpbmVWZXJkaWN0ID0geyBhY2NlcHRlZDogYm9vbGVhbjsgcmVhc29uOiBzdHJpbmcgfTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzTWFjaGluZUFjY2VwdGVkKGNvbmZpZzoge1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgLy8gVXNlZCBmb3IgbG9jYWwgbG9vcGJhY2sgYWNjZXB0YW5jZSwgYW5kIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgZG9tYWluPzogc3RyaW5nO1xufSk6IFByb21pc2U8TWFjaGluZVZlcmRpY3Q+IHtcbiAgICBsZXQgeyBtYWNoaW5lSWQsIGlwLCBkb21haW4gfSA9IGNvbmZpZztcbiAgICBpZiAoIW1hY2hpbmVJZCB8fCAhaXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIG1hY2hpbmVJZCBhbmQgYW4gaXAsIHdhcyAke0pTT04uc3RyaW5naWZ5KG1hY2hpbmVJZCl9IGFuZCAke0pTT04uc3RyaW5naWZ5KGlwKX1gKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgd2hvbGUgY2hlY2ssIHBsdXMgd2hldGhlciBpdCBmcm96ZSB0aGUgbWFjaGluZS4gQSByZWplY3Rpb24gdGhhdCBmcm96ZSBpdCBpcyBmaW5hbCwgc29cbiAgICAvLyB0aGVyZSBpcyBub3RoaW5nIHRvIGdhaW4gZnJvbSBsb29raW5nIGFnYWluLiBBbnkgb3RoZXIgcmVqZWN0aW9uIG1pZ2h0IGp1c3QgYmUgYSBzdGFsZSB2aWV3IC1cbiAgICAvLyBhIG1hY2hpbmUgYWRkZWQgc2Vjb25kcyBhZ28gdGhhdCBvdXIgY2FjaGVkIGxpc3QgaGFzIG5vdCBjYXVnaHQgdXAgdG8gLSBzbyBpdCBpcyB3b3J0aCBvbmVcbiAgICAvLyBmcmVzaCBsb29rLCB3aGljaCBpcyB3aGF0IHRoZSByZXRyeSBiZWxvdyBkb2VzLlxuICAgIGxldCBldmFsdWF0ZSA9IGFzeW5jICgpOiBQcm9taXNlPHsgdmVyZGljdDogTWFjaGluZVZlcmRpY3Q7IGZyb3plOiBib29sZWFuIH0+ID0+IHtcbiAgICAgICAgaWYgKExPT1BCQUNLLmluY2x1ZGVzKGlwKSAmJiAhIWRvbWFpbiAmJiBtYWNoaW5lSWQgPT09IGdldE93bk1hY2hpbmVJZChkb21haW4pKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2ZXJkaWN0OiB7IGFjY2VwdGVkOiB0cnVlLCByZWFzb246IFwiXCIgfSwgZnJvemU6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHsgc291cmNlVVJMIH0gPSBhd2FpdCBrZXlzUmVwbygpO1xuICAgICAgICBhd2FpdCBzeW5jUmV2b2NhdGlvbnMoc291cmNlVVJMKTtcbiAgICAgICAgLy8gVGhlIGxpc3QgaGFzIHJldm9jYXRpb25zIGFscmVhZHkgYXBwbGllZCAtIHJlYWRTaWduZWRSZXBvIGRyb3BzIGZyb3plbiBtYWNoaW5lcyAtIHNvIGFcbiAgICAgICAgLy8gbWFjaGluZSBpbiBpdCBpcyB0cnVzdGVkLCBhbmQgYSBtYWNoaW5lIG1pc3NpbmcgZnJvbSBpdCBpcyBlaXRoZXIgdW5rbm93biBvciBmcm96ZW4uXG4gICAgICAgIGxldCBtYWNoaW5lID0gKGF3YWl0IGdldFRydXN0ZWRNYWNoaW5lcygpKS5maW5kKGVudHJ5ID0+IGVudHJ5Lm1hY2hpbmVJZCA9PT0gbWFjaGluZUlkKTtcbiAgICAgICAgaWYgKCFtYWNoaW5lKSB7XG4gICAgICAgICAgICBpZiAoaXNJZGVudGl0eUZyb3plbihtYWNoaW5lSWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmVyZGljdDogeyBhY2NlcHRlZDogZmFsc2UsIHJlYXNvbjogYHRoYXQgbWFjaGluZSBpcyBmcm96ZW4sIGl0IHdhcyB1c2VkIGZyb20gYW4gYWRkcmVzcyBpdCBpcyBub3QgYWxsb3dlZCBmcm9tYCB9LCBmcm96ZTogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IGZhbHNlLCByZWFzb246IGB0aGF0IG1hY2hpbmUgaXMgbm90IHRydXN0ZWQuICR7YWRkTWFjaGluZUNvbW1hbmQoeyBtYWNoaW5lSWQsIGlwLCBkb21haW4gfSl9YCB9LCBmcm96ZTogZmFsc2UgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYWNoaW5lLmlwcy5pbmNsdWRlcyhpcCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IHRydWUsIHJlYXNvbjogXCJcIiB9LCBmcm96ZTogZmFsc2UgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpc3RlZCwgYnV0IHRhbGtpbmcgdG8gdXMgZnJvbSBzb21ld2hlcmUgaXQgc2hvdWxkIG5vdCBiZS4gUmVjb3JkZWQgb25jZSBmb3IgdGhpcyBtYWNoaW5lXG4gICAgICAgIC8vIGFuZCBhZGRyZXNzLCBzbyBiZWluZyB0YWxrZWQgdG8gcmVwZWF0ZWRseSBkb2VzIG5vdCB3cml0ZSByZXBlYXRlZGx5LlxuICAgICAgICBpZiAoIWlzUGFpclJldm9rZWQobWFjaGluZUlkLCBpcCkgJiYgIWlzUGFpclVucmV2b2tlZChtYWNoaW5lSWQsIGlwKSkge1xuICAgICAgICAgICAgYXdhaXQgcmVjb3JkTWFjaGluZVJldm9jYXRpb24oeyBzb3VyY2VVUkwsIG1hY2hpbmVJZCwgaXAsIGhvc3RMYWJlbDogb3MuaG9zdG5hbWUoKSB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IGZhbHNlLCByZWFzb246IGB0aGF0IG1hY2hpbmUgaXMgbm90IGFsbG93ZWQgZnJvbSAke2lwfSwgc28gaXQgaXMgbm93IGZyb3plbiBldmVyeXdoZXJlYCB9LCBmcm96ZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IGZhbHNlLCByZWFzb246IGB0aGF0IG1hY2hpbmUgaXMgbm90IGFsbG93ZWQgZnJvbSAke2lwfWAgfSwgZnJvemU6IGZhbHNlIH07XG4gICAgfTtcblxuICAgIGxldCB7IHZlcmRpY3QsIGZyb3plIH0gPSBhd2FpdCBldmFsdWF0ZSgpO1xuICAgIC8vIEFuIGFjY2VwdCwgb3IgYSByZWplY3Rpb24gdGhhdCBqdXN0IGZyb3plIHRoZSBtYWNoaW5lLCBpcyB0aGUgZmluYWwgd29yZC4gQW55IG90aGVyIHJlamVjdGlvblxuICAgIC8vIG1pZ2h0IGp1c3QgYmUgYSBzdGFsZSBsaXN0IC0gYSBtYWNoaW5lIGFkZGVkIHNlY29uZHMgYWdvIHdlIGhhdmUgbm90IGNhdWdodCB1cCB0byAtIHNvIGl0IGlzXG4gICAgLy8gd29ydGggb25lIGZyZXNoIGxvb2suXG4gICAgaWYgKHZlcmRpY3QuYWNjZXB0ZWQgfHwgZnJvemUpIHtcbiAgICAgICAgcmV0dXJuIHZlcmRpY3Q7XG4gICAgfVxuICAgIC8vIFJlLXJlYWQgdGhlIGxpc3QgYXQgbW9zdCBvbmNlIGEgbWludXRlLCBzbyBhIGJ1cnN0IG9mIGJhZCBjYWxsZXJzIGNhbm5vdCBtYWtlIHVzIHJlLXJlYWQgb25cbiAgICAvLyBldmVyeSBvbmUgb2YgdGhlbS4gRm9yY2UgdGhlIGNoZWNrb3V0IGJhY2sgdG8gdGhlIHJlbW90ZSBmaXJzdCwgc28gYSBtYWNoaW5lIGFkZGVkIGFuZCBzaWduZWRcbiAgICAvLyBzZWNvbmRzIGFnbyBpcyBwaWNrZWQgdXAgZXZlbiBpZiB0aGUgY2hlY2tvdXQgd2FzIGxlZnQgZGlydHksIHRoZW4gdGFrZSB0aGUgZnJlc2ggbG9vayBhc1xuICAgIC8vIGZpbmFsLlxuICAgIGlmIChEYXRlLm5vdygpIC0gbGFzdE1hY2hpbmVzSW52YWxpZGF0aW9uID4gTUFDSElORVNfSU5WQUxJREFUSU9OX0lOVEVSVkFMKSB7XG4gICAgICAgIGxhc3RNYWNoaW5lc0ludmFsaWRhdGlvbiA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCB7IHNvdXJjZVVSTCB9ID0gYXdhaXQga2V5c1JlcG8oKTtcbiAgICAgICAgYXdhaXQgc3luY1JlcG8oc291cmNlVVJMLCB7IGZvcmNlVXBkYXRlOiB0cnVlIH0pLmNhdGNoKGUgPT4gY29uc29sZS5sb2coYENvdWxkIG5vdCBmb3JjZSB1cGRhdGUgJHtzb3VyY2VVUkx9LiAke2V9YCkpO1xuICAgICAgICB0cnVzdGVkTWFjaGluZXMucmVzZXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCBldmFsdWF0ZSgpKS52ZXJkaWN0O1xufVxuIl19
|
|
366
|
-
/* _JS_SOURCE_HASH = "
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYWNoaW5lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBNkI7QUFDN0IsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4Qix5REFBNkQ7QUFDN0Qsa0VBQStFO0FBQy9FLG9FQUFzRTtBQUN0RSxzREFBZ0U7QUFDaEUsa0VBQXFFO0FBQ3JFLDBEQUFrSTtBQUNsSSxpRUFBK0U7QUFDL0UsNERBQXlEO0FBQ3pELHNEQUF1STtBQUN2SSxrREFBaUk7QUFDakksb0RBQWlGO0FBQ2pGLHlEQUFtRDtBQUNuRCwyREFBK0Q7QUFHL0QsbUdBQW1HO0FBQ25HLGlHQUFpRztBQUNqRyxnRUFBZ0U7QUFDbkQsUUFBQSxZQUFZLEdBQUcsVUFBVSxDQUFDO0FBQ3ZDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLGlCQUFpQixHQUFHLDhDQUE4QyxDQUFDO0FBQ3pFLGdHQUFnRztBQUNoRyxtQ0FBbUM7QUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLDZGQUE2RjtBQUM3RixpR0FBaUc7QUFDakcsa0VBQWtFO0FBQ2xFLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM1QyxnR0FBZ0c7QUFDaEcsaUdBQWlHO0FBQ2pHLDBEQUEwRDtBQUMxRCxNQUFNLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDMUQsZ0dBQWdHO0FBQ2hHLGdHQUFnRztBQUNoRyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFTakMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxRQUFnQjtJQUN0QyxJQUFJLENBQUM7UUFDRCxN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LDhDQThEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyByZXNvbHZlS2V5c1JlcG8gfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMva2V5c1JlcG9cIjtcbmltcG9ydCB7IHJldm9rZVJlcG8sIHN5bmNSZXBvRmlsZXMgfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMvZGFlbW9uL3JlcG9GaWxlc1wiO1xuaW1wb3J0IHsgbmV3UmV2b2NhdGlvbklkIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9yZXZvY2F0aW9uXCI7XG5pbXBvcnQgeyBydW5HaXQsIHN5bmNSZXBvIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9naXRcIjtcbmltcG9ydCB7IGVuc3VyZVJldm9rZUtleSB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5cy9kYWVtb24vcmVwb0ZpbGVzXCI7XG5pbXBvcnQgeyBpc0lkZW50aXR5RnJvemVuLCBpc1BhaXJSZXZva2VkLCBpc1BhaXJVbnJldm9rZWQsIG5vdGVSZXZvY2F0aW9uLCByZWFkU2lnbmVkUmVwbyB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5cy9kYWVtb24vdHJ1c3RcIjtcbmltcG9ydCB7IHJldm9rZVJlcG9QYXRoLCByZXZva2VSZXBvVVJMIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL3Jldm9rZVNvdXJjZVwiO1xuaW1wb3J0IHsgbm90aWZ5IH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9ub3RpZnlcIjtcbmltcG9ydCB7IGFyZURpc2NvcmROb3RpZmljYXRpb25zQ29uZmlndXJlZCwgY29uZmlndXJlRGlzY29yZE5vdGlmaWNhdGlvbnMsIERFRkFVTFRfV0VCSE9PS19GSUxFX1BBVEggfSBmcm9tIFwiLi4vbm90aWZpY2F0aW9ucy9kaXNjb3JkXCI7XG5pbXBvcnQgeyBERVZfZ2V0SWRlbnRpdHlGaWxlUGF0aCwgZ2VuZXJhdGVDQSwgZ2V0TWFjaGluZUlkLCBnZXRPd25NYWNoaW5lSWQsIElkZW50aXR5U3RvcmFnZVR5cGUgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgZGVzY3JpYmVIb3N0LCBydW5PdmVyU1NILCB3cml0ZVJlbW90ZUZpbGUgfSBmcm9tIFwiLi4vaGVscGVycy9yZW1vdGVTU0hcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBydW5JbmZpbml0ZVBvbGwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgc3Bhd25Qcm9taXNlIH0gZnJvbSBcIi4uL2hlbHBlcnMvc3Bhd25cIjtcblxuLy8gV2hpY2ggbWFjaGluZXMgdGhpcyBzeXN0ZW0gdGFsa3MgdG8sIGtlcHQgaW4gdGhlIHNhbWUgcmVwbyBhcyB0aGUgc3NoIGtleXMuIFRoYXQgcmVwbyBpcyBhbHJlYWR5XG4vLyBzaWduZWQsIGFscmVhZHkgZGlzdHJpYnV0ZWQgdG8gZXZlcnkgbWFjaGluZSwgYW5kIGFscmVhZHkgaGFzIHNvbWV3aGVyZSB0byByZWNvcmQgYSByZWplY3Rpb24sXG4vLyBzbyBhIHNlY29uZCBvbmUgd291bGQgb25seSBiZSBhIHNlY29uZCB0aGluZyB0byBrZWVwIGluIHN0ZXAuXG5leHBvcnQgY29uc3QgTUFDSElORVNfRElSID0gXCJtYWNoaW5lc1wiO1xuY29uc3QgUkVWT0NBVElPTlNfRElSID0gXCJyZXZvY2F0aW9uc1wiO1xuY29uc3QgUkVWT0NBVElPTl9SRUFTT04gPSBcImEgbWFjaGluZSB0YWxrZWQgdG8gdXMgZnJvbSBhbiB1bmFwcHJvdmVkIElQXCI7XG4vLyBUaGUgcmV2b2tlIHJlcG8gaXMgcHVsbGVkIGF0IG1vc3QgdGhpcyBvZnRlbi4gQSBjaGVjayBoYXBwZW5zIHBlciByZXF1ZXN0LCBhbmQgYSByZXF1ZXN0IG11c3Rcbi8vIG5vdCBjb3N0IGEgcm91bmQgdHJpcCB0byBnaXRodWIuXG5jb25zdCBSRVZPS0VfU1lOQ19JTlRFUlZBTCA9IDYwICogMTAwMDtcbi8vIEFuZCB0aGUgbWFjaGluZSBsaXN0IGlzIHJlLXJlYWQgZnJvbSB0aGUgY2hlY2tvdXQgb24gdGhpcyBpbnRlcnZhbCwgaW4gdGhlIGJhY2tncm91bmQuIFRoZVxuLy8gY2hlY2tvdXQgaXRzZWxmIG9ubHkgbW92ZXMgd2hlbiB0aGUgZGFlbW9uIHB1bGxzIGl0LCB3aGljaCBpcyBvbiB0aGUgc2FtZSBzb3J0IG9mIGludGVydmFsLCBzb1xuLy8gcmVhZGluZyBtb3JlIG9mdGVuIHRoYW4gdGhpcyB3b3VsZCBvbmx5IHJlLXJlYWQgdGhlIHNhbWUgYnl0ZXMuXG5jb25zdCBNQUNISU5FU19SRUZSRVNIX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuLy8gSG93IGxvbmcgYSBmYWlsdXJlIHRvIGZpbmQgdGhlIGtleXMgcmVwbyBpcyByZW1lbWJlcmVkLiBBIGxvbmcgbGl2ZWQgcHJvY2VzcyBtYXkgc3RhcnQgYmVmb3JlXG4vLyB0aGUgbWFjaGluZSBpcyBzZXQgdXAsIGFuZCBzaG91bGQgcGljayBpdCB1cCBvbmNlIGl0IGlzLCB3aXRob3V0IGJlaW5nIHJlc3RhcnRlZCAtIGJ1dCBpdCBtdXN0XG4vLyBub3QgcGF5IGZvciByZXNvbHZpbmcgdGhlIHJlcG8gb24gZXZlcnkgcmVxdWVzdCBlaXRoZXIuXG5jb25zdCBSRVBPX1JFVFJZX0RFTEFZID0gMTUgKiAxMDAwO1xuY29uc3QgTE9PUEJBQ0sgPSBbXCIxMjcuMC4wLjFcIiwgXCI6OjFcIiwgXCI6OmZmZmY6MTI3LjAuMC4xXCJdO1xuLy8gVGhlIHRydXN0ZWQgbWFjaGluZSBsaXN0IGlzIHJlLXJlYWQgYXQgbW9zdCB0aGlzIG9mdGVuIHdoZW4gYSBjaGVjayByZWplY3RzLCBzbyBhIGNhbGxlciB0aGF0XG4vLyB3YXMganVzdCBhZGRlZCBpcyBwaWNrZWQgdXAgcXVpY2tseSB3aXRob3V0IGxldHRpbmcgYSBmbG9vZCBvZiByZWplY3Rpb25zIHJlLXJlYWQgZXZlcnkgdGltZS5cbmNvbnN0IE1BQ0hJTkVTX0lOVkFMSURBVElPTl9JTlRFUlZBTCA9IDYwICogMTAwMDtcbmxldCBsYXN0TWFjaGluZXNJbnZhbGlkYXRpb24gPSAwO1xuXG4vKiogT25lIG1hY2hpbmUgd2UgYXJlIHdpbGxpbmcgdG8gdGFsayB0bywgYW5kIHRoZSBhZGRyZXNzZXMgaXQgbWF5IHRhbGsgdG8gdXMgZnJvbS4gKi9cbmV4cG9ydCB0eXBlIE1hY2hpbmVTdGF0ZSA9IHtcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcHM6IHN0cmluZ1tdO1xuICAgIGFkZGVkQXQ6IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGhFeGlzdHMoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFjaGluZUZpbGVQYXRoKHJlcG9QYXRoOiBzdHJpbmcsIG1hY2hpbmVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbihyZXBvUGF0aCwgTUFDSElORVNfRElSLCBgJHttYWNoaW5lSWR9Lmpzb25gKTtcbn1cblxuLyoqIFRoaXMgbWFjaGluZSdzIGtleXMgcmVwbywgd29ya2VkIG91dCBvbmNlIGFuZCB0aGVuIHJlbWVtYmVyZWQuXG5cbiAgICBBIGZhaWx1cmUgaXMgcmVtZW1iZXJlZCB0b28sIGJ1dCBvbmx5IGJyaWVmbHk6IGEgc2VydmVyIG1heSB3ZWxsIHN0YXJ0IGJlZm9yZSB0aGUgbWFjaGluZSBoYXNcbiAgICBiZWVuIHNldCB1cCwgYW5kIHNob3VsZCBzdGFydCB3b3JraW5nIHdoZW4gaXQgaXMsIHJhdGhlciB0aGFuIG5lZWRpbmcgYSByZXN0YXJ0LiAqL1xuZXhwb3J0IGNvbnN0IGtleXNSZXBvID0gbGF6eShhc3luYyAoKSA9PiB7XG4gICAgbGV0IGxvb2t1cCA9IHJlc29sdmVLZXlzUmVwbygpO1xuICAgIGxvb2t1cC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ga2V5c1JlcG8ucmVzZXQoKSwgUkVQT19SRVRSWV9ERUxBWSkudW5yZWYoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXdhaXQgbG9va3VwO1xufSk7XG5cbi8qKiBFdmVyeSBtYWNoaW5lIGEgY2hlY2tvdXQgbGlzdHMuIFdpdGhvdXQgYSByZXBvLCB0aGlzIG1hY2hpbmUncyBvd24uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZXMocmVwb1BhdGg/OiBzdHJpbmcpOiBQcm9taXNlPE1hY2hpbmVTdGF0ZVtdPiB7XG4gICAgcmV0dXJuIFsuLi4oYXdhaXQgcmVhZE1hY2hpbmVzKHJlcG9QYXRoIHx8IChhd2FpdCBrZXlzUmVwbygpKS5yZXBvUGF0aCkpLnZhbHVlcygpXTtcbn1cblxuLyoqIFRoZSBtYWNoaW5lcyB0aGUgc2lnbmVkIGZpbGVzIHZvdWNoIGZvci4gT25seSB0aGUgbWFjaGluZSBmaWxlcyBjb3ZlcmVkIGJ5IHRoZSBzaWduYXR1cmUgYXJlXG4gICAgcmVhZCAtIGFuIHVuc2lnbmVkIG1hY2hpbmVzLyouanNvbiBpcyBub3QgZXZpZGVuY2Ugb2YgYW55dGhpbmcsIHNvIHJlYWRTaWduZWRSZXBvIGhhcyBhbHJlYWR5XG4gICAgbGVmdCBpdCBvdXQuICovXG5hc3luYyBmdW5jdGlvbiByZWFkVHJ1c3RlZE1hY2hpbmVzKCkge1xuICAgIGxldCB7IHJlcG9QYXRoLCBzb3VyY2VVUkwgfSA9IGF3YWl0IGtleXNSZXBvKCk7XG4gICAgbGV0IHsgZmlsZXMgfSA9IGF3YWl0IHJlYWRTaWduZWRSZXBvKHsgcmVwb1BhdGgsIHNvdXJjZVVSTCB9KTtcbiAgICBsZXQgbWFjaGluZXM6IE1hY2hpbmVTdGF0ZVtdID0gW107XG4gICAgZm9yIChsZXQgW2ZpbGVQYXRoLCBjb250ZW50c10gb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWxlUGF0aC5zdGFydHNXaXRoKGAke01BQ0hJTkVTX0RJUn0vYCkgJiYgZmlsZVBhdGguc2xpY2UoTUFDSElORVNfRElSLmxlbmd0aCArIDEpIHx8IFwiXCI7XG4gICAgICAgIGlmICghbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpIHx8IG5hbWUuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFjaGluZSA9IHBhcnNlTWFjaGluZUZpbGUobmFtZSwgY29udGVudHMudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgaWYgKG1hY2hpbmUpIHtcbiAgICAgICAgICAgIG1hY2hpbmVzLnB1c2gobWFjaGluZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVzO1xufVxuXG5jb25zdCB0cnVzdGVkTWFjaGluZXMgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVhZCA9IHJlYWRUcnVzdGVkTWFjaGluZXMoKTtcbiAgICByZWFkLmNhdGNoKCgpID0+IHRydXN0ZWRNYWNoaW5lcy5yZXNldCgpKTtcbiAgICByZXR1cm4gYXdhaXQgcmVhZDtcbn0pO1xuXG5sZXQgcmVmcmVzaGluZyA9IGZhbHNlO1xuXG4vKiogVGhlIG1hY2hpbmVzIHRoaXMgc3lzdGVtIHRydXN0cywgYXMgdGhlIHNpZ25lZCByZXBvIGxpc3RzIHRoZW0uXG5cbiAgICBIZWxkIHJhdGhlciB0aGFuIHJlYWQgcGVyIGNhbGwsIGFuZCByZWZyZXNoZWQgaW4gdGhlIGJhY2tncm91bmQsIHNvIG5vYm9keSBhc2tpbmcgd2hldGhlciBhXG4gICAgbWFjaGluZSBpcyB0cnVzdGVkIHdhaXRzIGZvciBhIGRpcmVjdG9yeSBvZiBmaWxlcyB0byBiZSByZWFkIGFuZCBhIHNpZ25hdHVyZSB0byBiZSBjaGVja2VkLiBBXG4gICAgcmVmcmVzaCB0aGF0IGZhaWxzIGxlYXZlcyB0aGUgbGlzdCB3ZSBhbHJlYWR5IGhhdmU6IHRoZSBjaGVja291dCBpcyBvbmx5IHN0YWxlLCBub3Qgd3JvbmcuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHJ1c3RlZE1hY2hpbmVzKCk6IFByb21pc2U8TWFjaGluZVN0YXRlW10+IHtcbiAgICBpZiAoIXJlZnJlc2hpbmcpIHtcbiAgICAgICAgcmVmcmVzaGluZyA9IHRydWU7XG4gICAgICAgIHJ1bkluZmluaXRlUG9sbChNQUNISU5FU19SRUZSRVNIX0lOVEVSVkFMLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRydXN0ZWRNYWNoaW5lcy5zZXQoUHJvbWlzZS5yZXNvbHZlKGF3YWl0IHJlYWRUcnVzdGVkTWFjaGluZXMoKSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgcmUtcmVhZCB0aGUgdHJ1c3RlZCBtYWNoaW5lcywga2VlcGluZyB0aGUgb25lcyB3ZSBoYXZlLiAke2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdHJ1c3RlZE1hY2hpbmVzKCk7XG59XG5cbi8qKiBUaGUgbWFjaGluZSBpZCBvZiBhIG1hY2hpbmUgcmVhY2hlZCBvdmVyIHNzaCwgZ2VuZXJhdGluZyBhbmQgaW5zdGFsbGluZyBhbiBpZGVudGl0eSBmb3IgaXQgaWZcbiAgICBpdCBoYXMgbm9uZSB1bmRlciB0aGlzIGRvbWFpbi4gVGhlIHByaXZhdGUga2V5IGVuZHMgdXAgb24gdGhhdCBtYWNoaW5lIGFuZCBub3doZXJlIGVsc2UuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVSZW1vdGVNYWNoaW5lSWQoaG9zdDogc3RyaW5nLCBkb21haW46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShERVZfZ2V0SWRlbnRpdHlGaWxlUGF0aChkb21haW4pKTtcbiAgICBsZXQgaG9tZSA9IChhd2FpdCBydW5PdmVyU1NIKHsgaG9zdCwgc2NyaXB0OiBgZWNobyAkSE9NRWAgfSkpLnN0ZG91dC50cmltKCk7XG4gICAgaWYgKCFob21lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtob3N0fSB0byByZXBvcnQgYSBob21lIGRpcmVjdG9yeSwgaXQgcmVwb3J0ZWQgbm90aGluZ2ApO1xuICAgIH1cbiAgICBsZXQgY29udGVudHMgPSBhd2FpdCBydW5PdmVyU1NIKHsgaG9zdCwgc2NyaXB0OiBgY2F0ICR7aG9tZX0vJHtmaWxlTmFtZX0gMj4vZGV2L251bGwgfHwgdHJ1ZWAgfSk7XG4gICAgaWYgKGNvbnRlbnRzLnN0ZG91dC50cmltKCkpIHtcbiAgICAgICAgbGV0IHN0b3JlZCA9IEpTT04ucGFyc2UoY29udGVudHMuc3Rkb3V0KSBhcyBJZGVudGl0eVN0b3JhZ2VUeXBlO1xuICAgICAgICByZXR1cm4gZ2V0TWFjaGluZUlkKHN0b3JlZC5kb21haW4sIGRvbWFpbik7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGAke2Rlc2NyaWJlSG9zdChob3N0KX0gaGFzIG5vIGlkZW50aXR5IGZvciAke2RvbWFpbn0sIGdlbmVyYXRpbmcgb25lYCk7XG4gICAgbGV0IGdlbmVyYXRlZCA9IGdlbmVyYXRlQ0EoZG9tYWluKTtcbiAgICBsZXQgc3RvcmVkOiBJZGVudGl0eVN0b3JhZ2VUeXBlID0ge1xuICAgICAgICBkb21haW46IGdlbmVyYXRlZC5kb21haW4sXG4gICAgICAgIGNlcnRCNjQ6IGdlbmVyYXRlZC5jZXJ0LnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICBrZXlCNjQ6IGdlbmVyYXRlZC5rZXkudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgfTtcbiAgICBhd2FpdCB3cml0ZVJlbW90ZUZpbGUoe1xuICAgICAgICBob3N0LFxuICAgICAgICBmaWxlUGF0aDogYCR7aG9tZX0vJHtmaWxlTmFtZX1gLFxuICAgICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSxcbiAgICAgICAgZmlsZU1vZGU6IFwiNjAwXCIsXG4gICAgICAgIGRpcmVjdG9yeU1vZGU6IFwiNzAwXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGdldE1hY2hpbmVJZChnZW5lcmF0ZWQuZG9tYWluLCBkb21haW4pO1xufVxuXG4vKiogTWFrZXMgYSBjaGVja291dCBsaXN0IGV4YWN0bHkgdGhlc2UgbWFjaGluZXM6IHRob3NlIG5hbWVkIGFyZSB3cml0dGVuIHdpdGggdGhlIGFkZHJlc3NlcyBnaXZlbixcbiAgICBhbmQgYW55dGhpbmcgbm90IG5hbWVkIGlzIHJlbW92ZWQuIFNvIHJlYWQgdGhlbSwgY2hhbmdlIHdoYXQgeW91IHdhbnQsIGFuZCB3cml0ZSB0aGUgcmVzdWx0LlxuXG4gICAgVGhlIGFkZHJlc3NlcyBhcmUgcGFydCBvZiBzZXR0aW5nIHJhdGhlciB0aGFuIGEgc2VwYXJhdGUgc3RlcCwgYmVjYXVzZSBhIG1hY2hpbmUgd2l0aCBub1xuICAgIGFkZHJlc3MgaXQgbWF5IHRhbGsgZnJvbSBpcyBub3QgYSBtYWNoaW5lIHRoYXQgd291bGQgZXZlciBiZSBhY2NlcHRlZCAtIHRoZXJlIGlzIG5vIHN0YXRlIHdoZXJlXG4gICAgbmFtaW5nIG9uZSB3aXRob3V0IHRoZW0gbWVhbnMgYW55dGhpbmcuXG5cbiAgICBOb3RoaW5nIGhlcmUgc2lnbnMgb3IgY29tbWl0cy4gVGhlIHNpZ25hdHVyZSBpcyB3aGF0IGV2ZXJ5IG90aGVyIG1hY2hpbmUgY2hlY2tzIGJlZm9yZVxuICAgIGJlbGlldmluZyBhbnkgb2YgdGhpcywgYW5kIGl0IHRha2VzIHRoZSBoYXJkd2FyZSBrZXksIHNvIGB5YXJuIHNpZ25maWxlcyBnaXRgIGlzIHN0aWxsIHlvdXJzIHRvXG4gICAgcnVuIGFmdGVyd2FyZHMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0TWFjaGluZXMoY29uZmlnOiB7XG4gICAgcmVwb1BhdGg/OiBzdHJpbmc7XG4gICAgbWFjaGluZXM6IHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwczogc3RyaW5nW10gfVtdO1xufSk6IFByb21pc2U8TWFjaGluZVN0YXRlW10+IHtcbiAgICBsZXQgeyBtYWNoaW5lcyB9ID0gY29uZmlnO1xuICAgIGxldCByZXBvUGF0aCA9IGNvbmZpZy5yZXBvUGF0aCB8fCAoYXdhaXQga2V5c1JlcG8oKSkucmVwb1BhdGg7XG4gICAgLy8gV2hhdGV2ZXIgd2FzIGhlbGQgaXMgbm93IHN0YWxlLCB3aG9ldmVyIHJlYWRzIGl0IG5leHQuXG4gICAgdHJ1c3RlZE1hY2hpbmVzLnJlc2V0KCk7XG4gICAgbGV0IGV4aXN0aW5nID0gYXdhaXQgcmVhZE1hY2hpbmVzKHJlcG9QYXRoKTtcbiAgICBsZXQgZGlyZWN0b3J5ID0gcGF0aC5qb2luKHJlcG9QYXRoLCBNQUNISU5FU19ESVIpO1xuICAgIGxldCB3cml0dGVuOiBNYWNoaW5lU3RhdGVbXSA9IFtdO1xuICAgIGZvciAobGV0IG1hY2hpbmUgb2YgbWFjaGluZXMpIHtcbiAgICAgICAgaWYgKCFtYWNoaW5lLm1hY2hpbmVJZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIG1hY2hpbmVJZCwgd2FzICR7SlNPTi5zdHJpbmdpZnkobWFjaGluZS5tYWNoaW5lSWQpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWFjaGluZS5pcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYEV4cGVjdGVkIGFkZHJlc3NlcyBmb3IgJHttYWNoaW5lLm1hY2hpbmVJZH0sIHdhcyBub25lLiBBIG1hY2hpbmUgaXMgdHJ1c3RlZCBmcm9tYFxuICAgICAgICAgICAgICAgICsgYCB0aGUgYWRkcmVzc2VzIGl0IG1heSB0YWxrIGZyb20sIHNvIGxlYXZlIGl0IG91dCBvZiB0aGUgbGlzdCB0byByZW1vdmUgaXQuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXBzID0gbWFjaGluZS5pcHMuZmlsdGVyKChpcCwgaW5kZXgpID0+IGlwICYmIG1hY2hpbmUuaXBzLmluZGV4T2YoaXApID09PSBpbmRleCk7XG4gICAgICAgIGxldCBzdGF0ZTogTWFjaGluZVN0YXRlID0ge1xuICAgICAgICAgICAgbWFjaGluZUlkOiBtYWNoaW5lLm1hY2hpbmVJZCxcbiAgICAgICAgICAgIC8vIEluIHRoZSBvcmRlciBnaXZlbiwgd2l0aG91dCBkdXBsaWNhdGVzLCBzbyB0aGUgZmlsZSByZWFkcyB0aGUgd2F5IGl0IHdhcyBzZXQuXG4gICAgICAgICAgICBpcHMsXG4gICAgICAgICAgICBhZGRlZEF0OiBleGlzdGluZy5nZXQobWFjaGluZS5tYWNoaW5lSWQpPy5hZGRlZEF0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoZGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKG1hY2hpbmVGaWxlUGF0aChyZXBvUGF0aCwgc3RhdGUubWFjaGluZUlkKSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUsIHVuZGVmaW5lZCwgNCkgKyBcIlxcblwiKTtcbiAgICAgICAgd3JpdHRlbi5wdXNoKHN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBXaGF0ZXZlciB0aGUgcmVwbyBoYWQgYW5kIHRoZSBjYWxsZXIgZGlkIG5vdCBuYW1lIGlzIG5vIGxvbmdlciB0cnVzdGVkLlxuICAgIGZvciAobGV0IG1hY2hpbmVJZCBvZiBleGlzdGluZy5rZXlzKCkpIHtcbiAgICAgICAgaWYgKCFtYWNoaW5lcy5zb21lKG1hY2hpbmUgPT4gbWFjaGluZS5tYWNoaW5lSWQgPT09IG1hY2hpbmVJZCkpIHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnJtKG1hY2hpbmVGaWxlUGF0aChyZXBvUGF0aCwgbWFjaGluZUlkKSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd3JpdHRlbjtcbn1cblxuZnVuY3Rpb24gcGFyc2VNYWNoaW5lRmlsZShuYW1lOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpOiBNYWNoaW5lU3RhdGUgfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IHBhcnNlZC5tYWNoaW5lSWQgfHwgbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiXCIpO1xuICAgICAgICByZXR1cm4geyBtYWNoaW5lSWQsIGlwczogcGFyc2VkLmlwcyB8fCBbXSwgYWRkZWRBdDogcGFyc2VkLmFkZGVkQXQgfHwgXCJcIiB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIHVucmVhZGFibGUgbWFjaGluZSBmaWxlICR7bmFtZX0uICR7ZX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbi8qKiBFdmVyeSBtYWNoaW5lIGZpbGUgb24gZGlzay4gRm9yIGVkaXRpbmcgdGhlIHJlcG8sIG5vdCBmb3IgZGVjaWRpbmcgdHJ1c3QgLSB0cnVzdCByZWFkcyB0aGVcbiAgICBzaWduZWQgZmlsZXMgdGhyb3VnaCByZWFkVHJ1c3RlZE1hY2hpbmVzLiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZE1hY2hpbmVzKHJlcG9QYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgbWFjaGluZXMgPSBuZXcgTWFwPHN0cmluZywgTWFjaGluZVN0YXRlPigpO1xuICAgIGxldCBkaXJlY3RvcnkgPSBwYXRoLmpvaW4ocmVwb1BhdGgsIE1BQ0hJTkVTX0RJUik7XG4gICAgbGV0IG5hbWVzID0gYXdhaXQgZnMucmVhZGRpcihkaXJlY3RvcnkpLmNhdGNoKCgpID0+IFtdIGFzIHN0cmluZ1tdKTtcbiAgICBmb3IgKGxldCBuYW1lIG9mIG5hbWVzLnNvcnQoKSkge1xuICAgICAgICBpZiAoIW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hY2hpbmUgPSBwYXJzZU1hY2hpbmVGaWxlKG5hbWUsIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihkaXJlY3RvcnksIG5hbWUpLCBcInV0ZjhcIikuY2F0Y2goKCkgPT4gXCJcIikpO1xuICAgICAgICBpZiAobWFjaGluZSkge1xuICAgICAgICAgICAgbWFjaGluZXMuc2V0KG1hY2hpbmUubWFjaGluZUlkLCBtYWNoaW5lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZXM7XG59XG5cbmxldCBsYXN0UmV2b2tlU3luYyA9IDA7XG5cbi8qKiBQdWxscyB0aGUga2V5cyByZXBvIGFuZCBpdHMgcmV2b2tlIHJlcG8sIGF0IG1vc3Qgb25jZSBhIFJFVk9LRV9TWU5DX0lOVEVSVkFMLCBiZWNhdXNlIHRoaXMgaXNcbiAgICBhc2tlZCBwZXIgcmVxdWVzdC4gQm90aCwgc2luY2UgZWl0aGVyIGNoYW5naW5nIGNoYW5nZXMgdGhlIGFuc3dlcjogdGhlIGtleXMgcmVwbyBjYXJyaWVzIHRoZVxuICAgIG1hY2hpbmVzIGFuZCB1bnJldm9rZXMsIHRoZSByZXZva2UgcmVwbyBjYXJyaWVzIHRoZSByZXZvY2F0aW9ucy4gQSBzeW5jIHRoYXQgZmFpbHMgbGVhdmVzIHRoZVxuICAgIGNoZWNrb3V0cyB3ZSBhbHJlYWR5IGhhdmUuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jUmV2b2NhdGlvbnMoc291cmNlVVJMOiBzdHJpbmcpIHtcbiAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RSZXZva2VTeW5jIDwgUkVWT0tFX1NZTkNfSU5URVJWQUwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsYXN0UmV2b2tlU3luYyA9IERhdGUubm93KCk7XG4gICAgYXdhaXQgc3luY1JlcG8oc291cmNlVVJMKS5jYXRjaChlID0+IGNvbnNvbGUubG9nKGBDb3VsZCBub3Qgc3luYyAke3NvdXJjZVVSTH0sIHVzaW5nIHRoZSBjaGVja291dCBhbHJlYWR5IGhlcmUuICR7ZX1gKSk7XG4gICAgYXdhaXQgc3luY1JlcG9GaWxlcyhyZXZva2VSZXBvKHNvdXJjZVVSTCkpLmNhdGNoKGUgPT4gY29uc29sZS5sb2coYENvdWxkIG5vdCBzeW5jICR7cmV2b2tlUmVwb1VSTChzb3VyY2VVUkwpfSwgdXNpbmcgdGhlIHJldm9jYXRpb25zIGFscmVhZHkgYWJzb3JiZWQuICR7ZX1gKSk7XG59XG5cbi8qKiBXaGF0IHRvIHJ1biB0byB0cnVzdCBhIG1hY2hpbmUgdGhhdCBoYXMganVzdCBiZWVuIHJlZnVzZWQuXG5cbiAgICBFdmVyeXRoaW5nIGluIGl0IGlzIGFscmVhZHkga25vd24gdG8gd2hvZXZlciBpcyBiZWluZyByZWZ1c2VkOiB0aGVpciBtYWNoaW5lIGlkLCB0aGUgYWRkcmVzcyB3ZVxuICAgIHNhdyB0aGVtIGF0LCBhbmQgdGhlIGRvbWFpbiB0aGV5IGp1c3QgdGFsa2VkIHRvLiBIYW5kaW5nIGl0IGJhY2sgc2F2ZXMgdGhlbSB3b3JraW5nIG91dCB0aGVcbiAgICBwYXJ0cyBvZiBhIGNvbW1hbmQgdGhleSBoYXZlIGV2ZXJ5IHJpZ2h0IHRvIGtub3cuIFJ1bm5pbmcgaXQgc3RpbGwgdGFrZXMgdGhlIGhhcmR3YXJlIGtleSBvblxuICAgIHRoZSBtYWNoaW5lIHRoYXQgb3ducyB0aGUgcmVwbywgc28gdGVsbGluZyB0aGVtIGNvc3RzIG5vdGhpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTWFjaGluZUNvbW1hbmQoY29uZmlnOiB7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nOyBkb21haW4/OiBzdHJpbmcgfSkge1xuICAgIGxldCB7IG1hY2hpbmVJZCwgaXAsIGRvbWFpbiB9ID0gY29uZmlnO1xuICAgIHJldHVybiBgVG8gdHJ1c3QgJHttYWNoaW5lSWR9LCBydW46IHlhcm4gYWRkbWFjaGluZSAke2RvbWFpbiB8fCBcIjxkb21haW4+XCJ9ICR7bWFjaGluZUlkfSAke2lwfSBnaXRgO1xufVxuXG4vKiogU2VuZHMgdGhlIG9uZSBub3RpZmljYXRpb24gdGhpcyBmaWxlIGlzIGFsbG93ZWQgdG8gc2VuZCwgd2hlbiBpdCBjYW4uXG5cbiAgICBUaGUgZGFlbW9uIGNvbmZpZ3VyZXMgbm90aWZpY2F0aW9ucyBvbiBzdGFydHVwIGFuZCB3b3VsZCBzaW1wbHkgc2VuZC4gVGhpcyBjYW4gYWxzbyBydW4gaW4gc29tZVxuICAgIG90aGVyIHByb2Nlc3MsIHdoaWNoIGhhcyBub3QsIHNvIHRoZSB3ZWJob29rIGlzIHBpY2tlZCB1cCBoZXJlIGlmIGl0IGlzIHJlYWRhYmxlLiBBIG1hY2hpbmVcbiAgICB3aXRoIG5vIHdlYmhvb2sgc2V0IHVwIHN0aWxsIHJlY29yZHMgdGhlIHJldm9jYXRpb24gLSBiZWluZyB1bmFibGUgdG8gdGVsbCBhbnlvbmUgaXMgbm90IGFcbiAgICByZWFzb24gdG8ga2VlcCBhY2NlcHRpbmcgYSBtYWNoaW5lIHRoYXQgaXMgYmVpbmcgbWlzdXNlZC4gKi9cbmFzeW5jIGZ1bmN0aW9uIG5vdGlmeUJlc3RFZmZvcnQoaGVhZGxpbmU6IHN0cmluZywgYm9keTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKCFhcmVEaXNjb3JkTm90aWZpY2F0aW9uc0NvbmZpZ3VyZWQoKSkge1xuICAgICAgICAgICAgLy8gUmVhZCBmaXJzdDogY29uZmlndXJlRGlzY29yZE5vdGlmaWNhdGlvbnMgZXhpdHMgdGhlIHByb2Nlc3Mgd2hlbiB0aGUgZmlsZSBpcyBtaXNzaW5nLFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgcmlnaHQgZm9yIHRoZSBkYWVtb24gYXQgc3RhcnR1cCBhbmQgd3JvbmcgZm9yIGEgbGlicmFyeSBjYWxsLlxuICAgICAgICAgICAgYXdhaXQgZnMucmVhZEZpbGUoREVGQVVMVF9XRUJIT09LX0ZJTEVfUEFUSCwgXCJ1dGY4XCIpO1xuICAgICAgICAgICAgYXdhaXQgY29uZmlndXJlRGlzY29yZE5vdGlmaWNhdGlvbnMoeyBmaWxlUGF0aDogREVGQVVMVF9XRUJIT09LX0ZJTEVfUEFUSCB9KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBub3RpZnkoaGVhZGxpbmUsIGJvZHkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCBzZW5kIGEgbm90aWZpY2F0aW9uIGFib3V0IHRoaXMsIGl0IGlzIG9ubHkgaW4gdGhlIGxvZy4gJHtlfWApO1xuICAgIH1cbn1cblxuLyoqIFJlY29yZHMgdGhhdCBhIG1hY2hpbmUgd2UgYWNjZXB0IHRhbGtlZCB0byB1cyBmcm9tIGFuIGFkZHJlc3MgaXQgaXMgbm90IGFsbG93ZWQgZnJvbS4gT25lIHBlclxuICAgIG1hY2hpbmUgYW5kIGFkZHJlc3MsIHNvIGEgc2Vjb25kIGFkZHJlc3MgaXMgYSBzZWNvbmQgcmV2b2NhdGlvbiBhbmQgYW4gdW5yZXZva2Ugb2YgdGhlIGZpcnN0XG4gICAgZG9lcyBub3QgY292ZXIgaXQuICovXG5hc3luYyBmdW5jdGlvbiByZWNvcmRNYWNoaW5lUmV2b2NhdGlvbihjb25maWc6IHtcbiAgICBzb3VyY2VVUkw6IHN0cmluZztcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcDogc3RyaW5nO1xuICAgIGhvc3RMYWJlbDogc3RyaW5nO1xufSkge1xuICAgIGxldCB7IHNvdXJjZVVSTCwgbWFjaGluZUlkLCBpcCwgaG9zdExhYmVsIH0gPSBjb25maWc7XG4gICAgbGV0IHJlcG9QYXRoID0gcmV2b2tlUmVwb1BhdGgoc291cmNlVVJMKTtcbiAgICBsZXQga2V5UGF0aCA9IGF3YWl0IGVuc3VyZVJldm9rZUtleShzb3VyY2VVUkwpO1xuICAgIGxldCByZXZvY2F0aW9uSWQgPSBuZXdSZXZvY2F0aW9uSWQobWFjaGluZUlkKTtcbiAgICBsZXQgZGlyZWN0b3J5ID0gcGF0aC5qb2luKHJlcG9QYXRoLCBSRVZPQ0FUSU9OU19ESVIpO1xuICAgIGF3YWl0IGZzLm1rZGlyKGRpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihkaXJlY3RvcnksIGAke3Jldm9jYXRpb25JZH0uanNvbmApLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHJldm9jYXRpb25JZCxcbiAgICAgICAgbWFjaGluZUlkLFxuICAgICAgICBpcCxcbiAgICAgICAgcmV2b2tlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHJldm9rZWRCeTogaG9zdExhYmVsLFxuICAgICAgICByZWFzb246IFJFVk9DQVRJT05fUkVBU09OLFxuICAgIH0sIHVuZGVmaW5lZCwgNCkgKyBcIlxcblwiKTtcblxuICAgIGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcImFkZFwiLCBcIi1BXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoIH0pO1xuICAgIGF3YWl0IHJ1bkdpdCh7XG4gICAgICAgIGFyZ3M6IFtcIi1jXCIsIFwidXNlci5lbWFpbD1wb3J0c2VjdXJlQGxvY2FsaG9zdFwiLCBcIi1jXCIsIFwidXNlci5uYW1lPXBvcnRzZWN1cmVcIiwgXCJjb21taXRcIiwgXCItbVwiLCBgcmV2b2tlICR7cmV2b2NhdGlvbklkfWBdLFxuICAgICAgICBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoLFxuICAgIH0pO1xuICAgIGxldCBwdXNoID0gYXdhaXQgcnVuR2l0KHsgYXJnczogW1wicHVzaFwiLCBcIm9yaWdpblwiLCBcIkhFQURcIl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGgsIGFsbG93RmFpbHVyZTogdHJ1ZSB9KTtcbiAgICBpZiAocHVzaC5zdGF0dXMgIT09IDApIHtcbiAgICAgICAgLy8gQW5vdGhlciBtYWNoaW5lIG1vc3QgbGlrZWx5IHJlY29yZGVkIHRoZSBzYW1lIHRoaW5nIGZpcnN0LCBhbmQgdGhlIG5leHQgcmVhZCBwaWNrcyBpdCB1cC5cbiAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCBwdXNoIHRoZSByZXZvY2F0aW9uIG9mICR7bWFjaGluZUlkfSBmcm9tICR7aXB9LiAkeyhwdXNoLnN0ZG91dCArIHB1c2guc3RkZXJyKS50cmltKCl9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbm90ZVJldm9jYXRpb24ocmV2b2NhdGlvbklkLCBtYWNoaW5lSWQsIGlwKTtcbiAgICBjb25zb2xlLmxvZyhgUmV2b2tlZCAke21hY2hpbmVJZH0gZnJvbSAke2lwfSwgJHtyZXZvY2F0aW9uSWR9YCk7XG5cbiAgICAvLyBTYWlkIGJ5IHdob2V2ZXIgd3JvdGUgdGhlIHJldm9jYXRpb24sIG9uY2UsIHRoZSBzYW1lIGFzIGZvciBhbiBzc2gga2V5LiBNYWNoaW5lcyB0aGF0IG9ubHlcbiAgICAvLyByZWFkIGl0IGxhdGVyIHNheSBub3RoaW5nLCBvciBvbmUgZXZlbnQgd291bGQgYmUgcmVwb3J0ZWQgYnkgZXZlcnkgbWFjaGluZSB0aGF0IHNhdyBpdC5cbiAgICBhd2FpdCBub3RpZnlCZXN0RWZmb3J0KFxuICAgICAgICBgU1VTUElDSU9VUyBJUCAke2lwfSBGUk9aRSBNQUNISU5FICR7bWFjaGluZUlkfWAsXG4gICAgICAgIGBUcnVzdGVkIG1hY2hpbmUgJHttYWNoaW5lSWR9IHRhbGtlZCB0byB1cyBmcm9tICR7aXB9LCBhbiBhZGRyZXNzICR7bWFjaGluZUlkfSBpcyBub3RgXG4gICAgICAgICsgYCBhbGxvd2VkIGZyb20uIFRoZSBjYWxsZXIgcHJvdmVkIHBvc3Nlc3Npb24gb2YgJHttYWNoaW5lSWR9J3Mga2V5LCBzbyBlaXRoZXIgc29tZW9uZWBcbiAgICAgICAgKyBgIGVsc2UgaGFzIGEgY29weSBvZiB0aGUga2V5LCBvciB0aGUgbWFjaGluZSdzIGFkZHJlc3MgY2hhbmdlZC5gXG4gICAgICAgICsgYFxcblxcbk1hY2hpbmUgJHttYWNoaW5lSWR9IGlzIGZyb3plbiBldmVyeXdoZXJlIG5vdywgYW5kIG5vdGhpbmcgYWNjZXB0cyBjYWxscyBmcm9tICR7bWFjaGluZUlkfS5gXG4gICAgICAgICsgYFxcblxcbklmIHRoaXMgd2FzIGFuIGF0dGFjaywgcmVtb3ZlIFxcYG1hY2hpbmVzLyR7bWFjaGluZUlkfS5qc29uXFxgIGZyb20gXFxgJHtzb3VyY2VVUkx9XFxgIG5vdy5gXG4gICAgICAgICsgYFxcbklmIHRoZSBuZXcgYWRkcmVzcyBpcyBsZWdpdGltYXRlLCBydW4gXFxgeWFybiB1bnJldm9rZSBnaXRcXGAgaW4gXFxgJHtzb3VyY2VVUkx9XFxgLiBUaGVgXG4gICAgICAgICsgYCB1bnJldm9rZSBhbGxvd3MgJHttYWNoaW5lSWR9IGZyb20gJHtpcH0sIGFuZCB0YWtlcyBlZmZlY3QgYXMgZWFjaCBtYWNoaW5lIHBpY2tzIGl0IHVwLmBcbiAgICAgICAgKyBgXFxuXFxubWFjaGluZTogXFxgJHttYWNoaW5lSWR9XFxgYFxuICAgICAgICArIGBcXG5mcm96ZW4gYnk6IFxcYCR7aG9zdExhYmVsfVxcYGBcbiAgICApO1xufVxuXG4vKiogV2hldGhlciB3ZSB3aWxsIHRhbGsgdG8gdGhpcyBtYWNoaW5lLCBjb21pbmcgZnJvbSB0aGlzIGFkZHJlc3MuXG5cbiAgICBCb3RoIGhhbHZlcyBhcmUgcmVxdWlyZWQgYW5kIG5laXRoZXIgaXMgYSBndWVzczogdGhlIGNhbGxlciBrbm93cyB0aGUgbWFjaGluZSBpZCBiZWNhdXNlIHRoZVxuICAgIGNvbm5lY3Rpb24gcHJvdmVkIGl0LCBhbmQga25vd3MgdGhlIGFkZHJlc3MgYmVjYXVzZSB0aGUgcGFja2V0cyBjYW1lIGZyb20gdGhlcmUuIEEgbWFjaGluZSB3ZVxuICAgIGRvIG5vdCBsaXN0IGlzIHNpbXBseSBub3QgYWNjZXB0ZWQuIEEgbWFjaGluZSB3ZSBkbyBsaXN0LCBhcnJpdmluZyBmcm9tIGFuIGFkZHJlc3MgaXQgZG9lcyBub3RcbiAgICBoYXZlLCBpcyB0cmVhdGVkIGFzIHRoZSBzYW1lIGtpbmQgb2YgZXZlbnQgYXMgYSBzdG9sZW4gc3NoIGtleSAtIGl0IGlzIHJldm9rZWQgZXZlcnl3aGVyZSwgYW5kXG4gICAgc3RheXMgcmV2b2tlZCB1bnRpbCBhbiB1bnJldm9rZSBhbGxvd3MgdGhhdCBtYWNoaW5lIGZyb20gdGhhdCBhZGRyZXNzLlxuXG4gICAgU2F5cyB3aHkgd2hlbiB0aGUgYW5zd2VyIGlzIG5vLCBiZWNhdXNlIHRoZSB0aHJlZSB3YXlzIHRvIGJlIHJlZnVzZWQgYXJlIGVudGlyZWx5IGRpZmZlcmVudFxuICAgIHRoaW5ncyB0byBhIHBlcnNvbiByZWFkaW5nIGl0OiBuZXZlciB0cnVzdGVkIGF0IGFsbCwgdHJ1c3RlZCBidXQgZnJvemVuLCBvciB0cnVzdGVkIGFuZCB0YWxraW5nXG4gICAgZnJvbSBzb21ld2hlcmUgaXQgc2hvdWxkIG5vdCBiZS5cblxuICAgIFRocm93cyB3aGVuIHRoZSByZXBvIGl0c2VsZiBjYW5ub3QgYmUgcmVhZCBvciBpcyBub3Qgc2lnbmVkLCByYXRoZXIgdGhhbiBhbnN3ZXJpbmcgZmFsc2U6IHRoYXRcbiAgICBpcyBhIGJyb2tlbiBpbnN0YWxsYXRpb24sIG5vdCBhIHJlamVjdGVkIG1hY2hpbmUsIGFuZCB0aGUgdHdvIGRlc2VydmUgZGlmZmVyZW50IGhhbmRsaW5nLiAqL1xuZXhwb3J0IHR5cGUgTWFjaGluZVZlcmRpY3QgPSB7IGFjY2VwdGVkOiBib29sZWFuOyByZWFzb246IHN0cmluZyB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNNYWNoaW5lQWNjZXB0ZWQoY29uZmlnOiB7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICAvLyBVc2VkIGZvciBsb2NhbCBsb29wYmFjayBhY2NlcHRhbmNlLCBhbmQgZm9yIGJldHRlciBlcnJvciBtZXNzYWdlcy5cbiAgICBkb21haW4/OiBzdHJpbmc7XG59KTogUHJvbWlzZTxNYWNoaW5lVmVyZGljdD4ge1xuICAgIGxldCB7IG1hY2hpbmVJZCwgaXAsIGRvbWFpbiB9ID0gY29uZmlnO1xuICAgIGlmICghbWFjaGluZUlkIHx8ICFpcCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgbWFjaGluZUlkIGFuZCBhbiBpcCwgd2FzICR7SlNPTi5zdHJpbmdpZnkobWFjaGluZUlkKX0gYW5kICR7SlNPTi5zdHJpbmdpZnkoaXApfWApO1xuICAgIH1cblxuICAgIC8vIFRoZSB3aG9sZSBjaGVjaywgcGx1cyB3aGV0aGVyIGl0IGZyb3plIHRoZSBtYWNoaW5lLiBBIHJlamVjdGlvbiB0aGF0IGZyb3plIGl0IGlzIGZpbmFsLCBzb1xuICAgIC8vIHRoZXJlIGlzIG5vdGhpbmcgdG8gZ2FpbiBmcm9tIGxvb2tpbmcgYWdhaW4uIEFueSBvdGhlciByZWplY3Rpb24gbWlnaHQganVzdCBiZSBhIHN0YWxlIHZpZXcgLVxuICAgIC8vIGEgbWFjaGluZSBhZGRlZCBzZWNvbmRzIGFnbyB0aGF0IG91ciBjYWNoZWQgbGlzdCBoYXMgbm90IGNhdWdodCB1cCB0byAtIHNvIGl0IGlzIHdvcnRoIG9uZVxuICAgIC8vIGZyZXNoIGxvb2ssIHdoaWNoIGlzIHdoYXQgdGhlIHJldHJ5IGJlbG93IGRvZXMuXG4gICAgbGV0IGV2YWx1YXRlID0gYXN5bmMgKCk6IFByb21pc2U8eyB2ZXJkaWN0OiBNYWNoaW5lVmVyZGljdDsgZnJvemU6IGJvb2xlYW4gfT4gPT4ge1xuICAgICAgICBpZiAoTE9PUEJBQ0suaW5jbHVkZXMoaXApICYmICEhZG9tYWluICYmIG1hY2hpbmVJZCA9PT0gZ2V0T3duTWFjaGluZUlkKGRvbWFpbikpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IHRydWUsIHJlYXNvbjogXCJcIiB9LCBmcm96ZTogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeyBzb3VyY2VVUkwgfSA9IGF3YWl0IGtleXNSZXBvKCk7XG4gICAgICAgIGF3YWl0IHN5bmNSZXZvY2F0aW9ucyhzb3VyY2VVUkwpO1xuICAgICAgICAvLyBUaGUgbGlzdCBoYXMgcmV2b2NhdGlvbnMgYWxyZWFkeSBhcHBsaWVkIC0gcmVhZFNpZ25lZFJlcG8gZHJvcHMgZnJvemVuIG1hY2hpbmVzIC0gc28gYVxuICAgICAgICAvLyBtYWNoaW5lIGluIGl0IGlzIHRydXN0ZWQsIGFuZCBhIG1hY2hpbmUgbWlzc2luZyBmcm9tIGl0IGlzIGVpdGhlciB1bmtub3duIG9yIGZyb3plbi5cbiAgICAgICAgbGV0IG1hY2hpbmUgPSAoYXdhaXQgZ2V0VHJ1c3RlZE1hY2hpbmVzKCkpLmZpbmQoZW50cnkgPT4gZW50cnkubWFjaGluZUlkID09PSBtYWNoaW5lSWQpO1xuICAgICAgICBpZiAoIW1hY2hpbmUpIHtcbiAgICAgICAgICAgIGlmIChpc0lkZW50aXR5RnJvemVuKG1hY2hpbmVJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2ZXJkaWN0OiB7IGFjY2VwdGVkOiBmYWxzZSwgcmVhc29uOiBgTWFjaGluZSAke21hY2hpbmVJZH0gaXMgZnJvemVuLCBoYXZpbmcgYmVlbiB1c2VkIGZyb20gYW4gdW5hcHByb3ZlZCBhZGRyZXNzLmAgfSwgZnJvemU6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyB2ZXJkaWN0OiB7IGFjY2VwdGVkOiBmYWxzZSwgcmVhc29uOiBgTWFjaGluZSAke21hY2hpbmVJZH0gaXMgbm90IHRydXN0ZWQuICR7YWRkTWFjaGluZUNvbW1hbmQoeyBtYWNoaW5lSWQsIGlwLCBkb21haW4gfSl9YCB9LCBmcm96ZTogZmFsc2UgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYWNoaW5lLmlwcy5pbmNsdWRlcyhpcCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IHRydWUsIHJlYXNvbjogXCJcIiB9LCBmcm96ZTogZmFsc2UgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpc3RlZCwgYnV0IHRhbGtpbmcgdG8gdXMgZnJvbSBzb21ld2hlcmUgaXQgc2hvdWxkIG5vdCBiZS4gUmVjb3JkZWQgb25jZSBmb3IgdGhpcyBtYWNoaW5lXG4gICAgICAgIC8vIGFuZCBhZGRyZXNzLCBzbyBiZWluZyB0YWxrZWQgdG8gcmVwZWF0ZWRseSBkb2VzIG5vdCB3cml0ZSByZXBlYXRlZGx5LlxuICAgICAgICBpZiAoIWlzUGFpclJldm9rZWQobWFjaGluZUlkLCBpcCkgJiYgIWlzUGFpclVucmV2b2tlZChtYWNoaW5lSWQsIGlwKSkge1xuICAgICAgICAgICAgYXdhaXQgcmVjb3JkTWFjaGluZVJldm9jYXRpb24oeyBzb3VyY2VVUkwsIG1hY2hpbmVJZCwgaXAsIGhvc3RMYWJlbDogb3MuaG9zdG5hbWUoKSB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IGZhbHNlLCByZWFzb246IGBNYWNoaW5lICR7bWFjaGluZUlkfSBpcyBub3QgYWxsb3dlZCBmcm9tICR7aXB9LCBhbmQgaXMgbm93IGZyb3plbiBldmVyeXdoZXJlLmAgfSwgZnJvemU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2ZXJkaWN0OiB7IGFjY2VwdGVkOiBmYWxzZSwgcmVhc29uOiBgTWFjaGluZSAke21hY2hpbmVJZH0gaXMgbm90IGFsbG93ZWQgZnJvbSAke2lwfS5gIH0sIGZyb3plOiBmYWxzZSB9O1xuICAgIH07XG5cbiAgICBsZXQgeyB2ZXJkaWN0LCBmcm96ZSB9ID0gYXdhaXQgZXZhbHVhdGUoKTtcbiAgICAvLyBBbiBhY2NlcHQsIG9yIGEgcmVqZWN0aW9uIHRoYXQganVzdCBmcm96ZSB0aGUgbWFjaGluZSwgaXMgdGhlIGZpbmFsIHdvcmQuIEFueSBvdGhlciByZWplY3Rpb25cbiAgICAvLyBtaWdodCBqdXN0IGJlIGEgc3RhbGUgbGlzdCAtIGEgbWFjaGluZSBhZGRlZCBzZWNvbmRzIGFnbyB3ZSBoYXZlIG5vdCBjYXVnaHQgdXAgdG8gLSBzbyBpdCBpc1xuICAgIC8vIHdvcnRoIG9uZSBmcmVzaCBsb29rLlxuICAgIGlmICh2ZXJkaWN0LmFjY2VwdGVkIHx8IGZyb3plKSB7XG4gICAgICAgIHJldHVybiB2ZXJkaWN0O1xuICAgIH1cbiAgICAvLyBSZS1yZWFkIHRoZSBsaXN0IGF0IG1vc3Qgb25jZSBhIG1pbnV0ZSwgc28gYSBidXJzdCBvZiBiYWQgY2FsbGVycyBjYW5ub3QgbWFrZSB1cyByZS1yZWFkIG9uXG4gICAgLy8gZXZlcnkgb25lIG9mIHRoZW0uIEZvcmNlIHRoZSBjaGVja291dCBiYWNrIHRvIHRoZSByZW1vdGUgZmlyc3QsIHNvIGEgbWFjaGluZSBhZGRlZCBhbmQgc2lnbmVkXG4gICAgLy8gc2Vjb25kcyBhZ28gaXMgcGlja2VkIHVwIGV2ZW4gaWYgdGhlIGNoZWNrb3V0IHdhcyBsZWZ0IGRpcnR5LCB0aGVuIHRha2UgdGhlIGZyZXNoIGxvb2sgYXNcbiAgICAvLyBmaW5hbC5cbiAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RNYWNoaW5lc0ludmFsaWRhdGlvbiA+IE1BQ0hJTkVTX0lOVkFMSURBVElPTl9JTlRFUlZBTCkge1xuICAgICAgICBsYXN0TWFjaGluZXNJbnZhbGlkYXRpb24gPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgeyBzb3VyY2VVUkwgfSA9IGF3YWl0IGtleXNSZXBvKCk7XG4gICAgICAgIGF3YWl0IHN5bmNSZXBvKHNvdXJjZVVSTCwgeyBmb3JjZVVwZGF0ZTogdHJ1ZSB9KS5jYXRjaChlID0+IGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZm9yY2UgdXBkYXRlICR7c291cmNlVVJMfS4gJHtlfWApKTtcbiAgICAgICAgdHJ1c3RlZE1hY2hpbmVzLnJlc2V0KCk7XG4gICAgfVxuICAgIHJldHVybiAoYXdhaXQgZXZhbHVhdGUoKSkudmVyZGljdDtcbn1cbiJdfQ==
|
|
366
|
+
/* _JS_SOURCE_HASH = "5454442ffd08a55d2629faf09bfc09166bc47d22bb3d36c281139e1e6b937661"; */
|