From 1b36b3228272f69e141006d65fb9cd8f38bc185e Mon Sep 17 00:00:00 2001 From: mwindson Date: Thu, 4 Jul 2019 17:47:25 +0800 Subject: [PATCH] =?UTF-8?q?fix(requestHandler):=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E6=88=96=E7=BD=91=E7=BB=9C=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8Dpromise.then=E4=B8=AD=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=BB=A7=E7=BB=AD=E6=89=A7=E8=A1=8C=20(#30)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(requestHandler): 修复请求或网络异常时处理后的response为undefined导致promise.then继续执行的问题 当请求未触发成功条件或statusCode不为200时,responseHandler返回的response为undefined,导致resolve返回并执行promise.then中的代码. 目前通过判断response是否为undefined决定是否resolve(response)来避免break change * fix(request&&uploadFile): 修改responseHandler抛出异常的逻辑并增加捕获异常的处理luoji --- build/module/catchHandler.d.ts | 8 ++++ build/weRequest.js | 69 ++++++++++++++++++++++++---------- build/weRequest.min.js | 2 +- src/module/catchHandler.ts | 25 ++++++++++++ src/module/requestHandler.ts | 27 +++++++------ src/module/responseHandler.ts | 30 ++++----------- 6 files changed, 107 insertions(+), 54 deletions(-) create mode 100644 build/module/catchHandler.d.ts create mode 100644 src/module/catchHandler.ts diff --git a/build/module/catchHandler.d.ts b/build/module/catchHandler.d.ts new file mode 100644 index 0000000..a35e710 --- /dev/null +++ b/build/module/catchHandler.d.ts @@ -0,0 +1,8 @@ +import { IRequestOption, IUploadFileOption } from "../interface"; +declare type ThrowErrorType = 'upload-error' | 'logic-error' | 'http-error'; +interface ThrowError { + type: ThrowErrorType; + res: any; +} +declare function catchHandler(e: ThrowError, obj: IRequestOption | IUploadFileOption, reject: (reason?: any) => void): void; +export { catchHandler }; diff --git a/build/weRequest.js b/build/weRequest.js index f6a11f8..8624125 100644 --- a/build/weRequest.js +++ b/build/weRequest.js @@ -318,6 +318,40 @@ exports.default = { /***/ }), +/***/ "./src/module/catchHandler.ts": +/*!************************************!*\ + !*** ./src/module/catchHandler.ts ***! + \************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var errorHandler_1 = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.ts"); +function catchHandler(e, obj, reject) { + var type = e.type, res = e.res; + if (obj.catchError) { + if (type === 'http-error') { + reject(new Error(res.statusCode.toString())); + } + else if (type === 'upload-error') { + reject(new Error(res)); + } + else if (type === 'logic-error') { + var msg = errorHandler_1.default.getErrorMsg(res); + reject(new Error(msg.content)); + } + } + else { + errorHandler_1.default.logicError(obj, e.res); + } +} +exports.catchHandler = catchHandler; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0Y2hIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9jYXRjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwrQ0FBMEM7QUFPMUMsU0FBUyxZQUFZLENBQUMsQ0FBYSxFQUFFLEdBQXVDLEVBQUUsTUFBOEI7SUFDaEcsSUFBQSxhQUFJLEVBQUUsV0FBRyxDQUFNO0lBQ3ZCLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtRQUNoQixJQUFJLElBQUksS0FBSyxZQUFZLEVBQUU7WUFDdkIsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFBSSxJQUFJLEtBQUssY0FBYyxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzFCO2FBQU0sSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFO1lBQy9CLElBQUksR0FBRyxHQUFHLHNCQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNsQztLQUNKO1NBQU07UUFDSCxzQkFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZDO0FBRUwsQ0FBQztBQUNRLG9DQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tIFwiLi9lcnJvckhhbmRsZXJcIjtcblxudHlwZSBUaHJvd0Vycm9yVHlwZSA9ICd1cGxvYWQtZXJyb3InIHwgJ2xvZ2ljLWVycm9yJyB8ICdodHRwLWVycm9yJ1xuaW50ZXJmYWNlIFRocm93RXJyb3Ige1xuICAgIHR5cGU6IFRocm93RXJyb3JUeXBlXG4gICAgcmVzOiBhbnlcbn1cbmZ1bmN0aW9uIGNhdGNoSGFuZGxlcihlOiBUaHJvd0Vycm9yLCBvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuICAgIGNvbnN0IHsgdHlwZSwgcmVzIH0gPSBlXG4gICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVzLnN0YXR1c0NvZGUudG9TdHJpbmcoKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1cGxvYWQtZXJyb3InKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHJlcykpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsb2dpYy1lcnJvcicpIHtcbiAgICAgICAgICAgIGxldCBtc2cgPSBlcnJvckhhbmRsZXIuZ2V0RXJyb3JNc2cocmVzKTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IobXNnLmNvbnRlbnQpKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9ySGFuZGxlci5sb2dpY0Vycm9yKG9iaiwgZS5yZXMpO1xuICAgIH1cblxufVxuZXhwb3J0IHsgY2F0Y2hIYW5kbGVyIH0iXX0= + +/***/ }), + /***/ "./src/module/durationReporter.ts": /*!****************************************!*\ !*** ./src/module/durationReporter.ts ***! @@ -491,6 +525,7 @@ var responseHandler_1 = __webpack_require__(/*! ./responseHandler */ "./src/modu var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts"); var url_1 = __webpack_require__(/*! ../util/url */ "./src/util/url.ts"); var errorHandler_1 = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.ts"); +var catchHandler_1 = __webpack_require__(/*! ./catchHandler */ "./src/module/catchHandler.ts"); function format(originUrl) { if (originUrl.startsWith('http')) { return originUrl; @@ -642,9 +677,11 @@ function request(obj) { return doRequest(obj); }).then(function (res) { var response = responseHandler_1.default(res, obj, 'request'); - return resolve(response); + if (response != null) { + return resolve(response); + } }).catch(function (e) { - return reject(e); + catchHandler_1.catchHandler(e, obj, reject); }); }); } @@ -662,9 +699,11 @@ function uploadFile(obj) { return doUploadFile(obj); }).then(function (res) { var response = responseHandler_1.default(res, obj, 'uploadFile'); - return resolve(response); + if (response != null) { + return resolve(response); + } }).catch(function (e) { - return reject(e); + catchHandler_1.catchHandler(e, obj, reject); }); }); } @@ -673,7 +712,7 @@ exports.default = { request: request, uploadFile: uploadFile }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBMEM7QUFHMUMsU0FBUyxNQUFNLENBQUMsU0FBaUI7SUFDN0IsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlCLE9BQU8sU0FBUyxDQUFBO0tBQ25CO1NBQU07UUFDSCxJQUFJLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3hDLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO0tBQ2hDO0FBQ0wsQ0FBQztBQUdELFNBQVMsS0FBSyxDQUErQyxHQUFNO0lBQy9ELElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUN0QyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDcEI7SUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDekMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNILEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN0QjtJQUVELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRTtRQUNqQixpQkFBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDakM7SUFFRCxJQUFJLENBQUMsR0FB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LFlBQVksQ0FBQyxDQUFDO2dCQUNoRSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QjtTQUNKO1FBRUQsd0JBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDdkIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsR0FBRztZQUNSLElBQUksUUFBUSxHQUFHLHlCQUFlLENBQUMsR0FBeUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0YsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUMsQ0FBQztZQUNQLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsa0JBQWU7SUFDWCxNQUFNLFFBQUE7SUFDTixPQUFPLFNBQUE7SUFDUCxVQUFVLFlBQUE7Q0FDYixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvYWRpbmcgZnJvbSAnLi4vdXRpbC9sb2FkaW5nJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcbmltcG9ydCBtb2NrTWFuYWdlciBmcm9tICcuL21vY2tNYW5hZ2VyJ1xuaW1wb3J0IGNhY2hlTWFuYWdlciBmcm9tICcuL2NhY2hlTWFuYWdlcidcbmltcG9ydCBzZXNzaW9uTWFuYWdlciBmcm9tICcuL3Nlc3Npb25NYW5hZ2VyJ1xuaW1wb3J0IHJlc3BvbnNlSGFuZGxlciBmcm9tICcuL3Jlc3BvbnNlSGFuZGxlcidcbmltcG9ydCBkdXJhdGlvblJlcG9ydGVyIGZyb20gXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIlxuaW1wb3J0IHVybCBmcm9tICcuLi91dGlsL3VybCdcbmltcG9ydCB7SVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9ufSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcbmltcG9ydCBlcnJvckhhbmRsZXIgZnJvbSBcIi4vZXJyb3JIYW5kbGVyXCI7XG5cbi8vIOagvOW8j+WMlnVybFxuZnVuY3Rpb24gZm9ybWF0KG9yaWdpblVybDogc3RyaW5nKSB7XG4gICAgaWYgKG9yaWdpblVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybFxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB1cmxQZXJmaXggPSBjb25maWcudXJsUGVyZml4O1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy51cmxQZXJmaXggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdXJsUGVyZml4ID0gY29uZmlnLnVybFBlcmZpeCgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybFBlcmZpeCArIG9yaWdpblVybDtcbiAgICB9XG59XG5cbi8vIOaJgOacieivt+axguWPkeWHuuWJjemcgOimgeWBmueahOS6i+aDhVxuZnVuY3Rpb24gcHJlRG88VCBleHRlbmRzIElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24+KG9iajogVCk6IFQge1xuICAgIGlmICh0eXBlb2Ygb2JqLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouYmVmb3JlU2VuZCgpO1xuICAgIH1cbiAgICAvLyDnmbvlvZXmgIHlpLHmlYjvvIzph43lpI3nmbvlvZXorqHmlbBcbiAgICBpZiAodHlwZW9mIG9iai5yZUxvZ2luQ291bnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cblxuICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgbG9hZGluZy5zaG93KG9iai5zaG93TG9hZGluZyk7XG4gICAgfVxuXG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8vIOagvOW8j+WMluWkhOeQhuivt+axgueahG9iauWGheWuuVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuXG4gICAgaWYgKCFvYmouZGF0YSkge1xuICAgICAgICBvYmouZGF0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7Li4ub2JqLmRhdGEgYXMgb2JqZWN0LCBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259O1xuICAgIH1cblxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxuICAgIGNvbnN0IGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5kYXRhID0gey4uLmdkLCAuLi5vYmouZGF0YSBhcyBvYmplY3R9O1xuXG4gICAgb2JqLm1ldGhvZCA9IG9iai5tZXRob2QgfHwgJ0dFVCc7XG4gICAgb2JqLmRhdGFUeXBlID0gb2JqLmRhdGFUeXBlIHx8ICdqc29uJztcblxuICAgIC8vIOWmguaenOivt+axguS4jeaYr0dFVO+8jOWImeWcqFVSTOS4reiHquWKqOWKoOS4iueZu+W9leaAgeWSjOWFqOWxgOWPguaVsFxuICAgIGlmICghY29uZmlnLmRvTm90VXNlUXVlcnlTdHJpbmcgJiYgb2JqLm1ldGhvZCAhPT0gXCJHRVRcIikge1xuICAgICAgICBpZiAoc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIHtbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259KTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuLy8g5qC85byP5YyW5aSE55CG5LiK5Lyg5paH5Lu255qEb2Jq5YaF5a65XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmo6IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKG9iai5vcmlnaW5VcmwgIT09IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICBvYmouZm9ybURhdGEgPSB7Li4ub2JqLmZvcm1EYXRhIGFzIG9iamVjdCwgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9ufTtcbiAgICB9XG5cbiAgICAvLyDlpoLmnpzmnInlhajlsYDlj4LmlbDvvIzliJnmt7vliqBcbiAgICBjb25zdCBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZm9ybURhdGEgPSB7Li4uZ2QsIC4uLm9iai5mb3JtRGF0YX07XG5cbiAgICBpZiAoIWNvbmZpZy5kb05vdFVzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIC8vIOWwhueZu+mZhuaAgeS5n+W4puWcqHVybOS4ilxuICAgICAgICBpZiAoc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIHtbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259KTtcbiAgICAgICAgfVxuICAgICAgICAvLyDlhajlsYDlj4LmlbDlkIzml7bmlL7lnKh1cmzkuIpcbiAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cblxuICAgIGR1cmF0aW9uUmVwb3J0ZXIuc3RhcnQob2JqKTtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERhdGEoKSB7XG4gICAgbGV0IGdkOiBhbnkgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5nbG9iYWxEYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWcuZ2xvYmFsRGF0YSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5nbG9iYWxEYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnLmdsb2JhbERhdGE7XG4gICAgfVxuICAgIHJldHVybiBnZDtcbn1cblxuZnVuY3Rpb24gZG9SZXF1ZXN0KG9iajogSVJlcXVlc3RPcHRpb24pIHtcbiAgICBvYmogPSBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICAgICAgZGF0YTogb2JqLmRhdGEsXG4gICAgICAgICAgICBtZXRob2Q6IG9iai5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXI6IG9iai5oZWFkZXIgfHwge30sXG4gICAgICAgICAgICBkYXRhVHlwZTogb2JqLmRhdGFUeXBlIHx8ICdqc29uJyxcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiB3eC5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsKHJlczogd3guR2VuZXJhbENhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIG9iaiA9IGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgd3gudXBsb2FkRmlsZSh7XG4gICAgICAgICAgICB1cmw6IG9iai51cmwsXG4gICAgICAgICAgICBmaWxlUGF0aDogb2JqLmZpbGVQYXRoIHx8ICcnLFxuICAgICAgICAgICAgbmFtZTogb2JqLm5hbWUgfHwgJycsXG4gICAgICAgICAgICBmb3JtRGF0YTogb2JqLmZvcm1EYXRhLFxuICAgICAgICAgICAgc3VjY2VzcyhyZXM6IHd4LlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWwocmVzOiB3eC5HZW5lcmFsQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmcuaGlkZSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHJlcXVlc3Qob2JqOiBJUmVxdWVzdE9wdGlvbik6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqKTtcblxuICAgICAgICBpZiAoY29uZmlnLm1vY2tKc29uKSB7XG4gICAgICAgICAgICBsZXQgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyKG1vY2tSZXNwb25zZSwgb2JqLCAncmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYmouY2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlci5nZXQob2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlc3Npb25NYW5hZ2VyLm1haW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKVxuICAgICAgICB9KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcihyZXMgYXMgd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCwgb2JqLCAncmVxdWVzdCcpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiB1cGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pOiBhbnkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaik7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5tb2NrSnNvbikge1xuICAgICAgICAgICAgbGV0IG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyLmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcihtb2NrUmVzcG9uc2UsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXNzaW9uTWFuYWdlci5tYWluKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iailcbiAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIocmVzIGFzIHd4LlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdCxcbiAgICByZXF1ZXN0LFxuICAgIHVwbG9hZEZpbGVcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBMEM7QUFDMUMsK0NBQThDO0FBRzlDLFNBQVMsTUFBTSxDQUFDLFNBQWlCO0lBQzdCLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM5QixPQUFPLFNBQVMsQ0FBQTtLQUNuQjtTQUFNO1FBQ0gsSUFBSSxTQUFTLEdBQUcsZ0JBQU0sQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxPQUFPLGdCQUFNLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUN4QyxTQUFTLEdBQUcsZ0JBQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtTQUNqQztRQUNELE9BQU8sU0FBUyxHQUFHLFNBQVMsQ0FBQztLQUNoQztBQUNMLENBQUM7QUFHRCxTQUFTLEtBQUssQ0FBK0MsR0FBTTtJQUMvRCxJQUFJLE9BQU8sR0FBRyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDdEMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0tBQ3BCO0lBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUFFO1FBQ3pDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCO1NBQU07UUFDSCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDdEI7SUFFRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7UUFDakIsaUJBQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2pDO0lBRUQs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SUFBSSxZQUFZLEVBQUU7Z0JBQ2QsSUFBSSxRQUFRLEdBQUcseUJBQWUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNoRSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QjtTQUNKO1FBRUQsd0JBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDdkIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsR0FBRztZQUNSLElBQUksUUFBUSxHQUFHLHlCQUFlLENBQUMsR0FBeUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0YsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO2dCQUNsQixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QjtRQUNMLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFDLENBQUM7WUFDUCwyQkFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxrQkFBZTtJQUNYLE1BQU0sUUFBQTtJQUNOLE9BQU8sU0FBQTtJQUNQLFVBQVUsWUFBQTtDQUNiLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IG1vY2tNYW5hZ2VyIGZyb20gJy4vbW9ja01hbmFnZXInXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xuaW1wb3J0IHNlc3Npb25NYW5hZ2VyIGZyb20gJy4vc2Vzc2lvbk1hbmFnZXInXG5pbXBvcnQgcmVzcG9uc2VIYW5kbGVyIGZyb20gJy4vcmVzcG9uc2VIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSBcIi4vZHVyYXRpb25SZXBvcnRlclwiXG5pbXBvcnQgdXJsIGZyb20gJy4uL3V0aWwvdXJsJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiXG5pbXBvcnQgZXJyb3JIYW5kbGVyIGZyb20gXCIuL2Vycm9ySGFuZGxlclwiO1xuaW1wb3J0IHsgY2F0Y2hIYW5kbGVyIH0gZnJvbSAnLi9jYXRjaEhhbmRsZXInO1xuXG4vLyDmoLzlvI/ljJZ1cmxcbmZ1bmN0aW9uIGZvcm1hdChvcmlnaW5Vcmw6IHN0cmluZykge1xuICAgIGlmIChvcmlnaW5Vcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5VcmxcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdXJsUGVyZml4ID0gY29uZmlnLnVybFBlcmZpeDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudXJsUGVyZml4ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHVybFBlcmZpeCA9IGNvbmZpZy51cmxQZXJmaXgoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XG4gICAgfVxufVxuXG4vLyDmiYDmnInor7fmsYLlj5Hlh7rliY3pnIDopoHlgZrnmoTkuovmg4VcbmZ1bmN0aW9uIHByZURvPFQgZXh0ZW5kcyBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uPihvYmo6IFQpOiBUIHtcbiAgICBpZiAodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmJlZm9yZVNlbmQoKTtcbiAgICB9XG4gICAgLy8g55m75b2V5oCB5aSx5pWI77yM6YeN5aSN55m75b2V6K6h5pWwXG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQrKztcbiAgICB9XG5cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmcuc2hvdyhvYmouc2hvd0xvYWRpbmcpO1xuICAgIH1cblxuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICBvYmoub3JpZ2luVXJsID0gb2JqLnVybDtcbiAgICAgICAgb2JqLnVybCA9IGZvcm1hdChvYmoudXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG4vLyDmoLzlvI/ljJblpITnkIbor7fmsYLnmoRvYmrlhoXlrrlcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iajogSVJlcXVlc3RPcHRpb24pIHtcblxuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5kYXRhID0geyAuLi5vYmouZGF0YSBhcyBvYmplY3QsIFtjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbiB9O1xuICAgIH1cblxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxuICAgIGNvbnN0IGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5kYXRhID0geyAuLi5nZCwgLi4ub2JqLmRhdGEgYXMgb2JqZWN0IH07XG5cbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuXG4gICAgLy8g5aaC5p6c6K+35rGC5LiN5pivR0VU77yM5YiZ5ZyoVVJM5Lit6Ieq5Yqo5Yqg5LiK55m75b2V5oCB5ZKM5YWo5bGA5Y+C5pWwXG4gICAgaWYgKCFjb25maWcuZG9Ob3RVc2VRdWVyeVN0cmluZyAmJiBvYmoubWV0aG9kICE9PSBcIkdFVFwiKSB7XG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgeyBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfSk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cblxuICAgIGR1cmF0aW9uUmVwb3J0ZXIuc3RhcnQob2JqKTtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8vIOagvOW8j+WMluWkhOeQhuS4iuS8oOaWh+S7tueahG9iauWGheWuuVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0geyAuLi5vYmouZm9ybURhdGEgYXMgb2JqZWN0LCBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfTtcbiAgICB9XG5cbiAgICAvLyDlpoLmnpzmnInlhajlsYDlj4LmlbDvvIzliJnmt7vliqBcbiAgICBjb25zdCBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZm9ybURhdGEgPSB7IC4uLmdkLCAuLi5vYmouZm9ybURhdGEgfTtcblxuICAgIGlmICghY29uZmlnLmRvTm90VXNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgLy8g5bCG55m76ZmG5oCB5Lmf5bim5ZyodXJs5LiKXG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgeyBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5YWo5bGA5Y+C5pWw5ZCM5pe25pS+5ZyodXJs5LiKXG4gICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcbiAgICB9XG5cbiAgICBkdXJhdGlvblJlcG9ydGVyLnN0YXJ0KG9iaik7XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEYXRhKCkge1xuICAgIGxldCBnZDogYW55ID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnLmdsb2JhbERhdGEoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZ2Q7XG59XG5cbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmo6IElSZXF1ZXN0T3B0aW9uKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBvYmoubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyOiBvYmouaGVhZGVyIHx8IHt9LFxuICAgICAgICAgICAgZGF0YVR5cGU6IG9iai5kYXRhVHlwZSB8fCAnanNvbicsXG4gICAgICAgICAgICBzdWNjZXNzKHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbChyZXM6IHd4LkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlci5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZy5oaWRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHd4LnVwbG9hZEZpbGUoe1xuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcbiAgICAgICAgICAgIG5hbWU6IG9iai5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgZm9ybURhdGE6IG9iai5mb3JtRGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsKHJlczogd3guR2VuZXJhbENhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0KG9iajogSVJlcXVlc3RPcHRpb24pOiBhbnkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaik7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5tb2NrSnNvbikge1xuICAgICAgICAgICAgbGV0IG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyLmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcihtb2NrUmVzcG9uc2UsIG9iaiwgJ3JlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqLmNhY2hlKSB7XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBzZXNzaW9uTWFuYWdlci5tYWluKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iailcbiAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIocmVzIGFzIHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQsIG9iaiwgJ3JlcXVlc3QnKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbik6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqKTtcblxuICAgICAgICBpZiAoY29uZmlnLm1vY2tKc29uKSB7XG4gICAgICAgICAgICBsZXQgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyKG1vY2tSZXNwb25zZSwgb2JqLCAndXBsb2FkRmlsZScpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNlc3Npb25NYW5hZ2VyLm1haW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKVxuICAgICAgICB9KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcihyZXMgYXMgd3guVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCwgb2JqLCAndXBsb2FkRmlsZScpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBjYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdCxcbiAgICByZXF1ZXN0LFxuICAgIHVwbG9hZEZpbGVcbn1cbiJdfQ== /***/ }), @@ -700,6 +739,7 @@ function response(res, obj, method) { res.data = JSON.parse(res.data); } catch (e) { + throw { type: 'upload-error', res: e }; if (obj.catchError) { throw new Error(e); } @@ -743,26 +783,15 @@ function response(res, obj, method) { cacheManager_1.default.set(obj, realData); } else { - if (obj.catchError) { - var msg = errorHandler_1.default.getErrorMsg(res); - throw new Error(msg.content); - } - else { - errorHandler_1.default.logicError(obj, res); - } + throw { type: 'logic-error', res: res }; } } else { - if (obj.catchError) { - throw new Error(res.statusCode.toString()); - } - else { - errorHandler_1.default.logicError(obj, res); - } + throw { type: 'http-error', res: res }; } } exports.default = response; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2VIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9yZXNwb25zZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsbURBQTZDO0FBQzdDLCtDQUF5QztBQUN6QywrQ0FBeUM7QUFDekMsdURBQWlEO0FBQ2pELG1EQUE2QztBQUc3QyxTQUFTLFFBQVEsQ0FDYixHQUF5RSxFQUN6RSxHQUF1QyxFQUN2QyxNQUFnQztJQUVoQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1FBR3hCLElBQUcsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJO2dCQUNBLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixJQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUU7b0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0gsc0JBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxPQUFPO2lCQUNWO2FBQ0o7U0FDSjtRQUVELDBCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQixJQUFJLGdCQUFNLENBQUMsWUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsWUFBWSxHQUFHLGdCQUFNLENBQUMsWUFBYSxFQUFFO1lBRTdHLHdCQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUIsSUFBRyxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUNyQixPQUFPLHdCQUFjLENBQUMsT0FBTyxDQUFDLEdBQXFCLENBQUMsQ0FBQzthQUN4RDtpQkFBTSxJQUFHLE1BQU0sS0FBSyxZQUFZLEVBQUU7Z0JBQy9CLE9BQU8sd0JBQWMsQ0FBQyxVQUFVLENBQUMsR0FBd0IsQ0FBQyxDQUFDO2FBQzlEO1NBQ0o7YUFBTSxJQUFJLGdCQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUV4QyxJQUFJLFFBQVEsR0FBc0MsRUFBRSxDQUFDO1lBQ3JELElBQUk7Z0JBQ0EsSUFBSSxPQUFPLGdCQUFNLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtvQkFDMUMsUUFBUSxHQUFHLGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0gsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQ3ZCO2FBQ0o7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsSUFBRyxDQUFFLEdBQXNCLENBQUMsWUFBWSxFQUFFO2dCQUV0QyxJQUFHLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUM7b0JBQ2pDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3pCO3FCQUFNO29CQUNILE9BQU8sUUFBUSxDQUFDO2lCQUNuQjthQUNKO1lBRUQsc0JBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFFSCxJQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2YsSUFBSSxHQUFHLEdBQUcsc0JBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNILHNCQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNyQztTQUNKO0tBQ0o7U0FBTTtRQUVILElBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO2FBQU07WUFDSCxzQkFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDckM7S0FDSjtBQUNMLENBQUM7QUFFRCxrQkFBZSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCByZXF1ZXN0SGFuZGxlciBmcm9tICcuL3JlcXVlc3RIYW5kbGVyJ1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9ySGFuZGxlcidcbmltcG9ydCBjYWNoZU1hbmFnZXIgZnJvbSAnLi9jYWNoZU1hbmFnZXInXG5pbXBvcnQgZHVyYXRpb25SZXBvcnRlciBmcm9tICcuL2R1cmF0aW9uUmVwb3J0ZXInXG5pbXBvcnQgc2Vzc2lvbk1hbmFnZXIgZnJvbSAnLi9zZXNzaW9uTWFuYWdlcidcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuZnVuY3Rpb24gcmVzcG9uc2UoXG4gICAgcmVzOiB3eC5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0IHwgd3guVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCxcbiAgICBvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sXG4gICAgbWV0aG9kOiBcInJlcXVlc3RcIiB8IFwidXBsb2FkRmlsZVwiXG4pOiBhbnkge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG5cbiAgICAgICAgLy8g5YW85a65dXBsb2FkRmlsZei/lOWbnueahHJlcy5kYXRh5Y+v6IO95piv5a2X56ym5LiyXG4gICAgICAgIGlmKHR5cGVvZiByZXMuZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkdXJhdGlvblJlcG9ydGVyLmVuZChvYmopO1xuXG4gICAgICAgIGlmIChjb25maWcubG9naW5UcmlnZ2VyIShyZXMuZGF0YSkgJiYgb2JqLnJlTG9naW5Db3VudCAhPT0gdW5kZWZpbmVkICYmIG9iai5yZUxvZ2luQ291bnQgPCBjb25maWcucmVMb2dpbkxpbWl0ISkge1xuICAgICAgICAgICAgLy8g55m75b2V5oCB5aSx5pWI77yM5LiU6YeN6K+V5qyh5pWw5LiN6LaF6L+H6YWN572uXG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlci5kZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICBpZihtZXRob2QgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyLnJlcXVlc3Qob2JqIGFzIElSZXF1ZXN0T3B0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZihtZXRob2QgPT09IFwidXBsb2FkRmlsZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyLnVwbG9hZEZpbGUob2JqIGFzIElVcGxvYWRGaWxlT3B0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcuc3VjY2Vzc1RyaWdnZXIocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICAvLyDmjqXlj6Pov5Tlm57miJDlip/noIFcbiAgICAgICAgICAgIGxldCByZWFsRGF0YTogc3RyaW5nIHwgSUFueU9iamVjdCB8IEFycmF5QnVmZmVyID0gXCJcIjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcuc3VjY2Vzc0RhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSBjb25maWcuc3VjY2Vzc0RhdGEocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGdW5jdGlvbiBzdWNjZXNzRGF0YSBvY2N1ciBlcnJvcjogXCIgKyBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKCEob2JqIGFzIElSZXF1ZXN0T3B0aW9uKS5ub0NhY2hlRmxhc2gpIHtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuLrkuobkv53or4HpobXpnaLkuI3pl6rng4HvvIzliJnkuI3lm57osIPvvIzlj6rmmK/nvJPlrZjmnIDmlrDmlbDmja7vvIzlvoXkuIvmrKHov5vlhaXlho3nlKhcbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIil7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhbERhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g57yT5a2Y5a2Y5YKoXG4gICAgICAgICAgICBjYWNoZU1hbmFnZXIuc2V0KG9iaiwgcmVhbERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g5o6l5Y+j6L+U5Zue5aSx6LSl56CBXG4gICAgICAgICAgICBpZihvYmouY2F0Y2hFcnJvcikge1xuICAgICAgICAgICAgICAgIGxldCBtc2cgPSBlcnJvckhhbmRsZXIuZ2V0RXJyb3JNc2cocmVzKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnLmNvbnRlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBodHRwc+i/lOWbnueKtuaAgeeggemdnjIwMFxuICAgICAgICBpZihvYmouY2F0Y2hFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5zdGF0dXNDb2RlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCByZXNwb25zZTtcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2VIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9yZXNwb25zZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsbURBQTZDO0FBQzdDLCtDQUF5QztBQUN6QywrQ0FBeUM7QUFDekMsdURBQWlEO0FBQ2pELG1EQUE2QztBQUc3QyxTQUFTLFFBQVEsQ0FDYixHQUF5RSxFQUN6RSxHQUF1QyxFQUN2QyxNQUFnQztJQUVoQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1FBR3hCLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM5QixJQUFJO2dCQUNBLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtvQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0gsc0JBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxPQUFPO2lCQUNWO2FBQ0o7U0FDSjtRQUVELDBCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQixJQUFJLGdCQUFNLENBQUMsWUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsWUFBWSxHQUFHLGdCQUFNLENBQUMsWUFBYSxFQUFFO1lBRTdHLHdCQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUIsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUN0QixPQUFPLHdCQUFjLENBQUMsT0FBTyxDQUFDLEdBQXFCLENBQUMsQ0FBQzthQUN4RDtpQkFBTSxJQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUU7Z0JBQ2hDLE9BQU8sd0JBQWMsQ0FBQyxVQUFVLENBQUMsR0FBd0IsQ0FBQyxDQUFDO2FBQzlEO1NBQ0o7YUFBTSxJQUFJLGdCQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUV4QyxJQUFJLFFBQVEsR0FBc0MsRUFBRSxDQUFDO1lBQ3JELElBQUk7Z0JBQ0EsSUFBSSxPQUFPLGdCQUFNLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtvQkFDMUMsUUFBUSxHQUFHLGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0gsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQ3ZCO2FBQ0o7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsSUFBSSxDQUFFLEdBQXNCLENBQUMsWUFBWSxFQUFFO2dCQUV2QyxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3pCO3FCQUFNO29CQUNILE9BQU8sUUFBUSxDQUFDO2lCQUNuQjthQUNKO1lBRUQsc0JBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFFSCxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUEsRUFBRSxDQUFBO1NBQ3JDO0tBQ0o7U0FBTTtRQUVILE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsS0FBQSxFQUFFLENBQUE7S0FDcEM7QUFDTCxDQUFDO0FBRUQsa0JBQWUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgcmVxdWVzdEhhbmRsZXIgZnJvbSAnLi9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCBlcnJvckhhbmRsZXIgZnJvbSAnLi9lcnJvckhhbmRsZXInXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSAnLi9kdXJhdGlvblJlcG9ydGVyJ1xuaW1wb3J0IHNlc3Npb25NYW5hZ2VyIGZyb20gJy4vc2Vzc2lvbk1hbmFnZXInXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbmZ1bmN0aW9uIHJlc3BvbnNlKFxuICAgIHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCB8IHd4LlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQsXG4gICAgb2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLFxuICAgIG1ldGhvZDogXCJyZXF1ZXN0XCIgfCBcInVwbG9hZEZpbGVcIlxuKTogYW55IHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuXG4gICAgICAgIC8vIOWFvOWuuXVwbG9hZEZpbGXov5Tlm57nmoRyZXMuZGF0YeWPr+iDveaYr+Wtl+espuS4slxuICAgICAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gSlNPTi5wYXJzZShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAndXBsb2FkLWVycm9yJywgcmVzOiBlIH07XG4gICAgICAgICAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkdXJhdGlvblJlcG9ydGVyLmVuZChvYmopO1xuXG4gICAgICAgIGlmIChjb25maWcubG9naW5UcmlnZ2VyIShyZXMuZGF0YSkgJiYgb2JqLnJlTG9naW5Db3VudCAhPT0gdW5kZWZpbmVkICYmIG9iai5yZUxvZ2luQ291bnQgPCBjb25maWcucmVMb2dpbkxpbWl0ISkge1xuICAgICAgICAgICAgLy8g55m75b2V5oCB5aSx5pWI77yM5LiU6YeN6K+V5qyh5pWw5LiN6LaF6L+H6YWN572uXG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlci5kZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlci5yZXF1ZXN0KG9iaiBhcyBJUmVxdWVzdE9wdGlvbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ1cGxvYWRGaWxlXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXIudXBsb2FkRmlsZShvYmogYXMgSVVwbG9hZEZpbGVPcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIOaOpeWPo+i/lOWbnuaIkOWKn+eggVxuICAgICAgICAgICAgbGV0IHJlYWxEYXRhOiBzdHJpbmcgfCBJQW55T2JqZWN0IHwgQXJyYXlCdWZmZXIgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZy5zdWNjZXNzRGF0YShyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZ1bmN0aW9uIHN1Y2Nlc3NEYXRhIG9jY3VyIGVycm9yOiBcIiArIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEob2JqIGFzIElSZXF1ZXN0T3B0aW9uKS5ub0NhY2hlRmxhc2gpIHtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuLrkuobkv53or4HpobXpnaLkuI3pl6rng4HvvIzliJnkuI3lm57osIPvvIzlj6rmmK/nvJPlrZjmnIDmlrDmlbDmja7vvIzlvoXkuIvmrKHov5vlhaXlho3nlKhcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFsRGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDnvJPlrZjlrZjlgqhcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlci5zZXQob2JqLCByZWFsRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDmjqXlj6Pov5Tlm57lpLHotKXnoIFcbiAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGh0dHBz6L+U5Zue54q25oCB56CB6Z2eMjAwXG4gICAgICAgIHRocm93IHsgdHlwZTogJ2h0dHAtZXJyb3InLCByZXMgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVzcG9uc2U7XG4iXX0= /***/ }), @@ -1143,4 +1172,4 @@ exports.version = version; /***/ }) /******/ })["default"]; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2xvYWRpbmcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3V0aWwvdXJsLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCwyQ0FBMkMsKzNCOzs7Ozs7Ozs7Ozs7QUNaOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLG1hOzs7Ozs7Ozs7Ozs7QUNOOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENB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dGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC50c1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHVybFBlcmZpeDogY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXgsXG4gICAgICAgIHNlc3Npb25FeHBpcmVUaW1lOiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lLFxuICAgICAgICBzZXNzaW9uRXhwaXJlS2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgIHNlc3Npb25FeHBpcmU6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVxuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBRMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDJGd2FTOW5aWFJEYjI1bWFXY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCUlhCRExHMUNRVUZsTzBsQlExZ3NUMEZCVHp0UlFVTklMRk5CUVZNc1JVRkJSU3huUWtGQlRTeERRVUZETEZOQlFWTTdVVUZETTBJc2FVSkJRV2xDTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhwUWtGQmFVSTdVVUZETTBNc1owSkJRV2RDTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhuUWtGQlowSTdVVUZEZWtNc1lVRkJZU3hGUVVGRkxHZENRVUZOTEVOQlFVTXNZVUZCWVR0TFFVTjBReXhEUVVGQk8wRkJRMHdzUTBGQlF5eEZRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLQ2tnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUhWeWJGQmxjbVpwZURvZ1kyOXVabWxuTG5WeWJGQmxjbVpwZUN4Y2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVlJwYldVNklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlN4Y2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVXRsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGtzWEc0Z0lDQWdJQ0FnSUhObGMzTnBiMjVGZUhCcGNtVTZJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsWEc0Z0lDQWdmVnh1ZlR0Y2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2WjJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVWd1F5eHRRa0ZCWlR0SlFVTllMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVRTdRVUZEZWtJc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJQ2dwSUQwK0lIdGNiaUFnSUNCeVpYUjFjbTRnYzNSaGRIVnpMbk5sYzNOcGIyNWNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBPYmplY3QuYXNzaWduKGNvbmZpZ18xLmRlZmF1bHQsIHBhcmFtcyk7XG4gICAgdHJ5IHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSkgfHwgJyc7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3d4LmdldFN0b3JhZ2VTeW5jOmZhaWwsIGNhbiBub3QgZ2V0IHNlc3Npb24uJyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSB8fCBcInNlc3Npb25FeHBpcmVLZXlcIikgfHwgSW5maW5pdHk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3d4LmdldFN0b3JhZ2VTeW5jOmZhaWwsIGNhbiBub3QgZ2V0IHNlc3Npb25FeHBpcmUuJyk7XG4gICAgfVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVwZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmFXNXBkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVU53UXl3d1EwRkJiME03UVVGSGNFTXNiVUpCUVdVc1ZVRkJReXhOUVVGdFFqdEpRVU12UWl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRPVUlzU1VGQlNUdFJRVU5CTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF5eGpRVUZqTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhYUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdTMEZEYWtVN1NVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdFJRVU5TTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc09FTkJRVGhETEVOQlFVTXNRMEZCUVR0TFFVTm9SVHRKUVVORUxFbEJRVWs3VVVGRFFTeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhGUVVGRkxFTkJRVU1zWTBGQll5eERRVUZETEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTEVsQlFVa3NhMEpCUVd0Q0xFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTTdTMEZEZGtjN1NVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdFJRVU5TTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc2IwUkJRVzlFTEVOQlFVTXNRMEZCUVR0TFFVTjBSVHRCUVVOTUxFTkJRVU1zUlVGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJSE4wWVhSMWN5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5emRHRjBkWE1uWEc1cGJYQnZjblFnZXlCSlNXNXBkRTl3ZEdsdmJpQjlJR1p5YjIwZ0p5NHVMMmx1ZEdWeVptRmpaU2RjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0hCaGNtRnRjem9nU1VsdWFYUlBjSFJwYjI0cElEMCtJSHRjYmlBZ0lDQlBZbXBsWTNRdVlYTnphV2R1S0dOdmJtWnBaeXdnY0dGeVlXMXpLVHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZiaUE5SUhkNExtZGxkRk4wYjNKaFoyVlRlVzVqS0dOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlNFcElIeDhJQ2NuTzF4dUlDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWduZDNndVoyVjBVM1J2Y21GblpWTjVibU02Wm1GcGJDd2dZMkZ1SUc1dmRDQm5aWFFnYzJWemMybHZiaTRuS1Z4dUlDQWdJSDFjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpTQTlJSGQ0TG1kbGRGTjBiM0poWjJWVGVXNWpLR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUlIeDhJRndpYzJWemMybHZia1Y0Y0dseVpVdGxlVndpS1NCOGZDQkpibVpwYm1sMGVUdGNiaUFnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJR052Ym5OdmJHVXVaWEp5YjNJb0ozZDRMbWRsZEZOMGIzSmhaMlZUZVc1ak9tWmhhV3dzSUdOaGJpQnViM1FnWjJWMElITmxjM05wYjI1RmVIQnBjbVV1SnlsY2JpQWdJQ0I5WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvc2Vzc2lvbk1hbmFnZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbigpO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluYVc0dWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12WVhCcEwyeHZaMmx1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTWtSQlFYRkVPMEZCUlhKRUxHMUNRVUZsTzBsQlExZ3NUMEZCVHl4M1FrRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZCTzBGQlEyaERMRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J6WlhOemFXOXVUV0Z1WVdkbGNpQm1jbTl0SUNjdUxpOXRiMlIxYkdVdmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUNncElEMCtJSHRjYmlBZ0lDQnlaWFIxY200Z2MyVnpjMmx2YmsxaGJtRm5aWEl1YldGcGJpZ3BYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmNtVnhkV1Z6ZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRkRMRWRCUVcxQ08wbEJReTlDTEU5QlFVOHNkMEpCUVdNc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdRVUZEZEVNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUlIMGdabkp2YlNBbkxpNHZhVzUwWlhKbVlXTmxKMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0FvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlrZ1BUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCeVpYRjFaWE4wU0dGdVpHeGxjaTV5WlhGMVpYTjBLRzlpYWlsY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3Nlc3Npb25NYW5hZ2VyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LnNldFNlc3Npb24oc2Vzc2lvbik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZjMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVVZ5UkN4dFFrRkJaU3hWUVVGRExFOUJRV1U3U1VGRE0wSXNkMEpCUVdNc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZEZGtNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElITmxjM05wYjI1TllXNWhaMlZ5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl6WlhOemFXOXVUV0Z1WVdkbGNpZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLSE5sYzNOcGIyNDZJSE4wY21sdVp5a2dQVDRnZTF4dUlDQWdJSE5sYzNOcGIyNU5ZVzVoWjJWeUxuTmxkRk5sYzNOcGIyNG9jMlZ6YzJsdmJpazdYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYQnNiMkZrUm1sc1pTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZkWEJzYjJGa1JtbHNaUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGRExFZEJRWE5DTzBsQlEyeERMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1FVRkRla01zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCN0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlsY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGluaXRfMSA9IHJlcXVpcmUoXCIuL2FwaS9pbml0XCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL2FwaS9yZXF1ZXN0XCIpO1xudmFyIHVwbG9hZEZpbGVfMSA9IHJlcXVpcmUoXCIuL2FwaS91cGxvYWRGaWxlXCIpO1xudmFyIHNldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9zZXRTZXNzaW9uXCIpO1xudmFyIGxvZ2luXzEgPSByZXF1aXJlKFwiLi9hcGkvbG9naW5cIik7XG52YXIgZ2V0U2Vzc2lvbl8xID0gcmVxdWlyZShcIi4vYXBpL2dldFNlc3Npb25cIik7XG52YXIgZ2V0Q29uZmlnXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0Q29uZmlnXCIpO1xudmFyIHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG52YXIgd2VSZXF1ZXN0T2JqZWN0ID0ge1xuICAgIGluaXQ6IGluaXRfMS5kZWZhdWx0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3RfMS5kZWZhdWx0LFxuICAgIHVwbG9hZEZpbGU6IHVwbG9hZEZpbGVfMS5kZWZhdWx0LFxuICAgIHNldFNlc3Npb246IHNldFNlc3Npb25fMS5kZWZhdWx0LFxuICAgIGxvZ2luOiBsb2dpbl8xLmRlZmF1bHQsXG4gICAgZ2V0U2Vzc2lvbjogZ2V0U2Vzc2lvbl8xLmRlZmF1bHQsXG4gICAgZ2V0Q29uZmlnOiBnZXRDb25maWdfMS5kZWZhdWx0LFxuICAgIHZlcnNpb246IHZlcnNpb25fMS52ZXJzaW9uXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gd2VSZXF1ZXN0T2JqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeHRRMEZCTmtJN1FVRkROMElzZVVOQlFXMURPMEZCUTI1RExDdERRVUY1UXp0QlFVTjZReXdyUTBGQmVVTTdRVUZEZWtNc2NVTkJRU3RDTzBGQlF5OUNMQ3REUVVGNVF6dEJRVU42UXl3MlEwRkJkVU03UVVGRmRrTXNjVU5CUVcxRE8wRkJSVzVETEVsQlFVMHNaVUZCWlN4SFFVRmpPMGxCUTJwRExFbEJRVWtzWjBKQlFVRTdTVUZEU2l4UFFVRlBMRzFDUVVGQk8wbEJRMUFzVlVGQlZTeHpRa0ZCUVR0SlFVTldMRlZCUVZVc2MwSkJRVUU3U1VGRFZpeExRVUZMTEdsQ1FVRkJPMGxCUTB3c1ZVRkJWU3h6UWtGQlFUdEpRVU5XTEZOQlFWTXNjVUpCUVVFN1NVRkRWQ3hQUVVGUExHMUNRVUZCTzBOQlExSXNRMEZCUXp0QlFVVkdMR3RDUVVGbExHVkJRV1VzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnBibWwwSUdaeWIyMGdYQ0l1TDJGd2FTOXBibWwwWENKY2JtbHRjRzl5ZENCeVpYRjFaWE4wSUdaeWIyMGdYQ0l1TDJGd2FTOXlaWEYxWlhOMFhDSmNibWx0Y0c5eWRDQjFjR3h2WVdSR2FXeGxJR1p5YjIwZ1hDSXVMMkZ3YVM5MWNHeHZZV1JHYVd4bFhDSmNibWx0Y0c5eWRDQnpaWFJUWlhOemFXOXVJR1p5YjIwZ1hDSXVMMkZ3YVM5elpYUlRaWE56YVc5dVhDSmNibWx0Y0c5eWRDQnNiMmRwYmlCbWNtOXRJRndpTGk5aGNHa3ZiRzluYVc1Y0lseHVhVzF3YjNKMElHZGxkRk5sYzNOcGIyNGdabkp2YlNCY0lpNHZZWEJwTDJkbGRGTmxjM05wYjI1Y0lseHVhVzF3YjNKMElHZGxkRU52Ym1acFp5Qm1jbTl0SUZ3aUxpOWhjR2t2WjJWMFEyOXVabWxuWENKY2JtbHRjRzl5ZENCN0lIZGxVbVZ4ZFdWemRDQjlJR1p5YjIwZ1hDSXVMMmx1ZEdWeVptRmpaVndpWEc1cGJYQnZjblFnZXlCMlpYSnphVzl1SUgwZ1puSnZiU0FuTGk5MlpYSnphVzl1SjF4dVhHNWpiMjV6ZENCM1pWSmxjWFZsYzNSUFltcGxZM1E2SUhkbFVtVnhkV1Z6ZENBOUlIdGNiaUFnYVc1cGRDeGNiaUFnY21WeGRXVnpkQ3hjYmlBZ2RYQnNiMkZrUm1sc1pTeGNiaUFnYzJWMFUyVnpjMmx2Yml4Y2JpQWdiRzluYVc0c1hHNGdJR2RsZEZObGMzTnBiMjRzWEc0Z0lHZGxkRU52Ym1acFp5eGNiaUFnZG1WeWMybHZibHh1ZlR0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2QyVlNaWEYxWlhOMFQySnFaV04wTzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGdldChvYmopIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3eC5nZXRTdG9yYWdlKHtcbiAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVzLmRhdGEpKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZXMuZGF0YSwgeyBpc0NhY2hlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0KG9iaiwgcmVhbERhdGEpIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlYWxEYXRhKSkpIHtcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgICAgICBkYXRhOiByZWFsRGF0YVxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgZ2V0OiBnZXQsXG4gICAgc2V0OiBzZXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMkZqYUdWTllXNWhaMlZ5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWpZV05vWlUxaGJtRm5aWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkZRU3hUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUZ0UWp0SlFVTTFRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlR0UlFVTm9RaXhQUVVGUE8wdEJRMVk3U1VGRFJDeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eFRRVUZUTzFGQlEyeENMRTlCUVU4c1dVRkJSU3hIUVVGSE8xbEJRMUlzU1VGRFNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrN1owSkJRMnhDTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExGVkJRVlVzU1VGQlNTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVU14UkR0blFrRkRSU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRMjVETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGQk8ybENRVU42UXp0aFFVTktPMWxCUTBRc1NVRkJSeXhQUVVGUExFZEJRVWNzUTBGQlF5eFJRVUZSTEV0QlFVc3NWVUZCVlN4RlFVRkZPMmRDUVVOdVF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1lVRkRiRUk3VVVGRFRDeERRVUZETzB0QlEwb3NRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFXMUNMRVZCUVVjc1VVRkJlVUk3U1VGRGVFUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFVkJRVVU3VVVGRGFFSXNUMEZCVHp0TFFVTldPMGxCUTBRc1NVRkRTU3hIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEVsQlFVazdVVUZEYkVJc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eExRVUZMTEV0QlFVc3NWVUZCVlN4SlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSVUZETVVRN1VVRkRSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFsQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhUUVVGVE8xbEJRMnhDTEVsQlFVa3NSVUZCUlN4UlFVRlJPMU5CUTJwQ0xFTkJRVU1zUTBGQlFUdExRVU5NTzBGQlEwd3NRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzUjBGQlJ5eExRVUZCTzBsQlEwZ3NSMEZCUnl4TFFVRkJPME5CUTA0c1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aVhHNWNibVoxYm1OMGFXOXVJR2RsZENodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUtTQjdYRzRnSUNBZ2FXWWdLQ0Z2WW1vdWIzSnBaMmx1VlhKc0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNGdJQ0FnZDNndVoyVjBVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJR3RsZVRvZ2IySnFMbTl5YVdkcGJsVnliQ3hjYmlBZ0lDQWdJQ0FnYzNWalkyVnpjeUFvY21WektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OaFkyaGxJRDA5UFNCMGNuVmxJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS0hSNWNHVnZaaUJ2WW1vdVkyRmphR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaUFtSmlCdlltb3VZMkZqYUdVb2NtVnpMbVJoZEdFcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91YzNWalkyVnpjeUE5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTV6ZFdOalpYTnpLSEpsY3k1a1lYUmhMQ0I3YVhORFlXTm9aVG9nZEhKMVpYMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZb2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OdmJYQnNaWFJsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJ6WlhRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQXNJSEpsWVd4RVlYUmhPaUJ6ZEhKcGJtY2dmQ0J2WW1wbFkzUXBJSHRjYmlBZ0lDQnBaaUFvSVc5aWFpNXZjbWxuYVc1VmNtd3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQWdJRzlpYWk1allXTm9aU0E5UFQwZ2RISjFaU0I4ZkZ4dUlDQWdJQ0FnSUNBb2RIbHdaVzltSUc5aWFpNWpZV05vWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpSUNZbUlHOWlhaTVqWVdOb1pTaHlaV0ZzUkdGMFlTa3BYRzRnSUNBZ0tTQjdYRzRnSUNBZ0lDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQnZZbW91YjNKcFoybHVWWEpzTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2NtVmhiRVJoZEdGY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFFzWEc0Z0lDQWdjMlYwWEc1OU8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuLi9hcGkvcmVxdWVzdFwiKTtcbmZ1bmN0aW9uIHN0YXJ0KG9iaikge1xuICAgIG9iai5fcmVwb3J0U3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59XG5mdW5jdGlvbiBlbmQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRFbmRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgaWYgKG9iai5yZXBvcnQgJiYgb2JqLl9yZXBvcnRTdGFydFRpbWUpIHtcbiAgICAgICAgcmVwb3J0KG9iai5yZXBvcnQsIG9iai5fcmVwb3J0U3RhcnRUaW1lLCBvYmouX3JlcG9ydEVuZFRpbWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlcG9ydChuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQucmVwb3J0Q0dJID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kobmFtZSwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXF1ZXN0XzEuZGVmYXVsdCk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZCxcbiAgICByZXBvcnQ6IHJlcG9ydFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpIVnlZWFJwYjI1U1pYQnZjblJsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl0YjJSMWJHVXZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc1UwRkJVeXhMUVVGTExFTkJRVU1zUjBGQmRVTTdTVUZEYkVRc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEYUVRc1EwRkJRenRCUVVWRUxGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFYVkRPMGxCUTJoRUxFZEJRVWNzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU14UXl4SlFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhGUVVGRk8xRkJRMjVETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJaMElzUlVGQlJTeEhRVUZITEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUjBGQlJ5eERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMHRCUXpGRk8wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNUVUZCVFN4RFFVRkRMRWxCUVZrc1JVRkJSU3hUUVVGcFFpeEZRVUZGTEU5QlFXVTdTVUZETlVRc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNVMEZCVXl4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVONFF5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4cFFrRkJUeXhEUVVGRExFTkJRVU03UzBGRGRrUTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeExRVUZMTEU5QlFVRTdTVUZEVEN4SFFVRkhMRXRCUVVFN1NVRkRTQ3hOUVVGTkxGRkJRVUU3UTBGRFZDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZENCbWNtOXRJQ2N1TGk5aGNHa3ZjbVZ4ZFdWemRDZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTlwYm5SbGNtWmhZMlZjSWp0Y2JseHVablZ1WTNScGIyNGdjM1JoY25Rb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVLU0I3WEc0Z0lDQWdiMkpxTGw5eVpYQnZjblJUZEdGeWRGUnBiV1VnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pXNWtLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUc5aWFpNWZjbVZ3YjNKMFJXNWtWR2x0WlNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lHbG1LRzlpYWk1eVpYQnZjblFnSmlZZ2IySnFMbDl5WlhCdmNuUlRkR0Z5ZEZScGJXVXBJSHRjYmlBZ0lDQWdJQ0FnY21Wd2IzSjBLRzlpYWk1eVpYQnZjblFnWVhNZ2MzUnlhVzVuTENCdlltb3VYM0psY0c5eWRGTjBZWEowVkdsdFpTd2diMkpxTGw5eVpYQnZjblJGYm1SVWFXMWxLVHRjYmlBZ0lDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlISmxjRzl5ZENodVlXMWxPaUJ6ZEhKcGJtY3NJSE4wWVhKMFZHbHRaVG9nYm5WdFltVnlMQ0JsYm1SVWFXMWxPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NXlaWEJ2Y25SRFIwa2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1bWFXY3VjbVZ3YjNKMFEwZEpLRzVoYldVc0lITjBZWEowVkdsdFpTd2daVzVrVkdsdFpTd2djbVZ4ZFdWemRDazdYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjM1JoY25Rc1hHNGdJQ0FnWlc1a0xGeHVJQ0FnSUhKbGNHOXlkRnh1ZlZ4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG5mdW5jdGlvbiBzeXN0ZW1FcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZG9FcnJvcihcIlwiLCByZXMuZXJyTXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBsb2dpY0Vycm9yKG9iaiwgcmVzKSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgX2EgPSBnZXRFcnJvck1zZyhyZXMpLCB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgZG9FcnJvcih0aXRsZSwgY29udGVudCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrKG9iaiwgcmVzKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcihyZXMpO1xufVxuZnVuY3Rpb24gZ2V0RXJyb3JNc2cocmVzKSB7XG4gICAgdmFyIHRpdGxlID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZShyZXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpdGxlID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlO1xuICAgIH1cbiAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudDtcbiAgICB9XG4gICAgcmV0dXJuIHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH07XG59XG5mdW5jdGlvbiBkb0Vycm9yKHRpdGxlLCBjb250ZW50KSB7XG4gICAgd3guc2hvd01vZGFsKHtcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8IFwi572R57uc5oiW5pyN5Yqh5byC5bi477yM6K+356iN5ZCO6YeN6K+VXCIsXG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlXG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc3lzdGVtRXJyb3I6IHN5c3RlbUVycm9yLFxuICAgIGxvZ2ljRXJyb3I6IGxvZ2ljRXJyb3IsXG4gICAgZG9FcnJvcjogZG9FcnJvcixcbiAgICBnZXRFcnJvck1zZzogZ2V0RXJyb3JNc2dcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laWEp5YjNKSVlXNWtiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWxjbkp2Y2toaGJtUnNaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZIY0VNc1UwRkJVeXhYUVVGWExFTkJRVU1zUjBGQmRVTXNSVUZCUlN4SFFVRTJRanRKUVVOMlJpeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGFFTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5xUWp0VFFVRk5PMUZCUTBnc1QwRkJUeXhEUVVGRExFVkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1MwRkRNMEk3UVVGRFRDeERRVUZETzBGQlJVUXNVMEZCVXl4VlFVRlZMRU5CUVVNc1IwRkJkVU1zUlVGQlJTeEhRVUY1UlR0SlFVTnNTU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVsQlFVa3NTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRhRU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVOcVFqdFRRVUZOTzFGQlEwY3NTVUZCUVN4eFFrRkJiVU1zUlVGQmJFTXNaMEpCUVVzc1JVRkJSU3h2UWtGQk1rSXNRMEZCUXp0UlFVTXhReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMHRCUXpOQ08wbEJSMFFzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU0xUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRiRU03U1VGRlJDeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM1pDTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmRCUVZjc1EwRkJReXhIUVVGNVJUdEpRVU14Uml4SlFVRkpMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRFppeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhWUVVGVkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEzcERMRWxCUVVrN1dVRkRRU3hMUVVGTExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZCTzFOQlEzUkRPMUZCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3VTBGRFdEdExRVU5LTzFOQlFVMHNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZGQlFWRXNSVUZCUlR0UlFVTTVReXhMUVVGTExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNN1MwRkROMEk3U1VGRlJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRha0lzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1dVRkJXU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU16UXl4SlFVRkpPMWxCUTBFc1QwRkJUeXhIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlFUdFRRVU14UXp0UlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8xTkJRMWc3UzBGRFNqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGbEJRVmtzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZEYUVRc1QwRkJUeXhIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRPMHRCUTJwRE8wbEJSVVFzVDBGQlR5eEZRVUZETEV0QlFVc3NUMEZCUVN4RlFVRkZMRTlCUVU4c1UwRkJRU3hGUVVGRExFTkJRVUU3UVVGRE0wSXNRMEZCUXp0QlFVVkVMRk5CUVZNc1QwRkJUeXhEUVVGRExFdEJRV0VzUlVGQlJTeFBRVUZsTzBsQlF6TkRMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU03VVVGRFZDeExRVUZMTEU5QlFVRTdVVUZEVEN4UFFVRlBMRVZCUVVVc1QwRkJUeXhKUVVGSkxHVkJRV1U3VVVGRGJrTXNWVUZCVlN4RlFVRkZMRXRCUVVzN1MwRkRjRUlzUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzVjBGQlZ5eGhRVUZCTzBsQlExZ3NWVUZCVlN4WlFVRkJPMGxCUTFZc1QwRkJUeXhUUVVGQk8wbEJRMUFzVjBGQlZ5eGhRVUZCTzBOQlEyUXNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dVhHNW1kVzVqZEdsdmJpQnplWE4wWlcxRmNuSnZjaWh2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0c0lISmxjem9nZDNndVIyVnVaWEpoYkVOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdVptRnBiQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNW1ZV2xzS0hKbGN5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1pHOUZjbkp2Y2loY0lsd2lMQ0J5WlhNdVpYSnlUWE5uS1R0Y2JpQWdJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR3h2WjJsalJYSnliM0lvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUxDQnlaWE02SUhkNExsSmxjWFZsYzNSVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUWdmQ0IzZUM1VmNHeHZZV1JHYVd4bFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdVptRnBiQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNW1ZV2xzS0hKbGN5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZTNScGRHeGxMQ0JqYjI1MFpXNTBmU0E5SUdkbGRFVnljbTl5VFhObktISmxjeWs3WEc0Z0lDQWdJQ0FnSUdSdlJYSnliM0lvZEdsMGJHVXNJR052Ym5SbGJuUXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZW1GamVlOXJ1ZTduK1M0Z09tVW1laXZyK1dibnVpd2crV0h2ZWFWc08rOGpPV0ltZWFKcCtpaGpPV3VnMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtVnljbTl5UTJGc2JHSmhZMnNnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCamIyNW1hV2N1WlhKeWIzSkRZV3hzWW1GamF5aHZZbW9zSUhKbGN5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWh5WlhNcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCblpYUkZjbkp2Y2sxelp5aHlaWE02SUhkNExsSmxjWFZsYzNSVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUWdmQ0IzZUM1VmNHeHZZV1JHYVd4bFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdiR1YwSUhScGRHeGxJRDBnWENKY0lqdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bGNuSnZjbFJwZEd4bElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJwZEd4bElEMGdZMjl1Wm1sbkxtVnljbTl5VkdsMGJHVW9jbVZ6TG1SaGRHRXBYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVsY25KdmNsUnBkR3hsSUQwOVBTQmNJbk4wY21sdVoxd2lLU0I3WEc0Z0lDQWdJQ0FnSUhScGRHeGxJRDBnWTI5dVptbG5MbVZ5Y205eVZHbDBiR1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUdOdmJuUmxiblFnUFNCY0lsd2lPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWRDaHlaWE11WkdGMFlTbGNiaUFnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyOXVkR1Z1ZENBOVBUMGdYQ0p6ZEhKcGJtZGNJaWtnZTF4dUlDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWREdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZTNScGRHeGxMQ0JqYjI1MFpXNTBmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmtiMFZ5Y205eUtIUnBkR3hsT2lCemRISnBibWNzSUdOdmJuUmxiblE2SUhOMGNtbHVaeWtnZTF4dUlDQWdJSGQ0TG5Ob2IzZE5iMlJoYkNoN1hHNGdJQ0FnSUNBZ0lIUnBkR3hsTEZ4dUlDQWdJQ0FnSUNCamIyNTBaVzUwT2lCamIyNTBaVzUwSUh4OElGd2k1NzJSNTd1YzVvaVc1cHlONVlxaDVieUM1Ymk0Nzd5TTZLKzM1NmlONVpDTzZZZU42SytWWENJc1hHNGdJQ0FnSUNBZ0lITm9iM2REWVc1alpXdzZJR1poYkhObFhHNGdJQ0FnZlNsY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdlMXh1SUNBZ0lITjVjM1JsYlVWeWNtOXlMRnh1SUNBZ0lHeHZaMmxqUlhKeWIzSXNYRzRnSUNBZ1pHOUZjbkp2Y2l4Y2JpQWdJQ0JuWlhSRmNuSnZjazF6WjF4dWZWeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG5mdW5jdGlvbiBnZXQob2JqKSB7XG4gICAgaWYgKCEoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoudXJsXSB8fCAob2JqLm9yaWdpblVybCAmJiBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdKSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbW9jayDmsqHmnInlr7nlupTmjqXlj6PnmoTmlbDmja4nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgPyBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdIDogJycpO1xuICAgIGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBzdGF0dXNDb2RlOiAyMDBcbiAgICB9O1xuICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGdldDogZ2V0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYlc5amEwMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMMjF2WTJ0TllXNWhaMlZ5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTUVOQlFXOURPMEZCUTNCRExESkRRVUZ4UXp0QlFVZHlReXhUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUYxUXp0SlFVVm9SQ3hKUVVGSExFTkJRVU1zUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhKUVVGSkxHZENRVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVTdVVUZGYWtZc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRE8xRkJRMmhETEU5QlFVOHNTMEZCU3l4RFFVRkRPMHRCUTJoQ08wbEJSVVFzU1VGQlNTeEpRVUZKTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNaMEpCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVVUzUml4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVFTXNTVUZCVFN4SFFVRkhMRWRCUVVjN1VVRkRVaXhKUVVGSkxFMUJRVUU3VVVGRFNpeFZRVUZWTEVWQlFVVXNSMEZCUnp0TFFVTnNRaXhEUVVGRE8wbEJSVVlzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRKUVVObUxFOUJRVThzUjBGQlJ5eERRVUZCTzBGQlEyUXNRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzUjBGQlJ5eExRVUZCTzBOQlEwNHNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElHeHZZV1JwYm1jZ1puSnZiU0FuTGk0dmRYUnBiQzlzYjJGa2FXNW5KMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aVhHNWNibVoxYm1OMGFXOXVJR2RsZENodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBPaUJoYm5rZ2UxeHVYRzRnSUNBZ2FXWW9JU2hqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG5WeWJGMGdmSHdnS0c5aWFpNXZjbWxuYVc1VmNtd2dKaVlnWTI5dVptbG5MbTF2WTJ0S2MyOXVXMjlpYWk1dmNtbG5hVzVWY214ZEtTa3BJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2JXOWpheURtc3FIbW5JbmxyN25sdXBUbWpxWGxqNlBubW9UbWxiRG1qYTVjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpZ25iVzlqYXlEbXNxSG1uSW5scjdubHVwVG1qcVhsajZQbm1vVG1sYkRtamE0bktUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCa1lYUmhJRDBnWTI5dVptbG5MbTF2WTJ0S2MyOXVXMjlpYWk1MWNteGRJSHg4SUNodlltb3ViM0pwWjJsdVZYSnNJRDhnWTI5dVptbG5MbTF2WTJ0S2MyOXVXMjlpYWk1dmNtbG5hVzVWY214ZElEb2dKeWNwTzF4dUlDQWdJQzh2SUdSbFpYQWdZMjl3ZVZ4dUlDQWdJR1JoZEdFZ1BTQktVMDlPTG5CaGNuTmxLRXBUVDA0dWMzUnlhVzVuYVdaNUtHUmhkR0VwS1R0Y2JpQWdJQ0JqYjI1emRDQnlaWE1nUFNCN1hHNGdJQ0FnSUNBZ0lHUmhkR0VzWEc0Z0lDQWdJQ0FnSUhOMFlYUjFjME52WkdVNklESXdNRnh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnNiMkZrYVc1bkxtaHBaR1VvS1R0Y2JpQWdJQ0J5WlhSMWNtNGdjbVZ6WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCblpYUmNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgbG9hZGluZ18xID0gcmVxdWlyZShcIi4uL3V0aWwvbG9hZGluZ1wiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xudmFyIG1vY2tNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9tb2NrTWFuYWdlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vc2Vzc2lvbk1hbmFnZXJcIik7XG52YXIgcmVzcG9uc2VIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXNwb25zZUhhbmRsZXJcIik7XG52YXIgZHVyYXRpb25SZXBvcnRlcl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25SZXBvcnRlclwiKTtcbnZhciB1cmxfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3VybFwiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbmZ1bmN0aW9uIGZvcm1hdChvcmlnaW5VcmwpIHtcbiAgICBpZiAob3JpZ2luVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICByZXR1cm4gb3JpZ2luVXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHVybFBlcmZpeCA9IGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4O1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHVybFBlcmZpeCA9IGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybFBlcmZpeCArIG9yaWdpblVybDtcbiAgICB9XG59XG5mdW5jdGlvbiBwcmVEbyhvYmopIHtcbiAgICBpZiAodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmJlZm9yZVNlbmQoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoIW9iai5kYXRhKSB7XG4gICAgICAgIG9iai5kYXRhID0ge307XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZGF0YSA9IF9fYXNzaWduKHt9LCBvYmouZGF0YSwgKF9hID0ge30sIF9hW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYSkpO1xuICAgIH1cbiAgICB2YXIgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmRhdGEgPSBfX2Fzc2lnbih7fSwgZ2QsIG9iai5kYXRhKTtcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oe30sIG9iai5mb3JtRGF0YSwgKF9hID0ge30sIF9hW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYSkpO1xuICAgIH1cbiAgICB2YXIgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oe30sIGdkLCBvYmouZm9ybURhdGEpO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCAoX2IgPSB7fSwgX2JbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9iKSk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcbiAgICB9XG4gICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuc3RhcnQob2JqKTtcbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcbiAgICB2YXIgZ2QgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGE7XG4gICAgfVxuICAgIHJldHVybiBnZDtcbn1cbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmopIHtcbiAgICBvYmogPSBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICAgICAgZGF0YTogb2JqLmRhdGEsXG4gICAgICAgICAgICBtZXRob2Q6IG9iai5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXI6IG9iai5oZWFkZXIgfHwge30sXG4gICAgICAgICAgICBkYXRhVHlwZTogb2JqLmRhdGFUeXBlIHx8ICdqc29uJyxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iaikge1xuICAgIG9iaiA9IGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgd3gudXBsb2FkRmlsZSh7XG4gICAgICAgICAgICB1cmw6IG9iai51cmwsXG4gICAgICAgICAgICBmaWxlUGF0aDogb2JqLmZpbGVQYXRoIHx8ICcnLFxuICAgICAgICAgICAgbmFtZTogb2JqLm5hbWUgfHwgJycsXG4gICAgICAgICAgICBmb3JtRGF0YTogb2JqLmZvcm1EYXRhLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiByZXF1ZXN0KG9iaikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaik7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQobW9ja1Jlc3BvbnNlLCBvYmosICdyZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvYmouY2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0KHJlcywgb2JqLCAncmVxdWVzdCcpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB1cGxvYWRGaWxlKG9iaikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaik7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQobW9ja1Jlc3BvbnNlLCBvYmosICd1cGxvYWRGaWxlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iaik7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdChyZXMsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGZvcm1hdDogZm9ybWF0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEVoaGJtUnNaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzSmxjWFZsYzNSSVlXNWtiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN3eVEwRkJjVU03UVVGRGNrTXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5dzJRMEZCZFVNN1FVRkRka01zSzBOQlFYbERPMEZCUTNwRExHMUVRVUUyUXp0QlFVTTNReXh4UkVGQkswTTdRVUZETDBNc2RVUkJRV2xFTzBGQlEycEVMRzFEUVVFMlFqdEJRVVUzUWl3clEwRkJNRU03UVVGSE1VTXNVMEZCVXl4TlFVRk5MRU5CUVVNc1UwRkJhVUk3U1VGRE4wSXNTVUZCU1N4VFFVRlRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTzFGQlF6bENMRTlCUVU4c1UwRkJVeXhEUVVGQk8wdEJRMjVDTzFOQlFVMDdVVUZEU0N4SlFVRkpMRk5CUVZNc1IwRkJSeXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xbEJRM2hETEZOQlFWTXNSMEZCUnl4blFrRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZCTzFOQlEycERPMUZCUTBRc1QwRkJUeXhUUVVGVExFZEJRVWNzVTBGQlV5eERRVUZETzB0QlEyaERPMEZCUTB3c1EwRkJRenRCUVVkRUxGTkJRVk1zUzBGQlN5eERRVUVyUXl4SFFVRk5PMGxCUXk5RUxFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNWVUZCVlN4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVOMFF5eEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1MwRkRjRUk3U1VGRlJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRmxCUVZrc1MwRkJTeXhYUVVGWExFVkJRVVU3VVVGRGVrTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRGVFSTdVMEZCVFR0UlFVTklMRWRCUVVjc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dExRVU4wUWp0SlFVVkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJUdFJRVU5xUWl4cFFrRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1MwRkRha003U1VGRlJDeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSVHRSUVVOb1FpeEhRVUZITEVOQlFVTXNVMEZCVXl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU03VVVGRGVFSXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMHRCUXpkQ08wbEJSVVFzVDBGQlR5eEhRVUZITEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUjBRc1UwRkJVeXh2UWtGQmIwSXNRMEZCUXl4SFFVRnRRanM3U1VGRk4wTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFVkJRVVU3VVVGRFdDeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRMUVVOcVFqdEpRVVZFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRk5CUVZNc1MwRkJTeXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMRWxCUVVrc1owSkJRVTBzUTBGQlF5eFBRVUZQTEVWQlFVVTdVVUZET1VRc1IwRkJSeXhEUVVGRExFbEJRVWtzWjBKQlFVOHNSMEZCUnl4RFFVRkRMRWxCUVdNc1pVRkJSeXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlF5eERRVUZETzB0QlF6VkZPMGxCUjBRc1NVRkJUU3hGUVVGRkxFZEJRVWNzWVVGQllTeEZRVUZGTEVOQlFVTTdTVUZETTBJc1IwRkJSeXhEUVVGRExFbEJRVWtzWjBKQlFVOHNSVUZCUlN4RlFVRkxMRWRCUVVjc1EwRkJReXhKUVVGakxFTkJRVU1zUTBGQlF6dEpRVVV4UXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRPMGxCUTJwRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVkQlFVY3NSMEZCUnl4RFFVRkRMRkZCUVZFc1NVRkJTU3hOUVVGTkxFTkJRVU03U1VGSGRFTXNTVUZCU1N4RFFVRkRMR2RDUVVGTkxFTkJRVU1zYlVKQlFXMUNMRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUzBGQlN5eExRVUZMTEVWQlFVVTdVVUZEY2tRc1NVRkJTU3huUWtGQlRTeERRVUZETEU5QlFVOHNSVUZCUlR0WlFVTm9RaXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEdGQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzV1VGQlJ5eEhRVUZETEdkQ1FVRk5MRU5CUVVNc1YwRkJWeXhKUVVGSExHZENRVUZOTEVOQlFVTXNUMEZCVHl4TlFVRkZMRU5CUVVNN1UwRkROVVU3VVVGRFJDeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMR0ZCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRMUVVONFF6dEpRVVZFTERCQ1FVRm5RaXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVTFRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZIUkN4VFFVRlRMSFZDUVVGMVFpeERRVUZETEVkQlFYTkNPenRKUVVOdVJDeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSVHRSUVVObUxFZEJRVWNzUTBGQlF5eFJRVUZSTEVkQlFVY3NSVUZCUlN4RFFVRkRPMHRCUTNKQ08wbEJSVVFzU1VGQlNTeEhRVUZITEVOQlFVTXNVMEZCVXl4TFFVRkxMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NTVUZCU1N4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFJRVU01UkN4SFFVRkhMRU5CUVVNc1VVRkJVU3huUWtGQlR5eEhRVUZITEVOQlFVTXNVVUZCYTBJc1pVRkJSeXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlF5eERRVUZETzB0QlEzQkdPMGxCUjBRc1NVRkJUU3hGUVVGRkxFZEJRVWNzWVVGQllTeEZRVUZGTEVOQlFVTTdTVUZETTBJc1IwRkJSeXhEUVVGRExGRkJRVkVzWjBKQlFVOHNSVUZCUlN4RlFVRkxMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dEpRVVY0UXl4SlFVRkpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eHRRa0ZCYlVJc1JVRkJSVHRSUVVVM1FpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMmhDTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1lVRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4WlFVRkhMRWRCUVVNc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVsQlFVY3NaMEpCUVUwc1EwRkJReXhQUVVGUExFMUJRVVVzUTBGQlF6dFRRVU0xUlR0UlFVVkVMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzB0QlEzaERPMGxCUlVRc01FSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSVFZDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVWRUxGTkJRVk1zWVVGQllUdEpRVU5zUWl4SlFVRkpMRVZCUVVVc1IwRkJVU3hGUVVGRkxFTkJRVU03U1VGRGFrSXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjZReXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRMUVVNMVFqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGVkJRVlVzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZET1VNc1JVRkJSU3hIUVVGSExHZENRVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRPMHRCUXpGQ08wbEJRMFFzVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEWkN4RFFVRkRPMEZCUlVRc1UwRkJVeXhUUVVGVExFTkJRVU1zUjBGQmJVSTdTVUZEYkVNc1IwRkJSeXhIUVVGSExHOUNRVUZ2UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRE8xbEJRMUFzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhPMWxCUTFvc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEpRVUZKTzFsQlEyUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1EwRkJReXhOUVVGTk8xbEJRMnhDTEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1RVRkJUU3hKUVVGSkxFVkJRVVU3V1VGRGVFSXNVVUZCVVN4RlFVRkZMRWRCUVVjc1EwRkJReXhSUVVGUkxFbEJRVWtzVFVGQlRUdFpRVU5vUXl4UFFVRlBMRmxCUVVNc1IwRkJiME03WjBKQlEzaERMRTlCUVU4c1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaENMRU5CUVVNN1dVRkRSQ3hKUVVGSkxGbEJRVU1zUjBGQk5rSTdaMEpCUXpsQ0xITkNRVUZaTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEYmtNc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZGtJc1EwRkJRenRaUVVORUxGRkJRVkU3WjBKQlEwb3NTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVlVGQlZTeEZRVUZGTzI5Q1FVTndReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdhVUpCUTJ4Q08yZENRVU5FTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSVHR2UWtGRGFrSXNhVUpCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlFUdHBRa0ZEYWtJN1dVRkRUQ3hEUVVGRE8xTkJRMG9zUTBGQlF5eERRVUZCTzBsQlEwNHNRMEZCUXl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNSMEZCYzBJN1NVRkRlRU1zUjBGQlJ5eEhRVUZITEhWQ1FVRjFRaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEyNURMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFsQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhIUVVGSE8xbEJRMW9zVVVGQlVTeEZRVUZGTEVkQlFVY3NRMEZCUXl4UlFVRlJMRWxCUVVrc1JVRkJSVHRaUVVNMVFpeEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRWxCUVVrc1NVRkJTU3hGUVVGRk8xbEJRM0JDTEZGQlFWRXNSVUZCUlN4SFFVRkhMRU5CUVVNc1VVRkJVVHRaUVVOMFFpeFBRVUZQTEZsQlFVTXNSMEZCZFVNN1owSkJRek5ETEU5QlFVOHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hDTEVOQlFVTTdXVUZEUkN4SlFVRkpMRmxCUVVNc1IwRkJOa0k3WjBKQlF6bENMSE5DUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRGJrTXNUMEZCVHl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGRrSXNRMEZCUXp0WlFVTkVMRkZCUVZFN1owSkJRMG9zU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU53UXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03YVVKQlEyeENPMmRDUVVORUxFbEJRVWtzUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlR0dlFrRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRVHRwUWtGRGFrSTdXVUZEVEN4RFFVRkRPMU5CUTBvc1EwRkJReXhEUVVGQk8wbEJRMDRzUTBGQlF5eERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhQUVVGUExFTkJRVU1zUjBGQmJVSTdTVUZEYUVNc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMUZCUXk5Q0xFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkZha0lzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMRkZCUVZFc1JVRkJSVHRaUVVOcVFpeEpRVUZKTEZsQlFWa3NSMEZCUnl4eFFrRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjRReXhKUVVGSkxGbEJRVmtzUlVGQlJUdG5Ra0ZEWkN4SlFVRkpMRkZCUVZFc1IwRkJSeXg1UWtGQlpTeERRVUZETEZsQlFWa3NSVUZCUlN4SFFVRkhMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03WjBKQlF6ZEVMRTlCUVU4c1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJGQlF6VkNPMU5CUTBvN1VVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVTdXVUZEV0N4elFrRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTjZRanRSUVVWRUxIZENRVUZqTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRM1pDTEU5QlFVOHNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGQk8xRkJRM3BDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGRExFZEJRVWM3V1VGRFVpeEpRVUZKTEZGQlFWRXNSMEZCUnl4NVFrRkJaU3hEUVVGRExFZEJRWE5ETEVWQlFVVXNSMEZCUnl4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJRM1pHTEU5QlFVOHNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xRkJRemRDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGRExFTkJRVU03V1VGRFVDeFBRVUZQTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOeVFpeERRVUZETEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNWVUZCVlN4RFFVRkRMRWRCUVhOQ08wbEJRM1JETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4SFFVRkhMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXcENMRWxCUVVrc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEYWtJc1NVRkJTU3haUVVGWkxFZEJRVWNzY1VKQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4WlFVRlpMRVZCUVVVN1owSkJRMlFzU1VGQlNTeFJRVUZSTEVkQlFVY3NlVUpCUVdVc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEZsQlFWa3NRMEZCUXl4RFFVRkRPMmRDUVVOb1JTeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFRRVU5LTzFGQlJVUXNkMEpCUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZEZGtJc1QwRkJUeXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdVVUZETlVJc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFVTXNSMEZCUnp0WlFVTlNMRWxCUVVrc1VVRkJVU3hIUVVGSExIbENRVUZsTEVOQlFVTXNSMEZCZVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzV1VGQldTeERRVUZETEVOQlFVTTdXVUZETjBZc1QwRkJUeXhQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETjBJc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkNMRU5CUVVNc1EwRkJReXhEUVVGQk8wbEJRMDRzUTBGQlF5eERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeE5RVUZOTEZGQlFVRTdTVUZEVGl4UFFVRlBMRk5CUVVFN1NVRkRVQ3hWUVVGVkxGbEJRVUU3UTBGRFlpeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUd4dllXUnBibWNnWm5KdmJTQW5MaTR2ZFhScGJDOXNiMkZrYVc1bkoxeHVhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjM1JoZEhWeklHWnliMjBnSnk0dUwzTjBiM0psTDNOMFlYUjFjeWRjYm1sdGNHOXlkQ0J0YjJOclRXRnVZV2RsY2lCbWNtOXRJQ2N1TDIxdlkydE5ZVzVoWjJWeUoxeHVhVzF3YjNKMElHTmhZMmhsVFdGdVlXZGxjaUJtY205dElDY3VMMk5oWTJobFRXRnVZV2RsY2lkY2JtbHRjRzl5ZENCelpYTnphVzl1VFdGdVlXZGxjaUJtY205dElDY3VMM05sYzNOcGIyNU5ZVzVoWjJWeUoxeHVhVzF3YjNKMElISmxjM0J2Ym5ObFNHRnVaR3hsY2lCbWNtOXRJQ2N1TDNKbGMzQnZibk5sU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlJR1p5YjIwZ1hDSXVMMlIxY21GMGFXOXVVbVZ3YjNKMFpYSmNJbHh1YVcxd2IzSjBJSFZ5YkNCbWNtOXRJQ2N1TGk5MWRHbHNMM1Z5YkNkY2JtbHRjRzl5ZENCN1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1ZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSmNibWx0Y0c5eWRDQmxjbkp2Y2toaGJtUnNaWElnWm5KdmJTQmNJaTR2WlhKeWIzSklZVzVrYkdWeVhDSTdYRzVjYmk4dklPYWd2T1c4aitXTWxuVnliRnh1Wm5WdVkzUnBiMjRnWm05eWJXRjBLRzl5YVdkcGJsVnliRG9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdhV1lnS0c5eWFXZHBibFZ5YkM1emRHRnlkSE5YYVhSb0tDZG9kSFJ3SnlrcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHOXlhV2RwYmxWeWJGeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQjFjbXhRWlhKbWFYZ2dQU0JqYjI1bWFXY3VkWEpzVUdWeVptbDRPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTUxY214UVpYSm1hWGdnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkWEpzVUdWeVptbDRJRDBnWTI5dVptbG5MblZ5YkZCbGNtWnBlQ2dwWEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJGQmxjbVpwZUNBcklHOXlhV2RwYmxWeWJEdGNiaUFnSUNCOVhHNTlYRzVjYmk4dklPYUpnT2FjaWVpdnQrYXhndVdQa2VXSHV1V0pqZW1jZ09pbWdlV0JtdWVhaE9TNmkrYURoVnh1Wm5WdVkzUnBiMjRnY0hKbFJHODhWQ0JsZUhSbGJtUnpJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNCtLRzlpYWpvZ1ZDazZJRlFnZTF4dUlDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtSmxabTl5WlZObGJtUWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vdVltVm1iM0psVTJWdVpDZ3BPMXh1SUNBZ0lIMWNiaUFnSUNBdkx5RG5tYnZsdlpYbWdJSGxwTEhtbFlqdnZJenBoNDNscEkzbm1idmx2WlhvcnFIbWxiQmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BUMDlJRndpZFc1a1pXWnBibVZrWENJcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQTlJREE3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDc3JPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h2WW1vdWMyaHZkMHh2WVdScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnYkc5aFpHbHVaeTV6YUc5M0tHOWlhaTV6YUc5M1RHOWhaR2x1WnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tDRnZZbW91YjNKcFoybHVWWEpzS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTV2Y21sbmFXNVZjbXdnUFNCdlltb3VkWEpzTzF4dUlDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ1ptOXliV0YwS0c5aWFpNTFjbXdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQnZZbW83WEc1OVhHNWNiaTh2SU9hZ3ZPVzhqK1dNbHVXa2hPZVFodWl2dCtheGd1ZWFoRzlpYXVXR2hlV3V1Vnh1Wm5WdVkzUnBiMjRnYVc1cGRHbGhiR2w2WlZKbGNYVmxjM1JQWW1vb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpa2dlMXh1WEc0Z0lDQWdhV1lnS0NGdlltb3VaR0YwWVNrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91WkdGMFlTQTlJSHQ5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodlltb3ViM0pwWjJsdVZYSnNJQ0U5UFNCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNTFjbXdnSmlZZ2MzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbVJoZEdFZ1BTQjdMaTR1YjJKcUxtUmhkR0VnWVhNZ2IySnFaV04wTENCYlkyOXVabWxuTG5ObGMzTnBiMjVPWVcxbFhUb2djM1JoZEhWekxuTmxjM05wYjI1OU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklPV21ndWFlbk9hY2llV0ZxT1d4Z09XUGd1YVZzTys4ak9XSW1lYTN1K1dLb0Z4dUlDQWdJR052Ym5OMElHZGtJRDBnWjJWMFIyeHZZbUZzUkdGMFlTZ3BPMXh1SUNBZ0lHOWlhaTVrWVhSaElEMGdleTR1TG1ka0xDQXVMaTV2WW1vdVpHRjBZU0JoY3lCdlltcGxZM1I5TzF4dVhHNGdJQ0FnYjJKcUxtMWxkR2h2WkNBOUlHOWlhaTV0WlhSb2IyUWdmSHdnSjBkRlZDYzdYRzRnSUNBZ2IySnFMbVJoZEdGVWVYQmxJRDBnYjJKcUxtUmhkR0ZVZVhCbElIeDhJQ2RxYzI5dUp6dGNibHh1SUNBZ0lDOHZJT1dtZ3VhZW5PaXZ0K2F4Z3VTNGplYVlyMGRGVk8rOGpPV0ltZVdjcUZWU1RPUzRyZWlIcXVXS3FPV0tvT1M0aXVlWnUrVzlsZWFBZ2VXU2pPV0ZxT1d4Z09XUGd1YVZzRnh1SUNBZ0lHbG1JQ2doWTI5dVptbG5MbVJ2VG05MFZYTmxVWFZsY25sVGRISnBibWNnSmlZZ2IySnFMbTFsZEdodlpDQWhQVDBnWENKSFJWUmNJaWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9jM1JoZEhWekxuTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUc5aWFpNTFjbXdnUFNCMWNtd3VjMlYwVUdGeVlXMXpLRzlpYWk1MWNtd3NJSHRiWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsWFRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjU5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdkWEpzTG5ObGRGQmhjbUZ0Y3lodlltb3VkWEpzTENCblpDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1emRHRnlkQ2h2WW1vcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc5aWFqdGNibjFjYmx4dUx5OGc1cUM4NWJ5UDVZeVc1YVNFNTVDRzVMaUs1THlnNXBhSDVMdTI1NXFFYjJKcTVZYUY1YTY1WEc1bWRXNWpkR2x2YmlCcGJtbDBhV0ZzYVhwbFZYQnNiMkZrUm1sc1pVOWlhaWh2WW1vNklFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUtTQjdYRzRnSUNBZ2FXWWdLQ0Z2WW1vdVptOXliVVJoZEdFcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1admNtMUVZWFJoSUQwZ2UzMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzlpYWk1dmNtbG5hVzVWY213Z0lUMDlJR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG5WeWJDQW1KaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJpa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vdVptOXliVVJoZEdFZ1BTQjdMaTR1YjJKcUxtWnZjbTFFWVhSaElHRnpJRzlpYW1WamRDd2dXMk52Ym1acFp5NXpaWE56YVc5dVRtRnRaVjA2SUhOMFlYUjFjeTV6WlhOemFXOXVmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeURscG9MbW5wem1uSW5saGFqbHNZRGxqNExtbGJEdnZJemxpSm5tdDd2bGlxQmNiaUFnSUNCamIyNXpkQ0JuWkNBOUlHZGxkRWRzYjJKaGJFUmhkR0VvS1R0Y2JpQWdJQ0J2WW1vdVptOXliVVJoZEdFZ1BTQjdMaTR1WjJRc0lDNHVMbTlpYWk1bWIzSnRSR0YwWVgwN1hHNWNiaUFnSUNCcFppQW9JV052Ym1acFp5NWtiMDV2ZEZWelpWRjFaWEo1VTNSeWFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUM4dklPV3dodWVadSttWmh1YUFnZVM1bitXNHB1V2NxSFZ5Yk9TNGlseHVJQ0FnSUNBZ0lDQnBaaUFvYzNSaGRIVnpMbk5sYzNOcGIyNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTUxY213Z1BTQjFjbXd1YzJWMFVHRnlZVzF6S0c5aWFpNTFjbXdzSUh0YlkyOXVabWxuTG5ObGMzTnBiMjVPWVcxbFhUb2djM1JoZEhWekxuTmxjM05wYjI1OUtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0F2THlEbGhhamxzWURsajRMbWxiRGxrSXptbDdibWxMN2xuS2gxY216a3VJcGNiaUFnSUNBZ0lDQWdiMkpxTG5WeWJDQTlJSFZ5YkM1elpYUlFZWEpoYlhNb2IySnFMblZ5YkN3Z1oyUXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdWMzUmhjblFvYjJKcUtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCdlltbzdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHZGxkRWRzYjJKaGJFUmhkR0VvS1NCN1hHNGdJQ0FnYkdWMElHZGtPaUJoYm5rZ1BTQjdmVHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NW5iRzlpWVd4RVlYUmhJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnWjJRZ1BTQmpiMjVtYVdjdVoyeHZZbUZzUkdGMFlTZ3BPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bmJHOWlZV3hFWVhSaElEMDlQU0JjSW05aWFtVmpkRndpS1NCN1hHNGdJQ0FnSUNBZ0lHZGtJRDBnWTI5dVptbG5MbWRzYjJKaGJFUmhkR0U3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCblpEdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pHOVNaWEYxWlhOMEtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBJSHRjYmlBZ0lDQnZZbW9nUFNCcGJtbDBhV0ZzYVhwbFVtVnhkV1Z6ZEU5aWFpaHZZbW9wTzF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lIZDRMbkpsY1hWbGMzUW9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RYSnNPaUJ2WW1vdWRYSnNMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nYjJKcUxtUmhkR0VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnRaWFJvYjJRNklHOWlhaTV0WlhSb2IyUXNYRzRnSUNBZ0lDQWdJQ0FnSUNCb1pXRmtaWEk2SUc5aWFpNW9aV0ZrWlhJZ2ZId2dlMzBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmtZWFJoVkhsd1pUb2diMkpxTG1SaGRHRlVlWEJsSUh4OElDZHFjMjl1Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4xWTJObGMzTW9jbVZ6T2lCM2VDNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQm1ZV2xzS0hKbGN6b2dkM2d1UjJWdVpYSmhiRU5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaWEp5YjNKSVlXNWtiR1Z5TG5ONWMzUmxiVVZ5Y205eUtHOWlhaXdnY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0hKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91WTI5dGNHeGxkR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZZbW91WTI5dGNHeGxkR1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzlpYWk1emFHOTNURzloWkdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc2IyRmthVzVuTG1ocFpHVW9LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmtiMVZ3Ykc5aFpFWnBiR1VvYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dlMXh1SUNBZ0lHOWlhaUE5SUdsdWFYUnBZV3hwZW1WVmNHeHZZV1JHYVd4bFQySnFLRzlpYWlrN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkM2d1ZFhCc2IyRmtSbWxzWlNoN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IxY213NklHOWlhaTUxY213c1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtYVd4bFVHRjBhRG9nYjJKcUxtWnBiR1ZRWVhSb0lIeDhJQ2NuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdibUZ0WlRvZ2IySnFMbTVoYldVZ2ZId2dKeWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQm1iM0p0UkdGMFlUb2diMkpxTG1admNtMUVZWFJoTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5aHlaWE02SUhkNExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1poYVd3b2NtVnpPaUIzZUM1SFpXNWxjbUZzUTJGc2JHSmhZMnRTWlhOMWJIUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdWMzbHpkR1Z0UlhKeWIzSW9iMkpxTENCeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiR1YwWlNncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1amIyMXdiR1YwWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1amIyMXdiR1YwWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYjJKcUxuTm9iM2RNYjJGa2FXNW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHZZV1JwYm1jdWFHbGtaU2dwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDBwWEc1OVhHNWNibVoxYm1OMGFXOXVJSEpsY1hWbGMzUW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaWs2SUdGdWVTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYjJKcUlEMGdjSEpsUkc4b2IySnFLVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxtMXZZMnRLYzI5dUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdiVzlqYTFKbGMzQnZibk5sSUQwZ2JXOWphMDFoYm1GblpYSXVaMlYwS0c5aWFpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iVzlqYTFKbGMzQnZibk5sS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsYzNCdmJuTmxJRDBnY21WemNHOXVjMlZJWVc1a2JHVnlLRzF2WTJ0U1pYTndiMjV6WlN3Z2IySnFMQ0FuY21WeGRXVnpkQ2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLSEpsYzNCdmJuTmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUlDaHZZbW91WTJGamFHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhZMmhsVFdGdVlXZGxjaTVuWlhRb2IySnFLVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG0xaGFXNG9LUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmtiMUpsY1hWbGMzUW9iMkpxS1Z4dUlDQWdJQ0FnSUNCOUtTNTBhR1Z1S0NoeVpYTXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCeVpYTndiMjV6WlNBOUlISmxjM0J2Ym5ObFNHRnVaR3hsY2loeVpYTWdZWE1nZDNndVVtVnhkV1Z6ZEZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RDd2diMkpxTENBbmNtVnhkV1Z6ZENjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6Y0c5dWMyVXBPMXh1SUNBZ0lDQWdJQ0I5S1M1allYUmphQ2dvWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2hsS1R0Y2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCMWNHeHZZV1JHYVd4bEtHOWlham9nU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwT2lCaGJua2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUc5aWFpQTlJSEJ5WlVSdktHOWlhaWs3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLR052Ym1acFp5NXRiMk5yU25OdmJpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJRzF2WTJ0U1pYTndiMjV6WlNBOUlHMXZZMnROWVc1aFoyVnlMbWRsZENodlltb3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzF2WTJ0U1pYTndiMjV6WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J5WlhOd2IyNXpaU0E5SUhKbGMzQnZibk5sU0dGdVpHeGxjaWh0YjJOclVtVnpjRzl1YzJVc0lHOWlhaXdnSjNWd2JHOWhaRVpwYkdVbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTndiMjV6WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnpaWE56YVc5dVRXRnVZV2RsY2k1dFlXbHVLQ2t1ZEdobGJpZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdaRzlWY0d4dllXUkdhV3hsS0c5aWFpbGNiaUFnSUNBZ0lDQWdmU2t1ZEdobGJpZ29jbVZ6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSW9jbVZ6SUdGeklIZDRMbFZ3Ykc5aFpFWnBiR1ZUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRc0lHOWlhaXdnSjNWd2JHOWhaRVpwYkdVbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLSEpsYzNCdmJuTmxLVHRjYmlBZ0lDQWdJQ0FnZlNrdVkyRjBZMmdvS0dVcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJR1p2Y20xaGRDeGNiaUFnSUNCeVpYRjFaWE4wTEZ4dUlDQWdJSFZ3Ykc5aFpFWnBiR1ZjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbmZ1bmN0aW9uIHJlc3BvbnNlKHJlcywgb2JqLCBtZXRob2QpIHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gSlNPTi5wYXJzZShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChvYmouY2F0Y2hFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5sb2dpblRyaWdnZXIocmVzLmRhdGEpICYmIG9iai5yZUxvZ2luQ291bnQgIT09IHVuZGVmaW5lZCAmJiBvYmoucmVMb2dpbkNvdW50IDwgY29uZmlnXzEuZGVmYXVsdC5yZUxvZ2luTGltaXQpIHtcbiAgICAgICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5kZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQucmVxdWVzdChvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kID09PSBcInVwbG9hZEZpbGVcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc1RyaWdnZXIocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICB2YXIgcmVhbERhdGEgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRnVuY3Rpb24gc3VjY2Vzc0RhdGEgb2NjdXIgZXJyb3I6IFwiICsgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9iai5ub0NhY2hlRmxhc2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuc2V0KG9iaiwgcmVhbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1zZyA9IGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnLmNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLnN0YXR1c0NvZGUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gcmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ6Y0c5dWMyVklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzl5WlhOd2IyNXpaVWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zYlVSQlFUWkRPMEZCUXpkRExDdERRVUY1UXp0QlFVTjZReXdyUTBGQmVVTTdRVUZEZWtNc2RVUkJRV2xFTzBGQlEycEVMRzFFUVVFMlF6dEJRVWMzUXl4VFFVRlRMRkZCUVZFc1EwRkRZaXhIUVVGNVJTeEZRVU42UlN4SFFVRjFReXhGUVVOMlF5eE5RVUZuUXp0SlFVVm9ReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NSMEZCUnl4RlFVRkZPMUZCUjNoQ0xFbEJRVWNzVDBGQlR5eEhRVUZITEVOQlFVTXNTVUZCU1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVNM1FpeEpRVUZKTzJkQ1FVTkJMRWRCUVVjc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WVVGRGJrTTdXVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRuUWtGRFVpeEpRVUZITEVkQlFVY3NRMEZCUXl4VlFVRlZMRVZCUVVVN2IwSkJRMllzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRGRFSTdjVUpCUVUwN2IwSkJRMGdzYzBKQlFWa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTnNReXhQUVVGUE8ybENRVU5XTzJGQlEwbzdVMEZEU2p0UlFVVkVMREJDUVVGblFpeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVVeFFpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1dVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hMUVVGTExGTkJRVk1zU1VGQlNTeEhRVUZITEVOQlFVTXNXVUZCV1N4SFFVRkhMR2RDUVVGTkxFTkJRVU1zV1VGQllTeEZRVUZGTzFsQlJUZEhMSGRDUVVGakxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdXVUZETlVJc1NVRkJSeXhOUVVGTkxFdEJRVXNzVTBGQlV5eEZRVUZGTzJkQ1FVTnlRaXhQUVVGUExIZENRVUZqTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVhGQ0xFTkJRVU1zUTBGQlF6dGhRVU40UkR0cFFrRkJUU3hKUVVGSExFMUJRVTBzUzBGQlN5eFpRVUZaTEVWQlFVVTdaMEpCUXk5Q0xFOUJRVThzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJkMElzUTBGQlF5eERRVUZETzJGQlF6bEVPMU5CUTBvN1lVRkJUU3hKUVVGSkxHZENRVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdFpRVVY0UXl4SlFVRkpMRkZCUVZFc1IwRkJjME1zUlVGQlJTeERRVUZETzFsQlEzSkVMRWxCUVVrN1owSkJRMEVzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1YwRkJWeXhMUVVGTExGVkJRVlVzUlVGQlJUdHZRa0ZETVVNc1VVRkJVU3hIUVVGSExHZENRVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dHBRa0ZETTBNN2NVSkJRVTA3YjBKQlEwZ3NVVUZCVVN4SFFVRkhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU03YVVKQlEzWkNPMkZCUTBvN1dVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdG5Ra0ZEVWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHOURRVUZ2UXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRek5FTzFsQlEwUXNTVUZCUnl4RFFVRkZMRWRCUVhOQ0xFTkJRVU1zV1VGQldTeEZRVUZGTzJkQ1FVVjBReXhKUVVGSExFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNTMEZCU3l4VlFVRlZMRVZCUVVNN2IwSkJRMnBETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03YVVKQlEzcENPM0ZDUVVGTk8yOUNRVU5JTEU5QlFVOHNVVUZCVVN4RFFVRkRPMmxDUVVOdVFqdGhRVU5LTzFsQlJVUXNjMEpCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPMU5CUTI1RE8yRkJRVTA3V1VGRlNDeEpRVUZITEVkQlFVY3NRMEZCUXl4VlFVRlZMRVZCUVVVN1owSkJRMllzU1VGQlNTeEhRVUZITEVkQlFVY3NjMEpCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTNoRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8yRkJRMmhETzJsQ1FVRk5PMmRDUVVOSUxITkNRVUZaTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dGhRVU55UXp0VFFVTktPMHRCUTBvN1UwRkJUVHRSUVVWSUxFbEJRVWNzUjBGQlJ5eERRVUZETEZWQlFWVXNSVUZCUlR0WlFVTm1MRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJReXhEUVVGRE8xTkJRemxETzJGQlFVMDdXVUZEU0N4elFrRkJXU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkRja003UzBGRFNqdEJRVU5NTEVOQlFVTTdRVUZGUkN4clFrRkJaU3hSUVVGUkxFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCeVpYRjFaWE4wU0dGdVpHeGxjaUJtY205dElDY3VMM0psY1hWbGMzUklZVzVrYkdWeUoxeHVhVzF3YjNKMElHVnljbTl5U0dGdVpHeGxjaUJtY205dElDY3VMMlZ5Y205eVNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCallXTm9aVTFoYm1GblpYSWdabkp2YlNBbkxpOWpZV05vWlUxaGJtRm5aWEluWEc1cGJYQnZjblFnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaUJtY205dElDY3VMMlIxY21GMGFXOXVVbVZ3YjNKMFpYSW5YRzVwYlhCdmNuUWdjMlZ6YzJsdmJrMWhibUZuWlhJZ1puSnZiU0FuTGk5elpYTnphVzl1VFdGdVlXZGxjaWRjYm1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVMQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaUI5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lqdGNibHh1Wm5WdVkzUnBiMjRnY21WemNHOXVjMlVvWEc0Z0lDQWdjbVZ6T2lCM2VDNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBJSHdnZDNndVZYQnNiMkZrUm1sc1pWTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ3hjYmlBZ0lDQnZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRzWEc0Z0lDQWdiV1YwYUc5a09pQmNJbkpsY1hWbGMzUmNJaUI4SUZ3aWRYQnNiMkZrUm1sc1pWd2lYRzRwT2lCaGJua2dlMXh1SUNBZ0lHbG1JQ2h5WlhNdWMzUmhkSFZ6UTI5a1pTQTlQVDBnTWpBd0tTQjdYRzVjYmlBZ0lDQWdJQ0FnTHk4ZzVZVzg1YTY1ZFhCc2IyRmtSbWxzWmVpL2xPV2JudWVhaEhKbGN5NWtZWFJoNVkrdjZJTzk1cGl2NWEyWDU2eW01TGl5WEc0Z0lDQWdJQ0FnSUdsbUtIUjVjR1Z2WmlCeVpYTXVaR0YwWVNBOVBUMGdYQ0p6ZEhKcGJtZGNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYTXVaR0YwWVNBOUlFcFRUMDR1Y0dGeWMyVW9jbVZ6TG1SaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0c5aWFpNWpZWFJqYUVWeWNtOXlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lobEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdWJHOW5hV05GY25KdmNpaHZZbW9zSUhKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5TG1WdVpDaHZZbW9wTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3ViRzluYVc1VWNtbG5aMlZ5SVNoeVpYTXVaR0YwWVNrZ0ppWWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQWhQVDBnZFc1a1pXWnBibVZrSUNZbUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BDQmpiMjVtYVdjdWNtVk1iMmRwYmt4cGJXbDBJU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNTVtNzViMlY1b0NCNWFTeDVwV0k3N3lNNUxpVTZZZU42SytWNXF5aDVwV3c1TGlONkxhRjZMK0g2WVdONTcydVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNWtaV3hUWlhOemFXOXVLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWh0WlhSb2IyUWdQVDA5SUZ3aWNtVnhkV1Z6ZEZ3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjWFZsYzNSSVlXNWtiR1Z5TG5KbGNYVmxjM1FvYjJKcUlHRnpJRWxTWlhGMVpYTjBUM0IwYVc5dUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlodFpYUm9iMlFnUFQwOUlGd2lkWEJzYjJGa1JtbHNaVndpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGNYVmxjM1JJWVc1a2JHVnlMblZ3Ykc5aFpFWnBiR1VvYjJKcUlHRnpJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hqYjI1bWFXY3VjM1ZqWTJWemMxUnlhV2RuWlhJb2NtVnpMbVJoZEdFcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG1qcVhsajZQb3Y1VGxtNTdtaUpEbGlwL25vSUZjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J5WldGc1JHRjBZVG9nYzNSeWFXNW5JSHdnU1VGdWVVOWlhbVZqZENCOElFRnljbUY1UW5WbVptVnlJRDBnWENKY0lqdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VjM1ZqWTJWemMwUmhkR0VnUFQwOUlDZG1kVzVqZEdsdmJpY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVmhiRVJoZEdFZ1BTQmpiMjVtYVdjdWMzVmpZMlZ6YzBSaGRHRW9jbVZ6TG1SaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFlXeEVZWFJoSUQwZ2NtVnpMbVJoZEdFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvWENKR2RXNWpkR2x2YmlCemRXTmpaWE56UkdGMFlTQnZZMk4xY2lCbGNuSnZjam9nWENJZ0t5QmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUtDRW9iMkpxSUdGeklFbFNaWEYxWlhOMFQzQjBhVzl1S1M1dWIwTmhZMmhsUm14aGMyZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHprdUxya3VvYmt2NTNvcjRIcG9iWHBuYUxrdUkzcGw2cm5nNEh2dkl6bGlKbmt1STNsbTU3b3NJUHZ2SXpsajZybW1LL252SlBsclpqbW5JRG1sckRtbGJEbWphN3Z2SXpsdm9Ya3VJdm1yS0hvdjV2bGhhWGxobzNubEtoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppaDBlWEJsYjJZZ2IySnFMbk4xWTJObGMzTWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpbDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNXpkV05qWlhOektISmxZV3hFWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZoYkVSaGRHRTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzU3eVQ1YTJZNWEyWTVZS29YRzRnSUNBZ0lDQWdJQ0FnSUNCallXTm9aVTFoYm1GblpYSXVjMlYwS0c5aWFpd2djbVZoYkVSaGRHRXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1bzZsNVkrajZMK1U1WnVlNWFTeDZMU2w1NkNCWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWh2WW1vdVkyRjBZMmhGY25KdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdGMyY2dQU0JsY25KdmNraGhibVJzWlhJdVoyVjBSWEp5YjNKTmMyY29jbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvYlhObkxtTnZiblJsYm5RcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdWJHOW5hV05GY25KdmNpaHZZbW9zSUhKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBdkx5Qm9kSFJ3YytpL2xPV2JudWVLdHVhQWdlZWdnZW1kbmpJd01GeHVJQ0FnSUNBZ0lDQnBaaWh2WW1vdVkyRjBZMmhGY25KdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0hKbGN5NXpkR0YwZFhORGIyUmxMblJ2VTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdaWEp5YjNKSVlXNWtiR1Z5TG14dloybGpSWEp5YjNJb2IySnFMQ0J5WlhNcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0J5WlhOd2IyNXpaVHRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RIYW5kbGVyXCIpO1xudmFyIGNoZWNrU2Vzc2lvblByb21pc2UgPSBudWxsO1xuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3eC5jaGVja1Nlc3Npb24oKVwiKTtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgd3guY2hlY2tTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfY2hlY2tTZXNzaW9uJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tTZXNzaW9uUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSB7XG4gICAgaWYgKCFzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKSB7XG4gICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrTG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgaWYgKGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSkge1xuICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG52YXIgbG9naW5Qcm9taXNlID0gbnVsbDtcbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsb2dpblByb21pc2U7XG59XG5mdW5jdGlvbiBsb2dpbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBjb25zb2xlLmxvZygnd3gubG9naW4nKTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTJTZXNzaW9uKHJlcy5jb2RlKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVtjb2RlIOiOt+WPluWksei0pV1cIiB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KCd3eF9sb2dpbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiByZXMuZXJyTXNnIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNldFNlc3Npb24oc2Vzc2lvbikge1xuICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lLFxuICAgICAgICBkYXRhOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNvZGUyU2Vzc2lvbihjb2RlKSB7XG4gICAgdmFyIGRhdGE7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhIHx8IHt9O1xuICAgIH1cbiAgICBkYXRhW2NvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZV0gPSBjb2RlO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIHVybDogcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LmZvcm1hdChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsKSxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBtZXRob2Q6IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ucmVwb3J0LCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZGVsU2Vzc2lvbigpIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSAnJztcbiAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXG4gICAgfSk7XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IEluZmluaXR5O1xuICAgICAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1haW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcmV0dXJuIGNoZWNrTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9KTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcih0aXRsZSwgY29udGVudCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBtYWluOiBtYWluLFxuICAgIHNldFNlc3Npb246IHNldFNlc3Npb24sXG4gICAgZGVsU2Vzc2lvbjogZGVsU2Vzc2lvblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVnpjMmx2YmsxaGJtRm5aWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzTmxjM05wYjI1TllXNWhaMlZ5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTUVOQlFXOURPMEZCUTNCRExEQkRRVUZ2UXp0QlFVTndReXdyUTBGQmVVTTdRVUZEZWtNc2RVUkJRV2xFTzBGQlEycEVMRzFFUVVFMlF6dEJRVWMzUXl4SlFVRkpMRzFDUVVGdFFpeEhRVUZSTEVsQlFVa3NRMEZCUXp0QlFVVndReXhUUVVGVExGbEJRVms3U1VGRGFrSXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTzFGQlEzUkNMRzFDUVVGdFFpeEhRVUZITEVsQlFVa3NUMEZCVHl4RFFVRkRMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3V1VGRE9VTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4RFFVRkRPMWxCUTJwRExFbEJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03V1VGRGJrTXNSVUZCUlN4RFFVRkRMRmxCUVZrc1EwRkJRenRuUWtGRFdpeFBRVUZQTzI5Q1FVVklMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03WjBKQlEzSkNMRU5CUVVNN1owSkJRMFFzU1VGQlNUdHZRa0ZGUVN4VlFVRlZMRVZCUVVVc1EwRkJRenR2UWtGRFlpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGJFSXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenR2UWtGRGNrSXNRMEZCUXl4RlFVRkZMRlZCUVVNc1IwRkJVVHQzUWtGRFVpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRMUFzUTBGQlF6dG5Ra0ZEUkN4UlFVRlJPMjlDUVVOS0xFbEJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03YjBKQlEycERMREJDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRek5FTEVOQlFVTTdZVUZEU2l4RFFVRkRMRU5CUVVFN1VVRkRUaXhEUVVGRExFTkJRVU1zUTBGQlFUdExRVU5NTzBsQlEwUXNUMEZCVHl4dFFrRkJiVUlzUTBGQlF6dEJRVU12UWl4RFFVRkRPMEZCUjBRc1UwRkJVeXh6UWtGQmMwSTdTVUZETTBJc1NVRkJTU3hEUVVGRExHZENRVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUldwQ0xFOUJRVThzU1VGQlNTeERRVUZCTzB0QlEyUTdTVUZEUkN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWxCUVVrc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNSMEZCUnl4blFrRkJUU3hEUVVGRExHRkJRV0VzUlVGQlJUdFJRVVY2UlN4VlFVRlZMRVZCUVVVc1EwRkJRenRSUVVOaUxFOUJRVThzU1VGQlNTeERRVUZCTzB0QlEyUTdTVUZEUkN4UFFVRlBMRXRCUVVzc1EwRkJRVHRCUVVOb1FpeERRVUZETzBGQlJVUXNVMEZCVXl4VlFVRlZPMGxCUTJZc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMUZCUXk5Q0xFbEJRVWtzYzBKQlFYTkNMRVZCUVVVc1JVRkJSVHRaUVVVeFFpeG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTm9ReXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXp0blFrRkRiRUlzVDBGQlR5eFBRVUZQTEVWQlFVVXNRMEZCUXp0WlFVTnlRaXhEUVVGRExFVkJRVVVzVlVGQlF5eEhRVUZSTzJkQ1FVTlNMRTlCUVU4c1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzWkNMRU5CUVVNc1EwRkJReXhEUVVGQk8xTkJRMHc3WVVGQlRUdFpRVVZJTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN1UwRkRjRUk3U1VGRFRDeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkhSQ3hKUVVGSkxGbEJRVmtzUjBGQlVTeEpRVUZKTEVOQlFVTTdRVUZGTjBJc1UwRkJVeXhQUVVGUE8wbEJRMW9zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0UlFVTm1MRmxCUVZrc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMWxCUTNaRExFdEJRVXNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXp0blFrRkRWQ3haUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETzJkQ1FVTndRaXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzFsQlEzSkNMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZETEVkQlFVYzdaMEpCUTFRc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF6dG5Ra0ZEY0VJc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZGtJc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFVDeERRVUZETEVOQlFVTXNRMEZCUVR0TFFVTk1PMGxCUTBRc1QwRkJUeXhaUVVGWkxFTkJRVU03UVVGRGVFSXNRMEZCUXp0QlFVVkVMRk5CUVZNc1MwRkJTenRKUVVOV0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUVHRSUVVNdlFpeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRM2hDTEVsQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZEYmtNc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF6dFpRVU5NTEU5QlFVOHNXVUZCUXl4SFFVRkhPMmRDUVVOUUxFbEJRVWtzUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlR0dlFrRkRWaXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGVFSXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenR2UWtGRGNrSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVU1zUjBGQlJ6dDNRa0ZEVkN4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZEZGtJc1EwRkJReXhEUVVGRExFTkJRVUU3YVVKQlEwdzdjVUpCUVUwN2IwSkJRMGdzVDBGQlR5eE5RVUZOTEVOQlFVTXNSVUZCUXl4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlJTeHJRa0ZCYTBJc1JVRkJReXhEUVVGRExFTkJRVU03YVVKQlEycEZPMWxCUTB3c1EwRkJRenRaUVVORUxGRkJRVkU3WjBKQlEwb3NTVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0blFrRkRha01zTUVKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRjRVFzUTBGQlF6dFpRVU5FTEVsQlFVa3NXVUZCUXl4SFFVRkhPMmRDUVVOS0xFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVTXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNVVFzUTBGQlF6dFRRVU5LTEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNWVUZCVlN4RFFVRkRMRTlCUVdVN1NVRkRMMElzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRE8wbEJSWHBDTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVkQlFVY3NTVUZCU1N4RFFVRkRPMGxCUldoRExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFGQlEzSkVMR2RDUVVGTkxFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF6dFJRVU4yUlN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTzFsQlF6VkNMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNN1UwRkRja01zUTBGQlF5eERRVUZCTzB0QlEwdzdTVUZEUkN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xRkJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1YwRkJjVUk3VVVGRGFrTXNTVUZCU1N4RlFVRkZMR2RDUVVGTkxFTkJRVU1zVDBGQlR6dExRVU4yUWl4RFFVRkRMRU5CUVVNN1FVRkRVQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNTVUZCV1R0SlFVTTVRaXhKUVVGSkxFbEJRVk1zUTBGQlF6dEpRVVZrTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTJwRUxFbEJRVWtzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dExRVU4wUXp0VFFVRk5PMUZCUTBnc1NVRkJTU3hIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03UzBGRE1VTTdTVUZEUkN4SlFVRkpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNVVUZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJSVFZETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4SlFVRkpMRXRCUVVzc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMUZCUTJwRExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEVUN4SFFVRkhMRVZCUVVVc2QwSkJRV01zUTBGQlF5eE5RVUZOTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETzFsQlEzQkVMRWxCUVVrc1RVRkJRVHRaUVVOS0xFMUJRVTBzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFbEJRVWtzUzBGQlN6dFpRVU0xUXl4UFFVRlBMRmxCUVVNc1IwRkJiME03WjBKQlEzaERMRWxCUVVrc1IwRkJSeXhEUVVGRExGVkJRVlVzUzBGQlN5eEhRVUZITEVWQlFVVTdiMEpCUlhoQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hGUVVGRk8zZENRVU0zUWl4SlFVRkpMRWRCUVVjc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPM2RDUVVNdlFpd3dRa0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUVR0eFFrRkRia1U3YjBKQlJVUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8yOUNRVU5ZTEVsQlFVazdkMEpCUTBFc1EwRkJReXhIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdjVUpCUXpsRE8yOUNRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPM0ZDUVVOWU8yOUNRVVZFTEVsQlFVa3NRMEZCUXl4RlFVRkZPM2RDUVVOSUxHZENRVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1EwRkJRenQzUWtGRmJrSXNaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4SlFVRkpMRU5CUVVNN2QwSkJSV2hETEVsQlFVa3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4blFrRkJUU3hEUVVGRExHZENRVUZuUWl4RlFVRkZPelJDUVVOeVJDeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNN05FSkJRM1pGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNN1owTkJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTzJkRFFVTTFRaXhKUVVGSkxFVkJRVVVzVFVGQlRTeERRVUZETEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRE96WkNRVU55UXl4RFFVRkRMRU5CUVVFN2VVSkJRMHc3ZDBKQlEwUXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJRenMwUWtGRFZpeEhRVUZITEVWQlFVVXNaMEpCUVUwc1EwRkJReXhYUVVGWE96UkNRVU4yUWl4SlFVRkpMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFBRVUZQTzNsQ1FVTjJRaXhEUVVGRExFTkJRVU03ZDBKQlEwZ3NUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenR4UWtGRGNFSTdlVUpCUVUwN2QwSkJRMGdzVDBGQlR5eE5RVUZOTEVOQlFVTXNjMEpCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0eFFrRkRhRVE3YVVKQlEwbzdjVUpCUVUwN2IwSkJRMGdzVDBGQlR5eE5RVUZOTEVOQlFVTXNSVUZCUXl4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlJTeFBRVUZQTEVWQlFVTXNRMEZCUXl4RFFVRkRPMmxDUVVOMFJEdFpRVU5NTEVOQlFVTTdXVUZEUkN4UlFVRlJPMWxCUTFJc1EwRkJRenRaUVVORUxFbEJRVWtzUlVGQlJUdG5Ra0ZEUml4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJReXhEUVVGRExFTkJRVU03V1VGRGRrUXNRMEZCUXp0VFFVTktMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVZEVMRk5CUVZNc1ZVRkJWVHRKUVVObUxHZENRVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOd1FpeEZRVUZGTEVOQlFVTXNZVUZCWVN4RFFVRkRPMUZCUTJJc1IwRkJSeXhGUVVGRkxHZENRVUZOTEVOQlFVTXNWMEZCY1VJN1MwRkRjRU1zUTBGQlF5eERRVUZETzBsQlEwZ3NTVUZCU1N4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVN1VVRkRja1FzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRMmhETEVWQlFVVXNRMEZCUXl4aFFVRmhMRU5CUVVNN1dVRkRZaXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4blFrRkJaMEk3VTBGREwwSXNRMEZCUXl4RFFVRkJPMHRCUTB3N1FVRkRUQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eEpRVUZKTzBsQlExUXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlF5OUNMRTlCUVU4c1ZVRkJWU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzFsQlEzSkNMRTlCUVU4c1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlFUdFJRVU40UlN4RFFVRkRMRVZCUVVVc1ZVRkJReXhGUVVGblFqdG5Ra0ZCWml4blFrRkJTeXhGUVVGRkxHOUNRVUZQTzFsQlEyWXNjMEpCUVZrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUTNKRExFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVTXNTMEZCU3l4UFFVRkJMRVZCUVVVc1QwRkJUeXhUUVVGQkxFVkJRVU1zUTBGQlF5eERRVUZETzFGQlEzQkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU5LTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN1VVRkRja0lzUTBGQlF5eEZRVUZGTEZWQlFVTXNSVUZCWjBJN1owSkJRV1lzWjBKQlFVc3NSVUZCUlN4dlFrRkJUenRaUVVObUxITkNRVUZaTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dFpRVU55UXl4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRExFdEJRVXNzVDBGQlFTeEZRVUZGTEU5QlFVOHNVMEZCUVN4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1F5eERRVUZETEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1NVRkJTU3hOUVVGQk8wbEJRMG9zVlVGQlZTeFpRVUZCTzBsQlExWXNWVUZCVlN4WlFVRkJPME5CUTJJc1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J6ZEdGMGRYTWdabkp2YlNBbkxpNHZjM1J2Y21VdmMzUmhkSFZ6SjF4dWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ1pYSnliM0pJWVc1a2JHVnlJR1p5YjIwZ0p5NHZaWEp5YjNKSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWElnWm5KdmJTQW5MaTlrZFhKaGRHbHZibEpsY0c5eWRHVnlKMXh1YVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dmNtVnhkV1Z6ZEVoaGJtUnNaWEluWEc1Y2JpOHFJT2VVbitXUnZlV1JxT2FjbitXR2hlV1BxdVdCbXVTNGdPYXNvZWVhaEdOb1pXTnJVMlZ6YzJsdmJpQXFMMXh1YkdWMElHTm9aV05yVTJWemMybHZibEJ5YjIxcGMyVTZJR0Z1ZVNBOUlHNTFiR3c3WEc1Y2JtWjFibU4wYVc5dUlHTm9aV05yVTJWemMybHZiaWdwSUh0Y2JpQWdJQ0JwWmlBb0lXTm9aV05yVTJWemMybHZibEJ5YjIxcGMyVXBJSHRjYmlBZ0lDQWdJQ0FnWTJobFkydFRaWE56YVc5dVVISnZiV2x6WlNBOUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OdmJHVXViRzluS0Z3aWQzZ3VZMmhsWTJ0VFpYTnphVzl1S0NsY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6ZEdGeWRDQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkM2d1WTJobFkydFRaWE56YVc5dUtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkV05qWlhOektDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSG1uSW5tbFlqdnZJemt1SlRsbktqbW5Lem5sSi9sa2IzbGtham1uSi9saG9YbWw2RHBvYnZsaG8zbW80RHBxb3prdW9aY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1poYVd3b0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPZVp1K1c5bGVhQWdlaS9oK2FjbjF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtaV3hUWlhOemFXOXVLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa2IweHZaMmx1S0NrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5TENBb2NtVnpPaUJoYm5rcFBUNTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0hKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0d4bGRHVW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdWdVpDQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUxuSmxjRzl5ZENnbmQzaGZZMmhsWTJ0VFpYTnphVzl1Snl3Z2MzUmhjblFzSUdWdVpDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdOb1pXTnJVMlZ6YzJsdmJsQnliMjFwYzJVN1hHNTlYRzVjYmk4cUlPV0lwT2FXclhObGMzTnBiMjdtbUsvbGtLYmt1THJucWJybWlKYmx0N0xvdjRmbW5KOGdLaTljYm1aMWJtTjBhVzl1SUdselUyVnpjMmx2YmtWNGNHbHlaVTl5Ulcxd2RIa29LU0I3WEc0Z0lDQWdhV1lnS0NGemRHRjBkWE11YzJWemMybHZiaWtnZTF4dUlDQWdJQ0FnSUNBdkx5RGxwb0xtbnB6bnZKUGxyWmprdUszbXNxSG1uSWx6WlhOemFXOXVYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBjblZsWEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2hqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlZScGJXVWdKaVlnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrZ1BpQnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU2tnZTF4dUlDQWdJQ0FnSUNBdkx5RGxwb0xtbnB6bW5Jbm9ycjdudmE3bW5LemxuTEJ6WlhOemFXOXU1N3lUNWEyWTVwZTI2WmUwNzd5TTVMaVU1N3lUNWEyWTVwZTI2WmUwNWJleTVZaXdYRzRnSUNBZ0lDQWdJR1JsYkZObGMzTnBiMjRvS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVmNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR1poYkhObFhHNTlYRzVjYm1aMWJtTjBhVzl1SUdOb1pXTnJURzluYVc0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHbHpVMlZ6YzJsdmJrVjRjR2x5WlU5eVJXMXdkSGtvS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVyS2g1cHlKNTVtNzZabUc1b0NCNzd5TTVMaU42WnlBNkthQjVZYU5ZMmhsWTJ0VFpYTnphVzl1WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjVtYVdjdVpHOU9iM1JEYUdWamExTmxjM05wYjI0Z1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHUnZURzluYVc0b0tTNTBhR1Z1S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTd2dLSEpsY3pvZ1lXNTVLVDArZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURudkpQbHJaamt1SzNtbklselpYTnphVzl1NUxpVTVweXE2TCtINXB5ZlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmU2xjYm4xY2JseHVMeW9nNTVtNzZabUc1cldCNTZpTDU1cUVjSEp2YldselpTQXFMMXh1YkdWMElHeHZaMmx1VUhKdmJXbHpaVG9nWVc1NUlEMGdiblZzYkR0Y2JseHVablZ1WTNScGIyNGdaRzlNYjJkcGJpZ3BJSHRjYmlBZ0lDQnBaaUFvSVd4dloybHVVSEp2YldselpTa2dlMXh1SUNBZ0lDQWdJQ0JzYjJkcGJsQnliMjFwYzJVZ1BTQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzYjJkcGJpZ3BMblJvWlc0b0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4dloybHVVSEp2YldselpTQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTG1OaGRHTm9LQ2h5WlhNcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjJkcGJsQnliMjFwYzJVZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdiRzluYVc1UWNtOXRhWE5sTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJzYjJkcGJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCamIyNXpiMnhsTG14dlp5Z25kM2d1Ykc5bmFXNG5LVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnZDNndWJHOW5hVzRvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5aHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jbVZ6TG1OdlpHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOWtaVEpUWlhOemFXOXVLSEpsY3k1amIyUmxLUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaHlaWE1wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0h0MGFYUnNaVG9nWENMbm1idmx2WlhscExIb3RLVmNJaXdnWENKamIyNTBaVzUwWENJNklGd2k2SyszNTZpTjVaQ082WWVONksrVlcyTnZaR1VnNkk2MzVZK1c1YVN4NkxTbFhWd2lmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiWEJzWlhSbEtDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHVnVaQ0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdWNtVndiM0owS0NkM2VGOXNiMmRwYmljc0lITjBZWEowTENCbGJtUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdaaGFXd29jbVZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2g3ZEdsMGJHVTZJRndpNTVtNzViMlY1YVN4NkxTbFhDSXNJRndpWTI5dWRHVnVkRndpT2lCeVpYTXVaWEp5VFhObmZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dVpuVnVZM1JwYjI0Z2MyVjBVMlZ6YzJsdmJpaHpaWE56YVc5dU9pQnpkSEpwYm1jcElIdGNiaUFnSUNCemRHRjBkWE11YzJWemMybHZiaUE5SUhObGMzTnBiMjQ3WEc0Z0lDQWdMeThnNW8yaTVadWU1cDJsNTVxRWMyVnpjMmx2YnUrOGpPUzRqZW1jZ09pbWdlV0dqV05vWldOclUyVnpjMmx2Ymx4dUlDQWdJR052Ym1acFp5NWtiMDV2ZEVOb1pXTnJVMlZ6YzJsdmJpQTlJSFJ5ZFdVN1hHNGdJQ0FnTHk4ZzVhYUM1cDZjNXB5SjZLNis1NzJ1NXB5czVaeXdjMlZ6YzJsdmJ1aS9oK2FjbithWHR1bVh0Rnh1SUNBZ0lHbG1JQ2hqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlZScGJXVWdKaVlnWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3BJSHRjYmlBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21VZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LU0FySUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaVHRjYmlBZ0lDQWdJQ0FnZDNndWMyVjBVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJQ0FnSUNCclpYazZJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlUb2dVM1J5YVc1bktITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxLVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDFjYmlBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2JpQWdJQ0FnSUNBZ2EyVjVPaUJqYjI1bWFXY3VjMlZ6YzJsdmJrNWhiV1VnWVhNZ2MzUnlhVzVuTEZ4dUlDQWdJQ0FnSUNCa1lYUmhPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJseHVJQ0FnSUgwcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCamIyUmxNbE5sYzNOcGIyNG9ZMjlrWlRvZ2MzUnlhVzVuS1NCN1hHNGdJQ0FnYkdWMElHUmhkR0U2SUdGdWVUdGNiaUFnSUNBdkx5QmpiMlJsVkc5VFpYTnphVzl1TG1SaGRHSG1sSy9taklIbGg3M21sYkJjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG1SaGRHRWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0JrWVhSaElEMGdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1WkdGMFlTZ3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHUmhkR0VnUFNCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNWtZWFJoSUh4OElIdDlPMXh1SUNBZ0lIMWNiaUFnSUNCa1lYUmhXMk52Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG1OdlpHVk9ZVzFsSVYwZ1BTQmpiMlJsTzF4dVhHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiR1YwSUhOMFlYSjBJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hHNGdJQ0FnSUNBZ0lIZDRMbkpsY1hWbGMzUW9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RYSnNPaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNW1iM0p0WVhRb1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVkWEpzS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdFc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WlhSb2IyUTZJR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG0xbGRHaHZaQ0I4ZkNBblIwVlVKeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lITjFZMk5sYzNNb2NtVnpPaUIzZUM1U1pYRjFaWE4wVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hKbGN5NXpkR0YwZFhORGIyUmxJRDA5UFNBeU1EQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc2SUNYNXBlMjVMaUs1b3FsWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1eVpYQnZjblFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQmxibVFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdWNtVndiM0owS0dOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxuSmxjRzl5ZEN3Z2MzUmhjblFzSUdWdVpDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCeklEMGdYQ0pjSWp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhNZ1BTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTV6ZFdOalpYTnpLSEpsY3k1a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tITXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4wWVhSMWN5NXpaWE56YVc5dUlEMGdjenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9hTm91V2JudWFkcGVlYWhITmxjM05wYjI3dnZJemt1STNwbklEb3BvSGxobzFqYUdWamExTmxjM05wYjI1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJtWnBaeTVrYjA1dmRFTm9aV05yVTJWemMybHZiaUE5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURscG9MbW5wem1uSW5vcnI3bnZhN21uS3psbkxCelpYTnphVzl1NkwrSDVweWY1cGUyNlplMFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbElDWW1JR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21VZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LU0FySUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ1UzUnlhVzVuS0hOMFlYUjFjeTV6WlhOemFXOXVSWGh3YVhKbEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IzZUM1elpYUlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JyWlhrNklHTnZibVpwWnk1elpYTnphVzl1VG1GdFpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaE9pQnpkR0YwZFhNdWMyVnpjMmx2Ymx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2hsY25KdmNraGhibVJzWlhJdVoyVjBSWEp5YjNKTmMyY29jbVZ6S1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSHQwYVhSc1pUb2dYQ0xubWJ2bHZaWGxwTEhvdEtWY0lpd2dYQ0pqYjI1MFpXNTBYQ0k2SUZ3aTZLKzM1NmlONVpDTzZZZU42SytWWENKOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkRvZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9lM1JwZEd4bE9pQmNJdWVadStXOWxlV2tzZWkwcFZ3aUxDQmNJbU52Ym5SbGJuUmNJam9nWENMb3I3Zm5xSTNsa0k3cGg0M29yNVZjSW4wcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgwcFhHNTlYRzVjYmk4cUlPYTRoZWVwdW5ObGMzTnBiMjRnS2k5Y2JtWjFibU4wYVc5dUlHUmxiRk5sYzNOcGIyNG9LU0I3WEc0Z0lDQWdjM1JoZEhWekxuTmxjM05wYjI0Z1BTQW5KenRjYmlBZ0lDQjNlQzV5WlcxdmRtVlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdhMlY1T2lCamIyNW1hV2N1YzJWemMybHZiazVoYldVZ1lYTWdjM1J5YVc1blhHNGdJQ0FnZlNrN1hHNGdJQ0FnYVdZZ0tHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlNBbUppQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVNrZ2UxeHVJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU0E5SUVsdVptbHVhWFI1TzF4dUlDQWdJQ0FnSUNCM2VDNXlaVzF2ZG1WVGRHOXlZV2RsS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3RsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGxjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJRzFoYVc0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR05vWldOclRHOW5hVzRvS1M1MGFHVnVLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJqYjI1bWFXY3VaRzlPYjNSRGFHVmphMU5sYzNOcGIyNGdQeUJRY205dGFYTmxMbkpsYzI5c2RtVW9LU0E2SUdOb1pXTnJVMlZ6YzJsdmJpZ3BYRzRnSUNBZ0lDQWdJSDBzSUNoN2RHbDBiR1VzSUdOdmJuUmxiblI5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZja2hoYm1Sc1pYSXVaRzlGY25KdmNpaDBhWFJzWlN3Z1kyOXVkR1Z1ZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBhWFJzWlN3Z1kyOXVkR1Z1ZEgwcE8xeHVJQ0FnSUNBZ0lDQjlLUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJSDBzSUNoN2RHbDBiR1VzSUdOdmJuUmxiblI5S1QwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWeWNtOXlTR0Z1Wkd4bGNpNWtiMFZ5Y205eUtIUnBkR3hsTENCamIyNTBaVzUwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2UzUnBkR3hsTENCamIyNTBaVzUwZlNrN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJRzFoYVc0c1hHNGdJQ0FnYzJWMFUyVnpjMmx2Yml4Y2JpQWdJQ0JrWld4VFpYTnphVzl1WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICBzZXNzaW9uTmFtZTogXCJzZXNzaW9uXCIsXG4gICAgbG9naW5UcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGNvZGVUb1Nlc3Npb246IHtcbiAgICAgICAgdXJsOiBcIlwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9LFxuICAgIHN1Y2Nlc3NUcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgdXJsUGVyZml4OiBcIlwiLFxuICAgIGRvTm90Q2hlY2tTZXNzaW9uOiBmYWxzZSxcbiAgICBlcnJvclRpdGxlOiBcIuaTjeS9nOWksei0pVwiLFxuICAgIGVycm9yQ29udGVudDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgcmVMb2dpbkxpbWl0OiAzLFxuICAgIGVycm9yQ2FsbGJhY2s6IG51bGwsXG4gICAgcmVwb3J0Q0dJOiBmYWxzZSxcbiAgICBtb2NrSnNvbjogZmFsc2UsXG4gICAgZ2xvYmFsRGF0YTogZmFsc2UsXG4gICAgc2Vzc2lvbkV4cGlyZUtleTogXCJzZXNzaW9uRXhwaXJlS2V5XCJcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWZhdWx0Q29uZmlnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dVptbG5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzTjBiM0psTDJOdmJtWnBaeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVVkJMRWxCUVUwc1lVRkJZU3hIUVVGblFqdEpRVU12UWl4WFFVRlhMRVZCUVVVc1UwRkJVenRKUVVOMFFpeFpRVUZaTzFGQlExSXNUMEZCVHl4TFFVRkxMRU5CUVVFN1NVRkRhRUlzUTBGQlF6dEpRVU5FTEdGQlFXRXNSVUZCUlR0UlFVTllMRWRCUVVjc1JVRkJSU3hGUVVGRk8xRkJRMUFzVDBGQlR5eEZRVUZGTEdOQlFVMHNRMEZCUXp0TFFVTnVRanRKUVVORUxHTkJRV003VVVGRFZpeFBRVUZQTEVsQlFVa3NRMEZCUVR0SlFVTm1MRU5CUVVNN1NVRkRSQ3hUUVVGVExFVkJRVVVzUlVGQlJUdEpRVU5pTEdsQ1FVRnBRaXhGUVVGRkxFdEJRVXM3U1VGRGVFSXNWVUZCVlN4RlFVRkZMRTFCUVUwN1NVRkRiRUlzV1VGQldTeFpRVUZETEVkQlFWRTdVVUZEYWtJc1QwRkJUeXhIUVVGSExFTkJRVUU3U1VGRFpDeERRVUZETzBsQlEwUXNXVUZCV1N4RlFVRkZMRU5CUVVNN1NVRkRaaXhoUVVGaExFVkJRVVVzU1VGQlNUdEpRVU51UWl4VFFVRlRMRVZCUVVVc1MwRkJTenRKUVVOb1FpeFJRVUZSTEVWQlFVVXNTMEZCU3p0SlFVTm1MRlZCUVZVc1JVRkJSU3hMUVVGTE8wbEJSV3BDTEdkQ1FVRm5RaXhGUVVGRkxHdENRVUZyUWp0RFFVTjJReXhEUVVGRE8wRkJSVVlzYTBKQlFXVXNZVUZCWVN4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHNnU1VsdWFYUlBjSFJwYjI0Z2ZTQm1jbTl0SUNjdUxpOXBiblJsY21aaFkyVW5YRzVjYm1OdmJuTjBJR1JsWm1GMWJIUkRiMjVtYVdjNklFbEpibWwwVDNCMGFXOXVJRDBnZTF4dUlDQWdJSE5sYzNOcGIyNU9ZVzFsT2lCY0luTmxjM05wYjI1Y0lpeGNiaUFnSUNCc2IyZHBibFJ5YVdkblpYSW9LU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpWeHVJQ0FnSUgwc1hHNGdJQ0FnWTI5a1pWUnZVMlZ6YzJsdmJqb2dlMXh1SUNBZ0lDQWdJQ0IxY213NklGd2lYQ0lzWEc0Z0lDQWdJQ0FnSUhOMVkyTmxjM002SUNncFBUNGdlMzFjYmlBZ0lDQjlMRnh1SUNBZ0lITjFZMk5sYzNOVWNtbG5aMlZ5S0NrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVnh1SUNBZ0lIMHNYRzRnSUNBZ2RYSnNVR1Z5Wm1sNE9pQmNJbHdpTEZ4dUlDQWdJR1J2VG05MFEyaGxZMnRUWlhOemFXOXVPaUJtWVd4elpTeGNiaUFnSUNCbGNuSnZjbFJwZEd4bE9pQmNJdWFUamVTOW5PV2tzZWkwcFZ3aUxGeHVJQ0FnSUdWeWNtOXlRMjl1ZEdWdWRDaHlaWE02SUdGdWVTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6WEc0Z0lDQWdmU3hjYmlBZ0lDQnlaVXh2WjJsdVRHbHRhWFE2SURNc1hHNGdJQ0FnWlhKeWIzSkRZV3hzWW1GamF6b2diblZzYkN4Y2JpQWdJQ0J5WlhCdmNuUkRSMGs2SUdaaGJITmxMRnh1SUNBZ0lHMXZZMnRLYzI5dU9pQm1ZV3h6WlN4Y2JpQWdJQ0JuYkc5aVlXeEVZWFJoT2lCbVlXeHpaU3hjYmlBZ0lDQXZMeUJ6WlhOemFXOXU1WnlvNXB5czVaeXc1N3lUNWEyWTU1cUVhMlY1WEc0Z0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlV0bGVUb2dYQ0p6WlhOemFXOXVSWGh3YVhKbFMyVjVYQ0pjYm4wN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHUmxabUYxYkhSRGIyNW1hV2M3WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXNzaW9uOiAnJyxcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMzUmhkSFZ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwzTjBZWFIxY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTEd0Q1FVRmxPMGxCUTFnc1QwRkJUeXhGUVVGRkxFVkJRVms3U1VGRmNrSXNZVUZCWVN4RlFVRkZMRkZCUVd0Q08wTkJRemRDTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVnpjMmx2YmpvZ0p5Y2dZWE1nYzNSeWFXNW5MRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN292NGZtbkovbm1vVG1sN2JwbDdUbmdybGNiaUFnSUNCelpYTnphVzl1Ulhod2FYSmxPaUJKYm1acGJtbDBlU0JoY3lCdWRXMWlaWEpjYm4wZ1lYTWdZVzU1WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHNob3codHh0KSB7XG4gICAgd3guc2hvd1RvYXN0KHtcbiAgICAgICAgdGl0bGU6IHR5cGVvZiB0eHQgPT09ICdib29sZWFuJyA/ICfliqDovb3kuK0nIDogdHh0LFxuICAgICAgICBpY29uOiAnbG9hZGluZycsXG4gICAgICAgIG1hc2s6IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiA2MDAwMFxuICAgIH0pO1xufVxuZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB3eC5oaWRlVG9hc3Qoe30pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNob3c6IHNob3csXG4gICAgaGlkZTogaGlkZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOWhaR2x1Wnk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc0wyeHZZV1JwYm1jdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4VFFVRlRMRWxCUVVrc1EwRkJReXhIUVVGeFFqdEpRVU12UWl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJRMVFzUzBGQlN5eEZRVUZGTEU5QlFVOHNSMEZCUnl4TFFVRkxMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhPMUZCUXpkRExFbEJRVWtzUlVGQlJTeFRRVUZUTzFGQlEyWXNTVUZCU1N4RlFVRkZMRWxCUVVrN1VVRkRWaXhSUVVGUkxFVkJRVVVzUzBGQlN6dExRVU5zUWl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eEpRVUZKTzBsQlExUXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU55UWl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEpRVUZKTEUxQlFVRTdTVUZEU2l4SlFVRkpMRTFCUVVFN1EwRkRVQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMmh2ZHloMGVIUTZJR0p2YjJ4bFlXNGdmQ0J6ZEhKcGJtY3BJSHRjYmlBZ0lDQjNlQzV6YUc5M1ZHOWhjM1FvZTF4dUlDQWdJQ0FnSUNCMGFYUnNaVG9nZEhsd1pXOW1JSFI0ZENBOVBUMGdKMkp2YjJ4bFlXNG5JRDhnSitXS29PaTl2ZVM0clNjZ09pQjBlSFFzWEc0Z0lDQWdJQ0FnSUdsamIyNDZJQ2RzYjJGa2FXNW5KeXhjYmlBZ0lDQWdJQ0FnYldGemF6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI0NklEWXdNREF3WEc0Z0lDQWdmU2xjYm4xY2JseHVablZ1WTNScGIyNGdhR2xrWlNncElIdGNiaUFnSUNCM2VDNW9hV1JsVkc5aGMzUW9lMzBwTzF4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyaHZkeXhjYmlBZ0lDQm9hV1JsWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gc2V0UGFyYW1zKHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICB2YXIgcXVlcnlTdHJpbmdJbmRleCA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgICB2YXIga3ZwID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICB2YXIgb2xkUXVlcnlTdHJpbmdfMSA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgb2xkUXVlcnlTdHJpbmdfMS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICB2YXIga3YgPSBvbGRRdWVyeVN0cmluZ18xW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGt2cCA9IF9fYXNzaWduKHt9LCBrdnAsIHBhcmFtcyk7XG4gICAgdmFyIHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmtleXMoa3ZwKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSArIFwiPVwiICsgZW5jb2RlVVJJKGt2cFtrZXldKTtcbiAgICB9KVxuICAgICAgICAuam9pbihcIiZcIik7XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gdXJsLnN1YnN0cmluZygwLCBxdWVyeVN0cmluZ0luZGV4ICsgMSkgKyBxdWVyeVN0cmluZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1cmwgKyBcIj9cIiArIHF1ZXJ5U3RyaW5nO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXRQYXJhbXM6IHNldFBhcmFtc1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYSnNMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzVjBhV3d2ZFhKc0xuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3UVVGQlFTeFRRVUZUTEZOQlFWTXNRMEZCUXl4SFFVRm5RaXhGUVVGRkxFMUJRV003U1VGQmFFTXNiMEpCUVVFc1JVRkJRU3hSUVVGblFqdEpRVU12UWl4SlFVRk5MR2RDUVVGblFpeEhRVUZYTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGJFUXNTVUZCU1N4SFFVRkhMRWRCUVZFc1JVRkJSU3hEUVVGRE8wbEJRMnhDTEVsQlFVa3NaMEpCUVdkQ0xFbEJRVWtzUTBGQlF5eEZRVUZGTzFGQlEzWkNMRWxCUVUwc1owSkJRV01zUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVVZ1UlN4blFrRkJZeXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUTNoQ0xFbEJRVTBzUlVGQlJTeEhRVUZoTEdkQ1FVRmpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJ4RUxFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZGtJc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRFRqdEpRVVZFTEVkQlFVY3NaMEpCUVU4c1IwRkJSeXhGUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETzBsQlJURkNMRWxCUVUwc1YwRkJWeXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMU5CUXk5Q0xFZEJRVWNzUTBGQlF5eFZRVUZCTEVkQlFVYzdVVUZEU2l4UFFVRlZMRWRCUVVjc1UwRkJTU3hUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkhMRU5CUVVNN1NVRkRNME1zUTBGQlF5eERRVUZETzFOQlEwUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSV1lzU1VGQlNTeG5Ra0ZCWjBJc1NVRkJTU3hEUVVGRExFVkJRVVU3VVVGRGRrSXNUMEZCVHl4SFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeG5Ra0ZCWjBJc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eFhRVUZYTEVOQlFVTTdTMEZETDBRN1UwRkJUVHRSUVVOSUxFOUJRVThzUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4WFFVRlhMRU5CUVVNN1MwRkRiRU03UVVGRFRDeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hUUVVGVExGZEJRVUU3UTBGRFdpeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpuVnVZM1JwYjI0Z2MyVjBVR0Z5WVcxektIVnliRG9nYzNSeWFXNW5JRDBnWENKY0lpd2djR0Z5WVcxek9pQnZZbXBsWTNRcElIdGNiaUFnSUNCamIyNXpkQ0J4ZFdWeWVWTjBjbWx1WjBsdVpHVjRPaUJ1ZFcxaVpYSWdQU0IxY213dWFXNWtaWGhQWmloY0lqOWNJaWs3WEc0Z0lDQWdiR1YwSUd0MmNEb2dZVzU1SUQwZ2UzMDdYRzRnSUNBZ2FXWWdLSEYxWlhKNVUzUnlhVzVuU1c1a1pYZ2dQajBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdmJHUlJkV1Z5ZVZOMGNtbHVaeUE5SUhWeWJDNXpkV0p6ZEhJb2NYVmxjbmxUZEhKcGJtZEpibVJsZUNBcklERXBMbk53YkdsMEtGd2lKbHdpS1R0Y2JpQWdJQ0FnSUNBZ0x5OGdRSFJ6TFdsbmJtOXlaVnh1SUNBZ0lDQWdJQ0J2YkdSUmRXVnllVk4wY21sdVp5NW1iM0pGWVdOb0tDaDRMQ0JwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JyZGpvZ2MzUnlhVzVuVzEwZ1BTQnZiR1JSZFdWeWVWTjBjbWx1WjF0cFhTNXpjR3hwZENoY0lqMWNJaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnJkbkJiYTNaYk1GMWRJRDBnYTNaYk1WMDdYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3QyY0NBOUlIc3VMaTVyZG5Bc0lDNHVMbkJoY21GdGMzMDdYRzVjYmlBZ0lDQmpiMjV6ZENCeGRXVnllVk4wY21sdVp5QTlJRTlpYW1WamRDNXJaWGx6S0d0MmNDbGNiaUFnSUNBZ0lDQWdMbTFoY0NoclpYa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQWtlMnRsZVgwOUpIdGxibU52WkdWVlVra29hM1p3VzJ0bGVWMHBmV0E3WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnSUNBZ0lDNXFiMmx1S0Z3aUpsd2lLVHRjYmx4dUlDQWdJR2xtSUNoeGRXVnllVk4wY21sdVowbHVaR1Y0SUQ0OUlEQXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFZ5YkM1emRXSnpkSEpwYm1jb01Dd2djWFZsY25sVGRISnBibWRKYm1SbGVDQXJJREVwSUNzZ2NYVmxjbmxUZEhKcGJtYzdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDQXJJRndpUDF3aUlDc2djWFZsY25sVGRISnBibWM3WEc0Z0lDQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hHNGdJQ0FnYzJWMFVHRnlZVzF6WEc1OU8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdmVyc2lvbiA9IF9fVkVSU0lPTl9fO1xuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRtVnljMmx2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OTJaWEp6YVc5dUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUlVFc1NVRkJUU3hQUVVGUExFZEJRVWNzVjBGQlZ5eERRVUZETzBGQlJXNUNMREJDUVVGUElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2laR1ZqYkdGeVpTQmpiMjV6ZENCZlgxWkZVbE5KVDA1Zlh6b2djM1J5YVc1bk8xeHVYRzVqYjI1emRDQjJaWEp6YVc5dUlEMGdYMTlXUlZKVFNVOU9YMTg3WEc1Y2JtVjRjRzl5ZENCN0lIWmxjbk5wYjI0Z2ZUdGNiaUpkZlE9PSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhdGNoSGFuZGxlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2xvYWRpbmcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3V0aWwvdXJsLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCwyQ0FBMkMsKzNCOzs7Ozs7Ozs7Ozs7QUNaOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLG1hOzs7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsdS9FOzs7Ozs7Ozs7Ozs7QUN4QzlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsY0FBYyxPQUFXO0FBQ3pCO0FBQ0EsMkNBQTJDLHVXIiwiZmlsZSI6IndlUmVxdWVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdXJsUGVyZml4OiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZVRpbWU6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUsXG4gICAgICAgIHNlc3Npb25FeHBpcmVLZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlXG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWjJWMFEyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMkZ3YVM5blpYUkRiMjVtYVdjdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVc5RE8wRkJSWEJETEcxQ1FVRmxPMGxCUTFnc1QwRkJUenRSUVVOSUxGTkJRVk1zUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRk5CUVZNN1VVRkRNMElzYVVKQlFXbENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJN1VVRkRNME1zWjBKQlFXZENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJN1VVRkRla01zWVVGQllTeEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1lVRkJZVHRMUVVOMFF5eERRVUZCTzBGQlEwd3NRMEZCUXl4RlFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYzNSaGRIVnpJR1p5YjIwZ0p5NHVMM04wYjNKbEwzTjBZWFIxY3lkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tDa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJSFZ5YkZCbGNtWnBlRG9nWTI5dVptbG5MblZ5YkZCbGNtWnBlQ3hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpWUnBiV1U2SUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU3hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpVdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3NYRzRnSUNBZ0lDQWdJSE5sYzNOcGIyNUZlSEJwY21VNklITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxYRzRnSUNBZ2ZWeHVmVHRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb247XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZaMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVVZ3UXl4dFFrRkJaVHRKUVVOWUxFOUJRVThzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVFN1FVRkRla0lzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElDZ3BJRDArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjM1JoZEhWekxuTmxjM05wYjI1Y2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnXzEuZGVmYXVsdCwgcGFyYW1zKTtcbiAgICB0cnkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lKSB8fCAnJztcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignd3guZ2V0U3RvcmFnZVN5bmM6ZmFpbCwgY2FuIG5vdCBnZXQgc2Vzc2lvbi4nKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5IHx8IFwic2Vzc2lvbkV4cGlyZUtleVwiKSB8fCBJbmZpbml0eTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignd3guZ2V0U3RvcmFnZVN5bmM6ZmFpbCwgY2FuIG5vdCBnZXQgc2Vzc2lvbkV4cGlyZS4nKTtcbiAgICB9XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNXBkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YVc1cGRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc2JVSkJRV1VzVlVGQlF5eE5RVUZ0UWp0SlFVTXZRaXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRE9VSXNTVUZCU1R0UlFVTkJMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXl4alFVRmpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eFhRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1MwRkRha1U3U1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0UlFVTlNMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zT0VOQlFUaERMRU5CUVVNc1EwRkJRVHRMUVVOb1JUdEpRVU5FTEVsQlFVazdVVUZEUVN4blFrRkJUU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEZRVUZGTEVOQlFVTXNZMEZCWXl4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENMRWxCUVVrc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4UlFVRlJMRU5CUVVNN1MwRkRka2M3U1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0UlFVTlNMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zYjBSQlFXOUVMRU5CUVVNc1EwRkJRVHRMUVVOMFJUdEJRVU5NTEVOQlFVTXNSVUZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YRzVwYlhCdmNuUWdleUJKU1c1cGRFOXdkR2x2YmlCOUlHWnliMjBnSnk0dUwybHVkR1Z5Wm1GalpTZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLSEJoY21GdGN6b2dTVWx1YVhSUGNIUnBiMjRwSUQwK0lIdGNiaUFnSUNCUFltcGxZM1F1WVhOemFXZHVLR052Ym1acFp5d2djR0Z5WVcxektUdGNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJpQTlJSGQ0TG1kbGRGTjBiM0poWjJWVGVXNWpLR052Ym1acFp5NXpaWE56YVc5dVRtRnRaU0VwSUh4OElDY25PMXh1SUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpZ25kM2d1WjJWMFUzUnZjbUZuWlZONWJtTTZabUZwYkN3Z1kyRnVJRzV2ZENCblpYUWdjMlZ6YzJsdmJpNG5LVnh1SUNBZ0lIMWNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNBOUlIZDRMbWRsZEZOMGIzSmhaMlZUZVc1aktHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1SUh4OElGd2ljMlZ6YzJsdmJrVjRjR2x5WlV0bGVWd2lLU0I4ZkNCSmJtWnBibWwwZVR0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvSjNkNExtZGxkRk4wYjNKaFoyVlRlVzVqT21aaGFXd3NJR05oYmlCdWIzUWdaMlYwSUhObGMzTnBiMjVGZUhCcGNtVXVKeWxjYmlBZ0lDQjlYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKCk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOW5hVzR1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZZWEJwTDJ4dloybHVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNa1JCUVhGRU8wRkJSWEpFTEcxQ1FVRmxPMGxCUTFnc1QwRkJUeXgzUWtGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkJPMEZCUTJoRExFTkJRVU1zUlVGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnpaWE56YVc5dVRXRnVZV2RsY2lCbWNtOXRJQ2N1TGk5dGIyUjFiR1V2YzJWemMybHZiazFoYm1GblpYSW5YRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJQ2dwSUQwK0lIdGNiaUFnSUNCeVpYUjFjbTRnYzJWemMybHZiazFoYm1GblpYSXViV0ZwYmlncFhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnJlcXVlc3Qob2JqKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WeGRXVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2Y21WeGRXVnpkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGRExFZEJRVzFDTzBsQlF5OUNMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1FVRkRkRU1zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1SUgwZ1puSnZiU0FuTGk0dmFXNTBaWEptWVdObEoxeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaWtnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNXlaWEYxWlhOMEtHOWlhaWxjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvc2Vzc2lvbk1hbmFnZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuc2V0U2Vzc2lvbihzZXNzaW9uKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWMFUyVnpjMmx2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmMyVjBVMlZ6YzJsdmJpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVVnlSQ3h0UWtGQlpTeFZRVUZETEU5QlFXVTdTVUZETTBJc2QwSkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRka01zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhObGMzTnBiMjVOWVc1aFoyVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXpaWE56YVc5dVRXRnVZV2RsY2lkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tITmxjM05wYjI0NklITjBjbWx1WnlrZ1BUNGdlMXh1SUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG5ObGRGTmxjM05wYjI0b2MyVnpjMmx2YmlrN1hHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnVwbG9hZEZpbGUob2JqKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhCc2IyRmtSbWxzWlM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmRYQnNiMkZrUm1sc1pTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVZHlSQ3h0UWtGQlpTeFZRVUZETEVkQlFYTkNPMGxCUTJ4RExFOUJRVThzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3UVVGRGVrTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5eVpYRjFaWE4wU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0I3SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0FvYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQnlaWEYxWlhOMFNHRnVaR3hsY2k1MWNHeHZZV1JHYVd4bEtHOWlhaWxjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgaW5pdF8xID0gcmVxdWlyZShcIi4vYXBpL2luaXRcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4vYXBpL3JlcXVlc3RcIik7XG52YXIgdXBsb2FkRmlsZV8xID0gcmVxdWlyZShcIi4vYXBpL3VwbG9hZEZpbGVcIik7XG52YXIgc2V0U2Vzc2lvbl8xID0gcmVxdWlyZShcIi4vYXBpL3NldFNlc3Npb25cIik7XG52YXIgbG9naW5fMSA9IHJlcXVpcmUoXCIuL2FwaS9sb2dpblwiKTtcbnZhciBnZXRTZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0U2Vzc2lvblwiKTtcbnZhciBnZXRDb25maWdfMSA9IHJlcXVpcmUoXCIuL2FwaS9nZXRDb25maWdcIik7XG52YXIgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbnZhciB3ZVJlcXVlc3RPYmplY3QgPSB7XG4gICAgaW5pdDogaW5pdF8xLmRlZmF1bHQsXG4gICAgcmVxdWVzdDogcmVxdWVzdF8xLmRlZmF1bHQsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZV8xLmRlZmF1bHQsXG4gICAgc2V0U2Vzc2lvbjogc2V0U2Vzc2lvbl8xLmRlZmF1bHQsXG4gICAgbG9naW46IGxvZ2luXzEuZGVmYXVsdCxcbiAgICBnZXRTZXNzaW9uOiBnZXRTZXNzaW9uXzEuZGVmYXVsdCxcbiAgICBnZXRDb25maWc6IGdldENvbmZpZ18xLmRlZmF1bHQsXG4gICAgdmVyc2lvbjogdmVyc2lvbl8xLnZlcnNpb25cbn07XG5leHBvcnRzLmRlZmF1bHQgPSB3ZVJlcXVlc3RPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4dFEwRkJOa0k3UVVGRE4wSXNlVU5CUVcxRE8wRkJRMjVETEN0RFFVRjVRenRCUVVONlF5d3JRMEZCZVVNN1FVRkRla01zY1VOQlFTdENPMEZCUXk5Q0xDdERRVUY1UXp0QlFVTjZReXcyUTBGQmRVTTdRVUZGZGtNc2NVTkJRVzFETzBGQlJXNURMRWxCUVUwc1pVRkJaU3hIUVVGak8wbEJRMnBETEVsQlFVa3NaMEpCUVVFN1NVRkRTaXhQUVVGUExHMUNRVUZCTzBsQlExQXNWVUZCVlN4elFrRkJRVHRKUVVOV0xGVkJRVlVzYzBKQlFVRTdTVUZEVml4TFFVRkxMR2xDUVVGQk8wbEJRMHdzVlVGQlZTeHpRa0ZCUVR0SlFVTldMRk5CUVZNc2NVSkJRVUU3U1VGRFZDeFBRVUZQTEcxQ1FVRkJPME5CUTFJc1EwRkJRenRCUVVWR0xHdENRVUZsTEdWQlFXVXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCcGJtbDBJR1p5YjIwZ1hDSXVMMkZ3YVM5cGJtbDBYQ0pjYm1sdGNHOXlkQ0J5WlhGMVpYTjBJR1p5YjIwZ1hDSXVMMkZ3YVM5eVpYRjFaWE4wWENKY2JtbHRjRzl5ZENCMWNHeHZZV1JHYVd4bElHWnliMjBnWENJdUwyRndhUzkxY0d4dllXUkdhV3hsWENKY2JtbHRjRzl5ZENCelpYUlRaWE56YVc5dUlHWnliMjBnWENJdUwyRndhUzl6WlhSVFpYTnphVzl1WENKY2JtbHRjRzl5ZENCc2IyZHBiaUJtY205dElGd2lMaTloY0drdmJHOW5hVzVjSWx4dWFXMXdiM0owSUdkbGRGTmxjM05wYjI0Z1puSnZiU0JjSWk0dllYQnBMMmRsZEZObGMzTnBiMjVjSWx4dWFXMXdiM0owSUdkbGRFTnZibVpwWnlCbWNtOXRJRndpTGk5aGNHa3ZaMlYwUTI5dVptbG5YQ0pjYm1sdGNHOXlkQ0I3SUhkbFVtVnhkV1Z6ZENCOUlHWnliMjBnWENJdUwybHVkR1Z5Wm1GalpWd2lYRzVwYlhCdmNuUWdleUIyWlhKemFXOXVJSDBnWm5KdmJTQW5MaTkyWlhKemFXOXVKMXh1WEc1amIyNXpkQ0IzWlZKbGNYVmxjM1JQWW1wbFkzUTZJSGRsVW1WeGRXVnpkQ0E5SUh0Y2JpQWdhVzVwZEN4Y2JpQWdjbVZ4ZFdWemRDeGNiaUFnZFhCc2IyRmtSbWxzWlN4Y2JpQWdjMlYwVTJWemMybHZiaXhjYmlBZ2JHOW5hVzRzWEc0Z0lHZGxkRk5sYzNOcGIyNHNYRzRnSUdkbGRFTnZibVpwWnl4Y2JpQWdkbVZ5YzJsdmJseHVmVHRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZDJWU1pYRjFaWE4wVDJKcVpXTjBPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHd4LmdldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZXMuZGF0YSkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlcy5kYXRhLCB7IGlzQ2FjaGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXQob2JqLCByZWFsRGF0YSkge1xuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHxcbiAgICAgICAgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVhbERhdGEpKSkge1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgICAgIGRhdGE6IHJlYWxEYXRhXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldCxcbiAgICBzZXQ6IHNldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyRmphR1ZOWVc1aFoyVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5allXTm9aVTFoYm1GblpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGRlFTeFRRVUZUTEVkQlFVY3NRMEZCUXl4SFFVRnRRanRKUVVNMVFpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSVHRSUVVOb1FpeFBRVUZQTzB0QlExWTdTVUZEUkN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xRkJRMVlzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4VFFVRlRPMUZCUTJ4Q0xFOUJRVThzV1VGQlJTeEhRVUZITzFsQlExSXNTVUZEU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFbEJRVWs3WjBKQlEyeENMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEZWQlFWVXNTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVTXhSRHRuUWtGRFJTeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRTlCUVU4c1MwRkJTeXhWUVVGVkxFVkJRVVU3YjBKQlEyNURMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZCTzJsQ1FVTjZRenRoUVVOS08xbEJRMFFzU1VGQlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yZENRVU51UXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03WVVGRGJFSTdVVUZEVEN4RFFVRkRPMHRCUTBvc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWRCUVcxQ0xFVkJRVWNzVVVGQmVVSTdTVUZEZUVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVTdVVUZEYUVJc1QwRkJUenRMUVVOV08wbEJRMFFzU1VGRFNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrN1VVRkRiRUlzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4TFFVRkxMRXRCUVVzc1ZVRkJWU3hKUVVGSkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkRNVVE3VVVGRFJTeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMWxCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eFRRVUZUTzFsQlEyeENMRWxCUVVrc1JVRkJSU3hSUVVGUk8xTkJRMnBDTEVOQlFVTXNRMEZCUVR0TFFVTk1PMEZCUTB3c1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NSMEZCUnl4TFFVRkJPMGxCUTBnc1IwRkJSeXhMUVVGQk8wTkJRMDRzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpWEc1Y2JtWjFibU4wYVc5dUlHZGxkQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1S1NCN1hHNGdJQ0FnYVdZZ0tDRnZZbW91YjNKcFoybHVWWEpzS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc0Z0lDQWdkM2d1WjJWMFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lHdGxlVG9nYjJKcUxtOXlhV2RwYmxWeWJDeGNiaUFnSUNBZ0lDQWdjM1ZqWTJWemN5QW9jbVZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbU5oWTJobElEMDlQU0IwY25WbElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdLSFI1Y0dWdlppQnZZbW91WTJGamFHVWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpQW1KaUJ2WW1vdVkyRmphR1VvY21WekxtUmhkR0VwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VjM1ZqWTJWemN5QTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNXpkV05qWlhOektISmxjeTVrWVhSaExDQjdhWE5EWVdOb1pUb2dkSEoxWlgwcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lvZEhsd1pXOW1JRzlpYWk1amIyMXdiR1YwWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbU52YlhCc1pYUmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnpaWFFvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlBc0lISmxZV3hFWVhSaE9pQnpkSEpwYm1jZ2ZDQnZZbXBsWTNRcElIdGNiaUFnSUNCcFppQW9JVzlpYWk1dmNtbG5hVzVWY213cElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb1hHNGdJQ0FnSUNBZ0lHOWlhaTVqWVdOb1pTQTlQVDBnZEhKMVpTQjhmRnh1SUNBZ0lDQWdJQ0FvZEhsd1pXOW1JRzlpYWk1allXTm9aU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lJQ1ltSUc5aWFpNWpZV05vWlNoeVpXRnNSR0YwWVNrcFhHNGdJQ0FnS1NCN1hHNGdJQ0FnSUNBZ0lIZDRMbk5sZEZOMGIzSmhaMlVvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCdlltb3ViM0pwWjJsdVZYSnNMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nY21WaGJFUmhkR0ZjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCblpYUXNYRzRnSUNBZ2MyVjBYRzU5TzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbmZ1bmN0aW9uIGNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdCkge1xuICAgIHZhciB0eXBlID0gZS50eXBlLCByZXMgPSBlLnJlcztcbiAgICBpZiAob2JqLmNhdGNoRXJyb3IpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdodHRwLWVycm9yJykge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihyZXMuc3RhdHVzQ29kZS50b1N0cmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3VwbG9hZC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgdmFyIG1zZyA9IGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IobXNnLmNvbnRlbnQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgZS5yZXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuY2F0Y2hIYW5kbGVyID0gY2F0Y2hIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJGMFkyaElZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlqWVhSamFFaGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZEUVN3clEwRkJNRU03UVVGUE1VTXNVMEZCVXl4WlFVRlpMRU5CUVVNc1EwRkJZU3hGUVVGRkxFZEJRWFZETEVWQlFVVXNUVUZCT0VJN1NVRkRhRWNzU1VGQlFTeGhRVUZKTEVWQlFVVXNWMEZCUnl4RFFVRk5PMGxCUTNaQ0xFbEJRVWtzUjBGQlJ5eERRVUZETEZWQlFWVXNSVUZCUlR0UlFVTm9RaXhKUVVGSkxFbEJRVWtzUzBGQlN5eFpRVUZaTEVWQlFVVTdXVUZEZGtJc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEyaEVPMkZCUVUwc1NVRkJTU3hKUVVGSkxFdEJRVXNzWTBGQll5eEZRVUZGTzFsQlEyaERMRTFCUVUwc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUXpGQ08yRkJRVTBzU1VGQlNTeEpRVUZKTEV0QlFVc3NZVUZCWVN4RlFVRkZPMWxCUXk5Q0xFbEJRVWtzUjBGQlJ5eEhRVUZITEhOQ1FVRlpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaERMRTFCUVUwc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOc1F6dExRVU5LTzFOQlFVMDdVVUZEU0N4elFrRkJXU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wdEJRM1pETzBGQlJVd3NRMEZCUXp0QlFVTlJMRzlEUVVGWklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dWFXMXdiM0owSUdWeWNtOXlTR0Z1Wkd4bGNpQm1jbTl0SUZ3aUxpOWxjbkp2Y2toaGJtUnNaWEpjSWp0Y2JseHVkSGx3WlNCVWFISnZkMFZ5Y205eVZIbHdaU0E5SUNkMWNHeHZZV1F0WlhKeWIzSW5JSHdnSjJ4dloybGpMV1Z5Y205eUp5QjhJQ2RvZEhSd0xXVnljbTl5SjF4dWFXNTBaWEptWVdObElGUm9jbTkzUlhKeWIzSWdlMXh1SUNBZ0lIUjVjR1U2SUZSb2NtOTNSWEp5YjNKVWVYQmxYRzRnSUNBZ2NtVnpPaUJoYm5sY2JuMWNibVoxYm1OMGFXOXVJR05oZEdOb1NHRnVaR3hsY2lobE9pQlVhSEp2ZDBWeWNtOXlMQ0J2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0c0lISmxhbVZqZERvZ0tISmxZWE52Ymo4NklHRnVlU2tnUFQ0Z2RtOXBaQ2tnZTF4dUlDQWdJR052Ym5OMElIc2dkSGx3WlN3Z2NtVnpJSDBnUFNCbFhHNGdJQ0FnYVdZZ0tHOWlhaTVqWVhSamFFVnljbTl5S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbElEMDlQU0FuYUhSMGNDMWxjbkp2Y2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvY21WekxuTjBZWFIxYzBOdlpHVXVkRzlUZEhKcGJtY29LU2twTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1VnUFQwOUlDZDFjR3h2WVdRdFpYSnliM0luS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WldwbFkzUW9ibVYzSUVWeWNtOXlLSEpsY3lrcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dVZ1BUMDlJQ2RzYjJkcFl5MWxjbkp2Y2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnRjMmNnUFNCbGNuSnZja2hoYm1Sc1pYSXVaMlYwUlhKeWIzSk5jMmNvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvYlhObkxtTnZiblJsYm5RcEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHVnljbTl5U0dGdVpHeGxjaTVzYjJkcFkwVnljbTl5S0c5aWFpd2daUzV5WlhNcE8xeHVJQ0FnSUgxY2JseHVmVnh1Wlhod2IzSjBJSHNnWTJGMFkyaElZVzVrYkdWeUlIMGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuLi9hcGkvcmVxdWVzdFwiKTtcbmZ1bmN0aW9uIHN0YXJ0KG9iaikge1xuICAgIG9iai5fcmVwb3J0U3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59XG5mdW5jdGlvbiBlbmQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRFbmRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgaWYgKG9iai5yZXBvcnQgJiYgb2JqLl9yZXBvcnRTdGFydFRpbWUpIHtcbiAgICAgICAgcmVwb3J0KG9iai5yZXBvcnQsIG9iai5fcmVwb3J0U3RhcnRUaW1lLCBvYmouX3JlcG9ydEVuZFRpbWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlcG9ydChuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQucmVwb3J0Q0dJID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kobmFtZSwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXF1ZXN0XzEuZGVmYXVsdCk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZCxcbiAgICByZXBvcnQ6IHJlcG9ydFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpIVnlZWFJwYjI1U1pYQnZjblJsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl0YjJSMWJHVXZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc1UwRkJVeXhMUVVGTExFTkJRVU1zUjBGQmRVTTdTVUZEYkVRc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEYUVRc1EwRkJRenRCUVVWRUxGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFYVkRPMGxCUTJoRUxFZEJRVWNzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU14UXl4SlFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhGUVVGRk8xRkJRMjVETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJaMElzUlVGQlJTeEhRVUZITEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUjBGQlJ5eERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMHRCUXpGRk8wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNUVUZCVFN4RFFVRkRMRWxCUVZrc1JVRkJSU3hUUVVGcFFpeEZRVUZGTEU5QlFXVTdTVUZETlVRc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNVMEZCVXl4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVONFF5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4cFFrRkJUeXhEUVVGRExFTkJRVU03UzBGRGRrUTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeExRVUZMTEU5QlFVRTdTVUZEVEN4SFFVRkhMRXRCUVVFN1NVRkRTQ3hOUVVGTkxGRkJRVUU3UTBGRFZDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZENCbWNtOXRJQ2N1TGk5aGNHa3ZjbVZ4ZFdWemRDZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTlwYm5SbGNtWmhZMlZjSWp0Y2JseHVablZ1WTNScGIyNGdjM1JoY25Rb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVLU0I3WEc0Z0lDQWdiMkpxTGw5eVpYQnZjblJUZEdGeWRGUnBiV1VnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pXNWtLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUc5aWFpNWZjbVZ3YjNKMFJXNWtWR2x0WlNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lHbG1LRzlpYWk1eVpYQnZjblFnSmlZZ2IySnFMbDl5WlhCdmNuUlRkR0Z5ZEZScGJXVXBJSHRjYmlBZ0lDQWdJQ0FnY21Wd2IzSjBLRzlpYWk1eVpYQnZjblFnWVhNZ2MzUnlhVzVuTENCdlltb3VYM0psY0c5eWRGTjBZWEowVkdsdFpTd2diMkpxTGw5eVpYQnZjblJGYm1SVWFXMWxLVHRjYmlBZ0lDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlISmxjRzl5ZENodVlXMWxPaUJ6ZEhKcGJtY3NJSE4wWVhKMFZHbHRaVG9nYm5WdFltVnlMQ0JsYm1SVWFXMWxPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NXlaWEJ2Y25SRFIwa2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1bWFXY3VjbVZ3YjNKMFEwZEpLRzVoYldVc0lITjBZWEowVkdsdFpTd2daVzVrVkdsdFpTd2djbVZ4ZFdWemRDazdYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjM1JoY25Rc1hHNGdJQ0FnWlc1a0xGeHVJQ0FnSUhKbGNHOXlkRnh1ZlZ4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG5mdW5jdGlvbiBzeXN0ZW1FcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZG9FcnJvcihcIlwiLCByZXMuZXJyTXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBsb2dpY0Vycm9yKG9iaiwgcmVzKSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgX2EgPSBnZXRFcnJvck1zZyhyZXMpLCB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgZG9FcnJvcih0aXRsZSwgY29udGVudCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrKG9iaiwgcmVzKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcihyZXMpO1xufVxuZnVuY3Rpb24gZ2V0RXJyb3JNc2cocmVzKSB7XG4gICAgdmFyIHRpdGxlID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZShyZXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpdGxlID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlO1xuICAgIH1cbiAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudDtcbiAgICB9XG4gICAgcmV0dXJuIHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH07XG59XG5mdW5jdGlvbiBkb0Vycm9yKHRpdGxlLCBjb250ZW50KSB7XG4gICAgd3guc2hvd01vZGFsKHtcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8IFwi572R57uc5oiW5pyN5Yqh5byC5bi477yM6K+356iN5ZCO6YeN6K+VXCIsXG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlXG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc3lzdGVtRXJyb3I6IHN5c3RlbUVycm9yLFxuICAgIGxvZ2ljRXJyb3I6IGxvZ2ljRXJyb3IsXG4gICAgZG9FcnJvcjogZG9FcnJvcixcbiAgICBnZXRFcnJvck1zZzogZ2V0RXJyb3JNc2dcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laWEp5YjNKSVlXNWtiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWxjbkp2Y2toaGJtUnNaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZIY0VNc1UwRkJVeXhYUVVGWExFTkJRVU1zUjBGQmRVTXNSVUZCUlN4SFFVRTJRanRKUVVOMlJpeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGFFTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5xUWp0VFFVRk5PMUZCUTBnc1QwRkJUeXhEUVVGRExFVkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1MwRkRNMEk3UVVGRFRDeERRVUZETzBGQlJVUXNVMEZCVXl4VlFVRlZMRU5CUVVNc1IwRkJkVU1zUlVGQlJTeEhRVUY1UlR0SlFVTnNTU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVsQlFVa3NTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRhRU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVOcVFqdFRRVUZOTzFGQlEwY3NTVUZCUVN4eFFrRkJiVU1zUlVGQmJFTXNaMEpCUVVzc1JVRkJSU3h2UWtGQk1rSXNRMEZCUXp0UlFVTXhReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMHRCUXpOQ08wbEJSMFFzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU0xUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRiRU03U1VGRlJDeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM1pDTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmRCUVZjc1EwRkJReXhIUVVGNVJUdEpRVU14Uml4SlFVRkpMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRFppeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhWUVVGVkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEzcERMRWxCUVVrN1dVRkRRU3hMUVVGTExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZCTzFOQlEzUkRPMUZCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3VTBGRFdEdExRVU5LTzFOQlFVMHNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZGQlFWRXNSVUZCUlR0UlFVTTVReXhMUVVGTExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNN1MwRkROMEk3U1VGRlJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRha0lzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1dVRkJXU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU16UXl4SlFVRkpPMWxCUTBFc1QwRkJUeXhIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlFUdFRRVU14UXp0UlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8xTkJRMWc3UzBGRFNqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGbEJRVmtzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZEYUVRc1QwRkJUeXhIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRPMHRCUTJwRE8wbEJSVVFzVDBGQlR5eEZRVUZETEV0QlFVc3NUMEZCUVN4RlFVRkZMRTlCUVU4c1UwRkJRU3hGUVVGRExFTkJRVUU3UVVGRE0wSXNRMEZCUXp0QlFVVkVMRk5CUVZNc1QwRkJUeXhEUVVGRExFdEJRV0VzUlVGQlJTeFBRVUZsTzBsQlF6TkRMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU03VVVGRFZDeExRVUZMTEU5QlFVRTdVVUZEVEN4UFFVRlBMRVZCUVVVc1QwRkJUeXhKUVVGSkxHVkJRV1U3VVVGRGJrTXNWVUZCVlN4RlFVRkZMRXRCUVVzN1MwRkRjRUlzUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzVjBGQlZ5eGhRVUZCTzBsQlExZ3NWVUZCVlN4WlFVRkJPMGxCUTFZc1QwRkJUeXhUUVVGQk8wbEJRMUFzVjBGQlZ5eGhRVUZCTzBOQlEyUXNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dVhHNW1kVzVqZEdsdmJpQnplWE4wWlcxRmNuSnZjaWh2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0c0lISmxjem9nZDNndVIyVnVaWEpoYkVOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdVptRnBiQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNW1ZV2xzS0hKbGN5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1pHOUZjbkp2Y2loY0lsd2lMQ0J5WlhNdVpYSnlUWE5uS1R0Y2JpQWdJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR3h2WjJsalJYSnliM0lvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUxDQnlaWE02SUhkNExsSmxjWFZsYzNSVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUWdmQ0IzZUM1VmNHeHZZV1JHYVd4bFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdVptRnBiQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNW1ZV2xzS0hKbGN5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZTNScGRHeGxMQ0JqYjI1MFpXNTBmU0E5SUdkbGRFVnljbTl5VFhObktISmxjeWs3WEc0Z0lDQWdJQ0FnSUdSdlJYSnliM0lvZEdsMGJHVXNJR052Ym5SbGJuUXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZW1GamVlOXJ1ZTduK1M0Z09tVW1laXZyK1dibnVpd2crV0h2ZWFWc08rOGpPV0ltZWFKcCtpaGpPV3VnMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtVnljbTl5UTJGc2JHSmhZMnNnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCamIyNW1hV2N1WlhKeWIzSkRZV3hzWW1GamF5aHZZbW9zSUhKbGN5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWh5WlhNcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCblpYUkZjbkp2Y2sxelp5aHlaWE02SUhkNExsSmxjWFZsYzNSVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUWdmQ0IzZUM1VmNHeHZZV1JHYVd4bFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdiR1YwSUhScGRHeGxJRDBnWENKY0lqdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bGNuSnZjbFJwZEd4bElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJwZEd4bElEMGdZMjl1Wm1sbkxtVnljbTl5VkdsMGJHVW9jbVZ6TG1SaGRHRXBYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVsY25KdmNsUnBkR3hsSUQwOVBTQmNJbk4wY21sdVoxd2lLU0I3WEc0Z0lDQWdJQ0FnSUhScGRHeGxJRDBnWTI5dVptbG5MbVZ5Y205eVZHbDBiR1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUdOdmJuUmxiblFnUFNCY0lsd2lPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWRDaHlaWE11WkdGMFlTbGNiaUFnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyOXVkR1Z1ZENBOVBUMGdYQ0p6ZEhKcGJtZGNJaWtnZTF4dUlDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWREdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZTNScGRHeGxMQ0JqYjI1MFpXNTBmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmtiMFZ5Y205eUtIUnBkR3hsT2lCemRISnBibWNzSUdOdmJuUmxiblE2SUhOMGNtbHVaeWtnZTF4dUlDQWdJSGQ0TG5Ob2IzZE5iMlJoYkNoN1hHNGdJQ0FnSUNBZ0lIUnBkR3hsTEZ4dUlDQWdJQ0FnSUNCamIyNTBaVzUwT2lCamIyNTBaVzUwSUh4OElGd2k1NzJSNTd1YzVvaVc1cHlONVlxaDVieUM1Ymk0Nzd5TTZLKzM1NmlONVpDTzZZZU42SytWWENJc1hHNGdJQ0FnSUNBZ0lITm9iM2REWVc1alpXdzZJR1poYkhObFhHNGdJQ0FnZlNsY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdlMXh1SUNBZ0lITjVjM1JsYlVWeWNtOXlMRnh1SUNBZ0lHeHZaMmxqUlhKeWIzSXNYRzRnSUNBZ1pHOUZjbkp2Y2l4Y2JpQWdJQ0JuWlhSRmNuSnZjazF6WjF4dWZWeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG5mdW5jdGlvbiBnZXQob2JqKSB7XG4gICAgaWYgKCEoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoudXJsXSB8fCAob2JqLm9yaWdpblVybCAmJiBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdKSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbW9jayDmsqHmnInlr7nlupTmjqXlj6PnmoTmlbDmja4nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgPyBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdIDogJycpO1xuICAgIGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBzdGF0dXNDb2RlOiAyMDBcbiAgICB9O1xuICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGdldDogZ2V0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYlc5amEwMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMMjF2WTJ0TllXNWhaMlZ5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTUVOQlFXOURPMEZCUTNCRExESkRRVUZ4UXp0QlFVZHlReXhUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUYxUXp0SlFVVm9SQ3hKUVVGSExFTkJRVU1zUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhKUVVGSkxHZENRVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVTdVVUZGYWtZc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRE8xRkJRMmhETEU5QlFVOHNTMEZCU3l4RFFVRkRPMHRCUTJoQ08wbEJSVVFzU1VGQlNTeEpRVUZKTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNaMEpCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVVUzUml4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVFTXNTVUZCVFN4SFFVRkhMRWRCUVVjN1VVRkRVaXhKUVVGSkxFMUJRVUU3VVVGRFNpeFZRVUZWTEVWQlFVVXNSMEZCUnp0TFFVTnNRaXhEUVVGRE8wbEJSVVlzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRKUVVObUxFOUJRVThzUjBGQlJ5eERRVUZCTzBGQlEyUXNRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzUjBGQlJ5eExRVUZCTzBOQlEwNHNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElHeHZZV1JwYm1jZ1puSnZiU0FuTGk0dmRYUnBiQzlzYjJGa2FXNW5KMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aVhHNWNibVoxYm1OMGFXOXVJR2RsZENodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBPaUJoYm5rZ2UxeHVYRzRnSUNBZ2FXWW9JU2hqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG5WeWJGMGdmSHdnS0c5aWFpNXZjbWxuYVc1VmNtd2dKaVlnWTI5dVptbG5MbTF2WTJ0S2MyOXVXMjlpYWk1dmNtbG5hVzVWY214ZEtTa3BJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2JXOWpheURtc3FIbW5JbmxyN25sdXBUbWpxWGxqNlBubW9UbWxiRG1qYTVjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpZ25iVzlqYXlEbXNxSG1uSW5scjdubHVwVG1qcVhsajZQbm1vVG1sYkRtamE0bktUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCa1lYUmhJRDBnWTI5dVptbG5MbTF2WTJ0S2MyOXVXMjlpYWk1MWNteGRJSHg4SUNodlltb3ViM0pwWjJsdVZYSnNJRDhnWTI5dVptbG5MbTF2WTJ0S2MyOXVXMjlpYWk1dmNtbG5hVzVWY214ZElEb2dKeWNwTzF4dUlDQWdJQzh2SUdSbFpYQWdZMjl3ZVZ4dUlDQWdJR1JoZEdFZ1BTQktVMDlPTG5CaGNuTmxLRXBUVDA0dWMzUnlhVzVuYVdaNUtHUmhkR0VwS1R0Y2JpQWdJQ0JqYjI1emRDQnlaWE1nUFNCN1hHNGdJQ0FnSUNBZ0lHUmhkR0VzWEc0Z0lDQWdJQ0FnSUhOMFlYUjFjME52WkdVNklESXdNRnh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnNiMkZrYVc1bkxtaHBaR1VvS1R0Y2JpQWdJQ0J5WlhSMWNtNGdjbVZ6WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCblpYUmNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgbG9hZGluZ18xID0gcmVxdWlyZShcIi4uL3V0aWwvbG9hZGluZ1wiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xudmFyIG1vY2tNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9tb2NrTWFuYWdlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vc2Vzc2lvbk1hbmFnZXJcIik7XG52YXIgcmVzcG9uc2VIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXNwb25zZUhhbmRsZXJcIik7XG52YXIgZHVyYXRpb25SZXBvcnRlcl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25SZXBvcnRlclwiKTtcbnZhciB1cmxfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3VybFwiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBjYXRjaEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2NhdGNoSGFuZGxlclwiKTtcbmZ1bmN0aW9uIGZvcm1hdChvcmlnaW5VcmwpIHtcbiAgICBpZiAob3JpZ2luVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICByZXR1cm4gb3JpZ2luVXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHVybFBlcmZpeCA9IGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4O1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHVybFBlcmZpeCA9IGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybFBlcmZpeCArIG9yaWdpblVybDtcbiAgICB9XG59XG5mdW5jdGlvbiBwcmVEbyhvYmopIHtcbiAgICBpZiAodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmJlZm9yZVNlbmQoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoIW9iai5kYXRhKSB7XG4gICAgICAgIG9iai5kYXRhID0ge307XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZGF0YSA9IF9fYXNzaWduKHt9LCBvYmouZGF0YSwgKF9hID0ge30sIF9hW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYSkpO1xuICAgIH1cbiAgICB2YXIgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmRhdGEgPSBfX2Fzc2lnbih7fSwgZ2QsIG9iai5kYXRhKTtcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oe30sIG9iai5mb3JtRGF0YSwgKF9hID0ge30sIF9hW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYSkpO1xuICAgIH1cbiAgICB2YXIgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oe30sIGdkLCBvYmouZm9ybURhdGEpO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCAoX2IgPSB7fSwgX2JbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9iKSk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcbiAgICB9XG4gICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuc3RhcnQob2JqKTtcbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcbiAgICB2YXIgZ2QgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGE7XG4gICAgfVxuICAgIHJldHVybiBnZDtcbn1cbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmopIHtcbiAgICBvYmogPSBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICAgICAgZGF0YTogb2JqLmRhdGEsXG4gICAgICAgICAgICBtZXRob2Q6IG9iai5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXI6IG9iai5oZWFkZXIgfHwge30sXG4gICAgICAgICAgICBkYXRhVHlwZTogb2JqLmRhdGFUeXBlIHx8ICdqc29uJyxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iaikge1xuICAgIG9iaiA9IGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgd3gudXBsb2FkRmlsZSh7XG4gICAgICAgICAgICB1cmw6IG9iai51cmwsXG4gICAgICAgICAgICBmaWxlUGF0aDogb2JqLmZpbGVQYXRoIHx8ICcnLFxuICAgICAgICAgICAgbmFtZTogb2JqLm5hbWUgfHwgJycsXG4gICAgICAgICAgICBmb3JtRGF0YTogb2JqLmZvcm1EYXRhLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiByZXF1ZXN0KG9iaikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaik7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQobW9ja1Jlc3BvbnNlLCBvYmosICdyZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvYmouY2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0KHJlcywgb2JqLCAncmVxdWVzdCcpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBjYXRjaEhhbmRsZXJfMS5jYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqKTtcbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb24pIHtcbiAgICAgICAgICAgIHZhciBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdChtb2NrUmVzcG9uc2UsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0KHJlcywgb2JqLCAndXBsb2FkRmlsZScpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBjYXRjaEhhbmRsZXJfMS5jYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgIHVwbG9hZEZpbGU6IHVwbG9hZEZpbGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ4ZFdWemRFaGhibVJzWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM0psY1hWbGMzUklZVzVrYkdWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3UVVGQlFTd3lRMEZCY1VNN1FVRkRja01zTUVOQlFXOURPMEZCUTNCRExEQkRRVUZ2UXp0QlFVTndReXcyUTBGQmRVTTdRVUZEZGtNc0swTkJRWGxETzBGQlEzcERMRzFFUVVFMlF6dEJRVU0zUXl4eFJFRkJLME03UVVGREwwTXNkVVJCUVdsRU8wRkJRMnBFTEcxRFFVRTJRanRCUVVVM1Fpd3JRMEZCTUVNN1FVRkRNVU1zSzBOQlFUaERPMEZCUnpsRExGTkJRVk1zVFVGQlRTeERRVUZETEZOQlFXbENPMGxCUXpkQ0xFbEJRVWtzVTBGQlV5eERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSVHRSUVVNNVFpeFBRVUZQTEZOQlFWTXNRMEZCUVR0TFFVTnVRanRUUVVGTk8xRkJRMGdzU1VGQlNTeFRRVUZUTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhUUVVGVExFTkJRVU03VVVGRGFrTXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNSVUZCUlR0WlFVTjRReXhUUVVGVExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRVHRUUVVOcVF6dFJRVU5FTEU5QlFVOHNVMEZCVXl4SFFVRkhMRk5CUVZNc1EwRkJRenRMUVVOb1F6dEJRVU5NTEVOQlFVTTdRVUZIUkN4VFFVRlRMRXRCUVVzc1EwRkJLME1zUjBGQlRUdEpRVU12UkN4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExGVkJRVlVzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEZEVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETzB0QlEzQkNPMGxCUlVRc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFpRVUZaTEV0QlFVc3NWMEZCVnl4RlFVRkZPMUZCUTNwRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMHRCUTNoQ08xTkJRVTA3VVVGRFNDeEhRVUZITEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVNN1MwRkRkRUk3U1VGRlJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVN1VVRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzB0QlEycERPMGxCUlVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVTdVVUZEYUVJc1IwRkJSeXhEUVVGRExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNoQ0xFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU0zUWp0SlFVVkVMRTlCUVU4c1IwRkJSeXhEUVVGRE8wRkJRMllzUTBGQlF6dEJRVWRFTEZOQlFWTXNiMEpCUVc5Q0xFTkJRVU1zUjBGQmJVSTdPMGxCUlRkRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZPMUZCUTFnc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTMEZEYWtJN1NVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFRRVUZUTEV0QlFVc3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJRemxFTEVkQlFVY3NRMEZCUXl4SlFVRkpMR2RDUVVGUkxFZEJRVWNzUTBGQlF5eEpRVUZqTEdWQlFVY3NaMEpCUVUwc1EwRkJReXhYUVVGWExFbEJRVWNzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRTFCUVVVc1EwRkJRenRMUVVNNVJUdEpRVWRFTEVsQlFVMHNSVUZCUlN4SFFVRkhMR0ZCUVdFc1JVRkJSU3hEUVVGRE8wbEJRek5DTEVkQlFVY3NRMEZCUXl4SlFVRkpMR2RDUVVGUkxFVkJRVVVzUlVGQlN5eEhRVUZITEVOQlFVTXNTVUZCWXl4RFFVRkZMRU5CUVVNN1NVRkZOVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF6dEpRVU5xUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hIUVVGSExFZEJRVWNzUTBGQlF5eFJRVUZSTEVsQlFVa3NUVUZCVFN4RFFVRkRPMGxCUjNSRExFbEJRVWtzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMRzFDUVVGdFFpeEpRVUZKTEVkQlFVY3NRMEZCUXl4TlFVRk5MRXRCUVVzc1MwRkJTeXhGUVVGRk8xRkJRM0pFTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3V1VGRGFFSXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhoUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRmxCUVVrc1IwRkJReXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlJ5eERRVUZETzFOQlF6bEZPMUZCUTBRc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eGhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTMEZEZUVNN1NVRkZSQ3d3UWtGQlowSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRk5VSXNUMEZCVHl4SFFVRkhMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSMFFzVTBGQlV5eDFRa0ZCZFVJc1EwRkJReXhIUVVGelFqczdTVUZEYmtRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVTdVVUZEWml4SFFVRkhMRU5CUVVNc1VVRkJVU3hIUVVGSExFVkJRVVVzUTBGQlF6dExRVU55UWp0SlFVVkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGTkJRVk1zUzBGQlN5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1VVRkRPVVFzUjBGQlJ5eERRVUZETEZGQlFWRXNaMEpCUVZFc1IwRkJSeXhEUVVGRExGRkJRV3RDTEdWQlFVY3NaMEpCUVUwc1EwRkJReXhYUVVGWExFbEJRVWNzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRTFCUVVVc1EwRkJRenRMUVVOMFJqdEpRVWRFTEVsQlFVMHNSVUZCUlN4SFFVRkhMR0ZCUVdFc1JVRkJSU3hEUVVGRE8wbEJRek5DTEVkQlFVY3NRMEZCUXl4UlFVRlJMR2RDUVVGUkxFVkJRVVVzUlVGQlN5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkZMRU5CUVVNN1NVRkZNVU1zU1VGQlNTeERRVUZETEdkQ1FVRk5MRU5CUVVNc2JVSkJRVzFDTEVWQlFVVTdVVUZGTjBJc1NVRkJTU3huUWtGQlRTeERRVUZETEU5QlFVOHNSVUZCUlR0WlFVTm9RaXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEdGQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzV1VGQlNTeEhRVUZETEdkQ1FVRk5MRU5CUVVNc1YwRkJWeXhKUVVGSExHZENRVUZOTEVOQlFVTXNUMEZCVHl4TlFVRkhMRU5CUVVNN1UwRkRPVVU3VVVGRlJDeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMR0ZCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRMUVVONFF6dEpRVVZFTERCQ1FVRm5RaXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVTFRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkN4VFFVRlRMR0ZCUVdFN1NVRkRiRUlzU1VGQlNTeEZRVUZGTEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJwQ0xFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGVrTXNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdTMEZETlVJN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemxETEVWQlFVVXNSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU14UWp0SlFVTkVMRTlCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFTEZOQlFWTXNVMEZCVXl4RFFVRkRMRWRCUVcxQ08wbEJRMnhETEVkQlFVY3NSMEZCUnl4dlFrRkJiMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTm9ReXhQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZETEZWQlFVTXNUMEZCVHl4RlFVRkZMRTFCUVUwN1VVRkRMMElzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXp0WlFVTlFMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUjBGQlJ6dFpRVU5hTEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1NVRkJTVHRaUVVOa0xFMUJRVTBzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFR0WlFVTnNRaXhOUVVGTkxFVkJRVVVzUjBGQlJ5eERRVUZETEUxQlFVMHNTVUZCU1N4RlFVRkZPMWxCUTNoQ0xGRkJRVkVzUlVGQlJTeEhRVUZITEVOQlFVTXNVVUZCVVN4SlFVRkpMRTFCUVUwN1dVRkRhRU1zVDBGQlR5eFpRVUZETEVkQlFXOURPMmRDUVVONFF5eFBRVUZQTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVONFFpeERRVUZETzFsQlEwUXNTVUZCU1N4WlFVRkRMRWRCUVRaQ08yZENRVU01UWl4elFrRkJXU3hEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRMjVETEU5QlFVOHNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM1pDTEVOQlFVTTdXVUZEUkN4UlFVRlJPMmRDUVVOS0xFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNVVUZCVVN4TFFVRkxMRlZCUVZVc1JVRkJSVHR2UWtGRGNFTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8ybENRVU5zUWp0blFrRkRSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFhRVUZYTEVWQlFVVTdiMEpCUTJwQ0xHbENRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVFN2FVSkJRMnBDTzFsQlEwd3NRMEZCUXp0VFFVTktMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1dVRkJXU3hEUVVGRExFZEJRWE5DTzBsQlEzaERMRWRCUVVjc1IwRkJSeXgxUWtGQmRVSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOdVF5eFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3VVVGREwwSXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJRenRaUVVOV0xFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNSMEZCUnp0WlFVTmFMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVTeEpRVUZKTEVWQlFVVTdXVUZETlVJc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlR0WlFVTndRaXhSUVVGUkxFVkJRVVVzUjBGQlJ5eERRVUZETEZGQlFWRTdXVUZEZEVJc1QwRkJUeXhaUVVGRExFZEJRWFZETzJkQ1FVTXpReXhQUVVGUExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjRRaXhEUVVGRE8xbEJRMFFzU1VGQlNTeFpRVUZETEVkQlFUWkNPMmRDUVVNNVFpeHpRa0ZCV1N4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTI1RExFOUJRVThzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNaQ0xFTkJRVU03V1VGRFJDeFJRVUZSTzJkQ1FVTktMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVVVGQlVTeExRVUZMTEZWQlFWVXNSVUZCUlR0dlFrRkRjRU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMmxDUVVOc1FqdG5Ra0ZEUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhYUVVGWExFVkJRVVU3YjBKQlEycENMR2xDUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVRTdhVUpCUTJwQ08xbEJRMHdzUTBGQlF6dFRRVU5LTEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNUMEZCVHl4RFFVRkRMRWRCUVcxQ08wbEJRMmhETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4SFFVRkhMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXcENMRWxCUVVrc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEYWtJc1NVRkJTU3haUVVGWkxFZEJRVWNzY1VKQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4WlFVRlpMRVZCUVVVN1owSkJRMlFzU1VGQlNTeFJRVUZSTEVkQlFVY3NlVUpCUVdVc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMmRDUVVNM1JDeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFRRVU5LTzFGQlJVUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhGUVVGRk8xbEJRMWdzYzBKQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGVrSTdVVUZGUkN4M1FrRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTjJRaXhQUVVGUExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUVR0UlFVTjZRaXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCUXl4SFFVRkhPMWxCUTFJc1NVRkJTU3hSUVVGUkxFZEJRVWNzZVVKQlFXVXNRMEZCUXl4SFFVRnpReXhGUVVGRkxFZEJRVWNzUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXp0WlFVTjJSaXhKUVVGSkxGRkJRVkVzU1VGQlNTeEpRVUZKTEVWQlFVVTdaMEpCUTJ4Q0xFOUJRVThzVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMkZCUXpWQ08xRkJRMHdzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVVNc1EwRkJRenRaUVVOUUxESkNRVUZaTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlFUdFJRVU5vUXl4RFFVRkRMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1ZVRkJWU3hEUVVGRExFZEJRWE5DTzBsQlEzUkRMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhIUVVGSExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUldwQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UlFVRlJMRVZCUVVVN1dVRkRha0lzU1VGQlNTeFpRVUZaTEVkQlFVY3NjVUpCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZUVNc1NVRkJTU3haUVVGWkxFVkJRVVU3WjBKQlEyUXNTVUZCU1N4UlFVRlJMRWRCUVVjc2VVSkJRV1VzUTBGQlF5eFpRVUZaTEVWQlFVVXNSMEZCUnl4RlFVRkZMRmxCUVZrc1EwRkJReXhEUVVGRE8yZENRVU5vUlN4UFFVRlBMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dGhRVU0xUWp0VFFVTktPMUZCUlVRc2QwSkJRV01zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRka0lzVDBGQlR5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1VVRkROVUlzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVVNc1IwRkJSenRaUVVOU0xFbEJRVWtzVVVGQlVTeEhRVUZITEhsQ1FVRmxMRU5CUVVNc1IwRkJlVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkROMFlzU1VGQlNTeFJRVUZSTEVsQlFVa3NTVUZCU1N4RlFVRkZPMmRDUVVOc1FpeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGRExFTkJRVU03V1VGRFVDd3lRa0ZCV1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVRTdVVUZEYUVNc1EwRkJReXhEUVVGRExFTkJRVUU3U1VGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hyUWtGQlpUdEpRVU5ZTEUxQlFVMHNVVUZCUVR0SlFVTk9MRTlCUVU4c1UwRkJRVHRKUVVOUUxGVkJRVlVzV1VGQlFUdERRVU5pTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdiRzloWkdsdVp5Qm1jbTl0SUNjdUxpOTFkR2xzTDJ4dllXUnBibWNuWEc1cGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCemRHRjBkWE1nWm5KdmJTQW5MaTR2YzNSdmNtVXZjM1JoZEhWekoxeHVhVzF3YjNKMElHMXZZMnROWVc1aFoyVnlJR1p5YjIwZ0p5NHZiVzlqYTAxaGJtRm5aWEluWEc1cGJYQnZjblFnWTJGamFHVk5ZVzVoWjJWeUlHWnliMjBnSnk0dlkyRmphR1ZOWVc1aFoyVnlKMXh1YVcxd2IzSjBJSE5sYzNOcGIyNU5ZVzVoWjJWeUlHWnliMjBnSnk0dmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1cGJYQnZjblFnY21WemNHOXVjMlZJWVc1a2JHVnlJR1p5YjIwZ0p5NHZjbVZ6Y0c5dWMyVklZVzVrYkdWeUoxeHVhVzF3YjNKMElHUjFjbUYwYVc5dVVtVndiM0owWlhJZ1puSnZiU0JjSWk0dlpIVnlZWFJwYjI1U1pYQnZjblJsY2x3aVhHNXBiWEJ2Y25RZ2RYSnNJR1p5YjIwZ0p5NHVMM1YwYVd3dmRYSnNKMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aVhHNXBiWEJ2Y25RZ1pYSnliM0pJWVc1a2JHVnlJR1p5YjIwZ1hDSXVMMlZ5Y205eVNHRnVaR3hsY2x3aU8xeHVhVzF3YjNKMElIc2dZMkYwWTJoSVlXNWtiR1Z5SUgwZ1puSnZiU0FuTGk5allYUmphRWhoYm1Sc1pYSW5PMXh1WEc0dkx5RG1vTHpsdkkvbGpKWjFjbXhjYm1aMWJtTjBhVzl1SUdadmNtMWhkQ2h2Y21sbmFXNVZjbXc2SUhOMGNtbHVaeWtnZTF4dUlDQWdJR2xtSUNodmNtbG5hVzVWY213dWMzUmhjblJ6VjJsMGFDZ25hSFIwY0NjcEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnZjbWxuYVc1VmNteGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCc1pYUWdkWEpzVUdWeVptbDRJRDBnWTI5dVptbG5MblZ5YkZCbGNtWnBlRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1ZFhKc1VHVnlabWw0SUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFZ5YkZCbGNtWnBlQ0E5SUdOdmJtWnBaeTUxY214UVpYSm1hWGdvS1Z4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMWNteFFaWEptYVhnZ0t5QnZjbWxuYVc1VmNtdzdYRzRnSUNBZ2ZWeHVmVnh1WEc0dkx5RG1pWURtbklub3I3Zm1zWUxsajVIbGg3cmxpWTNwbklEb3BvSGxnWnJubW9Ua3Vvdm1nNFZjYm1aMWJtTjBhVzl1SUhCeVpVUnZQRlFnWlhoMFpXNWtjeUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVQaWh2WW1vNklGUXBPaUJVSUh0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNWlaV1p2Y21WVFpXNWtJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtSmxabTl5WlZObGJtUW9LVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5OGc1NW03NWIyVjVvQ0I1YVN4NXBXSTc3eU02WWVONWFTTjU1bTc1YjJWNks2aDVwV3dYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91Y21WTWIyZHBia052ZFc1MElEMDlQU0JjSW5WdVpHVm1hVzVsWkZ3aUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1eVpVeHZaMmx1UTI5MWJuUWdQU0F3TzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1eVpVeHZaMmx1UTI5MWJuUXJLenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYjJKcUxuTm9iM2RNYjJGa2FXNW5LU0I3WEc0Z0lDQWdJQ0FnSUd4dllXUnBibWN1YzJodmR5aHZZbW91YzJodmQweHZZV1JwYm1jcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDZ2hiMkpxTG05eWFXZHBibFZ5YkNrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91YjNKcFoybHVWWEpzSUQwZ2IySnFMblZ5YkR0Y2JpQWdJQ0FnSUNBZ2IySnFMblZ5YkNBOUlHWnZjbTFoZENodlltb3VkWEpzS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdiMkpxTzF4dWZWeHVYRzR2THlEbW9Memx2SS9sakpibHBJVG5rSWJvcjdmbXNZTG5tb1J2WW1ybGhvWGxycmxjYm1aMWJtTjBhVzl1SUdsdWFYUnBZV3hwZW1WU1pYRjFaWE4wVDJKcUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBJSHRjYmx4dUlDQWdJR2xtSUNnaGIySnFMbVJoZEdFcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1SaGRHRWdQU0I3ZlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2IySnFMbTl5YVdkcGJsVnliQ0FoUFQwZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVkWEpzSUNZbUlITjBZWFIxY3k1elpYTnphVzl1S1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVrWVhSaElEMGdleUF1TGk1dlltb3VaR0YwWVNCaGN5QnZZbXBsWTNRc0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJpQjlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZVdGcU9XeGdPV1BndWFWc08rOGpPV0ltZWEzdStXS29GeHVJQ0FnSUdOdmJuTjBJR2RrSUQwZ1oyVjBSMnh2WW1Gc1JHRjBZU2dwTzF4dUlDQWdJRzlpYWk1a1lYUmhJRDBnZXlBdUxpNW5aQ3dnTGk0dWIySnFMbVJoZEdFZ1lYTWdiMkpxWldOMElIMDdYRzVjYmlBZ0lDQnZZbW91YldWMGFHOWtJRDBnYjJKcUxtMWxkR2h2WkNCOGZDQW5SMFZVSnp0Y2JpQWdJQ0J2WW1vdVpHRjBZVlI1Y0dVZ1BTQnZZbW91WkdGMFlWUjVjR1VnZkh3Z0oycHpiMjRuTzF4dVhHNGdJQ0FnTHk4ZzVhYUM1cDZjNksrMzVyR0M1TGlONXBpdlIwVlU3N3lNNVlpWjVaeW9WVkpNNUxpdDZJZXE1WXFvNVlxZzVMaUs1NW03NWIyVjVvQ0I1WktNNVlXbzViR0E1WStDNXBXd1hHNGdJQ0FnYVdZZ0tDRmpiMjVtYVdjdVpHOU9iM1JWYzJWUmRXVnllVk4wY21sdVp5QW1KaUJ2WW1vdWJXVjBhRzlrSUNFOVBTQmNJa2RGVkZ3aUtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoemRHRjBkWE11YzJWemMybHZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiMkpxTG5WeWJDQTlJSFZ5YkM1elpYUlFZWEpoYlhNb2IySnFMblZ5YkN3Z2V5QmJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNGdmU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2IySnFMblZ5YkNBOUlIVnliQzV6WlhSUVlYSmhiWE1vYjJKcUxuVnliQ3dnWjJRcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1YzNSaGNuUW9iMkpxS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJ2WW1vN1hHNTlYRzVjYmk4dklPYWd2T1c4aitXTWx1V2toT2VRaHVTNGl1UzhvT2FXaCtTN3R1ZWFoRzlpYXVXR2hlV3V1Vnh1Wm5WdVkzUnBiMjRnYVc1cGRHbGhiR2w2WlZWd2JHOWhaRVpwYkdWUFltb29iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUdsbUlDZ2hiMkpxTG1admNtMUVZWFJoS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtYjNKdFJHRjBZU0E5SUh0OU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHZZbW91YjNKcFoybHVWWEpzSUNFOVBTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTUxY213Z0ppWWdjM1JoZEhWekxuTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1admNtMUVZWFJoSUQwZ2V5QXVMaTV2WW1vdVptOXliVVJoZEdFZ1lYTWdiMkpxWldOMExDQmJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNGdmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeURscG9MbW5wem1uSW5saGFqbHNZRGxqNExtbGJEdnZJemxpSm5tdDd2bGlxQmNiaUFnSUNCamIyNXpkQ0JuWkNBOUlHZGxkRWRzYjJKaGJFUmhkR0VvS1R0Y2JpQWdJQ0J2WW1vdVptOXliVVJoZEdFZ1BTQjdJQzR1TG1ka0xDQXVMaTV2WW1vdVptOXliVVJoZEdFZ2ZUdGNibHh1SUNBZ0lHbG1JQ2doWTI5dVptbG5MbVJ2VG05MFZYTmxVWFZsY25sVGRISnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGc1YkNHNTVtNzZabUc1b0NCNUxtZjViaW01WnlvZFhKczVMaUtYRzRnSUNBZ0lDQWdJR2xtSUNoemRHRjBkWE11YzJWemMybHZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiMkpxTG5WeWJDQTlJSFZ5YkM1elpYUlFZWEpoYlhNb2IySnFMblZ5YkN3Z2V5QmJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNGdmU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0x5OGc1WVdvNWJHQTVZK0M1cFd3NVpDTTVwZTI1cFMrNVp5b2RYSnM1TGlLWEc0Z0lDQWdJQ0FnSUc5aWFpNTFjbXdnUFNCMWNtd3VjMlYwVUdGeVlXMXpLRzlpYWk1MWNtd3NJR2RrS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlMbk4wWVhKMEtHOWlhaWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdiMkpxTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJuWlhSSGJHOWlZV3hFWVhSaEtDa2dlMXh1SUNBZ0lHeGxkQ0JuWkRvZ1lXNTVJRDBnZTMwN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WjJ4dlltRnNSR0YwWVNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHZGtJRDBnWTI5dVptbG5MbWRzYjJKaGJFUmhkR0VvS1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VaMnh2WW1Gc1JHRjBZU0E5UFQwZ1hDSnZZbXBsWTNSY0lpa2dlMXh1SUNBZ0lDQWdJQ0JuWkNBOUlHTnZibVpwWnk1bmJHOWlZV3hFWVhSaE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdaMlE3WEc1OVhHNWNibVoxYm1OMGFXOXVJR1J2VW1WeGRXVnpkQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1S1NCN1hHNGdJQ0FnYjJKcUlEMGdhVzVwZEdsaGJHbDZaVkpsY1hWbGMzUlBZbW9vYjJKcUtUdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0IzZUM1eVpYRjFaWE4wS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFZ5YkRvZ2IySnFMblZ5YkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdFNklHOWlhaTVrWVhSaExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYldWMGFHOWtPaUJ2WW1vdWJXVjBhRzlrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdhR1ZoWkdWeU9pQnZZbW91YUdWaFpHVnlJSHg4SUh0OUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlWUjVjR1U2SUc5aWFpNWtZWFJoVkhsd1pTQjhmQ0FuYW5OdmJpY3NYRzRnSUNBZ0lDQWdJQ0FnSUNCemRXTmpaWE56S0hKbGN6b2dkM2d1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0hKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1GcGJDaHlaWE02SUhkNExrZGxibVZ5WVd4RFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWeWNtOXlTR0Z1Wkd4bGNpNXplWE4wWlcxRmNuSnZjaWh2WW1vc0lISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaHlaWE1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiWEJzWlhSbEtDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtTnZiWEJzWlhSbElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodlltb3VjMmh2ZDB4dllXUnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzloWkdsdVp5NW9hV1JsS0NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnWkc5VmNHeHZZV1JHYVd4bEtHOWlham9nU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwSUh0Y2JpQWdJQ0J2WW1vZ1BTQnBibWwwYVdGc2FYcGxWWEJzYjJGa1JtbHNaVTlpYWlodlltb3BPMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhkNExuVndiRzloWkVacGJHVW9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RYSnNPaUJ2WW1vdWRYSnNMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1ptbHNaVkJoZEdnNklHOWlhaTVtYVd4bFVHRjBhQ0I4ZkNBbkp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUc1aGJXVTZJRzlpYWk1dVlXMWxJSHg4SUNjbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm05eWJVUmhkR0U2SUc5aWFpNW1iM0p0UkdGMFlTeGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQjNlQzVWY0d4dllXUkdhV3hsVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCbVlXbHNLSEpsY3pvZ2QzZ3VSMlZ1WlhKaGJFTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pYSnliM0pJWVc1a2JHVnlMbk41YzNSbGJVVnljbTl5S0c5aWFpd2djbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0d4bGRHVW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VZMjl0Y0d4bGRHVWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltb3VZMjl0Y0d4bGRHVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHOWlhaTV6YUc5M1RHOWhaR2x1WnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCeVpYRjFaWE4wS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0cE9pQmhibmtnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHOWlhaUE5SUhCeVpVUnZLRzlpYWlrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0dOdmJtWnBaeTV0YjJOclNuTnZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUcxdlkydFNaWE53YjI1elpTQTlJRzF2WTJ0TllXNWhaMlZ5TG1kbGRDaHZZbW9wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0cxdlkydFNaWE53YjI1elpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCeVpYTndiMjV6WlNBOUlISmxjM0J2Ym5ObFNHRnVaR3hsY2lodGIyTnJVbVZ6Y0c5dWMyVXNJRzlpYWl3Z0ozSmxjWFZsYzNRbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTndiMjV6WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnBaaUFvYjJKcUxtTmhZMmhsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVdOb1pVMWhibUZuWlhJdVoyVjBLRzlpYWlrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNXRZV2x1S0NrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5U1pYRjFaWE4wS0c5aWFpbGNiaUFnSUNBZ0lDQWdmU2t1ZEdobGJpZ29jbVZ6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSW9jbVZ6SUdGeklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFzSUc5aWFpd2dKM0psY1hWbGMzUW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h5WlhOd2IyNXpaU0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6Y0c5dWMyVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlLUzVqWVhSamFDZ29aU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGMFkyaElZVzVrYkdWeUtHVXNJRzlpYWl3Z2NtVnFaV04wS1Z4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgwcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUhWd2JHOWhaRVpwYkdVb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWs2SUdGdWVTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYjJKcUlEMGdjSEpsUkc4b2IySnFLVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxtMXZZMnRLYzI5dUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdiVzlqYTFKbGMzQnZibk5sSUQwZ2JXOWphMDFoYm1GblpYSXVaMlYwS0c5aWFpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iVzlqYTFKbGMzQnZibk5sS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsYzNCdmJuTmxJRDBnY21WemNHOXVjMlZJWVc1a2JHVnlLRzF2WTJ0U1pYTndiMjV6WlN3Z2IySnFMQ0FuZFhCc2IyRmtSbWxzWlNjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0hKbGMzQnZibk5sS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG0xaGFXNG9LUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmtiMVZ3Ykc5aFpFWnBiR1VvYjJKcUtWeHVJQ0FnSUNBZ0lDQjlLUzUwYUdWdUtDaHlaWE1wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnlaWE53YjI1elpTQTlJSEpsYzNCdmJuTmxTR0Z1Wkd4bGNpaHlaWE1nWVhNZ2QzZ3VWWEJzYjJGa1JtbHNaVk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZEN3Z2IySnFMQ0FuZFhCc2IyRmtSbWxzWlNjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjM0J2Ym5ObElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTndiMjV6WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwcExtTmhkR05vS0NobEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWFJqYUVoaGJtUnNaWElvWlN3Z2IySnFMQ0J5WldwbFkzUXBYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmU2xjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUdadmNtMWhkQ3hjYmlBZ0lDQnlaWEYxWlhOMExGeHVJQ0FnSUhWd2JHOWhaRVpwYkdWY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVxdWVzdEhhbmRsZXJcIik7XG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XG52YXIgY2FjaGVNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9jYWNoZU1hbmFnZXJcIik7XG52YXIgZHVyYXRpb25SZXBvcnRlcl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25SZXBvcnRlclwiKTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vc2Vzc2lvbk1hbmFnZXJcIik7XG5mdW5jdGlvbiByZXNwb25zZShyZXMsIG9iaiwgbWV0aG9kKSB7XG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXMuZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICd1cGxvYWQtZXJyb3InLCByZXM6IGUgfTtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmNhdGNoRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5lbmQob2JqKTtcbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXF1ZXN0XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnJlcXVlc3Qob2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ1cGxvYWRGaWxlXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnVwbG9hZEZpbGUob2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NUcmlnZ2VyKHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgdmFyIHJlYWxEYXRhID0gXCJcIjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YShyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZ1bmN0aW9uIHN1Y2Nlc3NEYXRhIG9jY3VyIGVycm9yOiBcIiArIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvYmoubm9DYWNoZUZsYXNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFsRGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LnNldChvYmosIHJlYWxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgeyB0eXBlOiAnaHR0cC1lcnJvcicsIHJlczogcmVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gcmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ6Y0c5dWMyVklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzl5WlhOd2IyNXpaVWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zYlVSQlFUWkRPMEZCUXpkRExDdERRVUY1UXp0QlFVTjZReXdyUTBGQmVVTTdRVUZEZWtNc2RVUkJRV2xFTzBGQlEycEVMRzFFUVVFMlF6dEJRVWMzUXl4VFFVRlRMRkZCUVZFc1EwRkRZaXhIUVVGNVJTeEZRVU42UlN4SFFVRjFReXhGUVVOMlF5eE5RVUZuUXp0SlFVVm9ReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NSMEZCUnl4RlFVRkZPMUZCUjNoQ0xFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNTVUZCU1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVNNVFpeEpRVUZKTzJkQ1FVTkJMRWRCUVVjc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WVVGRGJrTTdXVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRuUWtGRFVpeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMR05CUVdNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdaMEpCUTNaRExFbEJRVWtzUjBGQlJ5eERRVUZETEZWQlFWVXNSVUZCUlR0dlFrRkRhRUlzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRGRFSTdjVUpCUVUwN2IwSkJRMGdzYzBKQlFWa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTnNReXhQUVVGUE8ybENRVU5XTzJGQlEwbzdVMEZEU2p0UlFVVkVMREJDUVVGblFpeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVVeFFpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1dVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hMUVVGTExGTkJRVk1zU1VGQlNTeEhRVUZITEVOQlFVTXNXVUZCV1N4SFFVRkhMR2RDUVVGTkxFTkJRVU1zV1VGQllTeEZRVUZGTzFsQlJUZEhMSGRDUVVGakxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdXVUZETlVJc1NVRkJTU3hOUVVGTkxFdEJRVXNzVTBGQlV5eEZRVUZGTzJkQ1FVTjBRaXhQUVVGUExIZENRVUZqTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVhGQ0xFTkJRVU1zUTBGQlF6dGhRVU40UkR0cFFrRkJUU3hKUVVGSkxFMUJRVTBzUzBGQlN5eFpRVUZaTEVWQlFVVTdaMEpCUTJoRExFOUJRVThzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJkMElzUTBGQlF5eERRVUZETzJGQlF6bEVPMU5CUTBvN1lVRkJUU3hKUVVGSkxHZENRVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdFpRVVY0UXl4SlFVRkpMRkZCUVZFc1IwRkJjME1zUlVGQlJTeERRVUZETzFsQlEzSkVMRWxCUVVrN1owSkJRMEVzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1YwRkJWeXhMUVVGTExGVkJRVlVzUlVGQlJUdHZRa0ZETVVNc1VVRkJVU3hIUVVGSExHZENRVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dHBRa0ZETTBNN2NVSkJRVTA3YjBKQlEwZ3NVVUZCVVN4SFFVRkhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU03YVVKQlEzWkNPMkZCUTBvN1dVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdG5Ra0ZEVWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHOURRVUZ2UXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRek5FTzFsQlEwUXNTVUZCU1N4RFFVRkZMRWRCUVhOQ0xFTkJRVU1zV1VGQldTeEZRVUZGTzJkQ1FVVjJReXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRMjVETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03YVVKQlEzcENPM0ZDUVVGTk8yOUNRVU5JTEU5QlFVOHNVVUZCVVN4RFFVRkRPMmxDUVVOdVFqdGhRVU5LTzFsQlJVUXNjMEpCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPMU5CUTI1RE8yRkJRVTA3V1VGRlNDeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMR0ZCUVdFc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlJTeERRVUZCTzFOQlEzSkRPMHRCUTBvN1UwRkJUVHRSUVVWSUxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNXVUZCV1N4RlFVRkZMRWRCUVVjc1MwRkJRU3hGUVVGRkxFTkJRVUU3UzBGRGNFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1VzVVVGQlVTeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZEVoaGJtUnNaWElnWm5KdmJTQW5MaTl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQmxjbkp2Y2toaGJtUnNaWElnWm5KdmJTQW5MaTlsY25KdmNraGhibVJzWlhJblhHNXBiWEJ2Y25RZ1kyRmphR1ZOWVc1aFoyVnlJR1p5YjIwZ0p5NHZZMkZqYUdWTllXNWhaMlZ5SjF4dWFXMXdiM0owSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWElnWm5KdmJTQW5MaTlrZFhKaGRHbHZibEpsY0c5eWRHVnlKMXh1YVcxd2IzSjBJSE5sYzNOcGIyNU5ZVzVoWjJWeUlHWnliMjBnSnk0dmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1cGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaXdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSTdYRzVjYm1aMWJtTjBhVzl1SUhKbGMzQnZibk5sS0Z4dUlDQWdJSEpsY3pvZ2QzZ3VVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ0I4SUhkNExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFzWEc0Z0lDQWdiMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI4SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1TEZ4dUlDQWdJRzFsZEdodlpEb2dYQ0p5WlhGMVpYTjBYQ0lnZkNCY0luVndiRzloWkVacGJHVmNJbHh1S1RvZ1lXNTVJSHRjYmlBZ0lDQnBaaUFvY21WekxuTjBZWFIxYzBOdlpHVWdQVDA5SURJd01Da2dlMXh1WEc0Z0lDQWdJQ0FnSUM4dklPV0Z2T1d1dVhWd2JHOWhaRVpwYkdYb3Y1VGxtNTdubW9SeVpYTXVaR0YwWWVXUHIraUR2ZWFZcitXdGwrZXNwdVM0c2x4dUlDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlISmxjeTVrWVhSaElEMDlQU0JjSW5OMGNtbHVaMXdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjeTVrWVhSaElEMGdTbE5QVGk1d1lYSnpaU2h5WlhNdVpHRjBZU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dleUIwZVhCbE9pQW5kWEJzYjJGa0xXVnljbTl5Snl3Z2NtVnpPaUJsSUgwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzlpYWk1allYUmphRVZ5Y205eUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxjbkp2Y2toaGJtUnNaWEl1Ykc5bmFXTkZjbkp2Y2lodlltb3NJSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlMbVZ1WkNodlltb3BPMXh1WEc0Z0lDQWdJQ0FnSUdsbUlDaGpiMjVtYVdjdWJHOW5hVzVVY21sbloyVnlJU2h5WlhNdVpHRjBZU2tnSmlZZ2IySnFMbkpsVEc5bmFXNURiM1Z1ZENBaFBUMGdkVzVrWldacGJtVmtJQ1ltSUc5aWFpNXlaVXh2WjJsdVEyOTFiblFnUENCamIyNW1hV2N1Y21WTWIyZHBia3hwYldsMElTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1NW03NWIyVjVvQ0I1YVN4NXBXSTc3eU01TGlVNlllTjZLK1Y1cXloNXBXdzVMaU42TGFGNkwrSDZZV041NzJ1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaWE56YVc5dVRXRnVZV2RsY2k1a1pXeFRaWE56YVc5dUtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iV1YwYUc5a0lEMDlQU0JjSW5KbGNYVmxjM1JjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYRjFaWE4wU0dGdVpHeGxjaTV5WlhGMVpYTjBLRzlpYWlCaGN5QkpVbVZ4ZFdWemRFOXdkR2x2YmlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0cxbGRHaHZaQ0E5UFQwZ1hDSjFjR3h2WVdSR2FXeGxYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WeGRXVnpkRWhoYm1Sc1pYSXVkWEJzYjJGa1JtbHNaU2h2WW1vZ1lYTWdTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR052Ym1acFp5NXpkV05qWlhOelZISnBaMmRsY2loeVpYTXVaR0YwWVNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPYU9wZVdQbytpL2xPV2JudWFJa09XS24rZWdnVnh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsWVd4RVlYUmhPaUJ6ZEhKcGJtY2dmQ0JKUVc1NVQySnFaV04wSUh3Z1FYSnlZWGxDZFdabVpYSWdQU0JjSWx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NXpkV05qWlhOelJHRjBZU0E5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpXRnNSR0YwWVNBOUlHTnZibVpwWnk1emRXTmpaWE56UkdGMFlTaHlaWE11WkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WaGJFUmhkR0VnUFNCeVpYTXVaR0YwWVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhjSWtaMWJtTjBhVzl1SUhOMVkyTmxjM05FWVhSaElHOWpZM1Z5SUdWeWNtOXlPaUJjSWlBcklHVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDRW9iMkpxSUdGeklFbFNaWEYxWlhOMFQzQjBhVzl1S1M1dWIwTmhZMmhsUm14aGMyZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHprdUxya3VvYmt2NTNvcjRIcG9iWHBuYUxrdUkzcGw2cm5nNEh2dkl6bGlKbmt1STNsbTU3b3NJUHZ2SXpsajZybW1LL252SlBsclpqbW5JRG1sckRtbGJEbWphN3Z2SXpsdm9Ya3VJdm1yS0hvdjV2bGhhWGxobzNubEtoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTV6ZFdOalpYTnpJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbk4xWTJObGMzTW9jbVZoYkVSaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldGc1JHRjBZVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG52SlBsclpqbHJaamxncWhjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhZMmhsVFdGdVlXZGxjaTV6WlhRb2IySnFMQ0J5WldGc1JHRjBZU2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURtanFYbGo2UG92NVRsbTU3bHBMSG90S1hub0lGY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lIc2dkSGx3WlRvZ0oyeHZaMmxqTFdWeWNtOXlKeXdnY21WeklIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDOHZJR2gwZEhCejZMK1U1WnVlNTRxMjVvQ0I1NkNCNloyZU1qQXdYRzRnSUNBZ0lDQWdJSFJvY205M0lIc2dkSGx3WlRvZ0oyaDBkSEF0WlhKeWIzSW5MQ0J5WlhNZ2ZWeHVJQ0FnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdjbVZ6Y0c5dWMyVTdYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XG52YXIgZHVyYXRpb25SZXBvcnRlcl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25SZXBvcnRlclwiKTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVxdWVzdEhhbmRsZXJcIik7XG52YXIgY2hlY2tTZXNzaW9uUHJvbWlzZSA9IG51bGw7XG5mdW5jdGlvbiBjaGVja1Nlc3Npb24oKSB7XG4gICAgaWYgKCFjaGVja1Nlc3Npb25Qcm9taXNlKSB7XG4gICAgICAgIGNoZWNrU2Vzc2lvblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInd4LmNoZWNrU2Vzc2lvbigpXCIpO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB3eC5jaGVja1Nlc3Npb24oe1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KCd3eF9jaGVja1Nlc3Npb24nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja1Nlc3Npb25Qcm9taXNlO1xufVxuZnVuY3Rpb24gaXNTZXNzaW9uRXhwaXJlT3JFbXB0eSgpIHtcbiAgICBpZiAoIXN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgbmV3IERhdGUoKS5nZXRUaW1lKCkgPiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY2hlY2tMb2dpbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAoaXNTZXNzaW9uRXhwaXJlT3JFbXB0eSgpKSB7XG4gICAgICAgICAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbnZhciBsb2dpblByb21pc2UgPSBudWxsO1xuZnVuY3Rpb24gZG9Mb2dpbigpIHtcbiAgICBpZiAoIWxvZ2luUHJvbWlzZSkge1xuICAgICAgICBsb2dpblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBsb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxvZ2luUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGxvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd3eC5sb2dpbicpO1xuICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2RlMlNlc3Npb24ocmVzLmNvZGUpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VW2NvZGUg6I635Y+W5aSx6LSlXVwiIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IHJlcy5lcnJNc2cgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0U2Vzc2lvbihzZXNzaW9uKSB7XG4gICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUsXG4gICAgICAgIGRhdGE6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvblxuICAgIH0pO1xufVxuZnVuY3Rpb24gY29kZTJTZXNzaW9uKGNvZGUpIHtcbiAgICB2YXIgZGF0YTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgfHwge307XG4gICAgfVxuICAgIGRhdGFbY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmNvZGVOYW1lXSA9IGNvZGU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQuZm9ybWF0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwpLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIG1ldGhvZDogY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnJlcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uc3VjY2VzcyhyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5nZXRFcnJvck1zZyhyZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VcIiB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VcIiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkZWxTZXNzaW9uKCkge1xuICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9ICcnO1xuICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVcbiAgICB9KTtcbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gSW5maW5pdHk7XG4gICAgICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXlcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFpbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICByZXR1cm4gY2hlY2tMb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPyBQcm9taXNlLnJlc29sdmUoKSA6IGNoZWNrU2Vzc2lvbigpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcih0aXRsZSwgY29udGVudCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH0pO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKHRpdGxlLCBjb250ZW50KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogdGl0bGUsIGNvbnRlbnQ6IGNvbnRlbnQgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIG1haW46IG1haW4sXG4gICAgc2V0U2Vzc2lvbjogc2V0U2Vzc2lvbixcbiAgICBkZWxTZXNzaW9uOiBkZWxTZXNzaW9uXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWemMybHZiazFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDNObGMzTnBiMjVOWVc1aFoyVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5d3JRMEZCZVVNN1FVRkRla01zZFVSQlFXbEVPMEZCUTJwRUxHMUVRVUUyUXp0QlFVYzNReXhKUVVGSkxHMUNRVUZ0UWl4SFFVRlJMRWxCUVVrc1EwRkJRenRCUVVWd1F5eFRRVUZUTEZsQlFWazdTVUZEYWtJc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZPMUZCUTNSQ0xHMUNRVUZ0UWl4SFFVRkhMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdXVUZET1VNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhEUVVGRE8xbEJRMnBETEVsQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEYmtNc1JVRkJSU3hEUVVGRExGbEJRVmtzUTBGQlF6dG5Ra0ZEV2l4UFFVRlBPMjlDUVVWSUxFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTTdaMEpCUTNKQ0xFTkJRVU03WjBKQlEwUXNTVUZCU1R0dlFrRkZRU3hWUVVGVkxFVkJRVVVzUTBGQlF6dHZRa0ZEWWl4UFFVRlBMRTlCUVU4c1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF6dDNRa0ZEYkVJc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dHZRa0ZEY2tJc1EwRkJReXhGUVVGRkxGVkJRVU1zUjBGQlVUdDNRa0ZEVWl4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZEZGtJc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlExQXNRMEZCUXp0blFrRkRSQ3hSUVVGUk8yOUNRVU5LTEVsQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdiMEpCUTJwRExEQkNRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4TFFVRkxMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlF6TkVMRU5CUVVNN1lVRkRTaXhEUVVGRExFTkJRVUU3VVVGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0TFFVTk1PMGxCUTBRc1QwRkJUeXh0UWtGQmJVSXNRMEZCUXp0QlFVTXZRaXhEUVVGRE8wRkJSMFFzVTBGQlV5eHpRa0ZCYzBJN1NVRkRNMElzU1VGQlNTeERRVUZETEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJSV3BDTEU5QlFVOHNTVUZCU1N4RFFVRkJPMHRCUTJRN1NVRkRSQ3hKUVVGSkxHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFbEJRVWtzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1IwRkJSeXhuUWtGQlRTeERRVUZETEdGQlFXRXNSVUZCUlR0UlFVVjZSU3hWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVU5pTEU5QlFVOHNTVUZCU1N4RFFVRkJPMHRCUTJRN1NVRkRSQ3hQUVVGUExFdEJRVXNzUTBGQlFUdEJRVU5vUWl4RFFVRkRPMEZCUlVRc1UwRkJVeXhWUVVGVk8wbEJRMllzVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJReTlDTEVsQlFVa3NjMEpCUVhOQ0xFVkJRVVVzUlVGQlJUdFpRVVV4UWl4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVOb1F5eFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRGJFSXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOeVFpeERRVUZETEVWQlFVVXNWVUZCUXl4SFFVRlJPMmRDUVVOU0xFOUJRVThzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNaQ0xFTkJRVU1zUTBGQlF5eERRVUZCTzFOQlEwdzdZVUZCVFR0WlFVVklMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03VTBGRGNFSTdTVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGSFJDeEpRVUZKTEZsQlFWa3NSMEZCVVN4SlFVRkpMRU5CUVVNN1FVRkZOMElzVTBGQlV5eFBRVUZQTzBsQlExb3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSVHRSUVVObUxGbEJRVmtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xbEJRM1pETEV0QlFVc3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRFZDeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMmRDUVVOd1FpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTNKQ0xFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRkRMRWRCUVVjN1owSkJRMVFzV1VGQldTeEhRVUZITEVsQlFVa3NRMEZCUXp0blFrRkRjRUlzVDBGQlR5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRka0lzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEVUN4RFFVRkRMRU5CUVVNc1EwRkJRVHRMUVVOTU8wbEJRMFFzVDBGQlR5eFpRVUZaTEVOQlFVTTdRVUZEZUVJc1EwRkJRenRCUVVWRUxGTkJRVk1zUzBGQlN6dEpRVU5XTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzFGQlEzaENMRWxCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1VVRkRia01zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXp0WlFVTk1MRTlCUVU4c1dVRkJReXhIUVVGSE8yZENRVU5RTEVsQlFVa3NSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSVHR2UWtGRFZpeFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dDNRa0ZEZUVJc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dHZRa0ZEY2tJc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNSMEZCUnp0M1FrRkRWQ3hQUVVGUExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkRka0lzUTBGQlF5eERRVUZETEVOQlFVRTdhVUpCUTB3N2NVSkJRVTA3YjBKQlEwZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4clFrRkJhMElzUlVGQlF5eERRVUZETEVOQlFVTTdhVUpCUTJwRk8xbEJRMHdzUTBGQlF6dFpRVU5FTEZGQlFWRTdaMEpCUTBvc1NVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRuUWtGRGFrTXNNRUpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGNFUXNRMEZCUXp0WlFVTkVMRWxCUVVrc1dVRkJReXhIUVVGSE8yZENRVU5LTEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFTkJRVU03V1VGRE1VUXNRMEZCUXp0VFFVTktMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1ZVRkJWU3hEUVVGRExFOUJRV1U3U1VGREwwSXNaMEpCUVUwc1EwRkJReXhQUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETzBsQlJYcENMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJSV2hETEVsQlFVa3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4blFrRkJUU3hEUVVGRExHZENRVUZuUWl4RlFVRkZPMUZCUTNKRUxHZENRVUZOTEVOQlFVTXNZVUZCWVN4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNRMEZCUXp0UlFVTjJSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFsQlExWXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENPMWxCUXpWQ0xFbEJRVWtzUlVGQlJTeE5RVUZOTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU03VTBGRGNrTXNRMEZCUXl4RFFVRkJPMHRCUTB3N1NVRkRSQ3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlExWXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zVjBGQmNVSTdVVUZEYWtNc1NVRkJTU3hGUVVGRkxHZENRVUZOTEVOQlFVTXNUMEZCVHp0TFFVTjJRaXhEUVVGRExFTkJRVU03UVVGRFVDeERRVUZETzBGQlJVUXNVMEZCVXl4WlFVRlpMRU5CUVVNc1NVRkJXVHRKUVVNNVFpeEpRVUZKTEVsQlFWTXNRMEZCUXp0SlFVVmtMRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRMnBFTEVsQlFVa3NSMEZCUnl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0TFFVTjBRenRUUVVGTk8xRkJRMGdzU1VGQlNTeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdTMEZETVVNN1NVRkRSQ3hKUVVGSkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1VVRkJVeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzBsQlJUVkRMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMnBETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNN1dVRkRVQ3hIUVVGSExFVkJRVVVzZDBKQlFXTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRPMWxCUTNCRUxFbEJRVWtzVFVGQlFUdFpRVU5LTEUxQlFVMHNSVUZCUlN4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVsQlFVa3NTMEZCU3p0WlFVTTFReXhQUVVGUExGbEJRVU1zUjBGQmIwTTdaMEpCUTNoRExFbEJRVWtzUjBGQlJ5eERRVUZETEZWQlFWVXNTMEZCU3l4SFFVRkhMRVZCUVVVN2IwSkJSWGhDTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeEZRVUZGTzNkQ1FVTTNRaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8zZENRVU12UWl3d1FrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRVHR4UWtGRGJrVTdiMEpCUlVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzI5Q1FVTllMRWxCUVVrN2QwSkJRMEVzUTBGQlF5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN2NVSkJRemxETzI5Q1FVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8zRkNRVU5ZTzI5Q1FVVkVMRWxCUVVrc1EwRkJReXhGUVVGRk8zZENRVU5JTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF6dDNRa0ZGYmtJc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhKUVVGSkxFTkJRVU03ZDBKQlJXaERMRWxCUVVrc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk96UkNRVU55UkN4blFrRkJUU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU03TkVKQlEzWkZMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU03WjBOQlExWXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENPMmREUVVNMVFpeEpRVUZKTEVWQlFVVXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZET3paQ1FVTnlReXhEUVVGRExFTkJRVUU3ZVVKQlEwdzdkMEpCUTBRc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF6czBRa0ZEVml4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFhRVUZYT3pSQ1FVTjJRaXhKUVVGSkxFVkJRVVVzWjBKQlFVMHNRMEZCUXl4UFFVRlBPM2xDUVVOMlFpeERRVUZETEVOQlFVTTdkMEpCUTBnc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dHhRa0ZEY0VJN2VVSkJRVTA3ZDBKQlEwZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc2MwSkJRVmtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenR4UWtGRGFFUTdhVUpCUTBvN2NVSkJRVTA3YjBKQlEwZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRVZCUVVNc1EwRkJReXhEUVVGRE8ybENRVU4wUkR0WlFVTk1MRU5CUVVNN1dVRkRSQ3hSUVVGUk8xbEJRMUlzUTBGQlF6dFpRVU5FTEVsQlFVa3NSVUZCUlR0blFrRkRSaXhQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTTdXVUZEZGtRc1EwRkJRenRUUVVOS0xFTkJRVU1zUTBGQlFUdEpRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVkRUxGTkJRVk1zVlVGQlZUdEpRVU5tTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU53UWl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRE8xRkJRMklzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1YwRkJjVUk3UzBGRGNFTXNRMEZCUXl4RFFVRkRPMGxCUTBnc1NVRkJTU3huUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhKUVVGSkxHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVU3VVVGRGNrUXNaMEpCUVUwc1EwRkJReXhoUVVGaExFZEJRVWNzVVVGQlVTeERRVUZETzFGQlEyaERMRVZCUVVVc1EwRkJReXhoUVVGaExFTkJRVU03V1VGRFlpeEhRVUZITEVWQlFVVXNaMEpCUVUwc1EwRkJReXhuUWtGQlowSTdVMEZETDBJc1EwRkJReXhEUVVGQk8wdEJRMHc3UVVGRFRDeERRVUZETzBGQlJVUXNVMEZCVXl4SlFVRkpPMGxCUTFRc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMUZCUXk5Q0xFOUJRVThzVlVGQlZTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNKQ0xFOUJRVThzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUVR0UlFVTjRSU3hEUVVGRExFVkJRVVVzVlVGQlF5eEZRVUZuUWp0blFrRkJaaXhuUWtGQlN5eEZRVUZGTEc5Q1FVRlBPMWxCUTJZc2MwSkJRVmtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xbEJRM0pETEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1MwRkJTeXhQUVVGQkxFVkJRVVVzVDBGQlR5eFRRVUZCTEVWQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNCRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTktMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRGNrSXNRMEZCUXl4RlFVRkZMRlZCUVVNc1JVRkJaMEk3WjBKQlFXWXNaMEpCUVVzc1JVRkJSU3h2UWtGQlR6dFpRVU5tTEhOQ1FVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0WlFVTnlReXhQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEV0QlFVc3NUMEZCUVN4RlFVRkZMRTlCUVU4c1UwRkJRU3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53UXl4RFFVRkRMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzU1VGQlNTeE5RVUZCTzBsQlEwb3NWVUZCVlN4WlFVRkJPMGxCUTFZc1ZVRkJWU3haUVVGQk8wTkJRMklzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnpkR0YwZFhNZ1puSnZiU0FuTGk0dmMzUnZjbVV2YzNSaGRIVnpKMXh1YVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnWlhKeWIzSklZVzVrYkdWeUlHWnliMjBnSnk0dlpYSnliM0pJWVc1a2JHVnlKMXh1YVcxd2IzSjBJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSWdabkp2YlNBbkxpOWtkWEpoZEdsdmJsSmxjRzl5ZEdWeUoxeHVhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR2Y21WeGRXVnpkRWhoYm1Sc1pYSW5YRzVjYmk4cUlPZVVuK1dSdmVXUnFPYWNuK1dHaGVXUHF1V0JtdVM0Z09hc29lZWFoR05vWldOclUyVnpjMmx2YmlBcUwxeHViR1YwSUdOb1pXTnJVMlZ6YzJsdmJsQnliMjFwYzJVNklHRnVlU0E5SUc1MWJHdzdYRzVjYm1aMWJtTjBhVzl1SUdOb1pXTnJVMlZ6YzJsdmJpZ3BJSHRjYmlBZ0lDQnBaaUFvSVdOb1pXTnJVMlZ6YzJsdmJsQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lDQWdZMmhsWTJ0VFpYTnphVzl1VUhKdmJXbHpaU0E5SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdWJHOW5LRndpZDNndVkyaGxZMnRUWlhOemFXOXVLQ2xjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnpkR0Z5ZENBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2QzZ3VZMmhsWTJ0VFpYTnphVzl1S0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRXTmpaWE56S0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbm1idmx2WlhtZ0lIbW5Jbm1sWWp2dkl6a3VKVGxuS2ptbkt6bmxKL2xrYjNsa2FqbW5KL2xob1htbDZEcG9idmxobzNtbzREcHFvemt1b1pjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWmhhV3dvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9lWnUrVzlsZWFBZ2VpL2grYWNuMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1pXeFRaWE56YVc5dUtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrYjB4dloybHVLQ2t1ZEdobGJpZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMQ0FvY21Wek9pQmhibmtwUFQ1N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Z1WkNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5TG5KbGNHOXlkQ2duZDNoZlkyaGxZMnRUWlhOemFXOXVKeXdnYzNSaGNuUXNJR1Z1WkNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR05vWldOclUyVnpjMmx2YmxCeWIyMXBjMlU3WEc1OVhHNWNiaThxSU9XSXBPYVdyWE5sYzNOcGIyN21tSy9sa0tia3VMcm5xYnJtaUpibHQ3TG92NGZtbko4Z0tpOWNibVoxYm1OMGFXOXVJR2x6VTJWemMybHZia1Y0Y0dseVpVOXlSVzF3ZEhrb0tTQjdYRzRnSUNBZ2FXWWdLQ0Z6ZEdGMGRYTXVjMlZ6YzJsdmJpa2dlMXh1SUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHpudkpQbHJaamt1SzNtc3FIbW5JbHpaWE56YVc5dVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaGpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVlJwYldVZ0ppWWdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2tnUGlCemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpTa2dlMXh1SUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHptbklub3JyN252YTdtbkt6bG5MQnpaWE56YVc5dTU3eVQ1YTJZNXBlMjZaZTA3N3lNNUxpVTU3eVQ1YTJZNXBlMjZaZTA1YmV5NVlpd1hHNGdJQ0FnSUNBZ0lHUmxiRk5sYzNOcGIyNG9LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdWY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sWEc1OVhHNWNibVoxYm1OMGFXOXVJR05vWldOclRHOW5hVzRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0dselUyVnpjMmx2YmtWNGNHbHlaVTl5Ulcxd2RIa29LU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNXJLaDVweUo1NW03NlptRzVvQ0I3N3lNNUxpTjZaeUE2S2FCNVlhTlkyaGxZMnRUWlhOemFXOXVYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNW1hV2N1Wkc5T2IzUkRhR1ZqYTFObGMzTnBiMjRnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSdlRHOW5hVzRvS1M1MGFHVnVLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlN3Z0tISmxjem9nWVc1NUtUMCtlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG52SlBsclpqa3VLM21uSWx6WlhOemFXOXU1TGlVNXB5cTZMK0g1cHlmWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTbGNibjFjYmx4dUx5b2c1NW03NlptRzVyV0I1NmlMNTVxRWNISnZiV2x6WlNBcUwxeHViR1YwSUd4dloybHVVSEp2YldselpUb2dZVzU1SUQwZ2JuVnNiRHRjYmx4dVpuVnVZM1JwYjI0Z1pHOU1iMmRwYmlncElIdGNiaUFnSUNCcFppQW9JV3h2WjJsdVVISnZiV2x6WlNrZ2UxeHVJQ0FnSUNBZ0lDQnNiMmRwYmxCeWIyMXBjMlVnUFNCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNiMmRwYmlncExuUm9aVzRvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3h2WjJsdVVISnZiV2x6WlNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaHlaWE1wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMmRwYmxCeWIyMXBjMlVnUFNCdWRXeHNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JHOW5hVzVRY205dGFYTmxPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnNiMmRwYmlncElIdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JqYjI1emIyeGxMbXh2WnlnbmQzZ3ViRzluYVc0bktUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MzUmhjblFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNiaUFnSUNBZ0lDQWdkM2d1Ykc5bmFXNG9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3loeVpYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVnpMbU52WkdVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5a1pUSlRaWE56YVc5dUtISmxjeTVqYjJSbEtTNTBhR1Z1S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcExtTmhkR05vS0NoeVpYTXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSHQwYVhSc1pUb2dYQ0xubWJ2bHZaWGxwTEhvdEtWY0lpd2dYQ0pqYjI1MFpXNTBYQ0k2SUZ3aTZLKzM1NmlONVpDTzZZZU42SytWVzJOdlpHVWc2STYzNVkrVzVhU3g2TFNsWFZ3aWZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJYQnNaWFJsS0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdWdVpDQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1Y21Wd2IzSjBLQ2QzZUY5c2IyZHBiaWNzSUhOMFlYSjBMQ0JsYm1RcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1poYVd3b2NtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkR2wwYkdVNklGd2k1NW03NWIyVjVhU3g2TFNsWENJc0lGd2lZMjl1ZEdWdWRGd2lPaUJ5WlhNdVpYSnlUWE5uZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnYzJWMFUyVnpjMmx2YmloelpYTnphVzl1T2lCemRISnBibWNwSUh0Y2JpQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJpQTlJSE5sYzNOcGIyNDdYRzRnSUNBZ0x5OGc1bzJpNVp1ZTVwMmw1NXFFYzJWemMybHZidSs4ak9TNGplbWNnT2ltZ2VXR2pXTm9aV05yVTJWemMybHZibHh1SUNBZ0lHTnZibVpwWnk1a2IwNXZkRU5vWldOclUyVnpjMmx2YmlBOUlIUnlkV1U3WEc0Z0lDQWdMeThnNWFhQzVwNmM1cHlKNks2KzU3MnU1cHlzNVp5d2MyVnpjMmx2YnVpL2grYWNuK2FYdHVtWHRGeHVJQ0FnSUdsbUlDaGpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVlJwYldVZ0ppWWdZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrcElIdGNiaUFnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tTQXJJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpUdGNiaUFnSUNBZ0lDQWdkM2d1YzJWMFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JyWlhrNklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ1UzUnlhVzVuS0hOMFlYUjFjeTV6WlhOemFXOXVSWGh3YVhKbEtWeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lIMWNiaUFnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjYmlBZ0lDQWdJQ0FnYTJWNU9pQmpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVWdZWE1nYzNSeWFXNW5MRnh1SUNBZ0lDQWdJQ0JrWVhSaE9pQnpkR0YwZFhNdWMyVnpjMmx2Ymx4dUlDQWdJSDBwTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJqYjJSbE1sTmxjM05wYjI0b1kyOWtaVG9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdiR1YwSUdSaGRHRTZJR0Z1ZVR0Y2JpQWdJQ0F2THlCamIyUmxWRzlUWlhOemFXOXVMbVJoZEdIbWxLL21qSUhsaDczbWxiQmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbVJoZEdFZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmtZWFJoSUQwZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVaR0YwWVNncE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdSaGRHRWdQU0JqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1a1lYUmhJSHg4SUh0OU8xeHVJQ0FnSUgxY2JpQWdJQ0JrWVhSaFcyTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbU52WkdWT1lXMWxJVjBnUFNCamIyUmxPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSE4wWVhKMElEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEc0Z0lDQWdJQ0FnSUhkNExuSmxjWFZsYzNRb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZFhKc09pQnlaWEYxWlhOMFNHRnVaR3hsY2k1bWIzSnRZWFFvWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dWRYSnNLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnRaWFJvYjJRNklHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbTFsZEdodlpDQjhmQ0FuUjBWVUp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQjNlQzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEpsY3k1emRHRjBkWE5EYjJSbElEMDlQU0F5TURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzZJQ1g1cGUyNUxpSzVvcWxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTV5WlhCdmNuUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCbGJtUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1Y21Wd2IzSjBLR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG5KbGNHOXlkQ3dnYzNSaGNuUXNJR1Z1WkNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J6SUQwZ1hDSmNJanRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE1nUFNCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNXpkV05qWlhOektISmxjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ2N6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2FOb3VXYm51YWRwZWVhaEhObGMzTnBiMjd2dkl6a3VJM3BuSURvcG9IbGhvMWphR1ZqYTFObGMzTnBiMjVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym1acFp5NWtiMDV2ZEVOb1pXTnJVMlZ6YzJsdmJpQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RGxwb0xtbnB6bW5Jbm9ycjdudmE3bW5LemxuTEJ6WlhOemFXOXU2TCtINXB5ZjVwZTI2WmUwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsSUNZbUlHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tTQXJJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IzZUM1elpYUlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nVTNSeWFXNW5LSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoT2lCemRHRjBkWE11YzJWemMybHZibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaGxjbkp2Y2toaGJtUnNaWEl1WjJWMFJYSnliM0pOYzJjb2NtVnpLU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBhWFJzWlRvZ1hDTG5tYnZsdlpYbHBMSG90S1ZjSWl3Z1hDSmpiMjUwWlc1MFhDSTZJRndpNksrMzU2aU41WkNPNlllTjZLK1ZYQ0o5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0d4bGRHVW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1ptRnBiRG9nS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2UzUnBkR3hsT2lCY0l1ZVp1K1c5bGVXa3NlaTBwVndpTENCY0ltTnZiblJsYm5SY0lqb2dYQ0xvcjdmbnFJM2xrSTdwaDQzb3I1VmNJbjBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDBwWEc1OVhHNWNiaThxSU9hNGhlZXB1bk5sYzNOcGIyNGdLaTljYm1aMWJtTjBhVzl1SUdSbGJGTmxjM05wYjI0b0tTQjdYRzRnSUNBZ2MzUmhkSFZ6TG5ObGMzTnBiMjRnUFNBbkp6dGNiaUFnSUNCM2VDNXlaVzF2ZG1WVGRHOXlZV2RsS0h0Y2JpQWdJQ0FnSUNBZ2EyVjVPaUJqYjI1bWFXY3VjMlZ6YzJsdmJrNWhiV1VnWVhNZ2MzUnlhVzVuWEc0Z0lDQWdmU2s3WEc0Z0lDQWdhV1lnS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU0FtSmlCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU2tnZTF4dUlDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpTQTlJRWx1Wm1sdWFYUjVPMXh1SUNBZ0lDQWdJQ0IzZUM1eVpXMXZkbVZUZEc5eVlXZGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYbGNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlHMWhhVzRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHTm9aV05yVEc5bmFXNG9LUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmpiMjVtYVdjdVpHOU9iM1JEYUdWamExTmxjM05wYjI0Z1B5QlFjbTl0YVhObExuSmxjMjlzZG1Vb0tTQTZJR05vWldOclUyVnpjMmx2YmlncFhHNGdJQ0FnSUNBZ0lIMHNJQ2g3ZEdsMGJHVXNJR052Ym5SbGJuUjlLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdVpHOUZjbkp2Y2loMGFYUnNaU3dnWTI5dWRHVnVkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0h0MGFYUnNaU3dnWTI5dWRHVnVkSDBwTzF4dUlDQWdJQ0FnSUNCOUtTNTBhR1Z1S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lIMHNJQ2g3ZEdsMGJHVXNJR052Ym5SbGJuUjlLVDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1Z5Y205eVNHRnVaR3hsY2k1a2IwVnljbTl5S0hScGRHeGxMQ0JqYjI1MFpXNTBLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvZTNScGRHeGxMQ0JqYjI1MFpXNTBmU2s3WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlNsY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdlMXh1SUNBZ0lHMWhhVzRzWEc0Z0lDQWdjMlYwVTJWemMybHZiaXhjYmlBZ0lDQmtaV3hUWlhOemFXOXVYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBkZWZhdWx0Q29uZmlnID0ge1xuICAgIHNlc3Npb25OYW1lOiBcInNlc3Npb25cIixcbiAgICBsb2dpblRyaWdnZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgY29kZVRvU2Vzc2lvbjoge1xuICAgICAgICB1cmw6IFwiXCIsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHsgfVxuICAgIH0sXG4gICAgc3VjY2Vzc1RyaWdnZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICB1cmxQZXJmaXg6IFwiXCIsXG4gICAgZG9Ob3RDaGVja1Nlc3Npb246IGZhbHNlLFxuICAgIGVycm9yVGl0bGU6IFwi5pON5L2c5aSx6LSlXCIsXG4gICAgZXJyb3JDb250ZW50OiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICByZUxvZ2luTGltaXQ6IDMsXG4gICAgZXJyb3JDYWxsYmFjazogbnVsbCxcbiAgICByZXBvcnRDR0k6IGZhbHNlLFxuICAgIG1vY2tKc29uOiBmYWxzZSxcbiAgICBnbG9iYWxEYXRhOiBmYWxzZSxcbiAgICBzZXNzaW9uRXhwaXJlS2V5OiBcInNlc3Npb25FeHBpcmVLZXlcIlxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRDb25maWc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMMk52Ym1acFp5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVWQkxFbEJRVTBzWVVGQllTeEhRVUZuUWp0SlFVTXZRaXhYUVVGWExFVkJRVVVzVTBGQlV6dEpRVU4wUWl4WlFVRlpPMUZCUTFJc1QwRkJUeXhMUVVGTExFTkJRVUU3U1VGRGFFSXNRMEZCUXp0SlFVTkVMR0ZCUVdFc1JVRkJSVHRSUVVOWUxFZEJRVWNzUlVGQlJTeEZRVUZGTzFGQlExQXNUMEZCVHl4RlFVRkZMR05CUVUwc1EwRkJRenRMUVVOdVFqdEpRVU5FTEdOQlFXTTdVVUZEVml4UFFVRlBMRWxCUVVrc1EwRkJRVHRKUVVObUxFTkJRVU03U1VGRFJDeFRRVUZUTEVWQlFVVXNSVUZCUlR0SlFVTmlMR2xDUVVGcFFpeEZRVUZGTEV0QlFVczdTVUZEZUVJc1ZVRkJWU3hGUVVGRkxFMUJRVTA3U1VGRGJFSXNXVUZCV1N4WlFVRkRMRWRCUVZFN1VVRkRha0lzVDBGQlR5eEhRVUZITEVOQlFVRTdTVUZEWkN4RFFVRkRPMGxCUTBRc1dVRkJXU3hGUVVGRkxFTkJRVU03U1VGRFppeGhRVUZoTEVWQlFVVXNTVUZCU1R0SlFVTnVRaXhUUVVGVExFVkJRVVVzUzBGQlN6dEpRVU5vUWl4UlFVRlJMRVZCUVVVc1MwRkJTenRKUVVObUxGVkJRVlVzUlVGQlJTeExRVUZMTzBsQlJXcENMR2RDUVVGblFpeEZRVUZGTEd0Q1FVRnJRanREUVVOMlF5eERRVUZETzBGQlJVWXNhMEpCUVdVc1lVRkJZU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVWx1YVhSUGNIUnBiMjRnZlNCbWNtOXRJQ2N1TGk5cGJuUmxjbVpoWTJVblhHNWNibU52Ym5OMElHUmxabUYxYkhSRGIyNW1hV2M2SUVsSmJtbDBUM0IwYVc5dUlEMGdlMXh1SUNBZ0lITmxjM05wYjI1T1lXMWxPaUJjSW5ObGMzTnBiMjVjSWl4Y2JpQWdJQ0JzYjJkcGJsUnlhV2RuWlhJb0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlZ4dUlDQWdJSDBzWEc0Z0lDQWdZMjlrWlZSdlUyVnpjMmx2YmpvZ2UxeHVJQ0FnSUNBZ0lDQjFjbXc2SUZ3aVhDSXNYRzRnSUNBZ0lDQWdJSE4xWTJObGMzTTZJQ2dwUFQ0Z2UzMWNiaUFnSUNCOUxGeHVJQ0FnSUhOMVkyTmxjM05VY21sbloyVnlLQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpWeHVJQ0FnSUgwc1hHNGdJQ0FnZFhKc1VHVnlabWw0T2lCY0lsd2lMRnh1SUNBZ0lHUnZUbTkwUTJobFkydFRaWE56YVc5dU9pQm1ZV3h6WlN4Y2JpQWdJQ0JsY25KdmNsUnBkR3hsT2lCY0l1YVRqZVM5bk9Xa3NlaTBwVndpTEZ4dUlDQWdJR1Z5Y205eVEyOXVkR1Z1ZENoeVpYTTZJR0Z1ZVNrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpYRzRnSUNBZ2ZTeGNiaUFnSUNCeVpVeHZaMmx1VEdsdGFYUTZJRE1zWEc0Z0lDQWdaWEp5YjNKRFlXeHNZbUZqYXpvZ2JuVnNiQ3hjYmlBZ0lDQnlaWEJ2Y25SRFIwazZJR1poYkhObExGeHVJQ0FnSUcxdlkydEtjMjl1T2lCbVlXeHpaU3hjYmlBZ0lDQm5iRzlpWVd4RVlYUmhPaUJtWVd4elpTeGNiaUFnSUNBdkx5QnpaWE56YVc5dTVaeW81cHlzNVp5dzU3eVQ1YTJZNTVxRWEyVjVYRzRnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVXRsZVRvZ1hDSnpaWE56YVc5dVJYaHdhWEpsUzJWNVhDSmNibjA3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdSbFptRjFiSFJEYjI1bWFXYzdYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNlc3Npb246ICcnLFxuICAgIHNlc3Npb25FeHBpcmU6IEluZmluaXR5XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzNSaGRIVnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzTjBiM0psTDNOMFlYUjFjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMR3RDUVVGbE8wbEJRMWdzVDBGQlR5eEZRVUZGTEVWQlFWazdTVUZGY2tJc1lVRkJZU3hGUVVGRkxGRkJRV3RDTzBOQlF6ZENMRU5CUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hHNGdJQ0FnYzJWemMybHZiam9nSnljZ1lYTWdjM1J5YVc1bkxGeHVJQ0FnSUM4dklITmxjM05wYjI3b3Y0Zm1uSi9ubW9UbWw3YnBsN1RuZ3JsY2JpQWdJQ0J6WlhOemFXOXVSWGh3YVhKbE9pQkpibVpwYm1sMGVTQmhjeUJ1ZFcxaVpYSmNibjBnWVhNZ1lXNTVYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gc2hvdyh0eHQpIHtcbiAgICB3eC5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogdHlwZW9mIHR4dCA9PT0gJ2Jvb2xlYW4nID8gJ+WKoOi9veS4rScgOiB0eHQsXG4gICAgICAgIGljb246ICdsb2FkaW5nJyxcbiAgICAgICAgbWFzazogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDYwMDAwXG4gICAgfSk7XG59XG5mdW5jdGlvbiBoaWRlKCkge1xuICAgIHd4LmhpZGVUb2FzdCh7fSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2hvdzogc2hvdyxcbiAgICBoaWRlOiBoaWRlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYkc5aFpHbHVaeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTFkR2xzTDJ4dllXUnBibWN1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3hUUVVGVExFbEJRVWtzUTBGQlF5eEhRVUZ4UWp0SlFVTXZRaXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETzFGQlExUXNTMEZCU3l4RlFVRkZMRTlCUVU4c1IwRkJSeXhMUVVGTExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSE8xRkJRemRETEVsQlFVa3NSVUZCUlN4VFFVRlRPMUZCUTJZc1NVRkJTU3hGUVVGRkxFbEJRVWs3VVVGRFZpeFJRVUZSTEVWQlFVVXNTMEZCU3p0TFFVTnNRaXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4SlFVRkpPMGxCUTFRc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTnlRaXhEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4SlFVRkpMRTFCUVVFN1NVRkRTaXhKUVVGSkxFMUJRVUU3UTBGRFVDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpuVnVZM1JwYjI0Z2MyaHZkeWgwZUhRNklHSnZiMnhsWVc0Z2ZDQnpkSEpwYm1jcElIdGNiaUFnSUNCM2VDNXphRzkzVkc5aGMzUW9lMXh1SUNBZ0lDQWdJQ0IwYVhSc1pUb2dkSGx3Wlc5bUlIUjRkQ0E5UFQwZ0oySnZiMnhsWVc0bklEOGdKK1dLb09pOXZlUzRyU2NnT2lCMGVIUXNYRzRnSUNBZ0lDQWdJR2xqYjI0NklDZHNiMkZrYVc1bkp5eGNiaUFnSUNBZ0lDQWdiV0Z6YXpvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnWkhWeVlYUnBiMjQ2SURZd01EQXdYRzRnSUNBZ2ZTbGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FHbGtaU2dwSUh0Y2JpQWdJQ0IzZUM1b2FXUmxWRzloYzNRb2UzMHBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hHNGdJQ0FnYzJodmR5eGNiaUFnSUNCb2FXUmxYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBzZXRQYXJhbXModXJsLCBwYXJhbXMpIHtcbiAgICBpZiAodXJsID09PSB2b2lkIDApIHsgdXJsID0gXCJcIjsgfVxuICAgIHZhciBxdWVyeVN0cmluZ0luZGV4ID0gdXJsLmluZGV4T2YoXCI/XCIpO1xuICAgIHZhciBrdnAgPSB7fTtcbiAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBvbGRRdWVyeVN0cmluZ18xID0gdXJsLnN1YnN0cihxdWVyeVN0cmluZ0luZGV4ICsgMSkuc3BsaXQoXCImXCIpO1xuICAgICAgICBvbGRRdWVyeVN0cmluZ18xLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHZhciBrdiA9IG9sZFF1ZXJ5U3RyaW5nXzFbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICAgICAga3ZwW2t2WzBdXSA9IGt2WzFdO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAga3ZwID0gX19hc3NpZ24oe30sIGt2cCwgcGFyYW1zKTtcbiAgICB2YXIgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhrdnApXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ICsgXCI9XCIgKyBlbmNvZGVVUkkoa3ZwW2tleV0pO1xuICAgIH0pXG4gICAgICAgIC5qb2luKFwiJlwiKTtcbiAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RyaW5nSW5kZXggKyAxKSArIHF1ZXJ5U3RyaW5nO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVybCArIFwiP1wiICsgcXVlcnlTdHJpbmc7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNldFBhcmFtczogc2V0UGFyYW1zXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhKc0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNWMGFXd3ZkWEpzTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN4VFFVRlRMRk5CUVZNc1EwRkJReXhIUVVGblFpeEZRVUZGTEUxQlFXTTdTVUZCYUVNc2IwSkJRVUVzUlVGQlFTeFJRVUZuUWp0SlFVTXZRaXhKUVVGTkxHZENRVUZuUWl4SFFVRlhMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEYkVRc1NVRkJTU3hIUVVGSExFZEJRVkVzUlVGQlJTeERRVUZETzBsQlEyeENMRWxCUVVrc1owSkJRV2RDTEVsQlFVa3NRMEZCUXl4RlFVRkZPMUZCUTNaQ0xFbEJRVTBzWjBKQlFXTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVnVSU3huUWtGQll5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE8xbEJRM2hDTEVsQlFVMHNSVUZCUlN4SFFVRmhMR2RDUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnhFTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka0lzUTBGQlF5eERRVUZETEVOQlFVTTdTMEZEVGp0SlFVVkVMRWRCUVVjc1owSkJRVThzUjBGQlJ5eEZRVUZMTEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUlRGQ0xFbEJRVTBzVjBGQlZ5eEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8xTkJReTlDTEVkQlFVY3NRMEZCUXl4VlFVRkJMRWRCUVVjN1VVRkRTaXhQUVVGVkxFZEJRVWNzVTBGQlNTeFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGSExFTkJRVU03U1VGRE0wTXNRMEZCUXl4RFFVRkRPMU5CUTBRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlJXWXNTVUZCU1N4blFrRkJaMElzU1VGQlNTeERRVUZETEVWQlFVVTdVVUZEZGtJc1QwRkJUeXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUlN4blFrRkJaMElzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4WFFVRlhMRU5CUVVNN1MwRkRMMFE3VTBGQlRUdFJRVU5JTEU5QlFVOHNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGRGJFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeFRRVUZUTEZkQlFVRTdRMEZEV2l4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWm5WdVkzUnBiMjRnYzJWMFVHRnlZVzF6S0hWeWJEb2djM1J5YVc1bklEMGdYQ0pjSWl3Z2NHRnlZVzF6T2lCdlltcGxZM1FwSUh0Y2JpQWdJQ0JqYjI1emRDQnhkV1Z5ZVZOMGNtbHVaMGx1WkdWNE9pQnVkVzFpWlhJZ1BTQjFjbXd1YVc1a1pYaFBaaWhjSWo5Y0lpazdYRzRnSUNBZ2JHVjBJR3QyY0RvZ1lXNTVJRDBnZTMwN1hHNGdJQ0FnYVdZZ0tIRjFaWEo1VTNSeWFXNW5TVzVrWlhnZ1BqMGdNQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J2YkdSUmRXVnllVk4wY21sdVp5QTlJSFZ5YkM1emRXSnpkSElvY1hWbGNubFRkSEpwYm1kSmJtUmxlQ0FySURFcExuTndiR2wwS0Z3aUpsd2lLVHRjYmlBZ0lDQWdJQ0FnTHk4Z1FIUnpMV2xuYm05eVpWeHVJQ0FnSUNBZ0lDQnZiR1JSZFdWeWVWTjBjbWx1Wnk1bWIzSkZZV05vS0NoNExDQnBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnJkam9nYzNSeWFXNW5XMTBnUFNCdmJHUlJkV1Z5ZVZOMGNtbHVaMXRwWFM1emNHeHBkQ2hjSWoxY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcmRuQmJhM1piTUYxZElEMGdhM1piTVYwN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHdDJjQ0E5SUhzdUxpNXJkbkFzSUM0dUxuQmhjbUZ0YzMwN1hHNWNiaUFnSUNCamIyNXpkQ0J4ZFdWeWVWTjBjbWx1WnlBOUlFOWlhbVZqZEM1clpYbHpLR3QyY0NsY2JpQWdJQ0FnSUNBZ0xtMWhjQ2hyWlhrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdBa2UydGxlWDA5Skh0bGJtTnZaR1ZWVWtrb2EzWndXMnRsZVYwcGZXQTdYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0FnSUM1cWIybHVLRndpSmx3aUtUdGNibHh1SUNBZ0lHbG1JQ2h4ZFdWeWVWTjBjbWx1WjBsdVpHVjRJRDQ5SURBcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnliQzV6ZFdKemRISnBibWNvTUN3Z2NYVmxjbmxUZEhKcGJtZEpibVJsZUNBcklERXBJQ3NnY1hWbGNubFRkSEpwYm1jN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFZ5YkNBcklGd2lQMXdpSUNzZ2NYVmxjbmxUZEhKcGJtYzdYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjMlYwVUdGeVlXMXpYRzU5TzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2ZXJzaW9uID0gX19WRVJTSU9OX187XG5leHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZG1WeWMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5MlpYSnphVzl1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJSVUVzU1VGQlRTeFBRVUZQTEVkQlFVY3NWMEZCVnl4RFFVRkRPMEZCUlc1Q0xEQkNRVUZQSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpHVmpiR0Z5WlNCamIyNXpkQ0JmWDFaRlVsTkpUMDVmWHpvZ2MzUnlhVzVuTzF4dVhHNWpiMjV6ZENCMlpYSnphVzl1SUQwZ1gxOVdSVkpUU1U5T1gxODdYRzVjYm1WNGNHOXlkQ0I3SUhabGNuTnBiMjRnZlR0Y2JpSmRmUT09Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/build/weRequest.min.js b/build/weRequest.min.js index 14af7ae..0ddb260 100644 --- a/build/weRequest.min.js +++ b/build/weRequest.min.js @@ -2,4 +2,4 @@ * weRequest 1.2.9 * 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},urlPerfix:"",doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey"}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0}},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;rn.default.sessionExpire&&(d(),1)?(o.default.doNotCheckSession=!0,c().then(function(){return e()},function(e){return t(e)})):e()})}var l=null;function c(){return l||(l=new Promise(function(e,t){new Promise(function(e,t){console.log("wx.login");var r=(new Date).getTime();wx.login({success:function(r){if(!r.code)return t({title:"登录失败",content:"请稍后重试[code 获取失败]"});(function(e){var t;return(t="function"==typeof o.default.codeToSession.data?o.default.codeToSession.data():o.default.codeToSession.data||{})[o.default.codeToSession.codeName]=e,new Promise(function(e,r){var s=(new Date).getTime();wx.request({url:a.default.format(o.default.codeToSession.url),data:t,method:o.default.codeToSession.method||"GET",success:function(t){if(200===t.statusCode){if(o.default.codeToSession.report){var a=(new Date).getTime();i.default.report(o.default.codeToSession.report,s,a)}var f="";try{f=o.default.codeToSession.success(t.data)}catch(e){}return f?(n.default.session=f,o.default.doNotCheckSession=!0,o.default.sessionExpireTime&&o.default.sessionExpireKey&&(n.default.sessionExpire=(new Date).getTime()+o.default.sessionExpireTime,wx.setStorage({key:o.default.sessionExpireKey,data:String(n.default.sessionExpire)})),wx.setStorage({key:o.default.sessionName,data:n.default.session}),e()):r(u.default.getErrorMsg(t))}return r({title:"登录失败",content:"请稍后重试"})},complete:function(){},fail:function(){return r({title:"登录失败",content:"请稍后重试"})}})})})(r.code).then(function(){return e()}).catch(function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_login",r,e)},fail:function(e){return t({title:"登录失败",content:e.errMsg})}})}).then(function(){return l=null,e()}).catch(function(e){return l=null,t(e)})})),l}function d(){n.default.session="",wx.removeStorage({key:o.default.sessionName}),o.default.sessionExpireTime&&o.default.sessionExpireKey&&(n.default.sessionExpire=1/0,wx.removeStorage({key:o.default.sessionExpireKey}))}t.default={main:function(){return new Promise(function(e,t){return f().then(function(){return o.default.doNotCheckSession?Promise.resolve():(s||(s=new Promise(function(e,t){console.log("wx.checkSession()");var r=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return d(),c().then(function(){return e()},function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_checkSession",r,e)}})})),s)},function(e){var r=e.title,n=e.content;return u.default.doError(r,n),t({title:r,content:n})}).then(function(){return e()},function(e){var r=e.title,n=e.content;return u.default.doError(r,n),t({title:r,content:n})})})},setSession:function(e){n.default.session=e,o.default.doNotCheckSession=!0,o.default.sessionExpireTime&&o.default.sessionExpireKey&&(n.default.sessionExpire=(new Date).getTime()+o.default.sessionExpireTime,wx.setStorage({key:o.default.sessionExpireKey,data:String(n.default.sessionExpire)})),wx.setStorage({key:o.default.sessionName,data:n.default.session})},delSession:d}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0);function o(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){wx.showModal({title:e,content:t||"网络或服务异常,请稍后重试",showCancel:!1})}t.default={systemError:function(e,t){"function"==typeof e.fail?e.fail(t):u("",t.errMsg)},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else{var r=o(t);u(r.title,r.content)}"function"==typeof n.default.errorCallback&&n.default.errorCallback(e,t),console.error(t)},doError:u,getErrorMsg:o}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(6);function u(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&&u(e.report,e._reportStartTime,e._reportEndTime)},report:u}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(2);t.default=function(e){return n.default.request(e)}},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}),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(10),o=r(6),u=r(14),i=r(15),a=r(16),s=r(17),f=r(18),l=r(19),c={init:n.default,request:o.default,uploadFile:u.default,setSession:i.default,login:a.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);try{o.default.session=wx.getStorageSync(n.default.sessionName)||""}catch(e){console.error("wx.getStorageSync:fail, can not get session.")}try{o.default.sessionExpire=wx.getStorageSync(n.default.sessionExpireKey||"sessionExpireKey")||1/0}catch(e){console.error("wx.getStorageSync:fail, can not get sessionExpire.")}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(7);t.default={get:function(e){if(!(n.default.mockJson[e.url]||e.originUrl&&n.default.mockJson[e.originUrl]))return console.error("mock 没有对应接口的数据"),!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(2),u=r(4),i=r(8),a=r(5),s=r(3);t.default=function(e,t,r){if(200===e.statusCode){if("string"==typeof e.data)try{e.data=JSON.parse(e.data)}catch(r){if(t.catchError)throw new Error(r);return void u.default.logicError(t,e)}if(a.default.end(t),n.default.loginTrigger(e.data)&&void 0!==t.reLoginCount&&t.reLoginCount=0){var u=e.substr(r+1).split("&");u.forEach(function(e,t){var r=u[t].split("=");o[r[0]]=r[1]})}o=n({},o,t);var i=Object.keys(o).map(function(e){return e+"="+encodeURI(o[e])}).join("&");return r>=0?e.substring(0,r+1)+i:e+"?"+i}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(2);t.default=function(e){return n.default.uploadFile(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){n.default.setSession(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);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="1.2.9"}]).default; \ No newline at end of file +module.exports=function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=9)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sessionName:"session",loginTrigger:function(){return!1},codeToSession:{url:"",success:function(){}},successTrigger:function(){return!0},urlPerfix:"",doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0}},function(e,t,n){"use strict";var o=this&&this.__assign||function(){return(o=Object.assign||function(e){for(var t,n=1,o=arguments.length;no.default.sessionExpire&&(d(),1)?(r.default.doNotCheckSession=!0,c().then(function(){return e()},function(e){return t(e)})):e()})}var l=null;function c(){return l||(l=new Promise(function(e,t){new Promise(function(e,t){console.log("wx.login");var n=(new Date).getTime();wx.login({success:function(n){if(!n.code)return t({title:"登录失败",content:"请稍后重试[code 获取失败]"});var s,f;(s=n.code,(f="function"==typeof r.default.codeToSession.data?r.default.codeToSession.data():r.default.codeToSession.data||{})[r.default.codeToSession.codeName]=s,new Promise(function(e,t){var n=(new Date).getTime();wx.request({url:a.default.format(r.default.codeToSession.url),data:f,method:r.default.codeToSession.method||"GET",success:function(a){if(200===a.statusCode){if(r.default.codeToSession.report){var s=(new Date).getTime();i.default.report(r.default.codeToSession.report,n,s)}var f="";try{f=r.default.codeToSession.success(a.data)}catch(e){}return f?(o.default.session=f,r.default.doNotCheckSession=!0,r.default.sessionExpireTime&&r.default.sessionExpireKey&&(o.default.sessionExpire=(new Date).getTime()+r.default.sessionExpireTime,wx.setStorage({key:r.default.sessionExpireKey,data:String(o.default.sessionExpire)})),wx.setStorage({key:r.default.sessionName,data:o.default.session}),e()):t(u.default.getErrorMsg(a))}return t({title:"登录失败",content:"请稍后重试"})},complete:function(){},fail:function(){return t({title:"登录失败",content:"请稍后重试"})}})})).then(function(){return e()}).catch(function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_login",n,e)},fail:function(e){return t({title:"登录失败",content:e.errMsg})}})}).then(function(){return l=null,e()}).catch(function(e){return l=null,t(e)})})),l}function d(){o.default.session="",wx.removeStorage({key:r.default.sessionName}),r.default.sessionExpireTime&&r.default.sessionExpireKey&&(o.default.sessionExpire=1/0,wx.removeStorage({key:r.default.sessionExpireKey}))}t.default={main:function(){return new Promise(function(e,t){return f().then(function(){return r.default.doNotCheckSession?Promise.resolve():(s||(s=new Promise(function(e,t){console.log("wx.checkSession()");var n=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return d(),c().then(function(){return e()},function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_checkSession",n,e)}})})),s)},function(e){var n=e.title,o=e.content;return u.default.doError(n,o),t({title:n,content:o})}).then(function(){return e()},function(e){var n=e.title,o=e.content;return u.default.doError(n,o),t({title:n,content:o})})})},setSession:function(e){o.default.session=e,r.default.doNotCheckSession=!0,r.default.sessionExpireTime&&r.default.sessionExpireKey&&(o.default.sessionExpire=(new Date).getTime()+r.default.sessionExpireTime,wx.setStorage({key:r.default.sessionExpireKey,data:String(o.default.sessionExpire)})),wx.setStorage({key:r.default.sessionName,data:o.default.session})},delSession:d}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0);function r(e){var t="";if("function"==typeof o.default.errorTitle)try{t=o.default.errorTitle(e.data)}catch(e){}else"string"==typeof o.default.errorTitle&&(t=o.default.errorTitle);var n="";if("function"==typeof o.default.errorContent)try{n=o.default.errorContent(e.data)}catch(e){}else"string"==typeof o.default.errorContent&&(n=o.default.errorContent);return{title:t,content:n}}function u(e,t){wx.showModal({title:e,content:t||"网络或服务异常,请稍后重试",showCancel:!1})}t.default={systemError:function(e,t){"function"==typeof e.fail?e.fail(t):u("",t.errMsg)},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else{var n=r(t);u(n.title,n.content)}"function"==typeof o.default.errorCallback&&o.default.errorCallback(e,t),console.error(t)},doError:u,getErrorMsg:r}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(6);function u(e,t,n){"function"==typeof o.default.reportCGI&&o.default.reportCGI(e,t,n,r.default)}t.default={start:function(e){e._reportStartTime=(new Date).getTime()},end:function(e){e._reportEndTime=(new Date).getTime(),e.report&&e._reportStartTime&&u(e.report,e._reportStartTime,e._reportEndTime)},report:u}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2);t.default=function(e){return o.default.request(e)}},function(e,t,n){"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,n){"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,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(10),r=n(6),u=n(15),i=n(16),a=n(17),s=n(18),f=n(19),l=n(20),c={init:o.default,request:r.default,uploadFile:u.default,setSession:i.default,login:a.default,getSession:s.default,getConfig:f.default,version:l.version};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(1);t.default=function(e){Object.assign(o.default,e);try{r.default.session=wx.getStorageSync(o.default.sessionName)||""}catch(e){console.error("wx.getStorageSync:fail, can not get session.")}try{r.default.sessionExpire=wx.getStorageSync(o.default.sessionExpireKey||"sessionExpireKey")||1/0}catch(e){console.error("wx.getStorageSync:fail, can not get sessionExpire.")}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(7);t.default={get:function(e){if(!(o.default.mockJson[e.url]||e.originUrl&&o.default.mockJson[e.originUrl]))return console.error("mock 没有对应接口的数据"),!1;var t=o.default.mockJson[e.url]||(e.originUrl?o.default.mockJson[e.originUrl]:""),n={data:t=JSON.parse(JSON.stringify(t)),statusCode:200};return r.default.hide(),n}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(2),u=(n(4),n(8)),i=n(5),a=n(3);t.default=function(e,t,n){if(200!==e.statusCode)throw{type:"http-error",res:e};if("string"==typeof e.data)try{e.data=JSON.parse(e.data)}catch(e){throw{type:"upload-error",res:e}}if(i.default.end(t),o.default.loginTrigger(e.data)&&void 0!==t.reLoginCount&&t.reLoginCount=0){var u=e.substr(n+1).split("&");u.forEach(function(e,t){var n=u[t].split("=");r[n[0]]=n[1]})}r=o({},r,t);var i=Object.keys(r).map(function(e){return e+"="+encodeURI(r[e])}).join("&");return n>=0?e.substring(0,n+1)+i:e+"?"+i}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(4);t.catchHandler=function(e,t,n){var r=e.type,u=e.res;if(t.catchError){if("http-error"===r)n(new Error(u.statusCode.toString()));else if("upload-error"===r)n(new Error(u));else if("logic-error"===r){var i=o.default.getErrorMsg(u);n(new Error(i.content))}}else o.default.logicError(t,e.res)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2);t.default=function(e){return o.default.uploadFile(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(3);t.default=function(e){o.default.setSession(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(3);t.default=function(){return o.default.main()}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(1);t.default=function(){return o.default.session}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(1);t.default=function(){return{urlPerfix:o.default.urlPerfix,sessionExpireTime:o.default.sessionExpireTime,sessionExpireKey:o.default.sessionExpireKey,sessionExpire:r.default.sessionExpire}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.version="1.2.9"}]).default; \ No newline at end of file diff --git a/src/module/catchHandler.ts b/src/module/catchHandler.ts new file mode 100644 index 0000000..06a4d37 --- /dev/null +++ b/src/module/catchHandler.ts @@ -0,0 +1,25 @@ +import { IRequestOption, IUploadFileOption } from "../interface"; +import errorHandler from "./errorHandler"; + +type ThrowErrorType = 'upload-error' | 'logic-error' | 'http-error' +interface ThrowError { + type: ThrowErrorType + res: any +} +function catchHandler(e: ThrowError, obj: IRequestOption | IUploadFileOption, reject: (reason?: any) => void) { + const { type, res } = e + if (obj.catchError) { + if (type === 'http-error') { + reject(new Error(res.statusCode.toString())); + } else if (type === 'upload-error') { + reject(new Error(res)); + } else if (type === 'logic-error') { + let msg = errorHandler.getErrorMsg(res); + reject(new Error(msg.content)); + } + } else { + errorHandler.logicError(obj, e.res); + } + +} +export { catchHandler } \ No newline at end of file diff --git a/src/module/requestHandler.ts b/src/module/requestHandler.ts index 0cedba5..17de758 100644 --- a/src/module/requestHandler.ts +++ b/src/module/requestHandler.ts @@ -7,8 +7,9 @@ import sessionManager from './sessionManager' import responseHandler from './responseHandler' import durationReporter from "./durationReporter" import url from '../util/url' -import {IRequestOption, IUploadFileOption} from "../interface" +import { IRequestOption, IUploadFileOption } from "../interface" import errorHandler from "./errorHandler"; +import { catchHandler } from './catchHandler'; // 格式化url function format(originUrl: string) { @@ -55,12 +56,12 @@ function initializeRequestObj(obj: IRequestOption) { } if (obj.originUrl !== config.codeToSession.url && status.session) { - obj.data = {...obj.data as object, [config.sessionName]: status.session}; + obj.data = { ...obj.data as object, [config.sessionName]: status.session }; } // 如果有全局参数,则添加 const gd = getGlobalData(); - obj.data = {...gd, ...obj.data as object}; + obj.data = { ...gd, ...obj.data as object }; obj.method = obj.method || 'GET'; obj.dataType = obj.dataType || 'json'; @@ -68,7 +69,7 @@ function initializeRequestObj(obj: IRequestOption) { // 如果请求不是GET,则在URL中自动加上登录态和全局参数 if (!config.doNotUseQueryString && obj.method !== "GET") { if (status.session) { - obj.url = url.setParams(obj.url, {[config.sessionName]: status.session}); + obj.url = url.setParams(obj.url, { [config.sessionName]: status.session }); } obj.url = url.setParams(obj.url, gd); } @@ -85,17 +86,17 @@ function initializeUploadFileObj(obj: IUploadFileOption) { } if (obj.originUrl !== config.codeToSession.url && status.session) { - obj.formData = {...obj.formData as object, [config.sessionName]: status.session}; + obj.formData = { ...obj.formData as object, [config.sessionName]: status.session }; } // 如果有全局参数,则添加 const gd = getGlobalData(); - obj.formData = {...gd, ...obj.formData}; + obj.formData = { ...gd, ...obj.formData }; if (!config.doNotUseQueryString) { // 将登陆态也带在url上 if (status.session) { - obj.url = url.setParams(obj.url, {[config.sessionName]: status.session}); + obj.url = url.setParams(obj.url, { [config.sessionName]: status.session }); } // 全局参数同时放在url上 obj.url = url.setParams(obj.url, gd); @@ -191,9 +192,11 @@ function request(obj: IRequestOption): any { return doRequest(obj) }).then((res) => { let response = responseHandler(res as wx.RequestSuccessCallbackResult, obj, 'request'); - return resolve(response); + if (response != null) { + return resolve(response); + } }).catch((e) => { - return reject(e); + catchHandler(e, obj, reject) }) }) } @@ -214,9 +217,11 @@ function uploadFile(obj: IUploadFileOption): any { return doUploadFile(obj) }).then((res) => { let response = responseHandler(res as wx.UploadFileSuccessCallbackResult, obj, 'uploadFile'); - return resolve(response); + if (response != null) { + return resolve(response); + } }).catch((e) => { - return reject(e); + catchHandler(e, obj, reject) }) }) } diff --git a/src/module/responseHandler.ts b/src/module/responseHandler.ts index da4eca5..627f8b1 100644 --- a/src/module/responseHandler.ts +++ b/src/module/responseHandler.ts @@ -14,16 +14,11 @@ function response( if (res.statusCode === 200) { // 兼容uploadFile返回的res.data可能是字符串 - if(typeof res.data === "string") { + if (typeof res.data === "string") { try { res.data = JSON.parse(res.data); } catch (e) { - if(obj.catchError) { - throw new Error(e); - } else { - errorHandler.logicError(obj, res); - return; - } + throw { type: 'upload-error', res: e }; } } @@ -32,9 +27,9 @@ function response( if (config.loginTrigger!(res.data) && obj.reLoginCount !== undefined && obj.reLoginCount < config.reLoginLimit!) { // 登录态失效,且重试次数不超过配置 sessionManager.delSession(); - if(method === "request") { + if (method === "request") { return requestHandler.request(obj as IRequestOption); - } else if(method === "uploadFile") { + } else if (method === "uploadFile") { return requestHandler.uploadFile(obj as IUploadFileOption); } } else if (config.successTrigger(res.data)) { @@ -49,9 +44,9 @@ function response( } catch (e) { console.error("Function successData occur error: " + e); } - if(!(obj as IRequestOption).noCacheFlash) { + if (!(obj as IRequestOption).noCacheFlash) { // 如果为了保证页面不闪烁,则不回调,只是缓存最新数据,待下次进入再用 - if(typeof obj.success === "function"){ + if (typeof obj.success === "function") { obj.success(realData); } else { return realData; @@ -61,20 +56,11 @@ function response( cacheManager.set(obj, realData); } else { // 接口返回失败码 - if(obj.catchError) { - let msg = errorHandler.getErrorMsg(res); - throw new Error(msg.content); - } else { - errorHandler.logicError(obj, res); - } + throw { type: 'logic-error', res } } } else { // https返回状态码非200 - if(obj.catchError) { - throw new Error(res.statusCode.toString()); - } else { - errorHandler.logicError(obj, res); - } + throw { type: 'http-error', res } } }