From 11404bb4bba9d1ae73210adbc7d2330f19e8350f Mon Sep 17 00:00:00 2001 From: Ivin Wu Date: Mon, 15 May 2023 15:15:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=A4=87=E4=BB=BD=E5=9F=9F=E5=90=8D):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dcode2session=E7=9A=84=E5=A4=87=E4=BB=BD?= =?UTF-8?q?=E5=9F=9F=E5=90=8D=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=A4=9A=E4=B8=AA=E5=A4=87=E4=BB=BD=E5=9F=9F?= =?UTF-8?q?=E5=90=8D=E5=88=97=E8=A1=A8=20(#73)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/interface.d.ts | 2 +- build/module/requestHandler.d.ts | 2 + build/util/url.d.ts | 4 +- build/weRequest.js | 73 ++++++++++++++++++++++---------- build/weRequest.min.js | 4 +- package.json | 2 +- src/interface.ts | 2 +- src/module/requestHandler.ts | 23 +++++----- src/module/sessionManager.ts | 11 +++++ src/util/url.ts | 31 ++++++++++++-- test/util/url.test.ts | 12 ------ 11 files changed, 108 insertions(+), 58 deletions(-) diff --git a/build/interface.d.ts b/build/interface.d.ts index 1bd2ee3..3ccf9cf 100644 --- a/build/interface.d.ts +++ b/build/interface.d.ts @@ -24,7 +24,7 @@ export interface IInitOption { errorHandler?: Function | null; beforeSend?: Function | null; systemErrorHandler?: Function | null; - backupDomain?: string; + backupDomainList?: IAnyObject; backupDomainEnableCallback?: Function; } export interface ICodeToSessionOptions { diff --git a/build/module/requestHandler.d.ts b/build/module/requestHandler.d.ts index af256e0..d24de93 100644 --- a/build/module/requestHandler.d.ts +++ b/build/module/requestHandler.d.ts @@ -2,9 +2,11 @@ import { IRequestOption, IUploadFileOption } from "../interface"; declare function format(originUrl: string): string; declare function request(obj: IRequestOption): Promise; declare function uploadFile(obj: IUploadFileOption): any; +declare function enableBackupDomain(url?: string): void; declare const _default: { format: typeof format; request: typeof request; uploadFile: typeof uploadFile; + enableBackupDomain: typeof enableBackupDomain; }; export default _default; diff --git a/build/util/url.d.ts b/build/util/url.d.ts index 35375b0..8e96d07 100644 --- a/build/util/url.d.ts +++ b/build/util/url.d.ts @@ -1,7 +1,9 @@ declare function setParams(url: string | undefined, params: object): string; -declare function replaceDomain(url?: string, domain?: string): string; +declare function replaceDomain(url?: string): string; +declare function isInBackupDomainList(url?: string): boolean; declare const _default: { setParams: typeof setParams; replaceDomain: typeof replaceDomain; + isInBackupDomainList: typeof isInBackupDomainList; }; export default _default; diff --git a/build/weRequest.js b/build/weRequest.js index 5ce32a0..d30f505 100644 --- a/build/weRequest.js +++ b/build/weRequest.js @@ -1,5 +1,5 @@ /*! - * weRequest 1.7.0 + * weRequest 1.7.1 * https://github.com/IvinWu/weRequest */ module.exports = @@ -635,9 +635,7 @@ function initializeRequestObj(obj) { } obj.url = url_1.default.setParams(obj.url, gd); } - if (status_1.default.isEnableBackupDomain && config_1.default.backupDomain) { - obj.url = url_1.default.replaceDomain(obj.url, config_1.default.backupDomain); - } + obj.url = url_1.default.replaceDomain(obj.url); durationReporter_1.default.start(obj); return obj; } @@ -667,9 +665,7 @@ function initializeUploadFileObj(obj) { } obj.url = url_1.default.setParams(obj.url, gd); } - if (status_1.default.isEnableBackupDomain && config_1.default.backupDomain) { - obj.url = url_1.default.replaceDomain(obj.url, config_1.default.backupDomain); - } + obj.url = url_1.default.replaceDomain(obj.url); durationReporter_1.default.start(obj); return obj; } @@ -694,8 +690,8 @@ function doRequest(obj) { }, fail: function (res) { var _a; - if (((_a = res === null || res === void 0 ? void 0 : res.errMsg) === null || _a === void 0 ? void 0 : _a.indexOf('CONNECTION_REFUSED')) >= 0 && config_1.default.backupDomain && obj.url.indexOf(config_1.default.backupDomain) < 0) { - enableBackupDomain(); + if (((_a = res === null || res === void 0 ? void 0 : res.errMsg) === null || _a === void 0 ? void 0 : _a.indexOf('CONNECTION_REFUSED')) >= 0 && url_1.default.isInBackupDomainList(obj.url)) { + enableBackupDomain(obj.url); return doRequest(obj).then(function (res) { return resolve(res); }); } return reject({ type: 'system-error', res: res }); @@ -721,8 +717,8 @@ function doUploadFile(obj) { }, fail: function (res) { var _a; - if (((_a = res === null || res === void 0 ? void 0 : res.errMsg) === null || _a === void 0 ? void 0 : _a.indexOf('CONNECTION_REFUSED')) >= 0 && config_1.default.backupDomain && obj.url.indexOf(config_1.default.backupDomain) < 0) { - enableBackupDomain(); + if (((_a = res === null || res === void 0 ? void 0 : res.errMsg) === null || _a === void 0 ? void 0 : _a.indexOf('CONNECTION_REFUSED')) >= 0 && url_1.default.isInBackupDomainList(obj.url)) { + enableBackupDomain(obj.url); return doUploadFile(obj).then(function (res) { return resolve(res); }); } return reject({ type: 'system-error', res: res }); @@ -784,20 +780,22 @@ function uploadFile(obj) { }); }); } -function enableBackupDomain() { +function enableBackupDomain(url) { + if (url === void 0) { url = ""; } if (!status_1.default.isEnableBackupDomain) { status_1.default.isEnableBackupDomain = true; if (typeof config_1.default.backupDomainEnableCallback === 'function') { - config_1.default.backupDomainEnableCallback(); + config_1.default.backupDomainEnableCallback(url); } } } exports.default = { format: format, request: request, - uploadFile: uploadFile + uploadFile: uploadFile, + enableBackupDomain: enableBackupDomain }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBOEM7QUFHOUMsU0FBUyxNQUFNLENBQUMsU0FBaUI7SUFDN0IsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlCLE9BQU8sU0FBUyxDQUFBO0tBQ25CO1NBQU07UUFDSCxJQUFJLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3hDLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO0tBQ2hDO0FBQ0wsQ0FBQztBQUdELFNBQVMsS0FBSyxDQUErQyxHQUFNLEVBQUUsT0FBOEIsRUFBRSxNQUErQjtJQUVoSSxJQUFJLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDekMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNILEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN0QjtJQUVELElBQUksR0FBRyxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUNoRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDcEI7SUFFRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7UUFDakIsaUJBQU8sQ0FBQyxJQUFJLENB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UCxVQUFVLFlBQUE7Q0FDYixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvYWRpbmcgZnJvbSAnLi4vdXRpbC9sb2FkaW5nJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcbmltcG9ydCBtb2NrTWFuYWdlciBmcm9tICcuL21vY2tNYW5hZ2VyJ1xuaW1wb3J0IGNhY2hlTWFuYWdlciBmcm9tICcuL2NhY2hlTWFuYWdlcidcbmltcG9ydCBzZXNzaW9uTWFuYWdlciBmcm9tICcuL3Nlc3Npb25NYW5hZ2VyJ1xuaW1wb3J0IHJlc3BvbnNlSGFuZGxlciBmcm9tICcuL3Jlc3BvbnNlSGFuZGxlcidcbmltcG9ydCBkdXJhdGlvblJlcG9ydGVyIGZyb20gXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIlxuaW1wb3J0IHVybCBmcm9tICcuLi91dGlsL3VybCdcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiwgSUVycm9yT2JqZWN0IH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiXG5pbXBvcnQgeyBjYXRjaEhhbmRsZXIgfSBmcm9tICcuL2NhdGNoSGFuZGxlcic7XG5cbi8vIOagvOW8j+WMlnVybFxuZnVuY3Rpb24gZm9ybWF0KG9yaWdpblVybDogc3RyaW5nKSB7XG4gICAgaWYgKG9yaWdpblVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybFxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB1cmxQZXJmaXggPSBjb25maWcudXJsUGVyZml4O1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy51cmxQZXJmaXggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdXJsUGVyZml4ID0gY29uZmlnLnVybFBlcmZpeCgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybFBlcmZpeCArIG9yaWdpblVybDtcbiAgICB9XG59XG5cbi8vIOaJgOacieivt+axguWPkeWHuuWJjemcgOimgeWBmueahOS6i+aDhVxuZnVuY3Rpb24gcHJlRG88VCBleHRlbmRzIElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24+KG9iajogVCwgcmVzb2x2ZTogKHZhbHVlPzogYW55KSA9PiB2b2lkLCByZWplY3Q/OiAocmVhc29uPzogYW55KSA9PiB2b2lkKTogVCB7XG4gICAgLy8g55m75b2V5oCB5aSx5pWI77yM6YeN5aSN55m75b2V6K6h5pWwXG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQrKztcbiAgICB9XG5cbiAgICBpZiAob2JqLnJlTG9naW5Db3VudCA9PT0gMCAmJiB0eXBlb2Ygb2JqLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouYmVmb3JlU2VuZCgpO1xuICAgIH1cblxuICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgbG9hZGluZy5zaG93KG9iai5zaG93TG9hZGluZyk7XG4gICAgfVxuXG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cblxuICAgIG9iai5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgb2JqLl9yZWplY3QgPSByZWplY3Q7XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG4vLyDmoLzlvI/ljJblpITnkIbor7fmsYLnmoRvYmrlhoXlrrlcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iajogSVJlcXVlc3RPcHRpb24pIHtcblxuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG4gICAgXG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxldCBoZWFkZXIgPSBjb25maWcuc2V0SGVhZGVyKCk7XG4gICAgICAgIGlmICh0eXBlb2YgaGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5oZWFkZXJ9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5jb25maWcuc2V0SGVhZGVyfTtcbiAgICB9XG5cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5kYXRhID0geyAuLi5vYmouZGF0YSBhcyBvYmplY3QsIFtjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbiB9O1xuICAgIH1cblxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxuICAgIGNvbnN0IGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5kYXRhID0geyAuLi5nZCwgLi4ub2JqLmRhdGEgYXMgb2JqZWN0IH07XG5cbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuXG4gICAgLy8g5aaC5p6c6K+35rGC5LiN5pivR0VU77yM5YiZ5ZyoVVJM5Lit6Ieq5Yqo5Yqg5LiK55m75b2V5oCB5ZKM5YWo5bGA5Y+C5pWwXG4gICAgaWYgKCFjb25maWcuZG9Ob3RVc2VRdWVyeVN0cmluZyAmJiBvYmoubWV0aG9kICE9PSBcIkdFVFwiKSB7XG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgeyBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfSk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cblxuICAgIC8vIOWkh+eUqOWfn+WQjemAu+i+kVxuICAgIGlmIChzdGF0dXMuaXNFbmFibGVCYWNrdXBEb21haW4gJiYgY29uZmlnLmJhY2t1cERvbWFpbikge1xuICAgICAgICBvYmoudXJsID0gdXJsLnJlcGxhY2VEb21haW4ob2JqLnVybCwgY29uZmlnLmJhY2t1cERvbWFpbik7XG4gICAgfVxuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuLy8g5qC85byP5YyW5aSE55CG5LiK5Lyg5paH5Lu255qEb2Jq5YaF5a65XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmo6IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuXG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxldCBoZWFkZXIgPSBjb25maWcuc2V0SGVhZGVyKCk7XG4gICAgICAgIGlmICh0eXBlb2YgaGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5oZWFkZXJ9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5jb25maWcuc2V0SGVhZGVyfTtcbiAgICB9XG5cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHsgLi4ub2JqLmZvcm1EYXRhIGFzIG9iamVjdCwgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH07XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0geyAuLi5nZCwgLi4ub2JqLmZvcm1EYXRhIH07XG5cbiAgICBpZiAoIWNvbmZpZy5kb05vdFVzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIC8vIOWwhueZu+mZhuaAgeS5n+W4puWcqHVybOS4ilxuICAgICAgICBpZiAoc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIHsgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWFqOWxgOWPguaVsOWQjOaXtuaUvuWcqHVybOS4ilxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuXG4gICAgLy8g5aSH55So5Z+f5ZCN6YC76L6RXG4gICAgaWYgKHN0YXR1cy5pc0VuYWJsZUJhY2t1cERvbWFpbiAmJiBjb25maWcuYmFja3VwRG9tYWluKSB7XG4gICAgICAgIG9iai51cmwgPSB1cmwucmVwbGFjZURvbWFpbihvYmoudXJsLCBjb25maWcuYmFja3VwRG9tYWluKTtcbiAgICB9XG5cbiAgICBkdXJhdGlvblJlcG9ydGVyLnN0YXJ0KG9iaik7XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEYXRhKCkge1xuICAgIGxldCBnZDogYW55ID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnLmdsb2JhbERhdGEoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZ2Q7XG59XG5cbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmo6IElSZXF1ZXN0T3B0aW9uKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcbiAgICBpZiAob2JqLnJlTG9naW5Db3VudCA9PT0gMCAmJiB0eXBlb2YgY29uZmlnLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmogPSBjb25maWcuYmVmb3JlU2VuZChvYmosIHN0YXR1cy5zZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFdlY2hhdE1pbmlwcm9ncmFtLlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgd3gucmVxdWVzdCh7XG4gICAgICAgICAgICAuLi5vYmosXG4gICAgICAgICAgICBzdWNjZXNzKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbChyZXMpIHtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuLvln5/lkI3kuI3lj6/nlKjvvIzkuJTphY3nva7kuoblpIfku73ln5/lkI3vvIzkuJTmnKzmrKHor7fmsYLmnKrkvb/nlKjlpIfku73ln5/lkI1cbiAgICAgICAgICAgICAgICBpZiAocmVzPy5lcnJNc2c/LmluZGV4T2YoJ0NPTk5FQ1RJT05fUkVGVVNFRCcpID49IDAgJiYgY29uZmlnLmJhY2t1cERvbWFpbiAmJiBvYmoudXJsLmluZGV4T2YoY29uZmlnLmJhY2t1cERvbWFpbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOW8gOWQr+Wkh+S7veWfn+WQjVxuICAgICAgICAgICAgICAgICAgICBlbmFibGVCYWNrdXBEb21haW4oKTtcbiAgICAgICAgICAgICAgICAgICAgLy8g6YeN6K+V5LiA5qyhXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKS50aGVuKChyZXMpPT4gcmVzb2x2ZShyZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHR5cGU6ICdzeXN0ZW0tZXJyb3InLCByZXMgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIGlmIChvYmoucmVMb2dpbkNvdW50ID09PSAwICYmIHR5cGVvZiBjb25maWcuYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iaiA9IGNvbmZpZy5iZWZvcmVTZW5kKG9iaiwgc3RhdHVzLnNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2U8V2VjaGF0TWluaXByb2dyYW0uVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB3eC51cGxvYWRGaWxlKHtcbiAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsKHJlcykge1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOS4u+Wfn+WQjeS4jeWPr+eUqO+8jOS4lOmFjee9ruS6huWkh+S7veWfn+WQje+8jOS4lOacrOasoeivt+axguacquS9v+eUqOWkh+S7veWfn+WQjVxuICAgICAgICAgICAgICAgIGlmIChyZXM/LmVyck1zZz8uaW5kZXhPZignQ09OTkVDVElPTl9SRUZVU0VEJykgPj0gMCAmJiBjb25maWcuYmFja3VwRG9tYWluICYmIG9iai51cmwuaW5kZXhPZihjb25maWcuYmFja3VwRG9tYWluKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g5byA5ZCv5aSH5Lu95Z+f5ZCNXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZUJhY2t1cERvbWFpbigpO1xuICAgICAgICAgICAgICAgICAgICAvLyDph43or5XkuIDmrKFcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvVXBsb2FkRmlsZShvYmopLnRoZW4oKHJlcyk9PiByZXNvbHZlKHJlcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogJ3N5c3RlbS1lcnJvcicsIHJlcyB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmcuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0PFRSZXNwPihvYmo6IElSZXF1ZXN0T3B0aW9uKTogUHJvbWlzZTxUUmVzcD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgICAgICBpZiAoY29uZmlnLm1vY2tKc29uKSB7XG4gICAgICAgICAgICBsZXQgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyLnJlc3BvbnNlRm9yUmVxdWVzdChtb2NrUmVzcG9uc2UsIG9iaik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iai5jYWNoZSkge1xuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyLmdldChvYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXIubWFpbihvYmopLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvUmVxdWVzdChvYmopXG4gICAgICAgIH0pLnRoZW4oKHJlczogV2VjaGF0TWluaXByb2dyYW0uUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyLnJlc3BvbnNlRm9yUmVxdWVzdChyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGU6IElFcnJvck9iamVjdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdClcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiB1cGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pOiBhbnkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgICAgICBpZiAoY29uZmlnLm1vY2tKc29uKSB7XG4gICAgICAgICAgICBsZXQgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyLnJlc3BvbnNlRm9yVXBsb2FkRmlsZShtb2NrUmVzcG9uc2UsIG9iaik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXIubWFpbihvYmopLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvVXBsb2FkRmlsZShvYmopXG4gICAgICAgIH0pLnRoZW4oKHJlczogV2VjaGF0TWluaXByb2dyYW0uVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyLnJlc3BvbnNlRm9yVXBsb2FkRmlsZShyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGU6IElFcnJvck9iamVjdCkgPT4ge1xuICAgICAgICAgICAgY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGVuYWJsZUJhY2t1cERvbWFpbigpIHtcbiAgICBpZiAoIXN0YXR1cy5pc0VuYWJsZUJhY2t1cERvbWFpbikge1xuICAgICAgICBzdGF0dXMuaXNFbmFibGVCYWNrdXBEb21haW4gPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5iYWNrdXBEb21haW5FbmFibGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uZmlnLmJhY2t1cERvbWFpbkVuYWJsZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBmb3JtYXQsXG4gICAgcmVxdWVzdCxcbiAgICB1cGxvYWRGaWxlXG59XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBOEM7QUFHOUMsU0FBUyxNQUFNLENBQUMsU0FBaUI7SUFDN0IsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlCLE9BQU8sU0FBUyxDQUFBO0tBQ25CO1NBQU07UUFDSCxJQUFJLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3hDLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO0tBQ2hDO0FBQ0wsQ0FBQztBQUdELFNBQVMsS0FBSyxDQUErQyxHQUFNLEVBQUUsT0FBOEIsRUFBRSxNQUErQjtJQUVoSSxJQUFJLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDekMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNILEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN0QjtJQUVELElBQUksR0FBRyxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUNoRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDcEI7SUFFRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7UUFDakIsaUJBQU8sQ0FBQyxJQUFJLENB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QUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QjtTQUNKO1FBRUQsd0JBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQXNEO1lBQzNELElBQUksUUFBUSxHQUFHLHlCQUFlLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtnQkFDbEIsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUI7UUFDTCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBQyxDQUFlO1lBQ3JCLDJCQUFZLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsR0FBZ0I7SUFBaEIsb0JBQUEsRUFBQSxRQUFnQjtJQUN4QyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxvQkFBb0IsRUFBRTtRQUM5QixnQkFBTSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQywwQkFBMEIsS0FBSyxVQUFVLEVBQUU7WUFDekQsZ0JBQU0sQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQztLQUNKO0FBQ0wsQ0FBQztBQUVELGtCQUFlO0lBQ1gsTUFBTSxRQUFBO0lBQ04sT0FBTyxTQUFBO0lBQ1AsVUFBVSxZQUFBO0lBQ1Ysa0JBQWtCLG9CQUFBO0NBQ3JCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IG1vY2tNYW5hZ2VyIGZyb20gJy4vbW9ja01hbmFnZXInXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xuaW1wb3J0IHNlc3Npb25NYW5hZ2VyIGZyb20gJy4vc2Vzc2lvbk1hbmFnZXInXG5pbXBvcnQgcmVzcG9uc2VIYW5kbGVyIGZyb20gJy4vcmVzcG9uc2VIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSBcIi4vZHVyYXRpb25SZXBvcnRlclwiXG5pbXBvcnQgdXJsIGZyb20gJy4uL3V0aWwvdXJsJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uLCBJRXJyb3JPYmplY3QgfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcbmltcG9ydCB7IGNhdGNoSGFuZGxlciB9IGZyb20gJy4vY2F0Y2hIYW5kbGVyJztcblxuLy8g5qC85byP5YyWdXJsXG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsOiBzdHJpbmcpIHtcbiAgICBpZiAob3JpZ2luVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICByZXR1cm4gb3JpZ2luVXJsXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHVybFBlcmZpeCA9IGNvbmZpZy51cmxQZXJmaXg7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWcudXJsUGVyZml4KClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsUGVyZml4ICsgb3JpZ2luVXJsO1xuICAgIH1cbn1cblxuLy8g5omA5pyJ6K+35rGC5Y+R5Ye65YmN6ZyA6KaB5YGa55qE5LqL5oOFXG5mdW5jdGlvbiBwcmVEbzxUIGV4dGVuZHMgSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbj4ob2JqOiBULCByZXNvbHZlOiAodmFsdWU/OiBhbnkpID0+IHZvaWQsIHJlamVjdD86IChyZWFzb24/OiBhbnkpID0+IHZvaWQpOiBUIHtcbiAgICAvLyDnmbvlvZXmgIHlpLHmlYjvvIzph43lpI3nmbvlvZXorqHmlbBcbiAgICBpZiAodHlwZW9mIG9iai5yZUxvZ2luQ291bnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cblxuICAgIGlmIChvYmoucmVMb2dpbkNvdW50ID09PSAwICYmIHR5cGVvZiBvYmouYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XG4gICAgfVxuXG4gICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICBsb2FkaW5nLnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG5cbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgb2JqLm9yaWdpblVybCA9IG9iai51cmw7XG4gICAgICAgIG9iai51cmwgPSBmb3JtYXQob2JqLnVybCk7XG4gICAgfVxuXG4gICAgb2JqLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICBvYmouX3JlamVjdCA9IHJlamVjdDtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8vIOagvOW8j+WMluWkhOeQhuivt+axgueahG9iauWGheWuuVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuXG4gICAgaWYgKCFvYmouZGF0YSkge1xuICAgICAgICBvYmouZGF0YSA9IHt9O1xuICAgIH1cbiAgICBcbiAgICBvYmouaGVhZGVyID0gb2JqLmhlYWRlciA/IG9iai5oZWFkZXIgOiB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGV0IGhlYWRlciA9IGNvbmZpZy5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gey4uLm9iai5oZWFkZXIsIC4uLmhlYWRlcn07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuc2V0SGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvYmouaGVhZGVyID0gey4uLm9iai5oZWFkZXIsIC4uLmNvbmZpZy5zZXRIZWFkZXJ9O1xuICAgIH1cblxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7IC4uLm9iai5kYXRhIGFzIG9iamVjdCwgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH07XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmRhdGEgPSB7IC4uLmdkLCAuLi5vYmouZGF0YSBhcyBvYmplY3QgfTtcblxuICAgIG9iai5tZXRob2QgPSBvYmoubWV0aG9kIHx8ICdHRVQnO1xuICAgIG9iai5kYXRhVHlwZSA9IG9iai5kYXRhVHlwZSB8fCAnanNvbic7XG5cbiAgICAvLyDlpoLmnpzor7fmsYLkuI3mmK9HRVTvvIzliJnlnKhVUkzkuK3oh6rliqjliqDkuIrnmbvlvZXmgIHlkozlhajlsYDlj4LmlbBcbiAgICBpZiAoIWNvbmZpZy5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCB7IFtjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbiB9KTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuXG4gICAgLy8g5aSH55So5Z+f5ZCN6YC76L6RXG4gICAgb2JqLnVybCA9IHVybC5yZXBsYWNlRG9tYWluKG9iai51cmwpO1xuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuLy8g5qC85byP5YyW5aSE55CG5LiK5Lyg5paH5Lu255qEb2Jq5YaF5a65XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmo6IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuXG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxldCBoZWFkZXIgPSBjb25maWcuc2V0SGVhZGVyKCk7XG4gICAgICAgIGlmICh0eXBlb2YgaGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5oZWFkZXJ9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5jb25maWcuc2V0SGVhZGVyfTtcbiAgICB9XG5cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHsgLi4ub2JqLmZvcm1EYXRhIGFzIG9iamVjdCwgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH07XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0geyAuLi5nZCwgLi4ub2JqLmZvcm1EYXRhIH07XG5cbiAgICBpZiAoIWNvbmZpZy5kb05vdFVzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIC8vIOWwhueZu+mZhuaAgeS5n+W4puWcqHVybOS4ilxuICAgICAgICBpZiAoc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIHsgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWFqOWxgOWPguaVsOWQjOaXtuaUvuWcqHVybOS4ilxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuXG4gICAgLy8g5aSH55So5Z+f5ZCN6YC76L6RXG4gICAgb2JqLnVybCA9IHVybC5yZXBsYWNlRG9tYWluKG9iai51cmwpO1xuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcbiAgICBsZXQgZ2Q6IGFueSA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmdsb2JhbERhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWcuZ2xvYmFsRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGdkO1xufVxuXG5mdW5jdGlvbiBkb1JlcXVlc3Qob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuICAgIG9iaiA9IGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaik7XG4gICAgaWYgKG9iai5yZUxvZ2luQ291bnQgPT09IDAgJiYgdHlwZW9mIGNvbmZpZy5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqID0gY29uZmlnLmJlZm9yZVNlbmQob2JqLCBzdGF0dXMuc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgLi4ub2JqLFxuICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWwocmVzKSB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5Li75Z+f5ZCN5LiN5Y+v55So77yM5LiU6YWN572u5LqG5aSH5Lu95Z+f5ZCN77yM5LiU5pys5qyh6K+35rGC5pyq5L2/55So5aSH5Lu95Z+f5ZCNXG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uZXJyTXNnPy5pbmRleE9mKCdDT05ORUNUSU9OX1JFRlVTRUQnKSA+PSAwICYmIHVybC5pc0luQmFja3VwRG9tYWluTGlzdChvYmoudXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyDlvIDlkK/lpIfku73ln5/lkI1cbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlQmFja3VwRG9tYWluKG9iai51cmwpO1xuICAgICAgICAgICAgICAgICAgICAvLyDph43or5XkuIDmrKFcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvUmVxdWVzdChvYmopLnRoZW4oKHJlcyk9PiByZXNvbHZlKHJlcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogJ3N5c3RlbS1lcnJvcicsIHJlcyB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmcuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIG9iaiA9IGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaik7XG4gICAgaWYgKG9iai5yZUxvZ2luQ291bnQgPT09IDAgJiYgdHlwZW9mIGNvbmZpZy5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqID0gY29uZmlnLmJlZm9yZVNlbmQob2JqLCBzdGF0dXMuc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxXZWNoYXRNaW5pcHJvZ3JhbS5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHd4LnVwbG9hZEZpbGUoe1xuICAgICAgICAgICAgLi4ub2JqLFxuICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWwocmVzKSB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5Li75Z+f5ZCN5LiN5Y+v55So77yM5LiU6YWN572u5LqG5aSH5Lu95Z+f5ZCN77yM5LiU5pys5qyh6K+35rGC5pyq5L2/55So5aSH5Lu95Z+f5ZCNXG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uZXJyTXNnPy5pbmRleE9mKCdDT05ORUNUSU9OX1JFRlVTRUQnKSA+PSAwICYmIHVybC5pc0luQmFja3VwRG9tYWluTGlzdChvYmoudXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyDlvIDlkK/lpIfku73ln5/lkI1cbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlQmFja3VwRG9tYWluKG9iai51cmwpO1xuICAgICAgICAgICAgICAgICAgICAvLyDph43or5XkuIDmrKFcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvVXBsb2FkRmlsZShvYmopLnRoZW4oKHJlcyk9PiByZXNvbHZlKHJlcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogJ3N5c3RlbS1lcnJvcicsIHJlcyB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmcuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0PFRSZXNwPihvYmo6IElSZXF1ZXN0T3B0aW9uKTogUHJvbWlzZTxUUmVzcD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgICAgICBpZiAoY29uZmlnLm1vY2tKc29uKSB7XG4gICAgICAgICAgICBsZXQgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyLnJlc3BvbnNlRm9yUmVxdWVzdChtb2NrUmVzcG9uc2UsIG9iaik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iai5jYWNoZSkge1xuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyLmdldChvYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXIubWFpbihvYmopLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvUmVxdWVzdChvYmopXG4gICAgICAgIH0pLnRoZW4oKHJlczogV2VjaGF0TWluaXByb2dyYW0uUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyLnJlc3BvbnNlRm9yUmVxdWVzdChyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGU6IElFcnJvck9iamVjdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdClcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiB1cGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pOiBhbnkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgICAgICBpZiAoY29uZmlnLm1vY2tKc29uKSB7XG4gICAgICAgICAgICBsZXQgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyLnJlc3BvbnNlRm9yVXBsb2FkRmlsZShtb2NrUmVzcG9uc2UsIG9iaik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXIubWFpbihvYmopLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvVXBsb2FkRmlsZShvYmopXG4gICAgICAgIH0pLnRoZW4oKHJlczogV2VjaGF0TWluaXByb2dyYW0uVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyLnJlc3BvbnNlRm9yVXBsb2FkRmlsZShyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGU6IElFcnJvck9iamVjdCkgPT4ge1xuICAgICAgICAgICAgY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGVuYWJsZUJhY2t1cERvbWFpbih1cmw6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBpZiAoIXN0YXR1cy5pc0VuYWJsZUJhY2t1cERvbWFpbikge1xuICAgICAgICBzdGF0dXMuaXNFbmFibGVCYWNrdXBEb21haW4gPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5iYWNrdXBEb21haW5FbmFibGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uZmlnLmJhY2t1cERvbWFpbkVuYWJsZUNhbGxiYWNrKHVybCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBmb3JtYXQsXG4gICAgcmVxdWVzdCxcbiAgICB1cGxvYWRGaWxlLFxuICAgIGVuYWJsZUJhY2t1cERvbWFpblxufVxuIl19 /***/ }), @@ -976,6 +974,7 @@ var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/mo var requestHandler_1 = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.ts"); var loading_1 = __webpack_require__(/*! ../util/loading */ "./src/util/loading.ts"); var request_1 = __webpack_require__(/*! ../api/request */ "./src/api/request.ts"); +var url_1 = __webpack_require__(/*! ../util/url */ "./src/util/url.ts"); var checkSessionPromise = null; function checkSession() { if (!checkSessionPromise) { @@ -1114,6 +1113,7 @@ function code2Session(code) { if (typeof config_1.default.beforeSend === "function") { obj = config_1.default.beforeSend(obj); } + obj.url = url_1.default.replaceDomain(obj.url); return [2, new Promise(function (resolve, reject) { var start = new Date().getTime(); wx.request(__assign(__assign({}, obj), { success: function (res) { @@ -1154,6 +1154,11 @@ function code2Session(code) { }, complete: function () { }, fail: function (res) { + var _a; + if (((_a = res === null || res === void 0 ? void 0 : res.errMsg) === null || _a === void 0 ? void 0 : _a.indexOf('CONNECTION_REFUSED')) >= 0 && url_1.default.isInBackupDomainList(obj.url)) { + requestHandler_1.default.enableBackupDomain(obj.url); + return code2Session(code).then(function (res) { return resolve(res); }); + } return reject({ type: "system-error", res: res }); } })); })]; @@ -1198,7 +1203,7 @@ exports.default = { setSession: setSession, delSession: delSession }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBQ3BDLCtDQUF5QztBQUN6Qyx1REFBaUQ7QUFDakQsbURBQTZDO0FBQzdDLDJDQUFxQztBQUNyQywwQ0FBb0M7QUFJcEMsSUFBSSxtQkFBbUIsR0FBUSxJQUFJLENBQUM7QUFFcEMsU0FBUyxZQUFZO0lBQ2pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtRQUN0QixtQkFBbUIsR0FBRyxJQUFJLE9BQU8sQ0FBTyxVQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ3BELElBQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkMsRUFBRSxDQUFDLFlBQVksQ0FBQztnQkFDWixPQUFPO29CQUVILE9BQU8sT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQ0QsSUFBSSxFQUFKO29CQUVJLFVBQVUsRUFBRSxDQUFDO29CQUNiLE9BQU8sT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNsQixPQUFPLE9BQU8sRUFBRSxDQUFDO29CQUNyQixDQUFDLEVBQUUsVUFBQyxHQUFRO3dCQUNSLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN2QixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELFFBQVE7b0JBQ0osSUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDakMsMEJBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDM0QsQ0FBQzthQUNKLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxD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QUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE9BQU8sTUFBTSxDQUFDLEVBQUMsS0FBSyxPQUFBLEVBQUUsT0FBTyxTQUFBLEVBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNKLE9BQU8sT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQyxFQUFFLFVBQUMsRUFBZ0I7Z0JBQWYsS0FBSyxXQUFBLEVBQUUsT0FBTyxhQUFBO1lBQ2Ysc0JBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQyxFQUFDLEtBQUssT0FBQSxFQUFFLE9BQU8sU0FBQSxFQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELGtCQUFlO0lBQ1gsSUFBSSxNQUFBO0lBQ0osVUFBVSxZQUFBO0lBQ1YsVUFBVSxZQUFBO0NBQ2IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgZXJyb3JIYW5kbGVyIGZyb20gJy4vZXJyb3JIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSAnLi9kdXJhdGlvblJlcG9ydGVyJ1xuaW1wb3J0IHJlcXVlc3RIYW5kbGVyIGZyb20gJy4vcmVxdWVzdEhhbmRsZXInXG5pbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9hcGkvcmVxdWVzdCdcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuLyog55Sf5ZG95ZGo5pyf5YaF5Y+q5YGa5LiA5qyh55qEY2hlY2tTZXNzaW9uICovXG5sZXQgY2hlY2tTZXNzaW9uUHJvbWlzZTogYW55ID0gbnVsbDtcblxuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgc3VjY2VzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g55m75b2V5oCB5pyJ5pWI77yM5LiU5Zyo5pys55Sf5ZG95ZGo5pyf5YaF5peg6aG75YaN5qOA6aqM5LqGXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDnmbvlvZXmgIHov4fmnJ9cbiAgICAgICAgICAgICAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgKHJlczogYW55KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGVja1Nlc3Npb25Qcm9taXNlO1xufVxuXG4vKiDliKTmlq1zZXNzaW9u5piv5ZCm5Li656m65oiW5bey6L+H5pyfICovXG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xuICAgIGlmICghc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgLy8g5aaC5p6c57yT5a2Y5Lit5rKh5pyJc2Vzc2lvblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzLnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbue8k+WtmOaXtumXtO+8jOS4lOe8k+WtmOaXtumXtOW3suWIsFxuICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjaGVja0xvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcbiAgICAgICAgICAgIC8vIOayoeacieeZu+mZhuaAge+8jOS4jemcgOimgeWGjWNoZWNrU2Vzc2lvblxuICAgICAgICAgICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIChyZXM6IGFueSk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g57yT5a2Y5Lit5pyJc2Vzc2lvbuS4lOacqui/h+acn1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbi8qIOeZu+mZhua1geeoi+eahHByb21pc2UgKi9cbmxldCBsb2dpblByb21pc2U6IGFueSA9IG51bGw7XG5cbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTJTZXNzaW9uKHJlcy5jb2RlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb246IHN0cmluZykge1xuICAgIHN0YXR1cy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAvLyDmjaLlm57mnaXnmoRzZXNzaW9u77yM5LiN6ZyA6KaB5YaNY2hlY2tTZXNzaW9uXG4gICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u6L+H5pyf5pe26Ze0XG4gICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXMuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzLnNlc3Npb25FeHBpcmUpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgIGRhdGE6IHN0YXR1cy5zZXNzaW9uXG4gICAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvZGUyU2Vzc2lvbihjb2RlOiBzdHJpbmcpIHtcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIC8vIGNvZGVUb1Nlc3Npb24uZGF0YeaUr+aMgeWHveaVsFxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhKGNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhIHx8IHt9O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvZGVUb1Nlc3Npb24uY29kZU5hbWUpIHtcbiAgICAgICAgZGF0YVtjb25maWcuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZV0gPSBjb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuY29kZSA9IGNvZGU7XG4gICAgfVxuXG4gICAgbGV0IG9iaiA9IHtcbiAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlci5mb3JtYXQoY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsKSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgbWV0aG9kOiBjb25maWcuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgIGhlYWRlcjogdHlwZW9mIGNvbmZpZy5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicgPyBjb25maWcuc2V0SGVhZGVyKCk6IGNvbmZpZy5zZXRIZWFkZXIsXG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmogPSBjb25maWcuYmVmb3JlU2VuZChvYmopO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6ICX5pe25LiK5oqlXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29kZVRvU2Vzc2lvbi5yZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIucmVwb3J0KGNvbmZpZy5jb2RlVG9TZXNzaW9uLnJlcG9ydCwgc3RhcnQsIGVuZClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEsIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaNouWbnuadpeeahHNlc3Npb27vvIzkuI3pnIDopoHlho1jaGVja1Nlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u6L+H5pyf5pe26Ze0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1cy5zZXNzaW9uRXhwaXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXMuc2Vzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JIYW5kbGVyLmdldEVycm9yTXNnKHJlcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dHlwZTogXCJodHRwLWVycm9yXCIsIHJlc30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dHlwZTogXCJzeXN0ZW0tZXJyb3JcIiwgcmVzfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuLyog5riF56m6c2Vzc2lvbiAqL1xuZnVuY3Rpb24gZGVsU2Vzc2lvbigpIHtcbiAgICBzdGF0dXMuc2Vzc2lvbiA9ICcnO1xuICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSBhcyBzdHJpbmdcbiAgICB9KTtcbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gSW5maW5pdHk7XG4gICAgICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFpbihyZWxhdGVkUmVxdWVzdE9iaj86IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmV0cnkgPSAhcmVsYXRlZFJlcXVlc3RPYmpcbiAgICAgICAgICAgIC8vIOWmguaenOayoeacieWFs+iBlOeahOivt+axgu+8jOmHjeivleWNs+iwg+eUqOiHqui6q1xuICAgICAgICAgICAgPyAoKSA9PiBtYWluKCkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAvLyDlpoLmnpzmnInlhbPogZTnmoTor7fmsYLvvIzph43or5XljbPosIPnlKjmiYDlhbPogZTnmoTor7fmsYJcbiAgICAgICAgICAgIDogKCkgPT4gcmVxdWVzdChyZWxhdGVkUmVxdWVzdE9iaikudGhlbihyZWxhdGVkUmVxdWVzdE9iai5fcmVzb2x2ZSkuY2F0Y2gocmVsYXRlZFJlcXVlc3RPYmouX3JlamVjdCk7XG4gICAgICAgIHJldHVybiBjaGVja0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBjaGVja1Nlc3Npb24oKVxuICAgICAgICB9LCAoe3RpdGxlLCBjb250ZW50fSkgPT4ge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlLCBjb250ZW50fSk7XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSwgKHt0aXRsZSwgY29udGVudH0pPT4ge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlLCBjb250ZW50fSk7XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1haW4sXG4gICAgc2V0U2Vzc2lvbixcbiAgICBkZWxTZXNzaW9uXG59XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBQ3BDLCtDQUF5QztBQUN6Qyx1REFBaUQ7QUFDakQsbURBQTZDO0FBQzdDLDJDQUFxQztBQUNyQywwQ0FBb0M7QUFDcEMsbUNBQTZCO0FBSTdCLElBQUksbUJBQW1CLEdBQVEsSUFBSSxDQUFDO0FBRXBDLFNBQVMsWUFBWTtJQUNqQixJQUFJLENBQUMsbUJBQW1CLEVBQUU7UUFDdEIsbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQU8sVUFBQyxPQUFPLEVBQUUsTUFBTTtZQUNwRCxJQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ1osT0FBTztvQkFFSCxPQUFPLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixDQUFDO2dCQUNELElBQUksRUFBSjtvQkFFSSxVQUFVLEVBQUUsQ0FBQztvQkFDYixPQUFPLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDbEIsT0FBTyxPQUFPLEVBQUUsQ0FBQztvQkFDckIsQ0FBQyxFQUFFLFVBQUMsR0FBUTt3QkFDUixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFDRCxRQUFRO29CQUNKLElBQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2pDLDBCQUFnQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNELENBQUM7YUFDSixDQUFDLENBQUE7UUFD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XG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCBlcnJvckhhbmRsZXIgZnJvbSAnLi9lcnJvckhhbmRsZXInXG5pbXBvcnQgZHVyYXRpb25SZXBvcnRlciBmcm9tICcuL2R1cmF0aW9uUmVwb3J0ZXInXG5pbXBvcnQgcmVxdWVzdEhhbmRsZXIgZnJvbSAnLi9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCBsb2FkaW5nIGZyb20gJy4uL3V0aWwvbG9hZGluZydcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL2FwaS9yZXF1ZXN0J1xuaW1wb3J0IHVybCBmcm9tICcuLi91dGlsL3VybCdcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuLyog55Sf5ZG95ZGo5pyf5YaF5Y+q5YGa5LiA5qyh55qEY2hlY2tTZXNzaW9uICovXG5sZXQgY2hlY2tTZXNzaW9uUHJvbWlzZTogYW55ID0gbnVsbDtcblxuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgc3VjY2VzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g55m75b2V5oCB5pyJ5pWI77yM5LiU5Zyo5pys55Sf5ZG95ZGo5pyf5YaF5peg6aG75YaN5qOA6aqM5LqGXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDnmbvlvZXmgIHov4fmnJ9cbiAgICAgICAgICAgICAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgKHJlczogYW55KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGVja1Nlc3Npb25Qcm9taXNlO1xufVxuXG4vKiDliKTmlq1zZXNzaW9u5piv5ZCm5Li656m65oiW5bey6L+H5pyfICovXG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xuICAgIGlmICghc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgLy8g5aaC5p6c57yT5a2Y5Lit5rKh5pyJc2Vzc2lvblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzLnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbue8k+WtmOaXtumXtO+8jOS4lOe8k+WtmOaXtumXtOW3suWIsFxuICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjaGVja0xvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcbiAgICAgICAgICAgIC8vIOayoeacieeZu+mZhuaAge+8jOS4jemcgOimgeWGjWNoZWNrU2Vzc2lvblxuICAgICAgICAgICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIChyZXM6IGFueSk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g57yT5a2Y5Lit5pyJc2Vzc2lvbuS4lOacqui/h+acn1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbi8qIOeZu+mZhua1geeoi+eahHByb21pc2UgKi9cbmxldCBsb2dpblByb21pc2U6IGFueSA9IG51bGw7XG5cbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTJTZXNzaW9uKHJlcy5jb2RlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb246IHN0cmluZykge1xuICAgIHN0YXR1cy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAvLyDmjaLlm57mnaXnmoRzZXNzaW9u77yM5LiN6ZyA6KaB5YaNY2hlY2tTZXNzaW9uXG4gICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u6L+H5pyf5pe26Ze0XG4gICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXMuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzLnNlc3Npb25FeHBpcmUpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgIGRhdGE6IHN0YXR1cy5zZXNzaW9uXG4gICAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvZGUyU2Vzc2lvbihjb2RlOiBzdHJpbmcpIHtcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIC8vIGNvZGVUb1Nlc3Npb24uZGF0YeaUr+aMgeWHveaVsFxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhKGNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhIHx8IHt9O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvZGVUb1Nlc3Npb24uY29kZU5hbWUpIHtcbiAgICAgICAgZGF0YVtjb25maWcuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZV0gPSBjb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuY29kZSA9IGNvZGU7XG4gICAgfVxuXG4gICAgbGV0IG9iaiA9IHtcbiAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlci5mb3JtYXQoY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsKSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgbWV0aG9kOiBjb25maWcuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgIGhlYWRlcjogdHlwZW9mIGNvbmZpZy5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicgPyBjb25maWcuc2V0SGVhZGVyKCk6IGNvbmZpZy5zZXRIZWFkZXIsXG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmogPSBjb25maWcuYmVmb3JlU2VuZChvYmopO1xuICAgIH1cblxuICAgIC8vIOWkh+eUqOWfn+WQjemAu+i+kVxuICAgIG9iai51cmwgPSB1cmwucmVwbGFjZURvbWFpbihvYmoudXJsKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6ICX5pe25LiK5oqlXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29kZVRvU2Vzc2lvbi5yZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIucmVwb3J0KGNvbmZpZy5jb2RlVG9TZXNzaW9uLnJlcG9ydCwgc3RhcnQsIGVuZClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEsIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaNouWbnuadpeeahHNlc3Npb27vvIzkuI3pnIDopoHlho1jaGVja1Nlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u6L+H5pyf5pe26Ze0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1cy5zZXNzaW9uRXhwaXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXMuc2Vzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JIYW5kbGVyLmdldEVycm9yTXNnKHJlcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dHlwZTogXCJodHRwLWVycm9yXCIsIHJlc30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5Li75Z+f5ZCN5LiN5Y+v55So77yM5LiU6YWN572u5LqG5aSH5Lu95Z+f5ZCN77yM5LiU5pys5qyh6K+35rGC5pyq5L2/55So5aSH5Lu95Z+f5ZCNXG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uZXJyTXNnPy5pbmRleE9mKCdDT05ORUNUSU9OX1JFRlVTRUQnKSA+PSAwICYmIHVybC5pc0luQmFja3VwRG9tYWluTGlzdChvYmoudXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyDlvIDlkK/lpIfku73ln5/lkI1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhhbmRsZXIuZW5hYmxlQmFja3VwRG9tYWluKG9iai51cmwpO1xuICAgICAgICAgICAgICAgICAgICAvLyDph43or5XkuIDmrKFcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUyU2Vzc2lvbihjb2RlKS50aGVuKChyZXMpPT4gcmVzb2x2ZShyZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dHlwZTogXCJzeXN0ZW0tZXJyb3JcIiwgcmVzfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuLyog5riF56m6c2Vzc2lvbiAqL1xuZnVuY3Rpb24gZGVsU2Vzc2lvbigpIHtcbiAgICBzdGF0dXMuc2Vzc2lvbiA9ICcnO1xuICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSBhcyBzdHJpbmdcbiAgICB9KTtcbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gSW5maW5pdHk7XG4gICAgICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFpbihyZWxhdGVkUmVxdWVzdE9iaj86IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmV0cnkgPSAhcmVsYXRlZFJlcXVlc3RPYmpcbiAgICAgICAgICAgIC8vIOWmguaenOayoeacieWFs+iBlOeahOivt+axgu+8jOmHjeivleWNs+iwg+eUqOiHqui6q1xuICAgICAgICAgICAgPyAoKSA9PiBtYWluKCkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAvLyDlpoLmnpzmnInlhbPogZTnmoTor7fmsYLvvIzph43or5XljbPosIPnlKjmiYDlhbPogZTnmoTor7fmsYJcbiAgICAgICAgICAgIDogKCkgPT4gcmVxdWVzdChyZWxhdGVkUmVxdWVzdE9iaikudGhlbihyZWxhdGVkUmVxdWVzdE9iai5fcmVzb2x2ZSkuY2F0Y2gocmVsYXRlZFJlcXVlc3RPYmouX3JlamVjdCk7XG4gICAgICAgIHJldHVybiBjaGVja0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBjaGVja1Nlc3Npb24oKVxuICAgICAgICB9LCAoe3RpdGxlLCBjb250ZW50fSkgPT4ge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlLCBjb250ZW50fSk7XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSwgKHt0aXRsZSwgY29udGVudH0pPT4ge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlLCBjb250ZW50fSk7XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1haW4sXG4gICAgc2V0U2Vzc2lvbixcbiAgICBkZWxTZXNzaW9uXG59XG4iXX0= /***/ }), @@ -1342,6 +1347,8 @@ var __assign = (this && this.__assign) || function () { 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"); function setParams(url, params) { if (url === void 0) { url = ""; } var queryStringIndex = url.indexOf("?"); @@ -1366,17 +1373,37 @@ function setParams(url, params) { return url + "?" + queryString; } } -function replaceDomain(url, domain) { +function replaceDomain(url) { if (url === void 0) { url = ""; } - if (domain === void 0) { domain = ""; } - domain = domain.replace(/^http(s)?:\/\//, '').replace(/\/$/, ''); - return url.replace(/^http(s)?:\/\/(.*?)\//, "https://" + domain + "/"); + if (status_1.default.isEnableBackupDomain && config_1.default.backupDomainList && typeof config_1.default.backupDomainList === 'object') { + for (var origin in config_1.default.backupDomainList) { + if (url.indexOf(origin) >= 0) { + url = url.replace(origin, config_1.default.backupDomainList[origin]); + break; + } + } + } + return url; +} +function isInBackupDomainList(url) { + if (url === void 0) { url = ""; } + var res = false; + if (config_1.default.backupDomainList && typeof config_1.default.backupDomainList === 'object') { + for (var origin in config_1.default.backupDomainList) { + if (url.indexOf(origin) >= 0) { + res = true; + break; + } + } + } + return res; } exports.default = { setParams: setParams, replaceDomain: replaceDomain, + isInBackupDomainList: isInBackupDomainList }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLFNBQVMsQ0FBQyxHQUFnQixFQUFFLE1BQWM7SUFBaEMsb0JBQUEsRUFBQSxRQUFnQjtJQUMvQixJQUFNLGdCQUFnQixHQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLElBQUksZ0JBQWdCLElBQUksQ0FBQyxFQUFFO1FBQ3ZCLElBQU0sZ0JBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuRSxnQkFBYyxDQUFDLE9BQU8sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQU0sRUFBRSxHQUFhLGdCQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELEdBQUcseUJBQU8sR0FBRyxHQUFLLE1BQU0sQ0FBQyxDQUFDO0lBRTFCLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQy9CLEdBQUcsQ0FBQyxVQUFBLEdBQUc7UUFDSixPQUFVLEdBQUcsU0FBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFHLENBQUM7SUFDM0MsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWYsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDdkIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7S0FDL0Q7U0FBTTtRQUNILE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7S0FDbEM7QUFDTCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsR0FBZ0IsRUFBRSxNQUFtQjtJQUFyQyxvQkFBQSxFQUFBLFFBQWdCO0lBQUUsdUJBQUEsRUFBQSxXQUFtQjtJQUV4RCxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxhQUFXLE1BQU0sTUFBRyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELGtCQUFlO0lBQ1gsU0FBUyxXQUFBO0lBQ1QsYUFBYSxlQUFBO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBzZXRQYXJhbXModXJsOiBzdHJpbmcgPSBcIlwiLCBwYXJhbXM6IG9iamVjdCkge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nSW5kZXg6IG51bWJlciA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgICBsZXQga3ZwOiBhbnkgPSB7fTtcbiAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG9sZFF1ZXJ5U3RyaW5nID0gdXJsLnN1YnN0cihxdWVyeVN0cmluZ0luZGV4ICsgMSkuc3BsaXQoXCImXCIpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9sZFF1ZXJ5U3RyaW5nLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGt2OiBzdHJpbmdbXSA9IG9sZFF1ZXJ5U3RyaW5nW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAga3ZwID0gey4uLmt2cCwgLi4ucGFyYW1zfTtcblxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmtleXMoa3ZwKVxuICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fT0ke2VuY29kZVVSSShrdnBba2V5XSl9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xuXG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gdXJsLnN1YnN0cmluZygwLCBxdWVyeVN0cmluZ0luZGV4ICsgMSkgKyBxdWVyeVN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsICsgXCI/XCIgKyBxdWVyeVN0cmluZztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEb21haW4odXJsOiBzdHJpbmcgPSBcIlwiLCBkb21haW46IHN0cmluZyA9IFwiXCIpIHtcbiAgICAvLyDkv53or4Fkb21haW7lj6rljIXlkKvln5/lkI3vvIzmsqHmnIkgaHR0cChzKSDliY3nvIAg5ZKMIC8g5ZCO57yAXG4gICAgZG9tYWluID0gZG9tYWluLnJlcGxhY2UoL15odHRwKHMpPzpcXC9cXC8vLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICByZXR1cm4gdXJsLnJlcGxhY2UoL15odHRwKHMpPzpcXC9cXC8oLio/KVxcLy8sIGBodHRwczovLyR7ZG9tYWlufS9gKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHNldFBhcmFtcyxcbiAgICByZXBsYWNlRG9tYWluLFxufTtcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBRXBDLFNBQVMsU0FBUyxDQUFDLEdBQWdCLEVBQUUsTUFBYztJQUFoQyxvQkFBQSxFQUFBLFFBQWdCO0lBQy9CLElBQU0sZ0JBQWdCLEdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxJQUFJLEdBQUcsR0FBUSxFQUFFLENBQUM7SUFDbEIsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDdkIsSUFBTSxnQkFBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5FLGdCQUFjLENBQUMsT0FBTyxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBTSxFQUFFLEdBQWEsZ0JBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztLQUNOO0lBRUQsR0FBRyx5QkFBTyxHQUFHLEdBQUssTUFBTSxDQUFDLENBQUM7SUFFMUIsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDL0IsR0FBRyxDQUFDLFVBQUEsR0FBRztRQUNKLE9BQVUsR0FBRyxTQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUcsQ0FBQztJQUMzQyxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFZixJQUFJLGdCQUFnQixJQUFJLENBQUMsRUFBRTtRQUN2QixPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztLQUMvRDtTQUFNO1FBQ0gsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQztLQUNsQztBQUNMLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxHQUFnQjtJQUFoQixvQkFBQSxFQUFBLFFBQWdCO0lBQ25DLElBQUksZ0JBQU0sQ0FBQyxvQkFBb0IsSUFBSSxnQkFBTSxDQUFDLGdCQUFnQixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLEVBQUU7UUFDdkcsS0FBSSxJQUFNLE1BQU0sSUFBSSxnQkFBTSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE1BQU07YUFDVDtTQUNKO0tBQ0o7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEdBQWdCO0lBQWhCLG9CQUFBLEVBQUEsUUFBZ0I7SUFDMUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLElBQUksZ0JBQU0sQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLGdCQUFNLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxFQUFFO1FBQ3hFLEtBQUksSUFBTSxNQUFNLElBQUksZ0JBQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMxQixHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUNYLE1BQU07YUFDVDtTQUNKO0tBQ0o7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCxrQkFBZTtJQUNYLFNBQVMsV0FBQTtJQUNULGFBQWEsZUFBQTtJQUNiLG9CQUFvQixzQkFBQTtDQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcblxuZnVuY3Rpb24gc2V0UGFyYW1zKHVybDogc3RyaW5nID0gXCJcIiwgcGFyYW1zOiBvYmplY3QpIHtcbiAgICBjb25zdCBxdWVyeVN0cmluZ0luZGV4OiBudW1iZXIgPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gICAgbGV0IGt2cDogYW55ID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBvbGRRdWVyeVN0cmluZyA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbGRRdWVyeVN0cmluZy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrdjogc3RyaW5nW10gPSBvbGRRdWVyeVN0cmluZ1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICBrdnBba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGt2cCA9IHsuLi5rdnAsIC4uLnBhcmFtc307XG5cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX09JHtlbmNvZGVVUkkoa3ZwW2tleV0pfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiJlwiKTtcblxuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVybCArIFwiP1wiICsgcXVlcnlTdHJpbmc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZXBsYWNlRG9tYWluKHVybDogc3RyaW5nID0gXCJcIikge1xuICAgIGlmIChzdGF0dXMuaXNFbmFibGVCYWNrdXBEb21haW4gJiYgY29uZmlnLmJhY2t1cERvbWFpbkxpc3QgJiYgdHlwZW9mIGNvbmZpZy5iYWNrdXBEb21haW5MaXN0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IoY29uc3Qgb3JpZ2luIGluIGNvbmZpZy5iYWNrdXBEb21haW5MaXN0KSB7XG4gICAgICAgICAgICBpZiAodXJsLmluZGV4T2Yob3JpZ2luKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2Uob3JpZ2luLCBjb25maWcuYmFja3VwRG9tYWluTGlzdFtvcmlnaW5dKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufVxuXG5mdW5jdGlvbiBpc0luQmFja3VwRG9tYWluTGlzdCh1cmw6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBsZXQgcmVzID0gZmFsc2U7XG4gICAgaWYgKGNvbmZpZy5iYWNrdXBEb21haW5MaXN0ICYmIHR5cGVvZiBjb25maWcuYmFja3VwRG9tYWluTGlzdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yKGNvbnN0IG9yaWdpbiBpbiBjb25maWcuYmFja3VwRG9tYWluTGlzdCkge1xuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKG9yaWdpbikgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHNldFBhcmFtcyxcbiAgICByZXBsYWNlRG9tYWluLFxuICAgIGlzSW5CYWNrdXBEb21haW5MaXN0XG59O1xuIl19 /***/ }), @@ -1391,11 +1418,11 @@ exports.default = { Object.defineProperty(exports, "__esModule", { value: true }); exports.version = void 0; -var version = "1.7.0"; +var version = "1.7.1"; exports.version = version; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQztBQUVuQiwwQkFBTyIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgY29uc3QgX19WRVJTSU9OX186IHN0cmluZztcblxuY29uc3QgdmVyc2lvbiA9IF9fVkVSU0lPTl9fO1xuXG5leHBvcnQgeyB2ZXJzaW9uIH07XG4iXX0= /***/ }) /******/ })["default"]; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhdGNoSGFuZGxlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2pzb25TdXBlcnNldC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdXRpbC9sb2FkaW5nLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL3VybC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLCszQjs7Ozs7Ozs7Ozs7O0FDWjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxD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QTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsbWdDOzs7Ozs7Ozs7Ozs7QUNqQjlCO0FBQ2I7QUFDQTtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBLHlCQUF5QixVQUFVO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsVUFBVTtBQUNuQyw0QkFBNEIsYUFBYTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywrd0c7Ozs7Ozs7Ozs7OztBQy9DOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBLGNBQWMsT0FBVztBQUN6QjtBQUNBLDJDQUEyQyx1VyIsImZpbGUiOiJ3ZVJlcXVlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC50c1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHVybFBlcmZpeDogY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXgsXG4gICAgICAgIHNlc3Npb25FeHBpcmVUaW1lOiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lLFxuICAgICAgICBzZXNzaW9uRXhwaXJlS2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgIHNlc3Npb25FeHBpcmU6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVxuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBRMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDJGd2FTOW5aWFJEYjI1bWFXY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCUlhCRExHMUNRVUZsTzBsQlExZ3NUMEZCVHp0UlFVTklMRk5CUVZNc1JVRkJSU3huUWtGQlRTeERRVUZETEZOQlFWTTdVVUZETTBJc2FVSkJRV2xDTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhwUWtGQmFVSTdVVUZETTBNc1owSkJRV2RDTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhuUWtGQlowSTdVVUZEZWtNc1lVRkJZU3hGUVVGRkxHZENRVUZOTEVOQlFVTXNZVUZCWVR0TFFVTjBReXhEUVVGQk8wRkJRMHdzUTBGQlF5eEZRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLQ2tnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUhWeWJGQmxjbVpwZURvZ1kyOXVabWxuTG5WeWJGQmxjbVpwZUN4Y2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVlJwYldVNklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlN4Y2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVXRsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGtzWEc0Z0lDQWdJQ0FnSUhObGMzTnBiMjVGZUhCcGNtVTZJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsWEc0Z0lDQWdmVnh1ZlR0Y2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2WjJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVWd1F5eHRRa0ZCWlR0SlFVTllMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVRTdRVUZEZWtJc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJQ2dwSUQwK0lIdGNiaUFnSUNCeVpYUjFjbTRnYzNSaGRIVnpMbk5sYzNOcGIyNWNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBPYmplY3QuYXNzaWduKGNvbmZpZ18xLmRlZmF1bHQsIHBhcmFtcyk7XG4gICAgY29uc29sZS5sb2coY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlKTtcbiAgICB0cnkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lKSB8fCAnJztcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHsgfVxuICAgIHRyeSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSB8fCBcInNlc3Npb25FeHBpcmVLZXlcIikgfHwgSW5maW5pdHk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7IH1cbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1cGRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZhVzVwZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVOd1F5d3dRMEZCYjBNN1FVRkhjRU1zYlVKQlFXVXNWVUZCUXl4TlFVRnRRanRKUVVNdlFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdTVUZET1VJc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8wbEJReTlDTEVsQlFVazdVVUZEUVN4blFrRkJUU3hEUVVGRExFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTXNZMEZCWXl4RFFVRkRMR2RDUVVGTkxFTkJRVU1zVjBGQldTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMHRCUTJwRk8wbEJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNSMEZCUlR0SlFVTmtMRWxCUVVrN1VVRkRRU3huUWtGQlRTeERRVUZETEdGQlFXRXNSMEZCUnl4RlFVRkZMRU5CUVVNc1kwRkJZeXhEUVVGRExHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFbEJRVWtzYTBKQlFXdENMRU5CUVVNc1NVRkJTU3hSUVVGUkxFTkJRVU03UzBGRGRrYzdTVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hIUVVGRk8wRkJRMnhDTEVOQlFVTXNSVUZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YRzVwYlhCdmNuUWdleUJKU1c1cGRFOXdkR2x2YmlCOUlHWnliMjBnSnk0dUwybHVkR1Z5Wm1GalpTZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLSEJoY21GdGN6b2dTVWx1YVhSUGNIUnBiMjRwSUQwK0lIdGNiaUFnSUNCUFltcGxZM1F1WVhOemFXZHVLR052Ym1acFp5d2djR0Z5WVcxektUdGNiaUFnSUNCamIyNXpiMnhsTG14dlp5aGpiMjVtYVdjdVpYSnliM0pVYVhSc1pTazdYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNGdQU0IzZUM1blpYUlRkRzl5WVdkbFUzbHVZeWhqYjI1bWFXY3VjMlZ6YzJsdmJrNWhiV1VoS1NCOGZDQW5KenRjYmlBZ0lDQjlJR05oZEdOb0lDaGxLU0I3ZlZ4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxJRDBnZDNndVoyVjBVM1J2Y21GblpWTjVibU1vWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa2dmSHdnWENKelpYTnphVzl1Ulhod2FYSmxTMlY1WENJcElIeDhJRWx1Wm1sdWFYUjVPMXh1SUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHQ5WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvc2Vzc2lvbk1hbmFnZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbigpO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluYVc0dWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12WVhCcEwyeHZaMmx1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTWtSQlFYRkVPMEZCUlhKRUxHMUNRVUZsTzBsQlExZ3NUMEZCVHl4M1FrRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZCTzBGQlEyaERMRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J6WlhOemFXOXVUV0Z1WVdkbGNpQm1jbTl0SUNjdUxpOXRiMlIxYkdVdmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUNncElEMCtJSHRjYmlBZ0lDQnlaWFIxY200Z2MyVnpjMmx2YmsxaGJtRm5aWEl1YldGcGJpZ3BYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmNtVnhkV1Z6ZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRlJMRWRCUVcxQ08wbEJRM1JETEU5QlFVOHNkMEpCUVdNc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdRVUZEZEVNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUlIMGdabkp2YlNBbkxpNHZhVzUwWlhKbVlXTmxKMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0E4VkZKbGMzQStLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRwT2lCUWNtOXRhWE5sUEZSU1pYTndQaUE5UGlCN1hHNGdJQ0FnY21WMGRYSnVJSEpsY1hWbGMzUklZVzVrYkdWeUxuSmxjWFZsYzNRb2IySnFLVnh1ZlZ4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoc2Vzc2lvbikge1xuICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5zZXRTZXNzaW9uKHNlc3Npb24pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YzJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVWeVJDeHRRa0ZCWlN4VlFVRkRMRTlCUVdVN1NVRkRNMElzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRGRrTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE5sYzNOcGIyNU5ZVzVoWjJWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5elpYTnphVzl1VFdGdVlXZGxjaWRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0hObGMzTnBiMjQ2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0FnSUhObGMzTnBiMjVOWVc1aFoyVnlMbk5sZEZObGMzTnBiMjRvYzJWemMybHZiaWs3WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvcmVxdWVzdEhhbmRsZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEJzYjJGa1JtbHNaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2ZFhCc2IyRmtSbWxzWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRkRMRWRCUVhOQ08wbEJRMnhETEU5QlFVOHNkMEpCUVdNc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdRVUZEZWtNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQjdJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ1BUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCeVpYRjFaWE4wU0dGdVpHeGxjaTUxY0d4dllXUkdhV3hsS0c5aWFpbGNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBpbml0XzEgPSByZXF1aXJlKFwiLi9hcGkvaW5pdFwiKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9hcGkvcmVxdWVzdFwiKTtcbnZhciB1cGxvYWRGaWxlXzEgPSByZXF1aXJlKFwiLi9hcGkvdXBsb2FkRmlsZVwiKTtcbnZhciBzZXRTZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9hcGkvc2V0U2Vzc2lvblwiKTtcbnZhciBsb2dpbl8xID0gcmVxdWlyZShcIi4vYXBpL2xvZ2luXCIpO1xudmFyIGdldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9nZXRTZXNzaW9uXCIpO1xudmFyIGdldENvbmZpZ18xID0gcmVxdWlyZShcIi4vYXBpL2dldENvbmZpZ1wiKTtcbnZhciB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xudmFyIHdlUmVxdWVzdE9iamVjdCA9IHtcbiAgICBpbml0OiBpbml0XzEuZGVmYXVsdCxcbiAgICByZXF1ZXN0OiByZXF1ZXN0XzEuZGVmYXVsdCxcbiAgICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlXzEuZGVmYXVsdCxcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uXzEuZGVmYXVsdCxcbiAgICBsb2dpbjogbG9naW5fMS5kZWZhdWx0LFxuICAgIGdldFNlc3Npb246IGdldFNlc3Npb25fMS5kZWZhdWx0LFxuICAgIGdldENvbmZpZzogZ2V0Q29uZmlnXzEuZGVmYXVsdCxcbiAgICB2ZXJzaW9uOiB2ZXJzaW9uXzEudmVyc2lvblxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IHdlUmVxdWVzdE9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmFXNWtaWGd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3h0UTBGQk5rSTdRVUZETjBJc2VVTkJRVzFETzBGQlEyNURMQ3REUVVGNVF6dEJRVU42UXl3clEwRkJlVU03UVVGRGVrTXNjVU5CUVN0Q08wRkJReTlDTEN0RFFVRjVRenRCUVVONlF5dzJRMEZCZFVNN1FVRkZka01zY1VOQlFXMURPMEZCUlc1RExFbEJRVTBzWlVGQlpTeEhRVUZqTzBsQlEycERMRWxCUVVrc1owSkJRVUU3U1VGRFNpeFBRVUZQTEcxQ1FVRkJPMGxCUTFBc1ZVRkJWU3h6UWtGQlFUdEpRVU5XTEZWQlFWVXNjMEpCUVVFN1NVRkRWaXhMUVVGTExHbENRVUZCTzBsQlEwd3NWVUZCVlN4elFrRkJRVHRKUVVOV0xGTkJRVk1zY1VKQlFVRTdTVUZEVkN4UFFVRlBMRzFDUVVGQk8wTkJRMUlzUTBGQlF6dEJRVVZHTEd0Q1FVRmxMR1ZCUVdVc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JwYm1sMElHWnliMjBnWENJdUwyRndhUzlwYm1sMFhDSmNibWx0Y0c5eWRDQnlaWEYxWlhOMElHWnliMjBnWENJdUwyRndhUzl5WlhGMVpYTjBYQ0pjYm1sdGNHOXlkQ0IxY0d4dllXUkdhV3hsSUdaeWIyMGdYQ0l1TDJGd2FTOTFjR3h2WVdSR2FXeGxYQ0pjYm1sdGNHOXlkQ0J6WlhSVFpYTnphVzl1SUdaeWIyMGdYQ0l1TDJGd2FTOXpaWFJUWlhOemFXOXVYQ0pjYm1sdGNHOXlkQ0JzYjJkcGJpQm1jbTl0SUZ3aUxpOWhjR2t2Ykc5bmFXNWNJbHh1YVcxd2IzSjBJR2RsZEZObGMzTnBiMjRnWm5KdmJTQmNJaTR2WVhCcEwyZGxkRk5sYzNOcGIyNWNJbHh1YVcxd2IzSjBJR2RsZEVOdmJtWnBaeUJtY205dElGd2lMaTloY0drdloyVjBRMjl1Wm1sblhDSmNibWx0Y0c5eWRDQjdJSGRsVW1WeGRXVnpkQ0I5SUdaeWIyMGdYQ0l1TDJsdWRHVnlabUZqWlZ3aVhHNXBiWEJ2Y25RZ2V5QjJaWEp6YVc5dUlIMGdabkp2YlNBbkxpOTJaWEp6YVc5dUoxeHVYRzVqYjI1emRDQjNaVkpsY1hWbGMzUlBZbXBsWTNRNklIZGxVbVZ4ZFdWemRDQTlJSHRjYmlBZ2FXNXBkQ3hjYmlBZ2NtVnhkV1Z6ZEN4Y2JpQWdkWEJzYjJGa1JtbHNaU3hjYmlBZ2MyVjBVMlZ6YzJsdmJpeGNiaUFnYkc5bmFXNHNYRzRnSUdkbGRGTmxjM05wYjI0c1hHNGdJR2RsZEVOdmJtWnBaeXhjYmlBZ2RtVnljMmx2Ymx4dWZUdGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdkMlZTWlhGMVpYTjBUMkpxWldOME8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBnZXQob2JqKSB7XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd3guZ2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgaWYgKG9iai5jYWNoZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlcy5kYXRhKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVzLmRhdGEsIHsgaXNDYWNoZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNldChvYmosIHJlYWxEYXRhKSB7XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9iai5jYWNoZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZWFsRGF0YSkpKSB7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICAgICAgZGF0YTogcmVhbERhdGFcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGdldDogZ2V0LFxuICAgIHNldDogc2V0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJGamFHVk5ZVzVoWjJWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlqWVdOb1pVMWhibUZuWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZGUVN4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGdFFqdEpRVU0xUWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUlVGQlJUdFJRVU5vUWl4UFFVRlBPMHRCUTFZN1NVRkRSQ3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhUUVVGVE8xRkJRMnhDTEU5QlFVOHNXVUZCUlN4SFFVRkhPMWxCUTFJc1NVRkRTU3hIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEVsQlFVazdaMEpCUTJ4Q0xFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRlZCUVZVc1NVRkJTU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVNeFJEdG5Ra0ZEUlN4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFOUJRVThzUzBGQlN5eFZRVUZWTEVWQlFVVTdiMEpCUTI1RExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVTXNRMEZCUXl4RFFVRkJPMmxDUVVONlF6dGhRVU5LTzFsQlEwUXNTVUZCUnl4UFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVlVGQlZTeEZRVUZGTzJkQ1FVTnVReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdZVUZEYkVJN1VVRkRUQ3hEUVVGRE8wdEJRMG9zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1IwRkJSeXhEUVVGRExFZEJRVzFDTEVWQlFVY3NVVUZCZVVJN1NVRkRlRVFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRVZCUVVVN1VVRkRhRUlzVDBGQlR6dExRVU5XTzBsQlEwUXNTVUZEU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFbEJRVWs3VVVGRGJFSXNRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhMUVVGTExFdEJRVXNzVlVGQlZTeEpRVUZKTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGRE1VUTdVVUZEUlN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJRMVlzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4VFFVRlRPMWxCUTJ4Q0xFbEJRVWtzUlVGQlJTeFJRVUZSTzFOQlEycENMRU5CUVVNc1EwRkJRVHRMUVVOTU8wRkJRMHdzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1IwRkJSeXhMUVVGQk8wbEJRMGdzUjBGQlJ5eExRVUZCTzBOQlEwNHNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYRzVjYm1aMWJtTjBhVzl1SUdkbGRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0NGdlltb3ViM0pwWjJsdVZYSnNLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzRnSUNBZ2QzZ3VaMlYwVTNSdmNtRm5aU2g3WEc0Z0lDQWdJQ0FnSUd0bGVUb2diMkpxTG05eWFXZHBibFZ5YkN4Y2JpQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3lBb2NtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTmhZMmhsSUQwOVBTQjBjblZsSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0tIUjVjR1Z2WmlCdlltb3VZMkZqYUdVZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlBbUppQnZZbW91WTJGamFHVW9jbVZ6TG1SaGRHRXBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdWMzVmpZMlZ6Y3lBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hKbGN5NWtZWFJoTENCN2FYTkRZV05vWlRvZ2RISjFaWDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUlHOWlhaTVqYjIxd2JHVjBaU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCelpYUW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUFzSUhKbFlXeEVZWFJoT2lCemRISnBibWNnZkNCdlltcGxZM1FwSUh0Y2JpQWdJQ0JwWmlBb0lXOWlhaTV2Y21sbmFXNVZjbXdwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0FnSUc5aWFpNWpZV05vWlNBOVBUMGdkSEoxWlNCOGZGeHVJQ0FnSUNBZ0lDQW9kSGx3Wlc5bUlHOWlhaTVqWVdOb1pTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUlDWW1JRzlpYWk1allXTm9aU2h5WldGc1JHRjBZU2twWEc0Z0lDQWdLU0I3WEc0Z0lDQWdJQ0FnSUhkNExuTmxkRk4wYjNKaFoyVW9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJ2WW1vdWIzSnBaMmx1VlhKc0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlUb2djbVZoYkVSaGRHRmNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2JpQWdJQ0JuWlhRc1hHNGdJQ0FnYzJWMFhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhdGNoSGFuZGxlciA9IHZvaWQgMDtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgRXJyb3JXaXRoRGF0YSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEVycm9yV2l0aERhdGEsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRXJyb3JXaXRoRGF0YShtc2csIGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCkgeyBkYXRhID0ge307IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbXNnKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gRXJyb3JXaXRoRGF0YTtcbn0oRXJyb3IpKTtcbmZ1bmN0aW9uIGNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdCkge1xuICAgIHZhciB0eXBlID0gZS50eXBlLCByZXMgPSBlLnJlcztcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuICAgIGlmIChvYmouY2F0Y2hFcnJvcikge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2h0dHAtZXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihyZXMuc3RhdHVzQ29kZS50b1N0cmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgdmFyIG1zZyA9IGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yV2l0aERhdGEobXNnLmNvbnRlbnQsIHJlcy5kYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N5c3RlbS1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKHJlcy5lcnJNc2cpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicgfHwgdHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N5c3RlbS1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmNhdGNoSGFuZGxlciA9IGNhdGNoSGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyRjBZMmhJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5allYUmphRWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPenM3T3pzN096dEJRVU5CTEN0RFFVRXdRenRCUVVNeFF5d3dRMEZCYjBNN1FVRkZjRU03U1VGQk5FSXNhVU5CUVVzN1NVRkhOMElzZFVKQlFWa3NSMEZCVnl4RlFVRkZMRWxCUVdNN1VVRkJaQ3h4UWtGQlFTeEZRVUZCTEZOQlFXTTdVVUZCZGtNc1dVRkRTU3hyUWtGQlRTeEhRVUZITEVOQlFVTXNVMEZGWWp0UlFVUkhMRXRCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZET3p0SlFVTnlRaXhEUVVGRE8wbEJRMHdzYjBKQlFVTTdRVUZCUkN4RFFVRkRMRUZCVUVRc1EwRkJORUlzUzBGQlN5eEhRVTlvUXp0QlFVVkVMRk5CUVZNc1dVRkJXU3hEUVVGRExFTkJRV1VzUlVGQlJTeEhRVUYxUXl4RlFVRkZMRTFCUVRoQ08wbEJRMnhITEVsQlFVRXNTVUZCU1N4SFFVRlZMRU5CUVVNc1MwRkJXQ3hGUVVGRkxFZEJRVWNzUjBGQlN5eERRVUZETEVsQlFVNHNRMEZCVHp0SlFVZDRRaXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRelZETEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnNRenRKUVVWRUxFbEJRVWtzUjBGQlJ5eERRVUZETEZWQlFWVXNSVUZCUlR0UlFVTm9RaXhKUVVGSkxFbEJRVWtzUzBGQlN5eFpRVUZaTEVWQlFVVTdXVUZEZGtJc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVVXNSMEZCYzBRc1EwRkJReXhWUVVGVkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUXpOSE8yRkJRVTBzU1VGQlNTeEpRVUZKTEV0QlFVc3NZVUZCWVN4RlFVRkZPMWxCUXk5Q0xFbEJRVWtzUjBGQlJ5eEhRVUZITEhOQ1FVRlpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRWEZFTEVOQlFVTXNRMEZCUXp0WlFVTXhSaXhQUVVGUExFMUJRVTBzUTBGQlF5eEpRVUZKTEdGQlFXRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhGUVVGSExFZEJRWE5FTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNdlJ6dGhRVUZOTEVsQlFVa3NTVUZCU1N4TFFVRkxMR05CUVdNc1JVRkJSVHRaUVVOb1F5eFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTjRRenRoUVVGTk8xbEJSVWdzVDBGQlR5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRjRUk3UzBGRFNqdFRRVUZOTzFGQlEwZ3NTVUZCU1N4SlFVRkpMRXRCUVVzc1dVRkJXU3hKUVVGSkxFbEJRVWtzUzBGQlN5eGhRVUZoTEVWQlFVVTdXVUZEYWtRc1QwRkJUeXh6UWtGQldTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJjVVFzUTBGQlF5eERRVUZETzFOQlF6bEdPMkZCUVUwc1NVRkJSeXhKUVVGSkxFdEJRVXNzWTBGQll5eEZRVUZGTzFsQlF5OUNMRTlCUVU4c2MwSkJRVmtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVRoRExFTkJRVU1zUTBGQlF6dFRRVU40Ump0aFFVRk5PMWxCUlVnc1QwRkJUeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEY0VJN1MwRkRTanRCUVVOTUxFTkJRVU03UVVGRlVTeHZRMEZCV1NJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1TENCSlZYQnNiMkZrUm1sc1pVOXdkR2x2Yml3Z1NVVnljbTl5VDJKcVpXTjBJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aU8xeHVhVzF3YjNKMElHVnljbTl5U0dGdVpHeGxjaUJtY205dElGd2lMaTlsY25KdmNraGhibVJzWlhKY0lqdGNibWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1WEc1amJHRnpjeUJGY25KdmNsZHBkR2hFWVhSaElHVjRkR1Z1WkhNZ1JYSnliM0lnZTF4dUlDQWdJR1JoZEdFNklHRnVlVHRjYmx4dUlDQWdJR052Ym5OMGNuVmpkRzl5S0cxelp6b2djM1J5YVc1bkxDQmtZWFJoT2lCaGJua2dQU0I3ZlNrZ2UxeHVJQ0FnSUNBZ0lDQnpkWEJsY2lodGMyY3BPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtUmhkR0VnUFNCa1lYUmhPMXh1SUNBZ0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z1kyRjBZMmhJWVc1a2JHVnlLR1U2SUVsRmNuSnZjazlpYW1WamRDd2diMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI4SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1TENCeVpXcGxZM1E2SUNoeVpXRnpiMjQvT2lCaGJua3BJRDArSUhadmFXUXBJSHRjYmlBZ0lDQmpiMjV6ZENCN0lIUjVjR1VzSUhKbGN5QjlJRDBnWlR0Y2JseHVJQ0FnSUM4dklPV21ndWFlbk9hY2llbUZqZWU5cnVlN24rUzRnT21VbWVpdnIrV2JudWl3ZytXSHZlYVZzTys4ak9XSW1lYUpwK2loak9XdWcxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1WeWNtOXlRMkZzYkdKaFkyc2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1bWFXY3VaWEp5YjNKRFlXeHNZbUZqYXlodlltb3NJSEpsY3lrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOWlhaTVqWVhSamFFVnljbTl5S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbElEMDlQU0FuYUhSMGNDMWxjbkp2Y2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9ibVYzSUVWeWNtOXlLQ2h5WlhNZ1lYTWdWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2t1YzNSaGRIVnpRMjlrWlM1MGIxTjBjbWx1WnlncEtTazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pTQTlQVDBnSjJ4dloybGpMV1Z5Y205eUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJRzF6WnlBOUlHVnljbTl5U0dGdVpHeGxjaTVuWlhSRmNuSnZjazF6WnloeVpYTWdZWE1nVjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtHNWxkeUJGY25KdmNsZHBkR2hFWVhSaEtHMXpaeTVqYjI1MFpXNTBMQ0FvY21WeklHRnpJRmRsWTJoaGRFMXBibWx3Y205bmNtRnRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwTG1SaGRHRXBLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxJRDA5UFNBbmMzbHpkR1Z0TFdWeWNtOXlKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENodVpYY2dSWEp5YjNJb2NtVnpMbVZ5Y2sxelp5a3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1WVcyNUx1V2FuUHBsSm5vcjY5Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb1pTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pTQTlQVDBnSjJoMGRIQXRaWEp5YjNJbklIeDhJSFI1Y0dVZ1BUMDlJQ2RzYjJkcFl5MWxjbkp2Y2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJsY25KdmNraGhibVJzWlhJdWJHOW5hV05GY25KdmNpaHZZbW9zSUhKbGN5QmhjeUJYWldOb1lYUk5hVzVwY0hKdlozSmhiUzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUtIUjVjR1VnUFQwOUlDZHplWE4wWlcwdFpYSnliM0luS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdaWEp5YjNKSVlXNWtiR1Z5TG5ONWMzUmxiVVZ5Y205eUtHOWlhaXdnY21WeklHRnpJRmRsWTJoaGRFMXBibWx3Y205bmNtRnRMa2RsYm1WeVlXeERZV3hzWW1GamExSmxjM1ZzZENrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbGhiYmt1NVpxYyttVW1laXZyMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2hsS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JuMWNibHh1Wlhod2IzSjBJSHNnWTJGMFkyaElZVzVrYkdWeUlIMGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuLi9hcGkvcmVxdWVzdFwiKTtcbmZ1bmN0aW9uIHN0YXJ0KG9iaikge1xuICAgIG9iai5fcmVwb3J0U3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59XG5mdW5jdGlvbiBlbmQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRFbmRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgaWYgKG9iai5yZXBvcnQgJiYgb2JqLl9yZXBvcnRTdGFydFRpbWUpIHtcbiAgICAgICAgcmVwb3J0KG9iai5yZXBvcnQsIG9iai5fcmVwb3J0U3RhcnRUaW1lLCBvYmouX3JlcG9ydEVuZFRpbWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlcG9ydChuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQucmVwb3J0Q0dJID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kobmFtZSwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXF1ZXN0XzEuZGVmYXVsdCk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZCxcbiAgICByZXBvcnQ6IHJlcG9ydFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpIVnlZWFJwYjI1U1pYQnZjblJsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl0YjJSMWJHVXZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc1UwRkJVeXhMUVVGTExFTkJRVU1zUjBGQmRVTTdTVUZEYkVRc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEYUVRc1EwRkJRenRCUVVWRUxGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFYVkRPMGxCUTJoRUxFZEJRVWNzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU14UXl4SlFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhGUVVGRk8xRkJRMjVETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJaMElzUlVGQlJTeEhRVUZITEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUjBGQlJ5eERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMHRCUXpGRk8wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNUVUZCVFN4RFFVRkRMRWxCUVZrc1JVRkJSU3hUUVVGcFFpeEZRVUZGTEU5QlFXVTdTVUZETlVRc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNVMEZCVXl4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVONFF5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4cFFrRkJUeXhEUVVGRExFTkJRVU03UzBGRGRrUTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeExRVUZMTEU5QlFVRTdTVUZEVEN4SFFVRkhMRXRCUVVFN1NVRkRTQ3hOUVVGTkxGRkJRVUU3UTBGRFZDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZENCbWNtOXRJQ2N1TGk5aGNHa3ZjbVZ4ZFdWemRDZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTlwYm5SbGNtWmhZMlZjSWp0Y2JseHVablZ1WTNScGIyNGdjM1JoY25Rb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVLU0I3WEc0Z0lDQWdiMkpxTGw5eVpYQnZjblJUZEdGeWRGUnBiV1VnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pXNWtLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUc5aWFpNWZjbVZ3YjNKMFJXNWtWR2x0WlNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lHbG1LRzlpYWk1eVpYQnZjblFnSmlZZ2IySnFMbDl5WlhCdmNuUlRkR0Z5ZEZScGJXVXBJSHRjYmlBZ0lDQWdJQ0FnY21Wd2IzSjBLRzlpYWk1eVpYQnZjblFnWVhNZ2MzUnlhVzVuTENCdlltb3VYM0psY0c5eWRGTjBZWEowVkdsdFpTd2diMkpxTGw5eVpYQnZjblJGYm1SVWFXMWxLVHRjYmlBZ0lDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlISmxjRzl5ZENodVlXMWxPaUJ6ZEhKcGJtY3NJSE4wWVhKMFZHbHRaVG9nYm5WdFltVnlMQ0JsYm1SVWFXMWxPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NXlaWEJ2Y25SRFIwa2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1bWFXY3VjbVZ3YjNKMFEwZEpLRzVoYldVc0lITjBZWEowVkdsdFpTd2daVzVrVkdsdFpTd2djbVZ4ZFdWemRDazdYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjM1JoY25Rc1hHNGdJQ0FnWlc1a0xGeHVJQ0FnSUhKbGNHOXlkRnh1ZlZ4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xuZnVuY3Rpb24gc3lzdGVtRXJyb3Iob2JqLCByZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc3lzdGVtRXJyb3JIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuc3lzdGVtRXJyb3JIYW5kbGVyKHJlcyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcmV0cnkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0XzEuZGVmYXVsdChvYmopLnRoZW4ob2JqLl9yZXNvbHZlKS5jYXRjaChvYmouX3JlamVjdCk7IH07XG4gICAgICAgIGRvRXJyb3IoXCJcIiwgXCJcIiwgcmV0cnkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGxvZ2ljRXJyb3Iob2JqLCByZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JIYW5kbGVyKHJlcy5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBfYSA9IGdldEVycm9yTXNnKHJlcyksIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICB2YXIgcmV0cnkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0XzEuZGVmYXVsdChvYmopLnRoZW4ob2JqLl9yZXNvbHZlKS5jYXRjaChvYmouX3JlamVjdCk7IH07XG4gICAgICAgIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRFcnJvck1zZyhyZXMpIHtcbiAgICB2YXIgdGl0bGUgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRpdGxlID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlKHJlcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGl0bGUgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGU7XG4gICAgfVxuICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudChyZXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50O1xuICAgIH1cbiAgICByZXR1cm4geyB0aXRsZTogdGl0bGUsIGNvbnRlbnQ6IGNvbnRlbnQgfTtcbn1cbmZ1bmN0aW9uIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KSB7XG4gICAgdmFyIHNob3dFcnJvclJldHJ5QnRuID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvclJldHJ5QnRuICYmIHR5cGVvZiByZXRyeSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIHd4LnNob3dNb2RhbChPYmplY3QuYXNzaWduKHtcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8IFwiXCIsXG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgXCLnvZHnu5zmiJbmnI3liqHlvILluLjvvIzor7fnqI3lkI7ph43or5VcIixcbiAgICB9LCAhc2hvd0Vycm9yUmV0cnlCdG4gPyB7XG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlXG4gICAgfSA6IHtcbiAgICAgICAgc2hvd0NhbmNlbDogdHJ1ZSxcbiAgICAgICAgY29uZmlybVRleHQ6ICfph43or5UnLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZiAocmVzLmNvbmZpcm0gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgcmV0cnkoKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzeXN0ZW1FcnJvcjogc3lzdGVtRXJyb3IsXG4gICAgbG9naWNFcnJvcjogbG9naWNFcnJvcixcbiAgICBkb0Vycm9yOiBkb0Vycm9yLFxuICAgIGdldEVycm9yTXNnOiBnZXRFcnJvck1zZ1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpYSnliM0pJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5bGNuSnZja2hoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFYRkRPMEZCUjNKRExGTkJRVk1zVjBGQlZ5eERRVUZETEVkQlFYVkRMRVZCUVVVc1IwRkJORU03U1VGRGRFY3NTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhKUVVGSkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEyaERMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZEYWtJN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4clFrRkJhMElzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEZUVRc1owSkJRVTBzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5zUXp0VFFVRk5PMUZCUTBnc1NVRkJUU3hMUVVGTExFZEJRVWNzWTBGQlRTeFBRVUZCTEdsQ1FVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRnNSQ3hEUVVGclJDeERRVUZETzFGQlEzWkZMRTlCUVU4c1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMHRCUXpGQ08wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNWVUZCVlN4RFFVRkRMRWRCUVhWRExFVkJRVVVzUjBGQmRVYzdTVUZEYUVzc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eEpRVUZKTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTJoRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRha0k3VTBGQlRTeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhaUVVGWkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEyeEVMR2RDUVVGTkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVOcVF6dFRRVUZOTzFGQlEwY3NTVUZCUVN4TFFVRnRRaXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFXeERMRXRCUVVzc1YwRkJRU3hGUVVGRkxFOUJRVThzWVVGQmIwSXNRMEZCUXp0UlFVTXhReXhKUVVGTkxFdEJRVXNzUjBGQlJ5eGpRVUZOTEU5QlFVRXNhVUpCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVd4RUxFTkJRV3RFTEVOQlFVTTdVVUZEZGtVc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1MwRkRiRU03UVVGRFRDeERRVUZETzBGQlJVUXNVMEZCVXl4WFFVRlhMRU5CUVVNc1IwRkJkVWM3U1VGRGVFZ3NTVUZCU1N4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRMllzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU42UXl4SlFVRkpPMWxCUTBFc1MwRkJTeXhIUVVGSExHZENRVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlFUdFRRVU4wUXp0UlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8xTkJRMWc3UzBGRFNqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGVkJRVlVzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZET1VNc1MwRkJTeXhIUVVGSExHZENRVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRPMHRCUXpkQ08wbEJSVVFzU1VGQlNTeFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUTJwQ0xFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRmxCUVZrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRE0wTXNTVUZCU1R0WlFVTkJMRTlCUVU4c1IwRkJSeXhuUWtGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVUU3VTBGRE1VTTdVVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRUUVVOWU8wdEJRMG83VTBGQlRTeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhaUVVGWkxFdEJRVXNzVVVGQlVTeEZRVUZGTzFGQlEyaEVMRTlCUVU4c1IwRkJSeXhuUWtGQlRTeERRVUZETEZsQlFWa3NRMEZCUXp0TFFVTnFRenRKUVVWRUxFOUJRVThzUlVGQlF5eExRVUZMTEU5QlFVRXNSVUZCUlN4UFFVRlBMRk5CUVVFc1JVRkJReXhEUVVGQk8wRkJRek5DTEVOQlFVTTdRVUZIUkN4VFFVRlRMRTlCUVU4c1EwRkJReXhMUVVGaExFVkJRVVVzVDBGQlpTeEZRVUZGTEV0QlFXbENPMGxCUlRsRUxFbEJRVTBzYVVKQlFXbENMRWRCUVVjc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVsQlFVa3NUMEZCVHl4TFFVRkxMRXRCUVVzc1ZVRkJWU3hEUVVGRE8wbEJRemxGTEVWQlFVVXNRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU4yUWl4TFFVRkxMRVZCUVVVc1MwRkJTeXhKUVVGSkxFVkJRVVU3VVVGRGJFSXNUMEZCVHl4RlFVRkZMRTlCUVU4c1NVRkJTU3hsUVVGbE8wdEJRM1JETEVWQlFVVXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY0VJc1ZVRkJWU3hGUVVGRkxFdEJRVXM3UzBGRGNFSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRRU3hWUVVGVkxFVkJRVVVzU1VGQlNUdFJRVU5vUWl4WFFVRlhMRVZCUVVVc1NVRkJTVHRSUVVOcVFpeFBRVUZQTEVWQlFWQXNWVUZCVVN4SFFVRnhSRHRaUVVONlJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhMUVVGTExFdEJRVXNzVlVGQlZUdG5Ra0ZCUlN4TFFVRkxMRVZCUVVVc1EwRkJRenRSUVVNMVJDeERRVUZETzB0QlEwb3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRVaXhEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4WFFVRlhMR0ZCUVVFN1NVRkRXQ3hWUVVGVkxGbEJRVUU3U1VGRFZpeFBRVUZQTEZOQlFVRTdTVUZEVUN4WFFVRlhMR0ZCUVVFN1EwRkRaQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjbVZ4ZFdWemRDQm1jbTl0SUNjdUxpOWhjR2t2Y21WeGRXVnpkQ2M3WEc1cGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaXdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSTdYRzVjYm1aMWJtTjBhVzl1SUhONWMzUmxiVVZ5Y205eUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaXdnY21Wek9pQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNUhaVzVsY21Gc1EyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNW1ZV2xzSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbVpoYVd3b2NtVnpLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdWMzbHpkR1Z0UlhKeWIzSklZVzVrYkdWeUlEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibVpwWnk1emVYTjBaVzFGY25KdmNraGhibVJzWlhJb2NtVnpLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCeVpYUnllU0E5SUNncElEMCtJSEpsY1hWbGMzUW9iMkpxS1M1MGFHVnVLRzlpYWk1ZmNtVnpiMngyWlNrdVkyRjBZMmdvYjJKcUxsOXlaV3BsWTNRcE8xeHVJQ0FnSUNBZ0lDQmtiMFZ5Y205eUtGd2lYQ0lzSUZ3aVhDSXNJSEpsZEhKNUtUdGNiaUFnSUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUd4dloybGpSWEp5YjNJb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVMQ0J5WlhNNklGZGxZMmhoZEUxcGJtbHdjbTluY21GdExsSmxjWFZsYzNSVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUWdmQ0JYWldOb1lYUk5hVzVwY0hKdlozSmhiUzVWY0d4dllXUkdhV3hsVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91Wm1GcGJDQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1bVlXbHNLSEpsY3lrN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVNHRnVaR3hsY2lBOVBUMGdKMloxYm1OMGFXOXVKeWtnZTF4dUlDQWdJQ0FnSUNCamIyNW1hV2N1WlhKeWIzSklZVzVrYkdWeUtISmxjeTVrWVhSaEtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3ZEdsMGJHVXNJR052Ym5SbGJuUjlJRDBnWjJWMFJYSnliM0pOYzJjb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjbVYwY25rZ1BTQW9LU0E5UGlCeVpYRjFaWE4wS0c5aWFpa3VkR2hsYmlodlltb3VYM0psYzI5c2RtVXBMbU5oZEdOb0tHOWlhaTVmY21WcVpXTjBLVHRjYmlBZ0lDQWdJQ0FnWkc5RmNuSnZjaWgwYVhSc1pTd2dZMjl1ZEdWdWRDd2djbVYwY25rcE8xeHVJQ0FnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWjJWMFJYSnliM0pOYzJjb2NtVnpPaUJYWldOb1lYUk5hVzVwY0hKdlozSmhiUzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwSUh3Z1YyVmphR0YwVFdsdWFYQnliMmR5WVcwdVZYQnNiMkZrUm1sc1pWTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJR3hsZENCMGFYUnNaU0E5SUZ3aVhDSTdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVpYSnliM0pVYVhSc1pTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYVhSc1pTQTlJR052Ym1acFp5NWxjbkp2Y2xScGRHeGxLSEpsY3k1a1lYUmhLVnh1SUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WlhKeWIzSlVhWFJzWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaWtnZTF4dUlDQWdJQ0FnSUNCMGFYUnNaU0E5SUdOdmJtWnBaeTVsY25KdmNsUnBkR3hsTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCamIyNTBaVzUwSUQwZ1hDSmNJanRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2tOdmJuUmxiblFnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR1Z1ZENBOUlHTnZibVpwWnk1bGNuSnZja052Ym5SbGJuUW9jbVZ6TG1SaGRHRXBYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVsY25KdmNrTnZiblJsYm5RZ1BUMDlJRndpYzNSeWFXNW5YQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVkR1Z1ZENBOUlHTnZibVpwWnk1bGNuSnZja052Ym5SbGJuUTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUh0MGFYUnNaU3dnWTI5dWRHVnVkSDFjYm4xY2JseHVMeThnNmJ1WTZLNms2WlNaNksrdjVhU0U1NUNHNXBpdjVieTU1NnFYWEc1bWRXNWpkR2x2YmlCa2IwVnljbTl5S0hScGRHeGxPaUJ6ZEhKcGJtY3NJR052Ym5SbGJuUTZJSE4wY21sdVp5d2djbVYwY25rL09pQW9LU0E5UGlCaGJua3BJSHRjYmlBZ0lDQXZMeURtbUsvbGtLYm1tTDducExycGg0M29yNVhtaklucGtxNWNiaUFnSUNCamIyNXpkQ0J6YUc5M1JYSnliM0pTWlhSeWVVSjBiaUE5SUdOdmJtWnBaeTVsY25KdmNsSmxkSEo1UW5SdUlDWW1JSFI1Y0dWdlppQnlaWFJ5ZVNBOVBUMGdYQ0ptZFc1amRHbHZibHdpTzF4dUlDQWdJSGQ0TG5Ob2IzZE5iMlJoYkNoUFltcGxZM1F1WVhOemFXZHVLSHRjYmlBZ0lDQWdJQ0FnZEdsMGJHVTZJSFJwZEd4bElIeDhJRndpWENJc1hHNGdJQ0FnSUNBZ0lHTnZiblJsYm5RNklHTnZiblJsYm5RZ2ZId2dYQ0xudlpIbnU1em1pSmJtbkkzbGlxSGx2SUxsdUxqdnZJem9yN2ZucUkzbGtJN3BoNDNvcjVWY0lpeGNiaUFnSUNCOUxDQWhjMmh2ZDBWeWNtOXlVbVYwY25sQ2RHNGdQeUI3WEc0Z0lDQWdJQ0FnSUhOb2IzZERZVzVqWld3NklHWmhiSE5sWEc0Z0lDQWdmU0E2SUh0Y2JpQWdJQ0FnSUNBZ2MyaHZkME5oYm1ObGJEb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1kyOXVabWx5YlZSbGVIUTZJQ2ZwaDQzb3I1VW5MRnh1SUNBZ0lDQWdJQ0J6ZFdOalpYTnpLSEpsY3pvZ1YyVmphR0YwVFdsdWFYQnliMmR5WVcwdVUyaHZkMDF2WkdGc1UzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WekxtTnZibVpwY20wZ0ppWWdkSGx3Wlc5bUlISmxkSEo1SUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUhKbGRISjVLQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5S1NrN1hHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQnplWE4wWlcxRmNuSnZjaXhjYmlBZ0lDQnNiMmRwWTBWeWNtOXlMRnh1SUNBZ0lHUnZSWEp5YjNJc1hHNGdJQ0FnWjJWMFJYSnliM0pOYzJkY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgJiYgY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai51cmxdIHx8IChvYmoub3JpZ2luVXJsID8gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSA6ICcnKTtcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgfTtcbiAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXOWphMDFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDIxdlkydE5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMREpEUVVGeFF6dEJRVWR5UXl4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGMVF6dEpRVVZvUkN4SlFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRmFrWXNUMEZCVHl4TFFVRkxMRU5CUVVNN1MwRkRhRUk3U1VGRlJDeEpRVUZKTEVsQlFVa3NSMEZCUnl4blFrRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4blFrRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlJUZEdMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU40UXl4SlFVRk5MRWRCUVVjc1IwRkJSenRSUVVOU0xFbEJRVWtzVFVGQlFUdFJRVU5LTEZWQlFWVXNSVUZCUlN4SFFVRkhPMHRCUTJ4Q0xFTkJRVU03U1VGRlJpeHBRa0ZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wbEJRMllzVDBGQlR5eEhRVUZITEVOQlFVRTdRVUZEWkN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEhRVUZITEV0QlFVRTdRMEZEVGl4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYkc5aFpHbHVaeUJtY205dElDY3VMaTkxZEdsc0wyeHZZV1JwYm1jblhHNXBiWEJ2Y25RZ2V5QkpVbVZ4ZFdWemRFOXdkR2x2Yml3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0pjYmx4dVpuVnVZM1JwYjI0Z1oyVjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrNklHRnVlU0I3WEc1Y2JpQWdJQ0JwWmlnaEtHTnZibVpwWnk1dGIyTnJTbk52Ymx0dlltb3VkWEpzWFNCOGZDQW9iMkpxTG05eWFXZHBibFZ5YkNBbUppQmpiMjVtYVdjdWJXOWphMHB6YjI1YmIySnFMbTl5YVdkcGJsVnliRjBwS1NrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJ0YjJOcklPYXlvZWFjaWVXdnVlVzZsT2FPcGVXUG8rZWFoT2FWc09hTnJseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUdSaGRHRWdQU0JqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG5WeWJGMGdmSHdnS0c5aWFpNXZjbWxuYVc1VmNtd2dQeUJqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG05eWFXZHBibFZ5YkYwZ09pQW5KeWs3WEc0Z0lDQWdMeThnWkdWbGNDQmpiM0I1WEc0Z0lDQWdaR0YwWVNBOUlFcFRUMDR1Y0dGeWMyVW9TbE5QVGk1emRISnBibWRwWm5rb1pHRjBZU2twTzF4dUlDQWdJR052Ym5OMElISmxjeUE5SUh0Y2JpQWdJQ0FnSUNBZ1pHRjBZU3hjYmlBZ0lDQWdJQ0FnYzNSaGRIVnpRMjlrWlRvZ01qQXdYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHeHZZV1JwYm1jdWFHbGtaU2dwTzF4dUlDQWdJSEpsZEhWeWJpQnlaWE5jYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUdkbGRGeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG52YXIgbW9ja01hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL21vY2tNYW5hZ2VyXCIpO1xudmFyIGNhY2hlTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vY2FjaGVNYW5hZ2VyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbnZhciByZXNwb25zZUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc3BvbnNlSGFuZGxlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHVybF8xID0gcmVxdWlyZShcIi4uL3V0aWwvdXJsXCIpO1xudmFyIGNhdGNoSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vY2F0Y2hIYW5kbGVyXCIpO1xuZnVuY3Rpb24gZm9ybWF0KG9yaWdpblVybCkge1xuICAgIGlmIChvcmlnaW5Vcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5Vcmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXg7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsUGVyZml4ICsgb3JpZ2luVXJsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cbiAgICBpZiAob2JqLnJlTG9naW5Db3VudCA9PT0gMCAmJiB0eXBlb2Ygb2JqLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouYmVmb3JlU2VuZCgpO1xuICAgIH1cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cbiAgICBvYmouX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIG9iai5fcmVqZWN0ID0gcmVqZWN0O1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaGVhZGVyID0gY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBoZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouaGVhZGVyKSwgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIpO1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmRhdGEpLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZCksIG9iai5kYXRhKTtcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5pc0VuYWJsZUJhY2t1cERvbWFpbiAmJiBjb25maWdfMS5kZWZhdWx0LmJhY2t1cERvbWFpbikge1xuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5yZXBsYWNlRG9tYWluKG9iai51cmwsIGNvbmZpZ18xLmRlZmF1bHQuYmFja3VwRG9tYWluKTtcbiAgICB9XG4gICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuc3RhcnQob2JqKTtcbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoIW9iai5mb3JtRGF0YSkge1xuICAgICAgICBvYmouZm9ybURhdGEgPSB7fTtcbiAgICB9XG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaGVhZGVyID0gY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBoZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouaGVhZGVyKSwgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIpO1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5mb3JtRGF0YSksIChfYSA9IHt9LCBfYVtjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2EpKTtcbiAgICB9XG4gICAgdmFyIGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5mb3JtRGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZCksIG9iai5mb3JtRGF0YSk7XG4gICAgaWYgKCFjb25maWdfMS5kZWZhdWx0LmRvTm90VXNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5pc0VuYWJsZUJhY2t1cERvbWFpbiAmJiBjb25maWdfMS5kZWZhdWx0LmJhY2t1cERvbWFpbikge1xuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5yZXBsYWNlRG9tYWluKG9iai51cmwsIGNvbmZpZ18xLmRlZmF1bHQuYmFja3VwRG9tYWluKTtcbiAgICB9XG4gICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuc3RhcnQob2JqKTtcbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcbiAgICB2YXIgZ2QgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGE7XG4gICAgfVxuICAgIHJldHVybiBnZDtcbn1cbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmopIHtcbiAgICBvYmogPSBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopO1xuICAgIGlmIChvYmoucmVMb2dpbkNvdW50ID09PSAwICYmIHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmogPSBjb25maWdfMS5kZWZhdWx0LmJlZm9yZVNlbmQob2JqLCBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB3eC5yZXF1ZXN0KF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmopLCB7IHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSByZXMgPT09IG51bGwgfHwgcmVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXMuZXJyTXNnKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5kZXhPZignQ09OTkVDVElPTl9SRUZVU0VEJykpID49IDAgJiYgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW4gJiYgb2JqLnVybC5pbmRleE9mKGNvbmZpZ18xLmRlZmF1bHQuYmFja3VwRG9tYWluKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlQmFja3VwRG9tYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsgcmV0dXJuIHJlc29sdmUocmVzKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiAnc3lzdGVtLWVycm9yJywgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRvVXBsb2FkRmlsZShvYmopIHtcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIGlmIChvYmoucmVMb2dpbkNvdW50ID09PSAwICYmIHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmogPSBjb25maWdfMS5kZWZhdWx0LmJlZm9yZVNlbmQob2JqLCBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB3eC51cGxvYWRGaWxlKF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmopLCB7IHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSByZXMgPT09IG51bGwgfHwgcmVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXMuZXJyTXNnKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5kZXhPZignQ09OTkVDVElPTl9SRUZVU0VEJykpID49IDAgJiYgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW4gJiYgb2JqLnVybC5pbmRleE9mKGNvbmZpZ18xLmRlZmF1bHQuYmFja3VwRG9tYWluKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlQmFja3VwRG9tYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsgcmV0dXJuIHJlc29sdmUocmVzKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiAnc3lzdGVtLWVycm9yJywgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3Qob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xuICAgICAgICAgICAgdmFyIG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yUmVxdWVzdChtb2NrUmVzcG9uc2UsIG9iaik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvYmouY2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4ob2JqKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yUmVxdWVzdChyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYXRjaEhhbmRsZXJfMS5jYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xuICAgICAgICAgICAgdmFyIG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yVXBsb2FkRmlsZShtb2NrUmVzcG9uc2UsIG9iaik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKG9iaikudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iaik7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdC5yZXNwb25zZUZvclVwbG9hZEZpbGUocmVzLCBvYmopO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBjYXRjaEhhbmRsZXJfMS5jYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGVuYWJsZUJhY2t1cERvbWFpbigpIHtcbiAgICBpZiAoIXN0YXR1c18xLmRlZmF1bHQuaXNFbmFibGVCYWNrdXBEb21haW4pIHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5pc0VuYWJsZUJhY2t1cERvbWFpbiA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5FbmFibGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5FbmFibGVDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGZvcm1hdDogZm9ybWF0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEVoaGJtUnNaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzSmxjWFZsYzNSSVlXNWtiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN3eVEwRkJjVU03UVVGRGNrTXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5dzJRMEZCZFVNN1FVRkRka01zSzBOQlFYbERPMEZCUTNwRExHMUVRVUUyUXp0QlFVTTNReXh4UkVGQkswTTdRVUZETDBNc2RVUkJRV2xFTzBGQlEycEVMRzFEUVVFMlFqdEJRVVUzUWl3clEwRkJPRU03UVVGSE9VTXNVMEZCVXl4TlFVRk5MRU5CUVVNc1UwRkJhVUk3U1VGRE4wSXNTVUZCU1N4VFFVRlRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTzFGQlF6bENMRTlCUVU4c1UwRkJVeXhEUVVGQk8wdEJRMjVDTzFOQlFVMDdVVUZEU0N4SlFVRkpMRk5CUVZNc1IwRkJSeXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xbEJRM2hETEZOQlFWTXNSMEZCUnl4blFrRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZCTzFOQlEycERPMUZCUTBRc1QwRkJUeXhUUVVGVExFZEJRVWNzVTBGQlV5eERRVUZETzB0QlEyaERPMEZCUTB3c1EwRkJRenRCUVVkRUxGTkJRVk1zUzBGQlN5eERRVUVyUXl4SFFVRk5MRVZCUVVVc1QwRkJPRUlzUlVGQlJTeE5RVUVyUWp0SlFVVm9TU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEZsQlFWa3NTMEZCU3l4WFFVRlhMRVZCUVVVN1VVRkRla01zUjBGQlJ5eERRVUZETEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRlRUk3VTBGQlRUdFJRVU5JTEVkQlFVY3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRMUVVOMFFqdEpRVVZFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmxCUVZrc1MwRkJTeXhEUVVGRExFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNWVUZCVlN4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVOb1JTeEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1MwRkRjRUk3U1VGRlJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVN1VVRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzB0QlEycERPMGxCUlVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVTdVVUZEYUVJc1IwRkJSeXhEUVVGRExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNoQ0xFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU0zUWp0SlFVVkVMRWRCUVVjc1EwRkJReXhSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETzBsQlEzWkNMRWRCUVVjc1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZETzBsQlJYSkNMRTlCUVU4c1IwRkJSeXhEUVVGRE8wRkJRMllzUTBGQlF6dEJRVWRFTEZOQlFWTXNiMEpCUVc5Q0xFTkJRVU1zUjBGQmJVSTdPMGxCUlRkRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZPMUZCUTFnc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTMEZEYWtJN1NVRkZSQ3hIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNeFF5eEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhUUVVGVExFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEzaERMRWxCUVVrc1RVRkJUU3hIUVVGSExHZENRVUZOTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1VVRkRhRU1zU1VGQlNTeFBRVUZQTEUxQlFVMHNTMEZCU3l4UlFVRlJMRVZCUVVVN1dVRkROVUlzUjBGQlJ5eERRVUZETEUxQlFVMHNlVUpCUVU4c1IwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlN5eE5RVUZOTEVOQlFVTXNRMEZCUXp0VFFVTXpRenRMUVVOS08xTkJRVTBzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhMUVVGTExGRkJRVkVzUlVGQlJUdFJRVU0zUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3g1UWtGQlR5eEhRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkxMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdTMEZEY2tRN1NVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFRRVUZUTEV0QlFVc3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJRemxFTEVkQlFVY3NRMEZCUXl4SlFVRkpMSGxDUVVGUkxFZEJRVWNzUTBGQlF5eEpRVUZqTEdkQ1FVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRkxFTkJRVU03UzBGRE9VVTdTVUZIUkN4SlFVRk5MRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU16UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3g1UWtGQlVTeEZRVUZGTEVkQlFVc3NSMEZCUnl4RFFVRkRMRWxCUVdNc1EwRkJSU3hEUVVGRE8wbEJSVFZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTTdTVUZEYWtNc1IwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEhRVUZITEVOQlFVTXNVVUZCVVN4SlFVRkpMRTFCUVUwc1EwRkJRenRKUVVkMFF5eEpRVUZKTEVOQlFVTXNaMEpCUVUwc1EwRkJReXh0UWtGQmJVSXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hMUVVGTExFdEJRVXNzUlVGQlJUdFJRVU55UkN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEyaENMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhaUVVGSkxFZEJRVU1zWjBKQlFVMHNRMEZCUXl4WFFVRlhMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFBRVUZQTEUxQlFVY3NRMEZCUXp0VFFVTTVSVHRSUVVORUxFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NZVUZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMHRCUTNoRE8wbEJSMFFzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMRzlDUVVGdlFpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1dVRkJXU3hGUVVGRk8xRkJRM0JFTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1lVRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdTMEZETjBRN1NVRkZSQ3d3UWtGQlowSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRk5VSXNUMEZCVHl4SFFVRkhMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSMFFzVTBGQlV5eDFRa0ZCZFVJc1EwRkJReXhIUVVGelFqczdTVUZEYmtRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVTdVVUZEWml4SFFVRkhMRU5CUVVNc1VVRkJVU3hIUVVGSExFVkJRVVVzUTBGQlF6dExRVU55UWp0SlFVVkVMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpGRExFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGVFTXNTVUZCU1N4TlFVRk5MRWRCUVVjc1owSkJRVTBzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0UlFVTm9ReXhKUVVGSkxFOUJRVThzVFVGQlRTeExRVUZMTEZGQlFWRXNSVUZCUlR0WlFVTTFRaXhIUVVGSExFTkJRVU1zVFVGQlRTeDVRa0ZCVHl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETzFOQlF6TkRPMHRCUTBvN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemRETEVkQlFVY3NRMEZCUXl4TlFVRk5MSGxDUVVGUExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVc3NaMEpCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dExRVU55UkR0SlFVVkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGTkJRVk1zUzBGQlN5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1VVRkRPVVFzUjBGQlJ5eERRVUZETEZGQlFWRXNlVUpCUVZFc1IwRkJSeXhEUVVGRExGRkJRV3RDTEdkQ1FVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRkxFTkJRVU03UzBGRGRFWTdTVUZIUkN4SlFVRk5MRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU16UWl4SFFVRkhMRU5CUVVNc1VVRkJVU3g1UWtGQlVTeEZRVUZGTEVkQlFVc3NSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJSU3hEUVVGRE8wbEJSVEZETEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZPMUZCUlRkQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1dVRkRhRUlzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4aFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEZsQlFVa3NSMEZCUXl4blFrRkJUU3hEUVVGRExGZEJRVmNzU1VGQlJ5eG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1RVRkJSeXhEUVVGRE8xTkJRemxGTzFGQlJVUXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhoUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03UzBGRGVFTTdTVUZIUkN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zYjBKQlFXOUNMRWxCUVVrc1owSkJRVTBzUTBGQlF5eFpRVUZaTEVWQlFVVTdVVUZEY0VRc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eGhRVUZITEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRMUVVNM1JEdEpRVVZFTERCQ1FVRm5RaXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVTFRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkN4VFFVRlRMR0ZCUVdFN1NVRkRiRUlzU1VGQlNTeEZRVUZGTEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJwQ0xFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGVrTXNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdTMEZETlVJN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemxETEVWQlFVVXNSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU14UWp0SlFVTkVMRTlCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFTEZOQlFWTXNVMEZCVXl4RFFVRkRMRWRCUVcxQ08wbEJRMnhETEVkQlFVY3NSMEZCUnl4dlFrRkJiMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTm9ReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFpRVUZaTEV0QlFVc3NRMEZCUXl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFZRVUZWTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTI1RkxFZEJRVWNzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRMUVVOb1JEdEpRVU5FTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVdsRUxGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZETDBVc1JVRkJSU3hEUVVGRExFOUJRVThzZFVKQlEwZ3NSMEZCUnl4TFFVTk9MRTlCUVU4c1dVRkJReXhIUVVGSE8yZENRVU5RTEU5QlFVOHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hDTEVOQlFVTTdXVUZEUkN4SlFVRkpMRmxCUVVNc1IwRkJSenM3WjBKQlJVb3NTVUZCU1N4UFFVRkJMRWRCUVVjc1lVRkJTQ3hIUVVGSExIVkNRVUZJTEVkQlFVY3NRMEZCUlN4TlFVRk5MREJEUVVGRkxFOUJRVThzUTBGQlF5eHZRa0ZCYjBJc1RVRkJTeXhEUVVGRExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4WlFVRlpMRWxCUVVrc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVTdiMEpCUlhCSUxHdENRVUZyUWl4RlFVRkZMRU5CUVVNN2IwSkJSWEpDTEU5QlFVOHNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZETEVkQlFVY3NTVUZCU1N4UFFVRkJMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQldpeERRVUZaTEVOQlFVTXNRMEZCUXp0cFFrRkRjRVE3WjBKQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzWTBGQll5eEZRVUZGTEVkQlFVY3NTMEZCUVN4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVOcVJDeERRVUZETzFsQlEwUXNVVUZCVVR0blFrRkRTaXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEZGQlFWRXNTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRM0JETEVkQlFVY3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRwUWtGRGJFSTdaMEpCUTBRc1NVRkJTU3hIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTzI5Q1FVTnFRaXhwUWtGQlR5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMmxDUVVOc1FqdFpRVU5NTEVOQlFVTXNTVUZEU0N4RFFVRkJPMGxCUTA0c1EwRkJReXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4WlFVRlpMRU5CUVVNc1IwRkJjMEk3U1VGRGVFTXNSMEZCUnl4SFFVRkhMSFZDUVVGMVFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTI1RExFbEJRVWtzUjBGQlJ5eERRVUZETEZsQlFWa3NTMEZCU3l4RFFVRkRMRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRia1VzUjBGQlJ5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wdEJRMmhFTzBsQlEwUXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJiMFFzVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTnNSaXhGUVVGRkxFTkJRVU1zVlVGQlZTeDFRa0ZEVGl4SFFVRkhMRXRCUTA0c1QwRkJUeXhaUVVGRExFZEJRVWM3WjBKQlExQXNUMEZCVHl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVFSXNRMEZCUXp0WlFVTkVMRWxCUVVrc1dVRkJReXhIUVVGSE96dG5Ra0ZGU2l4SlFVRkpMRTlCUVVFc1IwRkJSeXhoUVVGSUxFZEJRVWNzZFVKQlFVZ3NSMEZCUnl4RFFVRkZMRTFCUVUwc01FTkJRVVVzVDBGQlR5eERRVUZETEc5Q1FVRnZRaXhOUVVGTExFTkJRVU1zU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMRmxCUVZrc1NVRkJTU3hIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4blFrRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlR0dlFrRkZjRWdzYTBKQlFXdENMRVZCUVVVc1EwRkJRenR2UWtGRmNrSXNUMEZCVHl4WlFVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFVTXNSMEZCUnl4SlFVRkpMRTlCUVVFc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZhTEVOQlFWa3NRMEZCUXl4RFFVRkRPMmxDUVVOMlJEdG5Ra0ZEUkN4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeGpRVUZqTEVWQlFVVXNSMEZCUnl4TFFVRkJMRVZCUVVVc1EwRkJReXhEUVVGRE8xbEJRMnBFTEVOQlFVTTdXVUZEUkN4UlFVRlJPMmRDUVVOS0xFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNVVUZCVVN4TFFVRkxMRlZCUVZVc1JVRkJSVHR2UWtGRGNFTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8ybENRVU5zUWp0blFrRkRSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFhRVUZYTEVWQlFVVTdiMEpCUTJwQ0xHbENRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN2FVSkJRMnhDTzFsQlEwd3NRMEZCUXl4SlFVTklMRU5CUVVFN1NVRkRUaXhEUVVGRExFTkJRVU1zUTBGQlFUdEJRVU5PTEVOQlFVTTdRVUZGUkN4VFFVRlRMRTlCUVU4c1EwRkJVU3hIUVVGdFFqdEpRVU4yUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZETDBJc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eEhRVUZITEVWQlFVVXNUMEZCVHl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJSV3hETEVsQlFVa3NaMEpCUVUwc1EwRkJReXhSUVVGUkxFVkJRVVU3V1VGRGFrSXNTVUZCU1N4WlFVRlpMRWRCUVVjc2NVSkJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRlRU1zU1VGQlNTeFpRVUZaTEVWQlFVVTdaMEpCUTJRc1NVRkJTU3hSUVVGUkxFZEJRVWNzZVVKQlFXVXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eFpRVUZaTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRM0pGTEU5QlFVOHNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8yRkJRelZDTzFOQlEwbzdVVUZGUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFVkJRVVU3V1VGRFdDeHpRa0ZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU42UWp0UlFVVkVMSGRDUVVGakxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVNeFFpeFBRVUZQTEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRVHRSUVVONlFpeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJReXhIUVVGdFJEdFpRVU40UkN4SlFVRkpMRkZCUVZFc1IwRkJSeXg1UWtGQlpTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTTFSQ3hKUVVGSkxGRkJRVkVzU1VGQlNTeEpRVUZKTEVWQlFVVTdaMEpCUTJ4Q0xFOUJRVThzVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMkZCUXpWQ08xRkJRMHdzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVVNc1EwRkJaVHRaUVVOeVFpeFBRVUZQTERKQ1FVRlpMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUVR0UlFVTjJReXhEUVVGRExFTkJRVU1zUTBGQlFUdEpRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zVlVGQlZTeERRVUZETEVkQlFYTkNPMGxCUTNSRExFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUVHRSUVVNdlFpeEhRVUZITEVkQlFVY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1JVRkJSU3hQUVVGUExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdVVUZGYkVNc1NVRkJTU3huUWtGQlRTeERRVUZETEZGQlFWRXNSVUZCUlR0WlFVTnFRaXhKUVVGSkxGbEJRVmtzUjBGQlJ5eHhRa0ZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU40UXl4SlFVRkpMRmxCUVZrc1JVRkJSVHRuUWtGRFpDeEpRVUZKTEZGQlFWRXNSMEZCUnl4NVFrRkJaU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRmxCUVZrc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEZUVVc1QwRkJUeXhQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdZVUZETlVJN1UwRkRTanRSUVVWRUxIZENRVUZqTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU14UWl4UFFVRlBMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlFUdFJRVU0xUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlF5eEhRVUZ6UkR0WlFVTXpSQ3hKUVVGSkxGRkJRVkVzUjBGQlJ5eDVRa0ZCWlN4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVNdlJDeEpRVUZKTEZGQlFWRXNTVUZCU1N4SlFVRkpMRVZCUVVVN1owSkJRMnhDTEU5QlFVOHNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8yRkJRelZDTzFGQlEwd3NRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVU1zUTBGQlpUdFpRVU55UWl3eVFrRkJXU3hEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVFN1VVRkRhRU1zUTBGQlF5eERRVUZETEVOQlFVRTdTVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeFRRVUZUTEd0Q1FVRnJRanRKUVVOMlFpeEpRVUZKTEVOQlFVTXNaMEpCUVUwc1EwRkJReXh2UWtGQmIwSXNSVUZCUlR0UlFVTTVRaXhuUWtGQlRTeERRVUZETEc5Q1FVRnZRaXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU51UXl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5d3dRa0ZCTUVJc1MwRkJTeXhWUVVGVkxFVkJRVVU3V1VGRGVrUXNaMEpCUVUwc1EwRkJReXd3UWtGQk1FSXNSVUZCUlN4RFFVRkRPMU5CUTNaRE8wdEJRMG83UVVGRFRDeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hOUVVGTkxGRkJRVUU3U1VGRFRpeFBRVUZQTEZOQlFVRTdTVUZEVUN4VlFVRlZMRmxCUVVFN1EwRkRZaXhEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHeHZZV1JwYm1jZ1puSnZiU0FuTGk0dmRYUnBiQzlzYjJGa2FXNW5KMXh1YVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYzNSaGRIVnpJR1p5YjIwZ0p5NHVMM04wYjNKbEwzTjBZWFIxY3lkY2JtbHRjRzl5ZENCdGIyTnJUV0Z1WVdkbGNpQm1jbTl0SUNjdUwyMXZZMnROWVc1aFoyVnlKMXh1YVcxd2IzSjBJR05oWTJobFRXRnVZV2RsY2lCbWNtOXRJQ2N1TDJOaFkyaGxUV0Z1WVdkbGNpZGNibWx0Y0c5eWRDQnpaWE56YVc5dVRXRnVZV2RsY2lCbWNtOXRJQ2N1TDNObGMzTnBiMjVOWVc1aFoyVnlKMXh1YVcxd2IzSjBJSEpsYzNCdmJuTmxTR0Z1Wkd4bGNpQm1jbTl0SUNjdUwzSmxjM0J2Ym5ObFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5SUdaeWIyMGdYQ0l1TDJSMWNtRjBhVzl1VW1Wd2IzSjBaWEpjSWx4dWFXMXdiM0owSUhWeWJDQm1jbTl0SUNjdUxpOTFkR2xzTDNWeWJDZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpd2dTVVZ5Y205eVQySnFaV04wSUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYRzVwYlhCdmNuUWdleUJqWVhSamFFaGhibVJzWlhJZ2ZTQm1jbTl0SUNjdUwyTmhkR05vU0dGdVpHeGxjaWM3WEc1Y2JpOHZJT2Fndk9XOGorV01sblZ5YkZ4dVpuVnVZM1JwYjI0Z1ptOXliV0YwS0c5eWFXZHBibFZ5YkRvZ2MzUnlhVzVuS1NCN1hHNGdJQ0FnYVdZZ0tHOXlhV2RwYmxWeWJDNXpkR0Z5ZEhOWGFYUm9LQ2RvZEhSd0p5a3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzl5YVdkcGJsVnliRnh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0IxY214UVpYSm1hWGdnUFNCamIyNW1hV2N1ZFhKc1VHVnlabWw0TzF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1MWNteFFaWEptYVhnZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZFhKc1VHVnlabWw0SUQwZ1kyOXVabWxuTG5WeWJGQmxjbVpwZUNncFhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnliRkJsY21acGVDQXJJRzl5YVdkcGJsVnliRHRjYmlBZ0lDQjlYRzU5WEc1Y2JpOHZJT2FKZ09hY2llaXZ0K2F4Z3VXUGtlV0h1dVdKamVtY2dPaW1nZVdCbXVlYWhPUzZpK2FEaFZ4dVpuVnVZM1JwYjI0Z2NISmxSRzg4VkNCbGVIUmxibVJ6SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjQrS0c5aWFqb2dWQ3dnY21WemIyeDJaVG9nS0haaGJIVmxQem9nWVc1NUtTQTlQaUIyYjJsa0xDQnlaV3BsWTNRL09pQW9jbVZoYzI5dVB6b2dZVzU1S1NBOVBpQjJiMmxrS1RvZ1ZDQjdYRzRnSUNBZ0x5OGc1NW03NWIyVjVvQ0I1YVN4NXBXSTc3eU02WWVONWFTTjU1bTc1YjJWNks2aDVwV3dYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91Y21WTWIyZHBia052ZFc1MElEMDlQU0JjSW5WdVpHVm1hVzVsWkZ3aUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1eVpVeHZaMmx1UTI5MWJuUWdQU0F3TzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1eVpVeHZaMmx1UTI5MWJuUXJLenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYjJKcUxuSmxURzluYVc1RGIzVnVkQ0E5UFQwZ01DQW1KaUIwZVhCbGIyWWdiMkpxTG1KbFptOXlaVk5sYm1RZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91WW1WbWIzSmxVMlZ1WkNncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHZZbW91YzJodmQweHZZV1JwYm1jcElIdGNiaUFnSUNBZ0lDQWdiRzloWkdsdVp5NXphRzkzS0c5aWFpNXphRzkzVEc5aFpHbHVaeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0NGdlltb3ViM0pwWjJsdVZYSnNLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNXZjbWxuYVc1VmNtd2dQU0J2WW1vdWRYSnNPMXh1SUNBZ0lDQWdJQ0J2WW1vdWRYSnNJRDBnWm05eWJXRjBLRzlpYWk1MWNtd3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHOWlhaTVmY21WemIyeDJaU0E5SUhKbGMyOXNkbVU3WEc0Z0lDQWdiMkpxTGw5eVpXcGxZM1FnUFNCeVpXcGxZM1E3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdiMkpxTzF4dWZWeHVYRzR2THlEbW9Memx2SS9sakpibHBJVG5rSWJvcjdmbXNZTG5tb1J2WW1ybGhvWGxycmxjYm1aMWJtTjBhVzl1SUdsdWFYUnBZV3hwZW1WU1pYRjFaWE4wVDJKcUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBJSHRjYmx4dUlDQWdJR2xtSUNnaGIySnFMbVJoZEdFcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1SaGRHRWdQU0I3ZlR0Y2JpQWdJQ0I5WEc0Z0lDQWdYRzRnSUNBZ2IySnFMbWhsWVdSbGNpQTlJRzlpYWk1b1pXRmtaWElnUHlCdlltb3VhR1ZoWkdWeUlEb2dlMzA3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VjMlYwU0dWaFpHVnlJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQWdJR3hsZENCb1pXRmtaWElnUFNCamIyNW1hV2N1YzJWMFNHVmhaR1Z5S0NrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdhR1ZoWkdWeUlEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1obFlXUmxjaUE5SUhzdUxpNXZZbW91YUdWaFpHVnlMQ0F1TGk1b1pXRmtaWEo5TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5Mbk5sZEVobFlXUmxjaUE5UFQwZ0oyOWlhbVZqZENjcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1obFlXUmxjaUE5SUhzdUxpNXZZbW91YUdWaFpHVnlMQ0F1TGk1amIyNW1hV2N1YzJWMFNHVmhaR1Z5ZlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2IySnFMbTl5YVdkcGJsVnliQ0FoUFQwZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVkWEpzSUNZbUlITjBZWFIxY3k1elpYTnphVzl1S1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVrWVhSaElEMGdleUF1TGk1dlltb3VaR0YwWVNCaGN5QnZZbXBsWTNRc0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJpQjlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZVdGcU9XeGdPV1BndWFWc08rOGpPV0ltZWEzdStXS29GeHVJQ0FnSUdOdmJuTjBJR2RrSUQwZ1oyVjBSMnh2WW1Gc1JHRjBZU2dwTzF4dUlDQWdJRzlpYWk1a1lYUmhJRDBnZXlBdUxpNW5aQ3dnTGk0dWIySnFMbVJoZEdFZ1lYTWdiMkpxWldOMElIMDdYRzVjYmlBZ0lDQnZZbW91YldWMGFHOWtJRDBnYjJKcUxtMWxkR2h2WkNCOGZDQW5SMFZVSnp0Y2JpQWdJQ0J2WW1vdVpHRjBZVlI1Y0dVZ1BTQnZZbW91WkdGMFlWUjVjR1VnZkh3Z0oycHpiMjRuTzF4dVhHNGdJQ0FnTHk4ZzVhYUM1cDZjNksrMzVyR0M1TGlONXBpdlIwVlU3N3lNNVlpWjVaeW9WVkpNNUxpdDZJZXE1WXFvNVlxZzVMaUs1NW03NWIyVjVvQ0I1WktNNVlXbzViR0E1WStDNXBXd1hHNGdJQ0FnYVdZZ0tDRmpiMjVtYVdjdVpHOU9iM1JWYzJWUmRXVnllVk4wY21sdVp5QW1KaUJ2WW1vdWJXVjBhRzlrSUNFOVBTQmNJa2RGVkZ3aUtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoemRHRjBkWE11YzJWemMybHZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiMkpxTG5WeWJDQTlJSFZ5YkM1elpYUlFZWEpoYlhNb2IySnFMblZ5YkN3Z2V5QmJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNGdmU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2IySnFMblZ5YkNBOUlIVnliQzV6WlhSUVlYSmhiWE1vYjJKcUxuVnliQ3dnWjJRcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklPV2toK2VVcU9XZm4rV1FqZW1BdStpK2tWeHVJQ0FnSUdsbUlDaHpkR0YwZFhNdWFYTkZibUZpYkdWQ1lXTnJkWEJFYjIxaGFXNGdKaVlnWTI5dVptbG5MbUpoWTJ0MWNFUnZiV0ZwYmlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdkWEpzTG5KbGNHeGhZMlZFYjIxaGFXNG9iMkpxTG5WeWJDd2dZMjl1Wm1sbkxtSmhZMnQxY0VSdmJXRnBiaWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXpkR0Z5ZENodlltb3BPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHOWlhanRjYm4xY2JseHVMeThnNXFDODVieVA1WXlXNWFTRTU1Q0c1TGlLNUx5ZzVwYUg1THUyNTVxRWIySnE1WWFGNWE2NVhHNW1kVzVqZEdsdmJpQnBibWwwYVdGc2FYcGxWWEJzYjJGa1JtbHNaVTlpYWlodlltbzZJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0NGdlltb3VabTl5YlVSaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtWnZjbTFFWVhSaElEMGdlMzA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiMkpxTG1obFlXUmxjaUE5SUc5aWFpNW9aV0ZrWlhJZ1B5QnZZbW91YUdWaFpHVnlJRG9nZTMwN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1YzJWMFNHVmhaR1Z5SUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQm9aV0ZrWlhJZ1BTQmpiMjVtYVdjdWMyVjBTR1ZoWkdWeUtDazdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYUdWaFpHVnlJRDA5UFNBbmIySnFaV04wSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtaGxZV1JsY2lBOUlIc3VMaTV2WW1vdWFHVmhaR1Z5TENBdUxpNW9aV0ZrWlhKOU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG5ObGRFaGxZV1JsY2lBOVBUMGdKMjlpYW1WamRDY3BJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtaGxZV1JsY2lBOUlIc3VMaTV2WW1vdWFHVmhaR1Z5TENBdUxpNWpiMjVtYVdjdWMyVjBTR1ZoWkdWeWZUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iMkpxTG05eWFXZHBibFZ5YkNBaFBUMGdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1ZFhKc0lDWW1JSE4wWVhSMWN5NXpaWE56YVc5dUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1bWIzSnRSR0YwWVNBOUlIc2dMaTR1YjJKcUxtWnZjbTFFWVhSaElHRnpJRzlpYW1WamRDd2dXMk52Ym1acFp5NXpaWE56YVc5dVRtRnRaVjA2SUhOMFlYUjFjeTV6WlhOemFXOXVJSDA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnNWFhQzVwNmM1cHlKNVlXbzViR0E1WStDNXBXdzc3eU01WWlaNXJlNzVZcWdYRzRnSUNBZ1kyOXVjM1FnWjJRZ1BTQm5aWFJIYkc5aVlXeEVZWFJoS0NrN1hHNGdJQ0FnYjJKcUxtWnZjbTFFWVhSaElEMGdleUF1TGk1blpDd2dMaTR1YjJKcUxtWnZjbTFFWVhSaElIMDdYRzVjYmlBZ0lDQnBaaUFvSVdOdmJtWnBaeTVrYjA1dmRGVnpaVkYxWlhKNVUzUnlhVzVuS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJT1d3aHVlWnUrbVpodWFBZ2VTNW4rVzRwdVdjcUhWeWJPUzRpbHh1SUNBZ0lDQWdJQ0JwWmlBb2MzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1MWNtd2dQU0IxY213dWMyVjBVR0Z5WVcxektHOWlhaTUxY213c0lIc2dXMk52Ym1acFp5NXpaWE56YVc5dVRtRnRaVjA2SUhOMFlYUjFjeTV6WlhOemFXOXVJSDBwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHZJT1dGcU9XeGdPV1BndWFWc09XUWpPYVh0dWFVdnVXY3FIVnliT1M0aWx4dUlDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ2RYSnNMbk5sZEZCaGNtRnRjeWh2WW1vdWRYSnNMQ0JuWkNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4ZzVhU0g1NVNvNVorZjVaQ042WUM3Nkw2UlhHNGdJQ0FnYVdZZ0tITjBZWFIxY3k1cGMwVnVZV0pzWlVKaFkydDFjRVJ2YldGcGJpQW1KaUJqYjI1bWFXY3VZbUZqYTNWd1JHOXRZV2x1S1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTUxY213Z1BTQjFjbXd1Y21Wd2JHRmpaVVJ2YldGcGJpaHZZbW91ZFhKc0xDQmpiMjVtYVdjdVltRmphM1Z3Ukc5dFlXbHVLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUxuTjBZWEowS0c5aWFpazdYRzVjYmlBZ0lDQnlaWFIxY200Z2IySnFPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQm5aWFJIYkc5aVlXeEVZWFJoS0NrZ2UxeHVJQ0FnSUd4bGRDQm5aRG9nWVc1NUlEMGdlMzA3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VaMnh2WW1Gc1JHRjBZU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUdka0lEMGdZMjl1Wm1sbkxtZHNiMkpoYkVSaGRHRW9LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVoyeHZZbUZzUkdGMFlTQTlQVDBnWENKdlltcGxZM1JjSWlrZ2UxeHVJQ0FnSUNBZ0lDQm5aQ0E5SUdOdmJtWnBaeTVuYkc5aVlXeEVZWFJoTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1oyUTdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHUnZVbVZ4ZFdWemRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVLU0I3WEc0Z0lDQWdiMkpxSUQwZ2FXNXBkR2xoYkdsNlpWSmxjWFZsYzNSUFltb29iMkpxS1R0Y2JpQWdJQ0JwWmlBb2IySnFMbkpsVEc5bmFXNURiM1Z1ZENBOVBUMGdNQ0FtSmlCMGVYQmxiMllnWTI5dVptbG5MbUpsWm05eVpWTmxibVFnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCdlltb2dQU0JqYjI1bWFXY3VZbVZtYjNKbFUyVnVaQ2h2WW1vc0lITjBZWFIxY3k1elpYTnphVzl1S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxQRmRsWTJoaGRFMXBibWx3Y205bmNtRnRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFErS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkM2d1Y21WeGRXVnpkQ2g3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXVMaTV2WW1vc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZFdOalpYTnpLSEpsY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0hKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1GcGJDaHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RGxwb0xtbnB6a3VMdmxuNS9sa0kza3VJM2xqNi9ubEtqdnZJemt1SlRwaFkzbnZhN2t1b2JscElma3U3M2xuNS9sa0kzdnZJemt1SlRtbkt6bXJLSG9yN2Ztc1lMbW5Lcmt2Yi9ubEtqbHBJZmt1NzNsbjUvbGtJMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WelB5NWxjbkpOYzJjL0xtbHVaR1Y0VDJZb0owTlBUazVGUTFSSlQwNWZVa1ZHVlZORlJDY3BJRDQ5SURBZ0ppWWdZMjl1Wm1sbkxtSmhZMnQxY0VSdmJXRnBiaUFtSmlCdlltb3VkWEpzTG1sdVpHVjRUMllvWTI5dVptbG5MbUpoWTJ0MWNFUnZiV0ZwYmlrZ1BDQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1c4Z09XUXIrV2toK1M3dmVXZm4rV1FqVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJtRmliR1ZDWVdOcmRYQkViMjFoYVc0b0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzZZZU42SytWNUxpQTVxeWhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrYjFKbGNYVmxjM1FvYjJKcUtTNTBhR1Z1S0NoeVpYTXBQVDRnY21WemIyeDJaU2h5WlhNcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN0lIUjVjR1U2SUNkemVYTjBaVzB0WlhKeWIzSW5MQ0J5WlhNZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91WTI5dGNHeGxkR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZZbW91WTI5dGNHeGxkR1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzlpYWk1emFHOTNURzloWkdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc2IyRmthVzVuTG1ocFpHVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmU2xjYm4xY2JseHVablZ1WTNScGIyNGdaRzlWY0d4dllXUkdhV3hsS0c5aWFqb2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBJSHRjYmlBZ0lDQnZZbW9nUFNCcGJtbDBhV0ZzYVhwbFZYQnNiMkZrUm1sc1pVOWlhaWh2WW1vcE8xeHVJQ0FnSUdsbUlDaHZZbW91Y21WTWIyZHBia052ZFc1MElEMDlQU0F3SUNZbUlIUjVjR1Z2WmlCamIyNW1hV2N1WW1WbWIzSmxVMlZ1WkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaUE5SUdOdmJtWnBaeTVpWldadmNtVlRaVzVrS0c5aWFpd2djM1JoZEhWekxuTmxjM05wYjI0cE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlU4VjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VlhCc2IyRmtSbWxzWlZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RENG9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCM2VDNTFjR3h2WVdSR2FXeGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDNHVMbTlpYWl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4xWTJObGMzTW9jbVZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tISmxjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPV21ndWFlbk9TNHUrV2ZuK1dRamVTNGplV1ByK2VVcU8rOGpPUzRsT21GamVlOXJ1UzZodVdraCtTN3ZlV2ZuK1dRamUrOGpPUzRsT2Fjck9hc29laXZ0K2F4Z3VhY3F1Uzl2K2VVcU9Xa2grUzd2ZVdmbitXUWpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h5WlhNL0xtVnljazF6Wno4dWFXNWtaWGhQWmlnblEwOU9Ua1ZEVkVsUFRsOVNSVVpWVTBWRUp5a2dQajBnTUNBbUppQmpiMjVtYVdjdVltRmphM1Z3Ukc5dFlXbHVJQ1ltSUc5aWFpNTFjbXd1YVc1a1pYaFBaaWhqYjI1bWFXY3VZbUZqYTNWd1JHOXRZV2x1S1NBOElEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1YnlBNVpDdjVhU0g1THU5NVorZjVaQ05YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWdVlXSnNaVUpoWTJ0MWNFUnZiV0ZwYmlncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEcGg0M29yNVhrdUlEbXJLRmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1J2VlhCc2IyRmtSbWxzWlNodlltb3BMblJvWlc0b0tISmxjeWs5UGlCeVpYTnZiSFpsS0hKbGN5a3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIc2dkSGx3WlRvZ0ozTjVjM1JsYlMxbGNuSnZjaWNzSUhKbGN5QjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiR1YwWlNncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1amIyMXdiR1YwWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1amIyMXdiR1YwWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYjJKcUxuTm9iM2RNYjJGa2FXNW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHZZV1JwYm1jdWFHbGtaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJ5WlhGMVpYTjBQRlJTWlhOd1BpaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVLVG9nVUhKdmJXbHpaVHhVVW1WemNENGdlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUc5aWFpQTlJSEJ5WlVSdktHOWlhaXdnY21WemIyeDJaU3dnY21WcVpXTjBLVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxtMXZZMnRLYzI5dUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdiVzlqYTFKbGMzQnZibk5sSUQwZ2JXOWphMDFoYm1GblpYSXVaMlYwS0c5aWFpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iVzlqYTFKbGMzQnZibk5sS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsYzNCdmJuTmxJRDBnY21WemNHOXVjMlZJWVc1a2JHVnlMbkpsYzNCdmJuTmxSbTl5VW1WeGRXVnpkQ2h0YjJOclVtVnpjRzl1YzJVc0lHOWlhaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6Y0c5dWMyVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHOWlhaTVqWVdOb1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRmphR1ZOWVc1aFoyVnlMbWRsZENodlltb3BPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmsxaGJtRm5aWEl1YldGcGJpaHZZbW9wTG5Sb1pXNG9LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1J2VW1WeGRXVnpkQ2h2WW1vcFhHNGdJQ0FnSUNBZ0lIMHBMblJvWlc0b0tISmxjem9nVjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsYzNCdmJuTmxJRDBnY21WemNHOXVjMlZJWVc1a2JHVnlMbkpsYzNCdmJuTmxSbTl5VW1WeGRXVnpkQ2h5WlhNc0lHOWlhaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WemNHOXVjMlVnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLSEpsYzNCdmJuTmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU2t1WTJGMFkyZ29LR1U2SUVsRmNuSnZjazlpYW1WamRDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHTmhkR05vU0dGdVpHeGxjaWhsTENCdlltb3NJSEpsYW1WamRDbGNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQjFjR3h2WVdSR2FXeGxLRzlpYWpvZ1NWVndiRzloWkVacGJHVlBjSFJwYjI0cE9pQmhibmtnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHOWlhaUE5SUhCeVpVUnZLRzlpYWl3Z2NtVnpiMngyWlN3Z2NtVnFaV04wS1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvWTI5dVptbG5MbTF2WTJ0S2MyOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYlc5amExSmxjM0J2Ym5ObElEMGdiVzlqYTAxaGJtRm5aWEl1WjJWMEtHOWlhaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYlc5amExSmxjM0J2Ym5ObEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhKbGMzQnZibk5sSUQwZ2NtVnpjRzl1YzJWSVlXNWtiR1Z5TG5KbGMzQnZibk5sUm05eVZYQnNiMkZrUm1sc1pTaHRiMk5yVW1WemNHOXVjMlVzSUc5aWFpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb2NtVnpjRzl1YzJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdjMlZ6YzJsdmJrMWhibUZuWlhJdWJXRnBiaWh2WW1vcExuUm9aVzRvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSdlZYQnNiMkZrUm1sc1pTaHZZbW9wWEc0Z0lDQWdJQ0FnSUgwcExuUm9aVzRvS0hKbGN6b2dWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVWWEJzYjJGa1JtbHNaVk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsYzNCdmJuTmxJRDBnY21WemNHOXVjMlZJWVc1a2JHVnlMbkpsYzNCdmJuTmxSbTl5VlhCc2IyRmtSbWxzWlNoeVpYTXNJRzlpYWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVnpjRzl1YzJVZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0hKbGMzQnZibk5sS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNrdVkyRjBZMmdvS0dVNklFbEZjbkp2Y2s5aWFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGMFkyaElZVzVrYkdWeUtHVXNJRzlpYWl3Z2NtVnFaV04wS1Z4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgwcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUdWdVlXSnNaVUpoWTJ0MWNFUnZiV0ZwYmlncElIdGNiaUFnSUNCcFppQW9JWE4wWVhSMWN5NXBjMFZ1WVdKc1pVSmhZMnQxY0VSdmJXRnBiaWtnZTF4dUlDQWdJQ0FnSUNCemRHRjBkWE11YVhORmJtRmliR1ZDWVdOcmRYQkViMjFoYVc0Z1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1aVlXTnJkWEJFYjIxaGFXNUZibUZpYkdWRFlXeHNZbUZqYXlBOVBUMGdKMloxYm1OMGFXOXVKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1Wm1sbkxtSmhZMnQxY0VSdmJXRnBia1Z1WVdKc1pVTmhiR3hpWVdOcktDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2JpQWdJQ0JtYjNKdFlYUXNYRzRnSUNBZ2NtVnhkV1Z6ZEN4Y2JpQWdJQ0IxY0d4dllXUkdhV3hsWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbnZhciBqc29uU3VwZXJzZXRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2pzb25TdXBlcnNldFwiKTtcbmZ1bmN0aW9uIHJlc3BvbnNlRm9yUmVxdWVzdChyZXMsIG9iaikge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAob2JqLmRhdGFUeXBlID09PSAnanNvbicgJiYgdHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBqc29uU3VwZXJzZXRfMS5kZWZhdWx0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmxvZ2luVHJpZ2dlcihyZXMuZGF0YSkgJiYgb2JqLnJlTG9naW5Db3VudCAhPT0gdW5kZWZpbmVkICYmIG9iai5yZUxvZ2luQ291bnQgPCBjb25maWdfMS5kZWZhdWx0LnJlTG9naW5MaW1pdCkge1xuICAgICAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LmRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQucmVxdWVzdChvYmopO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc1RyaWdnZXIocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICB2YXIgcmVhbERhdGEgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgfVxuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyXzEuZGVmYXVsdC5zZXQob2JqLCByZWFsRGF0YSk7XG4gICAgICAgICAgICBpZiAoIW9iai5ub0NhY2hlRmxhc2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgeyB0eXBlOiAnaHR0cC1lcnJvcicsIHJlczogcmVzIH07XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzcG9uc2VGb3JVcGxvYWRGaWxlKHJlcywgb2JqKSB7XG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuZW5kKG9iaik7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXMuZGF0YSA9IGpzb25TdXBlcnNldF8xLmRlZmF1bHQocmVzLmRhdGEpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICdsb2dpYy1lcnJvcicsIHJlczogcmVzIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIHZhciByZWFsRGF0YSA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZWFsRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhbERhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICdsb2dpYy1lcnJvcicsIHJlczogcmVzIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IHsgdHlwZTogJ2h0dHAtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICByZXNwb25zZUZvclJlcXVlc3Q6IHJlc3BvbnNlRm9yUmVxdWVzdCxcbiAgICByZXNwb25zZUZvclVwbG9hZEZpbGU6IHJlc3BvbnNlRm9yVXBsb2FkRmlsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnpjRzl1YzJWSVlXNWtiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOXlaWE53YjI1elpVaGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNiVVJCUVRaRE8wRkJRemRETEN0RFFVRjVRenRCUVVONlF5eDFSRUZCYVVRN1FVRkRha1FzYlVSQlFUWkRPMEZCUlRkRExIRkVRVUVyUXp0QlFVVXZReXhUUVVGVExHdENRVUZyUWl4RFFVTjJRaXhIUVVGdFJDeEZRVU51UkN4SFFVRnRRanRKUVVWdVFpeEpRVUZKTEVkQlFVY3NRMEZCUXl4VlFVRlZMRXRCUVVzc1IwRkJSeXhGUVVGRk8xRkJSWGhDTERCQ1FVRm5RaXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVY3hRaXhKUVVGSkxFZEJRVWNzUTBGQlF5eFJRVUZSTEV0QlFVc3NUVUZCVFN4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFbEJRVWtzUzBGQlN5eFJRVUZSTEVWQlFVVTdXVUZEZWtRc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eHpRa0ZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU5zUXl4SlFVRkpPMmRDUVVOQkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdZVUZEYmtNN1dVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdG5Ra0ZEVWl4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRkxHRkJRV0VzUlVGQlJTeEhRVUZITEV0QlFVRXNSVUZCUlN4RFFVRkJPMkZCUTNKRE8xTkJRMG83VVVGRlJDeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1dVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hMUVVGTExGTkJRVk1zU1VGQlNTeEhRVUZITEVOQlFVTXNXVUZCV1N4SFFVRkhMR2RDUVVGTkxFTkJRVU1zV1VGQllTeEZRVUZGTzFsQlJUZEhMSGRDUVVGakxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdXVUZETlVJc1QwRkJUeXgzUWtGQll5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOMFF6dGhRVUZOTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMWxCUlhoRExFbEJRVWtzVVVGQlVTeEhRVUZ6UXl4RlFVRkZMRU5CUVVNN1dVRkRja1FzU1VGQlNUdG5Ra0ZEUVN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFhRVUZYTEV0QlFVc3NWVUZCVlN4RlFVRkZPMjlDUVVNeFF5eFJRVUZSTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmxDUVVNelF6dHhRa0ZCVFR0dlFrRkRTQ3hSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXp0cFFrRkRka0k3WVVGRFNqdFpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRWRCUVVVN1dVRkZaQ3h6UWtGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03V1VGRGFFTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFVkJRVVU3WjBKQlJXNUNMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eExRVUZMTEZWQlFWVXNSVUZCUlR0dlFrRkRia01zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRwUWtGRGVrSTdjVUpCUVUwN2IwSkJRMGdzVDBGQlR5eFJRVUZSTEVOQlFVTTdhVUpCUTI1Q08yRkJRMG83VTBGRFNqdGhRVUZOTzFsQlJVZ3NUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hoUVVGaExFVkJRVVVzUjBGQlJ5eExRVUZCTEVWQlFVVXNRMEZCUVR0VFFVTnlRenRMUVVOS08xTkJRVTA3VVVGRlNDeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRmxCUVZrc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlJTeERRVUZCTzB0QlEzQkRPMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zY1VKQlFYRkNMRU5CUXpGQ0xFZEJRWE5FTEVWQlEzUkVMRWRCUVhOQ08wbEJSWFJDTEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1MwRkJTeXhIUVVGSExFVkJRVVU3VVVGRmVFSXNNRUpCUVdkQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUnpGQ0xFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNTVUZCU1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVNNVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMSE5DUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJ4RExFbEJRVWs3WjBKQlEwRXNSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRoUVVOdVF6dFpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMmRDUVVOU0xFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNZVUZCWVN4RlFVRkZMRWRCUVVjc1MwRkJRU3hGUVVGRkxFTkJRVUU3WVVGRGNrTTdVMEZEU2p0UlFVVkVMRWxCUVVrc1owSkJRVTBzUTBGQlF5eFpRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFpRVUZaTEV0QlFVc3NVMEZCVXl4SlFVRkpMRWRCUVVjc1EwRkJReXhaUVVGWkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4WlFVRmhMRVZCUVVVN1dVRkZOMGNzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRaUVVNMVFpeFBRVUZQTEhkQ1FVRmpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlEzcERPMkZCUVUwc1NVRkJTU3huUWtGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVU3V1VGRmVFTXNTVUZCU1N4UlFVRlJMRWRCUVhORExFVkJRVVVzUTBGQlF6dFpRVU55UkN4SlFVRkpPMmRDUVVOQkxFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRmRCUVZjc1MwRkJTeXhWUVVGVkxFVkJRVVU3YjBKQlF6RkRMRkZCUVZFc1IwRkJSeXhuUWtGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YVVKQlF6TkRPM0ZDUVVGTk8yOUNRVU5JTEZGQlFWRXNSMEZCUnl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRE8ybENRVU4yUWp0aFFVTktPMWxCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUjBGQlJUdFpRVVZrTEVsQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJUeXhMUVVGTExGVkJRVlVzUlVGQlJUdG5Ra0ZEYmtNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0aFFVTjZRanRwUWtGQlRUdG5Ra0ZEU0N4UFFVRlBMRkZCUVZFc1EwRkJRenRoUVVOdVFqdFRRVU5LTzJGQlFVMDdXVUZGU0N4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRkxHRkJRV0VzUlVGQlJTeEhRVUZITEV0QlFVRXNSVUZCUlN4RFFVRkJPMU5CUTNKRE8wdEJRMG83VTBGQlRUdFJRVVZJTEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVc1dVRkJXU3hGUVVGRkxFZEJRVWNzUzBGQlFTeEZRVUZGTEVOQlFVRTdTMEZEY0VNN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4clFrRkJhMElzYjBKQlFVRTdTVUZEYkVJc2NVSkJRWEZDTEhWQ1FVRkJPME5CUTNoQ0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCeVpYRjFaWE4wU0dGdVpHeGxjaUJtY205dElDY3VMM0psY1hWbGMzUklZVzVrYkdWeUoxeHVhVzF3YjNKMElHTmhZMmhsVFdGdVlXZGxjaUJtY205dElDY3VMMk5oWTJobFRXRnVZV2RsY2lkY2JtbHRjRzl5ZENCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5SUdaeWIyMGdKeTR2WkhWeVlYUnBiMjVTWlhCdmNuUmxjaWRjYm1sdGNHOXlkQ0J6WlhOemFXOXVUV0Z1WVdkbGNpQm1jbTl0SUNjdUwzTmxjM05wYjI1TllXNWhaMlZ5SjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1TENCSlFXNTVUMkpxWldOMElIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dWFXMXdiM0owSUdwemIyNVRkWEJsY25ObGRDQm1jbTl0SUNjdUxpOTFkR2xzTDJwemIyNVRkWEJsY25ObGRDZGNibHh1Wm5WdVkzUnBiMjRnY21WemNHOXVjMlZHYjNKU1pYRjFaWE4wS0Z4dUlDQWdJSEpsY3pvZ1YyVmphR0YwVFdsdWFYQnliMmR5WVcwdVVtVnhkV1Z6ZEZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RDeGNiaUFnSUNCdlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dVhHNHBPaUJoYm5rZ2UxeHVJQ0FnSUdsbUlDaHlaWE11YzNSaGRIVnpRMjlrWlNBOVBUMGdNakF3S1NCN1hHNWNiaUFnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNWxibVFvYjJKcUtUdGNiaUFnSUNBZ0lDQWdYRzRnSUNBZ0lDQWdJQzh2SU9pdnQrYXhndWFndk9XOGorUzR1bXB6YjI3dnZJemt2WWJvdjVUbG01N2t1b1p6ZEhKcGJtZnZ2SXpvcjdUbW1JN2xob1hscnJua3VLM2xqNi9vZzczbHJaamxuS2pscjd6b2g3VGt2Yi9sdnBkS1lYWmhVMk55YVhCMDVieUM1Ymk0NTVxRTVhMlg1NnltWEc0Z0lDQWdJQ0FnSUdsbUlDaHZZbW91WkdGMFlWUjVjR1VnUFQwOUlDZHFjMjl1SnlBbUppQjBlWEJsYjJZZ2NtVnpMbVJoZEdFZ1BUMDlJQ2R6ZEhKcGJtY25LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWE11WkdGMFlTQTlJR3B6YjI1VGRYQmxjbk5sZENoeVpYTXVaR0YwWVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjeTVrWVhSaElEMGdTbE5QVGk1d1lYSnpaU2h5WlhNdVpHRjBZU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dleUIwZVhCbE9pQW5iRzluYVdNdFpYSnliM0luTENCeVpYTWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1c2IyZHBibFJ5YVdkblpYSWhLSEpsY3k1a1lYUmhLU0FtSmlCdlltb3VjbVZNYjJkcGJrTnZkVzUwSUNFOVBTQjFibVJsWm1sdVpXUWdKaVlnYjJKcUxuSmxURzluYVc1RGIzVnVkQ0E4SUdOdmJtWnBaeTV5WlV4dloybHVUR2x0YVhRaEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSGxwTEhtbFlqdnZJemt1SlRwaDQzb3I1WG1yS0htbGJEa3VJM290b1hvdjRmcGhZM252YTVjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG1SbGJGTmxjM05wYjI0b0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNXlaWEYxWlhOMEtHOWlhaWs3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyOXVabWxuTG5OMVkyTmxjM05VY21sbloyVnlLSEpsY3k1a1lYUmhLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNW82bDVZK2o2TCtVNVp1ZTVvaVE1WXFmNTZDQlhHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVmhiRVJoZEdFNklITjBjbWx1WnlCOElFbEJibmxQWW1wbFkzUWdmQ0JCY25KaGVVSjFabVpsY2lBOUlGd2lYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG5OMVkyTmxjM05FWVhSaElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWVd4RVlYUmhJRDBnWTI5dVptbG5Mbk4xWTJObGMzTkVZWFJoS0hKbGN5NWtZWFJoS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaV0ZzUkdGMFlTQTlJSEpsY3k1a1lYUmhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHQ5WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURudkpQbHJaamxyWmpsZ3FoY2JpQWdJQ0FnSUNBZ0lDQWdJR05oWTJobFRXRnVZV2RsY2k1elpYUW9iMkpxTENCeVpXRnNSR0YwWVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXOWlhaTV1YjBOaFkyaGxSbXhoYzJncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURscG9MbW5wemt1THJrdW9ia3Y1M29yNEhwb2JYcG5hTGt1STNwbDZybmc0SHZ2SXpsaUpua3VJM2xtNTdvc0lQdnZJemxqNnJtbUsvbnZKUGxyWmptbklEbWxyRG1sYkRtamE3dnZJemx2b1hrdUl2bXJLSG92NXZsaGFYbGhvM25sS2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNXpkV05qWlhOeklEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxuTjFZMk5sYzNNb2NtVmhiRVJoZEdFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV0ZzUkdGMFlUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbWpxWGxqNlBvdjVUbG01N2xwTEhvdEtYbm9JRmNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJSHNnZEhsd1pUb2dKMnh2WjJsakxXVnljbTl5Snl3Z2NtVnpJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQzh2SUdoMGRIQno2TCtVNVp1ZTU0cTI1b0NCNTZDQjZaMmVNakF3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJSHNnZEhsd1pUb2dKMmgwZEhBdFpYSnliM0luTENCeVpYTWdmVnh1SUNBZ0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2NtVnpjRzl1YzJWR2IzSlZjR3h2WVdSR2FXeGxLRnh1SUNBZ0lISmxjem9nVjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VlhCc2IyRmtSbWxzWlZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RDeGNiaUFnSUNCdlltbzZJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVYRzRwT2lCaGJua2dlMXh1SUNBZ0lHbG1JQ2h5WlhNdWMzUmhkSFZ6UTI5a1pTQTlQVDBnTWpBd0tTQjdYRzVjYmlBZ0lDQWdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTVsYm1Rb2IySnFLVHRjYmx4dUlDQWdJQ0FnSUNBdkx5RGxob1hscnJua3VLM2xqNi9vZzczbHJaamxuS2pscjd6b2g3VGt2Yi9sdnBkS1lYWmhVMk55YVhCMDVieUM1Ymk0NTVxRTVhMlg1NnltWEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NtVnpMbVJoZEdFZ1BUMDlJQ2R6ZEhKcGJtY25LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWE11WkdGMFlTQTlJR3B6YjI1VGRYQmxjbk5sZENoeVpYTXVaR0YwWVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjeTVrWVhSaElEMGdTbE5QVGk1d1lYSnpaU2h5WlhNdVpHRjBZU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dleUIwZVhCbE9pQW5iRzluYVdNdFpYSnliM0luTENCeVpYTWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1c2IyZHBibFJ5YVdkblpYSWhLSEpsY3k1a1lYUmhLU0FtSmlCdlltb3VjbVZNYjJkcGJrTnZkVzUwSUNFOVBTQjFibVJsWm1sdVpXUWdKaVlnYjJKcUxuSmxURzluYVc1RGIzVnVkQ0E4SUdOdmJtWnBaeTV5WlV4dloybHVUR2x0YVhRaEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSGxwTEhtbFlqdnZJemt1SlRwaDQzb3I1WG1yS0htbGJEa3VJM290b1hvdjRmcGhZM252YTVjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG1SbGJGTmxjM05wYjI0b0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMjl1Wm1sbkxuTjFZMk5sYzNOVWNtbG5aMlZ5S0hKbGN5NWtZWFJoS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVvNmw1WStqNkwrVTVadWU1b2lRNVlxZjU2Q0JYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZoYkVSaGRHRTZJSE4wY21sdVp5QjhJRWxCYm5sUFltcGxZM1FnZkNCQmNuSmhlVUoxWm1abGNpQTlJRndpWENJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxuTjFZMk5sYzNORVlYUmhJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFlXeEVZWFJoSUQwZ1kyOXVabWxuTG5OMVkyTmxjM05FWVhSaEtISmxjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WldGc1JHRjBZU0E5SUhKbGN5NWtZWFJoTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0OVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2IySnFMbk4xWTJObGMzTWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hKbFlXeEVZWFJoS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxZV3hFWVhSaE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNW82bDVZK2o2TCtVNVp1ZTVhU3g2TFNsNTZDQlhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QjdJSFI1Y0dVNklDZHNiMmRwWXkxbGNuSnZjaWNzSUhKbGN5QjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJvZEhSd2MraS9sT1dibnVlS3R1YUFnZWVnZ2VtZG5qSXdNRnh1SUNBZ0lDQWdJQ0IwYUhKdmR5QjdJSFI1Y0dVNklDZG9kSFJ3TFdWeWNtOXlKeXdnY21WeklIMWNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQnlaWE53YjI1elpVWnZjbEpsY1hWbGMzUXNYRzRnSUNBZ2NtVnpjRzl1YzJWR2IzSlZjR3h2WVdSR2FXeGxYRzU5TzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XG52YXIgZHVyYXRpb25SZXBvcnRlcl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25SZXBvcnRlclwiKTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVxdWVzdEhhbmRsZXJcIik7XG52YXIgbG9hZGluZ18xID0gcmVxdWlyZShcIi4uL3V0aWwvbG9hZGluZ1wiKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi4vYXBpL3JlcXVlc3RcIik7XG52YXIgY2hlY2tTZXNzaW9uUHJvbWlzZSA9IG51bGw7XG5mdW5jdGlvbiBjaGVja1Nlc3Npb24oKSB7XG4gICAgaWYgKCFjaGVja1Nlc3Npb25Qcm9taXNlKSB7XG4gICAgICAgIGNoZWNrU2Vzc2lvblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrU2Vzc2lvblByb21pc2U7XG59XG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xuICAgIGlmICghc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBuZXcgRGF0ZSgpLmdldFRpbWUoKSA+IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSkge1xuICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjaGVja0xvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxudmFyIGxvZ2luUHJvbWlzZSA9IG51bGw7XG5mdW5jdGlvbiBkb0xvZ2luKCkge1xuICAgIGlmICghbG9naW5Qcm9taXNlKSB7XG4gICAgICAgIGxvZ2luUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGxvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGxvZ2luUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGxvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUyU2Vzc2lvbihyZXMuY29kZSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHR5cGU6IFwic3lzdGVtLWVycm9yXCIsIHJlczogcmVzIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXM6IHJlcyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb24pIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSxcbiAgICAgICAgZGF0YTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjb2RlMlNlc3Npb24oY29kZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEsIG9iajtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhID09PSBcImZ1bmN0aW9uXCIpKSByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhKGNvZGUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgM107XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgfHwge307XG4gICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uY29kZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmNvZGVOYW1lXSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LmZvcm1hdChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJyA/IGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyKCkgOiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3gucmVxdWVzdChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqKSwgeyBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ucmVwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEsIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5nZXRFcnJvck1zZyhyZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogXCJodHRwLWVycm9yXCIsIHJlczogcmVzIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogXCJzeXN0ZW0tZXJyb3JcIiwgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRlbFNlc3Npb24oKSB7XG4gICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gJyc7XG4gICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZVxuICAgIH0pO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBJbmZpbml0eTtcbiAgICAgICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleVxuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWluKHJlbGF0ZWRSZXF1ZXN0T2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJldHJ5ID0gIXJlbGF0ZWRSZXF1ZXN0T2JqXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1haW4oKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7IH1cbiAgICAgICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLmRlZmF1bHQocmVsYXRlZFJlcXVlc3RPYmopLnRoZW4ocmVsYXRlZFJlcXVlc3RPYmouX3Jlc29sdmUpLmNhdGNoKHJlbGF0ZWRSZXF1ZXN0T2JqLl9yZWplY3QpOyB9O1xuICAgICAgICByZXR1cm4gY2hlY2tMb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPyBQcm9taXNlLnJlc29sdmUoKSA6IGNoZWNrU2Vzc2lvbigpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9KTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgbWFpbjogbWFpbixcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uLFxuICAgIGRlbFNlc3Npb246IGRlbFNlc3Npb25cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlZ6YzJsdmJrMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM05sYzNOcGIyNU5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCUTNCRExDdERRVUY1UXp0QlFVTjZReXgxUkVGQmFVUTdRVUZEYWtRc2JVUkJRVFpETzBGQlF6ZERMREpEUVVGeFF6dEJRVU55UXl3d1EwRkJiME03UVVGSmNFTXNTVUZCU1N4dFFrRkJiVUlzUjBGQlVTeEpRVUZKTEVOQlFVTTdRVUZGY0VNc1UwRkJVeXhaUVVGWk8wbEJRMnBDTEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUlVGQlJUdFJRVU4wUWl4dFFrRkJiVUlzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCVHl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xbEJRM0JFTEVsQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEYmtNc1JVRkJSU3hEUVVGRExGbEJRVmtzUTBGQlF6dG5Ra0ZEV2l4UFFVRlBPMjlDUVVWSUxFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTTdaMEpCUTNKQ0xFTkJRVU03WjBKQlEwUXNTVUZCU1N4RlFVRktPMjlDUVVWSkxGVkJRVlVzUlVGQlJTeERRVUZETzI5Q1FVTmlMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzNkQ1FVTnNRaXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzI5Q1FVTnlRaXhEUVVGRExFVkJRVVVzVlVGQlF5eEhRVUZSTzNkQ1FVTlNMRTlCUVU4c1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTjJRaXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEVUN4RFFVRkRPMmRDUVVORUxGRkJRVkU3YjBKQlEwb3NTVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0dlFrRkRha01zTUVKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZETTBRc1EwRkJRenRoUVVOS0xFTkJRVU1zUTBGQlFUdFJRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMHRCUTB3N1NVRkRSQ3hQUVVGUExHMUNRVUZ0UWl4RFFVRkRPMEZCUXk5Q0xFTkJRVU03UVVGSFJDeFRRVUZUTEhOQ1FVRnpRanRKUVVNelFpeEpRVUZKTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3VVVGRmFrSXNUMEZCVHl4SlFVRkpMRU5CUVVFN1MwRkRaRHRKUVVORUxFbEJRVWtzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RlFVRkZPMUZCUlhwRkxGVkJRVlVzUlVGQlJTeERRVUZETzFGQlEySXNUMEZCVHl4SlFVRkpMRU5CUVVFN1MwRkRaRHRKUVVORUxFOUJRVThzUzBGQlN5eERRVUZCTzBGQlEyaENMRU5CUVVNN1FVRkZSQ3hUUVVGVExGVkJRVlU3U1VGRFppeFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRlBMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3VVVGRGNrTXNTVUZCU1N4elFrRkJjMElzUlVGQlJTeEZRVUZGTzFsQlJURkNMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRMmhETEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU5zUWl4UFFVRlBMRTlCUVU4c1JVRkJSU3hEUVVGRE8xbEJRM0pDTEVOQlFVTXNSVUZCUlN4VlFVRkRMRWRCUVZFN1owSkJRMUlzVDBGQlR5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRka0lzUTBGQlF5eERRVUZETEVOQlFVRTdVMEZEVER0aFFVRk5PMWxCUlVnc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dFRRVU53UWp0SlFVTk1MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVWRFTEVsQlFVa3NXVUZCV1N4SFFVRlJMRWxCUVVrc1EwRkJRenRCUVVVM1FpeFRRVUZUTEU5QlFVODdTVUZEV2l4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRk8xRkJRMllzV1VGQldTeEhRVUZITEVsQlFVa3NUMEZCVHl4RFFVRlBMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3V1VGRE4wTXNTMEZCU3l4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU5VTEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1owSkJRM0JDTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN1dVRkRja0lzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVVNc1IwRkJSenRuUWtGRFZDeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMmRDUVVOd1FpeHBRa0ZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8yZENRVU5tTEU5QlFVOHNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM1pDTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTFBc1EwRkJReXhEUVVGRExFTkJRVUU3UzBGRFREdEpRVU5FTEU5QlFVOHNXVUZCV1N4RFFVRkRPMEZCUTNoQ0xFTkJRVU03UVVGRlJDeFRRVUZUTEV0QlFVczdTVUZEVml4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGUExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZEY2tNc1NVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRSUVVOdVF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRPMWxCUTB3c1QwRkJUeXhaUVVGRExFZEJRVWM3WjBKQlExQXNTVUZCU1N4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRk8yOUNRVU5XTEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzNkQ1FVTjRRaXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzI5Q1FVTnlRaXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNWVUZCUXl4SFFVRkhPM2RDUVVOVUxFOUJRVThzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMjlDUVVOMlFpeERRVUZETEVOQlFVTXNRMEZCUVR0cFFrRkRURHR4UWtGQlRUdHZRa0ZEU0N4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRExFbEJRVWtzUlVGQlJTeGpRVUZqTEVWQlFVVXNSMEZCUnl4TFFVRkJMRVZCUVVNc1EwRkJReXhEUVVGRE8ybENRVU01UXp0WlFVTk1MRU5CUVVNN1dVRkRSQ3hSUVVGUk8yZENRVU5LTEVsQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdaMEpCUTJwRExEQkNRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNCRUxFTkJRVU03V1VGRFJDeEpRVUZKTEZsQlFVTXNSMEZCUnp0blFrRkRTaXhQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEVsQlFVa3NSVUZCUlN4alFVRmpMRVZCUVVVc1IwRkJSeXhMUVVGQkxFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF5OURMRU5CUVVNN1UwRkRTaXhEUVVGRExFTkJRVUU3U1VGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hUUVVGVExGVkJRVlVzUTBGQlF5eFBRVUZsTzBsQlF5OUNMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXp0SlFVVjZRaXhuUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhIUVVGSExFbEJRVWtzUTBGQlF6dEpRVVZvUXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWxCUVVrc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSVHRSUVVOeVJDeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNN1VVRkRka1VzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXp0WlFVTldMRWRCUVVjc1JVRkJSU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RanRaUVVNMVFpeEpRVUZKTEVWQlFVVXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETzFOQlEzSkRMRU5CUVVNc1EwRkJRVHRMUVVOTU8wbEJRMFFzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXp0UlFVTldMRWRCUVVjc1JVRkJSU3huUWtGQlRTeERRVUZETEZkQlFYRkNPMUZCUTJwRExFbEJRVWtzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4N1MwRkRka0lzUTBGQlF5eERRVUZETzBGQlExQXNRMEZCUXp0QlFVVkVMRk5CUVdVc1dVRkJXU3hEUVVGRExFbEJRVms3T3pzN096dDVRa0ZIYUVNc1EwRkJRU3hQUVVGUExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFTkJRVUVzUlVGQkwwTXNZMEZCSzBNN2IwSkJRM2hETEZkQlFVMHNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkJPenR2UWtGQk5VTXNTVUZCU1N4SFFVRkhMRk5CUVhGRExFTkJRVU03T3p0dlFrRkZOME1zU1VGQlNTeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdPenR2UWtGRk0wTXNTVUZCU1N4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVWQlFVVTdkMEpCUXk5Q0xFbEJRVWtzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdjVUpCUXpsRE8zbENRVUZOTzNkQ1FVTklMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzNGQ1FVTndRanR2UWtGRlJ5eEhRVUZITEVkQlFVYzdkMEpCUTA0c1IwRkJSeXhGUVVGRkxIZENRVUZqTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXp0M1FrRkRjRVFzU1VGQlNTeE5RVUZCTzNkQ1FVTktMRTFCUVUwc1JVRkJSU3huUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRWxCUVVrc1MwRkJTenQzUWtGRE5VTXNUVUZCVFN4RlFVRkZMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFRRVUZUTEV0QlFVc3NWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkJMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZOQlFWTTdjVUpCUTNoR0xFTkJRVUU3YjBKQlEwUXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZWQlFWVXNSVUZCUlR0M1FrRkRla01zUjBGQlJ5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzNGQ1FVTm9RenR2UWtGRlJDeFhRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3TkVKQlF5OUNMRWxCUVVrc1MwRkJTeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN05FSkJRMnBETEVWQlFVVXNRMEZCUXl4UFFVRlBMSFZDUVVOSUxFZEJRVWNzUzBGRFRpeFBRVUZQTEVWQlFWQXNWVUZCVVN4SFFVRnRSRHR2UTBGRGRrUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1ZVRkJWU3hMUVVGTExFZEJRVWNzUlVGQlJUdDNRMEZGZUVJc1NVRkJTU3huUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRVZCUVVVN05FTkJRemRDTEVsQlFVa3NSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdORU5CUXk5Q0xEQkNRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRVZCUVVVc1MwRkJTeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZCTzNsRFFVTnVSVHQzUTBGRlJDeEpRVUZKTEVOQlFVTXNVMEZCUVN4RFFVRkRPM2REUVVOT0xFbEJRVWs3TkVOQlEwRXNRMEZCUXl4SFFVRkhMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzNsRFFVTnVSRHQzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0NVEwRkRXRHQzUTBGRlJDeEpRVUZKTEU5QlFVOHNRMEZCUXl4TFFVRkxMRkZCUVZFc1JVRkJSVHMwUTBGRGRrSXNaMEpCUVUwc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZET3pSRFFVVnVRaXhuUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhIUVVGSExFbEJRVWtzUTBGQlF6czBRMEZGYUVNc1NVRkJTU3huUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhKUVVGSkxHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVU3WjBSQlEzSkVMR2RDUVVGTkxFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF6dG5SRUZEZGtVc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF6dHZSRUZEVml4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJN2IwUkJRelZDTEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTTdhVVJCUTNKRExFTkJRVU1zUTBGQlFUczJRMEZEVERzMFEwRkRSQ3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzJkRVFVTldMRWRCUVVjc1JVRkJSU3huUWtGQlRTeERRVUZETEZkQlFWYzdaMFJCUTNaQ0xFbEJRVWtzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4N05rTkJRM1pDTEVOQlFVTXNRMEZCUXpzMFEwRkRTQ3hQUVVGUExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0NVEwRkRja0k3TmtOQlFVMDdORU5CUTBnc1QwRkJUeXhOUVVGTkxFTkJRVU1zYzBKQlFWa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dDVRMEZEYUVRN2NVTkJRMG83ZVVOQlFVMDdkME5CUTBnc1QwRkJUeXhOUVVGTkxFTkJRVU1zUlVGQlF5eEpRVUZKTEVWQlFVVXNXVUZCV1N4RlFVRkZMRWRCUVVjc1MwRkJRU3hGUVVGRExFTkJRVU1zUTBGQlF6dHhRMEZETlVNN1owTkJRMHdzUTBGQlF6dG5RMEZEUkN4UlFVRlJPMmREUVVOU0xFTkJRVU1zUlVGRFJDeEpRVUZKTEVWQlFVVXNWVUZCUXl4SFFVRkhPMjlEUVVOT0xFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVTXNTVUZCU1N4RlFVRkZMR05CUVdNc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlF5eERRVUZETEVOQlFVTTdaME5CUXk5RExFTkJRVU1zU1VGRFNDeERRVUZCTzNkQ1FVTk9MRU5CUVVNc1EwRkJReXhGUVVGQk96czdPME5CUTB3N1FVRkhSQ3hUUVVGVExGVkJRVlU3U1VGRFppeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGNFSXNSVUZCUlN4RFFVRkRMR0ZCUVdFc1EwRkJRenRSUVVOaUxFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRmRCUVhGQ08wdEJRM0JETEVOQlFVTXNRMEZCUXp0SlFVTklMRWxCUVVrc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk8xRkJRM0pFTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hIUVVGSExGRkJRVkVzUTBGQlF6dFJRVU5vUXl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRE8xbEJRMklzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTzFOQlF5OUNMRU5CUVVNc1EwRkJRVHRMUVVOTU8wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNTVUZCU1N4RFFVRkRMR2xDUVVGelJEdEpRVU5vUlN4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGUExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZEY2tNc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eHBRa0ZCYVVJN1dVRkZNVUlzUTBGQlF5eERRVUZETEdOQlFVMHNUMEZCUVN4SlFVRkpMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGc1F5eERRVUZyUXp0WlFVVXhReXhEUVVGRExFTkJRVU1zWTBGQlRTeFBRVUZCTEdsQ1FVRlBMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVFMVJpeERRVUUwUml4RFFVRkRPMUZCUTNwSExFOUJRVThzVlVGQlZTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNKQ0xFOUJRVThzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUVR0UlFVTjRSU3hEUVVGRExFVkJRVVVzVlVGQlF5eEZRVUZuUWp0blFrRkJaaXhMUVVGTExGZEJRVUVzUlVGQlJTeFBRVUZQTEdGQlFVRTdXVUZEWml4elFrRkJXU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVXNUMEZCVHl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xbEJRelZETEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1MwRkJTeXhQUVVGQkxFVkJRVVVzVDBGQlR5eFRRVUZCTEVWQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNCRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTktMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRGNrSXNRMEZCUXl4RlFVRkZMRlZCUVVNc1JVRkJaMEk3WjBKQlFXWXNTMEZCU3l4WFFVRkJMRVZCUVVVc1QwRkJUeXhoUVVGQk8xbEJRMllzYzBKQlFWa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTTFReXhQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEV0QlFVc3NUMEZCUVN4RlFVRkZMRTlCUVU4c1UwRkJRU3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53UXl4RFFVRkRMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzU1VGQlNTeE5RVUZCTzBsQlEwb3NWVUZCVlN4WlFVRkJPMGxCUTFZc1ZVRkJWU3haUVVGQk8wTkJRMklzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnpkR0YwZFhNZ1puSnZiU0FuTGk0dmMzUnZjbVV2YzNSaGRIVnpKMXh1YVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnWlhKeWIzSklZVzVrYkdWeUlHWnliMjBnSnk0dlpYSnliM0pJWVc1a2JHVnlKMXh1YVcxd2IzSjBJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSWdabkp2YlNBbkxpOWtkWEpoZEdsdmJsSmxjRzl5ZEdWeUoxeHVhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR2Y21WeGRXVnpkRWhoYm1Sc1pYSW5YRzVwYlhCdmNuUWdiRzloWkdsdVp5Qm1jbTl0SUNjdUxpOTFkR2xzTDJ4dllXUnBibWNuWEc1cGJYQnZjblFnY21WeGRXVnpkQ0JtY205dElDY3VMaTloY0drdmNtVnhkV1Z6ZENkY2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1TENCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlCOUlHWnliMjBnWENJdUxpOXBiblJsY21aaFkyVmNJanRjYmx4dUx5b2c1NVNmNVpHOTVaR281cHlmNVlhRjVZK3E1WUdhNUxpQTVxeWg1NXFFWTJobFkydFRaWE56YVc5dUlDb3ZYRzVzWlhRZ1kyaGxZMnRUWlhOemFXOXVVSEp2YldselpUb2dZVzU1SUQwZ2JuVnNiRHRjYmx4dVpuVnVZM1JwYjI0Z1kyaGxZMnRUWlhOemFXOXVLQ2tnZTF4dUlDQWdJR2xtSUNnaFkyaGxZMnRUWlhOemFXOXVVSEp2YldselpTa2dlMXh1SUNBZ0lDQWdJQ0JqYUdWamExTmxjM05wYjI1UWNtOXRhWE5sSUQwZ2JtVjNJRkJ5YjIxcGMyVThkbTlwWkQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYzNSaGNuUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSGQ0TG1Ob1pXTnJVMlZ6YzJsdmJpaDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5Z3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1NW03NWIyVjVvQ0I1cHlKNXBXSTc3eU01TGlVNVp5bzVweXM1NVNmNVpHOTVaR281cHlmNVlhRjVwZWc2YUc3NVlhTjVxT0E2YXFNNUxxR1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSG92NGZtbko5Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR1ZzVTJWemMybHZiaWdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1pHOU1iMmRwYmlncExuUm9aVzRvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlN3Z0tISmxjem9nWVc1NUtUMCtlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052YlhCc1pYUmxLQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXlaWEJ2Y25Rb0ozZDRYMk5vWldOclUyVnpjMmx2Ymljc0lITjBZWEowTENCbGJtUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCamFHVmphMU5sYzNOcGIyNVFjbTl0YVhObE8xeHVmVnh1WEc0dktpRGxpS1RtbHExelpYTnphVzl1NXBpdjVaQ201TGk2NTZtNjVvaVc1YmV5NkwrSDVweWZJQ292WEc1bWRXNWpkR2x2YmlCcGMxTmxjM05wYjI1RmVIQnBjbVZQY2tWdGNIUjVLQ2tnZTF4dUlDQWdJR2xtSUNnaGMzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGc1YWFDNXA2YzU3eVQ1YTJZNUxpdDVyS2g1cHlKYzJWemMybHZibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlZ4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WVWFXMWxJQ1ltSUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncElENGdjM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGc1YWFDNXA2YzVweUo2SzYrNTcydTVweXM1Wnl3YzJWemMybHZidWU4aytXdG1PYVh0dW1YdE8rOGpPUzRsT2U4aytXdG1PYVh0dW1YdE9XM3N1V0lzRnh1SUNBZ0lDQWdJQ0JrWld4VFpYTnphVzl1S0NrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJtWVd4elpWeHVmVnh1WEc1bWRXNWpkR2x2YmlCamFHVmphMHh2WjJsdUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpUeDJiMmxrUGlnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2xtSUNocGMxTmxjM05wYjI1RmVIQnBjbVZQY2tWdGNIUjVLQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9heW9lYWNpZWVadSttWmh1YUFnZSs4ak9TNGplbWNnT2ltZ2VXR2pXTm9aV05yVTJWemMybHZibHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVabWxuTG1SdlRtOTBRMmhsWTJ0VFpYTnphVzl1SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa2IweHZaMmx1S0NrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc0lDaHlaWE02SUdGdWVTazlQbnRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1N3lUNWEyWTVMaXQ1cHlKYzJWemMybHZidVM0bE9hY3F1aS9oK2FjbjF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMHBYRzU5WEc1Y2JpOHFJT2VadSttWmh1YTFnZWVvaStlYWhIQnliMjFwYzJVZ0tpOWNibXhsZENCc2IyZHBibEJ5YjIxcGMyVTZJR0Z1ZVNBOUlHNTFiR3c3WEc1Y2JtWjFibU4wYVc5dUlHUnZURzluYVc0b0tTQjdYRzRnSUNBZ2FXWWdLQ0ZzYjJkcGJsQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lDQWdiRzluYVc1UWNtOXRhWE5sSUQwZ2JtVjNJRkJ5YjIxcGMyVThkbTlwWkQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHOW5hVzRvS1M1MGFHVnVLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMmRwYmxCeWIyMXBjMlVnUFNCdWRXeHNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtTNWpZWFJqYUNnb2NtVnpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOW5hVzVRY205dGFYTmxJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMkZrYVc1bkxtaHBaR1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR3h2WjJsdVVISnZiV2x6WlR0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYkc5bmFXNG9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxQSFp2YVdRK0tDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnZDNndWJHOW5hVzRvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5aHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jbVZ6TG1OdlpHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOWtaVEpUWlhOemFXOXVLSEpsY3k1amIyUmxLUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaHlaWE1wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0h0MGVYQmxPaUJjSW5ONWMzUmxiUzFsY25KdmNsd2lMQ0J5WlhOOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWlc1a0lEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTV5WlhCdmNuUW9KM2Q0WDJ4dloybHVKeXdnYzNSaGNuUXNJR1Z1WkNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkNoeVpYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBlWEJsT2lCY0luTjVjM1JsYlMxbGNuSnZjbHdpTENCeVpYTjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnpaWFJUWlhOemFXOXVLSE5sYzNOcGIyNDZJSE4wY21sdVp5a2dlMXh1SUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ2MyVnpjMmx2Ymp0Y2JpQWdJQ0F2THlEbWphTGxtNTdtbmFYbm1vUnpaWE56YVc5dTc3eU01TGlONlp5QTZLYUI1WWFOWTJobFkydFRaWE56YVc5dVhHNGdJQ0FnWTI5dVptbG5MbVJ2VG05MFEyaGxZMnRUWlhOemFXOXVJRDBnZEhKMVpUdGNiaUFnSUNBdkx5RGxwb0xtbnB6bW5Jbm9ycjdudmE3bW5LemxuTEJ6WlhOemFXOXU2TCtINXB5ZjVwZTI2WmUwWEc0Z0lDQWdhV1lnS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU0FtSmlCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU2tnZTF4dUlDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpTQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwSUNzZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsTzF4dUlDQWdJQ0FnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3NYRzRnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhPaUJUZEhKcGJtY29jM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVwWEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlZ4dUlDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlNCaGN5QnpkSEpwYm1jc1hHNGdJQ0FnSUNBZ0lHUmhkR0U2SUhOMFlYUjFjeTV6WlhOemFXOXVYRzRnSUNBZ2ZTazdYRzU5WEc1Y2JtRnplVzVqSUdaMWJtTjBhVzl1SUdOdlpHVXlVMlZ6YzJsdmJpaGpiMlJsT2lCemRISnBibWNwSUh0Y2JpQWdJQ0JzWlhRZ1pHRjBZVG9nWVc1NU8xeHVJQ0FnSUM4dklHTnZaR1ZVYjFObGMzTnBiMjR1WkdGMFllYVVyK2FNZ2VXSHZlYVZzRnh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1WkdGMFlTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFZ1BTQmhkMkZwZENCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNWtZWFJoS0dOdlpHVXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHUmhkR0VnUFNCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNWtZWFJoSUh4OElIdDlPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1WTI5a1pVNWhiV1VwSUh0Y2JpQWdJQ0FnSUNBZ1pHRjBZVnRqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1amIyUmxUbUZ0WlYwZ1BTQmpiMlJsTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFdVkyOWtaU0E5SUdOdlpHVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2JHVjBJRzlpYWlBOUlIdGNiaUFnSUNBZ0lDQWdkWEpzT2lCeVpYRjFaWE4wU0dGdVpHeGxjaTVtYjNKdFlYUW9ZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1ZFhKc0tTeGNiaUFnSUNBZ0lDQWdaR0YwWVN4Y2JpQWdJQ0FnSUNBZ2JXVjBhRzlrT2lCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNXRaWFJvYjJRZ2ZId2dKMGRGVkNjc1hHNGdJQ0FnSUNBZ0lHaGxZV1JsY2pvZ2RIbHdaVzltSUdOdmJtWnBaeTV6WlhSSVpXRmtaWElnUFQwOUlDZG1kVzVqZEdsdmJpY2dQeUJqYjI1bWFXY3VjMlYwU0dWaFpHVnlLQ2s2SUdOdmJtWnBaeTV6WlhSSVpXRmtaWElzWEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtSmxabTl5WlZObGJtUWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vZ1BTQmpiMjVtYVdjdVltVm1iM0psVTJWdVpDaHZZbW9wTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J6ZEdGeWRDQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4dUlDQWdJQ0FnSUNCM2VDNXlaWEYxWlhOMEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM0dUxtOWlhaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lITjFZMk5sYzNNb2NtVnpPaUJYWldOb1lYUk5hVzVwY0hKdlozSmhiUzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEpsY3k1emRHRjBkWE5EYjJSbElEMDlQU0F5TURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzZJQ1g1cGUyNUxpSzVvcWxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTV5WlhCdmNuUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCbGJtUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1Y21Wd2IzSjBLR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG5KbGNHOXlkQ3dnYzNSaGNuUXNJR1Z1WkNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J6TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY3lBOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbk4xWTJObGMzTW9jbVZ6TG1SaGRHRXNJSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdjeUE5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ2N6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2FOb3VXYm51YWRwZWVhaEhObGMzTnBiMjd2dkl6a3VJM3BuSURvcG9IbGhvMWphR1ZqYTFObGMzTnBiMjVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym1acFp5NWtiMDV2ZEVOb1pXTnJVMlZ6YzJsdmJpQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RGxwb0xtbnB6bW5Jbm9ycjdudmE3bW5LemxuTEJ6WlhOemFXOXU2TCtINXB5ZjVwZTI2WmUwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsSUNZbUlHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tTQXJJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IzZUM1elpYUlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nVTNSeWFXNW5LSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoT2lCemRHRjBkWE11YzJWemMybHZibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9aWEp5YjNKSVlXNWtiR1Z5TG1kbGRFVnljbTl5VFhObktISmxjeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkSGx3WlRvZ1hDSm9kSFJ3TFdWeWNtOXlYQ0lzSUhKbGMzMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiR1YwWlNncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc09pQW9jbVZ6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN2RIbHdaVG9nWENKemVYTjBaVzB0WlhKeWIzSmNJaXdnY21WemZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dUx5b2c1cmlGNTZtNmMyVnpjMmx2YmlBcUwxeHVablZ1WTNScGIyNGdaR1ZzVTJWemMybHZiaWdwSUh0Y2JpQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJpQTlJQ2NuTzF4dUlDQWdJSGQ0TG5KbGJXOTJaVk4wYjNKaFoyVW9lMXh1SUNBZ0lDQWdJQ0JyWlhrNklHTnZibVpwWnk1elpYTnphVzl1VG1GdFpTQmhjeUJ6ZEhKcGJtZGNiaUFnSUNCOUtUdGNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbElDWW1JR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUtTQjdYRzRnSUNBZ0lDQWdJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsSUQwZ1NXNW1hVzVwZEhrN1hHNGdJQ0FnSUNBZ0lIZDRMbkpsYlc5MlpWTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnYldGcGJpaHlaV3hoZEdWa1VtVnhkV1Z6ZEU5aWFqODZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVThkbTlwWkQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2NtVjBjbmtnUFNBaGNtVnNZWFJsWkZKbGNYVmxjM1JQWW1wY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9XbWd1YWVuT2F5b2VhY2llV0ZzK2lCbE9lYWhPaXZ0K2F4Z3UrOGpPbUhqZWl2bGVXTnMraXdnK2VVcU9pSHF1aTZxMXh1SUNBZ0lDQWdJQ0FnSUNBZ1B5QW9LU0E5UGlCdFlXbHVLQ2t1ZEdobGJpaHlaWE52YkhabEtTNWpZWFJqYUNoeVpXcGxZM1FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURscG9MbW5wem1uSW5saGJQb2daVG5tb1RvcjdmbXNZTHZ2SXpwaDQzb3I1WGxqYlBvc0lQbmxLam1pWURsaGJQb2daVG5tb1RvcjdmbXNZSmNiaUFnSUNBZ0lDQWdJQ0FnSURvZ0tDa2dQVDRnY21WeGRXVnpkQ2h5Wld4aGRHVmtVbVZ4ZFdWemRFOWlhaWt1ZEdobGJpaHlaV3hoZEdWa1VtVnhkV1Z6ZEU5aWFpNWZjbVZ6YjJ4MlpTa3VZMkYwWTJnb2NtVnNZWFJsWkZKbGNYVmxjM1JQWW1vdVgzSmxhbVZqZENrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCamFHVmphMHh2WjJsdUtDa3VkR2hsYmlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyOXVabWxuTG1SdlRtOTBRMmhsWTJ0VFpYTnphVzl1SUQ4Z1VISnZiV2x6WlM1eVpYTnZiSFpsS0NrZ09pQmphR1ZqYTFObGMzTnBiMjRvS1Z4dUlDQWdJQ0FnSUNCOUxDQW9lM1JwZEd4bExDQmpiMjUwWlc1MGZTa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdaWEp5YjNKSVlXNWtiR1Z5TG1SdlJYSnliM0lvZEdsMGJHVXNJR052Ym5SbGJuUXNJSEpsZEhKNUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9lM1JwZEd4bExDQmpiMjUwWlc1MGZTazdYRzRnSUNBZ0lDQWdJSDBwTG5Sb1pXNG9LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnZlN3Z0tIdDBhWFJzWlN3Z1kyOXVkR1Z1ZEgwcFBUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pYSnliM0pJWVc1a2JHVnlMbVJ2UlhKeWIzSW9kR2wwYkdVc0lHTnZiblJsYm5Rc0lISmxkSEo1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2UzUnBkR3hsTENCamIyNTBaVzUwZlNrN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJRzFoYVc0c1hHNGdJQ0FnYzJWMFUyVnpjMmx2Yml4Y2JpQWdJQ0JrWld4VFpYTnphVzl1WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICBzZXNzaW9uTmFtZTogXCJzZXNzaW9uXCIsXG4gICAgbG9naW5UcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGNvZGVUb1Nlc3Npb246IHtcbiAgICAgICAgdXJsOiBcIlwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9LFxuICAgIHN1Y2Nlc3NUcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgc2V0SGVhZGVyOiB7fSxcbiAgICB1cmxQZXJmaXg6IFwiXCIsXG4gICAgZG9Ob3RDaGVja1Nlc3Npb246IGZhbHNlLFxuICAgIGVycm9yVGl0bGU6IFwi5pON5L2c5aSx6LSlXCIsXG4gICAgZXJyb3JDb250ZW50OiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICBlcnJvclJldHJ5QnRuOiBmYWxzZSxcbiAgICByZUxvZ2luTGltaXQ6IDMsXG4gICAgZXJyb3JDYWxsYmFjazogbnVsbCxcbiAgICByZXBvcnRDR0k6IGZhbHNlLFxuICAgIG1vY2tKc29uOiBmYWxzZSxcbiAgICBnbG9iYWxEYXRhOiBmYWxzZSxcbiAgICBzZXNzaW9uRXhwaXJlS2V5OiBcInNlc3Npb25FeHBpcmVLZXlcIixcbiAgICBlcnJvckhhbmRsZXI6IG51bGwsXG4gICAgYmVmb3JlU2VuZDogbnVsbCxcbiAgICBzeXN0ZW1FcnJvckhhbmRsZXI6IG51bGwsXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdENvbmZpZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwyTnZibVpwWnk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVVZCTEVsQlFVMHNZVUZCWVN4SFFVRm5RanRKUVVNdlFpeFhRVUZYTEVWQlFVVXNVMEZCVXp0SlFVTjBRaXhaUVVGWk8xRkJRMUlzVDBGQlR5eExRVUZMTEVOQlFVRTdTVUZEYUVJc1EwRkJRenRKUVVORUxHRkJRV0VzUlVGQlJUdFJRVU5ZTEVkQlFVY3NSVUZCUlN4RlFVRkZPMUZCUTFBc1QwRkJUeXhGUVVGRkxHTkJRVTBzUTBGQlF6dExRVU51UWp0SlFVTkVMR05CUVdNN1VVRkRWaXhQUVVGUExFbEJRVWtzUTBGQlFUdEpRVU5tTEVOQlFVTTdTVUZEUkN4VFFVRlRMRVZCUVVVc1JVRkJSVHRKUVVOaUxGTkJRVk1zUlVGQlJTeEZRVUZGTzBsQlEySXNhVUpCUVdsQ0xFVkJRVVVzUzBGQlN6dEpRVU40UWl4VlFVRlZMRVZCUVVVc1RVRkJUVHRKUVVOc1FpeFpRVUZaTEVWQlFWb3NWVUZCWVN4SFFVRlJPMUZCUTJwQ0xFOUJRVThzUjBGQlJ5eERRVUZCTzBsQlEyUXNRMEZCUXp0SlFVTkVMR0ZCUVdFc1JVRkJSU3hMUVVGTE8wbEJRM0JDTEZsQlFWa3NSVUZCUlN4RFFVRkRPMGxCUTJZc1lVRkJZU3hGUVVGRkxFbEJRVWs3U1VGRGJrSXNVMEZCVXl4RlFVRkZMRXRCUVVzN1NVRkRhRUlzVVVGQlVTeEZRVUZGTEV0QlFVczdTVUZEWml4VlFVRlZMRVZCUVVVc1MwRkJTenRKUVVWcVFpeG5Ra0ZCWjBJc1JVRkJSU3hyUWtGQmEwSTdTVUZGY0VNc1dVRkJXU3hGUVVGRkxFbEJRVWs3U1VGRmJFSXNWVUZCVlN4RlFVRkZMRWxCUVVrN1NVRkZhRUlzYTBKQlFXdENMRVZCUVVVc1NVRkJTVHREUVVNelFpeERRVUZETzBGQlJVWXNhMEpCUVdVc1lVRkJZU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVWx1YVhSUGNIUnBiMjRnZlNCbWNtOXRJQ2N1TGk5cGJuUmxjbVpoWTJVblhHNWNibU52Ym5OMElHUmxabUYxYkhSRGIyNW1hV2M2SUVsSmJtbDBUM0IwYVc5dUlEMGdlMXh1SUNBZ0lITmxjM05wYjI1T1lXMWxPaUJjSW5ObGMzTnBiMjVjSWl4Y2JpQWdJQ0JzYjJkcGJsUnlhV2RuWlhJb0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlZ4dUlDQWdJSDBzWEc0Z0lDQWdZMjlrWlZSdlUyVnpjMmx2YmpvZ2UxeHVJQ0FnSUNBZ0lDQjFjbXc2SUZ3aVhDSXNYRzRnSUNBZ0lDQWdJSE4xWTJObGMzTTZJQ2dwUFQ0Z2UzMWNiaUFnSUNCOUxGeHVJQ0FnSUhOMVkyTmxjM05VY21sbloyVnlLQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpWeHVJQ0FnSUgwc1hHNGdJQ0FnYzJWMFNHVmhaR1Z5T2lCN2ZTeGNiaUFnSUNCMWNteFFaWEptYVhnNklGd2lYQ0lzWEc0Z0lDQWdaRzlPYjNSRGFHVmphMU5sYzNOcGIyNDZJR1poYkhObExGeHVJQ0FnSUdWeWNtOXlWR2wwYkdVNklGd2k1cE9ONUwyYzVhU3g2TFNsWENJc1hHNGdJQ0FnWlhKeWIzSkRiMjUwWlc1MEtISmxjem9nWVc1NUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE5jYmlBZ0lDQjlMRnh1SUNBZ0lHVnljbTl5VW1WMGNubENkRzQ2SUdaaGJITmxMRnh1SUNBZ0lISmxURzluYVc1TWFXMXBkRG9nTXl4Y2JpQWdJQ0JsY25KdmNrTmhiR3hpWVdOck9pQnVkV3hzTEZ4dUlDQWdJSEpsY0c5eWRFTkhTVG9nWm1Gc2MyVXNYRzRnSUNBZ2JXOWphMHB6YjI0NklHWmhiSE5sTEZ4dUlDQWdJR2RzYjJKaGJFUmhkR0U2SUdaaGJITmxMRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN2xuS2ptbkt6bG5MRG52SlBsclpqbm1vUnJaWGxjYmlBZ0lDQnpaWE56YVc5dVJYaHdhWEpsUzJWNU9pQmNJbk5sYzNOcGIyNUZlSEJwY21WTFpYbGNJaXhjYmlBZ0lDQXZMeURvaDZybHJwcmt1WW5wbEpub3I2L2xwSVRua0libGg3M21sYkJjYmlBZ0lDQmxjbkp2Y2toaGJtUnNaWEk2SUc1MWJHd3NYRzRnSUNBZ0x5OGc2SyszNXJHQzVZK1I2WUNCNVltTjc3eU01bytRNUw2YmFHOXZhK2U3bWVXOGdPV1BrZWlBaGVpSHF1V3VtdVM1aWVTL3J1YVV1ZVdQa2VtQWdlV0doZVd1dVZ4dUlDQWdJR0psWm05eVpWTmxibVE2SUc1MWJHd3NYRzRnSUNBZ0x5OGc2SWVxNWE2YTVMbUo1N083NTd1ZjZaU1o2Syt2NWFTRTU1Q0c1WWU5NXBXdzc3eUk1NzJSNTd1YzZaU1o2Syt2Nzd5SlhHNGdJQ0FnYzNsemRHVnRSWEp5YjNKSVlXNWtiR1Z5T2lCdWRXeHNMRnh1ZlR0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1pHVm1ZWFZzZEVOdmJtWnBaenRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXNzaW9uOiAnJyxcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eSxcbiAgICBpc0VuYWJsZUJhY2t1cERvbWFpbjogZmFsc2Vcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljM1JoZEhWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMM04wWVhSMWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxHdENRVUZsTzBsQlExZ3NUMEZCVHl4RlFVRkZMRVZCUVZrN1NVRkZja0lzWVVGQllTeEZRVUZGTEZGQlFXdENPMGxCUldwRExHOUNRVUZ2UWl4RlFVRkZMRXRCUVVzN1EwRkRka0lzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCelpYTnphVzl1T2lBbkp5QmhjeUJ6ZEhKcGJtY3NYRzRnSUNBZ0x5OGdjMlZ6YzJsdmJ1aS9oK2FjbitlYWhPYVh0dW1YdE9lQ3VWeHVJQ0FnSUhObGMzTnBiMjVGZUhCcGNtVTZJRWx1Wm1sdWFYUjVJR0Z6SUc1MWJXSmxjaXhjYmlBZ0lDQXZMeURtbUsvbGtLYmxrSy9ubEtqbHBJZm5sS2psbjUvbGtJMWNiaUFnSUNCcGMwVnVZV0pzWlVKaFkydDFjRVJ2YldGcGJqb2dabUZzYzJWY2JuMGdZWE1nWVc1NVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgTElORUZFRUQgPSAvXFx1MDAwQS9nO1xudmFyIENBUlJJQUdFUkVUVVJOID0gL1xcdTAwMEQvZztcbnZhciBMSU5FX1NFUEFSQVRPUiA9IC9cXHUyMDI4L2c7XG52YXIgUEFSQUdSQVBIX1NFUEFSQVRPUiA9IC9cXHUyMDI5L2c7XG5mdW5jdGlvbiByZXBsYWNlKHJlcykge1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKExJTkVGRUVELCBcIlwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZShDQVJSSUFHRVJFVFVSTiwgXCJcIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoTElORV9TRVBBUkFUT1IsIFwiXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKFBBUkFHUkFQSF9TRVBBUkFUT1IsIFwiXCIpO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmRlZmF1bHQgPSByZXBsYWNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYW5OdmJsTjFjR1Z5YzJWMExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNWMGFXd3Zhbk52YmxOMWNHVnljMlYwTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJWMEVzU1VGQlRTeFJRVUZSTEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUXpOQ0xFbEJRVTBzWTBGQll5eEhRVUZITEZOQlFWTXNRMEZCUXp0QlFVTnFReXhKUVVGTkxHTkJRV01zUjBGQlJ5eFRRVUZUTEVOQlFVTTdRVUZEYWtNc1NVRkJUU3h0UWtGQmJVSXNSMEZCUnl4VFFVRlRMRU5CUVVNN1FVRkZkRU1zVTBGQmQwSXNUMEZCVHl4RFFVRkRMRWRCUVZjN1NVRkRla01zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzBsQlEyaERMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEdOQlFXTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVOMFF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhqUVVGakxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTVUZEZEVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTVUZETTBNc1QwRkJUeXhIUVVGSExFTkJRVUU3UVVGRFdpeERRVUZETzBGQlRrUXNNRUpCVFVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUFnVlNzeU1ESTRJR0Z1WkNCVkt6SXdNamtnWVhKbElHRnNiRzkzWldRZ2FXNXphV1JsSUhOMGNtbHVaM01nYVc0Z1NsTlBUaUFvWVhNZ1lXeHNJR3hwZEdWeVlXeGNiaUFnSUNCVmJtbGpiMlJsSUdOb1lYSmhZM1JsY25NcElHSjFkQ0JLWVhaaFUyTnlhWEIwSUdSbFptbHVaWE1nZEdobGJTQmhjeUJ1Wlhkc2FXNWxYRzRnSUNBZ2MyVndaWEpoZEc5eWN5NGdRbVZqWVhWelpTQnVieUJzYVhSbGNtRnNJRzVsZDJ4cGJtVnpJR0Z5WlNCaGJHeHZkMlZrSUdsdUlHRWdjM1J5YVc1bkxDQjBhR2x6WEc0Z0lDQWdZMkYxYzJWeklHRWdVR0Z5YzJWRmNuSnZjaUJwYmlCMGFHVWdZbkp2ZDNObGNpNGdWMlVnZDI5eWF5QmhjbTkxYm1RZ2RHaHBjeUJwYzNOMVpTQmllVnh1SUNBZ0lISmxjR3hoWTJsdVp5QjBhR1Z0SUhkcGRHZ2dkR2hsSUdWelkyRndaV1FnZG1WeWMybHZiaTRnVkdocGN5QnphRzkxYkdRZ1ltVWdjMkZtWlNCaVpXTmhkWE5sWEc0Z0lDQWdZV05qYjNKa2FXNW5JSFJ2SUhSb1pTQktVMDlPSUhOd1pXTXNJSFJvWlhObElHTm9ZWEpoWTNSbGNuTWdZWEpsSUNwdmJteDVLaUIyWVd4cFpDQnBibk5wWkdWY2JpQWdJQ0JoSUhOMGNtbHVaeUJoYm1RZ2MyaHZkV3hrSUhSb1pYSmxabTl5WlNCdWIzUWdZbVVnY0hKbGMyVnVkQ0JoYm5rZ2IzUm9aWElnY0d4aFkyVnpMbHh1WEc0Z0lDQWdiVzl5WlNCcGJtWnZjbTFoZEdsdmJqb2dhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMM1JqTXprdmNISnZjRzl6WVd3dGFuTnZiaTF6ZFhCbGNuTmxkRnh1S2k5Y2JseHVZMjl1YzNRZ1RFbE9SVVpGUlVRZ1BTQXZYRngxTURBd1FTOW5PMXh1WTI5dWMzUWdRMEZTVWtsQlIwVlNSVlJWVWs0Z1BTQXZYRngxTURBd1JDOW5PMXh1WTI5dWMzUWdURWxPUlY5VFJWQkJVa0ZVVDFJZ1BTQXZYRngxTWpBeU9DOW5PMXh1WTI5dWMzUWdVRUZTUVVkU1FWQklYMU5GVUVGU1FWUlBVaUE5SUM5Y1hIVXlNREk1TDJjN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUlISmxjR3hoWTJVb2NtVnpPaUJ6ZEhKcGJtY3BJSHRjYmlBZ2NtVnpJRDBnY21WekxuSmxjR3hoWTJVb1RFbE9SVVpGUlVRc0lGd2lYQ0lwTzF4dUlDQnlaWE1nUFNCeVpYTXVjbVZ3YkdGalpTaERRVkpTU1VGSFJWSkZWRlZTVGl3Z1hDSmNJaWs3WEc0Z0lISmxjeUE5SUhKbGN5NXlaWEJzWVdObEtFeEpUa1ZmVTBWUVFWSkJWRTlTTENCY0lsd2lLVHRjYmlBZ2NtVnpJRDBnY21WekxuSmxjR3hoWTJVb1VFRlNRVWRTUVZCSVgxTkZVRUZTUVZSUFVpd2dYQ0pjSWlrN1hHNGdJSEpsZEhWeWJpQnlaWE5jYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBzaG93KHR4dCkge1xuICAgIHd4LnNob3dUb2FzdCh7XG4gICAgICAgIHRpdGxlOiB0eXBlb2YgdHh0ID09PSAnYm9vbGVhbicgPyAn5Yqg6L295LitJyA6IHR4dCxcbiAgICAgICAgaWNvbjogJ2xvYWRpbmcnLFxuICAgICAgICBtYXNrOiB0cnVlLFxuICAgICAgICBkdXJhdGlvbjogNjAwMDBcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgd3guaGlkZVRvYXN0KHt9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzaG93OiBzaG93LFxuICAgIGhpZGU6IGhpZGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzloWkdsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMMnh2WVdScGJtY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeFRRVUZUTEVsQlFVa3NRMEZCUXl4SFFVRnhRanRKUVVNdlFpeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTFRc1MwRkJTeXhGUVVGRkxFOUJRVThzUjBGQlJ5eExRVUZMTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITzFGQlF6ZERMRWxCUVVrc1JVRkJSU3hUUVVGVE8xRkJRMllzU1VGQlNTeEZRVUZGTEVsQlFVazdVVUZEVml4UlFVRlJMRVZCUVVVc1MwRkJTenRMUVVOc1FpeERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhKUVVGSk8wbEJRMVFzUlVGQlJTeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOeVFpeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hKUVVGSkxFMUJRVUU3U1VGRFNpeEpRVUZKTEUxQlFVRTdRMEZEVUN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWm5WdVkzUnBiMjRnYzJodmR5aDBlSFE2SUdKdmIyeGxZVzRnZkNCemRISnBibWNwSUh0Y2JpQWdJQ0IzZUM1emFHOTNWRzloYzNRb2UxeHVJQ0FnSUNBZ0lDQjBhWFJzWlRvZ2RIbHdaVzltSUhSNGRDQTlQVDBnSjJKdmIyeGxZVzRuSUQ4Z0orV0tvT2k5dmVTNHJTY2dPaUIwZUhRc1hHNGdJQ0FnSUNBZ0lHbGpiMjQ2SUNkc2IyRmthVzVuSnl4Y2JpQWdJQ0FnSUNBZ2JXRnphem9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdaSFZ5WVhScGIyNDZJRFl3TURBd1hHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnYUdsa1pTZ3BJSHRjYmlBZ0lDQjNlQzVvYVdSbFZHOWhjM1FvZTMwcE8xeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjMmh2ZHl4Y2JpQWdJQ0JvYVdSbFhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHNldFBhcmFtcyh1cmwsIHBhcmFtcykge1xuICAgIGlmICh1cmwgPT09IHZvaWQgMCkgeyB1cmwgPSBcIlwiOyB9XG4gICAgdmFyIHF1ZXJ5U3RyaW5nSW5kZXggPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gICAgdmFyIGt2cCA9IHt9O1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgdmFyIG9sZFF1ZXJ5U3RyaW5nXzEgPSB1cmwuc3Vic3RyKHF1ZXJ5U3RyaW5nSW5kZXggKyAxKS5zcGxpdChcIiZcIik7XG4gICAgICAgIG9sZFF1ZXJ5U3RyaW5nXzEuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgdmFyIGt2ID0gb2xkUXVlcnlTdHJpbmdfMVtpXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICBrdnBba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBrdnAgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwga3ZwKSwgcGFyYW1zKTtcbiAgICB2YXIgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhrdnApXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ICsgXCI9XCIgKyBlbmNvZGVVUkkoa3ZwW2tleV0pO1xuICAgIH0pXG4gICAgICAgIC5qb2luKFwiJlwiKTtcbiAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RyaW5nSW5kZXggKyAxKSArIHF1ZXJ5U3RyaW5nO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVybCArIFwiP1wiICsgcXVlcnlTdHJpbmc7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVwbGFjZURvbWFpbih1cmwsIGRvbWFpbikge1xuICAgIGlmICh1cmwgPT09IHZvaWQgMCkgeyB1cmwgPSBcIlwiOyB9XG4gICAgaWYgKGRvbWFpbiA9PT0gdm9pZCAwKSB7IGRvbWFpbiA9IFwiXCI7IH1cbiAgICBkb21haW4gPSBkb21haW4ucmVwbGFjZSgvXmh0dHAocyk/OlxcL1xcLy8sICcnKS5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgIHJldHVybiB1cmwucmVwbGFjZSgvXmh0dHAocyk/OlxcL1xcLyguKj8pXFwvLywgXCJodHRwczovL1wiICsgZG9tYWluICsgXCIvXCIpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNldFBhcmFtczogc2V0UGFyYW1zLFxuICAgIHJlcGxhY2VEb21haW46IHJlcGxhY2VEb21haW4sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhKc0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNWMGFXd3ZkWEpzTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN4VFFVRlRMRk5CUVZNc1EwRkJReXhIUVVGblFpeEZRVUZGTEUxQlFXTTdTVUZCYUVNc2IwSkJRVUVzUlVGQlFTeFJRVUZuUWp0SlFVTXZRaXhKUVVGTkxHZENRVUZuUWl4SFFVRlhMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEYkVRc1NVRkJTU3hIUVVGSExFZEJRVkVzUlVGQlJTeERRVUZETzBsQlEyeENMRWxCUVVrc1owSkJRV2RDTEVsQlFVa3NRMEZCUXl4RlFVRkZPMUZCUTNaQ0xFbEJRVTBzWjBKQlFXTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVnVSU3huUWtGQll5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE8xbEJRM2hDTEVsQlFVMHNSVUZCUlN4SFFVRmhMR2RDUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnhFTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka0lzUTBGQlF5eERRVUZETEVOQlFVTTdTMEZEVGp0SlFVVkVMRWRCUVVjc2VVSkJRVThzUjBGQlJ5eEhRVUZMTEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUlRGQ0xFbEJRVTBzVjBGQlZ5eEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8xTkJReTlDTEVkQlFVY3NRMEZCUXl4VlFVRkJMRWRCUVVjN1VVRkRTaXhQUVVGVkxFZEJRVWNzVTBGQlNTeFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGSExFTkJRVU03U1VGRE0wTXNRMEZCUXl4RFFVRkRPMU5CUTBRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlJXWXNTVUZCU1N4blFrRkJaMElzU1VGQlNTeERRVUZETEVWQlFVVTdVVUZEZGtJc1QwRkJUeXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUlN4blFrRkJaMElzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4WFFVRlhMRU5CUVVNN1MwRkRMMFE3VTBGQlRUdFJRVU5JTEU5QlFVOHNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGRGJFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXhoUVVGaExFTkJRVU1zUjBGQlowSXNSVUZCUlN4TlFVRnRRanRKUVVGeVF5eHZRa0ZCUVN4RlFVRkJMRkZCUVdkQ08wbEJRVVVzZFVKQlFVRXNSVUZCUVN4WFFVRnRRanRKUVVWNFJDeE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhuUWtGQlowSXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUTJwRkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4MVFrRkJkVUlzUlVGQlJTeGhRVUZYTEUxQlFVMHNUVUZCUnl4RFFVRkRMRU5CUVVNN1FVRkRkRVVzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1UwRkJVeXhYUVVGQk8wbEJRMVFzWVVGQllTeGxRVUZCTzBOQlEyaENMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5Sm1kVzVqZEdsdmJpQnpaWFJRWVhKaGJYTW9kWEpzT2lCemRISnBibWNnUFNCY0lsd2lMQ0J3WVhKaGJYTTZJRzlpYW1WamRDa2dlMXh1SUNBZ0lHTnZibk4wSUhGMVpYSjVVM1J5YVc1blNXNWtaWGc2SUc1MWJXSmxjaUE5SUhWeWJDNXBibVJsZUU5bUtGd2lQMXdpS1R0Y2JpQWdJQ0JzWlhRZ2EzWndPaUJoYm5rZ1BTQjdmVHRjYmlBZ0lDQnBaaUFvY1hWbGNubFRkSEpwYm1kSmJtUmxlQ0ErUFNBd0tTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHOXNaRkYxWlhKNVUzUnlhVzVuSUQwZ2RYSnNMbk4xWW5OMGNpaHhkV1Z5ZVZOMGNtbHVaMGx1WkdWNElDc2dNU2t1YzNCc2FYUW9YQ0ltWENJcE8xeHVJQ0FnSUNBZ0lDQXZMeUJBZEhNdGFXZHViM0psWEc0Z0lDQWdJQ0FnSUc5c1pGRjFaWEo1VTNSeWFXNW5MbVp2Y2tWaFkyZ29LSGdzSUdrcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUd0Mk9pQnpkSEpwYm1kYlhTQTlJRzlzWkZGMVpYSjVVM1J5YVc1blcybGRMbk53YkdsMEtGd2lQVndpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3QyY0Z0cmRsc3dYVjBnUFNCcmRsc3hYVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYTNad0lEMGdleTR1TG10MmNDd2dMaTR1Y0dGeVlXMXpmVHRjYmx4dUlDQWdJR052Ym5OMElIRjFaWEo1VTNSeWFXNW5JRDBnVDJKcVpXTjBMbXRsZVhNb2EzWndLVnh1SUNBZ0lDQWdJQ0F1YldGd0tHdGxlU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZQ1I3YTJWNWZUMGtlMlZ1WTI5a1pWVlNTU2hyZG5CYmEyVjVYU2w5WUR0Y2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNBZ0lDQWdMbXB2YVc0b1hDSW1YQ0lwTzF4dVhHNGdJQ0FnYVdZZ0tIRjFaWEo1VTNSeWFXNW5TVzVrWlhnZ1BqMGdNQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZFhKc0xuTjFZbk4wY21sdVp5Z3dMQ0J4ZFdWeWVWTjBjbWx1WjBsdVpHVjRJQ3NnTVNrZ0t5QnhkV1Z5ZVZOMGNtbHVaenRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RYSnNJQ3NnWENJL1hDSWdLeUJ4ZFdWeWVWTjBjbWx1Wnp0Y2JpQWdJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJSEpsY0d4aFkyVkViMjFoYVc0b2RYSnNPaUJ6ZEhKcGJtY2dQU0JjSWx3aUxDQmtiMjFoYVc0NklITjBjbWx1WnlBOUlGd2lYQ0lwSUh0Y2JpQWdJQ0F2THlEa3Y1M29yNEZrYjIxaGFXN2xqNnJsaklYbGtLdmxuNS9sa0kzdnZJem1zcUhtbklrZ2FIUjBjQ2h6S1NEbGlZM252SUFnNVpLTUlDOGc1WkNPNTd5QVhHNGdJQ0FnWkc5dFlXbHVJRDBnWkc5dFlXbHVMbkpsY0d4aFkyVW9MMTVvZEhSd0tITXBQenBjWEM5Y1hDOHZMQ0FuSnlrdWNtVndiR0ZqWlNndlhGd3ZKQzhzSUNjbktUdGNiaUFnSUNCeVpYUjFjbTRnZFhKc0xuSmxjR3hoWTJVb0wxNW9kSFJ3S0hNcFB6cGNYQzljWEM4b0xpby9LVnhjTHk4c0lHQm9kSFJ3Y3pvdkx5UjdaRzl0WVdsdWZTOWdLVHRjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUhObGRGQmhjbUZ0Y3l4Y2JpQWdJQ0J5WlhCc1lXTmxSRzl0WVdsdUxGeHVmVHRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmVyc2lvbiA9IHZvaWQgMDtcbnZhciB2ZXJzaW9uID0gX19WRVJTSU9OX187XG5leHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZG1WeWMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5MlpYSnphVzl1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096dEJRVVZCTEVsQlFVMHNUMEZCVHl4SFFVRkhMRmRCUVZjc1EwRkJRenRCUVVWdVFpd3dRa0ZCVHlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltUmxZMnhoY21VZ1kyOXVjM1FnWDE5V1JWSlRTVTlPWDE4NklITjBjbWx1Wnp0Y2JseHVZMjl1YzNRZ2RtVnljMmx2YmlBOUlGOWZWa1ZTVTBsUFRsOWZPMXh1WEc1bGVIQnZjblFnZXlCMlpYSnphVzl1SUgwN1hHNGlYWDA9Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhdGNoSGFuZGxlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2pzb25TdXBlcnNldC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdXRpbC9sb2FkaW5nLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL3VybC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLCszQjs7Ozs7Ozs7Ozs7O0FDWjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxD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QTtBQUNBLDJDQUEyQywyaEU7Ozs7Ozs7Ozs7OztBQ2Q5QjtBQUNiLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsbWdDOzs7Ozs7Ozs7Ozs7QUNqQjlCO0FBQ2I7QUFDQTtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEM7QUFDQSx5QkFBeUIsVUFBVTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFVBQVU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixVQUFVO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLDJ0Sjs7Ozs7Ozs7Ozs7O0FDckU5QjtBQUNiLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0EsY0FBYyxPQUFXO0FBQ3pCO0FBQ0EsMkNBQTJDLHVXIiwiZmlsZSI6IndlUmVxdWVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdXJsUGVyZml4OiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZVRpbWU6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUsXG4gICAgICAgIHNlc3Npb25FeHBpcmVLZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlXG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWjJWMFEyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMkZ3YVM5blpYUkRiMjVtYVdjdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVc5RE8wRkJSWEJETEcxQ1FVRmxPMGxCUTFnc1QwRkJUenRSUVVOSUxGTkJRVk1zUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRk5CUVZNN1VVRkRNMElzYVVKQlFXbENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJN1VVRkRNME1zWjBKQlFXZENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJN1VVRkRla01zWVVGQllTeEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1lVRkJZVHRMUVVOMFF5eERRVUZCTzBGQlEwd3NRMEZCUXl4RlFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYzNSaGRIVnpJR1p5YjIwZ0p5NHVMM04wYjNKbEwzTjBZWFIxY3lkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tDa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJSFZ5YkZCbGNtWnBlRG9nWTI5dVptbG5MblZ5YkZCbGNtWnBlQ3hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpWUnBiV1U2SUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU3hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpVdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3NYRzRnSUNBZ0lDQWdJSE5sYzNOcGIyNUZlSEJwY21VNklITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxYRzRnSUNBZ2ZWeHVmVHRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb247XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZaMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVVZ3UXl4dFFrRkJaVHRKUVVOWUxFOUJRVThzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVFN1FVRkRla0lzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElDZ3BJRDArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjM1JoZEhWekxuTmxjM05wYjI1Y2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnXzEuZGVmYXVsdCwgcGFyYW1zKTtcbiAgICBjb25zb2xlLmxvZyhjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUpO1xuICAgIHRyeSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUpIHx8ICcnO1xuICAgIH1cbiAgICBjYXRjaCAoZSkgeyB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5IHx8IFwic2Vzc2lvbkV4cGlyZUtleVwiKSB8fCBJbmZpbml0eTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHsgfVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVwZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmFXNXBkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVU53UXl3d1EwRkJiME03UVVGSGNFTXNiVUpCUVdVc1ZVRkJReXhOUVVGdFFqdEpRVU12UWl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRPVUlzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBsQlF5OUNMRWxCUVVrN1VVRkRRU3huUWtGQlRTeERRVUZETEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNc1kwRkJZeXhEUVVGRExHZENRVUZOTEVOQlFVTXNWMEZCV1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wdEJRMnBGTzBsQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1IwRkJSVHRKUVVOa0xFbEJRVWs3VVVGRFFTeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhGUVVGRkxFTkJRVU1zWTBGQll5eERRVUZETEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTEVsQlFVa3NhMEpCUVd0Q0xFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTTdTMEZEZGtjN1NVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeEhRVUZGTzBGQlEyeENMRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4dWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNXBiWEJ2Y25RZ2V5QkpTVzVwZEU5d2RHbHZiaUI5SUdaeWIyMGdKeTR1TDJsdWRHVnlabUZqWlNkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tIQmhjbUZ0Y3pvZ1NVbHVhWFJQY0hScGIyNHBJRDArSUh0Y2JpQWdJQ0JQWW1wbFkzUXVZWE56YVdkdUtHTnZibVpwWnl3Z2NHRnlZVzF6S1R0Y2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloamIyNW1hV2N1WlhKeWIzSlVhWFJzWlNrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI0Z1BTQjNlQzVuWlhSVGRHOXlZV2RsVTNsdVl5aGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVWhLU0I4ZkNBbkp6dGNiaUFnSUNCOUlHTmhkR05vSUNobEtTQjdmVnh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVSWGh3YVhKbElEMGdkM2d1WjJWMFUzUnZjbUZuWlZONWJtTW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrZ2ZId2dYQ0p6WlhOemFXOXVSWGh3YVhKbFMyVjVYQ0lwSUh4OElFbHVabWx1YVhSNU8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdDlYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKCk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOW5hVzR1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZZWEJwTDJ4dloybHVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNa1JCUVhGRU8wRkJSWEpFTEcxQ1FVRmxPMGxCUTFnc1QwRkJUeXgzUWtGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkJPMEZCUTJoRExFTkJRVU1zUlVGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnpaWE56YVc5dVRXRnVZV2RsY2lCbWNtOXRJQ2N1TGk5dGIyUjFiR1V2YzJWemMybHZiazFoYm1GblpYSW5YRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJQ2dwSUQwK0lIdGNiaUFnSUNCeVpYUjFjbTRnYzJWemMybHZiazFoYm1GblpYSXViV0ZwYmlncFhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnJlcXVlc3Qob2JqKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WeGRXVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2Y21WeGRXVnpkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGUkxFZEJRVzFDTzBsQlEzUkRMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1FVRkRkRU1zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1SUgwZ1puSnZiU0FuTGk0dmFXNTBaWEptWVdObEoxeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQThWRkpsYzNBK0tHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBPaUJRY205dGFYTmxQRlJTWlhOd1BpQTlQaUI3WEc0Z0lDQWdjbVYwZFhKdUlISmxjWFZsYzNSSVlXNWtiR1Z5TG5KbGNYVmxjM1FvYjJKcUtWeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3Nlc3Npb25NYW5hZ2VyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LnNldFNlc3Npb24oc2Vzc2lvbik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZjMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVVZ5UkN4dFFrRkJaU3hWUVVGRExFOUJRV1U3U1VGRE0wSXNkMEpCUVdNc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZEZGtNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElITmxjM05wYjI1TllXNWhaMlZ5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl6WlhOemFXOXVUV0Z1WVdkbGNpZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLSE5sYzNOcGIyNDZJSE4wY21sdVp5a2dQVDRnZTF4dUlDQWdJSE5sYzNOcGIyNU5ZVzVoWjJWeUxuTmxkRk5sYzNOcGIyNG9jMlZ6YzJsdmJpazdYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYQnNiMkZrUm1sc1pTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZkWEJzYjJGa1JtbHNaUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGRExFZEJRWE5DTzBsQlEyeERMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1FVRkRla01zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCN0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlsY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGluaXRfMSA9IHJlcXVpcmUoXCIuL2FwaS9pbml0XCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL2FwaS9yZXF1ZXN0XCIpO1xudmFyIHVwbG9hZEZpbGVfMSA9IHJlcXVpcmUoXCIuL2FwaS91cGxvYWRGaWxlXCIpO1xudmFyIHNldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9zZXRTZXNzaW9uXCIpO1xudmFyIGxvZ2luXzEgPSByZXF1aXJlKFwiLi9hcGkvbG9naW5cIik7XG52YXIgZ2V0U2Vzc2lvbl8xID0gcmVxdWlyZShcIi4vYXBpL2dldFNlc3Npb25cIik7XG52YXIgZ2V0Q29uZmlnXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0Q29uZmlnXCIpO1xudmFyIHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG52YXIgd2VSZXF1ZXN0T2JqZWN0ID0ge1xuICAgIGluaXQ6IGluaXRfMS5kZWZhdWx0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3RfMS5kZWZhdWx0LFxuICAgIHVwbG9hZEZpbGU6IHVwbG9hZEZpbGVfMS5kZWZhdWx0LFxuICAgIHNldFNlc3Npb246IHNldFNlc3Npb25fMS5kZWZhdWx0LFxuICAgIGxvZ2luOiBsb2dpbl8xLmRlZmF1bHQsXG4gICAgZ2V0U2Vzc2lvbjogZ2V0U2Vzc2lvbl8xLmRlZmF1bHQsXG4gICAgZ2V0Q29uZmlnOiBnZXRDb25maWdfMS5kZWZhdWx0LFxuICAgIHZlcnNpb246IHZlcnNpb25fMS52ZXJzaW9uXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gd2VSZXF1ZXN0T2JqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeHRRMEZCTmtJN1FVRkROMElzZVVOQlFXMURPMEZCUTI1RExDdERRVUY1UXp0QlFVTjZReXdyUTBGQmVVTTdRVUZEZWtNc2NVTkJRU3RDTzBGQlF5OUNMQ3REUVVGNVF6dEJRVU42UXl3MlEwRkJkVU03UVVGRmRrTXNjVU5CUVcxRE8wRkJSVzVETEVsQlFVMHNaVUZCWlN4SFFVRmpPMGxCUTJwRExFbEJRVWtzWjBKQlFVRTdTVUZEU2l4UFFVRlBMRzFDUVVGQk8wbEJRMUFzVlVGQlZTeHpRa0ZCUVR0SlFVTldMRlZCUVZVc2MwSkJRVUU3U1VGRFZpeExRVUZMTEdsQ1FVRkJPMGxCUTB3c1ZVRkJWU3h6UWtGQlFUdEpRVU5XTEZOQlFWTXNjVUpCUVVFN1NVRkRWQ3hQUVVGUExHMUNRVUZCTzBOQlExSXNRMEZCUXp0QlFVVkdMR3RDUVVGbExHVkJRV1VzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnBibWwwSUdaeWIyMGdYQ0l1TDJGd2FTOXBibWwwWENKY2JtbHRjRzl5ZENCeVpYRjFaWE4wSUdaeWIyMGdYQ0l1TDJGd2FTOXlaWEYxWlhOMFhDSmNibWx0Y0c5eWRDQjFjR3h2WVdSR2FXeGxJR1p5YjIwZ1hDSXVMMkZ3YVM5MWNHeHZZV1JHYVd4bFhDSmNibWx0Y0c5eWRDQnpaWFJUWlhOemFXOXVJR1p5YjIwZ1hDSXVMMkZ3YVM5elpYUlRaWE56YVc5dVhDSmNibWx0Y0c5eWRDQnNiMmRwYmlCbWNtOXRJRndpTGk5aGNHa3ZiRzluYVc1Y0lseHVhVzF3YjNKMElHZGxkRk5sYzNOcGIyNGdabkp2YlNCY0lpNHZZWEJwTDJkbGRGTmxjM05wYjI1Y0lseHVhVzF3YjNKMElHZGxkRU52Ym1acFp5Qm1jbTl0SUZ3aUxpOWhjR2t2WjJWMFEyOXVabWxuWENKY2JtbHRjRzl5ZENCN0lIZGxVbVZ4ZFdWemRDQjlJR1p5YjIwZ1hDSXVMMmx1ZEdWeVptRmpaVndpWEc1cGJYQnZjblFnZXlCMlpYSnphVzl1SUgwZ1puSnZiU0FuTGk5MlpYSnphVzl1SjF4dVhHNWpiMjV6ZENCM1pWSmxjWFZsYzNSUFltcGxZM1E2SUhkbFVtVnhkV1Z6ZENBOUlIdGNiaUFnYVc1cGRDeGNiaUFnY21WeGRXVnpkQ3hjYmlBZ2RYQnNiMkZrUm1sc1pTeGNiaUFnYzJWMFUyVnpjMmx2Yml4Y2JpQWdiRzluYVc0c1hHNGdJR2RsZEZObGMzTnBiMjRzWEc0Z0lHZGxkRU52Ym1acFp5eGNiaUFnZG1WeWMybHZibHh1ZlR0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2QyVlNaWEYxWlhOMFQySnFaV04wTzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGdldChvYmopIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3eC5nZXRTdG9yYWdlKHtcbiAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVzLmRhdGEpKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZXMuZGF0YSwgeyBpc0NhY2hlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0KG9iaiwgcmVhbERhdGEpIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlYWxEYXRhKSkpIHtcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgICAgICBkYXRhOiByZWFsRGF0YVxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgZ2V0OiBnZXQsXG4gICAgc2V0OiBzZXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMkZqYUdWTllXNWhaMlZ5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWpZV05vWlUxaGJtRm5aWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkZRU3hUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUZ0UWp0SlFVTTFRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlR0UlFVTm9RaXhQUVVGUE8wdEJRMVk3U1VGRFJDeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eFRRVUZUTzFGQlEyeENMRTlCUVU4c1dVRkJSU3hIUVVGSE8xbEJRMUlzU1VGRFNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrN1owSkJRMnhDTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExGVkJRVlVzU1VGQlNTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVU14UkR0blFrRkRSU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRMjVETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGQk8ybENRVU42UXp0aFFVTktPMWxCUTBRc1NVRkJSeXhQUVVGUExFZEJRVWNzUTBGQlF5eFJRVUZSTEV0QlFVc3NWVUZCVlN4RlFVRkZPMmRDUVVOdVF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1lVRkRiRUk3VVVGRFRDeERRVUZETzB0QlEwb3NRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFXMUNMRVZCUVVjc1VVRkJlVUk3U1VGRGVFUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFVkJRVVU3VVVGRGFFSXNUMEZCVHp0TFFVTldPMGxCUTBRc1NVRkRTU3hIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEVsQlFVazdVVUZEYkVJc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eExRVUZMTEV0QlFVc3NWVUZCVlN4SlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSVUZETVVRN1VVRkRSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFsQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhUUVVGVE8xbEJRMnhDTEVsQlFVa3NSVUZCUlN4UlFVRlJPMU5CUTJwQ0xFTkJRVU1zUTBGQlFUdExRVU5NTzBGQlEwd3NRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzUjBGQlJ5eExRVUZCTzBsQlEwZ3NSMEZCUnl4TFFVRkJPME5CUTA0c1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aVhHNWNibVoxYm1OMGFXOXVJR2RsZENodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUtTQjdYRzRnSUNBZ2FXWWdLQ0Z2WW1vdWIzSnBaMmx1VlhKc0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNGdJQ0FnZDNndVoyVjBVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJR3RsZVRvZ2IySnFMbTl5YVdkcGJsVnliQ3hjYmlBZ0lDQWdJQ0FnYzNWalkyVnpjeUFvY21WektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OaFkyaGxJRDA5UFNCMGNuVmxJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS0hSNWNHVnZaaUJ2WW1vdVkyRmphR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaUFtSmlCdlltb3VZMkZqYUdVb2NtVnpMbVJoZEdFcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91YzNWalkyVnpjeUE5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTV6ZFdOalpYTnpLSEpsY3k1a1lYUmhMQ0I3YVhORFlXTm9aVG9nZEhKMVpYMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZb2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OdmJYQnNaWFJsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJ6WlhRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQXNJSEpsWVd4RVlYUmhPaUJ6ZEhKcGJtY2dmQ0J2WW1wbFkzUXBJSHRjYmlBZ0lDQnBaaUFvSVc5aWFpNXZjbWxuYVc1VmNtd3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQWdJRzlpYWk1allXTm9aU0E5UFQwZ2RISjFaU0I4ZkZ4dUlDQWdJQ0FnSUNBb2RIbHdaVzltSUc5aWFpNWpZV05vWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpSUNZbUlHOWlhaTVqWVdOb1pTaHlaV0ZzUkdGMFlTa3BYRzRnSUNBZ0tTQjdYRzRnSUNBZ0lDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQnZZbW91YjNKcFoybHVWWEpzTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2NtVmhiRVJoZEdGY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFFzWEc0Z0lDQWdjMlYwWEc1OU8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2F0Y2hIYW5kbGVyID0gdm9pZCAwO1xudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBFcnJvcldpdGhEYXRhID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRXJyb3JXaXRoRGF0YSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBFcnJvcldpdGhEYXRhKG1zZywgZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSA9PT0gdm9pZCAwKSB7IGRhdGEgPSB7fTsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtc2cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBFcnJvcldpdGhEYXRhO1xufShFcnJvcikpO1xuZnVuY3Rpb24gY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KSB7XG4gICAgdmFyIHR5cGUgPSBlLnR5cGUsIHJlcyA9IGUucmVzO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrKG9iaiwgcmVzKTtcbiAgICB9XG4gICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKHJlcy5zdGF0dXNDb2RlLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnbG9naWMtZXJyb3InKSB7XG4gICAgICAgICAgICB2YXIgbXNnID0gZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5nZXRFcnJvck1zZyhyZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3JXaXRoRGF0YShtc2cuY29udGVudCwgcmVzLmRhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnc3lzdGVtLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IocmVzLmVyck1zZykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdodHRwLWVycm9yJyB8fCB0eXBlID09PSAnbG9naWMtZXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnc3lzdGVtLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuY2F0Y2hIYW5kbGVyID0gY2F0Y2hIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJGMFkyaElZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlqWVhSamFFaGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096czdPenM3T3p0QlFVTkJMQ3REUVVFd1F6dEJRVU14UXl3d1EwRkJiME03UVVGRmNFTTdTVUZCTkVJc2FVTkJRVXM3U1VGSE4wSXNkVUpCUVZrc1IwRkJWeXhGUVVGRkxFbEJRV003VVVGQlpDeHhRa0ZCUVN4RlFVRkJMRk5CUVdNN1VVRkJka01zV1VGRFNTeHJRa0ZCVFN4SFFVRkhMRU5CUVVNc1UwRkZZanRSUVVSSExFdEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPenRKUVVOeVFpeERRVUZETzBsQlEwd3NiMEpCUVVNN1FVRkJSQ3hEUVVGRExFRkJVRVFzUTBGQk5FSXNTMEZCU3l4SFFVOW9RenRCUVVWRUxGTkJRVk1zV1VGQldTeERRVUZETEVOQlFXVXNSVUZCUlN4SFFVRjFReXhGUVVGRkxFMUJRVGhDTzBsQlEyeEhMRWxCUVVFc1NVRkJTU3hIUVVGVkxFTkJRVU1zUzBGQldDeEZRVUZGTEVkQlFVY3NSMEZCU3l4RFFVRkRMRWxCUVU0c1EwRkJUenRKUVVkNFFpeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhoUVVGaExFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlF6VkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVOc1F6dEpRVVZFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1JVRkJSVHRSUVVOb1FpeEpRVUZKTEVsQlFVa3NTMEZCU3l4WlFVRlpMRVZCUVVVN1dVRkRka0lzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVVc1IwRkJjMFFzUTBGQlF5eFZRVUZWTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRek5ITzJGQlFVMHNTVUZCU1N4SlFVRkpMRXRCUVVzc1lVRkJZU3hGUVVGRk8xbEJReTlDTEVsQlFVa3NSMEZCUnl4SFFVRkhMSE5DUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFYRkVMRU5CUVVNc1EwRkJRenRaUVVNeFJpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMR0ZCUVdFc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eEZRVUZITEVkQlFYTkVMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU12Unp0aFFVRk5MRWxCUVVrc1NVRkJTU3hMUVVGTExHTkJRV01zUlVGQlJUdFpRVU5vUXl4UFFVRlBMRTFCUVUwc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVONFF6dGhRVUZOTzFsQlJVZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGNFSTdTMEZEU2p0VFFVRk5PMUZCUTBnc1NVRkJTU3hKUVVGSkxFdEJRVXNzV1VGQldTeEpRVUZKTEVsQlFVa3NTMEZCU3l4aFFVRmhMRVZCUVVVN1dVRkRha1FzVDBGQlR5eHpRa0ZCV1N4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQmNVUXNRMEZCUXl4RFFVRkRPMU5CUXpsR08yRkJRVTBzU1VGQlJ5eEpRVUZKTEV0QlFVc3NZMEZCWXl4RlFVRkZPMWxCUXk5Q0xFOUJRVThzYzBKQlFWa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVGhETEVOQlFVTXNRMEZCUXp0VFFVTjRSanRoUVVGTk8xbEJSVWdzVDBGQlR5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRjRUk3UzBGRFNqdEJRVU5NTEVOQlFVTTdRVUZGVVN4dlEwRkJXU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVMQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaXdnU1VWeWNtOXlUMkpxWldOMElIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dWFXMXdiM0owSUdWeWNtOXlTR0Z1Wkd4bGNpQm1jbTl0SUZ3aUxpOWxjbkp2Y2toaGJtUnNaWEpjSWp0Y2JtbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVYRzVqYkdGemN5QkZjbkp2Y2xkcGRHaEVZWFJoSUdWNGRHVnVaSE1nUlhKeWIzSWdlMXh1SUNBZ0lHUmhkR0U2SUdGdWVUdGNibHh1SUNBZ0lHTnZibk4wY25WamRHOXlLRzF6WnpvZ2MzUnlhVzVuTENCa1lYUmhPaUJoYm5rZ1BTQjdmU2tnZTF4dUlDQWdJQ0FnSUNCemRYQmxjaWh0YzJjcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1SaGRHRWdQU0JrWVhSaE8xeHVJQ0FnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWTJGMFkyaElZVzVrYkdWeUtHVTZJRWxGY25KdmNrOWlhbVZqZEN3Z2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVMQ0J5WldwbFkzUTZJQ2h5WldGemIyNC9PaUJoYm5rcElEMCtJSFp2YVdRcElIdGNiaUFnSUNCamIyNXpkQ0I3SUhSNWNHVXNJSEpsY3lCOUlEMGdaVHRjYmx4dUlDQWdJQzh2SU9XbWd1YWVuT2FjaWVtRmplZTlydWU3bitTNGdPbVVtZWl2citXYm51aXdnK1dIdmVhVnNPKzhqT1dJbWVhSnAraWhqT1d1ZzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyRnNiR0poWTJzZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjVtYVdjdVpYSnliM0pEWVd4c1ltRmpheWh2WW1vc0lISmxjeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c5aWFpNWpZWFJqYUVWeWNtOXlLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsSUQwOVBTQW5hSFIwY0MxbGNuSnZjaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2JtVjNJRVZ5Y205eUtDaHlaWE1nWVhNZ1YyVmphR0YwVFdsdWFYQnliMmR5WVcwdVVtVnhkV1Z6ZEZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RDa3VjM1JoZEhWelEyOWtaUzUwYjFOMGNtbHVaeWdwS1NrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3WlNBOVBUMGdKMnh2WjJsakxXVnljbTl5SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHMXpaeUE5SUdWeWNtOXlTR0Z1Wkd4bGNpNW5aWFJGY25KdmNrMXpaeWh5WlhNZ1lYTWdWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0c1bGR5QkZjbkp2Y2xkcGRHaEVZWFJoS0cxelp5NWpiMjUwWlc1MExDQW9jbVZ6SUdGeklGZGxZMmhoZEUxcGJtbHdjbTluY21GdExsSmxjWFZsYzNSVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUXBMbVJoZEdFcEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbElEMDlQU0FuYzNsemRHVnRMV1Z5Y205eUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvY21WekxtVnljazF6WnlrcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVZVzI1THVXYW5QcGxKbm9yNjljYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3WlNBOVBUMGdKMmgwZEhBdFpYSnliM0luSUh4OElIUjVjR1VnUFQwOUlDZHNiMmRwWXkxbGNuSnZjaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmxjbkp2Y2toaGJtUnNaWEl1Ykc5bmFXTkZjbkp2Y2lodlltb3NJSEpsY3lCaGN5QlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtS0hSNWNHVWdQVDA5SUNkemVYTjBaVzB0WlhKeWIzSW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1pYSnliM0pJWVc1a2JHVnlMbk41YzNSbGJVVnljbTl5S0c5aWFpd2djbVZ6SUdGeklGZGxZMmhoZEUxcGJtbHdjbTluY21GdExrZGxibVZ5WVd4RFlXeHNZbUZqYTFKbGMzVnNkQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURsaGJia3U1WnFjK21VbWVpdnIxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaGxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYm4xY2JseHVaWGh3YjNKMElIc2dZMkYwWTJoSVlXNWtiR1Z5SUgwaVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xuZnVuY3Rpb24gc3RhcnQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cbmZ1bmN0aW9uIGVuZChvYmopIHtcbiAgICBvYmouX3JlcG9ydEVuZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBpZiAob2JqLnJlcG9ydCAmJiBvYmouX3JlcG9ydFN0YXJ0VGltZSkge1xuICAgICAgICByZXBvcnQob2JqLnJlcG9ydCwgb2JqLl9yZXBvcnRTdGFydFRpbWUsIG9iai5fcmVwb3J0RW5kVGltZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVwb3J0KG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWdfMS5kZWZhdWx0LnJlcG9ydENHSShuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJlcXVlc3RfMS5kZWZhdWx0KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kLFxuICAgIHJlcG9ydDogcmVwb3J0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXRiMlIxYkdVdlpIVnlZWFJwYjI1U1pYQnZjblJsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVOd1F5d3dRMEZCYjBNN1FVRkhjRU1zVTBGQlV5eExRVUZMTEVOQlFVTXNSMEZCZFVNN1NVRkRiRVFzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1FVRkRhRVFzUTBGQlF6dEJRVVZFTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWRCUVhWRE8wbEJRMmhFTEVkQlFVY3NRMEZCUXl4alFVRmpMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0SlFVTXhReXhKUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFGQlEyNURMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlowSXNSVUZCUlN4SFFVRkhMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNSMEZCUnl4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRE8wdEJRekZGTzBGQlEwd3NRMEZCUXp0QlFVVkVMRk5CUVZNc1RVRkJUU3hEUVVGRExFbEJRVmtzUlVGQlJTeFRRVUZwUWl4RlFVRkZMRTlCUVdVN1NVRkROVVFzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU40UXl4blFrRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hwUWtGQlR5eERRVUZETEVOQlFVTTdTMEZEZGtRN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4TFFVRkxMRTlCUVVFN1NVRkRUQ3hIUVVGSExFdEJRVUU3U1VGRFNDeE5RVUZOTEZGQlFVRTdRMEZEVkN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnY21WeGRXVnpkQ0JtY205dElDY3VMaTloY0drdmNtVnhkV1Z6ZENkY2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1TENCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlCOUlHWnliMjBnWENJdUxpOXBiblJsY21aaFkyVmNJanRjYmx4dVpuVnVZM1JwYjI0Z2MzUmhjblFvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUtTQjdYRzRnSUNBZ2IySnFMbDl5WlhCdmNuUlRkR0Z5ZEZScGJXVWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWlc1a0tHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJRzlpYWk1ZmNtVndiM0owUlc1a1ZHbHRaU0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncE8xeHVJQ0FnSUdsbUtHOWlhaTV5WlhCdmNuUWdKaVlnYjJKcUxsOXlaWEJ2Y25SVGRHRnlkRlJwYldVcElIdGNiaUFnSUNBZ0lDQWdjbVZ3YjNKMEtHOWlhaTV5WlhCdmNuUWdZWE1nYzNSeWFXNW5MQ0J2WW1vdVgzSmxjRzl5ZEZOMFlYSjBWR2x0WlN3Z2IySnFMbDl5WlhCdmNuUkZibVJVYVcxbEtUdGNiaUFnSUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUhKbGNHOXlkQ2h1WVcxbE9pQnpkSEpwYm1jc0lITjBZWEowVkdsdFpUb2diblZ0WW1WeUxDQmxibVJVYVcxbE9pQnVkVzFpWlhJcElIdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1eVpYQnZjblJEUjBrZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjVtYVdjdWNtVndiM0owUTBkSktHNWhiV1VzSUhOMFlYSjBWR2x0WlN3Z1pXNWtWR2x0WlN3Z2NtVnhkV1Z6ZENrN1hHNGdJQ0FnZlZ4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MzUmhjblFzWEc0Z0lDQWdaVzVrTEZ4dUlDQWdJSEpsY0c5eWRGeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi4vYXBpL3JlcXVlc3RcIik7XG5mdW5jdGlvbiBzeXN0ZW1FcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zeXN0ZW1FcnJvckhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5zeXN0ZW1FcnJvckhhbmRsZXIocmVzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciByZXRyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RfMS5kZWZhdWx0KG9iaikudGhlbihvYmouX3Jlc29sdmUpLmNhdGNoKG9iai5fcmVqZWN0KTsgfTtcbiAgICAgICAgZG9FcnJvcihcIlwiLCBcIlwiLCByZXRyeSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbG9naWNFcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5lcnJvckhhbmRsZXIocmVzLmRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIF9hID0gZ2V0RXJyb3JNc2cocmVzKSwgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XG4gICAgICAgIHZhciByZXRyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RfMS5kZWZhdWx0KG9iaikudGhlbihvYmouX3Jlc29sdmUpLmNhdGNoKG9iai5fcmVqZWN0KTsgfTtcbiAgICAgICAgZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEVycm9yTXNnKHJlcykge1xuICAgIHZhciB0aXRsZSA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGl0bGUgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZTtcbiAgICB9XG4gICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50KHJlcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQ7XG4gICAgfVxuICAgIHJldHVybiB7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9O1xufVxuZnVuY3Rpb24gZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpIHtcbiAgICB2YXIgc2hvd0Vycm9yUmV0cnlCdG4gPSBjb25maWdfMS5kZWZhdWx0LmVycm9yUmV0cnlCdG4gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgd3guc2hvd01vZGFsKE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB0aXRsZTogdGl0bGUgfHwgXCJcIixcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxuICAgIH0sICFzaG93RXJyb3JSZXRyeUJ0biA/IHtcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2VcbiAgICB9IDoge1xuICAgICAgICBzaG93Q2FuY2VsOiB0cnVlLFxuICAgICAgICBjb25maXJtVGV4dDogJ+mHjeivlScsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICByZXRyeSgpO1xuICAgICAgICB9XG4gICAgfSkpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN5c3RlbUVycm9yOiBzeXN0ZW1FcnJvcixcbiAgICBsb2dpY0Vycm9yOiBsb2dpY0Vycm9yLFxuICAgIGRvRXJyb3I6IGRvRXJyb3IsXG4gICAgZ2V0RXJyb3JNc2c6IGdldEVycm9yTXNnXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWlhKeWIzSklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlsY25KdmNraGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVhGRE8wRkJSM0pETEZOQlFWTXNWMEZCVnl4RFFVRkRMRWRCUVhWRExFVkJRVVVzUjBGQk5FTTdTVUZEZEVjc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eEpRVUZKTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTJoRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRha0k3VTBGQlRTeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhyUWtGQmEwSXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRlRVFzWjBKQlFVMHNRMEZCUXl4clFrRkJhMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnNRenRUUVVGTk8xRkJRMGdzU1VGQlRTeExRVUZMTEVkQlFVY3NZMEZCVFN4UFFVRkJMR2xDUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGc1JDeERRVUZyUkN4RFFVRkRPMUZCUTNaRkxFOUJRVThzUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wdEJRekZDTzBGQlEwd3NRMEZCUXp0QlFVVkVMRk5CUVZNc1ZVRkJWU3hEUVVGRExFZEJRWFZETEVWQlFVVXNSMEZCZFVjN1NVRkRhRXNzU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4SlFVRkpMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRMmhETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRGFrSTdVMEZCVFN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFpRVUZaTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTJ4RUxHZENRVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dExRVU5xUXp0VFFVRk5PMUZCUTBjc1NVRkJRU3hMUVVGdFFpeFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVd4RExFdEJRVXNzVjBGQlFTeEZRVUZGTEU5QlFVOHNZVUZCYjBJc1EwRkJRenRSUVVNeFF5eEpRVUZOTEV0QlFVc3NSMEZCUnl4alFVRk5MRTlCUVVFc2FVSkJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRV3hFTEVOQlFXdEVMRU5CUVVNN1VVRkRka1VzVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03UzBGRGJFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXhYUVVGWExFTkJRVU1zUjBGQmRVYzdTVUZEZUVnc1NVRkJTU3hMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlEyWXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjZReXhKUVVGSk8xbEJRMEVzUzBGQlN5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUVR0VFFVTjBRenRSUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzFOQlExZzdTMEZEU2p0VFFVRk5MRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4UlFVRlJMRVZCUVVVN1VVRkRPVU1zUzBGQlN5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRE8wdEJRemRDTzBsQlJVUXNTVUZCU1N4UFFVRlBMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRMnBDTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGbEJRVmtzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZETTBNc1NVRkJTVHRaUVVOQkxFOUJRVThzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVRTdVMEZETVVNN1VVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdFRRVU5ZTzB0QlEwbzdVMEZCVFN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFpRVUZaTEV0QlFVc3NVVUZCVVN4RlFVRkZPMUZCUTJoRUxFOUJRVThzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRmxCUVZrc1EwRkJRenRMUVVOcVF6dEpRVVZFTEU5QlFVOHNSVUZCUXl4TFFVRkxMRTlCUVVFc1JVRkJSU3hQUVVGUExGTkJRVUVzUlVGQlF5eERRVUZCTzBGQlF6TkNMRU5CUVVNN1FVRkhSQ3hUUVVGVExFOUJRVThzUTBGQlF5eExRVUZoTEVWQlFVVXNUMEZCWlN4RlFVRkZMRXRCUVdsQ08wbEJSVGxFTEVsQlFVMHNhVUpCUVdsQ0xFZEJRVWNzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRWxCUVVrc1QwRkJUeXhMUVVGTExFdEJRVXNzVlVGQlZTeERRVUZETzBsQlF6bEZMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXp0UlFVTjJRaXhMUVVGTExFVkJRVVVzUzBGQlN5eEpRVUZKTEVWQlFVVTdVVUZEYkVJc1QwRkJUeXhGUVVGRkxFOUJRVThzU1VGQlNTeGxRVUZsTzB0QlEzUkRMRVZCUVVVc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRjRUlzVlVGQlZTeEZRVUZGTEV0QlFVczdTMEZEY0VJc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFFTeFZRVUZWTEVWQlFVVXNTVUZCU1R0UlFVTm9RaXhYUVVGWExFVkJRVVVzU1VGQlNUdFJRVU5xUWl4UFFVRlBMRVZCUVZBc1ZVRkJVU3hIUVVGeFJEdFpRVU42UkN4SlFVRkpMRWRCUVVjc1EwRkJReXhQUVVGUExFbEJRVWtzVDBGQlR5eExRVUZMTEV0QlFVc3NWVUZCVlR0blFrRkJSU3hMUVVGTExFVkJRVVVzUTBGQlF6dFJRVU0xUkN4RFFVRkRPMHRCUTBvc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRFVpeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hYUVVGWExHRkJRVUU3U1VGRFdDeFZRVUZWTEZsQlFVRTdTVUZEVml4UFFVRlBMRk5CUVVFN1NVRkRVQ3hYUVVGWExHRkJRVUU3UTBGRFpDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZENCbWNtOXRJQ2N1TGk5aGNHa3ZjbVZ4ZFdWemRDYzdYRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpd2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNGdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENJN1hHNWNibVoxYm1OMGFXOXVJSE41YzNSbGJVVnljbTl5S0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0Z2ZDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpd2djbVZ6T2lCWFpXTm9ZWFJOYVc1cGNISnZaM0poYlM1SFpXNWxjbUZzUTJGc2JHSmhZMnRTWlhOMWJIUXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1bVlXbHNJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtWmhhV3dvY21WektUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1YzNsemRHVnRSWEp5YjNKSVlXNWtiR1Z5SUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUdOdmJtWnBaeTV6ZVhOMFpXMUZjbkp2Y2toaGJtUnNaWElvY21WektUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J5WlhSeWVTQTlJQ2dwSUQwK0lISmxjWFZsYzNRb2IySnFLUzUwYUdWdUtHOWlhaTVmY21WemIyeDJaU2t1WTJGMFkyZ29iMkpxTGw5eVpXcGxZM1FwTzF4dUlDQWdJQ0FnSUNCa2IwVnljbTl5S0Z3aVhDSXNJRndpWENJc0lISmxkSEo1S1R0Y2JpQWdJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR3h2WjJsalJYSnliM0lvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUxDQnlaWE02SUZkbFkyaGhkRTFwYm1sd2NtOW5jbUZ0TGxKbGNYVmxjM1JUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRZ2ZDQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VabUZwYkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtWVdsc0tISmxjeWs3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtVnljbTl5U0dGdVpHeGxjaUE5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1bWFXY3VaWEp5YjNKSVlXNWtiR1Z5S0hKbGN5NWtZWFJoS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjdkR2wwYkdVc0lHTnZiblJsYm5SOUlEMGdaMlYwUlhKeWIzSk5jMmNvY21WektUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NtVjBjbmtnUFNBb0tTQTlQaUJ5WlhGMVpYTjBLRzlpYWlrdWRHaGxiaWh2WW1vdVgzSmxjMjlzZG1VcExtTmhkR05vS0c5aWFpNWZjbVZxWldOMEtUdGNiaUFnSUNBZ0lDQWdaRzlGY25KdmNpaDBhWFJzWlN3Z1kyOXVkR1Z1ZEN3Z2NtVjBjbmtwTzF4dUlDQWdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdaMlYwUlhKeWIzSk5jMmNvY21Wek9pQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBJSHdnVjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VlhCc2IyRmtSbWxzWlZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RDa2dlMXh1SUNBZ0lHeGxkQ0IwYVhSc1pTQTlJRndpWENJN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WlhKeWIzSlVhWFJzWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhWFJzWlNBOUlHTnZibVpwWnk1bGNuSnZjbFJwZEd4bEtISmxjeTVrWVhSaEtWeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VaWEp5YjNKVWFYUnNaU0E5UFQwZ1hDSnpkSEpwYm1kY0lpa2dlMXh1SUNBZ0lDQWdJQ0IwYVhSc1pTQTlJR052Ym1acFp5NWxjbkp2Y2xScGRHeGxPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0JqYjI1MFpXNTBJRDBnWENKY0lqdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bGNuSnZja052Ym5SbGJuUWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWRHVnVkQ0E5SUdOdmJtWnBaeTVsY25KdmNrTnZiblJsYm5Rb2NtVnpMbVJoZEdFcFhHNGdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2tOdmJuUmxiblFnUFQwOUlGd2ljM1J5YVc1blhDSXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWRHVnVkQ0E5SUdOdmJtWnBaeTVsY25KdmNrTnZiblJsYm5RN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSHQwYVhSc1pTd2dZMjl1ZEdWdWRIMWNibjFjYmx4dUx5OGc2YnVZNks2azZaU1o2Syt2NWFTRTU1Q0c1cGl2NWJ5NTU2cVhYRzVtZFc1amRHbHZiaUJrYjBWeWNtOXlLSFJwZEd4bE9pQnpkSEpwYm1jc0lHTnZiblJsYm5RNklITjBjbWx1Wnl3Z2NtVjBjbmsvT2lBb0tTQTlQaUJoYm5rcElIdGNiaUFnSUNBdkx5RG1tSy9sa0tibW1MN25wTHJwaDQzb3I1WG1qSW5wa3E1Y2JpQWdJQ0JqYjI1emRDQnphRzkzUlhKeWIzSlNaWFJ5ZVVKMGJpQTlJR052Ym1acFp5NWxjbkp2Y2xKbGRISjVRblJ1SUNZbUlIUjVjR1Z2WmlCeVpYUnllU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lPMXh1SUNBZ0lIZDRMbk5vYjNkTmIyUmhiQ2hQWW1wbFkzUXVZWE56YVdkdUtIdGNiaUFnSUNBZ0lDQWdkR2wwYkdVNklIUnBkR3hsSUh4OElGd2lYQ0lzWEc0Z0lDQWdJQ0FnSUdOdmJuUmxiblE2SUdOdmJuUmxiblFnZkh3Z1hDTG52WkhudTV6bWlKYm1uSTNsaXFIbHZJTGx1TGp2dkl6b3I3Zm5xSTNsa0k3cGg0M29yNVZjSWl4Y2JpQWdJQ0I5TENBaGMyaHZkMFZ5Y205eVVtVjBjbmxDZEc0Z1B5QjdYRzRnSUNBZ0lDQWdJSE5vYjNkRFlXNWpaV3c2SUdaaGJITmxYRzRnSUNBZ2ZTQTZJSHRjYmlBZ0lDQWdJQ0FnYzJodmQwTmhibU5sYkRvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnWTI5dVptbHliVlJsZUhRNklDZnBoNDNvcjVVbkxGeHVJQ0FnSUNBZ0lDQnpkV05qWlhOektISmxjem9nVjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VTJodmQwMXZaR0ZzVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jbVZ6TG1OdmJtWnBjbTBnSmlZZ2RIbHdaVzltSUhKbGRISjVJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSEpsZEhKNUtDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCemVYTjBaVzFGY25KdmNpeGNiaUFnSUNCc2IyZHBZMFZ5Y205eUxGeHVJQ0FnSUdSdlJYSnliM0lzWEc0Z0lDQWdaMlYwUlhKeWIzSk5jMmRjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG5mdW5jdGlvbiBnZXQob2JqKSB7XG4gICAgaWYgKCEoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoudXJsXSB8fCAob2JqLm9yaWdpblVybCAmJiBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgPyBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdIDogJycpO1xuICAgIGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBzdGF0dXNDb2RlOiAyMDBcbiAgICB9O1xuICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGdldDogZ2V0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYlc5amEwMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMMjF2WTJ0TllXNWhaMlZ5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTUVOQlFXOURPMEZCUTNCRExESkRRVUZ4UXp0QlFVZHlReXhUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUYxUXp0SlFVVm9SQ3hKUVVGSExFTkJRVU1zUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhKUVVGSkxHZENRVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVTdVVUZGYWtZc1QwRkJUeXhMUVVGTExFTkJRVU03UzBGRGFFSTdTVUZGUkN4SlFVRkpMRWxCUVVrc1IwRkJSeXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUlRkR0xFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjRReXhKUVVGTkxFZEJRVWNzUjBGQlJ6dFJRVU5TTEVsQlFVa3NUVUZCUVR0UlFVTktMRlZCUVZVc1JVRkJSU3hIUVVGSE8wdEJRMnhDTEVOQlFVTTdTVUZGUml4cFFrRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBsQlEyWXNUMEZCVHl4SFFVRkhMRU5CUVVFN1FVRkRaQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4SFFVRkhMRXRCUVVFN1EwRkRUaXhEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdiRzloWkdsdVp5Qm1jbTl0SUNjdUxpOTFkR2xzTDJ4dllXUnBibWNuWEc1cGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaXdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSmNibHh1Wm5WdVkzUnBiMjRnWjJWMEtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWs2SUdGdWVTQjdYRzVjYmlBZ0lDQnBaaWdoS0dOdmJtWnBaeTV0YjJOclNuTnZibHR2WW1vdWRYSnNYU0I4ZkNBb2IySnFMbTl5YVdkcGJsVnliQ0FtSmlCamIyNW1hV2N1Ylc5amEwcHpiMjViYjJKcUxtOXlhV2RwYmxWeWJGMHBLU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QnRiMk5ySU9heW9lYWNpZVd2dWVXNmxPYU9wZVdQbytlYWhPYVZzT2FOcmx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2JHVjBJR1JoZEdFZ1BTQmpiMjVtYVdjdWJXOWphMHB6YjI1YmIySnFMblZ5YkYwZ2ZId2dLRzlpYWk1dmNtbG5hVzVWY213Z1B5QmpiMjVtYVdjdWJXOWphMHB6YjI1YmIySnFMbTl5YVdkcGJsVnliRjBnT2lBbkp5azdYRzRnSUNBZ0x5OGdaR1ZsY0NCamIzQjVYRzRnSUNBZ1pHRjBZU0E5SUVwVFQwNHVjR0Z5YzJVb1NsTlBUaTV6ZEhKcGJtZHBabmtvWkdGMFlTa3BPMXh1SUNBZ0lHTnZibk4wSUhKbGN5QTlJSHRjYmlBZ0lDQWdJQ0FnWkdGMFlTeGNiaUFnSUNBZ0lDQWdjM1JoZEhWelEyOWtaVG9nTWpBd1hHNGdJQ0FnZlR0Y2JseHVJQ0FnSUd4dllXUnBibWN1YUdsa1pTZ3BPMXh1SUNBZ0lISmxkSFZ5YmlCeVpYTmNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJR2RsZEZ4dWZWeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbnZhciBtb2NrTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vbW9ja01hbmFnZXJcIik7XG52YXIgY2FjaGVNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9jYWNoZU1hbmFnZXJcIik7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL3Nlc3Npb25NYW5hZ2VyXCIpO1xudmFyIHJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVzcG9uc2VIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgdXJsXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91cmxcIik7XG52YXIgY2F0Y2hIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9jYXRjaEhhbmRsZXJcIik7XG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsKSB7XG4gICAgaWYgKG9yaWdpblVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAodHlwZW9mIG9iai5yZUxvZ2luQ291bnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBvYmoucmVMb2dpbkNvdW50Kys7XG4gICAgfVxuICAgIGlmIChvYmoucmVMb2dpbkNvdW50ID09PSAwICYmIHR5cGVvZiBvYmouYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XG4gICAgfVxuICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuc2hvdyhvYmouc2hvd0xvYWRpbmcpO1xuICAgIH1cbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgb2JqLm9yaWdpblVybCA9IG9iai51cmw7XG4gICAgICAgIG9iai51cmwgPSBmb3JtYXQob2JqLnVybCk7XG4gICAgfVxuICAgIG9iai5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgb2JqLl9yZWplY3QgPSByZWplY3Q7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFvYmouZGF0YSkge1xuICAgICAgICBvYmouZGF0YSA9IHt9O1xuICAgIH1cbiAgICBvYmouaGVhZGVyID0gb2JqLmhlYWRlciA/IG9iai5oZWFkZXIgOiB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBoZWFkZXIgPSBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcigpO1xuICAgICAgICBpZiAodHlwZW9mIGhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG9iai5oZWFkZXIgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmhlYWRlciksIGhlYWRlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcik7XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouZGF0YSksIChfYSA9IHt9LCBfYVtjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2EpKTtcbiAgICB9XG4gICAgdmFyIGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5kYXRhID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGdkKSwgb2JqLmRhdGEpO1xuICAgIG9iai5tZXRob2QgPSBvYmoubWV0aG9kIHx8ICdHRVQnO1xuICAgIG9iai5kYXRhVHlwZSA9IG9iai5kYXRhVHlwZSB8fCAnanNvbic7XG4gICAgaWYgKCFjb25maWdfMS5kZWZhdWx0LmRvTm90VXNlUXVlcnlTdHJpbmcgJiYgb2JqLm1ldGhvZCAhPT0gXCJHRVRcIikge1xuICAgICAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xuICAgICAgICB9XG4gICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnJlcGxhY2VEb21haW4ob2JqLnVybCk7XG4gICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuc3RhcnQob2JqKTtcbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoIW9iai5mb3JtRGF0YSkge1xuICAgICAgICBvYmouZm9ybURhdGEgPSB7fTtcbiAgICB9XG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaGVhZGVyID0gY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBoZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouaGVhZGVyKSwgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIpO1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5mb3JtRGF0YSksIChfYSA9IHt9LCBfYVtjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2EpKTtcbiAgICB9XG4gICAgdmFyIGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5mb3JtRGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZCksIG9iai5mb3JtRGF0YSk7XG4gICAgaWYgKCFjb25maWdfMS5kZWZhdWx0LmRvTm90VXNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5yZXBsYWNlRG9tYWluKG9iai51cmwpO1xuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGdldEdsb2JhbERhdGEoKSB7XG4gICAgdmFyIGdkID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZ2Q7XG59XG5mdW5jdGlvbiBkb1JlcXVlc3Qob2JqKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcbiAgICBpZiAob2JqLnJlTG9naW5Db3VudCA9PT0gMCAmJiB0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqID0gY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kKG9iaiwgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgd3gucmVxdWVzdChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqKSwgeyBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gcmVzID09PSBudWxsIHx8IHJlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzLmVyck1zZykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluZGV4T2YoJ0NPTk5FQ1RJT05fUkVGVVNFRCcpKSA+PSAwICYmIHVybF8xLmRlZmF1bHQuaXNJbkJhY2t1cERvbWFpbkxpc3Qob2JqLnVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlQmFja3VwRG9tYWluKG9iai51cmwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iaikudGhlbihmdW5jdGlvbiAocmVzKSB7IHJldHVybiByZXNvbHZlKHJlcyk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogJ3N5c3RlbS1lcnJvcicsIHJlczogcmVzIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKTtcbiAgICBpZiAob2JqLnJlTG9naW5Db3VudCA9PT0gMCAmJiB0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqID0gY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kKG9iaiwgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgd3gudXBsb2FkRmlsZShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqKSwgeyBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gcmVzID09PSBudWxsIHx8IHJlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzLmVyck1zZykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluZGV4T2YoJ0NPTk5FQ1RJT05fUkVGVVNFRCcpKSA+PSAwICYmIHVybF8xLmRlZmF1bHQuaXNJbkJhY2t1cERvbWFpbkxpc3Qob2JqLnVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlQmFja3VwRG9tYWluKG9iai51cmwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iaikudGhlbihmdW5jdGlvbiAocmVzKSB7IHJldHVybiByZXNvbHZlKHJlcyk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogJ3N5c3RlbS1lcnJvcicsIHJlczogcmVzIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiByZXF1ZXN0KG9iaikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb24pIHtcbiAgICAgICAgICAgIHZhciBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdC5yZXNwb25zZUZvclJlcXVlc3QobW9ja1Jlc3BvbnNlLCBvYmopO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqLmNhY2hlKSB7XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICB9XG4gICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKG9iaikudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iaik7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdC5yZXNwb25zZUZvclJlcXVlc3QocmVzLCBvYmopO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2F0Y2hIYW5kbGVyXzEuY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB1cGxvYWRGaWxlKG9iaikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb24pIHtcbiAgICAgICAgICAgIHZhciBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdC5yZXNwb25zZUZvclVwbG9hZEZpbGUobW9ja1Jlc3BvbnNlLCBvYmopO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbihvYmopLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvVXBsb2FkRmlsZShvYmopO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQucmVzcG9uc2VGb3JVcGxvYWRGaWxlKHJlcywgb2JqKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgY2F0Y2hIYW5kbGVyXzEuY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBlbmFibGVCYWNrdXBEb21haW4odXJsKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICBpZiAoIXN0YXR1c18xLmRlZmF1bHQuaXNFbmFibGVCYWNrdXBEb21haW4pIHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5pc0VuYWJsZUJhY2t1cERvbWFpbiA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5FbmFibGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5FbmFibGVDYWxsYmFjayh1cmwpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGZvcm1hdDogZm9ybWF0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZSxcbiAgICBlbmFibGVCYWNrdXBEb21haW46IGVuYWJsZUJhY2t1cERvbWFpblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEVoaGJtUnNaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzSmxjWFZsYzNSSVlXNWtiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN3eVEwRkJjVU03UVVGRGNrTXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5dzJRMEZCZFVNN1FVRkRka01zSzBOQlFYbERPMEZCUTNwRExHMUVRVUUyUXp0QlFVTTNReXh4UkVGQkswTTdRVUZETDBNc2RVUkJRV2xFTzBGQlEycEVMRzFEUVVFMlFqdEJRVVUzUWl3clEwRkJPRU03UVVGSE9VTXNVMEZCVXl4TlFVRk5MRU5CUVVNc1UwRkJhVUk3U1VGRE4wSXNTVUZCU1N4VFFVRlRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTzFGQlF6bENMRTlCUVU4c1UwRkJVeXhEUVVGQk8wdEJRMjVDTzFOQlFVMDdVVUZEU0N4SlFVRkpMRk5CUVZNc1IwRkJSeXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xbEJRM2hETEZOQlFWTXNSMEZCUnl4blFrRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZCTzFOQlEycERPMUZCUTBRc1QwRkJUeXhUUVVGVExFZEJRVWNzVTBGQlV5eERRVUZETzB0QlEyaERPMEZCUTB3c1EwRkJRenRCUVVkRUxGTkJRVk1zUzBGQlN5eERRVUVyUXl4SFFVRk5MRVZCUVVVc1QwRkJPRUlzUlVGQlJTeE5RVUVyUWp0SlFVVm9TU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEZsQlFWa3NTMEZCU3l4WFFVRlhMRVZCUVVVN1VVRkRla01zUjBGQlJ5eERRVUZETEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRlRUk3VTBGQlRUdFJRVU5JTEVkQlFVY3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRMUVVOMFFqdEpRVVZFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmxCUVZrc1MwRkJTeXhEUVVGRExFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNWVUZCVlN4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVOb1JTeEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1MwRkRjRUk3U1VGRlJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVN1VVRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzB0QlEycERPMGxCUlVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVTdVVUZEYUVJc1IwRkJSeXhEUVVGRExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNoQ0xFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU0zUWp0SlFVVkVMRWRCUVVjc1EwRkJReXhSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETzBsQlEzWkNMRWRCUVVjc1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZETzBsQlJYSkNMRTlCUVU4c1IwRkJSeXhEUVVGRE8wRkJRMllzUTBGQlF6dEJRVWRFTEZOQlFWTXNiMEpCUVc5Q0xFTkJRVU1zUjBGQmJVSTdPMGxCUlRkRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZPMUZCUTFnc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTMEZEYWtJN1NVRkZSQ3hIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNeFF5eEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhUUVVGVExFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEzaERMRWxCUVVrc1RVRkJUU3hIUVVGSExHZENRVUZOTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1VVRkRhRU1zU1VGQlNTeFBRVUZQTEUxQlFVMHNTMEZCU3l4UlFVRlJMRVZCUVVVN1dVRkROVUlzUjBGQlJ5eERRVUZETEUxQlFVMHNlVUpCUVU4c1IwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlN5eE5RVUZOTEVOQlFVTXNRMEZCUXp0VFFVTXpRenRMUVVOS08xTkJRVTBzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhMUVVGTExGRkJRVkVzUlVGQlJUdFJRVU0zUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3g1UWtGQlR5eEhRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkxMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdTMEZEY2tRN1NVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFRRVUZUTEV0QlFVc3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJRemxFTEVkQlFVY3NRMEZCUXl4SlFVRkpMSGxDUVVGUkxFZEJRVWNzUTBGQlF5eEpRVUZqTEdkQ1FVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRkxFTkJRVU03UzBGRE9VVTdTVUZIUkN4SlFVRk5MRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU16UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3g1UWtGQlVTeEZRVUZGTEVkQlFVc3NSMEZCUnl4RFFVRkRMRWxCUVdNc1EwRkJSU3hEUVVGRE8wbEJSVFZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTTdTVUZEYWtNc1IwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEhRVUZITEVOQlFVTXNVVUZCVVN4SlFVRkpMRTFCUVUwc1EwRkJRenRKUVVkMFF5eEpRVUZKTEVOQlFVTXNaMEpCUVUwc1EwRkJReXh0UWtGQmJVSXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hMUVVGTExFdEJRVXNzUlVGQlJUdFJRVU55UkN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEyaENMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhaUVVGSkxFZEJRVU1zWjBKQlFVMHNRMEZCUXl4WFFVRlhMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFBRVUZQTEUxQlFVY3NRMEZCUXp0VFFVTTVSVHRSUVVORUxFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NZVUZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMHRCUTNoRE8wbEJSMFFzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4aFFVRkhMRU5CUVVNc1lVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVnlReXd3UWtGQlowSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRk5VSXNUMEZCVHl4SFFVRkhMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSMFFzVTBGQlV5eDFRa0ZCZFVJc1EwRkJReXhIUVVGelFqczdTVUZEYmtRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVTdVVUZEWml4SFFVRkhMRU5CUVVNc1VVRkJVU3hIUVVGSExFVkJRVVVzUTBGQlF6dExRVU55UWp0SlFVVkVMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpGRExFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGVFTXNTVUZCU1N4TlFVRk5MRWRCUVVjc1owSkJRVTBzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0UlFVTm9ReXhKUVVGSkxFOUJRVThzVFVGQlRTeExRVUZMTEZGQlFWRXNSVUZCUlR0WlFVTTFRaXhIUVVGSExFTkJRVU1zVFVGQlRTeDVRa0ZCVHl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETzFOQlF6TkRPMHRCUTBvN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemRETEVkQlFVY3NRMEZCUXl4TlFVRk5MSGxDUVVGUExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVc3NaMEpCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dExRVU55UkR0SlFVVkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGTkJRVk1zUzBGQlN5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1VVRkRPVVFzUjBGQlJ5eERRVUZETEZGQlFWRXNlVUpCUVZFc1IwRkJSeXhEUVVGRExGRkJRV3RDTEdkQ1FVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRkxFTkJRVU03UzBGRGRFWTdTVUZIUkN4SlFVRk5MRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU16UWl4SFFVRkhMRU5CUVVNc1VVRkJVU3g1UWtGQlVTeEZRVUZGTEVkQlFVc3NSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJSU3hEUVVGRE8wbEJSVEZETEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZPMUZCUlRkQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1dVRkRhRUlzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4aFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEZsQlFVa3NSMEZCUXl4blFrRkJUU3hEUVVGRExGZEJRVmNzU1VGQlJ5eG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1RVRkJSeXhEUVVGRE8xTkJRemxGTzFGQlJVUXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhoUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03UzBGRGVFTTdTVUZIUkN4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExHRkJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSWEpETERCQ1FVRm5RaXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVTFRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkN4VFFVRlRMR0ZCUVdFN1NVRkRiRUlzU1VGQlNTeEZRVUZGTEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJwQ0xFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGVrTXNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdTMEZETlVJN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemxETEVWQlFVVXNSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU14UWp0SlFVTkVMRTlCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFTEZOQlFWTXNVMEZCVXl4RFFVRkRMRWRCUVcxQ08wbEJRMnhETEVkQlFVY3NSMEZCUnl4dlFrRkJiMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTm9ReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFpRVUZaTEV0QlFVc3NRMEZCUXl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFZRVUZWTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTI1RkxFZEJRVWNzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRMUVVOb1JEdEpRVU5FTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVdsRUxGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZETDBVc1JVRkJSU3hEUVVGRExFOUJRVThzZFVKQlEwZ3NSMEZCUnl4TFFVTk9MRTlCUVU4c1dVRkJReXhIUVVGSE8yZENRVU5RTEU5QlFVOHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hDTEVOQlFVTTdXVUZEUkN4SlFVRkpMRmxCUVVNc1IwRkJSenM3WjBKQlJVb3NTVUZCU1N4UFFVRkJMRWRCUVVjc1lVRkJTQ3hIUVVGSExIVkNRVUZJTEVkQlFVY3NRMEZCUlN4TlFVRk5MREJEUVVGRkxFOUJRVThzUTBGQlF5eHZRa0ZCYjBJc1RVRkJTeXhEUVVGRExFbEJRVWtzWVVGQlJ5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlR0dlFrRkZkRVlzYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVVTFRaXhQUVVGUExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJReXhIUVVGSExFbEJRVWtzVDBGQlFTeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVZvc1EwRkJXU3hEUVVGRExFTkJRVU03YVVKQlEzQkVPMmRDUVVORUxFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVVXNTVUZCU1N4RlFVRkZMR05CUVdNc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlJTeERRVUZETEVOQlFVTTdXVUZEYWtRc1EwRkJRenRaUVVORUxGRkJRVkU3WjBKQlEwb3NTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVlVGQlZTeEZRVUZGTzI5Q1FVTndReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdhVUpCUTJ4Q08yZENRVU5FTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSVHR2UWtGRGFrSXNhVUpCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dHBRa0ZEYkVJN1dVRkRUQ3hEUVVGRExFbEJRMGdzUTBGQlFUdEpRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zV1VGQldTeERRVUZETEVkQlFYTkNPMGxCUTNoRExFZEJRVWNzUjBGQlJ5eDFRa0ZCZFVJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU51UXl4SlFVRkpMRWRCUVVjc1EwRkJReXhaUVVGWkxFdEJRVXNzUTBGQlF5eEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhWUVVGVkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEyNUZMRWRCUVVjc1IwRkJSeXhuUWtGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0TFFVTm9SRHRKUVVORUxFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFXOUVMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3VVVGRGJFWXNSVUZCUlN4RFFVRkRMRlZCUVZVc2RVSkJRMDRzUjBGQlJ5eExRVU5PTEU5QlFVOHNXVUZCUXl4SFFVRkhPMmRDUVVOUUxFOUJRVThzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFTkJRVU03V1VGRFJDeEpRVUZKTEZsQlFVTXNSMEZCUnpzN1owSkJSVW9zU1VGQlNTeFBRVUZCTEVkQlFVY3NZVUZCU0N4SFFVRkhMSFZDUVVGSUxFZEJRVWNzUTBGQlJTeE5RVUZOTERCRFFVRkZMRTlCUVU4c1EwRkJReXh2UWtGQmIwSXNUVUZCU3l4RFFVRkRMRWxCUVVrc1lVRkJSeXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJUdHZRa0ZGZEVZc2EwSkJRV3RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVVUxUWl4UFFVRlBMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCUXl4SFFVRkhMRWxCUVVrc1QwRkJRU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFWb3NRMEZCV1N4RFFVRkRMRU5CUVVNN2FVSkJRM1pFTzJkQ1FVTkVMRTlCUVU4c1RVRkJUU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEdOQlFXTXNSVUZCUlN4SFFVRkhMRXRCUVVFc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGRGFrUXNRMEZCUXp0WlFVTkVMRkZCUVZFN1owSkJRMG9zU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU53UXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03YVVKQlEyeENPMmRDUVVORUxFbEJRVWtzUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlR0dlFrRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRwUWtGRGJFSTdXVUZEVEN4RFFVRkRMRWxCUTBnc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1QwRkJUeXhEUVVGUkxFZEJRVzFDTzBsQlEzWkRMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhIUVVGSExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NSVUZCUlN4UFFVRlBMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRmJFTXNTVUZCU1N4blFrRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJUdFpRVU5xUWl4SlFVRkpMRmxCUVZrc1IwRkJSeXh4UWtGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVONFF5eEpRVUZKTEZsQlFWa3NSVUZCUlR0blFrRkRaQ3hKUVVGSkxGRkJRVkVzUjBGQlJ5eDVRa0ZCWlN4RFFVRkRMR3RDUVVGclFpeERRVUZETEZsQlFWa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRGNrVXNUMEZCVHl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03WVVGRE5VSTdVMEZEU2p0UlFVVkVMRWxCUVVrc1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJUdFpRVU5ZTEhOQ1FVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlEzcENPMUZCUlVRc2QwSkJRV01zUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRekZDTEU5QlFVOHNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGQk8xRkJRM3BDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGRExFZEJRVzFFTzFsQlEzaEVMRWxCUVVrc1VVRkJVU3hIUVVGSExIbENRVUZsTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUXpWRUxFbEJRVWtzVVVGQlVTeEpRVUZKTEVsQlFVa3NSVUZCUlR0blFrRkRiRUlzVDBGQlR5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1lVRkROVUk3VVVGRFRDeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJReXhEUVVGbE8xbEJRM0pDTEU5QlFVOHNNa0pCUVZrc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkJPMUZCUTNaRExFTkJRVU1zUTBGQlF5eERRVUZCTzBsQlEwNHNRMEZCUXl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFZRVUZWTEVOQlFVTXNSMEZCYzBJN1NVRkRkRU1zVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJReTlDTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1IwRkJSeXhGUVVGRkxFOUJRVThzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVnNReXhKUVVGSkxHZENRVUZOTEVOQlFVTXNVVUZCVVN4RlFVRkZPMWxCUTJwQ0xFbEJRVWtzV1VGQldTeEhRVUZITEhGQ1FVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaERMRWxCUVVrc1dVRkJXU3hGUVVGRk8yZENRVU5rTEVsQlFVa3NVVUZCVVN4SFFVRkhMSGxDUVVGbExFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1dVRkJXU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTjRSU3hQUVVGUExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0aFFVTTFRanRUUVVOS08xRkJSVVFzZDBKQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6RkNMRTlCUVU4c1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZCTzFGQlF6VkNMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZETEVkQlFYTkVPMWxCUXpORUxFbEJRVWtzVVVGQlVTeEhRVUZITEhsQ1FVRmxMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJReTlFTEVsQlFVa3NVVUZCVVN4SlFVRkpMRWxCUVVrc1JVRkJSVHRuUWtGRGJFSXNUMEZCVHl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03WVVGRE5VSTdVVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVlVGQlF5eERRVUZsTzFsQlEzSkNMREpDUVVGWkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRVHRSUVVOb1F5eERRVUZETEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlowSTdTVUZCYUVJc2IwSkJRVUVzUlVGQlFTeFJRVUZuUWp0SlFVTjRReXhKUVVGSkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4dlFrRkJiMElzUlVGQlJUdFJRVU01UWl4blFrRkJUU3hEUVVGRExHOUNRVUZ2UWl4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOdVF5eEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXd3UWtGQk1FSXNTMEZCU3l4VlFVRlZMRVZCUVVVN1dVRkRla1FzWjBKQlFVMHNRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTXhRenRMUVVOS08wRkJRMHdzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1RVRkJUU3hSUVVGQk8wbEJRMDRzVDBGQlR5eFRRVUZCTzBsQlExQXNWVUZCVlN4WlFVRkJPMGxCUTFZc2EwSkJRV3RDTEc5Q1FVRkJPME5CUTNKQ0xFTkJRVUVpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnYkc5aFpHbHVaeUJtY205dElDY3VMaTkxZEdsc0wyeHZZV1JwYm1jblhHNXBiWEJ2Y25RZ1kyOXVabWxuSUdaeWIyMGdKeTR1TDNOMGIzSmxMMk52Ym1acFp5ZGNibWx0Y0c5eWRDQnpkR0YwZFhNZ1puSnZiU0FuTGk0dmMzUnZjbVV2YzNSaGRIVnpKMXh1YVcxd2IzSjBJRzF2WTJ0TllXNWhaMlZ5SUdaeWIyMGdKeTR2Ylc5amEwMWhibUZuWlhJblhHNXBiWEJ2Y25RZ1kyRmphR1ZOWVc1aFoyVnlJR1p5YjIwZ0p5NHZZMkZqYUdWTllXNWhaMlZ5SjF4dWFXMXdiM0owSUhObGMzTnBiMjVOWVc1aFoyVnlJR1p5YjIwZ0p5NHZjMlZ6YzJsdmJrMWhibUZuWlhJblhHNXBiWEJ2Y25RZ2NtVnpjRzl1YzJWSVlXNWtiR1Z5SUdaeWIyMGdKeTR2Y21WemNHOXVjMlZJWVc1a2JHVnlKMXh1YVcxd2IzSjBJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSWdabkp2YlNCY0lpNHZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNsd2lYRzVwYlhCdmNuUWdkWEpzSUdaeWIyMGdKeTR1TDNWMGFXd3ZkWEpzSjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1TENCSlJYSnliM0pQWW1wbFkzUWdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENKY2JtbHRjRzl5ZENCN0lHTmhkR05vU0dGdVpHeGxjaUI5SUdaeWIyMGdKeTR2WTJGMFkyaElZVzVrYkdWeUp6dGNibHh1THk4ZzVxQzg1YnlQNVl5V2RYSnNYRzVtZFc1amRHbHZiaUJtYjNKdFlYUW9iM0pwWjJsdVZYSnNPaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvYjNKcFoybHVWWEpzTG5OMFlYSjBjMWRwZEdnb0oyaDBkSEFuS1NrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2IzSnBaMmx1VlhKc1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYkdWMElIVnliRkJsY21acGVDQTlJR052Ym1acFp5NTFjbXhRWlhKbWFYZzdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MblZ5YkZCbGNtWnBlQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjFjbXhRWlhKbWFYZ2dQU0JqYjI1bWFXY3VkWEpzVUdWeVptbDRLQ2xjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZFhKc1VHVnlabWw0SUNzZ2IzSnBaMmx1VlhKc08xeHVJQ0FnSUgxY2JuMWNibHh1THk4ZzVvbUE1cHlKNksrMzVyR0M1WStSNVllNjVZbU42WnlBNkthQjVZR2E1NXFFNUxxTDVvT0ZYRzVtZFc1amRHbHZiaUJ3Y21WRWJ6eFVJR1Y0ZEdWdVpITWdTVkpsY1hWbGMzUlBjSFJwYjI0Z2ZDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJqNG9iMkpxT2lCVUxDQnlaWE52YkhabE9pQW9kbUZzZFdVL09pQmhibmtwSUQwK0lIWnZhV1FzSUhKbGFtVmpkRDg2SUNoeVpXRnpiMjQvT2lCaGJua3BJRDArSUhadmFXUXBPaUJVSUh0Y2JpQWdJQ0F2THlEbm1idmx2WlhtZ0lIbHBMSG1sWWp2dkl6cGg0M2xwSTNubWJ2bHZaWG9ycUhtbGJCY2JpQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNXlaVXh2WjJsdVEyOTFiblFnUFQwOUlGd2lkVzVrWldacGJtVmtYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbkpsVEc5bmFXNURiM1Z1ZENBOUlEQTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbkpsVEc5bmFXNURiM1Z1ZENzck8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHZZbW91Y21WTWIyZHBia052ZFc1MElEMDlQU0F3SUNZbUlIUjVjR1Z2WmlCdlltb3VZbVZtYjNKbFUyVnVaQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNWlaV1p2Y21WVFpXNWtLQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c5aWFpNXphRzkzVEc5aFpHbHVaeWtnZTF4dUlDQWdJQ0FnSUNCc2IyRmthVzVuTG5Ob2IzY29iMkpxTG5Ob2IzZE1iMkZrYVc1bktUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JVzlpYWk1dmNtbG5hVzVWY213cElIdGNiaUFnSUNBZ0lDQWdiMkpxTG05eWFXZHBibFZ5YkNBOUlHOWlhaTUxY213N1hHNGdJQ0FnSUNBZ0lHOWlhaTUxY213Z1BTQm1iM0p0WVhRb2IySnFMblZ5YkNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYjJKcUxsOXlaWE52YkhabElEMGdjbVZ6YjJ4MlpUdGNiaUFnSUNCdlltb3VYM0psYW1WamRDQTlJSEpsYW1WamREdGNibHh1SUNBZ0lISmxkSFZ5YmlCdlltbzdYRzU5WEc1Y2JpOHZJT2Fndk9XOGorV01sdVdraE9lUWh1aXZ0K2F4Z3VlYWhHOWlhdVdHaGVXdXVWeHVablZ1WTNScGIyNGdhVzVwZEdsaGJHbDZaVkpsY1hWbGMzUlBZbW9vYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlrZ2UxeHVYRzRnSUNBZ2FXWWdLQ0Z2WW1vdVpHRjBZU2tnZTF4dUlDQWdJQ0FnSUNCdlltb3VaR0YwWVNBOUlIdDlPMXh1SUNBZ0lIMWNiaUFnSUNCY2JpQWdJQ0J2WW1vdWFHVmhaR1Z5SUQwZ2IySnFMbWhsWVdSbGNpQS9JRzlpYWk1b1pXRmtaWElnT2lCN2ZUdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1elpYUklaV0ZrWlhJZ1BUMDlJQ2RtZFc1amRHbHZiaWNwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJR2hsWVdSbGNpQTlJR052Ym1acFp5NXpaWFJJWldGa1pYSW9LVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCb1pXRmtaWElnUFQwOUlDZHZZbXBsWTNRbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCdlltb3VhR1ZoWkdWeUlEMGdleTR1TG05aWFpNW9aV0ZrWlhJc0lDNHVMbWhsWVdSbGNuMDdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdWMyVjBTR1ZoWkdWeUlEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJQ0FnSUNCdlltb3VhR1ZoWkdWeUlEMGdleTR1TG05aWFpNW9aV0ZrWlhJc0lDNHVMbU52Ym1acFp5NXpaWFJJWldGa1pYSjlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h2WW1vdWIzSnBaMmx1VlhKc0lDRTlQU0JqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1MWNtd2dKaVlnYzNSaGRIVnpMbk5sYzNOcGIyNHBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtUmhkR0VnUFNCN0lDNHVMbTlpYWk1a1lYUmhJR0Z6SUc5aWFtVmpkQ3dnVzJOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlYwNklITjBZWFIxY3k1elpYTnphVzl1SUgwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4ZzVhYUM1cDZjNXB5SjVZV281YkdBNVkrQzVwV3c3N3lNNVlpWjVyZTc1WXFnWEc0Z0lDQWdZMjl1YzNRZ1oyUWdQU0JuWlhSSGJHOWlZV3hFWVhSaEtDazdYRzRnSUNBZ2IySnFMbVJoZEdFZ1BTQjdJQzR1TG1ka0xDQXVMaTV2WW1vdVpHRjBZU0JoY3lCdlltcGxZM1FnZlR0Y2JseHVJQ0FnSUc5aWFpNXRaWFJvYjJRZ1BTQnZZbW91YldWMGFHOWtJSHg4SUNkSFJWUW5PMXh1SUNBZ0lHOWlhaTVrWVhSaFZIbHdaU0E5SUc5aWFpNWtZWFJoVkhsd1pTQjhmQ0FuYW5OdmJpYzdYRzVjYmlBZ0lDQXZMeURscG9MbW5wem9yN2Ztc1lMa3VJM21tSzlIUlZUdnZJemxpSm5sbktoVlVremt1SzNvaDZybGlxamxpcURrdUlybm1idmx2WlhtZ0lIbGtvemxoYWpsc1lEbGo0TG1sYkJjYmlBZ0lDQnBaaUFvSVdOdmJtWnBaeTVrYjA1dmRGVnpaVkYxWlhKNVUzUnlhVzVuSUNZbUlHOWlhaTV0WlhSb2IyUWdJVDA5SUZ3aVIwVlVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSE4wWVhSMWN5NXpaWE56YVc5dUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ2RYSnNMbk5sZEZCaGNtRnRjeWh2WW1vdWRYSnNMQ0I3SUZ0amIyNW1hV2N1YzJWemMybHZiazVoYldWZE9pQnpkR0YwZFhNdWMyVnpjMmx2YmlCOUtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J2WW1vdWRYSnNJRDBnZFhKc0xuTmxkRkJoY21GdGN5aHZZbW91ZFhKc0xDQm5aQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnNWFTSDU1U281WitmNVpDTjZZQzc2TDZSWEc0Z0lDQWdiMkpxTG5WeWJDQTlJSFZ5YkM1eVpYQnNZV05sUkc5dFlXbHVLRzlpYWk1MWNtd3BPMXh1WEc0Z0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXpkR0Z5ZENodlltb3BPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHOWlhanRjYm4xY2JseHVMeThnNXFDODVieVA1WXlXNWFTRTU1Q0c1TGlLNUx5ZzVwYUg1THUyNTVxRWIySnE1WWFGNWE2NVhHNW1kVzVqZEdsdmJpQnBibWwwYVdGc2FYcGxWWEJzYjJGa1JtbHNaVTlpYWlodlltbzZJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0NGdlltb3VabTl5YlVSaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtWnZjbTFFWVhSaElEMGdlMzA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiMkpxTG1obFlXUmxjaUE5SUc5aWFpNW9aV0ZrWlhJZ1B5QnZZbW91YUdWaFpHVnlJRG9nZTMwN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1YzJWMFNHVmhaR1Z5SUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQm9aV0ZrWlhJZ1BTQmpiMjVtYVdjdWMyVjBTR1ZoWkdWeUtDazdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYUdWaFpHVnlJRDA5UFNBbmIySnFaV04wSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtaGxZV1JsY2lBOUlIc3VMaTV2WW1vdWFHVmhaR1Z5TENBdUxpNW9aV0ZrWlhKOU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG5ObGRFaGxZV1JsY2lBOVBUMGdKMjlpYW1WamRDY3BJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtaGxZV1JsY2lBOUlIc3VMaTV2WW1vdWFHVmhaR1Z5TENBdUxpNWpiMjVtYVdjdWMyVjBTR1ZoWkdWeWZUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iMkpxTG05eWFXZHBibFZ5YkNBaFBUMGdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1ZFhKc0lDWW1JSE4wWVhSMWN5NXpaWE56YVc5dUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1bWIzSnRSR0YwWVNBOUlIc2dMaTR1YjJKcUxtWnZjbTFFWVhSaElHRnpJRzlpYW1WamRDd2dXMk52Ym1acFp5NXpaWE56YVc5dVRtRnRaVjA2SUhOMFlYUjFjeTV6WlhOemFXOXVJSDA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnNWFhQzVwNmM1cHlKNVlXbzViR0E1WStDNXBXdzc3eU01WWlaNXJlNzVZcWdYRzRnSUNBZ1kyOXVjM1FnWjJRZ1BTQm5aWFJIYkc5aVlXeEVZWFJoS0NrN1hHNGdJQ0FnYjJKcUxtWnZjbTFFWVhSaElEMGdleUF1TGk1blpDd2dMaTR1YjJKcUxtWnZjbTFFWVhSaElIMDdYRzVjYmlBZ0lDQnBaaUFvSVdOdmJtWnBaeTVrYjA1dmRGVnpaVkYxWlhKNVUzUnlhVzVuS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJT1d3aHVlWnUrbVpodWFBZ2VTNW4rVzRwdVdjcUhWeWJPUzRpbHh1SUNBZ0lDQWdJQ0JwWmlBb2MzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1MWNtd2dQU0IxY213dWMyVjBVR0Z5WVcxektHOWlhaTUxY213c0lIc2dXMk52Ym1acFp5NXpaWE56YVc5dVRtRnRaVjA2SUhOMFlYUjFjeTV6WlhOemFXOXVJSDBwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHZJT1dGcU9XeGdPV1BndWFWc09XUWpPYVh0dWFVdnVXY3FIVnliT1M0aWx4dUlDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ2RYSnNMbk5sZEZCaGNtRnRjeWh2WW1vdWRYSnNMQ0JuWkNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4ZzVhU0g1NVNvNVorZjVaQ042WUM3Nkw2UlhHNGdJQ0FnYjJKcUxuVnliQ0E5SUhWeWJDNXlaWEJzWVdObFJHOXRZV2x1S0c5aWFpNTFjbXdwTzF4dVhHNGdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTV6ZEdGeWRDaHZZbW9wTzF4dVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWjJWMFIyeHZZbUZzUkdGMFlTZ3BJSHRjYmlBZ0lDQnNaWFFnWjJRNklHRnVlU0E5SUh0OU8xeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1kc2IySmhiRVJoZEdFZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQm5aQ0E5SUdOdmJtWnBaeTVuYkc5aVlXeEVZWFJoS0NrN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbWRzYjJKaGJFUmhkR0VnUFQwOUlGd2liMkpxWldOMFhDSXBJSHRjYmlBZ0lDQWdJQ0FnWjJRZ1BTQmpiMjVtYVdjdVoyeHZZbUZzUkdGMFlUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR2RrTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJrYjFKbGNYVmxjM1FvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlrZ2UxeHVJQ0FnSUc5aWFpQTlJR2x1YVhScFlXeHBlbVZTWlhGMVpYTjBUMkpxS0c5aWFpazdYRzRnSUNBZ2FXWWdLRzlpYWk1eVpVeHZaMmx1UTI5MWJuUWdQVDA5SURBZ0ppWWdkSGx3Wlc5bUlHTnZibVpwWnk1aVpXWnZjbVZUWlc1a0lEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdiMkpxSUQwZ1kyOXVabWxuTG1KbFptOXlaVk5sYm1Rb2IySnFMQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJpazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlR4WFpXTm9ZWFJOYVc1cGNISnZaM0poYlM1U1pYRjFaWE4wVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MFBpZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhkNExuSmxjWFZsYzNRb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTGk0dWIySnFMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3loeVpYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHWmhhV3dvY21WektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNWFhQzVwNmM1TGk3NVorZjVaQ041TGlONVkrdjU1U283N3lNNUxpVTZZV041NzJ1NUxxRzVhU0g1THU5NVorZjVaQ043N3lNNUxpVTVweXM1cXloNksrMzVyR0M1cHlxNUwyLzU1U281YVNINUx1OTVaK2Y1WkNOWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjejh1WlhKeVRYTm5QeTVwYm1SbGVFOW1LQ2REVDA1T1JVTlVTVTlPWDFKRlJsVlRSVVFuS1NBK1BTQXdJQ1ltSUhWeWJDNXBjMGx1UW1GamEzVndSRzl0WVdsdVRHbHpkQ2h2WW1vdWRYSnNLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURsdklEbGtLL2xwSWZrdTczbG41L2xrSTFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXNWhZbXhsUW1GamEzVndSRzl0WVdsdUtHOWlhaTUxY213cE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEcGg0M29yNVhrdUlEbXJLRmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1J2VW1WeGRXVnpkQ2h2WW1vcExuUm9aVzRvS0hKbGN5azlQaUJ5WlhOdmJIWmxLSEpsY3lrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0hzZ2RIbHdaVG9nSjNONWMzUmxiUzFsY25KdmNpY3NJSEpsY3lCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjIxd2JHVjBaU2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTVqYjIxd2JHVjBaU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTVqYjIxd2JHVjBaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iMkpxTG5Ob2IzZE1iMkZrYVc1bktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4dllXUnBibWN1YUdsa1pTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmtiMVZ3Ykc5aFpFWnBiR1VvYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dlMXh1SUNBZ0lHOWlhaUE5SUdsdWFYUnBZV3hwZW1WVmNHeHZZV1JHYVd4bFQySnFLRzlpYWlrN1hHNGdJQ0FnYVdZZ0tHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BUMDlJREFnSmlZZ2RIbHdaVzltSUdOdmJtWnBaeTVpWldadmNtVlRaVzVrSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFJRDBnWTI5dVptbG5MbUpsWm05eVpWTmxibVFvYjJKcUxDQnpkR0YwZFhNdWMyVnpjMmx2YmlrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaVHhYWldOb1lYUk5hVzVwY0hKdlozSmhiUzVWY0d4dllXUkdhV3hsVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MFBpZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhkNExuVndiRzloWkVacGJHVW9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ0xpNHViMkpxTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5aHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1poYVd3b2NtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNUxpNzVaK2Y1WkNONUxpTjVZK3Y1NVNvNzd5TTVMaVU2WVdONTcydTVMcUc1YVNINUx1OTVaK2Y1WkNONzd5TTVMaVU1cHlzNXF5aDZLKzM1ckdDNXB5cTVMMi81NVNvNWFTSDVMdTk1WitmNVpDTlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEpsY3o4dVpYSnlUWE5uUHk1cGJtUmxlRTltS0NkRFQwNU9SVU5VU1U5T1gxSkZSbFZUUlVRbktTQStQU0F3SUNZbUlIVnliQzVwYzBsdVFtRmphM1Z3Ukc5dFlXbHVUR2x6ZENodlltb3VkWEpzS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbHZJRGxrSy9scElma3U3M2xuNS9sa0kxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaVzVoWW14bFFtRmphM1Z3Ukc5dFlXbHVLRzlpYWk1MWNtd3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RHBoNDNvcjVYa3VJRG1yS0ZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSdlZYQnNiMkZrUm1sc1pTaHZZbW9wTG5Sb1pXNG9LSEpsY3lrOVBpQnlaWE52YkhabEtISmxjeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSHNnZEhsd1pUb2dKM041YzNSbGJTMWxjbkp2Y2ljc0lISmxjeUI5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjF3YkdWMFpTZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNWpiMjF3YkdWMFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2IySnFMbk5vYjNkTWIyRmthVzVuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3h2WVdScGJtY3VhR2xrWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCeVpYRjFaWE4wUEZSU1pYTndQaWh2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1S1RvZ1VISnZiV2x6WlR4VVVtVnpjRDRnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHOWlhaUE5SUhCeVpVUnZLRzlpYWl3Z2NtVnpiMngyWlN3Z2NtVnFaV04wS1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvWTI5dVptbG5MbTF2WTJ0S2MyOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYlc5amExSmxjM0J2Ym5ObElEMGdiVzlqYTAxaGJtRm5aWEl1WjJWMEtHOWlhaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYlc5amExSmxjM0J2Ym5ObEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhKbGMzQnZibk5sSUQwZ2NtVnpjRzl1YzJWSVlXNWtiR1Z5TG5KbGMzQnZibk5sUm05eVVtVnhkV1Z6ZENodGIyTnJVbVZ6Y0c5dWMyVXNJRzlpYWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WemNHOXVjMlVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLRzlpYWk1allXTm9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZqYUdWTllXNWhaMlZ5TG1kbGRDaHZZbW9wTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdjMlZ6YzJsdmJrMWhibUZuWlhJdWJXRnBiaWh2WW1vcExuUm9aVzRvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSdlVtVnhkV1Z6ZENodlltb3BYRzRnSUNBZ0lDQWdJSDBwTG5Sb1pXNG9LSEpsY3pvZ1YyVmphR0YwVFdsdWFYQnliMmR5WVcwdVVtVnhkV1Z6ZEZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhKbGMzQnZibk5sSUQwZ2NtVnpjRzl1YzJWSVlXNWtiR1Z5TG5KbGMzQnZibk5sUm05eVVtVnhkV1Z6ZENoeVpYTXNJRzlpYWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVnpjRzl1YzJVZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0hKbGMzQnZibk5sS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNrdVkyRjBZMmdvS0dVNklFbEZjbkp2Y2s5aWFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR05oZEdOb1NHRnVaR3hsY2lobExDQnZZbW9zSUhKbGFtVmpkQ2xjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUIxY0d4dllXUkdhV3hsS0c5aWFqb2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBPaUJoYm5rZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJRzlpYWlBOUlIQnlaVVJ2S0c5aWFpd2djbVZ6YjJ4MlpTd2djbVZxWldOMEtUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1kyOXVabWxuTG0xdlkydEtjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2JXOWphMUpsYzNCdmJuTmxJRDBnYlc5amEwMWhibUZuWlhJdVoyVjBLRzlpYWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JXOWphMUpsYzNCdmJuTmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElISmxjM0J2Ym5ObElEMGdjbVZ6Y0c5dWMyVklZVzVrYkdWeUxuSmxjM0J2Ym5ObFJtOXlWWEJzYjJGa1JtbHNaU2h0YjJOclVtVnpjRzl1YzJVc0lHOWlhaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6Y0c5dWMyVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYzJWemMybHZiazFoYm1GblpYSXViV0ZwYmlodlltb3BMblJvWlc0b0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHUnZWWEJzYjJGa1JtbHNaU2h2WW1vcFhHNGdJQ0FnSUNBZ0lIMHBMblJvWlc0b0tISmxjem9nVjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VlhCc2IyRmtSbWxzWlZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhKbGMzQnZibk5sSUQwZ2NtVnpjRzl1YzJWSVlXNWtiR1Z5TG5KbGMzQnZibk5sUm05eVZYQnNiMkZrUm1sc1pTaHlaWE1zSUc5aWFpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jbVZ6Y0c5dWMyVWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtISmxjM0J2Ym5ObEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTa3VZMkYwWTJnb0tHVTZJRWxGY25KdmNrOWlhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRjBZMmhJWVc1a2JHVnlLR1VzSUc5aWFpd2djbVZxWldOMEtWeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lIMHBYRzU5WEc1Y2JtWjFibU4wYVc5dUlHVnVZV0pzWlVKaFkydDFjRVJ2YldGcGJpaDFjbXc2SUhOMGNtbHVaeUE5SUZ3aVhDSXBJSHRjYmlBZ0lDQnBaaUFvSVhOMFlYUjFjeTVwYzBWdVlXSnNaVUpoWTJ0MWNFUnZiV0ZwYmlrZ2UxeHVJQ0FnSUNBZ0lDQnpkR0YwZFhNdWFYTkZibUZpYkdWQ1lXTnJkWEJFYjIxaGFXNGdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWlZV05yZFhCRWIyMWhhVzVGYm1GaWJHVkRZV3hzWW1GamF5QTlQVDBnSjJaMWJtTjBhVzl1SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dVptbG5MbUpoWTJ0MWNFUnZiV0ZwYmtWdVlXSnNaVU5oYkd4aVlXTnJLSFZ5YkNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm1iM0p0WVhRc1hHNGdJQ0FnY21WeGRXVnpkQ3hjYmlBZ0lDQjFjR3h2WVdSR2FXeGxMRnh1SUNBZ0lHVnVZV0pzWlVKaFkydDFjRVJ2YldGcGJseHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVxdWVzdEhhbmRsZXJcIik7XG52YXIgY2FjaGVNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9jYWNoZU1hbmFnZXJcIik7XG52YXIgZHVyYXRpb25SZXBvcnRlcl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25SZXBvcnRlclwiKTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vc2Vzc2lvbk1hbmFnZXJcIik7XG52YXIganNvblN1cGVyc2V0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9qc29uU3VwZXJzZXRcIik7XG5mdW5jdGlvbiByZXNwb25zZUZvclJlcXVlc3QocmVzLCBvYmopIHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5lbmQob2JqKTtcbiAgICAgICAgaWYgKG9iai5kYXRhVHlwZSA9PT0gJ2pzb24nICYmIHR5cGVvZiByZXMuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcy5kYXRhID0ganNvblN1cGVyc2V0XzEuZGVmYXVsdChyZXMuZGF0YSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gSlNPTi5wYXJzZShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5sb2dpblRyaWdnZXIocmVzLmRhdGEpICYmIG9iai5yZUxvZ2luQ291bnQgIT09IHVuZGVmaW5lZCAmJiBvYmoucmVMb2dpbkNvdW50IDwgY29uZmlnXzEuZGVmYXVsdC5yZUxvZ2luTGltaXQpIHtcbiAgICAgICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5kZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnJlcXVlc3Qob2JqKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NUcmlnZ2VyKHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgdmFyIHJlYWxEYXRhID0gXCJcIjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YShyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuc2V0KG9iaiwgcmVhbERhdGEpO1xuICAgICAgICAgICAgaWYgKCFvYmoubm9DYWNoZUZsYXNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFsRGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICdsb2dpYy1lcnJvcicsIHJlczogcmVzIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IHsgdHlwZTogJ2h0dHAtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlc3BvbnNlRm9yVXBsb2FkRmlsZShyZXMsIG9iaikge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBqc29uU3VwZXJzZXRfMS5kZWZhdWx0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmxvZ2luVHJpZ2dlcihyZXMuZGF0YSkgJiYgb2JqLnJlTG9naW5Db3VudCAhPT0gdW5kZWZpbmVkICYmIG9iai5yZUxvZ2luQ291bnQgPCBjb25maWdfMS5kZWZhdWx0LnJlTG9naW5MaW1pdCkge1xuICAgICAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LmRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc1RyaWdnZXIocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICB2YXIgcmVhbERhdGEgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyB7IHR5cGU6ICdodHRwLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgcmVzcG9uc2VGb3JSZXF1ZXN0OiByZXNwb25zZUZvclJlcXVlc3QsXG4gICAgcmVzcG9uc2VGb3JVcGxvYWRGaWxlOiByZXNwb25zZUZvclVwbG9hZEZpbGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ6Y0c5dWMyVklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzl5WlhOd2IyNXpaVWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zYlVSQlFUWkRPMEZCUXpkRExDdERRVUY1UXp0QlFVTjZReXgxUkVGQmFVUTdRVUZEYWtRc2JVUkJRVFpETzBGQlJUZERMSEZFUVVFclF6dEJRVVV2UXl4VFFVRlRMR3RDUVVGclFpeERRVU4yUWl4SFFVRnRSQ3hGUVVOdVJDeEhRVUZ0UWp0SlFVVnVRaXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NSMEZCUnl4RlFVRkZPMUZCUlhoQ0xEQkNRVUZuUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVWN4UWl4SlFVRkpMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVFVGQlRTeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhSUVVGUkxFVkJRVVU3V1VGRGVrUXNSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXh6UWtGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVOc1F5eEpRVUZKTzJkQ1FVTkJMRWRCUVVjc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WVVGRGJrTTdXVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRuUWtGRFVpeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMR0ZCUVdFc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlJTeERRVUZCTzJGQlEzSkRPMU5CUTBvN1VVRkZSQ3hKUVVGSkxHZENRVUZOTEVOQlFVTXNXVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNXVUZCV1N4TFFVRkxMRk5CUVZNc1NVRkJTU3hIUVVGSExFTkJRVU1zV1VGQldTeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1dVRkJZU3hGUVVGRk8xbEJSVGRITEhkQ1FVRmpMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03V1VGRE5VSXNUMEZCVHl4M1FrRkJZeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTjBRenRoUVVGTkxFbEJRVWtzWjBKQlFVMHNRMEZCUXl4alFVRmpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTzFsQlJYaERMRWxCUVVrc1VVRkJVU3hIUVVGelF5eEZRVUZGTEVOQlFVTTdXVUZEY2tRc1NVRkJTVHRuUWtGRFFTeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhYUVVGWExFdEJRVXNzVlVGQlZTeEZRVUZGTzI5Q1FVTXhReXhSUVVGUkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJsQ1FVTXpRenR4UWtGQlRUdHZRa0ZEU0N4UlFVRlJMRWRCUVVjc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF6dHBRa0ZEZGtJN1lVRkRTanRaUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTEVkQlFVVTdXVUZGWkN4elFrRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1dVRkRhRU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRVZCUVVVN1owSkJSVzVDTEVsQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJUeXhMUVVGTExGVkJRVlVzUlVGQlJUdHZRa0ZEYmtNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0cFFrRkRla0k3Y1VKQlFVMDdiMEpCUTBnc1QwRkJUeXhSUVVGUkxFTkJRVU03YVVKQlEyNUNPMkZCUTBvN1UwRkRTanRoUVVGTk8xbEJSVWdzVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4aFFVRmhMRVZCUVVVc1IwRkJSeXhMUVVGQkxFVkJRVVVzUTBGQlFUdFRRVU55UXp0TFFVTktPMU5CUVUwN1VVRkZTQ3hOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEZsQlFWa3NSVUZCUlN4SFFVRkhMRXRCUVVFc1JVRkJSU3hEUVVGQk8wdEJRM0JETzBGQlEwd3NRMEZCUXp0QlFVVkVMRk5CUVZNc2NVSkJRWEZDTEVOQlF6RkNMRWRCUVhORUxFVkJRM1JFTEVkQlFYTkNPMGxCUlhSQ0xFbEJRVWtzUjBGQlJ5eERRVUZETEZWQlFWVXNTMEZCU3l4SFFVRkhMRVZCUVVVN1VVRkZlRUlzTUVKQlFXZENMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJ6RkNMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zU1VGQlNTeExRVUZMTEZGQlFWRXNSVUZCUlR0WlFVTTVRaXhIUVVGSExFTkJRVU1zU1VGQlNTeEhRVUZITEhOQ1FVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEyeERMRWxCUVVrN1owSkJRMEVzUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0aFFVTnVRenRaUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzJkQ1FVTlNMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzWVVGQllTeEZRVUZGTEVkQlFVY3NTMEZCUVN4RlFVRkZMRU5CUVVFN1lVRkRja003VTBGRFNqdFJRVVZFTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhaUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhaUVVGWkxFdEJRVXNzVTBGQlV5eEpRVUZKTEVkQlFVY3NRMEZCUXl4WlFVRlpMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFpRVUZoTEVWQlFVVTdXVUZGTjBjc2QwSkJRV01zUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0WlFVTTFRaXhQUVVGUExIZENRVUZqTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRM3BETzJGQlFVMHNTVUZCU1N4blFrRkJUU3hEUVVGRExHTkJRV01zUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVN1dVRkZlRU1zU1VGQlNTeFJRVUZSTEVkQlFYTkRMRVZCUVVVc1EwRkJRenRaUVVOeVJDeEpRVUZKTzJkQ1FVTkJMRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZkQlFWY3NTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRekZETEZGQlFWRXNSMEZCUnl4blFrRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN2FVSkJRek5ETzNGQ1FVRk5PMjlDUVVOSUxGRkJRVkVzUjBGQlJ5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRPMmxDUVVOMlFqdGhRVU5LTzFsQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1IwRkJSVHRaUVVWa0xFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNUMEZCVHl4TFFVRkxMRlZCUVZVc1JVRkJSVHRuUWtGRGJrTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dGhRVU42UWp0cFFrRkJUVHRuUWtGRFNDeFBRVUZQTEZGQlFWRXNRMEZCUXp0aFFVTnVRanRUUVVOS08yRkJRVTA3V1VGRlNDeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMR0ZCUVdFc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlJTeERRVUZCTzFOQlEzSkRPMHRCUTBvN1UwRkJUVHRSUVVWSUxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNXVUZCV1N4RlFVRkZMRWRCUVVjc1MwRkJRU3hGUVVGRkxFTkJRVUU3UzBGRGNFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeHJRa0ZCYTBJc2IwSkJRVUU3U1VGRGJFSXNjVUpCUVhGQ0xIVkNRVUZCTzBOQlEzaENMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ1kyOXVabWxuSUdaeWIyMGdKeTR1TDNOMGIzSmxMMk52Ym1acFp5ZGNibWx0Y0c5eWRDQnlaWEYxWlhOMFNHRnVaR3hsY2lCbWNtOXRJQ2N1TDNKbGNYVmxjM1JJWVc1a2JHVnlKMXh1YVcxd2IzSjBJR05oWTJobFRXRnVZV2RsY2lCbWNtOXRJQ2N1TDJOaFkyaGxUV0Z1WVdkbGNpZGNibWx0Y0c5eWRDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUlHWnliMjBnSnk0dlpIVnlZWFJwYjI1U1pYQnZjblJsY2lkY2JtbHRjRzl5ZENCelpYTnphVzl1VFdGdVlXZGxjaUJtY205dElDY3VMM05sYzNOcGIyNU5ZVzVoWjJWeUoxeHVhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUxDQkpRVzU1VDJKcVpXTjBJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aU8xeHVhVzF3YjNKMElHcHpiMjVUZFhCbGNuTmxkQ0JtY205dElDY3VMaTkxZEdsc0wycHpiMjVUZFhCbGNuTmxkQ2RjYmx4dVpuVnVZM1JwYjI0Z2NtVnpjRzl1YzJWR2IzSlNaWEYxWlhOMEtGeHVJQ0FnSUhKbGN6b2dWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ3hjYmlBZ0lDQnZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVYRzRwT2lCaGJua2dlMXh1SUNBZ0lHbG1JQ2h5WlhNdWMzUmhkSFZ6UTI5a1pTQTlQVDBnTWpBd0tTQjdYRzVjYmlBZ0lDQWdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTVsYm1Rb2IySnFLVHRjYmlBZ0lDQWdJQ0FnWEc0Z0lDQWdJQ0FnSUM4dklPaXZ0K2F4Z3VhZ3ZPVzhqK1M0dW1wemIyN3Z2SXprdllib3Y1VGxtNTdrdW9aemRISnBibWZ2dkl6b3I3VG1tSTdsaG9YbHJybmt1SzNsajYvb2c3M2xyWmpsbktqbHI3em9oN1RrdmIvbHZwZEtZWFpoVTJOeWFYQjA1YnlDNWJpNDU1cUU1YTJYNTZ5bVhHNGdJQ0FnSUNBZ0lHbG1JQ2h2WW1vdVpHRjBZVlI1Y0dVZ1BUMDlJQ2RxYzI5dUp5QW1KaUIwZVhCbGIyWWdjbVZ6TG1SaGRHRWdQVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhNdVpHRjBZU0E5SUdwemIyNVRkWEJsY25ObGRDaHlaWE11WkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsY3k1a1lYUmhJRDBnU2xOUFRpNXdZWEp6WlNoeVpYTXVaR0YwWVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnZXlCMGVYQmxPaUFuYkc5bmFXTXRaWEp5YjNJbkxDQnlaWE1nZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLR052Ym1acFp5NXNiMmRwYmxSeWFXZG5aWEloS0hKbGN5NWtZWFJoS1NBbUppQnZZbW91Y21WTWIyZHBia052ZFc1MElDRTlQU0IxYm1SbFptbHVaV1FnSmlZZ2IySnFMbkpsVEc5bmFXNURiM1Z1ZENBOElHTnZibVpwWnk1eVpVeHZaMmx1VEdsdGFYUWhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURubWJ2bHZaWG1nSUhscExIbWxZanZ2SXprdUpUcGg0M29yNVhtcktIbWxiRGt1STNvdG9Yb3Y0ZnBoWTNudmE1Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5sYzNOcGIyNU5ZVzVoWjJWeUxtUmxiRk5sYzNOcGIyNG9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYRjFaWE4wU0dGdVpHeGxjaTV5WlhGMVpYTjBLRzlpYWlrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMjl1Wm1sbkxuTjFZMk5sYzNOVWNtbG5aMlZ5S0hKbGN5NWtZWFJoS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVvNmw1WStqNkwrVTVadWU1b2lRNVlxZjU2Q0JYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZoYkVSaGRHRTZJSE4wY21sdVp5QjhJRWxCYm5sUFltcGxZM1FnZkNCQmNuSmhlVUoxWm1abGNpQTlJRndpWENJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxuTjFZMk5sYzNORVlYUmhJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFlXeEVZWFJoSUQwZ1kyOXVabWxuTG5OMVkyTmxjM05FWVhSaEtISmxjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WldGc1JHRjBZU0E5SUhKbGN5NWtZWFJoTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0OVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbnZKUGxyWmpsclpqbGdxaGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaFkyaGxUV0Z1WVdkbGNpNXpaWFFvYjJKcUxDQnlaV0ZzUkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JVzlpYWk1dWIwTmhZMmhsUm14aGMyZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHprdUxya3VvYmt2NTNvcjRIcG9iWHBuYUxrdUkzcGw2cm5nNEh2dkl6bGlKbmt1STNsbTU3b3NJUHZ2SXpsajZybW1LL252SlBsclpqbW5JRG1sckRtbGJEbWphN3Z2SXpsdm9Ya3VJdm1yS0hvdjV2bGhhWGxobzNubEtoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTV6ZFdOalpYTnpJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbk4xWTJObGMzTW9jbVZoYkVSaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldGc1JHRjBZVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG1qcVhsajZQb3Y1VGxtNTdscExIb3RLWG5vSUZjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUhzZ2RIbHdaVG9nSjJ4dloybGpMV1Z5Y205eUp5d2djbVZ6SUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUM4dklHaDBkSEJ6NkwrVTVadWU1NHEyNW9DQjU2Q0I2WjJlTWpBd1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUhzZ2RIbHdaVG9nSjJoMGRIQXRaWEp5YjNJbkxDQnlaWE1nZlZ4dUlDQWdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdjbVZ6Y0c5dWMyVkdiM0pWY0d4dllXUkdhV3hsS0Z4dUlDQWdJSEpsY3pvZ1YyVmphR0YwVFdsdWFYQnliMmR5WVcwdVZYQnNiMkZrUm1sc1pWTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ3hjYmlBZ0lDQnZZbW82SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1WEc0cE9pQmhibmtnZTF4dUlDQWdJR2xtSUNoeVpYTXVjM1JoZEhWelEyOWtaU0E5UFQwZ01qQXdLU0I3WEc1Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1bGJtUW9iMkpxS1R0Y2JseHVJQ0FnSUNBZ0lDQXZMeURsaG9YbHJybmt1SzNsajYvb2c3M2xyWmpsbktqbHI3em9oN1RrdmIvbHZwZEtZWFpoVTJOeWFYQjA1YnlDNWJpNDU1cUU1YTJYNTZ5bVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdjbVZ6TG1SaGRHRWdQVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhNdVpHRjBZU0E5SUdwemIyNVRkWEJsY25ObGRDaHlaWE11WkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsY3k1a1lYUmhJRDBnU2xOUFRpNXdZWEp6WlNoeVpYTXVaR0YwWVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnZXlCMGVYQmxPaUFuYkc5bmFXTXRaWEp5YjNJbkxDQnlaWE1nZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLR052Ym1acFp5NXNiMmRwYmxSeWFXZG5aWEloS0hKbGN5NWtZWFJoS1NBbUppQnZZbW91Y21WTWIyZHBia052ZFc1MElDRTlQU0IxYm1SbFptbHVaV1FnSmlZZ2IySnFMbkpsVEc5bmFXNURiM1Z1ZENBOElHTnZibVpwWnk1eVpVeHZaMmx1VEdsdGFYUWhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURubWJ2bHZaWG1nSUhscExIbWxZanZ2SXprdUpUcGg0M29yNVhtcktIbWxiRGt1STNvdG9Yb3Y0ZnBoWTNudmE1Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5sYzNOcGIyNU5ZVzVoWjJWeUxtUmxiRk5sYzNOcGIyNG9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYRjFaWE4wU0dGdVpHeGxjaTUxY0d4dllXUkdhV3hsS0c5aWFpazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTI5dVptbG5Mbk4xWTJObGMzTlVjbWxuWjJWeUtISmxjeTVrWVhSaEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1bzZsNVkrajZMK1U1WnVlNW9pUTVZcWY1NkNCWEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY21WaGJFUmhkR0U2SUhOMGNtbHVaeUI4SUVsQmJubFBZbXBsWTNRZ2ZDQkJjbkpoZVVKMVptWmxjaUE5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5Mbk4xWTJObGMzTkVZWFJoSUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxZV3hFWVhSaElEMGdZMjl1Wm1sbkxuTjFZMk5sYzNORVlYUmhLSEpsY3k1a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpXRnNSR0YwWVNBOUlISmxjeTVrWVhSaE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdDlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdiMkpxTG5OMVkyTmxjM01nUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNXpkV05qWlhOektISmxZV3hFWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsWVd4RVlYUmhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVvNmw1WStqNkwrVTVadWU1YVN4NkxTbDU2Q0JYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUI3SUhSNWNHVTZJQ2RzYjJkcFl5MWxjbkp2Y2ljc0lISmxjeUI5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0F2THlCb2RIUndjK2kvbE9XYm51ZUt0dWFBZ2VlZ2dlbWRuakl3TUZ4dUlDQWdJQ0FnSUNCMGFISnZkeUI3SUhSNWNHVTZJQ2RvZEhSd0xXVnljbTl5Snl3Z2NtVnpJSDFjYmlBZ0lDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2JpQWdJQ0J5WlhOd2IyNXpaVVp2Y2xKbGNYVmxjM1FzWEc0Z0lDQWdjbVZ6Y0c5dWMyVkdiM0pWY0d4dllXUkdhV3hsWEc1OU8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RIYW5kbGVyXCIpO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xudmFyIHVybF8xID0gcmVxdWlyZShcIi4uL3V0aWwvdXJsXCIpO1xudmFyIGNoZWNrU2Vzc2lvblByb21pc2UgPSBudWxsO1xuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB3eC5jaGVja1Nlc3Npb24oe1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KCd3eF9jaGVja1Nlc3Npb24nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja1Nlc3Npb25Qcm9taXNlO1xufVxuZnVuY3Rpb24gaXNTZXNzaW9uRXhwaXJlT3JFbXB0eSgpIHtcbiAgICBpZiAoIXN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgbmV3IERhdGUoKS5nZXRUaW1lKCkgPiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY2hlY2tMb2dpbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAoaXNTZXNzaW9uRXhwaXJlT3JFbXB0eSgpKSB7XG4gICAgICAgICAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbnZhciBsb2dpblByb21pc2UgPSBudWxsO1xuZnVuY3Rpb24gZG9Mb2dpbigpIHtcbiAgICBpZiAoIWxvZ2luUHJvbWlzZSkge1xuICAgICAgICBsb2dpblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBsb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxvZ2luUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsb2dpblByb21pc2U7XG59XG5mdW5jdGlvbiBsb2dpbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2RlMlNlc3Npb24ocmVzLmNvZGUpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXM6IHJlcyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KCd3eF9sb2dpbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogXCJzeXN0ZW0tZXJyb3JcIiwgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0U2Vzc2lvbihzZXNzaW9uKSB7XG4gICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUsXG4gICAgICAgIGRhdGE6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvblxuICAgIH0pO1xufVxuZnVuY3Rpb24gY29kZTJTZXNzaW9uKGNvZGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhLCBvYmo7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSA9PT0gXCJmdW5jdGlvblwiKSkgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YShjb2RlKV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDNdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmNvZGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2NvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZV0gPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5jb2RlID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5mb3JtYXQoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCksXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiB0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicgPyBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcigpIDogY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGNvbmZpZ18xLmRlZmF1bHQuYmVmb3JlU2VuZChvYmopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnJlcGxhY2VEb21haW4ob2JqLnVybCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiwgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4LnJlcXVlc3QoX19hc3NpZ24oX19hc3NpZ24oe30sIG9iaiksIHsgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnJlcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ucmVwb3J0LCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5zdWNjZXNzKHJlcy5kYXRhLCByZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHR5cGU6IFwiaHR0cC1lcnJvclwiLCByZXM6IHJlcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoX2EgPSByZXMgPT09IG51bGwgfHwgcmVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXMuZXJyTXNnKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5kZXhPZignQ09OTkVDVElPTl9SRUZVU0VEJykpID49IDAgJiYgdXJsXzEuZGVmYXVsdC5pc0luQmFja3VwRG9tYWluTGlzdChvYmoudXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5lbmFibGVCYWNrdXBEb21haW4ob2JqLnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUyU2Vzc2lvbihjb2RlKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsgcmV0dXJuIHJlc29sdmUocmVzKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogXCJzeXN0ZW0tZXJyb3JcIiwgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRlbFNlc3Npb24oKSB7XG4gICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gJyc7XG4gICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZVxuICAgIH0pO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBJbmZpbml0eTtcbiAgICAgICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleVxuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWluKHJlbGF0ZWRSZXF1ZXN0T2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJldHJ5ID0gIXJlbGF0ZWRSZXF1ZXN0T2JqXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1haW4oKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7IH1cbiAgICAgICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLmRlZmF1bHQocmVsYXRlZFJlcXVlc3RPYmopLnRoZW4ocmVsYXRlZFJlcXVlc3RPYmouX3Jlc29sdmUpLmNhdGNoKHJlbGF0ZWRSZXF1ZXN0T2JqLl9yZWplY3QpOyB9O1xuICAgICAgICByZXR1cm4gY2hlY2tMb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPyBQcm9taXNlLnJlc29sdmUoKSA6IGNoZWNrU2Vzc2lvbigpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9KTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgbWFpbjogbWFpbixcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uLFxuICAgIGRlbFNlc3Npb246IGRlbFNlc3Npb25cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlZ6YzJsdmJrMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM05sYzNOcGIyNU5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCUTNCRExDdERRVUY1UXp0QlFVTjZReXgxUkVGQmFVUTdRVUZEYWtRc2JVUkJRVFpETzBGQlF6ZERMREpEUVVGeFF6dEJRVU55UXl3d1EwRkJiME03UVVGRGNFTXNiVU5CUVRaQ08wRkJTVGRDTEVsQlFVa3NiVUpCUVcxQ0xFZEJRVkVzU1VGQlNTeERRVUZETzBGQlJYQkRMRk5CUVZNc1dVRkJXVHRKUVVOcVFpeEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVU3VVVGRGRFSXNiVUpCUVcxQ0xFZEJRVWNzU1VGQlNTeFBRVUZQTEVOQlFVOHNWVUZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUVHRaUVVOd1JDeEpRVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzFsQlEyNURMRVZCUVVVc1EwRkJReXhaUVVGWkxFTkJRVU03WjBKQlExb3NUMEZCVHp0dlFrRkZTQ3hQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzJkQ1FVTnlRaXhEUVVGRE8yZENRVU5FTEVsQlFVa3NSVUZCU2p0dlFrRkZTU3hWUVVGVkxFVkJRVVVzUTBGQlF6dHZRa0ZEWWl4UFFVRlBMRTlCUVU4c1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF6dDNRa0ZEYkVJc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dHZRa0ZEY2tJc1EwRkJReXhGUVVGRkxGVkJRVU1zUjBGQlVUdDNRa0ZEVWl4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZEZGtJc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlExQXNRMEZCUXp0blFrRkRSQ3hSUVVGUk8yOUNRVU5LTEVsQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdiMEpCUTJwRExEQkNRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4TFFVRkxMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlF6TkVMRU5CUVVNN1lVRkRTaXhEUVVGRExFTkJRVUU3VVVGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0TFFVTk1PMGxCUTBRc1QwRkJUeXh0UWtGQmJVSXNRMEZCUXp0QlFVTXZRaXhEUVVGRE8wRkJSMFFzVTBGQlV5eHpRa0ZCYzBJN1NVRkRNMElzU1VGQlNTeERRVUZETEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJSV3BDTEU5QlFVOHNTVUZCU1N4RFFVRkJPMHRCUTJRN1NVRkRSQ3hKUVVGSkxHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFbEJRVWtzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1IwRkJSeXhuUWtGQlRTeERRVUZETEdGQlFXRXNSVUZCUlR0UlFVVjZSU3hWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVU5pTEU5QlFVOHNTVUZCU1N4RFFVRkJPMHRCUTJRN1NVRkRSQ3hQUVVGUExFdEJRVXNzUTBGQlFUdEJRVU5vUWl4RFFVRkRPMEZCUlVRc1UwRkJVeXhWUVVGVk8wbEJRMllzVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCVHl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJRM0pETEVsQlFVa3NjMEpCUVhOQ0xFVkJRVVVzUlVGQlJUdFpRVVV4UWl4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVOb1F5eFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRGJFSXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOeVFpeERRVUZETEVWQlFVVXNWVUZCUXl4SFFVRlJPMmRDUVVOU0xFOUJRVThzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNaQ0xFTkJRVU1zUTBGQlF5eERRVUZCTzFOQlEwdzdZVUZCVFR0WlFVVklMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03VTBGRGNFSTdTVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGSFJDeEpRVUZKTEZsQlFWa3NSMEZCVVN4SlFVRkpMRU5CUVVNN1FVRkZOMElzVTBGQlV5eFBRVUZQTzBsQlExb3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSVHRSUVVObUxGbEJRVmtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCVHl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xbEJRemRETEV0QlFVc3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRFZDeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMmRDUVVOd1FpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTNKQ0xFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRkRMRWRCUVVjN1owSkJRMVFzV1VGQldTeEhRVUZITEVsQlFVa3NRMEZCUXp0blFrRkRjRUlzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRuUWtGRFppeFBRVUZQTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOMlFpeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTlFMRU5CUVVNc1EwRkJReXhEUVVGQk8wdEJRMHc3U1VGRFJDeFBRVUZQTEZsQlFWa3NRMEZCUXp0QlFVTjRRaXhEUVVGRE8wRkJSVVFzVTBGQlV5eExRVUZMTzBsQlExWXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJUeXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlEzSkRMRWxCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1VVRkRia01zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXp0WlFVTk1MRTlCUVU4c1dVRkJReXhIUVVGSE8yZENRVU5RTEVsQlFVa3NSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSVHR2UWtGRFZpeFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dDNRa0ZEZUVJc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dHZRa0ZEY2tJc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNSMEZCUnp0M1FrRkRWQ3hQUVVGUExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkRka0lzUTBGQlF5eERRVUZETEVOQlFVRTdhVUpCUTB3N2NVSkJRVTA3YjBKQlEwZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJReXhKUVVGSkxFVkJRVVVzWTBGQll5eEZRVUZGTEVkQlFVY3NTMEZCUVN4RlFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRE9VTTdXVUZEVEN4RFFVRkRPMWxCUTBRc1VVRkJVVHRuUWtGRFNpeEpRVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzJkQ1FVTnFReXd3UWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTndSQ3hEUVVGRE8xbEJRMFFzU1VGQlNTeFpRVUZETEVkQlFVYzdaMEpCUTBvc1QwRkJUeXhOUVVGTkxFTkJRVU1zUlVGQlF5eEpRVUZKTEVWQlFVVXNZMEZCWXl4RlFVRkZMRWRCUVVjc1MwRkJRU3hGUVVGRExFTkJRVU1zUTBGQlF6dFpRVU12UXl4RFFVRkRPMU5CUTBvc1EwRkJReXhEUVVGQk8wbEJRMDRzUTBGQlF5eERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhWUVVGVkxFTkJRVU1zVDBGQlpUdEpRVU12UWl4blFrRkJUU3hEUVVGRExFOUJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTTdTVUZGZWtJc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhKUVVGSkxFTkJRVU03U1VGRmFFTXNTVUZCU1N4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVN1VVRkRja1FzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNSMEZCUnl4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUTNaRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTTdXVUZEVml4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJN1dVRkROVUlzU1VGQlNTeEZRVUZGTEUxQlFVMHNRMEZCUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF6dFRRVU55UXl4RFFVRkRMRU5CUVVFN1MwRkRURHRKUVVORUxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTTdVVUZEVml4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFhRVUZ4UWp0UlFVTnFReXhKUVVGSkxFVkJRVVVzWjBKQlFVMHNRMEZCUXl4UFFVRlBPMHRCUTNaQ0xFTkJRVU1zUTBGQlF6dEJRVU5RTEVOQlFVTTdRVUZGUkN4VFFVRmxMRmxCUVZrc1EwRkJReXhKUVVGWk96czdPenM3ZVVKQlIyaERMRU5CUVVFc1QwRkJUeXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRXRCUVVzc1ZVRkJWU3hEUVVGQkxFVkJRUzlETEdOQlFTdERPMjlDUVVONFF5eFhRVUZOTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUVRzN2IwSkJRVFZETEVsQlFVa3NSMEZCUnl4VFFVRnhReXhEUVVGRE96czdiMEpCUlRkRExFbEJRVWtzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZET3pzN2IwSkJSVE5ETEVsQlFVa3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVVVGQlVTeEZRVUZGTzNkQ1FVTXZRaXhKUVVGSkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzNGQ1FVTTVRenQ1UWtGQlRUdDNRa0ZEU0N4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dHhRa0ZEY0VJN2IwSkJSVWNzUjBGQlJ5eEhRVUZITzNkQ1FVTk9MRWRCUVVjc1JVRkJSU3gzUWtGQll5eERRVUZETEUxQlFVMHNRMEZCUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTTdkMEpCUTNCRUxFbEJRVWtzVFVGQlFUdDNRa0ZEU2l4TlFVRk5MRVZCUVVVc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4SlFVRkpMRXRCUVVzN2QwSkJRelZETEUxQlFVMHNSVUZCUlN4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1owSkJRVTBzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUVN4RFFVRkRMRU5CUVVNc1owSkJRVTBzUTBGQlF5eFRRVUZUTzNGQ1FVTjRSaXhEUVVGQk8yOUNRVU5FTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGVkJRVlVzUzBGQlN5eFZRVUZWTEVWQlFVVTdkMEpCUTNwRExFZEJRVWNzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHhRa0ZEYUVNN2IwSkJSMFFzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4aFFVRkhMRU5CUVVNc1lVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkZja01zVjBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk96UkNRVU12UWl4SlFVRkpMRXRCUVVzc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPelJDUVVOcVF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4MVFrRkRTQ3hIUVVGSExFdEJRMDRzVDBGQlR5eEZRVUZRTEZWQlFWRXNSMEZCYlVRN2IwTkJRM1pFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1MwRkJTeXhIUVVGSExFVkJRVVU3ZDBOQlJYaENMRWxCUVVrc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RlFVRkZPelJEUVVNM1FpeEpRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZET3pSRFFVTXZRaXd3UWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlFUdDVRMEZEYmtVN2QwTkJSVVFzU1VGQlNTeERRVUZETEZOQlFVRXNRMEZCUXp0M1EwRkRUaXhKUVVGSk96UkRRVU5CTEVOQlFVTXNSMEZCUnl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dDVRMEZEYmtRN2QwTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdlVU5CUTFnN2QwTkJSVVFzU1VGQlNTeFBRVUZQTEVOQlFVTXNTMEZCU3l4UlFVRlJMRVZCUVVVN05FTkJRM1pDTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF6czBRMEZGYmtJc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhKUVVGSkxFTkJRVU03TkVOQlJXaERMRWxCUVVrc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk8yZEVRVU55UkN4blFrRkJUU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU03WjBSQlEzWkZMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU03YjBSQlExWXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENPMjlFUVVNMVFpeEpRVUZKTEVWQlFVVXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETzJsRVFVTnlReXhEUVVGRExFTkJRVUU3TmtOQlEwdzdORU5CUTBRc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF6dG5SRUZEVml4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFhRVUZYTzJkRVFVTjJRaXhKUVVGSkxFVkJRVVVzWjBKQlFVMHNRMEZCUXl4UFFVRlBPelpEUVVOMlFpeERRVUZETEVOQlFVTTdORU5CUTBnc1QwRkJUeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdlVU5CUTNKQ096WkRRVUZOT3pSRFFVTklMRTlCUVU4c1RVRkJUU3hEUVVGRExITkNRVUZaTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03ZVVOQlEyaEVPM0ZEUVVOS08zbERRVUZOTzNkRFFVTklMRTlCUVU4c1RVRkJUU3hEUVVGRExFVkJRVU1zU1VGQlNTeEZRVUZGTEZsQlFWa3NSVUZCUlN4SFFVRkhMRXRCUVVFc1JVRkJReXhEUVVGRExFTkJRVU03Y1VOQlF6VkRPMmREUVVOTUxFTkJRVU03WjBOQlEwUXNVVUZCVVR0blEwRkRVaXhEUVVGRExFVkJRMFFzU1VGQlNTeEZRVUZGTEZWQlFVTXNSMEZCUnpzN2IwTkJSVTRzU1VGQlNTeFBRVUZCTEVkQlFVY3NZVUZCU0N4SFFVRkhMSFZDUVVGSUxFZEJRVWNzUTBGQlJTeE5RVUZOTERCRFFVRkZMRTlCUVU4c1EwRkJReXh2UWtGQmIwSXNUVUZCU3l4RFFVRkRMRWxCUVVrc1lVRkJSeXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJUdDNRMEZGZEVZc2QwSkJRV01zUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdkME5CUlRORExFOUJRVThzV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGRExFZEJRVWNzU1VGQlNTeFBRVUZCTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJXaXhEUVVGWkxFTkJRVU1zUTBGQlF6dHhRMEZEZUVRN2IwTkJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTXNSVUZCUXl4SlFVRkpMRVZCUVVVc1kwRkJZeXhGUVVGRkxFZEJRVWNzUzBGQlFTeEZRVUZETEVOQlFVTXNRMEZCUXp0blEwRkRMME1zUTBGQlF5eEpRVU5JTEVOQlFVRTdkMEpCUTA0c1EwRkJReXhEUVVGRExFVkJRVUU3T3pzN1EwRkRURHRCUVVkRUxGTkJRVk1zVlVGQlZUdEpRVU5tTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU53UWl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRE8xRkJRMklzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1YwRkJjVUk3UzBGRGNFTXNRMEZCUXl4RFFVRkRPMGxCUTBnc1NVRkJTU3huUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhKUVVGSkxHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVU3VVVGRGNrUXNaMEpCUVUwc1EwRkJReXhoUVVGaExFZEJRVWNzVVVGQlVTeERRVUZETzFGQlEyaERMRVZCUVVVc1EwRkJReXhoUVVGaExFTkJRVU03V1VGRFlpeEhRVUZITEVWQlFVVXNaMEpCUVUwc1EwRkJReXhuUWtGQlowSTdVMEZETDBJc1EwRkJReXhEUVVGQk8wdEJRMHc3UVVGRFRDeERRVUZETzBGQlJVUXNVMEZCVXl4SlFVRkpMRU5CUVVNc2FVSkJRWE5FTzBsQlEyaEZMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVThzVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTnlReXhKUVVGSkxFdEJRVXNzUjBGQlJ5eERRVUZETEdsQ1FVRnBRanRaUVVVeFFpeERRVUZETEVOQlFVTXNZMEZCVFN4UFFVRkJMRWxCUVVrc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRV3hETEVOQlFXdERPMWxCUlRGRExFTkJRVU1zUTBGQlF5eGpRVUZOTEU5QlFVRXNhVUpCUVU4c1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVFZHTEVOQlFUUkdMRU5CUVVNN1VVRkRla2NzVDBGQlR5eFZRVUZWTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRja0lzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkJPMUZCUTNoRkxFTkJRVU1zUlVGQlJTeFZRVUZETEVWQlFXZENPMmRDUVVGbUxFdEJRVXNzVjBGQlFTeEZRVUZGTEU5QlFVOHNZVUZCUVR0WlFVTm1MSE5DUVVGWkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRE5VTXNUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJReXhMUVVGTExFOUJRVUVzUlVGQlJTeFBRVUZQTEZOQlFVRXNSVUZCUXl4RFFVRkRMRU5CUVVNN1VVRkRjRU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTBvc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVU55UWl4RFFVRkRMRVZCUVVVc1ZVRkJReXhGUVVGblFqdG5Ra0ZCWml4TFFVRkxMRmRCUVVFc1JVRkJSU3hQUVVGUExHRkJRVUU3V1VGRFppeHpRa0ZCV1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzVDBGQlR5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUXpWRExFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVTXNTMEZCU3l4UFFVRkJMRVZCUVVVc1QwRkJUeXhUUVVGQkxFVkJRVU1zUTBGQlF5eERRVUZETzFGQlEzQkRMRU5CUVVNc1EwRkJReXhEUVVGQk8wbEJRMDRzUTBGQlF5eERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEpRVUZKTEUxQlFVRTdTVUZEU2l4VlFVRlZMRmxCUVVFN1NVRkRWaXhWUVVGVkxGbEJRVUU3UTBGRFlpeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNXBiWEJ2Y25RZ1kyOXVabWxuSUdaeWIyMGdKeTR1TDNOMGIzSmxMMk52Ym1acFp5ZGNibWx0Y0c5eWRDQmxjbkp2Y2toaGJtUnNaWElnWm5KdmJTQW5MaTlsY25KdmNraGhibVJzWlhJblhHNXBiWEJ2Y25RZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2lCbWNtOXRJQ2N1TDJSMWNtRjBhVzl1VW1Wd2IzSjBaWEluWEc1cGJYQnZjblFnY21WeGRXVnpkRWhoYm1Sc1pYSWdabkp2YlNBbkxpOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCc2IyRmthVzVuSUdaeWIyMGdKeTR1TDNWMGFXd3ZiRzloWkdsdVp5ZGNibWx0Y0c5eWRDQnlaWEYxWlhOMElHWnliMjBnSnk0dUwyRndhUzl5WlhGMVpYTjBKMXh1YVcxd2IzSjBJSFZ5YkNCbWNtOXRJQ2N1TGk5MWRHbHNMM1Z5YkNkY2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1TENCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlCOUlHWnliMjBnWENJdUxpOXBiblJsY21aaFkyVmNJanRjYmx4dUx5b2c1NVNmNVpHOTVaR281cHlmNVlhRjVZK3E1WUdhNUxpQTVxeWg1NXFFWTJobFkydFRaWE56YVc5dUlDb3ZYRzVzWlhRZ1kyaGxZMnRUWlhOemFXOXVVSEp2YldselpUb2dZVzU1SUQwZ2JuVnNiRHRjYmx4dVpuVnVZM1JwYjI0Z1kyaGxZMnRUWlhOemFXOXVLQ2tnZTF4dUlDQWdJR2xtSUNnaFkyaGxZMnRUWlhOemFXOXVVSEp2YldselpTa2dlMXh1SUNBZ0lDQWdJQ0JqYUdWamExTmxjM05wYjI1UWNtOXRhWE5sSUQwZ2JtVjNJRkJ5YjIxcGMyVThkbTlwWkQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYzNSaGNuUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSGQ0TG1Ob1pXTnJVMlZ6YzJsdmJpaDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5Z3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1NW03NWIyVjVvQ0I1cHlKNXBXSTc3eU01TGlVNVp5bzVweXM1NVNmNVpHOTVaR281cHlmNVlhRjVwZWc2YUc3NVlhTjVxT0E2YXFNNUxxR1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSG92NGZtbko5Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR1ZzVTJWemMybHZiaWdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1pHOU1iMmRwYmlncExuUm9aVzRvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlN3Z0tISmxjem9nWVc1NUtUMCtlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052YlhCc1pYUmxLQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXlaWEJ2Y25Rb0ozZDRYMk5vWldOclUyVnpjMmx2Ymljc0lITjBZWEowTENCbGJtUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCamFHVmphMU5sYzNOcGIyNVFjbTl0YVhObE8xeHVmVnh1WEc0dktpRGxpS1RtbHExelpYTnphVzl1NXBpdjVaQ201TGk2NTZtNjVvaVc1YmV5NkwrSDVweWZJQ292WEc1bWRXNWpkR2x2YmlCcGMxTmxjM05wYjI1RmVIQnBjbVZQY2tWdGNIUjVLQ2tnZTF4dUlDQWdJR2xtSUNnaGMzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGc1YWFDNXA2YzU3eVQ1YTJZNUxpdDVyS2g1cHlKYzJWemMybHZibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlZ4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WVWFXMWxJQ1ltSUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncElENGdjM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGc1YWFDNXA2YzVweUo2SzYrNTcydTVweXM1Wnl3YzJWemMybHZidWU4aytXdG1PYVh0dW1YdE8rOGpPUzRsT2U4aytXdG1PYVh0dW1YdE9XM3N1V0lzRnh1SUNBZ0lDQWdJQ0JrWld4VFpYTnphVzl1S0NrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJtWVd4elpWeHVmVnh1WEc1bWRXNWpkR2x2YmlCamFHVmphMHh2WjJsdUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpUeDJiMmxrUGlnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2xtSUNocGMxTmxjM05wYjI1RmVIQnBjbVZQY2tWdGNIUjVLQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9heW9lYWNpZWVadSttWmh1YUFnZSs4ak9TNGplbWNnT2ltZ2VXR2pXTm9aV05yVTJWemMybHZibHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVabWxuTG1SdlRtOTBRMmhsWTJ0VFpYTnphVzl1SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa2IweHZaMmx1S0NrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc0lDaHlaWE02SUdGdWVTazlQbnRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1N3lUNWEyWTVMaXQ1cHlKYzJWemMybHZidVM0bE9hY3F1aS9oK2FjbjF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMHBYRzU5WEc1Y2JpOHFJT2VadSttWmh1YTFnZWVvaStlYWhIQnliMjFwYzJVZ0tpOWNibXhsZENCc2IyZHBibEJ5YjIxcGMyVTZJR0Z1ZVNBOUlHNTFiR3c3WEc1Y2JtWjFibU4wYVc5dUlHUnZURzluYVc0b0tTQjdYRzRnSUNBZ2FXWWdLQ0ZzYjJkcGJsQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lDQWdiRzluYVc1UWNtOXRhWE5sSUQwZ2JtVjNJRkJ5YjIxcGMyVThkbTlwWkQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHOW5hVzRvS1M1MGFHVnVLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMmRwYmxCeWIyMXBjMlVnUFNCdWRXeHNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtTNWpZWFJqYUNnb2NtVnpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOW5hVzVRY205dGFYTmxJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMkZrYVc1bkxtaHBaR1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR3h2WjJsdVVISnZiV2x6WlR0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYkc5bmFXNG9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxQSFp2YVdRK0tDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnZDNndWJHOW5hVzRvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5aHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jbVZ6TG1OdlpHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOWtaVEpUWlhOemFXOXVLSEpsY3k1amIyUmxLUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaHlaWE1wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0h0MGVYQmxPaUJjSW5ONWMzUmxiUzFsY25KdmNsd2lMQ0J5WlhOOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWlc1a0lEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTV5WlhCdmNuUW9KM2Q0WDJ4dloybHVKeXdnYzNSaGNuUXNJR1Z1WkNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkNoeVpYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBlWEJsT2lCY0luTjVjM1JsYlMxbGNuSnZjbHdpTENCeVpYTjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnpaWFJUWlhOemFXOXVLSE5sYzNOcGIyNDZJSE4wY21sdVp5a2dlMXh1SUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ2MyVnpjMmx2Ymp0Y2JpQWdJQ0F2THlEbWphTGxtNTdtbmFYbm1vUnpaWE56YVc5dTc3eU01TGlONlp5QTZLYUI1WWFOWTJobFkydFRaWE56YVc5dVhHNGdJQ0FnWTI5dVptbG5MbVJ2VG05MFEyaGxZMnRUWlhOemFXOXVJRDBnZEhKMVpUdGNiaUFnSUNBdkx5RGxwb0xtbnB6bW5Jbm9ycjdudmE3bW5LemxuTEJ6WlhOemFXOXU2TCtINXB5ZjVwZTI2WmUwWEc0Z0lDQWdhV1lnS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU0FtSmlCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU2tnZTF4dUlDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpTQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwSUNzZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsTzF4dUlDQWdJQ0FnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3NYRzRnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhPaUJUZEhKcGJtY29jM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVwWEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlZ4dUlDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlNCaGN5QnpkSEpwYm1jc1hHNGdJQ0FnSUNBZ0lHUmhkR0U2SUhOMFlYUjFjeTV6WlhOemFXOXVYRzRnSUNBZ2ZTazdYRzU5WEc1Y2JtRnplVzVqSUdaMWJtTjBhVzl1SUdOdlpHVXlVMlZ6YzJsdmJpaGpiMlJsT2lCemRISnBibWNwSUh0Y2JpQWdJQ0JzWlhRZ1pHRjBZVG9nWVc1NU8xeHVJQ0FnSUM4dklHTnZaR1ZVYjFObGMzTnBiMjR1WkdGMFllYVVyK2FNZ2VXSHZlYVZzRnh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1WkdGMFlTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFZ1BTQmhkMkZwZENCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNWtZWFJoS0dOdlpHVXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHUmhkR0VnUFNCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNWtZWFJoSUh4OElIdDlPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1WTI5a1pVNWhiV1VwSUh0Y2JpQWdJQ0FnSUNBZ1pHRjBZVnRqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1amIyUmxUbUZ0WlYwZ1BTQmpiMlJsTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFdVkyOWtaU0E5SUdOdlpHVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2JHVjBJRzlpYWlBOUlIdGNiaUFnSUNBZ0lDQWdkWEpzT2lCeVpYRjFaWE4wU0dGdVpHeGxjaTVtYjNKdFlYUW9ZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1ZFhKc0tTeGNiaUFnSUNBZ0lDQWdaR0YwWVN4Y2JpQWdJQ0FnSUNBZ2JXVjBhRzlrT2lCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNXRaWFJvYjJRZ2ZId2dKMGRGVkNjc1hHNGdJQ0FnSUNBZ0lHaGxZV1JsY2pvZ2RIbHdaVzltSUdOdmJtWnBaeTV6WlhSSVpXRmtaWElnUFQwOUlDZG1kVzVqZEdsdmJpY2dQeUJqYjI1bWFXY3VjMlYwU0dWaFpHVnlLQ2s2SUdOdmJtWnBaeTV6WlhSSVpXRmtaWElzWEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtSmxabTl5WlZObGJtUWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vZ1BTQmpiMjVtYVdjdVltVm1iM0psVTJWdVpDaHZZbW9wTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SU9Xa2grZVVxT1dmbitXUWplbUF1K2kra1Z4dUlDQWdJRzlpYWk1MWNtd2dQU0IxY213dWNtVndiR0ZqWlVSdmJXRnBiaWh2WW1vdWRYSnNLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J6ZEdGeWRDQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4dUlDQWdJQ0FnSUNCM2VDNXlaWEYxWlhOMEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM0dUxtOWlhaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lITjFZMk5sYzNNb2NtVnpPaUJYWldOb1lYUk5hVzVwY0hKdlozSmhiUzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEpsY3k1emRHRjBkWE5EYjJSbElEMDlQU0F5TURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzZJQ1g1cGUyNUxpSzVvcWxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTV5WlhCdmNuUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCbGJtUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1Y21Wd2IzSjBLR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG5KbGNHOXlkQ3dnYzNSaGNuUXNJR1Z1WkNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J6TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY3lBOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbk4xWTJObGMzTW9jbVZ6TG1SaGRHRXNJSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdjeUE5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ2N6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2FOb3VXYm51YWRwZWVhaEhObGMzTnBiMjd2dkl6a3VJM3BuSURvcG9IbGhvMWphR1ZqYTFObGMzTnBiMjVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym1acFp5NWtiMDV2ZEVOb1pXTnJVMlZ6YzJsdmJpQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RGxwb0xtbnB6bW5Jbm9ycjdudmE3bW5LemxuTEJ6WlhOemFXOXU2TCtINXB5ZjVwZTI2WmUwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsSUNZbUlHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tTQXJJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IzZUM1elpYUlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nVTNSeWFXNW5LSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoT2lCemRHRjBkWE11YzJWemMybHZibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9aWEp5YjNKSVlXNWtiR1Z5TG1kbGRFVnljbTl5VFhObktISmxjeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkSGx3WlRvZ1hDSm9kSFJ3TFdWeWNtOXlYQ0lzSUhKbGMzMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiR1YwWlNncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc09pQW9jbVZ6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNWFhQzVwNmM1TGk3NVorZjVaQ041TGlONVkrdjU1U283N3lNNUxpVTZZV041NzJ1NUxxRzVhU0g1THU5NVorZjVaQ043N3lNNUxpVTVweXM1cXloNksrMzVyR0M1cHlxNUwyLzU1U281YVNINUx1OTVaK2Y1WkNOWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjejh1WlhKeVRYTm5QeTVwYm1SbGVFOW1LQ2REVDA1T1JVTlVTVTlPWDFKRlJsVlRSVVFuS1NBK1BTQXdJQ1ltSUhWeWJDNXBjMGx1UW1GamEzVndSRzl0WVdsdVRHbHpkQ2h2WW1vdWRYSnNLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURsdklEbGtLL2xwSWZrdTczbG41L2xrSTFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVnhkV1Z6ZEVoaGJtUnNaWEl1Wlc1aFlteGxRbUZqYTNWd1JHOXRZV2x1S0c5aWFpNTFjbXdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURwaDQzb3I1WGt1SURtcktGY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHTnZaR1V5VTJWemMybHZiaWhqYjJSbEtTNTBhR1Z1S0NoeVpYTXBQVDRnY21WemIyeDJaU2h5WlhNcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN2RIbHdaVG9nWENKemVYTjBaVzB0WlhKeWIzSmNJaXdnY21WemZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dUx5b2c1cmlGNTZtNmMyVnpjMmx2YmlBcUwxeHVablZ1WTNScGIyNGdaR1ZzVTJWemMybHZiaWdwSUh0Y2JpQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJpQTlJQ2NuTzF4dUlDQWdJSGQ0TG5KbGJXOTJaVk4wYjNKaFoyVW9lMXh1SUNBZ0lDQWdJQ0JyWlhrNklHTnZibVpwWnk1elpYTnphVzl1VG1GdFpTQmhjeUJ6ZEhKcGJtZGNiaUFnSUNCOUtUdGNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbElDWW1JR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUtTQjdYRzRnSUNBZ0lDQWdJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsSUQwZ1NXNW1hVzVwZEhrN1hHNGdJQ0FnSUNBZ0lIZDRMbkpsYlc5MlpWTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnYldGcGJpaHlaV3hoZEdWa1VtVnhkV1Z6ZEU5aWFqODZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVThkbTlwWkQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2NtVjBjbmtnUFNBaGNtVnNZWFJsWkZKbGNYVmxjM1JQWW1wY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9XbWd1YWVuT2F5b2VhY2llV0ZzK2lCbE9lYWhPaXZ0K2F4Z3UrOGpPbUhqZWl2bGVXTnMraXdnK2VVcU9pSHF1aTZxMXh1SUNBZ0lDQWdJQ0FnSUNBZ1B5QW9LU0E5UGlCdFlXbHVLQ2t1ZEdobGJpaHlaWE52YkhabEtTNWpZWFJqYUNoeVpXcGxZM1FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURscG9MbW5wem1uSW5saGJQb2daVG5tb1RvcjdmbXNZTHZ2SXpwaDQzb3I1WGxqYlBvc0lQbmxLam1pWURsaGJQb2daVG5tb1RvcjdmbXNZSmNiaUFnSUNBZ0lDQWdJQ0FnSURvZ0tDa2dQVDRnY21WeGRXVnpkQ2h5Wld4aGRHVmtVbVZ4ZFdWemRFOWlhaWt1ZEdobGJpaHlaV3hoZEdWa1VtVnhkV1Z6ZEU5aWFpNWZjbVZ6YjJ4MlpTa3VZMkYwWTJnb2NtVnNZWFJsWkZKbGNYVmxjM1JQWW1vdVgzSmxhbVZqZENrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCamFHVmphMHh2WjJsdUtDa3VkR2hsYmlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyOXVabWxuTG1SdlRtOTBRMmhsWTJ0VFpYTnphVzl1SUQ4Z1VISnZiV2x6WlM1eVpYTnZiSFpsS0NrZ09pQmphR1ZqYTFObGMzTnBiMjRvS1Z4dUlDQWdJQ0FnSUNCOUxDQW9lM1JwZEd4bExDQmpiMjUwWlc1MGZTa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdaWEp5YjNKSVlXNWtiR1Z5TG1SdlJYSnliM0lvZEdsMGJHVXNJR052Ym5SbGJuUXNJSEpsZEhKNUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9lM1JwZEd4bExDQmpiMjUwWlc1MGZTazdYRzRnSUNBZ0lDQWdJSDBwTG5Sb1pXNG9LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnZlN3Z0tIdDBhWFJzWlN3Z1kyOXVkR1Z1ZEgwcFBUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pYSnliM0pJWVc1a2JHVnlMbVJ2UlhKeWIzSW9kR2wwYkdVc0lHTnZiblJsYm5Rc0lISmxkSEo1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2UzUnBkR3hsTENCamIyNTBaVzUwZlNrN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJRzFoYVc0c1hHNGdJQ0FnYzJWMFUyVnpjMmx2Yml4Y2JpQWdJQ0JrWld4VFpYTnphVzl1WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICBzZXNzaW9uTmFtZTogXCJzZXNzaW9uXCIsXG4gICAgbG9naW5UcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGNvZGVUb1Nlc3Npb246IHtcbiAgICAgICAgdXJsOiBcIlwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9LFxuICAgIHN1Y2Nlc3NUcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgc2V0SGVhZGVyOiB7fSxcbiAgICB1cmxQZXJmaXg6IFwiXCIsXG4gICAgZG9Ob3RDaGVja1Nlc3Npb246IGZhbHNlLFxuICAgIGVycm9yVGl0bGU6IFwi5pON5L2c5aSx6LSlXCIsXG4gICAgZXJyb3JDb250ZW50OiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICBlcnJvclJldHJ5QnRuOiBmYWxzZSxcbiAgICByZUxvZ2luTGltaXQ6IDMsXG4gICAgZXJyb3JDYWxsYmFjazogbnVsbCxcbiAgICByZXBvcnRDR0k6IGZhbHNlLFxuICAgIG1vY2tKc29uOiBmYWxzZSxcbiAgICBnbG9iYWxEYXRhOiBmYWxzZSxcbiAgICBzZXNzaW9uRXhwaXJlS2V5OiBcInNlc3Npb25FeHBpcmVLZXlcIixcbiAgICBlcnJvckhhbmRsZXI6IG51bGwsXG4gICAgYmVmb3JlU2VuZDogbnVsbCxcbiAgICBzeXN0ZW1FcnJvckhhbmRsZXI6IG51bGwsXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdENvbmZpZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwyTnZibVpwWnk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVVZCTEVsQlFVMHNZVUZCWVN4SFFVRm5RanRKUVVNdlFpeFhRVUZYTEVWQlFVVXNVMEZCVXp0SlFVTjBRaXhaUVVGWk8xRkJRMUlzVDBGQlR5eExRVUZMTEVOQlFVRTdTVUZEYUVJc1EwRkJRenRKUVVORUxHRkJRV0VzUlVGQlJUdFJRVU5ZTEVkQlFVY3NSVUZCUlN4RlFVRkZPMUZCUTFBc1QwRkJUeXhGUVVGRkxHTkJRVTBzUTBGQlF6dExRVU51UWp0SlFVTkVMR05CUVdNN1VVRkRWaXhQUVVGUExFbEJRVWtzUTBGQlFUdEpRVU5tTEVOQlFVTTdTVUZEUkN4VFFVRlRMRVZCUVVVc1JVRkJSVHRKUVVOaUxGTkJRVk1zUlVGQlJTeEZRVUZGTzBsQlEySXNhVUpCUVdsQ0xFVkJRVVVzUzBGQlN6dEpRVU40UWl4VlFVRlZMRVZCUVVVc1RVRkJUVHRKUVVOc1FpeFpRVUZaTEVWQlFWb3NWVUZCWVN4SFFVRlJPMUZCUTJwQ0xFOUJRVThzUjBGQlJ5eERRVUZCTzBsQlEyUXNRMEZCUXp0SlFVTkVMR0ZCUVdFc1JVRkJSU3hMUVVGTE8wbEJRM0JDTEZsQlFWa3NSVUZCUlN4RFFVRkRPMGxCUTJZc1lVRkJZU3hGUVVGRkxFbEJRVWs3U1VGRGJrSXNVMEZCVXl4RlFVRkZMRXRCUVVzN1NVRkRhRUlzVVVGQlVTeEZRVUZGTEV0QlFVczdTVUZEWml4VlFVRlZMRVZCUVVVc1MwRkJTenRKUVVWcVFpeG5Ra0ZCWjBJc1JVRkJSU3hyUWtGQmEwSTdTVUZGY0VNc1dVRkJXU3hGUVVGRkxFbEJRVWs3U1VGRmJFSXNWVUZCVlN4RlFVRkZMRWxCUVVrN1NVRkZhRUlzYTBKQlFXdENMRVZCUVVVc1NVRkJTVHREUVVNelFpeERRVUZETzBGQlJVWXNhMEpCUVdVc1lVRkJZU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVWx1YVhSUGNIUnBiMjRnZlNCbWNtOXRJQ2N1TGk5cGJuUmxjbVpoWTJVblhHNWNibU52Ym5OMElHUmxabUYxYkhSRGIyNW1hV2M2SUVsSmJtbDBUM0IwYVc5dUlEMGdlMXh1SUNBZ0lITmxjM05wYjI1T1lXMWxPaUJjSW5ObGMzTnBiMjVjSWl4Y2JpQWdJQ0JzYjJkcGJsUnlhV2RuWlhJb0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlZ4dUlDQWdJSDBzWEc0Z0lDQWdZMjlrWlZSdlUyVnpjMmx2YmpvZ2UxeHVJQ0FnSUNBZ0lDQjFjbXc2SUZ3aVhDSXNYRzRnSUNBZ0lDQWdJSE4xWTJObGMzTTZJQ2dwUFQ0Z2UzMWNiaUFnSUNCOUxGeHVJQ0FnSUhOMVkyTmxjM05VY21sbloyVnlLQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpWeHVJQ0FnSUgwc1hHNGdJQ0FnYzJWMFNHVmhaR1Z5T2lCN2ZTeGNiaUFnSUNCMWNteFFaWEptYVhnNklGd2lYQ0lzWEc0Z0lDQWdaRzlPYjNSRGFHVmphMU5sYzNOcGIyNDZJR1poYkhObExGeHVJQ0FnSUdWeWNtOXlWR2wwYkdVNklGd2k1cE9ONUwyYzVhU3g2TFNsWENJc1hHNGdJQ0FnWlhKeWIzSkRiMjUwWlc1MEtISmxjem9nWVc1NUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE5jYmlBZ0lDQjlMRnh1SUNBZ0lHVnljbTl5VW1WMGNubENkRzQ2SUdaaGJITmxMRnh1SUNBZ0lISmxURzluYVc1TWFXMXBkRG9nTXl4Y2JpQWdJQ0JsY25KdmNrTmhiR3hpWVdOck9pQnVkV3hzTEZ4dUlDQWdJSEpsY0c5eWRFTkhTVG9nWm1Gc2MyVXNYRzRnSUNBZ2JXOWphMHB6YjI0NklHWmhiSE5sTEZ4dUlDQWdJR2RzYjJKaGJFUmhkR0U2SUdaaGJITmxMRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN2xuS2ptbkt6bG5MRG52SlBsclpqbm1vUnJaWGxjYmlBZ0lDQnpaWE56YVc5dVJYaHdhWEpsUzJWNU9pQmNJbk5sYzNOcGIyNUZlSEJwY21WTFpYbGNJaXhjYmlBZ0lDQXZMeURvaDZybHJwcmt1WW5wbEpub3I2L2xwSVRua0libGg3M21sYkJjYmlBZ0lDQmxjbkp2Y2toaGJtUnNaWEk2SUc1MWJHd3NYRzRnSUNBZ0x5OGc2SyszNXJHQzVZK1I2WUNCNVltTjc3eU01bytRNUw2YmFHOXZhK2U3bWVXOGdPV1BrZWlBaGVpSHF1V3VtdVM1aWVTL3J1YVV1ZVdQa2VtQWdlV0doZVd1dVZ4dUlDQWdJR0psWm05eVpWTmxibVE2SUc1MWJHd3NYRzRnSUNBZ0x5OGc2SWVxNWE2YTVMbUo1N083NTd1ZjZaU1o2Syt2NWFTRTU1Q0c1WWU5NXBXdzc3eUk1NzJSNTd1YzZaU1o2Syt2Nzd5SlhHNGdJQ0FnYzNsemRHVnRSWEp5YjNKSVlXNWtiR1Z5T2lCdWRXeHNMRnh1ZlR0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1pHVm1ZWFZzZEVOdmJtWnBaenRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXNzaW9uOiAnJyxcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eSxcbiAgICBpc0VuYWJsZUJhY2t1cERvbWFpbjogZmFsc2Vcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljM1JoZEhWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMM04wWVhSMWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxHdENRVUZsTzBsQlExZ3NUMEZCVHl4RlFVRkZMRVZCUVZrN1NVRkZja0lzWVVGQllTeEZRVUZGTEZGQlFXdENPMGxCUldwRExHOUNRVUZ2UWl4RlFVRkZMRXRCUVVzN1EwRkRka0lzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCelpYTnphVzl1T2lBbkp5QmhjeUJ6ZEhKcGJtY3NYRzRnSUNBZ0x5OGdjMlZ6YzJsdmJ1aS9oK2FjbitlYWhPYVh0dW1YdE9lQ3VWeHVJQ0FnSUhObGMzTnBiMjVGZUhCcGNtVTZJRWx1Wm1sdWFYUjVJR0Z6SUc1MWJXSmxjaXhjYmlBZ0lDQXZMeURtbUsvbGtLYmxrSy9ubEtqbHBJZm5sS2psbjUvbGtJMWNiaUFnSUNCcGMwVnVZV0pzWlVKaFkydDFjRVJ2YldGcGJqb2dabUZzYzJWY2JuMGdZWE1nWVc1NVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgTElORUZFRUQgPSAvXFx1MDAwQS9nO1xudmFyIENBUlJJQUdFUkVUVVJOID0gL1xcdTAwMEQvZztcbnZhciBMSU5FX1NFUEFSQVRPUiA9IC9cXHUyMDI4L2c7XG52YXIgUEFSQUdSQVBIX1NFUEFSQVRPUiA9IC9cXHUyMDI5L2c7XG5mdW5jdGlvbiByZXBsYWNlKHJlcykge1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKExJTkVGRUVELCBcIlwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZShDQVJSSUFHRVJFVFVSTiwgXCJcIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoTElORV9TRVBBUkFUT1IsIFwiXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKFBBUkFHUkFQSF9TRVBBUkFUT1IsIFwiXCIpO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmRlZmF1bHQgPSByZXBsYWNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYW5OdmJsTjFjR1Z5YzJWMExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNWMGFXd3Zhbk52YmxOMWNHVnljMlYwTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJWMEVzU1VGQlRTeFJRVUZSTEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUXpOQ0xFbEJRVTBzWTBGQll5eEhRVUZITEZOQlFWTXNRMEZCUXp0QlFVTnFReXhKUVVGTkxHTkJRV01zUjBGQlJ5eFRRVUZUTEVOQlFVTTdRVUZEYWtNc1NVRkJUU3h0UWtGQmJVSXNSMEZCUnl4VFFVRlRMRU5CUVVNN1FVRkZkRU1zVTBGQmQwSXNUMEZCVHl4RFFVRkRMRWRCUVZjN1NVRkRla01zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzBsQlEyaERMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEdOQlFXTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVOMFF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhqUVVGakxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTVUZEZEVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTVUZETTBNc1QwRkJUeXhIUVVGSExFTkJRVUU3UVVGRFdpeERRVUZETzBGQlRrUXNNRUpCVFVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUFnVlNzeU1ESTRJR0Z1WkNCVkt6SXdNamtnWVhKbElHRnNiRzkzWldRZ2FXNXphV1JsSUhOMGNtbHVaM01nYVc0Z1NsTlBUaUFvWVhNZ1lXeHNJR3hwZEdWeVlXeGNiaUFnSUNCVmJtbGpiMlJsSUdOb1lYSmhZM1JsY25NcElHSjFkQ0JLWVhaaFUyTnlhWEIwSUdSbFptbHVaWE1nZEdobGJTQmhjeUJ1Wlhkc2FXNWxYRzRnSUNBZ2MyVndaWEpoZEc5eWN5NGdRbVZqWVhWelpTQnVieUJzYVhSbGNtRnNJRzVsZDJ4cGJtVnpJR0Z5WlNCaGJHeHZkMlZrSUdsdUlHRWdjM1J5YVc1bkxDQjBhR2x6WEc0Z0lDQWdZMkYxYzJWeklHRWdVR0Z5YzJWRmNuSnZjaUJwYmlCMGFHVWdZbkp2ZDNObGNpNGdWMlVnZDI5eWF5QmhjbTkxYm1RZ2RHaHBjeUJwYzNOMVpTQmllVnh1SUNBZ0lISmxjR3hoWTJsdVp5QjBhR1Z0SUhkcGRHZ2dkR2hsSUdWelkyRndaV1FnZG1WeWMybHZiaTRnVkdocGN5QnphRzkxYkdRZ1ltVWdjMkZtWlNCaVpXTmhkWE5sWEc0Z0lDQWdZV05qYjNKa2FXNW5JSFJ2SUhSb1pTQktVMDlPSUhOd1pXTXNJSFJvWlhObElHTm9ZWEpoWTNSbGNuTWdZWEpsSUNwdmJteDVLaUIyWVd4cFpDQnBibk5wWkdWY2JpQWdJQ0JoSUhOMGNtbHVaeUJoYm1RZ2MyaHZkV3hrSUhSb1pYSmxabTl5WlNCdWIzUWdZbVVnY0hKbGMyVnVkQ0JoYm5rZ2IzUm9aWElnY0d4aFkyVnpMbHh1WEc0Z0lDQWdiVzl5WlNCcGJtWnZjbTFoZEdsdmJqb2dhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMM1JqTXprdmNISnZjRzl6WVd3dGFuTnZiaTF6ZFhCbGNuTmxkRnh1S2k5Y2JseHVZMjl1YzNRZ1RFbE9SVVpGUlVRZ1BTQXZYRngxTURBd1FTOW5PMXh1WTI5dWMzUWdRMEZTVWtsQlIwVlNSVlJWVWs0Z1BTQXZYRngxTURBd1JDOW5PMXh1WTI5dWMzUWdURWxPUlY5VFJWQkJVa0ZVVDFJZ1BTQXZYRngxTWpBeU9DOW5PMXh1WTI5dWMzUWdVRUZTUVVkU1FWQklYMU5GVUVGU1FWUlBVaUE5SUM5Y1hIVXlNREk1TDJjN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUlISmxjR3hoWTJVb2NtVnpPaUJ6ZEhKcGJtY3BJSHRjYmlBZ2NtVnpJRDBnY21WekxuSmxjR3hoWTJVb1RFbE9SVVpGUlVRc0lGd2lYQ0lwTzF4dUlDQnlaWE1nUFNCeVpYTXVjbVZ3YkdGalpTaERRVkpTU1VGSFJWSkZWRlZTVGl3Z1hDSmNJaWs3WEc0Z0lISmxjeUE5SUhKbGN5NXlaWEJzWVdObEtFeEpUa1ZmVTBWUVFWSkJWRTlTTENCY0lsd2lLVHRjYmlBZ2NtVnpJRDBnY21WekxuSmxjR3hoWTJVb1VFRlNRVWRTUVZCSVgxTkZVRUZTUVZSUFVpd2dYQ0pjSWlrN1hHNGdJSEpsZEhWeWJpQnlaWE5jYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBzaG93KHR4dCkge1xuICAgIHd4LnNob3dUb2FzdCh7XG4gICAgICAgIHRpdGxlOiB0eXBlb2YgdHh0ID09PSAnYm9vbGVhbicgPyAn5Yqg6L295LitJyA6IHR4dCxcbiAgICAgICAgaWNvbjogJ2xvYWRpbmcnLFxuICAgICAgICBtYXNrOiB0cnVlLFxuICAgICAgICBkdXJhdGlvbjogNjAwMDBcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgd3guaGlkZVRvYXN0KHt9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzaG93OiBzaG93LFxuICAgIGhpZGU6IGhpZGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzloWkdsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMMnh2WVdScGJtY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeFRRVUZUTEVsQlFVa3NRMEZCUXl4SFFVRnhRanRKUVVNdlFpeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTFRc1MwRkJTeXhGUVVGRkxFOUJRVThzUjBGQlJ5eExRVUZMTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITzFGQlF6ZERMRWxCUVVrc1JVRkJSU3hUUVVGVE8xRkJRMllzU1VGQlNTeEZRVUZGTEVsQlFVazdVVUZEVml4UlFVRlJMRVZCUVVVc1MwRkJTenRMUVVOc1FpeERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhKUVVGSk8wbEJRMVFzUlVGQlJTeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOeVFpeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hKUVVGSkxFMUJRVUU3U1VGRFNpeEpRVUZKTEUxQlFVRTdRMEZEVUN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWm5WdVkzUnBiMjRnYzJodmR5aDBlSFE2SUdKdmIyeGxZVzRnZkNCemRISnBibWNwSUh0Y2JpQWdJQ0IzZUM1emFHOTNWRzloYzNRb2UxeHVJQ0FnSUNBZ0lDQjBhWFJzWlRvZ2RIbHdaVzltSUhSNGRDQTlQVDBnSjJKdmIyeGxZVzRuSUQ4Z0orV0tvT2k5dmVTNHJTY2dPaUIwZUhRc1hHNGdJQ0FnSUNBZ0lHbGpiMjQ2SUNkc2IyRmthVzVuSnl4Y2JpQWdJQ0FnSUNBZ2JXRnphem9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdaSFZ5WVhScGIyNDZJRFl3TURBd1hHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnYUdsa1pTZ3BJSHRjYmlBZ0lDQjNlQzVvYVdSbFZHOWhjM1FvZTMwcE8xeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjMmh2ZHl4Y2JpQWdJQ0JvYVdSbFhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZnVuY3Rpb24gc2V0UGFyYW1zKHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICB2YXIgcXVlcnlTdHJpbmdJbmRleCA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgICB2YXIga3ZwID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICB2YXIgb2xkUXVlcnlTdHJpbmdfMSA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgb2xkUXVlcnlTdHJpbmdfMS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICB2YXIga3YgPSBvbGRRdWVyeVN0cmluZ18xW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGt2cCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBrdnApLCBwYXJhbXMpO1xuICAgIHZhciBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgKyBcIj1cIiArIGVuY29kZVVSSShrdnBba2V5XSk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsICsgXCI/XCIgKyBxdWVyeVN0cmluZztcbiAgICB9XG59XG5mdW5jdGlvbiByZXBsYWNlRG9tYWluKHVybCkge1xuICAgIGlmICh1cmwgPT09IHZvaWQgMCkgeyB1cmwgPSBcIlwiOyB9XG4gICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuaXNFbmFibGVCYWNrdXBEb21haW4gJiYgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5MaXN0ICYmIHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmJhY2t1cERvbWFpbkxpc3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIG9yaWdpbiBpbiBjb25maWdfMS5kZWZhdWx0LmJhY2t1cERvbWFpbkxpc3QpIHtcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZihvcmlnaW4pID49IDApIHtcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShvcmlnaW4sIGNvbmZpZ18xLmRlZmF1bHQuYmFja3VwRG9tYWluTGlzdFtvcmlnaW5dKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufVxuZnVuY3Rpb24gaXNJbkJhY2t1cERvbWFpbkxpc3QodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuYmFja3VwRG9tYWluTGlzdCAmJiB0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5MaXN0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKHZhciBvcmlnaW4gaW4gY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5MaXN0KSB7XG4gICAgICAgICAgICBpZiAodXJsLmluZGV4T2Yob3JpZ2luKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNldFBhcmFtczogc2V0UGFyYW1zLFxuICAgIHJlcGxhY2VEb21haW46IHJlcGxhY2VEb21haW4sXG4gICAgaXNJbkJhY2t1cERvbWFpbkxpc3Q6IGlzSW5CYWNrdXBEb21haW5MaXN0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhKc0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNWMGFXd3ZkWEpzTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVc5RE8wRkJSWEJETEZOQlFWTXNVMEZCVXl4RFFVRkRMRWRCUVdkQ0xFVkJRVVVzVFVGQll6dEpRVUZvUXl4dlFrRkJRU3hGUVVGQkxGRkJRV2RDTzBsQlF5OUNMRWxCUVUwc1owSkJRV2RDTEVkQlFWY3NSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU5zUkN4SlFVRkpMRWRCUVVjc1IwRkJVU3hGUVVGRkxFTkJRVU03U1VGRGJFSXNTVUZCU1N4blFrRkJaMElzU1VGQlNTeERRVUZETEVWQlFVVTdVVUZEZGtJc1NVRkJUU3huUWtGQll5eEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXNUZMR2RDUVVGakxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNN1dVRkRlRUlzU1VGQlRTeEZRVUZGTEVkQlFXRXNaMEpCUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRiRVFzUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjJRaXhEUVVGRExFTkJRVU1zUTBGQlF6dExRVU5PTzBsQlJVUXNSMEZCUnl4NVFrRkJUeXhIUVVGSExFZEJRVXNzVFVGQlRTeERRVUZETEVOQlFVTTdTVUZGTVVJc1NVRkJUU3hYUVVGWExFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNN1UwRkRMMElzUjBGQlJ5eERRVUZETEZWQlFVRXNSMEZCUnp0UlFVTktMRTlCUVZVc1IwRkJSeXhUUVVGSkxGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVjc1EwRkJRenRKUVVNelF5eERRVUZETEVOQlFVTTdVMEZEUkN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRlppeEpRVUZKTEdkQ1FVRm5RaXhKUVVGSkxFTkJRVU1zUlVGQlJUdFJRVU4yUWl4UFFVRlBMRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZGTEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEZkQlFWY3NRMEZCUXp0TFFVTXZSRHRUUVVGTk8xRkJRMGdzVDBGQlR5eEhRVUZITEVkQlFVY3NSMEZCUnl4SFFVRkhMRmRCUVZjc1EwRkJRenRMUVVOc1F6dEJRVU5NTEVOQlFVTTdRVUZGUkN4VFFVRlRMR0ZCUVdFc1EwRkJReXhIUVVGblFqdEpRVUZvUWl4dlFrRkJRU3hGUVVGQkxGRkJRV2RDTzBsQlEyNURMRWxCUVVrc1owSkJRVTBzUTBGQlF5eHZRa0ZCYjBJc1NVRkJTU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RaXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4blFrRkJaMElzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZEZGtjc1MwRkJTU3hKUVVGTkxFMUJRVTBzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFsQlEzcERMRWxCUVVrc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVN1owSkJRekZDTEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRek5FTEUxQlFVMDdZVUZEVkR0VFFVTktPMHRCUTBvN1NVRkRSQ3hQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkN4VFFVRlRMRzlDUVVGdlFpeERRVUZETEVkQlFXZENPMGxCUVdoQ0xHOUNRVUZCTEVWQlFVRXNVVUZCWjBJN1NVRkRNVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NTMEZCU3l4RFFVRkRPMGxCUTJoQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4blFrRkJaMElzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTEV0QlFVc3NVVUZCVVN4RlFVRkZPMUZCUTNoRkxFdEJRVWtzU1VGQlRTeE5RVUZOTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhuUWtGQlowSXNSVUZCUlR0WlFVTjZReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8yZENRVU14UWl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRE8yZENRVU5ZTEUxQlFVMDdZVUZEVkR0VFFVTktPMHRCUTBvN1NVRkRSQ3hQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkN4clFrRkJaVHRKUVVOWUxGTkJRVk1zVjBGQlFUdEpRVU5VTEdGQlFXRXNaVUZCUVR0SlFVTmlMRzlDUVVGdlFpeHpRa0ZCUVR0RFFVTjJRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjM1JoZEhWeklHWnliMjBnSnk0dUwzTjBiM0psTDNOMFlYUjFjeWRjYmx4dVpuVnVZM1JwYjI0Z2MyVjBVR0Z5WVcxektIVnliRG9nYzNSeWFXNW5JRDBnWENKY0lpd2djR0Z5WVcxek9pQnZZbXBsWTNRcElIdGNiaUFnSUNCamIyNXpkQ0J4ZFdWeWVWTjBjbWx1WjBsdVpHVjRPaUJ1ZFcxaVpYSWdQU0IxY213dWFXNWtaWGhQWmloY0lqOWNJaWs3WEc0Z0lDQWdiR1YwSUd0MmNEb2dZVzU1SUQwZ2UzMDdYRzRnSUNBZ2FXWWdLSEYxWlhKNVUzUnlhVzVuU1c1a1pYZ2dQajBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdmJHUlJkV1Z5ZVZOMGNtbHVaeUE5SUhWeWJDNXpkV0p6ZEhJb2NYVmxjbmxUZEhKcGJtZEpibVJsZUNBcklERXBMbk53YkdsMEtGd2lKbHdpS1R0Y2JpQWdJQ0FnSUNBZ0x5OGdRSFJ6TFdsbmJtOXlaVnh1SUNBZ0lDQWdJQ0J2YkdSUmRXVnllVk4wY21sdVp5NW1iM0pGWVdOb0tDaDRMQ0JwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JyZGpvZ2MzUnlhVzVuVzEwZ1BTQnZiR1JSZFdWeWVWTjBjbWx1WjF0cFhTNXpjR3hwZENoY0lqMWNJaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnJkbkJiYTNaYk1GMWRJRDBnYTNaYk1WMDdYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3QyY0NBOUlIc3VMaTVyZG5Bc0lDNHVMbkJoY21GdGMzMDdYRzVjYmlBZ0lDQmpiMjV6ZENCeGRXVnllVk4wY21sdVp5QTlJRTlpYW1WamRDNXJaWGx6S0d0MmNDbGNiaUFnSUNBZ0lDQWdMbTFoY0NoclpYa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQWtlMnRsZVgwOUpIdGxibU52WkdWVlVra29hM1p3VzJ0bGVWMHBmV0E3WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnSUNBZ0lDNXFiMmx1S0Z3aUpsd2lLVHRjYmx4dUlDQWdJR2xtSUNoeGRXVnllVk4wY21sdVowbHVaR1Y0SUQ0OUlEQXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFZ5YkM1emRXSnpkSEpwYm1jb01Dd2djWFZsY25sVGRISnBibWRKYm1SbGVDQXJJREVwSUNzZ2NYVmxjbmxUZEhKcGJtYzdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDQXJJRndpUDF3aUlDc2djWFZsY25sVGRISnBibWM3WEc0Z0lDQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnlaWEJzWVdObFJHOXRZV2x1S0hWeWJEb2djM1J5YVc1bklEMGdYQ0pjSWlrZ2UxeHVJQ0FnSUdsbUlDaHpkR0YwZFhNdWFYTkZibUZpYkdWQ1lXTnJkWEJFYjIxaGFXNGdKaVlnWTI5dVptbG5MbUpoWTJ0MWNFUnZiV0ZwYmt4cGMzUWdKaVlnZEhsd1pXOW1JR052Ym1acFp5NWlZV05yZFhCRWIyMWhhVzVNYVhOMElEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJQ0FnSUNCbWIzSW9ZMjl1YzNRZ2IzSnBaMmx1SUdsdUlHTnZibVpwWnk1aVlXTnJkWEJFYjIxaGFXNU1hWE4wS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RYSnNMbWx1WkdWNFQyWW9iM0pwWjJsdUtTQStQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RYSnNJRDBnZFhKc0xuSmxjR3hoWTJVb2IzSnBaMmx1TENCamIyNW1hV2N1WW1GamEzVndSRzl0WVdsdVRHbHpkRnR2Y21sbmFXNWRLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkWEpzTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJwYzBsdVFtRmphM1Z3Ukc5dFlXbHVUR2x6ZENoMWNtdzZJSE4wY21sdVp5QTlJRndpWENJcElIdGNiaUFnSUNCc1pYUWdjbVZ6SUQwZ1ptRnNjMlU3WEc0Z0lDQWdhV1lnS0dOdmJtWnBaeTVpWVdOcmRYQkViMjFoYVc1TWFYTjBJQ1ltSUhSNWNHVnZaaUJqYjI1bWFXY3VZbUZqYTNWd1JHOXRZV2x1VEdsemRDQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlLR052Ym5OMElHOXlhV2RwYmlCcGJpQmpiMjVtYVdjdVltRmphM1Z3Ukc5dFlXbHVUR2x6ZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIVnliQzVwYm1SbGVFOW1LRzl5YVdkcGJpa2dQajBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjeUE5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlISmxjenRjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUhObGRGQmhjbUZ0Y3l4Y2JpQWdJQ0J5WlhCc1lXTmxSRzl0WVdsdUxGeHVJQ0FnSUdselNXNUNZV05yZFhCRWIyMWhhVzVNYVhOMFhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52ZXJzaW9uID0gdm9pZCAwO1xudmFyIHZlcnNpb24gPSBfX1ZFUlNJT05fXztcbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZ5YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTkyWlhKemFXOXVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3p0QlFVVkJMRWxCUVUwc1QwRkJUeXhIUVVGSExGZEJRVmNzUTBGQlF6dEJRVVZ1UWl3d1FrRkJUeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1SbFkyeGhjbVVnWTI5dWMzUWdYMTlXUlZKVFNVOU9YMTg2SUhOMGNtbHVaenRjYmx4dVkyOXVjM1FnZG1WeWMybHZiaUE5SUY5ZlZrVlNVMGxQVGw5Zk8xeHVYRzVsZUhCdmNuUWdleUIyWlhKemFXOXVJSDA3WEc0aVhYMD0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/build/weRequest.min.js b/build/weRequest.min.js index 8504115..f1ee1fa 100644 --- a/build/weRequest.min.js +++ b/build/weRequest.min.js @@ -1,5 +1,5 @@ /*! - * weRequest 1.7.0 + * weRequest 1.7.1 * https://github.com/IvinWu/weRequest */ -module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=9)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sessionName:"session",loginTrigger:function(){return!1},codeToSession:{url:"",success:function(){}},successTrigger:function(){return!0},setHeader:{},urlPerfix:"",doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},errorRetryBtn:!1,reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey",errorHandler:null,beforeSend:null,systemErrorHandler:null}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0,isEnableBackupDomain:!1}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){return n.default.request(e)}},function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=0&&a.default.backupDomain&&e.url.indexOf(a.default.backupDomain)<0?(b(),v(e).then((function(e){return t(e)}))):r({type:"system-error",res:n})},complete:function(){"function"==typeof e.complete&&e.complete(),e.showLoading&&o.default.hide()}}))}))}function m(e){return 0===(e=function(e){var t,r;if(e.formData||(e.formData={}),e.header=e.header?e.header:{},"function"==typeof a.default.setHeader){var o=a.default.setHeader();"object"==typeof o&&(e.header=n(n({},e.header),o))}else"object"==typeof a.default.setHeader&&(e.header=n(n({},e.header),a.default.setHeader));e.originUrl!==a.default.codeToSession.url&&u.default.session&&(e.formData=n(n({},e.formData),((t={})[a.default.sessionName]=u.default.session,t)));var i=g();return e.formData=n(n({},i),e.formData),a.default.doNotUseQueryString||(u.default.session&&(e.url=d.default.setParams(e.url,((r={})[a.default.sessionName]=u.default.session,r))),e.url=d.default.setParams(e.url,i)),u.default.isEnableBackupDomain&&a.default.backupDomain&&(e.url=d.default.replaceDomain(e.url,a.default.backupDomain)),c.default.start(e),e}(e)).reLoginCount&&"function"==typeof a.default.beforeSend&&(e=a.default.beforeSend(e,u.default.session)),new Promise((function(t,r){wx.uploadFile(n(n({},e),{success:function(e){return t(e)},fail:function(n){var o;return(null===(o=null==n?void 0:n.errMsg)||void 0===o?void 0:o.indexOf("CONNECTION_REFUSED"))>=0&&a.default.backupDomain&&e.url.indexOf(a.default.backupDomain)<0?(b(),m(e).then((function(e){return t(e)}))):r({type:"system-error",res:n})},complete:function(){"function"==typeof e.complete&&e.complete(),e.showLoading&&o.default.hide()}}))}))}function b(){u.default.isEnableBackupDomain||(u.default.isEnableBackupDomain=!0,"function"==typeof a.default.backupDomainEnableCallback&&a.default.backupDomainEnableCallback())}t.default={format:y,request:function(e){return new Promise((function(t,r){if(e=h(e,t,r),a.default.mockJson){var n=i.default.get(e);if(n){var o=l.default.responseForRequest(n,e);return t(o)}}e.cache&&s.default.get(e),f.default.main(e).then((function(){return v(e)})).then((function(r){var n=l.default.responseForRequest(r,e);if(null!=n)return t(n)})).catch((function(t){return p.catchHandler(t,e,r)}))}))},uploadFile:function(e){return new Promise((function(t,r){if(e=h(e,t,r),a.default.mockJson){var n=i.default.get(e);if(n){var o=l.default.responseForUploadFile(n,e);return t(o)}}f.default.main(e).then((function(){return m(e)})).then((function(r){var n=l.default.responseForUploadFile(r,e);if(null!=n)return t(n)})).catch((function(t){p.catchHandler(t,e,r)}))}))}}},function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])||6!==a[0]&&2!==a[0])){u=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]u.default.sessionExpire&&(v(),1)?(i.default.doNotCheckSession=!0,g().then((function(){return e()}),(function(e){return t(e)}))):e()}))}var h=null;function g(){return h||(h=new Promise((function(e,t){new Promise((function(e,t){var r=(new Date).getTime();wx.login({success:function(r){if(!r.code)return t({type:"system-error",res:r});(function(e){return o(this,void 0,void 0,(function(){var t,r;return a(this,(function(o){switch(o.label){case 0:return"function"!=typeof i.default.codeToSession.data?[3,2]:[4,i.default.codeToSession.data(e)];case 1:return t=o.sent(),[3,3];case 2:t=i.default.codeToSession.data||{},o.label=3;case 3:return i.default.codeToSession.codeName?t[i.default.codeToSession.codeName]=e:t.code=e,r={url:l.default.format(i.default.codeToSession.url),data:t,method:i.default.codeToSession.method||"GET",header:"function"==typeof i.default.setHeader?i.default.setHeader():i.default.setHeader},"function"==typeof i.default.beforeSend&&(r=i.default.beforeSend(r)),[2,new Promise((function(e,t){var o=(new Date).getTime();wx.request(n(n({},r),{success:function(r){if(200===r.statusCode){if(i.default.codeToSession.report){var n=(new Date).getTime();f.default.report(i.default.codeToSession.report,o,n)}var a=void 0;try{a=i.default.codeToSession.success(r.data,r)}catch(e){}return"string"==typeof a?(u.default.session=a,i.default.doNotCheckSession=!0,i.default.sessionExpireTime&&i.default.sessionExpireKey&&(u.default.sessionExpire=(new Date).getTime()+i.default.sessionExpireTime,wx.setStorage({key:i.default.sessionExpireKey,data:String(u.default.sessionExpire)})),wx.setStorage({key:i.default.sessionName,data:u.default.session}),e(a)):t(s.default.getErrorMsg(r))}return t({type:"http-error",res:r})},complete:function(){},fail:function(e){return t({type:"system-error",res:e})}}))}))]}}))}))})(r.code).then((function(){return e()})).catch((function(e){return t(e)}))},complete:function(){var e=(new Date).getTime();f.default.report("wx_login",r,e)},fail:function(e){return t({type:"system-error",res:e})}})})).then((function(){return h=null,e()})).catch((function(e){return h=null,c.default.hide(),t(e)}))}))),h}function v(){u.default.session="",wx.removeStorage({key:i.default.sessionName}),i.default.sessionExpireTime&&i.default.sessionExpireKey&&(u.default.sessionExpire=1/0,wx.removeStorage({key:i.default.sessionExpireKey}))}t.default={main:function e(t){return new Promise((function(r,n){var o=t?function(){return d.default(t).then(t._resolve).catch(t._reject)}:function(){return e().then(r).catch(n)};return y().then((function(){return i.default.doNotCheckSession?Promise.resolve():(p||(p=new Promise((function(e,t){var r=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return v(),g().then((function(){return e()}),(function(e){return t(e)}))},complete:function(){var e=(new Date).getTime();f.default.report("wx_checkSession",r,e)}})}))),p)}),(function(e){var t=e.title,r=e.content;return s.default.doError(t,r,o),n({title:t,content:r})})).then((function(){return r()}),(function(e){var t=e.title,r=e.content;return s.default.doError(t,r,o),n({title:t,content:r})}))}))},setSession:function(e){u.default.session=e,i.default.doNotCheckSession=!0,i.default.sessionExpireTime&&i.default.sessionExpireKey&&(u.default.sessionExpire=(new Date).getTime()+i.default.sessionExpireTime,wx.setStorage({key:i.default.sessionExpireKey,data:String(u.default.sessionExpire)})),wx.setStorage({key:i.default.sessionName,data:u.default.session})},delSession:v}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={show:function(e){wx.showToast({title:"boolean"==typeof e?"加载中":e,icon:"loading",mask:!0,duration:6e4})},hide:function(){wx.hideToast({})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function a(e,t,r){"function"==typeof n.default.reportCGI&&n.default.reportCGI(e,t,r,o.default)}t.default={start:function(e){e._reportStartTime=(new Date).getTime()},end:function(e){e._reportEndTime=(new Date).getTime(),e.report&&e._reportStartTime&&a(e.report,e._reportStartTime,e._reportEndTime)},report:a}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){e.originUrl&&wx.getStorage({key:e.originUrl,success:function(t){(!0===e.cache||"function"==typeof e.cache&&e.cache(t.data))&&"function"==typeof e.success&&e.success(t.data,{isCache:!0}),"function"==typeof e.complete&&e.complete()}})},set:function(e,t){e.originUrl&&(!0===e.cache||"function"==typeof e.cache&&e.cache(t))&&wx.setStorage({key:e.originUrl,data:t})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function a(e){var t="";if("function"==typeof n.default.errorTitle)try{t=n.default.errorTitle(e.data)}catch(e){}else"string"==typeof n.default.errorTitle&&(t=n.default.errorTitle);var r="";if("function"==typeof n.default.errorContent)try{r=n.default.errorContent(e.data)}catch(e){}else"string"==typeof n.default.errorContent&&(r=n.default.errorContent);return{title:t,content:r}}function u(e,t,r){var o=n.default.errorRetryBtn&&"function"==typeof r;wx.showModal(Object.assign({title:e||"",content:t||"网络或服务异常,请稍后重试"},o?{showCancel:!0,confirmText:"重试",success:function(e){e.confirm&&"function"==typeof r&&r()}}:{showCancel:!1}))}t.default={systemError:function(e,t){if("function"==typeof e.fail)e.fail(t);else if("function"==typeof n.default.systemErrorHandler)n.default.systemErrorHandler(t);else{u("","",(function(){return o.default(e).then(e._resolve).catch(e._reject)}))}},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else if("function"==typeof n.default.errorHandler)n.default.errorHandler(t.data);else{var r=a(t);u(r.title,r.content,(function(){return o.default(e).then(e._resolve).catch(e._reject)}))}},doError:u,getErrorMsg:a}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(10),o=r(2),a=r(16),u=r(17),i=r(18),s=r(19),f=r(20),l=r(21),c={init:n.default,request:o.default,uploadFile:a.default,setSession:u.default,login:i.default,getSession:s.default,getConfig:f.default,version:l.version};t.default=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(e){Object.assign(n.default,e),console.log(n.default.errorTitle);try{o.default.session=wx.getStorageSync(n.default.sessionName)||""}catch(e){}try{o.default.sessionExpire=wx.getStorageSync(n.default.sessionExpireKey||"sessionExpireKey")||1/0}catch(e){}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(5);t.default={get:function(e){if(!(n.default.mockJson[e.url]||e.originUrl&&n.default.mockJson[e.originUrl]))return!1;var t=n.default.mockJson[e.url]||(e.originUrl?n.default.mockJson[e.originUrl]:""),r={data:t=JSON.parse(JSON.stringify(t)),statusCode:200};return o.default.hide(),r}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(3),a=r(7),u=r(6),i=r(4),s=r(13);t.default={responseForRequest:function(e,t){if(200!==e.statusCode)throw{type:"http-error",res:e};if(u.default.end(t),"json"===t.dataType&&"string"==typeof e.data){e.data=s.default(e.data);try{e.data=JSON.parse(e.data)}catch(t){throw{type:"logic-error",res:e}}}if(n.default.loginTrigger(e.data)&&void 0!==t.reLoginCount&&t.reLoginCount=0){var a=e.substr(r+1).split("&");a.forEach((function(e,t){var r=a[t].split("=");o[r[0]]=r[1]}))}o=n(n({},o),t);var u=Object.keys(o).map((function(e){return e+"="+encodeURI(o[e])})).join("&");return r>=0?e.substring(0,r+1)+u:e+"?"+u},replaceDomain:function(e,t){return void 0===e&&(e=""),void 0===t&&(t=""),t=t.replace(/^http(s)?:\/\//,"").replace(/\/$/,""),e.replace(/^http(s)?:\/\/(.*?)\//,"https://"+t+"/")}}},function(e,t,r){"use strict";var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.catchHandler=void 0;var a=r(8),u=r(0),i=function(e){function t(t,r){void 0===r&&(r={});var n=e.call(this,t)||this;return n.data=r,n}return o(t,e),t}(Error);t.catchHandler=function(e,t,r){var n=e.type,o=e.res;if("function"==typeof u.default.errorCallback&&u.default.errorCallback(t,o),t.catchError){if("http-error"===n)return r(new Error(o.statusCode.toString()));if("logic-error"===n){var s=a.default.getErrorMsg(o);return r(new i(s.content,o.data))}return r("system-error"===n?new Error(o.errMsg):e)}return"http-error"===n||"logic-error"===n?a.default.logicError(t,o):"system-error"===n?a.default.systemError(t,o):r(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){return n.default.uploadFile(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);t.default=function(e){n.default.setSession(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);t.default=function(){return n.default.main()}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(1);t.default=function(){return n.default.session}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(){return{urlPerfix:n.default.urlPerfix,sessionExpireTime:n.default.sessionExpireTime,sessionExpireKey:n.default.sessionExpireKey,sessionExpire:o.default.sessionExpire}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.version=void 0;t.version="1.7.0"}]).default; \ No newline at end of file +module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=10)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sessionName:"session",loginTrigger:function(){return!1},codeToSession:{url:"",success:function(){}},successTrigger:function(){return!0},setHeader:{},urlPerfix:"",doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},errorRetryBtn:!1,reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey",errorHandler:null,beforeSend:null,systemErrorHandler:null}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0,isEnableBackupDomain:!1}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){return n.default.request(e)}},function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=0&&d.default.isInBackupDomainList(e.url)?(b(e.url),g(e).then((function(e){return t(e)}))):r({type:"system-error",res:n})},complete:function(){"function"==typeof e.complete&&e.complete(),e.showLoading&&o.default.hide()}}))}))}function m(e){return 0===(e=function(e){var t,r;if(e.formData||(e.formData={}),e.header=e.header?e.header:{},"function"==typeof a.default.setHeader){var o=a.default.setHeader();"object"==typeof o&&(e.header=n(n({},e.header),o))}else"object"==typeof a.default.setHeader&&(e.header=n(n({},e.header),a.default.setHeader));e.originUrl!==a.default.codeToSession.url&&u.default.session&&(e.formData=n(n({},e.formData),((t={})[a.default.sessionName]=u.default.session,t)));var i=v();return e.formData=n(n({},i),e.formData),a.default.doNotUseQueryString||(u.default.session&&(e.url=d.default.setParams(e.url,((r={})[a.default.sessionName]=u.default.session,r))),e.url=d.default.setParams(e.url,i)),e.url=d.default.replaceDomain(e.url),c.default.start(e),e}(e)).reLoginCount&&"function"==typeof a.default.beforeSend&&(e=a.default.beforeSend(e,u.default.session)),new Promise((function(t,r){wx.uploadFile(n(n({},e),{success:function(e){return t(e)},fail:function(n){var o;return(null===(o=null==n?void 0:n.errMsg)||void 0===o?void 0:o.indexOf("CONNECTION_REFUSED"))>=0&&d.default.isInBackupDomainList(e.url)?(b(e.url),m(e).then((function(e){return t(e)}))):r({type:"system-error",res:n})},complete:function(){"function"==typeof e.complete&&e.complete(),e.showLoading&&o.default.hide()}}))}))}function b(e){void 0===e&&(e=""),u.default.isEnableBackupDomain||(u.default.isEnableBackupDomain=!0,"function"==typeof a.default.backupDomainEnableCallback&&a.default.backupDomainEnableCallback(e))}t.default={format:y,request:function(e){return new Promise((function(t,r){if(e=h(e,t,r),a.default.mockJson){var n=i.default.get(e);if(n){var o=l.default.responseForRequest(n,e);return t(o)}}e.cache&&s.default.get(e),f.default.main(e).then((function(){return g(e)})).then((function(r){var n=l.default.responseForRequest(r,e);if(null!=n)return t(n)})).catch((function(t){return p.catchHandler(t,e,r)}))}))},uploadFile:function(e){return new Promise((function(t,r){if(e=h(e,t,r),a.default.mockJson){var n=i.default.get(e);if(n){var o=l.default.responseForUploadFile(n,e);return t(o)}}f.default.main(e).then((function(){return m(e)})).then((function(r){var n=l.default.responseForUploadFile(r,e);if(null!=n)return t(n)})).catch((function(t){p.catchHandler(t,e,r)}))}))},enableBackupDomain:b}},function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])||6!==a[0]&&2!==a[0])){u=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]u.default.sessionExpire&&(m(),1)?(i.default.doNotCheckSession=!0,g().then((function(){return e()}),(function(e){return t(e)}))):e()}))}var v=null;function g(){return v||(v=new Promise((function(e,t){new Promise((function(e,t){var r=(new Date).getTime();wx.login({success:function(r){if(!r.code)return t({type:"system-error",res:r});(function e(t){return o(this,void 0,void 0,(function(){var r,o;return a(this,(function(a){switch(a.label){case 0:return"function"!=typeof i.default.codeToSession.data?[3,2]:[4,i.default.codeToSession.data(t)];case 1:return r=a.sent(),[3,3];case 2:r=i.default.codeToSession.data||{},a.label=3;case 3:return i.default.codeToSession.codeName?r[i.default.codeToSession.codeName]=t:r.code=t,o={url:l.default.format(i.default.codeToSession.url),data:r,method:i.default.codeToSession.method||"GET",header:"function"==typeof i.default.setHeader?i.default.setHeader():i.default.setHeader},"function"==typeof i.default.beforeSend&&(o=i.default.beforeSend(o)),o.url=p.default.replaceDomain(o.url),[2,new Promise((function(r,a){var c=(new Date).getTime();wx.request(n(n({},o),{success:function(e){if(200===e.statusCode){if(i.default.codeToSession.report){var t=(new Date).getTime();f.default.report(i.default.codeToSession.report,c,t)}var n=void 0;try{n=i.default.codeToSession.success(e.data,e)}catch(e){}return"string"==typeof n?(u.default.session=n,i.default.doNotCheckSession=!0,i.default.sessionExpireTime&&i.default.sessionExpireKey&&(u.default.sessionExpire=(new Date).getTime()+i.default.sessionExpireTime,wx.setStorage({key:i.default.sessionExpireKey,data:String(u.default.sessionExpire)})),wx.setStorage({key:i.default.sessionName,data:u.default.session}),r(n)):a(s.default.getErrorMsg(e))}return a({type:"http-error",res:e})},complete:function(){},fail:function(n){var u;return(null===(u=null==n?void 0:n.errMsg)||void 0===u?void 0:u.indexOf("CONNECTION_REFUSED"))>=0&&p.default.isInBackupDomainList(o.url)?(l.default.enableBackupDomain(o.url),e(t).then((function(e){return r(e)}))):a({type:"system-error",res:n})}}))}))]}}))}))})(r.code).then((function(){return e()})).catch((function(e){return t(e)}))},complete:function(){var e=(new Date).getTime();f.default.report("wx_login",r,e)},fail:function(e){return t({type:"system-error",res:e})}})})).then((function(){return v=null,e()})).catch((function(e){return v=null,c.default.hide(),t(e)}))}))),v}function m(){u.default.session="",wx.removeStorage({key:i.default.sessionName}),i.default.sessionExpireTime&&i.default.sessionExpireKey&&(u.default.sessionExpire=1/0,wx.removeStorage({key:i.default.sessionExpireKey}))}t.default={main:function e(t){return new Promise((function(r,n){var o=t?function(){return d.default(t).then(t._resolve).catch(t._reject)}:function(){return e().then(r).catch(n)};return h().then((function(){return i.default.doNotCheckSession?Promise.resolve():(y||(y=new Promise((function(e,t){var r=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return m(),g().then((function(){return e()}),(function(e){return t(e)}))},complete:function(){var e=(new Date).getTime();f.default.report("wx_checkSession",r,e)}})}))),y)}),(function(e){var t=e.title,r=e.content;return s.default.doError(t,r,o),n({title:t,content:r})})).then((function(){return r()}),(function(e){var t=e.title,r=e.content;return s.default.doError(t,r,o),n({title:t,content:r})}))}))},setSession:function(e){u.default.session=e,i.default.doNotCheckSession=!0,i.default.sessionExpireTime&&i.default.sessionExpireKey&&(u.default.sessionExpire=(new Date).getTime()+i.default.sessionExpireTime,wx.setStorage({key:i.default.sessionExpireKey,data:String(u.default.sessionExpire)})),wx.setStorage({key:i.default.sessionName,data:u.default.session})},delSession:m}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={show:function(e){wx.showToast({title:"boolean"==typeof e?"加载中":e,icon:"loading",mask:!0,duration:6e4})},hide:function(){wx.hideToast({})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function a(e,t,r){"function"==typeof n.default.reportCGI&&n.default.reportCGI(e,t,r,o.default)}t.default={start:function(e){e._reportStartTime=(new Date).getTime()},end:function(e){e._reportEndTime=(new Date).getTime(),e.report&&e._reportStartTime&&a(e.report,e._reportStartTime,e._reportEndTime)},report:a}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){e.originUrl&&wx.getStorage({key:e.originUrl,success:function(t){(!0===e.cache||"function"==typeof e.cache&&e.cache(t.data))&&"function"==typeof e.success&&e.success(t.data,{isCache:!0}),"function"==typeof e.complete&&e.complete()}})},set:function(e,t){e.originUrl&&(!0===e.cache||"function"==typeof e.cache&&e.cache(t))&&wx.setStorage({key:e.originUrl,data:t})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function a(e){var t="";if("function"==typeof n.default.errorTitle)try{t=n.default.errorTitle(e.data)}catch(e){}else"string"==typeof n.default.errorTitle&&(t=n.default.errorTitle);var r="";if("function"==typeof n.default.errorContent)try{r=n.default.errorContent(e.data)}catch(e){}else"string"==typeof n.default.errorContent&&(r=n.default.errorContent);return{title:t,content:r}}function u(e,t,r){var o=n.default.errorRetryBtn&&"function"==typeof r;wx.showModal(Object.assign({title:e||"",content:t||"网络或服务异常,请稍后重试"},o?{showCancel:!0,confirmText:"重试",success:function(e){e.confirm&&"function"==typeof r&&r()}}:{showCancel:!1}))}t.default={systemError:function(e,t){if("function"==typeof e.fail)e.fail(t);else if("function"==typeof n.default.systemErrorHandler)n.default.systemErrorHandler(t);else{u("","",(function(){return o.default(e).then(e._resolve).catch(e._reject)}))}},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else if("function"==typeof n.default.errorHandler)n.default.errorHandler(t.data);else{var r=a(t);u(r.title,r.content,(function(){return o.default(e).then(e._resolve).catch(e._reject)}))}},doError:u,getErrorMsg:a}},function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=0){var a=e.substr(r+1).split("&");a.forEach((function(e,t){var r=a[t].split("=");o[r[0]]=r[1]}))}o=n(n({},o),t);var u=Object.keys(o).map((function(e){return e+"="+encodeURI(o[e])})).join("&");return r>=0?e.substring(0,r+1)+u:e+"?"+u},replaceDomain:function(e){if(void 0===e&&(e=""),a.default.isEnableBackupDomain&&o.default.backupDomainList&&"object"==typeof o.default.backupDomainList)for(var t in o.default.backupDomainList)if(e.indexOf(t)>=0){e=e.replace(t,o.default.backupDomainList[t]);break}return e},isInBackupDomainList:function(e){void 0===e&&(e="");var t=!1;if(o.default.backupDomainList&&"object"==typeof o.default.backupDomainList)for(var r in o.default.backupDomainList)if(e.indexOf(r)>=0){t=!0;break}return t}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(11),o=r(2),a=r(16),u=r(17),i=r(18),s=r(19),f=r(20),l=r(21),c={init:n.default,request:o.default,uploadFile:a.default,setSession:u.default,login:i.default,getSession:s.default,getConfig:f.default,version:l.version};t.default=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(e){Object.assign(n.default,e),console.log(n.default.errorTitle);try{o.default.session=wx.getStorageSync(n.default.sessionName)||""}catch(e){}try{o.default.sessionExpire=wx.getStorageSync(n.default.sessionExpireKey||"sessionExpireKey")||1/0}catch(e){}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(5);t.default={get:function(e){if(!(n.default.mockJson[e.url]||e.originUrl&&n.default.mockJson[e.originUrl]))return!1;var t=n.default.mockJson[e.url]||(e.originUrl?n.default.mockJson[e.originUrl]:""),r={data:t=JSON.parse(JSON.stringify(t)),statusCode:200};return o.default.hide(),r}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(3),a=r(7),u=r(6),i=r(4),s=r(14);t.default={responseForRequest:function(e,t){if(200!==e.statusCode)throw{type:"http-error",res:e};if(u.default.end(t),"json"===t.dataType&&"string"==typeof e.data){e.data=s.default(e.data);try{e.data=JSON.parse(e.data)}catch(t){throw{type:"logic-error",res:e}}}if(n.default.loginTrigger(e.data)&&void 0!==t.reLoginCount&&t.reLoginCount= 0 && config.backupDomain && obj.url.indexOf(config.backupDomain) < 0) { + if (res?.errMsg?.indexOf('CONNECTION_REFUSED') >= 0 && url.isInBackupDomainList(obj.url)) { // 开启备份域名 - enableBackupDomain(); + enableBackupDomain(obj.url); // 重试一次 return doRequest(obj).then((res)=> resolve(res)); } @@ -196,9 +192,9 @@ function doUploadFile(obj: IUploadFileOption) { }, fail(res) { // 如果主域名不可用,且配置了备份域名,且本次请求未使用备份域名 - if (res?.errMsg?.indexOf('CONNECTION_REFUSED') >= 0 && config.backupDomain && obj.url.indexOf(config.backupDomain) < 0) { + if (res?.errMsg?.indexOf('CONNECTION_REFUSED') >= 0 && url.isInBackupDomainList(obj.url)) { // 开启备份域名 - enableBackupDomain(); + enableBackupDomain(obj.url); // 重试一次 return doUploadFile(obj).then((res)=> resolve(res)); } @@ -270,11 +266,11 @@ function uploadFile(obj: IUploadFileOption): any { }) } -function enableBackupDomain() { +function enableBackupDomain(url: string = "") { if (!status.isEnableBackupDomain) { status.isEnableBackupDomain = true; if (typeof config.backupDomainEnableCallback === 'function') { - config.backupDomainEnableCallback(); + config.backupDomainEnableCallback(url); } } } @@ -282,5 +278,6 @@ function enableBackupDomain() { export default { format, request, - uploadFile + uploadFile, + enableBackupDomain } diff --git a/src/module/sessionManager.ts b/src/module/sessionManager.ts index 6dab566..f91c72f 100644 --- a/src/module/sessionManager.ts +++ b/src/module/sessionManager.ts @@ -5,6 +5,7 @@ import durationReporter from './durationReporter' import requestHandler from './requestHandler' import loading from '../util/loading' import request from '../api/request' +import url from '../util/url' import { IRequestOption, IUploadFileOption } from "../interface"; /* 生命周期内只做一次的checkSession */ @@ -156,6 +157,9 @@ async function code2Session(code: string) { obj = config.beforeSend(obj); } + // 备用域名逻辑 + obj.url = url.replaceDomain(obj.url); + return new Promise((resolve, reject) => { let start = new Date().getTime(); wx.request({ @@ -201,6 +205,13 @@ async function code2Session(code: string) { complete() { }, fail: (res) => { + // 如果主域名不可用,且配置了备份域名,且本次请求未使用备份域名 + if (res?.errMsg?.indexOf('CONNECTION_REFUSED') >= 0 && url.isInBackupDomainList(obj.url)) { + // 开启备份域名 + requestHandler.enableBackupDomain(obj.url); + // 重试一次 + return code2Session(code).then((res)=> resolve(res)); + } return reject({type: "system-error", res}); } }) diff --git a/src/util/url.ts b/src/util/url.ts index 33f3e40..ac3d77e 100644 --- a/src/util/url.ts +++ b/src/util/url.ts @@ -1,3 +1,6 @@ +import config from '../store/config' +import status from '../store/status' + function setParams(url: string = "", params: object) { const queryStringIndex: number = url.indexOf("?"); let kvp: any = {}; @@ -25,13 +28,33 @@ function setParams(url: string = "", params: object) { } } -function replaceDomain(url: string = "", domain: string = "") { - // 保证domain只包含域名,没有 http(s) 前缀 和 / 后缀 - domain = domain.replace(/^http(s)?:\/\//, '').replace(/\/$/, ''); - return url.replace(/^http(s)?:\/\/(.*?)\//, `https://${domain}/`); +function replaceDomain(url: string = "") { + if (status.isEnableBackupDomain && config.backupDomainList && typeof config.backupDomainList === 'object') { + for(const origin in config.backupDomainList) { + if (url.indexOf(origin) >= 0) { + url = url.replace(origin, config.backupDomainList[origin]); + break; + } + } + } + return url; +} + +function isInBackupDomainList(url: string = "") { + let res = false; + if (config.backupDomainList && typeof config.backupDomainList === 'object') { + for(const origin in config.backupDomainList) { + if (url.indexOf(origin) >= 0) { + res = true; + break; + } + } + } + return res; } export default { setParams, replaceDomain, + isInBackupDomainList }; diff --git a/test/util/url.test.ts b/test/util/url.test.ts index fe1dd9a..0e0ac2e 100644 --- a/test/util/url.test.ts +++ b/test/util/url.test.ts @@ -12,16 +12,4 @@ describe("setParams", () => { sample = url.setParams(sample, { test2: 2 }); expect(sample).toBe("https://www.example.com?test=1&test2=2"); }); - - test("replace domain with host", () => { - let sample = "https://example.com/dosomething"; - sample = url.replaceDomain(sample, "example2.com"); - expect(sample).toBe("https://example2.com/dosomething"); - }) - - test("replace domain with origin", () => { - let sample = "https://example.com/dosomething"; - sample = url.replaceDomain(sample, "https://example2.com/"); - expect(sample).toBe("https://example2.com/dosomething"); - }) });