diff --git a/build/module/durationReporter.d.ts b/build/module/durationReporter.d.ts index 89d5b56..d628445 100644 --- a/build/module/durationReporter.d.ts +++ b/build/module/durationReporter.d.ts @@ -1,7 +1,7 @@ import { IRequestOption, IUploadFileOption } from "../interface"; declare function start(obj: IRequestOption | IUploadFileOption): void; declare function end(obj: IRequestOption | IUploadFileOption): void; -declare function report(name: string, start: number, end: number): void; +declare function report(name: string, startTime: number, endTime: number): void; declare const _default: { start: typeof start; end: typeof end; diff --git a/build/module/errorHandler.d.ts b/build/module/errorHandler.d.ts index 85e25a3..5ba6b68 100644 --- a/build/module/errorHandler.d.ts +++ b/build/module/errorHandler.d.ts @@ -1,10 +1,15 @@ import { IRequestOption, IUploadFileOption } from "../interface"; declare function systemError(obj: IRequestOption | IUploadFileOption, res: wx.GeneralCallbackResult): void; declare function logicError(obj: IRequestOption | IUploadFileOption, res: wx.RequestSuccessCallbackResult | wx.UploadFileSuccessCallbackResult): void; +declare function getErrorMsg(res: wx.RequestSuccessCallbackResult | wx.UploadFileSuccessCallbackResult): { + title: string; + content: string; +}; declare function doError(title: string, content: string): void; declare const _default: { systemError: typeof systemError; logicError: typeof logicError; doError: typeof doError; + getErrorMsg: typeof getErrorMsg; }; export default _default; diff --git a/build/module/requestHandler.d.ts b/build/module/requestHandler.d.ts index abba34f..7d7cba0 100644 --- a/build/module/requestHandler.d.ts +++ b/build/module/requestHandler.d.ts @@ -1,7 +1,9 @@ import { IRequestOption, IUploadFileOption } from "../interface"; +declare function format(originUrl: string): string; declare function request(obj: IRequestOption): void; declare function uploadFile(obj: IUploadFileOption): void; declare const _default: { + format: typeof format; request: typeof request; uploadFile: typeof uploadFile; }; diff --git a/build/weRequest.js b/build/weRequest.js index e76855c..45ec094 100644 --- a/build/weRequest.js +++ b/build/weRequest.js @@ -143,25 +143,14 @@ exports.default = (function () { "use strict"; -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; Object.defineProperty(exports, "__esModule", { value: true }); var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts"); var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts"); exports.default = (function (params) { - var config = __assign({}, params, config_1.default); + Object.assign(config_1.default, params); if (params.sessionName) { try { - status_1.default.session = wx.getStorageSync(config.sessionName) || ''; + status_1.default.session = wx.getStorageSync(config_1.default.sessionName) || ''; } catch (e) { console.error('wx.getStorageSync:fail, can not get session.'); @@ -169,14 +158,14 @@ exports.default = (function (params) { } if (params.sessionExpireKey) { try { - status_1.default.sessionExpire = wx.getStorageSync(config.sessionExpireKey) || Infinity; + status_1.default.sessionExpire = wx.getStorageSync(config_1.default.sessionExpireKey) || Infinity; } catch (e) { console.error('wx.getStorageSync:fail, can not get sessionExpire.'); } } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsMENBQTJDO0FBQzNDLDBDQUFvQztBQUdwQyxtQkFBZSxVQUFDLE1BQW1CO0lBQy9CLElBQU0sTUFBTSxnQkFBb0IsTUFBTSxFQUFLLGdCQUFhLENBQUMsQ0FBQztJQUUxRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7UUFDcEIsSUFBSTtZQUNBLGdCQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNqRTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFBO1NBQ2hFO0tBQ0o7SUFFRCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixJQUFJO1lBQ0EsZ0JBQU0sQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxRQUFRLENBQUM7U0FDakY7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQTtTQUN0RTtLQUNKO0FBQ0wsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmF1bHRDb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXG5pbXBvcnQgeyBJSW5pdE9wdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZSdcblxuZXhwb3J0IGRlZmF1bHQgKHBhcmFtczogSUluaXRPcHRpb24pID0+IHtcbiAgICBjb25zdCBjb25maWc6IElJbml0T3B0aW9uID0gey4uLnBhcmFtcywgLi4uZGVmYXVsdENvbmZpZ307XG4gICAgLy8g5aaC5p6c6YWN572u5pu05pS55LqGc2Vzc2lvbueahOWtmOWCqOWQjeWtl++8jOWImemHjeaWsOiOt+WPluS4gOasoXNlc3Npb25cbiAgICBpZiAocGFyYW1zLnNlc3Npb25OYW1lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGF0dXMuc2Vzc2lvbiA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZy5zZXNzaW9uTmFtZSEpIHx8ICcnO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uLicpXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8g5aaC5p6c6YWN572u5pu05pS55LqGc2Vzc2lvbui/h+acn+aXtumXtOeahOWtmOWCqOWQjeWtl++8jOWImemHjeaWsOiOt+WPluS4gOasoXNlc3Npb27nmoTov4fmnJ/ml7bpl7RcbiAgICBpZiAocGFyYW1zLnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnLnNlc3Npb25FeHBpcmVLZXkpIHx8IEluZmluaXR5O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uRXhwaXJlLicpXG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFvQztBQUNwQywwQ0FBb0M7QUFHcEMsbUJBQWUsVUFBQyxNQUFtQjtJQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFOUIsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQ3BCLElBQUk7WUFDQSxnQkFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLGdCQUFNLENBQUMsV0FBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2pFO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUE7U0FDaEU7S0FDSjtJQUVELElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLElBQUk7WUFDQSxnQkFBTSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLGdCQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxRQUFRLENBQUM7U0FDakY7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQTtTQUN0RTtLQUNKO0FBQ0wsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcbmltcG9ydCB7IElJbml0T3B0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlJ1xuXG5leHBvcnQgZGVmYXVsdCAocGFyYW1zOiBJSW5pdE9wdGlvbikgPT4ge1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCBwYXJhbXMpO1xuICAgIC8vIOWmguaenOmFjee9ruabtOaUueS6hnNlc3Npb27nmoTlrZjlgqjlkI3lrZfvvIzliJnph43mlrDojrflj5bkuIDmrKFzZXNzaW9uXG4gICAgaWYgKHBhcmFtcy5zZXNzaW9uTmFtZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhdHVzLnNlc3Npb24gPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWcuc2Vzc2lvbk5hbWUhKSB8fCAnJztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignd3guZ2V0U3RvcmFnZVN5bmM6ZmFpbCwgY2FuIG5vdCBnZXQgc2Vzc2lvbi4nKVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIOWmguaenOmFjee9ruabtOaUueS6hnNlc3Npb27ov4fmnJ/ml7bpl7TnmoTlrZjlgqjlkI3lrZfvvIzliJnph43mlrDojrflj5bkuIDmrKFzZXNzaW9u55qE6L+H5pyf5pe26Ze0XG4gICAgaWYgKHBhcmFtcy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGF0dXMuc2Vzc2lvbkV4cGlyZSA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB8fCBJbmZpbml0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignd3guZ2V0U3RvcmFnZVN5bmM6ZmFpbCwgY2FuIG5vdCBnZXQgc2Vzc2lvbkV4cGlyZS4nKVxuICAgICAgICB9XG4gICAgfVxufVxuIl19 /***/ }), @@ -303,12 +292,14 @@ function get(obj) { obj.success(res.data, { isCache: true }); } } - else if (obj.cache == true) { + else if (obj.cache === true) { if (typeof obj.success === "function") { obj.success(res.data, { isCache: true }); } } - typeof obj.complete === "function" && obj.complete(); + if (typeof obj.complete === "function") { + obj.complete(); + } } }); } @@ -324,7 +315,7 @@ exports.default = { get: get, set: set }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9jYWNoZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxTQUFTLEdBQUcsQ0FBQyxHQUFtQjtJQUM1QixFQUFFLENBQUMsVUFBVSxDQUFDO1FBQ1YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ2xCLE9BQU8sRUFBRSxVQUFVLEdBQUc7WUFDbEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4RCxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO2lCQUN6QzthQUNKO2lCQUFNLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQzFCLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtvQkFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7aUJBQ3pDO2FBQ0o7WUFDRCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6RCxDQUFDO0tBQ0osQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLEdBQW1CLEVBQUcsUUFBeUI7SUFDeEQsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxVQUFVLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO1FBQ2hGLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDVixHQUFHLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDbEIsSUFBSSxFQUFFLFFBQVE7U0FDakIsQ0FBQyxDQUFBO0tBQ0w7QUFDTCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxHQUFHLEtBQUE7SUFDSCxHQUFHLEtBQUE7Q0FDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcblxuZnVuY3Rpb24gZ2V0KG9iajogSVJlcXVlc3RPcHRpb24pIHtcbiAgICB3eC5nZXRTdG9yYWdlKHtcbiAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVzLmRhdGEsIHtpc0NhY2hlOiB0cnVlfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9iai5jYWNoZSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlcy5kYXRhLCB7aXNDYWNoZTogdHJ1ZX0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfSlcbn1cblxuZnVuY3Rpb24gc2V0KG9iajogSVJlcXVlc3RPcHRpb24gLCByZWFsRGF0YTogc3RyaW5nIHwgb2JqZWN0KSB7XG4gICAgaWYgKG9iai5jYWNoZSA9PT0gdHJ1ZSB8fCAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZWFsRGF0YSkpKSB7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICAgICAgZGF0YTogcmVhbERhdGFcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBnZXQsXG4gICAgc2V0XG59O1xuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9jYWNoZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxTQUFTLEdBQUcsQ0FBQyxHQUFtQjtJQUM1QixFQUFFLENBQUMsVUFBVSxDQUFDO1FBQ1YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ2xCLE9BQU8sWUFBRSxHQUFHO1lBQ1IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4RCxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO2lCQUN6QzthQUNKO2lCQUFNLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtvQkFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7aUJBQ3pDO2FBQ0o7WUFDRCxJQUFHLE9BQU8sR0FBRyxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUU7Z0JBQ25DLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNsQjtRQUNMLENBQUM7S0FDSixDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsR0FBbUIsRUFBRyxRQUF5QjtJQUN4RCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7UUFDaEYsRUFBRSxDQUFDLFVBQVUsQ0FBQztZQUNWLEdBQUcsRUFBRSxHQUFHLENBQUMsU0FBUztZQUNsQixJQUFJLEVBQUUsUUFBUTtTQUNqQixDQUFDLENBQUE7S0FDTDtBQUNMLENBQUM7QUFFRCxrQkFBZTtJQUNYLEdBQUcsS0FBQTtJQUNILEdBQUcsS0FBQTtDQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIlxuXG5mdW5jdGlvbiBnZXQob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuICAgIHd4LmdldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgIHN1Y2Nlc3MgKHJlcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlcy5kYXRhLCB7aXNDYWNoZTogdHJ1ZX0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChvYmouY2FjaGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVzLmRhdGEsIHtpc0NhY2hlOiB0cnVlfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHNldChvYmo6IElSZXF1ZXN0T3B0aW9uICwgcmVhbERhdGE6IHN0cmluZyB8IG9iamVjdCkge1xuICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHwgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVhbERhdGEpKSkge1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgICAgIGRhdGE6IHJlYWxEYXRhXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgZ2V0LFxuICAgIHNldFxufTtcbiJdfQ== /***/ }), @@ -339,16 +330,19 @@ exports.default = { Object.defineProperty(exports, "__esModule", { value: true }); var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts"); +var request_1 = __webpack_require__(/*! ../api/request */ "./src/api/request.ts"); function start(obj) { obj._reportStartTime = new Date().getTime(); } function end(obj) { obj._reportEndTime = new Date().getTime(); - report(obj.report, obj._reportStartTime, obj._reportEndTime); + if (obj.report) { + report(obj.report, obj._reportStartTime, obj._reportEndTime); + } } -function report(name, start, end) { +function report(name, startTime, endTime) { if (typeof config_1.default.reportCGI === "function") { - config_1.default.reportCGI(name, start, end); + config_1.default.reportCGI(name, startTime, endTime, request_1.default); } } exports.default = { @@ -356,7 +350,7 @@ exports.default = { end: end, report: report }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb25SZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2R1bGUvZHVyYXRpb25SZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFvQztBQUdwQyxTQUFTLEtBQUssQ0FBQyxHQUF1QztJQUNsRCxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNoRCxDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsR0FBdUM7SUFDaEQsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFDLE1BQU0sQ0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsR0FBVztJQUNwRCxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1FBQ3hDLGdCQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdEM7QUFDTCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxLQUFLLE9BQUE7SUFDTCxHQUFHLEtBQUE7SUFDSCxNQUFNLFFBQUE7Q0FDVCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbmZ1bmN0aW9uIHN0YXJ0KG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIG9iai5fcmVwb3J0U3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59XG5cbmZ1bmN0aW9uIGVuZChvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICBvYmouX3JlcG9ydEVuZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICByZXBvcnQoPHN0cmluZz5vYmoucmVwb3J0LCBvYmouX3JlcG9ydFN0YXJ0VGltZSwgb2JqLl9yZXBvcnRFbmRUaW1lKTtcbn1cblxuZnVuY3Rpb24gcmVwb3J0KG5hbWU6IHN0cmluZywgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZXBvcnRDR0kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWcucmVwb3J0Q0dJKG5hbWUsIHN0YXJ0LCBlbmQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICByZXBvcnRcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb25SZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2R1bGUvZHVyYXRpb25SZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFvQztBQUNwQywwQ0FBb0M7QUFHcEMsU0FBUyxLQUFLLENBQUMsR0FBdUM7SUFDbEQsR0FBRyxDQUFDLGdCQUFnQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLEdBQXVDO0lBQ2hELEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQyxJQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQWdCLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUMxRTtBQUNMLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxJQUFZLEVBQUUsU0FBaUIsRUFBRSxPQUFlO0lBQzVELElBQUksT0FBTyxnQkFBTSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7UUFDeEMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsaUJBQU8sQ0FBQyxDQUFDO0tBQ3ZEO0FBQ0wsQ0FBQztBQUVELGtCQUFlO0lBQ1gsS0FBSyxPQUFBO0lBQ0wsR0FBRyxLQUFBO0lBQ0gsTUFBTSxRQUFBO0NBQ1QsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vYXBpL3JlcXVlc3QnXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbmZ1bmN0aW9uIHN0YXJ0KG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIG9iai5fcmVwb3J0U3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59XG5cbmZ1bmN0aW9uIGVuZChvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICBvYmouX3JlcG9ydEVuZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBpZihvYmoucmVwb3J0KSB7XG4gICAgICAgIHJlcG9ydChvYmoucmVwb3J0IGFzIHN0cmluZywgb2JqLl9yZXBvcnRTdGFydFRpbWUsIG9iai5fcmVwb3J0RW5kVGltZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZXBvcnQobmFtZTogc3RyaW5nLCBzdGFydFRpbWU6IG51bWJlciwgZW5kVGltZTogbnVtYmVyKSB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVwb3J0Q0dJID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnLnJlcG9ydENHSShuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJlcXVlc3QpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICByZXBvcnRcbn1cbiJdfQ== /***/ }), @@ -425,9 +419,10 @@ function doError(title, content) { exports.default = { systemError: systemError, logicError: logicError, - doError: doError + doError: doError, + getErrorMsg: getErrorMsg }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFHcEMsU0FBUyxXQUFXLENBQUMsR0FBdUMsRUFBRSxHQUE2QjtJQUN2RixPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNoQjtBQUNMLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxHQUF1QyxFQUFFLEdBQXlFO0lBQ2xJLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUNoQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2pCO1NBQU07UUFDQyxJQUFBLHFCQUFtQyxFQUFsQyxnQkFBSyxFQUFFLG9CQUEyQixDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDM0I7SUFHRCxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFO1FBQzVDLGdCQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNsQztJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQXlFO0lBQzFGLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksT0FBTyxnQkFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDekMsSUFBSTtZQUNBLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDdEM7UUFBQyxPQUFPLENBQUMsRUFBRTtTQUNYO0tBQ0o7U0FBTSxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO1FBQzlDLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQztLQUM3QjtJQUVELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO1FBQzNDLElBQUk7WUFDQSxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzFDO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtLQUNKO1NBQU0sSUFBSSxPQUFPLGdCQUFNLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUNoRCxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUM7S0FDakM7SUFFRCxPQUFPLEVBQUMsS0FBSyxPQUFBLEVBQUUsT0FBTyxTQUFBLEVBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYSxFQUFFLE9BQWU7SUFDM0MsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNULEtBQUssRUFBRSxLQUFLO1FBQ1osT0FBTyxFQUFFLE9BQU8sSUFBSSxlQUFlO1FBQ25DLFVBQVUsRUFBRSxLQUFLO0tBQ3BCLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxrQkFBZTtJQUNYLFdBQVcsYUFBQTtJQUNYLFVBQVUsWUFBQTtJQUNWLE9BQU8sU0FBQTtDQUNWLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuZnVuY3Rpb24gc3lzdGVtRXJyb3Iob2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLCByZXM6IHd4LkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkge1xuICAgIGRvRXJyb3IoXCJcIiwgcmVzLmVyck1zZyk7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKFwiXCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9naWNFcnJvcihvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCB8IHd4LlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQge3RpdGxlLCBjb250ZW50fSA9IGdldEVycm9yTXNnKHJlcyk7XG4gICAgICAgIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xuICAgIH1cblxuICAgIC8vIOWmguaenOaciemFjee9rue7n+S4gOmUmeivr+Wbnuiwg+WHveaVsO+8jOWImeaJp+ihjOWug1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWcuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihyZXMpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck1zZyhyZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgbGV0IHRpdGxlID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGUocmVzLmRhdGEpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGU7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudChyZXMuZGF0YSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudDtcbiAgICB9XG5cbiAgICByZXR1cm4ge3RpdGxlLCBjb250ZW50fVxufVxuXG5mdW5jdGlvbiBkb0Vycm9yKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHd4LnNob3dNb2RhbCh7XG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxuICAgICAgICBzaG93Q2FuY2VsOiBmYWxzZVxuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBzeXN0ZW1FcnJvcixcbiAgICBsb2dpY0Vycm9yLFxuICAgIGRvRXJyb3Jcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFHcEMsU0FBUyxXQUFXLENBQUMsR0FBdUMsRUFBRSxHQUE2QjtJQUN2RixPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNoQjtBQUNMLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxHQUF1QyxFQUFFLEdBQXlFO0lBQ2xJLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUNoQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2pCO1NBQU07UUFDRyxJQUFBLHFCQUFtQyxFQUFsQyxnQkFBSyxFQUFFLG9CQUEyQixDQUFDO1FBQzFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDM0I7SUFHRCxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFO1FBQzVDLGdCQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNsQztJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQXlFO0lBQzFGLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksT0FBTyxnQkFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDekMsSUFBSTtZQUNBLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDdEM7UUFBQyxPQUFPLENBQUMsRUFBRTtTQUNYO0tBQ0o7U0FBTSxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO1FBQzlDLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQztLQUM3QjtJQUVELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO1FBQzNDLElBQUk7WUFDQSxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzFDO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtLQUNKO1NBQU0sSUFBSSxPQUFPLGdCQUFNLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUNoRCxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUM7S0FDakM7SUFFRCxPQUFPLEVBQUMsS0FBSyxPQUFBLEVBQUUsT0FBTyxTQUFBLEVBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYSxFQUFFLE9BQWU7SUFDM0MsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNULEtBQUssT0FBQTtRQUNMLE9BQU8sRUFBRSxPQUFPLElBQUksZUFBZTtRQUNuQyxVQUFVLEVBQUUsS0FBSztLQUNwQixDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsa0JBQWU7SUFDWCxXQUFXLGFBQUE7SUFDWCxVQUFVLFlBQUE7SUFDVixPQUFPLFNBQUE7SUFDUCxXQUFXLGFBQUE7Q0FDZCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbmZ1bmN0aW9uIHN5c3RlbUVycm9yKG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbiwgcmVzOiB3eC5HZW5lcmFsQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICBkb0Vycm9yKFwiXCIsIHJlcy5lcnJNc2cpO1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChcIlwiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvZ2ljRXJyb3Iob2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLCByZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge3RpdGxlLCBjb250ZW50fSA9IGdldEVycm9yTXNnKHJlcyk7XG4gICAgICAgIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xuICAgIH1cblxuICAgIC8vIOWmguaenOaciemFjee9rue7n+S4gOmUmeivr+Wbnuiwg+WHveaVsO+8jOWImeaJp+ihjOWug1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWcuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihyZXMpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck1zZyhyZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgbGV0IHRpdGxlID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGUocmVzLmRhdGEpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGU7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudChyZXMuZGF0YSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudDtcbiAgICB9XG5cbiAgICByZXR1cm4ge3RpdGxlLCBjb250ZW50fVxufVxuXG5mdW5jdGlvbiBkb0Vycm9yKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHd4LnNob3dNb2RhbCh7XG4gICAgICAgIHRpdGxlLFxuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8IFwi572R57uc5oiW5pyN5Yqh5byC5bi477yM6K+356iN5ZCO6YeN6K+VXCIsXG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHN5c3RlbUVycm9yLFxuICAgIGxvZ2ljRXJyb3IsXG4gICAgZG9FcnJvcixcbiAgICBnZXRFcnJvck1zZ1xufVxuIl19 /***/ }), @@ -459,7 +454,7 @@ function get(obj, method) { exports.default = { get: get }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL21vY2tNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLHFEQUErQztBQUcvQyxTQUFTLEdBQUcsQ0FBQyxHQUF1QyxFQUFFLE1BQWdDO0lBRWxGLElBQUcsQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFFN0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsSUFBSSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV0RSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUc7UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFVBQVUsRUFBRSxHQUFHO0tBQ2xCLENBQUM7SUFFRix5QkFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDckMsQ0FBQztBQUVELGtCQUFlO0lBQ1gsR0FBRyxLQUFBO0NBQ04sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IHJlc3BvbnNlSGFuZGxlciBmcm9tICcuL3Jlc3BvbnNlSGFuZGxlcidcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuZnVuY3Rpb24gZ2V0KG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbiwgbWV0aG9kOiBcInJlcXVlc3RcIiB8IFwidXBsb2FkRmlsZVwiKTogYW55IHtcblxuICAgIGlmKCFjb25maWcubW9ja0pzb25bb2JqLnVybF0gJiYgIWNvbmZpZy5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSkge1xuICAgICAgICAvLyBtb2NrIOayoeacieWvueW6lOaOpeWPo+eahOaVsOaNrlxuICAgICAgICBjb25zb2xlLmVycm9yKCdtb2NrIOayoeacieWvueW6lOaOpeWPo+eahOaVsOaNricpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGRhdGEgPSBjb25maWcubW9ja0pzb25bb2JqLnVybF0gfHwgY29uZmlnLm1vY2tKc29uW29iai5vcmlnaW5VcmxdO1xuICAgIC8vIGRlZXAgY29weVxuICAgIGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICBsZXQgcmVzID0ge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBzdGF0dXNDb2RlOiAyMDBcbiAgICB9O1xuXG4gICAgcmVzcG9uc2VIYW5kbGVyKHJlcywgb2JqLCBtZXRob2QpXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBnZXRcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL21vY2tNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLHFEQUErQztBQUcvQyxTQUFTLEdBQUcsQ0FBQyxHQUF1QyxFQUFFLE1BQWdDO0lBRWxGLElBQUcsQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFFN0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsSUFBSSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV0RSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBTSxHQUFHLEdBQUc7UUFDUixJQUFJLE1BQUE7UUFDSixVQUFVLEVBQUUsR0FBRztLQUNsQixDQUFDO0lBRUYseUJBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ3JDLENBQUM7QUFFRCxrQkFBZTtJQUNYLEdBQUcsS0FBQTtDQUNOLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCByZXNwb25zZUhhbmRsZXIgZnJvbSAnLi9yZXNwb25zZUhhbmRsZXInXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbmZ1bmN0aW9uIGdldChvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIG1ldGhvZDogXCJyZXF1ZXN0XCIgfCBcInVwbG9hZEZpbGVcIik6IGFueSB7XG5cbiAgICBpZighY29uZmlnLm1vY2tKc29uW29iai51cmxdICYmICFjb25maWcubW9ja0pzb25bb2JqLm9yaWdpblVybF0pIHtcbiAgICAgICAgLy8gbW9jayDmsqHmnInlr7nlupTmjqXlj6PnmoTmlbDmja5cbiAgICAgICAgY29uc29sZS5lcnJvcignbW9jayDmsqHmnInlr7nlupTmjqXlj6PnmoTmlbDmja4nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gY29uZmlnLm1vY2tKc29uW29iai51cmxdIHx8IGNvbmZpZy5tb2NrSnNvbltvYmoub3JpZ2luVXJsXTtcbiAgICAvLyBkZWVwIGNvcHlcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgICBkYXRhLFxuICAgICAgICBzdGF0dXNDb2RlOiAyMDBcbiAgICB9O1xuXG4gICAgcmVzcG9uc2VIYW5kbGVyKHJlcywgb2JqLCBtZXRob2QpXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBnZXRcbn1cbiJdfQ== /***/ }), @@ -472,6 +467,17 @@ exports.default = { "use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; Object.defineProperty(exports, "__esModule", { value: true }); var loading_1 = __webpack_require__(/*! ../util/loading */ "./src/util/loading.ts"); var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts"); @@ -483,16 +489,16 @@ var errorHandler_1 = __webpack_require__(/*! ./errorHandler */ "./src/module/err var responseHandler_1 = __webpack_require__(/*! ./responseHandler */ "./src/module/responseHandler.ts"); var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts"); var url_1 = __webpack_require__(/*! ../util/url */ "./src/util/url.ts"); -function format(url) { - if (url.startsWith('http')) { - return url; +function format(originUrl) { + if (originUrl.startsWith('http')) { + return originUrl; } else { var urlPerfix = config_1.default.urlPerfix; if (typeof config_1.default.urlPerfix === "function") { urlPerfix = config_1.default.urlPerfix(); } - return urlPerfix + url; + return urlPerfix + originUrl; } } function preDo(obj) { @@ -518,7 +524,9 @@ function preDo(obj) { } return function () { loading_1.default.hide(); - typeof fn === "function" && fn.apply.apply(fn, [_this].concat(args)); + if (typeof fn === "function") { + fn.apply.apply(fn, [_this].concat(args)); + } }; })(obj.complete); } @@ -534,10 +542,10 @@ function initializeRequestObj(obj) { obj.data = {}; } if (obj.originUrl !== config_1.default.codeToSession.url && status_1.default.session) { - obj.data = Object.assign({}, obj.data, (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a)); + obj.data = __assign({}, obj.data, (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a)); } var gd = getGlobalData(); - obj.data = Object.assign({}, gd, obj.data); + obj.data = __assign({}, gd, obj.data); obj.method = obj.method || 'GET'; obj.dataType = obj.dataType || 'json'; if (obj.method !== "GET") { @@ -555,10 +563,10 @@ function initializeUploadFileObj(obj) { obj.formData = {}; } if (obj.originUrl !== config_1.default.codeToSession.url && status_1.default.session) { - obj.formData = Object.assign({}, obj.formData, (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a)); + obj.formData = __assign({}, obj.formData, (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a)); } var gd = getGlobalData(); - obj.formData = Object.assign({}, gd, obj.formData); + obj.formData = __assign({}, gd, obj.formData); if (status_1.default.session) { obj.url = url_1.default.setParams(obj.url, (_b = {}, _b[config_1.default.sessionName] = status_1.default.session, _b)); } @@ -594,7 +602,9 @@ function doRequest(obj) { }, complete: function () { obj.count--; - typeof obj.complete === "function" && obj.count === 0 && obj.complete(); + if (typeof obj.complete === "function" && obj.count === 0) { + obj.complete(); + } } }); } @@ -615,7 +625,9 @@ function doUploadFile(obj) { }, complete: function () { obj.count--; - typeof obj.complete === "function" && obj.count === 0 && obj.complete(); + if (typeof obj.complete === "function" && obj.count === 0) { + obj.complete(); + } } }); } @@ -643,10 +655,11 @@ function uploadFile(obj) { }, obj); } exports.default = { + format: format, request: request, uploadFile: uploadFile }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXFDO0FBQ3JDLDBDQUFvQztBQUNwQywwQ0FBb0M7QUFDcEMsNkNBQXVDO0FBQ3ZDLCtDQUF5QztBQUN6QyxtREFBNkM7QUFDN0MsK0NBQXlDO0FBQ3pDLHFEQUErQztBQUMvQyx1REFBaUQ7QUFDakQsbUNBQTZCO0FBSTdCLFNBQVMsTUFBTSxDQUFDLEdBQVc7SUFDdkIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sR0FBRyxDQUFBO0tBQ2I7U0FBTTtRQUNILElBQUksU0FBUyxHQUFHLGdCQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksT0FBTyxnQkFBTSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7WUFDeEMsU0FBUyxHQUFHLGdCQUFNLENBQUMsU0FBUyxFQUFFLENBQUE7U0FDakM7UUFDRCxPQUFPLFNBQVMsR0FBRyxHQUFHLENBQUM7S0FDMUI7QUFDTCxDQUFDO0FBR0QsU0FBUyxLQUFLLENBQStDLEdBQU07SUFBbkUsaUJBaUNDO0lBaENHLElBQUcsT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUNyQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDcEI7SUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDekMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNILEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN0QjtJQUVELElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUNsQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztLQUNqQjtJQUVELElBQUksR0FBRyxDQUFD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Li4vdXRpbC9sb2FkaW5nJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcbmltcG9ydCBtb2NrTWFuYWdlciBmcm9tICcuL21vY2tNYW5hZ2VyJ1xuaW1wb3J0IGNhY2hlTWFuYWdlciBmcm9tICcuL2NhY2hlTWFuYWdlcidcbmltcG9ydCBzZXNzaW9uTWFuYWdlciBmcm9tICcuL3Nlc3Npb25NYW5hZ2VyJ1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9ySGFuZGxlcidcbmltcG9ydCByZXNwb25zZUhhbmRsZXIgZnJvbSAnLi9yZXNwb25zZUhhbmRsZXInXG5pbXBvcnQgZHVyYXRpb25SZXBvcnRlciBmcm9tIFwiLi9kdXJhdGlvblJlcG9ydGVyXCJcbmltcG9ydCB1cmwgZnJvbSAnLi4vdXRpbC91cmwnXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcblxuLy8g5qC85byP5YyWdXJsXG5mdW5jdGlvbiBmb3JtYXQodXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHVybFBlcmZpeCA9IGNvbmZpZy51cmxQZXJmaXg7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWcudXJsUGVyZml4KClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsUGVyZml4ICsgdXJsO1xuICAgIH1cbn1cblxuLy8g5omA5pyJ6K+35rGC5Y+R5Ye65YmN6ZyA6KaB5YGa55qE5LqL5oOFXG5mdW5jdGlvbiBwcmVEbzxUIGV4dGVuZHMgSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbj4ob2JqOiBUKTogVCB7XG4gICAgaWYodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmJlZm9yZVNlbmQoKTtcbiAgICB9XG4gICAgLy8g55m75b2V5oCB5aSx5pWI77yM6YeN5aSN55m75b2V6K6h5pWwXG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkxpbWl0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luTGltaXQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9iai5yZUxvZ2luTGltaXQrKztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iai5jb3VudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBvYmouY291bnQgPSAwO1xuICAgIH1cblxuICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgbG9hZGluZy5zaG93KG9iai5zaG93TG9hZGluZyk7XG4gICAgICAgIG9iai5jb21wbGV0ZSA9ICgoZm46IGFueSwgLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8g5L2/55SoUHJvbWlzZeaWueW8j+WQju+8jOWPr+iDveS4jemcgOimgei/meS6m+S6hlxuICAgICAgICAgICAgICAgIGxvYWRpbmcuaGlkZSgpO1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIiAmJiBmbi5hcHBseSh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkob2JqLmNvbXBsZXRlKVxuICAgIH1cblxuICAgIGlmKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8vIOagvOW8j+WMluWkhOeQhuivt+axgueahG9iauWGheWuuVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuXG4gICAgaWYgKCFvYmouZGF0YSkge1xuICAgICAgICBvYmouZGF0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBvYmouZGF0YSwge1tjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbn0pXG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgbGV0IGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5kYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZ2QsIG9iai5kYXRhKTtcblxuICAgIG9iai5tZXRob2QgPSBvYmoubWV0aG9kIHx8ICdHRVQnO1xuICAgIG9iai5kYXRhVHlwZSA9IG9iai5kYXRhVHlwZSB8fCAnanNvbic7XG5cbiAgICAvLyDlpoLmnpzor7fmsYLkuI3mmK9HRVTvvIzliJnlnKhVUkzkuK3oh6rliqjliqDkuIrnmbvlvZXmgIHlkozlhajlsYDlj4LmlbBcbiAgICBpZiAob2JqLm1ldGhvZCAhPT0gXCJHRVRcIikge1xuICAgICAgICBpZiAoc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIHtbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259KTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuLy8g5qC85byP5YyW5aSE55CG5LiK5Lyg5paH5Lu255qEb2Jq5YaF5a65XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmo6IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKG9iai5vcmlnaW5VcmwgIT09IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICBvYmouZm9ybURhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBvYmouZm9ybURhdGEsIHtbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259KVxuICAgIH1cblxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxuICAgIGxldCBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZm9ybURhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBnZCwgb2JqLmZvcm1EYXRhKTtcblxuICAgIC8vIOWwhueZu+mZhuaAgeS5n+W4puWcqHVybOS4ilxuICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCB7W2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9ufSk7XG4gICAgfVxuICAgIC8vIOWFqOWxgOWPguaVsOWQjOaXtuaUvuWcqHVybOS4ilxuICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcblxuICAgIGR1cmF0aW9uUmVwb3J0ZXIuc3RhcnQob2JqKTtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERhdGEoKSB7XG4gICAgbGV0IGdkOiBhbnkgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5nbG9iYWxEYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWcuZ2xvYmFsRGF0YSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5nbG9iYWxEYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnLmdsb2JhbERhdGE7XG4gICAgfVxuICAgIHJldHVybiBnZDtcbn1cblxuZnVuY3Rpb24gZG9SZXF1ZXN0KG9iajogSVJlcXVlc3RPcHRpb24pIHtcbiAgICBvYmogPSBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopO1xuICAgIG9iai5jb3VudCsrO1xuICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICB1cmw6IG9iai51cmwsXG4gICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICBtZXRob2Q6IG9iai5tZXRob2QsXG4gICAgICAgIGhlYWRlcjogb2JqLmhlYWRlciB8fCB7fSxcbiAgICAgICAgZGF0YVR5cGU6IG9iai5kYXRhVHlwZSB8fCAnanNvbicsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlSGFuZGxlcihyZXMsIG9iaiwgJ3JlcXVlc3QnKVxuICAgICAgICB9LFxuICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzOiB3eC5HZW5lcmFsQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlci5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvYmouY291bnQtLTtcbiAgICAgICAgICAgIHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY291bnQgPT09IDAgJiYgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIG9iaiA9IGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaik7XG4gICAgb2JqLmNvdW50Kys7XG4gICAgd3gudXBsb2FkRmlsZSh7XG4gICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcbiAgICAgICAgbmFtZTogb2JqLm5hbWUgfHwgJycsXG4gICAgICAgIGZvcm1EYXRhOiBvYmouZm9ybURhdGEsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXM6IHd4LlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlSGFuZGxlcihyZXMsIG9iaiwgJ3VwbG9hZEZpbGUnKVxuICAgICAgICB9LFxuICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzOiB3eC5HZW5lcmFsQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlci5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvYmouY291bnQtLTtcbiAgICAgICAgICAgIHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY291bnQgPT09IDAgJiYgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0KG9iajogSVJlcXVlc3RPcHRpb24pOiB2b2lkIHtcbiAgICBvYmogPSBwcmVEbyhvYmopO1xuICAgIGlmKGNvbmZpZy5tb2NrSnNvbikge1xuICAgICAgICBtb2NrTWFuYWdlci5nZXQob2JqLCAncmVxdWVzdCcpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmKG9iai5jYWNoZSkge1xuICAgICAgICBjYWNoZU1hbmFnZXIuZ2V0KG9iaik7XG4gICAgfVxuXG4gICAgc2Vzc2lvbk1hbmFnZXIoKCk9PntcbiAgICAgICAgZG9SZXF1ZXN0KG9iailcbiAgICB9LCBvYmopXG59XG5cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbik6IHZvaWQge1xuICAgIG9iaiA9IHByZURvKG9iaikgYXMgSVVwbG9hZEZpbGVPcHRpb247XG4gICAgaWYoY29uZmlnLm1vY2tKc29uKSB7XG4gICAgICAgIG1vY2tNYW5hZ2VyLmdldChvYmosICd1cGxvYWRGaWxlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXNzaW9uTWFuYWdlcigoKT0+e1xuICAgICAgICBkb1VwbG9hZEZpbGUob2JqKVxuICAgIH0sIG9iailcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJlcXVlc3QsXG4gICAgdXBsb2FkRmlsZVxufVxuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QywrQ0FBeUM7QUFDekMscURBQStDO0FBQy9DLHVEQUFpRDtBQUNqRCxtQ0FBNkI7QUFJN0IsU0FBUyxNQUFNLENBQUMsU0FBaUI7SUFDN0IsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlCLE9BQU8sU0FBUyxDQUFBO0tBQ25CO1NBQU07UUFDSCxJQUFJLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3hDLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO0tBQ2hDO0FBQ0wsQ0FBQztBQUdELFNBQVMsS0FBSyxDQUErQyxHQUFNO0lBQW5FLGlCQW1DQztJQWxDRyxJQUFHLE9BQU8sR0FBRyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDckMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0tBQ3BCO0lBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUFFO1FBQ3pDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCO1NBQU07UUFDSCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDdEI7SUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7UUFDbEMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7S0FDakI7SUFFRCxJ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QUFDLFFBQVEsS0FBSyxVQUFVLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUM7Z0JBQ3JELEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNsQjtRQUNMLENBQUM7S0FDSixDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsR0FBbUI7SUFDaEMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFHLGdCQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2hCLHFCQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoQyxPQUFPO0tBQ1Y7SUFDRCxJQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUU7UUFDVixzQkFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QjtJQUVELHdCQUFjLENBQUM7UUFDWCxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQXNCO0lBQ3RDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFzQixDQUFDO0lBQ3RDLElBQUcsZ0JBQU0sQ0FBQyxRQUFRLEVBQUU7UUFDaEIscUJBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25DLE9BQU87S0FDVjtJQUVELHdCQUFjLENBQUM7UUFDWCxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDckIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELGtCQUFlO0lBQ1gsTUFBTSxRQUFBO0lBQ04sT0FBTyxTQUFBO0lBQ1AsVUFBVSxZQUFBO0NBQ2IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2FkaW5nIGZyb20gJy4uL3V0aWwvbG9hZGluZydcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXG5pbXBvcnQgbW9ja01hbmFnZXIgZnJvbSAnLi9tb2NrTWFuYWdlcidcbmltcG9ydCBjYWNoZU1hbmFnZXIgZnJvbSAnLi9jYWNoZU1hbmFnZXInXG5pbXBvcnQgc2Vzc2lvbk1hbmFnZXIgZnJvbSAnLi9zZXNzaW9uTWFuYWdlcidcbmltcG9ydCBlcnJvckhhbmRsZXIgZnJvbSAnLi9lcnJvckhhbmRsZXInXG5pbXBvcnQgcmVzcG9uc2VIYW5kbGVyIGZyb20gJy4vcmVzcG9uc2VIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSBcIi4vZHVyYXRpb25SZXBvcnRlclwiXG5pbXBvcnQgdXJsIGZyb20gJy4uL3V0aWwvdXJsJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiXG5cbi8vIOagvOW8j+WMlnVybFxuZnVuY3Rpb24gZm9ybWF0KG9yaWdpblVybDogc3RyaW5nKSB7XG4gICAgaWYgKG9yaWdpblVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybFxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB1cmxQZXJmaXggPSBjb25maWcudXJsUGVyZml4O1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy51cmxQZXJmaXggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdXJsUGVyZml4ID0gY29uZmlnLnVybFBlcmZpeCgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybFBlcmZpeCArIG9yaWdpblVybDtcbiAgICB9XG59XG5cbi8vIOaJgOacieivt+axguWPkeWHuuWJjemcgOimgeWBmueahOS6i+aDhVxuZnVuY3Rpb24gcHJlRG88VCBleHRlbmRzIElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24+KG9iajogVCk6IFQge1xuICAgIGlmKHR5cGVvZiBvYmouYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XG4gICAgfVxuICAgIC8vIOeZu+W9leaAgeWkseaViO+8jOmHjeWkjeeZu+W9leiuoeaVsFxuICAgIGlmICh0eXBlb2Ygb2JqLnJlTG9naW5MaW1pdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBvYmoucmVMb2dpbkxpbWl0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvYmoucmVMb2dpbkxpbWl0Kys7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouY291bnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqLmNvdW50ID0gMDtcbiAgICB9XG5cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmcuc2hvdyhvYmouc2hvd0xvYWRpbmcpO1xuICAgICAgICBvYmouY29tcGxldGUgPSAoKGZuOiBhbnksIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKT0+IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIOS9v+eUqFByb21pc2XmlrnlvI/lkI7vvIzlj6/og73kuI3pnIDopoHov5nkupvkuoZcbiAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIil7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KShvYmouY29tcGxldGUpXG4gICAgfVxuXG4gICAgaWYoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgb2JqLm9yaWdpblVybCA9IG9iai51cmw7XG4gICAgICAgIG9iai51cmwgPSBmb3JtYXQob2JqLnVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuLy8g5qC85byP5YyW5aSE55CG6K+35rGC55qEb2Jq5YaF5a65XG5mdW5jdGlvbiBpbml0aWFsaXplUmVxdWVzdE9iaihvYmo6IElSZXF1ZXN0T3B0aW9uKSB7XG5cbiAgICBpZiAoIW9iai5kYXRhKSB7XG4gICAgICAgIG9iai5kYXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKG9iai5vcmlnaW5VcmwgIT09IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICBvYmouZGF0YSA9IHsuLi5vYmouZGF0YSBhcyBvYmplY3QsIFtjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbn07XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmRhdGEgPSB7Li4uZ2QsIC4uLm9iai5kYXRhIGFzIG9iamVjdH07XG5cbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuXG4gICAgLy8g5aaC5p6c6K+35rGC5LiN5pivR0VU77yM5YiZ5ZyoVVJM5Lit6Ieq5Yqo5Yqg5LiK55m75b2V5oCB5ZKM5YWo5bGA5Y+C5pWwXG4gICAgaWYgKG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCB7W2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9ufSk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cblxuICAgIGR1cmF0aW9uUmVwb3J0ZXIuc3RhcnQob2JqKTtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8vIOagvOW8j+WMluWkhOeQhuS4iuS8oOaWh+S7tueahG9iauWGheWuuVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0gey4uLm9iai5mb3JtRGF0YSBhcyBvYmplY3QsIFtjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbn07XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0gey4uLmdkLCAuLi5vYmouZm9ybURhdGF9O1xuXG4gICAgLy8g5bCG55m76ZmG5oCB5Lmf5bim5ZyodXJs5LiKXG4gICAgaWYgKHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIHtbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259KTtcbiAgICB9XG4gICAgLy8g5YWo5bGA5Y+C5pWw5ZCM5pe25pS+5ZyodXJs5LiKXG4gICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcbiAgICBsZXQgZ2Q6IGFueSA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmdsb2JhbERhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWcuZ2xvYmFsRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGdkO1xufVxuXG5mdW5jdGlvbiBkb1JlcXVlc3Qob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuICAgIG9iaiA9IGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaik7XG4gICAgb2JqLmNvdW50Kys7XG4gICAgd3gucmVxdWVzdCh7XG4gICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgZGF0YTogb2JqLmRhdGEsXG4gICAgICAgIG1ldGhvZDogb2JqLm1ldGhvZCxcbiAgICAgICAgaGVhZGVyOiBvYmouaGVhZGVyIHx8IHt9LFxuICAgICAgICBkYXRhVHlwZTogb2JqLmRhdGFUeXBlIHx8ICdqc29uJyxcbiAgICAgICAgc3VjY2VzcyhyZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlSGFuZGxlcihyZXMsIG9iaiwgJ3JlcXVlc3QnKVxuICAgICAgICB9LFxuICAgICAgICBmYWlsIChyZXM6IHd4LkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGUgKCkge1xuICAgICAgICAgICAgb2JqLmNvdW50LS07XG4gICAgICAgICAgICBpZih0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvdW50ID09PSAwKXtcbiAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGRvVXBsb2FkRmlsZShvYmo6IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKTtcbiAgICBvYmouY291bnQrKztcbiAgICB3eC51cGxvYWRGaWxlKHtcbiAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICBmaWxlUGF0aDogb2JqLmZpbGVQYXRoIHx8ICcnLFxuICAgICAgICBuYW1lOiBvYmoubmFtZSB8fCAnJyxcbiAgICAgICAgZm9ybURhdGE6IG9iai5mb3JtRGF0YSxcbiAgICAgICAgc3VjY2VzcyAocmVzOiB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICByZXNwb25zZUhhbmRsZXIocmVzLCBvYmosICd1cGxvYWRGaWxlJylcbiAgICAgICAgfSxcbiAgICAgICAgZmFpbCAocmVzOiB3eC5HZW5lcmFsQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlci5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlICgpIHtcbiAgICAgICAgICAgIG9iai5jb3VudC0tO1xuICAgICAgICAgICAgaWYodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb3VudCA9PT0gMCl7XG4gICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0KG9iajogSVJlcXVlc3RPcHRpb24pOiB2b2lkIHtcbiAgICBvYmogPSBwcmVEbyhvYmopO1xuICAgIGlmKGNvbmZpZy5tb2NrSnNvbikge1xuICAgICAgICBtb2NrTWFuYWdlci5nZXQob2JqLCAncmVxdWVzdCcpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmKG9iai5jYWNoZSkge1xuICAgICAgICBjYWNoZU1hbmFnZXIuZ2V0KG9iaik7XG4gICAgfVxuXG4gICAgc2Vzc2lvbk1hbmFnZXIoKCk9PntcbiAgICAgICAgZG9SZXF1ZXN0KG9iailcbiAgICB9LCBvYmopXG59XG5cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbik6IHZvaWQge1xuICAgIG9iaiA9IHByZURvKG9iaikgYXMgSVVwbG9hZEZpbGVPcHRpb247XG4gICAgaWYoY29uZmlnLm1vY2tKc29uKSB7XG4gICAgICAgIG1vY2tNYW5hZ2VyLmdldChvYmosICd1cGxvYWRGaWxlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXNzaW9uTWFuYWdlcigoKT0+e1xuICAgICAgICBkb1VwbG9hZEZpbGUob2JqKVxuICAgIH0sIG9iailcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdCxcbiAgICByZXF1ZXN0LFxuICAgIHVwbG9hZEZpbGVcbn1cbiJdfQ== /***/ }), @@ -678,21 +691,7 @@ function response(res, obj, method) { } } durationReporter_1.default.end(obj); - if (obj.isLogin) { - var s = ""; - try { - s = config_1.default.codeToSession.success(res.data); - } - catch (e) { - } - if (s) { - obj.success(s); - } - else { - errorHandler_1.default.logicError(obj, res); - } - } - else if (config_1.default.loginTrigger(res.data) && obj.reLoginLimit < config_1.default.reLoginLimit) { + if (config_1.default.loginTrigger(res.data) && obj.reLoginLimit < config_1.default.reLoginLimit) { status_1.default.session = ''; status_1.default.sessionIsFresh = true; wx.removeStorage({ @@ -716,7 +715,9 @@ function response(res, obj, method) { console.error("Function successData occur error: " + e); } if (!obj.noCacheFlash) { - typeof obj.success === "function" && obj.success(realData); + if (typeof obj.success === "function") { + obj.success(realData); + } } cacheManager_1.default.set(obj, realData); } @@ -729,7 +730,7 @@ function response(res, obj, method) { } } exports.default = response; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2VIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9yZXNwb25zZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBQ3BDLG1EQUE2QztBQUM3QywrQ0FBeUM7QUFDekMsK0NBQXlDO0FBQ3pDLHVEQUFpRDtBQUdqRCxTQUFTLFFBQVEsQ0FDYixHQUF5RSxFQUN6RSxHQUF1QyxFQUN2QyxNQUFnQztJQUVoQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1FBR3hCLElBQUcsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJO2dCQUNBLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixzQkFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1NBQ0o7UUFFRCwwQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUIsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO1lBRWIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1gsSUFBSTtnQkFDQSxDQUFDLEdBQUcsZ0JBQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2FBQ1g7WUFDRCxJQUFJLENBQUMsRUFBRTtnQkFDSCxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO2lCQUFNO2dCQUNILHNCQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNyQztTQUNKO2FBQU0sSUFBSSxnQkFBTSxDQUFDLFlBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLFlBQVksR0FBRyxnQkFBTSxDQUFDLFlBQWEsRUFBRTtZQUVsRixnQkFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDcEIsZ0JBQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzdCLEVBQUUsQ0FBQyxhQUFhLENBQUM7Z0JBQ2IsR0FBRyxFQUFFLGdCQUFNLENBQUMsV0FBWTtnQkFDeEIsUUFBUSxFQUFFO29CQUNOLElBQUcsTUFBTSxLQUFLLFNBQVMsRUFBRTt3QkFDckIsd0JBQWMsQ0FBQyxPQUFPLENBQWlCLEdBQUcsQ0FBQyxDQUFDO3FCQUMvQzt5QkFBTSxJQUFHLE1BQU0sS0FBSyxZQUFZLEVBQUU7d0JBQy9CLHdCQUFjLENBQUMsVUFBVSxDQUFvQixHQUFHLENBQUMsQ0FBQztxQkFDckQ7Z0JBQ0wsQ0FBQzthQUNKLENBQUMsQ0FBQTtTQUNMO2FBQU0sSUFBSSxnQkFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFFeEMsSUFBSSxRQUFRLEdBQXNDLEVBQUUsQ0FBQztZQUNyRCxJQUFJO2dCQUNBLFFBQVEsR0FBRyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0M7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsSUFBRyxDQUFrQixHQUFJLENBQUMsWUFBWSxFQUFFO2dCQUVwQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUQ7WUFFRCxzQkFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUVILHNCQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNyQztLQUNKO1NBQU07UUFDSCxzQkFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDckM7QUFDTCxDQUFDO0FBRUQsa0JBQWUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcbmltcG9ydCByZXF1ZXN0SGFuZGxlciBmcm9tICcuL3JlcXVlc3RIYW5kbGVyJ1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9ySGFuZGxlcidcbmltcG9ydCBjYWNoZU1hbmFnZXIgZnJvbSAnLi9jYWNoZU1hbmFnZXInXG5pbXBvcnQgZHVyYXRpb25SZXBvcnRlciBmcm9tICcuL2R1cmF0aW9uUmVwb3J0ZXInXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbmZ1bmN0aW9uIHJlc3BvbnNlKFxuICAgIHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCB8IHd4LlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQsXG4gICAgb2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLFxuICAgIG1ldGhvZDogXCJyZXF1ZXN0XCIgfCBcInVwbG9hZEZpbGVcIlxuKTogYW55IHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuXG4gICAgICAgIC8vIOWFvOWuuXVwbG9hZEZpbGXov5Tlm57nmoRyZXMuZGF0YeWPr+iDveaYr+Wtl+espuS4slxuICAgICAgICBpZih0eXBlb2YgcmVzLmRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZHVyYXRpb25SZXBvcnRlci5lbmQob2JqKTtcblxuICAgICAgICBpZiAob2JqLmlzTG9naW4pIHtcbiAgICAgICAgICAgIC8vIOeZu+W9leivt+axglxuICAgICAgICAgICAgbGV0IHMgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzID0gY29uZmlnLmNvZGVUb1Nlc3Npb24uc3VjY2VzcyhyZXMuZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLmxvZ2luVHJpZ2dlciEocmVzLmRhdGEpICYmIG9iai5yZUxvZ2luTGltaXQgPCBjb25maWcucmVMb2dpbkxpbWl0ISkge1xuICAgICAgICAgICAgLy8g55m75b2V5oCB5aSx5pWI77yM5LiU6YeN6K+V5qyh5pWw5LiN6LaF6L+H6YWN572uXG4gICAgICAgICAgICBzdGF0dXMuc2Vzc2lvbiA9ICcnO1xuICAgICAgICAgICAgc3RhdHVzLnNlc3Npb25Jc0ZyZXNoID0gdHJ1ZTtcbiAgICAgICAgICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25OYW1lISxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZihtZXRob2QgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlci5yZXF1ZXN0KDxJUmVxdWVzdE9wdGlvbj5vYmopO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYobWV0aG9kID09PSBcInVwbG9hZEZpbGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhhbmRsZXIudXBsb2FkRmlsZSg8SVVwbG9hZEZpbGVPcHRpb24+b2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnN1Y2Nlc3NUcmlnZ2VyKHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgLy8g5o6l5Y+j6L+U5Zue5oiQ5Yqf56CBXG4gICAgICAgICAgICBsZXQgcmVhbERhdGE6IHN0cmluZyB8IElBbnlPYmplY3QgfCBBcnJheUJ1ZmZlciA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gY29uZmlnLnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRnVuY3Rpb24gc3VjY2Vzc0RhdGEgb2NjdXIgZXJyb3I6IFwiICsgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZighKDxJUmVxdWVzdE9wdGlvbj5vYmopLm5vQ2FjaGVGbGFzaCkge1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOS4uuS6huS/neivgemhtemdouS4jemXqueDge+8jOWImeS4jeWbnuiwg++8jOWPquaYr+e8k+WtmOacgOaWsOaVsOaNru+8jOW+heS4i+asoei/m+WFpeWGjeeUqFxuICAgICAgICAgICAgICAgIHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOe8k+WtmOWtmOWCqFxuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyLnNldChvYmosIHJlYWxEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOaOpeWPo+i/lOWbnuWksei0peeggVxuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JIYW5kbGVyLmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVzcG9uc2U7XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2VIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9yZXNwb25zZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBQ3BDLG1EQUE2QztBQUM3QywrQ0FBeUM7QUFDekMsK0NBQXlDO0FBQ3pDLHVEQUFpRDtBQUdqRCxTQUFTLFFBQVEsQ0FDYixHQUF5RSxFQUN6RSxHQUF1QyxFQUN2QyxNQUFnQztJQUVoQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1FBR3hCLElBQUcsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJO2dCQUNBLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixzQkFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1NBQ0o7UUFFRCwwQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUIsSUFBSSxnQkFBTSxDQUFDLFlBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLFlBQVksR0FBRyxnQkFBTSxDQUFDLFlBQWEsRUFBRTtZQUUzRSxnQkFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDcEIsZ0JBQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzdCLEVBQUUsQ0FBQyxhQUFhLENBQUM7Z0JBQ2IsR0FBRyxFQUFFLGdCQUFNLENBQUMsV0FBWTtnQkFDeEIsUUFBUTtvQkFDSixJQUFHLE1BQU0sS0FBSyxTQUFTLEVBQUU7d0JBQ3JCLHdCQUFjLENBQUMsT0FBTyxDQUFDLEdBQXFCLENBQUMsQ0FBQztxQkFDakQ7eUJBQU0sSUFBRyxNQUFNLEtBQUssWUFBWSxFQUFFO3dCQUMvQix3QkFBYyxDQUFDLFVBQVUsQ0FBQyxHQUF3QixDQUFDLENBQUM7cUJBQ3ZEO2dCQUNMLENBQUM7YUFDSixDQUFDLENBQUE7U0FDTDthQUFNLElBQUksZ0JBQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBRXhDLElBQUksUUFBUSxHQUFzQyxFQUFFLENBQUM7WUFDckQsSUFBSTtnQkFDQSxRQUFRLEdBQUcsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNDO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMzRDtZQUNELElBQUcsQ0FBRSxHQUFzQixDQUFDLFlBQVksRUFBRTtnQkFFdEMsSUFBRyxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFDO29CQUNqQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN6QjthQUNKO1lBRUQsc0JBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFFSCxzQkFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDckM7S0FDSjtTQUFNO1FBQ0gsc0JBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3JDO0FBQ0wsQ0FBQztBQUVELGtCQUFlLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXG5pbXBvcnQgcmVxdWVzdEhhbmRsZXIgZnJvbSAnLi9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCBlcnJvckhhbmRsZXIgZnJvbSAnLi9lcnJvckhhbmRsZXInXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSAnLi9kdXJhdGlvblJlcG9ydGVyJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuXG5mdW5jdGlvbiByZXNwb25zZShcbiAgICByZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0LFxuICAgIG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbixcbiAgICBtZXRob2Q6IFwicmVxdWVzdFwiIHwgXCJ1cGxvYWRGaWxlXCJcbik6IGFueSB7XG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcblxuICAgICAgICAvLyDlhbzlrrl1cGxvYWRGaWxl6L+U5Zue55qEcmVzLmRhdGHlj6/og73mmK/lrZfnrKbkuLJcbiAgICAgICAgaWYodHlwZW9mIHJlcy5kYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gSlNPTi5wYXJzZShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIuZW5kKG9iaik7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5sb2dpblRyaWdnZXIhKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkxpbWl0IDwgY29uZmlnLnJlTG9naW5MaW1pdCEpIHtcbiAgICAgICAgICAgIC8vIOeZu+W9leaAgeWkseaViO+8jOS4lOmHjeivleasoeaVsOS4jei2hei/h+mFjee9rlxuICAgICAgICAgICAgc3RhdHVzLnNlc3Npb24gPSAnJztcbiAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uSXNGcmVzaCA9IHRydWU7XG4gICAgICAgICAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSEsXG4gICAgICAgICAgICAgICAgY29tcGxldGUgKCkge1xuICAgICAgICAgICAgICAgICAgICBpZihtZXRob2QgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlci5yZXF1ZXN0KG9iaiBhcyBJUmVxdWVzdE9wdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihtZXRob2QgPT09IFwidXBsb2FkRmlsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlci51cGxvYWRGaWxlKG9iaiBhcyBJVXBsb2FkRmlsZU9wdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIOaOpeWPo+i/lOWbnuaIkOWKn+eggVxuICAgICAgICAgICAgbGV0IHJlYWxEYXRhOiBzdHJpbmcgfCBJQW55T2JqZWN0IHwgQXJyYXlCdWZmZXIgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZy5zdWNjZXNzRGF0YShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZ1bmN0aW9uIHN1Y2Nlc3NEYXRhIG9jY3VyIGVycm9yOiBcIiArIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoIShvYmogYXMgSVJlcXVlc3RPcHRpb24pLm5vQ2FjaGVGbGFzaCkge1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOS4uuS6huS/neivgemhtemdouS4jemXqueDge+8jOWImeS4jeWbnuiwg++8jOWPquaYr+e8k+WtmOacgOaWsOaVsOaNru+8jOW+heS4i+asoei/m+WFpeWGjeeUqFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKXtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOe8k+WtmOWtmOWCqFxuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyLnNldChvYmosIHJlYWxEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOaOpeWPo+i/lOWbnuWksei0peeggVxuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JIYW5kbGVyLmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVzcG9uc2U7XG4iXX0= /***/ }), @@ -746,44 +747,50 @@ Object.defineProperty(exports, "__esModule", { value: true }); var flow_1 = __webpack_require__(/*! ../util/flow */ "./src/util/flow.ts"); var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts"); var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts"); -var requestHandler_1 = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.ts"); var errorHandler_1 = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.ts"); var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts"); +var requestHandler_1 = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.ts"); +var checkSessionPromise = null; function checkSession() { - return new Promise(function (resolve) { - if (!status_1.default.sessionIsFresh && status_1.default.session) { - console.log("wx.checkSession()"); - var start_1 = new Date().getTime(); - wx.checkSession({ - success: function () { - resolve(); - }, - fail: function () { - status_1.default.session = ''; - resolve(); - }, - complete: function () { - var end = new Date().getTime(); - durationReporter_1.default.report('checkSession', start_1, end); - } - }); - } - else { - resolve(); - } - }); + if (!checkSessionPromise) { + checkSessionPromise = new Promise(function (resolve) { + if (config_1.default.doNotCheckSession) { + resolve(); + } + else if (!status_1.default.sessionIsFresh && status_1.default.session) { + console.log("wx.checkSession()"); + var start_1 = new Date().getTime(); + wx.checkSession({ + success: function () { + resolve(); + }, + fail: function () { + status_1.default.session = ''; + resolve(); + }, + complete: function () { + var end = new Date().getTime(); + durationReporter_1.default.report('wx_checkSession', start_1, end); + } + }); + } + else { + resolve(); + } + }); + } + return checkSessionPromise; } function doLogin(callback, obj) { - if (obj.isLogin) { - typeof callback === "function" && callback(); - } - else if (status_1.default.session) { + if (status_1.default.session) { if (status_1.default.sessionExpireTime && new Date().getTime() > status_1.default.sessionExpire) { status_1.default.session = ''; doLogin(callback, obj); } else { - typeof callback === "function" && callback(); + if (typeof callback === "function") { + callback(); + } } } else if (status_1.default.logining) { @@ -802,7 +809,7 @@ function getCode(callback, obj) { wx.login({ complete: function () { var end = new Date().getTime(); - durationReporter_1.default.report('login', start, end); + durationReporter_1.default.report('wx_login', start, end); }, success: function (res) { if (res.code) { @@ -837,30 +844,53 @@ function code2Session(code) { } data[config_1.default.codeToSession.codeName] = code; return new Promise(function (resolve) { - requestHandler_1.default.request({ - url: config_1.default.codeToSession.url, + var start = new Date().getTime(); + wx.request({ + url: requestHandler_1.default.format(config_1.default.codeToSession.url), data: data, method: config_1.default.codeToSession.method || 'GET', - isLogin: true, - report: config_1.default.codeToSession.report || config_1.default.codeToSession.url, - success: function (s) { - status_1.default.session = s; - status_1.default.sessionIsFresh = true; - if (status_1.default.sessionExpireTime) { - status_1.default.sessionExpire = new Date().getTime() + status_1.default.sessionExpireTime; - wx.setStorage({ - key: config_1.default.sessionExpireKey, - data: String(status_1.default.sessionExpire) - }); + success: function (res) { + if (res.statusCode === 200) { + if (config_1.default.codeToSession.report) { + var end = new Date().getTime(); + durationReporter_1.default.report(config_1.default.codeToSession.report, start, end); + } + var s = ""; + try { + s = config_1.default.codeToSession.success(res.data); + } + catch (e) { + } + if (s) { + status_1.default.session = s; + status_1.default.sessionIsFresh = true; + if (status_1.default.sessionExpireTime) { + status_1.default.sessionExpire = new Date().getTime() + status_1.default.sessionExpireTime; + wx.setStorage({ + key: config_1.default.sessionExpireKey, + data: String(status_1.default.sessionExpire) + }); + } + wx.setStorage({ + key: config_1.default.sessionName, + data: status_1.default.session + }); + } + else { + var _a = errorHandler_1.default.getErrorMsg(res), title = _a.title, content = _a.content; + errorHandler_1.default.doError(title, content); + } + } + else { + errorHandler_1.default.doError("登录失败", "请稍后重试"); } - wx.setStorage({ - key: config_1.default.sessionName, - data: status_1.default.session - }); return resolve(); }, complete: function () { }, - fail: config_1.default.codeToSession.fail || null + fail: function () { + errorHandler_1.default.doError("登录失败", "请稍后重试"); + return resolve(); + } }); }); } @@ -869,7 +899,7 @@ exports.default = (function (fn, obj) { return doLogin(fn, obj); }); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQStCO0FBQy9CLDBDQUFvQztBQUNwQywwQ0FBb0M7QUFDcEMsbURBQTZDO0FBQzdDLCtDQUF5QztBQUN6Qyx1REFBaUQ7QUFHakQsU0FBUyxZQUFZO0lBQ2pCLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPO1FBQ3ZCLElBQUksQ0FBQyxnQkFBTSxDQUFDLGNBQWMsSUFBSSxnQkFBTSxDQUFDLE9BQU8sRUFBRTtZQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakMsSUFBSSxPQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUNaLE9BQU8sRUFBRTtvQkFFTCxPQUFPLEVBQUUsQ0FBQztnQkFDZCxDQUFDO2dCQUNELElBQUksRUFBRTtvQkFFRixnQkFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ3BCLE9BQU8sRUFBRSxDQUFDO2dCQUNkLENBQUM7Z0JBQ0QsUUFBUSxFQUFFO29CQUNOLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQy9CLDBCQUFnQixDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsT0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDO2FBQ0osQ0FBQyxDQUFBO1NBQ0w7YUFBTTtZQUNILE9BQU8sRUFBRSxDQUFDO1NBQ2I7SUFDTCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxRQUFrQixFQUFFLEdBQXVDO0lBQ3hFLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtRQUViLE9BQU8sUUFBUSxLQUFLLFVBQVUsSUFB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RUFBRSxHQUF1QztJQUNqRSxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDaEIsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZsb3cgZnJvbSAnLi4vdXRpbC9mbG93J1xuaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCByZXF1ZXN0SGFuZGxlciBmcm9tICcuL3JlcXVlc3RIYW5kbGVyJ1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9ySGFuZGxlcidcbmltcG9ydCBkdXJhdGlvblJlcG9ydGVyIGZyb20gJy4vZHVyYXRpb25SZXBvcnRlcidcbmltcG9ydCB7SVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9ufSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbmZ1bmN0aW9uIGNoZWNrU2Vzc2lvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgIGlmICghc3RhdHVzLnNlc3Npb25Jc0ZyZXNoICYmIHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInd4LmNoZWNrU2Vzc2lvbigpXCIpO1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB3eC5jaGVja1Nlc3Npb24oe1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g55m75b2V5oCB5pyJ5pWI77yM5LiU5Zyo5pys55Sf5ZG95ZGo5pyf5YaF5peg6aG75YaN5qOA6aqM5LqGXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g55m75b2V5oCB6L+H5pyfXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiBkb0xvZ2luKGNhbGxiYWNrOiBGdW5jdGlvbiwgb2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgaWYgKG9iai5pc0xvZ2luKSB7XG4gICAgICAgIC8vIOeZu+W9leaOpeWPo++8jOebtOaOpeaUvui/h1xuICAgICAgICB0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIiAmJiBjYWxsYmFjaygpO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgLy8g57yT5a2Y5Lit5pyJc2Vzc2lvblxuICAgICAgICBpZiAoc3RhdHVzLnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzLnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgICAgIC8vIOWmguaenOacieiuvue9ruacrOWcsHNlc3Npb27nvJPlrZjml7bpl7TvvIzkuJTnvJPlrZjml7bpl7Tlt7LliLBcbiAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uID0gJyc7XG4gICAgICAgICAgICBkb0xvZ2luKGNhbGxiYWNrLCBvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhdHVzLmxvZ2luaW5nKSB7XG4gICAgICAgIC8vIOato+WcqOeZu+W9leS4re+8jOivt+axgui9ruivoueojeWQju+8jOmBv+WFjemHjeWkjeiwg+eUqOeZu+W9leaOpeWPo1xuICAgICAgICBmbG93LndhaXQoJ2RvTG9naW5GaW5pc2hlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvTG9naW4oY2FsbGJhY2ssIG9iaik7XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8g57yT5a2Y5Lit5pegc2Vzc2lvblxuICAgICAgICBnZXRDb2RlKGNhbGxiYWNrLCBvYmopO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29kZShjYWxsYmFjazogRnVuY3Rpb24sIG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIHN0YXR1cy5sb2dpbmluZyA9IHRydWU7XG4gICAgY29uc29sZS5sb2coJ3d4LmxvZ2luJyk7XG4gICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgd3gubG9naW4oe1xuICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChyZXMuY29kZSkge1xuICAgICAgICAgICAgICAgIGNvZGUyU2Vzc2lvbihyZXMuY29kZSkudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMubG9naW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZmxvdy5lbWl0KCdkb0xvZ2luRmluaXNoZWQnKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIuZG9FcnJvcihcIueZu+W9leWksei0pVwiLCBcIuivt+eojeWQjumHjeivlVtjb2RlIOiOt+WPluWksei0pV1cIik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXMpO1xuICAgICAgICAgICAgICAgIC8vIOeZu+W9leWksei0pe+8jOino+mZpOmUge+8jOmYsuatouatu+mUgVxuICAgICAgICAgICAgICAgIHN0YXR1cy5sb2dpbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZsb3cuZW1pdCgnZG9Mb2dpbkZpbmlzaGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlci5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcyk7XG4gICAgICAgICAgICAvLyDnmbvlvZXlpLHotKXvvIzop6PpmaTplIHvvIzpmLLmraLmrbvplIFcbiAgICAgICAgICAgIHN0YXR1cy5sb2dpbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgZmxvdy5lbWl0KCdkb0xvZ2luRmluaXNoZWQnKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGNvZGUyU2Vzc2lvbihjb2RlOiBTdHJpbmcpIHtcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIC8vIGNvZGVUb1Nlc3Npb24uZGF0YeaUr+aMgeWHveaVsFxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEgPSBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IGNvbmZpZy5jb2RlVG9TZXNzaW9uLmRhdGEgfHwge307XG4gICAgfVxuICAgIGRhdGFbY29uZmlnLmNvZGVUb1Nlc3Npb24uY29kZU5hbWUhXSA9IGNvZGU7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgIHJlcXVlc3RIYW5kbGVyLnJlcXVlc3Qoe1xuICAgICAgICAgICAgdXJsOiBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBjb25maWcuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgICAgICBpc0xvZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVwb3J0OiBjb25maWcuY29kZVRvU2Vzc2lvbi5yZXBvcnQgfHwgY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHM6IFN0cmluZykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uID0gcztcbiAgICAgICAgICAgICAgICBzdGF0dXMuc2Vzc2lvbklzRnJlc2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOacieiuvue9ruacrOWcsHNlc3Npb27ov4fmnJ/ml7bpl7RcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnNlc3Npb25FeHBpcmVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBzdGF0dXMuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXMuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXMuc2Vzc2lvblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICAgICAgZmFpbDogY29uZmlnLmNvZGVUb1Nlc3Npb24uZmFpbCB8fCBudWxsXG4gICAgICAgIH0gYXMgSVJlcXVlc3RPcHRpb24pXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGZuOiBGdW5jdGlvbiwgb2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uKT0+e1xuICAgIGNoZWNrU2Vzc2lvbigpLnRoZW4oKCk9PntcbiAgICAgICAgcmV0dXJuIGRvTG9naW4oZm4sIG9iailcbiAgICB9KTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQStCO0FBQy9CLDBDQUFvQztBQUNwQywwQ0FBb0M7QUFDcEMsK0NBQXlDO0FBQ3pDLHVEQUFpRDtBQUNqRCxtREFBNkM7QUFHN0MsSUFBSSxtQkFBbUIsR0FBUSxJQUFJLENBQUM7QUFDcEMsU0FBUyxZQUFZO0lBQ2pCLElBQUcsQ0FBQyxtQkFBbUIsRUFBRTtRQUNyQixtQkFBbUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU87WUFDdEMsSUFBRyxnQkFBTSxDQUFDLGlCQUFpQixFQUFFO2dCQUN6QixPQUFPLEVBQUUsQ0FBQzthQUNiO2lCQUFNLElBQUksQ0FBQyxnQkFBTSxDQUFDLGNBQWMsSUFBSSxnQkFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNqQyxJQUFNLE9BQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUNaLE9BQU87d0JBRUgsT0FBTyxFQUFFLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxJQUFJO3dCQUVBLGdCQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDcEIsT0FBTyxFQUFFLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxRQUFRO3dCQUNKLElBQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2pDLDBCQUFnQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxPQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzNELENBQUM7aUJBQ0osQ0FBQyxDQUFBO2FBQ0w7aUJBQU07Z0JBQ0gsT0FBTyxFQUFFLENBQUM7YUFDYjtRQUNM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QUFHLGdCQUFNLENBQUMsaUJBQWlCLENBQUM7NEJBQ3ZFLEVBQUUsQ0FBQyxVQUFVLENBQUM7Z0NBQ1YsR0FBRyxFQUFFLGdCQUFNLENBQUMsZ0JBQWdCO2dDQUM1QixJQUFJLEVBQUUsTUFBTSxDQUFDLGdCQUFNLENBQUMsYUFBYSxDQUFDOzZCQUNyQyxDQUFDLENBQUE7eUJBQ0w7d0JBQ0QsRUFBRSxDQUFDLFVBQVUsQ0FBQzs0QkFDVixHQUFHLEVBQUUsZ0JBQU0sQ0FBQyxXQUFXOzRCQUN2QixJQUFJLEVBQUUsZ0JBQU0sQ0FBQyxPQUFPO3lCQUN2QixDQUFDLENBQUM7cUJBQ047eUJBQU07d0JBQ0MsSUFBQSw0Q0FBZ0QsRUFBL0MsZ0JBQUssRUFBRSxvQkFBd0MsQ0FBQzt3QkFDckQsc0JBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO3FCQUN2QztpQkFDSjtxQkFBTTtvQkFDSCxzQkFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7aUJBQ3hDO2dCQUNELE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUNELFFBQVEsZ0JBQUssQ0FBQztZQUNkLElBQUksRUFBRTtnQkFDRixzQkFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDckIsQ0FBQztTQUNKLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELG1CQUFlLFVBQUMsRUFBWSxFQUFFLEdBQXVDO0lBQ2pFLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQztRQUNoQixPQUFPLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZmxvdyBmcm9tICcuLi91dGlsL2Zsb3cnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9ySGFuZGxlcidcbmltcG9ydCBkdXJhdGlvblJlcG9ydGVyIGZyb20gJy4vZHVyYXRpb25SZXBvcnRlcidcbmltcG9ydCByZXF1ZXN0SGFuZGxlciBmcm9tICcuL3JlcXVlc3RIYW5kbGVyJ1xuaW1wb3J0IHtJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb259IGZyb20gXCIuLi9pbnRlcmZhY2VcIlxuXG5sZXQgY2hlY2tTZXNzaW9uUHJvbWlzZTogYW55ID0gbnVsbDtcbmZ1bmN0aW9uIGNoZWNrU2Vzc2lvbigpIHtcbiAgICBpZighY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgICAgICBpZihjb25maWcuZG9Ob3RDaGVja1Nlc3Npb24pIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0dXMuc2Vzc2lvbklzRnJlc2ggJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInd4LmNoZWNrU2Vzc2lvbigpXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgd3guY2hlY2tTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnmbvlvZXmgIHmnInmlYjvvIzkuJTlnKjmnKznlJ/lkb3lkajmnJ/lhoXml6Dpobvlho3mo4DpqozkuoZcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZmFpbCAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnmbvlvZXmgIHov4fmnJ9cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tTZXNzaW9uUHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gZG9Mb2dpbihjYWxsYmFjazogRnVuY3Rpb24sIG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICAvLyDnvJPlrZjkuK3mnIlzZXNzaW9uXG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgbmV3IERhdGUoKS5nZXRUaW1lKCkgPiBzdGF0dXMuc2Vzc2lvbkV4cGlyZSkge1xuICAgICAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbue8k+WtmOaXtumXtO+8jOS4lOe8k+WtmOaXtumXtOW3suWIsFxuICAgICAgICAgICAgc3RhdHVzLnNlc3Npb24gPSAnJztcbiAgICAgICAgICAgIGRvTG9naW4oY2FsbGJhY2ssIG9iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZih0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIil7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhdHVzLmxvZ2luaW5nKSB7XG4gICAgICAgIC8vIOato+WcqOeZu+W9leS4re+8jOivt+axgui9ruivoueojeWQju+8jOmBv+WFjemHjeWkjeiwg+eUqOeZu+W9leaOpeWPo1xuICAgICAgICBmbG93LndhaXQoJ2RvTG9naW5GaW5pc2hlZCcsICgpID0+IHtcbiAgICAgICAgICAgIGRvTG9naW4oY2FsbGJhY2ssIG9iaik7XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8g57yT5a2Y5Lit5pegc2Vzc2lvblxuICAgICAgICBnZXRDb2RlKGNhbGxiYWNrLCBvYmopO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29kZShjYWxsYmFjazogRnVuY3Rpb24sIG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIHN0YXR1cy5sb2dpbmluZyA9IHRydWU7XG4gICAgY29uc29sZS5sb2coJ3d4LmxvZ2luJyk7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB3eC5sb2dpbih7XG4gICAgICAgIGNvbXBsZXRlICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3MgKHJlcykge1xuICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgY29kZTJTZXNzaW9uKHJlcy5jb2RlKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5sb2dpbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmbG93LmVtaXQoJ2RvTG9naW5GaW5pc2hlZCcpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlci5kb0Vycm9yKFwi55m75b2V5aSx6LSlXCIsIFwi6K+356iN5ZCO6YeN6K+VW2NvZGUg6I635Y+W5aSx6LSlXVwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcyk7XG4gICAgICAgICAgICAgICAgLy8g55m75b2V5aSx6LSl77yM6Kej6Zmk6ZSB77yM6Ziy5q2i5q276ZSBXG4gICAgICAgICAgICAgICAgc3RhdHVzLmxvZ2luaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZmxvdy5lbWl0KCdkb0xvZ2luRmluaXNoZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFpbCAocmVzKSB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXIuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXMpO1xuICAgICAgICAgICAgLy8g55m75b2V5aSx6LSl77yM6Kej6Zmk6ZSB77yM6Ziy5q2i5q276ZSBXG4gICAgICAgICAgICBzdGF0dXMubG9naW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGZsb3cuZW1pdCgnZG9Mb2dpbkZpbmlzaGVkJyk7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiBjb2RlMlNlc3Npb24oY29kZTogc3RyaW5nKSB7XG4gICAgbGV0IGRhdGE6IGFueTtcbiAgICAvLyBjb2RlVG9TZXNzaW9uLmRhdGHmlK/mjIHlh73mlbBcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb2RlVG9TZXNzaW9uLmRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhID0gY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhIHx8IHt9O1xuICAgIH1cbiAgICBkYXRhW2NvbmZpZy5jb2RlVG9TZXNzaW9uLmNvZGVOYW1lIV0gPSBjb2RlO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKT0+e1xuICAgICAgICBsZXQgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gucmVxdWVzdCh7XG4gICAgICAgICAgICB1cmw6IHJlcXVlc3RIYW5kbGVyLmZvcm1hdChjb25maWcuY29kZVRvU2Vzc2lvbi51cmwpLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIG1ldGhvZDogY29uZmlnLmNvZGVUb1Nlc3Npb24ubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgICAgICAgc3VjY2VzcyAocmVzOiB3eC5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6ICX5pe25LiK5oqlXG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbmZpZy5jb2RlVG9TZXNzaW9uLnJlcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoY29uZmlnLmNvZGVUb1Nlc3Npb24ucmVwb3J0LCBzdGFydCwgZW5kKVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHMgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNlc3Npb24gPSBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNlc3Npb25Jc0ZyZXNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOacieiuvue9ruacrOWcsHNlc3Npb27ov4fmnJ/ml7bpl7RcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbkV4cGlyZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgc3RhdHVzLnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzLnNlc3Npb25FeHBpcmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXR1cy5zZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7dGl0bGUsIGNvbnRlbnR9ID0gZXJyb3JIYW5kbGVyLmdldEVycm9yTXNnKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIuZG9FcnJvcih0aXRsZSwgY29udGVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlci5kb0Vycm9yKFwi55m75b2V5aSx6LSlXCIsIFwi6K+356iN5ZCO6YeN6K+VXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUgKCkge30sXG4gICAgICAgICAgICBmYWlsOiAoKT0+IHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIuZG9FcnJvcihcIueZu+W9leWksei0pVwiLCBcIuivt+eojeWQjumHjeivlVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IChmbjogRnVuY3Rpb24sIG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbik9PntcbiAgICBjaGVja1Nlc3Npb24oKS50aGVuKCgpPT57XG4gICAgICAgIHJldHVybiBkb0xvZ2luKGZuLCBvYmopXG4gICAgfSk7XG59XG4iXX0= /***/ }), @@ -953,7 +983,9 @@ function emit(key) { var currentLength = flow.waitingList.length; for (var i = 0; i < currentLength; i++) { var callback = flow.waitingList.shift(); - typeof callback == "function" && callback(); + if (typeof callback == "function") { + callback(); + } } } function wait(key, callback) { @@ -972,7 +1004,7 @@ exports.default = { wait: wait, emit: emit }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFJLEtBQUssR0FBUSxFQUFFLENBQUM7QUFFcEIsU0FBUyxJQUFJLENBQUMsR0FBVztJQUNyQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLE9BQU8sUUFBUSxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQztLQUMvQztBQUNMLENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxHQUFXLEVBQUUsUUFBa0I7SUFDekMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ25DLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxHQUFXO0lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDVCxXQUFXLEVBQUUsRUFBRTtTQUNsQixDQUFBO0tBQ0o7SUFFRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQsa0JBQWU7SUFDWCxJQUFJLE1BQUE7SUFDSixJQUFJLE1BQUE7Q0FDUCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsibGV0IHN0b3JlOiBhbnkgPSB7fTtcblxuZnVuY3Rpb24gZW1pdChrZXk6IHN0cmluZykge1xuICAgIGxldCBmbG93ID0gZ2V0RmxvdyhrZXkpO1xuICAgIGxldCBjdXJyZW50TGVuZ3RoID0gZmxvdy53YWl0aW5nTGlzdC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gZmxvdy53YWl0aW5nTGlzdC5zaGlmdCgpO1xuICAgICAgICB0eXBlb2YgY2FsbGJhY2sgPT0gXCJmdW5jdGlvblwiICYmIGNhbGxiYWNrKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICB2YXIgZmxvdyA9IGdldEZsb3coa2V5KTtcbiAgICBmbG93LndhaXRpbmdMaXN0LnB1c2goY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIGdldEZsb3coa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoIXN0b3JlW2tleV0pIHtcbiAgICAgICAgc3RvcmVba2V5XSA9IHtcbiAgICAgICAgICAgIHdhaXRpbmdMaXN0OiBbXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3JlW2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICB3YWl0LFxuICAgIGVtaXRcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFNLEtBQUssR0FBUSxFQUFFLENBQUM7QUFFdEIsU0FBUyxJQUFJLENBQUMsR0FBVztJQUNyQixJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFDLElBQUcsT0FBTyxRQUFRLElBQUksVUFBVSxFQUFDO1lBQzdCLFFBQVEsRUFBRSxDQUFDO1NBQ2Q7S0FDSjtBQUNMLENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxHQUFXLEVBQUUsUUFBa0I7SUFDekMsSUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ25DLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxHQUFXO0lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDVCxXQUFXLEVBQUUsRUFBRTtTQUNsQixDQUFBO0tBQ0o7SUFFRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQsa0JBQWU7SUFDWCxJQUFJLE1BQUE7SUFDSixJQUFJLE1BQUE7Q0FDUCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3RvcmU6IGFueSA9IHt9O1xuXG5mdW5jdGlvbiBlbWl0KGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmxvdyA9IGdldEZsb3coa2V5KTtcbiAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gZmxvdy53YWl0aW5nTGlzdC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBmbG93LndhaXRpbmdMaXN0LnNoaWZ0KCk7XG4gICAgICAgIGlmKHR5cGVvZiBjYWxsYmFjayA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgY29uc3QgZmxvdyA9IGdldEZsb3coa2V5KTtcbiAgICBmbG93LndhaXRpbmdMaXN0LnB1c2goY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIGdldEZsb3coa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoIXN0b3JlW2tleV0pIHtcbiAgICAgICAgc3RvcmVba2V5XSA9IHtcbiAgICAgICAgICAgIHdhaXRpbmdMaXN0OiBbXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3JlW2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICB3YWl0LFxuICAgIGVtaXRcbn1cbiJdfQ== /***/ }), @@ -1027,20 +1059,22 @@ var __assign = (this && this.__assign) || function () { }; Object.defineProperty(exports, "__esModule", { value: true }); function setParams(url, params) { - if (url === void 0) { url = ''; } - var queryStringIndex = url.indexOf('?'); + if (url === void 0) { url = ""; } + var queryStringIndex = url.indexOf("?"); var kvp = {}; if (queryStringIndex >= 0) { - var oldQueryString = url.substr(queryStringIndex + 1).split('&'); - for (var i = 0; i < oldQueryString.length; i++) { - var kv = oldQueryString[i].split('='); + var oldQueryString_1 = url.substr(queryStringIndex + 1).split("&"); + oldQueryString_1.forEach(function (x, i) { + var kv = oldQueryString_1[i].split("="); kvp[kv[0]] = kv[1]; - } + }); } kvp = __assign({}, kvp, params); - var queryString = Object.keys(kvp).map(function (key) { + var queryString = Object.keys(kvp) + .map(function (key) { return key + "=" + encodeURI(kvp[key]); - }).join('&'); + }) + .join("&"); if (queryStringIndex >= 0) { return url.substring(0, queryStringIndex + 1) + queryString; } @@ -1051,9 +1085,9 @@ function setParams(url, params) { exports.default = { setParams: setParams }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLFNBQVMsQ0FBQyxHQUFnQixFQUFFLE1BQWM7SUFBaEMsb0JBQUEsRUFBQSxRQUFnQjtJQUMvQixJQUFJLGdCQUFnQixHQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLElBQUksZ0JBQWdCLElBQUksQ0FBQyxFQUFFO1FBQ3ZCLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLElBQUksRUFBRSxHQUFrQixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDckI7S0FDSjtJQUVELEdBQUcsZ0JBQU8sR0FBRyxFQUFLLE1BQU0sQ0FBQyxDQUFDO0lBRTFCLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUEsR0FBRztRQUN0QyxPQUFVLEdBQUcsU0FBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFHLENBQUE7SUFDMUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWIsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDdkIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUE7S0FDOUQ7U0FBTTtRQUNILE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUE7S0FDakM7QUFFTCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxTQUFTLFdBQUE7Q0FDWixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gc2V0UGFyYW1zKHVybDogc3RyaW5nID0gJycsIHBhcmFtczogb2JqZWN0KSB7XG4gICAgbGV0IHF1ZXJ5U3RyaW5nSW5kZXg6IG51bWJlciA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgbGV0IGt2cDogYW55ID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICBsZXQgb2xkUXVlcnlTdHJpbmcgPSB1cmwuc3Vic3RyKHF1ZXJ5U3RyaW5nSW5kZXggKyAxKS5zcGxpdCgnJicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9sZFF1ZXJ5U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQga3Y6IEFycmF5PHN0cmluZz4gPSBvbGRRdWVyeVN0cmluZ1tpXS5zcGxpdCgnPScpO1xuICAgICAgICAgICAga3ZwW2t2WzBdXSA9IGt2WzFdXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBrdnAgPSB7Li4ua3ZwLCAuLi5wYXJhbXN9O1xuXG4gICAgbGV0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmtleXMoa3ZwKS5tYXAoa2V5ID0+IHtcbiAgICAgICAgcmV0dXJuIGAke2tleX09JHtlbmNvZGVVUkkoa3ZwW2tleV0pfWBcbiAgICB9KS5qb2luKCcmJyk7XG5cbiAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RyaW5nSW5kZXggKyAxKSArIHF1ZXJ5U3RyaW5nXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVybCArIFwiP1wiICsgcXVlcnlTdHJpbmdcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHNldFBhcmFtc1xufVxuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLFNBQVMsQ0FBQyxHQUFnQixFQUFFLE1BQWM7SUFBaEMsb0JBQUEsRUFBQSxRQUFnQjtJQUNqQyxJQUFNLGdCQUFnQixHQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLElBQUksZ0JBQWdCLElBQUksQ0FBQyxFQUFFO1FBQ3pCLElBQU0sZ0JBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRSxnQkFBYyxDQUFDLE9BQU8sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDO1lBRTFCLElBQU0sRUFBRSxHQUFhLGdCQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUVELEdBQUcsZ0JBQVEsR0FBRyxFQUFLLE1BQU0sQ0FBRSxDQUFDO0lBRTVCLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2pDLEdBQUcsQ0FBQyxVQUFBLEdBQUc7UUFDTixPQUFVLEdBQUcsU0FBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFHLENBQUM7SUFDekMsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWIsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDekIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7S0FDN0Q7U0FBTTtRQUNMLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7S0FDaEM7QUFDSCxDQUFDO0FBRUQsa0JBQWU7SUFDYixTQUFTLFdBQUE7Q0FDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gc2V0UGFyYW1zKHVybDogc3RyaW5nID0gXCJcIiwgcGFyYW1zOiBvYmplY3QpIHtcbiAgY29uc3QgcXVlcnlTdHJpbmdJbmRleDogbnVtYmVyID0gdXJsLmluZGV4T2YoXCI/XCIpO1xuICBsZXQga3ZwOiBhbnkgPSB7fTtcbiAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgIGNvbnN0IG9sZFF1ZXJ5U3RyaW5nID0gdXJsLnN1YnN0cihxdWVyeVN0cmluZ0luZGV4ICsgMSkuc3BsaXQoXCImXCIpO1xuICAgIG9sZFF1ZXJ5U3RyaW5nLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgIC8vY29uc29sZS5sb2coeCk7XG4gICAgICBjb25zdCBrdjogc3RyaW5nW10gPSBvbGRRdWVyeVN0cmluZ1tpXS5zcGxpdChcIj1cIik7XG4gICAgICBrdnBba3ZbMF1dID0ga3ZbMV07XG4gICAgfSk7XG4gIH1cblxuICBrdnAgPSB7IC4uLmt2cCwgLi4ucGFyYW1zIH07XG5cbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhrdnApXG4gICAgLm1hcChrZXkgPT4ge1xuICAgICAgcmV0dXJuIGAke2tleX09JHtlbmNvZGVVUkkoa3ZwW2tleV0pfWA7XG4gICAgfSlcbiAgICAuam9pbihcIiZcIik7XG5cbiAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RyaW5nSW5kZXggKyAxKSArIHF1ZXJ5U3RyaW5nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1cmwgKyBcIj9cIiArIHF1ZXJ5U3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0UGFyYW1zXG59O1xuIl19 /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2Zsb3cudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3V0aWwvbG9hZGluZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdXRpbC91cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLDJtRDs7Ozs7Ozs7Ozs7O0FDYjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QztBQUNBO0FBQ0EsQ0FBQztBQUNELDJDQUEyQyxtYTs7Ozs7Ozs7Ozs7O0FDTjlCO0FBQ2I7QUFDQTtBQUNBLGdEQUFnRCxPQUFPO0FB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QUNiO0FBQ0E7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQSx5QkFBeUIsVUFBVTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwyQkFBMkI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1OEUiLCJmaWxlIjoid2VSZXF1ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXgudHNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY29uZmlnUmVzdWx0ID0ge1xuICAgICAgICB1cmxQZXJmaXg6IGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4LFxuICAgICAgICBzZXNzaW9uRXhwaXJlVGltZTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZUtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICBzZXNzaW9uRXhwaXJlOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVcbiAgICB9O1xuICAgIHJldHVybiBjb25maWdSZXN1bHQ7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBRMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDJGd2FTOW5aWFJEYjI1bWFXY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCWVhCRExHMUNRVUZsTzBsQlExZ3NTVUZCVFN4WlFVRlpMRWRCUVhGQ08xRkJRMjVETEZOQlFWTXNSVUZCUlN4blFrRkJUU3hEUVVGRExGTkJRVk03VVVGRE0wSXNhVUpCUVdsQ0xFVkJRVVVzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUk3VVVGRE0wTXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFVMHNRMEZCUXl4blFrRkJaMEk3VVVGRGVrTXNZVUZCWVN4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWVVGQllUdExRVU4wUXl4RFFVRkJPMGxCUTBRc1QwRkJUeXhaUVVGWkxFTkJRVU03UVVGRGVFSXNRMEZCUXl4RlFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYzNSaGRIVnpJR1p5YjIwZ0p5NHVMM04wYjNKbEwzTjBZWFIxY3lkY2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkpSMlYwUTI5dVptbG5VbVZ6ZFd4MGUxeHVJQ0FnSUM4cUlPV2NxT2U3aE9TN3R1V0luZVduaStXTWx1YVh0dVM4b09XRnBlZWFoT2l2dCtheGdsVlNUT2VhaE9XYnV1V3VtdVdKamVlOGdDQXFMMXh1SUNBZ0lIVnliRkJsY21acGVEODZJSE4wY21sdVp5QjhJQ2dvS1NBOVBpQnpkSEpwYm1jcE8xeHVJQ0FnSUM4cUlPV2NxT2U3aE9TN3R1V0luZVduaStXTWx1YVh0dVM4b09XRnBlZWFoT2VVcU9hSXQrZVp1K21aaHVhQWdlaXV2dWU5cnVhY3JPV2NzT2U4aytXdG1PYVh0dW1YdENBcUwxeHVJQ0FnSUhObGMzTnBiMjVGZUhCcGNtVlVhVzFsUHpvZ2JuVnRZbVZ5TzF4dUlDQWdJQzhxSU9XY3FPZTdoT1M3dHVXSW5lV25pK1dNbHVhWHR1UzhvT1dGcGVlYWhPZVVxT2FJdCtlWnUrbVpodWFBZ2VhY3JPV2NzT2U4aytXdG1PYVh0dW1YdEZOMGIzSmhaMlhubW9SclpYa2dLaTljYmlBZ0lDQnpaWE56YVc5dVJYaHdhWEpsUzJWNVB6b2djM1J5YVc1bk8xeHVJQ0FnSUM4cUlPZVVxT2FJdCtlWnUrbVpodWFBZ2VhY3JPV2NzT2U4aytXdG1PaS9oK2FjbitlYWhPYVh0dW1YdE9hSXN5QXFMMXh1SUNBZ0lITmxjM05wYjI1RmVIQnBjbVUvT2lCdWRXMWlaWEk3WEc0Z0lIMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLQ2tnUFQ0Z2UxeHVJQ0FnSUdOdmJuTjBJR052Ym1acFoxSmxjM1ZzZENBNlNVZGxkRU52Ym1acFoxSmxjM1ZzZENBOUlIdGNiaUFnSUNBZ0lDQWdkWEpzVUdWeVptbDRPaUJqYjI1bWFXY3VkWEpzVUdWeVptbDRMRnh1SUNBZ0lDQWdJQ0J6WlhOemFXOXVSWGh3YVhKbFZHbHRaVG9nYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21WVWFXMWxMRnh1SUNBZ0lDQWdJQ0J6WlhOemFXOXVSWGh3YVhKbFMyVjVPaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTeGNiaUFnSUNBZ0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVmNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR052Ym1acFoxSmxjM1ZzZER0Y2JuMDdYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbjtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWjJWMFUyVnpjMmx2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdloyVjBVMlZ6YzJsdmJpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVVndReXh0UWtGQlpUdEpRVU5ZTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhQUVVGUExFTkJRVUU3UVVGRGVrSXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE4wWVhSMWN5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5emRHRjBkWE1uWEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUNncElEMCtJSHRjYmlBZ0lDQnlaWFIxY200Z2MzUmhkSFZ6TG5ObGMzTnBiMjVjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIHZhciBjb25maWcgPSBfX2Fzc2lnbih7fSwgcGFyYW1zLCBjb25maWdfMS5kZWZhdWx0KTtcbiAgICBpZiAocGFyYW1zLnNlc3Npb25OYW1lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWcuc2Vzc2lvbk5hbWUpIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uLicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnLnNlc3Npb25FeHBpcmVLZXkpIHx8IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uRXhwaXJlLicpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVwZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmFXNXBkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN096czdPenM3T3pzN08wRkJRVUVzTUVOQlFUSkRPMEZCUXpORExEQkRRVUZ2UXp0QlFVZHdReXh0UWtGQlpTeFZRVUZETEUxQlFXMUNPMGxCUXk5Q0xFbEJRVTBzVFVGQlRTeG5Ra0ZCYjBJc1RVRkJUU3hGUVVGTExHZENRVUZoTEVOQlFVTXNRMEZCUXp0SlFVVXhSQ3hKUVVGSkxFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVTdVVUZEY0VJc1NVRkJTVHRaUVVOQkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhqUVVGakxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRUUVVOcVJUdFJRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMWxCUTFJc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5dzRRMEZCT0VNc1EwRkJReXhEUVVGQk8xTkJRMmhGTzB0QlEwbzdTVUZGUkN4SlFVRkpMRTFCUVUwc1EwRkJReXhuUWtGQlowSXNSVUZCUlR0UlFVTjZRaXhKUVVGSk8xbEJRMEVzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRWRCUVVjc1JVRkJSU3hEUVVGRExHTkJRV01zUTBGQlF5eE5RVUZOTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTTdVMEZEYWtZN1VVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdFpRVU5TTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc2IwUkJRVzlFTEVOQlFVTXNRMEZCUVR0VFFVTjBSVHRMUVVOS08wRkJRMHdzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdSbFptRjFiSFJEYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4dWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNXBiWEJ2Y25RZ2V5QkpTVzVwZEU5d2RHbHZiaUI5SUdaeWIyMGdKeTR1TDJsdWRHVnlabUZqWlNkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tIQmhjbUZ0Y3pvZ1NVbHVhWFJQY0hScGIyNHBJRDArSUh0Y2JpQWdJQ0JqYjI1emRDQmpiMjVtYVdjNklFbEpibWwwVDNCMGFXOXVJRDBnZXk0dUxuQmhjbUZ0Y3l3Z0xpNHVaR1ZtWVhWc2RFTnZibVpwWjMwN1hHNGdJQ0FnTHk4ZzVhYUM1cDZjNllXTjU3MnU1cHUwNXBTNTVMcUdjMlZ6YzJsdmJ1ZWFoT1d0bU9XQ3FPV1FqZVd0bCsrOGpPV0ltZW1IamVhV3NPaU90K1dQbHVTNGdPYXNvWE5sYzNOcGIyNWNiaUFnSUNCcFppQW9jR0Z5WVcxekxuTmxjM05wYjI1T1lXMWxLU0I3WEc0Z0lDQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZiaUE5SUhkNExtZGxkRk4wYjNKaFoyVlRlVzVqS0dOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlNFcElIeDhJQ2NuTzF4dUlDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLQ2QzZUM1blpYUlRkRzl5WVdkbFUzbHVZenBtWVdsc0xDQmpZVzRnYm05MElHZGxkQ0J6WlhOemFXOXVMaWNwWEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdMeThnNWFhQzVwNmM2WVdONTcydTVwdTA1cFM1NUxxR2MyVnpjMmx2YnVpL2grYWNuK2FYdHVtWHRPZWFoT1d0bU9XQ3FPV1FqZVd0bCsrOGpPV0ltZW1IamVhV3NPaU90K1dQbHVTNGdPYXNvWE5sYzNOcGIyN25tb1RvdjRmbW5KL21sN2JwbDdSY2JpQWdJQ0JwWmlBb2NHRnlZVzF6TG5ObGMzTnBiMjVGZUhCcGNtVkxaWGtwSUh0Y2JpQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxJRDBnZDNndVoyVjBVM1J2Y21GblpWTjVibU1vWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3BJSHg4SUVsdVptbHVhWFI1TzF4dUlDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLQ2QzZUM1blpYUlRkRzl5WVdkbFUzbHVZenBtWVdsc0xDQmpZVzRnYm05MElHZGxkQ0J6WlhOemFXOXVSWGh3YVhKbExpY3BYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0KGNhbGxiYWNrLCB7fSk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOW5hVzR1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZZWEJwTDJ4dloybHVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNa1JCUVcxRU8wRkJSMjVFTEcxQ1FVRmxMRlZCUVVNc1VVRkJhMEk3U1VGRE9VSXNUMEZCVHl4M1FrRkJXU3hEUVVGRExGRkJRVkVzUlVGQlJTeEZRVUZ2UWl4RFFVRkRMRU5CUVVFN1FVRkRka1FzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOb1pXTnJVMlZ6YzJsdmJpQm1jbTl0SUNjdUxpOXRiMlIxYkdVdmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1cGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lseHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9ZMkZzYkdKaFkyczZJRVoxYm1OMGFXOXVLU0E5UGlCN1hHNGdJQ0FnY21WMGRYSnVJR05vWldOclUyVnpjMmx2YmloallXeHNZbUZqYXl3Z2UzMGdZWE1nU1ZKbGNYVmxjM1JQY0hScGIyNHBYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnJlcXVlc3Qob2JqKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WeGRXVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2Y21WeGRXVnpkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGRExFZEJRVzFDTzBsQlF5OUNMSGRDUVVGakxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkJPMEZCUXk5Q0xFTkJRVU1zUlVGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnlaWEYxWlhOMFNHRnVaR3hsY2lCbWNtOXRJQ2N1TGk5dGIyUjFiR1V2Y21WeGRXVnpkRWhoYm1Sc1pYSW5YRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjlJR1p5YjIwZ0p5NHVMMmx1ZEdWeVptRmpaU2RjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0cElEMCtJSHRjYmlBZ0lDQnlaWEYxWlhOMFNHRnVaR3hsY2k1eVpYRjFaWE4wS0c5aWFpbGNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbklzRnJlc2ggPSB0cnVlO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YzJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVWd1F5eHRRa0ZCWlN4VlFVRkRMRTlCUVdVN1NVRkRNMElzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRE8wbEJRM3BDTEdkQ1FVRk5MRU5CUVVNc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU5xUXl4RFFVRkRMRVZCUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLSE5sYzNOcGIyNDZJSE4wY21sdVp5a2dQVDRnZTF4dUlDQWdJSE4wWVhSMWN5NXpaWE56YVc5dUlEMGdjMlZ6YzJsdmJqdGNiaUFnSUNCemRHRjBkWE11YzJWemMybHZia2x6Um5KbGMyZ2dQU0IwY25WbE8xeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEJzYjJGa1JtbHNaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2ZFhCc2IyRmtSbWxzWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRkRMRWRCUVhOQ08wbEJRMnhETEhkQ1FVRmpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZCTzBGQlEyeERMRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpQm1jbTl0SUNjdUxpOXRiMlIxYkdVdmNtVnhkV1Z6ZEVoaGJtUnNaWEluWEc1cGJYQnZjblFnZXlCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlCOUlHWnliMjBnWENJdUxpOXBiblJsY21aaFkyVmNJanRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0c5aWFqb2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBJRDArSUh0Y2JpQWdJQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlsY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGluaXRfMSA9IHJlcXVpcmUoXCIuL2FwaS9pbml0XCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL2FwaS9yZXF1ZXN0XCIpO1xudmFyIHVwbG9hZEZpbGVfMSA9IHJlcXVpcmUoXCIuL2FwaS91cGxvYWRGaWxlXCIpO1xudmFyIHNldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9zZXRTZXNzaW9uXCIpO1xudmFyIGxvZ2luXzEgPSByZXF1aXJlKFwiLi9hcGkvbG9naW5cIik7XG52YXIgZ2V0U2Vzc2lvbl8xID0gcmVxdWlyZShcIi4vYXBpL2dldFNlc3Npb25cIik7XG52YXIgZ2V0Q29uZmlnXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0Q29uZmlnXCIpO1xudmFyIHdlUmVxdWVzdE9iamVjdCA9IHtcbiAgICBpbml0OiBpbml0XzEuZGVmYXVsdCxcbiAgICByZXF1ZXN0OiByZXF1ZXN0XzEuZGVmYXVsdCxcbiAgICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlXzEuZGVmYXVsdCxcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uXzEuZGVmYXVsdCxcbiAgICBsb2dpbjogbG9naW5fMS5kZWZhdWx0LFxuICAgIGdldFNlc3Npb246IGdldFNlc3Npb25fMS5kZWZhdWx0LFxuICAgIGdldENvbmZpZzogZ2V0Q29uZmlnXzEuZGVmYXVsdFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IHdlUmVxdWVzdE9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmFXNWtaWGd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3h0UTBGQk5rSTdRVUZETjBJc2VVTkJRVzFETzBGQlEyNURMQ3REUVVGNVF6dEJRVU42UXl3clEwRkJlVU03UVVGRGVrTXNjVU5CUVN0Q08wRkJReTlDTEN0RFFVRjVRenRCUVVONlF5dzJRMEZCZFVNN1FVRkhka01zU1VGQlRTeGxRVUZsTEVkQlFXTTdTVUZEYWtNc1NVRkJTU3huUWtGQlFUdEpRVU5LTEU5QlFVOHNiVUpCUVVFN1NVRkRVQ3hWUVVGVkxITkNRVUZCTzBsQlExWXNWVUZCVlN4elFrRkJRVHRKUVVOV0xFdEJRVXNzYVVKQlFVRTdTVUZEVEN4VlFVRlZMSE5DUVVGQk8wbEJRMVlzVTBGQlV5eHhRa0ZCUVR0RFFVTldMRU5CUVVNN1FVRkZSaXhyUWtGQlpTeGxRVUZsTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdhVzVwZENCbWNtOXRJRndpTGk5aGNHa3ZhVzVwZEZ3aVhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZENCbWNtOXRJRndpTGk5aGNHa3ZjbVZ4ZFdWemRGd2lYRzVwYlhCdmNuUWdkWEJzYjJGa1JtbHNaU0JtY205dElGd2lMaTloY0drdmRYQnNiMkZrUm1sc1pWd2lYRzVwYlhCdmNuUWdjMlYwVTJWemMybHZiaUJtY205dElGd2lMaTloY0drdmMyVjBVMlZ6YzJsdmJsd2lYRzVwYlhCdmNuUWdiRzluYVc0Z1puSnZiU0JjSWk0dllYQnBMMnh2WjJsdVhDSmNibWx0Y0c5eWRDQm5aWFJUWlhOemFXOXVJR1p5YjIwZ1hDSXVMMkZ3YVM5blpYUlRaWE56YVc5dVhDSmNibWx0Y0c5eWRDQm5aWFJEYjI1bWFXY2dabkp2YlNCY0lpNHZZWEJwTDJkbGRFTnZibVpwWjF3aVhHNXBiWEJ2Y25RZ2V5QjNaVkpsY1hWbGMzUWdmU0JtY205dElGd2lMaTlwYm5SbGNtWmhZMlZjSWx4dVhHNWpiMjV6ZENCM1pWSmxjWFZsYzNSUFltcGxZM1E2SUhkbFVtVnhkV1Z6ZENBOUlIdGNiaUFnYVc1cGRDeGNiaUFnY21WeGRXVnpkQ3hjYmlBZ2RYQnNiMkZrUm1sc1pTeGNiaUFnYzJWMFUyVnpjMmx2Yml4Y2JpQWdiRzluYVc0c1hHNGdJR2RsZEZObGMzTnBiMjRzWEc0Z0lHZGxkRU52Ym1acFoxeHVmVHRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZDJWU1pYRjFaWE4wVDJKcVpXTjBPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIHd4LmdldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZXMuZGF0YSwgeyBpc0NhY2hlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9iai5jYWNoZSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlcy5kYXRhLCB7IGlzQ2FjaGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXQob2JqLCByZWFsRGF0YSkge1xuICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHwgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVhbERhdGEpKSkge1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgICAgIGRhdGE6IHJlYWxEYXRhXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldCxcbiAgICBzZXQ6IHNldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyRmphR1ZOWVc1aFoyVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5allXTm9aVTFoYm1GblpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGRlFTeFRRVUZUTEVkQlFVY3NRMEZCUXl4SFFVRnRRanRKUVVNMVFpeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eFRRVUZUTzFGQlEyeENMRTlCUVU4c1JVRkJSU3hWUVVGVkxFZEJRVWM3V1VGRGJFSXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhMUVVGTExFdEJRVXNzVlVGQlZTeEpRVUZKTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTzJkQ1FVTjRSQ3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRMjVETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGQk8ybENRVU42UXp0aFFVTktPMmxDUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEV0QlFVc3NTVUZCU1N4SlFVRkpMRVZCUVVVN1owSkJRekZDTEVsQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJUeXhMUVVGTExGVkJRVlVzUlVGQlJUdHZRa0ZEYmtNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVNc1QwRkJUeXhGUVVGRkxFbEJRVWtzUlVGQlF5eERRVUZETEVOQlFVRTdhVUpCUTNwRE8yRkJRMG83V1VGRFJDeFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hKUVVGSkxFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0UlFVTjZSQ3hEUVVGRE8wdEJRMG9zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1IwRkJSeXhEUVVGRExFZEJRVzFDTEVWQlFVY3NVVUZCZVVJN1NVRkRlRVFzU1VGQlNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEV0QlFVc3NTMEZCU3l4VlFVRlZMRWxCUVVrc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RlFVRkZPMUZCUTJoR0xFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTTdXVUZEVml4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExGTkJRVk03V1VGRGJFSXNTVUZCU1N4RlFVRkZMRkZCUVZFN1UwRkRha0lzUTBGQlF5eERRVUZCTzB0QlEwdzdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEhRVUZITEV0QlFVRTdTVUZEU0N4SFFVRkhMRXRCUVVFN1EwRkRUaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0pjYmx4dVpuVnVZM1JwYjI0Z1oyVjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRwSUh0Y2JpQWdJQ0IzZUM1blpYUlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdhMlY1T2lCdlltb3ViM0pwWjJsdVZYSnNMRnh1SUNBZ0lDQWdJQ0J6ZFdOalpYTnpPaUJtZFc1amRHbHZiaUFvY21WektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTVqWVdOb1pTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUlDWW1JRzlpYWk1allXTm9aU2h5WlhNdVpHRjBZU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTV6ZFdOalpYTnpJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbk4xWTJObGMzTW9jbVZ6TG1SaGRHRXNJSHRwYzBOaFkyaGxPaUIwY25WbGZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHOWlhaTVqWVdOb1pTQTlQU0IwY25WbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdWMzVmpZMlZ6Y3lBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hKbGN5NWtZWFJoTENCN2FYTkRZV05vWlRvZ2RISjFaWDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUlDWW1JRzlpYWk1amIyMXdiR1YwWlNncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTbGNibjFjYmx4dVpuVnVZM1JwYjI0Z2MyVjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnTENCeVpXRnNSR0YwWVRvZ2MzUnlhVzVuSUh3Z2IySnFaV04wS1NCN1hHNGdJQ0FnYVdZZ0tHOWlhaTVqWVdOb1pTQTlQVDBnZEhKMVpTQjhmQ0FvZEhsd1pXOW1JRzlpYWk1allXTm9aU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lJQ1ltSUc5aWFpNWpZV05vWlNoeVpXRnNSR0YwWVNrcEtTQjdYRzRnSUNBZ0lDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQnZZbW91YjNKcFoybHVWWEpzTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2NtVmhiRVJoZEdGY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFFzWEc0Z0lDQWdjMlYwWEc1OU8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xuZnVuY3Rpb24gc3RhcnQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cbmZ1bmN0aW9uIGVuZChvYmopIHtcbiAgICBvYmouX3JlcG9ydEVuZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICByZXBvcnQob2JqLnJlcG9ydCwgb2JqLl9yZXBvcnRTdGFydFRpbWUsIG9iai5fcmVwb3J0RW5kVGltZSk7XG59XG5mdW5jdGlvbiByZXBvcnQobmFtZSwgc3RhcnQsIGVuZCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWdfMS5kZWZhdWx0LnJlcG9ydENHSShuYW1lLCBzdGFydCwgZW5kKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kLFxuICAgIHJlcG9ydDogcmVwb3J0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXRiMlIxYkdVdlpIVnlZWFJwYjI1U1pYQnZjblJsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVkd1F5eFRRVUZUTEV0QlFVc3NRMEZCUXl4SFFVRjFRenRKUVVOc1JDeEhRVUZITEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRCUVVOb1JDeERRVUZETzBGQlJVUXNVMEZCVXl4SFFVRkhMRU5CUVVNc1IwRkJkVU03U1VGRGFFUXNSMEZCUnl4RFFVRkRMR05CUVdNc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMGxCUXpGRExFMUJRVTBzUTBGQlV5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1EwRkJReXhuUWtGQlowSXNSVUZCUlN4SFFVRkhMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU03UVVGRGVrVXNRMEZCUXp0QlFVVkVMRk5CUVZNc1RVRkJUU3hEUVVGRExFbEJRVmtzUlVGQlJTeExRVUZoTEVWQlFVVXNSMEZCVnp0SlFVTndSQ3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRM2hETEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRkRU03UVVGRFRDeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hMUVVGTExFOUJRVUU3U1VGRFRDeEhRVUZITEV0QlFVRTdTVUZEU0N4TlFVRk5MRkZCUVVFN1EwRkRWQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpd2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNGdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENJN1hHNWNibVoxYm1OMGFXOXVJSE4wWVhKMEtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJRzlpYWk1ZmNtVndiM0owVTNSaGNuUlVhVzFsSUQwZ2JtVjNJRVJoZEdVb0tTNW5aWFJVYVcxbEtDazdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHVnVaQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0cElIdGNiaUFnSUNCdlltb3VYM0psY0c5eWRFVnVaRlJwYldVZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQnlaWEJ2Y25Rb1BITjBjbWx1Wno1dlltb3VjbVZ3YjNKMExDQnZZbW91WDNKbGNHOXlkRk4wWVhKMFZHbHRaU3dnYjJKcUxsOXlaWEJ2Y25SRmJtUlVhVzFsS1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnY21Wd2IzSjBLRzVoYldVNklITjBjbWx1Wnl3Z2MzUmhjblE2SUc1MWJXSmxjaXdnWlc1a09pQnVkVzFpWlhJcElIdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1eVpYQnZjblJEUjBrZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjVtYVdjdWNtVndiM0owUTBkSktHNWhiV1VzSUhOMFlYSjBMQ0JsYm1RcE8xeHVJQ0FnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdlMXh1SUNBZ0lITjBZWEowTEZ4dUlDQWdJR1Z1WkN4Y2JpQWdJQ0J5WlhCdmNuUmNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG5mdW5jdGlvbiBzeXN0ZW1FcnJvcihvYmosIHJlcykge1xuICAgIGRvRXJyb3IoXCJcIiwgcmVzLmVyck1zZyk7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKFwiXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGxvZ2ljRXJyb3Iob2JqLCByZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBfYSA9IGdldEVycm9yTXNnKHJlcyksIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICBkb0Vycm9yKHRpdGxlLCBjb250ZW50KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWdfMS5kZWZhdWx0LmVycm9yQ2FsbGJhY2sob2JqLCByZXMpO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKHJlcyk7XG59XG5mdW5jdGlvbiBnZXRFcnJvck1zZyhyZXMpIHtcbiAgICB2YXIgdGl0bGUgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRpdGxlID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlKHJlcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGl0bGUgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGU7XG4gICAgfVxuICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudChyZXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50O1xuICAgIH1cbiAgICByZXR1cm4geyB0aXRsZTogdGl0bGUsIGNvbnRlbnQ6IGNvbnRlbnQgfTtcbn1cbmZ1bmN0aW9uIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQpIHtcbiAgICB3eC5zaG93TW9kYWwoe1xuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgXCLnvZHnu5zmiJbmnI3liqHlvILluLjvvIzor7fnqI3lkI7ph43or5VcIixcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2VcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzeXN0ZW1FcnJvcjogc3lzdGVtRXJyb3IsXG4gICAgbG9naWNFcnJvcjogbG9naWNFcnJvcixcbiAgICBkb0Vycm9yOiBkb0Vycm9yXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWlhKeWIzSklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlsY25KdmNraGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGSGNFTXNVMEZCVXl4WFFVRlhMRU5CUVVNc1IwRkJkVU1zUlVGQlJTeEhRVUUyUWp0SlFVTjJSaXhQUVVGUExFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVONFFpeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGFFTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU5vUWp0QlFVTk1MRU5CUVVNN1FVRkZSQ3hUUVVGVExGVkJRVlVzUTBGQlF5eEhRVUYxUXl4RlFVRkZMRWRCUVhsRk8wbEJRMnhKTEVsQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1NVRkJTU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU5vUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEycENPMU5CUVUwN1VVRkRReXhKUVVGQkxIRkNRVUZ0UXl4RlFVRnNReXhuUWtGQlN5eEZRVUZGTEc5Q1FVRXlRaXhEUVVGRE8xRkJRM2hETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03UzBGRE0wSTdTVUZIUkN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eGhRVUZoTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUXpWRExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5zUXp0SlFVVkVMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEZGtJc1EwRkJRenRCUVVWRUxGTkJRVk1zVjBGQlZ5eERRVUZETEVkQlFYbEZPMGxCUXpGR0xFbEJRVWtzUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTm1MRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRla01zU1VGQlNUdFpRVU5CTEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVFN1UwRkRkRU03VVVGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0VFFVTllPMHRCUTBvN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemxETEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU0zUWp0SlFVVkVMRWxCUVVrc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5xUWl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFpRVUZaTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUXpORExFbEJRVWs3V1VGRFFTeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkJPMU5CUXpGRE8xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdVMEZEV0R0TFFVTktPMU5CUVUwc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNXVUZCV1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVOb1JDeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU03UzBGRGFrTTdTVUZGUkN4UFFVRlBMRVZCUVVNc1MwRkJTeXhQUVVGQkxFVkJRVVVzVDBGQlR5eFRRVUZCTEVWQlFVTXNRMEZCUVR0QlFVTXpRaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFBRVUZQTEVOQlFVTXNTMEZCWVN4RlFVRkZMRTlCUVdVN1NVRkRNME1zUlVGQlJTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTlVMRXRCUVVzc1JVRkJSU3hMUVVGTE8xRkJRMW9zVDBGQlR5eEZRVUZGTEU5QlFVOHNTVUZCU1N4bFFVRmxPMUZCUTI1RExGVkJRVlVzUlVGQlJTeExRVUZMTzB0QlEzQkNMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeHJRa0ZCWlR0SlFVTllMRmRCUVZjc1lVRkJRVHRKUVVOWUxGVkJRVlVzV1VGQlFUdEpRVU5XTEU5QlFVOHNVMEZCUVR0RFFVTldMRU5CUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ1kyOXVabWxuSUdaeWIyMGdKeTR1TDNOMGIzSmxMMk52Ym1acFp5ZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTlwYm5SbGNtWmhZMlZjSWp0Y2JseHVablZ1WTNScGIyNGdjM2x6ZEdWdFJYSnliM0lvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUxDQnlaWE02SUhkNExrZGxibVZ5WVd4RFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJR1J2UlhKeWIzSW9YQ0pjSWl3Z2NtVnpMbVZ5Y2sxelp5azdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91Wm1GcGJDQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1bVlXbHNLRndpWENJcE8xeHVJQ0FnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnYkc5bmFXTkZjbkp2Y2lodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHNJSEpsY3pvZ2QzZ3VVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ0I4SUhkNExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNW1ZV2xzSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbVpoYVd3b2NtVnpLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnNaWFFnZTNScGRHeGxMQ0JqYjI1MFpXNTBmU0E5SUdkbGRFVnljbTl5VFhObktISmxjeWs3WEc0Z0lDQWdJQ0FnSUdSdlJYSnliM0lvZEdsMGJHVXNJR052Ym5SbGJuUXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZW1GamVlOXJ1ZTduK1M0Z09tVW1laXZyK1dibnVpd2crV0h2ZWFWc08rOGpPV0ltZWFKcCtpaGpPV3VnMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtVnljbTl5UTJGc2JHSmhZMnNnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCamIyNW1hV2N1WlhKeWIzSkRZV3hzWW1GamF5aHZZbW9zSUhKbGN5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWh5WlhNcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCblpYUkZjbkp2Y2sxelp5aHlaWE02SUhkNExsSmxjWFZsYzNSVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUWdmQ0IzZUM1VmNHeHZZV1JHYVd4bFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdiR1YwSUhScGRHeGxJRDBnWENKY0lqdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bGNuSnZjbFJwZEd4bElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJwZEd4bElEMGdZMjl1Wm1sbkxtVnljbTl5VkdsMGJHVW9jbVZ6TG1SaGRHRXBYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVsY25KdmNsUnBkR3hsSUQwOVBTQmNJbk4wY21sdVoxd2lLU0I3WEc0Z0lDQWdJQ0FnSUhScGRHeGxJRDBnWTI5dVptbG5MbVZ5Y205eVZHbDBiR1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUdOdmJuUmxiblFnUFNCY0lsd2lPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWRDaHlaWE11WkdGMFlTbGNiaUFnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyOXVkR1Z1ZENBOVBUMGdYQ0p6ZEhKcGJtZGNJaWtnZTF4dUlDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWREdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZTNScGRHeGxMQ0JqYjI1MFpXNTBmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmtiMFZ5Y205eUtIUnBkR3hsT2lCemRISnBibWNzSUdOdmJuUmxiblE2SUhOMGNtbHVaeWtnZTF4dUlDQWdJSGQ0TG5Ob2IzZE5iMlJoYkNoN1hHNGdJQ0FnSUNBZ0lIUnBkR3hsT2lCMGFYUnNaU3hjYmlBZ0lDQWdJQ0FnWTI5dWRHVnVkRG9nWTI5dWRHVnVkQ0I4ZkNCY0l1ZTlrZWU3bk9hSWx1YWNqZVdLb2VXOGd1VzR1Tys4ak9pdnQrZW9qZVdRanVtSGplaXZsVndpTEZ4dUlDQWdJQ0FnSUNCemFHOTNRMkZ1WTJWc09pQm1ZV3h6WlZ4dUlDQWdJSDBwWEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCemVYTjBaVzFGY25KdmNpeGNiaUFnSUNCc2IyZHBZMFZ5Y205eUxGeHVJQ0FnSUdSdlJYSnliM0pjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVzcG9uc2VIYW5kbGVyXCIpO1xuZnVuY3Rpb24gZ2V0KG9iaiwgbWV0aG9kKSB7XG4gICAgaWYgKCFjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai51cmxdICYmICFjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ21vY2sg5rKh5pyJ5a+55bqU5o6l5Y+j55qE5pWw5o2uJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai51cmxdIHx8IGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLm9yaWdpblVybF07XG4gICAgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIHZhciByZXMgPSB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMFxuICAgIH07XG4gICAgcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdChyZXMsIG9iaiwgbWV0aG9kKTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXOWphMDFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDIxdlkydE5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMSEZFUVVFclF6dEJRVWN2UXl4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGMVF5eEZRVUZGTEUxQlFXZERPMGxCUld4R0xFbEJRVWNzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRVZCUVVVN1VVRkZOMFFzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzFGQlEyaERMRTlCUVU4c1MwRkJTeXhEUVVGRE8wdEJRMmhDTzBsQlJVUXNTVUZCU1N4SlFVRkpMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxHZENRVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEpRVVYwUlN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVFTXNTVUZCU1N4SFFVRkhMRWRCUVVjN1VVRkRUaXhKUVVGSkxFVkJRVVVzU1VGQlNUdFJRVU5XTEZWQlFWVXNSVUZCUlN4SFFVRkhPMHRCUTJ4Q0xFTkJRVU03U1VGRlJpeDVRa0ZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVRTdRVUZEY2tNc1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NSMEZCUnl4TFFVRkJPME5CUTA0c1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4dWFXMXdiM0owSUhKbGMzQnZibk5sU0dGdVpHeGxjaUJtY205dElDY3VMM0psYzNCdmJuTmxTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTlwYm5SbGNtWmhZMlZjSWp0Y2JseHVablZ1WTNScGIyNGdaMlYwS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0Z2ZDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpd2diV1YwYUc5a09pQmNJbkpsY1hWbGMzUmNJaUI4SUZ3aWRYQnNiMkZrUm1sc1pWd2lLVG9nWVc1NUlIdGNibHh1SUNBZ0lHbG1LQ0ZqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG5WeWJGMGdKaVlnSVdOdmJtWnBaeTV0YjJOclNuTnZibHR2WW1vdWIzSnBaMmx1VlhKc1hTa2dlMXh1SUNBZ0lDQWdJQ0F2THlCdGIyTnJJT2F5b2VhY2llV3Z1ZVc2bE9hT3BlV1BvK2VhaE9hVnNPYU5ybHh1SUNBZ0lDQWdJQ0JqYjI1emIyeGxMbVZ5Y205eUtDZHRiMk5ySU9heW9lYWNpZVd2dWVXNmxPYU9wZVdQbytlYWhPYVZzT2FOcmljcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUdSaGRHRWdQU0JqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG5WeWJGMGdmSHdnWTI5dVptbG5MbTF2WTJ0S2MyOXVXMjlpYWk1dmNtbG5hVzVWY214ZE8xeHVJQ0FnSUM4dklHUmxaWEFnWTI5d2VWeHVJQ0FnSUdSaGRHRWdQU0JLVTA5T0xuQmhjbk5sS0VwVFQwNHVjM1J5YVc1bmFXWjVLR1JoZEdFcEtUdGNiaUFnSUNCc1pYUWdjbVZ6SUQwZ2UxeHVJQ0FnSUNBZ0lDQmtZWFJoT2lCa1lYUmhMRnh1SUNBZ0lDQWdJQ0J6ZEdGMGRYTkRiMlJsT2lBeU1EQmNiaUFnSUNCOU8xeHVYRzRnSUNBZ2NtVnpjRzl1YzJWSVlXNWtiR1Z5S0hKbGN5d2diMkpxTENCdFpYUm9iMlFwWEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCblpYUmNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG52YXIgbW9ja01hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL21vY2tNYW5hZ2VyXCIpO1xudmFyIGNhY2hlTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vY2FjaGVNYW5hZ2VyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciByZXNwb25zZUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc3BvbnNlSGFuZGxlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHVybF8xID0gcmVxdWlyZShcIi4uL3V0aWwvdXJsXCIpO1xuZnVuY3Rpb24gZm9ybWF0KHVybCkge1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXg7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsUGVyZml4ICsgdXJsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByZURvKG9iaikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiBvYmouYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqLnJlTG9naW5MaW1pdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBvYmoucmVMb2dpbkxpbWl0ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG9iai5yZUxvZ2luTGltaXQrKztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmouY291bnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqLmNvdW50ID0gMDtcbiAgICB9XG4gICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5zaG93KG9iai5zaG93TG9hZGluZyk7XG4gICAgICAgIG9iai5jb21wbGV0ZSA9IChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIiAmJiBmbi5hcHBseS5hcHBseShmbiwgW190aGlzXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkob2JqLmNvbXBsZXRlKTtcbiAgICB9XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoIW9iai5kYXRhKSB7XG4gICAgICAgIG9iai5kYXRhID0ge307XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG9iai5kYXRhLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGdkLCBvYmouZGF0YSk7XG4gICAgb2JqLm1ldGhvZCA9IG9iai5tZXRob2QgfHwgJ0dFVCc7XG4gICAgb2JqLmRhdGFUeXBlID0gb2JqLmRhdGFUeXBlIHx8ICdqc29uJztcbiAgICBpZiAob2JqLm1ldGhvZCAhPT0gXCJHRVRcIikge1xuICAgICAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xuICAgICAgICB9XG4gICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZm9ybURhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBvYmouZm9ybURhdGEsIChfYSA9IHt9LCBfYVtjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2EpKTtcbiAgICB9XG4gICAgdmFyIGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5mb3JtRGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGdkLCBvYmouZm9ybURhdGEpO1xuICAgIGlmIChzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICB9XG4gICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWxEYXRhKCkge1xuICAgIHZhciBnZCA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGdkO1xufVxuZnVuY3Rpb24gZG9SZXF1ZXN0KG9iaikge1xuICAgIG9iaiA9IGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaik7XG4gICAgb2JqLmNvdW50Kys7XG4gICAgd3gucmVxdWVzdCh7XG4gICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgZGF0YTogb2JqLmRhdGEsXG4gICAgICAgIG1ldGhvZDogb2JqLm1ldGhvZCxcbiAgICAgICAgaGVhZGVyOiBvYmouaGVhZGVyIHx8IHt9LFxuICAgICAgICBkYXRhVHlwZTogb2JqLmRhdGFUeXBlIHx8ICdqc29uJyxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdChyZXMsIG9iaiwgJ3JlcXVlc3QnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvYmouY291bnQtLTtcbiAgICAgICAgICAgIHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY291bnQgPT09IDAgJiYgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRvVXBsb2FkRmlsZShvYmopIHtcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIG9iai5jb3VudCsrO1xuICAgIHd4LnVwbG9hZEZpbGUoe1xuICAgICAgICB1cmw6IG9iai51cmwsXG4gICAgICAgIGZpbGVQYXRoOiBvYmouZmlsZVBhdGggfHwgJycsXG4gICAgICAgIG5hbWU6IG9iai5uYW1lIHx8ICcnLFxuICAgICAgICBmb3JtRGF0YTogb2JqLmZvcm1EYXRhLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0KHJlcywgb2JqLCAndXBsb2FkRmlsZScpO1xuICAgICAgICB9LFxuICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9iai5jb3VudC0tO1xuICAgICAgICAgICAgdHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb3VudCA9PT0gMCAmJiBvYmouY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gcmVxdWVzdChvYmopIHtcbiAgICBvYmogPSBwcmVEbyhvYmopO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgIG1vY2tNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqLCAncmVxdWVzdCcpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvYmouY2FjaGUpIHtcbiAgICAgICAgY2FjaGVNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICB9XG4gICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZG9SZXF1ZXN0KG9iaik7XG4gICAgfSwgb2JqKTtcbn1cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqKSB7XG4gICAgb2JqID0gcHJlRG8ob2JqKTtcbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xuICAgICAgICBtb2NrTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaiwgJ3VwbG9hZEZpbGUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb1VwbG9hZEZpbGUob2JqKTtcbiAgICB9LCBvYmopO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEVoaGJtUnNaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzSmxjWFZsYzNSSVlXNWtiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTWtOQlFYRkRPMEZCUTNKRExEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZEY0VNc05rTkJRWFZETzBGQlEzWkRMQ3REUVVGNVF6dEJRVU42UXl4dFJFRkJOa003UVVGRE4wTXNLME5CUVhsRE8wRkJRM3BETEhGRVFVRXJRenRCUVVNdlF5eDFSRUZCYVVRN1FVRkRha1FzYlVOQlFUWkNPMEZCU1RkQ0xGTkJRVk1zVFVGQlRTeERRVUZETEVkQlFWYzdTVUZEZGtJc1NVRkJTU3hIUVVGSExFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZPMUZCUTNoQ0xFOUJRVThzUjBGQlJ5eERRVUZCTzB0QlEySTdVMEZCVFR0UlFVTklMRWxCUVVrc1UwRkJVeXhIUVVGSExHZENRVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTJwRExFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1MwRkJTeXhWUVVGVkxFVkJRVVU3V1VGRGVFTXNVMEZCVXl4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVRTdVMEZEYWtNN1VVRkRSQ3hQUVVGUExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTTdTMEZETVVJN1FVRkRUQ3hEUVVGRE8wRkJSMFFzVTBGQlV5eExRVUZMTEVOQlFTdERMRWRCUVUwN1NVRkJia1VzYVVKQmFVTkRPMGxCYUVOSExFbEJRVWNzVDBGQlR5eEhRVUZITEVOQlFVTXNWVUZCVlN4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVOeVF5eEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1MwRkRjRUk3U1VGRlJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRmxCUVZrc1MwRkJTeXhYUVVGWExFVkJRVVU3VVVGRGVrTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRGVFSTdVMEZCVFR0UlFVTklMRWRCUVVjc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dExRVU4wUWp0SlFVVkVMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEZkQlFWY3NSVUZCUlR0UlFVTnNReXhIUVVGSExFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnFRanRKUVVWRUxFbEJRVWtzUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlR0UlFVTnFRaXhwUWtGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRE9VSXNSMEZCUnl4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExGVkJRVU1zUlVGQlR6dFpRVUZGTEdOQlFVODdhVUpCUVZBc1ZVRkJUeXhGUVVGUUxIRkNRVUZQTEVWQlFWQXNTVUZCVHp0blFrRkJVQ3cyUWtGQlR6czdXVUZETjBJc1QwRkJUenRuUWtGRlNDeHBRa0ZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8yZENRVVZtTEU5QlFVOHNSVUZCUlN4TFFVRkxMRlZCUVZVc1NVRkJTU3hGUVVGRkxFTkJRVU1zUzBGQlN5eFBRVUZTTEVWQlFVVXNSMEZCVHl4TFFVRkpMRk5CUVVzc1NVRkJTU3hGUVVGRExFTkJRVU03V1VGRGVFUXNRMEZCUXl4RFFVRkJPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkJPMHRCUTI1Q08wbEJSVVFzU1VGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRVZCUVVVN1VVRkRaaXhIUVVGSExFTkJRVU1zVTBGQlV5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNN1VVRkRlRUlzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlF6ZENPMGxCUlVRc1QwRkJUeXhIUVVGSExFTkJRVU03UVVGRFppeERRVUZETzBGQlIwUXNVMEZCVXl4dlFrRkJiMElzUTBGQlF5eEhRVUZ0UWpzN1NVRkZOME1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRVZCUVVVN1VVRkRXQ3hIUVVGSExFTkJRVU1zU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUXp0TFFVTnFRanRKUVVWRUxFbEJRVWtzUjBGQlJ5eERRVUZETEZOQlFWTXNTMEZCU3l4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVsQlFVa3NaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3VVVGRE9VUXNSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNSVUZCUlN4SFFVRkhMRU5CUVVNc1NVRkJTU3haUVVGSExFZEJRVU1zWjBKQlFVMHNRMEZCUXl4WFFVRlhMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFBRVUZQTEUxQlFVVXNRMEZCUVR0TFFVTnFSanRKUVVkRUxFbEJRVWtzUlVGQlJTeEhRVUZITEdGQlFXRXNSVUZCUlN4RFFVRkRPMGxCUTNwQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVVelF5eEhRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETzBsQlEycERMRWRCUVVjc1EwRkJReXhSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETEZGQlFWRXNTVUZCU1N4TlFVRk5MRU5CUVVNN1NVRkhkRU1zU1VGQlNTeEhRVUZITEVOQlFVTXNUVUZCVFN4TFFVRkxMRXRCUVVzc1JVRkJSVHRSUVVOMFFpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMmhDTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1lVRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4WlFVRkhMRWRCUVVNc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVsQlFVY3NaMEpCUVUwc1EwRkJReXhQUVVGUExFMUJRVVVzUTBGQlF6dFRRVU0xUlR0UlFVTkVMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzB0QlEzaERPMGxCUlVRc01FSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSVFZDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVkRUxGTkJRVk1zZFVKQlFYVkNMRU5CUVVNc1IwRkJjMEk3TzBsQlEyNUVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTzFGQlEyWXNSMEZCUnl4RFFVRkRMRkZCUVZFc1IwRkJSeXhGUVVGRkxFTkJRVU03UzBGRGNrSTdTVUZGUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhUUVVGVExFdEJRVXNzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhKUVVGSkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUXpsRUxFZEJRVWNzUTBGQlF5eFJRVUZSTEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzUjBGQlJ5eERRVUZETEZGQlFWRXNXVUZCUnl4SFFVRkRMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRkxFTkJRVUU3UzBGRGVrWTdTVUZIUkN4SlFVRkpMRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU42UWl4SFFVRkhMRU5CUVVNc1VVRkJVU3hIUVVGSExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdTVUZIYmtRc1NVRkJTU3huUWtGQlRTeERRVUZETEU5QlFVOHNSVUZCUlR0UlFVTm9RaXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEdGQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzV1VGQlJ5eEhRVUZETEdkQ1FVRk5MRU5CUVVNc1YwRkJWeXhKUVVGSExHZENRVUZOTEVOQlFVTXNUMEZCVHl4TlFVRkZMRU5CUVVNN1MwRkROVVU3U1VGRlJDeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMR0ZCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVWeVF5d3dRa0ZCWjBJc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZGTlVJc1QwRkJUeXhIUVVGSExFTkJRVU03UVVGRFppeERRVUZETzBGQlJVUXNVMEZCVXl4aFFVRmhPMGxCUTJ4Q0xFbEJRVWtzUlVGQlJTeEhRVUZSTEVWQlFVVXNRMEZCUXp0SlFVTnFRaXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRM3BETEVWQlFVVXNSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETzB0QlF6VkNPMU5CUVUwc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNWVUZCVlN4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVNNVF5eEZRVUZGTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU03UzBGRE1VSTdTVUZEUkN4UFFVRlBMRVZCUVVVc1EwRkJRenRCUVVOa0xFTkJRVU03UVVGRlJDeFRRVUZUTEZOQlFWTXNRMEZCUXl4SFFVRnRRanRKUVVOc1F5eEhRVUZITEVkQlFVY3NiMEpCUVc5Q0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEYUVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzBsQlExb3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJRenRSUVVOUUxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNSMEZCUnp0UlFVTmFMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNUdFJRVU5rTEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1RVRkJUVHRSUVVOc1FpeE5RVUZOTEVWQlFVVXNSMEZCUnl4RFFVRkRMRTFCUVUwc1NVRkJTU3hGUVVGRk8xRkJRM2hDTEZGQlFWRXNSVUZCUlN4SFFVRkhMRU5CUVVNc1VVRkJVU3hKUVVGSkxFMUJRVTA3VVVGRGFFTXNUMEZCVHl4RlFVRkZMRlZCUVZVc1IwRkJiME03V1VGRGJrUXNlVUpCUVdVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkJPMUZCUTNoRExFTkJRVU03VVVGRFJDeEpRVUZKTEVWQlFVVXNWVUZCVlN4SFFVRTJRanRaUVVONlF5eHpRa0ZCV1N4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEYmtNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjJRaXhEUVVGRE8xRkJRMFFzVVVGQlVTeEZRVUZGTzFsQlEwNHNSMEZCUnl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRMW9zVDBGQlR5eEhRVUZITEVOQlFVTXNVVUZCVVN4TFFVRkxMRlZCUVZVc1NVRkJTU3hIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03VVVGRE5VVXNRMEZCUXp0TFFVTktMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeFRRVUZUTEZsQlFWa3NRMEZCUXl4SFFVRnpRanRKUVVONFF5eEhRVUZITEVkQlFVY3NkVUpCUVhWQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEYmtNc1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzBsQlExb3NSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVOV0xFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNSMEZCUnp0UlFVTmFMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVTeEpRVUZKTEVWQlFVVTdVVUZETlVJc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlR0UlFVTndRaXhSUVVGUkxFVkJRVVVzUjBGQlJ5eERRVUZETEZGQlFWRTdVVUZEZEVJc1QwRkJUeXhGUVVGRkxGVkJRVlVzUjBGQmRVTTdXVUZEZEVRc2VVSkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRmxCUVZrc1EwRkJReXhEUVVGQk8xRkJRek5ETEVOQlFVTTdVVUZEUkN4SlFVRkpMRVZCUVVVc1ZVRkJWU3hIUVVFMlFqdFpRVU42UXl4elFrRkJXU3hEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRia01zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMlFpeERRVUZETzFGQlEwUXNVVUZCVVN4RlFVRkZPMWxCUTA0c1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzFsQlExb3NUMEZCVHl4SFFVRkhMRU5CUVVNc1VVRkJVU3hMUVVGTExGVkJRVlVzU1VGQlNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdVVUZETlVVc1EwRkJRenRMUVVOS0xFTkJRVU1zUTBGQlFUdEJRVU5PTEVOQlFVTTdRVUZGUkN4VFFVRlRMRTlCUVU4c1EwRkJReXhIUVVGdFFqdEpRVU5vUXl4SFFVRkhMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEycENMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVWQlFVVTdVVUZEYUVJc2NVSkJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJRMmhETEU5QlFVODdTMEZEVmp0SlFVTkVMRWxCUVVjc1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJUdFJRVU5XTEhOQ1FVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEzcENPMGxCUlVRc2QwSkJRV01zUTBGQlF6dFJRVU5ZTEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRVHRKUVVOc1FpeERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVFN1FVRkRXQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eFZRVUZWTEVOQlFVTXNSMEZCYzBJN1NVRkRkRU1zUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVhOQ0xFTkJRVU03U1VGRGRFTXNTVUZCUnl4blFrRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJUdFJRVU5vUWl4eFFrRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRia01zVDBGQlR6dExRVU5XTzBsQlJVUXNkMEpCUVdNc1EwRkJRenRSUVVOWUxGbEJRVmtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUVR0SlFVTnlRaXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVRTdRVUZEV0N4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeFBRVUZQTEZOQlFVRTdTVUZEVUN4VlFVRlZMRmxCUVVFN1EwRkRZaXhEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHeHZZV1JwYm1jZ1puSnZiU0FuTGk0dmRYUnBiQzlzYjJGa2FXNW5KMXh1YVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYzNSaGRIVnpJR1p5YjIwZ0p5NHVMM04wYjNKbEwzTjBZWFIxY3lkY2JtbHRjRzl5ZENCdGIyTnJUV0Z1WVdkbGNpQm1jbTl0SUNjdUwyMXZZMnROWVc1aFoyVnlKMXh1YVcxd2IzSjBJR05oWTJobFRXRnVZV2RsY2lCbWNtOXRJQ2N1TDJOaFkyaGxUV0Z1WVdkbGNpZGNibWx0Y0c5eWRDQnpaWE56YVc5dVRXRnVZV2RsY2lCbWNtOXRJQ2N1TDNObGMzTnBiMjVOWVc1aFoyVnlKMXh1YVcxd2IzSjBJR1Z5Y205eVNHRnVaR3hsY2lCbWNtOXRJQ2N1TDJWeWNtOXlTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQnlaWE53YjI1elpVaGhibVJzWlhJZ1puSnZiU0FuTGk5eVpYTndiMjV6WlVoaGJtUnNaWEluWEc1cGJYQnZjblFnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaUJtY205dElGd2lMaTlrZFhKaGRHbHZibEpsY0c5eWRHVnlYQ0pjYm1sdGNHOXlkQ0IxY213Z1puSnZiU0FuTGk0dmRYUnBiQzkxY213blhHNXBiWEJ2Y25RZ2V5QkpVbVZ4ZFdWemRFOXdkR2x2Yml3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0pjYmx4dUx5OGc1cUM4NWJ5UDVZeVdkWEpzWEc1bWRXNWpkR2x2YmlCbWIzSnRZWFFvZFhKc09pQnpkSEpwYm1jcElIdGNiaUFnSUNCcFppQW9kWEpzTG5OMFlYSjBjMWRwZEdnb0oyaDBkSEFuS1NrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RYSnNYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSFZ5YkZCbGNtWnBlQ0E5SUdOdmJtWnBaeTUxY214UVpYSm1hWGc3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG5WeWJGQmxjbVpwZUNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IxY214UVpYSm1hWGdnUFNCamIyNW1hV2N1ZFhKc1VHVnlabWw0S0NsY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RYSnNVR1Z5Wm1sNElDc2dkWEpzTzF4dUlDQWdJSDFjYm4xY2JseHVMeThnNW9tQTVweUo2SyszNXJHQzVZK1I1WWU2NVltTjZaeUE2S2FCNVlHYTU1cUU1THFMNW9PRlhHNW1kVzVqZEdsdmJpQndjbVZFYnp4VUlHVjRkR1Z1WkhNZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2Ymo0b2IySnFPaUJVS1RvZ1ZDQjdYRzRnSUNBZ2FXWW9kSGx3Wlc5bUlHOWlhaTVpWldadmNtVlRaVzVrSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbUpsWm05eVpWTmxibVFvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdMeThnNTVtNzViMlY1b0NCNWFTeDVwV0k3N3lNNlllTjVhU041NW03NWIyVjZLNmg1cFd3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdWNtVk1iMmRwYmt4cGJXbDBJRDA5UFNCY0luVnVaR1ZtYVc1bFpGd2lLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNXlaVXh2WjJsdVRHbHRhWFFnUFNBd08xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNXlaVXh2WjJsdVRHbHRhWFFyS3p0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNWpiM1Z1ZENBOVBUMGdYQ0oxYm1SbFptbHVaV1JjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91WTI5MWJuUWdQU0F3TzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodlltb3VjMmh2ZDB4dllXUnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ2JHOWhaR2x1Wnk1emFHOTNLRzlpYWk1emFHOTNURzloWkdsdVp5azdYRzRnSUNBZ0lDQWdJRzlpYWk1amIyMXdiR1YwWlNBOUlDZ29abTQ2SUdGdWVTd2dMaTR1WVhKbmN5a2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZ3BQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklGUlBSRThnNUwyLzU1U29VSEp2YldselplYVd1ZVc4aitXUWp1KzhqT1dQcitpRHZlUzRqZW1jZ09pbWdlaS9tZVM2bStTNmhseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHZZV1JwYm1jdWFHbGtaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklFQjBjeTFwWjI1dmNtVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBlWEJsYjJZZ1ptNGdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpQW1KaUJtYmk1aGNIQnNlU2gwYUdsekxDQXVMaTVoY21kektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTa29iMkpxTG1OdmJYQnNaWFJsS1Z4dUlDQWdJSDFjYmx4dUlDQWdJR2xtS0NGdlltb3ViM0pwWjJsdVZYSnNLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNXZjbWxuYVc1VmNtd2dQU0J2WW1vdWRYSnNPMXh1SUNBZ0lDQWdJQ0J2WW1vdWRYSnNJRDBnWm05eWJXRjBLRzlpYWk1MWNtd3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCdlltbzdYRzU5WEc1Y2JpOHZJT2Fndk9XOGorV01sdVdraE9lUWh1aXZ0K2F4Z3VlYWhHOWlhdVdHaGVXdXVWeHVablZ1WTNScGIyNGdhVzVwZEdsaGJHbDZaVkpsY1hWbGMzUlBZbW9vYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlrZ2UxeHVYRzRnSUNBZ2FXWWdLQ0Z2WW1vdVpHRjBZU2tnZTF4dUlDQWdJQ0FnSUNCdlltb3VaR0YwWVNBOUlIdDlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h2WW1vdWIzSnBaMmx1VlhKc0lDRTlQU0JqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1MWNtd2dKaVlnYzNSaGRIVnpMbk5sYzNOcGIyNHBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtUmhkR0VnUFNCUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCdlltb3VaR0YwWVN3Z2UxdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJuMHBYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGc1YWFDNXA2YzVweUo1WVdvNWJHQTVZK0M1cFd3Nzd5TTVZaVo1cmU3NVlxZ1hHNGdJQ0FnYkdWMElHZGtJRDBnWjJWMFIyeHZZbUZzUkdGMFlTZ3BPMXh1SUNBZ0lHOWlhaTVrWVhSaElEMGdUMkpxWldOMExtRnpjMmxuYmloN2ZTd2daMlFzSUc5aWFpNWtZWFJoS1R0Y2JseHVJQ0FnSUc5aWFpNXRaWFJvYjJRZ1BTQnZZbW91YldWMGFHOWtJSHg4SUNkSFJWUW5PMXh1SUNBZ0lHOWlhaTVrWVhSaFZIbHdaU0E5SUc5aWFpNWtZWFJoVkhsd1pTQjhmQ0FuYW5OdmJpYzdYRzVjYmlBZ0lDQXZMeURscG9MbW5wem9yN2Ztc1lMa3VJM21tSzlIUlZUdnZJemxpSm5sbktoVlVremt1SzNvaDZybGlxamxpcURrdUlybm1idmx2WlhtZ0lIbGtvemxoYWpsc1lEbGo0TG1sYkJjYmlBZ0lDQnBaaUFvYjJKcUxtMWxkR2h2WkNBaFBUMGdYQ0pIUlZSY0lpa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2MzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1MWNtd2dQU0IxY213dWMyVjBVR0Z5WVcxektHOWlhaTUxY213c0lIdGJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNTlLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ2RYSnNMbk5sZEZCaGNtRnRjeWh2WW1vdWRYSnNMQ0JuWkNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTV6ZEdGeWRDaHZZbW9wTzF4dVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2JuMWNibHh1THk4ZzVxQzg1YnlQNVl5VzVhU0U1NUNHNUxpSzVMeWc1cGFINUx1MjU1cUViMkpxNVlhRjVhNjVYRzVtZFc1amRHbHZiaUJwYm1sMGFXRnNhWHBsVlhCc2IyRmtSbWxzWlU5aWFpaHZZbW82SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1S1NCN1hHNGdJQ0FnYVdZZ0tDRnZZbW91Wm05eWJVUmhkR0VwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbVp2Y20xRVlYUmhJRDBnZTMwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOWlhaTV2Y21sbmFXNVZjbXdnSVQwOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMblZ5YkNBbUppQnpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91Wm05eWJVUmhkR0VnUFNCUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCdlltb3VabTl5YlVSaGRHRXNJSHRiWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsWFRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjU5S1Z4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SU9XbWd1YWVuT2FjaWVXRnFPV3hnT1dQZ3VhVnNPKzhqT1dJbWVhM3UrV0tvRnh1SUNBZ0lHeGxkQ0JuWkNBOUlHZGxkRWRzYjJKaGJFUmhkR0VvS1R0Y2JpQWdJQ0J2WW1vdVptOXliVVJoZEdFZ1BTQlBZbXBsWTNRdVlYTnphV2R1S0h0OUxDQm5aQ3dnYjJKcUxtWnZjbTFFWVhSaEtUdGNibHh1SUNBZ0lDOHZJT1d3aHVlWnUrbVpodWFBZ2VTNW4rVzRwdVdjcUhWeWJPUzRpbHh1SUNBZ0lHbG1JQ2h6ZEdGMGRYTXVjMlZ6YzJsdmJpa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vdWRYSnNJRDBnZFhKc0xuTmxkRkJoY21GdGN5aHZZbW91ZFhKc0xDQjdXMk52Ym1acFp5NXpaWE56YVc5dVRtRnRaVjA2SUhOMFlYUjFjeTV6WlhOemFXOXVmU2s3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJT1dGcU9XeGdPV1BndWFWc09XUWpPYVh0dWFVdnVXY3FIVnliT1M0aWx4dUlDQWdJRzlpYWk1MWNtd2dQU0IxY213dWMyVjBVR0Z5WVcxektHOWlhaTUxY213c0lHZGtLVHRjYmx4dUlDQWdJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSXVjM1JoY25Rb2IySnFLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnZZbW83WEc1OVhHNWNibVoxYm1OMGFXOXVJR2RsZEVkc2IySmhiRVJoZEdFb0tTQjdYRzRnSUNBZ2JHVjBJR2RrT2lCaGJua2dQU0I3ZlR0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVuYkc5aVlXeEVZWFJoSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1oyUWdQU0JqYjI1bWFXY3VaMnh2WW1Gc1JHRjBZU2dwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NW5iRzlpWVd4RVlYUmhJRDA5UFNCY0ltOWlhbVZqZEZ3aUtTQjdYRzRnSUNBZ0lDQWdJR2RrSUQwZ1kyOXVabWxuTG1kc2IySmhiRVJoZEdFN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm5aRHRjYm4xY2JseHVablZ1WTNScGIyNGdaRzlTWlhGMVpYTjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRwSUh0Y2JpQWdJQ0J2WW1vZ1BTQnBibWwwYVdGc2FYcGxVbVZ4ZFdWemRFOWlhaWh2WW1vcE8xeHVJQ0FnSUc5aWFpNWpiM1Z1ZENzck8xeHVJQ0FnSUhkNExuSmxjWFZsYzNRb2UxeHVJQ0FnSUNBZ0lDQjFjbXc2SUc5aWFpNTFjbXdzWEc0Z0lDQWdJQ0FnSUdSaGRHRTZJRzlpYWk1a1lYUmhMRnh1SUNBZ0lDQWdJQ0J0WlhSb2IyUTZJRzlpYWk1dFpYUm9iMlFzWEc0Z0lDQWdJQ0FnSUdobFlXUmxjam9nYjJKcUxtaGxZV1JsY2lCOGZDQjdmU3hjYmlBZ0lDQWdJQ0FnWkdGMFlWUjVjR1U2SUc5aWFpNWtZWFJoVkhsd1pTQjhmQ0FuYW5OdmJpY3NYRzRnSUNBZ0lDQWdJSE4xWTJObGMzTTZJR1oxYm1OMGFXOXVJQ2h5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsYzNCdmJuTmxTR0Z1Wkd4bGNpaHlaWE1zSUc5aWFpd2dKM0psY1hWbGMzUW5LVnh1SUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNCbVlXbHNPaUJtZFc1amRHbHZiaUFvY21Wek9pQjNlQzVIWlc1bGNtRnNRMkZzYkdKaFkydFNaWE4xYkhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWeWNtOXlTR0Z1Wkd4bGNpNXplWE4wWlcxRmNuSnZjaWh2WW1vc0lISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0hKbGN5azdYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUdOdmJYQnNaWFJsT2lCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCdlltb3VZMjkxYm5RdExUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSNWNHVnZaaUJ2WW1vdVkyOXRjR3hsZEdVZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlBbUppQnZZbW91WTI5MWJuUWdQVDA5SURBZ0ppWWdiMkpxTG1OdmJYQnNaWFJsS0NrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCa2IxVndiRzloWkVacGJHVW9iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUc5aWFpQTlJR2x1YVhScFlXeHBlbVZWY0d4dllXUkdhV3hsVDJKcUtHOWlhaWs3WEc0Z0lDQWdiMkpxTG1OdmRXNTBLeXM3WEc0Z0lDQWdkM2d1ZFhCc2IyRmtSbWxzWlNoN1hHNGdJQ0FnSUNBZ0lIVnliRG9nYjJKcUxuVnliQ3hjYmlBZ0lDQWdJQ0FnWm1sc1pWQmhkR2c2SUc5aWFpNW1hV3hsVUdGMGFDQjhmQ0FuSnl4Y2JpQWdJQ0FnSUNBZ2JtRnRaVG9nYjJKcUxtNWhiV1VnZkh3Z0p5Y3NYRzRnSUNBZ0lDQWdJR1p2Y20xRVlYUmhPaUJ2WW1vdVptOXliVVJoZEdFc1hHNGdJQ0FnSUNBZ0lITjFZMk5sYzNNNklHWjFibU4wYVc5dUlDaHlaWE02SUhkNExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsYzNCdmJuTmxTR0Z1Wkd4bGNpaHlaWE1zSUc5aWFpd2dKM1Z3Ykc5aFpFWnBiR1VuS1Z4dUlDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQm1ZV2xzT2lCbWRXNWpkR2x2YmlBb2NtVnpPaUIzZUM1SFpXNWxjbUZzUTJGc2JHSmhZMnRTWlhOMWJIUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnljbTl5U0dGdVpHeGxjaTV6ZVhOMFpXMUZjbkp2Y2lodlltb3NJSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emIyeGxMbVZ5Y205eUtISmxjeWs3WEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lHTnZiWEJzWlhSbE9pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZZbW91WTI5MWJuUXRMVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1Z2WmlCdlltb3VZMjl0Y0d4bGRHVWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpQW1KaUJ2WW1vdVkyOTFiblFnUFQwOUlEQWdKaVlnYjJKcUxtTnZiWEJzWlhSbEtDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnlaWEYxWlhOMEtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBPaUIyYjJsa0lIdGNiaUFnSUNCdlltb2dQU0J3Y21WRWJ5aHZZbW9wTzF4dUlDQWdJR2xtS0dOdmJtWnBaeTV0YjJOclNuTnZiaWtnZTF4dUlDQWdJQ0FnSUNCdGIyTnJUV0Z1WVdkbGNpNW5aWFFvYjJKcUxDQW5jbVZ4ZFdWemRDY3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUtHOWlhaTVqWVdOb1pTa2dlMXh1SUNBZ0lDQWdJQ0JqWVdOb1pVMWhibUZuWlhJdVoyVjBLRzlpYWlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYzJWemMybHZiazFoYm1GblpYSW9LQ2s5UG50Y2JpQWdJQ0FnSUNBZ1pHOVNaWEYxWlhOMEtHOWlhaWxjYmlBZ0lDQjlMQ0J2WW1vcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUhWd2JHOWhaRVpwYkdVb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWs2SUhadmFXUWdlMXh1SUNBZ0lHOWlhaUE5SUhCeVpVUnZLRzlpYWlrZ1lYTWdTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNDdYRzRnSUNBZ2FXWW9ZMjl1Wm1sbkxtMXZZMnRLYzI5dUtTQjdYRzRnSUNBZ0lDQWdJRzF2WTJ0TllXNWhaMlZ5TG1kbGRDaHZZbW9zSUNkMWNHeHZZV1JHYVd4bEp5azdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNWNiaUFnSUNCelpYTnphVzl1VFdGdVlXZGxjaWdvS1QwK2UxeHVJQ0FnSUNBZ0lDQmtiMVZ3Ykc5aFpFWnBiR1VvYjJKcUtWeHVJQ0FnSUgwc0lHOWlhaWxjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUhKbGNYVmxjM1FzWEc0Z0lDQWdkWEJzYjJGa1JtbHNaVnh1ZlZ4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xuZnVuY3Rpb24gcmVzcG9uc2UocmVzLCBvYmosIG1ldGhvZCkge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzLmRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuZW5kKG9iaik7XG4gICAgICAgIGlmIChvYmouaXNMb2dpbikge1xuICAgICAgICAgICAgdmFyIHMgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3Mocyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkxpbWl0IDwgY29uZmlnXzEuZGVmYXVsdC5yZUxvZ2luTGltaXQpIHtcbiAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9ICcnO1xuICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uSXNGcmVzaCA9IHRydWU7XG4gICAgICAgICAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXF1ZXN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kID09PSBcInVwbG9hZEZpbGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnVwbG9hZEZpbGUob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc1RyaWdnZXIocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICB2YXIgcmVhbERhdGEgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEocmVzLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRnVuY3Rpb24gc3VjY2Vzc0RhdGEgb2NjdXIgZXJyb3I6IFwiICsgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9iai5ub0NhY2hlRmxhc2gpIHtcbiAgICAgICAgICAgICAgICB0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouc3VjY2VzcyhyZWFsRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LnNldChvYmosIHJlYWxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gcmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ6Y0c5dWMyVklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzl5WlhOd2IyNXpaVWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCUTNCRExHMUVRVUUyUXp0QlFVTTNReXdyUTBGQmVVTTdRVUZEZWtNc0swTkJRWGxETzBGQlEzcERMSFZFUVVGcFJEdEJRVWRxUkN4VFFVRlRMRkZCUVZFc1EwRkRZaXhIUVVGNVJTeEZRVU42UlN4SFFVRjFReXhGUVVOMlF5eE5RVUZuUXp0SlFVVm9ReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NSMEZCUnl4RlFVRkZPMUZCUjNoQ0xFbEJRVWNzVDBGQlR5eEhRVUZITEVOQlFVTXNTVUZCU1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVNM1FpeEpRVUZKTzJkQ1FVTkJMRWRCUVVjc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WVVGRGJrTTdXVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRuUWtGRFVpeHpRa0ZCV1N4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTJ4RExFOUJRVThzUzBGQlN5eERRVUZETzJGQlEyaENPMU5CUTBvN1VVRkZSQ3d3UWtGQlowSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRk1VSXNTVUZCU1N4SFFVRkhMRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJSV0lzU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTFnc1NVRkJTVHRuUWtGRFFTeERRVUZETEVkQlFVY3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRoUVVNNVF6dFpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMkZCUTFnN1dVRkRSQ3hKUVVGSkxFTkJRVU1zUlVGQlJUdG5Ra0ZEU0N4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlEyeENPMmxDUVVGTk8yZENRVU5JTEhOQ1FVRlpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0aFFVTnlRenRUUVVOS08yRkJRVTBzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMRmxCUVdFc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRmxCUVZrc1IwRkJSeXhuUWtGQlRTeERRVUZETEZsQlFXRXNSVUZCUlR0WlFVVnNSaXhuUWtGQlRTeERRVUZETEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1dVRkRjRUlzWjBKQlFVMHNRMEZCUXl4alFVRmpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRemRDTEVWQlFVVXNRMEZCUXl4aFFVRmhMRU5CUVVNN1owSkJRMklzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1YwRkJXVHRuUWtGRGVFSXNVVUZCVVN4RlFVRkZPMjlDUVVOT0xFbEJRVWNzVFVGQlRTeExRVUZMTEZOQlFWTXNSVUZCUlR0M1FrRkRja0lzZDBKQlFXTXNRMEZCUXl4UFFVRlBMRU5CUVdsQ0xFZEJRVWNzUTBGQlF5eERRVUZETzNGQ1FVTXZRenQ1UWtGQlRTeEpRVUZITEUxQlFVMHNTMEZCU3l4WlFVRlpMRVZCUVVVN2QwSkJReTlDTEhkQ1FVRmpMRU5CUVVNc1ZVRkJWU3hEUVVGdlFpeEhRVUZITEVOQlFVTXNRMEZCUXp0eFFrRkRja1E3WjBKQlEwd3NRMEZCUXp0aFFVTktMRU5CUVVNc1EwRkJRVHRUUVVOTU8yRkJRVTBzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdXVUZGZUVNc1NVRkJTU3hSUVVGUkxFZEJRWE5ETEVWQlFVVXNRMEZCUXp0WlFVTnlSQ3hKUVVGSk8yZENRVU5CTEZGQlFWRXNSMEZCUnl4blFrRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1lVRkRNME03V1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0blFrRkRVaXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEc5RFFVRnZReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlF6TkVPMWxCUTBRc1NVRkJSeXhEUVVGclFpeEhRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMmRDUVVWd1F5eFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRXRCUVVzc1ZVRkJWU3hKUVVGSkxFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1lVRkRPVVE3V1VGRlJDeHpRa0ZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTTdVMEZEYmtNN1lVRkJUVHRaUVVWSUxITkNRVUZaTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU55UXp0TFFVTktPMU5CUVUwN1VVRkRTQ3h6UWtGQldTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRGNrTTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1VzVVVGQlVTeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibWx0Y0c5eWRDQnlaWEYxWlhOMFNHRnVaR3hsY2lCbWNtOXRJQ2N1TDNKbGNYVmxjM1JJWVc1a2JHVnlKMXh1YVcxd2IzSjBJR1Z5Y205eVNHRnVaR3hsY2lCbWNtOXRJQ2N1TDJWeWNtOXlTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQmpZV05vWlUxaGJtRm5aWElnWm5KdmJTQW5MaTlqWVdOb1pVMWhibUZuWlhJblhHNXBiWEJ2Y25RZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2lCbWNtOXRJQ2N1TDJSMWNtRjBhVzl1VW1Wd2IzSjBaWEluWEc1cGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaXdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSTdYRzVjYm1aMWJtTjBhVzl1SUhKbGMzQnZibk5sS0Z4dUlDQWdJSEpsY3pvZ2QzZ3VVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ0I4SUhkNExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFzWEc0Z0lDQWdiMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI4SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1TEZ4dUlDQWdJRzFsZEdodlpEb2dYQ0p5WlhGMVpYTjBYQ0lnZkNCY0luVndiRzloWkVacGJHVmNJbHh1S1RvZ1lXNTVJSHRjYmlBZ0lDQnBaaUFvY21WekxuTjBZWFIxYzBOdlpHVWdQVDA5SURJd01Da2dlMXh1WEc0Z0lDQWdJQ0FnSUM4dklPV0Z2T1d1dVhWd2JHOWhaRVpwYkdYb3Y1VGxtNTdubW9SeVpYTXVaR0YwWWVXUHIraUR2ZWFZcitXdGwrZXNwdVM0c2x4dUlDQWdJQ0FnSUNCcFppaDBlWEJsYjJZZ2NtVnpMbVJoZEdFZ1BUMDlJRndpYzNSeWFXNW5YQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVnpMbVJoZEdFZ1BTQktVMDlPTG5CaGNuTmxLSEpsY3k1a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdWJHOW5hV05GY25KdmNpaHZZbW9zSUhKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1bGJtUW9iMkpxS1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvYjJKcUxtbHpURzluYVc0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPZVp1K1c5bGVpdnQrYXhnbHh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSE1nUFNCY0lsd2lPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6SUQwZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVjM1ZqWTJWemN5aHlaWE11WkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2N5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdWJHOW5hV05GY25KdmNpaHZZbW9zSUhKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMjl1Wm1sbkxteHZaMmx1VkhKcFoyZGxjaUVvY21WekxtUmhkR0VwSUNZbUlHOWlhaTV5WlV4dloybHVUR2x0YVhRZ1BDQmpiMjVtYVdjdWNtVk1iMmRwYmt4cGJXbDBJU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNTVtNzViMlY1b0NCNWFTeDVwV0k3N3lNNUxpVTZZZU42SytWNXF5aDVwV3c1TGlONkxhRjZMK0g2WVdONTcydVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJpQTlJQ2NuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI1SmMwWnlaWE5vSUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIZDRMbkpsYlc5MlpWTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsSVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiR1YwWlRvZ1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppaHRaWFJvYjJRZ1BUMDlJRndpY21WeGRXVnpkRndpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYRjFaWE4wU0dGdVpHeGxjaTV5WlhGMVpYTjBLRHhKVW1WeGRXVnpkRTl3ZEdsdmJqNXZZbW9wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWW9iV1YwYUc5a0lEMDlQU0JjSW5Wd2JHOWhaRVpwYkdWY0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZ4ZFdWemRFaGhibVJzWlhJdWRYQnNiMkZrUm1sc1pTZzhTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNCtiMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTI5dVptbG5Mbk4xWTJObGMzTlVjbWxuWjJWeUtISmxjeTVrWVhSaEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1bzZsNVkrajZMK1U1WnVlNW9pUTVZcWY1NkNCWEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY21WaGJFUmhkR0U2SUhOMGNtbHVaeUI4SUVsQmJubFBZbXBsWTNRZ2ZDQkJjbkpoZVVKMVptWmxjaUE5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWVd4RVlYUmhJRDBnWTI5dVptbG5Mbk4xWTJObGMzTkVZWFJoS0hKbGN5NWtZWFJoS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLRndpUm5WdVkzUnBiMjRnYzNWalkyVnpjMFJoZEdFZ2IyTmpkWElnWlhKeWIzSTZJRndpSUNzZ1pTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlnaEtEeEpVbVZ4ZFdWemRFOXdkR2x2Ymo1dlltb3BMbTV2UTJGamFHVkdiR0Z6YUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PUzR1dVM2aHVTL25laXZnZW1odGVtZG91UzRqZW1YcXVlRGdlKzhqT1dJbWVTNGplV2JudWl3ZysrOGpPV1BxdWFZcitlOGsrV3RtT2FjZ09hV3NPYVZzT2FOcnUrOGpPVytoZVM0aSthc29laS9tK1dGcGVXR2plZVVxRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dWdlppQnZZbW91YzNWalkyVnpjeUE5UFQwZ1hDSm1kVzVqZEdsdmJsd2lJQ1ltSUc5aWFpNXpkV05qWlhOektISmxZV3hFWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9lOGsrV3RtT1d0bU9XQ3FGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGamFHVk5ZVzVoWjJWeUxuTmxkQ2h2WW1vc0lISmxZV3hFWVhSaEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPYU9wZVdQbytpL2xPV2JudVdrc2VpMHBlZWdnVnh1SUNBZ0lDQWdJQ0FnSUNBZ1pYSnliM0pJWVc1a2JHVnlMbXh2WjJsalJYSnliM0lvYjJKcUxDQnlaWE1wTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxteHZaMmxqUlhKeWIzSW9iMkpxTENCeVpYTXBPMXh1SUNBZ0lIMWNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnY21WemNHOXVjMlU3WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBmbG93XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9mbG93XCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RIYW5kbGVyXCIpO1xudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG5mdW5jdGlvbiBjaGVja1Nlc3Npb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIGlmICghc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uSXNGcmVzaCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwid3guY2hlY2tTZXNzaW9uKClcIik7XG4gICAgICAgICAgICB2YXIgc3RhcnRfMSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgd3guY2hlY2tTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KCdjaGVja1Nlc3Npb24nLCBzdGFydF8xLCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkb0xvZ2luKGNhbGxiYWNrLCBvYmopIHtcbiAgICBpZiAob2JqLmlzTG9naW4pIHtcbiAgICAgICAgdHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIgJiYgY2FsbGJhY2soKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgIGlmIChzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKSB7XG4gICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSAnJztcbiAgICAgICAgICAgIGRvTG9naW4oY2FsbGJhY2ssIG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIiAmJiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0YXR1c18xLmRlZmF1bHQubG9naW5pbmcpIHtcbiAgICAgICAgZmxvd18xLmRlZmF1bHQud2FpdCgnZG9Mb2dpbkZpbmlzaGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9Mb2dpbihjYWxsYmFjaywgb2JqKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZXRDb2RlKGNhbGxiYWNrLCBvYmopO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldENvZGUoY2FsbGJhY2ssIG9iaikge1xuICAgIHN0YXR1c18xLmRlZmF1bHQubG9naW5pbmcgPSB0cnVlO1xuICAgIGNvbnNvbGUubG9nKCd3eC5sb2dpbicpO1xuICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHd4LmxvZ2luKHtcbiAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnbG9naW4nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgY29kZTJTZXNzaW9uKHJlcy5jb2RlKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5sb2dpbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmbG93XzEuZGVmYXVsdC5lbWl0KCdkb0xvZ2luRmluaXNoZWQnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcihcIueZu+W9leWksei0pVwiLCBcIuivt+eojeWQjumHjeivlVtjb2RlIOiOt+WPluWksei0pV1cIik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXMpO1xuICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQubG9naW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmbG93XzEuZGVmYXVsdC5lbWl0KCdkb0xvZ2luRmluaXNoZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcyk7XG4gICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LmxvZ2luaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBmbG93XzEuZGVmYXVsdC5lbWl0KCdkb0xvZ2luRmluaXNoZWQnKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY29kZTJTZXNzaW9uKGNvZGUpIHtcbiAgICB2YXIgZGF0YTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgfHwge307XG4gICAgfVxuICAgIGRhdGFbY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmNvZGVOYW1lXSA9IGNvZGU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIHVybDogY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBtZXRob2Q6IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgICAgICBpc0xvZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVwb3J0OiBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ucmVwb3J0IHx8IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHM7XG4gICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uSXNGcmVzaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICAgICAgICAgIGZhaWw6IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5mYWlsIHx8IG51bGxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKGZuLCBvYmopIHtcbiAgICBjaGVja1Nlc3Npb24oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGRvTG9naW4oZm4sIG9iaik7XG4gICAgfSk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVnpjMmx2YmsxaGJtRm5aWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzTmxjM05wYjI1TllXNWhaMlZ5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzY1VOQlFTdENPMEZCUXk5Q0xEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZEY0VNc2JVUkJRVFpETzBGQlF6ZERMQ3REUVVGNVF6dEJRVU42UXl4MVJFRkJhVVE3UVVGSGFrUXNVMEZCVXl4WlFVRlpPMGxCUTJwQ0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCUXl4UFFVRlBPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMR05CUVdNc1NVRkJTU3huUWtGQlRTeERRVUZETEU5QlFVOHNSVUZCUlR0WlFVTXhReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExFTkJRVU03V1VGRGFrTXNTVUZCU1N4UFFVRkxMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0WlFVTnFReXhGUVVGRkxFTkJRVU1zV1VGQldTeERRVUZETzJkQ1FVTmFMRTlCUVU4c1JVRkJSVHR2UWtGRlRDeFBRVUZQTEVWQlFVVXNRMEZCUXp0blFrRkRaQ3hEUVVGRE8yZENRVU5FTEVsQlFVa3NSVUZCUlR0dlFrRkZSaXhuUWtGQlRTeERRVUZETEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN2IwSkJRM0JDTEU5QlFVOHNSVUZCUlN4RFFVRkRPMmRDUVVOa0xFTkJRVU03WjBKQlEwUXNVVUZCVVN4RlFVRkZPMjlDUVVOT0xFbEJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03YjBKQlF5OUNMREJDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4alFVRmpMRVZCUVVVc1QwRkJTeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTjRSQ3hEUVVGRE8yRkJRMG9zUTBGQlF5eERRVUZCTzFOQlEwdzdZVUZCVFR0WlFVTklMRTlCUVU4c1JVRkJSU3hEUVVGRE8xTkJRMkk3U1VGRFRDeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hUUVVGVExFOUJRVThzUTBGQlF5eFJRVUZyUWl4RlFVRkZMRWRCUVhWRE8wbEJRM2hGTEVsQlFVa3NSMEZCUnl4RFFVRkRMRTlCUVU4c1JVRkJSVHRSUVVWaUxFOUJRVThzVVVGQlVTeExRVUZMTEZWQlFWVXNTVUZCU1N4UlFVRlJMRVZCUVVVc1EwRkJRenRMUVVOb1JEdFRRVUZOTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3VVVGRmRrSXNTVUZCU1N4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SlFVRkpMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhoUVVGaExFVkJRVVU3V1VGRmVrVXNaMEpCUVUwc1EwRkJReXhQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETzFsQlEzQkNMRTlCUVU4c1EwRkJReXhSUVVGUkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZETVVJN1lVRkJUVHRaUVVOSUxFOUJRVThzVVVGQlVTeExRVUZMTEZWQlFWVXNTVUZCU1N4UlFVRlJMRVZCUVVVc1EwRkJRenRUUVVOb1JEdExRVU5LTzFOQlFVMHNTVUZCU1N4blFrRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJUdFJRVVY0UWl4alFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RlFVRkZPMWxCUTNwQ0xFOUJRVThzUTBGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRNMElzUTBGQlF5eERRVUZETEVOQlFVRTdTMEZEVER0VFFVRk5PMUZCUlVnc1QwRkJUeXhEUVVGRExGRkJRVkVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTXhRanRCUVVOTUxFTkJRVU03UVVGRlJDeFRRVUZUTEU5QlFVOHNRMEZCUXl4UlFVRnJRaXhGUVVGRkxFZEJRWFZETzBsQlEzaEZMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXp0SlFVTjJRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMGxCUTNoQ0xFbEJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03U1VGRGFrTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOTUxGRkJRVkVzUlVGQlJUdFpRVU5PTEVsQlFVa3NSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZETDBJc01FSkJRV2RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYWtRc1EwRkJRenRSUVVORUxFOUJRVThzUlVGQlJTeFZRVUZWTEVkQlFVYzdXVUZEYkVJc1NVRkJTU3hIUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTzJkQ1FVTldMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMjlDUVVONFFpeFJRVUZSTEVWQlFVVXNRMEZCUXp0dlFrRkRXQ3huUWtGQlRTeERRVUZETEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNN2IwSkJRM2hDTEdOQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXp0blFrRkRha01zUTBGQlF5eERRVUZETEVOQlFVRTdZVUZEVER0cFFrRkJUVHRuUWtGRFNDeHpRa0ZCV1N4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVVVzYTBKQlFXdENMRU5CUVVNc1EwRkJRenRuUWtGRGFrUXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZGYmtJc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVkQlFVY3NTMEZCU3l4RFFVRkRPMmRDUVVONFFpeGpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdZVUZEYUVNN1VVRkRUQ3hEUVVGRE8xRkJRMFFzU1VGQlNTeEZRVUZGTEZWQlFWVXNSMEZCUnp0WlFVTm1MSE5DUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOdVF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJSVzVDTEdkQ1FVRk5MRU5CUVVNc1VVRkJVU3hIUVVGSExFdEJRVXNzUTBGQlF6dFpRVU40UWl4alFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1VVRkRha01zUTBGQlF6dExRVU5LTEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hUUVVGVExGbEJRVmtzUTBGQlF5eEpRVUZaTzBsQlF6bENMRWxCUVVrc1NVRkJVeXhEUVVGRE8wbEJSV1FzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEYWtRc1NVRkJTU3hIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wdEJRM1JETzFOQlFVMDdVVUZEU0N4SlFVRkpMRWRCUVVjc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJRenRMUVVNeFF6dEpRVU5FTEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZUTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkZOVU1zVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4N1VVRkRka0lzZDBKQlFXTXNRMEZCUXl4UFFVRlBMRU5CUVVNN1dVRkRia0lzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFZEJRVWM3V1VGRE4wSXNTVUZCU1N4RlFVRkZMRWxCUVVrN1dVRkRWaXhOUVVGTkxFVkJRVVVzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hKUVVGSkxFdEJRVXM3V1VGRE5VTXNUMEZCVHl4RlFVRkZMRWxCUVVrN1dVRkRZaXhOUVVGTkxFVkJRVVVzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hKUVVGSkxHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjN1dVRkRMMFFzVDBGQlR5eEZRVUZGTEZWQlFWVXNRMEZCVXp0blFrRkRlRUlzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU51UWl4blFrRkJUU3hEUVVGRExHTkJRV01zUjBGQlJ5eEpRVUZKTEVOQlFVTTdaMEpCUlRkQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUlVGQlJUdHZRa0ZETVVJc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETzI5Q1FVTjJSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzNkQ1FVTldMRWRCUVVjc1JVRkJSU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RanQzUWtGRE5VSXNTVUZCU1N4RlFVRkZMRTFCUVUwc1EwRkJReXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXp0eFFrRkRja01zUTBGQlF5eERRVUZCTzJsQ1FVTk1PMmRDUVVORUxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTTdiMEpCUTFZc1IwRkJSeXhGUVVGRkxHZENRVUZOTEVOQlFVTXNWMEZCVnp0dlFrRkRka0lzU1VGQlNTeEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1QwRkJUenRwUWtGRGRrSXNRMEZCUXl4RFFVRkRPMmRDUVVOSUxFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEY2tJc1EwRkJRenRaUVVORUxGRkJRVkVzUlVGQlJTeGpRVUZoTEVOQlFVTTdXVUZEZUVJc1NVRkJTU3hGUVVGRkxHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1NVRkJTU3hKUVVGSk8xTkJRM2hDTEVOQlFVTXNRMEZCUVR0SlFVTjRRaXhEUVVGRExFTkJRVU1zUTBGQlFUdEJRVU5PTEVOQlFVTTdRVUZGUkN4dFFrRkJaU3hWUVVGRExFVkJRVmtzUlVGQlJTeEhRVUYxUXp0SlFVTnFSU3haUVVGWkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEYUVJc1QwRkJUeXhQUVVGUExFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkJPMGxCUXpOQ0xFTkJRVU1zUTBGQlF5eERRVUZETzBGQlExQXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR1pzYjNjZ1puSnZiU0FuTGk0dmRYUnBiQzltYkc5M0oxeHVhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YRzVwYlhCdmNuUWdZMjl1Wm1sbklHWnliMjBnSnk0dUwzTjBiM0psTDJOdmJtWnBaeWRjYm1sdGNHOXlkQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpQm1jbTl0SUNjdUwzSmxjWFZsYzNSSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUdWeWNtOXlTR0Z1Wkd4bGNpQm1jbTl0SUNjdUwyVnljbTl5U0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlJR1p5YjIwZ0p5NHZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpZGNibWx0Y0c5eWRDQjdTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dWZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0k3WEc1Y2JtWjFibU4wYVc5dUlHTm9aV05yVTJWemMybHZiaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvS0hKbGMyOXNkbVVwUFQ1N1hHNGdJQ0FnSUNBZ0lHbG1JQ2doYzNSaGRIVnpMbk5sYzNOcGIyNUpjMFp5WlhOb0lDWW1JSE4wWVhSMWN5NXpaWE56YVc5dUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG14dlp5aGNJbmQ0TG1Ob1pXTnJVMlZ6YzJsdmJpZ3BYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhOMFlYSjBJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IzZUM1amFHVmphMU5sYzNOcGIyNG9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4xWTJObGMzTTZJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNTVtNzViMlY1b0NCNXB5SjVwV0k3N3lNNUxpVTVaeW81cHlzNTVTZjVaRzk1WkdvNXB5ZjVZYUY1cGVnNmFHNzVZYU41cU9BNmFxTTVMcUdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGMyOXNkbVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWmhhV3c2SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzU1bTc1YjJWNW9DQjZMK0g1cHlmWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ0p5YzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGMyOXNkbVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZiWEJzWlhSbE9pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JsYm1RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1eVpYQnZjblFvSjJOb1pXTnJVMlZ6YzJsdmJpY3NJSE4wWVhKMExDQmxibVFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmtiMHh2WjJsdUtHTmhiR3hpWVdOck9pQkdkVzVqZEdsdmJpd2diMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI4SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1S1NCN1hHNGdJQ0FnYVdZZ0tHOWlhaTVwYzB4dloybHVLU0I3WEc0Z0lDQWdJQ0FnSUM4dklPZVp1K1c5bGVhT3BlV1BvKys4ak9lYnRPYU9wZWFVdnVpL2gxeHVJQ0FnSUNBZ0lDQjBlWEJsYjJZZ1kyRnNiR0poWTJzZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlBbUppQmpZV3hzWW1GamF5Z3BPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9jM1JoZEhWekxuTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdMeThnNTd5VDVhMlk1TGl0NXB5SmMyVnpjMmx2Ymx4dUlDQWdJQ0FnSUNCcFppQW9jM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbElDWW1JRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwSUQ0Z2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZWl1dnVlOXJ1YWNyT1djc0hObGMzTnBiMjdudkpQbHJaam1sN2JwbDdUdnZJemt1SlRudkpQbHJaam1sN2JwbDdUbHQ3TGxpTEJjYmlBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ0p5YzdYRzRnSUNBZ0lDQWdJQ0FnSUNCa2IweHZaMmx1S0dOaGJHeGlZV05yTENCdlltb3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RIbHdaVzltSUdOaGJHeGlZV05ySUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lnSmlZZ1kyRnNiR0poWTJzb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9jM1JoZEhWekxteHZaMmx1YVc1bktTQjdYRzRnSUNBZ0lDQWdJQzh2SU9hdG8rV2NxT2VadStXOWxlUzRyZSs4ak9pdnQrYXhndWk5cnVpdm91ZW9qZVdRanUrOGpPbUJ2K1dGamVtSGplV2tqZWl3ZytlVXFPZVp1K1c5bGVhT3BlV1BvMXh1SUNBZ0lDQWdJQ0JtYkc5M0xuZGhhWFFvSjJSdlRHOW5hVzVHYVc1cGMyaGxaQ2NzSUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdSdlRHOW5hVzRvWTJGc2JHSmhZMnNzSUc5aWFpazdYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdMeThnNTd5VDVhMlk1TGl0NXBlZ2MyVnpjMmx2Ymx4dUlDQWdJQ0FnSUNCblpYUkRiMlJsS0dOaGJHeGlZV05yTENCdlltb3BPMXh1SUNBZ0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z1oyVjBRMjlrWlNoallXeHNZbUZqYXpvZ1JuVnVZM1JwYjI0c0lHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJSE4wWVhSMWN5NXNiMmRwYm1sdVp5QTlJSFJ5ZFdVN1hHNGdJQ0FnWTI5dWMyOXNaUzVzYjJjb0ozZDRMbXh2WjJsdUp5azdYRzRnSUNBZ2JHVjBJSE4wWVhKMElEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEc0Z0lDQWdkM2d1Ykc5bmFXNG9lMXh1SUNBZ0lDQWdJQ0JqYjIxd2JHVjBaVG9nWm5WdVkzUnBiMjRnS0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHVnVaQ0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTV5WlhCdmNuUW9KMnh2WjJsdUp5d2djM1JoY25Rc0lHVnVaQ2s3WEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lITjFZMk5sYzNNNklHWjFibU4wYVc5dUlDaHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTXVZMjlrWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZaR1V5VTJWemMybHZiaWh5WlhNdVkyOWtaU2t1ZEdobGJpZ29LVDArZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hzWW1GamF5Z3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRHRjBkWE11Ykc5bmFXNXBibWNnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pteHZkeTVsYldsMEtDZGtiMHh2WjJsdVJtbHVhWE5vWldRbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZja2hoYm1Sc1pYSXVaRzlGY25KdmNpaGNJdWVadStXOWxlV2tzZWkwcFZ3aUxDQmNJdWl2dCtlb2plV1FqdW1IamVpdmxWdGpiMlJsSU9pT3QrV1BsdVdrc2VpMHBWMWNJaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpaHlaWE1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPZVp1K1c5bGVXa3NlaTBwZSs4ak9pbm8rbVpwT21VZ2UrOGpPbVlzdWF0b3VhdHUrbVVnVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4wWVhSMWN5NXNiMmRwYm1sdVp5QTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnNiM2N1WlcxcGRDZ25aRzlNYjJkcGJrWnBibWx6YUdWa0p5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJR1poYVd3NklHWjFibU4wYVc5dUlDaHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1Z5Y205eVNHRnVaR3hsY2k1emVYTjBaVzFGY25KdmNpaHZZbW9zSUhKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbm1idmx2WlhscExIb3RLWHZ2SXpvcDZQcG1hVHBsSUh2dkl6cG1MTG1yYUxtcmJ2cGxJRmNiaUFnSUNBZ0lDQWdJQ0FnSUhOMFlYUjFjeTVzYjJkcGJtbHVaeUE5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pteHZkeTVsYldsMEtDZGtiMHh2WjJsdVJtbHVhWE5vWldRbktUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMHBYRzU5WEc1Y2JtWjFibU4wYVc5dUlHTnZaR1V5VTJWemMybHZiaWhqYjJSbE9pQlRkSEpwYm1jcElIdGNiaUFnSUNCc1pYUWdaR0YwWVRvZ1lXNTVPMXh1SUNBZ0lDOHZJR052WkdWVWIxTmxjM05wYjI0dVpHRjBZZWFVcithTWdlV0h2ZWFWc0Z4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dVpHRjBZU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUdSaGRHRWdQU0JqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1a1lYUmhLQ2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdaR0YwWVNBOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbVJoZEdFZ2ZId2dlMzA3WEc0Z0lDQWdmVnh1SUNBZ0lHUmhkR0ZiWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dVkyOWtaVTVoYldVaFhTQTlJR052WkdVN1hHNWNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1VcFBUNTdYRzRnSUNBZ0lDQWdJSEpsY1hWbGMzUklZVzVrYkdWeUxuSmxjWFZsYzNRb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZFhKc09pQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTUxY213c1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaE9pQmtZWFJoTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdiV1YwYUc5a09pQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTV0WlhSb2IyUWdmSHdnSjBkRlZDY3NYRzRnSUNBZ0lDQWdJQ0FnSUNCcGMweHZaMmx1T2lCMGNuVmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVndiM0owT2lCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNXlaWEJ2Y25RZ2ZId2dZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1ZFhKc0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWalkyVnpjem9nWm5WdVkzUnBiMjRnS0hNNklGTjBjbWx1WnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ2N6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmtselJuSmxjMmdnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9XbWd1YWVuT2FjaWVpdXZ1ZTlydWFjck9XY3NITmxjM05wYjI3b3Y0Zm1uSi9tbDdicGw3UmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21WVWFXMWxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrZ0t5QnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaVlJwYldVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0U2SUZOMGNtbHVaeWh6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZDNndWMyVjBVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1U2SUdaMWJtTjBhVzl1SUNncElIdDlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1ptRnBiRG9nWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dVptRnBiQ0I4ZkNCdWRXeHNYRzRnSUNBZ0lDQWdJSDBnWVhNZ1NWSmxjWFZsYzNSUGNIUnBiMjRwWEc0Z0lDQWdmU2xjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tHWnVPaUJHZFc1amRHbHZiaXdnYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUtUMCtlMXh1SUNBZ0lHTm9aV05yVTJWemMybHZiaWdwTG5Sb1pXNG9LQ2s5UG50Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSdlRHOW5hVzRvWm00c0lHOWlhaWxjYmlBZ0lDQjlLVHRjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICBzZXNzaW9uTmFtZTogXCJzZXNzaW9uXCIsXG4gICAgbG9naW5UcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGNvZGVUb1Nlc3Npb246IHtcbiAgICAgICAgdXJsOiBcIlwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9LFxuICAgIHN1Y2Nlc3NUcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgdXJsUGVyZml4OiBcIlwiLFxuICAgIHN1Y2Nlc3NEYXRhOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICBkb05vdENoZWNrU2Vzc2lvbjogZmFsc2UsXG4gICAgZXJyb3JUaXRsZTogXCLmk43kvZzlpLHotKVcIixcbiAgICBlcnJvckNvbnRlbnQ6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIHJlTG9naW5MaW1pdDogMyxcbiAgICBlcnJvckNhbGxiYWNrOiBudWxsLFxuICAgIHJlcG9ydENHSTogZmFsc2UsXG4gICAgbW9ja0pzb246IGZhbHNlLFxuICAgIGdsb2JhbERhdGE6IGZhbHNlLFxuICAgIHNlc3Npb25FeHBpcmVLZXk6IFwic2Vzc2lvbkV4cGlyZUtleVwiXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdENvbmZpZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwyTnZibVpwWnk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVVZCTEVsQlFVMHNZVUZCWVN4SFFVRm5RanRKUVVNdlFpeFhRVUZYTEVWQlFVVXNVMEZCVXp0SlFVTjBRaXhaUVVGWk8xRkJRMUlzVDBGQlR5eExRVUZMTEVOQlFVRTdTVUZEYUVJc1EwRkJRenRKUVVORUxHRkJRV0VzUlVGQlJUdFJRVU5ZTEVkQlFVY3NSVUZCUlN4RlFVRkZPMUZCUTFBc1QwRkJUeXhGUVVGRkxHTkJRVTBzUTBGQlF6dExRVU51UWp0SlFVTkVMR05CUVdNN1VVRkRWaXhQUVVGUExFbEJRVWtzUTBGQlFUdEpRVU5tTEVOQlFVTTdTVUZEUkN4VFFVRlRMRVZCUVVVc1JVRkJSVHRKUVVOaUxGZEJRVmNzV1VGQlF5eEhRVUZSTzFGQlEyaENMRTlCUVU4c1IwRkJSeXhEUVVGQk8wbEJRMlFzUTBGQlF6dEpRVU5FTEdsQ1FVRnBRaXhGUVVGRkxFdEJRVXM3U1VGRGVFSXNWVUZCVlN4RlFVRkZMRTFCUVUwN1NVRkRiRUlzV1VGQldTeFpRVUZETEVkQlFWRTdVVUZEYWtJc1QwRkJUeXhIUVVGSExFTkJRVUU3U1VGRFpDeERRVUZETzBsQlEwUXNXVUZCV1N4RlFVRkZMRU5CUVVNN1NVRkRaaXhoUVVGaExFVkJRVVVzU1VGQlNUdEpRVU51UWl4VFFVRlRMRVZCUVVVc1MwRkJTenRKUVVOb1FpeFJRVUZSTEVWQlFVVXNTMEZCU3p0SlFVTm1MRlZCUVZVc1JVRkJSU3hMUVVGTE8wbEJSV3BDTEdkQ1FVRm5RaXhGUVVGRkxHdENRVUZyUWp0RFFVTjJReXhEUVVGRE8wRkJSVVlzYTBKQlFXVXNZVUZCWVN4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHNnU1VsdWFYUlBjSFJwYjI0Z2ZTQm1jbTl0SUNjdUxpOXBiblJsY21aaFkyVW5YRzVjYm1OdmJuTjBJR1JsWm1GMWJIUkRiMjVtYVdjNklFbEpibWwwVDNCMGFXOXVJRDBnZTF4dUlDQWdJSE5sYzNOcGIyNU9ZVzFsT2lCY0luTmxjM05wYjI1Y0lpeGNiaUFnSUNCc2IyZHBibFJ5YVdkblpYSW9LU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpWeHVJQ0FnSUgwc1hHNGdJQ0FnWTI5a1pWUnZVMlZ6YzJsdmJqb2dlMXh1SUNBZ0lDQWdJQ0IxY213NklGd2lYQ0lzWEc0Z0lDQWdJQ0FnSUhOMVkyTmxjM002SUNncFBUNGdlMzFjYmlBZ0lDQjlMRnh1SUNBZ0lITjFZMk5sYzNOVWNtbG5aMlZ5S0NrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVnh1SUNBZ0lIMHNYRzRnSUNBZ2RYSnNVR1Z5Wm1sNE9pQmNJbHdpTEZ4dUlDQWdJSE4xWTJObGMzTkVZWFJoS0hKbGN6b2dZVzU1S1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTmNiaUFnSUNCOUxGeHVJQ0FnSUdSdlRtOTBRMmhsWTJ0VFpYTnphVzl1T2lCbVlXeHpaU3hjYmlBZ0lDQmxjbkp2Y2xScGRHeGxPaUJjSXVhVGplUzluT1drc2VpMHBWd2lMRnh1SUNBZ0lHVnljbTl5UTI5dWRHVnVkQ2h5WlhNNklHRnVlU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WelhHNGdJQ0FnZlN4Y2JpQWdJQ0J5WlV4dloybHVUR2x0YVhRNklETXNYRzRnSUNBZ1pYSnliM0pEWVd4c1ltRmphem9nYm5Wc2JDeGNiaUFnSUNCeVpYQnZjblJEUjBrNklHWmhiSE5sTEZ4dUlDQWdJRzF2WTJ0S2MyOXVPaUJtWVd4elpTeGNiaUFnSUNCbmJHOWlZV3hFWVhSaE9pQm1ZV3h6WlN4Y2JpQWdJQ0F2THlCelpYTnphVzl1NVp5bzVweXM1Wnl3NTd5VDVhMlk1NXFFYTJWNVhHNGdJQ0FnYzJWemMybHZia1Y0Y0dseVpVdGxlVG9nWENKelpYTnphVzl1Ulhod2FYSmxTMlY1WENKY2JuMDdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR1JsWm1GMWJIUkRiMjVtYVdjN1hHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2Vzc2lvbjogJycsXG4gICAgc2Vzc2lvbkV4cGlyZVRpbWU6IG51bGwsXG4gICAgc2Vzc2lvbkV4cGlyZTogSW5maW5pdHksXG4gICAgc2Vzc2lvbklzRnJlc2g6IGZhbHNlLFxuICAgIGxvZ2luaW5nOiBmYWxzZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMzUmhkSFZ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwzTjBZWFIxY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTEd0Q1FVRmxPMGxCUTFnc1QwRkJUeXhGUVVGRkxFVkJRVms3U1VGRmNrSXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNUdEpRVVYyUWl4aFFVRmhMRVZCUVVVc1VVRkJVVHRKUVVOMlFpeGpRVUZqTEVWQlFVVXNTMEZCWjBJN1NVRkZhRU1zVVVGQlVTeEZRVUZGTEV0QlFXZENPME5CUTNSQ0xFTkJRVUVpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKbGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjMlZ6YzJsdmJqb2dKeWNnWVhNZ2MzUnlhVzVuTEZ4dUlDQWdJQzh2SUhObGMzTnBiMjdsbktqbW5LemxuTERudkpQbHJaam5tb1RtbklubWxZam1sN2JwbDdSY2JpQWdJQ0J6WlhOemFXOXVSWGh3YVhKbFZHbHRaVG9nYm5Wc2JDeGNiaUFnSUNBdkx5QnpaWE56YVc5dTZMK0g1cHlmNTVxRTVwZTI2WmUwNTRLNVhHNGdJQ0FnYzJWemMybHZia1Y0Y0dseVpUb2dTVzVtYVc1cGRIa3NYRzRnSUNBZ2MyVnpjMmx2YmtselJuSmxjMmc2SUdaaGJITmxJR0Z6SUdKdmIyeGxZVzRzWEc0Z0lDQWdMeThnNXEyajVaeW81NW03NWIyVjVMaXQ3N3lNNVlXMjVMdVc2SyszNXJHQzZMMnU2SytpNTZpTjVaQ083N3lNNllHLzVZV042WWVONWFTTjZMQ0Q1NVNvNTVtNzViMlY1bzZsNVkralhHNGdJQ0FnYkc5bmFXNXBibWM2SUdaaGJITmxJR0Z6SUdKdmIyeGxZVzVjYm4wZ1lYTWdZVzU1WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdG9yZSA9IHt9O1xuZnVuY3Rpb24gZW1pdChrZXkpIHtcbiAgICB2YXIgZmxvdyA9IGdldEZsb3coa2V5KTtcbiAgICB2YXIgY3VycmVudExlbmd0aCA9IGZsb3cud2FpdGluZ0xpc3QubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VycmVudExlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IGZsb3cud2FpdGluZ0xpc3Quc2hpZnQoKTtcbiAgICAgICAgdHlwZW9mIGNhbGxiYWNrID09IFwiZnVuY3Rpb25cIiAmJiBjYWxsYmFjaygpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHdhaXQoa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBmbG93ID0gZ2V0RmxvdyhrZXkpO1xuICAgIGZsb3cud2FpdGluZ0xpc3QucHVzaChjYWxsYmFjayk7XG59XG5mdW5jdGlvbiBnZXRGbG93KGtleSkge1xuICAgIGlmICghc3RvcmVba2V5XSkge1xuICAgICAgICBzdG9yZVtrZXldID0ge1xuICAgICAgICAgICAgd2FpdGluZ0xpc3Q6IFtdXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzdG9yZVtrZXldO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHdhaXQ6IHdhaXQsXG4gICAgZW1pdDogZW1pdFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpteHZkeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTFkR2xzTDJac2IzY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeEpRVUZKTEV0QlFVc3NSMEZCVVN4RlFVRkZMRU5CUVVNN1FVRkZjRUlzVTBGQlV5eEpRVUZKTEVOQlFVTXNSMEZCVnp0SlFVTnlRaXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRlRUlzU1VGQlNTeGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRE5VTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEdGQlFXRXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOd1F5eEpRVUZKTEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzFGQlEzaERMRTlCUVU4c1VVRkJVU3hKUVVGSkxGVkJRVlVzU1VGQlNTeFJRVUZSTEVWQlFVVXNRMEZCUXp0TFFVTXZRenRCUVVOTUxFTkJRVU03UVVGRlJDeFRRVUZUTEVsQlFVa3NRMEZCUXl4SFFVRlhMRVZCUVVVc1VVRkJhMEk3U1VGRGVrTXNTVUZCU1N4SlFVRkpMRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEzaENMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkJPMEZCUTI1RExFTkJRVU03UVVGRlJDeFRRVUZUTEU5QlFVOHNRMEZCUXl4SFFVRlhPMGxCUTNoQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVN1VVRkRZaXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVYzdXVUZEVkN4WFFVRlhMRVZCUVVVc1JVRkJSVHRUUVVOc1FpeERRVUZCTzB0QlEwbzdTVUZGUkN4UFFVRlBMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU4wUWl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEpRVUZKTEUxQlFVRTdTVUZEU2l4SlFVRkpMRTFCUVVFN1EwRkRVQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2liR1YwSUhOMGIzSmxPaUJoYm5rZ1BTQjdmVHRjYmx4dVpuVnVZM1JwYjI0Z1pXMXBkQ2hyWlhrNklITjBjbWx1WnlrZ2UxeHVJQ0FnSUd4bGRDQm1iRzkzSUQwZ1oyVjBSbXh2ZHloclpYa3BPMXh1SUNBZ0lHeGxkQ0JqZFhKeVpXNTBUR1Z1WjNSb0lEMGdabXh2ZHk1M1lXbDBhVzVuVEdsemRDNXNaVzVuZEdnN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCamRYSnlaVzUwVEdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUdOaGJHeGlZV05ySUQwZ1pteHZkeTUzWVdsMGFXNW5UR2x6ZEM1emFHbG1kQ2dwTzF4dUlDQWdJQ0FnSUNCMGVYQmxiMllnWTJGc2JHSmhZMnNnUFQwZ1hDSm1kVzVqZEdsdmJsd2lJQ1ltSUdOaGJHeGlZV05yS0NrN1hHNGdJQ0FnZlZ4dWZWeHVYRzVtZFc1amRHbHZiaUIzWVdsMEtHdGxlVG9nYzNSeWFXNW5MQ0JqWVd4c1ltRmphem9nUm5WdVkzUnBiMjRwSUh0Y2JpQWdJQ0IyWVhJZ1pteHZkeUE5SUdkbGRFWnNiM2NvYTJWNUtUdGNiaUFnSUNCbWJHOTNMbmRoYVhScGJtZE1hWE4wTG5CMWMyZ29ZMkZzYkdKaFkyc3BYRzU5WEc1Y2JtWjFibU4wYVc5dUlHZGxkRVpzYjNjb2EyVjVPaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvSVhOMGIzSmxXMnRsZVYwcElIdGNiaUFnSUNBZ0lDQWdjM1J2Y21WYmEyVjVYU0E5SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSGRoYVhScGJtZE1hWE4wT2lCYlhWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUhOMGIzSmxXMnRsZVYwN1hHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQjNZV2wwTEZ4dUlDQWdJR1Z0YVhSY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gc2hvdyh0eHQpIHtcbiAgICB3eC5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogdHlwZW9mIHR4dCA9PT0gJ2Jvb2xlYW4nID8gJ+WKoOi9veS4rScgOiB0eHQsXG4gICAgICAgIGljb246ICdsb2FkaW5nJyxcbiAgICAgICAgbWFzazogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDYwMDAwXG4gICAgfSk7XG59XG5mdW5jdGlvbiBoaWRlKCkge1xuICAgIHd4LmhpZGVUb2FzdCh7fSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2hvdzogc2hvdyxcbiAgICBoaWRlOiBoaWRlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYkc5aFpHbHVaeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTFkR2xzTDJ4dllXUnBibWN1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3hUUVVGVExFbEJRVWtzUTBGQlF5eEhRVUZ4UWp0SlFVTXZRaXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETzFGQlExUXNTMEZCU3l4RlFVRkZMRTlCUVU4c1IwRkJSeXhMUVVGTExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSE8xRkJRemRETEVsQlFVa3NSVUZCUlN4VFFVRlRPMUZCUTJZc1NVRkJTU3hGUVVGRkxFbEJRVWs3VVVGRFZpeFJRVUZSTEVWQlFVVXNTMEZCU3p0TFFVTnNRaXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4SlFVRkpPMGxCUTFRc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTnlRaXhEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4SlFVRkpMRTFCUVVFN1NVRkRTaXhKUVVGSkxFMUJRVUU3UTBGRFVDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpuVnVZM1JwYjI0Z2MyaHZkeWgwZUhRNklHSnZiMnhsWVc0Z2ZDQnpkSEpwYm1jcElIdGNiaUFnSUNCM2VDNXphRzkzVkc5aGMzUW9lMXh1SUNBZ0lDQWdJQ0IwYVhSc1pUb2dkSGx3Wlc5bUlIUjRkQ0E5UFQwZ0oySnZiMnhsWVc0bklEOGdKK1dLb09pOXZlUzRyU2NnT2lCMGVIUXNYRzRnSUNBZ0lDQWdJR2xqYjI0NklDZHNiMkZrYVc1bkp5eGNiaUFnSUNBZ0lDQWdiV0Z6YXpvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnWkhWeVlYUnBiMjQ2SURZd01EQXdYRzRnSUNBZ2ZTbGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FHbGtaU2dwSUh0Y2JpQWdJQ0IzZUM1b2FXUmxWRzloYzNRb2UzMHBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hHNGdJQ0FnYzJodmR5eGNiaUFnSUNCb2FXUmxYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBzZXRQYXJhbXModXJsLCBwYXJhbXMpIHtcbiAgICBpZiAodXJsID09PSB2b2lkIDApIHsgdXJsID0gJyc7IH1cbiAgICB2YXIgcXVlcnlTdHJpbmdJbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgdmFyIGt2cCA9IHt9O1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgdmFyIG9sZFF1ZXJ5U3RyaW5nID0gdXJsLnN1YnN0cihxdWVyeVN0cmluZ0luZGV4ICsgMSkuc3BsaXQoJyYnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGRRdWVyeVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGt2ID0gb2xkUXVlcnlTdHJpbmdbaV0uc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBrdnAgPSBfX2Fzc2lnbih7fSwga3ZwLCBwYXJhbXMpO1xuICAgIHZhciBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSArIFwiPVwiICsgZW5jb2RlVVJJKGt2cFtrZXldKTtcbiAgICB9KS5qb2luKCcmJyk7XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gdXJsLnN1YnN0cmluZygwLCBxdWVyeVN0cmluZ0luZGV4ICsgMSkgKyBxdWVyeVN0cmluZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1cmwgKyBcIj9cIiArIHF1ZXJ5U3RyaW5nO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXRQYXJhbXM6IHNldFBhcmFtc1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYSnNMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzVjBhV3d2ZFhKc0xuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3UVVGQlFTeFRRVUZUTEZOQlFWTXNRMEZCUXl4SFFVRm5RaXhGUVVGRkxFMUJRV003U1VGQmFFTXNiMEpCUVVFc1JVRkJRU3hSUVVGblFqdEpRVU12UWl4SlFVRkpMR2RDUVVGblFpeEhRVUZYTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGFFUXNTVUZCU1N4SFFVRkhMRWRCUVZFc1JVRkJSU3hEUVVGRE8wbEJRMnhDTEVsQlFVa3NaMEpCUVdkQ0xFbEJRVWtzUTBGQlF5eEZRVUZGTzFGQlEzWkNMRWxCUVVrc1kwRkJZeXhIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMnBGTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eGpRVUZqTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRelZETEVsQlFVa3NSVUZCUlN4SFFVRnJRaXhqUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM0pFTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVFN1UwRkRja0k3UzBGRFNqdEpRVVZFTEVkQlFVY3NaMEpCUVU4c1IwRkJSeXhGUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETzBsQlJURkNMRWxCUVVrc1YwRkJWeXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVUVzUjBGQlJ6dFJRVU4wUXl4UFFVRlZMRWRCUVVjc1UwRkJTU3hUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkhMRU5CUVVFN1NVRkRNVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSV0lzU1VGQlNTeG5Ra0ZCWjBJc1NVRkJTU3hEUVVGRExFVkJRVVU3VVVGRGRrSXNUMEZCVHl4SFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeG5Ra0ZCWjBJc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eFhRVUZYTEVOQlFVRTdTMEZET1VRN1UwRkJUVHRSUVVOSUxFOUJRVThzUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4WFFVRlhMRU5CUVVFN1MwRkRha003UVVGRlRDeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hUUVVGVExGZEJRVUU3UTBGRFdpeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpuVnVZM1JwYjI0Z2MyVjBVR0Z5WVcxektIVnliRG9nYzNSeWFXNW5JRDBnSnljc0lIQmhjbUZ0Y3pvZ2IySnFaV04wS1NCN1hHNGdJQ0FnYkdWMElIRjFaWEo1VTNSeWFXNW5TVzVrWlhnNklHNTFiV0psY2lBOUlIVnliQzVwYm1SbGVFOW1LQ2MvSnlrN1hHNGdJQ0FnYkdWMElHdDJjRG9nWVc1NUlEMGdlMzA3WEc0Z0lDQWdhV1lnS0hGMVpYSjVVM1J5YVc1blNXNWtaWGdnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2IyeGtVWFZsY25sVGRISnBibWNnUFNCMWNtd3VjM1ZpYzNSeUtIRjFaWEo1VTNSeWFXNW5TVzVrWlhnZ0t5QXhLUzV6Y0d4cGRDZ25KaWNwTzF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHOXNaRkYxWlhKNVUzUnlhVzVuTG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdhM1k2SUVGeWNtRjVQSE4wY21sdVp6NGdQU0J2YkdSUmRXVnllVk4wY21sdVoxdHBYUzV6Y0d4cGRDZ25QU2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhM1p3VzJ0Mld6QmRYU0E5SUd0Mld6RmRYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnJkbkFnUFNCN0xpNHVhM1p3TENBdUxpNXdZWEpoYlhOOU8xeHVYRzRnSUNBZ2JHVjBJSEYxWlhKNVUzUnlhVzVuSUQwZ1QySnFaV04wTG10bGVYTW9hM1p3S1M1dFlYQW9hMlY1SUQwK0lIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHQWtlMnRsZVgwOUpIdGxibU52WkdWVlVra29hM1p3VzJ0bGVWMHBmV0JjYmlBZ0lDQjlLUzVxYjJsdUtDY21KeWs3WEc1Y2JpQWdJQ0JwWmlBb2NYVmxjbmxUZEhKcGJtZEpibVJsZUNBK1BTQXdLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIxY213dWMzVmljM1J5YVc1bktEQXNJSEYxWlhKNVUzUnlhVzVuU1c1a1pYZ2dLeUF4S1NBcklIRjFaWEo1VTNSeWFXNW5YRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDQXJJRndpUDF3aUlDc2djWFZsY25sVGRISnBibWRjYmlBZ0lDQjlYRzVjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUhObGRGQmhjbUZ0YzF4dWZWeHVJbDE5Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2Zsb3cudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3V0aWwvbG9hZGluZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdXRpbC91cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLDJtRDs7Ozs7Ozs7Ozs7O0FDYjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QztBQUNBO0FBQ0EsQ0FBQztBQUNELDJDQUEyQyxtYTs7Ozs7Ozs7Ozs7O0FDTjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxt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O0FBQ0E7QUFDQSwyQ0FBMkMsbS9EOzs7Ozs7Ozs7Ozs7QUM3QjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxtZ0M7Ozs7Ozs7Ozs7OztBQ2pCOUI7QUFDYjtBQUNBO0FBQ0EsZ0RBQWdELE9BQU87QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0EseUJBQXlCLFVBQVU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsKzVFIiwiZmlsZSI6IndlUmVxdWVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvbmZpZ1Jlc3VsdCA9IHtcbiAgICAgICAgdXJsUGVyZml4OiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZVRpbWU6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUsXG4gICAgICAgIHNlc3Npb25FeHBpcmVLZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlXG4gICAgfTtcbiAgICByZXR1cm4gY29uZmlnUmVzdWx0O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwUTI5dVptbG5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyRndhUzluWlhSRGIyNW1hV2N1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZEY0VNc01FTkJRVzlETzBGQllYQkRMRzFDUVVGbE8wbEJRMWdzU1VGQlRTeFpRVUZaTEVkQlFYRkNPMUZCUTI1RExGTkJRVk1zUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRk5CUVZNN1VVRkRNMElzYVVKQlFXbENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJN1VVRkRNME1zWjBKQlFXZENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJN1VVRkRla01zWVVGQllTeEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1lVRkJZVHRMUVVOMFF5eERRVUZCTzBsQlEwUXNUMEZCVHl4WlFVRlpMRU5CUVVNN1FVRkRlRUlzUTBGQlF5eEZRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JKUjJWMFEyOXVabWxuVW1WemRXeDBlMXh1SUNBZ0lDOHFJT1djcU9lN2hPUzd0dVdJbmVXbmkrV01sdWFYdHVTOG9PV0ZwZWVhaE9pdnQrYXhnbFZTVE9lYWhPV2J1dVd1bXVXSmplZThnQ0FxTDF4dUlDQWdJSFZ5YkZCbGNtWnBlRDg2SUhOMGNtbHVaeUI4SUNnb0tTQTlQaUJ6ZEhKcGJtY3BPMXh1SUNBZ0lDOHFJT1djcU9lN2hPUzd0dVdJbmVXbmkrV01sdWFYdHVTOG9PV0ZwZWVhaE9lVXFPYUl0K2VadSttWmh1YUFnZWl1dnVlOXJ1YWNyT1djc09lOGsrV3RtT2FYdHVtWHRDQXFMMXh1SUNBZ0lITmxjM05wYjI1RmVIQnBjbVZVYVcxbFB6b2diblZ0WW1WeU8xeHVJQ0FnSUM4cUlPV2NxT2U3aE9TN3R1V0luZVduaStXTWx1YVh0dVM4b09XRnBlZWFoT2VVcU9hSXQrZVp1K21aaHVhQWdlYWNyT1djc09lOGsrV3RtT2FYdHVtWHRGTjBiM0poWjJYbm1vUnJaWGtnS2k5Y2JpQWdJQ0J6WlhOemFXOXVSWGh3YVhKbFMyVjVQem9nYzNSeWFXNW5PMXh1SUNBZ0lDOHFJT2VVcU9hSXQrZVp1K21aaHVhQWdlYWNyT1djc09lOGsrV3RtT2kvaCthY24rZWFoT2FYdHVtWHRPYUlzeUFxTDF4dUlDQWdJSE5sYzNOcGIyNUZlSEJwY21VL09pQnVkVzFpWlhJN1hHNGdJSDFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0NrZ1BUNGdlMXh1SUNBZ0lHTnZibk4wSUdOdmJtWnBaMUpsYzNWc2RDQTZTVWRsZEVOdmJtWnBaMUpsYzNWc2RDQTlJSHRjYmlBZ0lDQWdJQ0FnZFhKc1VHVnlabWw0T2lCamIyNW1hV2N1ZFhKc1VHVnlabWw0TEZ4dUlDQWdJQ0FnSUNCelpYTnphVzl1Ulhod2FYSmxWR2x0WlRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsTEZ4dUlDQWdJQ0FnSUNCelpYTnphVzl1Ulhod2FYSmxTMlY1T2lCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU3hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpUb2djM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVZjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdOdmJtWnBaMUpsYzNWc2REdGNibjA3WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb247XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZaMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVVZ3UXl4dFFrRkJaVHRKUVVOWUxFOUJRVThzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVFN1FVRkRla0lzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElDZ3BJRDArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjM1JoZEhWekxuTmxjM05wYjI1Y2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnXzEuZGVmYXVsdCwgcGFyYW1zKTtcbiAgICBpZiAocGFyYW1zLnNlc3Npb25OYW1lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lKSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignd3guZ2V0U3RvcmFnZVN5bmM6ZmFpbCwgY2FuIG5vdCBnZXQgc2Vzc2lvbi4nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyYW1zLnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkgfHwgSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3d4LmdldFN0b3JhZ2VTeW5jOmZhaWwsIGNhbiBub3QgZ2V0IHNlc3Npb25FeHBpcmUuJyk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNXBkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YVc1cGRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc2JVSkJRV1VzVlVGQlF5eE5RVUZ0UWp0SlFVTXZRaXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRk9VSXNTVUZCU1N4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRk8xRkJRM0JDTEVsQlFVazdXVUZEUVN4blFrRkJUU3hEUVVGRExFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTXNZMEZCWXl4RFFVRkRMR2RDUVVGTkxFTkJRVU1zVjBGQldTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMU5CUTJwRk8xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdXVUZEVWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExEaERRVUU0UXl4RFFVRkRMRU5CUVVFN1UwRkRhRVU3UzBGRFNqdEpRVVZFTEVsQlFVa3NUVUZCVFN4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFGQlEzcENMRWxCUVVrN1dVRkRRU3huUWtGQlRTeERRVUZETEdGQlFXRXNSMEZCUnl4RlFVRkZMRU5CUVVNc1kwRkJZeXhEUVVGRExHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTTdVMEZEYWtZN1VVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdFpRVU5TTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc2IwUkJRVzlFTEVOQlFVTXNRMEZCUVR0VFFVTjBSVHRMUVVOS08wRkJRMHdzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibWx0Y0c5eWRDQjdJRWxKYm1sMFQzQjBhVzl1SUgwZ1puSnZiU0FuTGk0dmFXNTBaWEptWVdObEoxeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9jR0Z5WVcxek9pQkpTVzVwZEU5d2RHbHZiaWtnUFQ0Z2UxeHVJQ0FnSUU5aWFtVmpkQzVoYzNOcFoyNG9ZMjl1Wm1sbkxDQndZWEpoYlhNcE8xeHVJQ0FnSUM4dklPV21ndWFlbk9tRmplZTlydWFidE9hVXVlUzZobk5sYzNOcGIyN25tb1RsclpqbGdxamxrSTNsclpmdnZJemxpSm5waDQzbWxyRG9qcmZsajVia3VJRG1yS0Z6WlhOemFXOXVYRzRnSUNBZ2FXWWdLSEJoY21GdGN5NXpaWE56YVc5dVRtRnRaU2tnZTF4dUlDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2MzUmhkSFZ6TG5ObGMzTnBiMjRnUFNCM2VDNW5aWFJUZEc5eVlXZGxVM2x1WXloamIyNW1hV2N1YzJWemMybHZiazVoYldVaEtTQjhmQ0FuSnp0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWduZDNndVoyVjBVM1J2Y21GblpWTjVibU02Wm1GcGJDd2dZMkZ1SUc1dmRDQm5aWFFnYzJWemMybHZiaTRuS1Z4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJQzh2SU9XbWd1YWVuT21GamVlOXJ1YWJ0T2FVdWVTNmhuTmxjM05wYjI3b3Y0Zm1uSi9tbDdicGw3VG5tb1RsclpqbGdxamxrSTNsclpmdnZJemxpSm5waDQzbWxyRG9qcmZsajVia3VJRG1yS0Z6WlhOemFXOXU1NXFFNkwrSDVweWY1cGUyNlplMFhHNGdJQ0FnYVdZZ0tIQmhjbUZ0Y3k1elpYTnphVzl1Ulhod2FYSmxTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU0E5SUhkNExtZGxkRk4wYjNKaFoyVlRlVzVqS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFMyVjVLU0I4ZkNCSmJtWnBibWwwZVR0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWduZDNndVoyVjBVM1J2Y21GblpWTjVibU02Wm1GcGJDd2dZMkZ1SUc1dmRDQm5aWFFnYzJWemMybHZia1Y0Y0dseVpTNG5LVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmVnh1ZlZ4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0KGNhbGxiYWNrLCB7fSk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOW5hVzR1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZZWEJwTDJ4dloybHVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNa1JCUVcxRU8wRkJSMjVFTEcxQ1FVRmxMRlZCUVVNc1VVRkJhMEk3U1VGRE9VSXNUMEZCVHl4M1FrRkJXU3hEUVVGRExGRkJRVkVzUlVGQlJTeEZRVUZ2UWl4RFFVRkRMRU5CUVVFN1FVRkRka1FzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOb1pXTnJVMlZ6YzJsdmJpQm1jbTl0SUNjdUxpOXRiMlIxYkdVdmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1cGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lseHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9ZMkZzYkdKaFkyczZJRVoxYm1OMGFXOXVLU0E5UGlCN1hHNGdJQ0FnY21WMGRYSnVJR05vWldOclUyVnpjMmx2YmloallXeHNZbUZqYXl3Z2UzMGdZWE1nU1ZKbGNYVmxjM1JQY0hScGIyNHBYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnJlcXVlc3Qob2JqKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WeGRXVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2Y21WeGRXVnpkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGRExFZEJRVzFDTzBsQlF5OUNMSGRDUVVGakxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkJPMEZCUXk5Q0xFTkJRVU1zUlVGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnlaWEYxWlhOMFNHRnVaR3hsY2lCbWNtOXRJQ2N1TGk5dGIyUjFiR1V2Y21WeGRXVnpkRWhoYm1Sc1pYSW5YRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjlJR1p5YjIwZ0p5NHVMMmx1ZEdWeVptRmpaU2RjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0cElEMCtJSHRjYmlBZ0lDQnlaWEYxWlhOMFNHRnVaR3hsY2k1eVpYRjFaWE4wS0c5aWFpbGNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbklzRnJlc2ggPSB0cnVlO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YzJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVWd1F5eHRRa0ZCWlN4VlFVRkRMRTlCUVdVN1NVRkRNMElzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRE8wbEJRM3BDTEdkQ1FVRk5MRU5CUVVNc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU5xUXl4RFFVRkRMRVZCUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLSE5sYzNOcGIyNDZJSE4wY21sdVp5a2dQVDRnZTF4dUlDQWdJSE4wWVhSMWN5NXpaWE56YVc5dUlEMGdjMlZ6YzJsdmJqdGNiaUFnSUNCemRHRjBkWE11YzJWemMybHZia2x6Um5KbGMyZ2dQU0IwY25WbE8xeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEJzYjJGa1JtbHNaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2ZFhCc2IyRmtSbWxzWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRkRMRWRCUVhOQ08wbEJRMnhETEhkQ1FVRmpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZCTzBGQlEyeERMRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpQm1jbTl0SUNjdUxpOXRiMlIxYkdVdmNtVnhkV1Z6ZEVoaGJtUnNaWEluWEc1cGJYQnZjblFnZXlCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlCOUlHWnliMjBnWENJdUxpOXBiblJsY21aaFkyVmNJanRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0c5aWFqb2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBJRDArSUh0Y2JpQWdJQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlsY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGluaXRfMSA9IHJlcXVpcmUoXCIuL2FwaS9pbml0XCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL2FwaS9yZXF1ZXN0XCIpO1xudmFyIHVwbG9hZEZpbGVfMSA9IHJlcXVpcmUoXCIuL2FwaS91cGxvYWRGaWxlXCIpO1xudmFyIHNldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9zZXRTZXNzaW9uXCIpO1xudmFyIGxvZ2luXzEgPSByZXF1aXJlKFwiLi9hcGkvbG9naW5cIik7XG52YXIgZ2V0U2Vzc2lvbl8xID0gcmVxdWlyZShcIi4vYXBpL2dldFNlc3Npb25cIik7XG52YXIgZ2V0Q29uZmlnXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0Q29uZmlnXCIpO1xudmFyIHdlUmVxdWVzdE9iamVjdCA9IHtcbiAgICBpbml0OiBpbml0XzEuZGVmYXVsdCxcbiAgICByZXF1ZXN0OiByZXF1ZXN0XzEuZGVmYXVsdCxcbiAgICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlXzEuZGVmYXVsdCxcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uXzEuZGVmYXVsdCxcbiAgICBsb2dpbjogbG9naW5fMS5kZWZhdWx0LFxuICAgIGdldFNlc3Npb246IGdldFNlc3Npb25fMS5kZWZhdWx0LFxuICAgIGdldENvbmZpZzogZ2V0Q29uZmlnXzEuZGVmYXVsdFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IHdlUmVxdWVzdE9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmFXNWtaWGd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3h0UTBGQk5rSTdRVUZETjBJc2VVTkJRVzFETzBGQlEyNURMQ3REUVVGNVF6dEJRVU42UXl3clEwRkJlVU03UVVGRGVrTXNjVU5CUVN0Q08wRkJReTlDTEN0RFFVRjVRenRCUVVONlF5dzJRMEZCZFVNN1FVRkhka01zU1VGQlRTeGxRVUZsTEVkQlFXTTdTVUZEYWtNc1NVRkJTU3huUWtGQlFUdEpRVU5LTEU5QlFVOHNiVUpCUVVFN1NVRkRVQ3hWUVVGVkxITkNRVUZCTzBsQlExWXNWVUZCVlN4elFrRkJRVHRKUVVOV0xFdEJRVXNzYVVKQlFVRTdTVUZEVEN4VlFVRlZMSE5DUVVGQk8wbEJRMVlzVTBGQlV5eHhRa0ZCUVR0RFFVTldMRU5CUVVNN1FVRkZSaXhyUWtGQlpTeGxRVUZsTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdhVzVwZENCbWNtOXRJRndpTGk5aGNHa3ZhVzVwZEZ3aVhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZENCbWNtOXRJRndpTGk5aGNHa3ZjbVZ4ZFdWemRGd2lYRzVwYlhCdmNuUWdkWEJzYjJGa1JtbHNaU0JtY205dElGd2lMaTloY0drdmRYQnNiMkZrUm1sc1pWd2lYRzVwYlhCdmNuUWdjMlYwVTJWemMybHZiaUJtY205dElGd2lMaTloY0drdmMyVjBVMlZ6YzJsdmJsd2lYRzVwYlhCdmNuUWdiRzluYVc0Z1puSnZiU0JjSWk0dllYQnBMMnh2WjJsdVhDSmNibWx0Y0c5eWRDQm5aWFJUWlhOemFXOXVJR1p5YjIwZ1hDSXVMMkZ3YVM5blpYUlRaWE56YVc5dVhDSmNibWx0Y0c5eWRDQm5aWFJEYjI1bWFXY2dabkp2YlNCY0lpNHZZWEJwTDJkbGRFTnZibVpwWjF3aVhHNXBiWEJ2Y25RZ2V5QjNaVkpsY1hWbGMzUWdmU0JtY205dElGd2lMaTlwYm5SbGNtWmhZMlZjSWx4dVhHNWpiMjV6ZENCM1pWSmxjWFZsYzNSUFltcGxZM1E2SUhkbFVtVnhkV1Z6ZENBOUlIdGNiaUFnYVc1cGRDeGNiaUFnY21WeGRXVnpkQ3hjYmlBZ2RYQnNiMkZrUm1sc1pTeGNiaUFnYzJWMFUyVnpjMmx2Yml4Y2JpQWdiRzluYVc0c1hHNGdJR2RsZEZObGMzTnBiMjRzWEc0Z0lHZGxkRU52Ym1acFoxeHVmVHRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZDJWU1pYRjFaWE4wVDJKcVpXTjBPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIHd4LmdldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZXMuZGF0YSwgeyBpc0NhY2hlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9iai5jYWNoZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZXMuZGF0YSwgeyBpc0NhY2hlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0KG9iaiwgcmVhbERhdGEpIHtcbiAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8ICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlYWxEYXRhKSkpIHtcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgICAgICBkYXRhOiByZWFsRGF0YVxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgZ2V0OiBnZXQsXG4gICAgc2V0OiBzZXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMkZqYUdWTllXNWhaMlZ5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWpZV05vWlUxaGJtRm5aWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkZRU3hUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUZ0UWp0SlFVTTFRaXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhUUVVGVE8xRkJRMnhDTEU5QlFVOHNXVUZCUlN4SFFVRkhPMWxCUTFJc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eExRVUZMTEV0QlFVc3NWVUZCVlN4SlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMmRDUVVONFJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRTlCUVU4c1MwRkJTeXhWUVVGVkxFVkJRVVU3YjBKQlEyNURMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZCTzJsQ1FVTjZRenRoUVVOS08ybENRVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMRXRCUVVzc1MwRkJTeXhKUVVGSkxFVkJRVVU3WjBKQlF6TkNMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eExRVUZMTEZWQlFWVXNSVUZCUlR0dlFrRkRia01zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFVkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NSVUZCUXl4RFFVRkRMRU5CUVVFN2FVSkJRM3BETzJGQlEwbzdXVUZEUkN4SlFVRkhMRTlCUVU4c1IwRkJSeXhEUVVGRExGRkJRVkVzUzBGQlN5eFZRVUZWTEVWQlFVVTdaMEpCUTI1RExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0aFFVTnNRanRSUVVOTUxFTkJRVU03UzBGRFNpeERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhIUVVGSExFTkJRVU1zUjBGQmJVSXNSVUZCUnl4UlFVRjVRanRKUVVONFJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4TFFVRkxMRXRCUVVzc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRlZCUVZVc1NVRkJTU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUVVVN1VVRkRhRVlzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXp0WlFVTldMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zVTBGQlV6dFpRVU5zUWl4SlFVRkpMRVZCUVVVc1VVRkJVVHRUUVVOcVFpeERRVUZETEVOQlFVRTdTMEZEVER0QlFVTk1MRU5CUVVNN1FVRkZSQ3hyUWtGQlpUdEpRVU5ZTEVkQlFVY3NTMEZCUVR0SlFVTklMRWRCUVVjc1MwRkJRVHREUVVOT0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lseHVYRzVtZFc1amRHbHZiaUJuWlhRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpa2dlMXh1SUNBZ0lIZDRMbWRsZEZOMGIzSmhaMlVvZTF4dUlDQWdJQ0FnSUNCclpYazZJRzlpYWk1dmNtbG5hVzVWY213c1hHNGdJQ0FnSUNBZ0lITjFZMk5sYzNNZ0tISmxjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdVkyRmphR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaUFtSmlCdlltb3VZMkZqYUdVb2NtVnpMbVJoZEdFcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdWMzVmpZMlZ6Y3lBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hKbGN5NWtZWFJoTENCN2FYTkRZV05vWlRvZ2RISjFaWDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h2WW1vdVkyRmphR1VnUFQwOUlIUnlkV1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTV6ZFdOalpYTnpJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbk4xWTJObGMzTW9jbVZ6TG1SaGRHRXNJSHRwYzBOaFkyaGxPaUIwY25WbGZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloMGVYQmxiMllnYjJKcUxtTnZiWEJzWlhSbElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZZbW91WTI5dGNHeGxkR1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDBwWEc1OVhHNWNibVoxYm1OMGFXOXVJSE5sZENodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUlDd2djbVZoYkVSaGRHRTZJSE4wY21sdVp5QjhJRzlpYW1WamRDa2dlMXh1SUNBZ0lHbG1JQ2h2WW1vdVkyRmphR1VnUFQwOUlIUnlkV1VnZkh3Z0tIUjVjR1Z2WmlCdlltb3VZMkZqYUdVZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlBbUppQnZZbW91WTJGamFHVW9jbVZoYkVSaGRHRXBLU2tnZTF4dUlDQWdJQ0FnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nYjJKcUxtOXlhV2RwYmxWeWJDeGNiaUFnSUNBZ0lDQWdJQ0FnSUdSaGRHRTZJSEpsWVd4RVlYUmhYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hHNGdJQ0FnWjJWMExGeHVJQ0FnSUhObGRGeHVmVHRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xuZnVuY3Rpb24gc3RhcnQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cbmZ1bmN0aW9uIGVuZChvYmopIHtcbiAgICBvYmouX3JlcG9ydEVuZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBpZiAob2JqLnJlcG9ydCkge1xuICAgICAgICByZXBvcnQob2JqLnJlcG9ydCwgb2JqLl9yZXBvcnRTdGFydFRpbWUsIG9iai5fcmVwb3J0RW5kVGltZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVwb3J0KG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWdfMS5kZWZhdWx0LnJlcG9ydENHSShuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJlcXVlc3RfMS5kZWZhdWx0KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kLFxuICAgIHJlcG9ydDogcmVwb3J0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXRiMlIxYkdVdlpIVnlZWFJwYjI1U1pYQnZjblJsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVOd1F5d3dRMEZCYjBNN1FVRkhjRU1zVTBGQlV5eExRVUZMTEVOQlFVTXNSMEZCZFVNN1NVRkRiRVFzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1FVRkRhRVFzUTBGQlF6dEJRVVZFTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWRCUVhWRE8wbEJRMmhFTEVkQlFVY3NRMEZCUXl4alFVRmpMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0SlFVTXhReXhKUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVWQlFVVTdVVUZEV0N4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRV2RDTEVWQlFVVXNSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEZRVUZGTEVkQlFVY3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRMUVVNeFJUdEJRVU5NTEVOQlFVTTdRVUZGUkN4VFFVRlRMRTFCUVUwc1EwRkJReXhKUVVGWkxFVkJRVVVzVTBGQmFVSXNSVUZCUlN4UFFVRmxPMGxCUXpWRUxFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGVFTXNaMEpCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRVZCUVVVc2FVSkJRVThzUTBGQlF5eERRVUZETzB0QlEzWkVPMEZCUTB3c1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NTMEZCU3l4UFFVRkJPMGxCUTB3c1IwRkJSeXhMUVVGQk8wbEJRMGdzVFVGQlRTeFJRVUZCTzBOQlExUXNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElISmxjWFZsYzNRZ1puSnZiU0FuTGk0dllYQnBMM0psY1hWbGMzUW5YRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpd2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNGdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENJN1hHNWNibVoxYm1OMGFXOXVJSE4wWVhKMEtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJRzlpYWk1ZmNtVndiM0owVTNSaGNuUlVhVzFsSUQwZ2JtVjNJRVJoZEdVb0tTNW5aWFJVYVcxbEtDazdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHVnVaQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0cElIdGNiaUFnSUNCdlltb3VYM0psY0c5eWRFVnVaRlJwYldVZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQnBaaWh2WW1vdWNtVndiM0owS1NCN1hHNGdJQ0FnSUNBZ0lISmxjRzl5ZENodlltb3VjbVZ3YjNKMElHRnpJSE4wY21sdVp5d2diMkpxTGw5eVpYQnZjblJUZEdGeWRGUnBiV1VzSUc5aWFpNWZjbVZ3YjNKMFJXNWtWR2x0WlNrN1hHNGdJQ0FnZlZ4dWZWeHVYRzVtZFc1amRHbHZiaUJ5WlhCdmNuUW9ibUZ0WlRvZ2MzUnlhVzVuTENCemRHRnlkRlJwYldVNklHNTFiV0psY2l3Z1pXNWtWR2x0WlRvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1Y21Wd2IzSjBRMGRKSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVabWxuTG5KbGNHOXlkRU5IU1NodVlXMWxMQ0J6ZEdGeWRGUnBiV1VzSUdWdVpGUnBiV1VzSUhKbGNYVmxjM1FwTzF4dUlDQWdJSDFjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUhOMFlYSjBMRnh1SUNBZ0lHVnVaQ3hjYmlBZ0lDQnlaWEJ2Y25SY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbmZ1bmN0aW9uIHN5c3RlbUVycm9yKG9iaiwgcmVzKSB7XG4gICAgZG9FcnJvcihcIlwiLCByZXMuZXJyTXNnKTtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwoXCJcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gbG9naWNFcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIF9hID0gZ2V0RXJyb3JNc2cocmVzKSwgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XG4gICAgICAgIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbn1cbmZ1bmN0aW9uIGdldEVycm9yTXNnKHJlcykge1xuICAgIHZhciB0aXRsZSA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGl0bGUgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZTtcbiAgICB9XG4gICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50KHJlcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQ7XG4gICAgfVxuICAgIHJldHVybiB7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9O1xufVxuZnVuY3Rpb24gZG9FcnJvcih0aXRsZSwgY29udGVudCkge1xuICAgIHd4LnNob3dNb2RhbCh7XG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxuICAgICAgICBzaG93Q2FuY2VsOiBmYWxzZVxuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN5c3RlbUVycm9yOiBzeXN0ZW1FcnJvcixcbiAgICBsb2dpY0Vycm9yOiBsb2dpY0Vycm9yLFxuICAgIGRvRXJyb3I6IGRvRXJyb3IsXG4gICAgZ2V0RXJyb3JNc2c6IGdldEVycm9yTXNnXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWlhKeWIzSklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlsY25KdmNraGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGSGNFTXNVMEZCVXl4WFFVRlhMRU5CUVVNc1IwRkJkVU1zUlVGQlJTeEhRVUUyUWp0SlFVTjJSaXhQUVVGUExFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVONFFpeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGFFTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU5vUWp0QlFVTk1MRU5CUVVNN1FVRkZSQ3hUUVVGVExGVkJRVlVzUTBGQlF5eEhRVUYxUXl4RlFVRkZMRWRCUVhsRk8wbEJRMnhKTEVsQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1NVRkJTU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU5vUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEycENPMU5CUVUwN1VVRkRSeXhKUVVGQkxIRkNRVUZ0UXl4RlFVRnNReXhuUWtGQlN5eEZRVUZGTEc5Q1FVRXlRaXhEUVVGRE8xRkJRekZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03UzBGRE0wSTdTVUZIUkN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eGhRVUZoTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUXpWRExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5zUXp0SlFVVkVMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEZGtJc1EwRkJRenRCUVVWRUxGTkJRVk1zVjBGQlZ5eERRVUZETEVkQlFYbEZPMGxCUXpGR0xFbEJRVWtzUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTm1MRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRla01zU1VGQlNUdFpRVU5CTEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVFN1UwRkRkRU03VVVGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0VFFVTllPMHRCUTBvN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemxETEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU0zUWp0SlFVVkVMRWxCUVVrc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5xUWl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFpRVUZaTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUXpORExFbEJRVWs3V1VGRFFTeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkJPMU5CUXpGRE8xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdVMEZEV0R0TFFVTktPMU5CUVUwc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNXVUZCV1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVOb1JDeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU03UzBGRGFrTTdTVUZGUkN4UFFVRlBMRVZCUVVNc1MwRkJTeXhQUVVGQkxFVkJRVVVzVDBGQlR5eFRRVUZCTEVWQlFVTXNRMEZCUVR0QlFVTXpRaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFBRVUZQTEVOQlFVTXNTMEZCWVN4RlFVRkZMRTlCUVdVN1NVRkRNME1zUlVGQlJTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTlVMRXRCUVVzc1QwRkJRVHRSUVVOTUxFOUJRVThzUlVGQlJTeFBRVUZQTEVsQlFVa3NaVUZCWlR0UlFVTnVReXhWUVVGVkxFVkJRVVVzUzBGQlN6dExRVU53UWl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4WFFVRlhMR0ZCUVVFN1NVRkRXQ3hWUVVGVkxGbEJRVUU3U1VGRFZpeFBRVUZQTEZOQlFVRTdTVUZEVUN4WFFVRlhMR0ZCUVVFN1EwRkRaQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpd2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNGdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENJN1hHNWNibVoxYm1OMGFXOXVJSE41YzNSbGJVVnljbTl5S0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0Z2ZDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpd2djbVZ6T2lCM2VDNUhaVzVsY21Gc1EyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0JrYjBWeWNtOXlLRndpWENJc0lISmxjeTVsY25KTmMyY3BPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdiMkpxTG1aaGFXd2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vdVptRnBiQ2hjSWx3aUtUdGNiaUFnSUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUd4dloybGpSWEp5YjNJb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVMQ0J5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFnZkNCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VabUZwYkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtWVdsc0tISmxjeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2UzUnBkR3hsTENCamIyNTBaVzUwZlNBOUlHZGxkRVZ5Y205eVRYTm5LSEpsY3lrN1hHNGdJQ0FnSUNBZ0lHUnZSWEp5YjNJb2RHbDBiR1VzSUdOdmJuUmxiblFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SU9XbWd1YWVuT2FjaWVtRmplZTlydWU3bitTNGdPbVVtZWl2citXYm51aXdnK1dIdmVhVnNPKzhqT1dJbWVhSnAraWhqT1d1ZzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyRnNiR0poWTJzZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjVtYVdjdVpYSnliM0pEWVd4c1ltRmpheWh2WW1vc0lISmxjeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2loeVpYTXBPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQm5aWFJGY25KdmNrMXpaeWh5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFnZkNCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYkdWMElIUnBkR3hsSUQwZ1hDSmNJanRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2xScGRHeGxJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhScGRHeGxJRDBnWTI5dVptbG5MbVZ5Y205eVZHbDBiR1VvY21WekxtUmhkR0VwWEc0Z0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bGNuSnZjbFJwZEd4bElEMDlQU0JjSW5OMGNtbHVaMXdpS1NCN1hHNGdJQ0FnSUNBZ0lIUnBkR3hsSUQwZ1kyOXVabWxuTG1WeWNtOXlWR2wwYkdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYkdWMElHTnZiblJsYm5RZ1BTQmNJbHdpTzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyOXVkR1Z1ZENBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjUwWlc1MElEMGdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkQ2h5WlhNdVpHRjBZU2xjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWRDQTlQVDBnWENKemRISnBibWRjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjUwWlc1MElEMGdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2UzUnBkR3hsTENCamIyNTBaVzUwZlZ4dWZWeHVYRzVtZFc1amRHbHZiaUJrYjBWeWNtOXlLSFJwZEd4bE9pQnpkSEpwYm1jc0lHTnZiblJsYm5RNklITjBjbWx1WnlrZ2UxeHVJQ0FnSUhkNExuTm9iM2ROYjJSaGJDaDdYRzRnSUNBZ0lDQWdJSFJwZEd4bExGeHVJQ0FnSUNBZ0lDQmpiMjUwWlc1ME9pQmpiMjUwWlc1MElIeDhJRndpNTcyUjU3dWM1b2lXNXB5TjVZcWg1YnlDNWJpNDc3eU02SyszNTZpTjVaQ082WWVONksrVlhDSXNYRzRnSUNBZ0lDQWdJSE5vYjNkRFlXNWpaV3c2SUdaaGJITmxYRzRnSUNBZ2ZTbGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJSE41YzNSbGJVVnljbTl5TEZ4dUlDQWdJR3h2WjJsalJYSnliM0lzWEc0Z0lDQWdaRzlGY25KdmNpeGNiaUFnSUNCblpYUkZjbkp2Y2sxeloxeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciByZXNwb25zZUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc3BvbnNlSGFuZGxlclwiKTtcbmZ1bmN0aW9uIGdldChvYmosIG1ldGhvZCkge1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoudXJsXSAmJiAhY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdtb2NrIOayoeacieWvueW6lOaOpeWPo+eahOaVsOaNricpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoudXJsXSB8fCBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdO1xuICAgIGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBzdGF0dXNDb2RlOiAyMDBcbiAgICB9O1xuICAgIHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQocmVzLCBvYmosIG1ldGhvZCk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgZ2V0OiBnZXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liVzlqYTAxaGJtRm5aWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwyMXZZMnROWVc1aFoyVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNRU5CUVc5RE8wRkJRM0JETEhGRVFVRXJRenRCUVVjdlF5eFRRVUZUTEVkQlFVY3NRMEZCUXl4SFFVRjFReXhGUVVGRkxFMUJRV2RETzBsQlJXeEdMRWxCUVVjc1EwRkJReXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVWQlFVVTdVVUZGTjBRc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRE8xRkJRMmhETEU5QlFVOHNTMEZCU3l4RFFVRkRPMHRCUTJoQ08wbEJSVVFzU1VGQlNTeEpRVUZKTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVWMFJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zU1VGQlRTeEhRVUZITEVkQlFVYzdVVUZEVWl4SlFVRkpMRTFCUVVFN1VVRkRTaXhWUVVGVkxFVkJRVVVzUjBGQlJ6dExRVU5zUWl4RFFVRkRPMGxCUlVZc2VVSkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGQk8wRkJRM0pETEVOQlFVTTdRVUZGUkN4clFrRkJaVHRKUVVOWUxFZEJRVWNzUzBGQlFUdERRVU5PTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdZMjl1Wm1sbklHWnliMjBnSnk0dUwzTjBiM0psTDJOdmJtWnBaeWRjYm1sdGNHOXlkQ0J5WlhOd2IyNXpaVWhoYm1Sc1pYSWdabkp2YlNBbkxpOXlaWE53YjI1elpVaGhibVJzWlhJblhHNXBiWEJ2Y25RZ2V5QkpVbVZ4ZFdWemRFOXdkR2x2Yml3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0k3WEc1Y2JtWjFibU4wYVc5dUlHZGxkQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0c0lHMWxkR2h2WkRvZ1hDSnlaWEYxWlhOMFhDSWdmQ0JjSW5Wd2JHOWhaRVpwYkdWY0lpazZJR0Z1ZVNCN1hHNWNiaUFnSUNCcFppZ2hZMjl1Wm1sbkxtMXZZMnRLYzI5dVcyOWlhaTUxY214ZElDWW1JQ0ZqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG05eWFXZHBibFZ5YkYwcElIdGNiaUFnSUNBZ0lDQWdMeThnYlc5amF5RG1zcUhtbklubHI3bmx1cFRtanFYbGo2UG5tb1RtbGJEbWphNWNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2lnbmJXOWpheURtc3FIbW5JbmxyN25sdXBUbWpxWGxqNlBubW9UbWxiRG1qYTRuS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0JrWVhSaElEMGdZMjl1Wm1sbkxtMXZZMnRLYzI5dVcyOWlhaTUxY214ZElIeDhJR052Ym1acFp5NXRiMk5yU25OdmJsdHZZbW91YjNKcFoybHVWWEpzWFR0Y2JpQWdJQ0F2THlCa1pXVndJR052Y0hsY2JpQWdJQ0JrWVhSaElEMGdTbE5QVGk1d1lYSnpaU2hLVTA5T0xuTjBjbWx1WjJsbWVTaGtZWFJoS1NrN1hHNGdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ2UxeHVJQ0FnSUNBZ0lDQmtZWFJoTEZ4dUlDQWdJQ0FnSUNCemRHRjBkWE5EYjJSbE9pQXlNREJjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdjbVZ6Y0c5dWMyVklZVzVrYkdWeUtISmxjeXdnYjJKcUxDQnRaWFJvYjJRcFhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFJjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbnZhciBtb2NrTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vbW9ja01hbmFnZXJcIik7XG52YXIgY2FjaGVNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9jYWNoZU1hbmFnZXJcIik7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL3Nlc3Npb25NYW5hZ2VyXCIpO1xudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xudmFyIHJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVzcG9uc2VIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgdXJsXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91cmxcIik7XG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsKSB7XG4gICAgaWYgKG9yaWdpblVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJlRG8ob2JqKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBpZiAodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmJlZm9yZVNlbmQoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkxpbWl0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luTGltaXQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5MaW1pdCsrO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iai5jb3VudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBvYmouY291bnQgPSAwO1xuICAgIH1cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICAgICAgb2JqLmNvbXBsZXRlID0gKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBmbi5hcHBseS5hcHBseShmbiwgW190aGlzXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKG9iai5jb21wbGV0ZSk7XG4gICAgfVxuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICBvYmoub3JpZ2luVXJsID0gb2JqLnVybDtcbiAgICAgICAgb2JqLnVybCA9IGZvcm1hdChvYmoudXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFvYmouZGF0YSkge1xuICAgICAgICBvYmouZGF0YSA9IHt9O1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSBfX2Fzc2lnbih7fSwgb2JqLmRhdGEsIChfYSA9IHt9LCBfYVtjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2EpKTtcbiAgICB9XG4gICAgdmFyIGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5kYXRhID0gX19hc3NpZ24oe30sIGdkLCBvYmouZGF0YSk7XG4gICAgb2JqLm1ldGhvZCA9IG9iai5tZXRob2QgfHwgJ0dFVCc7XG4gICAgb2JqLmRhdGFUeXBlID0gb2JqLmRhdGFUeXBlIHx8ICdqc29uJztcbiAgICBpZiAob2JqLm1ldGhvZCAhPT0gXCJHRVRcIikge1xuICAgICAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xuICAgICAgICB9XG4gICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZm9ybURhdGEgPSBfX2Fzc2lnbih7fSwgb2JqLmZvcm1EYXRhLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZm9ybURhdGEgPSBfX2Fzc2lnbih7fSwgZ2QsIG9iai5mb3JtRGF0YSk7XG4gICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xuICAgIH1cbiAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGdldEdsb2JhbERhdGEoKSB7XG4gICAgdmFyIGdkID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZ2Q7XG59XG5mdW5jdGlvbiBkb1JlcXVlc3Qob2JqKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcbiAgICBvYmouY291bnQrKztcbiAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICBkYXRhOiBvYmouZGF0YSxcbiAgICAgICAgbWV0aG9kOiBvYmoubWV0aG9kLFxuICAgICAgICBoZWFkZXI6IG9iai5oZWFkZXIgfHwge30sXG4gICAgICAgIGRhdGFUeXBlOiBvYmouZGF0YVR5cGUgfHwgJ2pzb24nLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0KHJlcywgb2JqLCAncmVxdWVzdCcpO1xuICAgICAgICB9LFxuICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9iai5jb3VudC0tO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iaikge1xuICAgIG9iaiA9IGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaik7XG4gICAgb2JqLmNvdW50Kys7XG4gICAgd3gudXBsb2FkRmlsZSh7XG4gICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcbiAgICAgICAgbmFtZTogb2JqLm5hbWUgfHwgJycsXG4gICAgICAgIGZvcm1EYXRhOiBvYmouZm9ybURhdGEsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQocmVzLCBvYmosICd1cGxvYWRGaWxlJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb2JqLmNvdW50LS07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiByZXF1ZXN0KG9iaikge1xuICAgIG9iaiA9IHByZURvKG9iaik7XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb24pIHtcbiAgICAgICAgbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmosICdyZXF1ZXN0Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9iai5jYWNoZSkge1xuICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgIH1cbiAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb1JlcXVlc3Qob2JqKTtcbiAgICB9LCBvYmopO1xufVxuZnVuY3Rpb24gdXBsb2FkRmlsZShvYmopIHtcbiAgICBvYmogPSBwcmVEbyhvYmopO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgIG1vY2tNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqLCAndXBsb2FkRmlsZScpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvVXBsb2FkRmlsZShvYmopO1xuICAgIH0sIG9iaik7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WeGRXVnpkRWhoYm1Sc1pYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDNKbGNYVmxjM1JJWVc1a2JHVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN1FVRkJRU3d5UTBGQmNVTTdRVUZEY2tNc01FTkJRVzlETzBGQlEzQkRMREJEUVVGdlF6dEJRVU53UXl3MlEwRkJkVU03UVVGRGRrTXNLME5CUVhsRE8wRkJRM3BETEcxRVFVRTJRenRCUVVNM1F5d3JRMEZCZVVNN1FVRkRla01zY1VSQlFTdERPMEZCUXk5RExIVkVRVUZwUkR0QlFVTnFSQ3h0UTBGQk5rSTdRVUZKTjBJc1UwRkJVeXhOUVVGTkxFTkJRVU1zVTBGQmFVSTdTVUZETjBJc1NVRkJTU3hUUVVGVExFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZPMUZCUXpsQ0xFOUJRVThzVTBGQlV5eERRVUZCTzB0QlEyNUNPMU5CUVUwN1VVRkRTQ3hKUVVGSkxGTkJRVk1zUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1EwRkJRenRSUVVOcVF5eEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhUUVVGVExFdEJRVXNzVlVGQlZTeEZRVUZGTzFsQlEzaERMRk5CUVZNc1IwRkJSeXhuUWtGQlRTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkJPMU5CUTJwRE8xRkJRMFFzVDBGQlR5eFRRVUZUTEVkQlFVY3NVMEZCVXl4RFFVRkRPMHRCUTJoRE8wRkJRMHdzUTBGQlF6dEJRVWRFTEZOQlFWTXNTMEZCU3l4RFFVRXJReXhIUVVGTk8wbEJRVzVGTEdsQ1FXMURRenRKUVd4RFJ5eEpRVUZITEU5QlFVOHNSMEZCUnl4RFFVRkRMRlZCUVZVc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGNrTXNSMEZCUnl4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8wdEJRM0JDTzBsQlJVUXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhaUVVGWkxFdEJRVXNzVjBGQlZ5eEZRVUZGTzFGQlEzcERMRWRCUVVjc1EwRkJReXhaUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEzaENPMU5CUVUwN1VVRkRTQ3hIUVVGSExFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdTMEZEZEVJN1NVRkZSQ3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEV0QlFVc3NTMEZCU3l4WFFVRlhMRVZCUVVVN1VVRkRiRU1zUjBGQlJ5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRha0k3U1VGRlJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVN1VVRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFGQlF6bENMRWRCUVVjc1EwRkJReXhSUVVGUkxFZEJRVWNzUTBGQlF5eFZRVUZETEVWQlFVODdXVUZCUlN4alFVRlBPMmxDUVVGUUxGVkJRVThzUlVGQlVDeHhRa0ZCVHl4RlFVRlFMRWxCUVU4N1owSkJRVkFzTmtKQlFVODdPMWxCUXpkQ0xFOUJRVTg3WjBKQlJVZ3NhVUpCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dG5Ra0ZEWml4SlFVRkhMRTlCUVU4c1JVRkJSU3hMUVVGTExGVkJRVlVzUlVGQlF6dHZRa0ZGZUVJc1JVRkJSU3hEUVVGRExFdEJRVXNzVDBGQlVpeEZRVUZGTEVkQlFVOHNTMEZCU1N4VFFVRkxMRWxCUVVrc1IwRkJSVHRwUWtGRE0wSTdXVUZEVEN4RFFVRkRMRU5CUVVFN1VVRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVFN1MwRkRia0k3U1VGRlJDeEpRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSVHRSUVVObUxFZEJRVWNzUTBGQlF5eFRRVUZUTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVONFFpeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZETjBJN1NVRkZSQ3hQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZIUkN4VFFVRlRMRzlDUVVGdlFpeERRVUZETEVkQlFXMUNPenRKUVVVM1F5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSVHRSUVVOWUxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPMHRCUTJwQ08wbEJSVVFzU1VGQlNTeEhRVUZITEVOQlFVTXNVMEZCVXl4TFFVRkxMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NTVUZCU1N4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFJRVU01UkN4SFFVRkhMRU5CUVVNc1NVRkJTU3huUWtGQlR5eEhRVUZITEVOQlFVTXNTVUZCWXl4bFFVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRExFTkJRVU03UzBGRE5VVTdTVUZIUkN4SlFVRk5MRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU16UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3huUWtGQlR5eEZRVUZGTEVWQlFVc3NSMEZCUnl4RFFVRkRMRWxCUVdNc1EwRkJReXhEUVVGRE8wbEJSVEZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTTdTVUZEYWtNc1IwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEhRVUZITEVOQlFVTXNVVUZCVVN4SlFVRkpMRTFCUVUwc1EwRkJRenRKUVVkMFF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4TlFVRk5MRXRCUVVzc1MwRkJTeXhGUVVGRk8xRkJRM1JDTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3V1VGRGFFSXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhoUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRmxCUVVjc1IwRkJReXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlJTeERRVUZETzFOQlF6VkZPMUZCUTBRc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eGhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTMEZEZUVNN1NVRkZSQ3d3UWtGQlowSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRk5VSXNUMEZCVHl4SFFVRkhMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSMFFzVTBGQlV5eDFRa0ZCZFVJc1EwRkJReXhIUVVGelFqczdTVUZEYmtRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVTdVVUZEWml4SFFVRkhMRU5CUVVNc1VVRkJVU3hIUVVGSExFVkJRVVVzUTBGQlF6dExRVU55UWp0SlFVVkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGTkJRVk1zUzBGQlN5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1VVRkRPVVFzUjBGQlJ5eERRVUZETEZGQlFWRXNaMEpCUVU4c1IwRkJSeXhEUVVGRExGRkJRV3RDTEdWQlFVY3NaMEpCUVUwc1EwRkJReXhYUVVGWExFbEJRVWNzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRTFCUVVNc1EwRkJRenRMUVVOd1JqdEpRVWRFTEVsQlFVMHNSVUZCUlN4SFFVRkhMR0ZCUVdFc1JVRkJSU3hEUVVGRE8wbEJRek5DTEVkQlFVY3NRMEZCUXl4UlFVRlJMR2RDUVVGUExFVkJRVVVzUlVGQlN5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1NVRkhlRU1zU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1JVRkJSVHRSUVVOb1FpeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMR0ZCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NXVUZCUnl4SFFVRkRMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRkxFTkJRVU03UzBGRE5VVTdTVUZGUkN4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExHRkJRVWNzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVVZ5UXl3d1FrRkJaMElzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZOVUlzVDBGQlR5eEhRVUZITEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRc1UwRkJVeXhoUVVGaE8wbEJRMnhDTEVsQlFVa3NSVUZCUlN4SFFVRlJMRVZCUVVVc1EwRkJRenRKUVVOcVFpeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhWUVVGVkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEzcERMRVZCUVVVc1IwRkJSeXhuUWtGQlRTeERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMHRCUXpWQ08xTkJRVTBzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hMUVVGTExGRkJRVkVzUlVGQlJUdFJRVU01UXl4RlFVRkZMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTTdTMEZETVVJN1NVRkRSQ3hQUVVGUExFVkJRVVVzUTBGQlF6dEJRVU5rTEVOQlFVTTdRVUZGUkN4VFFVRlRMRk5CUVZNc1EwRkJReXhIUVVGdFFqdEpRVU5zUXl4SFFVRkhMRWRCUVVjc2IwSkJRVzlDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUjBGQlJ5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRPMGxCUTFvc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF6dFJRVU5RTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1IwRkJSenRSUVVOYUxFbEJRVWtzUlVGQlJTeEhRVUZITEVOQlFVTXNTVUZCU1R0UlFVTmtMRTFCUVUwc1JVRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRUdFJRVU5zUWl4TlFVRk5MRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeEZRVUZGTzFGQlEzaENMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVTeEpRVUZKTEUxQlFVMDdVVUZEYUVNc1QwRkJUeXhaUVVGRExFZEJRVzlETzFsQlEzaERMSGxDUVVGbExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRVHRSUVVONFF5eERRVUZETzFGQlEwUXNTVUZCU1N4WlFVRkZMRWRCUVRaQ08xbEJReTlDTEhOQ1FVRlpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTnVReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNaQ0xFTkJRVU03VVVGRFJDeFJRVUZSTzFsQlEwb3NSMEZCUnl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRMW9zU1VGQlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hKUVVGSkxFZEJRVWNzUTBGQlF5eExRVUZMTEV0QlFVc3NRMEZCUXl4RlFVRkRPMmRDUVVOeVJDeEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1lVRkRiRUk3VVVGRFRDeERRVUZETzB0QlEwb3NRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zV1VGQldTeERRVUZETEVkQlFYTkNPMGxCUTNoRExFZEJRVWNzUjBGQlJ5eDFRa0ZCZFVJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU51UXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03U1VGRFdpeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEhRVUZITzFGQlExb3NVVUZCVVN4RlFVRkZMRWRCUVVjc1EwRkJReXhSUVVGUkxFbEJRVWtzUlVGQlJUdFJRVU0xUWl4SlFVRkpMRVZCUVVVc1IwRkJSeXhEUVVGRExFbEJRVWtzU1VGQlNTeEZRVUZGTzFGQlEzQkNMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVUdFJRVU4wUWl4UFFVRlBMRmxCUVVVc1IwRkJkVU03V1VGRE5VTXNlVUpCUVdVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEZsQlFWa3NRMEZCUXl4RFFVRkJPMUZCUXpORExFTkJRVU03VVVGRFJDeEpRVUZKTEZsQlFVVXNSMEZCTmtJN1dVRkRMMElzYzBKQlFWa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyNURMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZGtJc1EwRkJRenRSUVVORUxGRkJRVkU3V1VGRFNpeEhRVUZITEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1dVRkRXaXhKUVVGSExFOUJRVThzUjBGQlJ5eERRVUZETEZGQlFWRXNTMEZCU3l4VlFVRlZMRWxCUVVrc1IwRkJSeXhEUVVGRExFdEJRVXNzUzBGQlN5eERRVUZETEVWQlFVTTdaMEpCUTNKRUxFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0aFFVTnNRanRSUVVOTUxFTkJRVU03UzBGRFNpeERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhQUVVGUExFTkJRVU1zUjBGQmJVSTdTVUZEYUVNc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTnFRaXhKUVVGSExHZENRVUZOTEVOQlFVTXNVVUZCVVN4RlFVRkZPMUZCUTJoQ0xIRkNRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dFJRVU5vUXl4UFFVRlBPMHRCUTFZN1NVRkRSQ3hKUVVGSExFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVTdVVUZEVml4elFrRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTjZRanRKUVVWRUxIZENRVUZqTEVOQlFVTTdVVUZEV0N4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3U1VGRGJFSXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGQk8wRkJRMWdzUTBGQlF6dEJRVVZFTEZOQlFWTXNWVUZCVlN4RFFVRkRMRWRCUVhOQ08wbEJRM1JETEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGelFpeERRVUZETzBsQlEzUkRMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVWQlFVVTdVVUZEYUVJc2NVSkJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRmxCUVZrc1EwRkJReXhEUVVGRE8xRkJRMjVETEU5QlFVODdTMEZEVmp0SlFVVkVMSGRDUVVGakxFTkJRVU03VVVGRFdDeFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1NVRkRja0lzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkJPMEZCUTFnc1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NUVUZCVFN4UlFVRkJPMGxCUTA0c1QwRkJUeXhUUVVGQk8wbEJRMUFzVlVGQlZTeFpRVUZCTzBOQlEySXNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCc2IyRmthVzVuSUdaeWIyMGdKeTR1TDNWMGFXd3ZiRzloWkdsdVp5ZGNibWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJSE4wWVhSMWN5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5emRHRjBkWE1uWEc1cGJYQnZjblFnYlc5amEwMWhibUZuWlhJZ1puSnZiU0FuTGk5dGIyTnJUV0Z1WVdkbGNpZGNibWx0Y0c5eWRDQmpZV05vWlUxaGJtRm5aWElnWm5KdmJTQW5MaTlqWVdOb1pVMWhibUZuWlhJblhHNXBiWEJ2Y25RZ2MyVnpjMmx2YmsxaGJtRm5aWElnWm5KdmJTQW5MaTl6WlhOemFXOXVUV0Z1WVdkbGNpZGNibWx0Y0c5eWRDQmxjbkp2Y2toaGJtUnNaWElnWm5KdmJTQW5MaTlsY25KdmNraGhibVJzWlhJblhHNXBiWEJ2Y25RZ2NtVnpjRzl1YzJWSVlXNWtiR1Z5SUdaeWIyMGdKeTR2Y21WemNHOXVjMlZJWVc1a2JHVnlKMXh1YVcxd2IzSjBJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSWdabkp2YlNCY0lpNHZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNsd2lYRzVwYlhCdmNuUWdkWEpzSUdaeWIyMGdKeTR1TDNWMGFXd3ZkWEpzSjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYRzVjYmk4dklPYWd2T1c4aitXTWxuVnliRnh1Wm5WdVkzUnBiMjRnWm05eWJXRjBLRzl5YVdkcGJsVnliRG9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdhV1lnS0c5eWFXZHBibFZ5YkM1emRHRnlkSE5YYVhSb0tDZG9kSFJ3SnlrcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHOXlhV2RwYmxWeWJGeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQjFjbXhRWlhKbWFYZ2dQU0JqYjI1bWFXY3VkWEpzVUdWeVptbDRPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTUxY214UVpYSm1hWGdnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkWEpzVUdWeVptbDRJRDBnWTI5dVptbG5MblZ5YkZCbGNtWnBlQ2dwWEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJGQmxjbVpwZUNBcklHOXlhV2RwYmxWeWJEdGNiaUFnSUNCOVhHNTlYRzVjYmk4dklPYUpnT2FjaWVpdnQrYXhndVdQa2VXSHV1V0pqZW1jZ09pbWdlV0JtdWVhaE9TNmkrYURoVnh1Wm5WdVkzUnBiMjRnY0hKbFJHODhWQ0JsZUhSbGJtUnpJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNCtLRzlpYWpvZ1ZDazZJRlFnZTF4dUlDQWdJR2xtS0hSNWNHVnZaaUJ2WW1vdVltVm1iM0psVTJWdVpDQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1aVpXWnZjbVZUWlc1a0tDazdYRzRnSUNBZ2ZWeHVJQ0FnSUM4dklPZVp1K1c5bGVhQWdlV2tzZWFWaU8rOGpPbUhqZVdramVlWnUrVzlsZWl1b2VhVnNGeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2IySnFMbkpsVEc5bmFXNU1hVzFwZENBOVBUMGdYQ0oxYm1SbFptbHVaV1JjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91Y21WTWIyZHBia3hwYldsMElEMGdNRHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91Y21WTWIyZHBia3hwYldsMEt5czdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91WTI5MWJuUWdQVDA5SUZ3aWRXNWtaV1pwYm1Wa1hDSXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtTnZkVzUwSUQwZ01EdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iMkpxTG5Ob2IzZE1iMkZrYVc1bktTQjdYRzRnSUNBZ0lDQWdJR3h2WVdScGJtY3VjMmh2ZHlodlltb3VjMmh2ZDB4dllXUnBibWNwTzF4dUlDQWdJQ0FnSUNCdlltb3VZMjl0Y0d4bGRHVWdQU0FvS0dadU9pQmhibmtzSUM0dUxtRnlaM01wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFvS1QwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJVVDBSUElPUzl2K2VVcUZCeWIyMXBjMlhtbHJubHZJL2xrSTd2dkl6bGo2L29nNzNrdUkzcG5JRG9wb0hvdjVua3Vwdmt1b1pjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWgwZVhCbGIyWWdabTRnUFQwOUlGd2lablZ1WTNScGIyNWNJaWw3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRUIwY3kxcFoyNXZjbVZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptNHVZWEJ3Ykhrb2RHaHBjeXdnTGk0dVlYSm5jeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1Nodlltb3VZMjl0Y0d4bGRHVXBYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWW9JVzlpYWk1dmNtbG5hVzVWY213cElIdGNiaUFnSUNBZ0lDQWdiMkpxTG05eWFXZHBibFZ5YkNBOUlHOWlhaTUxY213N1hHNGdJQ0FnSUNBZ0lHOWlhaTUxY213Z1BTQm1iM0p0WVhRb2IySnFMblZ5YkNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2JuMWNibHh1THk4ZzVxQzg1YnlQNVl5VzVhU0U1NUNHNksrMzVyR0M1NXFFYjJKcTVZYUY1YTY1WEc1bWRXNWpkR2x2YmlCcGJtbDBhV0ZzYVhwbFVtVnhkV1Z6ZEU5aWFpaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVLU0I3WEc1Y2JpQWdJQ0JwWmlBb0lXOWlhaTVrWVhSaEtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1a1lYUmhJRDBnZTMwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOWlhaTV2Y21sbmFXNVZjbXdnSVQwOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMblZ5YkNBbUppQnpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91WkdGMFlTQTlJSHN1TGk1dlltb3VaR0YwWVNCaGN5QnZZbXBsWTNRc0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJuMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGc1YWFDNXA2YzVweUo1WVdvNWJHQTVZK0M1cFd3Nzd5TTVZaVo1cmU3NVlxZ1hHNGdJQ0FnWTI5dWMzUWdaMlFnUFNCblpYUkhiRzlpWVd4RVlYUmhLQ2s3WEc0Z0lDQWdiMkpxTG1SaGRHRWdQU0I3TGk0dVoyUXNJQzR1TG05aWFpNWtZWFJoSUdGeklHOWlhbVZqZEgwN1hHNWNiaUFnSUNCdlltb3ViV1YwYUc5a0lEMGdiMkpxTG0xbGRHaHZaQ0I4ZkNBblIwVlVKenRjYmlBZ0lDQnZZbW91WkdGMFlWUjVjR1VnUFNCdlltb3VaR0YwWVZSNWNHVWdmSHdnSjJwemIyNG5PMXh1WEc0Z0lDQWdMeThnNWFhQzVwNmM2SyszNXJHQzVMaU41cGl2UjBWVTc3eU01WWlaNVp5b1ZWSk01TGl0NkllcTVZcW81WXFnNUxpSzU1bTc1YjJWNW9DQjVaS001WVdvNWJHQTVZK0M1cFd3WEc0Z0lDQWdhV1lnS0c5aWFpNXRaWFJvYjJRZ0lUMDlJRndpUjBWVVhDSXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tITjBZWFIxY3k1elpYTnphVzl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdWRYSnNJRDBnZFhKc0xuTmxkRkJoY21GdGN5aHZZbW91ZFhKc0xDQjdXMk52Ym1acFp5NXpaWE56YVc5dVRtRnRaVjA2SUhOMFlYUjFjeTV6WlhOemFXOXVmU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2IySnFMblZ5YkNBOUlIVnliQzV6WlhSUVlYSmhiWE1vYjJKcUxuVnliQ3dnWjJRcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1YzNSaGNuUW9iMkpxS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJ2WW1vN1hHNTlYRzVjYmk4dklPYWd2T1c4aitXTWx1V2toT2VRaHVTNGl1UzhvT2FXaCtTN3R1ZWFoRzlpYXVXR2hlV3V1Vnh1Wm5WdVkzUnBiMjRnYVc1cGRHbGhiR2w2WlZWd2JHOWhaRVpwYkdWUFltb29iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUdsbUlDZ2hiMkpxTG1admNtMUVZWFJoS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtYjNKdFJHRjBZU0E5SUh0OU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHZZbW91YjNKcFoybHVWWEpzSUNFOVBTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTUxY213Z0ppWWdjM1JoZEhWekxuTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1admNtMUVZWFJoSUQwZ2V5NHVMbTlpYWk1bWIzSnRSR0YwWVNCaGN5QnZZbXBsWTNRc0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJuMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGc1YWFDNXA2YzVweUo1WVdvNWJHQTVZK0M1cFd3Nzd5TTVZaVo1cmU3NVlxZ1hHNGdJQ0FnWTI5dWMzUWdaMlFnUFNCblpYUkhiRzlpWVd4RVlYUmhLQ2s3WEc0Z0lDQWdiMkpxTG1admNtMUVZWFJoSUQwZ2V5NHVMbWRrTENBdUxpNXZZbW91Wm05eWJVUmhkR0Y5TzF4dVhHNGdJQ0FnTHk4ZzViQ0c1NW03NlptRzVvQ0I1TG1mNWJpbTVaeW9kWEpzNUxpS1hHNGdJQ0FnYVdZZ0tITjBZWFIxY3k1elpYTnphVzl1S1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTUxY213Z1BTQjFjbXd1YzJWMFVHRnlZVzF6S0c5aWFpNTFjbXdzSUh0YlkyOXVabWxuTG5ObGMzTnBiMjVPWVcxbFhUb2djM1JoZEhWekxuTmxjM05wYjI1OUtUdGNiaUFnSUNCOVhHNGdJQ0FnTHk4ZzVZV281YkdBNVkrQzVwV3c1WkNNNXBlMjVwUys1WnlvZFhKczVMaUtYRzRnSUNBZ2IySnFMblZ5YkNBOUlIVnliQzV6WlhSUVlYSmhiWE1vYjJKcUxuVnliQ3dnWjJRcE8xeHVYRzRnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1emRHRnlkQ2h2WW1vcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc5aWFqdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1oyVjBSMnh2WW1Gc1JHRjBZU2dwSUh0Y2JpQWdJQ0JzWlhRZ1oyUTZJR0Z1ZVNBOUlIdDlPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtZHNiMkpoYkVSaGRHRWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0JuWkNBOUlHTnZibVpwWnk1bmJHOWlZV3hFWVhSaEtDazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1kc2IySmhiRVJoZEdFZ1BUMDlJRndpYjJKcVpXTjBYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1oyUWdQU0JqYjI1bWFXY3VaMnh2WW1Gc1JHRjBZVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdka08xeHVmVnh1WEc1bWRXNWpkR2x2YmlCa2IxSmxjWFZsYzNRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpa2dlMXh1SUNBZ0lHOWlhaUE5SUdsdWFYUnBZV3hwZW1WU1pYRjFaWE4wVDJKcUtHOWlhaWs3WEc0Z0lDQWdiMkpxTG1OdmRXNTBLeXM3WEc0Z0lDQWdkM2d1Y21WeGRXVnpkQ2g3WEc0Z0lDQWdJQ0FnSUhWeWJEb2diMkpxTG5WeWJDeGNiaUFnSUNBZ0lDQWdaR0YwWVRvZ2IySnFMbVJoZEdFc1hHNGdJQ0FnSUNBZ0lHMWxkR2h2WkRvZ2IySnFMbTFsZEdodlpDeGNiaUFnSUNBZ0lDQWdhR1ZoWkdWeU9pQnZZbW91YUdWaFpHVnlJSHg4SUh0OUxGeHVJQ0FnSUNBZ0lDQmtZWFJoVkhsd1pUb2diMkpxTG1SaGRHRlVlWEJsSUh4OElDZHFjMjl1Snl4Y2JpQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3loeVpYTTZJSGQ0TGxKbGNYVmxjM1JUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGMzQnZibk5sU0dGdVpHeGxjaWh5WlhNc0lHOWlhaXdnSjNKbGNYVmxjM1FuS1Z4dUlDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQm1ZV2xzSUNoeVpYTTZJSGQ0TGtkbGJtVnlZV3hEWVd4c1ltRmphMUpsYzNWc2RDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pYSnliM0pJWVc1a2JHVnlMbk41YzNSbGJVVnljbTl5S0c5aWFpd2djbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OdmJHVXVaWEp5YjNJb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVZ0tDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbU52ZFc1MExTMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaDBlWEJsYjJZZ2IySnFMbU52YlhCc1pYUmxJRDA5UFNCY0ltWjFibU4wYVc5dVhDSWdKaVlnYjJKcUxtTnZkVzUwSUQwOVBTQXdLWHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdVkyOXRjR3hsZEdVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUdSdlZYQnNiMkZrUm1sc1pTaHZZbW82SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1S1NCN1hHNGdJQ0FnYjJKcUlEMGdhVzVwZEdsaGJHbDZaVlZ3Ykc5aFpFWnBiR1ZQWW1vb2IySnFLVHRjYmlBZ0lDQnZZbW91WTI5MWJuUXJLenRjYmlBZ0lDQjNlQzUxY0d4dllXUkdhV3hsS0h0Y2JpQWdJQ0FnSUNBZ2RYSnNPaUJ2WW1vdWRYSnNMRnh1SUNBZ0lDQWdJQ0JtYVd4bFVHRjBhRG9nYjJKcUxtWnBiR1ZRWVhSb0lIeDhJQ2NuTEZ4dUlDQWdJQ0FnSUNCdVlXMWxPaUJ2WW1vdWJtRnRaU0I4ZkNBbkp5eGNiaUFnSUNBZ0lDQWdabTl5YlVSaGRHRTZJRzlpYWk1bWIzSnRSR0YwWVN4Y2JpQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3lBb2NtVnpPaUIzZUM1VmNHeHZZV1JHYVd4bFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWE53YjI1elpVaGhibVJzWlhJb2NtVnpMQ0J2WW1vc0lDZDFjR3h2WVdSR2FXeGxKeWxjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ1ptRnBiQ0FvY21Wek9pQjNlQzVIWlc1bGNtRnNRMkZzYkdKaFkydFNaWE4xYkhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWeWNtOXlTR0Z1Wkd4bGNpNXplWE4wWlcxRmNuSnZjaWh2WW1vc0lISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0hKbGN5azdYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUdOdmJYQnNaWFJsSUNncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUc5aWFpNWpiM1Z1ZEMwdE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZb2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUlDWW1JRzlpYWk1amIzVnVkQ0E5UFQwZ01DbDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OdmJYQnNaWFJsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJ5WlhGMVpYTjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRwT2lCMmIybGtJSHRjYmlBZ0lDQnZZbW9nUFNCd2NtVkVieWh2WW1vcE8xeHVJQ0FnSUdsbUtHTnZibVpwWnk1dGIyTnJTbk52YmlrZ2UxeHVJQ0FnSUNBZ0lDQnRiMk5yVFdGdVlXZGxjaTVuWlhRb2IySnFMQ0FuY21WeGRXVnpkQ2NwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1LRzlpYWk1allXTm9aU2tnZTF4dUlDQWdJQ0FnSUNCallXTm9aVTFoYm1GblpYSXVaMlYwS0c5aWFpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2MyVnpjMmx2YmsxaGJtRm5aWElvS0NrOVBudGNiaUFnSUNBZ0lDQWdaRzlTWlhGMVpYTjBLRzlpYWlsY2JpQWdJQ0I5TENCdlltb3BYRzU5WEc1Y2JtWjFibU4wYVc5dUlIVndiRzloWkVacGJHVW9iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrNklIWnZhV1FnZTF4dUlDQWdJRzlpYWlBOUlIQnlaVVJ2S0c5aWFpa2dZWE1nU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjQ3WEc0Z0lDQWdhV1lvWTI5dVptbG5MbTF2WTJ0S2MyOXVLU0I3WEc0Z0lDQWdJQ0FnSUcxdlkydE5ZVzVoWjJWeUxtZGxkQ2h2WW1vc0lDZDFjR3h2WVdSR2FXeGxKeWs3WEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnpaWE56YVc5dVRXRnVZV2RsY2lnb0tUMCtlMXh1SUNBZ0lDQWdJQ0JrYjFWd2JHOWhaRVpwYkdVb2IySnFLVnh1SUNBZ0lIMHNJRzlpYWlsY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdlMXh1SUNBZ0lHWnZjbTFoZEN4Y2JpQWdJQ0J5WlhGMVpYTjBMRnh1SUNBZ0lIVndiRzloWkVacGJHVmNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xuZnVuY3Rpb24gcmVzcG9uc2UocmVzLCBvYmosIG1ldGhvZCkge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzLmRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuZW5kKG9iaik7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmxvZ2luVHJpZ2dlcihyZXMuZGF0YSkgJiYgb2JqLnJlTG9naW5MaW1pdCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XG4gICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSAnJztcbiAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbklzRnJlc2ggPSB0cnVlO1xuICAgICAgICAgICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQucmVxdWVzdChvYmopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ1cGxvYWRGaWxlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NUcmlnZ2VyKHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgdmFyIHJlYWxEYXRhID0gXCJcIjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVhbERhdGEgPSBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZ1bmN0aW9uIHN1Y2Nlc3NEYXRhIG9jY3VyIGVycm9yOiBcIiArIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvYmoubm9DYWNoZUZsYXNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LnNldChvYmosIHJlYWxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gcmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ6Y0c5dWMyVklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzl5WlhOd2IyNXpaVWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCUTNCRExHMUVRVUUyUXp0QlFVTTNReXdyUTBGQmVVTTdRVUZEZWtNc0swTkJRWGxETzBGQlEzcERMSFZFUVVGcFJEdEJRVWRxUkN4VFFVRlRMRkZCUVZFc1EwRkRZaXhIUVVGNVJTeEZRVU42UlN4SFFVRjFReXhGUVVOMlF5eE5RVUZuUXp0SlFVVm9ReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NSMEZCUnl4RlFVRkZPMUZCUjNoQ0xFbEJRVWNzVDBGQlR5eEhRVUZITEVOQlFVTXNTVUZCU1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVNM1FpeEpRVUZKTzJkQ1FVTkJMRWRCUVVjc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WVVGRGJrTTdXVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRuUWtGRFVpeHpRa0ZCV1N4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTJ4RExFOUJRVThzUzBGQlN5eERRVUZETzJGQlEyaENPMU5CUTBvN1VVRkZSQ3d3UWtGQlowSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRk1VSXNTVUZCU1N4blFrRkJUU3hEUVVGRExGbEJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExGbEJRVmtzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRmxCUVdFc1JVRkJSVHRaUVVVelJTeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1IwRkJSeXhGUVVGRkxFTkJRVU03V1VGRGNFSXNaMEpCUVUwc1EwRkJReXhqUVVGakxFZEJRVWNzU1VGQlNTeERRVUZETzFsQlF6ZENMRVZCUVVVc1EwRkJReXhoUVVGaExFTkJRVU03WjBKQlEySXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zVjBGQldUdG5Ra0ZEZUVJc1VVRkJVVHR2UWtGRFNpeEpRVUZITEUxQlFVMHNTMEZCU3l4VFFVRlRMRVZCUVVVN2QwSkJRM0pDTEhkQ1FVRmpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRWEZDTEVOQlFVTXNRMEZCUXp0eFFrRkRha1E3ZVVKQlFVMHNTVUZCUnl4TlFVRk5MRXRCUVVzc1dVRkJXU3hGUVVGRk8zZENRVU12UWl4M1FrRkJZeXhEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUYzUWl4RFFVRkRMRU5CUVVNN2NVSkJRM1pFTzJkQ1FVTk1MRU5CUVVNN1lVRkRTaXhEUVVGRExFTkJRVUU3VTBGRFREdGhRVUZOTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMWxCUlhoRExFbEJRVWtzVVVGQlVTeEhRVUZ6UXl4RlFVRkZMRU5CUVVNN1dVRkRja1FzU1VGQlNUdG5Ra0ZEUVN4UlFVRlJMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yRkJRek5ETzFsQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVN1owSkJRMUlzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4dlEwRkJiME1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTXpSRHRaUVVORUxFbEJRVWNzUTBGQlJTeEhRVUZ6UWl4RFFVRkRMRmxCUVZrc1JVRkJSVHRuUWtGRmRFTXNTVUZCUnl4UFFVRlBMRWRCUVVjc1EwRkJReXhQUVVGUExFdEJRVXNzVlVGQlZTeEZRVUZETzI5Q1FVTnFReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMmxDUVVONlFqdGhRVU5LTzFsQlJVUXNjMEpCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPMU5CUTI1RE8yRkJRVTA3V1VGRlNDeHpRa0ZCV1N4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEY2tNN1MwRkRTanRUUVVGTk8xRkJRMGdzYzBKQlFWa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEzSkRPMEZCUTB3c1EwRkJRenRCUVVWRUxHdENRVUZsTEZGQlFWRXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YRzVwYlhCdmNuUWdjbVZ4ZFdWemRFaGhibVJzWlhJZ1puSnZiU0FuTGk5eVpYRjFaWE4wU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0JsY25KdmNraGhibVJzWlhJZ1puSnZiU0FuTGk5bGNuSnZja2hoYm1Sc1pYSW5YRzVwYlhCdmNuUWdZMkZqYUdWTllXNWhaMlZ5SUdaeWIyMGdKeTR2WTJGamFHVk5ZVzVoWjJWeUoxeHVhVzF3YjNKMElHUjFjbUYwYVc5dVVtVndiM0owWlhJZ1puSnZiU0FuTGk5a2RYSmhkR2x2YmxKbGNHOXlkR1Z5SjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lPMXh1WEc1bWRXNWpkR2x2YmlCeVpYTndiMjV6WlNoY2JpQWdJQ0J5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFnZkNCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwTEZ4dUlDQWdJRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2Yml4Y2JpQWdJQ0J0WlhSb2IyUTZJRndpY21WeGRXVnpkRndpSUh3Z1hDSjFjR3h2WVdSR2FXeGxYQ0pjYmlrNklHRnVlU0I3WEc0Z0lDQWdhV1lnS0hKbGN5NXpkR0YwZFhORGIyUmxJRDA5UFNBeU1EQXBJSHRjYmx4dUlDQWdJQ0FnSUNBdkx5RGxoYnpscnJsMWNHeHZZV1JHYVd4bDZMK1U1WnVlNTVxRWNtVnpMbVJoZEdIbGo2L29nNzNtbUsvbHJaZm5yS2JrdUxKY2JpQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUlISmxjeTVrWVhSaElEMDlQU0JjSW5OMGNtbHVaMXdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjeTVrWVhSaElEMGdTbE5QVGk1d1lYSnpaU2h5WlhNdVpHRjBZU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxteHZaMmxqUlhKeWIzSW9iMkpxTENCeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdVpXNWtLRzlpYWlrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0dOdmJtWnBaeTVzYjJkcGJsUnlhV2RuWlhJaEtISmxjeTVrWVhSaEtTQW1KaUJ2WW1vdWNtVk1iMmRwYmt4cGJXbDBJRHdnWTI5dVptbG5MbkpsVEc5bmFXNU1hVzFwZENFcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPZVp1K1c5bGVhQWdlV2tzZWFWaU8rOGpPUzRsT21IamVpdmxlYXNvZWFWc09TNGplaTJoZWkvaCttRmplZTlybHh1SUNBZ0lDQWdJQ0FnSUNBZ2MzUmhkSFZ6TG5ObGMzTnBiMjRnUFNBbkp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVTWE5HY21WemFDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IzZUM1eVpXMXZkbVZUZEc5eVlXZGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JyWlhrNklHTnZibVpwWnk1elpYTnphVzl1VG1GdFpTRXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0d4bGRHVWdLQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWh0WlhSb2IyUWdQVDA5SUZ3aWNtVnhkV1Z6ZEZ3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWEYxWlhOMFNHRnVaR3hsY2k1eVpYRjFaWE4wS0c5aWFpQmhjeUJKVW1WeGRXVnpkRTl3ZEdsdmJpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlodFpYUm9iMlFnUFQwOUlGd2lkWEJzYjJGa1JtbHNaVndpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYRjFaWE4wU0dGdVpHeGxjaTUxY0d4dllXUkdhV3hsS0c5aWFpQmhjeUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR052Ym1acFp5NXpkV05qWlhOelZISnBaMmRsY2loeVpYTXVaR0YwWVNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPYU9wZVdQbytpL2xPV2JudWFJa09XS24rZWdnVnh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsWVd4RVlYUmhPaUJ6ZEhKcGJtY2dmQ0JKUVc1NVQySnFaV04wSUh3Z1FYSnlZWGxDZFdabVpYSWdQU0JjSWx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaV0ZzUkdGMFlTQTlJR052Ym1acFp5NXpkV05qWlhOelJHRjBZU2h5WlhNdVpHRjBZU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpaGNJa1oxYm1OMGFXOXVJSE4xWTJObGMzTkVZWFJoSUc5alkzVnlJR1Z5Y205eU9pQmNJaUFySUdVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lvSVNodlltb2dZWE1nU1ZKbGNYVmxjM1JQY0hScGIyNHBMbTV2UTJGamFHVkdiR0Z6YUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PUzR1dVM2aHVTL25laXZnZW1odGVtZG91UzRqZW1YcXVlRGdlKzhqT1dJbWVTNGplV2JudWl3ZysrOGpPV1BxdWFZcitlOGsrV3RtT2FjZ09hV3NPYVZzT2FOcnUrOGpPVytoZVM0aSthc29laS9tK1dGcGVXR2plZVVxRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0hSNWNHVnZaaUJ2WW1vdWMzVmpZMlZ6Y3lBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG5OMVkyTmxjM01vY21WaGJFUmhkR0VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2U4aytXdG1PV3RtT1dDcUZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZqYUdWTllXNWhaMlZ5TG5ObGRDaHZZbW9zSUhKbFlXeEVZWFJoS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9hT3BlV1BvK2kvbE9XYm51V2tzZWkwcGVlZ2dWeHVJQ0FnSUNBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxteHZaMmxqUlhKeWIzSW9iMkpxTENCeVpYTXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdaWEp5YjNKSVlXNWtiR1Z5TG14dloybGpSWEp5YjNJb2IySnFMQ0J5WlhNcE8xeHVJQ0FnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdjbVZ6Y0c5dWMyVTdYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGZsb3dfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2Zsb3dcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBjaGVja1Nlc3Npb25Qcm9taXNlID0gbnVsbDtcbmZ1bmN0aW9uIGNoZWNrU2Vzc2lvbigpIHtcbiAgICBpZiAoIWNoZWNrU2Vzc2lvblByb21pc2UpIHtcbiAgICAgICAgY2hlY2tTZXNzaW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25Jc0ZyZXNoICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwid3guY2hlY2tTZXNzaW9uKClcIik7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0XzEgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICB3eC5jaGVja1Nlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KCd3eF9jaGVja1Nlc3Npb24nLCBzdGFydF8xLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tTZXNzaW9uUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGRvTG9naW4oY2FsbGJhY2ssIG9iaikge1xuICAgIGlmIChzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgbmV3IERhdGUoKS5nZXRUaW1lKCkgPiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9ICcnO1xuICAgICAgICAgICAgZG9Mb2dpbihjYWxsYmFjaywgb2JqKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoc3RhdHVzXzEuZGVmYXVsdC5sb2dpbmluZykge1xuICAgICAgICBmbG93XzEuZGVmYXVsdC53YWl0KCdkb0xvZ2luRmluaXNoZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb0xvZ2luKGNhbGxiYWNrLCBvYmopO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdldENvZGUoY2FsbGJhY2ssIG9iaik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0Q29kZShjYWxsYmFjaywgb2JqKSB7XG4gICAgc3RhdHVzXzEuZGVmYXVsdC5sb2dpbmluZyA9IHRydWU7XG4gICAgY29uc29sZS5sb2coJ3d4LmxvZ2luJyk7XG4gICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgd3gubG9naW4oe1xuICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KCd3eF9sb2dpbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICB9LFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcbiAgICAgICAgICAgICAgICBjb2RlMlNlc3Npb24ocmVzLmNvZGUpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LmxvZ2luaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZsb3dfMS5kZWZhdWx0LmVtaXQoJ2RvTG9naW5GaW5pc2hlZCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKFwi55m75b2V5aSx6LSlXCIsIFwi6K+356iN5ZCO6YeN6K+VW2NvZGUg6I635Y+W5aSx6LSlXVwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcyk7XG4gICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5sb2dpbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZsb3dfMS5kZWZhdWx0LmVtaXQoJ2RvTG9naW5GaW5pc2hlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbiAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQubG9naW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGZsb3dfMS5kZWZhdWx0LmVtaXQoJ2RvTG9naW5GaW5pc2hlZCcpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjb2RlMlNlc3Npb24oY29kZSkge1xuICAgIHZhciBkYXRhO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSB8fCB7fTtcbiAgICB9XG4gICAgZGF0YVtjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uY29kZU5hbWVdID0gY29kZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQuZm9ybWF0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwpLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIG1ldGhvZDogY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnJlcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uc3VjY2VzcyhyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbklzRnJlc2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2EgPSBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmdldEVycm9yTXNnKHJlcyksIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKHRpdGxlLCBjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKFwi55m75b2V5aSx6LSlXCIsIFwi6K+356iN5ZCO6YeN6K+VXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKFwi55m75b2V5aSx6LSlXCIsIFwi6K+356iN5ZCO6YeN6K+VXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChmbiwgb2JqKSB7XG4gICAgY2hlY2tTZXNzaW9uKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBkb0xvZ2luKGZuLCBvYmopO1xuICAgIH0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlZ6YzJsdmJrMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM05sYzNOcGIyNU5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc2NVTkJRU3RDTzBGQlF5OUNMREJEUVVGdlF6dEJRVU53UXl3d1EwRkJiME03UVVGRGNFTXNLME5CUVhsRE8wRkJRM3BETEhWRVFVRnBSRHRCUVVOcVJDeHRSRUZCTmtNN1FVRkhOME1zU1VGQlNTeHRRa0ZCYlVJc1IwRkJVU3hKUVVGSkxFTkJRVU03UVVGRGNFTXNVMEZCVXl4WlFVRlpPMGxCUTJwQ0xFbEJRVWNzUTBGQlF5eHRRa0ZCYlVJc1JVRkJSVHRSUVVOeVFpeHRRa0ZCYlVJc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVODdXVUZEZEVNc1NVRkJSeXhuUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhGUVVGRk8yZENRVU42UWl4UFFVRlBMRVZCUVVVc1EwRkJRenRoUVVOaU8ybENRVUZOTEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExHTkJRV01zU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1JVRkJSVHRuUWtGRGFrUXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4RFFVRkRPMmRDUVVOcVF5eEpRVUZOTEU5QlFVc3NSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzJkQ1FVTnVReXhGUVVGRkxFTkJRVU1zV1VGQldTeERRVUZETzI5Q1FVTmFMRTlCUVU4N2QwSkJSVWdzVDBGQlR5eEZRVUZGTEVOQlFVTTdiMEpCUTJRc1EwRkJRenR2UWtGRFJDeEpRVUZKTzNkQ1FVVkJMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXp0M1FrRkRjRUlzVDBGQlR5eEZRVUZGTEVOQlFVTTdiMEpCUTJRc1EwRkJRenR2UWtGRFJDeFJRVUZSTzNkQ1FVTktMRWxCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN2QwSkJRMnBETERCQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3hQUVVGTExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdiMEpCUXpORUxFTkJRVU03YVVKQlEwb3NRMEZCUXl4RFFVRkJPMkZCUTB3N2FVSkJRVTA3WjBKQlEwZ3NUMEZCVHl4RlFVRkZMRU5CUVVNN1lVRkRZanRSUVVOTUxFTkJRVU1zUTBGQlF5eERRVUZCTzB0QlEwdzdTVUZEUkN4UFFVRlBMRzFDUVVGdFFpeERRVUZETzBGQlF5OUNMRU5CUVVNN1FVRkZSQ3hUUVVGVExFOUJRVThzUTBGQlF5eFJRVUZyUWl4RlFVRkZMRWRCUVhWRE8wbEJRM2hGTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3VVVGRmFFSXNTVUZCU1N4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SlFVRkpMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhoUVVGaExFVkJRVVU3V1VGRmVrVXNaMEpCUVUwc1EwRkJReXhQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETzFsQlEzQkNMRTlCUVU4c1EwRkJReXhSUVVGUkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZETVVJN1lVRkJUVHRaUVVOSUxFbEJRVWNzVDBGQlR5eFJRVUZSTEV0QlFVc3NWVUZCVlN4RlFVRkRPMmRDUVVNNVFpeFJRVUZSTEVWQlFVVXNRMEZCUXp0aFFVTmtPMU5CUTBvN1MwRkRTanRUUVVGTkxFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UlFVRlJMRVZCUVVVN1VVRkZlRUlzWTBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUlVGQlJUdFpRVU42UWl4UFFVRlBMRU5CUVVNc1VVRkJVU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlF6TkNMRU5CUVVNc1EwRkJReXhEUVVGQk8wdEJRMHc3VTBGQlRUdFJRVVZJTEU5QlFVOHNRMEZCUXl4UlFVRlJMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRE1VSTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXhQUVVGUExFTkJRVU1zVVVGQmEwSXNSVUZCUlN4SFFVRjFRenRKUVVONFJTeG5Ra0ZCVFN4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU03U1VGRGRrSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dEpRVU40UWl4SlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMGxCUTI1RExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTTdVVUZEVEN4UlFVRlJPMWxCUTBvc1NVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOcVF5d3dRa0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zVlVGQlZTeEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOd1JDeERRVUZETzFGQlEwUXNUMEZCVHl4WlFVRkZMRWRCUVVjN1dVRkRVaXhKUVVGSkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVWQlFVVTdaMEpCUTFZc1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN2IwSkJRM2hDTEZGQlFWRXNSVUZCUlN4RFFVRkRPMjlDUVVOWUxHZENRVUZOTEVOQlFVTXNVVUZCVVN4SFFVRkhMRXRCUVVzc1EwRkJRenR2UWtGRGVFSXNZMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRPMmRDUVVOcVF5eERRVUZETEVOQlFVTXNRMEZCUVR0aFFVTk1PMmxDUVVGTk8yZENRVU5JTEhOQ1FVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeHJRa0ZCYTBJc1EwRkJReXhEUVVGRE8yZENRVU5xUkN4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVVnVRaXhuUWtGQlRTeERRVUZETEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1owSkJRM2hDTEdOQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXp0aFFVTm9RenRSUVVOTUxFTkJRVU03VVVGRFJDeEpRVUZKTEZsQlFVVXNSMEZCUnp0WlFVTk1MSE5DUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOdVF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJSVzVDTEdkQ1FVRk5MRU5CUVVNc1VVRkJVU3hIUVVGSExFdEJRVXNzUTBGQlF6dFpRVU40UWl4alFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1VVRkRha01zUTBGQlF6dExRVU5LTEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hUUVVGVExGbEJRVmtzUTBGQlF5eEpRVUZaTzBsQlF6bENMRWxCUVVrc1NVRkJVeXhEUVVGRE8wbEJSV1FzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEYWtRc1NVRkJTU3hIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wdEJRM1JETzFOQlFVMDdVVUZEU0N4SlFVRkpMRWRCUVVjc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJRenRMUVVNeFF6dEpRVU5FTEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZUTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkZOVU1zVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4N1VVRkRka0lzU1VGQlNTeExRVUZMTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVU5xUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRE8xbEJRMUFzUjBGQlJ5eEZRVUZGTEhkQ1FVRmpMRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJRenRaUVVOd1JDeEpRVUZKTEUxQlFVRTdXVUZEU2l4TlFVRk5MRVZCUVVVc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4SlFVRkpMRXRCUVVzN1dVRkROVU1zVDBGQlR5eFpRVUZGTEVkQlFXOURPMmRDUVVONlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4VlFVRlZMRXRCUVVzc1IwRkJSeXhGUVVGRk8yOUNRVVY0UWl4SlFVRkhMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEUxQlFVMHNSVUZCUlR0M1FrRkROVUlzU1VGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dDNRa0ZETDBJc01FSkJRV2RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEUxQlFVMHNSVUZCUlN4TFFVRkxMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVUU3Y1VKQlEyNUZPMjlDUVVWRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0dlFrRkRXQ3hKUVVGSk8zZENRVU5CTEVOQlFVTXNSMEZCUnl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8zRkNRVU01UXp0dlFrRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdHhRa0ZEV0R0dlFrRkZSQ3hKUVVGSkxFTkJRVU1zUlVGQlJUdDNRa0ZEU0N4blFrRkJUU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdkMEpCUTI1Q0xHZENRVUZOTEVOQlFVTXNZMEZCWXl4SFFVRkhMRWxCUVVrc1EwRkJRenQzUWtGRk4wSXNTVUZCU1N4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4RlFVRkZPelJDUVVNeFFpeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNN05FSkJRM1pGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNN1owTkJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTzJkRFFVTTFRaXhKUVVGSkxFVkJRVVVzVFVGQlRTeERRVUZETEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRE96WkNRVU55UXl4RFFVRkRMRU5CUVVFN2VVSkJRMHc3ZDBKQlEwUXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJRenMwUWtGRFZpeEhRVUZITEVWQlFVVXNaMEpCUVUwc1EwRkJReXhYUVVGWE96UkNRVU4yUWl4SlFVRkpMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFBRVUZQTzNsQ1FVTjJRaXhEUVVGRExFTkJRVU03Y1VKQlEwNDdlVUpCUVUwN2QwSkJRME1zU1VGQlFTdzBRMEZCWjBRc1JVRkJMME1zWjBKQlFVc3NSVUZCUlN4dlFrRkJkME1zUTBGQlF6dDNRa0ZEY2tRc2MwSkJRVmtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGQk8zRkNRVU4yUXp0cFFrRkRTanR4UWtGQlRUdHZRa0ZEU0N4elFrRkJXU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVFN2FVSkJRM2hETzJkQ1FVTkVMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03V1VGRGNrSXNRMEZCUXp0WlFVTkVMRkZCUVZFc1owSkJRVXNzUTBGQlF6dFpRVU5rTEVsQlFVa3NSVUZCUlR0blFrRkRSaXh6UWtGQldTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03WjBKQlEzUkRMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03V1VGRGNrSXNRMEZCUXp0VFFVTktMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRzFDUVVGbExGVkJRVU1zUlVGQldTeEZRVUZGTEVkQlFYVkRPMGxCUTJwRkxGbEJRVmtzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTm9RaXhQUVVGUExFOUJRVThzUTBGQlF5eEZRVUZGTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVFN1NVRkRNMElzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEVUN4RFFVRkRMRVZCUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ1pteHZkeUJtY205dElDY3VMaTkxZEdsc0wyWnNiM2NuWEc1cGJYQnZjblFnYzNSaGRIVnpJR1p5YjIwZ0p5NHVMM04wYjNKbEwzTjBZWFIxY3lkY2JtbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElHVnljbTl5U0dGdVpHeGxjaUJtY205dElDY3VMMlZ5Y205eVNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5SUdaeWIyMGdKeTR2WkhWeVlYUnBiMjVTWlhCdmNuUmxjaWRjYm1sdGNHOXlkQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpQm1jbTl0SUNjdUwzSmxjWFZsYzNSSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUh0SlVtVnhkV1Z6ZEU5d2RHbHZiaXdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjU5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lseHVYRzVzWlhRZ1kyaGxZMnRUWlhOemFXOXVVSEp2YldselpUb2dZVzU1SUQwZ2JuVnNiRHRjYm1aMWJtTjBhVzl1SUdOb1pXTnJVMlZ6YzJsdmJpZ3BJSHRjYmlBZ0lDQnBaaWdoWTJobFkydFRaWE56YVc5dVVISnZiV2x6WlNrZ2UxeHVJQ0FnSUNBZ0lDQmphR1ZqYTFObGMzTnBiMjVRY205dGFYTmxJRDBnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1VcFBUNTdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaGpiMjVtYVdjdVpHOU9iM1JEYUdWamExTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tDRnpkR0YwZFhNdWMyVnpjMmx2YmtselJuSmxjMmdnSmlZZ2MzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG14dlp5aGNJbmQ0TG1Ob1pXTnJVMlZ6YzJsdmJpZ3BYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSE4wWVhKMElEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZDNndVkyaGxZMnRUWlhOemFXOXVLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3lBb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURubWJ2bHZaWG1nSUhtbklubWxZanZ2SXprdUpUbG5Lam1uS3pubEovbGtiM2xrYWptbkovbGhvWG1sNkRwb2J2bGhvM21vNERwcW96a3VvWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabUZwYkNBb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURubWJ2bHZaWG1nSUhvdjRmbW5KOWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ0p5YzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052YlhCc1pYUmxJQ2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Z1WkNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXlaWEJ2Y25Rb0ozZDRYMk5vWldOclUyVnpjMmx2Ymljc0lITjBZWEowTENCbGJtUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WemIyeDJaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1kyaGxZMnRUWlhOemFXOXVVSEp2YldselpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pHOU1iMmRwYmloallXeHNZbUZqYXpvZ1JuVnVZM1JwYjI0c0lHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJR2xtSUNoemRHRjBkWE11YzJWemMybHZiaWtnZTF4dUlDQWdJQ0FnSUNBdkx5RG52SlBsclpqa3VLM21uSWx6WlhOemFXOXVYRzRnSUNBZ0lDQWdJR2xtSUNoemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpWUnBiV1VnSmlZZ2JtVjNJRVJoZEdVb0tTNW5aWFJVYVcxbEtDa2dQaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNXB5SjZLNis1NzJ1NXB5czVaeXdjMlZ6YzJsdmJ1ZThrK1d0bU9hWHR1bVh0Tys4ak9TNGxPZThrK1d0bU9hWHR1bVh0T1czc3VXSXNGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNGdQU0FuSnp0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1J2VEc5bmFXNG9ZMkZzYkdKaFkyc3NJRzlpYWlrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloMGVYQmxiMllnWTJGc2JHSmhZMnNnUFQwOUlGd2lablZ1WTNScGIyNWNJaWw3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGc2JHSmhZMnNvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQnBaaUFvYzNSaGRIVnpMbXh2WjJsdWFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUM4dklPYXRvK1djcU9lWnUrVzlsZVM0cmUrOGpPaXZ0K2F4Z3VpOXJ1aXZvdWVvamVXUWp1KzhqT21CditXRmplbUhqZVdramVpd2crZVVxT2VadStXOWxlYU9wZVdQbzF4dUlDQWdJQ0FnSUNCbWJHOTNMbmRoYVhRb0oyUnZURzluYVc1R2FXNXBjMmhsWkNjc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1J2VEc5bmFXNG9ZMkZzYkdKaFkyc3NJRzlpYWlrN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0x5OGc1N3lUNWEyWTVMaXQ1cGVnYzJWemMybHZibHh1SUNBZ0lDQWdJQ0JuWlhSRGIyUmxLR05oYkd4aVlXTnJMQ0J2WW1vcE8xeHVJQ0FnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWjJWMFEyOWtaU2hqWVd4c1ltRmphem9nUm5WdVkzUnBiMjRzSUc5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0Z2ZDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dlMXh1SUNBZ0lITjBZWFIxY3k1c2IyZHBibWx1WnlBOUlIUnlkV1U3WEc0Z0lDQWdZMjl1YzI5c1pTNXNiMmNvSjNkNExteHZaMmx1SnlrN1hHNGdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQjNlQzVzYjJkcGJpaDdYRzRnSUNBZ0lDQWdJR052YlhCc1pYUmxJQ2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHVnVaQ0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTV5WlhCdmNuUW9KM2Q0WDJ4dloybHVKeXdnYzNSaGNuUXNJR1Z1WkNrN1hHNGdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJSE4xWTJObGMzTWdLSEpsY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjeTVqYjJSbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjlrWlRKVFpYTnphVzl1S0hKbGN5NWpiMlJsS1M1MGFHVnVLQ2dwUFQ1N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05oYkd4aVlXTnJLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1c2IyZHBibWx1WnlBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1iRzkzTG1WdGFYUW9KMlJ2VEc5bmFXNUdhVzVwYzJobFpDY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnljbTl5U0dGdVpHeGxjaTVrYjBWeWNtOXlLRndpNTVtNzViMlY1YVN4NkxTbFhDSXNJRndpNksrMzU2aU41WkNPNlllTjZLK1ZXMk52WkdVZzZJNjM1WStXNWFTeDZMU2xYVndpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1NW03NWIyVjVhU3g2TFNsNzd5TTZLZWo2Wm1rNlpTQjc3eU02Wml5NXEyaTVxMjc2WlNCWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGRIVnpMbXh2WjJsdWFXNW5JRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabXh2ZHk1bGJXbDBLQ2RrYjB4dloybHVSbWx1YVhOb1pXUW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWm1GcGJDQW9jbVZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdWMzbHpkR1Z0UlhKeWIzSW9iMkpxTENCeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWh5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzU1bTc1YjJWNWFTeDZMU2w3N3lNNktlajZabWs2WlNCNzd5TTZaaXk1cTJpNXEyNzZaU0JYRzRnSUNBZ0lDQWdJQ0FnSUNCemRHRjBkWE11Ykc5bmFXNXBibWNnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHWnNiM2N1WlcxcGRDZ25aRzlNYjJkcGJrWnBibWx6YUdWa0p5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmpiMlJsTWxObGMzTnBiMjRvWTI5a1pUb2djM1J5YVc1bktTQjdYRzRnSUNBZ2JHVjBJR1JoZEdFNklHRnVlVHRjYmlBZ0lDQXZMeUJqYjJSbFZHOVRaWE56YVc5dUxtUmhkR0htbEsvbWpJSGxoNzNtbGJCY2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxtUmhkR0VnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCa1lYUmhJRDBnWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dVpHRjBZU2dwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFZ1BTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVrWVhSaElIeDhJSHQ5TzF4dUlDQWdJSDFjYmlBZ0lDQmtZWFJoVzJOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxtTnZaR1ZPWVcxbElWMGdQU0JqYjJSbE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabEtUMCtlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2MzUmhjblFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNiaUFnSUNBZ0lDQWdkM2d1Y21WeGRXVnpkQ2g3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjFjbXc2SUhKbGNYVmxjM1JJWVc1a2JHVnlMbVp2Y20xaGRDaGpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTUxY213cExGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlTeGNiaUFnSUNBZ0lDQWdJQ0FnSUcxbGRHaHZaRG9nWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dWJXVjBhRzlrSUh4OElDZEhSVlFuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5QW9jbVZ6T2lCM2VDNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjeTV6ZEdGMGRYTkRiMlJsSUQwOVBTQXlNREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNklDWDVwZTI1TGlLNW9xbFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0dOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxuSmxjRzl5ZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR1Z1WkNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXlaWEJ2Y25Rb1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVjbVZ3YjNKMExDQnpkR0Z5ZEN3Z1pXNWtLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElITWdQU0JjSWx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2N5QTlJR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG5OMVkyTmxjM01vY21WekxtUmhkR0VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNGdQU0J6TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNUpjMFp5WlhOb0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPV21ndWFlbk9hY2llaXV2dWU5cnVhY3JPV2NzSE5sYzNOcGIyN292NGZtbkovbWw3YnBsN1JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpWUnBiV1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncElDc2djM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCclpYazZJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhPaUJUZEhKcGJtY29jM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIZDRMbk5sZEZOMGIzSmhaMlVvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0U2SUhOMFlYUjFjeTV6WlhOemFXOXVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQjdkR2wwYkdVc0lHTnZiblJsYm5SOUlEMGdaWEp5YjNKSVlXNWtiR1Z5TG1kbGRFVnljbTl5VFhObktISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdVpHOUZjbkp2Y2loMGFYUnNaU3dnWTI5dWRHVnVkQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Z5Y205eVNHRnVaR3hsY2k1a2IwVnljbTl5S0Z3aTU1bTc1YjJWNWFTeDZMU2xYQ0lzSUZ3aTZLKzM1NmlONVpDTzZZZU42SytWWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0d4bGRHVWdLQ2tnZTMwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc09pQW9LVDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZja2hoYm1Sc1pYSXVaRzlGY25KdmNpaGNJdWVadStXOWxlV2tzZWkwcFZ3aUxDQmNJdWl2dCtlb2plV1FqdW1IamVpdmxWd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lIMHBYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUNobWJqb2dSblZ1WTNScGIyNHNJRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrOVBudGNiaUFnSUNCamFHVmphMU5sYzNOcGIyNG9LUzUwYUdWdUtDZ3BQVDU3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJrYjB4dloybHVLR1p1TENCdlltb3BYRzRnSUNBZ2ZTazdYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBkZWZhdWx0Q29uZmlnID0ge1xuICAgIHNlc3Npb25OYW1lOiBcInNlc3Npb25cIixcbiAgICBsb2dpblRyaWdnZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgY29kZVRvU2Vzc2lvbjoge1xuICAgICAgICB1cmw6IFwiXCIsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHsgfVxuICAgIH0sXG4gICAgc3VjY2Vzc1RyaWdnZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICB1cmxQZXJmaXg6IFwiXCIsXG4gICAgc3VjY2Vzc0RhdGE6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIGRvTm90Q2hlY2tTZXNzaW9uOiBmYWxzZSxcbiAgICBlcnJvclRpdGxlOiBcIuaTjeS9nOWksei0pVwiLFxuICAgIGVycm9yQ29udGVudDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgcmVMb2dpbkxpbWl0OiAzLFxuICAgIGVycm9yQ2FsbGJhY2s6IG51bGwsXG4gICAgcmVwb3J0Q0dJOiBmYWxzZSxcbiAgICBtb2NrSnNvbjogZmFsc2UsXG4gICAgZ2xvYmFsRGF0YTogZmFsc2UsXG4gICAgc2Vzc2lvbkV4cGlyZUtleTogXCJzZXNzaW9uRXhwaXJlS2V5XCJcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWZhdWx0Q29uZmlnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dVptbG5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzTjBiM0psTDJOdmJtWnBaeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVVkJMRWxCUVUwc1lVRkJZU3hIUVVGblFqdEpRVU12UWl4WFFVRlhMRVZCUVVVc1UwRkJVenRKUVVOMFFpeFpRVUZaTzFGQlExSXNUMEZCVHl4TFFVRkxMRU5CUVVFN1NVRkRhRUlzUTBGQlF6dEpRVU5FTEdGQlFXRXNSVUZCUlR0UlFVTllMRWRCUVVjc1JVRkJSU3hGUVVGRk8xRkJRMUFzVDBGQlR5eEZRVUZGTEdOQlFVMHNRMEZCUXp0TFFVTnVRanRKUVVORUxHTkJRV003VVVGRFZpeFBRVUZQTEVsQlFVa3NRMEZCUVR0SlFVTm1MRU5CUVVNN1NVRkRSQ3hUUVVGVExFVkJRVVVzUlVGQlJUdEpRVU5pTEZkQlFWY3NXVUZCUXl4SFFVRlJPMUZCUTJoQ0xFOUJRVThzUjBGQlJ5eERRVUZCTzBsQlEyUXNRMEZCUXp0SlFVTkVMR2xDUVVGcFFpeEZRVUZGTEV0QlFVczdTVUZEZUVJc1ZVRkJWU3hGUVVGRkxFMUJRVTA3U1VGRGJFSXNXVUZCV1N4WlFVRkRMRWRCUVZFN1VVRkRha0lzVDBGQlR5eEhRVUZITEVOQlFVRTdTVUZEWkN4RFFVRkRPMGxCUTBRc1dVRkJXU3hGUVVGRkxFTkJRVU03U1VGRFppeGhRVUZoTEVWQlFVVXNTVUZCU1R0SlFVTnVRaXhUUVVGVExFVkJRVVVzUzBGQlN6dEpRVU5vUWl4UlFVRlJMRVZCUVVVc1MwRkJTenRKUVVObUxGVkJRVlVzUlVGQlJTeExRVUZMTzBsQlJXcENMR2RDUVVGblFpeEZRVUZGTEd0Q1FVRnJRanREUVVOMlF5eERRVUZETzBGQlJVWXNhMEpCUVdVc1lVRkJZU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVWx1YVhSUGNIUnBiMjRnZlNCbWNtOXRJQ2N1TGk5cGJuUmxjbVpoWTJVblhHNWNibU52Ym5OMElHUmxabUYxYkhSRGIyNW1hV2M2SUVsSmJtbDBUM0IwYVc5dUlEMGdlMXh1SUNBZ0lITmxjM05wYjI1T1lXMWxPaUJjSW5ObGMzTnBiMjVjSWl4Y2JpQWdJQ0JzYjJkcGJsUnlhV2RuWlhJb0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlZ4dUlDQWdJSDBzWEc0Z0lDQWdZMjlrWlZSdlUyVnpjMmx2YmpvZ2UxeHVJQ0FnSUNBZ0lDQjFjbXc2SUZ3aVhDSXNYRzRnSUNBZ0lDQWdJSE4xWTJObGMzTTZJQ2dwUFQ0Z2UzMWNiaUFnSUNCOUxGeHVJQ0FnSUhOMVkyTmxjM05VY21sbloyVnlLQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpWeHVJQ0FnSUgwc1hHNGdJQ0FnZFhKc1VHVnlabWw0T2lCY0lsd2lMRnh1SUNBZ0lITjFZMk5sYzNORVlYUmhLSEpsY3pvZ1lXNTVLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOY2JpQWdJQ0I5TEZ4dUlDQWdJR1J2VG05MFEyaGxZMnRUWlhOemFXOXVPaUJtWVd4elpTeGNiaUFnSUNCbGNuSnZjbFJwZEd4bE9pQmNJdWFUamVTOW5PV2tzZWkwcFZ3aUxGeHVJQ0FnSUdWeWNtOXlRMjl1ZEdWdWRDaHlaWE02SUdGdWVTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6WEc0Z0lDQWdmU3hjYmlBZ0lDQnlaVXh2WjJsdVRHbHRhWFE2SURNc1hHNGdJQ0FnWlhKeWIzSkRZV3hzWW1GamF6b2diblZzYkN4Y2JpQWdJQ0J5WlhCdmNuUkRSMGs2SUdaaGJITmxMRnh1SUNBZ0lHMXZZMnRLYzI5dU9pQm1ZV3h6WlN4Y2JpQWdJQ0JuYkc5aVlXeEVZWFJoT2lCbVlXeHpaU3hjYmlBZ0lDQXZMeUJ6WlhOemFXOXU1WnlvNXB5czVaeXc1N3lUNWEyWTU1cUVhMlY1WEc0Z0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlV0bGVUb2dYQ0p6WlhOemFXOXVSWGh3YVhKbFMyVjVYQ0pjYm4wN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHUmxabUYxYkhSRGIyNW1hV2M3WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXNzaW9uOiAnJyxcbiAgICBzZXNzaW9uRXhwaXJlVGltZTogbnVsbCxcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eSxcbiAgICBzZXNzaW9uSXNGcmVzaDogZmFsc2UsXG4gICAgbG9naW5pbmc6IGZhbHNlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzNSaGRIVnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzTjBiM0psTDNOMFlYUjFjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMR3RDUVVGbE8wbEJRMWdzVDBGQlR5eEZRVUZGTEVWQlFWazdTVUZGY2tJc2FVSkJRV2xDTEVWQlFVVXNTVUZCU1R0SlFVVjJRaXhoUVVGaExFVkJRVVVzVVVGQlVUdEpRVU4yUWl4alFVRmpMRVZCUVVVc1MwRkJaMEk3U1VGRmFFTXNVVUZCVVN4RlFVRkZMRXRCUVdkQ08wTkJRM1JDTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVnpjMmx2YmpvZ0p5Y2dZWE1nYzNSeWFXNW5MRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN2xuS2ptbkt6bG5MRG52SlBsclpqbm1vVG1uSW5tbFlqbWw3YnBsN1JjYmlBZ0lDQnpaWE56YVc5dVJYaHdhWEpsVkdsdFpUb2diblZzYkN4Y2JpQWdJQ0F2THlCelpYTnphVzl1NkwrSDVweWY1NXFFNXBlMjZaZTA1NEs1WEc0Z0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlRvZ1NXNW1hVzVwZEhrc1hHNGdJQ0FnYzJWemMybHZia2x6Um5KbGMyZzZJR1poYkhObElHRnpJR0p2YjJ4bFlXNHNYRzRnSUNBZ0x5OGc1cTJqNVp5bzU1bTc1YjJWNUxpdDc3eU01WVcyNUx1VzZLKzM1ckdDNkwydTZLK2k1NmlONVpDTzc3eU02WUcvNVlXTjZZZU41YVNONkxDRDU1U281NW03NWIyVjVvNmw1WStqWEc0Z0lDQWdiRzluYVc1cGJtYzZJR1poYkhObElHRnpJR0p2YjJ4bFlXNWNibjBnWVhNZ1lXNTVYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHN0b3JlID0ge307XG5mdW5jdGlvbiBlbWl0KGtleSkge1xuICAgIHZhciBmbG93ID0gZ2V0RmxvdyhrZXkpO1xuICAgIHZhciBjdXJyZW50TGVuZ3RoID0gZmxvdy53YWl0aW5nTGlzdC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gZmxvdy53YWl0aW5nTGlzdC5zaGlmdCgpO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHdhaXQoa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBmbG93ID0gZ2V0RmxvdyhrZXkpO1xuICAgIGZsb3cud2FpdGluZ0xpc3QucHVzaChjYWxsYmFjayk7XG59XG5mdW5jdGlvbiBnZXRGbG93KGtleSkge1xuICAgIGlmICghc3RvcmVba2V5XSkge1xuICAgICAgICBzdG9yZVtrZXldID0ge1xuICAgICAgICAgICAgd2FpdGluZ0xpc3Q6IFtdXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzdG9yZVtrZXldO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHdhaXQ6IHdhaXQsXG4gICAgZW1pdDogZW1pdFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpteHZkeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTFkR2xzTDJac2IzY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeEpRVUZOTEV0QlFVc3NSMEZCVVN4RlFVRkZMRU5CUVVNN1FVRkZkRUlzVTBGQlV5eEpRVUZKTEVOQlFVTXNSMEZCVnp0SlFVTnlRaXhKUVVGTkxFbEJRVWtzUjBGQlJ5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRNVUlzU1VGQlRTeGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRE9VTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEdGQlFXRXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOd1F5eEpRVUZOTEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzFGQlF6RkRMRWxCUVVjc1QwRkJUeXhSUVVGUkxFbEJRVWtzVlVGQlZTeEZRVUZETzFsQlF6ZENMRkZCUVZFc1JVRkJSU3hEUVVGRE8xTkJRMlE3UzBGRFNqdEJRVU5NTEVOQlFVTTdRVUZGUkN4VFFVRlRMRWxCUVVrc1EwRkJReXhIUVVGWExFVkJRVVVzVVVGQmEwSTdTVUZEZWtNc1NVRkJUU3hKUVVGSkxFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpGQ0xFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGQk8wRkJRMjVETEVOQlFVTTdRVUZGUkN4VFFVRlRMRTlCUVU4c1EwRkJReXhIUVVGWE8wbEJRM2hDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVU3VVVGRFlpeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjN1dVRkRWQ3hYUVVGWExFVkJRVVVzUlVGQlJUdFRRVU5zUWl4RFFVRkJPMHRCUTBvN1NVRkZSQ3hQUVVGUExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTjBRaXhEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4SlFVRkpMRTFCUVVFN1NVRkRTaXhKUVVGSkxFMUJRVUU3UTBGRFVDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVkyOXVjM1FnYzNSdmNtVTZJR0Z1ZVNBOUlIdDlPMXh1WEc1bWRXNWpkR2x2YmlCbGJXbDBLR3RsZVRvZ2MzUnlhVzVuS1NCN1hHNGdJQ0FnWTI5dWMzUWdabXh2ZHlBOUlHZGxkRVpzYjNjb2EyVjVLVHRjYmlBZ0lDQmpiMjV6ZENCamRYSnlaVzUwVEdWdVozUm9JRDBnWm14dmR5NTNZV2wwYVc1blRHbHpkQzVzWlc1bmRHZzdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmpkWEp5Wlc1MFRHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZMkZzYkdKaFkyc2dQU0JtYkc5M0xuZGhhWFJwYm1kTWFYTjBMbk5vYVdaMEtDazdYRzRnSUNBZ0lDQWdJR2xtS0hSNWNHVnZaaUJqWVd4c1ltRmpheUE5UFNCY0ltWjFibU4wYVc5dVhDSXBlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnNiR0poWTJzb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2QyRnBkQ2hyWlhrNklITjBjbWx1Wnl3Z1kyRnNiR0poWTJzNklFWjFibU4wYVc5dUtTQjdYRzRnSUNBZ1kyOXVjM1FnWm14dmR5QTlJR2RsZEVac2IzY29hMlY1S1R0Y2JpQWdJQ0JtYkc5M0xuZGhhWFJwYm1kTWFYTjBMbkIxYzJnb1kyRnNiR0poWTJzcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUdkbGRFWnNiM2NvYTJWNU9pQnpkSEpwYm1jcElIdGNiaUFnSUNCcFppQW9JWE4wYjNKbFcydGxlVjBwSUh0Y2JpQWdJQ0FnSUNBZ2MzUnZjbVZiYTJWNVhTQTlJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIZGhhWFJwYm1kTWFYTjBPaUJiWFZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSE4wYjNKbFcydGxlVjA3WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCM1lXbDBMRnh1SUNBZ0lHVnRhWFJjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBzaG93KHR4dCkge1xuICAgIHd4LnNob3dUb2FzdCh7XG4gICAgICAgIHRpdGxlOiB0eXBlb2YgdHh0ID09PSAnYm9vbGVhbicgPyAn5Yqg6L295LitJyA6IHR4dCxcbiAgICAgICAgaWNvbjogJ2xvYWRpbmcnLFxuICAgICAgICBtYXNrOiB0cnVlLFxuICAgICAgICBkdXJhdGlvbjogNjAwMDBcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgd3guaGlkZVRvYXN0KHt9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzaG93OiBzaG93LFxuICAgIGhpZGU6IGhpZGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzloWkdsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMMnh2WVdScGJtY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeFRRVUZUTEVsQlFVa3NRMEZCUXl4SFFVRnhRanRKUVVNdlFpeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTFRc1MwRkJTeXhGUVVGRkxFOUJRVThzUjBGQlJ5eExRVUZMTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITzFGQlF6ZERMRWxCUVVrc1JVRkJSU3hUUVVGVE8xRkJRMllzU1VGQlNTeEZRVUZGTEVsQlFVazdVVUZEVml4UlFVRlJMRVZCUVVVc1MwRkJTenRMUVVOc1FpeERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhKUVVGSk8wbEJRMVFzUlVGQlJTeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOeVFpeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hKUVVGSkxFMUJRVUU3U1VGRFNpeEpRVUZKTEUxQlFVRTdRMEZEVUN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWm5WdVkzUnBiMjRnYzJodmR5aDBlSFE2SUdKdmIyeGxZVzRnZkNCemRISnBibWNwSUh0Y2JpQWdJQ0IzZUM1emFHOTNWRzloYzNRb2UxeHVJQ0FnSUNBZ0lDQjBhWFJzWlRvZ2RIbHdaVzltSUhSNGRDQTlQVDBnSjJKdmIyeGxZVzRuSUQ4Z0orV0tvT2k5dmVTNHJTY2dPaUIwZUhRc1hHNGdJQ0FnSUNBZ0lHbGpiMjQ2SUNkc2IyRmthVzVuSnl4Y2JpQWdJQ0FnSUNBZ2JXRnphem9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdaSFZ5WVhScGIyNDZJRFl3TURBd1hHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnYUdsa1pTZ3BJSHRjYmlBZ0lDQjNlQzVvYVdSbFZHOWhjM1FvZTMwcE8xeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjMmh2ZHl4Y2JpQWdJQ0JvYVdSbFhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHNldFBhcmFtcyh1cmwsIHBhcmFtcykge1xuICAgIGlmICh1cmwgPT09IHZvaWQgMCkgeyB1cmwgPSBcIlwiOyB9XG4gICAgdmFyIHF1ZXJ5U3RyaW5nSW5kZXggPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gICAgdmFyIGt2cCA9IHt9O1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgdmFyIG9sZFF1ZXJ5U3RyaW5nXzEgPSB1cmwuc3Vic3RyKHF1ZXJ5U3RyaW5nSW5kZXggKyAxKS5zcGxpdChcIiZcIik7XG4gICAgICAgIG9sZFF1ZXJ5U3RyaW5nXzEuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgdmFyIGt2ID0gb2xkUXVlcnlTdHJpbmdfMVtpXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICBrdnBba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBrdnAgPSBfX2Fzc2lnbih7fSwga3ZwLCBwYXJhbXMpO1xuICAgIHZhciBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgKyBcIj1cIiArIGVuY29kZVVSSShrdnBba2V5XSk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsICsgXCI/XCIgKyBxdWVyeVN0cmluZztcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2V0UGFyYW1zOiBzZXRQYXJhbXNcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEpzTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1YwYVd3dmRYSnNMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN1FVRkJRU3hUUVVGVExGTkJRVk1zUTBGQlF5eEhRVUZuUWl4RlFVRkZMRTFCUVdNN1NVRkJhRU1zYjBKQlFVRXNSVUZCUVN4UlFVRm5RanRKUVVOcVF5eEpRVUZOTEdkQ1FVRm5RaXhIUVVGWExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRiRVFzU1VGQlNTeEhRVUZITEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFbEJRVWtzWjBKQlFXZENMRWxCUVVrc1EwRkJReXhGUVVGRk8xRkJRM3BDTEVsQlFVMHNaMEpCUVdNc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOdVJTeG5Ra0ZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlJURkNMRWxCUVUwc1JVRkJSU3hIUVVGaExHZENRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyeEVMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGNrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRTanRKUVVWRUxFZEJRVWNzWjBKQlFWRXNSMEZCUnl4RlFVRkxMRTFCUVUwc1EwRkJSU3hEUVVGRE8wbEJSVFZDTEVsQlFVMHNWMEZCVnl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzFOQlEycERMRWRCUVVjc1EwRkJReXhWUVVGQkxFZEJRVWM3VVVGRFRpeFBRVUZWTEVkQlFVY3NVMEZCU1N4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZITEVOQlFVTTdTVUZEZWtNc1EwRkJReXhEUVVGRE8xTkJRMFFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUldJc1NVRkJTU3huUWtGQlowSXNTVUZCU1N4RFFVRkRMRVZCUVVVN1VVRkRla0lzVDBGQlR5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3huUWtGQlowSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGRE4wUTdVMEZCVFR0UlFVTk1MRTlCUVU4c1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTTdTMEZEYUVNN1FVRkRTQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEWWl4VFFVRlRMRmRCUVVFN1EwRkRWaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMlYwVUdGeVlXMXpLSFZ5YkRvZ2MzUnlhVzVuSUQwZ1hDSmNJaXdnY0dGeVlXMXpPaUJ2WW1wbFkzUXBJSHRjYmlBZ1kyOXVjM1FnY1hWbGNubFRkSEpwYm1kSmJtUmxlRG9nYm5WdFltVnlJRDBnZFhKc0xtbHVaR1Y0VDJZb1hDSS9YQ0lwTzF4dUlDQnNaWFFnYTNad09pQmhibmtnUFNCN2ZUdGNiaUFnYVdZZ0tIRjFaWEo1VTNSeWFXNW5TVzVrWlhnZ1BqMGdNQ2tnZTF4dUlDQWdJR052Ym5OMElHOXNaRkYxWlhKNVUzUnlhVzVuSUQwZ2RYSnNMbk4xWW5OMGNpaHhkV1Z5ZVZOMGNtbHVaMGx1WkdWNElDc2dNU2t1YzNCc2FYUW9YQ0ltWENJcE8xeHVJQ0FnSUc5c1pGRjFaWEo1VTNSeWFXNW5MbVp2Y2tWaFkyZ29LSGdzSUdrcElEMCtJSHRjYmlBZ0lDQWdJQzh2WTI5dWMyOXNaUzVzYjJjb2VDazdYRzRnSUNBZ0lDQmpiMjV6ZENCcmRqb2djM1J5YVc1blcxMGdQU0J2YkdSUmRXVnllVk4wY21sdVoxdHBYUzV6Y0d4cGRDaGNJajFjSWlrN1hHNGdJQ0FnSUNCcmRuQmJhM1piTUYxZElEMGdhM1piTVYwN1hHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dUlDQnJkbkFnUFNCN0lDNHVMbXQyY0N3Z0xpNHVjR0Z5WVcxeklIMDdYRzVjYmlBZ1kyOXVjM1FnY1hWbGNubFRkSEpwYm1jZ1BTQlBZbXBsWTNRdWEyVjVjeWhyZG5BcFhHNGdJQ0FnTG0xaGNDaHJaWGtnUFQ0Z2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdBa2UydGxlWDA5Skh0bGJtTnZaR1ZWVWtrb2EzWndXMnRsZVYwcGZXQTdYRzRnSUNBZ2ZTbGNiaUFnSUNBdWFtOXBiaWhjSWlaY0lpazdYRzVjYmlBZ2FXWWdLSEYxWlhKNVUzUnlhVzVuU1c1a1pYZ2dQajBnTUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIxY213dWMzVmljM1J5YVc1bktEQXNJSEYxWlhKNVUzUnlhVzVuU1c1a1pYZ2dLeUF4S1NBcklIRjFaWEo1VTNSeWFXNW5PMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQjFjbXdnS3lCY0lqOWNJaUFySUhGMVpYSjVVM1J5YVc1bk8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnYzJWMFVHRnlZVzF6WEc1OU8xeHVJbDE5Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/src/interface.ts b/src/interface.ts index 1ea76b9..a0ff847 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -20,7 +20,7 @@ export interface IInitOption { /* 请求返回时的时间戳 */ endTime: number, /* 请求方法,可用于上报 */ - request?: () => void + request: Function ) => void); /* 可为接口提供mock数据 */ mockJson?: any; @@ -76,7 +76,7 @@ export interface IRequestOption extends IRequestObject { /* 当启用缓存时,决定除了返回缓存内容外,是否还返回接口实时内容,以防止页面多次渲染的抖动 */ noCacheFlash?: boolean; /* 接口调用成功的回调函数 */ - success: (res: string | IAnyObject | ArrayBuffer, cacheInfo?: object) => void; + success?: (res: string | IAnyObject | ArrayBuffer, cacheInfo?: object) => void; /* 接口调用结束的回调函数(调用成功、失败都会执行) */ complete?: ()=> void; /** 接口调用失败 或 逻辑失败 的回调函数 */ @@ -90,8 +90,6 @@ export interface IRequestObject extends wx.RequestOption{ count: number; /* 重登陆次数 */ reLoginLimit: number; - /* 该请求是否是登陆请求 */ - isLogin?: boolean; /* 请求发起的时间戳 */ _reportStartTime: number; /* 请求返回的时间戳 */ @@ -106,7 +104,7 @@ export interface IUploadFileOption extends IUploadFileObject { /* 接口请求成功后将自动执行init()中配置的reportCGI函数,其中的name字段值为这里配置的值 */ report?: string; /* 接口调用成功的回调函数 */ - success: (res: string | IAnyObject | ArrayBuffer, cacheInfo?: object) => void; + success?: (res: string | IAnyObject | ArrayBuffer, cacheInfo?: object) => void; /* 接口调用结束的回调函数(调用成功、失败都会执行) */ complete?: ()=> void; /** 接口调用失败 或 逻辑失败 的回调函数 */ @@ -120,8 +118,6 @@ export interface IUploadFileObject extends wx.UploadFileOption { count: number; /* 重登陆次数 */ reLoginLimit: number; - /* 该请求是否是登陆请求 */ - isLogin?: boolean; /* 请求发起的时间戳 */ _reportStartTime: number; /* 请求返回的时间戳 */ diff --git a/src/module/durationReporter.ts b/src/module/durationReporter.ts index 8a80f60..ccea73f 100644 --- a/src/module/durationReporter.ts +++ b/src/module/durationReporter.ts @@ -1,4 +1,5 @@ import config from '../store/config' +import request from '../api/request' import { IRequestOption, IUploadFileOption } from "../interface"; function start(obj: IRequestOption | IUploadFileOption) { @@ -7,12 +8,14 @@ function start(obj: IRequestOption | IUploadFileOption) { function end(obj: IRequestOption | IUploadFileOption) { obj._reportEndTime = new Date().getTime(); - report(obj.report as string, obj._reportStartTime, obj._reportEndTime); + if(obj.report) { + report(obj.report as string, obj._reportStartTime, obj._reportEndTime); + } } function report(name: string, startTime: number, endTime: number) { if (typeof config.reportCGI === "function") { - config.reportCGI(name, startTime, endTime); + config.reportCGI(name, startTime, endTime, request); } } diff --git a/src/module/errorHandler.ts b/src/module/errorHandler.ts index 49fe055..399be6e 100644 --- a/src/module/errorHandler.ts +++ b/src/module/errorHandler.ts @@ -59,5 +59,6 @@ function doError(title: string, content: string) { export default { systemError, logicError, - doError + doError, + getErrorMsg } diff --git a/src/module/requestHandler.ts b/src/module/requestHandler.ts index 985a527..3c126ef 100644 --- a/src/module/requestHandler.ts +++ b/src/module/requestHandler.ts @@ -205,6 +205,7 @@ function uploadFile(obj: IUploadFileOption): void { } export default { + format, request, uploadFile } diff --git a/src/module/responseHandler.ts b/src/module/responseHandler.ts index 23d8a35..186c61f 100644 --- a/src/module/responseHandler.ts +++ b/src/module/responseHandler.ts @@ -25,19 +25,7 @@ function response( durationReporter.end(obj); - if (obj.isLogin) { - // 登录请求 - let s = ""; - try { - s = config.codeToSession.success(res.data); - } catch (e) { - } - if (s) { - obj.success(s); - } else { - errorHandler.logicError(obj, res); - } - } else if (config.loginTrigger!(res.data) && obj.reLoginLimit < config.reLoginLimit!) { + if (config.loginTrigger!(res.data) && obj.reLoginLimit < config.reLoginLimit!) { // 登录态失效,且重试次数不超过配置 status.session = ''; status.sessionIsFresh = true; diff --git a/src/module/sessionManager.ts b/src/module/sessionManager.ts index 851e31a..e7451b2 100644 --- a/src/module/sessionManager.ts +++ b/src/module/sessionManager.ts @@ -1,44 +1,45 @@ import flow from '../util/flow' import status from '../store/status' import config from '../store/config' -import requestHandler from './requestHandler' import errorHandler from './errorHandler' import durationReporter from './durationReporter' -import {IRequestOption, IUploadFileOption} from "../interface"; +import requestHandler from './requestHandler' +import {IRequestOption, IUploadFileOption} from "../interface" +let checkSessionPromise: any = null; function checkSession() { - return new Promise((resolve)=>{ - if (!status.sessionIsFresh && status.session) { - console.log("wx.checkSession()"); - const start = new Date().getTime(); - wx.checkSession({ - success () { - // 登录态有效,且在本生命周期内无须再检验了 - resolve(); - }, - fail () { - // 登录态过期 - status.session = ''; - resolve(); - }, - complete () { - const end = new Date().getTime(); - durationReporter.report('checkSession', start, end); - } - }) - } else { - resolve(); - } - }) + if(!checkSessionPromise) { + checkSessionPromise = new Promise((resolve)=>{ + if(config.doNotCheckSession) { + resolve(); + } else if (!status.sessionIsFresh && status.session) { + console.log("wx.checkSession()"); + const start = new Date().getTime(); + wx.checkSession({ + success () { + // 登录态有效,且在本生命周期内无须再检验了 + resolve(); + }, + fail () { + // 登录态过期 + status.session = ''; + resolve(); + }, + complete () { + const end = new Date().getTime(); + durationReporter.report('wx_checkSession', start, end); + } + }) + } else { + resolve(); + } + }) + } + return checkSessionPromise; } function doLogin(callback: Function, obj: IRequestOption | IUploadFileOption) { - if (obj.isLogin) { - // 登录接口,直接放过 - if(typeof callback === "function"){ - callback(); - } - } else if (status.session) { + if (status.session) { // 缓存中有session if (status.sessionExpireTime && new Date().getTime() > status.sessionExpire) { // 如果有设置本地session缓存时间,且缓存时间已到 @@ -67,7 +68,7 @@ function getCode(callback: Function, obj: IRequestOption | IUploadFileOption) { wx.login({ complete () { const end = new Date().getTime(); - durationReporter.report('login', start, end); + durationReporter.report('wx_login', start, end); }, success (res) { if (res.code) { @@ -105,32 +106,55 @@ function code2Session(code: string) { data[config.codeToSession.codeName!] = code; return new Promise((resolve)=>{ - requestHandler.request({ - url: config.codeToSession.url, + let start = new Date().getTime(); + wx.request({ + url: requestHandler.format(config.codeToSession.url), data, method: config.codeToSession.method || 'GET', - isLogin: true, - report: config.codeToSession.report || config.codeToSession.url, - success (s: string) { - status.session = s; - status.sessionIsFresh = true; - // 如果有设置本地session过期时间 - if (status.sessionExpireTime) { - status.sessionExpire = new Date().getTime() + status.sessionExpireTime; - wx.setStorage({ - key: config.sessionExpireKey, - data: String(status.sessionExpire) - }) + success (res: wx.RequestSuccessCallbackResult) { + if (res.statusCode === 200) { + // 耗时上报 + if(config.codeToSession.report) { + let end = new Date().getTime(); + durationReporter.report(config.codeToSession.report, start, end) + } + + let s = ""; + try { + s = config.codeToSession.success(res.data); + } catch (e) { + } + + if (s) { + status.session = s; + status.sessionIsFresh = true; + // 如果有设置本地session过期时间 + if (status.sessionExpireTime) { + status.sessionExpire = new Date().getTime() + status.sessionExpireTime; + wx.setStorage({ + key: config.sessionExpireKey, + data: String(status.sessionExpire) + }) + } + wx.setStorage({ + key: config.sessionName, + data: status.session + }); + } else { + let {title, content} = errorHandler.getErrorMsg(res); + errorHandler.doError(title, content) + } + } else { + errorHandler.doError("登录失败", "请稍后重试") } - wx.setStorage({ - key: config.sessionName, - data: status.session - }); return resolve(); }, complete () {}, - fail: config.codeToSession.fail || null - } as IRequestOption) + fail: ()=> { + errorHandler.doError("登录失败", "请稍后重试"); + return resolve(); + } + }) }) }