@nlabs/rip-hunter 3.1.0 → 3.1.1
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/README.md +2 -2
- package/lib/errors/ApiError.d.ts +3 -1
- package/lib/errors/ApiError.d.ts.map +1 -1
- package/lib/errors/ApiError.js +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/package.json +7 -15
- package/tsconfig.json +2 -2
- package/tsconfig.lint.json +1 -1
- package/tsconfig.test.json +2 -2
package/README.md
CHANGED
package/lib/errors/ApiError.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiError.d.ts","sourceRoot":"","sources":["../../src/errors/ApiError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiError.d.ts","sourceRoot":"","sources":["../../src/errors/ApiError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,YAAY,IAAI,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAIvD;CACF"}
|
package/lib/errors/ApiError.js
CHANGED
|
@@ -11,4 +11,4 @@
|
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JpcC1odW50ZXIvc3JjL2Vycm9ycy9BcGlFcnJvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNy1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBzb3VyY2U6IEVycm9yO1xuICBlcnJvcnM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGxpc3Q6IEFycmF5PHttZXNzYWdlOiBzdHJpbmd9PiwgZXJyb3I6IEVycm9yKSB7XG4gICAgc3VwZXIoJ0FQSSBFcnJvcicpO1xuICAgIHRoaXMuc291cmNlID0gZXJyb3I7XG4gICAgdGhpcy5lcnJvcnMgPSBsaXN0ID8gbGlzdC5tYXAoKGVycm9ySXRlbSkgPT4gZXJyb3JJdGVtLm1lc3NhZ2UpIDogW107XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJBcGlFcnJvciIsIkVycm9yIiwic291cmNlIiwiZXJyb3JzIiwibGlzdCIsImVycm9yIiwibWFwIiwiZXJyb3JJdGVtIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBTyxNQUFNQSxpQkFBaUJDO0lBQzVCQyxPQUFjO0lBQ2RDLE9BQWlCO0lBRWpCLFlBQVlDLElBQThCLEVBQUVDLEtBQVksQ0FBRTtRQUN4RCxLQUFLLENBQUM7UUFDTixJQUFJLENBQUNILE1BQU0sR0FBR0c7UUFDZCxJQUFJLENBQUNGLE1BQU0sR0FBR0MsT0FBT0EsS0FBS0UsR0FBRyxDQUFDLENBQUNDLFlBQWNBLFVBQVVDLE9BQU8sSUFBSSxFQUFFO0lBQ3RFO0FBQ0YifQ==
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -547,4 +547,4 @@ export const subscribeSSE = (url, callbacks, options = {})=>{
|
|
|
547
547
|
};
|
|
548
548
|
export { ApiError } from './errors/ApiError.js';
|
|
549
549
|
|
|
550
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JpcC1odW50ZXIvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE3LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cbmltcG9ydCB7QXBpRXJyb3J9IGZyb20gJy4vZXJyb3JzL0FwaUVycm9yLmpzJztcblxuY29uc3QgaXNBcnJheSA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgYW55W10gPT4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG5jb25zdCBpc1N0cmluZyA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0+XG4gIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIWlzQXJyYXkodmFsdWUpO1xuY29uc3QgaXNFbXB0eSA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PlxuICB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJztcbmNvbnN0IGlzTnVsbCA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB2YWx1ZSA9PT0gbnVsbDtcbmNvbnN0IGlzVW5kZWZpbmVkID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbi8vIENhY2hlIGZvciBjb21waWxlZCByZWdleCBwYXR0ZXJuc1xuY29uc3QgSlNPTl9DT05URU5UX1RZUEVfUkVHRVggPSAvYXBwbGljYXRpb25cXC9qc29uL2k7XG5cbi8vIFJlcXVlc3QgY2FjaGUgZm9yIGRlZHVwbGljYXRpb25cbmNvbnN0IHJlcXVlc3RDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPGFueT4+KCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHVudGVyT3B0aW9uc1R5cGUge1xuICByZWFkb25seSBoZWFkZXJzPzogSGVhZGVycztcbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IGFueTtcbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcbiAgcmVhZG9ubHkgY2FjaGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh1bnRlclF1ZXJ5VHlwZSB7XG4gIHJlYWRvbmx5IHF1ZXJ5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdW50ZXJTU0VPcHRpb25zVHlwZSB7XG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBIZWFkZXJzO1xuICByZWFkb25seSB0b2tlbj86IHN0cmluZztcbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcbiAgcmVhZG9ubHkgcmV0cnlJbnRlcnZhbD86IG51bWJlcjtcbiAgcmVhZG9ubHkgbWF4UmV0cmllcz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdW50ZXJTU0VFdmVudFR5cGUge1xuICByZWFkb25seSBkYXRhOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldHJ5PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh1bnRlclNTRUNhbGxiYWNrVHlwZSB7XG4gIG9uTWVzc2FnZT86IChldmVudDogSHVudGVyU1NFRXZlbnRUeXBlKSA9PiB2b2lkO1xuICBvbk9wZW4/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvciB8IEV2ZW50KSA9PiB2b2lkO1xuICBvblJldHJ5PzogKGF0dGVtcHQ6IG51bWJlciwgZGVsYXk6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdW50ZXJTdWJzY3JpcHRpb25PcHRpb25zVHlwZSB7XG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBIZWFkZXJzO1xuICByZWFkb25seSB0b2tlbj86IHN0cmluZztcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25QYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgcmVjb25uZWN0SW50ZXJ2YWw/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heFJlY29ubmVjdEF0dGVtcHRzPzogbnVtYmVyO1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh1bnRlclN1YnNjcmlwdGlvbkNhbGxiYWNrVHlwZSB7XG4gIG9uTmV4dD86IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yIHwgRXZlbnQpID0+IHZvaWQ7XG4gIG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkO1xuICBvblJlY29ubmVjdD86IChhdHRlbXB0OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTcGFjZXMgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgc3RyLnJlcGxhY2UoL1xccysoPz0oPzpbXidcIl0qWydcIl1bXidcIl0qWydcIl0pKlteJ1wiXSokKS9nbSwgJycpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlTdHJpbmcgPSAoanNvbjogYW55KTogc3RyaW5nID0+XG4gIE9iamVjdC5rZXlzKGpzb24pXG4gICAgLm1hcChcbiAgICAgIChrZXk6IHN0cmluZykgPT5cbiAgICAgICAgYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGpzb25ba2V5XSl9YFxuICAgIClcbiAgICAuam9pbignJicpO1xuXG4vLyBDcmVhdGUgYSB0aW1lb3V0IHByb21pc2VcbmNvbnN0IGNyZWF0ZVRpbWVvdXQgPSAobXM6IG51bWJlcik6IFByb21pc2U8bmV2ZXI+ID0+XG4gIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+XG4gICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdSZXF1ZXN0IHRpbWVvdXQnKSksIG1zKVxuICApO1xuXG4vLyBHZW5lcmF0ZSBjYWNoZSBrZXkgZm9yIHJlcXVlc3QgZGVkdXBsaWNhdGlvblxuY29uc3QgZ2VuZXJhdGVDYWNoZUtleSA9ICh1cmw6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgb3B0aW9ucz86IEh1bnRlck9wdGlvbnNUeXBlKTogc3RyaW5nID0+IHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoe21ldGhvZCwgb3B0aW9ucywgcGFyYW1zLCB1cmx9KTtcbiAgcmV0dXJuIGJ0b2Eoa2V5KS5zbGljZSgwLCA1MCk7IC8vIFRydW5jYXRlIHRvIHJlYXNvbmFibGUgbGVuZ3RoXG59O1xuXG4vLyBTU0UgRXZlbnRTb3VyY2UgcG9seWZpbGwgZm9yIE5vZGUuanNcbmNvbnN0IGNyZWF0ZUV2ZW50U291cmNlID0gKHVybDogc3RyaW5nLCBvcHRpb25zPzogSHVudGVyU1NFT3B0aW9uc1R5cGUpOiBFdmVudFNvdXJjZSA9PiB7XG4gIGlmKHR5cGVvZiBFdmVudFNvdXJjZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IEV2ZW50U291cmNlKHVybCk7XG4gIH1cblxuICAvLyBGb3IgTm9kZS5qcywgd2UnbGwgdGhyb3cgYW4gZXJyb3Igc3VnZ2VzdGluZyB0aGUgdXNlciBpbnN0YWxsIGV2ZW50c291cmNlXG4gIHRocm93IG5ldyBFcnJvcignRXZlbnRTb3VyY2Ugbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LiBGb3IgTm9kZS5qcyBzdXBwb3J0LCBpbnN0YWxsIHRoZSBcImV2ZW50c291cmNlXCIgcGFja2FnZSBhbmQgaW1wb3J0IGl0IG1hbnVhbGx5LicpO1xufTtcblxuLy8gV2ViU29ja2V0IGNsaWVudCBmb3IgR3JhcGhRTCBzdWJzY3JpcHRpb25zIChncmFwaHFsLXdzIHByb3RvY29sKVxuY2xhc3MgR3JhcGhRTFN1YnNjcmlwdGlvbkNsaWVudCB7XG4gIHByaXZhdGUgd3M6IFdlYlNvY2tldCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIG9wdGlvbnM6IEh1bnRlclN1YnNjcmlwdGlvbk9wdGlvbnNUeXBlO1xuICBwcml2YXRlIHJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgcHJpdmF0ZSByZWNvbm5lY3RUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZXNzYWdlUXVldWU6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIEh1bnRlclN1YnNjcmlwdGlvbkNhbGxiYWNrVHlwZT4oKTtcbiAgcHJpdmF0ZSBtZXNzYWdlSGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IodXJsOiBzdHJpbmcsIG9wdGlvbnM6IEh1bnRlclN1YnNjcmlwdGlvbk9wdGlvbnNUeXBlID0ge30pIHtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9XZWJTb2NrZXRVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwucmVwbGFjZSgvXmh0dHAvLCAnd3MnKS5yZXBsYWNlKC9eaHR0cHMvLCAnd3NzJyk7XG4gIH1cblxuICBwcml2YXRlIGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmKHRoaXMuaXNDb25uZWN0aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgd3NVcmwgPSB0aGlzLmNvbnZlcnRUb1dlYlNvY2tldFVybCh0aGlzLnVybCk7XG5cbiAgICAgICAgaWYodHlwZW9mIFdlYlNvY2tldCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1dlYlNvY2tldCBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQuIEZvciBOb2RlLmpzIHN1cHBvcnQsIHlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIGEgV2ViU29ja2V0IGxpYnJhcnkuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud3MgPSBuZXcgV2ViU29ja2V0KHdzVXJsLCAnZ3JhcGhxbC13cycpO1xuXG4gICAgICAgIHRoaXMud3Mub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG5cbiAgICAgICAgICBjb25zdCBpbml0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdjb25uZWN0aW9uX2luaXQnLFxuICAgICAgICAgICAgcGF5bG9hZDogdGhpcy5vcHRpb25zLmNvbm5lY3Rpb25QYXJhbXMgfHwge31cbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShpbml0TWVzc2FnZSkpO1xuXG4gICAgICAgICAgd2hpbGUodGhpcy5tZXNzYWdlUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZVF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZihtZXNzYWdlICYmIHRoaXMud3M/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XG4gICAgICAgICAgICAgIHRoaXMud3Muc2VuZChtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy53cy5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgICBpZighdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy53cy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy53cy5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblxuICAgICAgICAgICAgaWYobWVzc2FnZS50eXBlID09PSAnY29ubmVjdGlvbl9hY2snKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobWVzc2FnZS50eXBlID09PSAnY29ubmVjdGlvbl9lcnJvcicpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZS5wYXlsb2FkPy5tZXNzYWdlIHx8ICdDb25uZWN0aW9uIGVycm9yJyk7XG4gICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChjYWxsYmFja3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZihjYWxsYmFja3Mub25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uSWQgPSBtZXNzYWdlLmlkO1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChzdWJzY3JpcHRpb25JZCk7XG5cbiAgICAgICAgICAgIGlmKGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgICAgICAgICAgICBpZihjYWxsYmFja3Mub25OZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5vbk5leHQobWVzc2FnZS5wYXlsb2FkPy5kYXRhIHx8IG1lc3NhZ2UucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgICBpZihjYWxsYmFja3Mub25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBBcGlFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KG1lc3NhZ2UucGF5bG9hZCkgPyBtZXNzYWdlLnBheWxvYWQgOiBbbWVzc2FnZS5wYXlsb2FkXSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoJ0dyYXBoUUwgc3Vic2NyaXB0aW9uIGVycm9yJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgaWYoY2FsbGJhY2tzLm9uQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoc3Vic2NyaXB0aW9uSWQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMubWVzc2FnZUhhbmRsZXJzLmdldChzdWJzY3JpcHRpb25JZCk7XG4gICAgICAgICAgICAgICAgICBpZihoYW5kbGVyICYmIHRoaXMud3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXJzLmRlbGV0ZShzdWJzY3JpcHRpb25JZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChjYWxsYmFja3MpID0+IHtcbiAgICAgICAgICAgICAgaWYoY2FsbGJhY2tzLm9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3Mub25FcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ1BhcnNlIGVycm9yJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlY29ubmVjdCgpOiB2b2lkIHtcbiAgICBjb25zdCB7bWF4UmVjb25uZWN0QXR0ZW1wdHMgPSA1LCByZWNvbm5lY3RJbnRlcnZhbCA9IDEwMDB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYodGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA8IG1heFJlY29ubmVjdEF0dGVtcHRzICYmIHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplID4gMCkge1xuICAgICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoY2FsbGJhY2tzKSA9PiB7XG4gICAgICAgIGlmKGNhbGxiYWNrcy5vblJlY29ubmVjdCkge1xuICAgICAgICAgIGNhbGxiYWNrcy5vblJlY29ubmVjdCh0aGlzLnJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0KCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICB9KTtcbiAgICAgIH0sIHJlY29ubmVjdEludGVydmFsKTtcbiAgICB9IGVsc2UgaWYodGhpcy5zdWJzY3JpcHRpb25zLnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignV2ViU29ja2V0IHJlY29ubmVjdGlvbiBmYWlsZWQgYWZ0ZXIgbWF4IGF0dGVtcHRzJyk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoY2FsbGJhY2tzKSA9PiB7XG4gICAgICAgIGlmKGNhbGxiYWNrcy5vbkVycm9yKSB7XG4gICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbmQobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYodGhpcy53cz8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMud3Muc2VuZChtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlUXVldWUucHVzaChtZXNzYWdlKTtcbiAgICAgIGlmKCF0aGlzLmlzQ29ubmVjdGluZyAmJiAhdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLmNvbm5lY3QoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZShcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgY2FsbGJhY2tzOiBIdW50ZXJTdWJzY3JpcHRpb25DYWxsYmFja1R5cGVcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSWQgPSBgc3ViXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoc3Vic2NyaXB0aW9uSWQsIGNhbGxiYWNrcyk7XG5cbiAgICBjb25zdCBzdGFydE1lc3NhZ2UgPSB7XG4gICAgICBpZDogc3Vic2NyaXB0aW9uSWQsXG4gICAgICB0eXBlOiAnc3RhcnQnLFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMgfHwge31cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZW5zdXJlQ29ubmVjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmKCF0aGlzLmlzQ29ubmVjdGVkICYmICF0aGlzLmlzQ29ubmVjdGluZykge1xuICAgICAgICB0aGlzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbmQoSlNPTi5zdHJpbmdpZnkoc3RhcnRNZXNzYWdlKSk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmKGNhbGxiYWNrcy5vbkVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFja3Mub25FcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZih0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShzdGFydE1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZW5zdXJlQ29ubmVjdGlvbigpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3BNZXNzYWdlID0ge1xuICAgICAgICBpZDogc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgIHR5cGU6ICdzdG9wJ1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShzdG9wTWVzc2FnZSkpO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJzY3JpcHRpb25JZCk7XG4gICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5tZXNzYWdlSGFuZGxlcnMuZ2V0KHN1YnNjcmlwdGlvbklkKTtcbiAgICAgIGlmKGhhbmRsZXIgJiYgdGhpcy53cykge1xuICAgICAgICB0aGlzLndzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcnMuZGVsZXRlKHN1YnNjcmlwdGlvbklkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYodGhpcy5yZWNvbm5lY3RUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZXIpO1xuICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGlmKHRoaXMud3MpIHtcbiAgICAgIHRoaXMud3MuY2xvc2UoKTtcbiAgICAgIHRoaXMud3MgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IFtdO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gIH1cbn1cblxuLy8gU3Vic2NyaXB0aW9uIGNsaWVudCBjYWNoZVxuY29uc3Qgc3Vic2NyaXB0aW9uQ2xpZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBHcmFwaFFMU3Vic2NyaXB0aW9uQ2xpZW50PigpO1xuXG4vLyBBSkFYXG5leHBvcnQgY29uc3QgYWpheCA9IChcbiAgdXJsOiBzdHJpbmcsXG4gIG1ldGhvZDogc3RyaW5nLFxuICBwYXJhbXM/LFxuICBvcHRpb25zOiBIdW50ZXJPcHRpb25zVHlwZSA9IHt9XG4pOiBQcm9taXNlPGFueT4gPT4ge1xuICBjb25zdCB7aGVhZGVycywgdG9rZW4sIHRpbWVvdXQgPSAzMDAwMCwgY2FjaGUgPSBmYWxzZX0gPSBvcHRpb25zO1xuXG4gIGxldCBmb3JtYXRVcmw6IHN0cmluZyA9ICh1cmwgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgZm9ybWF0VG9rZW46IHN0cmluZyA9ICh0b2tlbiB8fCAnJykudHJpbSgpO1xuICBjb25zdCBmb3JtYXRIZWFkZXJzOiBIZWFkZXJzID0gaGVhZGVycyB8fCBuZXcgSGVhZGVycygpO1xuXG4gIC8vIE1ldGhvZFxuICBjb25zdCBmb3JtYXRNZXRob2Q6IHN0cmluZyA9IChtZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gIGxldCBmb3JtYXRQYXJhbXM7XG5cbiAgLy8gUGFyYW1ldGVyc1xuICBpZihwYXJhbXMgJiYgZm9ybWF0TWV0aG9kID09PSAnR0VUJykge1xuICAgIGZvcm1hdFVybCA9IGAke2Zvcm1hdFVybH0/JHtxdWVyeVN0cmluZyhwYXJhbXMpfWA7XG4gICAgZm9ybWF0UGFyYW1zID0gbnVsbDtcbiAgfSBlbHNlIGlmKHBhcmFtcykge1xuICAgIGZvcm1hdEhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIGZvcm1hdEhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIGZvcm1hdFBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgZm9ybWF0UGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgLy8gQXV0aGVudGljYXRpb24gdG9rZW5cbiAgaWYoIWlzRW1wdHkoZm9ybWF0VG9rZW4pKSB7XG4gICAgZm9ybWF0SGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7Zm9ybWF0VG9rZW59YCk7XG4gIH1cblxuICAvLyBDaGVjayBjYWNoZSBmb3IgR0VUIHJlcXVlc3RzXG4gIGlmKGNhY2hlICYmIGZvcm1hdE1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGdlbmVyYXRlQ2FjaGVLZXkoZm9ybWF0VXJsLCBmb3JtYXRNZXRob2QsIHBhcmFtcywgb3B0aW9ucyk7XG4gICAgY29uc3QgY2FjaGVkID0gcmVxdWVzdENhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgcmVxdWVzdCBwcm9taXNlXG4gIGNvbnN0IHJlcXVlc3RQcm9taXNlID0gZmV0Y2goZm9ybWF0VXJsLCB7XG4gICAgYm9keTogZm9ybWF0UGFyYW1zLFxuICAgIGhlYWRlcnM6IGZvcm1hdEhlYWRlcnMsXG4gICAgbWV0aG9kOiBmb3JtYXRNZXRob2RcbiAgfSlcbiAgICAudGhlbigocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyBDaGVjayBpZiByZXNwb25zZSBpcyBqc29uIHVzaW5nIGNhY2hlZCByZWdleFxuICAgICAgY29uc3QgaXNSZXNwb25zZUpzb24gPSBKU09OX0NPTlRFTlRfVFlQRV9SRUdFWC50ZXN0KFxuICAgICAgICByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgfHwgJydcbiAgICAgICk7XG5cbiAgICAgIGlmKGlzUmVzcG9uc2VKc29uKSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgfSlcbiAgICAudGhlbigocmVzdWx0cykgPT4gcmVzdWx0cykgLy8gU2ltcGxpZmllZCAtIG5vIG5lZWQgZm9yIHJlZHVuZGFudCBjaGVja1xuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGlmKChlcnJvciB8fCB7fSkubWVzc2FnZSA9PT0gJ29ubHkgYWJzb2x1dGUgdXJscyBhcmUgc3VwcG9ydGVkJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgbmV3IEFwaUVycm9yKFt7bWVzc2FnZTogJ2ludmFsaWRfdXJsJ31dLCBlcnJvcilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgQXBpRXJyb3IoW3ttZXNzYWdlOiAnbmV0d29ya19lcnJvcid9XSwgZXJyb3IpXG4gICAgICApO1xuICAgIH0pO1xuXG4gIC8vIEFkZCB0aW1lb3V0IGlmIHNwZWNpZmllZFxuICBjb25zdCBmaW5hbFByb21pc2UgPSB0aW1lb3V0ID4gMFxuICAgID8gUHJvbWlzZS5yYWNlKFtyZXF1ZXN0UHJvbWlzZSwgY3JlYXRlVGltZW91dCh0aW1lb3V0KV0pXG4gICAgOiByZXF1ZXN0UHJvbWlzZTtcblxuICAvLyBDYWNoZSB0aGUgcHJvbWlzZSBmb3IgR0VUIHJlcXVlc3RzXG4gIGlmKGNhY2hlICYmIGZvcm1hdE1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGdlbmVyYXRlQ2FjaGVLZXkoZm9ybWF0VXJsLCBmb3JtYXRNZXRob2QsIHBhcmFtcywgb3B0aW9ucyk7XG4gICAgcmVxdWVzdENhY2hlLnNldChjYWNoZUtleSwgZmluYWxQcm9taXNlKTtcblxuICAgIC8vIENsZWFuIHVwIGNhY2hlIGFmdGVyIDUgbWludXRlc1xuICAgIHNldFRpbWVvdXQoKCkgPT4gcmVxdWVzdENhY2hlLmRlbGV0ZShjYWNoZUtleSksIDMwMDAwMCk7XG4gIH1cblxuICByZXR1cm4gZmluYWxQcm9taXNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldCA9IChcbiAgdXJsOiBzdHJpbmcsXG4gIHBhcmFtcz8sXG4gIG9wdGlvbnM/OiBIdW50ZXJPcHRpb25zVHlwZVxuKTogUHJvbWlzZTxhbnk+ID0+IGFqYXgodXJsLCAnR0VUJywgcGFyYW1zLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IHBvc3QgPSAoXG4gIHVybDogc3RyaW5nLFxuICBwYXJhbXM/LFxuICBvcHRpb25zPzogSHVudGVyT3B0aW9uc1R5cGVcbik6IFByb21pc2U8YW55PiA9PiBhamF4KHVybCwgJ1BPU1QnLCBwYXJhbXMsIG9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgcHV0ID0gKFxuICB1cmw6IHN0cmluZyxcbiAgcGFyYW1zPyxcbiAgb3B0aW9ucz86IEh1bnRlck9wdGlvbnNUeXBlXG4pOiBQcm9taXNlPGFueT4gPT4gYWpheCh1cmwsICdQVVQnLCBwYXJhbXMsIG9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgZGVsID0gKFxuICB1cmw6IHN0cmluZyxcbiAgcGFyYW1zPyxcbiAgb3B0aW9ucz86IEh1bnRlck9wdGlvbnNUeXBlXG4pOiBQcm9taXNlPGFueT4gPT4gYWpheCh1cmwsICdERUxFVEUnLCBwYXJhbXMsIG9wdGlvbnMpO1xuXG4vLyBPcHRpbWl6ZWQgdG9HcWwgZnVuY3Rpb25cbmV4cG9ydCBjb25zdCB0b0dxbCA9IChvYmo6IGFueSk6IHN0cmluZyA9PiB7XG4gIGlmKGlzU3RyaW5nKG9iaikpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcbiAgfSBlbHNlIGlmKGlzUGxhaW5PYmplY3Qob2JqKSkge1xuICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcyBpbiBvbmUgcGFzc1xuICAgIGNvbnN0IGdxbFByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBvYmpba2V5XTtcblxuICAgICAgICAvLyBTa2lwIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXNcbiAgICAgICAgaWYoaXNVbmRlZmluZWQoaXRlbSkgfHwgaXNOdWxsKGl0ZW0pKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZihpc1BsYWluT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgZ3FsUHJvcHMucHVzaChgJHtrZXl9OiAke3RvR3FsKGl0ZW0pfWApO1xuICAgICAgICB9IGVsc2UgaWYoaXNBcnJheShpdGVtKSkge1xuICAgICAgICAgIGNvbnN0IGxpc3QgPSBpdGVtLm1hcCgobGlzdEl0ZW0pID0+IHRvR3FsKGxpc3RJdGVtKSk7XG4gICAgICAgICAgZ3FsUHJvcHMucHVzaChgJHtrZXl9OiBbJHtsaXN0LmpvaW4oJywgJyl9XWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xuICAgICAgICAgIGlmKHZhbCkge1xuICAgICAgICAgICAgZ3FsUHJvcHMucHVzaChgJHtrZXl9OiAke3ZhbH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBncWxQcm9wcy5qb2luKCcsICcpO1xuICAgIHJldHVybiB2YWx1ZXMgPT09ICcnID8gJ1wiXCInIDogYHske2dxbFByb3BzLmpvaW4oJywgJyl9fWA7XG4gIH0gZWxzZSBpZihpc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gYFske29iai5tYXAoKG9iakl0ZW0pID0+IHRvR3FsKG9iakl0ZW0pKS5qb2luKCcsICcpfV1gO1xuICB9XG5cbiAgcmV0dXJuIFN0cmluZyhvYmopO1xufTtcblxuZXhwb3J0IGNvbnN0IGdyYXBocWxRdWVyeSA9IChcbiAgdXJsOiBzdHJpbmcsXG4gIHF1ZXJ5OiBIdW50ZXJRdWVyeVR5cGUgfCBIdW50ZXJRdWVyeVR5cGVbXSxcbiAgb3B0aW9uczogSHVudGVyT3B0aW9uc1R5cGUgPSB7fVxuKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgY29uc3Qge2hlYWRlcnMsIHRva2VuLCB0aW1lb3V0ID0gMzAwMDB9ID0gb3B0aW9ucztcbiAgY29uc3QgZm9ybWF0VXJsOiBzdHJpbmcgPSB1cmwgPyB1cmwudHJpbSgpIDogJyc7XG4gIGNvbnN0IGZvcm1hdFRva2VuOiBzdHJpbmcgPSAodG9rZW4gfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgZm9ybWF0SGVhZGVyczogSGVhZGVycyA9IGhlYWRlcnMgfHwgbmV3IEhlYWRlcnMoeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9KTtcblxuICBpZighaXNFbXB0eShmb3JtYXRUb2tlbikpIHtcbiAgICBmb3JtYXRIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHtmb3JtYXRUb2tlbn1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RQcm9taXNlID0gZmV0Y2goZm9ybWF0VXJsLCB7XG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkocXVlcnkpLFxuICAgIGhlYWRlcnM6IGZvcm1hdEhlYWRlcnMsXG4gICAgbWV0aG9kOiAncG9zdCdcbiAgfSlcbiAgICAudGhlbigocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBpc0pzb246IGJvb2xlYW4gPSBKU09OX0NPTlRFTlRfVFlQRV9SRUdFWC50ZXN0KFxuICAgICAgICByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgfHwgJydcbiAgICAgICk7XG5cbiAgICAgIGlmKGlzSnNvbiAmJiByZXNwb25zZS5ib2R5KSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgaWYoKGVycm9yIHx8IHt9KS5tZXNzYWdlID09PSAnb25seSBhYnNvbHV0ZSB1cmxzIGFyZSBzdXBwb3J0ZWQnKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICBuZXcgQXBpRXJyb3IoW3ttZXNzYWdlOiAnaW52YWxpZF91cmwnfV0sIGVycm9yKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBBcGlFcnJvcihbe21lc3NhZ2U6ICduZXR3b3JrX2Vycm9yJ31dLCBlcnJvcilcbiAgICAgICk7XG4gICAgfSlcbiAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgaWYoIWpzb24gfHwganNvbi5lcnJvcnMpIHtcbiAgICAgICAgaWYoIWpzb24pIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgICBuZXcgQXBpRXJyb3IoW3ttZXNzYWdlOiAnYXBpX2Vycm9yJ31dLCBuZXcgRXJyb3IoKSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYoXG4gICAgICAgICAgKGpzb24uZXJyb3JzIHx8IFtdKS5zb21lKFxuICAgICAgICAgICAgKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID09PSAnTXVzdCBwcm92aWRlIHF1ZXJ5IHN0cmluZy4nXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgICBuZXcgQXBpRXJyb3IoW3ttZXNzYWdlOiAncmVxdWlyZWRfcXVlcnknfV0sIG5ldyBFcnJvcigpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ganNvbi5lcnJvcnNcbiAgICAgICAgICA/IFByb21pc2UucmVqZWN0KG5ldyBBcGlFcnJvcihqc29uLmVycm9ycywgbmV3IEVycm9yKCkpKVxuICAgICAgICAgIDoge307XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBqc29uLmRhdGEgfHwge307XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBBcGlFcnJvcikgPT5cbiAgICAgIC8vIFNpbXBsaWZpZWQgZXJyb3IgaGFuZGxpbmcgLSBubyBuZWVkIHRvIGNyZWF0ZSBuZXcgZXJyb3IgaWYgc291cmNlIGV4aXN0c1xuICAgICAgUHJvbWlzZS5yZWplY3QoZXJyb3Iuc291cmNlID8gZXJyb3IgOiBuZXcgQXBpRXJyb3IoW3ttZXNzYWdlOiAnbmV0d29ya19lcnJvcid9XSwgZXJyb3IpKVxuICAgICk7XG5cbiAgLy8gQWRkIHRpbWVvdXQgaWYgc3BlY2lmaWVkXG4gIHJldHVybiB0aW1lb3V0ID4gMFxuICAgID8gUHJvbWlzZS5yYWNlKFtyZXF1ZXN0UHJvbWlzZSwgY3JlYXRlVGltZW91dCh0aW1lb3V0KV0pXG4gICAgOiByZXF1ZXN0UHJvbWlzZTtcbn07XG5cbi8vIEFkZCBxdWVyeSBhbmQgbXV0YXRpb24gZnVuY3Rpb25zIGZvciBiZXR0ZXIgQVBJIGNvbnNpc3RlbmN5XG5leHBvcnQgY29uc3QgcXVlcnkgPSAoXG4gIHVybDogc3RyaW5nLFxuICBib2R5OiBzdHJpbmcsXG4gIG9wdGlvbnM6IEh1bnRlck9wdGlvbnNUeXBlID0ge31cbik6IFByb21pc2U8YW55PiA9PiBncmFwaHFsUXVlcnkodXJsLCB7cXVlcnk6IGJvZHl9LCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IG11dGF0aW9uID0gKFxuICB1cmw6IHN0cmluZyxcbiAgYm9keTogc3RyaW5nLFxuICBvcHRpb25zOiBIdW50ZXJPcHRpb25zVHlwZSA9IHt9XG4pOiBQcm9taXNlPGFueT4gPT4gZ3JhcGhxbFF1ZXJ5KHVybCwge3F1ZXJ5OiBib2R5fSwgb3B0aW9ucyk7XG5cbi8vIEdyYXBoUUwgU3Vic2NyaXB0aW9uc1xuZXhwb3J0IGNvbnN0IHN1YnNjcmliZSA9IChcbiAgdXJsOiBzdHJpbmcsXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIGNhbGxiYWNrczogSHVudGVyU3Vic2NyaXB0aW9uQ2FsbGJhY2tUeXBlLFxuICBvcHRpb25zOiBIdW50ZXJTdWJzY3JpcHRpb25PcHRpb25zVHlwZSA9IHt9XG4pOiAoKCkgPT4gdm9pZCkgPT4ge1xuICBjb25zdCB7dG9rZW4sIHZhcmlhYmxlcywgY29ubmVjdGlvblBhcmFtcywgaGVhZGVyc30gPSBvcHRpb25zO1xuICBjb25zdCBmb3JtYXRVcmw6IHN0cmluZyA9ICh1cmwgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgZm9ybWF0VG9rZW46IHN0cmluZyA9ICh0b2tlbiB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFmb3JtYXRVcmwpIHtcbiAgICBpZihjYWxsYmFja3Mub25FcnJvcikge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IobmV3IEVycm9yKCdTdWJzY3JpcHRpb24gVVJMIGlzIHJlcXVpcmVkJykpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge307XG4gIH1cblxuICBsZXQgY2xpZW50ID0gc3Vic2NyaXB0aW9uQ2xpZW50cy5nZXQoZm9ybWF0VXJsKTtcbiAgaWYoIWNsaWVudCkge1xuICAgIGNvbnN0IGNsaWVudE9wdGlvbnM6IEh1bnRlclN1YnNjcmlwdGlvbk9wdGlvbnNUeXBlID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNvbm5lY3Rpb25QYXJhbXM6IHtcbiAgICAgICAgLi4uY29ubmVjdGlvblBhcmFtcyxcbiAgICAgICAgLi4uKGZvcm1hdFRva2VuID8ge2F1dGhvcml6YXRpb246IGBCZWFyZXIgJHtmb3JtYXRUb2tlbn1gfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gICAgY2xpZW50ID0gbmV3IEdyYXBoUUxTdWJzY3JpcHRpb25DbGllbnQoZm9ybWF0VXJsLCBjbGllbnRPcHRpb25zKTtcbiAgICBzdWJzY3JpcHRpb25DbGllbnRzLnNldChmb3JtYXRVcmwsIGNsaWVudCk7XG4gIH1cblxuICByZXR1cm4gY2xpZW50LnN1YnNjcmliZShxdWVyeSwgdmFyaWFibGVzLCBjYWxsYmFja3MpO1xufTtcblxuLy8gU1NFIFN1cHBvcnRcbmV4cG9ydCBjb25zdCBzdWJzY3JpYmVTU0UgPSAoXG4gIHVybDogc3RyaW5nLFxuICBjYWxsYmFja3M6IEh1bnRlclNTRUNhbGxiYWNrVHlwZSxcbiAgb3B0aW9uczogSHVudGVyU1NFT3B0aW9uc1R5cGUgPSB7fVxuKTogKCgpID0+IHZvaWQpID0+IHtcbiAgY29uc3Qge2hlYWRlcnMsIHRva2VuLCB0aW1lb3V0ID0gMzAwMDAsIHJldHJ5SW50ZXJ2YWwgPSAxMDAwLCBtYXhSZXRyaWVzID0gNX0gPSBvcHRpb25zO1xuICBjb25zdCBmb3JtYXRVcmw6IHN0cmluZyA9ICh1cmwgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgZm9ybWF0VG9rZW46IHN0cmluZyA9ICh0b2tlbiB8fCAnJykudHJpbSgpO1xuICBjb25zdCBmb3JtYXRIZWFkZXJzOiBIZWFkZXJzID0gaGVhZGVycyB8fCBuZXcgSGVhZGVycygpO1xuXG4gIC8vIEFkZCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiB0b2tlbiBwcm92aWRlZFxuICBpZighaXNFbXB0eShmb3JtYXRUb2tlbikpIHtcbiAgICBmb3JtYXRIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHtmb3JtYXRUb2tlbn1gKTtcbiAgfVxuXG4gIGxldCByZXRyeUNvdW50ID0gMDtcbiAgbGV0IGV2ZW50U291cmNlOiBFdmVudFNvdXJjZSB8IG51bGwgPSBudWxsO1xuICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IGNvbm5lY3QgPSAoKTogdm9pZCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGV2ZW50U291cmNlID0gY3JlYXRlRXZlbnRTb3VyY2UoZm9ybWF0VXJsLCB7aGVhZGVyczogZm9ybWF0SGVhZGVyc30pO1xuXG4gICAgICAvLyBTZXQgdXAgdGltZW91dFxuICAgICAgaWYodGltZW91dCA+IDApIHtcbiAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYoZXZlbnRTb3VyY2UpIHtcbiAgICAgICAgICAgIGV2ZW50U291cmNlLmNsb3NlKCk7XG4gICAgICAgICAgICBpZihjYWxsYmFja3Mub25FcnJvcikge1xuICAgICAgICAgICAgICBjYWxsYmFja3Mub25FcnJvcihuZXcgRXJyb3IoJ1NTRSBjb25uZWN0aW9uIHRpbWVvdXQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gRXZlbnQgaGFuZGxlcnNcbiAgICAgIGV2ZW50U291cmNlLm9ub3BlbiA9IChldmVudCkgPT4ge1xuICAgICAgICBpZih0aW1lb3V0SWQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICB0aW1lb3V0SWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHJ5Q291bnQgPSAwOyAvLyBSZXNldCByZXRyeSBjb3VudCBvbiBzdWNjZXNzZnVsIGNvbm5lY3Rpb25cbiAgICAgICAgaWYoY2FsbGJhY2tzLm9uT3Blbikge1xuICAgICAgICAgIGNhbGxiYWNrcy5vbk9wZW4oZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBldmVudFNvdXJjZS5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYoY2FsbGJhY2tzLm9uTWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IHNzZUV2ZW50OiBIdW50ZXJTU0VFdmVudFR5cGUgPSB7XG4gICAgICAgICAgICBkYXRhOiBldmVudC5kYXRhLFxuICAgICAgICAgICAgaWQ6IGV2ZW50Lmxhc3RFdmVudElkLFxuICAgICAgICAgICAgcmV0cnk6IGV2ZW50LmRhdGEuaW5jbHVkZXMoJ3JldHJ5OicpID8gcGFyc2VJbnQoZXZlbnQuZGF0YS5zcGxpdCgncmV0cnk6JylbMV0pIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY2FsbGJhY2tzLm9uTWVzc2FnZShzc2VFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGV2ZW50U291cmNlLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYodGltZW91dElkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgdGltZW91dElkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGV2ZW50U291cmNlICYmIGV2ZW50U291cmNlLnJlYWR5U3RhdGUgPT09IEV2ZW50U291cmNlLkNMT1NFRCkge1xuICAgICAgICAgIC8vIENvbm5lY3Rpb24gY2xvc2VkLCBhdHRlbXB0IHJldHJ5IGlmIHdpdGhpbiBsaW1pdHNcbiAgICAgICAgICBpZihyZXRyeUNvdW50IDwgbWF4UmV0cmllcykge1xuICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgICAgaWYoY2FsbGJhY2tzLm9uUmV0cnkpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uUmV0cnkocmV0cnlDb3VudCwgcmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNvbm5lY3QsIHJldHJ5SW50ZXJ2YWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZihjYWxsYmFja3Mub25FcnJvcikge1xuICAgICAgICAgICAgICBjYWxsYmFja3Mub25FcnJvcihuZXcgRXJyb3IoJ1NTRSBjb25uZWN0aW9uIGZhaWxlZCBhZnRlciBtYXggcmV0cmllcycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYoY2FsbGJhY2tzLm9uRXJyb3IpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgaWYoY2FsbGJhY2tzLm9uRXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIFNTRSBjb25uZWN0aW9uJykpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBTdGFydCB0aGUgY29ubmVjdGlvblxuICBjb25uZWN0KCk7XG5cbiAgLy8gUmV0dXJuIGNsZWFudXAgZnVuY3Rpb25cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZih0aW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgdGltZW91dElkID0gbnVsbDtcbiAgICB9XG4gICAgaWYoZXZlbnRTb3VyY2UpIHtcbiAgICAgIGV2ZW50U291cmNlLmNsb3NlKCk7XG4gICAgICBldmVudFNvdXJjZSA9IG51bGw7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IHtBcGlFcnJvcn0gZnJvbSAnLi9lcnJvcnMvQXBpRXJyb3IuanMnO1xuIl0sIm5hbWVzIjpbIkFwaUVycm9yIiwiaXNBcnJheSIsInZhbHVlIiwiQXJyYXkiLCJpc1N0cmluZyIsImlzUGxhaW5PYmplY3QiLCJpc0VtcHR5IiwidW5kZWZpbmVkIiwiaXNOdWxsIiwiaXNVbmRlZmluZWQiLCJKU09OX0NPTlRFTlRfVFlQRV9SRUdFWCIsInJlcXVlc3RDYWNoZSIsIk1hcCIsInJlbW92ZVNwYWNlcyIsInN0ciIsInJlcGxhY2UiLCJxdWVyeVN0cmluZyIsImpzb24iLCJPYmplY3QiLCJrZXlzIiwibWFwIiwia2V5IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsImNyZWF0ZVRpbWVvdXQiLCJtcyIsIlByb21pc2UiLCJfIiwicmVqZWN0Iiwic2V0VGltZW91dCIsIkVycm9yIiwiZ2VuZXJhdGVDYWNoZUtleSIsInVybCIsIm1ldGhvZCIsInBhcmFtcyIsIm9wdGlvbnMiLCJKU09OIiwic3RyaW5naWZ5IiwiYnRvYSIsInNsaWNlIiwiY3JlYXRlRXZlbnRTb3VyY2UiLCJFdmVudFNvdXJjZSIsIkdyYXBoUUxTdWJzY3JpcHRpb25DbGllbnQiLCJ3cyIsInJlY29ubmVjdEF0dGVtcHRzIiwicmVjb25uZWN0VGltZXIiLCJtZXNzYWdlUXVldWUiLCJpc0Nvbm5lY3RpbmciLCJpc0Nvbm5lY3RlZCIsInN1YnNjcmlwdGlvbnMiLCJtZXNzYWdlSGFuZGxlcnMiLCJjb252ZXJ0VG9XZWJTb2NrZXRVcmwiLCJjb25uZWN0IiwicmVzb2x2ZSIsIndzVXJsIiwiV2ViU29ja2V0Iiwib25vcGVuIiwiaW5pdE1lc3NhZ2UiLCJ0eXBlIiwicGF5bG9hZCIsImNvbm5lY3Rpb25QYXJhbXMiLCJzZW5kIiwibGVuZ3RoIiwibWVzc2FnZSIsInNoaWZ0IiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJvbmVycm9yIiwiZXJyb3IiLCJvbmNsb3NlIiwiaGFuZGxlUmVjb25uZWN0Iiwib25tZXNzYWdlIiwiZXZlbnQiLCJwYXJzZSIsImRhdGEiLCJmb3JFYWNoIiwiY2FsbGJhY2tzIiwib25FcnJvciIsInN1YnNjcmlwdGlvbklkIiwiaWQiLCJnZXQiLCJvbk5leHQiLCJvbkNvbXBsZXRlIiwiZGVsZXRlIiwiaGFuZGxlciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJtYXhSZWNvbm5lY3RBdHRlbXB0cyIsInJlY29ubmVjdEludGVydmFsIiwic2l6ZSIsIm9uUmVjb25uZWN0IiwiY2F0Y2giLCJwdXNoIiwic3Vic2NyaWJlIiwicXVlcnkiLCJ2YXJpYWJsZXMiLCJEYXRlIiwibm93IiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic3Vic3RyIiwic2V0Iiwic3RhcnRNZXNzYWdlIiwiZW5zdXJlQ29ubmVjdGlvbiIsInRoZW4iLCJzdG9wTWVzc2FnZSIsImNsb3NlIiwiY2xlYXJUaW1lb3V0IiwiY2xlYXIiLCJzdWJzY3JpcHRpb25DbGllbnRzIiwiYWpheCIsImhlYWRlcnMiLCJ0b2tlbiIsInRpbWVvdXQiLCJjYWNoZSIsImZvcm1hdFVybCIsInRyaW0iLCJmb3JtYXRUb2tlbiIsImZvcm1hdEhlYWRlcnMiLCJIZWFkZXJzIiwiZm9ybWF0TWV0aG9kIiwidG9VcHBlckNhc2UiLCJmb3JtYXRQYXJhbXMiLCJjYWNoZUtleSIsImNhY2hlZCIsInJlcXVlc3RQcm9taXNlIiwiZmV0Y2giLCJib2R5IiwicmVzcG9uc2UiLCJpc1Jlc3BvbnNlSnNvbiIsInRlc3QiLCJ0ZXh0IiwicmVzdWx0cyIsImZpbmFsUHJvbWlzZSIsInJhY2UiLCJwb3N0IiwicHV0IiwiZGVsIiwidG9HcWwiLCJvYmoiLCJncWxQcm9wcyIsImhhc093blByb3BlcnR5IiwiaXRlbSIsImxpc3QiLCJsaXN0SXRlbSIsInZhbCIsInZhbHVlcyIsIm9iakl0ZW0iLCJTdHJpbmciLCJncmFwaHFsUXVlcnkiLCJpc0pzb24iLCJlcnJvcnMiLCJzb21lIiwic291cmNlIiwibXV0YXRpb24iLCJjbGllbnQiLCJjbGllbnRPcHRpb25zIiwiYXV0aG9yaXphdGlvbiIsInN1YnNjcmliZVNTRSIsInJldHJ5SW50ZXJ2YWwiLCJtYXhSZXRyaWVzIiwicmV0cnlDb3VudCIsImV2ZW50U291cmNlIiwidGltZW91dElkIiwib25PcGVuIiwib25NZXNzYWdlIiwic3NlRXZlbnQiLCJsYXN0RXZlbnRJZCIsInJldHJ5IiwiaW5jbHVkZXMiLCJwYXJzZUludCIsInNwbGl0IiwiQ0xPU0VEIiwib25SZXRyeSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsU0FBUUEsUUFBUSxRQUFPLHVCQUF1QjtBQUU5QyxNQUFNQyxVQUFVLENBQUNDLFFBQStCQyxNQUFNRixPQUFPLENBQUNDO0FBQzlELE1BQU1FLFdBQVcsQ0FBQ0YsUUFBZ0MsT0FBT0EsVUFBVTtBQUNuRSxNQUFNRyxnQkFBZ0IsQ0FBQ0gsUUFDckJBLFVBQVUsUUFBUSxPQUFPQSxVQUFVLFlBQVksQ0FBQ0QsUUFBUUM7QUFDMUQsTUFBTUksVUFBVSxDQUFDSixRQUNmQSxVQUFVLFFBQVFBLFVBQVVLLGFBQWFMLFVBQVU7QUFDckQsTUFBTU0sU0FBUyxDQUFDTixRQUF3QkEsVUFBVTtBQUNsRCxNQUFNTyxjQUFjLENBQUNQLFFBQXdCQSxVQUFVSztBQUV2RCxvQ0FBb0M7QUFDcEMsTUFBTUcsMEJBQTBCO0FBRWhDLGtDQUFrQztBQUNsQyxNQUFNQyxlQUFlLElBQUlDO0FBc0R6QixPQUFPLE1BQU1DLGVBQWUsQ0FBQ0MsTUFDM0JBLElBQUlDLE9BQU8sQ0FBQyw2Q0FBNkMsSUFBSTtBQUUvRCxPQUFPLE1BQU1DLGNBQWMsQ0FBQ0MsT0FDMUJDLE9BQU9DLElBQUksQ0FBQ0YsTUFDVEcsR0FBRyxDQUNGLENBQUNDLE1BQ0MsR0FBR0MsbUJBQW1CRCxLQUFLLENBQUMsRUFBRUMsbUJBQW1CTCxJQUFJLENBQUNJLElBQUksR0FBRyxFQUVoRUUsSUFBSSxDQUFDLEtBQUs7QUFFZiwyQkFBMkI7QUFDM0IsTUFBTUMsZ0JBQWdCLENBQUNDLEtBQ3JCLElBQUlDLFFBQVEsQ0FBQ0MsR0FBR0MsU0FDZEMsV0FBVyxJQUFNRCxPQUFPLElBQUlFLE1BQU0scUJBQXFCTDtBQUczRCwrQ0FBK0M7QUFDL0MsTUFBTU0sbUJBQW1CLENB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
|
|
550
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JpcC1odW50ZXIvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE3LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cbmltcG9ydCB7QXBpRXJyb3J9IGZyb20gJy4vZXJyb3JzL0FwaUVycm9yLmpzJztcblxuY29uc3QgaXNBcnJheSA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgYW55W10gPT4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG5jb25zdCBpc1N0cmluZyA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0+XG4gIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIWlzQXJyYXkodmFsdWUpO1xuY29uc3QgaXNFbXB0eSA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PlxuICB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJztcbmNvbnN0IGlzTnVsbCA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB2YWx1ZSA9PT0gbnVsbDtcbmNvbnN0IGlzVW5kZWZpbmVkID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbi8vIENhY2hlIGZvciBjb21waWxlZCByZWdleCBwYXR0ZXJuc1xuY29uc3QgSlNPTl9DT05URU5UX1RZUEVfUkVHRVggPSAvYXBwbGljYXRpb25cXC9qc29uL2k7XG5cbi8vIFJlcXVlc3QgY2FjaGUgZm9yIGRlZHVwbGljYXRpb25cbmNvbnN0IHJlcXVlc3RDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPGFueT4+KCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHVudGVyT3B0aW9uc1R5cGUge1xuICByZWFkb25seSBoZWFkZXJzPzogSGVhZGVycztcbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IGFueTtcbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcbiAgcmVhZG9ubHkgY2FjaGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh1bnRlclF1ZXJ5VHlwZSB7XG4gIHJlYWRvbmx5IHF1ZXJ5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdW50ZXJTU0VPcHRpb25zVHlwZSB7XG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBIZWFkZXJzO1xuICByZWFkb25seSB0b2tlbj86IHN0cmluZztcbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcbiAgcmVhZG9ubHkgcmV0cnlJbnRlcnZhbD86IG51bWJlcjtcbiAgcmVhZG9ubHkgbWF4UmV0cmllcz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdW50ZXJTU0VFdmVudFR5cGUge1xuICByZWFkb25seSBkYXRhOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldHJ5PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh1bnRlclNTRUNhbGxiYWNrVHlwZSB7XG4gIG9uTWVzc2FnZT86IChldmVudDogSHVudGVyU1NFRXZlbnRUeXBlKSA9PiB2b2lkO1xuICBvbk9wZW4/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvciB8IEV2ZW50KSA9PiB2b2lkO1xuICBvblJldHJ5PzogKGF0dGVtcHQ6IG51bWJlciwgZGVsYXk6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdW50ZXJTdWJzY3JpcHRpb25PcHRpb25zVHlwZSB7XG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBIZWFkZXJzO1xuICByZWFkb25seSB0b2tlbj86IHN0cmluZztcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25QYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgcmVjb25uZWN0SW50ZXJ2YWw/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heFJlY29ubmVjdEF0dGVtcHRzPzogbnVtYmVyO1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh1bnRlclN1YnNjcmlwdGlvbkNhbGxiYWNrVHlwZSB7XG4gIG9uTmV4dD86IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yIHwgRXZlbnQpID0+IHZvaWQ7XG4gIG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkO1xuICBvblJlY29ubmVjdD86IChhdHRlbXB0OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTcGFjZXMgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgc3RyLnJlcGxhY2UoL1xccysoPz0oPzpbXidcIl0qWydcIl1bXidcIl0qWydcIl0pKlteJ1wiXSokKS9nbSwgJycpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlTdHJpbmcgPSAoanNvbjogYW55KTogc3RyaW5nID0+XG4gIE9iamVjdC5rZXlzKGpzb24pXG4gICAgLm1hcChcbiAgICAgIChrZXk6IHN0cmluZykgPT5cbiAgICAgICAgYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGpzb25ba2V5XSl9YFxuICAgIClcbiAgICAuam9pbignJicpO1xuXG4vLyBDcmVhdGUgYSB0aW1lb3V0IHByb21pc2VcbmNvbnN0IGNyZWF0ZVRpbWVvdXQgPSAobXM6IG51bWJlcik6IFByb21pc2U8bmV2ZXI+ID0+XG4gIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+XG4gICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdSZXF1ZXN0IHRpbWVvdXQnKSksIG1zKVxuICApO1xuXG4vLyBHZW5lcmF0ZSBjYWNoZSBrZXkgZm9yIHJlcXVlc3QgZGVkdXBsaWNhdGlvblxuY29uc3QgZ2VuZXJhdGVDYWNoZUtleSA9ICh1cmw6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgb3B0aW9ucz86IEh1bnRlck9wdGlvbnNUeXBlKTogc3RyaW5nID0+IHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoe21ldGhvZCwgb3B0aW9ucywgcGFyYW1zLCB1cmx9KTtcbiAgcmV0dXJuIGJ0b2Eoa2V5KS5zbGljZSgwLCA1MCk7IC8vIFRydW5jYXRlIHRvIHJlYXNvbmFibGUgbGVuZ3RoXG59O1xuXG4vLyBTU0UgRXZlbnRTb3VyY2UgcG9seWZpbGwgZm9yIE5vZGUuanNcbmNvbnN0IGNyZWF0ZUV2ZW50U291cmNlID0gKHVybDogc3RyaW5nLCBvcHRpb25zPzogSHVudGVyU1NFT3B0aW9uc1R5cGUpOiBFdmVudFNvdXJjZSA9PiB7XG4gIGlmKHR5cGVvZiBFdmVudFNvdXJjZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IEV2ZW50U291cmNlKHVybCk7XG4gIH1cblxuICAvLyBGb3IgTm9kZS5qcywgd2UnbGwgdGhyb3cgYW4gZXJyb3Igc3VnZ2VzdGluZyB0aGUgdXNlciBpbnN0YWxsIGV2ZW50c291cmNlXG4gIHRocm93IG5ldyBFcnJvcignRXZlbnRTb3VyY2Ugbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LiBGb3IgTm9kZS5qcyBzdXBwb3J0LCBpbnN0YWxsIHRoZSBcImV2ZW50c291cmNlXCIgcGFja2FnZSBhbmQgaW1wb3J0IGl0IG1hbnVhbGx5LicpO1xufTtcblxuLy8gV2ViU29ja2V0IGNsaWVudCBmb3IgR3JhcGhRTCBzdWJzY3JpcHRpb25zIChncmFwaHFsLXdzIHByb3RvY29sKVxuY2xhc3MgR3JhcGhRTFN1YnNjcmlwdGlvbkNsaWVudCB7XG4gIHByaXZhdGUgd3M6IFdlYlNvY2tldCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIG9wdGlvbnM6IEh1bnRlclN1YnNjcmlwdGlvbk9wdGlvbnNUeXBlO1xuICBwcml2YXRlIHJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgcHJpdmF0ZSByZWNvbm5lY3RUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZXNzYWdlUXVldWU6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIEh1bnRlclN1YnNjcmlwdGlvbkNhbGxiYWNrVHlwZT4oKTtcbiAgcHJpdmF0ZSBtZXNzYWdlSGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IodXJsOiBzdHJpbmcsIG9wdGlvbnM6IEh1bnRlclN1YnNjcmlwdGlvbk9wdGlvbnNUeXBlID0ge30pIHtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9XZWJTb2NrZXRVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwucmVwbGFjZSgvXmh0dHAvLCAnd3MnKS5yZXBsYWNlKC9eaHR0cHMvLCAnd3NzJyk7XG4gIH1cblxuICBwcml2YXRlIGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmKHRoaXMuaXNDb25uZWN0aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgd3NVcmwgPSB0aGlzLmNvbnZlcnRUb1dlYlNvY2tldFVybCh0aGlzLnVybCk7XG5cbiAgICAgICAgaWYodHlwZW9mIFdlYlNvY2tldCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1dlYlNvY2tldCBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQuIEZvciBOb2RlLmpzIHN1cHBvcnQsIHlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIGEgV2ViU29ja2V0IGxpYnJhcnkuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud3MgPSBuZXcgV2ViU29ja2V0KHdzVXJsLCAnZ3JhcGhxbC13cycpO1xuXG4gICAgICAgIHRoaXMud3Mub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG5cbiAgICAgICAgICBjb25zdCBpbml0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdjb25uZWN0aW9uX2luaXQnLFxuICAgICAgICAgICAgcGF5bG9hZDogdGhpcy5vcHRpb25zLmNvbm5lY3Rpb25QYXJhbXMgfHwge31cbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShpbml0TWVzc2FnZSkpO1xuXG4gICAgICAgICAgd2hpbGUodGhpcy5tZXNzYWdlUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZVF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZihtZXNzYWdlICYmIHRoaXMud3M/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XG4gICAgICAgICAgICAgIHRoaXMud3Muc2VuZChtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy53cy5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgICBpZighdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy53cy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy53cy5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblxuICAgICAgICAgICAgaWYobWVzc2FnZS50eXBlID09PSAnY29ubmVjdGlvbl9hY2snKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobWVzc2FnZS50eXBlID09PSAnY29ubmVjdGlvbl9lcnJvcicpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZS5wYXlsb2FkPy5tZXNzYWdlIHx8ICdDb25uZWN0aW9uIGVycm9yJyk7XG4gICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChjYWxsYmFja3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZihjYWxsYmFja3Mub25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uSWQgPSBtZXNzYWdlLmlkO1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChzdWJzY3JpcHRpb25JZCk7XG5cbiAgICAgICAgICAgIGlmKGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgICAgICAgICAgICBpZihjYWxsYmFja3Mub25OZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5vbk5leHQobWVzc2FnZS5wYXlsb2FkPy5kYXRhIHx8IG1lc3NhZ2UucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgICBpZihjYWxsYmFja3Mub25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBBcGlFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KG1lc3NhZ2UucGF5bG9hZCkgPyBtZXNzYWdlLnBheWxvYWQgOiBbbWVzc2FnZS5wYXlsb2FkXSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoJ0dyYXBoUUwgc3Vic2NyaXB0aW9uIGVycm9yJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgaWYoY2FsbGJhY2tzLm9uQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoc3Vic2NyaXB0aW9uSWQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMubWVzc2FnZUhhbmRsZXJzLmdldChzdWJzY3JpcHRpb25JZCk7XG4gICAgICAgICAgICAgICAgICBpZihoYW5kbGVyICYmIHRoaXMud3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXJzLmRlbGV0ZShzdWJzY3JpcHRpb25JZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChjYWxsYmFja3MpID0+IHtcbiAgICAgICAgICAgICAgaWYoY2FsbGJhY2tzLm9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3Mub25FcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ1BhcnNlIGVycm9yJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlY29ubmVjdCgpOiB2b2lkIHtcbiAgICBjb25zdCB7bWF4UmVjb25uZWN0QXR0ZW1wdHMgPSA1LCByZWNvbm5lY3RJbnRlcnZhbCA9IDEwMDB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYodGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA8IG1heFJlY29ubmVjdEF0dGVtcHRzICYmIHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplID4gMCkge1xuICAgICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoY2FsbGJhY2tzKSA9PiB7XG4gICAgICAgIGlmKGNhbGxiYWNrcy5vblJlY29ubmVjdCkge1xuICAgICAgICAgIGNhbGxiYWNrcy5vblJlY29ubmVjdCh0aGlzLnJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0KCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICB9KTtcbiAgICAgIH0sIHJlY29ubmVjdEludGVydmFsKTtcbiAgICB9IGVsc2UgaWYodGhpcy5zdWJzY3JpcHRpb25zLnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignV2ViU29ja2V0IHJlY29ubmVjdGlvbiBmYWlsZWQgYWZ0ZXIgbWF4IGF0dGVtcHRzJyk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoY2FsbGJhY2tzKSA9PiB7XG4gICAgICAgIGlmKGNhbGxiYWNrcy5vbkVycm9yKSB7XG4gICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbmQobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYodGhpcy53cz8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMud3Muc2VuZChtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlUXVldWUucHVzaChtZXNzYWdlKTtcbiAgICAgIGlmKCF0aGlzLmlzQ29ubmVjdGluZyAmJiAhdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLmNvbm5lY3QoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZShcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgY2FsbGJhY2tzOiBIdW50ZXJTdWJzY3JpcHRpb25DYWxsYmFja1R5cGVcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSWQgPSBgc3ViXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoc3Vic2NyaXB0aW9uSWQsIGNhbGxiYWNrcyk7XG5cbiAgICBjb25zdCBzdGFydE1lc3NhZ2UgPSB7XG4gICAgICBpZDogc3Vic2NyaXB0aW9uSWQsXG4gICAgICB0eXBlOiAnc3RhcnQnLFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMgfHwge31cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZW5zdXJlQ29ubmVjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmKCF0aGlzLmlzQ29ubmVjdGVkICYmICF0aGlzLmlzQ29ubmVjdGluZykge1xuICAgICAgICB0aGlzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbmQoSlNPTi5zdHJpbmdpZnkoc3RhcnRNZXNzYWdlKSk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmKGNhbGxiYWNrcy5vbkVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFja3Mub25FcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZih0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShzdGFydE1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZW5zdXJlQ29ubmVjdGlvbigpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3BNZXNzYWdlID0ge1xuICAgICAgICBpZDogc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgIHR5cGU6ICdzdG9wJ1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShzdG9wTWVzc2FnZSkpO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJzY3JpcHRpb25JZCk7XG4gICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5tZXNzYWdlSGFuZGxlcnMuZ2V0KHN1YnNjcmlwdGlvbklkKTtcbiAgICAgIGlmKGhhbmRsZXIgJiYgdGhpcy53cykge1xuICAgICAgICB0aGlzLndzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcnMuZGVsZXRlKHN1YnNjcmlwdGlvbklkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYodGhpcy5yZWNvbm5lY3RUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZXIpO1xuICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGlmKHRoaXMud3MpIHtcbiAgICAgIHRoaXMud3MuY2xvc2UoKTtcbiAgICAgIHRoaXMud3MgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IFtdO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XG4gIH1cbn1cblxuLy8gU3Vic2NyaXB0aW9uIGNsaWVudCBjYWNoZVxuY29uc3Qgc3Vic2NyaXB0aW9uQ2xpZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBHcmFwaFFMU3Vic2NyaXB0aW9uQ2xpZW50PigpO1xuXG4vLyBBSkFYXG5leHBvcnQgY29uc3QgYWpheCA9IChcbiAgdXJsOiBzdHJpbmcsXG4gIG1ldGhvZDogc3RyaW5nLFxuICBwYXJhbXM/OiBhbnksXG4gIG9wdGlvbnM6IEh1bnRlck9wdGlvbnNUeXBlID0ge31cbik6IFByb21pc2U8YW55PiA9PiB7XG4gIGNvbnN0IHtoZWFkZXJzLCB0b2tlbiwgdGltZW91dCA9IDMwMDAwLCBjYWNoZSA9IGZhbHNlfSA9IG9wdGlvbnM7XG5cbiAgbGV0IGZvcm1hdFVybDogc3RyaW5nID0gKHVybCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBmb3JtYXRUb2tlbjogc3RyaW5nID0gKHRva2VuIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGZvcm1hdEhlYWRlcnM6IEhlYWRlcnMgPSBoZWFkZXJzIHx8IG5ldyBIZWFkZXJzKCk7XG5cbiAgLy8gTWV0aG9kXG4gIGNvbnN0IGZvcm1hdE1ldGhvZDogc3RyaW5nID0gKG1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgbGV0IGZvcm1hdFBhcmFtcztcblxuICAvLyBQYXJhbWV0ZXJzXG4gIGlmKHBhcmFtcyAmJiBmb3JtYXRNZXRob2QgPT09ICdHRVQnKSB7XG4gICAgZm9ybWF0VXJsID0gYCR7Zm9ybWF0VXJsfT8ke3F1ZXJ5U3RyaW5nKHBhcmFtcyl9YDtcbiAgICBmb3JtYXRQYXJhbXMgPSBudWxsO1xuICB9IGVsc2UgaWYocGFyYW1zKSB7XG4gICAgZm9ybWF0SGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgZm9ybWF0SGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgZm9ybWF0UGFyYW1zID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBmb3JtYXRQYXJhbXMgPSBwYXJhbXM7XG4gIH1cblxuICAvLyBBdXRoZW50aWNhdGlvbiB0b2tlblxuICBpZighaXNFbXB0eShmb3JtYXRUb2tlbikpIHtcbiAgICBmb3JtYXRIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHtmb3JtYXRUb2tlbn1gKTtcbiAgfVxuXG4gIC8vIENoZWNrIGNhY2hlIGZvciBHRVQgcmVxdWVzdHNcbiAgaWYoY2FjaGUgJiYgZm9ybWF0TWV0aG9kID09PSAnR0VUJykge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gZ2VuZXJhdGVDYWNoZUtleShmb3JtYXRVcmwsIGZvcm1hdE1ldGhvZCwgcGFyYW1zLCBvcHRpb25zKTtcbiAgICBjb25zdCBjYWNoZWQgPSByZXF1ZXN0Q2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZihjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IHByb21pc2VcbiAgY29uc3QgcmVxdWVzdFByb21pc2UgPSBmZXRjaChmb3JtYXRVcmwsIHtcbiAgICBib2R5OiBmb3JtYXRQYXJhbXMsXG4gICAgaGVhZGVyczogZm9ybWF0SGVhZGVycyxcbiAgICBtZXRob2Q6IGZvcm1hdE1ldGhvZFxuICB9KVxuICAgIC50aGVuKChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIENoZWNrIGlmIHJlc3BvbnNlIGlzIGpzb24gdXNpbmcgY2FjaGVkIHJlZ2V4XG4gICAgICBjb25zdCBpc1Jlc3BvbnNlSnNvbiA9IEpTT05fQ09OVEVOVF9UWVBFX1JFR0VYLnRlc3QoXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSB8fCAnJ1xuICAgICAgKTtcblxuICAgICAgaWYoaXNSZXNwb25zZUpzb24pIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICB9KVxuICAgIC50aGVuKChyZXN1bHRzKSA9PiByZXN1bHRzKSAvLyBTaW1wbGlmaWVkIC0gbm8gbmVlZCBmb3IgcmVkdW5kYW50IGNoZWNrXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgaWYoKGVycm9yIHx8IHt9KS5tZXNzYWdlID09PSAnb25seSBhYnNvbHV0ZSB1cmxzIGFyZSBzdXBwb3J0ZWQnKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICBuZXcgQXBpRXJyb3IoW3ttZXNzYWdlOiAnaW52YWxpZF91cmwnfV0sIGVycm9yKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBBcGlFcnJvcihbe21lc3NhZ2U6ICduZXR3b3JrX2Vycm9yJ31dLCBlcnJvcilcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgLy8gQWRkIHRpbWVvdXQgaWYgc3BlY2lmaWVkXG4gIGNvbnN0IGZpbmFsUHJvbWlzZSA9IHRpbWVvdXQgPiAwXG4gICAgPyBQcm9taXNlLnJhY2UoW3JlcXVlc3RQcm9taXNlLCBjcmVhdGVUaW1lb3V0KHRpbWVvdXQpXSlcbiAgICA6IHJlcXVlc3RQcm9taXNlO1xuXG4gIC8vIENhY2hlIHRoZSBwcm9taXNlIGZvciBHRVQgcmVxdWVzdHNcbiAgaWYoY2FjaGUgJiYgZm9ybWF0TWV0aG9kID09PSAnR0VUJykge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gZ2VuZXJhdGVDYWNoZUtleShmb3JtYXRVcmwsIGZvcm1hdE1ldGhvZCwgcGFyYW1zLCBvcHRpb25zKTtcbiAgICByZXF1ZXN0Q2FjaGUuc2V0KGNhY2hlS2V5LCBmaW5hbFByb21pc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXAgY2FjaGUgYWZ0ZXIgNSBtaW51dGVzXG4gICAgc2V0VGltZW91dCgoKSA9PiByZXF1ZXN0Q2FjaGUuZGVsZXRlKGNhY2hlS2V5KSwgMzAwMDAwKTtcbiAgfVxuXG4gIHJldHVybiBmaW5hbFByb21pc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0ID0gKFxuICB1cmw6IHN0cmluZyxcbiAgcGFyYW1zPzogYW55LFxuICBvcHRpb25zPzogSHVudGVyT3B0aW9uc1R5cGVcbik6IFByb21pc2U8YW55PiA9PiBhamF4KHVybCwgJ0dFVCcsIHBhcmFtcywgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBwb3N0ID0gKFxuICB1cmw6IHN0cmluZyxcbiAgcGFyYW1zPzogYW55LFxuICBvcHRpb25zPzogSHVudGVyT3B0aW9uc1R5cGVcbik6IFByb21pc2U8YW55PiA9PiBhamF4KHVybCwgJ1BPU1QnLCBwYXJhbXMsIG9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgcHV0ID0gKFxuICB1cmw6IHN0cmluZyxcbiAgcGFyYW1zPzogYW55LFxuICBvcHRpb25zPzogSHVudGVyT3B0aW9uc1R5cGVcbik6IFByb21pc2U8YW55PiA9PiBhamF4KHVybCwgJ1BVVCcsIHBhcmFtcywgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBkZWwgPSAoXG4gIHVybDogc3RyaW5nLFxuICBwYXJhbXM/OiBhbnksXG4gIG9wdGlvbnM/OiBIdW50ZXJPcHRpb25zVHlwZVxuKTogUHJvbWlzZTxhbnk+ID0+IGFqYXgodXJsLCAnREVMRVRFJywgcGFyYW1zLCBvcHRpb25zKTtcblxuLy8gT3B0aW1pemVkIHRvR3FsIGZ1bmN0aW9uXG5leHBvcnQgY29uc3QgdG9HcWwgPSAob2JqOiBhbnkpOiBzdHJpbmcgPT4ge1xuICBpZihpc1N0cmluZyhvYmopKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG4gIH0gZWxzZSBpZihpc1BsYWluT2JqZWN0KG9iaikpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMgaW4gb25lIHBhc3NcbiAgICBjb25zdCBncWxQcm9wczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvcihjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZihvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW2tleV07XG5cbiAgICAgICAgLy8gU2tpcCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgICAgIGlmKGlzVW5kZWZpbmVkKGl0ZW0pIHx8IGlzTnVsbChpdGVtKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoaXNQbGFpbk9iamVjdChpdGVtKSkge1xuICAgICAgICAgIGdxbFByb3BzLnB1c2goYCR7a2V5fTogJHt0b0dxbChpdGVtKX1gKTtcbiAgICAgICAgfSBlbHNlIGlmKGlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gaXRlbS5tYXAoKGxpc3RJdGVtKSA9PiB0b0dxbChsaXN0SXRlbSkpO1xuICAgICAgICAgIGdxbFByb3BzLnB1c2goYCR7a2V5fTogWyR7bGlzdC5qb2luKCcsICcpfV1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB2YWwgPSBKU09OLnN0cmluZ2lmeShpdGVtKTtcbiAgICAgICAgICBpZih2YWwpIHtcbiAgICAgICAgICAgIGdxbFByb3BzLnB1c2goYCR7a2V5fTogJHt2YWx9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVzID0gZ3FsUHJvcHMuam9pbignLCAnKTtcbiAgICByZXR1cm4gdmFsdWVzID09PSAnJyA/ICdcIlwiJyA6IGB7JHtncWxQcm9wcy5qb2luKCcsICcpfX1gO1xuICB9IGVsc2UgaWYoaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIGBbJHtvYmoubWFwKChvYmpJdGVtKSA9PiB0b0dxbChvYmpJdGVtKSkuam9pbignLCAnKX1dYDtcbiAgfVxuXG4gIHJldHVybiBTdHJpbmcob2JqKTtcbn07XG5cbmV4cG9ydCBjb25zdCBncmFwaHFsUXVlcnkgPSAoXG4gIHVybDogc3RyaW5nLFxuICBxdWVyeTogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW10sXG4gIG9wdGlvbnM6IEh1bnRlck9wdGlvbnNUeXBlID0ge31cbik6IFByb21pc2U8YW55PiA9PiB7XG4gIGNvbnN0IHtoZWFkZXJzLCB0b2tlbiwgdGltZW91dCA9IDMwMDAwfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGZvcm1hdFVybDogc3RyaW5nID0gdXJsID8gdXJsLnRyaW0oKSA6ICcnO1xuICBjb25zdCBmb3JtYXRUb2tlbjogc3RyaW5nID0gKHRva2VuIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGZvcm1hdEhlYWRlcnM6IEhlYWRlcnMgPSBoZWFkZXJzIHx8IG5ldyBIZWFkZXJzKHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSk7XG5cbiAgaWYoIWlzRW1wdHkoZm9ybWF0VG9rZW4pKSB7XG4gICAgZm9ybWF0SGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7Zm9ybWF0VG9rZW59YCk7XG4gIH1cblxuICBjb25zdCByZXF1ZXN0UHJvbWlzZSA9IGZldGNoKGZvcm1hdFVybCwge1xuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHF1ZXJ5KSxcbiAgICBoZWFkZXJzOiBmb3JtYXRIZWFkZXJzLFxuICAgIG1ldGhvZDogJ3Bvc3QnXG4gIH0pXG4gICAgLnRoZW4oKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgaXNKc29uOiBib29sZWFuID0gSlNPTl9DT05URU5UX1RZUEVfUkVHRVgudGVzdChcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpIHx8ICcnXG4gICAgICApO1xuXG4gICAgICBpZihpc0pzb24gJiYgcmVzcG9uc2UuYm9keSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGlmKChlcnJvciB8fCB7fSkubWVzc2FnZSA9PT0gJ29ubHkgYWJzb2x1dGUgdXJscyBhcmUgc3VwcG9ydGVkJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgbmV3IEFwaUVycm9yKFt7bWVzc2FnZTogJ2ludmFsaWRfdXJsJ31dLCBlcnJvcilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgQXBpRXJyb3IoW3ttZXNzYWdlOiAnbmV0d29ya19lcnJvcid9XSwgZXJyb3IpXG4gICAgICApO1xuICAgIH0pXG4gICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgIGlmKCFqc29uIHx8IGpzb24uZXJyb3JzKSB7XG4gICAgICAgIGlmKCFqc29uKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgICAgbmV3IEFwaUVycm9yKFt7bWVzc2FnZTogJ2FwaV9lcnJvcid9XSwgbmV3IEVycm9yKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmKFxuICAgICAgICAgIChqc29uLmVycm9ycyB8fCBbXSkuc29tZShcbiAgICAgICAgICAgIChlcnJvcjogRXJyb3IpID0+IGVycm9yLm1lc3NhZ2UgPT09ICdNdXN0IHByb3ZpZGUgcXVlcnkgc3RyaW5nLidcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICAgIG5ldyBBcGlFcnJvcihbe21lc3NhZ2U6ICdyZXF1aXJlZF9xdWVyeSd9XSwgbmV3IEVycm9yKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBqc29uLmVycm9yc1xuICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QobmV3IEFwaUVycm9yKGpzb24uZXJyb3JzLCBuZXcgRXJyb3IoKSkpXG4gICAgICAgICAgOiB7fTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGpzb24uZGF0YSB8fCB7fTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEFwaUVycm9yKSA9PlxuICAgICAgLy8gU2ltcGxpZmllZCBlcnJvciBoYW5kbGluZyAtIG5vIG5lZWQgdG8gY3JlYXRlIG5ldyBlcnJvciBpZiBzb3VyY2UgZXhpc3RzXG4gICAgICBQcm9taXNlLnJlamVjdChlcnJvci5zb3VyY2UgPyBlcnJvciA6IG5ldyBBcGlFcnJvcihbe21lc3NhZ2U6ICduZXR3b3JrX2Vycm9yJ31dLCBlcnJvcikpXG4gICAgKTtcblxuICAvLyBBZGQgdGltZW91dCBpZiBzcGVjaWZpZWRcbiAgcmV0dXJuIHRpbWVvdXQgPiAwXG4gICAgPyBQcm9taXNlLnJhY2UoW3JlcXVlc3RQcm9taXNlLCBjcmVhdGVUaW1lb3V0KHRpbWVvdXQpXSlcbiAgICA6IHJlcXVlc3RQcm9taXNlO1xufTtcblxuLy8gQWRkIHF1ZXJ5IGFuZCBtdXRhdGlvbiBmdW5jdGlvbnMgZm9yIGJldHRlciBBUEkgY29uc2lzdGVuY3lcbmV4cG9ydCBjb25zdCBxdWVyeSA9IChcbiAgdXJsOiBzdHJpbmcsXG4gIGJvZHk6IHN0cmluZyxcbiAgb3B0aW9uczogSHVudGVyT3B0aW9uc1R5cGUgPSB7fVxuKTogUHJvbWlzZTxhbnk+ID0+IGdyYXBocWxRdWVyeSh1cmwsIHtxdWVyeTogYm9keX0sIG9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgbXV0YXRpb24gPSAoXG4gIHVybDogc3RyaW5nLFxuICBib2R5OiBzdHJpbmcsXG4gIG9wdGlvbnM6IEh1bnRlck9wdGlvbnNUeXBlID0ge31cbik6IFByb21pc2U8YW55PiA9PiBncmFwaHFsUXVlcnkodXJsLCB7cXVlcnk6IGJvZHl9LCBvcHRpb25zKTtcblxuLy8gR3JhcGhRTCBTdWJzY3JpcHRpb25zXG5leHBvcnQgY29uc3Qgc3Vic2NyaWJlID0gKFxuICB1cmw6IHN0cmluZyxcbiAgcXVlcnk6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiBIdW50ZXJTdWJzY3JpcHRpb25DYWxsYmFja1R5cGUsXG4gIG9wdGlvbnM6IEh1bnRlclN1YnNjcmlwdGlvbk9wdGlvbnNUeXBlID0ge31cbik6ICgoKSA9PiB2b2lkKSA9PiB7XG4gIGNvbnN0IHt0b2tlbiwgdmFyaWFibGVzLCBjb25uZWN0aW9uUGFyYW1zLCBoZWFkZXJzfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGZvcm1hdFVybDogc3RyaW5nID0gKHVybCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBmb3JtYXRUb2tlbjogc3RyaW5nID0gKHRva2VuIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIWZvcm1hdFVybCkge1xuICAgIGlmKGNhbGxiYWNrcy5vbkVycm9yKSB7XG4gICAgICBjYWxsYmFja3Mub25FcnJvcihuZXcgRXJyb3IoJ1N1YnNjcmlwdGlvbiBVUkwgaXMgcmVxdWlyZWQnKSk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGxldCBjbGllbnQgPSBzdWJzY3JpcHRpb25DbGllbnRzLmdldChmb3JtYXRVcmwpO1xuICBpZighY2xpZW50KSB7XG4gICAgY29uc3QgY2xpZW50T3B0aW9uczogSHVudGVyU3Vic2NyaXB0aW9uT3B0aW9uc1R5cGUgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgY29ubmVjdGlvblBhcmFtczoge1xuICAgICAgICAuLi5jb25uZWN0aW9uUGFyYW1zLFxuICAgICAgICAuLi4oZm9ybWF0VG9rZW4gPyB7YXV0aG9yaXphdGlvbjogYEJlYXJlciAke2Zvcm1hdFRva2VufWB9IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgICBjbGllbnQgPSBuZXcgR3JhcGhRTFN1YnNjcmlwdGlvbkNsaWVudChmb3JtYXRVcmwsIGNsaWVudE9wdGlvbnMpO1xuICAgIHN1YnNjcmlwdGlvbkNsaWVudHMuc2V0KGZvcm1hdFVybCwgY2xpZW50KTtcbiAgfVxuXG4gIHJldHVybiBjbGllbnQuc3Vic2NyaWJlKHF1ZXJ5LCB2YXJpYWJsZXMsIGNhbGxiYWNrcyk7XG59O1xuXG4vLyBTU0UgU3VwcG9ydFxuZXhwb3J0IGNvbnN0IHN1YnNjcmliZVNTRSA9IChcbiAgdXJsOiBzdHJpbmcsXG4gIGNhbGxiYWNrczogSHVudGVyU1NFQ2FsbGJhY2tUeXBlLFxuICBvcHRpb25zOiBIdW50ZXJTU0VPcHRpb25zVHlwZSA9IHt9XG4pOiAoKCkgPT4gdm9pZCkgPT4ge1xuICBjb25zdCB7aGVhZGVycywgdG9rZW4sIHRpbWVvdXQgPSAzMDAwMCwgcmV0cnlJbnRlcnZhbCA9IDEwMDAsIG1heFJldHJpZXMgPSA1fSA9IG9wdGlvbnM7XG4gIGNvbnN0IGZvcm1hdFVybDogc3RyaW5nID0gKHVybCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBmb3JtYXRUb2tlbjogc3RyaW5nID0gKHRva2VuIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGZvcm1hdEhlYWRlcnM6IEhlYWRlcnMgPSBoZWFkZXJzIHx8IG5ldyBIZWFkZXJzKCk7XG5cbiAgLy8gQWRkIGF1dGhvcml6YXRpb24gaGVhZGVyIGlmIHRva2VuIHByb3ZpZGVkXG4gIGlmKCFpc0VtcHR5KGZvcm1hdFRva2VuKSkge1xuICAgIGZvcm1hdEhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke2Zvcm1hdFRva2VufWApO1xuICB9XG5cbiAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICBsZXQgZXZlbnRTb3VyY2U6IEV2ZW50U291cmNlIHwgbnVsbCA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgY29ubmVjdCA9ICgpOiB2b2lkID0+IHtcbiAgICB0cnkge1xuICAgICAgZXZlbnRTb3VyY2UgPSBjcmVhdGVFdmVudFNvdXJjZShmb3JtYXRVcmwsIHtoZWFkZXJzOiBmb3JtYXRIZWFkZXJzfSk7XG5cbiAgICAgIC8vIFNldCB1cCB0aW1lb3V0XG4gICAgICBpZih0aW1lb3V0ID4gMCkge1xuICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZihldmVudFNvdXJjZSkge1xuICAgICAgICAgICAgZXZlbnRTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmKGNhbGxiYWNrcy5vbkVycm9yKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yKG5ldyBFcnJvcignU1NFIGNvbm5lY3Rpb24gdGltZW91dCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBFdmVudCBoYW5kbGVyc1xuICAgICAgZXZlbnRTb3VyY2Uub25vcGVuID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmKHRpbWVvdXRJZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgIHRpbWVvdXRJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0cnlDb3VudCA9IDA7IC8vIFJlc2V0IHJldHJ5IGNvdW50IG9uIHN1Y2Nlc3NmdWwgY29ubmVjdGlvblxuICAgICAgICBpZihjYWxsYmFja3Mub25PcGVuKSB7XG4gICAgICAgICAgY2FsbGJhY2tzLm9uT3BlbihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGV2ZW50U291cmNlLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgICBpZihjYWxsYmFja3Mub25NZXNzYWdlKSB7XG4gICAgICAgICAgY29uc3Qgc3NlRXZlbnQ6IEh1bnRlclNTRUV2ZW50VHlwZSA9IHtcbiAgICAgICAgICAgIGRhdGE6IGV2ZW50LmRhdGEsXG4gICAgICAgICAgICBpZDogZXZlbnQubGFzdEV2ZW50SWQsXG4gICAgICAgICAgICByZXRyeTogZXZlbnQuZGF0YS5pbmNsdWRlcygncmV0cnk6JykgPyBwYXJzZUludChldmVudC5kYXRhLnNwbGl0KCdyZXRyeTonKVsxXSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0eXBlOiBldmVudC50eXBlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjYWxsYmFja3Mub25NZXNzYWdlKHNzZUV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZXZlbnRTb3VyY2Uub25lcnJvciA9IChldmVudCkgPT4ge1xuICAgICAgICBpZih0aW1lb3V0SWQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICB0aW1lb3V0SWQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZXZlbnRTb3VyY2UgJiYgZXZlbnRTb3VyY2UucmVhZHlTdGF0ZSA9PT0gRXZlbnRTb3VyY2UuQ0xPU0VEKSB7XG4gICAgICAgICAgLy8gQ29ubmVjdGlvbiBjbG9zZWQsIGF0dGVtcHQgcmV0cnkgaWYgd2l0aGluIGxpbWl0c1xuICAgICAgICAgIGlmKHJldHJ5Q291bnQgPCBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgICBpZihjYWxsYmFja3Mub25SZXRyeSkge1xuICAgICAgICAgICAgICBjYWxsYmFja3Mub25SZXRyeShyZXRyeUNvdW50LCByZXRyeUludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoY29ubmVjdCwgcmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKGNhbGxiYWNrcy5vbkVycm9yKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yKG5ldyBFcnJvcignU1NFIGNvbm5lY3Rpb24gZmFpbGVkIGFmdGVyIG1heCByZXRyaWVzJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZihjYWxsYmFja3Mub25FcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBpZihjYWxsYmFja3Mub25FcnJvcikge1xuICAgICAgICBjYWxsYmFja3Mub25FcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgU1NFIGNvbm5lY3Rpb24nKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIFN0YXJ0IHRoZSBjb25uZWN0aW9uXG4gIGNvbm5lY3QoKTtcblxuICAvLyBSZXR1cm4gY2xlYW51cCBmdW5jdGlvblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmKHRpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB0aW1lb3V0SWQgPSBudWxsO1xuICAgIH1cbiAgICBpZihldmVudFNvdXJjZSkge1xuICAgICAgZXZlbnRTb3VyY2UuY2xvc2UoKTtcbiAgICAgIGV2ZW50U291cmNlID0gbnVsbDtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQge0FwaUVycm9yfSBmcm9tICcuL2Vycm9ycy9BcGlFcnJvci5qcyc7XG4iXSwibmFtZXMiOlsiQXBpRXJyb3IiLCJpc0FycmF5IiwidmFsdWUiLCJBcnJheSIsImlzU3RyaW5nIiwiaXNQbGFpbk9iamVjdCIsImlzRW1wdHkiLCJ1bmRlZmluZWQiLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsIkpTT05fQ09OVEVOVF9UWVBFX1JFR0VYIiwicmVxdWVzdENhY2hlIiwiTWFwIiwicmVtb3ZlU3BhY2VzIiwic3RyIiwicmVwbGFjZSIsInF1ZXJ5U3RyaW5nIiwianNvbiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIiwiY3JlYXRlVGltZW91dCIsIm1zIiwiUHJvbWlzZSIsIl8iLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJnZW5lcmF0ZUNhY2hlS2V5IiwidXJsIiwibWV0aG9kIiwicGFyYW1zIiwib3B0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJidG9hIiwic2xpY2UiLCJjcmVhdGVFdmVudFNvdXJjZSIsIkV2ZW50U291cmNlIiwiR3JhcGhRTFN1YnNjcmlwdGlvbkNsaWVudCIsIndzIiwicmVjb25uZWN0QXR0ZW1wdHMiLCJyZWNvbm5lY3RUaW1lciIsIm1lc3NhZ2VRdWV1ZSIsImlzQ29ubmVjdGluZyIsImlzQ29ubmVjdGVkIiwic3Vic2NyaXB0aW9ucyIsIm1lc3NhZ2VIYW5kbGVycyIsImNvbnZlcnRUb1dlYlNvY2tldFVybCIsImNvbm5lY3QiLCJyZXNvbHZlIiwid3NVcmwiLCJXZWJTb2NrZXQiLCJvbm9wZW4iLCJpbml0TWVzc2FnZSIsInR5cGUiLCJwYXlsb2FkIiwiY29ubmVjdGlvblBhcmFtcyIsInNlbmQiLCJsZW5ndGgiLCJtZXNzYWdlIiwic2hpZnQiLCJyZWFkeVN0YXRlIiwiT1BFTiIsIm9uZXJyb3IiLCJlcnJvciIsIm9uY2xvc2UiLCJoYW5kbGVSZWNvbm5lY3QiLCJvbm1lc3NhZ2UiLCJldmVudCIsInBhcnNlIiwiZGF0YSIsImZvckVhY2giLCJjYWxsYmFja3MiLCJvbkVycm9yIiwic3Vic2NyaXB0aW9uSWQiLCJpZCIsImdldCIsIm9uTmV4dCIsIm9uQ29tcGxldGUiLCJkZWxldGUiLCJoYW5kbGVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm1heFJlY29ubmVjdEF0dGVtcHRzIiwicmVjb25uZWN0SW50ZXJ2YWwiLCJzaXplIiwib25SZWNvbm5lY3QiLCJjYXRjaCIsInB1c2giLCJzdWJzY3JpYmUiLCJxdWVyeSIsInZhcmlhYmxlcyIsIkRhdGUiLCJub3ciLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJzdWJzdHIiLCJzZXQiLCJzdGFydE1lc3NhZ2UiLCJlbnN1cmVDb25uZWN0aW9uIiwidGhlbiIsInN0b3BNZXNzYWdlIiwiY2xvc2UiLCJjbGVhclRpbWVvdXQiLCJjbGVhciIsInN1YnNjcmlwdGlvbkNsaWVudHMiLCJhamF4IiwiaGVhZGVycyIsInRva2VuIiwidGltZW91dCIsImNhY2hlIiwiZm9ybWF0VXJsIiwidHJpbSIsImZvcm1hdFRva2VuIiwiZm9ybWF0SGVhZGVycyIsIkhlYWRlcnMiLCJmb3JtYXRNZXRob2QiLCJ0b1VwcGVyQ2FzZSIsImZvcm1hdFBhcmFtcyIsImNhY2hlS2V5IiwiY2FjaGVkIiwicmVxdWVzdFByb21pc2UiLCJmZXRjaCIsImJvZHkiLCJyZXNwb25zZSIsImlzUmVzcG9uc2VKc29uIiwidGVzdCIsInRleHQiLCJyZXN1bHRzIiwiZmluYWxQcm9taXNlIiwicmFjZSIsInBvc3QiLCJwdXQiLCJkZWwiLCJ0b0dxbCIsIm9iaiIsImdxbFByb3BzIiwiaGFzT3duUHJvcGVydHkiLCJpdGVtIiwibGlzdCIsImxpc3RJdGVtIiwidmFsIiwidmFsdWVzIiwib2JqSXRlbSIsIlN0cmluZyIsImdyYXBocWxRdWVyeSIsImlzSnNvbiIsImVycm9ycyIsInNvbWUiLCJzb3VyY2UiLCJtdXRhdGlvbiIsImNsaWVudCIsImNsaWVudE9wdGlvbnMiLCJhdXRob3JpemF0aW9uIiwic3Vic2NyaWJlU1NFIiwicmV0cnlJbnRlcnZhbCIsIm1heFJldHJpZXMiLCJyZXRyeUNvdW50IiwiZXZlbnRTb3VyY2UiLCJ0aW1lb3V0SWQiLCJvbk9wZW4iLCJvbk1lc3NhZ2UiLCJzc2VFdmVudCIsImxhc3RFdmVudElkIiwicmV0cnkiLCJpbmNsdWRlcyIsInBhcnNlSW50Iiwic3BsaXQiLCJDTE9TRUQiLCJvblJldHJ5Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRCxTQUFRQSxRQUFRLFFBQU8sdUJBQXVCO0FBRTlDLE1BQU1DLFVBQVUsQ0FBQ0MsUUFBK0JDLE1BQU1GLE9BQU8sQ0FBQ0M7QUFDOUQsTUFBTUUsV0FBVyxDQUFDRixRQUFnQyxPQUFPQSxVQUFVO0FBQ25FLE1BQU1HLGdCQUFnQixDQUFDSCxRQUNyQkEsVUFBVSxRQUFRLE9BQU9BLFVBQVUsWUFBWSxDQUFDRCxRQUFRQztBQUMxRCxNQUFNSSxVQUFVLENBQUNKLFFBQ2ZBLFVBQVUsUUFBUUEsVUFBVUssYUFBYUwsVUFBVTtBQUNyRCxNQUFNTSxTQUFTLENBQUNOLFFBQXdCQSxVQUFVO0FBQ2xELE1BQU1PLGNBQWMsQ0FBQ1AsUUFBd0JBLFVBQVVLO0FBRXZELG9DQUFvQztBQUNwQyxNQUFNRywwQkFBMEI7QUFFaEMsa0NBQWtDO0FBQ2xDLE1BQU1DLGVBQWUsSUFBSUM7QUFzRHpCLE9BQU8sTUFBTUMsZUFBZSxDQUFDQyxNQUMzQkEsSUFBSUMsT0FBTyxDQUFDLDZDQUE2QyxJQUFJO0FBRS9ELE9BQU8sTUFBTUMsY0FBYyxDQUFDQyxPQUMxQkMsT0FBT0MsSUFBSSxDQUFDRixNQUNURyxHQUFHLENBQ0YsQ0FBQ0MsTUFDQyxHQUFHQyxtQkFBbUJELEtBQUssQ0FBQyxFQUFFQyxtQkFBbUJMLElBQUksQ0FBQ0ksSUFBSSxHQUFHLEVBRWhFRSxJQUFJLENBQUMsS0FBSztBQUVmLDJCQUEyQjtBQUMzQixNQUFNQyxnQkFBZ0IsQ0FBQ0MsS0FDckIsSUFBSUMsUUFBUSxDQUFDQyxHQUFHQyxTQUNkQyxXQUFXLElB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nlabs/rip-hunter",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "JS utilities for AJAX and GraphQL",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -64,24 +64,16 @@
|
|
|
64
64
|
"benchmark": "node --experimental-modules ./benchmark.js"
|
|
65
65
|
},
|
|
66
66
|
"optionalDependencies": {
|
|
67
|
-
"eventsource": "^
|
|
67
|
+
"eventsource": "^5.1.0"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@jest/globals": "30.2.0",
|
|
71
70
|
"@nlabs/fetch-mock": "1.0.2",
|
|
72
|
-
"@nlabs/lex": "1.
|
|
73
|
-
"@types/
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"typescript": "5.9.3"
|
|
71
|
+
"@nlabs/lex": "1.59.5",
|
|
72
|
+
"@types/node": "26.2.0",
|
|
73
|
+
"typescript": "6.0.3",
|
|
74
|
+
"vitest-websocket-mock": "0.7.0"
|
|
77
75
|
},
|
|
78
76
|
"overrides": {
|
|
79
|
-
"
|
|
80
|
-
"got": "^14.6.6",
|
|
81
|
-
"http-cache-semantics": "^4.2.0",
|
|
82
|
-
"http-proxy-middleware": "^3.0.5",
|
|
83
|
-
"postcss": "^8.5.6",
|
|
84
|
-
"semver-regex": "^4.0.5",
|
|
85
|
-
"tmp": "^0.2.5"
|
|
77
|
+
"http-proxy-middleware": "^3.0.7"
|
|
86
78
|
}
|
|
87
79
|
}
|
package/tsconfig.json
CHANGED
package/tsconfig.lint.json
CHANGED