diff --git a/.gitignore b/.gitignore index 2e04c7b..604c13f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea .DS_Store node_modules/ -package-lock.json \ No newline at end of file +package-lock.json +coverage diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..7bc1048 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [["@babel/preset-env", { targets: { node: "current" } }],'@babel/preset-typescript',], +}; diff --git a/build/weRequest.js b/build/weRequest.js index 523ab65..5d00ed0 100644 --- a/build/weRequest.js +++ b/build/weRequest.js @@ -1,5 +1,5 @@ /*! - * weRequest 1.2.14 + * weRequest 1.2.15 * https://github.com/IvinWu/weRequest */ module.exports = @@ -328,6 +328,7 @@ exports.default = { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.catchHandler = void 0; var errorHandler_1 = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.ts"); function catchHandler(e, obj, reject) { var type = e.type, res = e.res; @@ -356,7 +357,7 @@ function catchHandler(e, obj, reject) { } } exports.catchHandler = catchHandler; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0Y2hIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9jYXRjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwrQ0FBMEM7QUFPMUMsU0FBUyxZQUFZLENBQUMsQ0FBYSxFQUFFLEdBQXVDLEVBQUUsTUFBOEI7SUFDaEcsSUFBQSxhQUFJLEVBQUUsV0FBRyxDQUFNO0lBQ3ZCLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtRQUNoQixJQUFJLElBQUksS0FBSyxZQUFZLEVBQUU7WUFDdkIsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkQ7YUFBTSxJQUFJLElBQUksS0FBSyxjQUFjLEVBQUU7WUFDaEMsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNqQzthQUFNLElBQUksSUFBSSxLQUFLLGFBQWEsRUFBRTtZQUMvQixJQUFJLEdBQUcsR0FBRyxzQkFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBRUgsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7S0FDSjtTQUFNO1FBQ0gsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ1IsT0FBTyxzQkFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlDO2FBQU07WUFFSCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQjtLQUNKO0FBRUwsQ0FBQztBQUNRLG9DQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tIFwiLi9lcnJvckhhbmRsZXJcIjtcblxudHlwZSBUaHJvd0Vycm9yVHlwZSA9ICd1cGxvYWQtZXJyb3InIHwgJ2xvZ2ljLWVycm9yJyB8ICdodHRwLWVycm9yJ1xuaW50ZXJmYWNlIFRocm93RXJyb3Ige1xuICAgIHR5cGU6IFRocm93RXJyb3JUeXBlXG4gICAgcmVzOiBhbnlcbn1cbmZ1bmN0aW9uIGNhdGNoSGFuZGxlcihlOiBUaHJvd0Vycm9yLCBvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuICAgIGNvbnN0IHsgdHlwZSwgcmVzIH0gPSBlXG4gICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKHJlcy5zdGF0dXNDb2RlLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndXBsb2FkLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IocmVzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgbGV0IG1zZyA9IGVycm9ySGFuZGxlci5nZXRFcnJvck1zZyhyZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IobXNnLmNvbnRlbnQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOWFtuS7lmpz6ZSZ6K+vXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGUudHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlci5sb2dpY0Vycm9yKG9iaiwgZS5yZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g5YW25LuWanPplJnor69cbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbmV4cG9ydCB7IGNhdGNoSGFuZGxlciB9Il19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0Y2hIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9jYXRjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0NBQTBDO0FBTzFDLFNBQVMsWUFBWSxDQUFDLENBQWEsRUFBRSxHQUF1QyxFQUFFLE1BQThCO0lBQ2hHLElBQUEsSUFBSSxHQUFVLENBQUMsS0FBWCxFQUFFLEdBQUcsR0FBSyxDQUFDLElBQU4sQ0FBTTtJQUN2QixJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUU7UUFDaEIsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQ3ZCLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO2FBQU0sSUFBSSxJQUFJLEtBQUssY0FBYyxFQUFFO1lBQ2hDLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDakM7YUFBTSxJQUFJLElBQUksS0FBSyxhQUFhLEVBQUU7WUFDL0IsSUFBSSxHQUFHLEdBQUcsc0JBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUVILE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO0tBQ0o7U0FBTTtRQUNILElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNSLE9BQU8sc0JBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5QzthQUFNO1lBRUgsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7S0FDSjtBQUVMLENBQUM7QUFDUSxvQ0FBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcbmltcG9ydCBlcnJvckhhbmRsZXIgZnJvbSBcIi4vZXJyb3JIYW5kbGVyXCI7XG5cbnR5cGUgVGhyb3dFcnJvclR5cGUgPSAndXBsb2FkLWVycm9yJyB8ICdsb2dpYy1lcnJvcicgfCAnaHR0cC1lcnJvcidcbmludGVyZmFjZSBUaHJvd0Vycm9yIHtcbiAgICB0eXBlOiBUaHJvd0Vycm9yVHlwZVxuICAgIHJlczogYW55XG59XG5mdW5jdGlvbiBjYXRjaEhhbmRsZXIoZTogVGhyb3dFcnJvciwgb2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlcyB9ID0gZVxuICAgIGlmIChvYmouY2F0Y2hFcnJvcikge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2h0dHAtZXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihyZXMuc3RhdHVzQ29kZS50b1N0cmluZygpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VwbG9hZC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKHJlcykpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsb2dpYy1lcnJvcicpIHtcbiAgICAgICAgICAgIGxldCBtc2cgPSBlcnJvckhhbmRsZXIuZ2V0RXJyb3JNc2cocmVzKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKG1zZy5jb250ZW50KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDlhbbku5Zqc+mUmeivr1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlLnR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvckhhbmRsZXIubG9naWNFcnJvcihvYmosIGUucmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOWFtuS7lmpz6ZSZ6K+vXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5leHBvcnQgeyBjYXRjaEhhbmRsZXIgfSJdfQ== /***/ }), @@ -477,7 +478,7 @@ exports.default = { doError: doError, getErrorMsg: getErrorMsg }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQXFDO0FBR3JDLFNBQVMsV0FBVyxDQUFDLEdBQXVDLEVBQUUsR0FBNkI7SUFDdkYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDakI7U0FBTTtRQUNILElBQU0sS0FBSyxHQUFHLGNBQU0sT0FBQSxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBbEQsQ0FBa0QsQ0FBQztRQUN2RSxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbEM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBdUMsRUFBRSxHQUF5RTtJQUNsSSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqQjtTQUFNO1FBQ0csSUFBQSxxQkFBbUMsRUFBbEMsZ0JBQUssRUFBRSxvQkFBMkIsQ0FBQztRQUMxQyxJQUFNLEtBQUssR0FBRyxjQUFNLE9BQUEsaUJBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQWxELENBQWtELENBQUM7UUFDdkUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbEM7SUFHRCxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFO1FBQzVDLGdCQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNsQztJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQXlFO0lBQzFGLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksT0FBTyxnQkFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDekMsSUFBSTtZQUNBLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDdEM7UUFBQyxPQUFPLENBQUMsRUFBRTtTQUNYO0tBQ0o7U0FBTSxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO1FBQzlDLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQztLQUM3QjtJQUVELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO1FBQzNDLElBQUk7WUFDQSxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzFDO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtLQUNKO1NBQU0sSUFBSSxPQUFPLGdCQUFNLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUNoRCxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUM7S0FDakM7SUFFRCxPQUFPLEVBQUMsS0FBSyxPQUFBLEVBQUUsT0FBTyxTQUFBLEVBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRSxLQUFpQjtJQUU5RCxJQUFNLGlCQUFpQixHQUFHLGdCQUFNLENBQUMsYUFBYSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztJQUM5RSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdkIsS0FBSyxPQUFBO1FBQ0wsT0FBTyxFQUFFLE9BQU8sSUFBSSxlQUFlO0tBQ3RDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDcEIsVUFBVSxFQUFFLEtBQUs7S0FDcEIsQ0FBQyxDQUFDLENBQUM7UUFDQSxVQUFVLEVBQUUsSUFBSTtRQUNoQixXQUFXLEVBQUUsSUFBSTtRQUNqQixPQUFPLEVBQVAsVUFBUSxHQUFzQztZQUMxQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVTtnQkFBRSxLQUFLLEVBQUUsQ0FBQztRQUM1RCxDQUFDO0tBQ0osQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsa0JBQWU7SUFDWCxXQUFXLGFBQUE7SUFDWCxVQUFVLFlBQUE7SUFDVixPQUFPLFNBQUE7SUFDUCxXQUFXLGFBQUE7Q0FDZCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9hcGkvcmVxdWVzdCc7XG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbmZ1bmN0aW9uIHN5c3RlbUVycm9yKG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbiwgcmVzOiB3eC5HZW5lcmFsQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXRyeSA9ICgpID0+IHJlcXVlc3Qob2JqKS50aGVuKG9iai5fcmVzb2x2ZSkuY2F0Y2gob2JqLl9yZWplY3QpO1xuICAgICAgICBkb0Vycm9yKFwiXCIsIHJlcy5lcnJNc2csIHJldHJ5KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvZ2ljRXJyb3Iob2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLCByZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge3RpdGxlLCBjb250ZW50fSA9IGdldEVycm9yTXNnKHJlcyk7XG4gICAgICAgIGNvbnN0IHJldHJ5ID0gKCkgPT4gcmVxdWVzdChvYmopLnRoZW4ob2JqLl9yZXNvbHZlKS5jYXRjaChvYmouX3JlamVjdCk7XG4gICAgICAgIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICB9XG5cbiAgICAvLyDlpoLmnpzmnInphY3nva7nu5/kuIDplJnor6/lm57osIPlh73mlbDvvIzliJnmiafooYzlroNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5lcnJvckNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnLmVycm9yQ2FsbGJhY2sob2JqLCByZXMpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JNc2cocmVzOiB3eC5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0IHwgd3guVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgIGxldCB0aXRsZSA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JUaXRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aXRsZSA9IGNvbmZpZy5lcnJvclRpdGxlKHJlcy5kYXRhKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JUaXRsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aXRsZSA9IGNvbmZpZy5lcnJvclRpdGxlO1xuICAgIH1cblxuICAgIGxldCBjb250ZW50ID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5lcnJvckNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbmZpZy5lcnJvckNvbnRlbnQocmVzLmRhdGEpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5lcnJvckNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29udGVudCA9IGNvbmZpZy5lcnJvckNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHt0aXRsZSwgY29udGVudH1cbn1cblxuZnVuY3Rpb24gZG9FcnJvcih0aXRsZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIHJldHJ5PzogKCkgPT4gYW55KSB7XG4gICAgLy8g5piv5ZCm5pi+56S66YeN6K+V5oyJ6ZKuXG4gICAgY29uc3Qgc2hvd0Vycm9yUmV0cnlCdG4gPSBjb25maWcuZXJyb3JSZXRyeUJ0biAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIjtcbiAgICB3eC5zaG93TW9kYWwoT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHRpdGxlLFxuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8IFwi572R57uc5oiW5pyN5Yqh5byC5bi477yM6K+356iN5ZCO6YeN6K+VXCIsXG4gICAgfSwgIXNob3dFcnJvclJldHJ5QnRuID8ge1xuICAgICAgICBzaG93Q2FuY2VsOiBmYWxzZVxuICAgIH0gOiB7XG4gICAgICAgIHNob3dDYW5jZWw6IHRydWUsXG4gICAgICAgIGNvbmZpcm1UZXh0OiAn6YeN6K+VJyxcbiAgICAgICAgc3VjY2VzcyhyZXM6IHd4LlNob3dNb2RhbFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlcy5jb25maXJtICYmIHR5cGVvZiByZXRyeSA9PT0gXCJmdW5jdGlvblwiKSByZXRyeSgpO1xuICAgICAgICB9XG4gICAgfSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgc3lzdGVtRXJyb3IsXG4gICAgbG9naWNFcnJvcixcbiAgICBkb0Vycm9yLFxuICAgIGdldEVycm9yTXNnXG59XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQXFDO0FBR3JDLFNBQVMsV0FBVyxDQUFDLEdBQXVDLEVBQUUsR0FBNkI7SUFDdkYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDakI7U0FBTTtRQUNILElBQU0sS0FBSyxHQUFHLGNBQU0sT0FBQSxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBbEQsQ0FBa0QsQ0FBQztRQUN2RSxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbEM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBdUMsRUFBRSxHQUF5RTtJQUNsSSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqQjtTQUFNO1FBQ0csSUFBQSxLQUFtQixXQUFXLENBQUMsR0FBRyxDQUFDLEVBQWxDLEtBQUssV0FBQSxFQUFFLE9BQU8sYUFBb0IsQ0FBQztRQUMxQyxJQUFNLEtBQUssR0FBRyxjQUFNLE9BQUEsaUJBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQWxELENBQWtELENBQUM7UUFDdkUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbEM7SUFHRCxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFO1FBQzVDLGdCQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNsQztJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQXlFO0lBQzFGLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksT0FBTyxnQkFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDekMsSUFBSTtZQUNBLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDdEM7UUFBQyxPQUFPLENBQUMsRUFBRTtTQUNYO0tBQ0o7U0FBTSxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO1FBQzlDLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQztLQUM3QjtJQUVELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO1FBQzNDLElBQUk7WUFDQSxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzFDO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtLQUNKO1NBQU0sSUFBSSxPQUFPLGdCQUFNLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUNoRCxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUM7S0FDakM7SUFFRCxPQUFPLEVBQUMsS0FBSyxPQUFBLEVBQUUsT0FBTyxTQUFBLEVBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRSxLQUFpQjtJQUU5RCxJQUFNLGlCQUFpQixHQUFHLGdCQUFNLENBQUMsYUFBYSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztJQUM5RSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdkIsS0FBSyxPQUFBO1FBQ0wsT0FBTyxFQUFFLE9BQU8sSUFBSSxlQUFlO0tBQ3RDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDcEIsVUFBVSxFQUFFLEtBQUs7S0FDcEIsQ0FBQyxDQUFDLENBQUM7UUFDQSxVQUFVLEVBQUUsSUFBSTtRQUNoQixXQUFXLEVBQUUsSUFBSTtRQUNqQixPQUFPLEVBQVAsVUFBUSxHQUFzQztZQUMxQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVTtnQkFBRSxLQUFLLEVBQUUsQ0FBQztRQUM1RCxDQUFDO0tBQ0osQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsa0JBQWU7SUFDWCxXQUFXLGFBQUE7SUFDWCxVQUFVLFlBQUE7SUFDVixPQUFPLFNBQUE7SUFDUCxXQUFXLGFBQUE7Q0FDZCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9hcGkvcmVxdWVzdCc7XG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbmZ1bmN0aW9uIHN5c3RlbUVycm9yKG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbiwgcmVzOiB3eC5HZW5lcmFsQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXRyeSA9ICgpID0+IHJlcXVlc3Qob2JqKS50aGVuKG9iai5fcmVzb2x2ZSkuY2F0Y2gob2JqLl9yZWplY3QpO1xuICAgICAgICBkb0Vycm9yKFwiXCIsIHJlcy5lcnJNc2csIHJldHJ5KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvZ2ljRXJyb3Iob2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLCByZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge3RpdGxlLCBjb250ZW50fSA9IGdldEVycm9yTXNnKHJlcyk7XG4gICAgICAgIGNvbnN0IHJldHJ5ID0gKCkgPT4gcmVxdWVzdChvYmopLnRoZW4ob2JqLl9yZXNvbHZlKS5jYXRjaChvYmouX3JlamVjdCk7XG4gICAgICAgIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICB9XG5cbiAgICAvLyDlpoLmnpzmnInphY3nva7nu5/kuIDplJnor6/lm57osIPlh73mlbDvvIzliJnmiafooYzlroNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5lcnJvckNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnLmVycm9yQ2FsbGJhY2sob2JqLCByZXMpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JNc2cocmVzOiB3eC5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0IHwgd3guVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgIGxldCB0aXRsZSA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JUaXRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aXRsZSA9IGNvbmZpZy5lcnJvclRpdGxlKHJlcy5kYXRhKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JUaXRsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aXRsZSA9IGNvbmZpZy5lcnJvclRpdGxlO1xuICAgIH1cblxuICAgIGxldCBjb250ZW50ID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5lcnJvckNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbmZpZy5lcnJvckNvbnRlbnQocmVzLmRhdGEpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5lcnJvckNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29udGVudCA9IGNvbmZpZy5lcnJvckNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHt0aXRsZSwgY29udGVudH1cbn1cblxuZnVuY3Rpb24gZG9FcnJvcih0aXRsZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIHJldHJ5PzogKCkgPT4gYW55KSB7XG4gICAgLy8g5piv5ZCm5pi+56S66YeN6K+V5oyJ6ZKuXG4gICAgY29uc3Qgc2hvd0Vycm9yUmV0cnlCdG4gPSBjb25maWcuZXJyb3JSZXRyeUJ0biAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIjtcbiAgICB3eC5zaG93TW9kYWwoT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHRpdGxlLFxuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8IFwi572R57uc5oiW5pyN5Yqh5byC5bi477yM6K+356iN5ZCO6YeN6K+VXCIsXG4gICAgfSwgIXNob3dFcnJvclJldHJ5QnRuID8ge1xuICAgICAgICBzaG93Q2FuY2VsOiBmYWxzZVxuICAgIH0gOiB7XG4gICAgICAgIHNob3dDYW5jZWw6IHRydWUsXG4gICAgICAgIGNvbmZpcm1UZXh0OiAn6YeN6K+VJyxcbiAgICAgICAgc3VjY2VzcyhyZXM6IHd4LlNob3dNb2RhbFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlcy5jb25maXJtICYmIHR5cGVvZiByZXRyeSA9PT0gXCJmdW5jdGlvblwiKSByZXRyeSgpO1xuICAgICAgICB9XG4gICAgfSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgc3lzdGVtRXJyb3IsXG4gICAgbG9naWNFcnJvcixcbiAgICBkb0Vycm9yLFxuICAgIGdldEVycm9yTXNnXG59XG4iXX0= /***/ }), @@ -1021,7 +1022,12 @@ function code2Session(code) { else { data = config_1.default.codeToSession.data || {}; } - data[config_1.default.codeToSession.codeName] = code; + if (config_1.default.codeToSession.codeName) { + data[config_1.default.codeToSession.codeName] = code; + } + else { + data.code = code; + } return new Promise(function (resolve, reject) { var start = new Date().getTime(); wx.request({ @@ -1110,7 +1116,7 @@ exports.default = { setSession: setSession, delSession: delSession }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQywrQ0FBeUM7QUFDekMsdURBQWlEO0FBQ2pELG1EQUE2QztBQUM3QywyQ0FBcUM7QUFDckMsMENBQW9DO0FBSXBDLElBQUksbUJBQW1CLEdBQVEsSUFBSSxDQUFDO0FBRXBDLFNBQVMsWUFBWTtJQUNqQixJQUFJLENBQUMsbUJBQW1CLEVBQUU7UUFDdEIsbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtZQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakMsSUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUNaLE9BQU87b0JBRUgsT0FBTyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxJQUFJLEVBQUo7b0JBRUksVUFBVSxFQUFFLENBQUM7b0JBQ2IsT0FBTyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ2xCLE9BQU8sT0FBTyxFQUFFLENBQUM7b0JBQ3JCLENBQUMsRUFBRSxVQUFDLEdBQVE7d0JBQ1IsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQ0QsUUFBUTtvQkFDSixJQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNqQywwQkFBZ0IsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO2FBQ0osQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7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QUFLLENBQUMsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQyxFQUFDLEtBQUssT0FBQSxFQUFFLE9BQU8sU0FBQSxFQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELGtCQUFlO0lBQ1gsSUFBSSxNQUFBO0lBQ0osVUFBVSxZQUFBO0lBQ1YsVUFBVSxZQUFBO0NBQ2IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgZXJyb3JIYW5kbGVyIGZyb20gJy4vZXJyb3JIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSAnLi9kdXJhdGlvblJlcG9ydGVyJ1xuaW1wb3J0IHJlcXVlc3RIYW5kbGVyIGZyb20gJy4vcmVxdWVzdEhhbmRsZXInXG5pbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9hcGkvcmVxdWVzdCdcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuLyog55Sf5ZG95ZGo5pyf5YaF5Y+q5YGa5LiA5qyh55qEY2hlY2tTZXNzaW9uICovXG5sZXQgY2hlY2tTZXNzaW9uUHJvbWlzZTogYW55ID0gbnVsbDtcblxuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3eC5jaGVja1Nlc3Npb24oKVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB3eC5jaGVja1Nlc3Npb24oe1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3MoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOeZu+W9leaAgeacieaViO+8jOS4lOWcqOacrOeUn+WRveWRqOacn+WGheaXoOmhu+WGjeajgOmqjOS6hlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmFpbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g55m75b2V5oCB6L+H5pyfXG4gICAgICAgICAgICAgICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIChyZXM6IGFueSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIucmVwb3J0KCd3eF9jaGVja1Nlc3Npb24nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tTZXNzaW9uUHJvbWlzZTtcbn1cblxuLyog5Yik5patc2Vzc2lvbuaYr+WQpuS4uuepuuaIluW3sui/h+acnyAqL1xuZnVuY3Rpb24gaXNTZXNzaW9uRXhwaXJlT3JFbXB0eSgpIHtcbiAgICBpZiAoIXN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIC8vIOWmguaenOe8k+WtmOS4reayoeaciXNlc3Npb25cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBuZXcgRGF0ZSgpLmdldFRpbWUoKSA+IHN0YXR1cy5zZXNzaW9uRXhwaXJlKSB7XG4gICAgICAgIC8vIOWmguaenOacieiuvue9ruacrOWcsHNlc3Npb27nvJPlrZjml7bpl7TvvIzkuJTnvJPlrZjml7bpl7Tlt7LliLBcbiAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY2hlY2tMb2dpbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAoaXNTZXNzaW9uRXhwaXJlT3JFbXB0eSgpKSB7XG4gICAgICAgICAgICAvLyDmsqHmnInnmbvpmYbmgIHvvIzkuI3pnIDopoHlho1jaGVja1Nlc3Npb25cbiAgICAgICAgICAgIGNvbmZpZy5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCAocmVzOiBhbnkpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOe8k+WtmOS4reaciXNlc3Npb27kuJTmnKrov4fmnJ9cbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG4vKiDnmbvpmYbmtYHnqIvnmoRwcm9taXNlICovXG5sZXQgbG9naW5Qcm9taXNlOiBhbnkgPSBudWxsO1xuXG5mdW5jdGlvbiBkb0xvZ2luKCkge1xuICAgIGlmICghbG9naW5Qcm9taXNlKSB7XG4gICAgICAgIGxvZ2luUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2luUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbG9hZGluZy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBsb2dpblByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGxvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd3eC5sb2dpbicpO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgICBzdWNjZXNzKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2RlMlNlc3Npb24ocmVzLmNvZGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VbY29kZSDojrflj5blpLHotKVdXCJ9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IHJlcy5lcnJNc2d9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb246IHN0cmluZykge1xuICAgIHN0YXR1cy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAvLyDmjaLlm57mnaXnmoRzZXNzaW9u77yM5LiN6ZyA6KaB5YaNY2hlY2tTZXNzaW9uXG4gICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u6L+H5pyf5pe26Ze0XG4gICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXMuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzLnNlc3Npb25FeHBpcmUpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgIGRhdGE6IHN0YXR1cy5zZXNzaW9uXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvZGUyU2Vzc2lvbihjb2RlOiBzdHJpbmcpIHtcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIC8vIGNvZGVUb1Nlc3Npb24uZGF0YeaUr+aMgeWHveaVsFxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEgPSBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IGNvbmZpZy5jb2RlVG9TZXNzaW9uLmRhdGEgfHwge307XG4gICAgfVxuICAgIGRhdGFbY29uZmlnLmNvZGVUb1Nlc3Npb24uY29kZU5hbWUhXSA9IGNvZGU7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gucmVxdWVzdCh7XG4gICAgICAgICAgICB1cmw6IHJlcXVlc3RIYW5kbGVyLmZvcm1hdChjb25maWcuY29kZVRvU2Vzc2lvbi51cmwpLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIG1ldGhvZDogY29uZmlnLmNvZGVUb1Nlc3Npb24ubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgICAgICAgaGVhZGVyOiB0eXBlb2YgY29uZmlnLnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJyA/IGNvbmZpZy5zZXRIZWFkZXIoKTogY29uZmlnLnNldEhlYWRlcixcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiB3eC5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6ICX5pe25LiK5oqlXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29kZVRvU2Vzc2lvbi5yZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIucmVwb3J0KGNvbmZpZy5jb2RlVG9TZXNzaW9uLnJlcG9ydCwgc3RhcnQsIGVuZClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBjb25maWcuY29kZVRvU2Vzc2lvbi5zdWNjZXNzKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaNouWbnuadpeeahHNlc3Npb27vvIzkuI3pnIDopoHlho1jaGVja1Nlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u6L+H5pyf5pe26Ze0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1cy5zZXNzaW9uRXhwaXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXMuc2Vzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvckhhbmRsZXIuZ2V0RXJyb3JNc2cocmVzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCJ9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VcIn0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbi8qIOa4heepunNlc3Npb24gKi9cbmZ1bmN0aW9uIGRlbFNlc3Npb24oKSB7XG4gICAgc3RhdHVzLnNlc3Npb24gPSAnJztcbiAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbk5hbWUgYXMgc3RyaW5nXG4gICAgfSk7XG4gICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXMuc2Vzc2lvbkV4cGlyZSA9IEluZmluaXR5O1xuICAgICAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXlcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1haW4ocmVsYXRlZFJlcXVlc3RPYmo/OiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJldHJ5ID0gIXJlbGF0ZWRSZXF1ZXN0T2JqXG4gICAgICAgICAgICAvLyDlpoLmnpzmsqHmnInlhbPogZTnmoTor7fmsYLvvIzph43or5XljbPosIPnlKjoh6rouqtcbiAgICAgICAgICAgID8gKCkgPT4gbWFpbigpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KVxuICAgICAgICAgICAgLy8g5aaC5p6c5pyJ5YWz6IGU55qE6K+35rGC77yM6YeN6K+V5Y2z6LCD55So5omA5YWz6IGU55qE6K+35rGCXG4gICAgICAgICAgICA6ICgpID0+IHJlcXVlc3QocmVsYXRlZFJlcXVlc3RPYmopLnRoZW4ocmVsYXRlZFJlcXVlc3RPYmouX3Jlc29sdmUpLmNhdGNoKHJlbGF0ZWRSZXF1ZXN0T2JqLl9yZWplY3QpO1xuICAgICAgICByZXR1cm4gY2hlY2tMb2dpbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5kb05vdENoZWNrU2Vzc2lvbiA/IFByb21pc2UucmVzb2x2ZSgpIDogY2hlY2tTZXNzaW9uKClcbiAgICAgICAgfSwgKHt0aXRsZSwgY29udGVudH0pID0+IHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlci5kb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0aXRsZSwgY29udGVudH0pO1xuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0sICh7dGl0bGUsIGNvbnRlbnR9KT0+IHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlci5kb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0aXRsZSwgY29udGVudH0pO1xuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtYWluLFxuICAgIHNldFNlc3Npb24sXG4gICAgZGVsU2Vzc2lvblxufVxuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQywrQ0FBeUM7QUFDekMsdURBQWlEO0FBQ2pELG1EQUE2QztBQUM3QywyQ0FBcUM7QUFDckMsMENBQW9DO0FBSXBDLElBQUksbUJBQW1CLEdBQVEsSUFBSSxDQUFDO0FBRXBDLFNBQVMsWUFBWTtJQUNqQixJQUFJLENBQUMsbUJBQW1CLEVBQUU7UUFDdEIsbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtZQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakMsSUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUNaLE9BQU87b0JBRUgsT0FBTyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxJQUFJLEVBQUo7b0JBRUksVUFBVSxFQUFFLENBQUM7b0JBQ2IsT0FBTyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ2xCLE9BQU8sT0FBTyxFQUFFLENBQUM7b0JBQ3JCLENBQUMsRUFBRSxVQUFDLEdBQVE7d0JBQ1IsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQ0QsUUFBUTtvQkFDSixJQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNqQywwQkFBZ0IsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO2FBQ0osQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7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QUFDO1FBQ3JCLENBQUMsRUFBRSxVQUFDLEVBQWdCO2dCQUFmLEtBQUssV0FBQSxFQUFFLE9BQU8sYUFBQTtZQUNmLHNCQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUMsT0FBTyxNQUFNLENBQUMsRUFBQyxLQUFLLE9BQUEsRUFBRSxPQUFPLFNBQUEsRUFBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxrQkFBZTtJQUNYLElBQUksTUFBQTtJQUNKLFVBQVUsWUFBQTtJQUNWLFVBQVUsWUFBQTtDQUNiLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9ySGFuZGxlcidcbmltcG9ydCBkdXJhdGlvblJlcG9ydGVyIGZyb20gJy4vZHVyYXRpb25SZXBvcnRlcidcbmltcG9ydCByZXF1ZXN0SGFuZGxlciBmcm9tICcuL3JlcXVlc3RIYW5kbGVyJ1xuaW1wb3J0IGxvYWRpbmcgZnJvbSAnLi4vdXRpbC9sb2FkaW5nJ1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vYXBpL3JlcXVlc3QnXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5cbi8qIOeUn+WRveWRqOacn+WGheWPquWBmuS4gOasoeeahGNoZWNrU2Vzc2lvbiAqL1xubGV0IGNoZWNrU2Vzc2lvblByb21pc2U6IGFueSA9IG51bGw7XG5cbmZ1bmN0aW9uIGNoZWNrU2Vzc2lvbigpIHtcbiAgICBpZiAoIWNoZWNrU2Vzc2lvblByb21pc2UpIHtcbiAgICAgICAgY2hlY2tTZXNzaW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwid3guY2hlY2tTZXNzaW9uKClcIik7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgd3guY2hlY2tTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDnmbvlvZXmgIHmnInmlYjvvIzkuJTlnKjmnKznlJ/lkb3lkajmnJ/lhoXml6Dpobvlho3mo4DpqozkuoZcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZhaWwoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOeZu+W9leaAgei/h+acn1xuICAgICAgICAgICAgICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAocmVzOiBhbnkpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyLnJlcG9ydCgnd3hfY2hlY2tTZXNzaW9uJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrU2Vzc2lvblByb21pc2U7XG59XG5cbi8qIOWIpOaWrXNlc3Npb27mmK/lkKbkuLrnqbrmiJblt7Lov4fmnJ8gKi9cbmZ1bmN0aW9uIGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSB7XG4gICAgaWYgKCFzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICAvLyDlpoLmnpznvJPlrZjkuK3msqHmnIlzZXNzaW9uXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgbmV3IERhdGUoKS5nZXRUaW1lKCkgPiBzdGF0dXMuc2Vzc2lvbkV4cGlyZSkge1xuICAgICAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u57yT5a2Y5pe26Ze077yM5LiU57yT5a2Y5pe26Ze05bey5YiwXG4gICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGNoZWNrTG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSkge1xuICAgICAgICAgICAgLy8g5rKh5pyJ55m76ZmG5oCB77yM5LiN6ZyA6KaB5YaNY2hlY2tTZXNzaW9uXG4gICAgICAgICAgICBjb25maWcuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgKHJlczogYW55KT0+e1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDnvJPlrZjkuK3mnIlzZXNzaW9u5LiU5pyq6L+H5pyfXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSlcbn1cblxuLyog55m76ZmG5rWB56iL55qEcHJvbWlzZSAqL1xubGV0IGxvZ2luUHJvbWlzZTogYW55ID0gbnVsbDtcblxuZnVuY3Rpb24gZG9Mb2dpbigpIHtcbiAgICBpZiAoIWxvZ2luUHJvbWlzZSkge1xuICAgICAgICBsb2dpblByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsb2dpbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2luUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxvYWRpbmcuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gbG9naW5Qcm9taXNlO1xufVxuXG5mdW5jdGlvbiBsb2dpbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnd3gubG9naW4nKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTJTZXNzaW9uKHJlcy5jb2RlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VW2NvZGUg6I635Y+W5aSx6LSlXVwifSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIucmVwb3J0KCd3eF9sb2dpbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWwocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiByZXMuZXJyTXNnfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gc2V0U2Vzc2lvbihzZXNzaW9uOiBzdHJpbmcpIHtcbiAgICBzdGF0dXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgLy8g5o2i5Zue5p2l55qEc2Vzc2lvbu+8jOS4jemcgOimgeWGjWNoZWNrU2Vzc2lvblxuICAgIGNvbmZpZy5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbui/h+acn+aXtumXtFxuICAgIGlmIChjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnLnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzLnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1cy5zZXNzaW9uRXhwaXJlKVxuICAgICAgICB9KVxuICAgIH1cbiAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbk5hbWUgYXMgc3RyaW5nLFxuICAgICAgICBkYXRhOiBzdGF0dXMuc2Vzc2lvblxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBjb2RlMlNlc3Npb24oY29kZTogc3RyaW5nKSB7XG4gICAgbGV0IGRhdGE6IGFueTtcbiAgICAvLyBjb2RlVG9TZXNzaW9uLmRhdGHmlK/mjIHlh73mlbBcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb2RlVG9TZXNzaW9uLmRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhID0gY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhIHx8IHt9O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvZGVUb1Nlc3Npb24uY29kZU5hbWUpIHtcbiAgICAgICAgZGF0YVtjb25maWcuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZV0gPSBjb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuY29kZSA9IGNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlci5mb3JtYXQoY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsKSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBtZXRob2Q6IGNvbmZpZy5jb2RlVG9TZXNzaW9uLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgICAgIGhlYWRlcjogdHlwZW9mIGNvbmZpZy5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicgPyBjb25maWcuc2V0SGVhZGVyKCk6IGNvbmZpZy5zZXRIZWFkZXIsXG4gICAgICAgICAgICBzdWNjZXNzKHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOiAl+aXtuS4iuaKpVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmNvZGVUb1Nlc3Npb24ucmVwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyLnJlcG9ydChjb25maWcuY29kZVRvU2Vzc2lvbi5yZXBvcnQsIHN0YXJ0LCBlbmQpXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gY29uZmlnLmNvZGVUb1Nlc3Npb24uc3VjY2VzcyhyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2Vzc2lvbiA9IHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmjaLlm57mnaXnmoRzZXNzaW9u77yM5LiN6ZyA6KaB5YaNY2hlY2tTZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbui/h+acn+aXtumXtFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXMuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdHVzLnNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JIYW5kbGVyLmdldEVycm9yTXNnKHJlcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVwifSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCJ9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG4vKiDmuIXnqbpzZXNzaW9uICovXG5mdW5jdGlvbiBkZWxTZXNzaW9uKCkge1xuICAgIHN0YXR1cy5zZXNzaW9uID0gJyc7XG4gICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnLnNlc3Npb25OYW1lIGFzIHN0cmluZ1xuICAgIH0pO1xuICAgIGlmIChjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnLnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzLnNlc3Npb25FeHBpcmUgPSBJbmZpbml0eTtcbiAgICAgICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYWluKHJlbGF0ZWRSZXF1ZXN0T2JqPzogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXRyeSA9ICFyZWxhdGVkUmVxdWVzdE9ialxuICAgICAgICAgICAgLy8g5aaC5p6c5rKh5pyJ5YWz6IGU55qE6K+35rGC77yM6YeN6K+V5Y2z6LCD55So6Ieq6LqrXG4gICAgICAgICAgICA/ICgpID0+IG1haW4oKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgIC8vIOWmguaenOacieWFs+iBlOeahOivt+axgu+8jOmHjeivleWNs+iwg+eUqOaJgOWFs+iBlOeahOivt+axglxuICAgICAgICAgICAgOiAoKSA9PiByZXF1ZXN0KHJlbGF0ZWRSZXF1ZXN0T2JqKS50aGVuKHJlbGF0ZWRSZXF1ZXN0T2JqLl9yZXNvbHZlKS5jYXRjaChyZWxhdGVkUmVxdWVzdE9iai5fcmVqZWN0KTtcbiAgICAgICAgcmV0dXJuIGNoZWNrTG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuZG9Ob3RDaGVja1Nlc3Npb24gPyBQcm9taXNlLnJlc29sdmUoKSA6IGNoZWNrU2Vzc2lvbigpXG4gICAgICAgIH0sICh7dGl0bGUsIGNvbnRlbnR9KSA9PiB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXIuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGUsIGNvbnRlbnR9KTtcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9LCAoe3RpdGxlLCBjb250ZW50fSk9PiB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXIuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGUsIGNvbnRlbnR9KTtcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWFpbixcbiAgICBzZXRTZXNzaW9uLFxuICAgIGRlbFNlc3Npb25cbn1cbiJdfQ== /***/ }), @@ -1291,11 +1297,12 @@ exports.default = { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var version = "1.2.14"; +exports.version = void 0; +var version = "1.2.15"; exports.version = version; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsSUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDO0FBRW5CLDBCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiZGVjbGFyZSBjb25zdCBfX1ZFUlNJT05fXzogc3RyaW5nO1xuXG5jb25zdCB2ZXJzaW9uID0gX19WRVJTSU9OX187XG5cbmV4cG9ydCB7IHZlcnNpb24gfTtcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQztBQUVuQiwwQkFBTyIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgY29uc3QgX19WRVJTSU9OX186IHN0cmluZztcblxuY29uc3QgdmVyc2lvbiA9IF9fVkVSU0lPTl9fO1xuXG5leHBvcnQgeyB2ZXJzaW9uIH07XG4iXX0= /***/ }) /******/ })["default"]; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhdGNoSGFuZGxlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2pzb25TdXBlcnNldC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdXRpbC9sb2FkaW5nLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL3VybC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLCszQjs7Ozs7Ozs7Ozs7O0FDWjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxD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QUFDQSxTQUFTO0FBQ1Q7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsdS9FOzs7Ozs7Ozs7Ozs7QUN4QzlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsY0FBYyxRQUFXO0FBQ3pCO0FBQ0EsMkNBQTJDLHVXIiwiZmlsZSI6IndlUmVxdWVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdXJsUGVyZml4OiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZVRpbWU6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUsXG4gICAgICAgIHNlc3Npb25FeHBpcmVLZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlXG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWjJWMFEyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMkZ3YVM5blpYUkRiMjVtYVdjdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVc5RE8wRkJSWEJETEcxQ1FVRmxPMGxCUTFnc1QwRkJUenRSUVVOSUxGTkJRVk1zUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRk5CUVZNN1VVRkRNMElzYVVKQlFXbENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJN1VVRkRNME1zWjBKQlFXZENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJN1VVRkRla01zWVVGQllTeEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1lVRkJZVHRMUVVOMFF5eERRVUZCTzBGQlEwd3NRMEZCUXl4RlFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYzNSaGRIVnpJR1p5YjIwZ0p5NHVMM04wYjNKbEwzTjBZWFIxY3lkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tDa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJSFZ5YkZCbGNtWnBlRG9nWTI5dVptbG5MblZ5YkZCbGNtWnBlQ3hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpWUnBiV1U2SUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU3hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpVdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3NYRzRnSUNBZ0lDQWdJSE5sYzNOcGIyNUZlSEJwY21VNklITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxYRzRnSUNBZ2ZWeHVmVHRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb247XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZaMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVVZ3UXl4dFFrRkJaVHRKUVVOWUxFOUJRVThzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVFN1FVRkRla0lzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElDZ3BJRDArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjM1JoZEhWekxuTmxjM05wYjI1Y2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnXzEuZGVmYXVsdCwgcGFyYW1zKTtcbiAgICB0cnkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lKSB8fCAnJztcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignd3guZ2V0U3RvcmFnZVN5bmM6ZmFpbCwgY2FuIG5vdCBnZXQgc2Vzc2lvbi4nKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5IHx8IFwic2Vzc2lvbkV4cGlyZUtleVwiKSB8fCBJbmZpbml0eTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignd3guZ2V0U3RvcmFnZVN5bmM6ZmFpbCwgY2FuIG5vdCBnZXQgc2Vzc2lvbkV4cGlyZS4nKTtcbiAgICB9XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNXBkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YVc1cGRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc2JVSkJRV1VzVlVGQlF5eE5RVUZ0UWp0SlFVTXZRaXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRE9VSXNTVUZCU1R0UlFVTkJMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXl4alFVRmpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eFhRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1MwRkRha1U3U1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0UlFVTlNMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zT0VOQlFUaERMRU5CUVVNc1EwRkJRVHRMUVVOb1JUdEpRVU5FTEVsQlFVazdVVUZEUVN4blFrRkJUU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEZRVUZGTEVOQlFVTXNZMEZCWXl4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENMRWxCUVVrc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4UlFVRlJMRU5CUVVNN1MwRkRka2M3U1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0UlFVTlNMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zYjBSQlFXOUVMRU5CUVVNc1EwRkJRVHRMUVVOMFJUdEJRVU5NTEVOQlFVTXNSVUZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YRzVwYlhCdmNuUWdleUJKU1c1cGRFOXdkR2x2YmlCOUlHWnliMjBnSnk0dUwybHVkR1Z5Wm1GalpTZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLSEJoY21GdGN6b2dTVWx1YVhSUGNIUnBiMjRwSUQwK0lIdGNiaUFnSUNCUFltcGxZM1F1WVhOemFXZHVLR052Ym1acFp5d2djR0Z5WVcxektUdGNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJpQTlJSGQ0TG1kbGRGTjBiM0poWjJWVGVXNWpLR052Ym1acFp5NXpaWE56YVc5dVRtRnRaU0VwSUh4OElDY25PMXh1SUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpZ25kM2d1WjJWMFUzUnZjbUZuWlZONWJtTTZabUZwYkN3Z1kyRnVJRzV2ZENCblpYUWdjMlZ6YzJsdmJpNG5LVnh1SUNBZ0lIMWNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNBOUlIZDRMbWRsZEZOMGIzSmhaMlZUZVc1aktHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1SUh4OElGd2ljMlZ6YzJsdmJrVjRjR2x5WlV0bGVWd2lLU0I4ZkNCSmJtWnBibWwwZVR0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvSjNkNExtZGxkRk4wYjNKaFoyVlRlVzVqT21aaGFXd3NJR05oYmlCdWIzUWdaMlYwSUhObGMzTnBiMjVGZUhCcGNtVXVKeWxjYmlBZ0lDQjlYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKCk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOW5hVzR1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZZWEJwTDJ4dloybHVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNa1JCUVhGRU8wRkJSWEpFTEcxQ1FVRmxPMGxCUTFnc1QwRkJUeXgzUWtGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkJPMEZCUTJoRExFTkJRVU1zUlVGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnpaWE56YVc5dVRXRnVZV2RsY2lCbWNtOXRJQ2N1TGk5dGIyUjFiR1V2YzJWemMybHZiazFoYm1GblpYSW5YRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJQ2dwSUQwK0lIdGNiaUFnSUNCeVpYUjFjbTRnYzJWemMybHZiazFoYm1GblpYSXViV0ZwYmlncFhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnJlcXVlc3Qob2JqKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WeGRXVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2Y21WeGRXVnpkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGRExFZEJRVzFDTzBsQlF5OUNMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1FVRkRkRU1zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1SUgwZ1puSnZiU0FuTGk0dmFXNTBaWEptWVdObEoxeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaWtnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNXlaWEYxWlhOMEtHOWlhaWxjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvc2Vzc2lvbk1hbmFnZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuc2V0U2Vzc2lvbihzZXNzaW9uKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWMFUyVnpjMmx2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmMyVjBVMlZ6YzJsdmJpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVVnlSQ3h0UWtGQlpTeFZRVUZETEU5QlFXVTdTVUZETTBJc2QwSkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRka01zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhObGMzTnBiMjVOWVc1aFoyVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXpaWE56YVc5dVRXRnVZV2RsY2lkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tITmxjM05wYjI0NklITjBjbWx1WnlrZ1BUNGdlMXh1SUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG5ObGRGTmxjM05wYjI0b2MyVnpjMmx2YmlrN1hHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnVwbG9hZEZpbGUob2JqKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhCc2IyRmtSbWxzWlM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmRYQnNiMkZrUm1sc1pTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVZHlSQ3h0UWtGQlpTeFZRVUZETEVkQlFYTkNPMGxCUTJ4RExFOUJRVThzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3UVVGRGVrTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5eVpYRjFaWE4wU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0I3SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0FvYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQnlaWEYxWlhOMFNHRnVaR3hsY2k1MWNHeHZZV1JHYVd4bEtHOWlhaWxjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgaW5pdF8xID0gcmVxdWlyZShcIi4vYXBpL2luaXRcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4vYXBpL3JlcXVlc3RcIik7XG52YXIgdXBsb2FkRmlsZV8xID0gcmVxdWlyZShcIi4vYXBpL3VwbG9hZEZpbGVcIik7XG52YXIgc2V0U2Vzc2lvbl8xID0gcmVxdWlyZShcIi4vYXBpL3NldFNlc3Npb25cIik7XG52YXIgbG9naW5fMSA9IHJlcXVpcmUoXCIuL2FwaS9sb2dpblwiKTtcbnZhciBnZXRTZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0U2Vzc2lvblwiKTtcbnZhciBnZXRDb25maWdfMSA9IHJlcXVpcmUoXCIuL2FwaS9nZXRDb25maWdcIik7XG52YXIgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbnZhciB3ZVJlcXVlc3RPYmplY3QgPSB7XG4gICAgaW5pdDogaW5pdF8xLmRlZmF1bHQsXG4gICAgcmVxdWVzdDogcmVxdWVzdF8xLmRlZmF1bHQsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZV8xLmRlZmF1bHQsXG4gICAgc2V0U2Vzc2lvbjogc2V0U2Vzc2lvbl8xLmRlZmF1bHQsXG4gICAgbG9naW46IGxvZ2luXzEuZGVmYXVsdCxcbiAgICBnZXRTZXNzaW9uOiBnZXRTZXNzaW9uXzEuZGVmYXVsdCxcbiAgICBnZXRDb25maWc6IGdldENvbmZpZ18xLmRlZmF1bHQsXG4gICAgdmVyc2lvbjogdmVyc2lvbl8xLnZlcnNpb25cbn07XG5leHBvcnRzLmRlZmF1bHQgPSB3ZVJlcXVlc3RPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4dFEwRkJOa0k3UVVGRE4wSXNlVU5CUVcxRE8wRkJRMjVETEN0RFFVRjVRenRCUVVONlF5d3JRMEZCZVVNN1FVRkRla01zY1VOQlFTdENPMEZCUXk5Q0xDdERRVUY1UXp0QlFVTjZReXcyUTBGQmRVTTdRVUZGZGtNc2NVTkJRVzFETzBGQlJXNURMRWxCUVUwc1pVRkJaU3hIUVVGak8wbEJRMnBETEVsQlFVa3NaMEpCUVVFN1NVRkRTaXhQUVVGUExHMUNRVUZCTzBsQlExQXNWVUZCVlN4elFrRkJRVHRKUVVOV0xGVkJRVlVzYzBKQlFVRTdTVUZEVml4TFFVRkxMR2xDUVVGQk8wbEJRMHdzVlVGQlZTeHpRa0ZCUVR0SlFVTldMRk5CUVZNc2NVSkJRVUU3U1VGRFZDeFBRVUZQTEcxQ1FVRkJPME5CUTFJc1EwRkJRenRCUVVWR0xHdENRVUZsTEdWQlFXVXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCcGJtbDBJR1p5YjIwZ1hDSXVMMkZ3YVM5cGJtbDBYQ0pjYm1sdGNHOXlkQ0J5WlhGMVpYTjBJR1p5YjIwZ1hDSXVMMkZ3YVM5eVpYRjFaWE4wWENKY2JtbHRjRzl5ZENCMWNHeHZZV1JHYVd4bElHWnliMjBnWENJdUwyRndhUzkxY0d4dllXUkdhV3hsWENKY2JtbHRjRzl5ZENCelpYUlRaWE56YVc5dUlHWnliMjBnWENJdUwyRndhUzl6WlhSVFpYTnphVzl1WENKY2JtbHRjRzl5ZENCc2IyZHBiaUJtY205dElGd2lMaTloY0drdmJHOW5hVzVjSWx4dWFXMXdiM0owSUdkbGRGTmxjM05wYjI0Z1puSnZiU0JjSWk0dllYQnBMMmRsZEZObGMzTnBiMjVjSWx4dWFXMXdiM0owSUdkbGRFTnZibVpwWnlCbWNtOXRJRndpTGk5aGNHa3ZaMlYwUTI5dVptbG5YQ0pjYm1sdGNHOXlkQ0I3SUhkbFVtVnhkV1Z6ZENCOUlHWnliMjBnWENJdUwybHVkR1Z5Wm1GalpWd2lYRzVwYlhCdmNuUWdleUIyWlhKemFXOXVJSDBnWm5KdmJTQW5MaTkyWlhKemFXOXVKMXh1WEc1amIyNXpkQ0IzWlZKbGNYVmxjM1JQWW1wbFkzUTZJSGRsVW1WeGRXVnpkQ0E5SUh0Y2JpQWdhVzVwZEN4Y2JpQWdjbVZ4ZFdWemRDeGNiaUFnZFhCc2IyRmtSbWxzWlN4Y2JpQWdjMlYwVTJWemMybHZiaXhjYmlBZ2JHOW5hVzRzWEc0Z0lHZGxkRk5sYzNOcGIyNHNYRzRnSUdkbGRFTnZibVpwWnl4Y2JpQWdkbVZ5YzJsdmJseHVmVHRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZDJWU1pYRjFaWE4wVDJKcVpXTjBPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHd4LmdldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZXMuZGF0YSkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlcy5kYXRhLCB7IGlzQ2FjaGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXQob2JqLCByZWFsRGF0YSkge1xuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHxcbiAgICAgICAgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVhbERhdGEpKSkge1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgICAgIGRhdGE6IHJlYWxEYXRhXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldCxcbiAgICBzZXQ6IHNldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyRmphR1ZOWVc1aFoyVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5allXTm9aVTFoYm1GblpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGRlFTeFRRVUZUTEVkQlFVY3NRMEZCUXl4SFFVRnRRanRKUVVNMVFpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSVHRSUVVOb1FpeFBRVUZQTzB0QlExWTdTVUZEUkN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xRkJRMVlzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4VFFVRlRPMUZCUTJ4Q0xFOUJRVThzV1VGQlJTeEhRVUZITzFsQlExSXNTVUZEU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFbEJRVWs3WjBKQlEyeENMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEZWQlFWVXNTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVTXhSRHRuUWtGRFJTeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRTlCUVU4c1MwRkJTeXhWUVVGVkxFVkJRVVU3YjBKQlEyNURMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZCTzJsQ1FVTjZRenRoUVVOS08xbEJRMFFzU1VGQlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yZENRVU51UXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03WVVGRGJFSTdVVUZEVEN4RFFVRkRPMHRCUTBvc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWRCUVcxQ0xFVkJRVWNzVVVGQmVVSTdTVUZEZUVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVTdVVUZEYUVJc1QwRkJUenRMUVVOV08wbEJRMFFzU1VGRFNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrN1VVRkRiRUlzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4TFFVRkxMRXRCUVVzc1ZVRkJWU3hKUVVGSkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkRNVVE3VVVGRFJTeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMWxCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eFRRVUZUTzFsQlEyeENMRWxCUVVrc1JVRkJSU3hSUVVGUk8xTkJRMnBDTEVOQlFVTXNRMEZCUVR0TFFVTk1PMEZCUTB3c1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NSMEZCUnl4TFFVRkJPMGxCUTBnc1IwRkJSeXhMUVVGQk8wTkJRMDRzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpWEc1Y2JtWjFibU4wYVc5dUlHZGxkQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1S1NCN1hHNGdJQ0FnYVdZZ0tDRnZZbW91YjNKcFoybHVWWEpzS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc0Z0lDQWdkM2d1WjJWMFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lHdGxlVG9nYjJKcUxtOXlhV2RwYmxWeWJDeGNiaUFnSUNBZ0lDQWdjM1ZqWTJWemN5QW9jbVZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbU5oWTJobElEMDlQU0IwY25WbElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdLSFI1Y0dWdlppQnZZbW91WTJGamFHVWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpQW1KaUJ2WW1vdVkyRmphR1VvY21WekxtUmhkR0VwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VjM1ZqWTJWemN5QTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNXpkV05qWlhOektISmxjeTVrWVhSaExDQjdhWE5EWVdOb1pUb2dkSEoxWlgwcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lvZEhsd1pXOW1JRzlpYWk1amIyMXdiR1YwWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbU52YlhCc1pYUmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnpaWFFvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlBc0lISmxZV3hFWVhSaE9pQnpkSEpwYm1jZ2ZDQnZZbXBsWTNRcElIdGNiaUFnSUNCcFppQW9JVzlpYWk1dmNtbG5hVzVWY213cElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb1hHNGdJQ0FnSUNBZ0lHOWlhaTVqWVdOb1pTQTlQVDBnZEhKMVpTQjhmRnh1SUNBZ0lDQWdJQ0FvZEhsd1pXOW1JRzlpYWk1allXTm9aU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lJQ1ltSUc5aWFpNWpZV05vWlNoeVpXRnNSR0YwWVNrcFhHNGdJQ0FnS1NCN1hHNGdJQ0FnSUNBZ0lIZDRMbk5sZEZOMGIzSmhaMlVvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCdlltb3ViM0pwWjJsdVZYSnNMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nY21WaGJFUmhkR0ZjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCblpYUXNYRzRnSUNBZ2MyVjBYRzU5TzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbmZ1bmN0aW9uIGNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdCkge1xuICAgIHZhciB0eXBlID0gZS50eXBlLCByZXMgPSBlLnJlcztcbiAgICBpZiAob2JqLmNhdGNoRXJyb3IpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdodHRwLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IocmVzLnN0YXR1c0NvZGUudG9TdHJpbmcoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICd1cGxvYWQtZXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihyZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnbG9naWMtZXJyb3InKSB7XG4gICAgICAgICAgICB2YXIgbXNnID0gZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5nZXRFcnJvck1zZyhyZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IobXNnLmNvbnRlbnQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChlLnR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmxvZ2ljRXJyb3Iob2JqLCBlLnJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5jYXRjaEhhbmRsZXIgPSBjYXRjaEhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMkYwWTJoSVlXNWtiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWpZWFJqYUVoaGJtUnNaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkRRU3dyUTBGQk1FTTdRVUZQTVVNc1UwRkJVeXhaUVVGWkxFTkJRVU1zUTBGQllTeEZRVUZGTEVkQlFYVkRMRVZCUVVVc1RVRkJPRUk3U1VGRGFFY3NTVUZCUVN4aFFVRkpMRVZCUVVVc1YwRkJSeXhEUVVGTk8wbEJRM1pDTEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1JVRkJSVHRSUVVOb1FpeEpRVUZKTEVsQlFVa3NTMEZCU3l4WlFVRlpMRVZCUVVVN1dVRkRka0lzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRka1E3WVVGQlRTeEpRVUZKTEVsQlFVa3NTMEZCU3l4alFVRmpMRVZCUVVVN1dVRkRhRU1zVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU5xUXp0aFFVRk5MRWxCUVVrc1NVRkJTU3hMUVVGTExHRkJRV0VzUlVGQlJUdFpRVU12UWl4SlFVRkpMRWRCUVVjc1IwRkJSeXh6UWtGQldTeERRVUZETEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVONFF5eFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTjZRenRoUVVGTk8xbEJSVWdzVDBGQlR5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRjRUk3UzBGRFNqdFRRVUZOTzFGQlEwZ3NTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRk8xbEJRMUlzVDBGQlR5eHpRa0ZCV1N4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUXpsRE8yRkJRVTA3V1VGRlNDeFBRVUZQTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOd1FqdExRVU5LTzBGQlJVd3NRMEZCUXp0QlFVTlJMRzlEUVVGWklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dWFXMXdiM0owSUdWeWNtOXlTR0Z1Wkd4bGNpQm1jbTl0SUZ3aUxpOWxjbkp2Y2toaGJtUnNaWEpjSWp0Y2JseHVkSGx3WlNCVWFISnZkMFZ5Y205eVZIbHdaU0E5SUNkMWNHeHZZV1F0WlhKeWIzSW5JSHdnSjJ4dloybGpMV1Z5Y205eUp5QjhJQ2RvZEhSd0xXVnljbTl5SjF4dWFXNTBaWEptWVdObElGUm9jbTkzUlhKeWIzSWdlMXh1SUNBZ0lIUjVjR1U2SUZSb2NtOTNSWEp5YjNKVWVYQmxYRzRnSUNBZ2NtVnpPaUJoYm5sY2JuMWNibVoxYm1OMGFXOXVJR05oZEdOb1NHRnVaR3hsY2lobE9pQlVhSEp2ZDBWeWNtOXlMQ0J2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0c0lISmxhbVZqZERvZ0tISmxZWE52Ymo4NklHRnVlU2tnUFQ0Z2RtOXBaQ2tnZTF4dUlDQWdJR052Ym5OMElIc2dkSGx3WlN3Z2NtVnpJSDBnUFNCbFhHNGdJQ0FnYVdZZ0tHOWlhaTVqWVhSamFFVnljbTl5S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbElEMDlQU0FuYUhSMGNDMWxjbkp2Y2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9ibVYzSUVWeWNtOXlLSEpsY3k1emRHRjBkWE5EYjJSbExuUnZVM1J5YVc1bktDa3BLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxJRDA5UFNBbmRYQnNiMkZrTFdWeWNtOXlKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENodVpYY2dSWEp5YjNJb2NtVnpLU2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaU0E5UFQwZ0oyeHZaMmxqTFdWeWNtOXlKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUcxelp5QTlJR1Z5Y205eVNHRnVaR3hsY2k1blpYUkZjbkp2Y2sxelp5aHlaWE1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENodVpYY2dSWEp5YjNJb2JYTm5MbU52Ym5SbGJuUXBLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dGdHVTN2xtcHo2WlNaNksrdlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdhV1lnS0dVdWRIbHdaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHVnljbTl5U0dGdVpHeGxjaTVzYjJkcFkwVnljbTl5S0c5aWFpd2daUzV5WlhNcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVZVzI1THVXYW5QcGxKbm9yNjljYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNWNibjFjYm1WNGNHOXlkQ0I3SUdOaGRHTm9TR0Z1Wkd4bGNpQjlJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuLi9hcGkvcmVxdWVzdFwiKTtcbmZ1bmN0aW9uIHN0YXJ0KG9iaikge1xuICAgIG9iai5fcmVwb3J0U3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59XG5mdW5jdGlvbiBlbmQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRFbmRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgaWYgKG9iai5yZXBvcnQgJiYgb2JqLl9yZXBvcnRTdGFydFRpbWUpIHtcbiAgICAgICAgcmVwb3J0KG9iai5yZXBvcnQsIG9iai5fcmVwb3J0U3RhcnRUaW1lLCBvYmouX3JlcG9ydEVuZFRpbWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlcG9ydChuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQucmVwb3J0Q0dJID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kobmFtZSwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXF1ZXN0XzEuZGVmYXVsdCk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZCxcbiAgICByZXBvcnQ6IHJlcG9ydFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpIVnlZWFJwYjI1U1pYQnZjblJsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl0YjJSMWJHVXZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc1UwRkJVeXhMUVVGTExFTkJRVU1zUjBGQmRVTTdTVUZEYkVRc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEYUVRc1EwRkJRenRCUVVWRUxGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFYVkRPMGxCUTJoRUxFZEJRVWNzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU14UXl4SlFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhGUVVGRk8xRkJRMjVETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJaMElzUlVGQlJTeEhRVUZITEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUjBGQlJ5eERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMHRCUXpGRk8wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNUVUZCVFN4RFFVRkRMRWxCUVZrc1JVRkJSU3hUUVVGcFFpeEZRVUZGTEU5QlFXVTdTVUZETlVRc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNVMEZCVXl4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVONFF5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4cFFrRkJUeXhEUVVGRExFTkJRVU03UzBGRGRrUTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeExRVUZMTEU5QlFVRTdTVUZEVEN4SFFVRkhMRXRCUVVFN1NVRkRTQ3hOUVVGTkxGRkJRVUU3UTBGRFZDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZENCbWNtOXRJQ2N1TGk5aGNHa3ZjbVZ4ZFdWemRDZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTlwYm5SbGNtWmhZMlZjSWp0Y2JseHVablZ1WTNScGIyNGdjM1JoY25Rb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVLU0I3WEc0Z0lDQWdiMkpxTGw5eVpYQnZjblJUZEdGeWRGUnBiV1VnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pXNWtLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUc5aWFpNWZjbVZ3YjNKMFJXNWtWR2x0WlNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lHbG1LRzlpYWk1eVpYQnZjblFnSmlZZ2IySnFMbDl5WlhCdmNuUlRkR0Z5ZEZScGJXVXBJSHRjYmlBZ0lDQWdJQ0FnY21Wd2IzSjBLRzlpYWk1eVpYQnZjblFnWVhNZ2MzUnlhVzVuTENCdlltb3VYM0psY0c5eWRGTjBZWEowVkdsdFpTd2diMkpxTGw5eVpYQnZjblJGYm1SVWFXMWxLVHRjYmlBZ0lDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlISmxjRzl5ZENodVlXMWxPaUJ6ZEhKcGJtY3NJSE4wWVhKMFZHbHRaVG9nYm5WdFltVnlMQ0JsYm1SVWFXMWxPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NXlaWEJ2Y25SRFIwa2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1bWFXY3VjbVZ3YjNKMFEwZEpLRzVoYldVc0lITjBZWEowVkdsdFpTd2daVzVrVkdsdFpTd2djbVZ4ZFdWemRDazdYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjM1JoY25Rc1hHNGdJQ0FnWlc1a0xGeHVJQ0FnSUhKbGNHOXlkRnh1ZlZ4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xuZnVuY3Rpb24gc3lzdGVtRXJyb3Iob2JqLCByZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciByZXRyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RfMS5kZWZhdWx0KG9iaikudGhlbihvYmouX3Jlc29sdmUpLmNhdGNoKG9iai5fcmVqZWN0KTsgfTtcbiAgICAgICAgZG9FcnJvcihcIlwiLCByZXMuZXJyTXNnLCByZXRyeSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbG9naWNFcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIF9hID0gZ2V0RXJyb3JNc2cocmVzKSwgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XG4gICAgICAgIHZhciByZXRyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RfMS5kZWZhdWx0KG9iaikudGhlbihvYmouX3Jlc29sdmUpLmNhdGNoKG9iai5fcmVqZWN0KTsgfTtcbiAgICAgICAgZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbn1cbmZ1bmN0aW9uIGdldEVycm9yTXNnKHJlcykge1xuICAgIHZhciB0aXRsZSA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGl0bGUgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZTtcbiAgICB9XG4gICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50KHJlcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQ7XG4gICAgfVxuICAgIHJldHVybiB7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9O1xufVxuZnVuY3Rpb24gZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpIHtcbiAgICB2YXIgc2hvd0Vycm9yUmV0cnlCdG4gPSBjb25maWdfMS5kZWZhdWx0LmVycm9yUmV0cnlCdG4gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgd3guc2hvd01vZGFsKE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgXCLnvZHnu5zmiJbmnI3liqHlvILluLjvvIzor7fnqI3lkI7ph43or5VcIixcbiAgICB9LCAhc2hvd0Vycm9yUmV0cnlCdG4gPyB7XG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlXG4gICAgfSA6IHtcbiAgICAgICAgc2hvd0NhbmNlbDogdHJ1ZSxcbiAgICAgICAgY29uZmlybVRleHQ6ICfph43or5UnLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZiAocmVzLmNvbmZpcm0gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgcmV0cnkoKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzeXN0ZW1FcnJvcjogc3lzdGVtRXJyb3IsXG4gICAgbG9naWNFcnJvcjogbG9naWNFcnJvcixcbiAgICBkb0Vycm9yOiBkb0Vycm9yLFxuICAgIGdldEVycm9yTXNnOiBnZXRFcnJvck1zZ1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpYSnliM0pJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5bGNuSnZja2hoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFYRkRPMEZCUjNKRExGTkJRVk1zVjBGQlZ5eERRVUZETEVkQlFYVkRMRVZCUVVVc1IwRkJOa0k3U1VGRGRrWXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhKUVVGSkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEyaERMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZEYWtJN1UwRkJUVHRSUVVOSUxFbEJRVTBzUzBGQlN5eEhRVUZITEdOQlFVMHNUMEZCUVN4cFFrRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJiRVFzUTBGQmEwUXNRMEZCUXp0UlFVTjJSU3hQUVVGUExFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03UzBGRGJFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXhWUVVGVkxFTkJRVU1zUjBGQmRVTXNSVUZCUlN4SFFVRjVSVHRKUVVOc1NTeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGFFTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5xUWp0VFFVRk5PMUZCUTBjc1NVRkJRU3h4UWtGQmJVTXNSVUZCYkVNc1owSkJRVXNzUlVGQlJTeHZRa0ZCTWtJc1EwRkJRenRSUVVNeFF5eEpRVUZOTEV0QlFVc3NSMEZCUnl4alFVRk5MRTlCUVVFc2FVSkJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRV3hFTEVOQlFXdEVMRU5CUVVNN1VVRkRka1VzVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03UzBGRGJFTTdTVUZIUkN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eGhRVUZoTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUXpWRExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5zUXp0SlFVVkVMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEZGtJc1EwRkJRenRCUVVWRUxGTkJRVk1zVjBGQlZ5eERRVUZETEVkQlFYbEZPMGxCUXpGR0xFbEJRVWtzUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTm1MRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRla01zU1VGQlNUdFpRVU5CTEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVFN1UwRkRkRU03VVVGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0VFFVTllPMHRCUTBvN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemxETEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU0zUWp0SlFVVkVMRWxCUVVrc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5xUWl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFpRVUZaTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUXpORExFbEJRVWs3V1VGRFFTeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkJPMU5CUXpGRE8xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdVMEZEV0R0TFFVTktPMU5CUVUwc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNXVUZCV1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVOb1JDeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU03UzBGRGFrTTdTVUZGUkN4UFFVRlBMRVZCUVVNc1MwRkJTeXhQUVVGQkxFVkJRVVVzVDBGQlR5eFRRVUZCTEVWQlFVTXNRMEZCUVR0QlFVTXpRaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFBRVUZQTEVOQlFVTXNTMEZCWVN4RlFVRkZMRTlCUVdVc1JVRkJSU3hMUVVGcFFqdEpRVVU1UkN4SlFVRk5MR2xDUVVGcFFpeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hKUVVGSkxFOUJRVThzUzBGQlN5eExRVUZMTEZWQlFWVXNRMEZCUXp0SlFVTTVSU3hGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRka0lzUzBGQlN5eFBRVUZCTzFGQlEwd3NUMEZCVHl4RlFVRkZMRTlCUVU4c1NVRkJTU3hsUVVGbE8wdEJRM1JETEVWQlFVVXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY0VJc1ZVRkJWU3hGUVVGRkxFdEJRVXM3UzBGRGNFSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRRU3hWUVVGVkxFVkJRVVVzU1VGQlNUdFJRVU5vUWl4WFFVRlhMRVZCUVVVc1NVRkJTVHRSUVVOcVFpeFBRVUZQTEVWQlFWQXNWVUZCVVN4SFFVRnpRenRaUVVNeFF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhMUVVGTExFdEJRVXNzVlVGQlZUdG5Ra0ZCUlN4TFFVRkxMRVZCUVVVc1EwRkJRenRSUVVNMVJDeERRVUZETzB0QlEwb3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRVaXhEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4WFFVRlhMR0ZCUVVFN1NVRkRXQ3hWUVVGVkxGbEJRVUU3U1VGRFZpeFBRVUZQTEZOQlFVRTdTVUZEVUN4WFFVRlhMR0ZCUVVFN1EwRkRaQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjbVZ4ZFdWemRDQm1jbTl0SUNjdUxpOWhjR2t2Y21WeGRXVnpkQ2M3WEc1cGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaXdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSTdYRzVjYm1aMWJtTjBhVzl1SUhONWMzUmxiVVZ5Y205eUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaXdnY21Wek9pQjNlQzVIWlc1bGNtRnNRMkZzYkdKaFkydFNaWE4xYkhRcElIdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTVtWVdsc0lEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1aaGFXd29jbVZ6S1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWFJ5ZVNBOUlDZ3BJRDArSUhKbGNYVmxjM1FvYjJKcUtTNTBhR1Z1S0c5aWFpNWZjbVZ6YjJ4MlpTa3VZMkYwWTJnb2IySnFMbDl5WldwbFkzUXBPMXh1SUNBZ0lDQWdJQ0JrYjBWeWNtOXlLRndpWENJc0lISmxjeTVsY25KTmMyY3NJSEpsZEhKNUtUdGNiaUFnSUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUd4dloybGpSWEp5YjNJb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVMQ0J5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFnZkNCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VabUZwYkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtWVdsc0tISmxjeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2UzUnBkR3hsTENCamIyNTBaVzUwZlNBOUlHZGxkRVZ5Y205eVRYTm5LSEpsY3lrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhKbGRISjVJRDBnS0NrZ1BUNGdjbVZ4ZFdWemRDaHZZbW9wTG5Sb1pXNG9iMkpxTGw5eVpYTnZiSFpsS1M1allYUmphQ2h2WW1vdVgzSmxhbVZqZENrN1hHNGdJQ0FnSUNBZ0lHUnZSWEp5YjNJb2RHbDBiR1VzSUdOdmJuUmxiblFzSUhKbGRISjVLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeURscG9MbW5wem1uSW5waFkzbnZhN251NS9rdUlEcGxKbm9yNi9sbTU3b3NJUGxoNzNtbGJEdnZJemxpSm5taWFmb29Zemxyb05jYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2tOaGJHeGlZV05ySUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVabWxuTG1WeWNtOXlRMkZzYkdKaFkyc29iMkpxTENCeVpYTXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHTnZibk52YkdVdVpYSnliM0lvY21WektUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1oyVjBSWEp5YjNKTmMyY29jbVZ6T2lCM2VDNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBJSHdnZDNndVZYQnNiMkZrUm1sc1pWTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJR3hsZENCMGFYUnNaU0E5SUZ3aVhDSTdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVpYSnliM0pVYVhSc1pTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYVhSc1pTQTlJR052Ym1acFp5NWxjbkp2Y2xScGRHeGxLSEpsY3k1a1lYUmhLVnh1SUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WlhKeWIzSlVhWFJzWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaWtnZTF4dUlDQWdJQ0FnSUNCMGFYUnNaU0E5SUdOdmJtWnBaeTVsY25KdmNsUnBkR3hsTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCamIyNTBaVzUwSUQwZ1hDSmNJanRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2tOdmJuUmxiblFnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR1Z1ZENBOUlHTnZibVpwWnk1bGNuSnZja052Ym5SbGJuUW9jbVZ6TG1SaGRHRXBYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVsY25KdmNrTnZiblJsYm5RZ1BUMDlJRndpYzNSeWFXNW5YQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVkR1Z1ZENBOUlHTnZibVpwWnk1bGNuSnZja052Ym5SbGJuUTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUh0MGFYUnNaU3dnWTI5dWRHVnVkSDFjYm4xY2JseHVablZ1WTNScGIyNGdaRzlGY25KdmNpaDBhWFJzWlRvZ2MzUnlhVzVuTENCamIyNTBaVzUwT2lCemRISnBibWNzSUhKbGRISjVQem9nS0NrZ1BUNGdZVzU1S1NCN1hHNGdJQ0FnTHk4ZzVwaXY1WkNtNXBpKzU2UzY2WWVONksrVjVveUo2Wkt1WEc0Z0lDQWdZMjl1YzNRZ2MyaHZkMFZ5Y205eVVtVjBjbmxDZEc0Z1BTQmpiMjVtYVdjdVpYSnliM0pTWlhSeWVVSjBiaUFtSmlCMGVYQmxiMllnY21WMGNua2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lqdGNiaUFnSUNCM2VDNXphRzkzVFc5a1lXd29UMkpxWldOMExtRnpjMmxuYmloN1hHNGdJQ0FnSUNBZ0lIUnBkR3hsTEZ4dUlDQWdJQ0FnSUNCamIyNTBaVzUwT2lCamIyNTBaVzUwSUh4OElGd2k1NzJSNTd1YzVvaVc1cHlONVlxaDVieUM1Ymk0Nzd5TTZLKzM1NmlONVpDTzZZZU42SytWWENJc1hHNGdJQ0FnZlN3Z0lYTm9iM2RGY25KdmNsSmxkSEo1UW5SdUlEOGdlMXh1SUNBZ0lDQWdJQ0J6YUc5M1EyRnVZMlZzT2lCbVlXeHpaVnh1SUNBZ0lIMGdPaUI3WEc0Z0lDQWdJQ0FnSUhOb2IzZERZVzVqWld3NklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUdOdmJtWnBjbTFVWlhoME9pQW42WWVONksrVkp5eGNiaUFnSUNBZ0lDQWdjM1ZqWTJWemN5aHlaWE02SUhkNExsTm9iM2ROYjJSaGJGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hKbGN5NWpiMjVtYVhKdElDWW1JSFI1Y0dWdlppQnlaWFJ5ZVNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCeVpYUnllU2dwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNrcE8xeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjM2x6ZEdWdFJYSnliM0lzWEc0Z0lDQWdiRzluYVdORmNuSnZjaXhjYmlBZ0lDQmtiMFZ5Y205eUxGeHVJQ0FnSUdkbGRFVnljbTl5VFhOblhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgJiYgY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ21vY2sg5rKh5pyJ5a+55bqU5o6l5Y+j55qE5pWw5o2uJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai51cmxdIHx8IChvYmoub3JpZ2luVXJsID8gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSA6ICcnKTtcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgfTtcbiAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXOWphMDFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDIxdlkydE5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMREpEUVVGeFF6dEJRVWR5UXl4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGMVF6dEpRVVZvUkN4SlFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRmFrWXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPMUZCUTJoRExFOUJRVThzUzBGQlN5eERRVUZETzB0QlEyaENPMGxCUlVRc1NVRkJTU3hKUVVGSkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zWjBKQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVVM1JpeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zU1VGQlRTeEhRVUZITEVkQlFVYzdVVUZEVWl4SlFVRkpMRTFCUVVFN1VVRkRTaXhWUVVGVkxFVkJRVVVzUjBGQlJ6dExRVU5zUWl4RFFVRkRPMGxCUlVZc2FVSkJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0SlFVTm1MRTlCUVU4c1IwRkJSeXhEUVVGQk8wRkJRMlFzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1IwRkJSeXhMUVVGQk8wTkJRMDRzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJR3h2WVdScGJtY2dabkp2YlNBbkxpNHZkWFJwYkM5c2IyRmthVzVuSjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYRzVjYm1aMWJtTjBhVzl1SUdkbGRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwT2lCaGJua2dlMXh1WEc0Z0lDQWdhV1lvSVNoamIyNW1hV2N1Ylc5amEwcHpiMjViYjJKcUxuVnliRjBnZkh3Z0tHOWlhaTV2Y21sbmFXNVZjbXdnSmlZZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRLU2twSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdiVzlqYXlEbXNxSG1uSW5scjdubHVwVG1qcVhsajZQbm1vVG1sYkRtamE1Y2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWduYlc5amF5RG1zcUhtbklubHI3bmx1cFRtanFYbGo2UG5tb1RtbGJEbWphNG5LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNTFjbXhkSUh4OElDaHZZbW91YjNKcFoybHVWWEpzSUQ4Z1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRJRG9nSnljcE8xeHVJQ0FnSUM4dklHUmxaWEFnWTI5d2VWeHVJQ0FnSUdSaGRHRWdQU0JLVTA5T0xuQmhjbk5sS0VwVFQwNHVjM1J5YVc1bmFXWjVLR1JoZEdFcEtUdGNiaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFc1hHNGdJQ0FnSUNBZ0lITjBZWFIxYzBOdlpHVTZJREl3TUZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tUdGNiaUFnSUNCeVpYUjFjbTRnY21WelhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFJjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbnZhciBtb2NrTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vbW9ja01hbmFnZXJcIik7XG52YXIgY2FjaGVNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9jYWNoZU1hbmFnZXJcIik7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL3Nlc3Npb25NYW5hZ2VyXCIpO1xudmFyIHJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVzcG9uc2VIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgdXJsXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91cmxcIik7XG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XG52YXIgY2F0Y2hIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9jYXRjaEhhbmRsZXJcIik7XG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsKSB7XG4gICAgaWYgKG9yaWdpblVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmJlZm9yZVNlbmQoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cbiAgICBvYmouX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIG9iai5fcmVqZWN0ID0gcmVqZWN0O1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaGVhZGVyID0gY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBoZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouaGVhZGVyKSwgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIpO1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmRhdGEpLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZCksIG9iai5kYXRhKTtcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cbiAgICBvYmouaGVhZGVyID0gb2JqLmhlYWRlciA/IG9iai5oZWFkZXIgOiB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBoZWFkZXIgPSBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcigpO1xuICAgICAgICBpZiAodHlwZW9mIGhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG9iai5oZWFkZXIgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmhlYWRlciksIGhlYWRlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcik7XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZm9ybURhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmZvcm1EYXRhKSwgKF9hID0ge30sIF9hW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYSkpO1xuICAgIH1cbiAgICB2YXIgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGdkKSwgb2JqLmZvcm1EYXRhKTtcbiAgICBpZiAoIWNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RVc2VRdWVyeVN0cmluZykge1xuICAgICAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xuICAgICAgICB9XG4gICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGdldEdsb2JhbERhdGEoKSB7XG4gICAgdmFyIGdkID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZ2Q7XG59XG5mdW5jdGlvbiBkb1JlcXVlc3Qob2JqKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBvYmoubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyOiBvYmouaGVhZGVyIHx8IHt9LFxuICAgICAgICAgICAgZGF0YVR5cGU6IG9iai5kYXRhVHlwZSB8fCAnanNvbicsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRvVXBsb2FkRmlsZShvYmopIHtcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHd4LnVwbG9hZEZpbGUoe1xuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcbiAgICAgICAgICAgIG5hbWU6IG9iai5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgZm9ybURhdGE6IG9iai5mb3JtRGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcmVxdWVzdChvYmopIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBvYmogPSBwcmVEbyhvYmosIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQucmVzcG9uc2VGb3JSZXF1ZXN0KG1vY2tSZXNwb25zZSwgb2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iai5jYWNoZSkge1xuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbihvYmopLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvUmVxdWVzdChvYmopO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQucmVzcG9uc2VGb3JSZXF1ZXN0KHJlcywgb2JqKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhdGNoSGFuZGxlcl8xLmNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdXBsb2FkRmlsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBvYmogPSBwcmVEbyhvYmosIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQucmVzcG9uc2VGb3JVcGxvYWRGaWxlKG1vY2tSZXNwb25zZSwgb2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4ob2JqKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yVXBsb2FkRmlsZShyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGNhdGNoSGFuZGxlcl8xLmNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGZvcm1hdDogZm9ybWF0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEVoaGJtUnNaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzSmxjWFZsYzNSSVlXNWtiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN3eVEwRkJjVU03UVVGRGNrTXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5dzJRMEZCZFVNN1FVRkRka01zSzBOQlFYbERPMEZCUTNwRExHMUVRVUUyUXp0QlFVTTNReXh4UkVGQkswTTdRVUZETDBNc2RVUkJRV2xFTzBGQlEycEVMRzFEUVVFMlFqdEJRVVUzUWl3clEwRkJNRU03UVVGRE1VTXNLME5CUVRoRE8wRkJSemxETEZOQlFWTXNUVUZCVFN4RFFVRkRMRk5CUVdsQ08wbEJRemRDTEVsQlFVa3NVMEZCVXl4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJUdFJRVU01UWl4UFFVRlBMRk5CUVZNc1EwRkJRVHRMUVVOdVFqdFRRVUZOTzFGQlEwZ3NTVUZCU1N4VFFVRlRMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTTdVVUZEYWtNc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNVMEZCVXl4TFFVRkxMRlZCUVZVc1JVRkJSVHRaUVVONFF5eFRRVUZUTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlFUdFRRVU5xUXp0UlFVTkVMRTlCUVU4c1UwRkJVeXhIUVVGSExGTkJRVk1zUTBGQlF6dExRVU5vUXp0QlFVTk1MRU5CUVVNN1FVRkhSQ3hUUVVGVExFdEJRVXNzUTBGQkswTXNSMEZCVFN4RlFVRkZMRTlCUVRoQ0xFVkJRVVVzVFVGQkswSTdTVUZEYUVrc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTNSRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0TFFVTndRanRKUVVWRUxFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNXVUZCV1N4TFFVRkxMRmRCUVZjc1JVRkJSVHRSUVVONlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVONFFqdFRRVUZOTzFGQlEwZ3NSMEZCUnl4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8wdEJRM1JDTzBsQlJVUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRk8xRkJRMnBDTEdsQ1FVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0TFFVTnFRenRKUVVWRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RlFVRkZPMUZCUTJoQ0xFZEJRVWNzUTBGQlF5eFRRVUZUTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVONFFpeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZETjBJN1NVRkZSQ3hIUVVGSExFTkJRVU1zVVVGQlVTeEhRVUZITEU5QlFVOHNRMEZCUXp0SlFVTjJRaXhIUVVGSExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0SlFVVnlRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZIUkN4VFFVRlRMRzlDUVVGdlFpeERRVUZETEVkQlFXMUNPenRKUVVVM1F5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSVHRSUVVOWUxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPMHRCUTJwQ08wbEJSVVFzUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE1VTXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjRReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xRkJRMmhETEVsQlFVa3NUMEZCVHl4TlFVRk5MRXRCUVVzc1VVRkJVU3hGUVVGRk8xbEJRelZDTEVkQlFVY3NRMEZCUXl4TlFVRk5MSGxDUVVGUExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVc3NUVUZCVFN4RFFVRkRMRU5CUVVNN1UwRkRNME03UzBGRFNqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGTkJRVk1zUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZETjBNc1IwRkJSeXhEUVVGRExFMUJRVTBzZVVKQlFVOHNSMEZCUnl4RFFVRkRMRTFCUVUwc1IwRkJTeXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMHRCUTNKRU8wbEJSVVFzU1VGQlNTeEhRVUZITEVOQlFVTXNVMEZCVXl4TFFVRkxMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NTVUZCU1N4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFJRVU01UkN4SFFVRkhMRU5CUVVNc1NVRkJTU3g1UWtGQlVTeEhRVUZITEVOQlFVTXNTVUZCWXl4blFrRkJSeXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlJTeERRVUZETzB0QlF6bEZPMGxCUjBRc1NVRkJUU3hGUVVGRkxFZEJRVWNzWVVGQllTeEZRVUZGTEVOQlFVTTdTVUZETTBJc1IwRkJSeXhEUVVGRExFbEJRVWtzZVVKQlFWRXNSVUZCUlN4SFFVRkxMRWRCUVVjc1EwRkJReXhKUVVGakxFTkJRVVVzUTBGQlF6dEpRVVUxUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRPMGxCUTJwRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVkQlFVY3NSMEZCUnl4RFFVRkRMRkZCUVZFc1NVRkJTU3hOUVVGTkxFTkJRVU03U1VGSGRFTXNTVUZCU1N4RFFVRkRMR2RDUVVGTkxFTkJRVU1zYlVKQlFXMUNMRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUzBGQlN5eExRVUZMTEVWQlFVVTdVVUZEY2tRc1NVRkJTU3huUWtGQlRTeERRVUZETEU5QlFVOHNSVUZCUlR0WlFVTm9RaXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEdGQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzV1VGQlNTeEhRVUZETEdkQ1FVRk5MRU5CUVVNc1YwRkJWeXhKUVVGSExHZENRVUZOTEVOQlFVTXNUMEZCVHl4TlFVRkhMRU5CUVVNN1UwRkRPVVU3VVVGRFJDeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMR0ZCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRMUVVONFF6dEpRVVZFTERCQ1FVRm5RaXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVTFRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZIUkN4VFFVRlRMSFZDUVVGMVFpeERRVUZETEVkQlFYTkNPenRKUVVOdVJDeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSVHRSUVVObUxFZEJRVWNzUTBGQlF5eFJRVUZSTEVkQlFVY3NSVUZCUlN4RFFVRkRPMHRCUTNKQ08wbEJSVVFzUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE1VTXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjRReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xRkJRMmhETEVsQlFVa3NUMEZCVHl4TlFVRk5MRXRCUVVzc1VVRkJVU3hGUVVGRk8xbEJRelZDTEVkQlFVY3NRMEZCUXl4TlFVRk5MSGxDUVVGUExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVc3NUVUZCVFN4RFFVRkRMRU5CUVVNN1UwRkRNME03UzBGRFNqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGTkJRVk1zUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZETjBNc1IwRkJSeXhEUVVGRExFMUJRVTBzZVVKQlFVOHNSMEZCUnl4RFFVRkRMRTFCUVUwc1IwRkJTeXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMHRCUTNKRU8wbEJSVVFzU1VGQlNTeEhRVUZITEVOQlFVTXNVMEZCVXl4TFFVRkxMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NTVUZCU1N4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFJRVU01UkN4SFFVRkhMRU5CUVVNc1VVRkJVU3g1UWtGQlVTeEhRVUZITEVOQlFVTXNVVUZCYTBJc1owSkJRVWNzWjBKQlFVMHNRMEZCUXl4WFFVRlhMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFBRVUZQTEUxQlFVVXNRMEZCUXp0TFFVTjBSanRKUVVkRUxFbEJRVTBzUlVGQlJTeEhRVUZITEdGQlFXRXNSVUZCUlN4RFFVRkRPMGxCUXpOQ0xFZEJRVWNzUTBGQlF5eFJRVUZSTEhsQ1FVRlJMRVZCUVVVc1IwRkJTeXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZGTEVOQlFVTTdTVUZGTVVNc1NVRkJTU3hEUVVGRExHZENRVUZOTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVU3VVVGRk4wSXNTVUZCU1N4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFpRVU5vUWl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExHRkJRVWNzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1dVRkJTU3hIUVVGRExHZENRVUZOTEVOQlFVTXNWMEZCVnl4SlFVRkhMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eE5RVUZITEVOQlFVTTdVMEZET1VVN1VVRkZSQ3hIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEdGQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTjRRenRKUVVWRUxEQkNRVUZuUWl4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVVUxUWl4UFFVRlBMRWRCUVVjc1EwRkJRenRCUVVObUxFTkJRVU03UVVGRlJDeFRRVUZUTEdGQlFXRTdTVUZEYkVJc1NVRkJTU3hGUVVGRkxFZEJRVkVzUlVGQlJTeERRVUZETzBsQlEycENMRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRla01zUlVGQlJTeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03UzBGRE5VSTdVMEZCVFN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFZRVUZWTEV0QlFVc3NVVUZCVVN4RlFVRkZPMUZCUXpsRExFVkJRVVVzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1EwRkJRenRMUVVNeFFqdEpRVU5FTEU5QlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJRc1EwRkJRenRCUVVWRUxGTkJRVk1zVTBGQlV5eERRVUZETEVkQlFXMUNPMGxCUTJ4RExFZEJRVWNzUjBGQlJ5eHZRa0ZCYjBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU5vUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZETDBJc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF6dFpRVU5RTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1IwRkJSenRaUVVOYUxFbEJRVWtzUlVGQlJTeEhRVUZITEVOQlFVTXNTVUZCU1R0WlFVTmtMRTFCUVUwc1JVRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRUdFpRVU5zUWl4TlFVRk5MRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeEZRVUZGTzFsQlEzaENMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVTeEpRVUZKTEUxQlFVMDdXVUZEYUVNc1QwRkJUeXhGUVVGUUxGVkJRVkVzUjBGQmIwTTdaMEpCUTNoRExFOUJRVThzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFTkJRVU03V1VGRFJDeEpRVUZKTEVWQlFVb3NWVUZCU3l4SFFVRTJRanRuUWtGRE9VSXNjMEpCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOdVF5eFBRVUZQTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOMlFpeERRVUZETzFsQlEwUXNVVUZCVVR0blFrRkRTaXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEZGQlFWRXNTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRM0JETEVkQlFVY3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRwUWtGRGJFSTdaMEpCUTBRc1NVRkJTU3hIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTzI5Q1FVTnFRaXhwUWtGQlR5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkJPMmxDUVVOcVFqdFpRVU5NTEVOQlFVTTdVMEZEU2l4RFFVRkRMRU5CUVVFN1NVRkRUaXhEUVVGRExFTkJRVU1zUTBGQlFUdEJRVU5PTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmxCUVZrc1EwRkJReXhIUVVGelFqdEpRVU40UXl4SFFVRkhMRWRCUVVjc2RVSkJRWFZDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRia01zVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJReTlDTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNN1dVRkRWaXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVkQlFVYzdXVUZEV2l4UlFVRlJMRVZCUVVVc1IwRkJSeXhEUVVGRExGRkJRVkVzU1VGQlNTeEZRVUZGTzFsQlF6VkNMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVTdXVUZEY0VJc1VVRkJVU3hGUVVGRkxFZEJRVWNzUTBGQlF5eFJRVUZSTzFsQlEzUkNMRTlCUVU4c1JVRkJVQ3hWUVVGUkxFZEJRWFZETzJkQ1FVTXpReXhQUVVGUExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjRRaXhEUVVGRE8xbEJRMFFzU1VGQlNTeEZRVUZLTEZWQlFVc3NSMEZCTmtJN1owSkJRemxDTEhOQ1FVRlpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkRia01zVDBGQlR5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRka0lzUTBGQlF6dFpRVU5FTEZGQlFWRTdaMEpCUTBvc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFJRVUZSTEV0QlFVc3NWVUZCVlN4RlFVRkZPMjlDUVVOd1F5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN2FVSkJRMnhDTzJkQ1FVTkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJUdHZRa0ZEYWtJc2FVSkJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUVR0cFFrRkRha0k3V1VGRFRDeERRVUZETzFOQlEwb3NRMEZCUXl4RFFVRkJPMGxCUTA0c1EwRkJReXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4UFFVRlBMRU5CUVVNc1IwRkJiVUk3U1VGRGFFTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlF5OUNMRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVWc1F5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRk8xbEJRMnBDTEVsQlFVa3NXVUZCV1N4SFFVRkhMSEZDUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoRExFbEJRVWtzV1VGQldTeEZRVUZGTzJkQ1FVTmtMRWxCUVVrc1VVRkJVU3hIUVVGSExIbENRVUZsTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zV1VGQldTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOeVJTeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFRRVU5LTzFGQlJVUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhGUVVGRk8xbEJRMWdzYzBKQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGVrSTdVVUZGUkN4M1FrRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRNVUlzVDBGQlR5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1VVRkRla0lzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVVNc1IwRkJSenRaUVVOU0xFbEJRVWtzVVVGQlVTeEhRVUZITEhsQ1FVRmxMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSMEZCYzBNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU12Uml4SlFVRkpMRkZCUVZFc1NVRkJTU3hKUVVGSkxFVkJRVVU3WjBKQlEyeENMRTlCUVU4c1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJGQlF6VkNPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c01rSkJRVmtzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGQk8xRkJRM1pETEVOQlFVTXNRMEZCUXl4RFFVRkJPMGxCUTA0c1EwRkJReXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4VlFVRlZMRU5CUVVNc1IwRkJjMEk3U1VGRGRFTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlF5OUNMRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVWc1F5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRk8xbEJRMnBDTEVsQlFVa3NXVUZCV1N4SFFVRkhMSEZDUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoRExFbEJRVWtzV1VGQldTeEZRVUZGTzJkQ1FVTmtMRWxCUVVrc1VVRkJVU3hIUVVGSExIbENRVUZsTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zV1VGQldTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVONFJTeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFRRVU5LTzFGQlJVUXNkMEpCUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUXpGQ0xFOUJRVThzV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkJPMUZCUXpWQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRkRMRWRCUVVjN1dVRkRVaXhKUVVGSkxGRkJRVkVzUjBGQlJ5eDVRa0ZCWlN4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVkQlFYbERMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGNrY3NTVUZCU1N4UlFVRlJMRWxCUVVrc1NVRkJTU3hGUVVGRk8yZENRVU5zUWl4UFFVRlBMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dGhRVU0xUWp0UlFVTk1MRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZETEVOQlFVTTdXVUZEVUN3eVFrRkJXU3hEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVFN1VVRkRhRU1zUTBGQlF5eERRVUZETEVOQlFVRTdTVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeHJRa0ZCWlR0SlFVTllMRTFCUVUwc1VVRkJRVHRKUVVOT0xFOUJRVThzVTBGQlFUdEpRVU5RTEZWQlFWVXNXVUZCUVR0RFFVTmlMRU5CUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2JHOWhaR2x1WnlCbWNtOXRJQ2N1TGk5MWRHbHNMMnh2WVdScGJtY25YRzVwYlhCdmNuUWdZMjl1Wm1sbklHWnliMjBnSnk0dUwzTjBiM0psTDJOdmJtWnBaeWRjYm1sdGNHOXlkQ0J6ZEdGMGRYTWdabkp2YlNBbkxpNHZjM1J2Y21VdmMzUmhkSFZ6SjF4dWFXMXdiM0owSUcxdlkydE5ZVzVoWjJWeUlHWnliMjBnSnk0dmJXOWphMDFoYm1GblpYSW5YRzVwYlhCdmNuUWdZMkZqYUdWTllXNWhaMlZ5SUdaeWIyMGdKeTR2WTJGamFHVk5ZVzVoWjJWeUoxeHVhVzF3YjNKMElITmxjM05wYjI1TllXNWhaMlZ5SUdaeWIyMGdKeTR2YzJWemMybHZiazFoYm1GblpYSW5YRzVwYlhCdmNuUWdjbVZ6Y0c5dWMyVklZVzVrYkdWeUlHWnliMjBnSnk0dmNtVnpjRzl1YzJWSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWElnWm5KdmJTQmNJaTR2WkhWeVlYUnBiMjVTWlhCdmNuUmxjbHdpWEc1cGJYQnZjblFnZFhKc0lHWnliMjBnSnk0dUwzVjBhV3d2ZFhKc0oxeHVhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpWEc1cGJYQnZjblFnWlhKeWIzSklZVzVrYkdWeUlHWnliMjBnWENJdUwyVnljbTl5U0dGdVpHeGxjbHdpTzF4dWFXMXdiM0owSUhzZ1kyRjBZMmhJWVc1a2JHVnlJSDBnWm5KdmJTQW5MaTlqWVhSamFFaGhibVJzWlhJbk8xeHVYRzR2THlEbW9Memx2SS9sakpaMWNteGNibVoxYm1OMGFXOXVJR1p2Y20xaGRDaHZjbWxuYVc1VmNtdzZJSE4wY21sdVp5a2dlMXh1SUNBZ0lHbG1JQ2h2Y21sbmFXNVZjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjQ2NwS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdmNtbG5hVzVWY214Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2RYSnNVR1Z5Wm1sNElEMGdZMjl1Wm1sbkxuVnliRkJsY21acGVEdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VkWEpzVUdWeVptbDRJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIVnliRkJsY21acGVDQTlJR052Ym1acFp5NTFjbXhRWlhKbWFYZ29LVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIxY214UVpYSm1hWGdnS3lCdmNtbG5hVzVWY213N1hHNGdJQ0FnZlZ4dWZWeHVYRzR2THlEbWlZRG1uSW5vcjdmbXNZTGxqNUhsaDdybGlZM3BuSURvcG9IbGdacm5tb1RrdW92bWc0VmNibVoxYm1OMGFXOXVJSEJ5WlVSdlBGUWdaWGgwWlc1a2N5QkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dVBpaHZZbW82SUZRc0lISmxjMjlzZG1VNklDaDJZV3gxWlQ4NklHRnVlU2tnUFQ0Z2RtOXBaQ3dnY21WcVpXTjBQem9nS0hKbFlYTnZiajg2SUdGdWVTa2dQVDRnZG05cFpDazZJRlFnZTF4dUlDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtSmxabTl5WlZObGJtUWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vdVltVm1iM0psVTJWdVpDZ3BPMXh1SUNBZ0lIMWNiaUFnSUNBdkx5RG5tYnZsdlpYbWdJSGxwTEhtbFlqdnZJenBoNDNscEkzbm1idmx2WlhvcnFIbWxiQmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BUMDlJRndpZFc1a1pXWnBibVZrWENJcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQTlJREE3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDc3JPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h2WW1vdWMyaHZkMHh2WVdScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnYkc5aFpHbHVaeTV6YUc5M0tHOWlhaTV6YUc5M1RHOWhaR2x1WnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tDRnZZbW91YjNKcFoybHVWWEpzS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTV2Y21sbmFXNVZjbXdnUFNCdlltb3VkWEpzTzF4dUlDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ1ptOXliV0YwS0c5aWFpNTFjbXdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJRzlpYWk1ZmNtVnpiMngyWlNBOUlISmxjMjlzZG1VN1hHNGdJQ0FnYjJKcUxsOXlaV3BsWTNRZ1BTQnlaV3BsWTNRN1hHNWNiaUFnSUNCeVpYUjFjbTRnYjJKcU8xeHVmVnh1WEc0dkx5RG1vTHpsdkkvbGpKYmxwSVRua0lib3I3Zm1zWUxubW9Sdlltcmxob1hscnJsY2JtWjFibU4wYVc5dUlHbHVhWFJwWVd4cGVtVlNaWEYxWlhOMFQySnFLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRwSUh0Y2JseHVJQ0FnSUdsbUlDZ2hiMkpxTG1SaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtUmhkR0VnUFNCN2ZUdGNiaUFnSUNCOVhHNGdJQ0FnWEc0Z0lDQWdiMkpxTG1obFlXUmxjaUE5SUc5aWFpNW9aV0ZrWlhJZ1B5QnZZbW91YUdWaFpHVnlJRG9nZTMwN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1YzJWMFNHVmhaR1Z5SUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQm9aV0ZrWlhJZ1BTQmpiMjVtYVdjdWMyVjBTR1ZoWkdWeUtDazdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYUdWaFpHVnlJRDA5UFNBbmIySnFaV04wSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtaGxZV1JsY2lBOUlIc3VMaTV2WW1vdWFHVmhaR1Z5TENBdUxpNW9aV0ZrWlhKOU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG5ObGRFaGxZV1JsY2lBOVBUMGdKMjlpYW1WamRDY3BJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtaGxZV1JsY2lBOUlIc3VMaTV2WW1vdWFHVmhaR1Z5TENBdUxpNWpiMjVtYVdjdWMyVjBTR1ZoWkdWeWZUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iMkpxTG05eWFXZHBibFZ5YkNBaFBUMGdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1ZFhKc0lDWW1JSE4wWVhSMWN5NXpaWE56YVc5dUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1a1lYUmhJRDBnZXlBdUxpNXZZbW91WkdGMFlTQmhjeUJ2WW1wbFkzUXNJRnRqYjI1bWFXY3VjMlZ6YzJsdmJrNWhiV1ZkT2lCemRHRjBkWE11YzJWemMybHZiaUI5TzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SU9XbWd1YWVuT2FjaWVXRnFPV3hnT1dQZ3VhVnNPKzhqT1dJbWVhM3UrV0tvRnh1SUNBZ0lHTnZibk4wSUdka0lEMGdaMlYwUjJ4dlltRnNSR0YwWVNncE8xeHVJQ0FnSUc5aWFpNWtZWFJoSUQwZ2V5QXVMaTVuWkN3Z0xpNHViMkpxTG1SaGRHRWdZWE1nYjJKcVpXTjBJSDA3WEc1Y2JpQWdJQ0J2WW1vdWJXVjBhRzlrSUQwZ2IySnFMbTFsZEdodlpDQjhmQ0FuUjBWVUp6dGNiaUFnSUNCdlltb3VaR0YwWVZSNWNHVWdQU0J2WW1vdVpHRjBZVlI1Y0dVZ2ZId2dKMnB6YjI0bk8xeHVYRzRnSUNBZ0x5OGc1YWFDNXA2YzZLKzM1ckdDNUxpTjVwaXZSMFZVNzd5TTVZaVo1WnlvVlZKTTVMaXQ2SWVxNVlxbzVZcWc1TGlLNTVtNzViMlY1b0NCNVpLTTVZV281YkdBNVkrQzVwV3dYRzRnSUNBZ2FXWWdLQ0ZqYjI1bWFXY3VaRzlPYjNSVmMyVlJkV1Z5ZVZOMGNtbHVaeUFtSmlCdlltb3ViV1YwYUc5a0lDRTlQU0JjSWtkRlZGd2lLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxuVnliQ0E5SUhWeWJDNXpaWFJRWVhKaGJYTW9iMkpxTG5WeWJDd2dleUJiWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsWFRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjRnZlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdiMkpxTG5WeWJDQTlJSFZ5YkM1elpYUlFZWEpoYlhNb2IySnFMblZ5YkN3Z1oyUXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdWMzUmhjblFvYjJKcUtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCdlltbzdYRzU5WEc1Y2JpOHZJT2Fndk9XOGorV01sdVdraE9lUWh1UzRpdVM4b09hV2grUzd0dWVhaEc5aWF1V0doZVd1dVZ4dVpuVnVZM1JwYjI0Z2FXNXBkR2xoYkdsNlpWVndiRzloWkVacGJHVlBZbW9vYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dlMXh1SUNBZ0lHbG1JQ2doYjJKcUxtWnZjbTFFWVhSaEtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1bWIzSnRSR0YwWVNBOUlIdDlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHOWlhaTVvWldGa1pYSWdQU0J2WW1vdWFHVmhaR1Z5SUQ4Z2IySnFMbWhsWVdSbGNpQTZJSHQ5TzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5Mbk5sZEVobFlXUmxjaUE5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2FHVmhaR1Z5SUQwZ1kyOXVabWxuTG5ObGRFaGxZV1JsY2lncE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR2hsWVdSbGNpQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1b1pXRmtaWElnUFNCN0xpNHViMkpxTG1obFlXUmxjaXdnTGk0dWFHVmhaR1Z5ZlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTV6WlhSSVpXRmtaWElnUFQwOUlDZHZZbXBsWTNRbktTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1b1pXRmtaWElnUFNCN0xpNHViMkpxTG1obFlXUmxjaXdnTGk0dVkyOXVabWxuTG5ObGRFaGxZV1JsY24wN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOWlhaTV2Y21sbmFXNVZjbXdnSVQwOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMblZ5YkNBbUppQnpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91Wm05eWJVUmhkR0VnUFNCN0lDNHVMbTlpYWk1bWIzSnRSR0YwWVNCaGN5QnZZbXBsWTNRc0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJpQjlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZVdGcU9XeGdPV1BndWFWc08rOGpPV0ltZWEzdStXS29GeHVJQ0FnSUdOdmJuTjBJR2RrSUQwZ1oyVjBSMnh2WW1Gc1JHRjBZU2dwTzF4dUlDQWdJRzlpYWk1bWIzSnRSR0YwWVNBOUlIc2dMaTR1WjJRc0lDNHVMbTlpYWk1bWIzSnRSR0YwWVNCOU8xeHVYRzRnSUNBZ2FXWWdLQ0ZqYjI1bWFXY3VaRzlPYjNSVmMyVlJkV1Z5ZVZOMGNtbHVaeWtnZTF4dUlDQWdJQ0FnSUNBdkx5RGxzSWJubWJ2cG1ZYm1nSUhrdVovbHVLYmxuS2gxY216a3VJcGNiaUFnSUNBZ0lDQWdhV1lnS0hOMFlYUjFjeTV6WlhOemFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdkWEpzTG5ObGRGQmhjbUZ0Y3lodlltb3VkWEpzTENCN0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJpQjlLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBdkx5RGxoYWpsc1lEbGo0TG1sYkRsa0l6bWw3Ym1sTDdsbktoMWNtemt1SXBjYmlBZ0lDQWdJQ0FnYjJKcUxuVnliQ0E5SUhWeWJDNXpaWFJRWVhKaGJYTW9iMkpxTG5WeWJDd2daMlFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSXVjM1JoY25Rb2IySnFLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnZZbW83WEc1OVhHNWNibVoxYm1OMGFXOXVJR2RsZEVkc2IySmhiRVJoZEdFb0tTQjdYRzRnSUNBZ2JHVjBJR2RrT2lCaGJua2dQU0I3ZlR0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVuYkc5aVlXeEVZWFJoSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1oyUWdQU0JqYjI1bWFXY3VaMnh2WW1Gc1JHRjBZU2dwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NW5iRzlpWVd4RVlYUmhJRDA5UFNCY0ltOWlhbVZqZEZ3aUtTQjdYRzRnSUNBZ0lDQWdJR2RrSUQwZ1kyOXVabWxuTG1kc2IySmhiRVJoZEdFN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm5aRHRjYm4xY2JseHVablZ1WTNScGIyNGdaRzlTWlhGMVpYTjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRwSUh0Y2JpQWdJQ0J2WW1vZ1BTQnBibWwwYVdGc2FYcGxVbVZ4ZFdWemRFOWlhaWh2WW1vcE8xeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSGQ0TG5KbGNYVmxjM1FvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkWEpzT2lCdlltb3VkWEpzTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2IySnFMbVJoZEdFc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WlhSb2IyUTZJRzlpYWk1dFpYUm9iMlFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQm9aV0ZrWlhJNklHOWlhaTVvWldGa1pYSWdmSHdnZTMwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaFZIbHdaVG9nYjJKcUxtUmhkR0ZVZVhCbElIeDhJQ2RxYzI5dUp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQjNlQzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tISmxjem9nZDNndVIyVnVaWEpoYkVOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxuTjVjM1JsYlVWeWNtOXlLRzlpYWl3Z2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdVkyOXRjR3hsZEdVZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdVkyOXRjR3hsZEdVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0c5aWFpNXphRzkzVEc5aFpHbHVaeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMkZrYVc1bkxtaHBaR1VvS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJrYjFWd2JHOWhaRVpwYkdVb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJRzlpYWlBOUlHbHVhWFJwWVd4cGVtVlZjR3h2WVdSR2FXeGxUMkpxS0c5aWFpazdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnZDNndWRYQnNiMkZrUm1sc1pTaDdYRzRnSUNBZ0lDQWdJQ0FnSUNCMWNtdzZJRzlpYWk1MWNtd3NYRzRnSUNBZ0lDQWdJQ0FnSUNCbWFXeGxVR0YwYURvZ2IySnFMbVpwYkdWUVlYUm9JSHg4SUNjbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1GdFpUb2diMkpxTG01aGJXVWdmSHdnSnljc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtYjNKdFJHRjBZVG9nYjJKcUxtWnZjbTFFWVhSaExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWalkyVnpjeWh5WlhNNklIZDRMbFZ3Ykc5aFpFWnBiR1ZUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdaaGFXd29jbVZ6T2lCM2VDNUhaVzVsY21Gc1EyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZja2hoYm1Sc1pYSXVjM2x6ZEdWdFJYSnliM0lvYjJKcUxDQnlaWE1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjF3YkdWMFpTZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNWpiMjF3YkdWMFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2IySnFMbk5vYjNkTWIyRmthVzVuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3h2WVdScGJtY3VhR2xrWlNncFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgwcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUhKbGNYVmxjM1FvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlrNklHRnVlU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2IySnFJRDBnY0hKbFJHOG9iMkpxTENCeVpYTnZiSFpsTENCeVpXcGxZM1FwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3ViVzlqYTBwemIyNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J0YjJOclVtVnpjRzl1YzJVZ1BTQnRiMk5yVFdGdVlXZGxjaTVuWlhRb2IySnFLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h0YjJOclVtVnpjRzl1YzJVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY21WemNHOXVjMlVnUFNCeVpYTndiMjV6WlVoaGJtUnNaWEl1Y21WemNHOXVjMlZHYjNKU1pYRjFaWE4wS0cxdlkydFNaWE53YjI1elpTd2diMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2h5WlhOd2IyNXpaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCcFppQW9iMkpxTG1OaFkyaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZV05vWlUxaGJtRm5aWEl1WjJWMEtHOWlhaWs3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnpaWE56YVc5dVRXRnVZV2RsY2k1dFlXbHVLRzlpYWlrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5U1pYRjFaWE4wS0c5aWFpbGNiaUFnSUNBZ0lDQWdmU2t1ZEdobGJpZ29jbVZ6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSXVjbVZ6Y0c5dWMyVkdiM0pTWlhGMVpYTjBLSEpsY3lCaGN5QjNlQzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwTENCdlltb3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEpsYzNCdmJuTmxJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE53YjI1elpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaGxLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMkYwWTJoSVlXNWtiR1Z5S0dVc0lHOWlhaXdnY21WcVpXTjBLVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDBwWEc1OVhHNWNibVoxYm1OMGFXOXVJSFZ3Ykc5aFpFWnBiR1VvYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpazZJR0Z1ZVNCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiMkpxSUQwZ2NISmxSRzhvYjJKcUxDQnlaWE52YkhabExDQnlaV3BsWTNRcE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1Ylc5amEwcHpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdGIyTnJVbVZ6Y0c5dWMyVWdQU0J0YjJOclRXRnVZV2RsY2k1blpYUW9iMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodGIyTnJVbVZ6Y0c5dWMyVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpjRzl1YzJVZ1BTQnlaWE53YjI1elpVaGhibVJzWlhJdWNtVnpjRzl1YzJWR2IzSlZjR3h2WVdSR2FXeGxLRzF2WTJ0U1pYTndiMjV6WlN3Z2IySnFLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE53YjI1elpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNXRZV2x1S0c5aWFpa3VkR2hsYmlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1pHOVZjR3h2WVdSR2FXeGxLRzlpYWlsY2JpQWdJQ0FnSUNBZ2ZTa3VkR2hsYmlnb2NtVnpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpjRzl1YzJVZ1BTQnlaWE53YjI1elpVaGhibVJzWlhJdWNtVnpjRzl1YzJWR2IzSlZjR3h2WVdSR2FXeGxLSEpsY3lCaGN5QjNlQzVWY0d4dllXUkdhV3hsVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MExDQnZZbW9wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hKbGMzQnZibk5sSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2h5WlhOd2IyNXpaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBwTG1OaGRHTm9LQ2hsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYUmphRWhoYm1Sc1pYSW9aU3dnYjJKcUxDQnlaV3BsWTNRcFhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJR1p2Y20xaGRDeGNiaUFnSUNCeVpYRjFaWE4wTEZ4dUlDQWdJSFZ3Ykc5aFpFWnBiR1ZjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbnZhciBqc29uU3VwZXJzZXRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2pzb25TdXBlcnNldFwiKTtcbmZ1bmN0aW9uIHJlc3BvbnNlRm9yUmVxdWVzdChyZXMsIG9iaikge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAob2JqLmRhdGFUeXBlID09PSAnanNvbicgJiYgdHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBqc29uU3VwZXJzZXRfMS5kZWZhdWx0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIHZhciByZWFsRGF0YSA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGdW5jdGlvbiBzdWNjZXNzRGF0YSBvY2N1ciBlcnJvcjogXCIgKyBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb2JqLm5vQ2FjaGVGbGFzaCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZWFsRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhbERhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyXzEuZGVmYXVsdC5zZXQob2JqLCByZWFsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICdsb2dpYy1lcnJvcicsIHJlczogcmVzIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IHsgdHlwZTogJ2h0dHAtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlc3BvbnNlRm9yVXBsb2FkRmlsZShyZXMsIG9iaikge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBqc29uU3VwZXJzZXRfMS5kZWZhdWx0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIHZhciByZWFsRGF0YSA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGdW5jdGlvbiBzdWNjZXNzRGF0YSBvY2N1ciBlcnJvcjogXCIgKyBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWFsRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgeyB0eXBlOiAnaHR0cC1lcnJvcicsIHJlczogcmVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHJlc3BvbnNlRm9yUmVxdWVzdDogcmVzcG9uc2VGb3JSZXF1ZXN0LFxuICAgIHJlc3BvbnNlRm9yVXBsb2FkRmlsZTogcmVzcG9uc2VGb3JVcGxvYWRGaWxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WemNHOXVjMlZJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5eVpYTndiMjV6WlVoaGJtUnNaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZEY0VNc2JVUkJRVFpETzBGQlF6ZERMQ3REUVVGNVF6dEJRVU42UXl3clEwRkJlVU03UVVGRGVrTXNkVVJCUVdsRU8wRkJRMnBFTEcxRVFVRTJRenRCUVVVM1F5eHhSRUZCSzBNN1FVRkZMME1zVTBGQlV5eHJRa0ZCYTBJc1EwRkRka0lzUjBGQmIwTXNSVUZEY0VNc1IwRkJiVUk3U1VGRmJrSXNTVUZCU1N4SFFVRkhMRU5CUVVNc1ZVRkJWU3hMUVVGTExFZEJRVWNzUlVGQlJUdFJRVVY0UWl3d1FrRkJaMElzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkhNVUlzU1VGQlNTeEhRVUZITEVOQlFVTXNVVUZCVVN4TFFVRkxMRTFCUVUwc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eEpRVUZKTEV0QlFVc3NVVUZCVVN4RlFVRkZPMWxCUTNwRUxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NjMEpCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdXVUZEYkVNc1NVRkJTVHRuUWtGRFFTeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMkZCUTI1RE8xbEJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdaMEpCUTFJc1NVRkJSeXhIUVVGSExFTkJRVU1zVlVGQlZTeEZRVUZGTzI5Q1FVTm1MRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdhVUpCUTNSQ08zRkNRVUZOTzI5Q1FVTklMSE5DUVVGWkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGJFTXNUMEZCVHp0cFFrRkRWanRoUVVOS08xTkJRMG83VVVGRlJDeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1dVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hMUVVGTExGTkJRVk1zU1VGQlNTeEhRVUZITEVOQlFVTXNXVUZCV1N4SFFVRkhMR2RDUVVGTkxFTkJRVU1zV1VGQllTeEZRVUZGTzFsQlJUZEhMSGRDUVVGakxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdXVUZETlVJc1QwRkJUeXgzUWtGQll5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOMFF6dGhRVUZOTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMWxCUlhoRExFbEJRVWtzVVVGQlVTeEhRVUZ6UXl4RlFVRkZMRU5CUVVNN1dVRkRja1FzU1VGQlNUdG5Ra0ZEUVN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFhRVUZYTEV0QlFVc3NWVUZCVlN4RlFVRkZPMjlDUVVNeFF5eFJRVUZSTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmxDUVVNelF6dHhRa0ZCVFR0dlFrRkRTQ3hSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXp0cFFrRkRka0k3WVVGRFNqdFpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMmRDUVVOU0xFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNiME5CUVc5RExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZETTBRN1dVRkRSQ3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkZia0lzU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU51UXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJsQ1FVTjZRanR4UWtGQlRUdHZRa0ZEU0N4UFFVRlBMRkZCUVZFc1EwRkJRenRwUWtGRGJrSTdZVUZEU2p0WlFVVkVMSE5DUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJRenRUUVVOdVF6dGhRVUZOTzFsQlJVZ3NUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hoUVVGaExFVkJRVVVzUjBGQlJ5eExRVUZCTEVWQlFVVXNRMEZCUVR0VFFVTnlRenRMUVVOS08xTkJRVTA3VVVGRlNDeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRmxCUVZrc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlJTeERRVUZCTzB0QlEzQkRPMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zY1VKQlFYRkNMRU5CUXpGQ0xFZEJRWFZETEVWQlEzWkRMRWRCUVhOQ08wbEJSWFJDTEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1MwRkJTeXhIUVVGSExFVkJRVVU3VVVGRmVFSXNNRUpCUVdkQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUnpGQ0xFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNTVUZCU1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVNNVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMSE5DUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJ4RExFbEJRVWs3WjBKQlEwRXNSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRoUVVOdVF6dFpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMmRDUVVOU0xFbEJRVWNzUjBGQlJ5eERRVUZETEZWQlFWVXNSVUZCUlR0dlFrRkRaaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmxDUVVOMFFqdHhRa0ZCVFR0dlFrRkRTQ3h6UWtGQldTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03YjBKQlEyeERMRTlCUVU4N2FVSkJRMVk3WVVGRFNqdFRRVU5LTzFGQlJVUXNTVUZCU1N4blFrRkJUU3hEUVVGRExGbEJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExGbEJRVmtzUzBGQlN5eFRRVUZUTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmxCUVZrc1IwRkJSeXhuUWtGQlRTeERRVUZETEZsQlFXRXNSVUZCUlR0WlFVVTNSeXgzUWtGQll5eERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMWxCUXpWQ0xFOUJRVThzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGVrTTdZVUZCVFN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVWNFF5eEpRVUZKTEZGQlFWRXNSMEZCYzBNc1JVRkJSU3hEUVVGRE8xbEJRM0pFTEVsQlFVazdaMEpCUTBFc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNWMEZCVnl4TFFVRkxMRlZCUVZVc1JVRkJSVHR2UWtGRE1VTXNVVUZCVVN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRwUWtGRE0wTTdjVUpCUVUwN2IwSkJRMGdzVVVGQlVTeEhRVUZITEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNN2FVSkJRM1pDTzJGQlEwbzdXVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRuUWtGRFVpeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRzlEUVVGdlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUXpORU8xbEJSVVFzU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yZENRVU51UXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJGQlEzcENPMmxDUVVGTk8yZENRVU5JTEU5QlFVOHNVVUZCVVN4RFFVRkRPMkZCUTI1Q08xTkJRMG83WVVGQlRUdFpRVVZJTEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVc1lVRkJZU3hGUVVGRkxFZEJRVWNzUzBGQlFTeEZRVUZGTEVOQlFVRTdVMEZEY2tNN1MwRkRTanRUUVVGTk8xRkJSVWdzVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4WlFVRlpMRVZCUVVVc1IwRkJSeXhMUVVGQkxFVkJRVVVzUTBGQlFUdExRVU53UXp0QlFVTk1MRU5CUVVNN1FVRkZSQ3hyUWtGQlpUdEpRVU5ZTEd0Q1FVRnJRaXh2UWtGQlFUdEpRVU5zUWl4eFFrRkJjVUlzZFVKQlFVRTdRMEZEZUVJc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4dWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHZjbVZ4ZFdWemRFaGhibVJzWlhJblhHNXBiWEJ2Y25RZ1pYSnliM0pJWVc1a2JHVnlJR1p5YjIwZ0p5NHZaWEp5YjNKSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUdOaFkyaGxUV0Z1WVdkbGNpQm1jbTl0SUNjdUwyTmhZMmhsVFdGdVlXZGxjaWRjYm1sdGNHOXlkQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlJR1p5YjIwZ0p5NHZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpZGNibWx0Y0c5eWRDQnpaWE56YVc5dVRXRnVZV2RsY2lCbWNtOXRJQ2N1TDNObGMzTnBiMjVOWVc1aFoyVnlKMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aU8xeHVhVzF3YjNKMElHcHpiMjVUZFhCbGNuTmxkQ0JtY205dElDY3VMaTkxZEdsc0wycHpiMjVUZFhCbGNuTmxkQ2RjYmx4dVpuVnVZM1JwYjI0Z2NtVnpjRzl1YzJWR2IzSlNaWEYxWlhOMEtGeHVJQ0FnSUhKbGN6b2dkM2d1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZEN4Y2JpQWdJQ0J2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1WEc0cE9pQmhibmtnZTF4dUlDQWdJR2xtSUNoeVpYTXVjM1JoZEhWelEyOWtaU0E5UFQwZ01qQXdLU0I3WEc1Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1bGJtUW9iMkpxS1R0Y2JseHVJQ0FnSUNBZ0lDQXZMeURvcjdmbXNZTG1vTHpsdkkva3VMcHFjMjl1Nzd5TTVMMkc2TCtVNVp1ZTVMcUdjM1J5YVc1bjc3eU02SyswNXBpTzVZYUY1YTY1NUxpdDVZK3Y2SU85NWEyWTVaeW81YSs4NkllMDVMMi81YjZYU21GMllWTmpjbWx3ZE9XOGd1VzR1T2VhaE9XdGwrZXNwbHh1SUNBZ0lDQWdJQ0JwWmlBb2IySnFMbVJoZEdGVWVYQmxJRDA5UFNBbmFuTnZiaWNnSmlZZ2RIbHdaVzltSUhKbGN5NWtZWFJoSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVnpMbVJoZEdFZ1BTQnFjMjl1VTNWd1pYSnpaWFFvY21WekxtUmhkR0VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYTXVaR0YwWVNBOUlFcFRUMDR1Y0dGeWMyVW9jbVZ6TG1SaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0c5aWFpNWpZWFJqYUVWeWNtOXlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lobEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdWJHOW5hV05GY25KdmNpaHZZbW9zSUhKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxteHZaMmx1VkhKcFoyZGxjaUVvY21WekxtUmhkR0VwSUNZbUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ0lUMDlJSFZ1WkdWbWFXNWxaQ0FtSmlCdlltb3VjbVZNYjJkcGJrTnZkVzUwSUR3Z1kyOXVabWxuTG5KbFRHOW5hVzVNYVcxcGRDRXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2VadStXOWxlYUFnZVdrc2VhVmlPKzhqT1M0bE9tSGplaXZsZWFzb2VhVnNPUzRqZWkyaGVpL2grbUZqZWU5cmx4dUlDQWdJQ0FnSUNBZ0lDQWdjMlZ6YzJsdmJrMWhibUZuWlhJdVpHVnNVMlZ6YzJsdmJpZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGNYVmxjM1JJWVc1a2JHVnlMbkpsY1hWbGMzUW9iMkpxS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiMjVtYVdjdWMzVmpZMlZ6YzFSeWFXZG5aWElvY21WekxtUmhkR0VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbWpxWGxqNlBvdjVUbG01N21pSkRsaXAvbm9JRmNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnlaV0ZzUkdGMFlUb2djM1J5YVc1bklId2dTVUZ1ZVU5aWFtVmpkQ0I4SUVGeWNtRjVRblZtWm1WeUlEMGdYQ0pjSWp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdWMzVmpZMlZ6YzBSaGRHRWdQVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WaGJFUmhkR0VnUFNCamIyNW1hV2N1YzNWalkyVnpjMFJoZEdFb2NtVnpMbVJoZEdFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWVd4RVlYUmhJRDBnY21WekxtUmhkR0U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9YQ0pHZFc1amRHbHZiaUJ6ZFdOalpYTnpSR0YwWVNCdlkyTjFjaUJsY25KdmNqb2dYQ0lnS3lCbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaGIySnFMbTV2UTJGamFHVkdiR0Z6YUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PUzR1dVM2aHVTL25laXZnZW1odGVtZG91UzRqZW1YcXVlRGdlKzhqT1dJbWVTNGplV2JudWl3ZysrOGpPV1BxdWFZcitlOGsrV3RtT2FjZ09hV3NPYVZzT2FOcnUrOGpPVytoZVM0aSthc29laS9tK1dGcGVXR2plZVVxRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxuTjFZMk5sYzNNZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdWMzVmpZMlZ6Y3loeVpXRnNSR0YwWVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxZV3hFWVhSaE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9lOGsrV3RtT1d0bU9XQ3FGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGamFHVk5ZVzVoWjJWeUxuTmxkQ2h2WW1vc0lISmxZV3hFWVhSaEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPYU9wZVdQbytpL2xPV2JudVdrc2VpMHBlZWdnVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnZXlCMGVYQmxPaUFuYkc5bmFXTXRaWEp5YjNJbkxDQnlaWE1nZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2FIUjBjSFBvdjVUbG01N25pcmJtZ0lIbm9JSHBuWjR5TURCY2JpQWdJQ0FnSUNBZ2RHaHliM2NnZXlCMGVYQmxPaUFuYUhSMGNDMWxjbkp2Y2ljc0lISmxjeUI5WEc0Z0lDQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnlaWE53YjI1elpVWnZjbFZ3Ykc5aFpFWnBiR1VvWEc0Z0lDQWdjbVZ6T2lCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwTEZ4dUlDQWdJRzlpYWpvZ1NWVndiRzloWkVacGJHVlBjSFJwYjI1Y2JpazZJR0Z1ZVNCN1hHNGdJQ0FnYVdZZ0tISmxjeTV6ZEdGMGRYTkRiMlJsSUQwOVBTQXlNREFwSUh0Y2JseHVJQ0FnSUNBZ0lDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUxtVnVaQ2h2WW1vcE8xeHVYRzRnSUNBZ0lDQWdJQzh2SU9XR2hlV3V1ZVM0cmVXUHIraUR2ZVd0bU9XY3FPV3Z2T2lIdE9TOXYrVytsMHBoZG1GVFkzSnBjSFRsdklMbHVMam5tb1RsclpmbnJLWmNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ5WlhNdVpHRjBZU0E5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGN5NWtZWFJoSUQwZ2FuTnZibE4xY0dWeWMyVjBLSEpsY3k1a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WekxtUmhkR0VnUFNCS1UwOU9MbkJoY25ObEtISmxjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWh2WW1vdVkyRjBZMmhGY25KdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaWEp5YjNKSVlXNWtiR1Z5TG14dloybGpSWEp5YjNJb2IySnFMQ0J5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1c2IyZHBibFJ5YVdkblpYSWhLSEpsY3k1a1lYUmhLU0FtSmlCdlltb3VjbVZNYjJkcGJrTnZkVzUwSUNFOVBTQjFibVJsWm1sdVpXUWdKaVlnYjJKcUxuSmxURzluYVc1RGIzVnVkQ0E4SUdOdmJtWnBaeTV5WlV4dloybHVUR2x0YVhRaEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSGxwTEhtbFlqdnZJemt1SlRwaDQzb3I1WG1yS0htbGJEa3VJM290b1hvdjRmcGhZM252YTVjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG1SbGJGTmxjM05wYjI0b0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMjl1Wm1sbkxuTjFZMk5sYzNOVWNtbG5aMlZ5S0hKbGN5NWtZWFJoS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVvNmw1WStqNkwrVTVadWU1b2lRNVlxZjU2Q0JYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZoYkVSaGRHRTZJSE4wY21sdVp5QjhJRWxCYm5sUFltcGxZM1FnZkNCQmNuSmhlVUoxWm1abGNpQTlJRndpWENJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxuTjFZMk5sYzNORVlYUmhJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFlXeEVZWFJoSUQwZ1kyOXVabWxuTG5OMVkyTmxjM05FWVhSaEtISmxjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WldGc1JHRjBZU0E5SUhKbGN5NWtZWFJoTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLRndpUm5WdVkzUnBiMjRnYzNWalkyVnpjMFJoZEdFZ2IyTmpkWElnWlhKeWIzSTZJRndpSUNzZ1pTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2IySnFMbk4xWTJObGMzTWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hKbFlXeEVZWFJoS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxZV3hFWVhSaE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNW82bDVZK2o2TCtVNVp1ZTVhU3g2TFNsNTZDQlhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QjdJSFI1Y0dVNklDZHNiMmRwWXkxbGNuSnZjaWNzSUhKbGN5QjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJvZEhSd2MraS9sT1dibnVlS3R1YUFnZWVnZ2VtZG5qSXdNRnh1SUNBZ0lDQWdJQ0IwYUhKdmR5QjdJSFI1Y0dVNklDZG9kSFJ3TFdWeWNtOXlKeXdnY21WeklIMWNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQnlaWE53YjI1elpVWnZjbEpsY1hWbGMzUXNYRzRnSUNBZ2NtVnpjRzl1YzJWR2IzSlZjR3h2WVdSR2FXeGxYRzU5TzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RIYW5kbGVyXCIpO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xudmFyIGNoZWNrU2Vzc2lvblByb21pc2UgPSBudWxsO1xuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3eC5jaGVja1Nlc3Npb24oKVwiKTtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgd3guY2hlY2tTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfY2hlY2tTZXNzaW9uJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tTZXNzaW9uUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSB7XG4gICAgaWYgKCFzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKSB7XG4gICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrTG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgaWYgKGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSkge1xuICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG52YXIgbG9naW5Qcm9taXNlID0gbnVsbDtcbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbG9naW5Qcm9taXNlO1xufVxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3d4LmxvZ2luJyk7XG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUyU2Vzc2lvbihyZXMuY29kZSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VbY29kZSDojrflj5blpLHotKVdXCIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfbG9naW4nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogcmVzLmVyck1zZyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb24pIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSxcbiAgICAgICAgZGF0YTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjb2RlMlNlc3Npb24oY29kZSkge1xuICAgIHZhciBkYXRhO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSB8fCB7fTtcbiAgICB9XG4gICAgZGF0YVtjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uY29kZU5hbWVdID0gY29kZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gucmVxdWVzdCh7XG4gICAgICAgICAgICB1cmw6IHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5mb3JtYXQoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCksXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgICAgICAgaGVhZGVyOiB0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicgPyBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcigpIDogY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ucmVwb3J0LCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZGVsU2Vzc2lvbigpIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSAnJztcbiAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXG4gICAgfSk7XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IEluZmluaXR5O1xuICAgICAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1haW4ocmVsYXRlZFJlcXVlc3RPYmopIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgcmV0cnkgPSAhcmVsYXRlZFJlcXVlc3RPYmpcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFpbigpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KTsgfVxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0XzEuZGVmYXVsdChyZWxhdGVkUmVxdWVzdE9iaikudGhlbihyZWxhdGVkUmVxdWVzdE9iai5fcmVzb2x2ZSkuY2F0Y2gocmVsYXRlZFJlcXVlc3RPYmouX3JlamVjdCk7IH07XG4gICAgICAgIHJldHVybiBjaGVja0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA/IFByb21pc2UucmVzb2x2ZSgpIDogY2hlY2tTZXNzaW9uKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH0pO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBtYWluOiBtYWluLFxuICAgIHNldFNlc3Npb246IHNldFNlc3Npb24sXG4gICAgZGVsU2Vzc2lvbjogZGVsU2Vzc2lvblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVnpjMmx2YmsxaGJtRm5aWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzTmxjM05wYjI1TllXNWhaMlZ5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTUVOQlFXOURPMEZCUTNCRExEQkRRVUZ2UXp0QlFVTndReXdyUTBGQmVVTTdRVUZEZWtNc2RVUkJRV2xFTzBGQlEycEVMRzFFUVVFMlF6dEJRVU0zUXl3eVEwRkJjVU03UVVGRGNrTXNNRU5CUVc5RE8wRkJTWEJETEVsQlFVa3NiVUpCUVcxQ0xFZEJRVkVzU1VGQlNTeERRVUZETzBGQlJYQkRMRk5CUVZNc1dVRkJXVHRKUVVOcVFpeEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVU3VVVGRGRFSXNiVUpCUVcxQ0xFZEJRVWNzU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUVHRaUVVNNVF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVOQlFVTTdXVUZEYWtNc1NVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOdVF5eEZRVUZGTEVOQlFVTXNXVUZCV1N4RFFVRkRPMmRDUVVOYUxFOUJRVTg3YjBKQlJVZ3NUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenRuUWtGRGNrSXNRMEZCUXp0blFrRkRSQ3hKUVVGSkxFVkJRVW83YjBKQlJVa3NWVUZCVlN4RlFVRkZMRU5CUVVNN2IwSkJRMklzVDBGQlR5eFBRVUZQTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNN2QwSkJRMnhDTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN2IwSkJRM0pDTEVOQlFVTXNSVUZCUlN4VlFVRkRMRWRCUVZFN2QwSkJRMUlzVDBGQlR5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRM1pDTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOUUxFTkJRVU03WjBKQlEwUXNVVUZCVVR0dlFrRkRTaXhKUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8yOUNRVU5xUXl3d1FrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzUzBGQlN5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVNelJDeERRVUZETzJGQlEwb3NRMEZCUXl4RFFVRkJPMUZCUTA0c1EwRkJReXhEUVVGRExFTkJRVUU3UzBGRFREdEpRVU5FTEU5QlFVOHNiVUpCUVcxQ0xFTkJRVU03UVVGREwwSXNRMEZCUXp0QlFVZEVMRk5CUVZNc2MwSkJRWE5DTzBsQlF6TkNMRWxCUVVrc1EwRkJReXhuUWtGQlRTeERRVUZETEU5QlFVOHNSVUZCUlR0UlFVVnFRaXhQUVVGUExFbEJRVWtzUTBGQlFUdExRVU5rTzBsQlEwUXNTVUZCU1N4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SlFVRkpMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhoUVVGaExFVkJRVVU3VVVGRmVrVXNWVUZCVlN4RlFVRkZMRU5CUVVNN1VVRkRZaXhQUVVGUExFbEJRVWtzUTBGQlFUdExRVU5rTzBsQlEwUXNUMEZCVHl4TFFVRkxMRU5CUVVFN1FVRkRhRUlzUTBGQlF6dEJRVVZFTEZOQlFWTXNWVUZCVlR0SlFVTm1MRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhKUVVGSkxITkNRVUZ6UWl4RlFVRkZMRVZCUVVVN1dVRkZNVUlzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTTdXVUZEYUVNc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdaMEpCUTJ4Q0xFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEY2tJc1EwRkJReXhGUVVGRkxGVkJRVU1zUjBGQlVUdG5Ra0ZEVWl4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU4yUWl4RFFVRkRMRU5CUVVNc1EwRkJRVHRUUVVOTU8yRkJRVTA3V1VGRlNDeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMU5CUTNCQ08wbEJRMHdzUTBGQlF5eERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUjBRc1NVRkJTU3haUVVGWkxFZEJRVkVzU1VGQlNTeERRVUZETzBGQlJUZENMRk5CUVZNc1QwRkJUenRKUVVOYUxFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVTdVVUZEWml4WlFVRlpMRWRCUVVjc1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0WlFVTjJReXhMUVVGTExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdaMEpCUTFRc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF6dG5Ra0ZEY0VJc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dFpRVU55UWl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVlVGQlF5eEhRVUZITzJkQ1FVTlVMRmxCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU03WjBKQlEzQkNMR2xDUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdaMEpCUTJZc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZGtJc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFVDeERRVUZETEVOQlFVTXNRMEZCUVR0TFFVTk1PMGxCUTBRc1QwRkJUeXhaUVVGWkxFTkJRVU03UVVGRGVFSXNRMEZCUXp0QlFVVkVMRk5CUVZNc1MwRkJTenRKUVVOV0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUVHRSUVVNdlFpeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRM2hDTEVsQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZEYmtNc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF6dFpRVU5NTEU5QlFVOHNXVUZCUXl4SFFVRkhPMmRDUVVOUUxFbEJRVWtzUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlR0dlFrRkRWaXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGVFSXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenR2UWtGRGNrSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVU1zUjBGQlJ6dDNRa0ZEVkN4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZEZGtJc1EwRkJReXhEUVVGRExFTkJRVUU3YVVKQlEwdzdjVUpCUVUwN2IwSkJRMGdzVDBGQlR5eE5RVUZOTEVOQlFVTXNSVUZCUXl4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlJTeHJRa0ZCYTBJc1JVRkJReXhEUVVGRExFTkJRVU03YVVKQlEycEZPMWxCUTB3c1EwRkJRenRaUVVORUxGRkJRVkU3WjBKQlEwb3NTVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0blFrRkRha01zTUVKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRjRVFzUTBGQlF6dFpRVU5FTEVsQlFVa3NXVUZCUXl4SFFVRkhPMmRDUVVOS0xFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVTXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNVVFzUTBGQlF6dFRRVU5LTEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNWVUZCVlN4RFFVRkRMRTlCUVdVN1NVRkRMMElzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRE8wbEJSWHBDTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVkQlFVY3NTVUZCU1N4RFFVRkRPMGxCUldoRExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFGQlEzSkVMR2RDUVVGTkxFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF6dFJRVU4yUlN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTzFsQlF6VkNMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNN1UwRkRja01zUTBGQlF5eERRVUZCTzB0QlEwdzdTVUZEUkN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xRkJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1YwRkJjVUk3VVVGRGFrTXNTVUZCU1N4RlFVRkZMR2RDUVVGTkxFTkJRVU1zVDBGQlR6dExRVU4yUWl4RFFVRkRMRU5CUVVNN1FVRkRVQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNTVUZCV1R0SlFVTTVRaXhKUVVGSkxFbEJRVk1zUTBGQlF6dEpRVVZrTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTJwRUxFbEJRVWtzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dExRVU4wUXp0VFFVRk5PMUZCUTBnc1NVRkJTU3hIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03UzBGRE1VTTdTVUZEUkN4SlFVRkpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNVVUZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJSVFZETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4SlFVRkpMRXRCUVVzc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMUZCUTJwRExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEVUN4SFFVRkhMRVZCUVVVc2QwSkJRV01zUTBGQlF5eE5RVUZOTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETzFsQlEzQkVMRWxCUVVrc1RVRkJRVHRaUVVOS0xFMUJRVTBzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFbEJRVWtzUzBGQlN6dFpRVU0xUXl4TlFVRk5MRVZCUVVVc1QwRkJUeXhuUWtGQlRTeERRVUZETEZOQlFWTXNTMEZCU3l4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExHZENRVUZOTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVFc1EwRkJReXhEUVVGRExHZENRVUZOTEVOQlFVTXNVMEZCVXp0WlFVTnlSaXhQUVVGUExFVkJRVkFzVlVGQlVTeEhRVUZ2UXp0blFrRkRlRU1zU1VGQlNTeEhRVUZITEVOQlFVTXNWVUZCVlN4TFFVRkxMRWRCUVVjc1JVRkJSVHR2UWtGRmVFSXNTVUZCU1N4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVWQlFVVTdkMEpCUXpkQ0xFbEJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03ZDBKQlF5OUNMREJDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGQk8zRkNRVU51UlR0dlFrRkZSQ3hKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdiMEpCUTFnc1NVRkJTVHQzUWtGRFFTeERRVUZETEVkQlFVY3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenR4UWtGRE9VTTdiMEpCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3Y1VKQlExZzdiMEpCUlVRc1NVRkJTU3hEUVVGRExFVkJRVVU3ZDBKQlEwZ3NaMEpCUVUwc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZETzNkQ1FVVnVRaXhuUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhIUVVGSExFbEJRVWtzUTBGQlF6dDNRa0ZGYUVNc1NVRkJTU3huUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhKUVVGSkxHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVU3TkVKQlEzSkVMR2RDUVVGTkxFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF6czBRa0ZEZGtVc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF6dG5RMEZEVml4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJN1owTkJRelZDTEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTTdOa0pCUTNKRExFTkJRVU1zUTBGQlFUdDVRa0ZEVER0M1FrRkRSQ3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZET3pSQ1FVTldMRWRCUVVjc1JVRkJSU3huUWtGQlRTeERRVUZETEZkQlFWYzdORUpCUTNaQ0xFbEJRVWtzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4N2VVSkJRM1pDTEVOQlFVTXNRMEZCUXp0M1FrRkRTQ3hQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzNGQ1FVTndRanQ1UWtGQlRUdDNRa0ZEU0N4UFFVRlBMRTFCUVUwc1EwRkJReXh6UWtGQldTeERRVUZETEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8zRkNRVU5vUkR0cFFrRkRTanR4UWtGQlRUdHZRa0ZEU0N4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJReXhEUVVGRExFTkJRVU03YVVKQlEzUkVPMWxCUTB3c1EwRkJRenRaUVVORUxGRkJRVkU3V1VGRFVpeERRVUZETzFsQlEwUXNTVUZCU1N4RlFVRkZPMmRDUVVOR0xFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVTXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hUUVVGVExFVkJRVVVzVDBGQlR5eEZRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjJSQ3hEUVVGRE8xTkJRMG9zUTBGQlF5eERRVUZCTzBsQlEwNHNRMEZCUXl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSMFFzVTBGQlV5eFZRVUZWTzBsQlEyWXNaMEpCUVUwc1EwRkJReXhQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlEzQkNMRVZCUVVVc1EwRkJReXhoUVVGaExFTkJRVU03VVVGRFlpeEhRVUZITEVWQlFVVXNaMEpCUVUwc1EwRkJReXhYUVVGeFFqdExRVU53UXl4RFFVRkRMRU5CUVVNN1NVRkRTQ3hKUVVGSkxHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4blFrRkJaMElzUlVGQlJUdFJRVU55UkN4blFrRkJUU3hEUVVGRExHRkJRV0VzUjBGQlJ5eFJRVUZSTEVOQlFVTTdVVUZEYUVNc1JVRkJSU3hEUVVGRExHRkJRV0VzUTBGQlF6dFpRVU5pTEVkQlFVY3NSVUZCUlN4blFrRkJUU3hEUVVGRExHZENRVUZuUWp0VFFVTXZRaXhEUVVGRExFTkJRVUU3UzBGRFREdEJRVU5NTEVOQlFVTTdRVUZGUkN4VFFVRlRMRWxCUVVrc1EwRkJReXhwUWtGQmMwUTdTVUZEYUVVc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMUZCUXk5Q0xFbEJRVWtzUzBGQlN5eEhRVUZITEVOQlFVTXNhVUpCUVdsQ08xbEJSVEZDTEVOQlFVTXNRMEZCUXl4alFVRk5MRTlCUVVFc1NVRkJTU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQmJFTXNRMEZCYTBNN1dVRkZNVU1zUTBGQlF5eERRVUZETEdOQlFVMHNUMEZCUVN4cFFrRkJUeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQk5VWXNRMEZCTkVZc1EwRkJRenRSUVVONlJ5eFBRVUZQTEZWQlFWVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVOeVFpeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVFN1VVRkRlRVVzUTBGQlF5eEZRVUZGTEZWQlFVTXNSVUZCWjBJN1owSkJRV1lzWjBKQlFVc3NSVUZCUlN4dlFrRkJUenRaUVVObUxITkNRVUZaTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdXVUZETlVNc1QwRkJUeXhOUVVGTkxFTkJRVU1zUlVGQlF5eExRVUZMTEU5QlFVRXNSVUZCUlN4UFFVRlBMRk5CUVVFc1JVRkJReXhEUVVGRExFTkJRVU03VVVGRGNFTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRMG9zVDBGQlR5eFBRVUZQTEVWQlFVVXNRMEZCUXp0UlFVTnlRaXhEUVVGRExFVkJRVVVzVlVGQlF5eEZRVUZuUWp0blFrRkJaaXhuUWtGQlN5eEZRVUZGTEc5Q1FVRlBPMWxCUTJZc2MwSkJRVmtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFpRVU0xUXl4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRExFdEJRVXNzVDBGQlFTeEZRVUZGTEU5QlFVOHNVMEZCUVN4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1F5eERRVUZETEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1NVRkJTU3hOUVVGQk8wbEJRMG9zVlVGQlZTeFpRVUZCTzBsQlExWXNWVUZCVlN4WlFVRkJPME5CUTJJc1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J6ZEdGMGRYTWdabkp2YlNBbkxpNHZjM1J2Y21VdmMzUmhkSFZ6SjF4dWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ1pYSnliM0pJWVc1a2JHVnlJR1p5YjIwZ0p5NHZaWEp5YjNKSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWElnWm5KdmJTQW5MaTlrZFhKaGRHbHZibEpsY0c5eWRHVnlKMXh1YVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dmNtVnhkV1Z6ZEVoaGJtUnNaWEluWEc1cGJYQnZjblFnYkc5aFpHbHVaeUJtY205dElDY3VMaTkxZEdsc0wyeHZZV1JwYm1jblhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZENCbWNtOXRJQ2N1TGk5aGNHa3ZjbVZ4ZFdWemRDZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTlwYm5SbGNtWmhZMlZjSWp0Y2JseHVMeW9nNTVTZjVaRzk1WkdvNXB5ZjVZYUY1WStxNVlHYTVMaUE1cXloNTVxRVkyaGxZMnRUWlhOemFXOXVJQ292WEc1c1pYUWdZMmhsWTJ0VFpYTnphVzl1VUhKdmJXbHpaVG9nWVc1NUlEMGdiblZzYkR0Y2JseHVablZ1WTNScGIyNGdZMmhsWTJ0VFpYTnphVzl1S0NrZ2UxeHVJQ0FnSUdsbUlDZ2hZMmhsWTJ0VFpYTnphVzl1VUhKdmJXbHpaU2tnZTF4dUlDQWdJQ0FnSUNCamFHVmphMU5sYzNOcGIyNVFjbTl0YVhObElEMGdibVYzSUZCeWIyMXBjMlVvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVzYjJjb1hDSjNlQzVqYUdWamExTmxjM05wYjI0b0tWd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhOMFlYSjBJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IzZUM1amFHVmphMU5sYzNOcGIyNG9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4xWTJObGMzTW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2VadStXOWxlYUFnZWFjaWVhVmlPKzhqT1M0bE9XY3FPYWNyT2VVbitXUnZlV1JxT2FjbitXR2hlYVhvT21odStXR2plYWpnT21xak9TNmhseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GcGJDZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1NW03NWIyVjVvQ0I2TCtINXB5ZlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JsYkZObGMzTnBiMjRvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHUnZURzluYVc0b0tTNTBhR1Z1S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwc0lDaHlaWE02SUdGdWVTazlQbnRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjIxd2JHVjBaU2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1pXNWtJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSXVjbVZ3YjNKMEtDZDNlRjlqYUdWamExTmxjM05wYjI0bkxDQnpkR0Z5ZEN3Z1pXNWtLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1kyaGxZMnRUWlhOemFXOXVVSEp2YldselpUdGNibjFjYmx4dUx5b2c1WWlrNXBhdGMyVnpjMmx2YnVhWXIrV1FwdVM0dXVlcHV1YUlsdVczc3VpL2grYWNueUFxTDF4dVpuVnVZM1JwYjI0Z2FYTlRaWE56YVc5dVJYaHdhWEpsVDNKRmJYQjBlU2dwSUh0Y2JpQWdJQ0JwWmlBb0lYTjBZWFIxY3k1elpYTnphVzl1S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PZThrK1d0bU9TNHJlYXlvZWFjaVhObGMzTnBiMjVjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdWY2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU0FtSmlCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tTQStJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZWl1dnVlOXJ1YWNyT1djc0hObGMzTnBiMjdudkpQbHJaam1sN2JwbDdUdnZJemt1SlRudkpQbHJaam1sN2JwbDdUbHQ3TGxpTEJjYmlBZ0lDQWdJQ0FnWkdWc1UyVnpjMmx2YmlncE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWm1Gc2MyVmNibjFjYmx4dVpuVnVZM1JwYjI0Z1kyaGxZMnRNYjJkcGJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCcFppQW9hWE5UWlhOemFXOXVSWGh3YVhKbFQzSkZiWEIwZVNncEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG1zcUhtbklubm1idnBtWWJtZ0lIdnZJemt1STNwbklEb3BvSGxobzFqYUdWamExTmxjM05wYjI1Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym1acFp5NWtiMDV2ZEVOb1pXTnJVMlZ6YzJsdmJpQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdaRzlNYjJkcGJpZ3BMblJvWlc0b0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMQ0FvY21Wek9pQmhibmtwUFQ1N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9lOGsrV3RtT1M0cmVhY2lYTmxjM05wYjI3a3VKVG1uS3JvdjRmbW5KOWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dWZWeHVYRzR2S2lEbm1idnBtWWJtdFlIbnFJdm5tb1J3Y205dGFYTmxJQ292WEc1c1pYUWdiRzluYVc1UWNtOXRhWE5sT2lCaGJua2dQU0J1ZFd4c08xeHVYRzVtZFc1amRHbHZiaUJrYjB4dloybHVLQ2tnZTF4dUlDQWdJR2xtSUNnaGJHOW5hVzVRY205dGFYTmxLU0I3WEc0Z0lDQWdJQ0FnSUd4dloybHVVSEp2YldselpTQTlJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUd4dloybHVLQ2t1ZEdobGJpZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOW5hVzVRY205dGFYTmxJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNrdVkyRjBZMmdvS0hKbGN5a2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4dloybHVVSEp2YldselpTQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWhaR2x1Wnk1b2FXUmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaHlaWE1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnNiMmRwYmxCeWIyMXBjMlU3WEc1OVhHNWNibVoxYm1OMGFXOXVJR3h2WjJsdUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTnZiR1V1Ykc5bktDZDNlQzVzYjJkcGJpY3BPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpkR0Z5ZENBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0IzZUM1c2IyZHBiaWg3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkV05qWlhOektISmxjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHlaWE11WTI5a1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyUmxNbE5sYzNOcGIyNG9jbVZ6TG1OdlpHVXBMblJvWlc0b0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTa3VZMkYwWTJnb0tISmxjeWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvZTNScGRHeGxPaUJjSXVlWnUrVzlsZVdrc2VpMHBWd2lMQ0JjSW1OdmJuUmxiblJjSWpvZ1hDTG9yN2ZucUkzbGtJN3BoNDNvcjVWYlkyOWtaU0RvanJmbGo1YmxwTEhvdEtWZFhDSjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1pXNWtJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1eVpYQnZjblFvSjNkNFgyeHZaMmx1Snl3Z2MzUmhjblFzSUdWdVpDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1GcGJDaHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSHQwYVhSc1pUb2dYQ0xubWJ2bHZaWGxwTEhvdEtWY0lpd2dYQ0pqYjI1MFpXNTBYQ0k2SUhKbGN5NWxjbkpOYzJkOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCelpYUlRaWE56YVc5dUtITmxjM05wYjI0NklITjBjbWx1WnlrZ2UxeHVJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVJRDBnYzJWemMybHZianRjYmlBZ0lDQXZMeURtamFMbG01N21uYVhubW9SelpYTnphVzl1Nzd5TTVMaU42WnlBNkthQjVZYU5ZMmhsWTJ0VFpYTnphVzl1WEc0Z0lDQWdZMjl1Wm1sbkxtUnZUbTkwUTJobFkydFRaWE56YVc5dUlEMGdkSEoxWlR0Y2JpQWdJQ0F2THlEbHBvTG1ucHptbklub3JyN252YTdtbkt6bG5MQnpaWE56YVc5dTZMK0g1cHlmNXBlMjZaZTBYRzRnSUNBZ2FXWWdLR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpTQW1KaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTa2dlMXh1SUNBZ0lDQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BJQ3NnWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WVWFXMWxPMXh1SUNBZ0lDQWdJQ0IzZUM1elpYUlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUd0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaE9pQlRkSEpwYm1jb2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVXBYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmVnh1SUNBZ0lIZDRMbk5sZEZOMGIzSmhaMlVvZTF4dUlDQWdJQ0FnSUNCclpYazZJR052Ym1acFp5NXpaWE56YVc5dVRtRnRaU0JoY3lCemRISnBibWNzWEc0Z0lDQWdJQ0FnSUdSaGRHRTZJSE4wWVhSMWN5NXpaWE56YVc5dVhHNGdJQ0FnZlNrN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdOdlpHVXlVMlZ6YzJsdmJpaGpiMlJsT2lCemRISnBibWNwSUh0Y2JpQWdJQ0JzWlhRZ1pHRjBZVG9nWVc1NU8xeHVJQ0FnSUM4dklHTnZaR1ZVYjFObGMzTnBiMjR1WkdGMFllYVVyK2FNZ2VXSHZlYVZzRnh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1WkdGMFlTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFZ1BTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVrWVhSaEtDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1pHRjBZU0E5SUdOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxtUmhkR0VnZkh3Z2UzMDdYRzRnSUNBZ2ZWeHVJQ0FnSUdSaGRHRmJZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1WTI5a1pVNWhiV1VoWFNBOUlHTnZaR1U3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnNaWFFnYzNSaGNuUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ2QzZ3VjbVZ4ZFdWemRDaDdYRzRnSUNBZ0lDQWdJQ0FnSUNCMWNtdzZJSEpsY1hWbGMzUklZVzVrYkdWeUxtWnZjbTFoZENoamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNTFjbXdwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzFsZEdodlpEb2dZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1YldWMGFHOWtJSHg4SUNkSFJWUW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ2FHVmhaR1Z5T2lCMGVYQmxiMllnWTI5dVptbG5Mbk5sZEVobFlXUmxjaUE5UFQwZ0oyWjFibU4wYVc5dUp5QS9JR052Ym1acFp5NXpaWFJJWldGa1pYSW9LVG9nWTI5dVptbG5Mbk5sZEVobFlXUmxjaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lITjFZMk5sYzNNb2NtVnpPaUIzZUM1U1pYRjFaWE4wVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hKbGN5NXpkR0YwZFhORGIyUmxJRDA5UFNBeU1EQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc2SUNYNXBlMjVMaUs1b3FsWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1eVpYQnZjblFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQmxibVFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdWNtVndiM0owS0dOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxuSmxjRzl5ZEN3Z2MzUmhjblFzSUdWdVpDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCeklEMGdYQ0pjSWp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhNZ1BTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTV6ZFdOalpYTnpLSEpsY3k1a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tITXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4wWVhSMWN5NXpaWE56YVc5dUlEMGdjenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9hTm91V2JudWFkcGVlYWhITmxjM05wYjI3dnZJemt1STNwbklEb3BvSGxobzFqYUdWamExTmxjM05wYjI1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJtWnBaeTVrYjA1dmRFTm9aV05yVTJWemMybHZiaUE5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURscG9MbW5wem1uSW5vcnI3bnZhN21uS3psbkxCelpYTnphVzl1NkwrSDVweWY1cGUyNlplMFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbElDWW1JR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21VZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LU0FySUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ1UzUnlhVzVuS0hOMFlYUjFjeTV6WlhOemFXOXVSWGh3YVhKbEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IzZUM1elpYUlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JyWlhrNklHTnZibVpwWnk1elpYTnphVzl1VG1GdFpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaE9pQnpkR0YwZFhNdWMyVnpjMmx2Ymx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2hsY25KdmNraGhibVJzWlhJdVoyVjBSWEp5YjNKTmMyY29jbVZ6S1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSHQwYVhSc1pUb2dYQ0xubWJ2bHZaWGxwTEhvdEtWY0lpd2dYQ0pqYjI1MFpXNTBYQ0k2SUZ3aTZLKzM1NmlONVpDTzZZZU42SytWWENKOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkRvZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9lM1JwZEd4bE9pQmNJdWVadStXOWxlV2tzZWkwcFZ3aUxDQmNJbU52Ym5SbGJuUmNJam9nWENMb3I3Zm5xSTNsa0k3cGg0M29yNVZjSW4wcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgwcFhHNTlYRzVjYmk4cUlPYTRoZWVwdW5ObGMzTnBiMjRnS2k5Y2JtWjFibU4wYVc5dUlHUmxiRk5sYzNOcGIyNG9LU0I3WEc0Z0lDQWdjM1JoZEhWekxuTmxjM05wYjI0Z1BTQW5KenRjYmlBZ0lDQjNlQzV5WlcxdmRtVlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdhMlY1T2lCamIyNW1hV2N1YzJWemMybHZiazVoYldVZ1lYTWdjM1J5YVc1blhHNGdJQ0FnZlNrN1hHNGdJQ0FnYVdZZ0tHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlNBbUppQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVNrZ2UxeHVJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU0E5SUVsdVptbHVhWFI1TzF4dUlDQWdJQ0FnSUNCM2VDNXlaVzF2ZG1WVGRHOXlZV2RsS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3RsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGxjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJRzFoYVc0b2NtVnNZWFJsWkZKbGNYVmxjM1JQWW1vL09pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxkSEo1SUQwZ0lYSmxiR0YwWldSU1pYRjFaWE4wVDJKcVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHptc3FIbW5JbmxoYlBvZ1pUbm1vVG9yN2Ztc1lMdnZJenBoNDNvcjVYbGpiUG9zSVBubEtqb2g2cm91cXRjYmlBZ0lDQWdJQ0FnSUNBZ0lEOGdLQ2tnUFQ0Z2JXRnBiaWdwTG5Sb1pXNG9jbVZ6YjJ4MlpTa3VZMkYwWTJnb2NtVnFaV04wS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNWFhQzVwNmM1cHlKNVlXejZJR1U1NXFFNksrMzVyR0M3N3lNNlllTjZLK1Y1WTJ6NkxDRDU1U281b21BNVlXejZJR1U1NXFFNksrMzVyR0NYRzRnSUNBZ0lDQWdJQ0FnSUNBNklDZ3BJRDArSUhKbGNYVmxjM1FvY21Wc1lYUmxaRkpsY1hWbGMzUlBZbW9wTG5Sb1pXNG9jbVZzWVhSbFpGSmxjWFZsYzNSUFltb3VYM0psYzI5c2RtVXBMbU5oZEdOb0tISmxiR0YwWldSU1pYRjFaWE4wVDJKcUxsOXlaV3BsWTNRcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyaGxZMnRNYjJkcGJpZ3BMblJvWlc0b0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHTnZibVpwWnk1a2IwNXZkRU5vWldOclUyVnpjMmx2YmlBL0lGQnliMjFwYzJVdWNtVnpiMngyWlNncElEb2dZMmhsWTJ0VFpYTnphVzl1S0NsY2JpQWdJQ0FnSUNBZ2ZTd2dLSHQwYVhSc1pTd2dZMjl1ZEdWdWRIMHBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1Z5Y205eVNHRnVaR3hsY2k1a2IwVnljbTl5S0hScGRHeGxMQ0JqYjI1MFpXNTBMQ0J5WlhSeWVTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSHQwYVhSc1pTd2dZMjl1ZEdWdWRIMHBPMXh1SUNBZ0lDQWdJQ0I5S1M1MGFHVnVLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUgwc0lDaDdkR2wwYkdVc0lHTnZiblJsYm5SOUtUMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnljbTl5U0dGdVpHeGxjaTVrYjBWeWNtOXlLSFJwZEd4bExDQmpiMjUwWlc1MExDQnlaWFJ5ZVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBhWFJzWlN3Z1kyOXVkR1Z1ZEgwcE8xeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lIMHBYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2JpQWdJQ0J0WVdsdUxGeHVJQ0FnSUhObGRGTmxjM05wYjI0c1hHNGdJQ0FnWkdWc1UyVnpjMmx2Ymx4dWZWeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICBzZXNzaW9uTmFtZTogXCJzZXNzaW9uXCIsXG4gICAgbG9naW5UcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGNvZGVUb1Nlc3Npb246IHtcbiAgICAgICAgdXJsOiBcIlwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9LFxuICAgIHN1Y2Nlc3NUcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgc2V0SGVhZGVyOiB7fSxcbiAgICB1cmxQZXJmaXg6IFwiXCIsXG4gICAgZG9Ob3RDaGVja1Nlc3Npb246IGZhbHNlLFxuICAgIGVycm9yVGl0bGU6IFwi5pON5L2c5aSx6LSlXCIsXG4gICAgZXJyb3JDb250ZW50OiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICBlcnJvclJldHJ5QnRuOiBmYWxzZSxcbiAgICByZUxvZ2luTGltaXQ6IDMsXG4gICAgZXJyb3JDYWxsYmFjazogbnVsbCxcbiAgICByZXBvcnRDR0k6IGZhbHNlLFxuICAgIG1vY2tKc29uOiBmYWxzZSxcbiAgICBnbG9iYWxEYXRhOiBmYWxzZSxcbiAgICBzZXNzaW9uRXhwaXJlS2V5OiBcInNlc3Npb25FeHBpcmVLZXlcIlxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRDb25maWc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMMk52Ym1acFp5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVWQkxFbEJRVTBzWVVGQllTeEhRVUZuUWp0SlFVTXZRaXhYUVVGWExFVkJRVVVzVTBGQlV6dEpRVU4wUWl4WlFVRlpPMUZCUTFJc1QwRkJUeXhMUVVGTExFTkJRVUU3U1VGRGFFSXNRMEZCUXp0SlFVTkVMR0ZCUVdFc1JVRkJSVHRSUVVOWUxFZEJRVWNzUlVGQlJTeEZRVUZGTzFGQlExQXNUMEZCVHl4RlFVRkZMR05CUVUwc1EwRkJRenRMUVVOdVFqdEpRVU5FTEdOQlFXTTdVVUZEVml4UFFVRlBMRWxCUVVrc1EwRkJRVHRKUVVObUxFTkJRVU03U1VGRFJDeFRRVUZUTEVWQlFVVXNSVUZCUlR0SlFVTmlMRk5CUVZNc1JVRkJSU3hGUVVGRk8wbEJRMklzYVVKQlFXbENMRVZCUVVVc1MwRkJTenRKUVVONFFpeFZRVUZWTEVWQlFVVXNUVUZCVFR0SlFVTnNRaXhaUVVGWkxFVkJRVm9zVlVGQllTeEhRVUZSTzFGQlEycENMRTlCUVU4c1IwRkJSeXhEUVVGQk8wbEJRMlFzUTBGQlF6dEpRVU5FTEdGQlFXRXNSVUZCUlN4TFFVRkxPMGxCUTNCQ0xGbEJRVmtzUlVGQlJTeERRVUZETzBsQlEyWXNZVUZCWVN4RlFVRkZMRWxCUVVrN1NVRkRia0lzVTBGQlV5eEZRVUZGTEV0QlFVczdTVUZEYUVJc1VVRkJVU3hGUVVGRkxFdEJRVXM3U1VGRFppeFZRVUZWTEVWQlFVVXNTMEZCU3p0SlFVVnFRaXhuUWtGQlowSXNSVUZCUlN4clFrRkJhMEk3UTBGRGRrTXNRMEZCUXp0QlFVVkdMR3RDUVVGbExHRkJRV0VzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJRWxKYm1sMFQzQjBhVzl1SUgwZ1puSnZiU0FuTGk0dmFXNTBaWEptWVdObEoxeHVYRzVqYjI1emRDQmtaV1poZFd4MFEyOXVabWxuT2lCSlNXNXBkRTl3ZEdsdmJpQTlJSHRjYmlBZ0lDQnpaWE56YVc5dVRtRnRaVG9nWENKelpYTnphVzl1WENJc1hHNGdJQ0FnYkc5bmFXNVVjbWxuWjJWeUtDa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJWY2JpQWdJQ0I5TEZ4dUlDQWdJR052WkdWVWIxTmxjM05wYjI0NklIdGNiaUFnSUNBZ0lDQWdkWEpzT2lCY0lsd2lMRnh1SUNBZ0lDQWdJQ0J6ZFdOalpYTnpPaUFvS1QwK0lIdDlYRzRnSUNBZ2ZTeGNiaUFnSUNCemRXTmpaWE56VkhKcFoyZGxjaWdwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVmNiaUFnSUNCOUxGeHVJQ0FnSUhObGRFaGxZV1JsY2pvZ2UzMHNYRzRnSUNBZ2RYSnNVR1Z5Wm1sNE9pQmNJbHdpTEZ4dUlDQWdJR1J2VG05MFEyaGxZMnRUWlhOemFXOXVPaUJtWVd4elpTeGNiaUFnSUNCbGNuSnZjbFJwZEd4bE9pQmNJdWFUamVTOW5PV2tzZWkwcFZ3aUxGeHVJQ0FnSUdWeWNtOXlRMjl1ZEdWdWRDaHlaWE02SUdGdWVTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6WEc0Z0lDQWdmU3hjYmlBZ0lDQmxjbkp2Y2xKbGRISjVRblJ1T2lCbVlXeHpaU3hjYmlBZ0lDQnlaVXh2WjJsdVRHbHRhWFE2SURNc1hHNGdJQ0FnWlhKeWIzSkRZV3hzWW1GamF6b2diblZzYkN4Y2JpQWdJQ0J5WlhCdmNuUkRSMGs2SUdaaGJITmxMRnh1SUNBZ0lHMXZZMnRLYzI5dU9pQm1ZV3h6WlN4Y2JpQWdJQ0JuYkc5aVlXeEVZWFJoT2lCbVlXeHpaU3hjYmlBZ0lDQXZMeUJ6WlhOemFXOXU1WnlvNXB5czVaeXc1N3lUNWEyWTU1cUVhMlY1WEc0Z0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlV0bGVUb2dYQ0p6WlhOemFXOXVSWGh3YVhKbFMyVjVYQ0pjYm4wN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHUmxabUYxYkhSRGIyNW1hV2M3WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXNzaW9uOiAnJyxcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMzUmhkSFZ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwzTjBZWFIxY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTEd0Q1FVRmxPMGxCUTFnc1QwRkJUeXhGUVVGRkxFVkJRVms3U1VGRmNrSXNZVUZCWVN4RlFVRkZMRkZCUVd0Q08wTkJRemRDTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVnpjMmx2YmpvZ0p5Y2dZWE1nYzNSeWFXNW5MRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN292NGZtbkovbm1vVG1sN2JwbDdUbmdybGNiaUFnSUNCelpYTnphVzl1Ulhod2FYSmxPaUJKYm1acGJtbDBlU0JoY3lCdWRXMWlaWEpjYm4wZ1lYTWdZVzU1WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBMSU5FRkVFRCA9IC9cXHUwMDBBL2c7XG52YXIgQ0FSUklBR0VSRVRVUk4gPSAvXFx1MDAwRC9nO1xudmFyIExJTkVfU0VQQVJBVE9SID0gL1xcdTIwMjgvZztcbnZhciBQQVJBR1JBUEhfU0VQQVJBVE9SID0gL1xcdTIwMjkvZztcbmZ1bmN0aW9uIHJlcGxhY2UocmVzKSB7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoTElORUZFRUQsIFwiXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKENBUlJJQUdFUkVUVVJOLCBcIlwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZShMSU5FX1NFUEFSQVRPUiwgXCJcIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoUEFSQUdSQVBIX1NFUEFSQVRPUiwgXCJcIik7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHJlcGxhY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhbk52YmxOMWNHVnljMlYwTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1YwYVd3dmFuTnZibE4xY0dWeWMyVjBMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlYwRXNTVUZCVFN4UlFVRlJMRWRCUVVjc1UwRkJVeXhEUVVGRE8wRkJRek5DTEVsQlFVMHNZMEZCWXl4SFFVRkhMRk5CUVZNc1EwRkJRenRCUVVOcVF5eEpRVUZOTEdOQlFXTXNSMEZCUnl4VFFVRlRMRU5CUVVNN1FVRkRha01zU1VGQlRTeHRRa0ZCYlVJc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGRmRFTXNVMEZCZDBJc1QwRkJUeXhEUVVGRExFZEJRVmM3U1VGRGVrTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zVVVGQlVTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUTJoRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMR05CUVdNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVU4wUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eGpRVUZqTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRkRU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc2JVSkJRVzFDTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRNME1zVDBGQlR5eEhRVUZITEVOQlFVRTdRVUZEV2l4RFFVRkRPMEZCVGtRc01FSkJUVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpQWdWU3N5TURJNElHRnVaQ0JWS3pJd01qa2dZWEpsSUdGc2JHOTNaV1FnYVc1emFXUmxJSE4wY21sdVozTWdhVzRnU2xOUFRpQW9ZWE1nWVd4c0lHeHBkR1Z5WVd4Y2JpQWdJQ0JWYm1samIyUmxJR05vWVhKaFkzUmxjbk1wSUdKMWRDQktZWFpoVTJOeWFYQjBJR1JsWm1sdVpYTWdkR2hsYlNCaGN5QnVaWGRzYVc1bFhHNGdJQ0FnYzJWd1pYSmhkRzl5Y3k0Z1FtVmpZWFZ6WlNCdWJ5QnNhWFJsY21Gc0lHNWxkMnhwYm1WeklHRnlaU0JoYkd4dmQyVmtJR2x1SUdFZ2MzUnlhVzVuTENCMGFHbHpYRzRnSUNBZ1kyRjFjMlZ6SUdFZ1VHRnljMlZGY25KdmNpQnBiaUIwYUdVZ1luSnZkM05sY2k0Z1YyVWdkMjl5YXlCaGNtOTFibVFnZEdocGN5QnBjM04xWlNCaWVWeHVJQ0FnSUhKbGNHeGhZMmx1WnlCMGFHVnRJSGRwZEdnZ2RHaGxJR1Z6WTJGd1pXUWdkbVZ5YzJsdmJpNGdWR2hwY3lCemFHOTFiR1FnWW1VZ2MyRm1aU0JpWldOaGRYTmxYRzRnSUNBZ1lXTmpiM0prYVc1bklIUnZJSFJvWlNCS1UwOU9JSE53WldNc0lIUm9aWE5sSUdOb1lYSmhZM1JsY25NZ1lYSmxJQ3B2Ym14NUtpQjJZV3hwWkNCcGJuTnBaR1ZjYmlBZ0lDQmhJSE4wY21sdVp5QmhibVFnYzJodmRXeGtJSFJvWlhKbFptOXlaU0J1YjNRZ1ltVWdjSEpsYzJWdWRDQmhibmtnYjNSb1pYSWdjR3hoWTJWekxseHVYRzRnSUNBZ2JXOXlaU0JwYm1admNtMWhkR2x2YmpvZ2FIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwzUmpNemt2Y0hKdmNHOXpZV3d0YW5OdmJpMXpkWEJsY25ObGRGeHVLaTljYmx4dVkyOXVjM1FnVEVsT1JVWkZSVVFnUFNBdlhGeDFNREF3UVM5bk8xeHVZMjl1YzNRZ1EwRlNVa2xCUjBWU1JWUlZVazRnUFNBdlhGeDFNREF3UkM5bk8xeHVZMjl1YzNRZ1RFbE9SVjlUUlZCQlVrRlVUMUlnUFNBdlhGeDFNakF5T0M5bk8xeHVZMjl1YzNRZ1VFRlNRVWRTUVZCSVgxTkZVRUZTUVZSUFVpQTlJQzljWEhVeU1ESTVMMmM3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdaMWJtTjBhVzl1SUhKbGNHeGhZMlVvY21Wek9pQnpkSEpwYm1jcElIdGNiaUFnY21WeklEMGdjbVZ6TG5KbGNHeGhZMlVvVEVsT1JVWkZSVVFzSUZ3aVhDSXBPMXh1SUNCeVpYTWdQU0J5WlhNdWNtVndiR0ZqWlNoRFFWSlNTVUZIUlZKRlZGVlNUaXdnWENKY0lpazdYRzRnSUhKbGN5QTlJSEpsY3k1eVpYQnNZV05sS0V4SlRrVmZVMFZRUVZKQlZFOVNMQ0JjSWx3aUtUdGNiaUFnY21WeklEMGdjbVZ6TG5KbGNHeGhZMlVvVUVGU1FVZFNRVkJJWDFORlVFRlNRVlJQVWl3Z1hDSmNJaWs3WEc0Z0lISmxkSFZ5YmlCeVpYTmNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHNob3codHh0KSB7XG4gICAgd3guc2hvd1RvYXN0KHtcbiAgICAgICAgdGl0bGU6IHR5cGVvZiB0eHQgPT09ICdib29sZWFuJyA/ICfliqDovb3kuK0nIDogdHh0LFxuICAgICAgICBpY29uOiAnbG9hZGluZycsXG4gICAgICAgIG1hc2s6IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiA2MDAwMFxuICAgIH0pO1xufVxuZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB3eC5oaWRlVG9hc3Qoe30pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNob3c6IHNob3csXG4gICAgaGlkZTogaGlkZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOWhaR2x1Wnk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc0wyeHZZV1JwYm1jdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4VFFVRlRMRWxCUVVrc1EwRkJReXhIUVVGeFFqdEpRVU12UWl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJRMVFzUzBGQlN5eEZRVUZGTEU5QlFVOHNSMEZCUnl4TFFVRkxMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhPMUZCUXpkRExFbEJRVWtzUlVGQlJTeFRRVUZUTzFGQlEyWXNTVUZCU1N4RlFVRkZMRWxCUVVrN1VVRkRWaXhSUVVGUkxFVkJRVVVzUzBGQlN6dExRVU5zUWl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eEpRVUZKTzBsQlExUXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU55UWl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEpRVUZKTEUxQlFVRTdTVUZEU2l4SlFVRkpMRTFCUVVFN1EwRkRVQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMmh2ZHloMGVIUTZJR0p2YjJ4bFlXNGdmQ0J6ZEhKcGJtY3BJSHRjYmlBZ0lDQjNlQzV6YUc5M1ZHOWhjM1FvZTF4dUlDQWdJQ0FnSUNCMGFYUnNaVG9nZEhsd1pXOW1JSFI0ZENBOVBUMGdKMkp2YjJ4bFlXNG5JRDhnSitXS29PaTl2ZVM0clNjZ09pQjBlSFFzWEc0Z0lDQWdJQ0FnSUdsamIyNDZJQ2RzYjJGa2FXNW5KeXhjYmlBZ0lDQWdJQ0FnYldGemF6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI0NklEWXdNREF3WEc0Z0lDQWdmU2xjYm4xY2JseHVablZ1WTNScGIyNGdhR2xrWlNncElIdGNiaUFnSUNCM2VDNW9hV1JsVkc5aGMzUW9lMzBwTzF4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyaHZkeXhjYmlBZ0lDQm9hV1JsWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gc2V0UGFyYW1zKHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICB2YXIgcXVlcnlTdHJpbmdJbmRleCA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgICB2YXIga3ZwID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICB2YXIgb2xkUXVlcnlTdHJpbmdfMSA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgb2xkUXVlcnlTdHJpbmdfMS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICB2YXIga3YgPSBvbGRRdWVyeVN0cmluZ18xW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGt2cCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBrdnApLCBwYXJhbXMpO1xuICAgIHZhciBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgKyBcIj1cIiArIGVuY29kZVVSSShrdnBba2V5XSk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsICsgXCI/XCIgKyBxdWVyeVN0cmluZztcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2V0UGFyYW1zOiBzZXRQYXJhbXNcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEpzTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1YwYVd3dmRYSnNMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN1FVRkJRU3hUUVVGVExGTkJRVk1zUTBGQlF5eEhRVUZuUWl4RlFVRkZMRTFCUVdNN1NVRkJhRU1zYjBKQlFVRXNSVUZCUVN4UlFVRm5RanRKUVVNdlFpeEpRVUZOTEdkQ1FVRm5RaXhIUVVGWExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRiRVFzU1VGQlNTeEhRVUZITEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFbEJRVWtzWjBKQlFXZENMRWxCUVVrc1EwRkJReXhGUVVGRk8xRkJRM1pDTEVsQlFVMHNaMEpCUVdNc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVWdVJTeG5Ra0ZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlEzaENMRWxCUVUwc1JVRkJSU3hIUVVGaExHZENRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyeEVMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRUanRKUVVWRUxFZEJRVWNzZVVKQlFVOHNSMEZCUnl4SFFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJSVEZDTEVsQlFVMHNWMEZCVnl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzFOQlF5OUNMRWRCUVVjc1EwRkJReXhWUVVGQkxFZEJRVWM3VVVGRFNpeFBRVUZWTEVkQlFVY3NVMEZCU1N4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZITEVOQlFVTTdTVUZETTBNc1EwRkJReXhEUVVGRE8xTkJRMFFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUldZc1NVRkJTU3huUWtGQlowSXNTVUZCU1N4RFFVRkRMRVZCUVVVN1VVRkRka0lzVDBGQlR5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3huUWtGQlowSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGREwwUTdVMEZCVFR0UlFVTklMRTlCUVU4c1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTTdTMEZEYkVNN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4VFFVRlRMRmRCUVVFN1EwRkRXaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMlYwVUdGeVlXMXpLSFZ5YkRvZ2MzUnlhVzVuSUQwZ1hDSmNJaXdnY0dGeVlXMXpPaUJ2WW1wbFkzUXBJSHRjYmlBZ0lDQmpiMjV6ZENCeGRXVnllVk4wY21sdVowbHVaR1Y0T2lCdWRXMWlaWElnUFNCMWNtd3VhVzVrWlhoUFppaGNJajljSWlrN1hHNGdJQ0FnYkdWMElHdDJjRG9nWVc1NUlEMGdlMzA3WEc0Z0lDQWdhV1lnS0hGMVpYSjVVM1J5YVc1blNXNWtaWGdnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnZiR1JSZFdWeWVWTjBjbWx1WnlBOUlIVnliQzV6ZFdKemRISW9jWFZsY25sVGRISnBibWRKYm1SbGVDQXJJREVwTG5Od2JHbDBLRndpSmx3aUtUdGNiaUFnSUNBZ0lDQWdMeThnUUhSekxXbG5ibTl5WlZ4dUlDQWdJQ0FnSUNCdmJHUlJkV1Z5ZVZOMGNtbHVaeTVtYjNKRllXTm9LQ2g0TENCcEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCcmRqb2djM1J5YVc1blcxMGdQU0J2YkdSUmRXVnllVk4wY21sdVoxdHBYUzV6Y0d4cGRDaGNJajFjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JyZG5CYmEzWmJNRjFkSUQwZ2EzWmJNVjA3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd0MmNDQTlJSHN1TGk1cmRuQXNJQzR1TG5CaGNtRnRjMzA3WEc1Y2JpQWdJQ0JqYjI1emRDQnhkV1Z5ZVZOMGNtbHVaeUE5SUU5aWFtVmpkQzVyWlhsektHdDJjQ2xjYmlBZ0lDQWdJQ0FnTG0xaGNDaHJaWGtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTJ0bGVYMDlKSHRsYm1OdlpHVlZVa2tvYTNad1cydGxlVjBwZldBN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQzVxYjJsdUtGd2lKbHdpS1R0Y2JseHVJQ0FnSUdsbUlDaHhkV1Z5ZVZOMGNtbHVaMGx1WkdWNElENDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDNXpkV0p6ZEhKcGJtY29NQ3dnY1hWbGNubFRkSEpwYm1kSmJtUmxlQ0FySURFcElDc2djWFZsY25sVGRISnBibWM3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnliQ0FySUZ3aVAxd2lJQ3NnY1hWbGNubFRkSEpwYm1jN1hHNGdJQ0FnZlZ4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVjBVR0Z5WVcxelhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZlcnNpb24gPSBfX1ZFUlNJT05fXztcbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZ5YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTkyWlhKemFXOXVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlJVRXNTVUZCVFN4UFFVRlBMRWRCUVVjc1YwRkJWeXhEUVVGRE8wRkJSVzVDTERCQ1FVRlBJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWkdWamJHRnlaU0JqYjI1emRDQmZYMVpGVWxOSlQwNWZYem9nYzNSeWFXNW5PMXh1WEc1amIyNXpkQ0IyWlhKemFXOXVJRDBnWDE5V1JWSlRTVTlPWDE4N1hHNWNibVY0Y0c5eWRDQjdJSFpsY25OcGIyNGdmVHRjYmlKZGZRPT0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhdGNoSGFuZGxlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2pzb25TdXBlcnNldC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdXRpbC9sb2FkaW5nLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL3VybC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLCszQjs7Ozs7Ozs7Ozs7O0FDWjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsdS9FOzs7Ozs7Ozs7Ozs7QUN4QzlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQSxjQUFjLFFBQVc7QUFDekI7QUFDQSwyQ0FBMkMsdVciLCJmaWxlIjoid2VSZXF1ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXgudHNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB1cmxQZXJmaXg6IGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4LFxuICAgICAgICBzZXNzaW9uRXhwaXJlVGltZTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZUtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICBzZXNzaW9uRXhwaXJlOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVcbiAgICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwUTI5dVptbG5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyRndhUzluWlhSRGIyNW1hV2N1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZEY0VNc01FTkJRVzlETzBGQlJYQkRMRzFDUVVGbE8wbEJRMWdzVDBGQlR6dFJRVU5JTEZOQlFWTXNSVUZCUlN4blFrRkJUU3hEUVVGRExGTkJRVk03VVVGRE0wSXNhVUpCUVdsQ0xFVkJRVVVzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUk3VVVGRE0wTXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFVMHNRMEZCUXl4blFrRkJaMEk3VVVGRGVrTXNZVUZCWVN4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWVVGQllUdExRVU4wUXl4RFFVRkJPMEZCUTB3c1EwRkJReXhGUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjM1JoZEhWeklHWnliMjBnSnk0dUwzTjBiM0psTDNOMFlYUjFjeWRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0NrZ1BUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lIVnliRkJsY21acGVEb2dZMjl1Wm1sbkxuVnliRkJsY21acGVDeGNiaUFnSUNBZ0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlZScGJXVTZJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpTeGNiaUFnSUNBZ0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlV0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrc1hHNGdJQ0FnSUNBZ0lITmxjM05wYjI1RmVIQnBjbVU2SUhOMFlYUjFjeTV6WlhOemFXOXVSWGh3YVhKbFhHNGdJQ0FnZlZ4dWZUdGNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbjtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWjJWMFUyVnpjMmx2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdloyVjBVMlZ6YzJsdmJpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVVndReXh0UWtGQlpUdEpRVU5ZTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhQUVVGUExFTkJRVUU3UVVGRGVrSXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE4wWVhSMWN5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5emRHRjBkWE1uWEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUNncElEMCtJSHRjYmlBZ0lDQnlaWFIxY200Z2MzUmhkSFZ6TG5ObGMzTnBiMjVjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgT2JqZWN0LmFzc2lnbihjb25maWdfMS5kZWZhdWx0LCBwYXJhbXMpO1xuICAgIHRyeSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUpIHx8ICcnO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uLicpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkgfHwgXCJzZXNzaW9uRXhwaXJlS2V5XCIpIHx8IEluZmluaXR5O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uRXhwaXJlLicpO1xuICAgIH1cbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1cGRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZhVzVwZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVOd1F5d3dRMEZCYjBNN1FVRkhjRU1zYlVKQlFXVXNWVUZCUXl4TlFVRnRRanRKUVVNdlFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdTVUZET1VJc1NVRkJTVHRSUVVOQkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhqUVVGakxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4WFFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03UzBGRGFrVTdTVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRSUVVOU0xFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNPRU5CUVRoRExFTkJRVU1zUTBGQlFUdExRVU5vUlR0SlFVTkVMRWxCUVVrN1VVRkRRU3huUWtGQlRTeERRVUZETEdGQlFXRXNSMEZCUnl4RlFVRkZMRU5CUVVNc1kwRkJZeXhEUVVGRExHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFbEJRVWtzYTBKQlFXdENMRU5CUVVNc1NVRkJTU3hSUVVGUkxFTkJRVU03UzBGRGRrYzdTVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRSUVVOU0xFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNiMFJCUVc5RUxFTkJRVU1zUTBGQlFUdExRVU4wUlR0QlFVTk1MRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4dWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNXBiWEJ2Y25RZ2V5QkpTVzVwZEU5d2RHbHZiaUI5SUdaeWIyMGdKeTR1TDJsdWRHVnlabUZqWlNkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tIQmhjbUZ0Y3pvZ1NVbHVhWFJQY0hScGIyNHBJRDArSUh0Y2JpQWdJQ0JQWW1wbFkzUXVZWE56YVdkdUtHTnZibVpwWnl3Z2NHRnlZVzF6S1R0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmlBOUlIZDRMbWRsZEZOMGIzSmhaMlZUZVc1aktHTnZibVpwWnk1elpYTnphVzl1VG1GdFpTRXBJSHg4SUNjbk8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2lnbmQzZ3VaMlYwVTNSdmNtRm5aVk41Ym1NNlptRnBiQ3dnWTJGdUlHNXZkQ0JuWlhRZ2MyVnpjMmx2Ymk0bktWeHVJQ0FnSUgxY2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU0E5SUhkNExtZGxkRk4wYjNKaFoyVlRlVzVqS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFMyVjVJSHg4SUZ3aWMyVnpjMmx2YmtWNGNHbHlaVXRsZVZ3aUtTQjhmQ0JKYm1acGJtbDBlVHRjYmlBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9KM2Q0TG1kbGRGTjBiM0poWjJWVGVXNWpPbVpoYVd3c0lHTmhiaUJ1YjNRZ1oyVjBJSE5sYzNOcGIyNUZlSEJwY21VdUp5bGNiaUFnSUNCOVhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3Nlc3Npb25NYW5hZ2VyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4oKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYkc5bmFXNHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdllYQnBMMnh2WjJsdUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01rUkJRWEZFTzBGQlJYSkVMRzFDUVVGbE8wbEJRMWdzVDBGQlR5eDNRa0ZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGQk8wRkJRMmhETEVOQlFVTXNSVUZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCelpYTnphVzl1VFdGdVlXZGxjaUJtY205dElDY3VMaTl0YjJSMWJHVXZjMlZ6YzJsdmJrMWhibUZuWlhJblhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElDZ3BJRDArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjMlZ6YzJsdmJrMWhibUZuWlhJdWJXRnBiaWdwWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvcmVxdWVzdEhhbmRsZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQucmVxdWVzdChvYmopO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ4ZFdWemRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZjbVZ4ZFdWemRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVZHlSQ3h0UWtGQlpTeFZRVUZETEVkQlFXMUNPMGxCUXk5Q0xFOUJRVThzZDBKQlFXTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3UVVGRGRFTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5eVpYRjFaWE4wU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVJSDBnWm5KdmJTQW5MaTR2YVc1MFpYSm1ZV05sSjF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQnlaWEYxWlhOMFNHRnVaR3hsY2k1eVpYRjFaWE4wS0c5aWFpbGNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoc2Vzc2lvbikge1xuICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5zZXRTZXNzaW9uKHNlc3Npb24pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YzJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVWeVJDeHRRa0ZCWlN4VlFVRkRMRTlCUVdVN1NVRkRNMElzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRGRrTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE5sYzNOcGIyNU5ZVzVoWjJWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5elpYTnphVzl1VFdGdVlXZGxjaWRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0hObGMzTnBiMjQ2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0FnSUhObGMzTnBiMjVOWVc1aFoyVnlMbk5sZEZObGMzTnBiMjRvYzJWemMybHZiaWs3WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvcmVxdWVzdEhhbmRsZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEJzYjJGa1JtbHNaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2ZFhCc2IyRmtSbWxzWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRkRMRWRCUVhOQ08wbEJRMnhETEU5QlFVOHNkMEpCUVdNc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdRVUZEZWtNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQjdJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ1BUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCeVpYRjFaWE4wU0dGdVpHeGxjaTUxY0d4dllXUkdhV3hsS0c5aWFpbGNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBpbml0XzEgPSByZXF1aXJlKFwiLi9hcGkvaW5pdFwiKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9hcGkvcmVxdWVzdFwiKTtcbnZhciB1cGxvYWRGaWxlXzEgPSByZXF1aXJlKFwiLi9hcGkvdXBsb2FkRmlsZVwiKTtcbnZhciBzZXRTZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9hcGkvc2V0U2Vzc2lvblwiKTtcbnZhciBsb2dpbl8xID0gcmVxdWlyZShcIi4vYXBpL2xvZ2luXCIpO1xudmFyIGdldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9nZXRTZXNzaW9uXCIpO1xudmFyIGdldENvbmZpZ18xID0gcmVxdWlyZShcIi4vYXBpL2dldENvbmZpZ1wiKTtcbnZhciB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xudmFyIHdlUmVxdWVzdE9iamVjdCA9IHtcbiAgICBpbml0OiBpbml0XzEuZGVmYXVsdCxcbiAgICByZXF1ZXN0OiByZXF1ZXN0XzEuZGVmYXVsdCxcbiAgICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlXzEuZGVmYXVsdCxcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uXzEuZGVmYXVsdCxcbiAgICBsb2dpbjogbG9naW5fMS5kZWZhdWx0LFxuICAgIGdldFNlc3Npb246IGdldFNlc3Npb25fMS5kZWZhdWx0LFxuICAgIGdldENvbmZpZzogZ2V0Q29uZmlnXzEuZGVmYXVsdCxcbiAgICB2ZXJzaW9uOiB2ZXJzaW9uXzEudmVyc2lvblxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IHdlUmVxdWVzdE9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmFXNWtaWGd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3h0UTBGQk5rSTdRVUZETjBJc2VVTkJRVzFETzBGQlEyNURMQ3REUVVGNVF6dEJRVU42UXl3clEwRkJlVU03UVVGRGVrTXNjVU5CUVN0Q08wRkJReTlDTEN0RFFVRjVRenRCUVVONlF5dzJRMEZCZFVNN1FVRkZka01zY1VOQlFXMURPMEZCUlc1RExFbEJRVTBzWlVGQlpTeEhRVUZqTzBsQlEycERMRWxCUVVrc1owSkJRVUU3U1VGRFNpeFBRVUZQTEcxQ1FVRkJPMGxCUTFBc1ZVRkJWU3h6UWtGQlFUdEpRVU5XTEZWQlFWVXNjMEpCUVVFN1NVRkRWaXhMUVVGTExHbENRVUZCTzBsQlEwd3NWVUZCVlN4elFrRkJRVHRKUVVOV0xGTkJRVk1zY1VKQlFVRTdTVUZEVkN4UFFVRlBMRzFDUVVGQk8wTkJRMUlzUTBGQlF6dEJRVVZHTEd0Q1FVRmxMR1ZCUVdVc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JwYm1sMElHWnliMjBnWENJdUwyRndhUzlwYm1sMFhDSmNibWx0Y0c5eWRDQnlaWEYxWlhOMElHWnliMjBnWENJdUwyRndhUzl5WlhGMVpYTjBYQ0pjYm1sdGNHOXlkQ0IxY0d4dllXUkdhV3hsSUdaeWIyMGdYQ0l1TDJGd2FTOTFjR3h2WVdSR2FXeGxYQ0pjYm1sdGNHOXlkQ0J6WlhSVFpYTnphVzl1SUdaeWIyMGdYQ0l1TDJGd2FTOXpaWFJUWlhOemFXOXVYQ0pjYm1sdGNHOXlkQ0JzYjJkcGJpQm1jbTl0SUZ3aUxpOWhjR2t2Ykc5bmFXNWNJbHh1YVcxd2IzSjBJR2RsZEZObGMzTnBiMjRnWm5KdmJTQmNJaTR2WVhCcEwyZGxkRk5sYzNOcGIyNWNJbHh1YVcxd2IzSjBJR2RsZEVOdmJtWnBaeUJtY205dElGd2lMaTloY0drdloyVjBRMjl1Wm1sblhDSmNibWx0Y0c5eWRDQjdJSGRsVW1WeGRXVnpkQ0I5SUdaeWIyMGdYQ0l1TDJsdWRHVnlabUZqWlZ3aVhHNXBiWEJ2Y25RZ2V5QjJaWEp6YVc5dUlIMGdabkp2YlNBbkxpOTJaWEp6YVc5dUoxeHVYRzVqYjI1emRDQjNaVkpsY1hWbGMzUlBZbXBsWTNRNklIZGxVbVZ4ZFdWemRDQTlJSHRjYmlBZ2FXNXBkQ3hjYmlBZ2NtVnhkV1Z6ZEN4Y2JpQWdkWEJzYjJGa1JtbHNaU3hjYmlBZ2MyVjBVMlZ6YzJsdmJpeGNiaUFnYkc5bmFXNHNYRzRnSUdkbGRGTmxjM05wYjI0c1hHNGdJR2RsZEVOdmJtWnBaeXhjYmlBZ2RtVnljMmx2Ymx4dWZUdGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdkMlZTWlhGMVpYTjBUMkpxWldOME8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBnZXQob2JqKSB7XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd3guZ2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgaWYgKG9iai5jYWNoZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlcy5kYXRhKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVzLmRhdGEsIHsgaXNDYWNoZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNldChvYmosIHJlYWxEYXRhKSB7XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9iai5jYWNoZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZWFsRGF0YSkpKSB7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICAgICAgZGF0YTogcmVhbERhdGFcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGdldDogZ2V0LFxuICAgIHNldDogc2V0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJGamFHVk5ZVzVoWjJWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlqWVdOb1pVMWhibUZuWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZGUVN4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGdFFqdEpRVU0xUWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUlVGQlJUdFJRVU5vUWl4UFFVRlBPMHRCUTFZN1NVRkRSQ3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhUUVVGVE8xRkJRMnhDTEU5QlFVOHNXVUZCUlN4SFFVRkhPMWxCUTFJc1NVRkRTU3hIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEVsQlFVazdaMEpCUTJ4Q0xFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRlZCUVZVc1NVRkJTU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVNeFJEdG5Ra0ZEUlN4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFOUJRVThzUzBGQlN5eFZRVUZWTEVWQlFVVTdiMEpCUTI1RExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVTXNRMEZCUXl4RFFVRkJPMmxDUVVONlF6dGhRVU5LTzFsQlEwUXNTVUZCUnl4UFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVlVGQlZTeEZRVUZGTzJkQ1FVTnVReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdZVUZEYkVJN1VVRkRUQ3hEUVVGRE8wdEJRMG9zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1IwRkJSeXhEUVVGRExFZEJRVzFDTEVWQlFVY3NVVUZCZVVJN1NVRkRlRVFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRVZCUVVVN1VVRkRhRUlzVDBGQlR6dExRVU5XTzBsQlEwUXNTVUZEU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFbEJRVWs3VVVGRGJFSXNRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhMUVVGTExFdEJRVXNzVlVGQlZTeEpRVUZKTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGRE1VUTdVVUZEUlN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJRMVlzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4VFFVRlRPMWxCUTJ4Q0xFbEJRVWtzUlVGQlJTeFJRVUZSTzFOQlEycENMRU5CUVVNc1EwRkJRVHRMUVVOTU8wRkJRMHdzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1IwRkJSeXhMUVVGQk8wbEJRMGdzUjBGQlJ5eExRVUZCTzBOQlEwNHNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYRzVjYm1aMWJtTjBhVzl1SUdkbGRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0NGdlltb3ViM0pwWjJsdVZYSnNLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzRnSUNBZ2QzZ3VaMlYwVTNSdmNtRm5aU2g3WEc0Z0lDQWdJQ0FnSUd0bGVUb2diMkpxTG05eWFXZHBibFZ5YkN4Y2JpQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3lBb2NtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTmhZMmhsSUQwOVBTQjBjblZsSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0tIUjVjR1Z2WmlCdlltb3VZMkZqYUdVZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlBbUppQnZZbW91WTJGamFHVW9jbVZ6TG1SaGRHRXBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdWMzVmpZMlZ6Y3lBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hKbGN5NWtZWFJoTENCN2FYTkRZV05vWlRvZ2RISjFaWDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUlHOWlhaTVqYjIxd2JHVjBaU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCelpYUW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUFzSUhKbFlXeEVZWFJoT2lCemRISnBibWNnZkNCdlltcGxZM1FwSUh0Y2JpQWdJQ0JwWmlBb0lXOWlhaTV2Y21sbmFXNVZjbXdwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0FnSUc5aWFpNWpZV05vWlNBOVBUMGdkSEoxWlNCOGZGeHVJQ0FnSUNBZ0lDQW9kSGx3Wlc5bUlHOWlhaTVqWVdOb1pTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUlDWW1JRzlpYWk1allXTm9aU2h5WldGc1JHRjBZU2twWEc0Z0lDQWdLU0I3WEc0Z0lDQWdJQ0FnSUhkNExuTmxkRk4wYjNKaFoyVW9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJ2WW1vdWIzSnBaMmx1VlhKc0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlUb2djbVZoYkVSaGRHRmNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2JpQWdJQ0JuWlhRc1hHNGdJQ0FnYzJWMFhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYXRjaEhhbmRsZXIgPSB2b2lkIDA7XG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XG5mdW5jdGlvbiBjYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpIHtcbiAgICB2YXIgdHlwZSA9IGUudHlwZSwgcmVzID0gZS5yZXM7XG4gICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKHJlcy5zdGF0dXNDb2RlLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAndXBsb2FkLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IocmVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgdmFyIG1zZyA9IGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKG1zZy5jb250ZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoZS50eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgZS5yZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuY2F0Y2hIYW5kbGVyID0gY2F0Y2hIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJGMFkyaElZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlqWVhSamFFaGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPMEZCUTBFc0swTkJRVEJETzBGQlR6RkRMRk5CUVZNc1dVRkJXU3hEUVVGRExFTkJRV0VzUlVGQlJTeEhRVUYxUXl4RlFVRkZMRTFCUVRoQ08wbEJRMmhITEVsQlFVRXNTVUZCU1N4SFFVRlZMRU5CUVVNc1MwRkJXQ3hGUVVGRkxFZEJRVWNzUjBGQlN5eERRVUZETEVsQlFVNHNRMEZCVFR0SlFVTjJRaXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEVWQlFVVTdVVUZEYUVJc1NVRkJTU3hKUVVGSkxFdEJRVXNzV1VGQldTeEZRVUZGTzFsQlEzWkNMRTlCUVU4c1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEzWkVPMkZCUVUwc1NVRkJTU3hKUVVGSkxFdEJRVXNzWTBGQll5eEZRVUZGTzFsQlEyaERMRTlCUVU4c1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRha003WVVGQlRTeEpRVUZKTEVsQlFVa3NTMEZCU3l4aFFVRmhMRVZCUVVVN1dVRkRMMElzU1VGQlNTeEhRVUZITEVkQlFVY3NjMEpCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZUVNc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGVrTTdZVUZCVFR0WlFVVklMRTlCUVU4c1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEzQkNPMHRCUTBvN1UwRkJUVHRSUVVOSUxFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlR0WlFVTlNMRTlCUVU4c2MwSkJRVmtzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU01UXp0aFFVRk5PMWxCUlVnc1QwRkJUeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEY0VJN1MwRkRTanRCUVVWTUxFTkJRVU03UVVGRFVTeHZRMEZCV1NJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1TENCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlCOUlHWnliMjBnWENJdUxpOXBiblJsY21aaFkyVmNJanRjYm1sdGNHOXlkQ0JsY25KdmNraGhibVJzWlhJZ1puSnZiU0JjSWk0dlpYSnliM0pJWVc1a2JHVnlYQ0k3WEc1Y2JuUjVjR1VnVkdoeWIzZEZjbkp2Y2xSNWNHVWdQU0FuZFhCc2IyRmtMV1Z5Y205eUp5QjhJQ2RzYjJkcFl5MWxjbkp2Y2ljZ2ZDQW5hSFIwY0MxbGNuSnZjaWRjYm1sdWRHVnlabUZqWlNCVWFISnZkMFZ5Y205eUlIdGNiaUFnSUNCMGVYQmxPaUJVYUhKdmQwVnljbTl5Vkhsd1pWeHVJQ0FnSUhKbGN6b2dZVzU1WEc1OVhHNW1kVzVqZEdsdmJpQmpZWFJqYUVoaGJtUnNaWElvWlRvZ1ZHaHliM2RGY25KdmNpd2diMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI4SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1TENCeVpXcGxZM1E2SUNoeVpXRnpiMjQvT2lCaGJua3BJRDArSUhadmFXUXBJSHRjYmlBZ0lDQmpiMjV6ZENCN0lIUjVjR1VzSUhKbGN5QjlJRDBnWlZ4dUlDQWdJR2xtSUNodlltb3VZMkYwWTJoRmNuSnZjaWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3WlNBOVBUMGdKMmgwZEhBdFpYSnliM0luS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtHNWxkeUJGY25KdmNpaHlaWE11YzNSaGRIVnpRMjlrWlM1MGIxTjBjbWx1WnlncEtTazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pTQTlQVDBnSjNWd2JHOWhaQzFsY25KdmNpY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvYm1WM0lFVnljbTl5S0hKbGN5a3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVWdQVDA5SUNkc2IyZHBZeTFsY25KdmNpY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J0YzJjZ1BTQmxjbkp2Y2toaGJtUnNaWEl1WjJWMFJYSnliM0pOYzJjb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvYm1WM0lFVnljbTl5S0cxelp5NWpiMjUwWlc1MEtTazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RGxoYmJrdTVacWMrbVVtZWl2cjF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENobEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hsTG5SNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbGNuSnZja2hoYm1Sc1pYSXViRzluYVdORmNuSnZjaWh2WW1vc0lHVXVjbVZ6S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9XRnR1UzdsbXB6NlpTWjZLK3ZYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLR1VwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNTlYRzVsZUhCdmNuUWdleUJqWVhSamFFaGhibVJzWlhJZ2ZTSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuLi9hcGkvcmVxdWVzdFwiKTtcbmZ1bmN0aW9uIHN0YXJ0KG9iaikge1xuICAgIG9iai5fcmVwb3J0U3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59XG5mdW5jdGlvbiBlbmQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRFbmRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgaWYgKG9iai5yZXBvcnQgJiYgb2JqLl9yZXBvcnRTdGFydFRpbWUpIHtcbiAgICAgICAgcmVwb3J0KG9iai5yZXBvcnQsIG9iai5fcmVwb3J0U3RhcnRUaW1lLCBvYmouX3JlcG9ydEVuZFRpbWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlcG9ydChuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQucmVwb3J0Q0dJID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kobmFtZSwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXF1ZXN0XzEuZGVmYXVsdCk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZCxcbiAgICByZXBvcnQ6IHJlcG9ydFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpIVnlZWFJwYjI1U1pYQnZjblJsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl0YjJSMWJHVXZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc1UwRkJVeXhMUVVGTExFTkJRVU1zUjBGQmRVTTdTVUZEYkVRc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEYUVRc1EwRkJRenRCUVVWRUxGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFYVkRPMGxCUTJoRUxFZEJRVWNzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU14UXl4SlFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhGUVVGRk8xRkJRMjVETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJaMElzUlVGQlJTeEhRVUZITEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUjBGQlJ5eERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMHRCUXpGRk8wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNUVUZCVFN4RFFVRkRMRWxCUVZrc1JVRkJSU3hUUVVGcFFpeEZRVUZGTEU5QlFXVTdTVUZETlVRc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNVMEZCVXl4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVONFF5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4cFFrRkJUeXhEUVVGRExFTkJRVU03UzBGRGRrUTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeExRVUZMTEU5QlFVRTdTVUZEVEN4SFFVRkhMRXRCUVVFN1NVRkRTQ3hOUVVGTkxGRkJRVUU3UTBGRFZDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZENCbWNtOXRJQ2N1TGk5aGNHa3ZjbVZ4ZFdWemRDZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTlwYm5SbGNtWmhZMlZjSWp0Y2JseHVablZ1WTNScGIyNGdjM1JoY25Rb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVLU0I3WEc0Z0lDQWdiMkpxTGw5eVpYQnZjblJUZEdGeWRGUnBiV1VnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pXNWtLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUc5aWFpNWZjbVZ3YjNKMFJXNWtWR2x0WlNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lHbG1LRzlpYWk1eVpYQnZjblFnSmlZZ2IySnFMbDl5WlhCdmNuUlRkR0Z5ZEZScGJXVXBJSHRjYmlBZ0lDQWdJQ0FnY21Wd2IzSjBLRzlpYWk1eVpYQnZjblFnWVhNZ2MzUnlhVzVuTENCdlltb3VYM0psY0c5eWRGTjBZWEowVkdsdFpTd2diMkpxTGw5eVpYQnZjblJGYm1SVWFXMWxLVHRjYmlBZ0lDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlISmxjRzl5ZENodVlXMWxPaUJ6ZEhKcGJtY3NJSE4wWVhKMFZHbHRaVG9nYm5WdFltVnlMQ0JsYm1SVWFXMWxPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NXlaWEJ2Y25SRFIwa2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1bWFXY3VjbVZ3YjNKMFEwZEpLRzVoYldVc0lITjBZWEowVkdsdFpTd2daVzVrVkdsdFpTd2djbVZ4ZFdWemRDazdYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjM1JoY25Rc1hHNGdJQ0FnWlc1a0xGeHVJQ0FnSUhKbGNHOXlkRnh1ZlZ4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xuZnVuY3Rpb24gc3lzdGVtRXJyb3Iob2JqLCByZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciByZXRyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RfMS5kZWZhdWx0KG9iaikudGhlbihvYmouX3Jlc29sdmUpLmNhdGNoKG9iai5fcmVqZWN0KTsgfTtcbiAgICAgICAgZG9FcnJvcihcIlwiLCByZXMuZXJyTXNnLCByZXRyeSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbG9naWNFcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIF9hID0gZ2V0RXJyb3JNc2cocmVzKSwgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XG4gICAgICAgIHZhciByZXRyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RfMS5kZWZhdWx0KG9iaikudGhlbihvYmouX3Jlc29sdmUpLmNhdGNoKG9iai5fcmVqZWN0KTsgfTtcbiAgICAgICAgZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbn1cbmZ1bmN0aW9uIGdldEVycm9yTXNnKHJlcykge1xuICAgIHZhciB0aXRsZSA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGl0bGUgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZTtcbiAgICB9XG4gICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50KHJlcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQ7XG4gICAgfVxuICAgIHJldHVybiB7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9O1xufVxuZnVuY3Rpb24gZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpIHtcbiAgICB2YXIgc2hvd0Vycm9yUmV0cnlCdG4gPSBjb25maWdfMS5kZWZhdWx0LmVycm9yUmV0cnlCdG4gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgd3guc2hvd01vZGFsKE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgXCLnvZHnu5zmiJbmnI3liqHlvILluLjvvIzor7fnqI3lkI7ph43or5VcIixcbiAgICB9LCAhc2hvd0Vycm9yUmV0cnlCdG4gPyB7XG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlXG4gICAgfSA6IHtcbiAgICAgICAgc2hvd0NhbmNlbDogdHJ1ZSxcbiAgICAgICAgY29uZmlybVRleHQ6ICfph43or5UnLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZiAocmVzLmNvbmZpcm0gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgcmV0cnkoKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzeXN0ZW1FcnJvcjogc3lzdGVtRXJyb3IsXG4gICAgbG9naWNFcnJvcjogbG9naWNFcnJvcixcbiAgICBkb0Vycm9yOiBkb0Vycm9yLFxuICAgIGdldEVycm9yTXNnOiBnZXRFcnJvck1zZ1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpYSnliM0pJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5bGNuSnZja2hoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFYRkRPMEZCUjNKRExGTkJRVk1zVjBGQlZ5eERRVUZETEVkQlFYVkRMRVZCUVVVc1IwRkJOa0k3U1VGRGRrWXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhKUVVGSkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEyaERMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZEYWtJN1UwRkJUVHRSUVVOSUxFbEJRVTBzUzBGQlN5eEhRVUZITEdOQlFVMHNUMEZCUVN4cFFrRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJiRVFzUTBGQmEwUXNRMEZCUXp0UlFVTjJSU3hQUVVGUExFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03UzBGRGJFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXhWUVVGVkxFTkJRVU1zUjBGQmRVTXNSVUZCUlN4SFFVRjVSVHRKUVVOc1NTeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGFFTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5xUWp0VFFVRk5PMUZCUTBjc1NVRkJRU3hMUVVGdFFpeFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVd4RExFdEJRVXNzVjBGQlFTeEZRVUZGTEU5QlFVOHNZVUZCYjBJc1EwRkJRenRSUVVNeFF5eEpRVUZOTEV0QlFVc3NSMEZCUnl4alFVRk5MRTlCUVVFc2FVSkJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRV3hFTEVOQlFXdEVMRU5CUVVNN1VVRkRka1VzVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03UzBGRGJFTTdTVUZIUkN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eGhRVUZoTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUXpWRExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5zUXp0SlFVVkVMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEZGtJc1EwRkJRenRCUVVWRUxGTkJRVk1zVjBGQlZ5eERRVUZETEVkQlFYbEZPMGxCUXpGR0xFbEJRVWtzUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTm1MRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRla01zU1VGQlNUdFpRVU5CTEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVFN1UwRkRkRU03VVVGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0VFFVTllPMHRCUTBvN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemxETEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU0zUWp0SlFVVkVMRWxCUVVrc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5xUWl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFpRVUZaTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUXpORExFbEJRVWs3V1VGRFFTeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkJPMU5CUXpGRE8xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdVMEZEV0R0TFFVTktPMU5CUVUwc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNXVUZCV1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVOb1JDeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU03UzBGRGFrTTdTVUZGUkN4UFFVRlBMRVZCUVVNc1MwRkJTeXhQUVVGQkxFVkJRVVVzVDBGQlR5eFRRVUZCTEVWQlFVTXNRMEZCUVR0QlFVTXpRaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFBRVUZQTEVOQlFVTXNTMEZCWVN4RlFVRkZMRTlCUVdVc1JVRkJSU3hMUVVGcFFqdEpRVVU1UkN4SlFVRk5MR2xDUVVGcFFpeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hKUVVGSkxFOUJRVThzUzBGQlN5eExRVUZMTEZWQlFWVXNRMEZCUXp0SlFVTTVSU3hGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRka0lzUzBGQlN5eFBRVUZCTzFGQlEwd3NUMEZCVHl4RlFVRkZMRTlCUVU4c1NVRkJTU3hsUVVGbE8wdEJRM1JETEVWQlFVVXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY0VJc1ZVRkJWU3hGUVVGRkxFdEJRVXM3UzBGRGNFSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRRU3hWUVVGVkxFVkJRVVVzU1VGQlNUdFJRVU5vUWl4WFFVRlhMRVZCUVVVc1NVRkJTVHRSUVVOcVFpeFBRVUZQTEVWQlFWQXNWVUZCVVN4SFFVRnpRenRaUVVNeFF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhMUVVGTExFdEJRVXNzVlVGQlZUdG5Ra0ZCUlN4TFFVRkxMRVZCUVVVc1EwRkJRenRSUVVNMVJDeERRVUZETzB0QlEwb3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRVaXhEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4WFFVRlhMR0ZCUVVFN1NVRkRXQ3hWUVVGVkxGbEJRVUU3U1VGRFZpeFBRVUZQTEZOQlFVRTdTVUZEVUN4WFFVRlhMR0ZCUVVFN1EwRkRaQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjbVZ4ZFdWemRDQm1jbTl0SUNjdUxpOWhjR2t2Y21WeGRXVnpkQ2M3WEc1cGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaXdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSTdYRzVjYm1aMWJtTjBhVzl1SUhONWMzUmxiVVZ5Y205eUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaXdnY21Wek9pQjNlQzVIWlc1bGNtRnNRMkZzYkdKaFkydFNaWE4xYkhRcElIdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTVtWVdsc0lEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1aaGFXd29jbVZ6S1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWFJ5ZVNBOUlDZ3BJRDArSUhKbGNYVmxjM1FvYjJKcUtTNTBhR1Z1S0c5aWFpNWZjbVZ6YjJ4MlpTa3VZMkYwWTJnb2IySnFMbDl5WldwbFkzUXBPMXh1SUNBZ0lDQWdJQ0JrYjBWeWNtOXlLRndpWENJc0lISmxjeTVsY25KTmMyY3NJSEpsZEhKNUtUdGNiaUFnSUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUd4dloybGpSWEp5YjNJb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVMQ0J5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFnZkNCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VabUZwYkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtWVdsc0tISmxjeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2UzUnBkR3hsTENCamIyNTBaVzUwZlNBOUlHZGxkRVZ5Y205eVRYTm5LSEpsY3lrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhKbGRISjVJRDBnS0NrZ1BUNGdjbVZ4ZFdWemRDaHZZbW9wTG5Sb1pXNG9iMkpxTGw5eVpYTnZiSFpsS1M1allYUmphQ2h2WW1vdVgzSmxhbVZqZENrN1hHNGdJQ0FnSUNBZ0lHUnZSWEp5YjNJb2RHbDBiR1VzSUdOdmJuUmxiblFzSUhKbGRISjVLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeURscG9MbW5wem1uSW5waFkzbnZhN251NS9rdUlEcGxKbm9yNi9sbTU3b3NJUGxoNzNtbGJEdnZJemxpSm5taWFmb29Zemxyb05jYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2tOaGJHeGlZV05ySUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVabWxuTG1WeWNtOXlRMkZzYkdKaFkyc29iMkpxTENCeVpYTXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHTnZibk52YkdVdVpYSnliM0lvY21WektUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1oyVjBSWEp5YjNKTmMyY29jbVZ6T2lCM2VDNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBJSHdnZDNndVZYQnNiMkZrUm1sc1pWTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJR3hsZENCMGFYUnNaU0E5SUZ3aVhDSTdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVpYSnliM0pVYVhSc1pTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYVhSc1pTQTlJR052Ym1acFp5NWxjbkp2Y2xScGRHeGxLSEpsY3k1a1lYUmhLVnh1SUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WlhKeWIzSlVhWFJzWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaWtnZTF4dUlDQWdJQ0FnSUNCMGFYUnNaU0E5SUdOdmJtWnBaeTVsY25KdmNsUnBkR3hsTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCamIyNTBaVzUwSUQwZ1hDSmNJanRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2tOdmJuUmxiblFnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR1Z1ZENBOUlHTnZibVpwWnk1bGNuSnZja052Ym5SbGJuUW9jbVZ6TG1SaGRHRXBYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVsY25KdmNrTnZiblJsYm5RZ1BUMDlJRndpYzNSeWFXNW5YQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVkR1Z1ZENBOUlHTnZibVpwWnk1bGNuSnZja052Ym5SbGJuUTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUh0MGFYUnNaU3dnWTI5dWRHVnVkSDFjYm4xY2JseHVablZ1WTNScGIyNGdaRzlGY25KdmNpaDBhWFJzWlRvZ2MzUnlhVzVuTENCamIyNTBaVzUwT2lCemRISnBibWNzSUhKbGRISjVQem9nS0NrZ1BUNGdZVzU1S1NCN1hHNGdJQ0FnTHk4ZzVwaXY1WkNtNXBpKzU2UzY2WWVONksrVjVveUo2Wkt1WEc0Z0lDQWdZMjl1YzNRZ2MyaHZkMFZ5Y205eVVtVjBjbmxDZEc0Z1BTQmpiMjVtYVdjdVpYSnliM0pTWlhSeWVVSjBiaUFtSmlCMGVYQmxiMllnY21WMGNua2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lqdGNiaUFnSUNCM2VDNXphRzkzVFc5a1lXd29UMkpxWldOMExtRnpjMmxuYmloN1hHNGdJQ0FnSUNBZ0lIUnBkR3hsTEZ4dUlDQWdJQ0FnSUNCamIyNTBaVzUwT2lCamIyNTBaVzUwSUh4OElGd2k1NzJSNTd1YzVvaVc1cHlONVlxaDVieUM1Ymk0Nzd5TTZLKzM1NmlONVpDTzZZZU42SytWWENJc1hHNGdJQ0FnZlN3Z0lYTm9iM2RGY25KdmNsSmxkSEo1UW5SdUlEOGdlMXh1SUNBZ0lDQWdJQ0J6YUc5M1EyRnVZMlZzT2lCbVlXeHpaVnh1SUNBZ0lIMGdPaUI3WEc0Z0lDQWdJQ0FnSUhOb2IzZERZVzVqWld3NklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUdOdmJtWnBjbTFVWlhoME9pQW42WWVONksrVkp5eGNiaUFnSUNBZ0lDQWdjM1ZqWTJWemN5aHlaWE02SUhkNExsTm9iM2ROYjJSaGJGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hKbGN5NWpiMjVtYVhKdElDWW1JSFI1Y0dWdlppQnlaWFJ5ZVNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCeVpYUnllU2dwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNrcE8xeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjM2x6ZEdWdFJYSnliM0lzWEc0Z0lDQWdiRzluYVdORmNuSnZjaXhjYmlBZ0lDQmtiMFZ5Y205eUxGeHVJQ0FnSUdkbGRFVnljbTl5VFhOblhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgJiYgY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ21vY2sg5rKh5pyJ5a+55bqU5o6l5Y+j55qE5pWw5o2uJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai51cmxdIHx8IChvYmoub3JpZ2luVXJsID8gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSA6ICcnKTtcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgfTtcbiAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXOWphMDFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDIxdlkydE5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMREpEUVVGeFF6dEJRVWR5UXl4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGMVF6dEpRVVZvUkN4SlFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRmFrWXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPMUZCUTJoRExFOUJRVThzUzBGQlN5eERRVUZETzB0QlEyaENPMGxCUlVRc1NVRkJTU3hKUVVGSkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zWjBKQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVVM1JpeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zU1VGQlRTeEhRVUZITEVkQlFVYzdVVUZEVWl4SlFVRkpMRTFCUVVFN1VVRkRTaXhWUVVGVkxFVkJRVVVzUjBGQlJ6dExRVU5zUWl4RFFVRkRPMGxCUlVZc2FVSkJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0SlFVTm1MRTlCUVU4c1IwRkJSeXhEUVVGQk8wRkJRMlFzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1IwRkJSeXhMUVVGQk8wTkJRMDRzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJR3h2WVdScGJtY2dabkp2YlNBbkxpNHZkWFJwYkM5c2IyRmthVzVuSjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYRzVjYm1aMWJtTjBhVzl1SUdkbGRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwT2lCaGJua2dlMXh1WEc0Z0lDQWdhV1lvSVNoamIyNW1hV2N1Ylc5amEwcHpiMjViYjJKcUxuVnliRjBnZkh3Z0tHOWlhaTV2Y21sbmFXNVZjbXdnSmlZZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRLU2twSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdiVzlqYXlEbXNxSG1uSW5scjdubHVwVG1qcVhsajZQbm1vVG1sYkRtamE1Y2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWduYlc5amF5RG1zcUhtbklubHI3bmx1cFRtanFYbGo2UG5tb1RtbGJEbWphNG5LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNTFjbXhkSUh4OElDaHZZbW91YjNKcFoybHVWWEpzSUQ4Z1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRJRG9nSnljcE8xeHVJQ0FnSUM4dklHUmxaWEFnWTI5d2VWeHVJQ0FnSUdSaGRHRWdQU0JLVTA5T0xuQmhjbk5sS0VwVFQwNHVjM1J5YVc1bmFXWjVLR1JoZEdFcEtUdGNiaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFc1hHNGdJQ0FnSUNBZ0lITjBZWFIxYzBOdlpHVTZJREl3TUZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tUdGNiaUFnSUNCeVpYUjFjbTRnY21WelhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFJjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbnZhciBtb2NrTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vbW9ja01hbmFnZXJcIik7XG52YXIgY2FjaGVNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9jYWNoZU1hbmFnZXJcIik7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL3Nlc3Npb25NYW5hZ2VyXCIpO1xudmFyIHJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVzcG9uc2VIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgdXJsXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91cmxcIik7XG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XG52YXIgY2F0Y2hIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9jYXRjaEhhbmRsZXJcIik7XG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsKSB7XG4gICAgaWYgKG9yaWdpblVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmJlZm9yZVNlbmQoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cbiAgICBvYmouX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIG9iai5fcmVqZWN0ID0gcmVqZWN0O1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaGVhZGVyID0gY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBoZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouaGVhZGVyKSwgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIpO1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmRhdGEpLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZCksIG9iai5kYXRhKTtcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cbiAgICBvYmouaGVhZGVyID0gb2JqLmhlYWRlciA/IG9iai5oZWFkZXIgOiB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBoZWFkZXIgPSBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcigpO1xuICAgICAgICBpZiAodHlwZW9mIGhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG9iai5oZWFkZXIgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmhlYWRlciksIGhlYWRlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcik7XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZm9ybURhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmZvcm1EYXRhKSwgKF9hID0ge30sIF9hW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYSkpO1xuICAgIH1cbiAgICB2YXIgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGdkKSwgb2JqLmZvcm1EYXRhKTtcbiAgICBpZiAoIWNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RVc2VRdWVyeVN0cmluZykge1xuICAgICAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xuICAgICAgICB9XG4gICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGdldEdsb2JhbERhdGEoKSB7XG4gICAgdmFyIGdkID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZ2Q7XG59XG5mdW5jdGlvbiBkb1JlcXVlc3Qob2JqKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBvYmoubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyOiBvYmouaGVhZGVyIHx8IHt9LFxuICAgICAgICAgICAgZGF0YVR5cGU6IG9iai5kYXRhVHlwZSB8fCAnanNvbicsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRvVXBsb2FkRmlsZShvYmopIHtcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHd4LnVwbG9hZEZpbGUoe1xuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcbiAgICAgICAgICAgIG5hbWU6IG9iai5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgZm9ybURhdGE6IG9iai5mb3JtRGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcmVxdWVzdChvYmopIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBvYmogPSBwcmVEbyhvYmosIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQucmVzcG9uc2VGb3JSZXF1ZXN0KG1vY2tSZXNwb25zZSwgb2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iai5jYWNoZSkge1xuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbihvYmopLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvUmVxdWVzdChvYmopO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQucmVzcG9uc2VGb3JSZXF1ZXN0KHJlcywgb2JqKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhdGNoSGFuZGxlcl8xLmNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdXBsb2FkRmlsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBvYmogPSBwcmVEbyhvYmosIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQucmVzcG9uc2VGb3JVcGxvYWRGaWxlKG1vY2tSZXNwb25zZSwgb2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4ob2JqKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yVXBsb2FkRmlsZShyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGNhdGNoSGFuZGxlcl8xLmNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGZvcm1hdDogZm9ybWF0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEVoaGJtUnNaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzSmxjWFZsYzNSSVlXNWtiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN3eVEwRkJjVU03UVVGRGNrTXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5dzJRMEZCZFVNN1FVRkRka01zSzBOQlFYbERPMEZCUTNwRExHMUVRVUUyUXp0QlFVTTNReXh4UkVGQkswTTdRVUZETDBNc2RVUkJRV2xFTzBGQlEycEVMRzFEUVVFMlFqdEJRVVUzUWl3clEwRkJNRU03UVVGRE1VTXNLME5CUVRoRE8wRkJSemxETEZOQlFWTXNUVUZCVFN4RFFVRkRMRk5CUVdsQ08wbEJRemRDTEVsQlFVa3NVMEZCVXl4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJUdFJRVU01UWl4UFFVRlBMRk5CUVZNc1EwRkJRVHRMUVVOdVFqdFRRVUZOTzFGQlEwZ3NTVUZCU1N4VFFVRlRMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTTdVVUZEYWtNc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNVMEZCVXl4TFFVRkxMRlZCUVZVc1JVRkJSVHRaUVVONFF5eFRRVUZUTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlFUdFRRVU5xUXp0UlFVTkVMRTlCUVU4c1UwRkJVeXhIUVVGSExGTkJRVk1zUTBGQlF6dExRVU5vUXp0QlFVTk1MRU5CUVVNN1FVRkhSQ3hUUVVGVExFdEJRVXNzUTBGQkswTXNSMEZCVFN4RlFVRkZMRTlCUVRoQ0xFVkJRVVVzVFVGQkswSTdTVUZEYUVrc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTNSRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0TFFVTndRanRKUVVWRUxFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNXVUZCV1N4TFFVRkxMRmRCUVZjc1JVRkJSVHRSUVVONlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVONFFqdFRRVUZOTzFGQlEwZ3NSMEZCUnl4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8wdEJRM1JDTzBsQlJVUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRk8xRkJRMnBDTEdsQ1FVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0TFFVTnFRenRKUVVWRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RlFVRkZPMUZCUTJoQ0xFZEJRVWNzUTBGQlF5eFRRVUZUTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVONFFpeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZETjBJN1NVRkZSQ3hIUVVGSExFTkJRVU1zVVVGQlVTeEhRVUZITEU5QlFVOHNRMEZCUXp0SlFVTjJRaXhIUVVGSExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0SlFVVnlRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZIUkN4VFFVRlRMRzlDUVVGdlFpeERRVUZETEVkQlFXMUNPenRKUVVVM1F5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSVHRSUVVOWUxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPMHRCUTJwQ08wbEJSVVFzUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE1VTXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjRReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xRkJRMmhETEVsQlFVa3NUMEZCVHl4TlFVRk5MRXRCUVVzc1VVRkJVU3hGUVVGRk8xbEJRelZDTEVkQlFVY3NRMEZCUXl4TlFVRk5MSGxDUVVGUExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVc3NUVUZCVFN4RFFVRkRMRU5CUVVNN1UwRkRNME03UzBGRFNqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGTkJRVk1zUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZETjBNc1IwRkJSeXhEUVVGRExFMUJRVTBzZVVKQlFVOHNSMEZCUnl4RFFVRkRMRTFCUVUwc1IwRkJTeXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMHRCUTNKRU8wbEJSVVFzU1VGQlNTeEhRVUZITEVOQlFVTXNVMEZCVXl4TFFVRkxMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NTVUZCU1N4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFJRVU01UkN4SFFVRkhMRU5CUVVNc1NVRkJTU3g1UWtGQlVTeEhRVUZITEVOQlFVTXNTVUZCWXl4blFrRkJSeXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlJTeERRVUZETzB0QlF6bEZPMGxCUjBRc1NVRkJUU3hGUVVGRkxFZEJRVWNzWVVGQllTeEZRVUZGTEVOQlFVTTdTVUZETTBJc1IwRkJSeXhEUVVGRExFbEJRVWtzZVVKQlFWRXNSVUZCUlN4SFFVRkxMRWRCUVVjc1EwRkJReXhKUVVGakxFTkJRVVVzUTBGQlF6dEpRVVUxUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRPMGxCUTJwRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVkQlFVY3NSMEZCUnl4RFFVRkRMRkZCUVZFc1NVRkJTU3hOUVVGTkxFTkJRVU03U1VGSGRFTXNTVUZCU1N4RFFVRkRMR2RDUVVGTkxFTkJRVU1zYlVKQlFXMUNMRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUzBGQlN5eExRVUZMTEVWQlFVVTdVVUZEY2tRc1NVRkJTU3huUWtGQlRTeERRVUZETEU5QlFVOHNSVUZCUlR0WlFVTm9RaXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEdGQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzV1VGQlNTeEhRVUZETEdkQ1FVRk5MRU5CUVVNc1YwRkJWeXhKUVVGSExHZENRVUZOTEVOQlFVTXNUMEZCVHl4TlFVRkhMRU5CUVVNN1UwRkRPVVU3VVVGRFJDeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMR0ZCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRMUVVONFF6dEpRVVZFTERCQ1FVRm5RaXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVTFRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZIUkN4VFFVRlRMSFZDUVVGMVFpeERRVUZETEVkQlFYTkNPenRKUVVOdVJDeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSVHRSUVVObUxFZEJRVWNzUTBGQlF5eFJRVUZSTEVkQlFVY3NSVUZCUlN4RFFVRkRPMHRCUTNKQ08wbEJSVVFzUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE1VTXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjRReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xRkJRMmhETEVsQlFVa3NUMEZCVHl4TlFVRk5MRXRCUVVzc1VVRkJVU3hGUVVGRk8xbEJRelZDTEVkQlFVY3NRMEZCUXl4TlFVRk5MSGxDUVVGUExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVc3NUVUZCVFN4RFFVRkRMRU5CUVVNN1UwRkRNME03UzBGRFNqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGTkJRVk1zUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZETjBNc1IwRkJSeXhEUVVGRExFMUJRVTBzZVVKQlFVOHNSMEZCUnl4RFFVRkRMRTFCUVUwc1IwRkJTeXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMHRCUTNKRU8wbEJSVVFzU1VGQlNTeEhRVUZITEVOQlFVTXNVMEZCVXl4TFFVRkxMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NTVUZCU1N4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFJRVU01UkN4SFFVRkhMRU5CUVVNc1VVRkJVU3g1UWtGQlVTeEhRVUZITEVOQlFVTXNVVUZCYTBJc1owSkJRVWNzWjBKQlFVMHNRMEZCUXl4WFFVRlhMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFBRVUZQTEUxQlFVVXNRMEZCUXp0TFFVTjBSanRKUVVkRUxFbEJRVTBzUlVGQlJTeEhRVUZITEdGQlFXRXNSVUZCUlN4RFFVRkRPMGxCUXpOQ0xFZEJRVWNzUTBGQlF5eFJRVUZSTEhsQ1FVRlJMRVZCUVVVc1IwRkJTeXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZGTEVOQlFVTTdTVUZGTVVNc1NVRkJTU3hEUVVGRExHZENRVUZOTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVU3VVVGRk4wSXNTVUZCU1N4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFpRVU5vUWl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExHRkJRVWNzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1dVRkJTU3hIUVVGRExHZENRVUZOTEVOQlFVTXNWMEZCVnl4SlFVRkhMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eE5RVUZITEVOQlFVTTdVMEZET1VVN1VVRkZSQ3hIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEdGQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTjRRenRKUVVWRUxEQkNRVUZuUWl4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVVUxUWl4UFFVRlBMRWRCUVVjc1EwRkJRenRCUVVObUxFTkJRVU03UVVGRlJDeFRRVUZUTEdGQlFXRTdTVUZEYkVJc1NVRkJTU3hGUVVGRkxFZEJRVkVzUlVGQlJTeERRVUZETzBsQlEycENMRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRla01zUlVGQlJTeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03UzBGRE5VSTdVMEZCVFN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFZRVUZWTEV0QlFVc3NVVUZCVVN4RlFVRkZPMUZCUXpsRExFVkJRVVVzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1EwRkJRenRMUVVNeFFqdEpRVU5FTEU5QlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJRc1EwRkJRenRCUVVWRUxGTkJRVk1zVTBGQlV5eERRVUZETEVkQlFXMUNPMGxCUTJ4RExFZEJRVWNzUjBGQlJ5eHZRa0ZCYjBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU5vUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZETDBJc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF6dFpRVU5RTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1IwRkJSenRaUVVOYUxFbEJRVWtzUlVGQlJTeEhRVUZITEVOQlFVTXNTVUZCU1R0WlFVTmtMRTFCUVUwc1JVRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRUdFpRVU5zUWl4TlFVRk5MRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeEZRVUZGTzFsQlEzaENMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVTeEpRVUZKTEUxQlFVMDdXVUZEYUVNc1QwRkJUeXhGUVVGUUxGVkJRVkVzUjBGQmIwTTdaMEpCUTNoRExFOUJRVThzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFTkJRVU03V1VGRFJDeEpRVUZKTEVWQlFVb3NWVUZCU3l4SFFVRTJRanRuUWtGRE9VSXNjMEpCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOdVF5eFBRVUZQTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOMlFpeERRVUZETzFsQlEwUXNVVUZCVVR0blFrRkRTaXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEZGQlFWRXNTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRM0JETEVkQlFVY3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRwUWtGRGJFSTdaMEpCUTBRc1NVRkJTU3hIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTzI5Q1FVTnFRaXhwUWtGQlR5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkJPMmxDUVVOcVFqdFpRVU5NTEVOQlFVTTdVMEZEU2l4RFFVRkRMRU5CUVVFN1NVRkRUaXhEUVVGRExFTkJRVU1zUTBGQlFUdEJRVU5PTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmxCUVZrc1EwRkJReXhIUVVGelFqdEpRVU40UXl4SFFVRkhMRWRCUVVjc2RVSkJRWFZDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRia01zVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJReTlDTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNN1dVRkRWaXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVkQlFVYzdXVUZEV2l4UlFVRlJMRVZCUVVVc1IwRkJSeXhEUVVGRExGRkJRVkVzU1VGQlNTeEZRVUZGTzFsQlF6VkNMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVTdXVUZEY0VJc1VVRkJVU3hGUVVGRkxFZEJRVWNzUTBGQlF5eFJRVUZSTzFsQlEzUkNMRTlCUVU4c1JVRkJVQ3hWUVVGUkxFZEJRWFZETzJkQ1FVTXpReXhQUVVGUExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjRRaXhEUVVGRE8xbEJRMFFzU1VGQlNTeEZRVUZLTEZWQlFVc3NSMEZCTmtJN1owSkJRemxDTEhOQ1FVRlpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkRia01zVDBGQlR5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRka0lzUTBGQlF6dFpRVU5FTEZGQlFWRTdaMEpCUTBvc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFJRVUZSTEV0QlFVc3NWVUZCVlN4RlFVRkZPMjlDUVVOd1F5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN2FVSkJRMnhDTzJkQ1FVTkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJUdHZRa0ZEYWtJc2FVSkJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUVR0cFFrRkRha0k3V1VGRFRDeERRVUZETzFOQlEwb3NRMEZCUXl4RFFVRkJPMGxCUTA0c1EwRkJReXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4UFFVRlBMRU5CUVVNc1IwRkJiVUk3U1VGRGFFTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlF5OUNMRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVWc1F5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRk8xbEJRMnBDTEVsQlFVa3NXVUZCV1N4SFFVRkhMSEZDUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoRExFbEJRVWtzV1VGQldTeEZRVUZGTzJkQ1FVTmtMRWxCUVVrc1VVRkJVU3hIUVVGSExIbENRVUZsTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zV1VGQldTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOeVJTeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFRRVU5LTzFGQlJVUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhGUVVGRk8xbEJRMWdzYzBKQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGVrSTdVVUZGUkN4M1FrRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRNVUlzVDBGQlR5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1VVRkRla0lzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVVNc1IwRkJSenRaUVVOU0xFbEJRVWtzVVVGQlVTeEhRVUZITEhsQ1FVRmxMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSMEZCYzBNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU12Uml4SlFVRkpMRkZCUVZFc1NVRkJTU3hKUVVGSkxFVkJRVVU3WjBKQlEyeENMRTlCUVU4c1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJGQlF6VkNPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c01rSkJRVmtzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGQk8xRkJRM1pETEVOQlFVTXNRMEZCUXl4RFFVRkJPMGxCUTA0c1EwRkJReXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4VlFVRlZMRU5CUVVNc1IwRkJjMEk3U1VGRGRFTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlF5OUNMRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVWc1F5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRk8xbEJRMnBDTEVsQlFVa3NXVUZCV1N4SFFVRkhMSEZDUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoRExFbEJRVWtzV1VGQldTeEZRVUZGTzJkQ1FVTmtMRWxCUVVrc1VVRkJVU3hIUVVGSExIbENRVUZsTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zV1VGQldTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVONFJTeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFRRVU5LTzFGQlJVUXNkMEpCUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUXpGQ0xFOUJRVThzV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkJPMUZCUXpWQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRkRMRWRCUVVjN1dVRkRVaXhKUVVGSkxGRkJRVkVzUjBGQlJ5eDVRa0ZCWlN4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVkQlFYbERMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGNrY3NTVUZCU1N4UlFVRlJMRWxCUVVrc1NVRkJTU3hGUVVGRk8yZENRVU5zUWl4UFFVRlBMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dGhRVU0xUWp0UlFVTk1MRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZETEVOQlFVTTdXVUZEVUN3eVFrRkJXU3hEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVFN1VVRkRhRU1zUTBGQlF5eERRVUZETEVOQlFVRTdTVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeHJRa0ZCWlR0SlFVTllMRTFCUVUwc1VVRkJRVHRKUVVOT0xFOUJRVThzVTBGQlFUdEpRVU5RTEZWQlFWVXNXVUZCUVR0RFFVTmlMRU5CUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2JHOWhaR2x1WnlCbWNtOXRJQ2N1TGk5MWRHbHNMMnh2WVdScGJtY25YRzVwYlhCdmNuUWdZMjl1Wm1sbklHWnliMjBnSnk0dUwzTjBiM0psTDJOdmJtWnBaeWRjYm1sdGNHOXlkQ0J6ZEdGMGRYTWdabkp2YlNBbkxpNHZjM1J2Y21VdmMzUmhkSFZ6SjF4dWFXMXdiM0owSUcxdlkydE5ZVzVoWjJWeUlHWnliMjBnSnk0dmJXOWphMDFoYm1GblpYSW5YRzVwYlhCdmNuUWdZMkZqYUdWTllXNWhaMlZ5SUdaeWIyMGdKeTR2WTJGamFHVk5ZVzVoWjJWeUoxeHVhVzF3YjNKMElITmxjM05wYjI1TllXNWhaMlZ5SUdaeWIyMGdKeTR2YzJWemMybHZiazFoYm1GblpYSW5YRzVwYlhCdmNuUWdjbVZ6Y0c5dWMyVklZVzVrYkdWeUlHWnliMjBnSnk0dmNtVnpjRzl1YzJWSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWElnWm5KdmJTQmNJaTR2WkhWeVlYUnBiMjVTWlhCdmNuUmxjbHdpWEc1cGJYQnZjblFnZFhKc0lHWnliMjBnSnk0dUwzVjBhV3d2ZFhKc0oxeHVhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpWEc1cGJYQnZjblFnWlhKeWIzSklZVzVrYkdWeUlHWnliMjBnWENJdUwyVnljbTl5U0dGdVpHeGxjbHdpTzF4dWFXMXdiM0owSUhzZ1kyRjBZMmhJWVc1a2JHVnlJSDBnWm5KdmJTQW5MaTlqWVhSamFFaGhibVJzWlhJbk8xeHVYRzR2THlEbW9Memx2SS9sakpaMWNteGNibVoxYm1OMGFXOXVJR1p2Y20xaGRDaHZjbWxuYVc1VmNtdzZJSE4wY21sdVp5a2dlMXh1SUNBZ0lHbG1JQ2h2Y21sbmFXNVZjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjQ2NwS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdmNtbG5hVzVWY214Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2RYSnNVR1Z5Wm1sNElEMGdZMjl1Wm1sbkxuVnliRkJsY21acGVEdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VkWEpzVUdWeVptbDRJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIVnliRkJsY21acGVDQTlJR052Ym1acFp5NTFjbXhRWlhKbWFYZ29LVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIxY214UVpYSm1hWGdnS3lCdmNtbG5hVzVWY213N1hHNGdJQ0FnZlZ4dWZWeHVYRzR2THlEbWlZRG1uSW5vcjdmbXNZTGxqNUhsaDdybGlZM3BuSURvcG9IbGdacm5tb1RrdW92bWc0VmNibVoxYm1OMGFXOXVJSEJ5WlVSdlBGUWdaWGgwWlc1a2N5QkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dVBpaHZZbW82SUZRc0lISmxjMjlzZG1VNklDaDJZV3gxWlQ4NklHRnVlU2tnUFQ0Z2RtOXBaQ3dnY21WcVpXTjBQem9nS0hKbFlYTnZiajg2SUdGdWVTa2dQVDRnZG05cFpDazZJRlFnZTF4dUlDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtSmxabTl5WlZObGJtUWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vdVltVm1iM0psVTJWdVpDZ3BPMXh1SUNBZ0lIMWNiaUFnSUNBdkx5RG5tYnZsdlpYbWdJSGxwTEhtbFlqdnZJenBoNDNscEkzbm1idmx2WlhvcnFIbWxiQmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BUMDlJRndpZFc1a1pXWnBibVZrWENJcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQTlJREE3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDc3JPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h2WW1vdWMyaHZkMHh2WVdScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnYkc5aFpHbHVaeTV6YUc5M0tHOWlhaTV6YUc5M1RHOWhaR2x1WnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tDRnZZbW91YjNKcFoybHVWWEpzS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTV2Y21sbmFXNVZjbXdnUFNCdlltb3VkWEpzTzF4dUlDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ1ptOXliV0YwS0c5aWFpNTFjbXdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJRzlpYWk1ZmNtVnpiMngyWlNBOUlISmxjMjlzZG1VN1hHNGdJQ0FnYjJKcUxsOXlaV3BsWTNRZ1BTQnlaV3BsWTNRN1hHNWNiaUFnSUNCeVpYUjFjbTRnYjJKcU8xeHVmVnh1WEc0dkx5RG1vTHpsdkkvbGpKYmxwSVRua0lib3I3Zm1zWUxubW9Sdlltcmxob1hscnJsY2JtWjFibU4wYVc5dUlHbHVhWFJwWVd4cGVtVlNaWEYxWlhOMFQySnFLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRwSUh0Y2JseHVJQ0FnSUdsbUlDZ2hiMkpxTG1SaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtUmhkR0VnUFNCN2ZUdGNiaUFnSUNCOVhHNGdJQ0FnWEc0Z0lDQWdiMkpxTG1obFlXUmxjaUE5SUc5aWFpNW9aV0ZrWlhJZ1B5QnZZbW91YUdWaFpHVnlJRG9nZTMwN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1YzJWMFNHVmhaR1Z5SUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQm9aV0ZrWlhJZ1BTQmpiMjVtYVdjdWMyVjBTR1ZoWkdWeUtDazdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYUdWaFpHVnlJRDA5UFNBbmIySnFaV04wSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtaGxZV1JsY2lBOUlIc3VMaTV2WW1vdWFHVmhaR1Z5TENBdUxpNW9aV0ZrWlhKOU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG5ObGRFaGxZV1JsY2lBOVBUMGdKMjlpYW1WamRDY3BJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtaGxZV1JsY2lBOUlIc3VMaTV2WW1vdWFHVmhaR1Z5TENBdUxpNWpiMjVtYVdjdWMyVjBTR1ZoWkdWeWZUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iMkpxTG05eWFXZHBibFZ5YkNBaFBUMGdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1ZFhKc0lDWW1JSE4wWVhSMWN5NXpaWE56YVc5dUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1a1lYUmhJRDBnZXlBdUxpNXZZbW91WkdGMFlTQmhjeUJ2WW1wbFkzUXNJRnRqYjI1bWFXY3VjMlZ6YzJsdmJrNWhiV1ZkT2lCemRHRjBkWE11YzJWemMybHZiaUI5TzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SU9XbWd1YWVuT2FjaWVXRnFPV3hnT1dQZ3VhVnNPKzhqT1dJbWVhM3UrV0tvRnh1SUNBZ0lHTnZibk4wSUdka0lEMGdaMlYwUjJ4dlltRnNSR0YwWVNncE8xeHVJQ0FnSUc5aWFpNWtZWFJoSUQwZ2V5QXVMaTVuWkN3Z0xpNHViMkpxTG1SaGRHRWdZWE1nYjJKcVpXTjBJSDA3WEc1Y2JpQWdJQ0J2WW1vdWJXVjBhRzlrSUQwZ2IySnFMbTFsZEdodlpDQjhmQ0FuUjBWVUp6dGNiaUFnSUNCdlltb3VaR0YwWVZSNWNHVWdQU0J2WW1vdVpHRjBZVlI1Y0dVZ2ZId2dKMnB6YjI0bk8xeHVYRzRnSUNBZ0x5OGc1YWFDNXA2YzZLKzM1ckdDNUxpTjVwaXZSMFZVNzd5TTVZaVo1WnlvVlZKTTVMaXQ2SWVxNVlxbzVZcWc1TGlLNTVtNzViMlY1b0NCNVpLTTVZV281YkdBNVkrQzVwV3dYRzRnSUNBZ2FXWWdLQ0ZqYjI1bWFXY3VaRzlPYjNSVmMyVlJkV1Z5ZVZOMGNtbHVaeUFtSmlCdlltb3ViV1YwYUc5a0lDRTlQU0JjSWtkRlZGd2lLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxuVnliQ0E5SUhWeWJDNXpaWFJRWVhKaGJYTW9iMkpxTG5WeWJDd2dleUJiWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsWFRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjRnZlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdiMkpxTG5WeWJDQTlJSFZ5YkM1elpYUlFZWEpoYlhNb2IySnFMblZ5YkN3Z1oyUXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdWMzUmhjblFvYjJKcUtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCdlltbzdYRzU5WEc1Y2JpOHZJT2Fndk9XOGorV01sdVdraE9lUWh1UzRpdVM4b09hV2grUzd0dWVhaEc5aWF1V0doZVd1dVZ4dVpuVnVZM1JwYjI0Z2FXNXBkR2xoYkdsNlpWVndiRzloWkVacGJHVlBZbW9vYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dlMXh1SUNBZ0lHbG1JQ2doYjJKcUxtWnZjbTFFWVhSaEtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1bWIzSnRSR0YwWVNBOUlIdDlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHOWlhaTVvWldGa1pYSWdQU0J2WW1vdWFHVmhaR1Z5SUQ4Z2IySnFMbWhsWVdSbGNpQTZJSHQ5TzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5Mbk5sZEVobFlXUmxjaUE5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2FHVmhaR1Z5SUQwZ1kyOXVabWxuTG5ObGRFaGxZV1JsY2lncE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR2hsWVdSbGNpQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1b1pXRmtaWElnUFNCN0xpNHViMkpxTG1obFlXUmxjaXdnTGk0dWFHVmhaR1Z5ZlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTV6WlhSSVpXRmtaWElnUFQwOUlDZHZZbXBsWTNRbktTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1b1pXRmtaWElnUFNCN0xpNHViMkpxTG1obFlXUmxjaXdnTGk0dVkyOXVabWxuTG5ObGRFaGxZV1JsY24wN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOWlhaTV2Y21sbmFXNVZjbXdnSVQwOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMblZ5YkNBbUppQnpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91Wm05eWJVUmhkR0VnUFNCN0lDNHVMbTlpYWk1bWIzSnRSR0YwWVNCaGN5QnZZbXBsWTNRc0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJpQjlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZVdGcU9XeGdPV1BndWFWc08rOGpPV0ltZWEzdStXS29GeHVJQ0FnSUdOdmJuTjBJR2RrSUQwZ1oyVjBSMnh2WW1Gc1JHRjBZU2dwTzF4dUlDQWdJRzlpYWk1bWIzSnRSR0YwWVNBOUlIc2dMaTR1WjJRc0lDNHVMbTlpYWk1bWIzSnRSR0YwWVNCOU8xeHVYRzRnSUNBZ2FXWWdLQ0ZqYjI1bWFXY3VaRzlPYjNSVmMyVlJkV1Z5ZVZOMGNtbHVaeWtnZTF4dUlDQWdJQ0FnSUNBdkx5RGxzSWJubWJ2cG1ZYm1nSUhrdVovbHVLYmxuS2gxY216a3VJcGNiaUFnSUNBZ0lDQWdhV1lnS0hOMFlYUjFjeTV6WlhOemFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdkWEpzTG5ObGRGQmhjbUZ0Y3lodlltb3VkWEpzTENCN0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJpQjlLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBdkx5RGxoYWpsc1lEbGo0TG1sYkRsa0l6bWw3Ym1sTDdsbktoMWNtemt1SXBjYmlBZ0lDQWdJQ0FnYjJKcUxuVnliQ0E5SUhWeWJDNXpaWFJRWVhKaGJYTW9iMkpxTG5WeWJDd2daMlFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSXVjM1JoY25Rb2IySnFLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnZZbW83WEc1OVhHNWNibVoxYm1OMGFXOXVJR2RsZEVkc2IySmhiRVJoZEdFb0tTQjdYRzRnSUNBZ2JHVjBJR2RrT2lCaGJua2dQU0I3ZlR0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVuYkc5aVlXeEVZWFJoSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1oyUWdQU0JqYjI1bWFXY3VaMnh2WW1Gc1JHRjBZU2dwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NW5iRzlpWVd4RVlYUmhJRDA5UFNCY0ltOWlhbVZqZEZ3aUtTQjdYRzRnSUNBZ0lDQWdJR2RrSUQwZ1kyOXVabWxuTG1kc2IySmhiRVJoZEdFN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm5aRHRjYm4xY2JseHVablZ1WTNScGIyNGdaRzlTWlhGMVpYTjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRwSUh0Y2JpQWdJQ0J2WW1vZ1BTQnBibWwwYVdGc2FYcGxVbVZ4ZFdWemRFOWlhaWh2WW1vcE8xeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSGQ0TG5KbGNYVmxjM1FvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkWEpzT2lCdlltb3VkWEpzTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2IySnFMbVJoZEdFc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WlhSb2IyUTZJRzlpYWk1dFpYUm9iMlFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQm9aV0ZrWlhJNklHOWlhaTVvWldGa1pYSWdmSHdnZTMwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaFZIbHdaVG9nYjJKcUxtUmhkR0ZVZVhCbElIeDhJQ2RxYzI5dUp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQjNlQzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tISmxjem9nZDNndVIyVnVaWEpoYkVOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxuTjVjM1JsYlVWeWNtOXlLRzlpYWl3Z2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdVkyOXRjR3hsZEdVZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdVkyOXRjR3hsZEdVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0c5aWFpNXphRzkzVEc5aFpHbHVaeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMkZrYVc1bkxtaHBaR1VvS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJrYjFWd2JHOWhaRVpwYkdVb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJRzlpYWlBOUlHbHVhWFJwWVd4cGVtVlZjR3h2WVdSR2FXeGxUMkpxS0c5aWFpazdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnZDNndWRYQnNiMkZrUm1sc1pTaDdYRzRnSUNBZ0lDQWdJQ0FnSUNCMWNtdzZJRzlpYWk1MWNtd3NYRzRnSUNBZ0lDQWdJQ0FnSUNCbWFXeGxVR0YwYURvZ2IySnFMbVpwYkdWUVlYUm9JSHg4SUNjbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1GdFpUb2diMkpxTG01aGJXVWdmSHdnSnljc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtYjNKdFJHRjBZVG9nYjJKcUxtWnZjbTFFWVhSaExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWalkyVnpjeWh5WlhNNklIZDRMbFZ3Ykc5aFpFWnBiR1ZUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdaaGFXd29jbVZ6T2lCM2VDNUhaVzVsY21Gc1EyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZja2hoYm1Sc1pYSXVjM2x6ZEdWdFJYSnliM0lvYjJKcUxDQnlaWE1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjF3YkdWMFpTZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNWpiMjF3YkdWMFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2IySnFMbk5vYjNkTWIyRmthVzVuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3h2WVdScGJtY3VhR2xrWlNncFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgwcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUhKbGNYVmxjM1FvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlrNklHRnVlU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2IySnFJRDBnY0hKbFJHOG9iMkpxTENCeVpYTnZiSFpsTENCeVpXcGxZM1FwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3ViVzlqYTBwemIyNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J0YjJOclVtVnpjRzl1YzJVZ1BTQnRiMk5yVFdGdVlXZGxjaTVuWlhRb2IySnFLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h0YjJOclVtVnpjRzl1YzJVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY21WemNHOXVjMlVnUFNCeVpYTndiMjV6WlVoaGJtUnNaWEl1Y21WemNHOXVjMlZHYjNKU1pYRjFaWE4wS0cxdlkydFNaWE53YjI1elpTd2diMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2h5WlhOd2IyNXpaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCcFppQW9iMkpxTG1OaFkyaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZV05vWlUxaGJtRm5aWEl1WjJWMEtHOWlhaWs3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnpaWE56YVc5dVRXRnVZV2RsY2k1dFlXbHVLRzlpYWlrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5U1pYRjFaWE4wS0c5aWFpbGNiaUFnSUNBZ0lDQWdmU2t1ZEdobGJpZ29jbVZ6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSXVjbVZ6Y0c5dWMyVkdiM0pTWlhGMVpYTjBLSEpsY3lCaGN5QjNlQzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwTENCdlltb3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEpsYzNCdmJuTmxJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE53YjI1elpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaGxLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMkYwWTJoSVlXNWtiR1Z5S0dVc0lHOWlhaXdnY21WcVpXTjBLVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDBwWEc1OVhHNWNibVoxYm1OMGFXOXVJSFZ3Ykc5aFpFWnBiR1VvYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpazZJR0Z1ZVNCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiMkpxSUQwZ2NISmxSRzhvYjJKcUxDQnlaWE52YkhabExDQnlaV3BsWTNRcE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1Ylc5amEwcHpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdGIyTnJVbVZ6Y0c5dWMyVWdQU0J0YjJOclRXRnVZV2RsY2k1blpYUW9iMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodGIyTnJVbVZ6Y0c5dWMyVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpjRzl1YzJVZ1BTQnlaWE53YjI1elpVaGhibVJzWlhJdWNtVnpjRzl1YzJWR2IzSlZjR3h2WVdSR2FXeGxLRzF2WTJ0U1pYTndiMjV6WlN3Z2IySnFLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE53YjI1elpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNXRZV2x1S0c5aWFpa3VkR2hsYmlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1pHOVZjR3h2WVdSR2FXeGxLRzlpYWlsY2JpQWdJQ0FnSUNBZ2ZTa3VkR2hsYmlnb2NtVnpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpjRzl1YzJVZ1BTQnlaWE53YjI1elpVaGhibVJzWlhJdWNtVnpjRzl1YzJWR2IzSlZjR3h2WVdSR2FXeGxLSEpsY3lCaGN5QjNlQzVWY0d4dllXUkdhV3hsVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MExDQnZZbW9wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hKbGMzQnZibk5sSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2h5WlhOd2IyNXpaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBwTG1OaGRHTm9LQ2hsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYUmphRWhoYm1Sc1pYSW9aU3dnYjJKcUxDQnlaV3BsWTNRcFhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJR1p2Y20xaGRDeGNiaUFnSUNCeVpYRjFaWE4wTEZ4dUlDQWdJSFZ3Ykc5aFpFWnBiR1ZjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbnZhciBqc29uU3VwZXJzZXRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2pzb25TdXBlcnNldFwiKTtcbmZ1bmN0aW9uIHJlc3BvbnNlRm9yUmVxdWVzdChyZXMsIG9iaikge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAob2JqLmRhdGFUeXBlID09PSAnanNvbicgJiYgdHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBqc29uU3VwZXJzZXRfMS5kZWZhdWx0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIHZhciByZWFsRGF0YSA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGdW5jdGlvbiBzdWNjZXNzRGF0YSBvY2N1ciBlcnJvcjogXCIgKyBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb2JqLm5vQ2FjaGVGbGFzaCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZWFsRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhbERhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyXzEuZGVmYXVsdC5zZXQob2JqLCByZWFsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICdsb2dpYy1lcnJvcicsIHJlczogcmVzIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IHsgdHlwZTogJ2h0dHAtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlc3BvbnNlRm9yVXBsb2FkRmlsZShyZXMsIG9iaikge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBqc29uU3VwZXJzZXRfMS5kZWZhdWx0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIHZhciByZWFsRGF0YSA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGdW5jdGlvbiBzdWNjZXNzRGF0YSBvY2N1ciBlcnJvcjogXCIgKyBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWFsRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgeyB0eXBlOiAnaHR0cC1lcnJvcicsIHJlczogcmVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHJlc3BvbnNlRm9yUmVxdWVzdDogcmVzcG9uc2VGb3JSZXF1ZXN0LFxuICAgIHJlc3BvbnNlRm9yVXBsb2FkRmlsZTogcmVzcG9uc2VGb3JVcGxvYWRGaWxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WemNHOXVjMlZJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5eVpYTndiMjV6WlVoaGJtUnNaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZEY0VNc2JVUkJRVFpETzBGQlF6ZERMQ3REUVVGNVF6dEJRVU42UXl3clEwRkJlVU03UVVGRGVrTXNkVVJCUVdsRU8wRkJRMnBFTEcxRVFVRTJRenRCUVVVM1F5eHhSRUZCSzBNN1FVRkZMME1zVTBGQlV5eHJRa0ZCYTBJc1EwRkRka0lzUjBGQmIwTXNSVUZEY0VNc1IwRkJiVUk3U1VGRmJrSXNTVUZCU1N4SFFVRkhMRU5CUVVNc1ZVRkJWU3hMUVVGTExFZEJRVWNzUlVGQlJUdFJRVVY0UWl3d1FrRkJaMElzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkhNVUlzU1VGQlNTeEhRVUZITEVOQlFVTXNVVUZCVVN4TFFVRkxMRTFCUVUwc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eEpRVUZKTEV0QlFVc3NVVUZCVVN4RlFVRkZPMWxCUTNwRUxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NjMEpCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdXVUZEYkVNc1NVRkJTVHRuUWtGRFFTeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMkZCUTI1RE8xbEJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdaMEpCUTFJc1NVRkJSeXhIUVVGSExFTkJRVU1zVlVGQlZTeEZRVUZGTzI5Q1FVTm1MRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdhVUpCUTNSQ08zRkNRVUZOTzI5Q1FVTklMSE5DUVVGWkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGJFTXNUMEZCVHp0cFFrRkRWanRoUVVOS08xTkJRMG83VVVGRlJDeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1dVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hMUVVGTExGTkJRVk1zU1VGQlNTeEhRVUZITEVOQlFVTXNXVUZCV1N4SFFVRkhMR2RDUVVGTkxFTkJRVU1zV1VGQllTeEZRVUZGTzFsQlJUZEhMSGRDUVVGakxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdXVUZETlVJc1QwRkJUeXgzUWtGQll5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOMFF6dGhRVUZOTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMWxCUlhoRExFbEJRVWtzVVVGQlVTeEhRVUZ6UXl4RlFVRkZMRU5CUVVNN1dVRkRja1FzU1VGQlNUdG5Ra0ZEUVN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFhRVUZYTEV0QlFVc3NWVUZCVlN4RlFVRkZPMjlDUVVNeFF5eFJRVUZSTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmxDUVVNelF6dHhRa0ZCVFR0dlFrRkRTQ3hSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXp0cFFrRkRka0k3WVVGRFNqdFpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMmRDUVVOU0xFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNiME5CUVc5RExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZETTBRN1dVRkRSQ3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkZia0lzU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU51UXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJsQ1FVTjZRanR4UWtGQlRUdHZRa0ZEU0N4UFFVRlBMRkZCUVZFc1EwRkJRenRwUWtGRGJrSTdZVUZEU2p0WlFVVkVMSE5DUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJRenRUUVVOdVF6dGhRVUZOTzFsQlJVZ3NUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hoUVVGaExFVkJRVVVzUjBGQlJ5eExRVUZCTEVWQlFVVXNRMEZCUVR0VFFVTnlRenRMUVVOS08xTkJRVTA3VVVGRlNDeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRmxCUVZrc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlJTeERRVUZCTzB0QlEzQkRPMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zY1VKQlFYRkNMRU5CUXpGQ0xFZEJRWFZETEVWQlEzWkRMRWRCUVhOQ08wbEJSWFJDTEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1MwRkJTeXhIUVVGSExFVkJRVVU3VVVGRmVFSXNNRUpCUVdkQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUnpGQ0xFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNTVUZCU1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVNNVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMSE5DUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJ4RExFbEJRVWs3WjBKQlEwRXNSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRoUVVOdVF6dFpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMmRDUVVOU0xFbEJRVWNzUjBGQlJ5eERRVUZETEZWQlFWVXNSVUZCUlR0dlFrRkRaaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmxDUVVOMFFqdHhRa0ZCVFR0dlFrRkRTQ3h6UWtGQldTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03YjBKQlEyeERMRTlCUVU4N2FVSkJRMVk3WVVGRFNqdFRRVU5LTzFGQlJVUXNTVUZCU1N4blFrRkJUU3hEUVVGRExGbEJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExGbEJRVmtzUzBGQlN5eFRRVUZUTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmxCUVZrc1IwRkJSeXhuUWtGQlRTeERRVUZETEZsQlFXRXNSVUZCUlR0WlFVVTNSeXgzUWtGQll5eERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMWxCUXpWQ0xFOUJRVThzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGVrTTdZVUZCVFN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVWNFF5eEpRVUZKTEZGQlFWRXNSMEZCYzBNc1JVRkJSU3hEUVVGRE8xbEJRM0pFTEVsQlFVazdaMEpCUTBFc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNWMEZCVnl4TFFVRkxMRlZCUVZVc1JVRkJSVHR2UWtGRE1VTXNVVUZCVVN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRwUWtGRE0wTTdjVUpCUVUwN2IwSkJRMGdzVVVGQlVTeEhRVUZITEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNN2FVSkJRM1pDTzJGQlEwbzdXVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRuUWtGRFVpeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRzlEUVVGdlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUXpORU8xbEJSVVFzU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yZENRVU51UXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJGQlEzcENPMmxDUVVGTk8yZENRVU5JTEU5QlFVOHNVVUZCVVN4RFFVRkRPMkZCUTI1Q08xTkJRMG83WVVGQlRUdFpRVVZJTEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVc1lVRkJZU3hGUVVGRkxFZEJRVWNzUzBGQlFTeEZRVUZGTEVOQlFVRTdVMEZEY2tNN1MwRkRTanRUUVVGTk8xRkJSVWdzVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4WlFVRlpMRVZCUVVVc1IwRkJSeXhMUVVGQkxFVkJRVVVzUTBGQlFUdExRVU53UXp0QlFVTk1MRU5CUVVNN1FVRkZSQ3hyUWtGQlpUdEpRVU5ZTEd0Q1FVRnJRaXh2UWtGQlFUdEpRVU5zUWl4eFFrRkJjVUlzZFVKQlFVRTdRMEZEZUVJc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4dWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHZjbVZ4ZFdWemRFaGhibVJzWlhJblhHNXBiWEJ2Y25RZ1pYSnliM0pJWVc1a2JHVnlJR1p5YjIwZ0p5NHZaWEp5YjNKSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUdOaFkyaGxUV0Z1WVdkbGNpQm1jbTl0SUNjdUwyTmhZMmhsVFdGdVlXZGxjaWRjYm1sdGNHOXlkQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlJR1p5YjIwZ0p5NHZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpZGNibWx0Y0c5eWRDQnpaWE56YVc5dVRXRnVZV2RsY2lCbWNtOXRJQ2N1TDNObGMzTnBiMjVOWVc1aFoyVnlKMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aU8xeHVhVzF3YjNKMElHcHpiMjVUZFhCbGNuTmxkQ0JtY205dElDY3VMaTkxZEdsc0wycHpiMjVUZFhCbGNuTmxkQ2RjYmx4dVpuVnVZM1JwYjI0Z2NtVnpjRzl1YzJWR2IzSlNaWEYxWlhOMEtGeHVJQ0FnSUhKbGN6b2dkM2d1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZEN4Y2JpQWdJQ0J2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1WEc0cE9pQmhibmtnZTF4dUlDQWdJR2xtSUNoeVpYTXVjM1JoZEhWelEyOWtaU0E5UFQwZ01qQXdLU0I3WEc1Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1bGJtUW9iMkpxS1R0Y2JseHVJQ0FnSUNBZ0lDQXZMeURvcjdmbXNZTG1vTHpsdkkva3VMcHFjMjl1Nzd5TTVMMkc2TCtVNVp1ZTVMcUdjM1J5YVc1bjc3eU02SyswNXBpTzVZYUY1YTY1NUxpdDVZK3Y2SU85NWEyWTVaeW81YSs4NkllMDVMMi81YjZYU21GMllWTmpjbWx3ZE9XOGd1VzR1T2VhaE9XdGwrZXNwbHh1SUNBZ0lDQWdJQ0JwWmlBb2IySnFMbVJoZEdGVWVYQmxJRDA5UFNBbmFuTnZiaWNnSmlZZ2RIbHdaVzltSUhKbGN5NWtZWFJoSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVnpMbVJoZEdFZ1BTQnFjMjl1VTNWd1pYSnpaWFFvY21WekxtUmhkR0VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYTXVaR0YwWVNBOUlFcFRUMDR1Y0dGeWMyVW9jbVZ6TG1SaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0c5aWFpNWpZWFJqYUVWeWNtOXlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lobEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNraGhibVJzWlhJdWJHOW5hV05GY25KdmNpaHZZbW9zSUhKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxteHZaMmx1VkhKcFoyZGxjaUVvY21WekxtUmhkR0VwSUNZbUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ0lUMDlJSFZ1WkdWbWFXNWxaQ0FtSmlCdlltb3VjbVZNYjJkcGJrTnZkVzUwSUR3Z1kyOXVabWxuTG5KbFRHOW5hVzVNYVcxcGRDRXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2VadStXOWxlYUFnZVdrc2VhVmlPKzhqT1M0bE9tSGplaXZsZWFzb2VhVnNPUzRqZWkyaGVpL2grbUZqZWU5cmx4dUlDQWdJQ0FnSUNBZ0lDQWdjMlZ6YzJsdmJrMWhibUZuWlhJdVpHVnNVMlZ6YzJsdmJpZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGNYVmxjM1JJWVc1a2JHVnlMbkpsY1hWbGMzUW9iMkpxS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiMjVtYVdjdWMzVmpZMlZ6YzFSeWFXZG5aWElvY21WekxtUmhkR0VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbWpxWGxqNlBvdjVUbG01N21pSkRsaXAvbm9JRmNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnlaV0ZzUkdGMFlUb2djM1J5YVc1bklId2dTVUZ1ZVU5aWFtVmpkQ0I4SUVGeWNtRjVRblZtWm1WeUlEMGdYQ0pjSWp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdWMzVmpZMlZ6YzBSaGRHRWdQVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WaGJFUmhkR0VnUFNCamIyNW1hV2N1YzNWalkyVnpjMFJoZEdFb2NtVnpMbVJoZEdFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWVd4RVlYUmhJRDBnY21WekxtUmhkR0U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9YQ0pHZFc1amRHbHZiaUJ6ZFdOalpYTnpSR0YwWVNCdlkyTjFjaUJsY25KdmNqb2dYQ0lnS3lCbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaGIySnFMbTV2UTJGamFHVkdiR0Z6YUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PUzR1dVM2aHVTL25laXZnZW1odGVtZG91UzRqZW1YcXVlRGdlKzhqT1dJbWVTNGplV2JudWl3ZysrOGpPV1BxdWFZcitlOGsrV3RtT2FjZ09hV3NPYVZzT2FOcnUrOGpPVytoZVM0aSthc29laS9tK1dGcGVXR2plZVVxRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxuTjFZMk5sYzNNZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdWMzVmpZMlZ6Y3loeVpXRnNSR0YwWVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxZV3hFWVhSaE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9lOGsrV3RtT1d0bU9XQ3FGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGamFHVk5ZVzVoWjJWeUxuTmxkQ2h2WW1vc0lISmxZV3hFWVhSaEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPYU9wZVdQbytpL2xPV2JudVdrc2VpMHBlZWdnVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnZXlCMGVYQmxPaUFuYkc5bmFXTXRaWEp5YjNJbkxDQnlaWE1nZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2FIUjBjSFBvdjVUbG01N25pcmJtZ0lIbm9JSHBuWjR5TURCY2JpQWdJQ0FnSUNBZ2RHaHliM2NnZXlCMGVYQmxPaUFuYUhSMGNDMWxjbkp2Y2ljc0lISmxjeUI5WEc0Z0lDQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnlaWE53YjI1elpVWnZjbFZ3Ykc5aFpFWnBiR1VvWEc0Z0lDQWdjbVZ6T2lCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwTEZ4dUlDQWdJRzlpYWpvZ1NWVndiRzloWkVacGJHVlBjSFJwYjI1Y2JpazZJR0Z1ZVNCN1hHNGdJQ0FnYVdZZ0tISmxjeTV6ZEdGMGRYTkRiMlJsSUQwOVBTQXlNREFwSUh0Y2JseHVJQ0FnSUNBZ0lDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUxtVnVaQ2h2WW1vcE8xeHVYRzRnSUNBZ0lDQWdJQzh2SU9XR2hlV3V1ZVM0cmVXUHIraUR2ZVd0bU9XY3FPV3Z2T2lIdE9TOXYrVytsMHBoZG1GVFkzSnBjSFRsdklMbHVMam5tb1RsclpmbnJLWmNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ5WlhNdVpHRjBZU0E5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGN5NWtZWFJoSUQwZ2FuTnZibE4xY0dWeWMyVjBLSEpsY3k1a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WekxtUmhkR0VnUFNCS1UwOU9MbkJoY25ObEtISmxjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWh2WW1vdVkyRjBZMmhGY25KdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaWEp5YjNKSVlXNWtiR1Z5TG14dloybGpSWEp5YjNJb2IySnFMQ0J5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1c2IyZHBibFJ5YVdkblpYSWhLSEpsY3k1a1lYUmhLU0FtSmlCdlltb3VjbVZNYjJkcGJrTnZkVzUwSUNFOVBTQjFibVJsWm1sdVpXUWdKaVlnYjJKcUxuSmxURzluYVc1RGIzVnVkQ0E4SUdOdmJtWnBaeTV5WlV4dloybHVUR2x0YVhRaEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSGxwTEhtbFlqdnZJemt1SlRwaDQzb3I1WG1yS0htbGJEa3VJM290b1hvdjRmcGhZM252YTVjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG1SbGJGTmxjM05wYjI0b0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMjl1Wm1sbkxuTjFZMk5sYzNOVWNtbG5aMlZ5S0hKbGN5NWtZWFJoS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVvNmw1WStqNkwrVTVadWU1b2lRNVlxZjU2Q0JYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZoYkVSaGRHRTZJSE4wY21sdVp5QjhJRWxCYm5sUFltcGxZM1FnZkNCQmNuSmhlVUoxWm1abGNpQTlJRndpWENJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxuTjFZMk5sYzNORVlYUmhJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFlXeEVZWFJoSUQwZ1kyOXVabWxuTG5OMVkyTmxjM05FWVhSaEtISmxjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WldGc1JHRjBZU0E5SUhKbGN5NWtZWFJoTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLRndpUm5WdVkzUnBiMjRnYzNWalkyVnpjMFJoZEdFZ2IyTmpkWElnWlhKeWIzSTZJRndpSUNzZ1pTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2IySnFMbk4xWTJObGMzTWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hKbFlXeEVZWFJoS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxZV3hFWVhSaE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNW82bDVZK2o2TCtVNVp1ZTVhU3g2TFNsNTZDQlhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QjdJSFI1Y0dVNklDZHNiMmRwWXkxbGNuSnZjaWNzSUhKbGN5QjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJvZEhSd2MraS9sT1dibnVlS3R1YUFnZWVnZ2VtZG5qSXdNRnh1SUNBZ0lDQWdJQ0IwYUhKdmR5QjdJSFI1Y0dVNklDZG9kSFJ3TFdWeWNtOXlKeXdnY21WeklIMWNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQnlaWE53YjI1elpVWnZjbEpsY1hWbGMzUXNYRzRnSUNBZ2NtVnpjRzl1YzJWR2IzSlZjR3h2WVdSR2FXeGxYRzU5TzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RIYW5kbGVyXCIpO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xudmFyIGNoZWNrU2Vzc2lvblByb21pc2UgPSBudWxsO1xuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3eC5jaGVja1Nlc3Npb24oKVwiKTtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgd3guY2hlY2tTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfY2hlY2tTZXNzaW9uJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tTZXNzaW9uUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSB7XG4gICAgaWYgKCFzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKSB7XG4gICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrTG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgaWYgKGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSkge1xuICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG52YXIgbG9naW5Qcm9taXNlID0gbnVsbDtcbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbG9naW5Qcm9taXNlO1xufVxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3d4LmxvZ2luJyk7XG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUyU2Vzc2lvbihyZXMuY29kZSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VbY29kZSDojrflj5blpLHotKVdXCIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfbG9naW4nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogcmVzLmVyck1zZyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb24pIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSxcbiAgICAgICAgZGF0YTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjb2RlMlNlc3Npb24oY29kZSkge1xuICAgIHZhciBkYXRhO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSB8fCB7fTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZSkge1xuICAgICAgICBkYXRhW2NvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZV0gPSBjb2RlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGF0YS5jb2RlID0gY29kZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQuZm9ybWF0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwpLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIG1ldGhvZDogY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgICAgIGhlYWRlcjogdHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nID8gY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIoKSA6IGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ucmVwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnJlcG9ydCwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5zdWNjZXNzKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmdldEVycm9yTXNnKHJlcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVwiIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRlbFNlc3Npb24oKSB7XG4gICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gJyc7XG4gICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZVxuICAgIH0pO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBJbmZpbml0eTtcbiAgICAgICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleVxuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWluKHJlbGF0ZWRSZXF1ZXN0T2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJldHJ5ID0gIXJlbGF0ZWRSZXF1ZXN0T2JqXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1haW4oKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7IH1cbiAgICAgICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLmRlZmF1bHQocmVsYXRlZFJlcXVlc3RPYmopLnRoZW4ocmVsYXRlZFJlcXVlc3RPYmouX3Jlc29sdmUpLmNhdGNoKHJlbGF0ZWRSZXF1ZXN0T2JqLl9yZWplY3QpOyB9O1xuICAgICAgICByZXR1cm4gY2hlY2tMb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPyBQcm9taXNlLnJlc29sdmUoKSA6IGNoZWNrU2Vzc2lvbigpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9KTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgbWFpbjogbWFpbixcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uLFxuICAgIGRlbFNlc3Npb246IGRlbFNlc3Npb25cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlZ6YzJsdmJrMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM05sYzNOcGIyNU5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMREJEUVVGdlF6dEJRVU53UXl3clEwRkJlVU03UVVGRGVrTXNkVVJCUVdsRU8wRkJRMnBFTEcxRVFVRTJRenRCUVVNM1F5d3lRMEZCY1VNN1FVRkRja01zTUVOQlFXOURPMEZCU1hCRExFbEJRVWtzYlVKQlFXMUNMRWRCUVZFc1NVRkJTU3hEUVVGRE8wRkJSWEJETEZOQlFWTXNXVUZCV1R0SlFVTnFRaXhKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRVZCUVVVN1VVRkRkRUlzYlVKQlFXMUNMRWRCUVVjc1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0WlFVTTVReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExFTkJRVU03V1VGRGFrTXNTVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0WlFVTnVReXhGUVVGRkxFTkJRVU1zV1VGQldTeERRVUZETzJkQ1FVTmFMRTlCUVU4N2IwSkJSVWdzVDBGQlR5eFBRVUZQTEVWQlFVVXNRMEZCUXp0blFrRkRja0lzUTBGQlF6dG5Ra0ZEUkN4SlFVRkpMRVZCUVVvN2IwSkJSVWtzVlVGQlZTeEZRVUZGTEVOQlFVTTdiMEpCUTJJc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdkMEpCUTJ4Q0xFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTTdiMEpCUTNKQ0xFTkJRVU1zUlVGQlJTeFZRVUZETEVkQlFWRTdkMEpCUTFJc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdiMEpCUTNaQ0xFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTlFMRU5CUVVNN1owSkJRMFFzVVVGQlVUdHZRa0ZEU2l4SlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMjlDUVVOcVF5d3dRa0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zYVVKQlFXbENMRVZCUVVVc1MwRkJTeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTXpSQ3hEUVVGRE8yRkJRMG9zUTBGQlF5eERRVUZCTzFGQlEwNHNRMEZCUXl4RFFVRkRMRU5CUVVFN1MwRkRURHRKUVVORUxFOUJRVThzYlVKQlFXMUNMRU5CUVVNN1FVRkRMMElzUTBGQlF6dEJRVWRFTEZOQlFWTXNjMEpCUVhOQ08wbEJRek5DTEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFJRVVZxUWl4UFFVRlBMRWxCUVVrc1EwRkJRVHRMUVVOa08wbEJRMFFzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeEpRVUZKTEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRVZCUVVVN1VVRkZla1VzVlVGQlZTeEZRVUZGTEVOQlFVTTdVVUZEWWl4UFFVRlBMRWxCUVVrc1EwRkJRVHRMUVVOa08wbEJRMFFzVDBGQlR5eExRVUZMTEVOQlFVRTdRVUZEYUVJc1EwRkJRenRCUVVWRUxGTkJRVk1zVlVGQlZUdEpRVU5tTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4SlFVRkpMSE5DUVVGelFpeEZRVUZGTEVWQlFVVTdXVUZGTVVJc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhKUVVGSkxFTkJRVU03V1VGRGFFTXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU03WjBKQlEyeENMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03V1VGRGNrSXNRMEZCUXl4RlFVRkZMRlZCUVVNc1IwRkJVVHRuUWtGRFVpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOMlFpeERRVUZETEVOQlFVTXNRMEZCUVR0VFFVTk1PMkZCUVUwN1dVRkZTQ3hQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzFOQlEzQkNPMGxCUTB3c1EwRkJReXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlIwUXNTVUZCU1N4WlFVRlpMRWRCUVZFc1NVRkJTU3hEUVVGRE8wRkJSVGRDTEZOQlFWTXNUMEZCVHp0SlFVTmFMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVU3VVVGRFppeFpRVUZaTEVkQlFVY3NTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFpRVU4yUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU03WjBKQlExUXNXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJRenRuUWtGRGNFSXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOeVFpeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJReXhIUVVGSE8yZENRVU5VTEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1owSkJRM0JDTEdsQ1FVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03WjBKQlEyWXNUMEZCVHl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRVQ3hEUVVGRExFTkJRVU1zUTBGQlFUdExRVU5NTzBsQlEwUXNUMEZCVHl4WlFVRlpMRU5CUVVNN1FVRkRlRUlzUTBGQlF6dEJRVVZFTEZOQlFWTXNTMEZCU3p0SlFVTldMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMUZCUTNoQ0xFbEJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRGJrTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJRenRaUVVOTUxFOUJRVThzV1VGQlF5eEhRVUZITzJkQ1FVTlFMRWxCUVVrc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJUdHZRa0ZEVml4WlFVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRlRUlzVDBGQlR5eFBRVUZQTEVWQlFVVXNRMEZCUXp0dlFrRkRja0lzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVVNc1IwRkJSenQzUWtGRFZDeFBRVUZQTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVFN2FVSkJRMHc3Y1VKQlFVMDdiMEpCUTBnc1QwRkJUeXhOUVVGTkxFTkJRVU1zUlVGQlF5eExRVUZMTEVWQlFVVXNUVUZCVFN4RlFVRkZMRk5CUVZNc1JVRkJSU3hyUWtGQmEwSXNSVUZCUXl4RFFVRkRMRU5CUVVNN2FVSkJRMnBGTzFsQlEwd3NRMEZCUXp0WlFVTkVMRkZCUVZFN1owSkJRMG9zU1VGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dG5Ra0ZEYWtNc01FSkJRV2RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1JVRkJSU3hMUVVGTExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEY0VRc1EwRkJRenRaUVVORUxFbEJRVWtzV1VGQlF5eEhRVUZITzJkQ1FVTktMRTlCUVU4c1RVRkJUU3hEUVVGRExFVkJRVU1zUzBGQlN5eEZRVUZGTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVOQlFVTTdXVUZETVVRc1EwRkJRenRUUVVOS0xFTkJRVU1zUTBGQlFUdEpRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zVlVGQlZTeERRVUZETEU5QlFXVTdTVUZETDBJc1owSkJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVY3NUMEZCVHl4RFFVRkRPMGxCUlhwQ0xHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFZEJRVWNzU1VGQlNTeERRVUZETzBsQlJXaERMRWxCUVVrc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk8xRkJRM0pFTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRWRCUVVjc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1EwRkJRenRSUVVOMlJTeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMWxCUTFZc1IwRkJSeXhGUVVGRkxHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ08xbEJRelZDTEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTTdVMEZEY2tNc1EwRkJReXhEUVVGQk8wdEJRMHc3U1VGRFJDeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUTFZc1IwRkJSeXhGUVVGRkxHZENRVUZOTEVOQlFVTXNWMEZCY1VJN1VVRkRha01zU1VGQlNTeEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1QwRkJUenRMUVVOMlFpeERRVUZETEVOQlFVTTdRVUZEVUN4RFFVRkRPMEZCUlVRc1UwRkJVeXhaUVVGWkxFTkJRVU1zU1VGQldUdEpRVU01UWl4SlFVRkpMRWxCUVZNc1EwRkJRenRKUVVWa0xFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEycEVMRWxCUVVrc1IwRkJSeXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRMUVVOMFF6dFRRVUZOTzFGQlEwZ3NTVUZCU1N4SFFVRkhMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNN1MwRkRNVU03U1VGRFJDeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExGRkJRVkVzUlVGQlJUdFJRVU12UWl4SlFVRkpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8wdEJRemxETzFOQlFVMDdVVUZEU0N4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dExRVU53UWp0SlFVVkVMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMnBETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNN1dVRkRVQ3hIUVVGSExFVkJRVVVzZDBKQlFXTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRPMWxCUTNCRUxFbEJRVWtzVFVGQlFUdFpRVU5LTEUxQlFVMHNSVUZCUlN4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVsQlFVa3NTMEZCU3p0WlFVTTFReXhOUVVGTkxFVkJRVVVzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1MwRkJTeXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVUVzUTBGQlF5eERRVUZETEdkQ1FVRk5MRU5CUVVNc1UwRkJVenRaUVVOeVJpeFBRVUZQTEVWQlFWQXNWVUZCVVN4SFFVRnZRenRuUWtGRGVFTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1ZVRkJWU3hMUVVGTExFZEJRVWNzUlVGQlJUdHZRa0ZGZUVJc1NVRkJTU3huUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRVZCUVVVN2QwSkJRemRDTEVsQlFVa3NSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdkMEpCUXk5Q0xEQkNRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRVZCUVVVc1MwRkJTeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZCTzNGQ1FVTnVSVHR2UWtGRlJDeEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN2IwSkJRMWdzU1VGQlNUdDNRa0ZEUVN4RFFVRkRMRWRCUVVjc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dHhRa0ZET1VNN2IwSkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdjVUpCUTFnN2IwSkJSVVFzU1VGQlNTeERRVUZETEVWQlFVVTdkMEpCUTBnc1owSkJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RFFVRkRPM2RDUVVWdVFpeG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeEhRVUZITEVsQlFVa3NRMEZCUXp0M1FrRkZhRU1zU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTEVWQlFVVTdORUpCUTNKRUxHZENRVUZOTEVOQlFVTXNZVUZCWVN4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNRMEZCUXpzMFFrRkRka1VzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXp0blEwRkRWaXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4blFrRkJaMEk3WjBOQlF6VkNMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNN05rSkJRM0pETEVOQlFVTXNRMEZCUVR0NVFrRkRURHQzUWtGRFJDeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPelJDUVVOV0xFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRmRCUVZjN05FSkJRM1pDTEVsQlFVa3NSVUZCUlN4blFrRkJUU3hEUVVGRExFOUJRVTg3ZVVKQlEzWkNMRU5CUVVNc1EwRkJRenQzUWtGRFNDeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPM0ZDUVVOd1FqdDVRa0ZCVFR0M1FrRkRTQ3hQUVVGUExFMUJRVTBzUTBGQlF5eHpRa0ZCV1N4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzNGQ1FVTm9SRHRwUWtGRFNqdHhRa0ZCVFR0dlFrRkRTQ3hQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTTdhVUpCUTNSRU8xbEJRMHdzUTBGQlF6dFpRVU5FTEZGQlFWRTdXVUZEVWl4RFFVRkRPMWxCUTBRc1NVRkJTU3hGUVVGRk8yZENRVU5HTEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJTeFRRVUZUTEVWQlFVVXNUMEZCVHl4RlFVRkRMRU5CUVVNc1EwRkJRenRaUVVOMlJDeERRVUZETzFOQlEwb3NRMEZCUXl4RFFVRkJPMGxCUTA0c1EwRkJReXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlIwUXNVMEZCVXl4VlFVRlZPMGxCUTJZc1owSkJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUTNCQ0xFVkJRVVVzUTBGQlF5eGhRVUZoTEVOQlFVTTdVVUZEWWl4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFhRVUZ4UWp0TFFVTndReXhEUVVGRExFTkJRVU03U1VGRFNDeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhuUWtGQlowSXNSVUZCUlR0UlFVTnlSQ3huUWtGQlRTeERRVUZETEdGQlFXRXNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRhRU1zUlVGQlJTeERRVUZETEdGQlFXRXNRMEZCUXp0WlFVTmlMRWRCUVVjc1JVRkJSU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RanRUUVVNdlFpeERRVUZETEVOQlFVRTdTMEZEVER0QlFVTk1MRU5CUVVNN1FVRkZSQ3hUUVVGVExFbEJRVWtzUTBGQlF5eHBRa0ZCYzBRN1NVRkRhRVVzVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJReTlDTEVsQlFVa3NTMEZCU3l4SFFVRkhMRU5CUVVNc2FVSkJRV2xDTzFsQlJURkNMRU5CUVVNc1EwRkJReXhqUVVGTkxFOUJRVUVzU1VGQlNTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCYkVNc1EwRkJhME03V1VGRk1VTXNRMEZCUXl4RFFVRkRMR05CUVUwc1QwRkJRU3hwUWtGQlR5eERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCTlVZc1EwRkJORVlzUTBGQlF6dFJRVU42Unl4UFFVRlBMRlZCUVZVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU55UWl4UFFVRlBMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVUU3VVVGRGVFVXNRMEZCUXl4RlFVRkZMRlZCUVVNc1JVRkJaMEk3WjBKQlFXWXNTMEZCU3l4WFFVRkJMRVZCUVVVc1QwRkJUeXhoUVVGQk8xbEJRMllzYzBKQlFWa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTTFReXhQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEV0QlFVc3NUMEZCUVN4RlFVRkZMRTlCUVU4c1UwRkJRU3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53UXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRFNpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMUZCUTNKQ0xFTkJRVU1zUlVGQlJTeFZRVUZETEVWQlFXZENPMmRDUVVGbUxFdEJRVXNzVjBGQlFTeEZRVUZGTEU5QlFVOHNZVUZCUVR0WlFVTm1MSE5DUVVGWkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRE5VTXNUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJReXhMUVVGTExFOUJRVUVzUlVGQlJTeFBRVUZQTEZOQlFVRXNSVUZCUXl4RFFVRkRMRU5CUVVNN1VVRkRjRU1zUTBGQlF5eERRVUZETEVOQlFVRTdTVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeHJRa0ZCWlR0SlFVTllMRWxCUVVrc1RVRkJRVHRKUVVOS0xGVkJRVlVzV1VGQlFUdEpRVU5XTEZWQlFWVXNXVUZCUVR0RFFVTmlMRU5CUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJR1Z5Y205eVNHRnVaR3hsY2lCbWNtOXRJQ2N1TDJWeWNtOXlTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUlHWnliMjBnSnk0dlpIVnlZWFJwYjI1U1pYQnZjblJsY2lkY2JtbHRjRzl5ZENCeVpYRjFaWE4wU0dGdVpHeGxjaUJtY205dElDY3VMM0psY1hWbGMzUklZVzVrYkdWeUoxeHVhVzF3YjNKMElHeHZZV1JwYm1jZ1puSnZiU0FuTGk0dmRYUnBiQzlzYjJGa2FXNW5KMXh1YVcxd2IzSjBJSEpsY1hWbGMzUWdabkp2YlNBbkxpNHZZWEJwTDNKbGNYVmxjM1FuWEc1cGJYQnZjblFnZXlCSlVtVnhkV1Z6ZEU5d2RHbHZiaXdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSTdYRzVjYmk4cUlPZVVuK1dSdmVXUnFPYWNuK1dHaGVXUHF1V0JtdVM0Z09hc29lZWFoR05vWldOclUyVnpjMmx2YmlBcUwxeHViR1YwSUdOb1pXTnJVMlZ6YzJsdmJsQnliMjFwYzJVNklHRnVlU0E5SUc1MWJHdzdYRzVjYm1aMWJtTjBhVzl1SUdOb1pXTnJVMlZ6YzJsdmJpZ3BJSHRjYmlBZ0lDQnBaaUFvSVdOb1pXTnJVMlZ6YzJsdmJsQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lDQWdZMmhsWTJ0VFpYTnphVzl1VUhKdmJXbHpaU0E5SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdWJHOW5LRndpZDNndVkyaGxZMnRUWlhOemFXOXVLQ2xjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnpkR0Z5ZENBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2QzZ3VZMmhsWTJ0VFpYTnphVzl1S0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRXTmpaWE56S0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbm1idmx2WlhtZ0lIbW5Jbm1sWWp2dkl6a3VKVGxuS2ptbkt6bmxKL2xrYjNsa2FqbW5KL2xob1htbDZEcG9idmxobzNtbzREcHFvemt1b1pjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWmhhV3dvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9lWnUrVzlsZWFBZ2VpL2grYWNuMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1pXeFRaWE56YVc5dUtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrYjB4dloybHVLQ2t1ZEdobGJpZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMQ0FvY21Wek9pQmhibmtwUFQ1N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Z1WkNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5TG5KbGNHOXlkQ2duZDNoZlkyaGxZMnRUWlhOemFXOXVKeXdnYzNSaGNuUXNJR1Z1WkNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR05vWldOclUyVnpjMmx2YmxCeWIyMXBjMlU3WEc1OVhHNWNiaThxSU9XSXBPYVdyWE5sYzNOcGIyN21tSy9sa0tia3VMcm5xYnJtaUpibHQ3TG92NGZtbko4Z0tpOWNibVoxYm1OMGFXOXVJR2x6VTJWemMybHZia1Y0Y0dseVpVOXlSVzF3ZEhrb0tTQjdYRzRnSUNBZ2FXWWdLQ0Z6ZEdGMGRYTXVjMlZ6YzJsdmJpa2dlMXh1SUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHpudkpQbHJaamt1SzNtc3FIbW5JbHpaWE56YVc5dVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaGpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVlJwYldVZ0ppWWdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2tnUGlCemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpTa2dlMXh1SUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHptbklub3JyN252YTdtbkt6bG5MQnpaWE56YVc5dTU3eVQ1YTJZNXBlMjZaZTA3N3lNNUxpVTU3eVQ1YTJZNXBlMjZaZTA1YmV5NVlpd1hHNGdJQ0FnSUNBZ0lHUmxiRk5sYzNOcGIyNG9LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdWY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sWEc1OVhHNWNibVoxYm1OMGFXOXVJR05vWldOclRHOW5hVzRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0dselUyVnpjMmx2YmtWNGNHbHlaVTl5Ulcxd2RIa29LU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNXJLaDVweUo1NW03NlptRzVvQ0I3N3lNNUxpTjZaeUE2S2FCNVlhTlkyaGxZMnRUWlhOemFXOXVYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNW1hV2N1Wkc5T2IzUkRhR1ZqYTFObGMzTnBiMjRnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSdlRHOW5hVzRvS1M1MGFHVnVLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlN3Z0tISmxjem9nWVc1NUtUMCtlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG52SlBsclpqa3VLM21uSWx6WlhOemFXOXU1TGlVNXB5cTZMK0g1cHlmWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTbGNibjFjYmx4dUx5b2c1NW03NlptRzVyV0I1NmlMNTVxRWNISnZiV2x6WlNBcUwxeHViR1YwSUd4dloybHVVSEp2YldselpUb2dZVzU1SUQwZ2JuVnNiRHRjYmx4dVpuVnVZM1JwYjI0Z1pHOU1iMmRwYmlncElIdGNiaUFnSUNCcFppQW9JV3h2WjJsdVVISnZiV2x6WlNrZ2UxeHVJQ0FnSUNBZ0lDQnNiMmRwYmxCeWIyMXBjMlVnUFNCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNiMmRwYmlncExuUm9aVzRvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3h2WjJsdVVISnZiV2x6WlNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaHlaWE1wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMmRwYmxCeWIyMXBjMlVnUFNCdWRXeHNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3h2WVdScGJtY3VhR2xrWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYkc5bmFXNVFjbTl0YVhObE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCc2IyZHBiaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExteHZaeWduZDNndWJHOW5hVzRuS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzNSaGNuUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ2QzZ3ViRzluYVc0b2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWalkyVnpjeWh5WlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WekxtTnZaR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjlrWlRKVFpYTnphVzl1S0hKbGN5NWpiMlJsS1M1MGFHVnVLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTG1OaGRHTm9LQ2h5WlhNcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBhWFJzWlRvZ1hDTG5tYnZsdlpYbHBMSG90S1ZjSWl3Z1hDSmpiMjUwWlc1MFhDSTZJRndpNksrMzU2aU41WkNPNlllTjZLK1ZXMk52WkdVZzZJNjM1WStXNWFTeDZMU2xYVndpZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR052YlhCc1pYUmxLQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Z1WkNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSXVjbVZ3YjNKMEtDZDNlRjlzYjJkcGJpY3NJSE4wWVhKMExDQmxibVFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHWmhhV3dvY21WektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN2RHbDBiR1U2SUZ3aTU1bTc1YjJWNWFTeDZMU2xYQ0lzSUZ3aVkyOXVkR1Z1ZEZ3aU9pQnlaWE11WlhKeVRYTm5mU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmU2xjYm4xY2JseHVablZ1WTNScGIyNGdjMlYwVTJWemMybHZiaWh6WlhOemFXOXVPaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmlBOUlITmxjM05wYjI0N1hHNGdJQ0FnTHk4ZzVvMmk1WnVlNXAybDU1cUVjMlZ6YzJsdmJ1KzhqT1M0amVtY2dPaW1nZVdHaldOb1pXTnJVMlZ6YzJsdmJseHVJQ0FnSUdOdmJtWnBaeTVrYjA1dmRFTm9aV05yVTJWemMybHZiaUE5SUhSeWRXVTdYRzRnSUNBZ0x5OGc1YWFDNXA2YzVweUo2SzYrNTcydTVweXM1Wnl3YzJWemMybHZidWkvaCthY24rYVh0dW1YdEZ4dUlDQWdJR2xtSUNoamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpWUnBiV1VnSmlZZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGtwSUh0Y2JpQWdJQ0FnSUNBZ2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1NBcklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlR0Y2JpQWdJQ0FnSUNBZ2QzZ3VjMlYwVTNSdmNtRm5aU2g3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFMyVjVMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nVTNSeWFXNW5LSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsS1Z4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgxY2JpQWdJQ0IzZUM1elpYUlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdhMlY1T2lCamIyNW1hV2N1YzJWemMybHZiazVoYldVZ1lYTWdjM1J5YVc1bkxGeHVJQ0FnSUNBZ0lDQmtZWFJoT2lCemRHRjBkWE11YzJWemMybHZibHh1SUNBZ0lIMHBPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmpiMlJsTWxObGMzTnBiMjRvWTI5a1pUb2djM1J5YVc1bktTQjdYRzRnSUNBZ2JHVjBJR1JoZEdFNklHRnVlVHRjYmlBZ0lDQXZMeUJqYjJSbFZHOVRaWE56YVc5dUxtUmhkR0htbEsvbWpJSGxoNzNtbGJCY2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxtUmhkR0VnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCa1lYUmhJRDBnWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dVpHRjBZU2dwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFZ1BTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVrWVhSaElIeDhJSHQ5TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dVkyOWtaVTVoYldVcElIdGNiaUFnSUNBZ0lDQWdaR0YwWVZ0amIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNWpiMlJsVG1GdFpWMGdQU0JqYjJSbE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdSaGRHRXVZMjlrWlNBOUlHTnZaR1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSE4wWVhKMElEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEc0Z0lDQWdJQ0FnSUhkNExuSmxjWFZsYzNRb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZFhKc09pQnlaWEYxWlhOMFNHRnVaR3hsY2k1bWIzSnRZWFFvWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dWRYSnNLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnRaWFJvYjJRNklHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbTFsZEdodlpDQjhmQ0FuUjBWVUp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUdobFlXUmxjam9nZEhsd1pXOW1JR052Ym1acFp5NXpaWFJJWldGa1pYSWdQVDA5SUNkbWRXNWpkR2x2YmljZ1B5QmpiMjVtYVdjdWMyVjBTR1ZoWkdWeUtDazZJR052Ym1acFp5NXpaWFJJWldGa1pYSXNYRzRnSUNBZ0lDQWdJQ0FnSUNCemRXTmpaWE56S0hKbGN6b2dkM2d1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h5WlhNdWMzUmhkSFZ6UTI5a1pTQTlQVDBnTWpBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPaUFsK2FYdHVTNGl1YUtwVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1Y21Wd2IzSjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1pXNWtJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5TG5KbGNHOXlkQ2hqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1eVpYQnZjblFzSUhOMFlYSjBMQ0JsYm1RcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY3lBOUlGd2lYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6SUQwZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVjM1ZqWTJWemN5aHlaWE11WkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmlBOUlITTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURtamFMbG01N21uYVhubW9SelpYTnphVzl1Nzd5TTVMaU42WnlBNkthQjVZYU5ZMmhsWTJ0VFpYTnphVzl1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1bWFXY3VaRzlPYjNSRGFHVmphMU5sYzNOcGIyNGdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1YWFDNXA2YzVweUo2SzYrNTcydTVweXM1Wnl3YzJWemMybHZidWkvaCthY24rYVh0dW1YdEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlNBbUppQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsSUQwZ2JtVjNJRVJoZEdVb0tTNW5aWFJVYVcxbEtDa2dLeUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlZScGJXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZDNndWMyVjBVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0U2SUZOMGNtbHVaeWh6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkM2d1YzJWMFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCamIyNW1hV2N1YzJWemMybHZiazVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9aWEp5YjNKSVlXNWtiR1Z5TG1kbGRFVnljbTl5VFhObktISmxjeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkR2wwYkdVNklGd2k1NW03NWIyVjVhU3g2TFNsWENJc0lGd2lZMjl1ZEdWdWRGd2lPaUJjSXVpdnQrZW9qZVdRanVtSGplaXZsVndpZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR052YlhCc1pYUmxLQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHWmhhV3c2SUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBhWFJzWlRvZ1hDTG5tYnZsdlpYbHBMSG90S1ZjSWl3Z1hDSmpiMjUwWlc1MFhDSTZJRndpNksrMzU2aU41WkNPNlllTjZLK1ZYQ0o5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5S1Z4dWZWeHVYRzR2S2lEbXVJWG5xYnB6WlhOemFXOXVJQ292WEc1bWRXNWpkR2x2YmlCa1pXeFRaWE56YVc5dUtDa2dlMXh1SUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ0p5YzdYRzRnSUNBZ2QzZ3VjbVZ0YjNabFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsSUdGeklITjBjbWx1WjF4dUlDQWdJSDBwTzF4dUlDQWdJR2xtSUNoamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpWUnBiV1VnSmlZZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGtwSUh0Y2JpQWdJQ0FnSUNBZ2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVWdQU0JKYm1acGJtbDBlVHRjYmlBZ0lDQWdJQ0FnZDNndWNtVnRiM1psVTNSdmNtRm5aU2g3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFMyVjVYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnRZV2x1S0hKbGJHRjBaV1JTWlhGMVpYTjBUMkpxUHpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR3hsZENCeVpYUnllU0E5SUNGeVpXeGhkR1ZrVW1WeGRXVnpkRTlpYWx4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNWFhQzVwNmM1cktoNXB5SjVZV3o2SUdVNTVxRTZLKzM1ckdDNzd5TTZZZU42SytWNVkyejZMQ0Q1NVNvNkllcTZMcXJYRzRnSUNBZ0lDQWdJQ0FnSUNBL0lDZ3BJRDArSUcxaGFXNG9LUzUwYUdWdUtISmxjMjlzZG1VcExtTmhkR05vS0hKbGFtVmpkQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZVdGcytpQmxPZWFoT2l2dCtheGd1KzhqT21IamVpdmxlV05zK2l3ZytlVXFPYUpnT1dGcytpQmxPZWFoT2l2dCtheGdseHVJQ0FnSUNBZ0lDQWdJQ0FnT2lBb0tTQTlQaUJ5WlhGMVpYTjBLSEpsYkdGMFpXUlNaWEYxWlhOMFQySnFLUzUwYUdWdUtISmxiR0YwWldSU1pYRjFaWE4wVDJKcUxsOXlaWE52YkhabEtTNWpZWFJqYUNoeVpXeGhkR1ZrVW1WeGRXVnpkRTlpYWk1ZmNtVnFaV04wS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOb1pXTnJURzluYVc0b0tTNTBhR1Z1S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCamIyNW1hV2N1Wkc5T2IzUkRhR1ZqYTFObGMzTnBiMjRnUHlCUWNtOXRhWE5sTG5KbGMyOXNkbVVvS1NBNklHTm9aV05yVTJWemMybHZiaWdwWEc0Z0lDQWdJQ0FnSUgwc0lDaDdkR2wwYkdVc0lHTnZiblJsYm5SOUtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxjbkp2Y2toaGJtUnNaWEl1Wkc5RmNuSnZjaWgwYVhSc1pTd2dZMjl1ZEdWdWRDd2djbVYwY25rcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkR2wwYkdVc0lHTnZiblJsYm5SOUtUdGNiaUFnSUNBZ0lDQWdmU2t1ZEdobGJpZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdJQ0I5TENBb2UzUnBkR3hsTENCamIyNTBaVzUwZlNrOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZja2hoYm1Sc1pYSXVaRzlGY25KdmNpaDBhWFJzWlN3Z1kyOXVkR1Z1ZEN3Z2NtVjBjbmtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN2RHbDBiR1VzSUdOdmJuUmxiblI5S1R0Y2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOUtWeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdiV0ZwYml4Y2JpQWdJQ0J6WlhSVFpYTnphVzl1TEZ4dUlDQWdJR1JsYkZObGMzTnBiMjVjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICBzZXNzaW9uTmFtZTogXCJzZXNzaW9uXCIsXG4gICAgbG9naW5UcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGNvZGVUb1Nlc3Npb246IHtcbiAgICAgICAgdXJsOiBcIlwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9LFxuICAgIHN1Y2Nlc3NUcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgc2V0SGVhZGVyOiB7fSxcbiAgICB1cmxQZXJmaXg6IFwiXCIsXG4gICAgZG9Ob3RDaGVja1Nlc3Npb246IGZhbHNlLFxuICAgIGVycm9yVGl0bGU6IFwi5pON5L2c5aSx6LSlXCIsXG4gICAgZXJyb3JDb250ZW50OiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICBlcnJvclJldHJ5QnRuOiBmYWxzZSxcbiAgICByZUxvZ2luTGltaXQ6IDMsXG4gICAgZXJyb3JDYWxsYmFjazogbnVsbCxcbiAgICByZXBvcnRDR0k6IGZhbHNlLFxuICAgIG1vY2tKc29uOiBmYWxzZSxcbiAgICBnbG9iYWxEYXRhOiBmYWxzZSxcbiAgICBzZXNzaW9uRXhwaXJlS2V5OiBcInNlc3Npb25FeHBpcmVLZXlcIlxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRDb25maWc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMMk52Ym1acFp5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVWQkxFbEJRVTBzWVVGQllTeEhRVUZuUWp0SlFVTXZRaXhYUVVGWExFVkJRVVVzVTBGQlV6dEpRVU4wUWl4WlFVRlpPMUZCUTFJc1QwRkJUeXhMUVVGTExFTkJRVUU3U1VGRGFFSXNRMEZCUXp0SlFVTkVMR0ZCUVdFc1JVRkJSVHRSUVVOWUxFZEJRVWNzUlVGQlJTeEZRVUZGTzFGQlExQXNUMEZCVHl4RlFVRkZMR05CUVUwc1EwRkJRenRMUVVOdVFqdEpRVU5FTEdOQlFXTTdVVUZEVml4UFFVRlBMRWxCUVVrc1EwRkJRVHRKUVVObUxFTkJRVU03U1VGRFJDeFRRVUZUTEVWQlFVVXNSVUZCUlR0SlFVTmlMRk5CUVZNc1JVRkJSU3hGUVVGRk8wbEJRMklzYVVKQlFXbENMRVZCUVVVc1MwRkJTenRKUVVONFFpeFZRVUZWTEVWQlFVVXNUVUZCVFR0SlFVTnNRaXhaUVVGWkxFVkJRVm9zVlVGQllTeEhRVUZSTzFGQlEycENMRTlCUVU4c1IwRkJSeXhEUVVGQk8wbEJRMlFzUTBGQlF6dEpRVU5FTEdGQlFXRXNSVUZCUlN4TFFVRkxPMGxCUTNCQ0xGbEJRVmtzUlVGQlJTeERRVUZETzBsQlEyWXNZVUZCWVN4RlFVRkZMRWxCUVVrN1NVRkRia0lzVTBGQlV5eEZRVUZGTEV0QlFVczdTVUZEYUVJc1VVRkJVU3hGUVVGRkxFdEJRVXM3U1VGRFppeFZRVUZWTEVWQlFVVXNTMEZCU3p0SlFVVnFRaXhuUWtGQlowSXNSVUZCUlN4clFrRkJhMEk3UTBGRGRrTXNRMEZCUXp0QlFVVkdMR3RDUVVGbExHRkJRV0VzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJRWxKYm1sMFQzQjBhVzl1SUgwZ1puSnZiU0FuTGk0dmFXNTBaWEptWVdObEoxeHVYRzVqYjI1emRDQmtaV1poZFd4MFEyOXVabWxuT2lCSlNXNXBkRTl3ZEdsdmJpQTlJSHRjYmlBZ0lDQnpaWE56YVc5dVRtRnRaVG9nWENKelpYTnphVzl1WENJc1hHNGdJQ0FnYkc5bmFXNVVjbWxuWjJWeUtDa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJWY2JpQWdJQ0I5TEZ4dUlDQWdJR052WkdWVWIxTmxjM05wYjI0NklIdGNiaUFnSUNBZ0lDQWdkWEpzT2lCY0lsd2lMRnh1SUNBZ0lDQWdJQ0J6ZFdOalpYTnpPaUFvS1QwK0lIdDlYRzRnSUNBZ2ZTeGNiaUFnSUNCemRXTmpaWE56VkhKcFoyZGxjaWdwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVmNiaUFnSUNCOUxGeHVJQ0FnSUhObGRFaGxZV1JsY2pvZ2UzMHNYRzRnSUNBZ2RYSnNVR1Z5Wm1sNE9pQmNJbHdpTEZ4dUlDQWdJR1J2VG05MFEyaGxZMnRUWlhOemFXOXVPaUJtWVd4elpTeGNiaUFnSUNCbGNuSnZjbFJwZEd4bE9pQmNJdWFUamVTOW5PV2tzZWkwcFZ3aUxGeHVJQ0FnSUdWeWNtOXlRMjl1ZEdWdWRDaHlaWE02SUdGdWVTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6WEc0Z0lDQWdmU3hjYmlBZ0lDQmxjbkp2Y2xKbGRISjVRblJ1T2lCbVlXeHpaU3hjYmlBZ0lDQnlaVXh2WjJsdVRHbHRhWFE2SURNc1hHNGdJQ0FnWlhKeWIzSkRZV3hzWW1GamF6b2diblZzYkN4Y2JpQWdJQ0J5WlhCdmNuUkRSMGs2SUdaaGJITmxMRnh1SUNBZ0lHMXZZMnRLYzI5dU9pQm1ZV3h6WlN4Y2JpQWdJQ0JuYkc5aVlXeEVZWFJoT2lCbVlXeHpaU3hjYmlBZ0lDQXZMeUJ6WlhOemFXOXU1WnlvNXB5czVaeXc1N3lUNWEyWTU1cUVhMlY1WEc0Z0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlV0bGVUb2dYQ0p6WlhOemFXOXVSWGh3YVhKbFMyVjVYQ0pjYm4wN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHUmxabUYxYkhSRGIyNW1hV2M3WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXNzaW9uOiAnJyxcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMzUmhkSFZ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwzTjBZWFIxY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTEd0Q1FVRmxPMGxCUTFnc1QwRkJUeXhGUVVGRkxFVkJRVms3U1VGRmNrSXNZVUZCWVN4RlFVRkZMRkZCUVd0Q08wTkJRemRDTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVnpjMmx2YmpvZ0p5Y2dZWE1nYzNSeWFXNW5MRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN292NGZtbkovbm1vVG1sN2JwbDdUbmdybGNiaUFnSUNCelpYTnphVzl1Ulhod2FYSmxPaUJKYm1acGJtbDBlU0JoY3lCdWRXMWlaWEpjYm4wZ1lYTWdZVzU1WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBMSU5FRkVFRCA9IC9cXHUwMDBBL2c7XG52YXIgQ0FSUklBR0VSRVRVUk4gPSAvXFx1MDAwRC9nO1xudmFyIExJTkVfU0VQQVJBVE9SID0gL1xcdTIwMjgvZztcbnZhciBQQVJBR1JBUEhfU0VQQVJBVE9SID0gL1xcdTIwMjkvZztcbmZ1bmN0aW9uIHJlcGxhY2UocmVzKSB7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoTElORUZFRUQsIFwiXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKENBUlJJQUdFUkVUVVJOLCBcIlwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZShMSU5FX1NFUEFSQVRPUiwgXCJcIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoUEFSQUdSQVBIX1NFUEFSQVRPUiwgXCJcIik7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHJlcGxhY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhbk52YmxOMWNHVnljMlYwTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1YwYVd3dmFuTnZibE4xY0dWeWMyVjBMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlYwRXNTVUZCVFN4UlFVRlJMRWRCUVVjc1UwRkJVeXhEUVVGRE8wRkJRek5DTEVsQlFVMHNZMEZCWXl4SFFVRkhMRk5CUVZNc1EwRkJRenRCUVVOcVF5eEpRVUZOTEdOQlFXTXNSMEZCUnl4VFFVRlRMRU5CUVVNN1FVRkRha01zU1VGQlRTeHRRa0ZCYlVJc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGRmRFTXNVMEZCZDBJc1QwRkJUeXhEUVVGRExFZEJRVmM3U1VGRGVrTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zVVVGQlVTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUTJoRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMR05CUVdNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVU4wUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eGpRVUZqTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRkRU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc2JVSkJRVzFDTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRNME1zVDBGQlR5eEhRVUZITEVOQlFVRTdRVUZEV2l4RFFVRkRPMEZCVGtRc01FSkJUVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpQWdWU3N5TURJNElHRnVaQ0JWS3pJd01qa2dZWEpsSUdGc2JHOTNaV1FnYVc1emFXUmxJSE4wY21sdVozTWdhVzRnU2xOUFRpQW9ZWE1nWVd4c0lHeHBkR1Z5WVd4Y2JpQWdJQ0JWYm1samIyUmxJR05vWVhKaFkzUmxjbk1wSUdKMWRDQktZWFpoVTJOeWFYQjBJR1JsWm1sdVpYTWdkR2hsYlNCaGN5QnVaWGRzYVc1bFhHNGdJQ0FnYzJWd1pYSmhkRzl5Y3k0Z1FtVmpZWFZ6WlNCdWJ5QnNhWFJsY21Gc0lHNWxkMnhwYm1WeklHRnlaU0JoYkd4dmQyVmtJR2x1SUdFZ2MzUnlhVzVuTENCMGFHbHpYRzRnSUNBZ1kyRjFjMlZ6SUdFZ1VHRnljMlZGY25KdmNpQnBiaUIwYUdVZ1luSnZkM05sY2k0Z1YyVWdkMjl5YXlCaGNtOTFibVFnZEdocGN5QnBjM04xWlNCaWVWeHVJQ0FnSUhKbGNHeGhZMmx1WnlCMGFHVnRJSGRwZEdnZ2RHaGxJR1Z6WTJGd1pXUWdkbVZ5YzJsdmJpNGdWR2hwY3lCemFHOTFiR1FnWW1VZ2MyRm1aU0JpWldOaGRYTmxYRzRnSUNBZ1lXTmpiM0prYVc1bklIUnZJSFJvWlNCS1UwOU9JSE53WldNc0lIUm9aWE5sSUdOb1lYSmhZM1JsY25NZ1lYSmxJQ3B2Ym14NUtpQjJZV3hwWkNCcGJuTnBaR1ZjYmlBZ0lDQmhJSE4wY21sdVp5QmhibVFnYzJodmRXeGtJSFJvWlhKbFptOXlaU0J1YjNRZ1ltVWdjSEpsYzJWdWRDQmhibmtnYjNSb1pYSWdjR3hoWTJWekxseHVYRzRnSUNBZ2JXOXlaU0JwYm1admNtMWhkR2x2YmpvZ2FIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwzUmpNemt2Y0hKdmNHOXpZV3d0YW5OdmJpMXpkWEJsY25ObGRGeHVLaTljYmx4dVkyOXVjM1FnVEVsT1JVWkZSVVFnUFNBdlhGeDFNREF3UVM5bk8xeHVZMjl1YzNRZ1EwRlNVa2xCUjBWU1JWUlZVazRnUFNBdlhGeDFNREF3UkM5bk8xeHVZMjl1YzNRZ1RFbE9SVjlUUlZCQlVrRlVUMUlnUFNBdlhGeDFNakF5T0M5bk8xeHVZMjl1YzNRZ1VFRlNRVWRTUVZCSVgxTkZVRUZTUVZSUFVpQTlJQzljWEhVeU1ESTVMMmM3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdaMWJtTjBhVzl1SUhKbGNHeGhZMlVvY21Wek9pQnpkSEpwYm1jcElIdGNiaUFnY21WeklEMGdjbVZ6TG5KbGNHeGhZMlVvVEVsT1JVWkZSVVFzSUZ3aVhDSXBPMXh1SUNCeVpYTWdQU0J5WlhNdWNtVndiR0ZqWlNoRFFWSlNTVUZIUlZKRlZGVlNUaXdnWENKY0lpazdYRzRnSUhKbGN5QTlJSEpsY3k1eVpYQnNZV05sS0V4SlRrVmZVMFZRUVZKQlZFOVNMQ0JjSWx3aUtUdGNiaUFnY21WeklEMGdjbVZ6TG5KbGNHeGhZMlVvVUVGU1FVZFNRVkJJWDFORlVFRlNRVlJQVWl3Z1hDSmNJaWs3WEc0Z0lISmxkSFZ5YmlCeVpYTmNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHNob3codHh0KSB7XG4gICAgd3guc2hvd1RvYXN0KHtcbiAgICAgICAgdGl0bGU6IHR5cGVvZiB0eHQgPT09ICdib29sZWFuJyA/ICfliqDovb3kuK0nIDogdHh0LFxuICAgICAgICBpY29uOiAnbG9hZGluZycsXG4gICAgICAgIG1hc2s6IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiA2MDAwMFxuICAgIH0pO1xufVxuZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB3eC5oaWRlVG9hc3Qoe30pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNob3c6IHNob3csXG4gICAgaGlkZTogaGlkZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOWhaR2x1Wnk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc0wyeHZZV1JwYm1jdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4VFFVRlRMRWxCUVVrc1EwRkJReXhIUVVGeFFqdEpRVU12UWl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJRMVFzUzBGQlN5eEZRVUZGTEU5QlFVOHNSMEZCUnl4TFFVRkxMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhPMUZCUXpkRExFbEJRVWtzUlVGQlJTeFRRVUZUTzFGQlEyWXNTVUZCU1N4RlFVRkZMRWxCUVVrN1VVRkRWaXhSUVVGUkxFVkJRVVVzUzBGQlN6dExRVU5zUWl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eEpRVUZKTzBsQlExUXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU55UWl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEpRVUZKTEUxQlFVRTdTVUZEU2l4SlFVRkpMRTFCUVVFN1EwRkRVQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMmh2ZHloMGVIUTZJR0p2YjJ4bFlXNGdmQ0J6ZEhKcGJtY3BJSHRjYmlBZ0lDQjNlQzV6YUc5M1ZHOWhjM1FvZTF4dUlDQWdJQ0FnSUNCMGFYUnNaVG9nZEhsd1pXOW1JSFI0ZENBOVBUMGdKMkp2YjJ4bFlXNG5JRDhnSitXS29PaTl2ZVM0clNjZ09pQjBlSFFzWEc0Z0lDQWdJQ0FnSUdsamIyNDZJQ2RzYjJGa2FXNW5KeXhjYmlBZ0lDQWdJQ0FnYldGemF6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI0NklEWXdNREF3WEc0Z0lDQWdmU2xjYm4xY2JseHVablZ1WTNScGIyNGdhR2xrWlNncElIdGNiaUFnSUNCM2VDNW9hV1JsVkc5aGMzUW9lMzBwTzF4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyaHZkeXhjYmlBZ0lDQm9hV1JsWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gc2V0UGFyYW1zKHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICB2YXIgcXVlcnlTdHJpbmdJbmRleCA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgICB2YXIga3ZwID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICB2YXIgb2xkUXVlcnlTdHJpbmdfMSA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgb2xkUXVlcnlTdHJpbmdfMS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICB2YXIga3YgPSBvbGRRdWVyeVN0cmluZ18xW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGt2cCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBrdnApLCBwYXJhbXMpO1xuICAgIHZhciBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgKyBcIj1cIiArIGVuY29kZVVSSShrdnBba2V5XSk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsICsgXCI/XCIgKyBxdWVyeVN0cmluZztcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2V0UGFyYW1zOiBzZXRQYXJhbXNcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEpzTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1YwYVd3dmRYSnNMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN1FVRkJRU3hUUVVGVExGTkJRVk1zUTBGQlF5eEhRVUZuUWl4RlFVRkZMRTFCUVdNN1NVRkJhRU1zYjBKQlFVRXNSVUZCUVN4UlFVRm5RanRKUVVNdlFpeEpRVUZOTEdkQ1FVRm5RaXhIUVVGWExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRiRVFzU1VGQlNTeEhRVUZITEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFbEJRVWtzWjBKQlFXZENMRWxCUVVrc1EwRkJReXhGUVVGRk8xRkJRM1pDTEVsQlFVMHNaMEpCUVdNc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVWdVJTeG5Ra0ZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlEzaENMRWxCUVUwc1JVRkJSU3hIUVVGaExHZENRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyeEVMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRUanRKUVVWRUxFZEJRVWNzZVVKQlFVOHNSMEZCUnl4SFFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJSVEZDTEVsQlFVMHNWMEZCVnl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzFOQlF5OUNMRWRCUVVjc1EwRkJReXhWUVVGQkxFZEJRVWM3VVVGRFNpeFBRVUZWTEVkQlFVY3NVMEZCU1N4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZITEVOQlFVTTdTVUZETTBNc1EwRkJReXhEUVVGRE8xTkJRMFFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUldZc1NVRkJTU3huUWtGQlowSXNTVUZCU1N4RFFVRkRMRVZCUVVVN1VVRkRka0lzVDBGQlR5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3huUWtGQlowSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGREwwUTdVMEZCVFR0UlFVTklMRTlCUVU4c1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTTdTMEZEYkVNN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4VFFVRlRMRmRCUVVFN1EwRkRXaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMlYwVUdGeVlXMXpLSFZ5YkRvZ2MzUnlhVzVuSUQwZ1hDSmNJaXdnY0dGeVlXMXpPaUJ2WW1wbFkzUXBJSHRjYmlBZ0lDQmpiMjV6ZENCeGRXVnllVk4wY21sdVowbHVaR1Y0T2lCdWRXMWlaWElnUFNCMWNtd3VhVzVrWlhoUFppaGNJajljSWlrN1hHNGdJQ0FnYkdWMElHdDJjRG9nWVc1NUlEMGdlMzA3WEc0Z0lDQWdhV1lnS0hGMVpYSjVVM1J5YVc1blNXNWtaWGdnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnZiR1JSZFdWeWVWTjBjbWx1WnlBOUlIVnliQzV6ZFdKemRISW9jWFZsY25sVGRISnBibWRKYm1SbGVDQXJJREVwTG5Od2JHbDBLRndpSmx3aUtUdGNiaUFnSUNBZ0lDQWdMeThnUUhSekxXbG5ibTl5WlZ4dUlDQWdJQ0FnSUNCdmJHUlJkV1Z5ZVZOMGNtbHVaeTVtYjNKRllXTm9LQ2g0TENCcEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCcmRqb2djM1J5YVc1blcxMGdQU0J2YkdSUmRXVnllVk4wY21sdVoxdHBYUzV6Y0d4cGRDaGNJajFjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JyZG5CYmEzWmJNRjFkSUQwZ2EzWmJNVjA3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd0MmNDQTlJSHN1TGk1cmRuQXNJQzR1TG5CaGNtRnRjMzA3WEc1Y2JpQWdJQ0JqYjI1emRDQnhkV1Z5ZVZOMGNtbHVaeUE5SUU5aWFtVmpkQzVyWlhsektHdDJjQ2xjYmlBZ0lDQWdJQ0FnTG0xaGNDaHJaWGtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTJ0bGVYMDlKSHRsYm1OdlpHVlZVa2tvYTNad1cydGxlVjBwZldBN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQzVxYjJsdUtGd2lKbHdpS1R0Y2JseHVJQ0FnSUdsbUlDaHhkV1Z5ZVZOMGNtbHVaMGx1WkdWNElENDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDNXpkV0p6ZEhKcGJtY29NQ3dnY1hWbGNubFRkSEpwYm1kSmJtUmxlQ0FySURFcElDc2djWFZsY25sVGRISnBibWM3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnliQ0FySUZ3aVAxd2lJQ3NnY1hWbGNubFRkSEpwYm1jN1hHNGdJQ0FnZlZ4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVjBVR0Z5WVcxelhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52ZXJzaW9uID0gdm9pZCAwO1xudmFyIHZlcnNpb24gPSBfX1ZFUlNJT05fXztcbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZ5YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTkyWlhKemFXOXVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3p0QlFVVkJMRWxCUVUwc1QwRkJUeXhIUVVGSExGZEJRVmNzUTBGQlF6dEJRVVZ1UWl3d1FrRkJUeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1SbFkyeGhjbVVnWTI5dWMzUWdYMTlXUlZKVFNVOU9YMTg2SUhOMGNtbHVaenRjYmx4dVkyOXVjM1FnZG1WeWMybHZiaUE5SUY5ZlZrVlNVMGxQVGw5Zk8xeHVYRzVsZUhCdmNuUWdleUIyWlhKemFXOXVJSDA3WEc0aVhYMD0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/build/weRequest.min.js b/build/weRequest.min.js index 1d74b34..1669f1c 100644 --- a/build/weRequest.min.js +++ b/build/weRequest.min.js @@ -1,5 +1,5 @@ /*! - * weRequest 1.2.14 + * weRequest 1.2.15 * https://github.com/IvinWu/weRequest */ -module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=9)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sessionName:"session",loginTrigger:function(){return!1},codeToSession:{url:"",success:function(){}},successTrigger:function(){return!0},setHeader:{},urlPerfix:"",doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},errorRetryBtn:!1,reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey"}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){return n.default.request(e)}},function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;rn.default.sessionExpire&&(g(),1)?(o.default.doNotCheckSession=!0,p().then((function(){return e()}),(function(e){return t(e)}))):e()}))}var d=null;function p(){return d||(d=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 获取失败]"});var s,f;(s=r.code,(f="function"==typeof o.default.codeToSession.data?o.default.codeToSession.data():o.default.codeToSession.data||{})[o.default.codeToSession.codeName]=s,new Promise((function(e,t){var r=(new Date).getTime();wx.request({url:i.default.format(o.default.codeToSession.url),data:f,method:o.default.codeToSession.method||"GET",header:"function"==typeof o.default.setHeader?o.default.setHeader():o.default.setHeader,success:function(i){if(200===i.statusCode){if(o.default.codeToSession.report){var s=(new Date).getTime();u.default.report(o.default.codeToSession.report,r,s)}var f="";try{f=o.default.codeToSession.success(i.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()):t(a.default.getErrorMsg(i))}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();u.default.report("wx_login",r,e)},fail:function(e){return t({title:"登录失败",content:e.errMsg})}})})).then((function(){return d=null,e()})).catch((function(e){return d=null,s.default.hide(),t(e)}))}))),d}function g(){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 e(t){return new Promise((function(r,n){var i=t?function(){return f.default(t).then(t._resolve).catch(t._reject)}:function(){return e().then(r).catch(n)};return c().then((function(){return o.default.doNotCheckSession?Promise.resolve():(l||(l=new Promise((function(e,t){console.log("wx.checkSession()");var r=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return g(),p().then((function(){return e()}),(function(e){return t(e)}))},complete:function(){var e=(new Date).getTime();u.default.report("wx_checkSession",r,e)}})}))),l)}),(function(e){var t=e.title,r=e.content;return a.default.doError(t,r,i),n({title:t,content:r})})).then((function(){return r()}),(function(e){var t=e.title,r=e.content;return a.default.doError(t,r,i),n({title:t,content:r})}))}))},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:g}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function a(e){var t="";if("function"==typeof n.default.errorTitle)try{t=n.default.errorTitle(e.data)}catch(e){}else"string"==typeof n.default.errorTitle&&(t=n.default.errorTitle);var r="";if("function"==typeof n.default.errorContent)try{r=n.default.errorContent(e.data)}catch(e){}else"string"==typeof n.default.errorContent&&(r=n.default.errorContent);return{title:t,content:r}}function u(e,t,r){var o=n.default.errorRetryBtn&&"function"==typeof r;wx.showModal(Object.assign({title:e,content:t||"网络或服务异常,请稍后重试"},o?{showCancel:!0,confirmText:"重试",success:function(e){e.confirm&&"function"==typeof r&&r()}}:{showCancel:!1}))}t.default={systemError:function(e,t){if("function"==typeof e.fail)e.fail(t);else{u("",t.errMsg,(function(){return o.default(e).then(e._resolve).catch(e._reject)}))}},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else{var r=a(t);u(r.title,r.content,(function(){return o.default(e).then(e._resolve).catch(e._reject)}))}"function"==typeof n.default.errorCallback&&n.default.errorCallback(e,t),console.error(t)},doError:u,getErrorMsg:a}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={show:function(e){wx.showToast({title:"boolean"==typeof e?"加载中":e,icon:"loading",mask:!0,duration:6e4})},hide:function(){wx.hideToast({})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function a(e,t,r){"function"==typeof n.default.reportCGI&&n.default.reportCGI(e,t,r,o.default)}t.default={start:function(e){e._reportStartTime=(new Date).getTime()},end:function(e){e._reportEndTime=(new Date).getTime(),e.report&&e._reportStartTime&&a(e.report,e._reportStartTime,e._reportEndTime)},report:a}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){e.originUrl&&wx.getStorage({key:e.originUrl,success:function(t){(!0===e.cache||"function"==typeof e.cache&&e.cache(t.data))&&"function"==typeof e.success&&e.success(t.data,{isCache:!0}),"function"==typeof e.complete&&e.complete()}})},set:function(e,t){e.originUrl&&(!0===e.cache||"function"==typeof e.cache&&e.cache(t))&&wx.setStorage({key:e.originUrl,data:t})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(10),o=r(2),a=r(16),u=r(17),i=r(18),s=r(19),f=r(20),l=r(21),c={init:n.default,request:o.default,uploadFile:a.default,setSession:u.default,login:i.default,getSession:s.default,getConfig:f.default,version:l.version};t.default=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(e){Object.assign(n.default,e);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(6);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(3),a=r(5),u=r(8),i=r(7),s=r(4),f=r(13);t.default={responseForRequest:function(e,t){if(200!==e.statusCode)throw{type:"http-error",res:e};if(i.default.end(t),"json"===t.dataType&&"string"==typeof e.data){e.data=f.default(e.data);try{e.data=JSON.parse(e.data)}catch(r){if(t.catchError)throw new Error(r);return void a.default.logicError(t,e)}}if(n.default.loginTrigger(e.data)&&void 0!==t.reLoginCount&&t.reLoginCount=0){var a=e.substr(r+1).split("&");a.forEach((function(e,t){var r=a[t].split("=");o[r[0]]=r[1]}))}o=n(n({},o),t);var u=Object.keys(o).map((function(e){return e+"="+encodeURI(o[e])})).join("&");return r>=0?e.substring(0,r+1)+u:e+"?"+u}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(5);t.catchHandler=function(e,t,r){var o=e.type,a=e.res;if(t.catchError){if("http-error"===o)return r(new Error(a.statusCode.toString()));if("upload-error"===o)return r(new Error(a));if("logic-error"===o){var u=n.default.getErrorMsg(a);return r(new Error(u.content))}return r(e)}return e.type?n.default.logicError(t,e.res):r(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){return n.default.uploadFile(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);t.default=function(e){n.default.setSession(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);t.default=function(){return n.default.main()}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(1);t.default=function(){return n.default.session}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(){return{urlPerfix:n.default.urlPerfix,sessionExpireTime:n.default.sessionExpireTime,sessionExpireKey:n.default.sessionExpireKey,sessionExpire:o.default.sessionExpire}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.version="1.2.14"}]).default; \ No newline at end of file +module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=9)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sessionName:"session",loginTrigger:function(){return!1},codeToSession:{url:"",success:function(){}},successTrigger:function(){return!0},setHeader:{},urlPerfix:"",doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},errorRetryBtn:!1,reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey"}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){return n.default.request(e)}},function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;rn.default.sessionExpire&&(y(),1)?(o.default.doNotCheckSession=!0,p().then(function(){return e()},function(e){return t(e)})):e()})}var d=null;function p(){return d||(d=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 获取失败]"});var s,f;(s=r.code,f="function"==typeof o.default.codeToSession.data?o.default.codeToSession.data():o.default.codeToSession.data||{},o.default.codeToSession.codeName?f[o.default.codeToSession.codeName]=s:f.code=s,new Promise(function(e,t){var r=(new Date).getTime();wx.request({url:i.default.format(o.default.codeToSession.url),data:f,method:o.default.codeToSession.method||"GET",header:"function"==typeof o.default.setHeader?o.default.setHeader():o.default.setHeader,success:function(i){if(200===i.statusCode){if(o.default.codeToSession.report){var s=(new Date).getTime();a.default.report(o.default.codeToSession.report,r,s)}var f="";try{f=o.default.codeToSession.success(i.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()):t(u.default.getErrorMsg(i))}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();a.default.report("wx_login",r,e)},fail:function(e){return t({title:"登录失败",content:e.errMsg})}})}).then(function(){return d=null,e()}).catch(function(e){return d=null,s.default.hide(),t(e)})})),d}function y(){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 e(t){return new Promise(function(r,n){var i=t?function(){return f.default(t).then(t._resolve).catch(t._reject)}:function(){return e().then(r).catch(n)};return c().then(function(){return o.default.doNotCheckSession?Promise.resolve():(l||(l=new Promise(function(e,t){console.log("wx.checkSession()");var r=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return y(),p().then(function(){return e()},function(e){return t(e)})},complete:function(){var e=(new Date).getTime();a.default.report("wx_checkSession",r,e)}})})),l)},function(e){var t=e.title,r=e.content;return u.default.doError(t,r,i),n({title:t,content:r})}).then(function(){return r()},function(e){var t=e.title,r=e.content;return u.default.doError(t,r,i),n({title:t,content:r})})})},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:y}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function u(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 a(e,t,r){var o=n.default.errorRetryBtn&&"function"==typeof r;wx.showModal(Object.assign({title:e,content:t||"网络或服务异常,请稍后重试"},o?{showCancel:!0,confirmText:"重试",success:function(e){e.confirm&&"function"==typeof r&&r()}}:{showCancel:!1}))}t.default={systemError:function(e,t){"function"==typeof e.fail?e.fail(t):a("",t.errMsg,function(){return o.default(e).then(e._resolve).catch(e._reject)})},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else{var r=u(t);a(r.title,r.content,function(){return o.default(e).then(e._resolve).catch(e._reject)})}"function"==typeof n.default.errorCallback&&n.default.errorCallback(e,t),console.error(t)},doError:a,getErrorMsg:u}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={show:function(e){wx.showToast({title:"boolean"==typeof e?"加载中":e,icon:"loading",mask:!0,duration:6e4})},hide:function(){wx.hideToast({})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function 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}),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(2),u=r(16),a=r(17),i=r(18),s=r(19),f=r(20),l=r(21),c={init:n.default,request:o.default,uploadFile:u.default,setSession:a.default,login:i.default,getSession:s.default,getConfig:f.default,version:l.version};t.default=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(e){Object.assign(n.default,e);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(6);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(3),u=r(5),a=r(8),i=r(7),s=r(4),f=r(13);t.default={responseForRequest:function(e,t){if(200!==e.statusCode)throw{type:"http-error",res:e};if(i.default.end(t),"json"===t.dataType&&"string"==typeof e.data){e.data=f.default(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(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(n({},o),t);var a=Object.keys(o).map(function(e){return e+"="+encodeURI(o[e])}).join("&");return r>=0?e.substring(0,r+1)+a:e+"?"+a}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.catchHandler=void 0;var n=r(5);t.catchHandler=function(e,t,r){var o=e.type,u=e.res;if(t.catchError){if("http-error"===o)return r(new Error(u.statusCode.toString()));if("upload-error"===o)return r(new Error(u));if("logic-error"===o){var a=n.default.getErrorMsg(u);return r(new Error(a.content))}return r(e)}return e.type?n.default.logicError(t,e.res):r(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){return n.default.uploadFile(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);t.default=function(e){n.default.setSession(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);t.default=function(){return n.default.main()}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(1);t.default=function(){return n.default.session}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(){return{urlPerfix:n.default.urlPerfix,sessionExpireTime:n.default.sessionExpireTime,sessionExpireKey:n.default.sessionExpireKey,sessionExpire:o.default.sessionExpire}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.version=void 0;t.version="1.2.15"}]).default; \ No newline at end of file diff --git a/package.json b/package.json index b4d5735..7435867 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,19 @@ "scripts": { "build": "webpack --display-error-details", "commit": "git cz", - "pub": "npm publish" + "pub": "npm publish", + "test": "jest test" }, "dependencies": {}, "devDependencies": { + "@babel/core": "^7.12.9", + "@babel/preset-env": "^7.12.7", + "@babel/preset-typescript": "^7.12.7", + "@types/jest": "^26.0.16", + "babel-jest": "^26.6.3", "commitizen": "^3.0.5", "cz-conventional-changelog": "^2.1.0", + "jest": "^26.6.3", "prettier": "^1.15.3", "pretty-quick": "^1.8.0", "ts-loader": "^5.3.1", @@ -40,7 +47,7 @@ "tslint-config-prettier": "^1.17.0", "typescript": "^3.7.4", "webpack": "^4.28.0", - "webpack-cli": "^3.3.10" + "webpack-cli": "^3.3.12" }, "husky": { "hooks": { @@ -51,5 +58,16 @@ "commitizen": { "path": "./node_modules/cz-conventional-changelog" } + }, + "jest": { + "setupFiles": [ + "./test/__mock__/wx.ts" + ], + "collectCoverage": true, + "collectCoverageFrom": [ + "src/**/*.ts", + "!src/*.ts", + "!src/store/**/*.ts" + ] } } diff --git a/src/api/init.ts b/src/api/init.ts index 9d71592..52e0f67 100644 --- a/src/api/init.ts +++ b/src/api/init.ts @@ -4,14 +4,11 @@ import { IInitOption } from '../interface' export default (params: IInitOption) => { Object.assign(config, params); + console.log(config.errorTitle); try { status.session = wx.getStorageSync(config.sessionName!) || ''; - } catch (e) { - console.error('wx.getStorageSync:fail, can not get session.') - } + } catch (e) {} try { status.sessionExpire = wx.getStorageSync(config.sessionExpireKey || "sessionExpireKey") || Infinity; - } catch (e) { - console.error('wx.getStorageSync:fail, can not get sessionExpire.') - } + } catch (e) {} } diff --git a/src/module/errorHandler.ts b/src/module/errorHandler.ts index 987fef5..ff94e75 100644 --- a/src/module/errorHandler.ts +++ b/src/module/errorHandler.ts @@ -24,8 +24,6 @@ function logicError(obj: IRequestOption | IUploadFileOption, res: wx.RequestSucc if (typeof config.errorCallback === "function") { config.errorCallback(obj, res); } - - console.error(res); } function getErrorMsg(res: wx.RequestSuccessCallbackResult | wx.UploadFileSuccessCallbackResult) { diff --git a/src/module/mockManager.ts b/src/module/mockManager.ts index 95a5366..c7e2ec6 100644 --- a/src/module/mockManager.ts +++ b/src/module/mockManager.ts @@ -6,7 +6,6 @@ function get(obj: IRequestOption | IUploadFileOption): any { if(!(config.mockJson[obj.url] || (obj.originUrl && config.mockJson[obj.originUrl]))) { // mock 没有对应接口的数据 - console.error('mock 没有对应接口的数据'); return false; } diff --git a/src/module/responseHandler.ts b/src/module/responseHandler.ts index 8ab0bb8..bb34170 100644 --- a/src/module/responseHandler.ts +++ b/src/module/responseHandler.ts @@ -14,7 +14,7 @@ function responseForRequest( if (res.statusCode === 200) { durationReporter.end(obj); - + // 请求格式为json,但返回了string,说明内容中可能存在导致使得JavaScript异常的字符 if (obj.dataType === 'json' && typeof res.data === 'string') { res.data = jsonSuperset(res.data); @@ -43,9 +43,7 @@ function responseForRequest( } else { realData = res.data; } - } catch (e) { - console.error("Function successData occur error: " + e); - } + } catch (e) {} if (!obj.noCacheFlash) { // 如果为了保证页面不闪烁,则不回调,只是缓存最新数据,待下次进入再用 if (typeof obj.success === "function") { @@ -102,9 +100,7 @@ function responseForUploadFile( } else { realData = res.data; } - } catch (e) { - console.error("Function successData occur error: " + e); - } + } catch (e) {} if (typeof obj.success === "function") { obj.success(realData); diff --git a/src/module/sessionManager.ts b/src/module/sessionManager.ts index c989649..3dc8806 100644 --- a/src/module/sessionManager.ts +++ b/src/module/sessionManager.ts @@ -13,7 +13,6 @@ let checkSessionPromise: any = null; function checkSession() { if (!checkSessionPromise) { checkSessionPromise = new Promise((resolve, reject) => { - console.log("wx.checkSession()"); const start = new Date().getTime(); wx.checkSession({ success() { @@ -91,7 +90,6 @@ function doLogin() { function login() { return new Promise((resolve, reject) => { - console.log('wx.login'); const start = new Date().getTime(); wx.login({ success(res) { diff --git a/test/__mock__/wx.ts b/test/__mock__/wx.ts new file mode 100644 index 0000000..85f92c9 --- /dev/null +++ b/test/__mock__/wx.ts @@ -0,0 +1,167 @@ +declare namespace NodeJS { + interface Global { + wx: Object; + } +} + +const wx = { + // mock 状态 + __mock__: { + // 当前toast是否展示 + toastIsShow: false, + // 当前modal是否展示 + modalIsShow: false, + // storage 内容 + storage: {}, + }, + setStorage: jest.fn((options) => { + if (options.key && options.data) { + wx.__mock__.storage[options.key] = options.data; + } + }), + getStorageSync: jest.fn((options) => wx.__mock__.storage[options]), + getStorage: jest.fn((options) => { + if (options.key && options.success && wx.__mock__.storage[options.key]) { + return options.success({ data: wx.__mock__.storage[options.key] }); + } + }), + removeStorage: jest.fn((options) => { + if (options.key) { + delete wx.__mock__.storage[options.key]; + } + }), + showModal: jest.fn(() => { + wx.__mock__.modalIsShow = true; + }), + showToast: jest.fn(() => { + wx.__mock__.toastIsShow = true; + }), + hideToast: jest.fn(() => { + wx.__mock__.toastIsShow = false; + }), + login: jest.fn((obj) => { + if (typeof obj.success === "function") { + obj.success({ code: "js_code_xxxxxxxx" }); + } + if (typeof obj.complete === "function") { + obj.complete(); + } + }), + checkSession: jest.fn((obj) => { + if (typeof obj.fail === "function") { + obj.fail(); + } + }), + request: jest.fn((obj) => { + return new Promise((resolve, reject) => { + process.nextTick(() => { + const url = new URL(obj.url); + const response = httpResponse[url.pathname]; + if (response && response.hasOwnProperty("statusCode")) { + if (typeof obj.success === "function") { + obj.success(response); + } + resolve(response); + } else { + if (typeof obj.fail === "function") { + obj.fail(response); + } + reject(response); + } + if (typeof obj.complete === "function") { + obj.complete(); + } + }); + }); + }), + uploadFile: jest.fn((obj) => { + return new Promise((resolve, reject) => { + process.nextTick(() => { + const url = new URL(obj.url); + const response = httpResponse[url.pathname]; + if (response.hasOwnProperty("statusCode")) { + if (typeof obj.success === "function") { + obj.success(response); + } + resolve(response); + } else { + if (typeof obj.fail === "function") { + obj.fail(response); + } + reject(response); + } + if (typeof obj.complete === "function") { + obj.complete(); + } + }); + }); + }), +}; + +/** 根据不同的请求pathname,mock返回的内容 */ +const httpResponse = { + "/success": { + statusCode: 200, + errMsg: "request:ok", + header: {}, + data: { + errcode: 0, + data: { + isSuccess: true, + }, + }, + }, + "/successButNotJson": { + statusCode: 200, + errMsg: "request:ok", + header: {}, + data: `{ + "errcode": 0, + "data": { + "isSuccess": true + } + }`, + }, + "/sessionExpired": { + statusCode: 200, + errMsg: "request:ok", + header: {}, + data: { + errcode: -1, + data: { + }, + }, + }, + "/cgiError": { + statusCode: 200, + errMsg: "request:ok", + header: {}, + data: { + errcode: -100, + msg: "业务错误提示", + data: {}, + }, + }, + "/code2Session": { + statusCode: 200, + errMsg: "request:ok", + header: {}, + data: { + errcode: 0, + data: { + sid: "sid", + }, + }, + }, + "/httpError": { + statusCode: 500, + errMsg: "request:ok", + header: {}, + data: "", + }, + "/networkError": { + errMsg: "request:fail Failed to execute 'send' on 'XMLHttpRequest'", + }, +}; + +global.wx = wx; diff --git a/test/api/getConfig.test.ts b/test/api/getConfig.test.ts new file mode 100644 index 0000000..af4f8a0 --- /dev/null +++ b/test/api/getConfig.test.ts @@ -0,0 +1,13 @@ +import getConfig from "../../src/api/getConfig"; +import config from "../../src/store/config"; +import status from "../../src/store/status"; + +describe("getConfig", () => { + test("return the correct config", () => { + const defaultConfig = getConfig(); + expect(defaultConfig.urlPerfix).toBe(config.urlPerfix); + expect(defaultConfig.sessionExpireKey).toBe(config.sessionExpireKey); + expect(defaultConfig.sessionExpireTime).toBe(config.sessionExpireTime); + expect(defaultConfig.sessionExpire).toBe(status.sessionExpire); + }); +}); diff --git a/test/api/getSession.test.ts b/test/api/getSession.test.ts new file mode 100644 index 0000000..3ed2412 --- /dev/null +++ b/test/api/getSession.test.ts @@ -0,0 +1,8 @@ +import getSession from "../../src/api/getSession"; + +describe("get Session", () => { + test("session default value is empty", () => { + const session = getSession(); + expect(session).toBe(""); + }); +}); diff --git a/test/api/init.ts b/test/api/init.ts new file mode 100644 index 0000000..4da589c --- /dev/null +++ b/test/api/init.ts @@ -0,0 +1,83 @@ +import init from "../../src/api/init"; + +const initOption = { + codeToSession: { + url: 'https://sample.com/code2Session', + codeName: 'js_code', + report: "codeToSession", + success: () =>{ + return 'xxxx' + } + }, + errorTitle: (res) => { + const { msg } = res + return `${msg || '服务可能存在异常,请稍后重试'}` + }, + errorContent: (res) => { + const { msg } = res + return `${msg || '服务可能存在异常,请稍后重试'}` + }, + sessionName: 'sid', + loginTrigger: (res) => { + return res.errcode === -1 + }, + successTrigger: res => res.errcode === 0, + successData: res => res.data, + setHeader: () => {return {header: 1}}, + sessionExpireTime: 3000, + mockJson: { + "https://sample.com/mock": { + errcode: 0, + data: { + mock: true + } + } + }, + globalData: { + version: '0.0.1' + }, + errorCallback(){}, + reportCGI(){} +} + +const initOptionWithSpecificErrorConfig = { + codeToSession: { + url: 'https://sample.com/code2Session', + codeName: 'js_code', + report: "codeToSession", + success: () =>{ + return 'xxxx' + } + }, + errorTitle: "服务可能存在异常,请稍后重试", + errorContent: "服务可能存在异常,请稍后重试", + sessionName: 'sid', + loginTrigger: (res) => { + return res.errcode === -1 + }, + successTrigger: res => res.errcode === 0, + successData: res => res.data, + setHeader: () => {return {header: 1}}, + sessionExpireTime: 3000, + mockJson: { + "https://sample.com/mock": { + errcode: 0, + data: { + mock: true + } + } + }, + globalData: { + version: '0.0.1' + }, + errorCallback(){}, + reportCGI(){} +} + +export function initail() { + init(initOption) +} + +export function initailWithSpecificErrorTitle() { + init(initOptionWithSpecificErrorConfig) +} diff --git a/test/api/login.test.ts b/test/api/login.test.ts new file mode 100644 index 0000000..7ab4af8 --- /dev/null +++ b/test/api/login.test.ts @@ -0,0 +1,14 @@ +import login from "../../src/api/login"; +import { initail } from "./init"; + +beforeAll(()=>{ + // 以下所有测试用例执行前,需提前执行初始化 + initail() +}) + +describe("login", () =>{ + test("call login", async () => { + await login(); + expect(wx.__mock__.storage['sid']).toBeTruthy(); + }) +}) diff --git a/test/api/request.test.ts b/test/api/request.test.ts new file mode 100644 index 0000000..462493b --- /dev/null +++ b/test/api/request.test.ts @@ -0,0 +1,180 @@ +import request from "../../src/api/request"; +import config from "../../src/store/config"; +import { initail } from "./init"; + +beforeAll(() => { + // 以下所有测试用例执行前,需提前执行初始化 + initail(); +}); + +describe("normal request", () => { + test("send a success request in callback way with duration report", (done) => { + expect.assertions(1); + const normalRequest = { + url: "https://sample.com/success", + showLoading: true, + report: "reportkey", + success: (res) => { + expect(res.isSuccess).toBe(true); + done(); + }, + }; + request(normalRequest); + }); + + test("send a cgi error request in callback way", (done) => { + expect.assertions(1); + const cgiErrorRequest = { + url: "https://sample.com/cgiError", + fail: (res) => { + expect(res.data.errcode).toBe(-100); + done(); + }, + }; + request(cgiErrorRequest); + }); + + test("send a http error request in callback way", (done) => { + expect.assertions(1); + const httpErrorRequest = { + url: "https://sample.com/httpError", + fail: (res) => { + expect(res.statusCode).toBe(500); + done(); + }, + }; + request(httpErrorRequest); + }); + + test("send a success request and response is not json", (done) => { + expect.assertions(1); + const notJsonRequest = { + url: "https://sample.com/successButNotJson", + success: (res) => { + expect(res.isSuccess).toBe(true); + done(); + }, + }; + request(notJsonRequest); + }); + + test("send a success request with checkSession", (done) => { + config.doNotCheckSession = false; + expect.assertions(1); + const normalRequest = { + url: "https://sample.com/success", + success: (res) => { + expect(res.isSuccess).toBe(true); + done(); + }, + }; + request(normalRequest); + }) + + // test("send a request when session is expired", (done) => { + // expect.assertions(1); + // const expiredRequest = { + // url: "https://sample.com/sessionExpired", + // success: (res) => { + // expect(res.isSuccess).toBe(true); + // done(); + // }, + // }; + // request(expiredRequest); + // }) + + // test("send a network error request in callback way without fail definition", async () => { + // expect.assertions(1); + // wx.__mock__.modalIsShow = false; + // const cgiErrorRequest = { + // url: "https://sample.com/cgiError", + // success(){} + // }; + // await request(cgiErrorRequest); + // expect(wx.__mock__.modalIsShow).toBe(true); + // done(); + // }); + + test("send a network error request in callback way", (done) => { + expect.assertions(1); + const networkErrorRequest = { + url: "https://sample.com/networkError", + fail: (res) => { + expect(res.errMsg).toContain("request:fail"); + done(); + }, + }; + request(networkErrorRequest) + }); +}); + +describe("mock request", () => { + test("try to get mock data", (done) => { + expect.assertions(1); + const mockRequest = { + url: "https://sample.com/mock", + success: (res) => { + expect(res.mock).toBe(true); + done(); + }, + }; + request(mockRequest); + }); +}); + +describe("cache request", () => { + test("send a success request in cache way", (done) => { + expect.assertions(1); + const mockRequest = { + url: "https://sample.com/success", + cache: true, + success: (res) => { + expect(res.isSuccess).toBe(true); + done(); + }, + }; + request(mockRequest); + }); + + test("check response set in storage successfully", () => { + expect(wx.__mock__.storage["https://sample.com/success"]).not.toBeFalsy(); + }); + + test("send a success request while already has cached", async (done) => { + expect.assertions(2); + const mockRequest = { + url: "https://sample.com/success", + cache: true, + success: (res, cache) => { + if (cache) { + expect(res.isSuccess).toBe(true); + expect(cache.isCache).toBe(true); + done(); + } + }, + }; + request(mockRequest); + }); +}); + +describe("request with promise way", () => { + test("send a http error request in promise way", async () => { + expect.assertions(1); + const httpErrorRequest = { + url: "https://sample.com/httpError", + catchError: true, + }; + await request(httpErrorRequest).catch((error) => { + expect(error).toEqual(new Error("500")); + }); + }); + + test("send a cgi error request in promise way", async () => { + expect.assertions(1); + const cgiErrorRequest = { + url: "https://sample.com/cgiError", + catchError: true, + }; + await expect(request(cgiErrorRequest)).rejects.toThrow(); + }); +}); diff --git a/test/api/setSession.test.ts b/test/api/setSession.test.ts new file mode 100644 index 0000000..57d4b89 --- /dev/null +++ b/test/api/setSession.test.ts @@ -0,0 +1,11 @@ +import setSession from "../../src/api/setSession"; +import getSession from "../../src/api/getSession"; + +describe("set Session", () => { + test("session value is correct", () => { + const someSession = 'sample'; + setSession(someSession); + const session = getSession(); + expect(session).toBe(someSession); + }); +}); diff --git a/test/api/uploadFile.test.ts b/test/api/uploadFile.test.ts new file mode 100644 index 0000000..01d8f57 --- /dev/null +++ b/test/api/uploadFile.test.ts @@ -0,0 +1,88 @@ +import uploadFile from "../../src/api/uploadFile"; +import { initailWithSpecificErrorTitle } from "./init"; + +beforeAll(()=>{ + // 以下所有测试用例执行前,需提前执行初始化 + initailWithSpecificErrorTitle(); +}) + +describe("uploadFile", () =>{ + test("send a normal uploadFile in callback way", (done) => { + expect.assertions(1); + const normalUploadFile = { + url: 'https://sample.com/success', + filePath: 'test.png', + name: 'test', + success: (res) => { + expect(res.isSuccess).toBe(true); + done(); + } + } + uploadFile(normalUploadFile); + }) + + test("send a cgi error uploadFile in callback way", (done) => { + expect.assertions(1); + const cgiErrorRequest = { + url: "https://sample.com/cgiError", + filePath: 'test.png', + name: 'test', + fail: (res) => { + expect(res.data.errcode).toBe(-100); + done(); + }, + }; + uploadFile(cgiErrorRequest); + }); + + test("send a success uploadFile and response is not json", (done) => { + expect.assertions(1); + const notJsonRequest = { + url: "https://sample.com/successButNotJson", + success: (res) => { + expect(res.isSuccess).toBe(true); + done(); + }, + }; + uploadFile(notJsonRequest); + }); + +}) + +describe("mock uploadFile", () => { + test("try to get mock data", (done) => { + expect.assertions(1); + const mockRequest = { + url: "https://sample.com/mock", + filePath: 'test.png', + name: 'test', + success: (res) => { + expect(res.mock).toBe(true); + done(); + }, + }; + uploadFile(mockRequest); + }); +}); + +describe("uploadFile with promise way", () => { + test("send a http error uploadFile in promise way", async () => { + expect.assertions(1); + const httpErrorRequest = { + url: "https://sample.com/httpError", + catchError: true, + }; + await uploadFile(httpErrorRequest).catch((error) => { + expect(error).toEqual(new Error("500")); + }); + }); + + test("send a cgi error uploadFile in promise way", async () => { + expect.assertions(1); + const cgiErrorRequest = { + url: "https://sample.com/cgiError", + catchError: true, + }; + await expect(uploadFile(cgiErrorRequest)).rejects.toThrow(); + }); +}); diff --git a/test/module/errorHandler.test.ts b/test/module/errorHandler.test.ts new file mode 100644 index 0000000..4fe13a9 --- /dev/null +++ b/test/module/errorHandler.test.ts @@ -0,0 +1,9 @@ +import errorHandler from "../../src/module/errorHandler"; + +describe("show error modal", () => { + test("doError", () => { + wx.__mock__.modalIsShow = false; + errorHandler.doError("标题", "内容"); + expect(wx.__mock__.modalIsShow).toBe(true); + }) +}) diff --git a/test/module/mockManager.test.ts b/test/module/mockManager.test.ts new file mode 100644 index 0000000..b9f771d --- /dev/null +++ b/test/module/mockManager.test.ts @@ -0,0 +1,10 @@ +import mockManager from "../../src/module/mockManager"; + +describe("mock", () =>{ + test("try to get mock data when no config", () => { + const data = mockManager.get({ + originUrl: 'success' + }) + expect(data).toBe(false) + }) +}) diff --git a/test/module/sessionManager.test.ts b/test/module/sessionManager.test.ts new file mode 100644 index 0000000..213faf2 --- /dev/null +++ b/test/module/sessionManager.test.ts @@ -0,0 +1,29 @@ +import sessionManager from "../../src/module/sessionManager"; +import setSession from "../../src/api/setSession"; +import getSession from "../../src/api/getSession"; +import config from '../../src/store/config' + +describe("delete session", () =>{ + test("delete session", () => { + const someValue = "sample"; + // 先手动设置一个session + setSession(someValue); + // 执行用例,调用删除session接口 + sessionManager.delSession(); + // 验证session是否被正确删除 + const session = getSession(); + expect(session).toBeFalsy; + }); +}) + +describe("set session", () => { + test("set session without expire time", () => { + const someValue = "sample"; + // 执行用例 + sessionManager.setSession(someValue); + // 验证session是否正确 + const session = getSession(); + expect(session).toBe(wx.__mock__.storage[config.sessionName]) + expect(session).toBe(someValue); + }) +}) diff --git a/test/util/jsonSuperset.test.ts b/test/util/jsonSuperset.test.ts new file mode 100644 index 0000000..fcf4e8c --- /dev/null +++ b/test/util/jsonSuperset.test.ts @@ -0,0 +1,14 @@ +import replace from "../../src/util/jsonSuperset"; + +describe.each([ + ["\u000A"], + ["\u000D"], + ["\u2028"], + ["\u2029"] +])("replace string", (char) => { + test(`return string without ${char}`, () => { + let string = `${char}sam${char}ple`; + string = replace(string) + expect(string).toBe("sample"); + }); +}) diff --git a/test/util/loading.test.ts b/test/util/loading.test.ts new file mode 100644 index 0000000..d94a89f --- /dev/null +++ b/test/util/loading.test.ts @@ -0,0 +1,16 @@ +import loading from "../../src/util/loading"; + +describe("loading", () => { + test("the toast is show when show is call with txt", () => { + loading.show("加载中"); + expect(wx.__mock__.toastIsShow).toBe(true); + }); + test("the toast is show when show is call with bool", () => { + loading.show(true); + expect(wx.__mock__.toastIsShow).toBe(true); + }); + test("the toast is hide when hide is call", () => { + loading.hide(); + expect(wx.__mock__.toastIsShow).toBe(false); + }); +}); diff --git a/test/util/url.test.ts b/test/util/url.test.ts new file mode 100644 index 0000000..0e0ac2e --- /dev/null +++ b/test/util/url.test.ts @@ -0,0 +1,15 @@ +import url from "../../src/util/url"; + +describe("setParams", () => { + test("return url with correct querystring when the input has no querystring", () => { + let sample = "https://www.example.com"; + sample = url.setParams(sample, { test: 1 }); + expect(sample).toBe("https://www.example.com?test=1"); + }); + + test("return url with correct querystring when the input already has querystring", () => { + let sample = "https://www.example.com?test=1"; + sample = url.setParams(sample, { test2: 2 }); + expect(sample).toBe("https://www.example.com?test=1&test2=2"); + }); +});