socket-function 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SetProcessVariables.ts.cache +2 -2
- package/dist/SocketFunction.ts.cache +2 -2
- package/hot/dist/HotReloadController.ts.cache +2 -2
- package/package.json +1 -1
- package/require/dist/RequireController.ts.cache +2 -2
- package/require/dist/compileFlags.ts.cache +2 -2
- package/require/dist/extMapper.ts.cache +2 -2
- package/require/dist/require.ts.cache +2 -2
- package/src/JSONLACKS/dist/JSONLACKS.ts.cache +2 -2
- package/src/dist/CallFactory.ts.cache +2 -2
- package/src/dist/Zip.ts.cache +2 -2
- package/src/dist/bits.ts.cache +2 -2
- package/src/dist/buffers.ts.cache +2 -2
- package/src/dist/caching.ts.cache +2 -2
- package/src/dist/callHTTPHandler.ts.cache +2 -2
- package/src/dist/callManager.ts.cache +2 -2
- package/src/dist/certStore.ts.cache +2 -2
- package/src/dist/fixLargeNetworkCalls.ts.cache +2 -2
- package/src/dist/forwardPort.ts.cache +2 -2
- package/src/dist/https.ts.cache +2 -2
- package/src/dist/nodeCache.ts.cache +2 -2
- package/src/dist/nodeProxy.ts.cache +2 -2
- package/src/dist/protocolNegotiation.ts.cache +2 -2
- package/src/dist/tlsParsing.ts.cache +2 -2
- package/src/dist/webSocketServer.ts.cache +2 -2
- package/src/dist/websocketFactory.ts.cache +2 -2
- package/src/lz4/dist/LZ4.ts.cache +2 -2
- package/time/dist/trueTimeShim.ts.cache +86 -35
- package/time/trueTimeShim.ts +78 -27
|
@@ -1,4 +1,4 @@
|
|
|
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";
|
|
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"; 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="../src/src.d.ts" />
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
4
4
|
//exports.requireMain = void 0;
|
|
@@ -673,4 +673,4 @@ function requireMain() {
|
|
|
673
673
|
}
|
|
674
674
|
exports.requireMain = requireMain;
|
|
675
675
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlcXVpcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdDQUF3Qzs7O0FBb0J4QyxTQUFnQixXQUFXOztJQUN2QixLQUFLLFVBQVUsV0FBVyxDQUFDLFFBQWdCLEVBQUUsTUFBVzs7UUFDcEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFJLFFBQWtCLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3JCLG9GQUFvRjtZQUNwRixvRUFBb0U7WUFDcEUsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDckIsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsV0FBVyxFQUFFLFNBQVM7YUFDekIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxJQUFJLEVBQUUsSUFBSTtnQkFDVixXQUFXLEVBQUUsU0FBUzthQUN6QixDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0Is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QyxRQUFRLEVBQ2YsT0FBTyxFQUNQLGFBQWEsQ0FDaEIsQ0FBQztnQkFDRixNQUFNLENBQUMsV0FBVyxHQUFHLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDekIsMEZBQTBGO2dCQUMxRixpRkFBaUY7Z0JBQ2pGLDRGQUE0RjtZQUNoRyxDQUFDO29CQUFTLENBQUM7Z0JBQ1AsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzVCLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUVuQyxNQUFBLFVBQVUsQ0FBQyxpQkFBaUIsMkRBQUc7b0JBQzNCLElBQUksRUFBRSxVQUFVO29CQUNoQixRQUFRLEVBQUUsQ0FBQztvQkFDWCxNQUFNLEVBQUUsQ0FBQztpQkFDWixDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDTCxDQUFDO0FBbHlCRCxrQ0FreUJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL3NyYy9zcmMuZC50c1wiIC8+XG5cbmltcG9ydCB7IEdldE1vZHVsZXNBcmdzIH0gZnJvbSBcIi4vUmVxdWlyZUNvbnRyb2xsZXJcIjtcblxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgdmFyIG9uUHJvZ3Jlc3NIYW5kbGVyOiB1bmRlZmluZWQgfCAoKHByb2dyZXNzOiB7XG4gICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgYWRkVmFsdWU6IG51bWJlcjtcbiAgICAgICAgYWRkTWF4OiBudW1iZXI7XG4gICAgfSkgPT4gdm9pZCk7XG4gICAgdmFyIG9uRXJyb3JIYW5kbGVyOiB1bmRlZmluZWQgfCAoKGVycm9yOiBzdHJpbmcpID0+IHZvaWQpO1xuXG5cbiAgICB2YXIgQk9PVF9USU1FOiBudW1iZXI7XG4gICAgdmFyIGJ1aWx0SW5Nb2R1bGVFeHBvcnRzOiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVNYWluKCkge1xuICAgIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RUZXh0KGVuZHBvaW50OiBzdHJpbmcsIHZhbHVlczogYW55KSB7XG4gICAgICAgIGxldCB1cmwgPSBuZXcgVVJMKGVuZHBvaW50KTtcblxuICAgICAgICBsZXQganNvbiA9IEpTT04uc3RyaW5naWZ5KHZhbHVlcyk7XG4gICAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgICAgIGlmIChqc29uLmxlbmd0aCA8IDYwMDApIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IFRyeSB0byB1c2UgYSBHRVQsIGFzIEdFVHMgY2FuIGJlIGNhY2hlZCEgSG93ZXZlciwgaWYgdGhlIGRhdGEgaXMgdG9vIGxhcmdlLFxuICAgICAgICAgICAgLy8gIHdlIGhhdmUgdG8gdXNlIGEgcG9zdCwgb3IgZWxzZSB0aGUgcmVxdWVzdCB1cmwgd2lsbCBiZSB0b28gbGFyZ2VcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlc1trZXldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybC50b1N0cmluZygpLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwudG9TdHJpbmcoKSwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgYm9keToganNvbixcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb21wcmVzc2lvblJhdGlvID0gMTtcbiAgICAgICAgbGV0IHVuY29tcHJlc3NlZExlbmd0aCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiWC1VbmNvbXByZXNzZWQtQ29udGVudC1MZW5ndGhcIik7XG4gICAgICAgIGxldCBjb21wcmVzc2VkTGVuZ3RoID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LUxlbmd0aFwiKTtcbiAgICAgICAgaWYgKHVuY29tcHJlc3NlZExlbmd0aCAmJiBjb21wcmVzc2VkTGVuZ3RoKSB7XG4gICAgICAgICAgICBjb21wcmVzc2lvblJhdGlvID0gK3VuY29tcHJlc3NlZExlbmd0aCAvICtjb21wcmVzc2VkTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0b3RhbExlbmd0aCA9ICsodW5jb21wcmVzc2VkTGVuZ3RoIHx8IGNvbXByZXNzZWRMZW5ndGggfHwgMCk7XG4gICAgICAgIGlmICh0b3RhbExlbmd0aCkge1xuICAgICAgICAgICAgZ2xvYmFsVGhpcy5vblByb2dyZXNzSGFuZGxlcj8uKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIkRvd25sb2FkXCIsXG4gICAgICAgICAgICAgICAgYWRkVmFsdWU6IDAsXG4gICAgICAgICAgICAgICAgYWRkTWF4OiBNYXRoLmZsb29yKHRvdGFsTGVuZ3RoIC8gY29tcHJlc3Npb25SYXRpbyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGl0J3MgYW4gZXJyb3IsIHNldCByZXF1ZXN0RXJyb3JcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgZ2xvYmFsVGhpcy5vbkVycm9ySGFuZGxlcj8uKHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RyZWFtIGl0LCBzbyB3ZSBjYW4gZ2V0IHByb2dyc3NcbiAgICAgICAgbGV0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkhLmdldFJlYWRlcigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICAgICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgICAgICAgICAgcmVzdWx0ICs9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgY3VyID0gKHZhbHVlPy5sZW5ndGggfHwgMCkgLyBjb21wcmVzc2lvblJhdGlvO1xuICAgICAgICAgICAgZ2xvYmFsVGhpcy5vblByb2dyZXNzSGFuZGxlcj8uKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIkRvd25sb2FkXCIsXG4gICAgICAgICAgICAgICAgYWRkVmFsdWU6IGN1cixcbiAgICAgICAgICAgICAgICBhZGRNYXg6IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGdsb2JhbFRoaXMuQk9PVF9USU1FID0gc3RhcnRUaW1lO1xuXG4gICAgLy8gU2V0IHRvIHRoZSBmaXJzdCByb290RG9tYWluLCB1bmxlc3MgdGhlIGZpcnN0IGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgZG9tYWluXG4gICAgbGV0IG1haW5Sb290T3JpZ2luID0gbG9jYXRpb24ub3JpZ2luICsgbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgbGV0IGlzRmlyc3RJbXBvcnQgPSB0cnVlO1xuXG4gICAgKFN5bWJvbCBhcyBhbnkpLmRpc3Bvc2UgPSBTeW1ib2wuZGlzcG9zZSB8fCBTeW1ib2woXCJkaXNwb3NlXCIpO1xuICAgIChTeW1ib2wgYXMgYW55KS5hc3luY0Rpc3Bvc2UgPSBTeW1ib2wuYXN5bmNEaXNwb3NlIHx8IFN5bWJvbChcImFzeW5jRGlzcG9zZVwiKTtcblxuICAgIC8vIEdsb2JhbHNcbiAgICBPYmplY3QuYXNzaWduKHdpbmRvdywge1xuICAgICAgICBwcm9jZXNzOiB7XG4gICAgICAgICAgICBhcmd2OiB3aW5kb3c/LnByb2Nlc3M/LmFyZ3YgfHwgW10sXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgICAvLyBNaXJyb3IgdGhlIHRub2RlLmpzIHNldHRpbmdcbiAgICAgICAgICAgICAgICBOT0RFX0VOVjogXCJwcm9kdWN0aW9uXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbnM6IHt9LFxuICAgICAgICB9LFxuICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICAgICAgICB9LFxuICAgICAgICAvLyBJZ25vcmUgZmxhZ3MgZm9yIG5vdywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGQgd29yayBmaW5lIGlmIHdlIGp1c3QgaGFyZGNvZGVkIGNvbXBpbGVGbGFncy50cyBoZXJlLlxuICAgICAgICBzZXRGbGFnKCkgeyB9LFxuICAgICAgICBnbG9iYWw6IHdpbmRvdyxcbiAgICB9KTtcblxuICAgIC8vIE5vdCByZWFsIG1vZHVsZXMsIGFzIHdlIGp1c3QgZGVmaW5lIHRoZWlyIGV4cG9ydHNcbiAgICBjb25zdCBidWlsdEluTW9kdWxlRXhwb3J0cyA9IHtcbiAgICAgICAgd29ya2VyX3RocmVhZHM6IHtcbiAgICAgICAgICAgIGlzTWFpblRocmVhZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdXRpbDoge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS91dGlsLmh0bWwjdXRpbF91dGlsX2luaGVyaXRzX2NvbnN0cnVjdG9yX3N1cGVyY29uc3RydWN0b3JcbiAgICAgICAgICAgIGluaGVyaXRzKGNvbnN0cnVjdG9yOiBhbnksIHN1cGVyQ29uc3RydWN0b3I6IGFueSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUZXh0RGVjb2RlcjogVGV4dERlY29kZXIsXG4gICAgICAgICAgICBUZXh0RW5jb2RlcjogVGV4dEVuY29kZXIsXG4gICAgICAgIH0sXG4gICAgICAgIGJ1ZmZlcjogeyBCdWZmZXIgfSxcbiAgICAgICAgc3RyZWFtOiB7XG4gICAgICAgICAgICAvLyBIQUNLOiBOZWVkZWQgdG8gZ2V0IFNBWCBKUyB0byB3b3JrIGNvcnJlY3RseS5cbiAgICAgICAgICAgIFN0cmVhbTogZnVuY3Rpb24gKCkgeyB9LFxuICAgICAgICAgICAgVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVyczoge1xuICAgICAgICAgICAgLy8gVE9ETzogQWRkIGFsbCBtZW1iZXJzIG9mIHRpbWVyc1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlOiB3aW5kb3cuc2V0SW1tZWRpYXRlLFxuICAgICAgICB9LFxuICAgICAgICBjaGlsZF9wcm9jZXNzOiB7fSxcbiAgICAgICAgZXZlbnRzOiB7fSxcbiAgICB9O1xuICAgIGdsb2JhbFRoaXMuYnVpbHRJbk1vZHVsZUV4cG9ydHMgPSBnbG9iYWxUaGlzLmJ1aWx0SW5Nb2R1bGVFeHBvcnRzIHx8IHt9O1xuICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcy5idWlsdEluTW9kdWxlRXhwb3J0cywgYnVpbHRJbk1vZHVsZUV4cG9ydHMpO1xuXG4gICAgbGV0IGxhc3RUaW1lID0gMDtcbiAgICBmdW5jdGlvbiBuZXh0VGltZSgpIHtcbiAgICAgICAgbGV0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAodGltZSA8PSBsYXN0VGltZSkge1xuICAgICAgICAgICAgLy8gTk9URTogV2UgU0hPVUxEIHJlYWxseSBhZGQgZXBzaWxvbiwgYnV0Li4uIHRoaXMgaXMgYSBsb3QgZWFzaWVyLCBhbmQgaXMgY2xvc2UgZW5vdWdoLFxuICAgICAgICAgICAgLy8gIGFzIHRpbWVzIHdpbGwgbmV2ZXIgaGF2ZSB0b28gbGFyZ2Ugb2YgYSBtYWduaXR1ZGUuXG4gICAgICAgICAgICB0aW1lID0gbGFzdFRpbWUgKyAwLjAxO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RUaW1lID0gdGltZTtcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHt7XG4gICAgICAgIFtyZXNvbHZlUGF0aDogc3RyaW5nXToge1xuICAgICAgICAgICAgLy8gTWF5IGJlIGRpZmZlcmVudCB0aGVuIHRoZSBtb2R1bGUgZmlsZW5hbWVcbiAgICAgICAgICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICAvLyBJZiBhIG1vZHVsZSBpcyBub3QgYWxsb3dlZCBjbGllbnRzaWRlIGl0IGlzIGxpa2VseSByZXF1ZXN0cyB3aWxsIGJlIGVtcHR5LFxuICAgICAgICAgICAgLy8gIHRvIHNhdmUgZWZmb3J0IHBhcnNpbmcgcmVxdWVzdHMgZm9yIG1vZHVsZXMgdGhhdCBvbmx5IGV4aXN0IHRvIGdpdmUgYmV0dGVyXG4gICAgICAgICAgICAvLyAgZXJyb3IgbWVzc2FnZXMuXG4gICAgICAgICAgICByZXF1ZXN0czoge1xuICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QgPT4gcmVzb2x2ZWRQYXRoXG4gICAgICAgICAgICAgICAgW3JlcXVlc3Q6IHN0cmluZ106IHN0cmluZztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luY1JlcXVlc3RzOiB7IFtyZXF1ZXN0OiBzdHJpbmddOiB0cnVlIH07XG4gICAgICAgICAgICAvLyBOT1RFOiBJRiAhYWxsb3djbGllbnQgJiYgIXNlcnZlcm9ubHksIGl0IG1pZ2h0IGp1c3QgbWVhbiB3ZSBkaWRuJ3QgYWRkIGFsbG93Y2xpZW50XG4gICAgICAgICAgICAvLyAgdG8gdGhlIG1vZHVsZSB5ZXQuIEJVVCwgaWYgc2VydmVyb25seSwgdGhlbiB3ZSBrbm93IGZvciBzdXJlIHdlIGRvbid0IHdhbnQgaXQgY2xpZW50LlxuICAgICAgICAgICAgLy8gIFNvIHRoZSBtZXNzYWdlcyBhbmQgYmVoYXZpb3Igd2lsbCBiZSBkaWZmZXJlbnQuXG4gICAgICAgICAgICBhbGxvd2NsaWVudD86IGJvb2xlYW47XG4gICAgICAgICAgICBzZXJ2ZXJvbmx5PzogYm9vbGVhbjtcbiAgICBcbiAgICAgICAgICAgIHNvdXJjZT86IHN0cmluZztcbiAgICAgICAgfVxuICAgIH19ICovXG4gICAgbGV0IHNlcmlhbGl6ZWRNb2R1bGVzOiB7IFtpZDogc3RyaW5nXTogU2VyaWFsaXplZE1vZHVsZSB8IHVuZGVmaW5lZCB9ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHR5cGUgTW9kdWxlVHlwZSA9IE5vZGVKUy5Nb2R1bGUgJiB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIGV4cG9ydHM6IHVua25vd247XG4gICAgICAgIGNoaWxkcmVuOiBNb2R1bGVUeXBlW107XG4gICAgICAgIGZsYWdzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgICAgICAgbG9hZDogKCkgPT4gdm9pZDtcbiAgICAgICAgbG9hZGVkOiBib29sZWFuO1xuICAgICAgICBpc1ByZWxvYWRpbmc6IGJvb2xlYW47XG4gICAgICAgIGV2YWxTdGFydFRpbWU6IG51bWJlcjtcbiAgICAgICAgZXZhbEVuZFRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgZXZhbHVhdGVTdGFydGVkOiBib29sZWFuO1xuICAgICAgICBzb3VyY2U6IHN0cmluZztcbiAgICAgICAgYWxsb3djbGllbnQ6IGJvb2xlYW47XG4gICAgICAgIHNpemU6IG51bWJlcjtcbiAgICAgICAgb3JpZ2luYWw6IFNlcmlhbGl6ZWRNb2R1bGU7XG4gICAgICAgIGltcG9ydDogKHJlcXVlc3Q6IHN0cmluZywgYXN5bmNJc0ZpbmU/OiBib29sZWFuKSA9PiB1bmtub3duO1xuICAgIH07XG5cbiAgICBsZXQgbW9kdWxlQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBNb2R1bGVUeXBlIH0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGxldCBhbHJlYWR5SGF2ZToge1xuICAgICAgICByZXF1aXJlU2VxTnVtUHJvY2Vzc0lkOiBzdHJpbmc7XG4gICAgICAgIHNlcU51bXM6IHsgW3NlcU51bTogc3RyaW5nXTogdHJ1ZSB8IDEgfCAwIHwgdW5kZWZpbmVkIH07XG4gICAgfSB8IHVuZGVmaW5lZDtcblxuICAgIGxldCByb290UmVzb2x2ZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHJvb3RSZXF1aXJlLmNhY2hlID0gbW9kdWxlQ2FjaGU7XG4gICAgLy8gRXhwb3NlIHJlcXVpcmUgZm9yIGRlYnVnZ2luZywgbm90IHNvIGl0IGNhbiBiZSBjYWxsZWRcbiAgICBnLnJlcXVpcmUgPSByb290UmVxdWlyZTtcbiAgICBnLmltcG9ydCA9IHJvb3RSZXF1aXJlO1xuXG4gICAgZy5yID0gZnVuY3Rpb24gcih0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMobW9kdWxlQ2FjaGUpLmZpbHRlcigoeCkgPT4geC5maWxlbmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRleHQpKVswXS5leHBvcnRzO1xuICAgIH07XG5cbiAgICBsZXQgcmVxdWlyZUJhdGNoOiB7IFtyZXF1ZXN0OiBzdHJpbmddOiAoKCkgPT4gdm9pZClbXSB9IHwgdW5kZWZpbmVkO1xuICAgIGZ1bmN0aW9uIHJvb3RSZXF1aXJlKHJlcXVlc3Q6IHN0cmluZywgYmF0Y2g/OiBib29sZWFuKTogdW5rbm93biB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmluY2x1ZGVzKFwiZmlsZTovL1wiKSkge1xuICAgICAgICAgICAgLy8gSG93IGRvZXMgdGhpcyBoYXBwZW4/IEl0IGRlZmluaXRlbHkgYnJlYWtzIHRoaW5ncywgYW5kIHdlIGNvdWxkIHJlbW92ZSB0aGUgZmlsZTovLywgYnV0Li4uIGhvd1xuICAgICAgICAgICAgLy8gIGRvZXMgaXQgZXZlbiBoYXBwZW4/XG4gICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGaXJzdEltcG9ydCkge1xuICAgICAgICAgICAgaXNGaXJzdEltcG9ydCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgbWFpblJvb3RPcmlnaW4gPSBnZXRSb290RG9tYWluKHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcmVxdWVzdC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBtYWluUm9vdE9yaWdpbiArIHJlcXVlc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWJhdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVxdWVzdCBpbiByb290UmVzb2x2ZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkUmVxdWVzdCA9IHJvb3RSZXNvbHZlQ2FjaGVbcmVxdWVzdF07XG4gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkUmVxdWVzdCBpbiByb290UmVxdWlyZS5jYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdFJlcXVpcmUuY2FjaGVbcmVzb2x2ZWRSZXF1ZXN0XS5leHBvcnRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcXVlc3QgaW4gcm9vdFJlcXVpcmUuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm9vdFJlcXVpcmUuY2FjaGVbcmVxdWVzdF0uZXhwb3J0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXF1ZXN0IGluIGJ1aWx0SW5Nb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbHRJbk1vZHVsZUV4cG9ydHNbcmVxdWVzdCBhcyBrZXlvZiB0eXBlb2YgYnVpbHRJbk1vZHVsZUV4cG9ydHNdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiYXRjaCkge1xuICAgICAgICAgICAgaWYgKCFyZXF1aXJlQmF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXF1aXJlQmF0Y2ggPSByZXF1aXJlQmF0Y2ggfHwge307XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZUJhdGNoKSB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmxlXCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdHMgPSBPYmplY3Qua2V5cyhyZXF1aXJlQmF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbGJhY2tzID0gT2JqZWN0LnZhbHVlcyhyZXF1aXJlQmF0Y2gpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZUJhdGNoID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHJvb3RSZXF1aXJlTXVsdGlwbGUocmVxdWVzdHMpLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVpcmVCYXRjaCkgdGhyb3cgbmV3IEVycm9yKFwiSW1wb3NzaWJsZVwiKTtcbiAgICAgICAgICAgICAgICByZXF1aXJlQmF0Y2hbcmVxdWVzdF0gPSByZXF1aXJlQmF0Y2hbcmVxdWVzdF0gfHwgW107XG4gICAgICAgICAgICAgICAgcmVxdWlyZUJhdGNoW3JlcXVlc3RdLnB1c2gocmVzb2x2ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByb290UmVxdWlyZU11bHRpcGxlKFtyZXF1ZXN0XSkudGhlbigoeCkgPT4geFswXS5leHBvcnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJvb3REb21haW4ocmVxdWVzdDogc3RyaW5nKSB7XG4gICAgICAgIGxldCB1cmwgPSBuZXcgVVJMKHJlcXVlc3QpO1xuICAgICAgICBsZXQgb3JpZ2luID0gdXJsLm9yaWdpbjtcbiAgICAgICAgLy8gRml4IHN0dXBpZCA6NDQzIGVyYXN1cmUgKG90aGVyIHBvcnRzIGFyZW4ndCBlcmFzZWQsIGV4Y2VwdCA4MCwgYnV0IHdlJ2xsIG5ldmVyIHVzZSBIVFRQLFxuICAgICAgICAvLyAgc28gdGhhdCdzIGZpbmUpLlxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgcmVtYWluaW5nID0gcmVxdWVzdC5zbGljZShvcmlnaW4ubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmcuc3RhcnRzV2l0aChcIjo0NDMvXCIpKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luICs9IFwiOjQ0M1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmlnaW4gKyBcIi9cIjtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByb290UmVxdWlyZU11bHRpcGxlKHJlcXVlc3RzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNpbXBvcnQoJHtyZXF1ZXN0cy5qb2luKFwiLCBcIil9KSBhdCAke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXNgLCBcImNvbG9yOiBvcmFuZ2VcIik7XG5cbiAgICAgICAgbGV0IHRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIGxldCBhbHJlYWR5SGF2ZVJhbmdlcztcbiAgICAgICAgaWYgKGFscmVhZHlIYXZlKSB7XG4gICAgICAgICAgICBsZXQgc2VxTnVtcyA9IE9iamVjdC5rZXlzKGFscmVhZHlIYXZlLnNlcU51bXMpLm1hcCgoeCkgPT4gK3gpO1xuICAgICAgICAgICAgc2VxTnVtcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgICAgICBsZXQgc2VxTnVtUmFuZ2VzOiB7IHM6IG51bWJlcjsgZT86IG51bWJlciB9W10gPSBbXTtcbiAgICAgICAgICAgIGFscmVhZHlIYXZlUmFuZ2VzID0geyByZXF1aXJlU2VxTnVtUHJvY2Vzc0lkOiBhbHJlYWR5SGF2ZS5yZXF1aXJlU2VxTnVtUHJvY2Vzc0lkLCBzZXFOdW1SYW5nZXMgfTtcbiAgICAgICAgICAgIGZvciAobGV0IHNlcU51bSBvZiBzZXFOdW1zKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByZXYgPSBzZXFOdW1SYW5nZXNbc2VxTnVtUmFuZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2Py5lID09PSBzZXFOdW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5lKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VxTnVtUmFuZ2VzLnB1c2goeyBzOiBzZXFOdW0sIGU6IHNlcU51bSArIDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgcmFuZ2Ugb2Ygc2VxTnVtUmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlLnMgKyAxID09PSByYW5nZS5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByYW5nZS5lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkb21haW5PcmlnaW4gPSBcIlwiO1xuICAgICAgICBsZXQgb3JpZ2luYWxSZXF1ZXN0cyA9IHJlcXVlc3RzO1xuICAgICAgICBpZiAocmVxdWVzdHMuc29tZSh4ID0+IHguc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSkge1xuICAgICAgICAgICAgcmVxdWVzdHMgPSByZXF1ZXN0cy5tYXAoKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3Quc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWl4ZWQgZG9tYWlucyB3aXRoIG5vbi1kb21haW4gcmVxdWVzdHMgaXMgbm90IHN1cHBvcnRlZCBwcmVzZW50bHkuIFJlcXVlc3RzOiAke3JlcXVlc3RzLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBvcmlnaW4gPSBnZXRSb290RG9tYWluKHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGlmIChkb21haW5PcmlnaW4gJiYgZG9tYWluT3JpZ2luICE9PSBvcmlnaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSWYgdGhpcyBoYXBwZW5zLCB3ZSBjYW4gcHJvYmFibHkganVzdCBzcGxpdCB0aGUgY2FsbCB1cCBpbnRvIG11bHRpcGxlIGNhbGxzP1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1peGVkIGRvbWFpbnMgaW4gcmVxdWlyZSBjYWxsIGlzIG5vdCBzdXBwb3J0ZWQgcHJlc2VudGx5LiBSZXF1ZXN0czogJHtyZXF1ZXN0cy5qb2luKFwiIHwgXCIpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb21haW5PcmlnaW4gPSBvcmlnaW47XG4gICAgICAgICAgICAgICAgLy8gQnkgc3RyaXBwaW5nIGJ5IGxlbmd0aCwgd2UgY2FuIHR1cm4gaHR0cHM6Ly9leGFtcGxlLmNvbS8uL3Rlc3QgPT4gXCIuL3Rlc3RcIlxuICAgICAgICAgICAgICAgIC8vICAod2hlcmUgYXMgaWYgd2UgdXNlZCBwYXRobmFtZSwgaXQgd291bGQgdHVybiBpbnRvIFwiL3Rlc3RcIlxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LnNsaWNlKGRvbWFpbk9yaWdpbi5sZW5ndGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYXJnczogR2V0TW9kdWxlc0FyZ3MgPSBbcmVxdWVzdHMsIGFscmVhZHlIYXZlUmFuZ2VzXTtcbiAgICAgICAgLy8gV2UgaGF2ZSB0byBhZGQgaGFyZGNvZGVkIHN1cHBvcnQgZm9yIGRyb3BwZXJtaXNzaW9ucywgYmVjYXVzZS4uLiB0aGlzIGNhbGxcbiAgICAgICAgLy8gIGRvZXNuJ3QgaGF2ZSB0aGUgY29udmVudGlvbmFsIHBlcnNpc3RlZCBjb2RlIHNlbmRpbmcgY29kZSwgYmVjYXVzZS4uLiBpdCdzXG4gICAgICAgIC8vICBhbGwgb24gaXRzIG93bi5cbiAgICAgICAgbGV0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgaWYgKHNlYXJjaFBhcmFtcy5nZXQoXCJkcm9wcGVybWlzc2lvbnNcIikgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXF1ZXN0VXJsQmFzZSA9IGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgICBpZiAoZG9tYWluT3JpZ2luKSB7XG4gICAgICAgICAgICByZXF1ZXN0VXJsQmFzZSA9IGRvbWFpbk9yaWdpbjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVxdWVzdFVybCA9IHJlcXVlc3RVcmxCYXNlICsgYD9jbGFzc0d1aWQ9UmVxdWlyZUNvbnRyb2xsZXItZTJmODExZjMtMTRiOC00NzU5LWIwZDYtNzNmMTQ1MTZjZjFkJmZ1bmN0aW9uTmFtZT1nZXRNb2R1bGVzYDtcblxuICAgICAgICBsZXQgcmVtYXBJbXBvcnRSZXF1ZXN0c0NsaWVudHNpZGUgPSBnbG9iYWxUaGlzLnJlbWFwSW1wb3J0UmVxdWVzdHNDbGllbnRzaWRlO1xuICAgICAgICBpZiAocmVtYXBJbXBvcnRSZXF1ZXN0c0NsaWVudHNpZGUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGZuYyBvZiByZW1hcEltcG9ydFJlcXVlc3RzQ2xpZW50c2lkZSkge1xuICAgICAgICAgICAgICAgIGFyZ3MgPSBhd2FpdCBmbmMoYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJhd1RleHQgPSBhd2FpdCByZXF1ZXN0VGV4dChyZXF1ZXN0VXJsLCB7IGFyZ3MgfSk7XG4gICAgICAgIGxldCByZXN1bHRPYmo6IHtcbiAgICAgICAgICAgIG1vZHVsZXM6IHsgW2lkOiBzdHJpbmddOiBTZXJpYWxpemVkTW9kdWxlIH07XG4gICAgICAgICAgICByZXF1ZXN0c1Jlc29sdmVkUGF0aHM6IHN0cmluZ1tdO1xuICAgICAgICAgICAgcmVxdWlyZVNlcU51bVByb2Nlc3NJZDogc3RyaW5nO1xuICAgICAgICAgICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHRPYmogPSBKU09OLnBhcnNlKHJhd1RleHQpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWlyZSgke0pTT04uc3RyaW5naWZ5KHJlcXVlc3RzKX0pLiBMaWtlbHkgYSBwZXJtaXNzaW9ucyBlcnJvciwgcG9zc2libHkgZml4ZWQgYnkgcmVzdGFydGluZyB0aGUgbG9jYWwgaHR0cCBzZXJ2ZXIuIFN0YXJ0IG9mIHJlc3BvbnNlIHdhczogJHtKU09OLnN0cmluZ2lmeShyYXdUZXh0LnNsaWNlKDAsIDEwMCkpfS4gRXJyb3IgaXM6ICR7ZS5zdGFja31gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeyBtb2R1bGVzLCByZXF1ZXN0c1Jlc29sdmVkUGF0aHMsIHJlcXVpcmVTZXFOdW1Qcm9jZXNzSWQsIGVycm9yIH0gPSByZXN1bHRPYmo7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JPYmogPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIGVycm9yT2JqLnN0YWNrID0gZXJyb3I7XG4gICAgICAgICAgICB0aHJvdyBlcnJvck9iajtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1vZHVsZXMpLmxlbmd0aCA9PT0gMSAmJiBcIlwiIGluIG1vZHVsZXMpIHtcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgICAgZXZhbChtb2R1bGVzW1wiXCJdLnNvdXJjZSB8fCBcIlwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZpbmQgbW9kdWxlcyBmb3IgJHtvcmlnaW5hbFJlcXVlc3RzLmpvaW4oXCIsIFwiKX0gKG1hcHBlZCB0byAke3JlcXVlc3RzLmpvaW4oXCIsIFwiKX0pYCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmIChkb21haW5PcmlnaW4pIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZpeERvbWFpbihyZXF1ZXN0OiBzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3QpIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgICAgIHJldHVybiBkb21haW5PcmlnaW4gKyByZXF1ZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdHMgPSByZXF1ZXN0cy5tYXAoZml4RG9tYWluKTtcbiAgICAgICAgICAgIGZvciAobGV0IFtpZCwgbW9kdWxlXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtb2R1bGVzW2lkXTtcbiAgICAgICAgICAgICAgICBtb2R1bGVzW2ZpeERvbWFpbihpZCldID0gbW9kdWxlO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5maWxlbmFtZSA9IGZpeERvbWFpbihtb2R1bGUuZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5yZXF1ZXN0cyA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhtb2R1bGUucmVxdWVzdHMpLm1hcCgoW2ssIHZdKSA9PiBbaywgZml4RG9tYWluKHYpXSkpO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5vcmlnaW5hbElkID0gZml4RG9tYWluKG1vZHVsZS5vcmlnaW5hbElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3RzUmVzb2x2ZWRQYXRocyA9IHJlcXVlc3RzUmVzb2x2ZWRQYXRocy5tYXAoZml4RG9tYWluKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcm9vdFJlc29sdmVDYWNoZVtyZXF1ZXN0c1tpXV0gPSByZXF1ZXN0c1Jlc29sdmVkUGF0aHNbaV07XG4gICAgICAgIH1cblxuICAgICAgICBnbG9iYWxUaGlzLm9uUHJvZ3Jlc3NIYW5kbGVyPy4oe1xuICAgICAgICAgICAgdHlwZTogXCJDb21waWxlXCIsXG4gICAgICAgICAgICBhZGRWYWx1ZTogMCxcbiAgICAgICAgICAgIGFkZE1heDogT2JqZWN0LmtleXMobW9kdWxlcykubGVuZ3RoLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTdG9yZSB0aGUgZnVuY3Rpb24sIHNvIHdlIG9ubHkgY2FsbCBpdCBpZiBpdCBleGlzdHMgQkVGT1JFIHdlIGltcG9ydFxuICAgICAgICAvLyAgKHdoaWNoIG1lYW5zIHdlIGFscmVhZHkgaGF2ZSBzb21ldGhpbmcgbG9hZGluZywgc28gdGhpcyBpcyBsaWtlbHkgaG90IHJlbG9hZGluZy4uLilcbiAgICAgICAgbGV0IG9ic2VydmVyT25Ib3RSZWxvYWQgPSBnLm9ic2VydmVyT25Ib3RSZWxvYWQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9ic2VydmVyT25Ib3RSZWxvYWQpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlck9uSG90UmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuXG4gICAgICAgIHRpbWUgPSBEYXRlLm5vdygpIC0gdGltZTtcbiAgICAgICAgbGV0IG1vZHVsZUNvdW50ID0gT2JqZWN0LnZhbHVlcyhtb2R1bGVzKS5maWx0ZXIoKHgpID0+IHguc291cmNlKS5sZW5ndGg7XG4gICAgICAgIGxldCByZXF1aXJlTW9kdWxlQ291bnQgPSBPYmplY3QudmFsdWVzKG1vZHVsZXMpLmZpbHRlcigoeCkgPT4gIXguc291cmNlKS5sZW5ndGg7XG4gICAgICAgIGxldCBkZXBlbmRlbmNpZXNPbmx5VGV4dCA9IHJlcXVpcmVNb2R1bGVDb3VudCA/IGAgKCske3JlcXVpcmVNb2R1bGVDb3VudH0gZGVwZW5kZW5jaWVzIG9ubHkpYCA6IFwiXCI7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCVjaW1wb3J0KCR7cmVxdWVzdHMuam9pbihcIiwgXCIpfSkgZmluaXNoZWQgZG93bmxvYWQgJHt0aW1lLnRvRml4ZWQoMCl9bXMsICR7TWF0aC5jZWlsKFxuICAgICAgICAgICAgICAgIHJhd1RleHQubGVuZ3RoIC8gMTAyNFxuICAgICAgICAgICAgKX1LQiwgJHttb2R1bGVDb3VudH0gbW9kdWxlcyR7ZGVwZW5kZW5jaWVzT25seVRleHR9IGF0ICR7KERhdGUubm93KCkgLSBzdGFydFRpbWUpLnRvRml4ZWQoMCl9bXNgLFxuICAgICAgICAgICAgXCJjb2xvcjogbGlnaHRncmVlblwiXG4gICAgICAgICk7XG5cblxuXG4gICAgICAgIGlmIChhbHJlYWR5SGF2ZT8ucmVxdWlyZVNlcU51bVByb2Nlc3NJZCAhPT0gcmVxdWlyZVNlcU51bVByb2Nlc3NJZCkge1xuICAgICAgICAgICAgYWxyZWFkeUhhdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgYWxyZWFkeUhhdmUgPSBhbHJlYWR5SGF2ZSB8fCB7IHJlcXVpcmVTZXFOdW1Qcm9jZXNzSWQsIHNlcU51bXM6IHt9IH07XG5cbiAgICAgICAgZm9yIChsZXQgaWQgaW4gbW9kdWxlcykge1xuICAgICAgICAgICAgbGV0IG1vZHVsZSA9IG1vZHVsZXNbaWRdO1xuICAgICAgICAgICAgYWxyZWFkeUhhdmUuc2VxTnVtc1ttb2R1bGUuc2VxTnVtXSA9IDE7XG4gICAgICAgICAgICBzZXJpYWxpemVkTW9kdWxlc1tpZF0gPSBtb2R1bGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IGxhc3RXYWl0VGltZSA9IHRpbWU7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhtb2R1bGVzKSkge1xuICAgICAgICAgICAgZ2V0TW9kdWxlKGtleSwgXCJwcmVsb2FkXCIpO1xuICAgICAgICAgICAgLy8gV2FpdCwgc28gd2UgY2FuIHJlbmRlciBwcm9ncmVzcyAoYW5kIGluIGdlbmVyYWxzLCBzbyB0aGUgVUkgcmVtYWlucyBzb21ld2hhdCByZXNwb25zaXZlKVxuICAgICAgICAgICAgaWYgKERhdGUubm93KCkgLSBsYXN0V2FpdFRpbWUgPiAxMCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7XG4gICAgICAgICAgICAgICAgbGFzdFdhaXRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRpbWUgPSBEYXRlLm5vdygpIC0gdGltZTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgJWNpbXBvcnQoJHtyZXF1ZXN0cy5qb2luKFwiLCBcIil9KSBmaW5pc2hlZCBjb21waWxlICR7dGltZS50b0ZpeGVkKDApfW1zICgke21vZHVsZUNvdW50fSBtb2R1bGVzKSBhdCAkeyhEYXRlLm5vdygpIC0gc3RhcnRUaW1lKS50b0ZpeGVkKDApfW1zYCxcbiAgICAgICAgICAgIFwiY29sb3I6IGhvdHBpbmtcIlxuICAgICAgICApO1xuXG5cbiAgICAgICAgZ2xvYmFsVGhpcy5vblByb2dyZXNzSGFuZGxlcj8uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiRXZhbHVhdGVcIixcbiAgICAgICAgICAgIGFkZFZhbHVlOiAwLFxuICAgICAgICAgICAgYWRkTWF4OiBPYmplY3Qua2V5cyhtb2R1bGVzKS5sZW5ndGgsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RzUmVzb2x2ZWRQYXRocy5tYXAoKHgpID0+IGdldE1vZHVsZSh4KSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aW1lID0gRGF0ZS5ub3coKSAtIHRpbWU7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBgJWNpbXBvcnQoJHtyZXF1ZXN0cy5qb2luKFwiLCBcIil9KSBmaW5pc2hlZCBldmFsdWF0ZSAke3RpbWUudG9GaXhlZCgwKX1tcyAoJHttb2R1bGVDb3VudH0gbW9kdWxlcykgYXQgJHsoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkudG9GaXhlZCgwKX1tc2AsXG4gICAgICAgICAgICAgICAgXCJjb2xvcjogbGlnaHRibHVlXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVSZXF1aXJlKG1vZHVsZTogTW9kdWxlVHlwZSwgc2VyaWFsaXplZE1vZHVsZTogU2VyaWFsaXplZE1vZHVsZSwgYXN5bmNJc0ZpbmVPdXRlcj86IGJvb2xlYW4pIHtcbiAgICAgICAgcmVxdWlyZS5jYWNoZSA9IG1vZHVsZUNhY2hlO1xuICAgICAgICAvLyBEeW5hbWljYWxseSBnZXQgZm9sZGVyLCBpbmNhc2Ugb3VyIGZpbGVuYW1lIGNoYW5nZXNcbiAgICAgICAgZnVuY3Rpb24gZ2V0TW9kdWxlRm9sZGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5maWxlbmFtZS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIvXCIpICsgXCIvXCI7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZShyZXF1ZXN0OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0cyA9IHNlcmlhbGl6ZWRNb2R1bGUucmVxdWVzdHM7XG4gICAgICAgICAgICBpZiAocmVxdWVzdCBpbiByZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0c1tyZXF1ZXN0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhYnNvbHV0ZVBhdGggPSByZXF1ZXN0O1xuICAgICAgICAgICAgaWYgKGFic29sdXRlUGF0aC5zdGFydHNXaXRoKFwiLi9cIikgfHwgYWJzb2x1dGVQYXRoLnN0YXJ0c1dpdGgoXCIuLi9cIikpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9sZGVyUGFydHMgPSBnZXRNb2R1bGVGb2xkZXIoKS5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGFic29sdXRlUGF0aC5zdGFydHNXaXRoKFwiLi9cIikgfHwgYWJzb2x1dGVQYXRoLnN0YXJ0c1dpdGgoXCIuLi9cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFic29sdXRlUGF0aC5zdGFydHNXaXRoKFwiLi9cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlUGF0aCA9IGFic29sdXRlUGF0aC5zbGljZShcIi4vXCIubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlclBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVQYXRoID0gYWJzb2x1dGVQYXRoLnNsaWNlKFwiLi4vXCIubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhYnNvbHV0ZVBhdGggPSBmb2xkZXJQYXJ0cy5qb2luKFwiL1wiKSArIFwiL1wiICsgYWJzb2x1dGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgdXNlIHRoZSBzYW1lIGRvbWFpblxuICAgICAgICAgICAgaWYgKCFhYnNvbHV0ZVBhdGguc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgYWJzb2x1dGVQYXRoID0gbWFpblJvb3RPcmlnaW4gKyBhYnNvbHV0ZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVpcmUucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIHJldHVybiByZXF1aXJlO1xuICAgICAgICBmdW5jdGlvbiByZXF1aXJlKHJlcXVlc3Q6IHN0cmluZywgYXN5bmNJc0ZpbmU/OiBib29sZWFuKSB7XG4gICAgICAgICAgICBpZiAoYXN5bmNJc0ZpbmVPdXRlcikge1xuICAgICAgICAgICAgICAgIGFzeW5jSXNGaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXN5bmNJc0ZpbmUgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgYXN5bmNJc0ZpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0IGluIHNlcmlhbGl6ZWRNb2R1bGUuYXN5bmNSZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgIGFzeW5jSXNGaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0IGluIGJ1aWx0SW5Nb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWx0SW5Nb2R1bGVFeHBvcnRzW3JlcXVlc3QgYXMga2V5b2YgdHlwZW9mIGJ1aWx0SW5Nb2R1bGVFeHBvcnRzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGFic29sdXRlUGF0aCA9IHJlc29sdmUocmVxdWVzdCk7XG5cbiAgICAgICAgICAgIGxldCByZXNvbHZlZFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0IGluIG1vZHVsZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVxdWVzdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzb2x1dGVQYXRoIGluIG1vZHVsZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gYWJzb2x1dGVQYXRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIShyZXF1ZXN0IGluIHNlcmlhbGl6ZWRNb2R1bGUucmVxdWVzdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXN5bmNJc0ZpbmUgJiYgIWdsb2JhbFRoaXMuc3VwcHJlc3NVbmV4cGVjdGVkTW9kdWxlV2FybmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBY2Nlc3NlZCB1bmV4cGVjdGVkIG1vZHVsZSAlYyR7cmVxdWVzdH0lYyBpbiAlYyR7bW9kdWxlLmlkfSVjXFxuXFx0VHJlYXRpbmcgaXQgYXMgYW4gYXN5bmMgcmVxdWlyZS5cXG5cXHRBbGwgbW9kdWxlcyByZXF1aXJlIHN5bmNocm9ub3VzbHkgY2xpZW50c2lkZSBtdXN0IGJlIHJlcXVpcmVkIHNlcnZlcnNpZGUgYXQgYSBtb2R1bGUgbGV2ZWwuIEV4cGVjdGVkIGltcG9ydHM6ICR7T2JqZWN0LmtleXMoc2VyaWFsaXplZE1vZHVsZS5yZXF1ZXN0cykuam9pbihcIiB8IFwiKX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3I6IHJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3I6IHVuc2V0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvcjogcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvcjogdW5zZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdFJlcXVpcmUoYWJzb2x1dGVQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBCdWlsdCBpbiBtb2R1bGVzIHRoYXQgd2UgaGF2ZW4ndCBiZWVuIGltcGxlbWVudGVkXG4gICAgICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZWRNb2R1bGUucmVxdWVzdHNbcmVxdWVzdF0gPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHNlcmlhbGl6ZWRNb2R1bGUucmVxdWVzdHNbcmVxdWVzdF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzb2x2ZWRQYXRoICE9PSBcIk5PVEFMTE9XRURDTElFTlRTSURFXCIgJiYgIXNlcmlhbGl6ZWRNb2R1bGVzW3Jlc29sdmVkUGF0aF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWFzeW5jSXNGaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBBY2Nlc3NlZCB1bmV4cGVjdGVkIG1vZHVsZSAlYyR7cmVxdWVzdH0lYyBpbiAlYyR7bW9kdWxlLmlkfSVjXFxuXFx0VHJlYXRpbmcgaXQgYXMgYW4gYXN5bmMgcmVxdWlyZS5cXG5cXHRBbGwgbW9kdWxlcyByZXF1aXJlIHN5bmNocm9ub3VzbHkgY2xpZW50c2lkZSBtdXN0IGJlIHJlcXVpcmVkIHNlcnZlcnNpZGUgYXQgYSBtb2R1bGUgbGV2ZWwuIEV4cGVjdGVkIGltcG9ydHM6ICR7T2JqZWN0LmtleXMoc2VyaWFsaXplZE1vZHVsZS5yZXF1ZXN0cykuam9pbihcIiB8IFwiKX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvcjogcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yOiB1bnNldFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvcjogcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yOiB1bnNldFwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByb290UmVxdWlyZShyZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZXhwb3J0c092ZXJyaWRlOiB1bmtub3duIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHJlc29sdmVkUGF0aCA9PT0gXCJOT1RBTExPV0VEQ0xJRU5UU0lERVwiIHx8ICFzZXJpYWxpemVkTW9kdWxlc1tyZXNvbHZlZFBhdGhdPy5hbGxvd2NsaWVudCkge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZElkID0gcmVzb2x2ZWRQYXRoID09PSBcIk5PVEFMTE9XRURDTElFTlRTSURFXCIgPyByZXF1ZXN0IDogcmVzb2x2ZWRQYXRoO1xuICAgICAgICAgICAgICAgIGlmIChzZXJpYWxpemVkTW9kdWxlc1tyZXNvbHZlZFBhdGhdPy5zZXJ2ZXJvbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHNPdmVycmlkZSA9IG5ldyBQcm94eShcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCh0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFJldHVybiBhIHRvU3RyaW5nIHRoYXQgZXZhbHVhdGVzIHRvIFwiXCIgc28gd2UgY2FuIEVYUExJQ0lUTFkgZGV0ZWN0IG5vbi1sb2FkZWQgbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgPT09IHVubG9hZGVkTW9kdWxlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSBcImRlZmF1bHRcIikgcmV0dXJuIGV4cG9ydHNPdmVycmlkZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgTW9kdWxlICR7Y2hpbGRJZH0gaXMgc2VydmVyc2lkZSBvbmx5LiBUcmllZCB0byBhY2Nlc3MgJHtTdHJpbmcocHJvcGVydHkpfSBmcm9tICR7bW9kdWxlLmlkfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHNPdmVycmlkZSA9IG5ldyBQcm94eShcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCh0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFJldHVybiBhIHRvU3RyaW5nIHRoYXQgZXZhbHVhdGVzIHRvIFwiXCIgc28gd2UgY2FuIEVYUExJQ0lUTFkgZGV0ZWN0IG5vbi1sb2FkZWQgbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgPT09IHVubG9hZGVkTW9kdWxlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSBcImRlZmF1bHRcIikgcmV0dXJuIGV4cG9ydHNPdmVycmlkZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IFwibm9uLXdoaXRlbGlzdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VyaWFsaXplZE1vZHVsZXNbcmVzb2x2ZWRQYXRoIV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBcIm1pc3NpbmcgbW9kdWxlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQWNjZXNzZWQgJHt0eXBlfSBtb2R1bGUgJWMke2NoaWxkSWR9JWMsIHNwZWNpZmljYWxseSBwcm9wZXJ0eSAlYyR7U3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfSVjLlxcblxcdEFkZCAlY21vZHVsZS5hbGxvd2NsaWVudCA9IHRydWUlYyB0byB0aGUgZmlsZSB0byBhbGxvdyBhY2Nlc3MuXFxuXFx0KElGIGl0IGlzIGEgM3JkIHBhcnR5IGxpYnJhcnksIHVzZSB0aGUgZ2xvYmFsIFwic2V0RmxhZ1wiIGhlbHBlciAoaW4gdGhlIGZpbGUgeW91IGltcG9ydGVkIHRoZSBtb2R1bGUpIHRvIHNldCBwcm9wZXJ0aWVzIG9uIG90aGVyIG1vZHVsZXMgKGl0IGNhbiBldmVuIHJlY3Vyc2l2ZWx5IHNldCBwcm9wZXJ0aWVzKSkuXFxuXFxuXFx0RnJvbSAke21vZHVsZS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yOiByZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3I6IHVuc2V0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yOiByZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3I6IHVuc2V0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yOiByZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3I6IHVuc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc29sdmVkUGF0aCA9PT0gXCJOT1RBTExPV0VEQ0xJRU5UU0lERVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHNPdmVycmlkZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHByb3ZpZGVyTW9kdWxlID0gZ2V0TW9kdWxlKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICBtb2R1bGUuY2hpbGRyZW4ucHVzaChwcm92aWRlck1vZHVsZSk7XG4gICAgICAgICAgICBpZiAoZXhwb3J0c092ZXJyaWRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlck1vZHVsZS5leHBvcnRzID0gZXhwb3J0c092ZXJyaWRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZXhwb3J0cyA9IHByb3ZpZGVyTW9kdWxlLmV4cG9ydHM7XG4gICAgICAgICAgICBsZXQgcmVtYXBFeHBvcnRzID0gcHJvdmlkZXJNb2R1bGUucmVtYXBFeHBvcnRzO1xuICAgICAgICAgICAgaWYgKHJlbWFwRXhwb3J0cyAmJiB0eXBlb2YgcmVtYXBFeHBvcnRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBleHBvcnRzID0gcmVtYXBFeHBvcnRzKGV4cG9ydHMsIG1vZHVsZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdlbmVyYXRlcyB0aGUgbW9kdWxlIHJvb3QgZnVuY3Rpb24sIHdoaWNoIGNhbiBiZSBjYWxsZWQgdG8gZXZhbHVhdGUgdGhlIG1vZHVsZSxcbiAgICAgKiAgICAgIGFuZCBoYXMgY29kZSBlcXVhbCB0byBjb250ZW50cy5cbiAgICAgKiAgICAgIC0gZmlsZW5hbWUgaXMganVzdCBmb3IgZGVidWdnaW5nIC8gc3RhY2sgdHJhY2VzXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcFNhZmUoZmlsZW5hbWU6IHN0cmluZywgY29udGVudHM6IHN0cmluZykge1xuICAgICAgICAvLyBUT0RPOiBIYXZlIHRoZSBzZXJ2ZXJzaWRlIGluZm9ybSB1cyBvZiB0aGUgY29ycmVjdCBsb2FkZXIsIG9yLi4uIGhhdmUgaXQgYWN0dWFsbHkgZW1pdCBhIC5qc29uIGxvYWRlci5cbiAgICAgICAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgIHJldHVybiAoZXhwb3J0czogdW5rbm93biwgcmVxdWlyZTogdW5rbm93biwgbW9kdWxlOiBNb2R1bGVUeXBlKSA9PiAobW9kdWxlLmV4cG9ydHMgPSBjb250ZW50cyAmJiBKU09OLnBhcnNlKGNvbnRlbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOT1RFOiBkZWJ1Z05hbWUgb25seSBtYXR0ZXJzIGR1cmluZyBtb2R1bGUgZXZhbHVhdGlvbi4gQWZ0ZXIgdGhhdCB0aGUgc291cmNlbWFwIHNob3VsZCB3b3JrLlxuICAgICAgICBsZXQgZGVidWdOYW1lID0gZmlsZW5hbWVcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKVxuICAgICAgICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgICAgICAgLnNsaWNlKC0xKVswXVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLi9nLCBcIl9cIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXmEtekEtWl9dL2csIFwiXCIpO1xuICAgICAgICAvLyBOT1RFOiBldmFsIGlzIHVzZWQgaW5zdGVhZCBvZiBuZXcgRnVuY3Rpb24sIGFzIG5ldyBGdW5jdGlvbiBpbmplY3QgbGluZXMsIHdoaWNoIG1lc3Nlc1xuICAgICAgICAvLyAgdXAgb3VyIHNvdXJjZW1hcHMuXG4gICAgICAgIC8vIE5PVEU6IEFsbCBvbiBvbmUgbGluZSwgc28gd2UgZG9uJ3QgYnJlYWsgc291cmNlbWFwcyBieSBUT08gbXVjaC4gV2UgY291bGQgYWxzbyBwYXJzZVxuICAgICAgICAvLyAgdGhlIHNvdXJjZW1hcCBhbmQgYWRqdXN0IGl0LCBidXQuLi4gaXQgaXMgbXVjaCBlYXNpZXIgdG8ganVzdCBub3QgY2hhbmdlIHRoZSBsaW5lIGNvdW50cy5cbiAgICAgICAgcmV0dXJuIGV2YWwoXG4gICAgICAgICAgICBgKGZ1bmN0aW9uICR7ZGVidWdOYW1lfShleHBvcnRzLCByZXF1aXJlLCBtb2R1bGUsIF9fZmlsZW5hbWUsIF9fZGlybmFtZSwgaW1wb3J0RHluYW1pYykge1widXNlIHN0cmljdFwiOyR7Y29udGVudHN9XFxuIH0pYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHVubG9hZGVkTW9kdWxlID0gU3ltYm9sKFwidW5sb2FkZWRNb2R1bGVcIik7XG5cbiAgICBsZXQgY3VycmVudE1vZHVsZUV2YWx1YXRpb25TdGFjazogc3RyaW5nW10gPSBbXTtcbiAgICAvLyBTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9tb2R1bGVzLmh0bWxcbiAgICBmdW5jdGlvbiBnZXRNb2R1bGUocmVzb2x2ZWRJZDogc3RyaW5nLCBwcmVsb2FkPzogXCJwcmVsb2FkXCIpOiBNb2R1bGVUeXBlIHtcbiAgICAgICAgaWYgKHJlc29sdmVkSWQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBNb2R1bGVUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNvbHZlZElkIGluIG1vZHVsZUNhY2hlKSB7XG4gICAgICAgICAgICBsZXQgbW9kdWxlID0gbW9kdWxlQ2FjaGVbcmVzb2x2ZWRJZF07XG4gICAgICAgICAgICBpZiAoIXByZWxvYWQgJiYgIW1vZHVsZS5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBtb2R1bGUubG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZXJpYWxpemVkTW9kdWxlID0gc2VyaWFsaXplZE1vZHVsZXNbcmVzb2x2ZWRJZF07XG4gICAgICAgIGlmICghc2VyaWFsaXplZE1vZHVsZSkge1xuICAgICAgICAgICAgLy8gSSBjYW4ndCBmaWd1cmUgb3V0IHdoeSB0aGlzIGhhcHBlbnMgYXMgaXQgc2VlbXMgdG8gaGFwcGVuIHZlcnkgcmFyZWx5IGFuZCBvbmx5IHdoZW4gSSdtIGRlYnVnZ2luZyBvdGhlciBjb2RlLlxuICAgICAgICAgICAgLy8gIC0gSSBoYXZlIGhhZCBpdCBoYXBwZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgc3RhcnRpbmcgdGhlIGFwcC4gQWx0aG91Z2ggaW4gdGhlb3J5IGEgaG90IHJlbG9hZCBjb3VsZCBoYXZlXG4gICAgICAgICAgICAvLyAgICAgIHRyaWdnZXJlZCBkdWUgdG8gVlMgY29kZSB3cml0aW5nIHRvIGEgZmlsZS4gXG4gICAgICAgICAgICAvLyAgLSBJJ3ZlIGhhZCB0aW1lcyB3aGVuIGl0IGhhcHBlbnMgb25jZSBhZnRlciBzdGFydHVwIGFuZCB0aGVuIGl0IGdvZXMgYXdheSBhbmQgb3RoZXIgdGltZXMgd2hlcmUgaXRcbiAgICAgICAgICAgIC8vICAgICAgaGFwcGVucyBldmVyeSBzaW5nbGUgdGltZSBhbmQgbmV2ZXIgZ29lcyBhd2F5IHVudGlsIEkgcmVzdGFydCBhaXBhaW50LlxuICAgICAgICAgICAgLy8gIC0gTWF5YmUgaXQgaGFwcGVucyBpZiB3ZSBzd2l0Y2ggc2VydmVycyBhbmQgc28gdGhlIHJvb3QgcGF0aHMgYXJlIGRpZmZlcmVudCBpbiBzb21lIHdheT9cbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gZmluZCBtb2R1bGUgJHtyZXNvbHZlZElkfS4gVGhlIHNlcnZlciBzaG91bGQgaGF2ZSBnaXZlbiBhbiBlcnJvciBhYm91dCB0aGlzLmAsIHNlcmlhbGl6ZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpIGFzIE1vZHVsZVR5cGU7XG4gICAgICAgIG1vZHVsZUNhY2hlW3Jlc29sdmVkSWRdID0gbW9kdWxlO1xuICAgICAgICBtb2R1bGUuaWQgPSByZXNvbHZlZElkO1xuICAgICAgICBtb2R1bGUuZmlsZW5hbWUgPSBzZXJpYWxpemVkTW9kdWxlPy5maWxlbmFtZSB8fCBcIlwiO1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuICAgICAgICAvLyBEZWZhdWx0IGRlZmF1bHQgb2YgZXhwb3J0cyB0byB0aGUgZXhwb3J0cyBpdHNlbGZcbiAgICAgICAgKG1vZHVsZS5leHBvcnRzIGFzIGFueSkuZGVmYXVsdCA9IG1vZHVsZS5leHBvcnRzO1xuICAgICAgICBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHNlcmlhbGl6ZWRNb2R1bGU/LmZsYWdzIHx8IHt9KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBcImxvYWRlZFwiKSBjb250aW51ZTtcbiAgICAgICAgICAgIChtb2R1bGUgYXMgYW55KVtrZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vZHVsZS5sb2FkID0gbG9hZDtcblxuICAgICAgICBsZXQgb3JpZ2luYWxTb3VyY2UgPSBzZXJpYWxpemVkTW9kdWxlPy5zb3VyY2UgfHwgXCJcIjtcbiAgICAgICAgbGV0IG1vZHVsZUZuYyA9IHdyYXBTYWZlKG1vZHVsZS5pZCwgb3JpZ2luYWxTb3VyY2UpO1xuXG4gICAgICAgIGdsb2JhbFRoaXMub25Qcm9ncmVzc0hhbmRsZXI/Lih7XG4gICAgICAgICAgICB0eXBlOiBcIkNvbXBpbGVcIixcbiAgICAgICAgICAgIGFkZFZhbHVlOiAxLFxuICAgICAgICAgICAgYWRkTWF4OiAwLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXByZWxvYWQpIHtcbiAgICAgICAgICAgIG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgbW9kdWxlLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkTW9kdWxlID0gc2VyaWFsaXplZE1vZHVsZXNbcmVzb2x2ZWRJZF07XG4gICAgICAgICAgICBpZiAoIXNlcmlhbGl6ZWRNb2R1bGUpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghbW9kdWxlLmxvYWRlZCkge1xuICAgICAgICAgICAgICAgIG1vZHVsZS5ldmFsdWF0ZVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUhhdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFscmVhZHlIYXZlLnNlcU51bXNbc2VyaWFsaXplZE1vZHVsZS5zZXFOdW1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBUaGVyZSBpcyBhbG1vc3QgbmV2ZXIgYSB3YXkgdG8gcmVjb3ZlciBmcm9tIG1vZHVsZSBkb3dubG9hZGluZyBlcnJvcnMsIHNvIGp1c3QgZG9uJ3QgY2F0Y2ggdGhlbVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiByb290UmVxdWlyZShyZXNvbHZlZElkLCB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTa2lwIGRvdWJsZSBsb2Fkc1xuICAgICAgICAgICAgaWYgKG1vZHVsZS5ldmFsdWF0ZVN0YXJ0ZWQpIHJldHVybjtcblxuICAgICAgICAgICAgbW9kdWxlLm9yaWdpbmFsID0gc2VyaWFsaXplZE1vZHVsZTtcblxuICAgICAgICAgICAgbW9kdWxlLnJlcXVpcmVzID0gc2VyaWFsaXplZE1vZHVsZS5yZXF1ZXN0cztcbiAgICAgICAgICAgIG1vZHVsZS5yZXF1aXJlID0gY3JlYXRlUmVxdWlyZShtb2R1bGUsIHNlcmlhbGl6ZWRNb2R1bGUpIGFzIGFueTtcbiAgICAgICAgICAgIC8vIFRPRE86IE9uY2UgdHlwZXNjcmlwdCBzdXBwb3J0cyBkeW5hbWljIGltcG9ydCwgbWFwIGltcG9ydCgpIHRvIGltcG9ydER5bmFtaWMsIHNvIGl0XG4gICAgICAgICAgICAvLyAgdXNlcyBvdXIgaW1wb3J0IGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHRoZSBidWlsdCBpbiBvbmUuXG4gICAgICAgICAgICAvLyAgKEFzIGFwcGFyZW50bHkgd2UgY2FuJ3QganVzdCBvdmVycmlkZSBpbXBvcnQgb24gYSBwZXIgbW9kdWxlIGJhc2lzLCBiZWNhdXNlXG4gICAgICAgICAgICAvLyAgICAgIHdlIGNhbid0IGhhdmUgYW4gaWRlbnRpZnkgY2FsbGVkIFwiaW1wb3J0XCIuLi4gd2hpY2ggaXMgYW5ub3lpbmcpLlxuICAgICAgICAgICAgbGV0IGltcG9ydER5bmFtaWMgPSBjcmVhdGVSZXF1aXJlKG1vZHVsZSwgc2VyaWFsaXplZE1vZHVsZSwgdHJ1ZSk7XG4gICAgICAgICAgICBtb2R1bGUuaW1wb3J0ID0gaW1wb3J0RHluYW1pYztcblxuICAgICAgICAgICAgbGV0IHNvdXJjZSA9IHNlcmlhbGl6ZWRNb2R1bGUuc291cmNlO1xuXG4gICAgICAgICAgICBtb2R1bGUuYWxsb3djbGllbnQgPSAhIXNlcmlhbGl6ZWRNb2R1bGUuc291cmNlO1xuXG4gICAgICAgICAgICAvLyBJbXBvcnQgY2hpbGRyZW4sIGFzIHRoZSBjaGlsZHJlbiBtYXkgYmUgYWxsb3dlZCBjbGllbnRzaWRlLCBhbmQgbWF5IGhhdmUgc2lkZS1lZmZlY3RzIVxuICAgICAgICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdHMgPSBPYmplY3Qua2V5cyhzZXJpYWxpemVkTW9kdWxlLnJlcXVlc3RzKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4ICE9PSBcIk5PVEFMTE9XRURDTElFTlRTSURFXCIpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+ICEoeCBpbiBzZXJpYWxpemVkTW9kdWxlLmFzeW5jUmVxdWVzdHMpKTtcbiAgICAgICAgICAgICAgICBzb3VyY2UgPSByZXF1ZXN0cy5tYXAoKGlkKSA9PiBgcmVxdWlyZSgke0pTT04uc3RyaW5naWZ5KGlkKX0pO1xcbmApLmpvaW4oXCJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1vZHVsZS5zaXplID0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgIG1vZHVsZS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2UgIT09IG9yaWdpbmFsU291cmNlKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgICAgICAgICAgbW9kdWxlRm5jID0gd3JhcFNhZmUobW9kdWxlLmlkLCBvcmlnaW5hbFNvdXJjZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBkaXJuYW1lID0gbW9kdWxlLmZpbGVuYW1lLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSkuam9pbihcIi9cIik7XG5cbiAgICAgICAgICAgIGxldCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGN1cnJlbnRNb2R1bGVFdmFsdWF0aW9uU3RhY2sucHVzaChtb2R1bGUuZmlsZW5hbWUpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBtb2R1bGUuZXZhbHVhdGVTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBtb2R1bGUuaXNQcmVsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBtb2R1bGUuZXZhbFN0YXJ0VGltZSA9IG5leHRUaW1lKCk7XG4gICAgICAgICAgICAgICAgbW9kdWxlLmV2YWxFbmRUaW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIG1vZHVsZUZuYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBBZGRpbmcgX19pbXBvcnRTdGFyIHRvIHRoZSBtb2R1bGUgY2F1c2VzIHR5cGVzY3JpcHQgdG8gdXNlIG91ciBpbXBsZW1lbnRhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICB3aGljaCBjaGVja3MgZm9yIHVubG9hZGVkTW9kdWxlIGFuZCByZXR1cm5zIHVuZGVmaW5lZCBpbiB0aGF0IGNhc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX2ltcG9ydFN0YXIobW9kOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kW3VubG9hZGVkTW9kdWxlXSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9faW1wb3J0RGVmYXVsdChtb2Q6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QuZGVmYXVsdCA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUucmVxdWlyZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRpcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGltcG9ydER5bmFtaWNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5ldmFsRW5kVGltZSA9IG5leHRUaW1lKCk7XG4gICAgICAgICAgICAgICAgdGltZSA9IERhdGUubm93KCkgLSB0aW1lO1xuICAgICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgbG9nIHN0YXRtZW50IGlzIGRpc2FibGVkIGFzIEkgYmVsaWV2ZSBpdCBjYXVzZXMgbGFnICh3aGVuIGRldnRvb2xzIGlzIG9wZW4pLlxuICAgICAgICAgICAgICAgIC8vICBBcyBpbiwgYWRkaW5nIGFib3V0IDUwMG1zIHRvIG91ciBsb2FkIHRpbWUsIHdoaWNoIGlzIGFubm95aW5nIHdoZW4gZGVidWdnaW5nLlxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhgRXZhbHVhdGVkIG1vZHVsZSAke21vZHVsZS5maWxlbmFtZX0gJHtNYXRoLmNlaWwoc291cmNlLmxlbmd0aCAvIDEwMjQpfUtCYCk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIG1vZHVsZS5pc1ByZWxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlRXZhbHVhdGlvblN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5vblByb2dyZXNzSGFuZGxlcj8uKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJFdmFsdWF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRWYWx1ZTogMSxcbiAgICAgICAgICAgICAgICAgICAgYWRkTWF4OiAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9XG59Il19
|
|
676
|
-
/* _JS_SOURCE_HASH = "
|
|
676
|
+
/* _JS_SOURCE_HASH = "8b62ae4095326884b3f0f0bb2c909023f0e5f36321ed82ce20df500df8e3f2c6"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
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";
|
|
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"; 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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -466,4 +466,4 @@ b"
|
|
|
466
466
|
}
|
|
467
467
|
//generateAndVerifyParser().catch(console.error).finally(() => process.exit());
|
|
468
468
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSlNPTkxBQ0tTLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSlNPTkxBQ0tTLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0Esa0RBQWtIO0FBSWxILDRDQUFvQjtBQUVwQixzRkFBOEM7QUFDOUMsa0NBQTBDO0FBQzFDLG9DQUEyQztBQUMzQywwQ0FBb0M7QUFFcEMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQW9CL0MsMEJBQTBCO0FBQzFCLHdDQUF3QztBQUN4QyxxQkFBcUI7QUFDckIseUdBQXlHO0FBQ3pHLDBDQUEwQztBQUMxQyxnQkFBZ0I7QUFDaEIsOENBQThDO0FBQzlDLDZGQUE2RjtBQUM3RixtREFBbUQ7QUFDbkQsZ0ZBQWdGO0FBQ2hGLE1BQWEsU0FBUztJQU9YLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBWSxFQUFFLE1BQWtDO1FBQ3BFLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCw2RUFBNkU7SUFDdEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBYyxFQUFFLE1BQWtDO1FBQ2hGLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFjLENBQUM7UUFDMUUsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO1lBQ3ZFLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENB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S0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixJQUFJLGNBQWMsVUFBVSxTQUFTLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sQ0FBQzs7OztLQUlOLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQzs7OztLQUlOLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQzs7Ozs7S0FLTixDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMxQixNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUV2QyxNQUFNLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUNsRCxNQUFNLENBQUMsc0RBQXNELENBQUMsQ0FBQztJQUMvRCxNQUFNLENBQUM7Ozs7Ozs7OztLQVNOLENBQUMsQ0FBQztJQUNILGlDQUFpQztJQUNqQyxNQUFNLENBQUM7Ozs7O0tBS04sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV0QyxnQkFBZ0I7SUFDaEIsTUFBTSxDQUFDOzs7O0tBSU4sQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFDRCwrRUFBK0UiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IGVuYWJsZU1lYXN1cmVtZW50cywgbWVhc3VyZUJsb2NrLCBtZWFzdXJlQ29kZSwgbWVhc3VyZUNvZGVTeW5jLCBtZWFzdXJlRm5jIH0gZnJvbSBcIi4uL3Byb2ZpbGluZy9tZWFzdXJlXCI7XG4vLyBlbmFibGVNZWFzdXJlbWVudHMoKTtcblxuaW1wb3J0IGRlYnVnYnJlYWsgZnJvbSBcImRlYnVnYnJlYWtcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcblxuaW1wb3J0IHBhcnNlciBmcm9tIFwiLi9KU09OTEFDS1MuZ2VuZXJhdGVkLmpzXCI7XG5pbXBvcnQgeyByZWN1cnNpdmVGcmVlemUgfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHsgY2FuSGF2ZUNoaWxkcmVuIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCIuLi9iYXRjaGluZ1wiO1xuXG5jb25zdCBTRVJJQUxJWkVfT0JKRUNUX0JBVENIX0NPVU5UID0gMTAwMDtcbmNvbnN0IFBBUlNFX0JZVEVfQ0hVTktfU0laRSA9IDEwMjQgKiAxMDI0ICogMTA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTkxBQ0tTX1BhcnNlQ29uZmlnIHtcbiAgICAvLyBEZWZhdWx0cyB0byB0cnVlLiBFbmFibGVzIHBhcnNpbmcgb2Y6XG4gICAgLy8gIC0gVHJhaWxpbmcgY29tbWFzXG4gICAgLy8gIC0gTm9uLXF1b3RlZCBmaWVsZCBuYW1lcyAoZXgsIFwieyB4OiAxIH1cIilcbiAgICAvLyAgLSBDb21tZW50cyAoc3RyaXBzIHRoZW0sIGJ1dCBkb2Vzbid0IHRocm93KVxuICAgIGV4dGVuZGVkPzogYm9vbGVhbjtcbiAgICBkaXNjYXJkTWlzc2luZ1JlZmVyZW5jZXM/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBKU09OTEFDS1NfU3RyaW5naWZ5Q29uZmlnIHtcbiAgICAvLyBJZiBzcGVjaWZpZWQsIHdlIGFyZSBhbGxvd2VkIHRvIG11dGF0ZSB0aGUgcHJvdmlkZWQgb2JqZWN0LiBTcGVlZHMgdXAgc2VyaWFsaXphdGlvbi5cbiAgICBhbGxvd09iamVjdE11dGF0aW9uPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEh5ZHJhdGVTdGF0ZSB7XG4gICAgcmVmZXJlbmNlczogTWFwPHN0cmluZywgdW5rbm93bj4sXG4gICAgdmlzaXRlZDogU2V0PHVua25vd24+LFxufVxuXG4vLyBTdXBwb3J0cyBqc29uIGFuZCBhbHNvOlxuLy8gIC0gTm9uIHF1b3RlZCBmaWVsZCBuYW1lcyBcInsgeDogMSB9XCI/XG4vLyAgLSBUcmFpbGluZyBjb21tYXNcbi8vICAgICAgTk9URTogQ29tbWEgb25seSBzeW50YXggaXMgbm90IHN1cHBvcnRlZCwgZXgsIFwiWywsXVwiLCB3aGljaCBpcyBhbiBhcnJheSBvZiBsZW5ndGggMiBpbiBqYXZhc2NyaXB0XG4vLyAgLSBDb21tZW50cyBvbiBpbnB1dCwgYnV0IG5vdCBvbiBvdXRwdXRcbi8vICAtIFJlZmVyZW5jZXNcbi8vICAtIEJ1ZmZlcnMgKGp1c3QgQnVmZmVycywgbm90IHR5cGVkIGFycmF5cylcbi8vIFRoZSBzdHJpbmdpZnkgZnVuY3Rpb24gYWx3YXlzIGNyZWF0ZXMgdmFsaWQganNvbiwgYXMgdGhlIHN5bnRheCBmb3IgcmVmZXJlbmNlcyBhbmQgYnVmZmVyc1xuLy8gIHdpbGwganVzdCBiZSBzcGVjaWFsIHByb3BlcnR5IG5hbWVzIGFuZCB2YWx1ZXMuXG4vLyBOT1RFOiBXZSBkb24ndCBzdXBwb3J0IERhdGUgc2VyaWFsaXphdGlvbi4gTmV2ZXIgc3RvcmUgRGF0ZXMsIHN0b3JlIFwibnVtYmVyXCIuXG5leHBvcnQgY2xhc3MgSlNPTkxBQ0tTIHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBQ0tTX0tFWSA9IFwiX19KU09OTEFDS1NfXzk4Y2ZiNGEwNWZhMzRkODI4NjYxY2FlMTViODc3OWNlX19cIjtcblxuICAgIC8qKiBJZiBzZXQgdG8gdHJ1ZSBwYXJzZXMgbm9uLXF1b3RlZCBmaWVsZCBuYW1lcywgY29tbWVudHMsIHRyYWlsaW5nIGNvbW1hcywgZXRjICovXG4gICAgcHVibGljIHN0YXRpYyBFWFRFTkRFRF9QQVJTRVIgPSBmYWxzZTtcbiAgICBwdWJsaWMgc3RhdGljIElHTk9SRV9NSVNTSU5HX1JFRkVSRU5DRVMgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5naWZ5KG9iajogdW5rbm93biwgY29uZmlnPzogSlNPTkxBQ0tTX1N0cmluZ2lmeUNvbmZpZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzZXJpYWxpemVkID0gSlNPTkxBQ0tTLmVzY2FwZVNwZWNpYWxPYmplY3RzKG9iaiwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWQpO1xuICAgIH1cbiAgICAvKiogSXMgdXNlZnVsIHdoZW4gc2VyaWFsaXppbmcgYW4gYXJyYXkgdG8gYSBmaWxlIHdpdGggb25lIG9iamVjdCBwZXIgbGluZSAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgc3RyaW5naWZ5RmlsZShvYmo6IHVua25vd25bXSwgY29uZmlnPzogSlNPTkxBQ0tTX1N0cmluZ2lmeUNvbmZpZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIGxldCBzZXJpYWxpemVkID0gSlNPTkxBQ0tTLmVzY2FwZVNwZWNpYWxPYmplY3RzKG9iaiwgY29uZmlnKSBhcyB1bmtub3duW107XG4gICAgICAgIGxldCBidWZmZXJzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcmlhbGl6ZWQubGVuZ3RoOyBpICs9IFNFUklBTElaRV9PQkpFQ1RfQkFUQ0hfQ09VTlQpIHtcbiAgICAgICAgICAgIGxldCBzdHIgPSBzZXJpYWxpemVkLnNsaWNlKGksIGkgKyBTRVJJQUxJWkVfT0JKRUNUX0JBVENIX0NPVU5UKS5tYXAoeCA9PiBKU09OLnN0cmluZ2lmeSh4KSArIFwiXFxuXCIpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICBidWZmZXJzLnB1c2goQnVmZmVyLmZyb20oc3RyKSk7XG4gICAgICAgICAgICBhd2FpdCBkZWxheShcImltbWVkaWF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBCcmVhayB1cCBpbnRvIGNodW5rcywgYXMgc3RyaW5nID0+IEJ1ZmZlciBpXG4gICAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIHN0cmluZ2lmeUZpbGVTeW5jKG9iajogdW5rbm93bltdLCBjb25maWc/OiBKU09OTEFDS1NfU3RyaW5naWZ5Q29uZmlnKTogQnVmZmVyIHtcbiAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBKU09OTEFDS1MuZXNjYXBlU3BlY2lhbE9iamVjdHMob2JqLCBjb25maWcpIGFzIHVua25vd25bXTtcbiAgICAgICAgbGV0IGJ1ZmZlcnM6IEJ1ZmZlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VyaWFsaXplZC5sZW5ndGg7IGkgKz0gU0VSSUFMSVpFX09CSkVDVF9CQVRDSF9DT1VOVCkge1xuICAgICAgICAgICAgbGV0IHN0ciA9IHNlcmlhbGl6ZWQuc2xpY2UoaSwgaSArIFNFUklBTElaRV9PQkpFQ1RfQkFUQ0hfQ09VTlQpLm1hcCh4ID0+IEpTT04uc3RyaW5naWZ5KHgpICsgXCJcXG5cIikuam9pbihcIlwiKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChCdWZmZXIuZnJvbShzdHIpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBCcmVhayB1cCBpbnRvIGNodW5rcywgYXMgc3RyaW5nID0+IEJ1ZmZlciBpXG4gICAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpO1xuICAgIH1cbiAgICAvLyBUSU1JTkc6IFNlZW1zIHRvIGJlIGFib3V0IDQwWCBzbG93ZXIgdGhhbiBKU09OLnBhcnNlIHVubGVzcyBleHRlbmRlZCBpcyBzZXQgdG8gZmFsc2UsXG4gICAgLy8gIHRoZW4gaXQgaXMgYWJvdXQgMlggc2xvd2VyIChhbHRob3VnaCBpdCBkZXBlbmRzIG9uIHRoZSBzaXplIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBvYmplY3RzISlcbiAgICBwdWJsaWMgc3RhdGljIHBhcnNlPFQ+KHRleHQ6IHN0cmluZywgY29uZmlnPzogSlNPTkxBQ0tTX1BhcnNlQ29uZmlnLCBoeWRyYXRlU3RhdGU/OiBIeWRyYXRlU3RhdGUpOiBUIHtcbiAgICAgICAgLy8gRW1wdHkgc3RyaW5nIHNob3VsZCBwYXJzZSB0byBTT01FVEhJTkdcbiAgICAgICAgaWYgKHRleHQudHJpbSgpID09PSBcIlwiKSByZXR1cm4gdW5kZWZpbmVkIGFzIFQ7XG4gICAgICAgIGxldCBvYmo6IHVua25vd247XG5cbiAgICAgICAgbGV0IGV4dGVuZGVkUGFyc2luZyA9IGNvbmZpZz8uZXh0ZW5kZWQgPz8gSlNPTkxBQ0tTLkVYVEVOREVEX1BBUlNFUjtcblxuICAgICAgICBpZiAoZXh0ZW5kZWRQYXJzaW5nKSB7XG4gICAgICAgICAgICBvYmogPSBwYXJzZXIucGFyc2UodGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9iaiA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICBvYmogPSBwYXJzZXIucGFyc2UodGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSlNPTkxBQ0tTLmh5ZHJhdGVTcGVjaWFsT2JqZWN0cyhvYmosIGh5ZHJhdGVTdGF0ZSwgY29uZmlnKSBhcyBUO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIHBhcnNlTGluZXM8VD4oYnVmZmVyOiBCdWZmZXIsIGNvbmZpZz86IEpTT05MQUNLU19QYXJzZUNvbmZpZyk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBvdXRwdXQ6IFRbXSA9IFtdO1xuICAgICAgICBsZXQgcG9zID0gMDtcbiAgICAgICAgbGV0IGh5ZHJhdGVTdGF0ZTogSHlkcmF0ZVN0YXRlID0ge1xuICAgICAgICAgICAgcmVmZXJlbmNlczogbmV3IE1hcCgpLFxuICAgICAgICAgICAgdmlzaXRlZDogbmV3IFNldCgpLFxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBwYXJzZUNodW5rKCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gcG9zO1xuICAgICAgICAgICAgbGV0IGxhc3ROZXdMaW5lID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChwb3MgPCBidWZmZXIubGVuZ3RoICYmICghbGFzdE5ld0xpbmUgfHwgKHBvcyAtIHN0YXJ0KSA8IFBBUlNFX0JZVEVfQ0hVTktfU0laRSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgYnl0ZSA9IGJ1ZmZlcltwb3NdO1xuICAgICAgICAgICAgICAgIGlmIChieXRlID09PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0TmV3TGluZSA9IHBvcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcG9zKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocG9zID09PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGFzdE5ld0xpbmUgPSBwb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3MgPSBsYXN0TmV3TGluZSArIDE7XG5cbiAgICAgICAgICAgIGxldCB0ZXh0ID0gYnVmZmVyLnNsaWNlKHN0YXJ0LCBsYXN0TmV3TGluZSkudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgICAgICAgICAgbGV0IGxpbmVzID0gdGV4dFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKFwiXFxyXCIsIFwiXCIpXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggJiYgIXguc3RhcnRzV2l0aChcIi8vXCIpKVxuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGxldCBsaW5lc0pTT04gPSBcIltcIjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSAhPT0gMCkgbGluZXNKU09OICs9IFwiLFwiO1xuICAgICAgICAgICAgICAgIGxpbmVzSlNPTiArPSBsaW5lc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVzSlNPTiArPSBcIl1cIjtcbiAgICAgICAgICAgIGlmIChjb25maWc/LmRpc2NhcmRNaXNzaW5nUmVmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0cyA9IEpTT05MQUNLUy5wYXJzZShsaW5lc0pTT04sIGNvbmZpZywgaHlkcmF0ZVN0YXRlKSBhcyBUW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5tZXNzYWdlLmluY2x1ZGVzKFwiUmVmZXJlbmNlIHRvIHVuZGVmaW5lZCBpZFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0ID0gSlNPTkxBQ0tTLnBhcnNlKGxpbmUsIGNvbmZpZywgaHlkcmF0ZVN0YXRlKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLm1lc3NhZ2UuaW5jbHVkZXMoXCJSZWZlcmVuY2UgdG8gdW5kZWZpbmVkIGlkXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFydHMgPSBKU09OTEFDS1MucGFyc2UobGluZXNKU09OLCBjb25maWcsIGh5ZHJhdGVTdGF0ZSkgYXMgVFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChwb3MgPCBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJzZUNodW5rKCk7XG4gICAgICAgICAgICAvLyBXYWl0LCB0byBhbGxvdyBvdGhlciB0aHJlYWQgdG8gZG8gd29yay4gV2Ugd2FpdCBhIGxvbmcgdGltZS4uLiBiZWNhdXNlIHdlIHBhcnNlIDEwTUIgYXQgb25jZSxcbiAgICAgICAgICAgIC8vICBzby4uLiB0aGlzIGdpdmVzIHVzIDJzIG9mIGRlbGF5IHBlciAxR0Igb2YgcGFyc2luZywgd2hpY2ggc2hvdWxkIG9ubHkgYmUgYSBmcmFjdGlvbiBvZiBvdXIgcGFyc2UgdGltZVxuICAgICAgICAgICAgaWYgKHBvcyA8IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBkZWxheSgyMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBlc2NhcGVTcGVjaWFsT2JqZWN0cyhvYmo6IHVua25vd24sIGNvbmZpZz86IEpTT05MQUNLU19TdHJpbmdpZnlDb25maWcpOiB1bmtub3duIHtcbiAgICAgICAgLy8gSSB0aGluayBpdGVyYXRpbmcgdHdpY2UgZm9yIHJlZmVyZW5jZXMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGRvIGl0P1xuICAgICAgICBsZXQgb2JqZWN0cyA9IG5ldyBTZXQ8dW5rbm93bj4oKTtcbiAgICAgICAgLy8gTk9URTogVXNlIHVuaXF1ZSB2YWx1ZXMgZm9yIHJlZmVyZW5jZXMsIHRvIGFsbG93IGNvbmNhdGVuYXRpbmcgZmlsZXMgd2l0aG91dCBoYXZpbmcgdG9cbiAgICAgICAgLy8gIGRlYWwgd2l0aCBlc2NhcGluZyByZWZlcmVuY2VzLlxuICAgICAgICBsZXQgcmVmUHJlZml4ID0gRGF0ZS5ub3coKSArIE1hdGgucmFuZG9tKCkgKyBcIlwiO1xuICAgICAgICBsZXQgbmV4dFJlZklkID0gMDtcbiAgICAgICAgZnVuY3Rpb24gZ2V0TmV4dFJlZktleSgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZQcmVmaXggKyBcIl9cIiArIG5leHRSZWZJZCsrO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZWZPYmplY3RzID0gbmV3IE1hcDx1bmtub3duLCBzdHJpbmc+KCk7XG4gICAgICAgIGZpbmRSZWZlcmVuY2VzKG9iaik7XG4gICAgICAgIGZ1bmN0aW9uIGZpbmRSZWZlcmVuY2VzKG9iajogdW5rbm93bikge1xuICAgICAgICAgICAgaWYgKCFjYW5IYXZlQ2hpbGRyZW4ob2JqKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHJlZk9iamVjdHMuaGFzKG9iaikpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChvYmplY3RzLmhhcyhvYmopKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlZktleSA9IGdldE5leHRSZWZLZXkoKTtcbiAgICAgICAgICAgICAgICByZWZPYmplY3RzLnNldChvYmosIHJlZktleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqZWN0cy5hZGQob2JqKTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBmaW5kUmVmZXJlbmNlcyhvYmpba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVmc1NlZW4gPSBuZXcgU2V0PHVua25vd24+KCk7XG4gICAgICAgIHJldHVybiBpdGVyYXRlKG9iaik7XG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdGUob2JqOiB1bmtub3duLCByZWZIYW5kbGVkPzogYm9vbGVhbik6IHVua25vd24ge1xuICAgICAgICAgICAgaWYgKCFjYW5IYXZlQ2hpbGRyZW4ob2JqKSkgcmV0dXJuIG9iajtcbiAgICAgICAgICAgIGlmICghcmVmSGFuZGxlZCkge1xuICAgICAgICAgICAgICAgIGxldCByZWZLZXkgPSByZWZPYmplY3RzLmdldChvYmopO1xuICAgICAgICAgICAgICAgIGlmIChyZWZLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZnNTZWVuLmhhcyhvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtKU09OTEFDS1MuTEFDS1NfS0VZXTogXCJyZWZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcmVmS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWZzU2Vlbi5hZGQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtKU09OTEFDS1MuTEFDS1NfS0VZXTogXCJkZWZpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByZWZLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlcmF0ZShvYmosIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKEpTT05MQUNLUy5MQUNLU19LRVkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3RPZk9iaiA9IHsgLi4ub2JqIH07XG4gICAgICAgICAgICAgICAgbGV0IGVzY2FwZWRWYWx1ZSA9IHJlc3RPZk9ialtKU09OTEFDS1MuTEFDS1NfS0VZXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdE9mT2JqW0pTT05MQUNLUy5MQUNLU19LRVldO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFtKU09OTEFDS1MuTEFDS1NfS0VZXTogXCJyZW1vdmVkU3BlY2lhbEtleVwiLFxuICAgICAgICAgICAgICAgICAgICBlc2NhcGVkVmFsdWU6IGl0ZXJhdGUoZXNjYXBlZFZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdE9mT2JqOiBpdGVyYXRlKHJlc3RPZk9iaiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFtKU09OTEFDS1MuTEFDS1NfS0VZXTogXCJCdWZmZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogb2JqLnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjbG9uZWQgPSBjb25maWc/LmFsbG93T2JqZWN0TXV0YXRpb247XG4gICAgICAgICAgICBmdW5jdGlvbiBjbG9uZU9iaigpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2xvbmVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY2xvbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iaiA9IFsuLi5vYmpdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9iaiA9IHsgLi4ub2JqIGFzIGFueSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yaWdpbmFsVmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBpdGVyYXRlKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZU9iaigpO1xuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBoeWRyYXRlU3BlY2lhbE9iamVjdHMob2JqOiB1bmtub3duLCBoeWRyYXRlU3RhdGU/OiBIeWRyYXRlU3RhdGUsIGNvbmZpZz86IEpTT05MQUNLU19QYXJzZUNvbmZpZyk6IHVua25vd24ge1xuICAgICAgICBsZXQgcmVmZXJlbmNlcyA9IGh5ZHJhdGVTdGF0ZT8ucmVmZXJlbmNlcyB8fCBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbiAgICAgICAgbGV0IHZpc2l0ZWQgPSBoeWRyYXRlU3RhdGU/LnZpc2l0ZWQgfHwgbmV3IFNldDx1bmtub3duPigpO1xuICAgICAgICByZXR1cm4gaXRlcmF0ZShvYmopO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKG9iajogdW5rbm93bikge1xuICAgICAgICAgICAgaWYgKCFjYW5IYXZlQ2hpbGRyZW4ob2JqKSkgcmV0dXJuIG9iajtcbiAgICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhvYmopKSByZXR1cm4gb2JqO1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQob2JqKTtcbiAgICAgICAgICAgIGxldCB0eXBlID0gb2JqW0pTT05MQUNLUy5MQUNLU19LRVldO1xuICAgICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBpdGVyYXRlKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG9yaWdpbmFsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcInJlbW92ZWRTcGVjaWFsS2V5XCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdE9mT2JqID0gaXRlcmF0ZShvYmoucmVzdE9mT2JqKSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgbGV0IGVzY2FwZWRWYWx1ZSA9IGl0ZXJhdGUob2JqLmVzY2FwZWRWYWx1ZSkgYXMgYW55O1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3RPZk9iaiwgW0pTT05MQUNLUy5MQUNLU19LRVldOiBlc2NhcGVkVmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcIkJ1ZmZlclwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKG9iai5kYXRhIGFzIHN0cmluZywgXCJiYXNlNjRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJkZWZpbmVcIikge1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMuc2V0KG9iai5pZCBhcyBzdHJpbmcsIGl0ZXJhdGUob2JqLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcInJlZlwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gb2JqLmlkIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBpZiAoIUpTT05MQUNLUy5JR05PUkVfTUlTU0lOR19SRUZFUkVOQ0VTICYmICFyZWZlcmVuY2VzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2UgdG8gdW5kZWZpbmVkIGlkIFwiJHtpZH1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5nZXQoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhY2tzIHR5cGUgXCIke3R5cGV9XCJgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYmVuY2htYXJrKCkge1xuICAgIGNvbnN0IGxvb3BzID0gMTAwMCAqIDEwMDtcbiAgICBsZXQgaW5wdXRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcHM7IGkrKykge1xuICAgICAgICBpbnB1dHMucHVzaChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgaGVsbG9fdGhlcmU6IGksXG4gICAgICAgICAgICBleGFtcGxlOiA1LFxuICAgICAgICAgICAgbGlzdDogWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXSxcbiAgICAgICAgfSkgKyBcIiBcIik7XG4gICAgfVxuICAgIEpTT04ucGFyc2UoaW5wdXRzWzBdKTtcbiAgICBwYXJzZXIucGFyc2UoaW5wdXRzWzBdKTtcblxuICAgIG1lYXN1cmVDb2RlU3luYyhmdW5jdGlvbiBtZWFzdXJlKCkge1xuICAgICAgICBtZWFzdXJlQmxvY2soZnVuY3Rpb24gSlNPTl9QQVJTRSgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcHM7IGkrKykge1xuICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoaW5wdXRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lYXN1cmVCbG9jayhmdW5jdGlvbiBKU09OX1BBUlNFX0ZSRUVaRSgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcHM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvYmogPSBKU09OLnBhcnNlKGlucHV0c1tpXSk7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRnJlZXplKG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lYXN1cmVCbG9jayhmdW5jdGlvbiBFWFRFTkRFRF9QQVJTRSgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcHM7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZShpbnB1dHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBtZWFzdXJlQmxvY2soZnVuY3Rpb24gSlNPTkxBQ0tTX1BBUlNFKCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb29wczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgSlNPTkxBQ0tTLnBhcnNlKGlucHV0c1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZWFzdXJlQmxvY2soZnVuY3Rpb24gSlNPTkxBQ0tTX1BBUlNFX1NJTVBMRSgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcHM7IGkrKykge1xuICAgICAgICAgICAgICAgIEpTT05MQUNLUy5wYXJzZShpbnB1dHNbaV0sIHsgZXh0ZW5kZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH0sIHtcbiAgICAgICAgdGhyZXNob2xkSW5UYWJsZTogMFxuICAgIH0pO1xuXG59XG4vL2JlbmNobWFyaygpLmNhdGNoKGNvbnNvbGUuZXJyb3IpLmZpbmFsbHkoKCkgPT4gcHJvY2Vzcy5leGl0KCkpO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIHRlc3RKU09OTEFDS1MoKSB7XG4gICAge1xuICAgICAgICBsZXQgb2JqID0ge307XG4gICAgICAgIGxldCBzdHIgPSBKU09OTEFDS1Muc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGE6IG9iaixcbiAgICAgICAgICAgIGI6IG9iaixcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBwYXJzZWQgPSBKU09OTEFDS1MucGFyc2Uoc3RyKSBhcyBhbnk7XG4gICAgICAgIGlmIChwYXJzZWQuYSAhPT0gcGFyc2VkLmIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBtYWludGFpbiByZWZlcmVuY2VzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGFyc2VkLmEgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9iamVjdCBiZWNvbWUgY29ycnVwdGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGVzdCBMQUNLU19LRVkgaXMgZXNjYXBlZCBjb3JyZWN0bHlcbiAgICB7XG4gICAgICAgIGxldCBvYmogPSB7IFtKU09OTEFDS1MuTEFDS1NfS0VZXTogXCJoZWxsb1wiIH07XG4gICAgICAgIGxldCBzdHIgPSBKU09OTEFDS1Muc3RyaW5naWZ5KG9iaik7XG4gICAgICAgIGxldCBwYXJzZWQgPSBKU09OTEFDS1MucGFyc2Uoc3RyKSBhcyBhbnk7XG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShvYmopICE9PSBKU09OLnN0cmluZ2lmeShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZXNjYXBlIExBQ0tTX0tFWVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUZXN0IGJ1ZmZlcnMgYXJlIHByZXNlcnZlZFxuICAgIHtcbiAgICAgICAgbGV0IG9iaiA9IHsgYTogQnVmZmVyLmZyb20oXCJoZWxsb1wiKSB9O1xuICAgICAgICBsZXQgc3RyID0gSlNPTkxBQ0tTLnN0cmluZ2lmeShvYmopO1xuICAgICAgICBsZXQgcGFyc2VkID0gSlNPTkxBQ0tTLnBhcnNlKHN0cikgYXMgYW55O1xuICAgICAgICBpZiAob2JqLmEudG9TdHJpbmcoKSAhPT0gcGFyc2VkLmEudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcHJlc2VydmUgYnVmZmVyc2ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGVzdCByZWZlcmVuY2VzIDJcbiAgICB7XG4gICAgICAgIGxldCBiYXNlID0ge307XG4gICAgICAgIGxldCBhcnIgPSBbYmFzZSwgYmFzZV07XG4gICAgICAgIGxldCBvYmogPSB7IHg6IGFyciwgeTogYXJyIH07XG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OTEFDS1MucGFyc2UoSlNPTkxBQ0tTLnN0cmluZ2lmeShvYmopLCB7IGV4dGVuZGVkOiBmYWxzZSB9KSBhcyB0eXBlb2Ygb2JqO1xuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSAhPT0gSlNPTi5zdHJpbmdpZnkob2JqKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3JydXB0ZWQgdmFsdWVzLCBleHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KG9iail9LCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQueCAhPT0gcmVzdWx0LnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIG1haW50YWluIHJlZmVyZW5jZXNgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LnhbMF0gIT09IHJlc3VsdC54WzFdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBtYWludGFpbiByZWZlcmVuY2VzYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vL3Rlc3RKU09OTEFDS1MoKS5jYXRjaChjb25zb2xlLmVycm9yKS5maW5hbGx5KCgpID0+IHByb2Nlc3MuZXhpdCgpKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVBbmRWZXJpZnlQYXJzZXIoKSB7XG4gICAgY29uc3QgcGVnanMgPSBhd2FpdCBpbXBvcnQoXCJwZWdqc1wiKTtcblxuICAgIHZhciBncmFtbWFyID0gZnMucmVhZEZpbGVTeW5jKF9fZGlybmFtZSArIFwiL0pTT05MQUNLUy5wZWdqc1wiLCBcInV0ZjhcIik7XG4gICAgdmFyIHBhcnNlclNvdXJjZSA9IHBlZ2pzLmdlbmVyYXRlKGdyYW1tYXIsIHsgb3V0cHV0OiBcInNvdXJjZVwiLCBmb3JtYXQ6IFwiY29tbW9uanNcIiB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKF9fZGlybmFtZSArIFwiL0pTT05MQUNLUy5nZW5lcmF0ZWQuanNcIiwgcGFyc2VyU291cmNlKTtcblxuICAgIHZhciBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH07XG4gICAgZXZhbChwYXJzZXJTb3VyY2UpO1xuICAgIGNvbnN0IHBhcnNlciA9IG1vZHVsZS5leHBvcnRzIGFzIGFueTtcbiAgICBmdW5jdGlvbiB2ZXJpZnkodGV4dDogc3RyaW5nLCBmb3JjZWRPYmo/OiB1bmtub3duKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSBwYXJzZXIucGFyc2UodGV4dCk7XG4gICAgICAgIHZhciByZXN1bHQgPSBKU09OLnN0cmluZ2lmeShwYXJzZWQpO1xuICAgICAgICBsZXQgcmVhbFJlc3VsdCA9IGZvcmNlZE9iaiA/PyBKU09OLnN0cmluZ2lmeShldmFsKFwiKFwiICsgdGV4dCArIFwiKVwiKSk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IHJlYWxSZXN1bHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlOiAke3RleHR9IHNob3VsZCBiZSAke3JlYWxSZXN1bHR9LCB3YXMgJHtyZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coXCJQYXJzZWQgY29ycmVjdGx5OiBcIiwgdGV4dCk7XG4gICAgfVxuXG4gICAgdmVyaWZ5KGBcbiAgICB7XG4gICAgICAgIFwiaGVsbG9fdGhlcmVcIjogMSxcbiAgICB9XG4gICAgYCk7XG4gICAgdmVyaWZ5KGBcbiAgICB7XG4gICAgICAgIGhlbGxvX3RoZXJlOiAxLFxuICAgIH1cbiAgICBgKTtcbiAgICB2ZXJpZnkoYFxuICAgIHtcbiAgICAgICAgaGVsbG9fdGhlcmU6IDEsXG4gICAgICAgIG1vcmU6IDEsXG4gICAgfVxuICAgIGApO1xuICAgIHZlcmlmeShgeyBsaXN0OiBbMSxdLCB9YCk7XG4gICAgdmVyaWZ5KGB7IGxpc3Q6IFsxLF0sIGxpc3QyOiBbMSxdLCB9YCk7XG5cbiAgICB2ZXJpZnkoYHsgLyogdGVzdCAqLyBsaXN0OiBbMSxdLCBsaXN0MjogWzEsXSwgfWApO1xuICAgIHZlcmlmeShgeyAvKiB0ZXN0ICovIC8qIHRlc3QgMiAqLyBsaXN0OiBbMSxdLCBsaXN0MjogWzEsXSwgfWApO1xuICAgIHZlcmlmeShgXG4gICAge1xuICAgICAgICAvKiB0ZXN0ICovXG4gICAgICAgIC8qIHRlc3QgMiAqL1xuICAgICAgICBsaXN0OiBbMSxdLFxuICAgICAgICAvLyBTaW5nbGUgbGluZSBjb21tZW50XG4gICAgICAgIGxpc3QyOiBbMSxdLFxuICAgICAgICAvLyBsaXN0MzogWzNdLFxuICAgIH1cbiAgICBgKTtcbiAgICAvLyBNdWx0aWxpbmUgZG91YmxlIHF1b3RlIHN0cmluZ3NcbiAgICB2ZXJpZnkoYFxuICAgIHtcbiAgICAgICAgdmFsdWU6IFwiYVxuYlwiXG4gICAgfVxuICAgIGAsIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFwiYVxcbmJcIiB9KSk7XG5cbiAgICAvLyBTaW5nbGUgcXVvdGVzXG4gICAgdmVyaWZ5KGBcbiAgICB7XG4gICAgICAgIHZhbHVlOiAnYSdcbiAgICB9XG4gICAgYCk7XG4gICAgdmVyaWZ5KGB1bmRlZmluZWRgKTtcbn1cbi8vZ2VuZXJhdGVBbmRWZXJpZnlQYXJzZXIoKS5jYXRjaChjb25zb2xlLmVycm9yKS5maW5hbGx5KCgpID0+IHByb2Nlc3MuZXhpdCgpKTsiXX0=
|
|
469
|
-
/* _JS_SOURCE_HASH = "
|
|
469
|
+
/* _JS_SOURCE_HASH = "7041bff69ef30aaf0f0a462ad73a12645f25acadb25e22a0405fa6e091f7478d"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
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";
|
|
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"; 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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -927,4 +927,4 @@ const decompressObjLZ4 = (0, measure_1.measureWrap)(async function wireCallDecom
|
|
|
927
927
|
throw new Error(`Unknown compression type ${type}`);
|
|
928
928
|
});
|
|
929
929
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsbEZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJDYWxsRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLCtDQUFtRjtBQUNuRixpQ0FBOEg7QUFDOUgseURBQTBFO0FBQzFFLHNEQUFtRDtBQUVuRCwyQ0FBcUY7QUFFckYsdUNBQWlDO0FBQ2pDLHNEQUFrRTtBQUNsRSxpRUFBZ0Y7QUFDaEYseUNBQWlFO0FBQ2pFLGdEQUErRDtBQUcvRCwwREFBa0Q7QUFDbEQsaURBQW1GO0FBRW5GLCtCQUE0QjtBQUM1QiwrREFBeUU7QUFDekUsWUFBWSxDQUFDLEdBQUcsRUFBRSxtREFBUSxXQUFXLEdBQUMsQ0FBQyxDQUFDO0FBRXhDLElBQUEsc0JBQU8sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUU5QyxnR0FBZ0c7QUFDaEcsd0JBQXdCO0FBQ3hCLDJGQUEyRjtBQUMzRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUE2RDdCLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFcEMsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDekIsSUFBSSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7QUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQyxJQUFJLG9CQUFvQixHQUFzQyxFQUFFLENBQUM7QUFDakUsU0FBZ0Isc0JBQXNCO0lBQ2xDLElBQUksS0FBSyxHQUFHLHNCQUFzQixDQUFDO0lBQ25DLHNCQUFzQixHQUFHLENBQUMsQ0FBQztJQUMzQixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBSkQsd0RBSUM7QUFDRCxTQUFnQixtQkFBbUI7SUFDL0IsT0FBTyxnQkFBZ0IsQ0FBQztBQUM1QixDQUFDO0FBRkQsa0RBRUM7QUFDRCxTQUFnQixnQkFBZ0I7SUFD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QUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDeEQsTUFBTSxJQUFJLElBQUksQ0FBQztZQUNuQixDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNiLElBQUksTUFBTSxHQUFHLE1BQU0sK0JBQWMsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FsbGVyQ29udGV4dCwgQ2FsbGVyQ29udGV4dEJhc2UsIENhbGxUeXBlLCBGdWxsQ2FsbFR5cGUgfSBmcm9tIFwiLi4vU29ja2V0RnVuY3Rpb25UeXBlc1wiO1xuaW1wb3J0ICogYXMgd3MgZnJvbSBcIndzXCI7XG5pbXBvcnQgeyBnZXRDYWxsRmxhZ3MsIHBlcmZvcm1Mb2NhbENhbGwsIHNob3VsZENvbXByZXNzQ2FsbCB9IGZyb20gXCIuL2NhbGxNYW5hZ2VyXCI7XG5pbXBvcnQgeyBjb252ZXJ0RXJyb3JTdGFja1RvRXJyb3IsIGZvcm1hdE51bWJlclN1ZmZpeGVkLCBpc0J1ZmZlclR5cGUsIGlzTm9kZSwgbGlzdCwgdGltZUluSG91ciwgdGltZUluTWludXRlIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgY3JlYXRlV2Vic29ja2V0RmFjdG9yeSwgZ2V0VExTU29ja2V0IH0gZnJvbSBcIi4vd2Vic29ja2V0RmFjdG9yeVwiO1xuaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwiLi4vU29ja2V0RnVuY3Rpb25cIjtcbmltcG9ydCAqIGFzIHRscyBmcm9tIFwidGxzXCI7XG5pbXBvcnQgeyBnZXRDbGllbnROb2RlSWQsIGdldE5vZGVJZExvY2F0aW9uLCByZWdpc3Rlck5vZGVDbGllbnQgfSBmcm9tIFwiLi9ub2RlQ2FjaGVcIjtcbmltcG9ydCBkZWJ1Z2JyZWFrIGZyb20gXCJkZWJ1Z2JyZWFrXCI7XG5pbXBvcnQgeyBsYXp5IH0gZnJvbSBcIi4vY2FjaGluZ1wiO1xuaW1wb3J0IHsgYmx1ZSwgZ3JlZW4sIHJlZCwgeWVsbG93IH0gZnJvbSBcIi4vZm9ybWF0dGluZy9sb2dDb2xvcnNcIjtcbmltcG9ydCB7IGlzU3BsaXRhYmxlQXJyYXksIG1hcmtBcnJheUFzU3BsaXRhYmxlIH0gZnJvbSBcIi4vZml4TGFyZ2VOZXR3b3JrQ2FsbHNcIjtcbmltcG9ydCB7IGRlbGF5LCBydW5JbmZpbml0ZVBvbGwsIHJ1bkluU2VyaWFsIH0gZnJvbSBcIi4vYmF0Y2hpbmdcIjtcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0VGltZSB9IGZyb20gXCIuL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgemxpYiBmcm9tIFwiemxpYlwiO1xuaW1wb3J0IHBha28gZnJvbSBcInBha29cIjtcbmltcG9ydCB7IHNldEZsYWcgfSBmcm9tIFwiLi4vcmVxdWlyZS9jb21waWxlRmxhZ3NcIjtcbmltcG9ydCB7IG1lYXN1cmVGbmMsIG1lYXN1cmVXcmFwLCByZWdpc3Rlck1lYXN1cmVJbmZvIH0gZnJvbSBcIi4vcHJvZmlsaW5nL21lYXN1cmVcIjtcbmltcG9ydCB7IE1heWJlUHJvbWlzZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBaaXAgfSBmcm9tIFwiLi9aaXBcIjtcbmltcG9ydCB7IGRlY29kZVByb3RvY29sLCBwcm9wb3NlUHJvdG9jb2xzIH0gZnJvbSBcIi4vcHJvdG9jb2xOZWdvdGlhdGlvblwiO1xuc2V0SW1tZWRpYXRlKCgpID0+IGltcG9ydChcIi4vbHo0L0xaNFwiKSk7XG5cbnNldEZsYWcocmVxdWlyZSwgXCJwYWtvXCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5cbi8vIE5PVEU6IElmIGl0IGlzIHRvbyBsb3csIGFuZCB0b28gbWFueSBzZXJ2ZXJzIGRpc2Nvbm5lY3QsIHdlIGNhbiBlYXNpbHkgc3BlbmQgMTAwJSBvZiBvdXIgdGltZVxuLy8gIHRyeWluZyB0byByZWNvbm5lY3QuXG4vLyAgKE9yLi4uIG1heWJlIHRoZSBkZWxheSBpcyBqdXN0IHdhaXRpbmcsIGFuZCB3ZSBhcmVuJ3QgYWN0dWFsbHkgb3ZlcmxvYWRpbmcgdGhlIHNlcnZlcj8pXG5jb25zdCBNSU5fUkVUUllfREVMQVkgPSA1MDAwO1xuXG50eXBlIEludGVybmFsQ2FsbFR5cGUgPSBGdWxsQ2FsbFR5cGUgJiB7XG4gICAgc2VxTnVtOiBudW1iZXI7XG4gICAgaXNSZXR1cm46IGZhbHNlO1xuICAgIGlzQXJnc0NvbXByZXNzZWQ/OiBib29sZWFuIHwgXCJMWjRcIiB8IFwiemlwXCI7XG59XG5cbnR5cGUgSW50ZXJuYWxSZXR1cm5UeXBlID0ge1xuICAgIGlzUmV0dXJuOiB0cnVlO1xuICAgIHJlc3VsdDogdW5rbm93bjtcbiAgICBlcnJvcj86IHN0cmluZztcbiAgICBzZXFOdW06IG51bWJlcjtcbiAgICBpc1Jlc3VsdENvbXByZXNzZWQ/OiBib29sZWFuIHwgXCJMWjRcIiB8IFwiemlwXCI7XG59O1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbEZhY3Rvcnkge1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHJlYWxOb2RlSWQ/OiBzdHJpbmc7XG4gICAgbGFzdENsb3NlZDogbnVtYmVyO1xuICAgIGNsb3NlZEZvcmV2ZXI/OiBib29sZWFuO1xuICAgIGlzQ29ubmVjdGVkPzogYm9vbGVhbjtcbiAgICByZWNlaXZlZEluaXRpYWxpemVTdGF0ZT86IEluaXRpYWxpemVTdGF0ZTtcbiAgICAvLyBUcnVlIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCB3aXRoIGEgbmVnb3RpYXRlZFxuICAgIC8vIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgKHNvIHRoZSBsZWdhY3kgaW5pdGlhbGl6ZSBwYWNrZXQgc2hvdWxkIGJlIHNraXBwZWQpLlxuICAgIHByb3RvY29sTmVnb3RpYXRlZD86IGJvb2xlYW47XG4gICAgLy8gTk9URTogTWF5IG9yIG1heSBub3QgaGF2ZSByZWNvbm5lY3Rpb24gb3IgcmV0cnkgbG9naWMgaW5zaWRlIG9mIHBlcmZvcm1DYWxsLlxuICAgIC8vICBUcmlnZ2VyIHBlcmZvcm1Mb2NhbENhbGwgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb25cbiAgICBwZXJmb3JtQ2FsbChjYWxsOiBDYWxsVHlwZSk6IFByb21pc2U8dW5rbm93bj47XG4gICAgb25OZXh0RGlzY29ubmVjdChjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgZGlzY29ubmVjdCgpOiB2b2lkO1xuICAgIC8vIElmIHdlIGNoYW5nZSB0aGUgbm9kZSBJRCB3ZSBuZWVkIHRvIHJlY3JlYXRlIHRoaXMgb2JqZWN0LCBlc3NlbnRpYWxseSB0aGlzIG9iamVjdCBzaG91bGQgYmUgaW1tdXRhYmxlLiBJIGZvcmdldCB3aHkgd2Ugd2FudGVkIHRoaXMuIEkgdGhpbmsgaXQncyBiZWNhdXNlIHdlIGRpZG4ndCBrbm93IGZvciBzdXJlIGlmIG5vZGUgSUQgd291bGQgYmUgdW5pcXVlLCBidXQgaXQgd2lsbCBiZS4gXG4gICAgY29ubmVjdGlvbklkOiB7IG5vZGVJZDogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZGVySW50ZXJmYWNlIHtcbiAgICBub2RlSWQ/OiBzdHJpbmc7XG4gICAgLy8gT25seSBzZXQgQUZURVIgXCJvcGVuXCIgKGlmIHNldCBhdCBhbGwsIGFzIGluIHRoZSBicm93c2VyIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBzb2NrZXQpLlxuICAgIF9zb2NrZXQ/OiB0bHMuVExTU29ja2V0O1xuICAgIC8vIFRoZSBjaG9zZW4gU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZSAoc2V0IGFmdGVyIFwib3BlblwiIGJ5IGJvdGggTm9kZSBgd3NgXG4gICAgLy8gYW5kIHRoZSBicm93c2VyIFdlYlNvY2tldCkuIEVtcHR5IHN0cmluZyBtZWFucyBub25lIHdhcyBuZWdvdGlhdGVkLlxuICAgIHByb3RvY29sPzogc3RyaW5nO1xuXG4gICAgc2VuZChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpOiB2b2lkO1xuICAgIGNsb3NlKCk6IHZvaWQ7XG5cbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50OiBcIm9wZW5cIiwgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB2b2lkO1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnQ6IFwiY2xvc2VcIiwgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB2b2lkO1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnQ6IFwiZXJyb3JcIiwgbGlzdGVuZXI6IChlcnI6IHsgbWVzc2FnZTogc3RyaW5nIH0pID0+IHZvaWQpOiB2b2lkO1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnQ6IFwibWVzc2FnZVwiLCBsaXN0ZW5lcjogKGRhdGE6IHdzLlJhd0RhdGEgfCB3cy5NZXNzYWdlRXZlbnQgfCBzdHJpbmcpID0+IHZvaWQpOiB2b2lkO1xuXG4gICAgcmVhZHlTdGF0ZTogbnVtYmVyO1xuXG4gICAgcGluZz8oKTogdm9pZDtcbn1cblxudHlwZSBJbml0aWFsaXplU3RhdGUgPSB7XG4gICAgc3VwcG9ydHNMWjQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgSU5JVElBTElaRV9TVEFURV9TRVFfTlVNID0gLTE7XG5cbmxldCBwZW5kaW5nQ2FsbENvdW50ID0gMDtcbmxldCBoYXJ2ZXN0YWJsZUZhaWxlZENhbGxzID0gMDtcbmNvbnN0IENBTExfVElNRVNfTElNSVQgPSAxMDAwICogMTAwMCAqIDEwO1xubGV0IGhhcnZlc3RhYmxlQ2FsbFRpbWVzOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyB9W10gPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBoYXJ2ZXN0RmFpbGVkQ2FsbENvdW50KCkge1xuICAgIGxldCBjb3VudCA9IGhhcnZlc3RhYmxlRmFpbGVkQ2FsbHM7XG4gICAgaGFydmVzdGFibGVGYWlsZWRDYWxscyA9IDA7XG4gICAgcmV0dXJuIGNvdW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlbmRpbmdDYWxsQ291bnQoKSB7XG4gICAgcmV0dXJuIHBlbmRpbmdDYWxsQ291bnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFydmVzdENhbGxUaW1lcygpIHtcbiAgICBsZXQgdGltZXMgPSBoYXJ2ZXN0YWJsZUNhbGxUaW1lcztcbiAgICBoYXJ2ZXN0YWJsZUNhbGxUaW1lcyA9IFtdO1xuICAgIHJldHVybiB0aW1lcztcbn1cbnJ1bkluZmluaXRlUG9sbCh0aW1lSW5NaW51dGUgKiAxNSwgKCkgPT4ge1xuICAgIGlmIChoYXJ2ZXN0YWJsZUNhbGxUaW1lcy5sZW5ndGggPiBDQUxMX1RJTUVTX0xJTUlUKSB7XG4gICAgICAgIGhhcnZlc3RhYmxlQ2FsbFRpbWVzID0gaGFydmVzdGFibGVDYWxsVGltZXMuc2xpY2UoLUNBTExfVElNRVNfTElNSVQpO1xuICAgIH1cbn0pO1xuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDYWxsRmFjdG9yeShcbiAgICB3ZWJTb2NrZXRCYXNlOiBTZW5kZXJJbnRlcmZhY2UgfCB1bmRlZmluZWQsXG4gICAgLy8gVGhlIG5vZGUgaWQgd2UgYXJlIGNvbm5lY3RpbmcgdG8gKG9yIHRoYXQgY29ubmVjdGVkIHRvIHVzKVxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIC8vIFRoZSBub2RlIGlkIHRoYXQgd2Ugd2VyZSBjb250YWN0ZWQgb25cbiAgICBsb2NhbE5vZGVJZCA9IFwiXCIsXG4pOiBQcm9taXNlPENhbGxGYWN0b3J5PiB7XG4gICAgbGV0IG5pY2VDb25uZWN0aW9uTmFtZSA9IG5vZGVJZDtcblxuICAgIGNvbnN0IGNyZWF0ZVdlYnNvY2tldCA9IGNyZWF0ZVdlYnNvY2tldEZhY3RvcnkoKTtcbiAgICBjb25zdCByZWdpc3Rlck9uY2UgPSBsYXp5KCgpID0+IHJlZ2lzdGVyTm9kZUNsaWVudChjYWxsRmFjdG9yeSkpO1xuXG4gICAgbGV0IGNhblJlY29ubmVjdCA9ICEhZ2V0Tm9kZUlkTG9jYXRpb24obm9kZUlkKTtcblxuICAgIGxldCBwZW5kaW5nQ2FsbHM6IE1hcDxudW1iZXIsIHtcbiAgICAgICAgZGF0YTogQnVmZmVyW107XG4gICAgICAgIGNhbGw6IEludGVybmFsQ2FsbFR5cGU7XG4gICAgICAgIGNhbGxiYWNrOiAocmVzdWx0SlNPTjogSW50ZXJuYWxSZXR1cm5UeXBlKSA9PiB2b2lkO1xuICAgIH0+ID0gbmV3IE1hcCgpO1xuICAgIC8vIE5PVEU6IEl0IGlzIGltcG9ydGFudCB0byBtYWtlIHRoaXMgYXMgcmFuZG9tIGFzIHBvc3NpYmxlLCB0byBwcmV2ZW50XG4gICAgLy8gIHJlY29ubmVjdGlvbnMgZHVlcyB0byBhIHByb2Nlc3MgYmVpbmcgcmVzZXQgY2F1c2luZyBzZXFOdW0gY29sbGlzaW9uc1xuICAgIC8vICBpbiByZXR1cm4gY2FsbHMuXG4gICAgbGV0IG5leHRTZXFOdW0gPSBEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKTtcblxuICAgIC8vIE5PVEU6IEknbSBub3Qgc3VyZSBpZiB0aGlzIGlzIG5lZWRlZCwgSSB0aG91Z2h0IGl0IHdhcywgYnV0Li4uIG5vdyBJIHRoaW5rXG4gICAgLy8gIGl0IHByb2JhYmx5IGlzbid0Li4uXG4gICAgLy8gaWYgKHdlYlNvY2tldEJhc2U/LnJlYWR5U3RhdGUgPT09IDEgLyogT1BFTiAqLyAmJiB3ZWJTb2NrZXRCYXNlLnBpbmcpIHtcbiAgICAvLyAgICAgLy8gSGVhcnRiZWF0IGxvb3AsIG90aGVyd2lzZSBvbkRpc2Nvbm5lY3QgaXMgbmV2ZXIgY2FsbGVkLlxuICAgIC8vICAgICAoKGFzeW5jICgpID0+IHtcbiAgICAvLyAgICAgICAgIHdoaWxlICh3ZWJTb2NrZXRCYXNlPy5yZWFkeVN0YXRlID09PSAxIC8qIE9QRU4gKi8gJiYgd2ViU29ja2V0QmFzZS5waW5nKSB7XG4gICAgLy8gICAgICAgICAgICAgYXdhaXQgZGVsYXkoMTAwMCAqIDYwKTtcbiAgICAvLyAgICAgICAgICAgICB3ZWJTb2NrZXRCYXNlLnBpbmc/LigpO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9KSkoKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgIC8vIH1cblxuICAgIGxldCBsYXN0Q29ubmVjdGlvbkF0dGVtcHQgPSAwO1xuXG4gICAgbGV0IGNhbGxlckNvbnRleHQ6IENhbGxlckNvbnRleHRCYXNlID0ge1xuICAgICAgICBub2RlSWQsXG4gICAgICAgIGxvY2FsTm9kZUlkXG4gICAgfTtcblxuICAgIGxldCBkaXNjb25uZWN0Q2FsbGJhY2tzID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuICAgIGZ1bmN0aW9uIG9uTmV4dERpc2Nvbm5lY3QoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgZGlzY29ubmVjdENhbGxiYWNrcy5hZGQoY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGxldCBjYWxsRmFjdG9yeTogQ2FsbEZhY3RvcnkgPSB7XG4gICAgICAgIG5vZGVJZCxcbiAgICAgICAgbGFzdENsb3NlZDogMCxcbiAgICAgICAgY29ubmVjdGlvbklkOiB7IG5vZGVJZCB9LFxuICAgICAgICByZWNlaXZlZEluaXRpYWxpemVTdGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICBvbk5leHREaXNjb25uZWN0LFxuICAgICAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICAgICAgY2FuUmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICBjYWxsRmFjdG9yeS5jbG9zZWRGb3JldmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh3ZWJTb2NrZXRQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgd2ViU29ja2V0UHJvbWlzZS50aGVuKHdzID0+IHdzLmNsb3NlKCkpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIHBlcmZvcm1DYWxsKGNhbGw6IENhbGxUeXBlKSB7XG4gICAgICAgICAgICBsZXQgc2VxTnVtID0gbmV4dFNlcU51bSsrO1xuICAgICAgICAgICAgbGV0IGZ1bGxDYWxsOiBJbnRlcm5hbENhbGxUeXBlID0ge1xuICAgICAgICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICAgICAgICBpc1JldHVybjogZmFsc2UsXG4gICAgICAgICAgICAgICAgYXJnczogY2FsbC5hcmdzLFxuICAgICAgICAgICAgICAgIGNsYXNzR3VpZDogY2FsbC5jbGFzc0d1aWQsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBjYWxsLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICBzZXFOdW0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IGRhdGE6IEJ1ZmZlcltdO1xuICAgICAgICAgICAgbGV0IG9yaWdpbmFsQXJncyA9IGNhbGwuYXJncztcbiAgICAgICAgICAgIGxldCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBzZW5kU3RhdHM6IENvbXByZXNzaW9uU3RhdHMgPSB7XG4gICAgICAgICAgICAgICAgdW5jb21wcmVzc2VkU2l6ZTogMCxcbiAgICAgICAgICAgICAgICBjb21wcmVzc2VkU2l6ZTogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsRmFjdG9yeS5yZWNlaXZlZEluaXRpYWxpemVTdGF0ZT8uc3VwcG9ydHNMWjQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXByZXNzTW9kZSA9IHNob3VsZENvbXByZXNzQ2FsbChmdWxsQ2FsbCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgdW5kZWZpbmVkLCB0aGVuIHdlIGNvbXByZXNzIGl0LiBXZSBiYXNpY2FsbHkgYWx3YXlzIHdhbnQgdG8gY29tcHJlc3MgZnJvbSBub3cgb24sIGJlY2F1c2UgTFo0IGlzIHNvIGZhc3QuIFxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3NNb2RlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENhbGwuYXJncyA9IGF3YWl0IGNvbXByZXNzT2JqTFo0KGZ1bGxDYWxsLmFyZ3MsIHNlbmRTdGF0cykgYXMgYW55O1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENhbGwuaXNBcmdzQ29tcHJlc3NlZCA9IFwiTFo0XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ29tcHJlc3NDYWxsKGZ1bGxDYWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENhbGwuYXJncyA9IGF3YWl0IGNvbXByZXNzT2JqKGZ1bGxDYWxsLmFyZ3MsIHNlbmRTdGF0cykgYXMgYW55O1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENhbGwuaXNBcmdzQ29tcHJlc3NlZCA9IFwiemlwXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFNYXliZVByb21pc2UgPSBTb2NrZXRGdW5jdGlvbi5XSVJFX1NFUklBTElaRVIuc2VyaWFsaXplKGZ1bGxDYWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YU1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGRhdGFNYXliZVByb21pc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFNYXliZVByb21pc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2VuZFN0YXRzLmNvbXByZXNzZWRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3RhbFNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBkIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSArPSBkLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZW5kU3RhdHMudW5jb21wcmVzc2VkU2l6ZSA9IHRvdGFsU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VuZFN0YXRzLmNvbXByZXNzZWRTaXplID0gdG90YWxTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRTZW5kU3RhdHMoc2VuZFN0YXRzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igc2VyaWFsaXppbmcgZGF0YSBmb3IgY2FsbCAke2NhbGwuY2xhc3NHdWlkfS4ke2NhbGwuZnVuY3Rpb25OYW1lfVxcbiR7ZS5zdGFja31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbWUgPSBEYXRlLm5vdygpIC0gdGltZTtcbiAgICAgICAgICAgIGxldCBzaXplID0gZGF0YS5tYXAoeCA9PiB4Lmxlbmd0aCkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gICAgICAgICAgICBpZiAodGltZSA+IFNvY2tldEZ1bmN0aW9uLldJUkVfV0FSTl9USU1FKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVkKGBTbG93IHNlcmlhbGl6ZSwgdG9vayAke2Zvcm1hdFRpbWUodGltZSl9IHRvIHNlcmlhbGl6ZSAke2Zvcm1hdE51bWJlcihzaXplKX0gYnl0ZXMuIEZvciAke2NhbGwuY2xhc3NHdWlkfS4ke2NhbGwuZnVuY3Rpb25OYW1lfWApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNpemUgPiBTb2NrZXRGdW5jdGlvbi5NQVhfTUVTU0FHRV9TSVpFICogMS41KSB7XG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0QXJnSW5kZXggPSBvcmlnaW5hbEFyZ3MuZmluZEluZGV4KGlzU3BsaXRhYmxlQXJyYXkpO1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdEFyZ0luZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coeWVsbG93KGBTcGxpdHRpbmcgbGFyZ2UgY2FsbCBkdWUgdG8gbGFyZ2UgYXJnczogJHtjYWxsLmNsYXNzR3VpZH0uJHtjYWxsLmZ1bmN0aW9uTmFtZX1gKSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBTUExJVF9HUk9VUFMgPSAxMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0QXJnID0gb3JpZ2luYWxBcmdzW3NwbGl0QXJnSW5kZXhdIGFzIHVua25vd25bXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1YkNhbGxzID0gbGlzdChTUExJVF9HUk9VUFMpLm1hcChpbmRleCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSBNYXRoLmZsb29yKGluZGV4IC8gU1BMSVRfR1JPVVBTICogc3BsaXRBcmcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBNYXRoLmZsb29yKChpbmRleCArIDEpIC8gU1BMSVRfR1JPVVBTICogc3BsaXRBcmcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcGxpdEFyZy5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuZmlsdGVyKHggPT4geC5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbHMgPSBzdWJDYWxscy5tYXAoYXN5bmMgc3BsaXRMaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJDYWxsID0geyAuLi5jYWxsIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJDYWxsLmFyZ3MgPSBzdWJDYWxsLmFyZ3Muc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YkNhbGwuYXJnc1tzcGxpdEFyZ0luZGV4XSA9IG1hcmtBcnJheUFzU3BsaXRhYmxlKHNwbGl0TGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjYWxsRmFjdG9yeS5wZXJmb3JtQ2FsbChzdWJDYWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChjYWxscyk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNhbGxzKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRWguLi4gd2UgQ09VTEQgcmV0dXJuIHRoZSBhcnJheSBvZiByZXN1bHRzLCBidXQuLi4gdGhlbiB0aGUgcmVzdWx0IHdvdWxkIHNvbWV0aW1lcyBiZSBhbiBhcnJheSxcbiAgICAgICAgICAgICAgICAgICAgLy8gIHNvbWUgdGltZXMgbm90LCBzbywgaXQgaXMgYmV0dGVyIHRvIHJldHVybiBhIHN0cmluZyB3aGljaCB3aWxsIG1ha2UgaXQgbW9yZSBjbGVhciB3aHkgaXQgc29tZXRpbWVzIHZhcmllcy5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiQ0FMTFNfU1BMSVRfRFVFX1RPX0xBUkdFX0FSR1NcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbGwgdG9vIGxhcmdlIHRvIHNlbmQgKCR7Y2FsbC5jbGFzc0d1aWR9LiR7Y2FsbC5mdW5jdGlvbk5hbWV9LCBzaXplOiAke2Zvcm1hdE51bWJlcihzaXplKX0gPiAke2Zvcm1hdE51bWJlcihTb2NrZXRGdW5jdGlvbi5NQVhfTUVTU0FHRV9TSVpFKX0pLiBJZiB5b3UgbmVlZCB0byBoYW5kbGUgdmVyeSBsYXJnZSBzdGF0aWMgZGF0YSB1c2Ugc29tZSBleHRlcm5hbCBzZXJ2aWNlLCBzdWNoIGFzIEJhY2tibGF6ZSBCMiBvciBBV1MgUzMuIE9yIGNvbnNpZGVyIGZyYWdtZW50aW5nIGRhdGEgYXQgYW4gYXBwbGljYXRpb24gbGV2ZWwsIGJlY2F1c2Ugc2VuZGluZyBsYXJnZSBkYXRhIHdpbGwgY2F1c2UgbGFyZ2UgbGFnIHNwaWtlcyBmb3Igb3RoZXIgY2xpZW50cyB1c2luZyB0aGlzIHNlcnZlci4gT3IsIGlmIGFic29sdXRlbHkgcmVxdWlyZWQsIHNldCBTb2NrZXRGdW5jdGlvbi5NQVhfTUVTU0FHRV9TSVpFIHRvIGEgaGlnaGVyIHZhbHVlLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmVzdWx0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nQ2FsbENvdW50Kys7XG4gICAgICAgICAgICAgICAgbGV0IGNhbGxiYWNrID0gKHJlc3VsdDogSW50ZXJuYWxSZXR1cm5UeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdDYWxsQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ0NhbGxzLmRlbGV0ZShzZXFOdW0pO1xuICAgICAgICAgICAgICAgICAgICBoYXJ2ZXN0YWJsZUNhbGxUaW1lcy5wdXNoKHsgc3RhcnQ6IHN0YXJ0VGltZSwgZW5kOiBEYXRlLm5vdygpLCB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoY29udmVydEVycm9yU3RhY2tUb0Vycm9yKHJlc3VsdC5lcnJvcikpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcGVuZGluZ0NhbGxzLnNldChzZXFOdW0sIHsgY2FsbGJhY2ssIGRhdGEsIGNhbGw6IGZ1bGxDYWxsIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0U2l6ZSA9IGRhdGEubWFwKHggPT4geC5sZW5ndGgpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhbGxiYWNrIG9mIFNvY2tldEZ1bmN0aW9uLnRyYWNrTWVzc2FnZVNpemVzLnVwbG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHRTaXplKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFNvY2tldEZ1bmN0aW9uLmxvZ01lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmbmNIYWNrID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25OYW1lID09PSBcImFkZENhbGxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyZyA9IG9yaWdpbmFsQXJnc1swXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbmNIYWNrID0gYC4ke2FyZy5Eb21haW5OYW1lfS4ke2FyZy5Nb2R1bGVJZH0uJHthcmcuRnVuY3Rpb25JZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTSVpFXFx0JHsoZm9ybWF0TnVtYmVyU3VmZml4ZWQocmVzdWx0U2l6ZSkgKyBgQmApLnBhZEVuZCg0LCBcIiBcIil9XFx0JHtmb3JtYXROdW1iZXIoZGF0YS5sZW5ndGgpfSBidWZmZXJzXFx0UkVNT1RFIENBTExcXHQke2NhbGwuY2xhc3NHdWlkfS4ke2NhbGwuZnVuY3Rpb25OYW1lfSR7Zm5jSGFja30gYXQgJHtEYXRlLm5vdygpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHNlbmRpbmcgT1IgcmVzdWx0UHJvbWlzZSB0aHJvd3MsIHdlIHdhbnQgdG8gZXJyb3Igb3V0LiBUaGlzIHNvbHZlcyBzb21lIGlzc3VlcyB3aXRoIHJlc3VsdFByb21pc2VcbiAgICAgICAgICAgIC8vICAgICAgZXJyb3Jpbmcgb3V0IGZpcnN0LCB3aGljaCBpcyBiZWZvcmUgd2UgYXdhaXQgaXQsIHdoaWNoIG1ha2VzIE5vZGVKUyBhbmdyeSAodW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uKS5cbiAgICAgICAgICAgIC8vICAgICAgQWxzbywgdGVjaG5pY2FsbHksIHdlIGNvdWxkIHJlY2VpdmUgdGhlIHJlc3VsdCBiZWZvcmUgd2UgZmluaXNoIHNlbmRpbmcsIGluIHdoaWNoIGNhc2UsIHdlIG1pZ2h0XG4gICAgICAgICAgICAvLyAgICAgIGFzIHdlbGwgcmV0dXJuIGl0IGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtzZW5kKGRhdGEpLCByZXN1bHRQcm9taXNlXSk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdWx0UHJvbWlzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBsZXQgd2ViU29ja2V0UHJvbWlzZTogUHJvbWlzZTxTZW5kZXJJbnRlcmZhY2U+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBoYXNFdmVyQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgaWYgKHdlYlNvY2tldEJhc2UpIHtcbiAgICAgICAgd2ViU29ja2V0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh3ZWJTb2NrZXRCYXNlKTtcbiAgICAgICAgYXdhaXQgaW5pdGlhbGl6ZVdlYnNvY2tldCh3ZWJTb2NrZXRCYXNlKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplV2Vic29ja2V0KG5ld1dlYlNvY2tldDogU2VuZGVySW50ZXJmYWNlLCBza2lwQ2xvc2VIYW5kbGluZyA9IGZhbHNlKSB7XG4gICAgICAgIHJlZ2lzdGVyT25jZSgpO1xuICAgICAgICBjYWxsRmFjdG9yeS5yZWNlaXZlZEluaXRpYWxpemVTdGF0ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBmdW5jdGlvbiBvbkNsb3NlKGVycm9yOiBzdHJpbmcpIHtcbiAgICAgICAgICAgIC8vIFdlIHRyeSB2YXJpb3VzIGNvbm5lY3Rpb25zLCBhbmQgaWYgdGhleSBmYWlsLCB3ZSB3aWxsIGp1c3QgdHJ5IG90aGVyIG5vZGUgSURzIHVudGlsIHdlIGZpbmFsbHkgZG8gY29ubmVjdCwgYW5kIHRoZW4gd2Ugc3RpY2sgd2l0aCB0aGF0IG5vZGVJZCwgYW5kIHdoZW4gaXQgZGlzY29ubmVjdHMgd2UgbmVlZCB0byBoYW5kbGUgZGlzY29ubmVjdGlvbnMgbm9ybWFsbHkuXG4gICAgICAgICAgICBpZiAoc2tpcENsb3NlSGFuZGxpbmcgJiYgIWhhc0V2ZXJDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxGYWN0b3J5LmNvbm5lY3Rpb25JZCA9IHsgbm9kZUlkIH07XG4gICAgICAgICAgICBjYWxsRmFjdG9yeS5sYXN0Q2xvc2VkID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxGYWN0b3J5LmlzQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB3ZWJTb2NrZXRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFjYW5SZWNvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICBjYWxsRmFjdG9yeS5jbG9zZWRGb3JldmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IFtrZXksIGNhbGxdIG9mIHBlbmRpbmdDYWxscykge1xuICAgICAgICAgICAgICAgIGhhcnZlc3RhYmxlRmFpbGVkQ2FsbHMrKztcbiAgICAgICAgICAgICAgICBwZW5kaW5nQ2FsbHMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgY2FsbC5jYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgICAgIGlzUmV0dXJuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgICAgICBzZXFOdW06IGNhbGwuY2FsbC5zZXFOdW0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjYWxsYmFja3MgPSBkaXNjb25uZWN0Q2FsbGJhY2tzO1xuICAgICAgICAgICAgZGlzY29ubmVjdENhbGxiYWNrcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1dlYlNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZSA9PiB7XG4gICAgICAgICAgICAvLyBOT1RFOiBObyBtb3JlIGxvZ2dpbmcsIGFzIHdlIHRocm93LCBzbyB0aGUgY2FsbGVyIHNob3VsZCBiZSBsb2dnaW5nIHRoZVxuICAgICAgICAgICAgLy8gIGVycm9yIChvciBzd2FsbG93aW5nIGl0LCBpZiB0aGF0IGlzIHdoYXQgaXQgd2FudHMgdG8gZG8pLlxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgV2Vic29ja2V0IGVycm9yIGZvciAke25pY2VDb25uZWN0aW9uTmFtZX1gLCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgb25DbG9zZShuZXcgRXJyb3IoYENvbm5lY3Rpb24gZXJyb3IgZm9yICR7bmljZUNvbm5lY3Rpb25OYW1lfTogJHtlLm1lc3NhZ2V9YCkuc3RhY2shKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3V2ViU29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBXZWJzb2NrZXQgY2xvc2VkICR7bmljZUNvbm5lY3Rpb25OYW1lfWApO1xuICAgICAgICAgICAgb25DbG9zZShuZXcgRXJyb3IoYENvbm5lY3Rpb24gY2xvc2VkIHRvICR7bmljZUNvbm5lY3Rpb25OYW1lfWApLnN0YWNrISk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5ld1dlYlNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbk1lc3NhZ2UpO1xuXG5cbiAgICAgICAgaWYgKG5ld1dlYlNvY2tldC5yZWFkeVN0YXRlID09PSAwIC8qIENPTk5FQ1RJTkcgKi8pIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIG5ld1dlYlNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwib3BlblwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghU29ja2V0RnVuY3Rpb24uc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29ubmVjdGlvbiBlc3RhYmxpc2hlZCB0byAke25pY2VDb25uZWN0aW9uTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsRmFjdG9yeS5pc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhhc0V2ZXJDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbmV3V2ViU29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgICAgICAgIG5ld1dlYlNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld1dlYlNvY2tldC5yZWFkeVN0YXRlID09PSAxIC8qIE9QRU4gKi8pIHtcbiAgICAgICAgICAgIGNhbGxGYWN0b3J5LmlzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGhhc0V2ZXJDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb25DbG9zZShuZXcgRXJyb3IoYFdlYnNvY2tldCByZWNlaXZlZCBpbiBjbG9zZWQgc3RhdGVgKS5zdGFjayEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxGYWN0b3J5Lmxhc3RDbG9zZWQgJiYgY2FsbEZhY3RvcnkuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgcmVjb25uZWN0ZWQgdG8gJHtub2RlSWR9LCB3aGljaCBoYXMgYmVlbiBjbG9zZWQgZm9yICR7Zm9ybWF0VGltZShEYXRlLm5vdygpIC0gY2FsbEZhY3RvcnkubGFzdENsb3NlZCl9YCwgeyBub2RlSWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FsbEZhY3RvcnkuaXNDb25uZWN0ZWQgJiYgbmV3V2ViU29ja2V0LnByb3RvY29sKSB7XG4gICAgICAgICAgICBsZXQgZGVjb2RlZCA9IGRlY29kZVByb3RvY29sKG5ld1dlYlNvY2tldC5wcm90b2NvbCk7XG4gICAgICAgICAgICBpZiAoZGVjb2RlZCkge1xuICAgICAgICAgICAgICAgIGNhbGxGYWN0b3J5LnJlY2VpdmVkSW5pdGlhbGl6ZVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdXBwb3J0c0xaNDogZGVjb2RlZC5mbGFncy5zZXJ2ZXJMWjQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsRmFjdG9yeS5wcm90b2NvbE5lZ290aWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChTb2NrZXRGdW5jdGlvbi5sb2dNZXNzYWdlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhncmVlbihgTmVnb3RpYXRlZCBwcm90b2NvbCB3aXRoICR7bmljZUNvbm5lY3Rpb25OYW1lfTogdGFyZ2V0PSR7ZGVjb2RlZC50YXJnZXR9LCBjbGllbnRMWjQ9JHtkZWNvZGVkLmZsYWdzLmNsaWVudExaNH0sIHNlcnZlckxaND0ke2RlY29kZWQuZmxhZ3Muc2VydmVyTFo0fWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBCQVNFX0xFTkdUSF9PRkZTRVQgPSAzMjRfNDMyXzQ2MV81OTJfNjEyO1xuICAgIHR5cGUgTWVzc2FnZUhlYWRlciA9IHtcbiAgICAgICAgdHlwZTogXCJzZXJpYWxpemVkXCI7XG4gICAgICAgIGJ1ZmZlckNvdW50OiBudW1iZXI7XG4gICAgfSB8IHtcbiAgICAgICAgdHlwZTogXCJCdWZmZXJbXVwiIHwgXCJCdWZmZXJcIjtcbiAgICAgICAgYnVmZmVyQ291bnQ6IG51bWJlcjtcbiAgICAgICAgYnVmZmVyTGVuZ3Rocz86IG51bWJlcltdO1xuICAgICAgICBtZXRhZGF0YTogT21pdDxJbnRlcm5hbFJldHVyblR5cGUsIFwicmVzdWx0XCI+O1xuICAgIH07XG4gICAgbGV0IHNlbmRJblNlcmlhbCA9IHJ1bkluU2VyaWFsKGFzeW5jICh2YWw6ICgpID0+IFByb21pc2U8dm9pZD4pID0+IHZhbCgpKTtcbiAgICBhc3luYyBmdW5jdGlvbiBzZW5kUmF3KGRhdGE6IChzdHJpbmcgfCBCdWZmZXIpW10pIHtcbiAgICAgICAgaWYgKCF3ZWJTb2NrZXRQcm9taXNlKSB7XG4gICAgICAgICAgICBpZiAoY2FuUmVjb25uZWN0KSB7XG4gICAgICAgICAgICAgICAgd2ViU29ja2V0UHJvbWlzZSA9IHRyeVRvUmVjb25uZWN0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNlbmQgZGF0YSB0byAke25pY2VDb25uZWN0aW9uTmFtZX0gYXMgdGhlIGNvbm5lY3Rpb24gaGFzIGNsb3NlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCB3ZWJTb2NrZXQgPSBhd2FpdCB3ZWJTb2NrZXRQcm9taXNlO1xuICAgICAgICBhd2FpdCBzZW5kSW5TZXJpYWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgZCBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGQubGVuZ3RoID4gMTAwMCAqIDEwMDAgKiAxMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2VuZGluZyBsYXJnZSBwYWNrZXQgJHtmb3JtYXROdW1iZXIoZC5sZW5ndGgpfUIgdG8gJHtub2RlSWR9IGF0ICR7RGF0ZS5ub3coKX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBJZiBvdXIgbGF0ZW5jeSBpcyA1MDBtcywgd2l0aCAxME1CL3MsIHRoZW4gd2UgbmVlZCBhIGhpZ2ggd2F0ZXJcbiAgICAgICAgICAgICAgICAvLyAgbWFyayBvZiBhdCBsZWFzdCA1TUIsIG90aGVyd2lzZSBvdXIgY29ubmVjdGlvbiBpcyBzbG93ZWQgZG93bi5cbiAgICAgICAgICAgICAgICAvLyAgLSBVc2luZyB0aGUgYWN0dWFsIGhpZ2ggd2F0ZXIgbWFyayBpcyB0b28gZGlmZmljdWx0LCBhcyB3ZSByZWNlaXZlIGluY29taW5nIGNvbm5lY3Rpb25zLlxuICAgICAgICAgICAgICAgIC8vICAgICAgVGhpcyBpcyBhbHNvIGVhc2llciB0byBjb25maWd1cmUsIGFuZCB3ZSBjYW4gZHluYW1pY2FsbHkgY2hhbmdlIGl0IGlmIHdlIGhhdmUgdG8uXG4gICAgICAgICAgICAgICAgLy8gTk9URTogSW4gcHJhY3RpY2Ugd2Ugb25seSBoaXQgdGhpcyB3aGVuIHNlbmRpbmcgbGFyZ2UgQnVmZmVycyAofjMwTUIpLCBzbyBsb3cgdmFsdWVzXG4gICAgICAgICAgICAgICAgLy8gIGFyZSBlcXVpdmFsZW50IHRvIHdhaXRpbmcgZm9yIGRyYWluLiBXZSB3YW50IHRvIGF2b2lkIHdhaXRpbmcgZm9yIGRyYWluLCBzbyB3ZSB1c2UgYSBoaWdoIHZhbHVlLlxuICAgICAgICAgICAgICAgIGNvbnN0IG1heFdyaXRlQnVmZmVyID0gMTI4ICogMTAyNCAqIDEwMjQ7XG4gICAgICAgICAgICAgICAgd2ViU29ja2V0LnNlbmQoZCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc29ja2V0ID0gd2ViU29ja2V0Ll9zb2NrZXQ7XG4gICAgICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc29ja2V0LndyaXRhYmxlTGVuZ3RoID4gbWF4V3JpdGVCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFdhaXRpbmcgMW1zIHByb2JhYmx5IHdhaXRzIG1vcmUgbGlrZSAxNm1zLlxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGZ1bmN0aW9uIHNlbmQoZGF0YTogQnVmZmVyW10pIHtcbiAgICAgICAgYXdhaXQgc2VuZFJhdyhbXG4gICAgICAgICAgICAoZGF0YS5sZW5ndGggKyBCQVNFX0xFTkdUSF9PRkZTRVQpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICBdKTtcbiAgICB9XG4gICAgYXN5bmMgZnVuY3Rpb24gc2VuZFdpdGhIZWFkZXIoZGF0YTogQnVmZmVyW10sIGhlYWRlcjogTWVzc2FnZUhlYWRlcikge1xuICAgICAgICBpZiAoZGF0YS5zb21lKHggPT4geC5sZW5ndGggPiBTb2NrZXRGdW5jdGlvbi5NQVhfTUVTU0FHRV9TSVpFICogMS41KSkge1xuICAgICAgICAgICAgaWYgKGhlYWRlci50eXBlID09PSBcIkJ1ZmZlclwiIHx8IGhlYWRlci50eXBlID09PSBcIkJ1ZmZlcltdXCIpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXIuYnVmZmVyTGVuZ3RocyA9IGRhdGEubWFwKHggPT4geC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxldCBmaXRCdWZmZXJzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGJ1ZiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWYubGVuZ3RoID4gU29ja2V0RnVuY3Rpb24uTUFYX01FU1NBR0VfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdEJ1ZmZlcnMucHVzaChidWYuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBTb2NrZXRGdW5jdGlvbi5NQVhfTUVTU0FHRV9TSVpFKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IFNvY2tldEZ1bmN0aW9uLk1BWF9NRVNTQUdFX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXRCdWZmZXJzLnB1c2goYnVmKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhID0gZml0QnVmZmVycztcbiAgICAgICAgICAgICAgICBoZWFkZXIuYnVmZmVyQ291bnQgPSBmaXRCdWZmZXJzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2VuZCBsYXJnZSBhbW91bnRzIG9mIGRhdGEgdW5sZXNzIHdlIGFyZSByZXR1cm5pbmcgQnVmZmVyIG9yIEJ1ZmZlcltdYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgKHRvdGFsUmVzdWx0U2l6ZSA+IFNvY2tldEZ1bmN0aW9uLk1BWF9NRVNTQUdFX1NJWkUgKiAxLjUpIHtcbiAgICAgICAgLy8gU3BsaXQgdXAgQnVmZmVyW10gaWYgdGhleSBhcmUgdG9vIGxhcmdlXG4gICAgICAgIGF3YWl0IHNlbmRSYXcoW1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaGVhZGVyKSxcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvLyBJTVBPUlRBTlQhIE5FVkVSIGFsbG93IGZvciByZWNvbm5lY3Rpb24gb2YgY2xpZW50IGlkcy4gQSBsb3Qgb2YgY29kZSBkZXBlbmRzIG9uIHRoZSBmYWN0IHRoYXQgY2xpZW50cyB3aWxsIHJlY29ubmVjdCB3aXRoIGEgbmV3IGNsaWVudCBub2RlIGlkIHdoZW4gdGhleSBkaXNjb25uZWN0IVxuICAgIGFzeW5jIGZ1bmN0aW9uIHRyeVRvUmVjb25uZWN0KCk6IFByb21pc2U8U2VuZGVySW50ZXJmYWNlPiB7XG4gICAgICAgIC8vIERvbid0IHRyeSB0byByZWNvbm5lY3QgdG9vIG9mdGVuIVxuICAgICAgICBsZXQgdGltZVNpbmNlTGFzdEF0dGVtcHQgPSBEYXRlLm5vdygpIC0gbGFzdENvbm5lY3Rpb25BdHRlbXB0O1xuICAgICAgICBpZiAodGltZVNpbmNlTGFzdEF0dGVtcHQgPCBNSU5fUkVUUllfREVMQVkpIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCBNSU5fUkVUUllfREVMQVkgLSB0aW1lU2luY2VMYXN0QXR0ZW1wdCkpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RDb25uZWN0aW9uQXR0ZW1wdCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gVHJ5IGFsdGVybmF0ZXMsIGFuZCBpZiBhbnkgd29yaywgdXNlIHRoZW0uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgYWx0ZXJuYXRlcyA9IGF3YWl0IFNvY2tldEZ1bmN0aW9uLkdFVF9BTFRFUk5BVEVfTk9ERV9JRFMobm9kZUlkKTtcbiAgICAgICAgICAgIGlmIChhbHRlcm5hdGVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYWx0ZXJuYXRlTm9kZUlkIG9mIGFsdGVybmF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1dlYlNvY2tldCA9IGNyZWF0ZVdlYnNvY2tldChhbHRlcm5hdGVOb2RlSWQsIHByb3Bvc2VQcm90b2NvbHMoaXNOb2RlKCkgPyBub2RlSWQgOiB1bmRlZmluZWQsIHsgbHo0OiB0cnVlIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaW5pdGlhbGl6ZVdlYnNvY2tldChuZXdXZWJTb2NrZXQsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsRmFjdG9yeS5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1dlYlNvY2tldDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGdldHRpbmcgYWx0ZXJuYXRlIG5vZGUgSURzXCIsIGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld1dlYlNvY2tldCA9IGNyZWF0ZVdlYnNvY2tldChub2RlSWQsIHByb3Bvc2VQcm90b2NvbHMoIVNvY2tldEZ1bmN0aW9uLmlzQ2xpZW50KCkgPyBub2RlSWQgOiB1bmRlZmluZWQsIHsgbHo0OiB0cnVlIH0pKTtcbiAgICAgICAgYXdhaXQgaW5pdGlhbGl6ZVdlYnNvY2tldChuZXdXZWJTb2NrZXQpO1xuXG4gICAgICAgIHJldHVybiBuZXdXZWJTb2NrZXQ7XG4gICAgfVxuXG4gICAgbGV0IHBlbmRpbmdDYWxsOiBNZXNzYWdlSGVhZGVyICYge1xuICAgICAgICBidWZmZXJzOiBCdWZmZXJbXTtcbiAgICAgICAgZmlyc3RSZWNlaXZlZFRpbWU/OiBudW1iZXI7XG4gICAgfSB8IHVuZGVmaW5lZDtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NQZW5kaW5nQ2FsbCgpIHtcbiAgICAgICAgaWYgKCFwZW5kaW5nQ2FsbCkgdGhyb3cgbmV3IEVycm9yKGBObyBwZW5kaW5nIGNhbGxgKTtcbiAgICAgICAgbGV0IGN1cnJlbnRDYWxsID0gcGVuZGluZ0NhbGw7XG4gICAgICAgIHBlbmRpbmdDYWxsID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgY3VycmVudEJ1ZmZlcnMgPSBjdXJyZW50Q2FsbC5idWZmZXJzO1xuICAgICAgICBsZXQgY2FsbDogSW50ZXJuYWxDYWxsVHlwZSB8IEludGVybmFsUmV0dXJuVHlwZTtcbiAgICAgICAgbGV0IHJlc3VsdFNpemU6IG51bWJlcjtcbiAgICAgICAgbGV0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAoY3VycmVudENhbGwudHlwZSA9PT0gXCJCdWZmZXJcIiB8fCBjdXJyZW50Q2FsbC50eXBlID09PSBcIkJ1ZmZlcltdXCIpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ6IEJ1ZmZlciB8IEJ1ZmZlcltdID0gY3VycmVudEJ1ZmZlcnM7XG4gICAgICAgICAgICBpZiAoY3VycmVudENhbGwuYnVmZmVyTGVuZ3Rocykge1xuICAgICAgICAgICAgICAgIGxldCBwZW5kaW5nQnVmZmVycyA9IGN1cnJlbnRCdWZmZXJzO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRha2VCdWZmZXIobGVuOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxlbkxlZnQgPSBsZW47XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmZXJzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuTGVmdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidWYgPSBjdXJyZW50QnVmZmVycy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFidWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBlbm91Z2ggYnVmZmVycyByZWNlaXZlZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWYubGVuZ3RoID4gbGVuTGVmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChidWYuc2xpY2UoMCwgbGVuTGVmdCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCdWZmZXJzLnVuc2hpZnQoYnVmLnNsaWNlKGxlbkxlZnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuTGVmdCAtPSBidWYubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcnNbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnRDYWxsLmJ1ZmZlckxlbmd0aHMubWFwKHRha2VCdWZmZXIpO1xuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nQnVmZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjZWl2ZWQgdG9vIG1hbnkgYnVmZmVycy5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRTaXplID0gcmVzdWx0Lm1hcCh4ID0+IHgubGVuZ3RoKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q2FsbC50eXBlID09PSBcIkJ1ZmZlclwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJ1ZmZlci5jb25jYXQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsID0ge1xuICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDYWxsLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRTaXplID0gY3VycmVudEJ1ZmZlcnMubWFwKHggPT4geC5sZW5ndGgpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICAgICAgICAgICAgY2FsbCA9IGF3YWl0IFNvY2tldEZ1bmN0aW9uLldJUkVfU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZShjdXJyZW50QnVmZmVycykgYXMgSW50ZXJuYWxDYWxsVHlwZSB8IEludGVybmFsUmV0dXJuVHlwZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFyc2VUaW1lID0gRGF0ZS5ub3coKSAtIHRpbWU7XG4gICAgICAgIGZvciAobGV0IGNhbGxiYWNrIG9mIFNvY2tldEZ1bmN0aW9uLnRyYWNrTWVzc2FnZVNpemVzLmRvd25sb2FkKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHRTaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZWNlaXZlU3RhdHM6IENvbXByZXNzaW9uU3RhdHMgPSB7XG4gICAgICAgICAgICB1bmNvbXByZXNzZWRTaXplOiByZXN1bHRTaXplLFxuICAgICAgICAgICAgY29tcHJlc3NlZFNpemU6IHJlc3VsdFNpemUsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzZW5kU3RhdHM6IENvbXByZXNzaW9uU3RhdHMgPSB7XG4gICAgICAgICAgICB1bmNvbXByZXNzZWRTaXplOiAwLFxuICAgICAgICAgICAgY29tcHJlc3NlZFNpemU6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNhbGwuaXNSZXR1cm4pIHtcbiAgICAgICAgICAgIC8vIFRvbGVyYXRlIHRoZSBsZWdhY3kgaW5pdGlhbGl6ZSBwYWNrZXQgZnJvbSBvbGQgcGVlcnMg4oCUIHNpbGVudGx5XG4gICAgICAgICAgICAvLyBpZ25vcmUgc28gaXQgZG9lc24ndCBnZXQgbG9nZ2VkIGFzIGFuIHVua25vd24gY2FsbC4gT3VyIGFjdHVhbFxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBzdGF0ZSBjb21lcyBmcm9tIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgbmVnb3RpYXRpb24uXG4gICAgICAgICAgICBpZiAoY2FsbC5zZXFOdW0gPT09IElOSVRJQUxJWkVfU1RBVEVfU0VRX05VTSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYWxsYmFja09iaiA9IHBlbmRpbmdDYWxscy5nZXQoY2FsbC5zZXFOdW0pO1xuICAgICAgICAgICAgaWYgKHBhcnNlVGltZSA+IFNvY2tldEZ1bmN0aW9uLldJUkVfV0FSTl9USU1FKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVkKGBTbG93IHBhcnNlLCB0b29rICR7cGFyc2VUaW1lfW1zIHRvIHBhcnNlICR7cmVzdWx0U2l6ZX0gYnl0ZXMsIGZvciByZWNlaXZpbmcgcmVzdWx0IG9mIGNhbGwgdG8gJHtjYWxsYmFja09iaj8uY2FsbC5jbGFzc0d1aWR9LiR7Y2FsbGJhY2tPYmo/LmNhbGwuZnVuY3Rpb25OYW1lfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2FsbGJhY2tPYmopIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhibHVlKGBHb3QgcmV0dXJuIGZvciB1bmtub3duIGNhbGwgJHtjYWxsLnNlcU51bX0gKGNyZWF0ZWQgYXQgdGltZSAke25ldyBEYXRlKGNhbGwuc2VxTnVtKX0pLCAke25vZGVJZH0gLyAke2xvY2FsTm9kZUlkfWApKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoU29ja2V0RnVuY3Rpb24ubG9nTWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2FsbCA9IGNhbGxiYWNrT2JqLmNhbGw7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNJWkVcXHQkeyhmb3JtYXROdW1iZXJTdWZmaXhlZChyZXN1bHRTaXplKSArIFwiQlwiKS5wYWRFbmQoNCwgXCIgXCIpfVxcdCR7Zm9ybWF0TnVtYmVyKGN1cnJlbnRCdWZmZXJzLmxlbmd0aCl9IGJ1ZmZlcnNcXHRSRVRVUk5cXHQke2NhbGwuY2xhc3NHdWlkfS4ke2NhbGwuZnVuY3Rpb25OYW1lfSBhdCAke0RhdGUubm93KCl9LCAoJHtub2RlSWR9IC8gJHtsb2NhbE5vZGVJZH0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FsbC5pc1Jlc3VsdENvbXByZXNzZWQgPT09IFwiTFo0XCIpIHtcbiAgICAgICAgICAgICAgICBjYWxsLnJlc3VsdCA9IGF3YWl0IGRlY29tcHJlc3NPYmpMWjQoY2FsbC5yZXN1bHQgYXMgQnVmZmVyW10sIHJlY2VpdmVTdGF0cyk7XG4gICAgICAgICAgICAgICAgY2FsbC5pc1Jlc3VsdENvbXByZXNzZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhbGwuaXNSZXN1bHRDb21wcmVzc2VkID09PSBcInppcFwiIHx8IGNhbGwuaXNSZXN1bHRDb21wcmVzc2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY2FsbC5yZXN1bHQgPSBhd2FpdCBkZWNvbXByZXNzT2JqKGNhbGwucmVzdWx0IGFzIEJ1ZmZlciwgcmVjZWl2ZVN0YXRzKTtcbiAgICAgICAgICAgICAgICBjYWxsLmlzUmVzdWx0Q29tcHJlc3NlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrT2JqLmNhbGxiYWNrKGNhbGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNhbGwuaXNBcmdzQ29tcHJlc3NlZCA9PT0gXCJMWjRcIikge1xuICAgICAgICAgICAgICAgIGNhbGwuYXJncyA9IGF3YWl0IGRlY29tcHJlc3NPYmpMWjQoY2FsbC5hcmdzIGFzIGFueSBhcyBCdWZmZXJbXSwgc2VuZFN0YXRzKSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgY2FsbC5pc0FyZ3NDb21wcmVzc2VkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjYWxsLmlzQXJnc0NvbXByZXNzZWQgPT09IFwiemlwXCIgfHwgY2FsbC5pc0FyZ3NDb21wcmVzc2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY2FsbC5hcmdzID0gYXdhaXQgZGVjb21wcmVzc09iaihjYWxsLmFyZ3MgYXMgYW55IGFzIEJ1ZmZlciwgc2VuZFN0YXRzKSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgY2FsbC5pc0FyZ3NDb21wcmVzc2VkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFNvY2tldEZ1bmN0aW9uLmxvZ01lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNJWkVcXHQkeyhmb3JtYXROdW1iZXJTdWZmaXhlZChyZXN1bHRTaXplKSArIFwiQlwiKS5wYWRFbmQoNCwgXCIgXCIpfVxcdEVWQUxVQVRFXFx0JHtjYWxsLmNsYXNzR3VpZH0uJHtjYWxsLmZ1bmN0aW9uTmFtZX0gYXQgJHtEYXRlLm5vdygpfSwgKCR7bm9kZUlkfSAvICR7bG9jYWxOb2RlSWR9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcnNlVGltZSA+IFNvY2tldEZ1bmN0aW9uLldJUkVfV0FSTl9USU1FKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVkKGBTbG93IHBhcnNlLCB0b29rICR7cGFyc2VUaW1lfW1zIHRvIHBhcnNlICR7cmVzdWx0U2l6ZX0gYnl0ZXMsIGZvciBjYWxsIHRvICR7Y2FsbC5jbGFzc0d1aWR9LiR7Y2FsbC5mdW5jdGlvbk5hbWV9YCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U6IEludGVybmFsUmV0dXJuVHlwZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgU29ja2V0RnVuY3Rpb24uVE9UQUxfQ0FMTFMrKztcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUxvY2FsQ2FsbCh7IGNhbGwsIGNhbGxlcjogY2FsbGVyQ29udGV4dCB9KTtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgaXNSZXR1cm46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgc2VxTnVtOiBjYWxsLnNlcU51bSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChTb2NrZXRGdW5jdGlvbi5sb2dNZXNzYWdlcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGltZVRha2VuID0gRGF0ZS5ub3coKSAtIHRpbWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBEVVJcXHQkeyhmb3JtYXRUaW1lKHRpbWVUYWtlbikpLnBhZEVuZCg2LCBcIiBcIil9XFx0RklOSVNIXFx0JHtjYWxsLmNsYXNzR3VpZH0uJHtjYWxsLmZ1bmN0aW9uTmFtZX0gYXQgJHtEYXRlLm5vdygpfSwgKCR7bm9kZUlkfSAvICR7bG9jYWxOb2RlSWR9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2FsbEZhY3RvcnkucmVjZWl2ZWRJbml0aWFsaXplU3RhdGU/LnN1cHBvcnRzTFo0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wcmVzc01vZGUgPSBzaG91bGRDb21wcmVzc0NhbGwoY2FsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wcmVzc01vZGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXN1bHQgPSBhd2FpdCBjb21wcmVzc09iakxaNChyZXNwb25zZS5yZXN1bHQsIHNlbmRTdGF0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5pc1Jlc3VsdENvbXByZXNzZWQgPSBcIkxaNFwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZENvbXByZXNzQ2FsbChjYWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVzdWx0ID0gYXdhaXQgY29tcHJlc3NPYmoocmVzcG9uc2UucmVzdWx0LCBzZW5kU3RhdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaXNSZXN1bHRDb21wcmVzc2VkID0gXCJ6aXBcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICBpc1JldHVybjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHNlcU51bTogY2FsbC5zZXFOdW0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlLnN0YWNrLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gdGltZTtcbiAgICAgICAgICAgICAgICBsZXQgZW5kID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBmbmMgb2YgU29ja2V0RnVuY3Rpb24udHJhY2tNZXNzYWdlU2l6ZXMuY2FsbFRpbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuYyh7IHN0YXJ0LCBlbmQgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgc2l6ZSA9IDA7XG5cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHQgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgeyByZXN1bHQsIC4uLnJlbWFpbmluZyB9ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgc2l6ZSA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2VuZFdpdGhIZWFkZXIoW3Jlc3VsdF0sIHsgdHlwZTogXCJCdWZmZXJcIiwgYnVmZmVyQ291bnQ6IDEsIG1ldGFkYXRhOiByZW1haW5pbmcgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UucmVzdWx0KSAmJiByZXNwb25zZS5yZXN1bHQuZXZlcnkoeCA9PiB4IGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgICAgICAgICAgICAgIGxldCB7IHJlc3VsdCwgLi4ucmVtYWluaW5nIH0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByIG9mIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBzaXplICs9IHIubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCBzZW5kV2l0aEhlYWRlcihyZXN1bHQsIHsgdHlwZTogXCJCdWZmZXJbXVwiLCBidWZmZXJDb3VudDogcmVzdWx0Lmxlbmd0aCwgbWV0YWRhdGE6IHJlbWFpbmluZyB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTElNSVQgPSBnZXRDYWxsRmxhZ3MoY2FsbCk/LnJlc3BvbnNlTGltaXQgfHwgU29ja2V0RnVuY3Rpb24uTUFYX01FU1NBR0VfU0laRSAqIDEuNTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBCdWZmZXJbXSA9IGF3YWl0IFNvY2tldEZ1bmN0aW9uLldJUkVfU0VSSUFMSVpFUi5zZXJpYWxpemUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGxldCB0b3RhbFJlc3VsdFNpemUgPSByZXN1bHQubWFwKHggPT4geC5sZW5ndGgpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICAgICAgICAgICAgICAgIGlmICh0b3RhbFJlc3VsdFNpemUgPiBMSU1JVCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmV0dXJuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXFOdW06IGNhbGwuc2VxTnVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihgUmVzcG9uc2UgdG9vIGxhcmdlIHRvIHNlbmQuIFJldHVybiBCdWZmZXJbXSB0byBleGNlZWQgdGhlIGxpbWl0cywgb3Igc2V0IHJlc3BvbnNlTGltaXQgd2hlbiByZWdpc3RlcmluZyB0aGUgY29sbGVjdGlvbi4gJHtjYWxsLmNsYXNzR3VpZH0uJHtjYWxsLmZ1bmN0aW9uTmFtZX0sIHNpemU6ICR7Zm9ybWF0TnVtYmVyKHRvdGFsUmVzdWx0U2l6ZSl9ID4gJHtmb3JtYXROdW1iZXIoU29ja2V0RnVuY3Rpb24uTUFYX01FU1NBR0VfU0laRSl9LiBJZiB5b3UgbmVlZCB0byBoYW5kbGUgdmVyeSBsYXJnZSBzdGF0aWMgZGF0YSB1c2Ugc29tZSBleHRlcm5hbCBzZXJ2aWNlLCBzdWNoIGFzIEJhY2tibGF6ZSBCMiBvciBBV1MgUzMuIE9yLCBpZiBhYnNvbHV0ZWx5IHJlcXVpcmVkLCBzZXQgU29ja2V0RnVuY3Rpb24uTUFYX01FU1NBR0VfU0laRSB0byBhIGhpZ2hlciB2YWx1ZS5gKS5zdGFjayxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgU29ja2V0RnVuY3Rpb24uV0lSRV9TRVJJQUxJWkVSLnNlcmlhbGl6ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IHIgb2YgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNpemUgKz0gci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHNlbmQocmVzdWx0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBzaXplLCB0aGVuIGl0J3MgcHJvYmFibHkgdW5jb21wcmVzc2VkXG4gICAgICAgICAgICBpZiAoIXNlbmRTdGF0cy5jb21wcmVzc2VkU2l6ZSkge1xuICAgICAgICAgICAgICAgIHNlbmRTdGF0cy5jb21wcmVzc2VkU2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgc2VuZFN0YXRzLnVuY29tcHJlc3NlZFNpemUgPSBzaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYWRkU2VuZFN0YXRzKHNlbmRTdGF0cyk7XG4gICAgICAgIGFkZFJlY2VpdmVTdGF0cyhyZWNlaXZlU3RhdHMpO1xuICAgIH1cblxuICAgIGxldCBjbGllbnRzaWRlU2VyaWFsID0gcnVuSW5TZXJpYWwoYXN5bmMgPFQ+KHZhbDogUHJvbWlzZTxUPikgPT4gdmFsKTtcbiAgICBhc3luYyBmdW5jdGlvbiBvbk1lc3NhZ2UobWVzc2FnZTogd3MuUmF3RGF0YSB8IHdzLk1lc3NhZ2VFdmVudCB8IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmIFwiZGF0YVwiIGluIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXh0cmEgY2xpZW5zaWRlIHBhcnNpbmcgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgIGlmICghaXNOb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJbW1lZGlhdGVseSBzdGFydCB0aGUgYXJyYXlCdWZmZXIgY29udmVyc2lvbi4gVGhpcyBzaG91bGQgYmUgZmFzdCwgYnV0Li4uXG4gICAgICAgICAgICAgICAgLy8gIG1heWJlIHdlIHdpbGwgYWRkIG1vcmUgaGVyZSwgYW5kIHNvIGRvaW5nIGl0IGluIHBhcmFsbGVsIG1pZ2h0IGJlIHVzZWZ1bC5cbiAgICAgICAgICAgICAgICBsZXQgZml4TWVzc2FnZUJsb2IgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBCdWZmZXIuZnJvbShhd2FpdCBtZXNzYWdlLmFycmF5QnVmZmVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGZvcmNlIHRoZSByZXN1bHRzIHRvIGJlIGluIHNlcmlhbCwgb3RoZXJ3aXNlIHN0cmluZ3MgbGVhcGZyb2dcbiAgICAgICAgICAgICAgICAvLyAgYWhlYWQgb2YgYnVmZmVycywgd2hpY2ggYnJlYWtzIHRoaW5ncy5cbiAgICAgICAgICAgICAgICBhd2FpdCBjbGllbnRzaWRlU2VyaWFsKGZpeE1lc3NhZ2VCbG9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSBKU09OLnBhcnNlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nQ2FsbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IHBhcnNlSW50KG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oY291bnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbWVzc2FnZSBjb3VudCAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgQkFTRV9MRU5HVEhfT0ZGU0VUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbWVzc2FnZSBjb3VudCAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY291bnQgLT0gQkFTRV9MRU5HVEhfT0ZGU0VUO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAxMDAwICogMTAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1lc3NhZ2UgY291bnQgJHtjb3VudH1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nQ2FsbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyQ291bnQ6IGNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzZXJpYWxpemVkXCIsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nQ2FsbD8uYnVmZmVyQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHJvY2Vzc1BlbmRpbmdDYWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwZW5kaW5nQ2FsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlY2VpdmVkIGRhdGEgd2l0aG91dCBzaXplICR7bWVzc2FnZS5ieXRlTGVuZ3RofUIsIGZpcnN0IDEwMCBieXRlczogJHttZXNzYWdlLnNsaWNlKDAsIDEwMCkudG9TdHJpbmcoXCJoZXhcIil9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB0b3RhbFNpemUgPSBtZXNzYWdlLmJ5dGVMZW5ndGggKyBwZW5kaW5nQ2FsbC5idWZmZXJzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIubGVuZ3RoLCAwKTtcbiAgICAgICAgICAgICAgICBpZiAodG90YWxTaXplID4gMTAwMCAqIDEwMDAgKiAxMCB8fCBwZW5kaW5nQ2FsbC5idWZmZXJDb3VudCA+IDEwMDAgJiYgKHBlbmRpbmdDYWxsLmJ1ZmZlcnMubGVuZ3RoICUgMTAwID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVuZGluZ0NhbGwuYnVmZmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZWNlaXZlZCBsYXJnZS9tYW55IHBhY2tldHMgJHtmb3JtYXROdW1iZXIodG90YWxTaXplKX1CICgke3BlbmRpbmdDYWxsLmJ1ZmZlcnMubGVuZ3RofSAvICR7cGVuZGluZ0NhbGwuYnVmZmVyQ291bnR9KSBhdCAke0RhdGUubm93KCl9YCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZWxhcHNlZCA9IERhdGUubm93KCkgLSAocGVuZGluZ0NhbGwuZmlyc3RSZWNlaXZlZFRpbWUgfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVjZWl2ZWQgbGFyZ2UvbWFueSBwYWNrZXRzICR7Zm9ybWF0TnVtYmVyKHRvdGFsU2l6ZSl9QiAoJHtwZW5kaW5nQ2FsbC5idWZmZXJzLmxlbmd0aH0gLyAke3BlbmRpbmdDYWxsLmJ1ZmZlckNvdW50fSkgYWZ0ZXIgJHtmb3JtYXRUaW1lKGVsYXBzZWQpfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nQ2FsbC5idWZmZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nQ2FsbC5maXJzdFJlY2VpdmVkVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlbmRpbmdDYWxsLmJ1ZmZlcnMucHVzaChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBpZiAocGVuZGluZ0NhbGwuYnVmZmVycy5sZW5ndGggIT09IHBlbmRpbmdDYWxsLmJ1ZmZlckNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBwcm9jZXNzUGVuZGluZ0NhbGwoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBkYXRhIHR5cGUgJHt0eXBlb2YgbWVzc2FnZX1gKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBsZXQgZXJyID0gZS5zdGFjayB8fCBlLm1lc3NhZ2UgfHwgZTtcbiAgICAgICAgICAgIC8vIE5PVEU6IEknbSBsb29raW5nIGZvciBhbGwgdHlwZXMgb2YgZXJyb3JzIGhlcmUgKHNwZWNpZmljYWxseSwgLnNlbmQgZXJyb3JzKSwgaW4gY2FzZVxuICAgICAgICAgICAgLy8gIHRoZXJlIGFyZSBlcnJvcnMgSSBzaG91bGQgYmUgaGFuZGxpbmcuXG4gICAgICAgICAgICBpZiAoZXJyLnN0YXJ0c1dpdGgoXCJFcnJvcjogQ2Fubm90IHNlbmQgZGF0YSB0b1wiKSAmJiBlcnIuaW5jbHVkZXMoXCJhcyB0aGUgY29ubmVjdGlvbiBoYXMgY2xvc2VkXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBmaW5lLCBqdXN0IGlnbm9yZSBpdFxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIuaW5jbHVkZXMoXCJUaGUgcmVxdWVzdGVkIGZpbGUgY291bGQgbm90IGJlIHJlYWQsIHR5cGljYWxseSBkdWUgdG8gcGVybWlzc2lvbiBwcm9ibGVtcyB0aGF0IGhhdmUgb2NjdXJyZWQgYWZ0ZXIgYSByZWZlcmVuY2UgdG8gYSBmaWxlIHdhcyBhY3F1aXJlZC5cIikpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBXZWJTb2NrZXQgZGF0YSB3YXMgZHJvcHBlZCBieSB0aGUgYnJvd3NlciBkdWUgdG8gZXhjZWVkaW5nIHRoZSBCbG9iIGxpbWl0LiBFaXRoZXIgeW91IGFyZSBhYm91dCB0byBydW4gb3V0IG9mIG1lbW9yeSwgb3IgeW91IGhpdCB0aGUgbXVjaCBsb3dlciBJbmNvZ25pdG8gQmxvYiBsaW1pdC4gVGhpcyB3aWxsIGxpa2VseSBicmVhayB0aGUgYXBwbGljYXRpb24uIFRvIHJlc2V0IHRoZSBtZW1vcnkgeW91IG11c3QgY2xvc2UgYWxsIHRhYnMgb2YgdGhpcyBzaXRlLiBUaGlzIGlzIGEgYnVnL2ZlYXR1cmUgaW4gY2hyb21lLmApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICByZXR1cm4gY2FsbEZhY3Rvcnk7XG59XG5cblxubGV0IHVuY29tcHJlc3NlZFNlbnQgPSAwO1xubGV0IGNvbXByZXNzZWRTZW50ID0gMDtcbmxldCB1bmNvbXByZXNzZWRSZWNlaXZlZCA9IDA7XG5sZXQgY29tcHJlc3NlZFJlY2VpdmVkID0gMDtcblxubGV0IHNlbmRDb3VudCA9IDA7XG5sZXQgcmVjZWl2ZUNvdW50ID0gMDtcblxuZnVuY3Rpb24gYWRkU2VuZFN0YXRzKHN0YXRzOiBDb21wcmVzc2lvblN0YXRzKSB7XG4gICAgdW5jb21wcmVzc2VkU2VudCArPSBzdGF0cy51bmNvbXByZXNzZWRTaXplO1xuICAgIGNvbXByZXNzZWRTZW50ICs9IHN0YXRzLmNvbXByZXNzZWRTaXplO1xuICAgIHNlbmRDb3VudCsrO1xufVxuZnVuY3Rpb24gYWRkUmVjZWl2ZVN0YXRzKHN0YXRzOiBDb21wcmVzc2lvblN0YXRzKSB7XG4gICAgdW5jb21wcmVzc2VkUmVjZWl2ZWQgKz0gc3RhdHMudW5jb21wcmVzc2VkU2l6ZTtcbiAgICBjb21wcmVzc2VkUmVjZWl2ZWQgKz0gc3RhdHMuY29tcHJlc3NlZFNpemU7XG4gICAgcmVjZWl2ZUNvdW50Kys7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdW5jb21wcmVzc2VkU2VudCxcbiAgICAgICAgY29tcHJlc3NlZFNlbnQsXG4gICAgICAgIHVuY29tcHJlc3NlZFJlY2VpdmVkLFxuICAgICAgICBjb21wcmVzc2VkUmVjZWl2ZWQsXG4gICAgICAgIHNlbmRDb3VudCxcbiAgICAgICAgcmVjZWl2ZUNvdW50LFxuICAgIH07XG59XG4vLyBSZWdpc3RlciB0aGlzIGxhdGUgYXMgSSBkb24ndCB3YW50IGl0IHRvIGFwcGVhciBiZWZvcmUgdGhlIG1lbW9yeSByZWdpc3RlciBpbmZvLCB3aGljaCBpcyB1c2UgbW9yZSB1c2VmdWwgdGhhbiB0aGUgbmV0d29yayBvbmUuIFxuc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICByZWdpc3Rlck1lYXN1cmVJbmZvKCgpID0+IGBORVQgPT4gJHtmb3JtYXROdW1iZXIoY29tcHJlc3NlZFNlbnQpfUIgKCR7Zm9ybWF0TnVtYmVyKHVuY29tcHJlc3NlZFNlbnQpfUIvJHtmb3JtYXROdW1iZXIoc2VuZENvdW50KX0pIC8gPD0gJHtmb3JtYXROdW1iZXIoY29tcHJlc3NlZFJlY2VpdmVkKX1CICgke2Zvcm1hdE51bWJlcih1bmNvbXByZXNzZWRSZWNlaXZlZCl9Qi8ke2Zvcm1hdE51bWJlcihyZWNlaXZlQ291bnQpfSlgKTtcbn0pO1xuXG50eXBlIENvbXByZXNzaW9uU3RhdHMgPSB7XG4gICAgdW5jb21wcmVzc2VkU2l6ZTogbnVtYmVyO1xuICAgIGNvbXByZXNzZWRTaXplOiBudW1iZXI7XG59O1xuXG5jb25zdCBjb21wcmVzc09iaiA9IG1lYXN1cmVXcmFwKGFzeW5jIGZ1bmN0aW9uIHdpcmVDYWxsQ29tcHJlc3Mob2JqOiB1bmtub3duLCBzdGF0czogQ29tcHJlc3Npb25TdGF0cyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgbGV0IGJ1ZmZlcnMgPSBhd2FpdCBTb2NrZXRGdW5jdGlvbi5XSVJFX1NFUklBTElaRVIuc2VyaWFsaXplKG9iaik7XG4gICAgaWYgKGJ1ZmZlcnMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMZWdhY3kgQ29tcHJlc3NPYmogb25seSBzdXBwb3J0cyBzaW5nbGUgYnVmZmVyXCIpO1xuICAgIH1cbiAgICBsZXQgbGVuZ3RoQnVmZmVyID0gQnVmZmVyLmZyb20oKG5ldyBGbG9hdDY0QXJyYXkoYnVmZmVycy5tYXAoeCA9PiB4Lmxlbmd0aCkpKS5idWZmZXIpO1xuICAgIGxldCBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFtsZW5ndGhCdWZmZXIsIC4uLmJ1ZmZlcnNdKTtcbiAgICBzdGF0cy51bmNvbXByZXNzZWRTaXplICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IFppcC5nemlwKGJ1ZmZlcik7XG4gICAgc3RhdHMuY29tcHJlc3NlZFNpemUgKz0gcmVzdWx0Lmxlbmd0aDtcbiAgICByZXR1cm4gcmVzdWx0O1xufSk7XG4vLyBBc3N1bWVzIHRoZSBjYWxsZXIgYWxyZWFkeSBhZGRlZCB0aGUgb2JqLmxlbmd0aCB0byBib3RoIHRoZSB1bmNvbXByZXNzZWRTaXplIGFuZCBjb21wcmVzc2VkU2l6ZSwgYW5kIGlzIGp1c3QgbG9va2luZyB0byB1cGRhdGUgdGhlIHVuY29tcHJlc3NlZFNpemUgdG8gYmUgbGFyZ2VyIGFjY29yZGluZyB0byB0aGUgc2l6ZSBhZnRlciB3ZSB1bmNvbXByZXNzXG5jb25zdCBkZWNvbXByZXNzT2JqID0gbWVhc3VyZVdyYXAoYXN5bmMgZnVuY3Rpb24gd2lyZUNhbGxEZWNvbXByZXNzKG9iajogQnVmZmVyLCBzdGF0czogQ29tcHJlc3Npb25TdGF0cyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGxldCBidWZmZXIgPSBhd2FpdCBaaXAuZ3VuemlwKG9iaik7XG4gICAgc3RhdHMudW5jb21wcmVzc2VkU2l6ZSArPSBidWZmZXIubGVuZ3RoIC0gb2JqLmxlbmd0aDtcbiAgICBsZXQgbGVuZ3RoQnVmZmVyID0gYnVmZmVyLnNsaWNlKDAsIDgpO1xuICAgIGxldCBsZW5ndGhzID0gbmV3IEZsb2F0NjRBcnJheShsZW5ndGhCdWZmZXIuYnVmZmVyLCBsZW5ndGhCdWZmZXIuYnl0ZU9mZnNldCwgbGVuZ3RoQnVmZmVyLmJ5dGVMZW5ndGggLyA4KTtcbiAgICBsZXQgYnVmZmVyczogQnVmZmVyW10gPSBbXTtcbiAgICBsZXQgb2Zmc2V0ID0gODtcbiAgICBmb3IgKGxldCBsZW5ndGggb2YgbGVuZ3Rocykge1xuICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKSk7XG4gICAgICAgIG9mZnNldCArPSBsZW5ndGg7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSBhd2FpdCBTb2NrZXRGdW5jdGlvbi5XSVJFX1NFUklBTElaRVIuZGVzZXJpYWxpemUoYnVmZmVycyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5jb25zdCBjb21wcmVzc09iakxaNCA9IG1lYXN1cmVXcmFwKGFzeW5jIGZ1bmN0aW9uIHdpcmVDYWxsQ29tcHJlc3NMWjQob2JqOiB1bmtub3duLCBzdGF0czogQ29tcHJlc3Npb25TdGF0cyk6IFByb21pc2U8QnVmZmVyW10+IHtcbiAgICBjb25zdCB7IExaNCB9ID0gYXdhaXQgaW1wb3J0KFwiLi9sejQvTFo0XCIpO1xuICAgIGxldCBoZWFkZXJQYXJ0czogbnVtYmVyW107XG4gICAgbGV0IGRhdGFCdWZmZXJzOiBCdWZmZXJbXTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgaGVhZGVyUGFydHMgPSBbMV07XG4gICAgICAgIGRhdGFCdWZmZXJzID0gW29ial07XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iaikgJiYgb2JqLmV2ZXJ5KCh4OiBhbnkpID0+IHggaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgICAgIGxldCBidWZmZXJBcnJheSA9IG9iaiBhcyBCdWZmZXJbXTtcbiAgICAgICAgY29uc3QgVEFSR0VUX1NJWkUgPSA1MCAqIDEwMjQgKiAxMDI0O1xuICAgICAgICBjb25zdCBNSU5fSU5ESVZJRFVBTF9TSVpFID0gMTAgKiAxMDI0ICogMTAyNDtcbiAgICAgICAgY29uc3QgTUFYX1VOU1BMSVRfU0laRSA9IDEwMCAqIDEwMjQgKiAxMDI0O1xuXG4gICAgICAgIGxldCBvdXRwdXRCdWZmZXJzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICBsZXQgb3V0cHV0RGVzY3JpcHRvcnM6IG51bWJlcltdW10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cDogQnVmZmVyW10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cFNpemUgPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIGZsdXNoQ3VycmVudEdyb3VwKCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRHcm91cC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVycy5wdXNoKEJ1ZmZlci5jb25jYXQoY3VycmVudEdyb3VwKSk7XG4gICAgICAgICAgICAgICAgb3V0cHV0RGVzY3JpcHRvcnMucHVzaChjdXJyZW50R3JvdXAubWFwKGIgPT4gYi5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSBbXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBTaXplID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGJ1ZiBvZiBidWZmZXJBcnJheSkge1xuICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGggPj0gTUlOX0lORElWSURVQUxfU0laRSkge1xuICAgICAgICAgICAgICAgIGZsdXNoQ3VycmVudEdyb3VwKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCA+IE1BWF9VTlNQTElUX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2h1bmtTaXplID0gTWF0aC5taW4oVEFSR0VUX1NJWkUsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVycy5wdXNoKGJ1Zi5zbGljZShvZmZzZXQsIG9mZnNldCArIGNodW5rU2l6ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RGVzY3JpcHRvcnMucHVzaChbY2h1bmtTaXplXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gY2h1bmtTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dERlc2NyaXB0b3JzLnB1c2goW2J1Zi5sZW5ndGhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5wdXNoKGJ1Zik7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwU2l6ZSArPSBidWYubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRHcm91cFNpemUgPj0gVEFSR0VUX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmx1c2hDdXJyZW50R3JvdXAoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmbHVzaEN1cnJlbnRHcm91cCgpO1xuXG4gICAgICAgIGhlYWRlclBhcnRzID0gWzIsIG91dHB1dEJ1ZmZlcnMubGVuZ3RoXTtcbiAgICAgICAgZm9yIChsZXQgZGVzY3JpcHRvciBvZiBvdXRwdXREZXNjcmlwdG9ycykge1xuICAgICAgICAgICAgaGVhZGVyUGFydHMucHVzaChkZXNjcmlwdG9yLmxlbmd0aCwgLi4uZGVzY3JpcHRvcik7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YUJ1ZmZlcnMgPSBvdXRwdXRCdWZmZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBidWZmZXJzID0gYXdhaXQgU29ja2V0RnVuY3Rpb24uV0lSRV9TRVJJQUxJWkVSLnNlcmlhbGl6ZShvYmopO1xuICAgICAgICBoZWFkZXJQYXJ0cyA9IFszLCBidWZmZXJzLmxlbmd0aF07XG4gICAgICAgIGRhdGFCdWZmZXJzID0gYnVmZmVycztcbiAgICB9XG5cbiAgICBsZXQgaGVhZGVyQnVmZmVyID0gQnVmZmVyLmZyb20oKG5ldyBGbG9hdDY0QXJyYXkoaGVhZGVyUGFydHMpKS5idWZmZXIpO1xuICAgIGxldCBhbGxCdWZmZXJzID0gW2hlYWRlckJ1ZmZlciwgLi4uZGF0YUJ1ZmZlcnNdO1xuXG4gICAgc3RhdHMudW5jb21wcmVzc2VkU2l6ZSArPSBhbGxCdWZmZXJzLnJlZHVjZSgoc3VtLCBidWYpID0+IHN1bSArIGJ1Zi5sZW5ndGgsIDApO1xuXG4gICAgbGV0IGNvbXByZXNzZWQ6IEJ1ZmZlcltdID0gW107XG4gICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgbGV0IGxhc3RXYXJuVGltZSA9IHN0YXJ0VGltZTtcbiAgICBsZXQgY3VycmVudFVuY29tcHJlc3NlZFNpemUgPSAwO1xuICAgIGxldCBjdXJyZW50Q29tcHJlc3NlZFNpemUgPSAwO1xuXG4gICAgZnVuY3Rpb24gbG9nSWZTbG93KGk6IG51bWJlcikge1xuICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKG5vdyAtIGxhc3RXYXJuVGltZSA+IDUwMCkge1xuICAgICAgICAgICAgbGV0IGVsYXBzZWQgPSBub3cgLSBzdGFydFRpbWU7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU2xvdyBMWjQgY29tcHJlc3MgKCR7Zm9ybWF0VGltZShlbGFwc2VkKX06ICR7aSArIDF9LyR7YWxsQnVmZmVycy5sZW5ndGh9IGJ1ZmZlcnMsICR7Zm9ybWF0TnVtYmVyKGN1cnJlbnRVbmNvbXByZXNzZWRTaXplKX1CID0+ICR7Zm9ybWF0TnVtYmVyKGN1cnJlbnRDb21wcmVzc2VkU2l6ZSl9QmApO1xuICAgICAgICAgICAgbGFzdFdhcm5UaW1lID0gbm93O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBidWYgPSBhbGxCdWZmZXJzW2ldO1xuICAgICAgICBjdXJyZW50VW5jb21wcmVzc2VkU2l6ZSArPSBidWYubGVuZ3RoO1xuICAgICAgICBsZXQgY29tcHJlc3NlZEJ1ZiA9IExaNC5jb21wcmVzcyhidWYpO1xuICAgICAgICBjb21wcmVzc2VkLnB1c2goY29tcHJlc3NlZEJ1Zik7XG4gICAgICAgIGN1cnJlbnRDb21wcmVzc2VkU2l6ZSArPSBjb21wcmVzc2VkQnVmLmxlbmd0aDtcblxuICAgICAgICBsb2dJZlNsb3coaSk7XG4gICAgfVxuICAgIGxvZ0lmU2xvdyhhbGxCdWZmZXJzLmxlbmd0aCk7XG5cbiAgICBzdGF0cy5jb21wcmVzc2VkU2l6ZSArPSBjdXJyZW50Q29tcHJlc3NlZFNpemU7XG5cbiAgICByZXR1cm4gY29tcHJlc3NlZDtcbn0pO1xuXG5jb25zdCBkZWNvbXByZXNzT2JqTFo0ID0gbWVhc3VyZVdyYXAoYXN5bmMgZnVuY3Rpb24gd2lyZUNhbGxEZWNvbXByZXNzTFo0KG9iajogQnVmZmVyW10sIHN0YXRzOiBDb21wcmVzc2lvblN0YXRzKTogUHJvbWlzZTx1bmtub3duPiB7XG5cbiAgICBjb25zdCB7IExaNCB9ID0gYXdhaXQgaW1wb3J0KFwiLi9sejQvTFo0XCIpO1xuICAgIHN0YXRzLmNvbXByZXNzZWRTaXplICs9IG9iai5yZWR1Y2UoKHN1bSwgYnVmKSA9PiBzdW0gKyBidWYubGVuZ3RoLCAwKTtcblxuICAgIGxldCBkZWNvbXByZXNzZWQ6IEJ1ZmZlcltdID0gW107XG4gICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgbGV0IGxhc3RXYXJuVGltZSA9IHN0YXJ0VGltZTtcbiAgICBsZXQgY3VycmVudENvbXByZXNzZWRTaXplID0gMDtcbiAgICBsZXQgY3VycmVudFVuY29tcHJlc3NlZFNpemUgPSAwO1xuICAgIGZ1bmN0aW9uIGxvZ0lmU2xvdyhpOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChub3cgLSBsYXN0V2FyblRpbWUgPiA1MDApIHtcbiAgICAgICAgICAgIGxldCBlbGFwc2VkID0gbm93IC0gc3RhcnRUaW1lO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFNsb3cgTFo0IGRlY29tcHJlc3MgKCR7Zm9ybWF0VGltZShlbGFwc2VkKX0pOiAke2kgKyAxfS8ke29iai5sZW5ndGh9IGJ1ZmZlcnMsICR7Zm9ybWF0TnVtYmVyKGN1cnJlbnRDb21wcmVzc2VkU2l6ZSl9QiA9PiAke2Zvcm1hdE51bWJlcihjdXJyZW50VW5jb21wcmVzc2VkU2l6ZSl9QmApO1xuICAgICAgICAgICAgbGFzdFdhcm5UaW1lID0gbm93O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGJ1ZiA9IG9ialtpXTtcbiAgICAgICAgY3VycmVudENvbXByZXNzZWRTaXplICs9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIGxldCBkZWNvbXByZXNzZWRCdWYgPSBMWjQuZGVjb21wcmVzcyhidWYpO1xuICAgICAgICBkZWNvbXByZXNzZWQucHVzaChkZWNvbXByZXNzZWRCdWYpO1xuICAgICAgICBjdXJyZW50VW5jb21wcmVzc2VkU2l6ZSArPSBkZWNvbXByZXNzZWRCdWYubGVuZ3RoO1xuXG4gICAgICAgIGxvZ0lmU2xvdyhpKTtcbiAgICB9XG4gICAgbG9nSWZTbG93KG9iai5sZW5ndGgpO1xuXG4gICAgc3RhdHMudW5jb21wcmVzc2VkU2l6ZSArPSBjdXJyZW50VW5jb21wcmVzc2VkU2l6ZTtcblxuICAgIGxldCBoZWFkZXJCdWZmZXIgPSBkZWNvbXByZXNzZWRbMF07XG4gICAgbGV0IGRhdGFCdWZmZXJzID0gZGVjb21wcmVzc2VkLnNsaWNlKDEpO1xuXG4gICAgbGV0IHR5cGVCdWZmZXIgPSBoZWFkZXJCdWZmZXIuc2xpY2UoMCwgOCk7XG4gICAgbGV0IHR5cGUgPSBuZXcgRmxvYXQ2NEFycmF5KHR5cGVCdWZmZXIuYnVmZmVyLCB0eXBlQnVmZmVyLmJ5dGVPZmZzZXQsIDEpWzBdO1xuXG4gICAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFCdWZmZXJzWzBdO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAyKSB7XG4gICAgICAgIGxldCBoZWFkZXJEYXRhID0gbmV3IEZsb2F0NjRBcnJheShoZWFkZXJCdWZmZXIuYnVmZmVyLCBoZWFkZXJCdWZmZXIuYnl0ZU9mZnNldCwgaGVhZGVyQnVmZmVyLmJ5dGVMZW5ndGggLyA4KTtcbiAgICAgICAgbGV0IG91dHB1dEJ1ZmZlckNvdW50ID0gaGVhZGVyRGF0YVsxXTtcblxuICAgICAgICBsZXQgYnVmZmVyczogQnVmZmVyW10gPSBbXTtcbiAgICAgICAgbGV0IGhlYWRlckluZGV4ID0gMjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dEJ1ZmZlckNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpbnB1dEJ1ZmZlckNvdW50ID0gaGVhZGVyRGF0YVtoZWFkZXJJbmRleCsrXTtcbiAgICAgICAgICAgIGxldCBzaXplczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5wdXRCdWZmZXJDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgc2l6ZXMucHVzaChoZWFkZXJEYXRhW2hlYWRlckluZGV4KytdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IG91dHB1dEJ1ZmZlciA9IGRhdGFCdWZmZXJzW2ldO1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBzaXplIG9mIHNpemVzKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKG91dHB1dEJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpKTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWZmZXJzO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBTb2NrZXRGdW5jdGlvbi5XSVJFX1NFUklBTElaRVIuZGVzZXJpYWxpemUoZGF0YUJ1ZmZlcnMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb21wcmVzc2lvbiB0eXBlICR7dHlwZX1gKTtcbn0pOyJdfQ==
|
|
930
|
-
/* _JS_SOURCE_HASH = "
|
|
930
|
+
/* _JS_SOURCE_HASH = "dda71e5b802e2381d3abdcba068e868fa08242c064c83808ce610e33b0ca8f25"; */
|