Files
weRequest/build/weRequest.js
2023-04-04 10:12:29 +08:00

1365 lines
302 KiB
JavaScript

/*!
* weRequest 1.6.7
* https://github.com/IvinWu/weRequest
*/
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/index.ts");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./src/api/getConfig.ts":
/*!******************************!*\
!*** ./src/api/getConfig.ts ***!
\******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
exports.default = (function () {
return {
urlPerfix: config_1.default.urlPerfix,
sessionExpireTime: config_1.default.sessionExpireTime,
sessionExpireKey: config_1.default.sessionExpireKey,
sessionExpire: status_1.default.sessionExpire
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9nZXRDb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBRXBDLG1CQUFlO0lBQ1gsT0FBTztRQUNILFNBQVMsRUFBRSxnQkFBTSxDQUFDLFNBQVM7UUFDM0IsaUJBQWlCLEVBQUUsZ0JBQU0sQ0FBQyxpQkFBaUI7UUFDM0MsZ0JBQWdCLEVBQUUsZ0JBQU0sQ0FBQyxnQkFBZ0I7UUFDekMsYUFBYSxFQUFFLGdCQUFNLENBQUMsYUFBYTtLQUN0QyxDQUFBO0FBQ0wsQ0FBQyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHVybFBlcmZpeDogY29uZmlnLnVybFBlcmZpeCxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZVRpbWU6IGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZUtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgIHNlc3Npb25FeHBpcmU6IHN0YXR1cy5zZXNzaW9uRXhwaXJlXG4gICAgfVxufTtcbiJdfQ==
/***/ }),
/***/ "./src/api/getSession.ts":
/*!*******************************!*\
!*** ./src/api/getSession.ts ***!
\*******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
exports.default = (function () {
return status_1.default.session;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZ2V0U2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFvQztBQUVwQyxtQkFBZTtJQUNYLE9BQU8sZ0JBQU0sQ0FBQyxPQUFPLENBQUE7QUFDekIsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgICByZXR1cm4gc3RhdHVzLnNlc3Npb25cbn1cbiJdfQ==
/***/ }),
/***/ "./src/api/init.ts":
/*!*************************!*\
!*** ./src/api/init.ts ***!
\*************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
exports.default = (function (params) {
Object.assign(config_1.default, params);
console.log(config_1.default.errorTitle);
try {
status_1.default.session = wx.getStorageSync(config_1.default.sessionName) || '';
}
catch (e) { }
try {
status_1.default.sessionExpire = wx.getStorageSync(config_1.default.sessionExpireKey || "sessionExpireKey") || Infinity;
}
catch (e) { }
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFvQztBQUNwQywwQ0FBb0M7QUFHcEMsbUJBQWUsVUFBQyxNQUFtQjtJQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9CLElBQUk7UUFDQSxnQkFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLGdCQUFNLENBQUMsV0FBWSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ2pFO0lBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRTtJQUNkLElBQUk7UUFDQSxnQkFBTSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLGdCQUFNLENBQUMsZ0JBQWdCLElBQUksa0JBQWtCLENBQUMsSUFBSSxRQUFRLENBQUM7S0FDdkc7SUFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO0FBQ2xCLENBQUMsRUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXG5pbXBvcnQgeyBJSW5pdE9wdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZSdcblxuZXhwb3J0IGRlZmF1bHQgKHBhcmFtczogSUluaXRPcHRpb24pID0+IHtcbiAgICBPYmplY3QuYXNzaWduKGNvbmZpZywgcGFyYW1zKTtcbiAgICBjb25zb2xlLmxvZyhjb25maWcuZXJyb3JUaXRsZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgc3RhdHVzLnNlc3Npb24gPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWcuc2Vzc2lvbk5hbWUhKSB8fCAnJztcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnLnNlc3Npb25FeHBpcmVLZXkgfHwgXCJzZXNzaW9uRXhwaXJlS2V5XCIpIHx8IEluZmluaXR5O1xuICAgIH0gY2F0Y2ggKGUpIHt9XG59XG4iXX0=
/***/ }),
/***/ "./src/api/login.ts":
/*!**************************!*\
!*** ./src/api/login.ts ***!
\**************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var sessionManager_1 = __webpack_require__(/*! ../module/sessionManager */ "./src/module/sessionManager.ts");
exports.default = (function () {
return sessionManager_1.default.main();
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2xvZ2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkRBQXFEO0FBRXJELG1CQUFlO0lBQ1gsT0FBTyx3QkFBYyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ2hDLENBQUMsRUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzZXNzaW9uTWFuYWdlciBmcm9tICcuLi9tb2R1bGUvc2Vzc2lvbk1hbmFnZXInXG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgICByZXR1cm4gc2Vzc2lvbk1hbmFnZXIubWFpbigpXG59XG4iXX0=
/***/ }),
/***/ "./src/api/request.ts":
/*!****************************!*\
!*** ./src/api/request.ts ***!
\****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var requestHandler_1 = __webpack_require__(/*! ../module/requestHandler */ "./src/module/requestHandler.ts");
exports.default = (function (obj) {
return requestHandler_1.default.request(obj);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJEQUFxRDtBQUdyRCxtQkFBZSxVQUFRLEdBQW1CO0lBQ3RDLE9BQU8sd0JBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDdEMsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlcXVlc3RIYW5kbGVyIGZyb20gJy4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlJ1xuXG5leHBvcnQgZGVmYXVsdCA8VFJlc3A+KG9iajogSVJlcXVlc3RPcHRpb24pOiBQcm9taXNlPFRSZXNwPiA9PiB7XG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyLnJlcXVlc3Qob2JqKVxufVxuIl19
/***/ }),
/***/ "./src/api/setSession.ts":
/*!*******************************!*\
!*** ./src/api/setSession.ts ***!
\*******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var sessionManager_1 = __webpack_require__(/*! ../module/sessionManager */ "./src/module/sessionManager.ts");
exports.default = (function (session) {
sessionManager_1.default.setSession(session);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0U2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvc2V0U2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJEQUFxRDtBQUVyRCxtQkFBZSxVQUFDLE9BQWU7SUFDM0Isd0JBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNlc3Npb25NYW5hZ2VyIGZyb20gJy4uL21vZHVsZS9zZXNzaW9uTWFuYWdlcidcblxuZXhwb3J0IGRlZmF1bHQgKHNlc3Npb246IHN0cmluZykgPT4ge1xuICAgIHNlc3Npb25NYW5hZ2VyLnNldFNlc3Npb24oc2Vzc2lvbik7XG59XG4iXX0=
/***/ }),
/***/ "./src/api/uploadFile.ts":
/*!*******************************!*\
!*** ./src/api/uploadFile.ts ***!
\*******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var requestHandler_1 = __webpack_require__(/*! ../module/requestHandler */ "./src/module/requestHandler.ts");
exports.default = (function (obj) {
return requestHandler_1.default.uploadFile(obj);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvdXBsb2FkRmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJEQUFxRDtBQUdyRCxtQkFBZSxVQUFDLEdBQXNCO0lBQ2xDLE9BQU8sd0JBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDekMsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlcXVlc3RIYW5kbGVyIGZyb20gJy4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCB7IElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikgPT4ge1xuICAgIHJldHVybiByZXF1ZXN0SGFuZGxlci51cGxvYWRGaWxlKG9iailcbn1cbiJdfQ==
/***/ }),
/***/ "./src/index.ts":
/*!**********************!*\
!*** ./src/index.ts ***!
\**********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var init_1 = __webpack_require__(/*! ./api/init */ "./src/api/init.ts");
var request_1 = __webpack_require__(/*! ./api/request */ "./src/api/request.ts");
var uploadFile_1 = __webpack_require__(/*! ./api/uploadFile */ "./src/api/uploadFile.ts");
var setSession_1 = __webpack_require__(/*! ./api/setSession */ "./src/api/setSession.ts");
var login_1 = __webpack_require__(/*! ./api/login */ "./src/api/login.ts");
var getSession_1 = __webpack_require__(/*! ./api/getSession */ "./src/api/getSession.ts");
var getConfig_1 = __webpack_require__(/*! ./api/getConfig */ "./src/api/getConfig.ts");
var version_1 = __webpack_require__(/*! ./version */ "./src/version.ts");
var weRequestObject = {
init: init_1.default,
request: request_1.default,
uploadFile: uploadFile_1.default,
setSession: setSession_1.default,
login: login_1.default,
getSession: getSession_1.default,
getConfig: getConfig_1.default,
version: version_1.version
};
exports.default = weRequestObject;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBNkI7QUFDN0IseUNBQW1DO0FBQ25DLCtDQUF5QztBQUN6QywrQ0FBeUM7QUFDekMscUNBQStCO0FBQy9CLCtDQUF5QztBQUN6Qyw2Q0FBdUM7QUFFdkMscUNBQW1DO0FBRW5DLElBQU0sZUFBZSxHQUFjO0lBQ2pDLElBQUksZ0JBQUE7SUFDSixPQUFPLG1CQUFBO0lBQ1AsVUFBVSxzQkFBQTtJQUNWLFVBQVUsc0JBQUE7SUFDVixLQUFLLGlCQUFBO0lBQ0wsVUFBVSxzQkFBQTtJQUNWLFNBQVMscUJBQUE7SUFDVCxPQUFPLG1CQUFBO0NBQ1IsQ0FBQztBQUVGLGtCQUFlLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbml0IGZyb20gXCIuL2FwaS9pbml0XCJcbmltcG9ydCByZXF1ZXN0IGZyb20gXCIuL2FwaS9yZXF1ZXN0XCJcbmltcG9ydCB1cGxvYWRGaWxlIGZyb20gXCIuL2FwaS91cGxvYWRGaWxlXCJcbmltcG9ydCBzZXRTZXNzaW9uIGZyb20gXCIuL2FwaS9zZXRTZXNzaW9uXCJcbmltcG9ydCBsb2dpbiBmcm9tIFwiLi9hcGkvbG9naW5cIlxuaW1wb3J0IGdldFNlc3Npb24gZnJvbSBcIi4vYXBpL2dldFNlc3Npb25cIlxuaW1wb3J0IGdldENvbmZpZyBmcm9tIFwiLi9hcGkvZ2V0Q29uZmlnXCJcbmltcG9ydCB7IHdlUmVxdWVzdCB9IGZyb20gXCIuL2ludGVyZmFjZVwiXG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJ1xuXG5jb25zdCB3ZVJlcXVlc3RPYmplY3Q6IHdlUmVxdWVzdCA9IHtcbiAgaW5pdCxcbiAgcmVxdWVzdCxcbiAgdXBsb2FkRmlsZSxcbiAgc2V0U2Vzc2lvbixcbiAgbG9naW4sXG4gIGdldFNlc3Npb24sXG4gIGdldENvbmZpZyxcbiAgdmVyc2lvblxufTtcblxuZXhwb3J0IGRlZmF1bHQgd2VSZXF1ZXN0T2JqZWN0O1xuIl19
/***/ }),
/***/ "./src/module/cacheManager.ts":
/*!************************************!*\
!*** ./src/module/cacheManager.ts ***!
\************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function get(obj) {
if (!obj.originUrl) {
return;
}
wx.getStorage({
key: obj.originUrl,
success: function (res) {
if (obj.cache === true ||
(typeof obj.cache === "function" && obj.cache(res.data))) {
if (typeof obj.success === "function") {
obj.success(res.data, { isCache: true });
}
}
if (typeof obj.complete === "function") {
obj.complete();
}
}
});
}
function set(obj, realData) {
if (!obj.originUrl) {
return;
}
if (obj.cache === true ||
(typeof obj.cache === "function" && obj.cache(realData))) {
wx.setStorage({
key: obj.originUrl,
data: realData
});
}
}
exports.default = {
get: get,
set: set
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9jYWNoZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxTQUFTLEdBQUcsQ0FBQyxHQUFtQjtJQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRTtRQUNoQixPQUFPO0tBQ1Y7SUFDRCxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQ1YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ2xCLE9BQU8sWUFBRSxHQUFHO1lBQ1IsSUFDSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUk7Z0JBQ2xCLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMxRDtnQkFDRSxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO2lCQUN6QzthQUNKO1lBQ0QsSUFBRyxPQUFPLEdBQUcsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFO2dCQUNuQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbEI7UUFDTCxDQUFDO0tBQ0osQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLEdBQW1CLEVBQUcsUUFBeUI7SUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUU7UUFDaEIsT0FBTztLQUNWO0lBQ0QsSUFDSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUk7UUFDbEIsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDMUQ7UUFDRSxFQUFFLENBQUMsVUFBVSxDQUFDO1lBQ1YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1lBQ2xCLElBQUksRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FBQTtLQUNMO0FBQ0wsQ0FBQztBQUVELGtCQUFlO0lBQ1gsR0FBRyxLQUFBO0lBQ0gsR0FBRyxLQUFBO0NBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZXF1ZXN0T3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiXG5cbmZ1bmN0aW9uIGdldChvYmo6IElSZXF1ZXN0T3B0aW9uKSB7XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd3guZ2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgc3VjY2VzcyAocmVzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgb2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVzLmRhdGEpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlcy5kYXRhLCB7aXNDYWNoZTogdHJ1ZX0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiBzZXQob2JqOiBJUmVxdWVzdE9wdGlvbiAsIHJlYWxEYXRhOiBzdHJpbmcgfCBvYmplY3QpIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIG9iai5jYWNoZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZWFsRGF0YSkpXG4gICAgKSB7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICAgICAgZGF0YTogcmVhbERhdGFcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBnZXQsXG4gICAgc2V0XG59O1xuIl19
/***/ }),
/***/ "./src/module/catchHandler.ts":
/*!************************************!*\
!*** ./src/module/catchHandler.ts ***!
\************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.catchHandler = void 0;
var errorHandler_1 = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.ts");
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
var ErrorWithData = (function (_super) {
__extends(ErrorWithData, _super);
function ErrorWithData(msg, data) {
if (data === void 0) { data = {}; }
var _this = _super.call(this, msg) || this;
_this.data = data;
return _this;
}
return ErrorWithData;
}(Error));
function catchHandler(e, obj, reject) {
var type = e.type, res = e.res;
if (typeof config_1.default.errorCallback === "function") {
config_1.default.errorCallback(obj, res);
}
if (obj.catchError) {
if (type === 'http-error') {
return reject(new Error(res.statusCode.toString()));
}
else if (type === 'logic-error') {
var msg = errorHandler_1.default.getErrorMsg(res);
return reject(new ErrorWithData(msg.content, res.data));
}
else if (type === 'system-error') {
return reject(new Error(res.errMsg));
}
else {
return reject(e);
}
}
else {
if (type === 'http-error' || type === 'logic-error') {
return errorHandler_1.default.logicError(obj, res);
}
else if (type === 'system-error') {
return errorHandler_1.default.systemError(obj, res);
}
else {
return reject(e);
}
}
}
exports.catchHandler = catchHandler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0Y2hIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9jYXRjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLCtDQUEwQztBQUMxQywwQ0FBb0M7QUFFcEM7SUFBNEIsaUNBQUs7SUFHN0IsdUJBQVksR0FBVyxFQUFFLElBQWM7UUFBZCxxQkFBQSxFQUFBLFNBQWM7UUFBdkMsWUFDSSxrQkFBTSxHQUFHLENBQUMsU0FFYjtRQURHLEtBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOztJQUNyQixDQUFDO0lBQ0wsb0JBQUM7QUFBRCxDQUFDLEFBUEQsQ0FBNEIsS0FBSyxHQU9oQztBQUVELFNBQVMsWUFBWSxDQUFDLENBQWUsRUFBRSxHQUF1QyxFQUFFLE1BQThCO0lBQ2xHLElBQUEsSUFBSSxHQUFVLENBQUMsS0FBWCxFQUFFLEdBQUcsR0FBSyxDQUFDLElBQU4sQ0FBTztJQUd4QixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFO1FBQzVDLGdCQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNsQztJQUVELElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtRQUNoQixJQUFJLElBQUksS0FBSyxZQUFZLEVBQUU7WUFDdkIsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUUsR0FBc0QsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzNHO2FBQU0sSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFO1lBQy9CLElBQUksR0FBRyxHQUFHLHNCQUFZLENBQUMsV0FBVyxDQUFDLEdBQXFELENBQUMsQ0FBQztZQUMxRixPQUFPLE1BQU0sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFHLEdBQXNELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUMvRzthQUFNLElBQUksSUFBSSxLQUFLLGNBQWMsRUFBRTtZQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN4QzthQUFNO1lBRUgsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7S0FDSjtTQUFNO1FBQ0gsSUFBSSxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxhQUFhLEVBQUU7WUFDakQsT0FBTyxzQkFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBcUQsQ0FBQyxDQUFDO1NBQzlGO2FBQU0sSUFBRyxJQUFJLEtBQUssY0FBYyxFQUFFO1lBQy9CLE9BQU8sc0JBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQThDLENBQUMsQ0FBQztTQUN4RjthQUFNO1lBRUgsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7S0FDSjtBQUNMLENBQUM7QUFFUSxvQ0FBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiwgSUVycm9yT2JqZWN0IH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tIFwiLi9lcnJvckhhbmRsZXJcIjtcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuXG5jbGFzcyBFcnJvcldpdGhEYXRhIGV4dGVuZHMgRXJyb3Ige1xuICAgIGRhdGE6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nLCBkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICBzdXBlcihtc2cpO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2F0Y2hIYW5kbGVyKGU6IElFcnJvck9iamVjdCwgb2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlcyB9ID0gZTtcblxuICAgIC8vIOWmguaenOaciemFjee9rue7n+S4gOmUmeivr+Wbnuiwg+WHveaVsO+8jOWImeaJp+ihjOWug1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWcuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuXG4gICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKChyZXMgYXMgV2VjaGF0TWluaXByb2dyYW0uUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkuc3RhdHVzQ29kZS50b1N0cmluZygpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgbGV0IG1zZyA9IGVycm9ySGFuZGxlci5nZXRFcnJvck1zZyhyZXMgYXMgV2VjaGF0TWluaXByb2dyYW0uUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcldpdGhEYXRhKG1zZy5jb250ZW50LCAocmVzIGFzIFdlY2hhdE1pbmlwcm9ncmFtLlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpLmRhdGEpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3lzdGVtLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IocmVzLmVyck1zZykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g5YW25LuWanPplJnor69cbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2h0dHAtZXJyb3InIHx8IHR5cGUgPT09ICdsb2dpYy1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvckhhbmRsZXIubG9naWNFcnJvcihvYmosIHJlcyBhcyBXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIGlmKHR5cGUgPT09ICdzeXN0ZW0tZXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JIYW5kbGVyLnN5c3RlbUVycm9yKG9iaiwgcmVzIGFzIFdlY2hhdE1pbmlwcm9ncmFtLkdlbmVyYWxDYWxsYmFja1Jlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDlhbbku5Zqc+mUmeivr1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHsgY2F0Y2hIYW5kbGVyIH0iXX0=
/***/ }),
/***/ "./src/module/durationReporter.ts":
/*!****************************************!*\
!*** ./src/module/durationReporter.ts ***!
\****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
var request_1 = __webpack_require__(/*! ../api/request */ "./src/api/request.ts");
function start(obj) {
obj._reportStartTime = new Date().getTime();
}
function end(obj) {
obj._reportEndTime = new Date().getTime();
if (obj.report && obj._reportStartTime) {
report(obj.report, obj._reportStartTime, obj._reportEndTime);
}
}
function report(name, startTime, endTime) {
if (typeof config_1.default.reportCGI === "function") {
config_1.default.reportCGI(name, startTime, endTime, request_1.default);
}
}
exports.default = {
start: start,
end: end,
report: report
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb25SZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2R1bGUvZHVyYXRpb25SZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFvQztBQUNwQywwQ0FBb0M7QUFHcEMsU0FBUyxLQUFLLENBQUMsR0FBdUM7SUFDbEQsR0FBRyxDQUFDLGdCQUFnQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLEdBQXVDO0lBQ2hELEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQyxJQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBZ0IsRUFBRSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQzFFO0FBQ0wsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLElBQVksRUFBRSxTQUFpQixFQUFFLE9BQWU7SUFDNUQsSUFBSSxPQUFPLGdCQUFNLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtRQUN4QyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxpQkFBTyxDQUFDLENBQUM7S0FDdkQ7QUFDTCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxLQUFLLE9BQUE7SUFDTCxHQUFHLEtBQUE7SUFDSCxNQUFNLFFBQUE7Q0FDVCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9hcGkvcmVxdWVzdCdcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuZnVuY3Rpb24gc3RhcnQob2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgb2JqLl9yZXBvcnRTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cblxuZnVuY3Rpb24gZW5kKG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIG9iai5fcmVwb3J0RW5kVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGlmKG9iai5yZXBvcnQgJiYgb2JqLl9yZXBvcnRTdGFydFRpbWUpIHtcbiAgICAgICAgcmVwb3J0KG9iai5yZXBvcnQgYXMgc3RyaW5nLCBvYmouX3JlcG9ydFN0YXJ0VGltZSwgb2JqLl9yZXBvcnRFbmRUaW1lKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlcG9ydChuYW1lOiBzdHJpbmcsIHN0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXIpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZXBvcnRDR0kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWcucmVwb3J0Q0dJKG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSwgcmVxdWVzdCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIHJlcG9ydFxufVxuIl19
/***/ }),
/***/ "./src/module/errorHandler.ts":
/*!************************************!*\
!*** ./src/module/errorHandler.ts ***!
\************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
var request_1 = __webpack_require__(/*! ../api/request */ "./src/api/request.ts");
function systemError(obj, res) {
if (typeof obj.fail === "function") {
obj.fail(res);
}
else {
var retry = function () { return request_1.default(obj).then(obj._resolve).catch(obj._reject); };
doError("", res.errMsg, retry);
}
}
function logicError(obj, res) {
if (typeof obj.fail === "function") {
obj.fail(res);
}
else if (typeof config_1.default.errorHandler === 'function') {
config_1.default.errorHandler(res.data);
}
else {
var _a = getErrorMsg(res), title = _a.title, content = _a.content;
var retry = function () { return request_1.default(obj).then(obj._resolve).catch(obj._reject); };
doError(title, content, retry);
}
}
function getErrorMsg(res) {
var title = "";
if (typeof config_1.default.errorTitle === "function") {
try {
title = config_1.default.errorTitle(res.data);
}
catch (e) {
}
}
else if (typeof config_1.default.errorTitle === "string") {
title = config_1.default.errorTitle;
}
var content = "";
if (typeof config_1.default.errorContent === "function") {
try {
content = config_1.default.errorContent(res.data);
}
catch (e) {
}
}
else if (typeof config_1.default.errorContent === "string") {
content = config_1.default.errorContent;
}
return { title: title, content: content };
}
function doError(title, content, retry) {
var showErrorRetryBtn = config_1.default.errorRetryBtn && typeof retry === "function";
wx.showModal(Object.assign({
title: title || "",
content: content || "网络或服务异常,请稍后重试",
}, !showErrorRetryBtn ? {
showCancel: false
} : {
showCancel: true,
confirmText: '重试',
success: function (res) {
if (res.confirm && typeof retry === "function")
retry();
}
}));
}
exports.default = {
systemError: systemError,
logicError: logicError,
doError: doError,
getErrorMsg: getErrorMsg
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQXFDO0FBR3JDLFNBQVMsV0FBVyxDQUFDLEdBQXVDLEVBQUUsR0FBNEM7SUFDdEcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDakI7U0FBTTtRQUNILElBQU0sS0FBSyxHQUFHLGNBQU0sT0FBQSxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBbEQsQ0FBa0QsQ0FBQztRQUN2RSxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbEM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBdUMsRUFBRSxHQUF1RztJQUNoSyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqQjtTQUFNLElBQUksT0FBTyxnQkFBTSxDQUFDLFlBQVksS0FBSyxVQUFVLEVBQUU7UUFDbEQsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDO1NBQU07UUFDRyxJQUFBLEtBQW1CLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBbEMsS0FBSyxXQUFBLEVBQUUsT0FBTyxhQUFvQixDQUFDO1FBQzFDLElBQU0sS0FBSyxHQUFHLGNBQU0sT0FBQSxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBbEQsQ0FBa0QsQ0FBQztRQUN2RSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNsQztBQUNMLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUF1RztJQUN4SCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDZixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO1FBQ3pDLElBQUk7WUFDQSxLQUFLLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ3RDO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtLQUNKO1NBQU0sSUFBSSxPQUFPLGdCQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtRQUM5QyxLQUFLLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUM7S0FDN0I7SUFFRCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDakIsSUFBSSxPQUFPLGdCQUFNLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRTtRQUMzQyxJQUFJO1lBQ0EsT0FBTyxHQUFHLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUMxQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1NBQ1g7S0FDSjtTQUFNLElBQUksT0FBTyxnQkFBTSxDQUFDLFlBQVksS0FBSyxRQUFRLEVBQUU7UUFDaEQsT0FBTyxHQUFHLGdCQUFNLENBQUMsWUFBWSxDQUFDO0tBQ2pDO0lBRUQsT0FBTyxFQUFDLEtBQUssT0FBQSxFQUFFLE9BQU8sU0FBQSxFQUFDLENBQUE7QUFDM0IsQ0FBQztBQUdELFNBQVMsT0FBTyxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsS0FBaUI7SUFFOUQsSUFBTSxpQkFBaUIsR0FBRyxnQkFBTSxDQUFDLGFBQWEsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7SUFDOUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRTtRQUNsQixPQUFPLEVBQUUsT0FBTyxJQUFJLGVBQWU7S0FDdEMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNwQixVQUFVLEVBQUUsS0FBSztLQUNwQixDQUFDLENBQUMsQ0FBQztRQUNBLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLE9BQU8sRUFBUCxVQUFRLEdBQXFEO1lBQ3pELElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVO2dCQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVELENBQUM7S0FDSixDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRCxrQkFBZTtJQUNYLFdBQVcsYUFBQTtJQUNYLFVBQVUsWUFBQTtJQUNWLE9BQU8sU0FBQTtJQUNQLFdBQVcsYUFBQTtDQUNkLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL2FwaS9yZXF1ZXN0JztcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuZnVuY3Rpb24gc3lzdGVtRXJyb3Iob2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLCByZXM6IFdlY2hhdE1pbmlwcm9ncmFtLkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJldHJ5ID0gKCkgPT4gcmVxdWVzdChvYmopLnRoZW4ob2JqLl9yZXNvbHZlKS5jYXRjaChvYmouX3JlamVjdCk7XG4gICAgICAgIGRvRXJyb3IoXCJcIiwgcmVzLmVyck1zZywgcmV0cnkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9naWNFcnJvcihvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIHJlczogV2VjaGF0TWluaXByb2dyYW0uUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCB8IFdlY2hhdE1pbmlwcm9ncmFtLlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbmZpZy5lcnJvckhhbmRsZXIocmVzLmRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHt0aXRsZSwgY29udGVudH0gPSBnZXRFcnJvck1zZyhyZXMpO1xuICAgICAgICBjb25zdCByZXRyeSA9ICgpID0+IHJlcXVlc3Qob2JqKS50aGVuKG9iai5fcmVzb2x2ZSkuY2F0Y2gob2JqLl9yZWplY3QpO1xuICAgICAgICBkb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRFcnJvck1zZyhyZXM6IFdlY2hhdE1pbmlwcm9ncmFtLlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCBXZWNoYXRNaW5pcHJvZ3JhbS5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgbGV0IHRpdGxlID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGUocmVzLmRhdGEpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGU7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudChyZXMuZGF0YSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudDtcbiAgICB9XG5cbiAgICByZXR1cm4ge3RpdGxlLCBjb250ZW50fVxufVxuXG4vLyDpu5jorqTplJnor6/lpITnkIbmmK/lvLnnqpdcbmZ1bmN0aW9uIGRvRXJyb3IodGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCByZXRyeT86ICgpID0+IGFueSkge1xuICAgIC8vIOaYr+WQpuaYvuekuumHjeivleaMiemSrlxuICAgIGNvbnN0IHNob3dFcnJvclJldHJ5QnRuID0gY29uZmlnLmVycm9yUmV0cnlCdG4gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgd3guc2hvd01vZGFsKE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB0aXRsZTogdGl0bGUgfHwgXCJcIixcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxuICAgIH0sICFzaG93RXJyb3JSZXRyeUJ0biA/IHtcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2VcbiAgICB9IDoge1xuICAgICAgICBzaG93Q2FuY2VsOiB0cnVlLFxuICAgICAgICBjb25maXJtVGV4dDogJ+mHjeivlScsXG4gICAgICAgIHN1Y2Nlc3MocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5TaG93TW9kYWxTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIikgcmV0cnkoKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHN5c3RlbUVycm9yLFxuICAgIGxvZ2ljRXJyb3IsXG4gICAgZG9FcnJvcixcbiAgICBnZXRFcnJvck1zZ1xufVxuIl19
/***/ }),
/***/ "./src/module/mockManager.ts":
/*!***********************************!*\
!*** ./src/module/mockManager.ts ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
var loading_1 = __webpack_require__(/*! ../util/loading */ "./src/util/loading.ts");
function get(obj) {
if (!(config_1.default.mockJson[obj.url] || (obj.originUrl && config_1.default.mockJson[obj.originUrl]))) {
return false;
}
var data = config_1.default.mockJson[obj.url] || (obj.originUrl ? config_1.default.mockJson[obj.originUrl] : '');
data = JSON.parse(JSON.stringify(data));
var res = {
data: data,
statusCode: 200
};
loading_1.default.hide();
return res;
}
exports.default = {
get: get
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL21vY2tNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLDJDQUFxQztBQUdyQyxTQUFTLEdBQUcsQ0FBQyxHQUF1QztJQUVoRCxJQUFHLENBQUMsQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFFakYsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxJQUFJLElBQUksR0FBRyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTdGLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4QyxJQUFNLEdBQUcsR0FBRztRQUNSLElBQUksTUFBQTtRQUNKLFVBQVUsRUFBRSxHQUFHO0tBQ2xCLENBQUM7SUFFRixpQkFBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsT0FBTyxHQUFHLENBQUE7QUFDZCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxHQUFHLEtBQUE7Q0FDTixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcblxuZnVuY3Rpb24gZ2V0KG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbik6IGFueSB7XG5cbiAgICBpZighKGNvbmZpZy5tb2NrSnNvbltvYmoudXJsXSB8fCAob2JqLm9yaWdpblVybCAmJiBjb25maWcubW9ja0pzb25bb2JqLm9yaWdpblVybF0pKSkge1xuICAgICAgICAvLyBtb2NrIOayoeacieWvueW6lOaOpeWPo+eahOaVsOaNrlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGRhdGEgPSBjb25maWcubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgPyBjb25maWcubW9ja0pzb25bb2JqLm9yaWdpblVybF0gOiAnJyk7XG4gICAgLy8gZGVlcCBjb3B5XG4gICAgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgfTtcblxuICAgIGxvYWRpbmcuaGlkZSgpO1xuICAgIHJldHVybiByZXNcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGdldFxufVxuIl19
/***/ }),
/***/ "./src/module/requestHandler.ts":
/*!**************************************!*\
!*** ./src/module/requestHandler.ts ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var loading_1 = __webpack_require__(/*! ../util/loading */ "./src/util/loading.ts");
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
var mockManager_1 = __webpack_require__(/*! ./mockManager */ "./src/module/mockManager.ts");
var cacheManager_1 = __webpack_require__(/*! ./cacheManager */ "./src/module/cacheManager.ts");
var sessionManager_1 = __webpack_require__(/*! ./sessionManager */ "./src/module/sessionManager.ts");
var responseHandler_1 = __webpack_require__(/*! ./responseHandler */ "./src/module/responseHandler.ts");
var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts");
var url_1 = __webpack_require__(/*! ../util/url */ "./src/util/url.ts");
var catchHandler_1 = __webpack_require__(/*! ./catchHandler */ "./src/module/catchHandler.ts");
function format(originUrl) {
if (originUrl.startsWith('http')) {
return originUrl;
}
else {
var urlPerfix = config_1.default.urlPerfix;
if (typeof config_1.default.urlPerfix === "function") {
urlPerfix = config_1.default.urlPerfix();
}
return urlPerfix + originUrl;
}
}
function preDo(obj, resolve, reject) {
if (typeof obj.reLoginCount === "undefined") {
obj.reLoginCount = 0;
}
else {
obj.reLoginCount++;
}
if (obj.reLoginCount === 0 && typeof obj.beforeSend === "function") {
obj.beforeSend();
}
if (obj.showLoading) {
loading_1.default.show(obj.showLoading);
}
if (!obj.originUrl) {
obj.originUrl = obj.url;
obj.url = format(obj.url);
}
obj._resolve = resolve;
obj._reject = reject;
return obj;
}
function initializeRequestObj(obj) {
var _a, _b;
if (!obj.data) {
obj.data = {};
}
obj.header = obj.header ? obj.header : {};
if (typeof config_1.default.setHeader === 'function') {
var header = config_1.default.setHeader();
if (typeof header === 'object') {
obj.header = __assign(__assign({}, obj.header), header);
}
}
else if (typeof config_1.default.setHeader === 'object') {
obj.header = __assign(__assign({}, obj.header), config_1.default.setHeader);
}
if (obj.originUrl !== config_1.default.codeToSession.url && status_1.default.session) {
obj.data = __assign(__assign({}, obj.data), (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a));
}
var gd = getGlobalData();
obj.data = __assign(__assign({}, gd), obj.data);
obj.method = obj.method || 'GET';
obj.dataType = obj.dataType || 'json';
if (!config_1.default.doNotUseQueryString && obj.method !== "GET") {
if (status_1.default.session) {
obj.url = url_1.default.setParams(obj.url, (_b = {}, _b[config_1.default.sessionName] = status_1.default.session, _b));
}
obj.url = url_1.default.setParams(obj.url, gd);
}
durationReporter_1.default.start(obj);
return obj;
}
function initializeUploadFileObj(obj) {
var _a, _b;
if (!obj.formData) {
obj.formData = {};
}
obj.header = obj.header ? obj.header : {};
if (typeof config_1.default.setHeader === 'function') {
var header = config_1.default.setHeader();
if (typeof header === 'object') {
obj.header = __assign(__assign({}, obj.header), header);
}
}
else if (typeof config_1.default.setHeader === 'object') {
obj.header = __assign(__assign({}, obj.header), config_1.default.setHeader);
}
if (obj.originUrl !== config_1.default.codeToSession.url && status_1.default.session) {
obj.formData = __assign(__assign({}, obj.formData), (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a));
}
var gd = getGlobalData();
obj.formData = __assign(__assign({}, gd), obj.formData);
if (!config_1.default.doNotUseQueryString) {
if (status_1.default.session) {
obj.url = url_1.default.setParams(obj.url, (_b = {}, _b[config_1.default.sessionName] = status_1.default.session, _b));
}
obj.url = url_1.default.setParams(obj.url, gd);
}
durationReporter_1.default.start(obj);
return obj;
}
function getGlobalData() {
var gd = {};
if (typeof config_1.default.globalData === "function") {
gd = config_1.default.globalData();
}
else if (typeof config_1.default.globalData === "object") {
gd = config_1.default.globalData;
}
return gd;
}
function doRequest(obj) {
obj = initializeRequestObj(obj);
if (obj.reLoginCount === 0 && typeof config_1.default.beforeSend === "function") {
obj = config_1.default.beforeSend(obj, status_1.default.session);
}
return new Promise(function (resolve, reject) {
wx.request(__assign(__assign({}, obj), { success: function (res) {
return resolve(res);
},
fail: function (res) {
return reject({ type: 'system-error', res: res });
},
complete: function () {
if (typeof obj.complete === "function") {
obj.complete();
}
if (obj.showLoading) {
loading_1.default.hide();
}
} }));
});
}
function doUploadFile(obj) {
obj = initializeUploadFileObj(obj);
if (obj.reLoginCount === 0 && typeof config_1.default.beforeSend === "function") {
obj = config_1.default.beforeSend(obj, status_1.default.session);
}
return new Promise(function (resolve, reject) {
wx.uploadFile(__assign(__assign({}, obj), { success: function (res) {
return resolve(res);
},
fail: function (res) {
return reject({ type: 'system-error', res: res });
},
complete: function () {
if (typeof obj.complete === "function") {
obj.complete();
}
if (obj.showLoading) {
loading_1.default.hide();
}
} }));
});
}
function request(obj) {
return new Promise(function (resolve, reject) {
obj = preDo(obj, resolve, reject);
if (config_1.default.mockJson) {
var mockResponse = mockManager_1.default.get(obj);
if (mockResponse) {
var response = responseHandler_1.default.responseForRequest(mockResponse, obj);
return resolve(response);
}
}
if (obj.cache) {
cacheManager_1.default.get(obj);
}
sessionManager_1.default.main(obj).then(function () {
return doRequest(obj);
}).then(function (res) {
var response = responseHandler_1.default.responseForRequest(res, obj);
if (response != null) {
return resolve(response);
}
}).catch(function (e) {
return catchHandler_1.catchHandler(e, obj, reject);
});
});
}
function uploadFile(obj) {
return new Promise(function (resolve, reject) {
obj = preDo(obj, resolve, reject);
if (config_1.default.mockJson) {
var mockResponse = mockManager_1.default.get(obj);
if (mockResponse) {
var response = responseHandler_1.default.responseForUploadFile(mockResponse, obj);
return resolve(response);
}
}
sessionManager_1.default.main(obj).then(function () {
return doUploadFile(obj);
}).then(function (res) {
var response = responseHandler_1.default.responseForUploadFile(res, obj);
if (response != null) {
return resolve(response);
}
}).catch(function (e) {
catchHandler_1.catchHandler(e, obj, reject);
});
});
}
exports.default = {
format: format,
request: request,
uploadFile: uploadFile
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBOEM7QUFHOUMsU0FBUyxNQUFNLENBQUMsU0FBaUI7SUFDN0IsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlCLE9BQU8sU0FBUyxDQUFBO0tBQ25CO1NBQU07UUFDSCxJQUFJLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3hDLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO0tBQ2hDO0FBQ0wsQ0FBQztBQUdELFNBQVMsS0FBSyxDQUErQyxHQUFNLEVBQUUsT0FBOEIsRUFBRSxNQUErQjtJQUVoSSxJQUFJLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDekMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNILEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN0QjtJQUVELElBQUksR0FBRyxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUNoRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDcEI7SUFFRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7UUFDakIsaUJBQU8sQ0FBQyxJQUFJLENB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LFFBQVEsRUFBRTtZQUNqQixJQUFJLFlBQVksR0FBRyxxQkFBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxJQUFJLFlBQVksRUFBRTtnQkFDZCxJQUFJLFFBQVEsR0FBRyx5QkFBZSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDeEUsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUI7U0FDSjtRQUVELHdCQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxHQUFzRDtZQUMzRCxJQUFJLFFBQVEsR0FBRyx5QkFBZSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvRCxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQ2xCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzVCO1FBQ0wsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUMsQ0FBZTtZQUNyQiwyQkFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxrQkFBZTtJQUNYLE1BQU0sUUFBQTtJQUNOLE9BQU8sU0FBQTtJQUNQLFVBQVUsWUFBQTtDQUNiLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IG1vY2tNYW5hZ2VyIGZyb20gJy4vbW9ja01hbmFnZXInXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xuaW1wb3J0IHNlc3Npb25NYW5hZ2VyIGZyb20gJy4vc2Vzc2lvbk1hbmFnZXInXG5pbXBvcnQgcmVzcG9uc2VIYW5kbGVyIGZyb20gJy4vcmVzcG9uc2VIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSBcIi4vZHVyYXRpb25SZXBvcnRlclwiXG5pbXBvcnQgdXJsIGZyb20gJy4uL3V0aWwvdXJsJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uLCBJRXJyb3JPYmplY3QgfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcbmltcG9ydCB7IGNhdGNoSGFuZGxlciB9IGZyb20gJy4vY2F0Y2hIYW5kbGVyJztcblxuLy8g5qC85byP5YyWdXJsXG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsOiBzdHJpbmcpIHtcbiAgICBpZiAob3JpZ2luVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICByZXR1cm4gb3JpZ2luVXJsXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHVybFBlcmZpeCA9IGNvbmZpZy51cmxQZXJmaXg7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWcudXJsUGVyZml4KClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsUGVyZml4ICsgb3JpZ2luVXJsO1xuICAgIH1cbn1cblxuLy8g5omA5pyJ6K+35rGC5Y+R5Ye65YmN6ZyA6KaB5YGa55qE5LqL5oOFXG5mdW5jdGlvbiBwcmVEbzxUIGV4dGVuZHMgSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbj4ob2JqOiBULCByZXNvbHZlOiAodmFsdWU/OiBhbnkpID0+IHZvaWQsIHJlamVjdD86IChyZWFzb24/OiBhbnkpID0+IHZvaWQpOiBUIHtcbiAgICAvLyDnmbvlvZXmgIHlpLHmlYjvvIzph43lpI3nmbvlvZXorqHmlbBcbiAgICBpZiAodHlwZW9mIG9iai5yZUxvZ2luQ291bnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cblxuICAgIGlmIChvYmoucmVMb2dpbkNvdW50ID09PSAwICYmIHR5cGVvZiBvYmouYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XG4gICAgfVxuXG4gICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICBsb2FkaW5nLnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG5cbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgb2JqLm9yaWdpblVybCA9IG9iai51cmw7XG4gICAgICAgIG9iai51cmwgPSBmb3JtYXQob2JqLnVybCk7XG4gICAgfVxuXG4gICAgb2JqLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICBvYmouX3JlamVjdCA9IHJlamVjdDtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8vIOagvOW8j+WMluWkhOeQhuivt+axgueahG9iauWGheWuuVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuXG4gICAgaWYgKCFvYmouZGF0YSkge1xuICAgICAgICBvYmouZGF0YSA9IHt9O1xuICAgIH1cbiAgICBcbiAgICBvYmouaGVhZGVyID0gb2JqLmhlYWRlciA/IG9iai5oZWFkZXIgOiB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGV0IGhlYWRlciA9IGNvbmZpZy5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gey4uLm9iai5oZWFkZXIsIC4uLmhlYWRlcn07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuc2V0SGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvYmouaGVhZGVyID0gey4uLm9iai5oZWFkZXIsIC4uLmNvbmZpZy5zZXRIZWFkZXJ9O1xuICAgIH1cblxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7IC4uLm9iai5kYXRhIGFzIG9iamVjdCwgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH07XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmRhdGEgPSB7IC4uLmdkLCAuLi5vYmouZGF0YSBhcyBvYmplY3QgfTtcblxuICAgIG9iai5tZXRob2QgPSBvYmoubWV0aG9kIHx8ICdHRVQnO1xuICAgIG9iai5kYXRhVHlwZSA9IG9iai5kYXRhVHlwZSB8fCAnanNvbic7XG5cbiAgICAvLyDlpoLmnpzor7fmsYLkuI3mmK9HRVTvvIzliJnlnKhVUkzkuK3oh6rliqjliqDkuIrnmbvlvZXmgIHlkozlhajlsYDlj4LmlbBcbiAgICBpZiAoIWNvbmZpZy5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCB7IFtjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbiB9KTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuLy8g5qC85byP5YyW5aSE55CG5LiK5Lyg5paH5Lu255qEb2Jq5YaF5a65XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmo6IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuXG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxldCBoZWFkZXIgPSBjb25maWcuc2V0SGVhZGVyKCk7XG4gICAgICAgIGlmICh0eXBlb2YgaGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5oZWFkZXJ9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5jb25maWcuc2V0SGVhZGVyfTtcbiAgICB9XG5cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHsgLi4ub2JqLmZvcm1EYXRhIGFzIG9iamVjdCwgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH07XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0geyAuLi5nZCwgLi4ub2JqLmZvcm1EYXRhIH07XG5cbiAgICBpZiAoIWNvbmZpZy5kb05vdFVzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIC8vIOWwhueZu+mZhuaAgeS5n+W4puWcqHVybOS4ilxuICAgICAgICBpZiAoc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIHsgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWFqOWxgOWPguaVsOWQjOaXtuaUvuWcqHVybOS4ilxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcbiAgICBsZXQgZ2Q6IGFueSA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmdsb2JhbERhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWcuZ2xvYmFsRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGdkO1xufVxuXG5mdW5jdGlvbiBkb1JlcXVlc3Qob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuICAgIG9iaiA9IGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaik7XG4gICAgaWYgKG9iai5yZUxvZ2luQ291bnQgPT09IDAgJiYgdHlwZW9mIGNvbmZpZy5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqID0gY29uZmlnLmJlZm9yZVNlbmQob2JqLCBzdGF0dXMuc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgLi4ub2JqLFxuICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWwocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHR5cGU6ICdzeXN0ZW0tZXJyb3InLCByZXMgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIGlmIChvYmoucmVMb2dpbkNvdW50ID09PSAwICYmIHR5cGVvZiBjb25maWcuYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iaiA9IGNvbmZpZy5iZWZvcmVTZW5kKG9iaiwgc3RhdHVzLnNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2U8V2VjaGF0TWluaXByb2dyYW0uVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB3eC51cGxvYWRGaWxlKHtcbiAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiAnc3lzdGVtLWVycm9yJywgcmVzIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHJlcXVlc3Q8VFJlc3A+KG9iajogSVJlcXVlc3RPcHRpb24pOiBQcm9taXNlPFRSZXNwPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChjb25maWcubW9ja0pzb24pIHtcbiAgICAgICAgICAgIGxldCBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlci5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIucmVzcG9uc2VGb3JSZXF1ZXN0KG1vY2tSZXNwb25zZSwgb2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqLmNhY2hlKSB7XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBzZXNzaW9uTWFuYWdlci5tYWluKG9iaikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iailcbiAgICAgICAgfSkudGhlbigocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIucmVzcG9uc2VGb3JSZXF1ZXN0KHJlcywgb2JqKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoZTogSUVycm9yT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbik6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChjb25maWcubW9ja0pzb24pIHtcbiAgICAgICAgICAgIGxldCBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlci5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIucmVzcG9uc2VGb3JVcGxvYWRGaWxlKG1vY2tSZXNwb25zZSwgb2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXNzaW9uTWFuYWdlci5tYWluKG9iaikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iailcbiAgICAgICAgfSkudGhlbigocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIucmVzcG9uc2VGb3JVcGxvYWRGaWxlKHJlcywgb2JqKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoZTogSUVycm9yT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBjYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdCxcbiAgICByZXF1ZXN0LFxuICAgIHVwbG9hZEZpbGVcbn1cbiJdfQ==
/***/ }),
/***/ "./src/module/responseHandler.ts":
/*!***************************************!*\
!*** ./src/module/responseHandler.ts ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
var requestHandler_1 = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.ts");
var cacheManager_1 = __webpack_require__(/*! ./cacheManager */ "./src/module/cacheManager.ts");
var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts");
var sessionManager_1 = __webpack_require__(/*! ./sessionManager */ "./src/module/sessionManager.ts");
var jsonSuperset_1 = __webpack_require__(/*! ../util/jsonSuperset */ "./src/util/jsonSuperset.ts");
function responseForRequest(res, obj) {
if (res.statusCode === 200) {
durationReporter_1.default.end(obj);
if (obj.dataType === 'json' && typeof res.data === 'string') {
res.data = jsonSuperset_1.default(res.data);
try {
res.data = JSON.parse(res.data);
}
catch (e) {
throw { type: 'logic-error', res: res };
}
}
if (config_1.default.loginTrigger(res.data) && obj.reLoginCount !== undefined && obj.reLoginCount < config_1.default.reLoginLimit) {
sessionManager_1.default.delSession();
return requestHandler_1.default.request(obj);
}
else if (config_1.default.successTrigger(res.data)) {
var realData = "";
try {
if (typeof config_1.default.successData === 'function') {
realData = config_1.default.successData(res.data);
}
else {
realData = res.data;
}
}
catch (e) { }
cacheManager_1.default.set(obj, realData);
if (!obj.noCacheFlash) {
if (typeof obj.success === "function") {
obj.success(realData);
}
else {
return realData;
}
}
}
else {
throw { type: 'logic-error', res: res };
}
}
else {
throw { type: 'http-error', res: res };
}
}
function responseForUploadFile(res, obj) {
if (res.statusCode === 200) {
durationReporter_1.default.end(obj);
if (typeof res.data === 'string') {
res.data = jsonSuperset_1.default(res.data);
try {
res.data = JSON.parse(res.data);
}
catch (e) {
throw { type: 'logic-error', res: res };
}
}
if (config_1.default.loginTrigger(res.data) && obj.reLoginCount !== undefined && obj.reLoginCount < config_1.default.reLoginLimit) {
sessionManager_1.default.delSession();
return requestHandler_1.default.uploadFile(obj);
}
else if (config_1.default.successTrigger(res.data)) {
var realData = "";
try {
if (typeof config_1.default.successData === 'function') {
realData = config_1.default.successData(res.data);
}
else {
realData = res.data;
}
}
catch (e) { }
if (typeof obj.success === "function") {
obj.success(realData);
}
else {
return realData;
}
}
else {
throw { type: 'logic-error', res: res };
}
}
else {
throw { type: 'http-error', res: res };
}
}
exports.default = {
responseForRequest: responseForRequest,
responseForUploadFile: responseForUploadFile
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2VIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9yZXNwb25zZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsbURBQTZDO0FBQzdDLCtDQUF5QztBQUN6Qyx1REFBaUQ7QUFDakQsbURBQTZDO0FBRTdDLHFEQUErQztBQUUvQyxTQUFTLGtCQUFrQixDQUN2QixHQUFtRCxFQUNuRCxHQUFtQjtJQUVuQixJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1FBRXhCLDBCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUcxQixJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDekQsR0FBRyxDQUFDLElBQUksR0FBRyxzQkFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJO2dCQUNBLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUEsRUFBRSxDQUFBO2FBQ3JDO1NBQ0o7UUFFRCxJQUFJLGdCQUFNLENBQUMsWUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsWUFBWSxHQUFHLGdCQUFNLENBQUMsWUFBYSxFQUFFO1lBRTdHLHdCQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUIsT0FBTyx3QkFBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QzthQUFNLElBQUksZ0JBQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBRXhDLElBQUksUUFBUSxHQUFzQyxFQUFFLENBQUM7WUFDckQsSUFBSTtnQkFDQSxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFO29CQUMxQyxRQUFRLEdBQUcsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMzQztxQkFBTTtvQkFDSCxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztpQkFDdkI7YUFDSjtZQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7WUFFZCxzQkFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUU7Z0JBRW5CLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtvQkFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDekI7cUJBQU07b0JBQ0gsT0FBTyxRQUFRLENBQUM7aUJBQ25CO2FBQ0o7U0FDSjthQUFNO1lBRUgsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFBLEVBQUUsQ0FBQTtTQUNyQztLQUNKO1NBQU07UUFFSCxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEtBQUEsRUFBRSxDQUFBO0tBQ3BDO0FBQ0wsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQzFCLEdBQXNELEVBQ3RELEdBQXNCO0lBRXRCLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUU7UUFFeEIsMEJBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRzFCLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM5QixHQUFHLENBQUMsSUFBSSxHQUFHLHNCQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUk7Z0JBQ0EsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBQSxFQUFFLENBQUE7YUFDckM7U0FDSjtRQUVELElBQUksZ0JBQU0sQ0FBQyxZQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEdBQUcsZ0JBQU0sQ0FBQyxZQUFhLEVBQUU7WUFFN0csd0JBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QixPQUFPLHdCQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxnQkFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFFeEMsSUFBSSxRQUFRLEdBQXNDLEVBQUUsQ0FBQztZQUNyRCxJQUFJO2dCQUNBLElBQUksT0FBTyxnQkFBTSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7b0JBQzFDLFFBQVEsR0FBRyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzNDO3FCQUFNO29CQUNILFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2lCQUN2QjthQUNKO1lBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRTtZQUVkLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtnQkFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN6QjtpQkFBTTtnQkFDSCxPQUFPLFFBQVEsQ0FBQzthQUNuQjtTQUNKO2FBQU07WUFFSCxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUEsRUFBRSxDQUFBO1NBQ3JDO0tBQ0o7U0FBTTtRQUVILE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsS0FBQSxFQUFFLENBQUE7S0FDcEM7QUFDTCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxrQkFBa0Isb0JBQUE7SUFDbEIscUJBQXFCLHVCQUFBO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCByZXF1ZXN0SGFuZGxlciBmcm9tICcuL3JlcXVlc3RIYW5kbGVyJ1xuaW1wb3J0IGNhY2hlTWFuYWdlciBmcm9tICcuL2NhY2hlTWFuYWdlcidcbmltcG9ydCBkdXJhdGlvblJlcG9ydGVyIGZyb20gJy4vZHVyYXRpb25SZXBvcnRlcidcbmltcG9ydCBzZXNzaW9uTWFuYWdlciBmcm9tICcuL3Nlc3Npb25NYW5hZ2VyJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uLCBJQW55T2JqZWN0IH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuaW1wb3J0IGpzb25TdXBlcnNldCBmcm9tICcuLi91dGlsL2pzb25TdXBlcnNldCdcblxuZnVuY3Rpb24gcmVzcG9uc2VGb3JSZXF1ZXN0KFxuICAgIHJlczogV2VjaGF0TWluaXByb2dyYW0uUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCxcbiAgICBvYmo6IElSZXF1ZXN0T3B0aW9uXG4pOiBhbnkge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG5cbiAgICAgICAgZHVyYXRpb25SZXBvcnRlci5lbmQob2JqKTtcbiAgICAgICAgXG4gICAgICAgIC8vIOivt+axguagvOW8j+S4umpzb27vvIzkvYbov5Tlm57kuoZzdHJpbmfvvIzor7TmmI7lhoXlrrnkuK3lj6/og73lrZjlnKjlr7zoh7Tkvb/lvpdKYXZhU2NyaXB05byC5bi455qE5a2X56ymXG4gICAgICAgIGlmIChvYmouZGF0YVR5cGUgPT09ICdqc29uJyAmJiB0eXBlb2YgcmVzLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXMuZGF0YSA9IGpzb25TdXBlcnNldChyZXMuZGF0YSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gSlNPTi5wYXJzZShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXMgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5sb2dpblRyaWdnZXIhKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZy5yZUxvZ2luTGltaXQhKSB7XG4gICAgICAgICAgICAvLyDnmbvlvZXmgIHlpLHmlYjvvIzkuJTph43or5XmrKHmlbDkuI3otoXov4fphY3nva5cbiAgICAgICAgICAgIHNlc3Npb25NYW5hZ2VyLmRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlci5yZXF1ZXN0KG9iaik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnN1Y2Nlc3NUcmlnZ2VyKHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgLy8g5o6l5Y+j6L+U5Zue5oiQ5Yqf56CBXG4gICAgICAgICAgICBsZXQgcmVhbERhdGE6IHN0cmluZyB8IElBbnlPYmplY3QgfCBBcnJheUJ1ZmZlciA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnN1Y2Nlc3NEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gY29uZmlnLnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAvLyDnvJPlrZjlrZjlgqhcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlci5zZXQob2JqLCByZWFsRGF0YSk7XG4gICAgICAgICAgICBpZiAoIW9iai5ub0NhY2hlRmxhc2gpIHtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuLrkuobkv53or4HpobXpnaLkuI3pl6rng4HvvIzliJnkuI3lm57osIPvvIzlj6rmmK/nvJPlrZjmnIDmlrDmlbDmja7vvIzlvoXkuIvmrKHov5vlhaXlho3nlKhcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFsRGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDmjqXlj6Pov5Tlm57lpLHotKXnoIFcbiAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGh0dHBz6L+U5Zue54q25oCB56CB6Z2eMjAwXG4gICAgICAgIHRocm93IHsgdHlwZTogJ2h0dHAtZXJyb3InLCByZXMgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VGb3JVcGxvYWRGaWxlKFxuICAgIHJlczogV2VjaGF0TWluaXByb2dyYW0uVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCxcbiAgICBvYmo6IElVcGxvYWRGaWxlT3B0aW9uXG4pOiBhbnkge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG5cbiAgICAgICAgZHVyYXRpb25SZXBvcnRlci5lbmQob2JqKTtcblxuICAgICAgICAvLyDlhoXlrrnkuK3lj6/og73lrZjlnKjlr7zoh7Tkvb/lvpdKYXZhU2NyaXB05byC5bi455qE5a2X56ymXG4gICAgICAgIGlmICh0eXBlb2YgcmVzLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXMuZGF0YSA9IGpzb25TdXBlcnNldChyZXMuZGF0YSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gSlNPTi5wYXJzZShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXMgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5sb2dpblRyaWdnZXIhKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZy5yZUxvZ2luTGltaXQhKSB7XG4gICAgICAgICAgICAvLyDnmbvlvZXmgIHlpLHmlYjvvIzkuJTph43or5XmrKHmlbDkuI3otoXov4fphY3nva5cbiAgICAgICAgICAgIHNlc3Npb25NYW5hZ2VyLmRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlci51cGxvYWRGaWxlKG9iaik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnN1Y2Nlc3NUcmlnZ2VyKHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgLy8g5o6l5Y+j6L+U5Zue5oiQ5Yqf56CBXG4gICAgICAgICAgICBsZXQgcmVhbERhdGE6IHN0cmluZyB8IElBbnlPYmplY3QgfCBBcnJheUJ1ZmZlciA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnN1Y2Nlc3NEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gY29uZmlnLnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g5o6l5Y+j6L+U5Zue5aSx6LSl56CBXG4gICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICdsb2dpYy1lcnJvcicsIHJlcyB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBodHRwc+i/lOWbnueKtuaAgeeggemdnjIwMFxuICAgICAgICB0aHJvdyB7IHR5cGU6ICdodHRwLWVycm9yJywgcmVzIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICByZXNwb25zZUZvclJlcXVlc3QsXG4gICAgcmVzcG9uc2VGb3JVcGxvYWRGaWxlXG59O1xuIl19
/***/ }),
/***/ "./src/module/sessionManager.ts":
/*!**************************************!*\
!*** ./src/module/sessionManager.ts ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
var errorHandler_1 = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.ts");
var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts");
var requestHandler_1 = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.ts");
var loading_1 = __webpack_require__(/*! ../util/loading */ "./src/util/loading.ts");
var request_1 = __webpack_require__(/*! ../api/request */ "./src/api/request.ts");
var checkSessionPromise = null;
function checkSession() {
if (!checkSessionPromise) {
checkSessionPromise = new Promise(function (resolve, reject) {
var start = new Date().getTime();
wx.checkSession({
success: function () {
return resolve();
},
fail: function () {
delSession();
return doLogin().then(function () {
return resolve();
}, function (res) {
return reject(res);
});
},
complete: function () {
var end = new Date().getTime();
durationReporter_1.default.report('wx_checkSession', start, end);
}
});
});
}
return checkSessionPromise;
}
function isSessionExpireOrEmpty() {
if (!status_1.default.session) {
return true;
}
if (config_1.default.sessionExpireTime && new Date().getTime() > status_1.default.sessionExpire) {
delSession();
return true;
}
return false;
}
function checkLogin() {
return new Promise(function (resolve, reject) {
if (isSessionExpireOrEmpty()) {
config_1.default.doNotCheckSession = true;
return doLogin().then(function () {
return resolve();
}, function (res) {
return reject(res);
});
}
else {
return resolve();
}
});
}
var loginPromise = null;
function doLogin() {
if (!loginPromise) {
loginPromise = new Promise(function (resolve, reject) {
login().then(function () {
loginPromise = null;
return resolve();
}).catch(function (res) {
loginPromise = null;
loading_1.default.hide();
return reject(res);
});
});
}
return loginPromise;
}
function login() {
return new Promise(function (resolve, reject) {
var start = new Date().getTime();
wx.login({
success: function (res) {
if (res.code) {
code2Session(res.code).then(function () {
return resolve();
}).catch(function (res) {
return reject(res);
});
}
else {
return reject({ type: "system-error", res: res });
}
},
complete: function () {
var end = new Date().getTime();
durationReporter_1.default.report('wx_login', start, end);
},
fail: function (res) {
return reject({ type: "system-error", res: res });
}
});
});
}
function setSession(session) {
status_1.default.session = session;
config_1.default.doNotCheckSession = true;
if (config_1.default.sessionExpireTime && config_1.default.sessionExpireKey) {
status_1.default.sessionExpire = new Date().getTime() + config_1.default.sessionExpireTime;
wx.setStorage({
key: config_1.default.sessionExpireKey,
data: String(status_1.default.sessionExpire)
});
}
wx.setStorage({
key: config_1.default.sessionName,
data: status_1.default.session
});
}
function code2Session(code) {
return __awaiter(this, void 0, void 0, function () {
var data, obj;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(typeof config_1.default.codeToSession.data === "function")) return [3, 2];
return [4, config_1.default.codeToSession.data(code)];
case 1:
data = _a.sent();
return [3, 3];
case 2:
data = config_1.default.codeToSession.data || {};
_a.label = 3;
case 3:
if (config_1.default.codeToSession.codeName) {
data[config_1.default.codeToSession.codeName] = code;
}
else {
data.code = code;
}
obj = {
url: requestHandler_1.default.format(config_1.default.codeToSession.url),
data: data,
method: config_1.default.codeToSession.method || 'GET',
header: typeof config_1.default.setHeader === 'function' ? config_1.default.setHeader() : config_1.default.setHeader,
};
if (typeof config_1.default.beforeSend === "function") {
obj = config_1.default.beforeSend(obj);
}
return [2, new Promise(function (resolve, reject) {
var start = new Date().getTime();
wx.request(__assign(__assign({}, obj), { success: function (res) {
if (res.statusCode === 200) {
if (config_1.default.codeToSession.report) {
var end = new Date().getTime();
durationReporter_1.default.report(config_1.default.codeToSession.report, start, end);
}
var s = void 0;
try {
s = config_1.default.codeToSession.success(res.data, res);
}
catch (e) {
}
if (typeof s === 'string') {
status_1.default.session = s;
config_1.default.doNotCheckSession = true;
if (config_1.default.sessionExpireTime && config_1.default.sessionExpireKey) {
status_1.default.sessionExpire = new Date().getTime() + config_1.default.sessionExpireTime;
wx.setStorage({
key: config_1.default.sessionExpireKey,
data: String(status_1.default.sessionExpire)
});
}
wx.setStorage({
key: config_1.default.sessionName,
data: status_1.default.session
});
return resolve(s);
}
else {
return reject(errorHandler_1.default.getErrorMsg(res));
}
}
else {
return reject({ type: "http-error", res: res });
}
},
complete: function () {
}, fail: function (res) {
return reject({ type: "system-error", res: res });
} }));
})];
}
});
});
}
function delSession() {
status_1.default.session = '';
wx.removeStorage({
key: config_1.default.sessionName
});
if (config_1.default.sessionExpireTime && config_1.default.sessionExpireKey) {
status_1.default.sessionExpire = Infinity;
wx.removeStorage({
key: config_1.default.sessionExpireKey
});
}
}
function main(relatedRequestObj) {
return new Promise(function (resolve, reject) {
var retry = !relatedRequestObj
? function () { return main().then(resolve).catch(reject); }
: function () { return request_1.default(relatedRequestObj).then(relatedRequestObj._resolve).catch(relatedRequestObj._reject); };
return checkLogin().then(function () {
return config_1.default.doNotCheckSession ? Promise.resolve() : checkSession();
}, function (_a) {
var title = _a.title, content = _a.content;
errorHandler_1.default.doError(title, content, retry);
return reject({ title: title, content: content });
}).then(function () {
return resolve();
}, function (_a) {
var title = _a.title, content = _a.content;
errorHandler_1.default.doError(title, content, retry);
return reject({ title: title, content: content });
});
});
}
exports.default = {
main: main,
setSession: setSession,
delSession: delSession
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBQ3BDLCtDQUF5QztBQUN6Qyx1REFBaUQ7QUFDakQsbURBQTZDO0FBQzdDLDJDQUFxQztBQUNyQywwQ0FBb0M7QUFJcEMsSUFBSSxtQkFBbUIsR0FBUSxJQUFJLENBQUM7QUFFcEMsU0FBUyxZQUFZO0lBQ2pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtRQUN0QixtQkFBbUIsR0FBRyxJQUFJLE9BQU8sQ0FBTyxVQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ3BELElBQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkMsRUFBRSxDQUFDLFlBQVksQ0FBQztnQkFDWixPQUFPO29CQUVILE9BQU8sT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQ0QsSUFBSSxFQUFKO29CQUVJLFVBQVUsRUFBRSxDQUFDO29CQUNiLE9BQU8sT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNsQixPQUFPLE9BQU8sRUFBRSxDQUFDO29CQUNyQixDQUFDLEVBQUUsVUFBQyxHQUFRO3dCQUNSLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN2QixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELFFBQVE7b0JBQ0osSUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDakMsMEJBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDM0QsQ0FBQzthQUNKLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxD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QUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE9BQU8sTUFBTSxDQUFDLEVBQUMsS0FBSyxPQUFBLEVBQUUsT0FBTyxTQUFBLEVBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNKLE9BQU8sT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQyxFQUFFLFVBQUMsRUFBZ0I7Z0JBQWYsS0FBSyxXQUFBLEVBQUUsT0FBTyxhQUFBO1lBQ2Ysc0JBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQyxFQUFDLEtBQUssT0FBQSxFQUFFLE9BQU8sU0FBQSxFQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELGtCQUFlO0lBQ1gsSUFBSSxNQUFBO0lBQ0osVUFBVSxZQUFBO0lBQ1YsVUFBVSxZQUFBO0NBQ2IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgZXJyb3JIYW5kbGVyIGZyb20gJy4vZXJyb3JIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSAnLi9kdXJhdGlvblJlcG9ydGVyJ1xuaW1wb3J0IHJlcXVlc3RIYW5kbGVyIGZyb20gJy4vcmVxdWVzdEhhbmRsZXInXG5pbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9hcGkvcmVxdWVzdCdcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuLyog55Sf5ZG95ZGo5pyf5YaF5Y+q5YGa5LiA5qyh55qEY2hlY2tTZXNzaW9uICovXG5sZXQgY2hlY2tTZXNzaW9uUHJvbWlzZTogYW55ID0gbnVsbDtcblxuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgc3VjY2VzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g55m75b2V5oCB5pyJ5pWI77yM5LiU5Zyo5pys55Sf5ZG95ZGo5pyf5YaF5peg6aG75YaN5qOA6aqM5LqGXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDnmbvlvZXmgIHov4fmnJ9cbiAgICAgICAgICAgICAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgKHJlczogYW55KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGVja1Nlc3Npb25Qcm9taXNlO1xufVxuXG4vKiDliKTmlq1zZXNzaW9u5piv5ZCm5Li656m65oiW5bey6L+H5pyfICovXG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xuICAgIGlmICghc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgLy8g5aaC5p6c57yT5a2Y5Lit5rKh5pyJc2Vzc2lvblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzLnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbue8k+WtmOaXtumXtO+8jOS4lOe8k+WtmOaXtumXtOW3suWIsFxuICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjaGVja0xvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcbiAgICAgICAgICAgIC8vIOayoeacieeZu+mZhuaAge+8jOS4jemcgOimgeWGjWNoZWNrU2Vzc2lvblxuICAgICAgICAgICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIChyZXM6IGFueSk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g57yT5a2Y5Lit5pyJc2Vzc2lvbuS4lOacqui/h+acn1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbi8qIOeZu+mZhua1geeoi+eahHByb21pc2UgKi9cbmxldCBsb2dpblByb21pc2U6IGFueSA9IG51bGw7XG5cbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTJTZXNzaW9uKHJlcy5jb2RlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb246IHN0cmluZykge1xuICAgIHN0YXR1cy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAvLyDmjaLlm57mnaXnmoRzZXNzaW9u77yM5LiN6ZyA6KaB5YaNY2hlY2tTZXNzaW9uXG4gICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u6L+H5pyf5pe26Ze0XG4gICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXMuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzLnNlc3Npb25FeHBpcmUpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgIGRhdGE6IHN0YXR1cy5zZXNzaW9uXG4gICAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvZGUyU2Vzc2lvbihjb2RlOiBzdHJpbmcpIHtcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIC8vIGNvZGVUb1Nlc3Npb24uZGF0YeaUr+aMgeWHveaVsFxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhKGNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhIHx8IHt9O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvZGVUb1Nlc3Npb24uY29kZU5hbWUpIHtcbiAgICAgICAgZGF0YVtjb25maWcuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZV0gPSBjb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuY29kZSA9IGNvZGU7XG4gICAgfVxuXG4gICAgbGV0IG9iaiA9IHtcbiAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlci5mb3JtYXQoY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsKSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgbWV0aG9kOiBjb25maWcuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgIGhlYWRlcjogdHlwZW9mIGNvbmZpZy5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicgPyBjb25maWcuc2V0SGVhZGVyKCk6IGNvbmZpZy5zZXRIZWFkZXIsXG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmogPSBjb25maWcuYmVmb3JlU2VuZChvYmopO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6ICX5pe25LiK5oqlXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29kZVRvU2Vzc2lvbi5yZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIucmVwb3J0KGNvbmZpZy5jb2RlVG9TZXNzaW9uLnJlcG9ydCwgc3RhcnQsIGVuZClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEsIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaNouWbnuadpeeahHNlc3Npb27vvIzkuI3pnIDopoHlho1jaGVja1Nlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u6L+H5pyf5pe26Ze0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1cy5zZXNzaW9uRXhwaXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXMuc2Vzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JIYW5kbGVyLmdldEVycm9yTXNnKHJlcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dHlwZTogXCJodHRwLWVycm9yXCIsIHJlc30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dHlwZTogXCJzeXN0ZW0tZXJyb3JcIiwgcmVzfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuLyog5riF56m6c2Vzc2lvbiAqL1xuZnVuY3Rpb24gZGVsU2Vzc2lvbigpIHtcbiAgICBzdGF0dXMuc2Vzc2lvbiA9ICcnO1xuICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSBhcyBzdHJpbmdcbiAgICB9KTtcbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gSW5maW5pdHk7XG4gICAgICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFpbihyZWxhdGVkUmVxdWVzdE9iaj86IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmV0cnkgPSAhcmVsYXRlZFJlcXVlc3RPYmpcbiAgICAgICAgICAgIC8vIOWmguaenOayoeacieWFs+iBlOeahOivt+axgu+8jOmHjeivleWNs+iwg+eUqOiHqui6q1xuICAgICAgICAgICAgPyAoKSA9PiBtYWluKCkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAvLyDlpoLmnpzmnInlhbPogZTnmoTor7fmsYLvvIzph43or5XljbPosIPnlKjmiYDlhbPogZTnmoTor7fmsYJcbiAgICAgICAgICAgIDogKCkgPT4gcmVxdWVzdChyZWxhdGVkUmVxdWVzdE9iaikudGhlbihyZWxhdGVkUmVxdWVzdE9iai5fcmVzb2x2ZSkuY2F0Y2gocmVsYXRlZFJlcXVlc3RPYmouX3JlamVjdCk7XG4gICAgICAgIHJldHVybiBjaGVja0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBjaGVja1Nlc3Npb24oKVxuICAgICAgICB9LCAoe3RpdGxlLCBjb250ZW50fSkgPT4ge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlLCBjb250ZW50fSk7XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSwgKHt0aXRsZSwgY29udGVudH0pPT4ge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlLCBjb250ZW50fSk7XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1haW4sXG4gICAgc2V0U2Vzc2lvbixcbiAgICBkZWxTZXNzaW9uXG59XG4iXX0=
/***/ }),
/***/ "./src/store/config.ts":
/*!*****************************!*\
!*** ./src/store/config.ts ***!
\*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var defaultConfig = {
sessionName: "session",
loginTrigger: function () {
return false;
},
codeToSession: {
url: "",
success: function () { }
},
successTrigger: function () {
return true;
},
setHeader: {},
urlPerfix: "",
doNotCheckSession: false,
errorTitle: "操作失败",
errorContent: function (res) {
return res;
},
errorRetryBtn: false,
reLoginLimit: 3,
errorCallback: null,
reportCGI: false,
mockJson: false,
globalData: false,
sessionExpireKey: "sessionExpireKey",
errorHandler: null,
beforeSend: null
};
exports.default = defaultConfig;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JlL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLElBQU0sYUFBYSxHQUFnQjtJQUMvQixXQUFXLEVBQUUsU0FBUztJQUN0QixZQUFZO1FBQ1IsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUNELGFBQWEsRUFBRTtRQUNYLEdBQUcsRUFBRSxFQUFFO1FBQ1AsT0FBTyxFQUFFLGNBQU0sQ0FBQztLQUNuQjtJQUNELGNBQWM7UUFDVixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFDRCxTQUFTLEVBQUUsRUFBRTtJQUNiLFNBQVMsRUFBRSxFQUFFO0lBQ2IsaUJBQWlCLEVBQUUsS0FBSztJQUN4QixVQUFVLEVBQUUsTUFBTTtJQUNsQixZQUFZLEVBQVosVUFBYSxHQUFRO1FBQ2pCLE9BQU8sR0FBRyxDQUFBO0lBQ2QsQ0FBQztJQUNELGFBQWEsRUFBRSxLQUFLO0lBQ3BCLFlBQVksRUFBRSxDQUFDO0lBQ2YsYUFBYSxFQUFFLElBQUk7SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsUUFBUSxFQUFFLEtBQUs7SUFDZixVQUFVLEVBQUUsS0FBSztJQUVqQixnQkFBZ0IsRUFBRSxrQkFBa0I7SUFFcEMsWUFBWSxFQUFFLElBQUk7SUFFbEIsVUFBVSxFQUFFLElBQUk7Q0FDbkIsQ0FBQztBQUVGLGtCQUFlLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElJbml0T3B0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlJ1xuXG5jb25zdCBkZWZhdWx0Q29uZmlnOiBJSW5pdE9wdGlvbiA9IHtcbiAgICBzZXNzaW9uTmFtZTogXCJzZXNzaW9uXCIsXG4gICAgbG9naW5UcmlnZ2VyKCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuICAgIGNvZGVUb1Nlc3Npb246IHtcbiAgICAgICAgdXJsOiBcIlwiLFxuICAgICAgICBzdWNjZXNzOiAoKT0+IHt9XG4gICAgfSxcbiAgICBzdWNjZXNzVHJpZ2dlcigpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuICAgIHNldEhlYWRlcjoge30sXG4gICAgdXJsUGVyZml4OiBcIlwiLFxuICAgIGRvTm90Q2hlY2tTZXNzaW9uOiBmYWxzZSxcbiAgICBlcnJvclRpdGxlOiBcIuaTjeS9nOWksei0pVwiLFxuICAgIGVycm9yQ29udGVudChyZXM6IGFueSkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgfSxcbiAgICBlcnJvclJldHJ5QnRuOiBmYWxzZSxcbiAgICByZUxvZ2luTGltaXQ6IDMsXG4gICAgZXJyb3JDYWxsYmFjazogbnVsbCxcbiAgICByZXBvcnRDR0k6IGZhbHNlLFxuICAgIG1vY2tKc29uOiBmYWxzZSxcbiAgICBnbG9iYWxEYXRhOiBmYWxzZSxcbiAgICAvLyBzZXNzaW9u5Zyo5pys5Zyw57yT5a2Y55qEa2V5XG4gICAgc2Vzc2lvbkV4cGlyZUtleTogXCJzZXNzaW9uRXhwaXJlS2V5XCIsXG4gICAgLy8g6Ieq5a6a5LmJ6ZSZ6K+v5aSE55CG5Ye95pWwXG4gICAgZXJyb3JIYW5kbGVyOiBudWxsLFxuICAgIC8vIOivt+axguWPkemAgeWJje+8jOaPkOS+m2hvb2vnu5nlvIDlj5HogIXoh6rlrprkuYnkv67mlLnlj5HpgIHlhoXlrrlcbiAgICBiZWZvcmVTZW5kOiBudWxsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0Q29uZmlnO1xuIl19
/***/ }),
/***/ "./src/store/status.ts":
/*!*****************************!*\
!*** ./src/store/status.ts ***!
\*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = {
session: '',
sessionExpire: Infinity
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JlL3N0YXR1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFlO0lBQ1gsT0FBTyxFQUFFLEVBQVk7SUFFckIsYUFBYSxFQUFFLFFBQWtCO0NBQzdCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gICAgc2Vzc2lvbjogJycgYXMgc3RyaW5nLFxuICAgIC8vIHNlc3Npb27ov4fmnJ/nmoTml7bpl7TngrlcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eSBhcyBudW1iZXJcbn0gYXMgYW55XG4iXX0=
/***/ }),
/***/ "./src/util/jsonSuperset.ts":
/*!**********************************!*\
!*** ./src/util/jsonSuperset.ts ***!
\**********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var LINEFEED = /\u000A/g;
var CARRIAGERETURN = /\u000D/g;
var LINE_SEPARATOR = /\u2028/g;
var PARAGRAPH_SEPARATOR = /\u2029/g;
function replace(res) {
res = res.replace(LINEFEED, "");
res = res.replace(CARRIAGERETURN, "");
res = res.replace(LINE_SEPARATOR, "");
res = res.replace(PARAGRAPH_SEPARATOR, "");
return res;
}
exports.default = replace;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvblN1cGVyc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvanNvblN1cGVyc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBV0EsSUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQzNCLElBQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUNqQyxJQUFNLGNBQWMsR0FBRyxTQUFTLENBQUM7QUFDakMsSUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFFdEMsU0FBd0IsT0FBTyxDQUFDLEdBQVc7SUFDekMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBTkQsMEJBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiAgVSsyMDI4IGFuZCBVKzIwMjkgYXJlIGFsbG93ZWQgaW5zaWRlIHN0cmluZ3MgaW4gSlNPTiAoYXMgYWxsIGxpdGVyYWxcbiAgICBVbmljb2RlIGNoYXJhY3RlcnMpIGJ1dCBKYXZhU2NyaXB0IGRlZmluZXMgdGhlbSBhcyBuZXdsaW5lXG4gICAgc2VwZXJhdG9ycy4gQmVjYXVzZSBubyBsaXRlcmFsIG5ld2xpbmVzIGFyZSBhbGxvd2VkIGluIGEgc3RyaW5nLCB0aGlzXG4gICAgY2F1c2VzIGEgUGFyc2VFcnJvciBpbiB0aGUgYnJvd3Nlci4gV2Ugd29yayBhcm91bmQgdGhpcyBpc3N1ZSBieVxuICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIGVzY2FwZWQgdmVyc2lvbi4gVGhpcyBzaG91bGQgYmUgc2FmZSBiZWNhdXNlXG4gICAgYWNjb3JkaW5nIHRvIHRoZSBKU09OIHNwZWMsIHRoZXNlIGNoYXJhY3RlcnMgYXJlICpvbmx5KiB2YWxpZCBpbnNpZGVcbiAgICBhIHN0cmluZyBhbmQgc2hvdWxkIHRoZXJlZm9yZSBub3QgYmUgcHJlc2VudCBhbnkgb3RoZXIgcGxhY2VzLlxuXG4gICAgbW9yZSBpbmZvcm1hdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtanNvbi1zdXBlcnNldFxuKi9cblxuY29uc3QgTElORUZFRUQgPSAvXFx1MDAwQS9nO1xuY29uc3QgQ0FSUklBR0VSRVRVUk4gPSAvXFx1MDAwRC9nO1xuY29uc3QgTElORV9TRVBBUkFUT1IgPSAvXFx1MjAyOC9nO1xuY29uc3QgUEFSQUdSQVBIX1NFUEFSQVRPUiA9IC9cXHUyMDI5L2c7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcGxhY2UocmVzOiBzdHJpbmcpIHtcbiAgcmVzID0gcmVzLnJlcGxhY2UoTElORUZFRUQsIFwiXCIpO1xuICByZXMgPSByZXMucmVwbGFjZShDQVJSSUFHRVJFVFVSTiwgXCJcIik7XG4gIHJlcyA9IHJlcy5yZXBsYWNlKExJTkVfU0VQQVJBVE9SLCBcIlwiKTtcbiAgcmVzID0gcmVzLnJlcGxhY2UoUEFSQUdSQVBIX1NFUEFSQVRPUiwgXCJcIik7XG4gIHJldHVybiByZXNcbn1cbiJdfQ==
/***/ }),
/***/ "./src/util/loading.ts":
/*!*****************************!*\
!*** ./src/util/loading.ts ***!
\*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function show(txt) {
wx.showToast({
title: typeof txt === 'boolean' ? '加载中' : txt,
icon: 'loading',
mask: true,
duration: 60000
});
}
function hide() {
wx.hideToast({});
}
exports.default = {
show: show,
hide: hide
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2xvYWRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFTLElBQUksQ0FBQyxHQUFxQjtJQUMvQixFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ1QsS0FBSyxFQUFFLE9BQU8sR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHO1FBQzdDLElBQUksRUFBRSxTQUFTO1FBQ2YsSUFBSSxFQUFFLElBQUk7UUFDVixRQUFRLEVBQUUsS0FBSztLQUNsQixDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsU0FBUyxJQUFJO0lBQ1QsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBRUQsa0JBQWU7SUFDWCxJQUFJLE1BQUE7SUFDSixJQUFJLE1BQUE7Q0FDUCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gc2hvdyh0eHQ6IGJvb2xlYW4gfCBzdHJpbmcpIHtcbiAgICB3eC5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogdHlwZW9mIHR4dCA9PT0gJ2Jvb2xlYW4nID8gJ+WKoOi9veS4rScgOiB0eHQsXG4gICAgICAgIGljb246ICdsb2FkaW5nJyxcbiAgICAgICAgbWFzazogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDYwMDAwXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB3eC5oaWRlVG9hc3Qoe30pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgc2hvdyxcbiAgICBoaWRlXG59XG4iXX0=
/***/ }),
/***/ "./src/util/url.ts":
/*!*************************!*\
!*** ./src/util/url.ts ***!
\*************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
function setParams(url, params) {
if (url === void 0) { url = ""; }
var queryStringIndex = url.indexOf("?");
var kvp = {};
if (queryStringIndex >= 0) {
var oldQueryString_1 = url.substr(queryStringIndex + 1).split("&");
oldQueryString_1.forEach(function (x, i) {
var kv = oldQueryString_1[i].split("=");
kvp[kv[0]] = kv[1];
});
}
kvp = __assign(__assign({}, kvp), params);
var queryString = Object.keys(kvp)
.map(function (key) {
return key + "=" + encodeURI(kvp[key]);
})
.join("&");
if (queryStringIndex >= 0) {
return url.substring(0, queryStringIndex + 1) + queryString;
}
else {
return url + "?" + queryString;
}
}
exports.default = {
setParams: setParams
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLFNBQVMsQ0FBQyxHQUFnQixFQUFFLE1BQWM7SUFBaEMsb0JBQUEsRUFBQSxRQUFnQjtJQUMvQixJQUFNLGdCQUFnQixHQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLElBQUksZ0JBQWdCLElBQUksQ0FBQyxFQUFFO1FBQ3ZCLElBQU0sZ0JBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuRSxnQkFBYyxDQUFDLE9BQU8sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQU0sRUFBRSxHQUFhLGdCQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELEdBQUcseUJBQU8sR0FBRyxHQUFLLE1BQU0sQ0FBQyxDQUFDO0lBRTFCLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQy9CLEdBQUcsQ0FBQyxVQUFBLEdBQUc7UUFDSixPQUFVLEdBQUcsU0FBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFHLENBQUM7SUFDM0MsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWYsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDdkIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7S0FDL0Q7U0FBTTtRQUNILE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7S0FDbEM7QUFDTCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxTQUFTLFdBQUE7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gc2V0UGFyYW1zKHVybDogc3RyaW5nID0gXCJcIiwgcGFyYW1zOiBvYmplY3QpIHtcbiAgICBjb25zdCBxdWVyeVN0cmluZ0luZGV4OiBudW1iZXIgPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gICAgbGV0IGt2cDogYW55ID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBvbGRRdWVyeVN0cmluZyA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbGRRdWVyeVN0cmluZy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrdjogc3RyaW5nW10gPSBvbGRRdWVyeVN0cmluZ1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICBrdnBba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGt2cCA9IHsuLi5rdnAsIC4uLnBhcmFtc307XG5cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX09JHtlbmNvZGVVUkkoa3ZwW2tleV0pfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiJlwiKTtcblxuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVybCArIFwiP1wiICsgcXVlcnlTdHJpbmc7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgc2V0UGFyYW1zXG59O1xuIl19
/***/ }),
/***/ "./src/version.ts":
/*!************************!*\
!*** ./src/version.ts ***!
\************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = void 0;
var version = "1.6.7";
exports.version = version;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQztBQUVuQiwwQkFBTyIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgY29uc3QgX19WRVJTSU9OX186IHN0cmluZztcblxuY29uc3QgdmVyc2lvbiA9IF9fVkVSU0lPTl9fO1xuXG5leHBvcnQgeyB2ZXJzaW9uIH07XG4iXX0=
/***/ })
/******/ })["default"];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhdGNoSGFuZGxlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2pzb25TdXBlcnNldC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdXRpbC9sb2FkaW5nLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL3VybC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLCszQjs7Ozs7Ozs7Ozs7O0FDWjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxD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QUNBLHlCQUF5QixVQUFVO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHUvRTs7Ozs7Ozs7Ozs7O0FDeEM5QjtBQUNiLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0EsY0FBYyxPQUFXO0FBQ3pCO0FBQ0EsMkNBQTJDLHVXIiwiZmlsZSI6IndlUmVxdWVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdXJsUGVyZml4OiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZVRpbWU6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUsXG4gICAgICAgIHNlc3Npb25FeHBpcmVLZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlXG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWjJWMFEyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMkZ3YVM5blpYUkRiMjVtYVdjdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVc5RE8wRkJSWEJETEcxQ1FVRmxPMGxCUTFnc1QwRkJUenRSUVVOSUxGTkJRVk1zUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRk5CUVZNN1VVRkRNMElzYVVKQlFXbENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJN1VVRkRNME1zWjBKQlFXZENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJN1VVRkRla01zWVVGQllTeEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1lVRkJZVHRMUVVOMFF5eERRVUZCTzBGQlEwd3NRMEZCUXl4RlFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYzNSaGRIVnpJR1p5YjIwZ0p5NHVMM04wYjNKbEwzTjBZWFIxY3lkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tDa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJSFZ5YkZCbGNtWnBlRG9nWTI5dVptbG5MblZ5YkZCbGNtWnBlQ3hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpWUnBiV1U2SUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU3hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpVdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3NYRzRnSUNBZ0lDQWdJSE5sYzNOcGIyNUZlSEJwY21VNklITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxYRzRnSUNBZ2ZWeHVmVHRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb247XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZaMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVVZ3UXl4dFFrRkJaVHRKUVVOWUxFOUJRVThzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVFN1FVRkRla0lzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElDZ3BJRDArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjM1JoZEhWekxuTmxjM05wYjI1Y2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnXzEuZGVmYXVsdCwgcGFyYW1zKTtcbiAgICBjb25zb2xlLmxvZyhjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUpO1xuICAgIHRyeSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUpIHx8ICcnO1xuICAgIH1cbiAgICBjYXRjaCAoZSkgeyB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5IHx8IFwic2Vzc2lvbkV4cGlyZUtleVwiKSB8fCBJbmZpbml0eTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHsgfVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVwZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmFXNXBkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVU53UXl3d1EwRkJiME03UVVGSGNFTXNiVUpCUVdVc1ZVRkJReXhOUVVGdFFqdEpRVU12UWl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRPVUlzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBsQlF5OUNMRWxCUVVrN1VVRkRRU3huUWtGQlRTeERRVUZETEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNc1kwRkJZeXhEUVVGRExHZENRVUZOTEVOQlFVTXNWMEZCV1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wdEJRMnBGTzBsQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1IwRkJSVHRKUVVOa0xFbEJRVWs3VVVGRFFTeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhGUVVGRkxFTkJRVU1zWTBGQll5eERRVUZETEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTEVsQlFVa3NhMEpCUVd0Q0xFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTTdTMEZEZGtjN1NVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeEhRVUZGTzBGQlEyeENMRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4dWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNXBiWEJ2Y25RZ2V5QkpTVzVwZEU5d2RHbHZiaUI5SUdaeWIyMGdKeTR1TDJsdWRHVnlabUZqWlNkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tIQmhjbUZ0Y3pvZ1NVbHVhWFJQY0hScGIyNHBJRDArSUh0Y2JpQWdJQ0JQWW1wbFkzUXVZWE56YVdkdUtHTnZibVpwWnl3Z2NHRnlZVzF6S1R0Y2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloamIyNW1hV2N1WlhKeWIzSlVhWFJzWlNrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI0Z1BTQjNlQzVuWlhSVGRHOXlZV2RsVTNsdVl5aGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVWhLU0I4ZkNBbkp6dGNiaUFnSUNCOUlHTmhkR05vSUNobEtTQjdmVnh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVSWGh3YVhKbElEMGdkM2d1WjJWMFUzUnZjbUZuWlZONWJtTW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrZ2ZId2dYQ0p6WlhOemFXOXVSWGh3YVhKbFMyVjVYQ0lwSUh4OElFbHVabWx1YVhSNU8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdDlYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKCk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOW5hVzR1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZZWEJwTDJ4dloybHVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNa1JCUVhGRU8wRkJSWEpFTEcxQ1FVRmxPMGxCUTFnc1QwRkJUeXgzUWtGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkJPMEZCUTJoRExFTkJRVU1zUlVGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnpaWE56YVc5dVRXRnVZV2RsY2lCbWNtOXRJQ2N1TGk5dGIyUjFiR1V2YzJWemMybHZiazFoYm1GblpYSW5YRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJQ2dwSUQwK0lIdGNiaUFnSUNCeVpYUjFjbTRnYzJWemMybHZiazFoYm1GblpYSXViV0ZwYmlncFhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnJlcXVlc3Qob2JqKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WeGRXVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2Y21WeGRXVnpkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGUkxFZEJRVzFDTzBsQlEzUkRMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1FVRkRkRU1zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1SUgwZ1puSnZiU0FuTGk0dmFXNTBaWEptWVdObEoxeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQThWRkpsYzNBK0tHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBPaUJRY205dGFYTmxQRlJTWlhOd1BpQTlQaUI3WEc0Z0lDQWdjbVYwZFhKdUlISmxjWFZsYzNSSVlXNWtiR1Z5TG5KbGNYVmxjM1FvYjJKcUtWeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3Nlc3Npb25NYW5hZ2VyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LnNldFNlc3Npb24oc2Vzc2lvbik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZjMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVVZ5UkN4dFFrRkJaU3hWUVVGRExFOUJRV1U3U1VGRE0wSXNkMEpCUVdNc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZEZGtNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElITmxjM05wYjI1TllXNWhaMlZ5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl6WlhOemFXOXVUV0Z1WVdkbGNpZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLSE5sYzNOcGIyNDZJSE4wY21sdVp5a2dQVDRnZTF4dUlDQWdJSE5sYzNOcGIyNU5ZVzVoWjJWeUxuTmxkRk5sYzNOcGIyNG9jMlZ6YzJsdmJpazdYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYQnNiMkZrUm1sc1pTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZkWEJzYjJGa1JtbHNaUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGRExFZEJRWE5DTzBsQlEyeERMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1FVRkRla01zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCN0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlsY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGluaXRfMSA9IHJlcXVpcmUoXCIuL2FwaS9pbml0XCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL2FwaS9yZXF1ZXN0XCIpO1xudmFyIHVwbG9hZEZpbGVfMSA9IHJlcXVpcmUoXCIuL2FwaS91cGxvYWRGaWxlXCIpO1xudmFyIHNldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9zZXRTZXNzaW9uXCIpO1xudmFyIGxvZ2luXzEgPSByZXF1aXJlKFwiLi9hcGkvbG9naW5cIik7XG52YXIgZ2V0U2Vzc2lvbl8xID0gcmVxdWlyZShcIi4vYXBpL2dldFNlc3Npb25cIik7XG52YXIgZ2V0Q29uZmlnXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0Q29uZmlnXCIpO1xudmFyIHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG52YXIgd2VSZXF1ZXN0T2JqZWN0ID0ge1xuICAgIGluaXQ6IGluaXRfMS5kZWZhdWx0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3RfMS5kZWZhdWx0LFxuICAgIHVwbG9hZEZpbGU6IHVwbG9hZEZpbGVfMS5kZWZhdWx0LFxuICAgIHNldFNlc3Npb246IHNldFNlc3Npb25fMS5kZWZhdWx0LFxuICAgIGxvZ2luOiBsb2dpbl8xLmRlZmF1bHQsXG4gICAgZ2V0U2Vzc2lvbjogZ2V0U2Vzc2lvbl8xLmRlZmF1bHQsXG4gICAgZ2V0Q29uZmlnOiBnZXRDb25maWdfMS5kZWZhdWx0LFxuICAgIHZlcnNpb246IHZlcnNpb25fMS52ZXJzaW9uXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gd2VSZXF1ZXN0T2JqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeHRRMEZCTmtJN1FVRkROMElzZVVOQlFXMURPMEZCUTI1RExDdERRVUY1UXp0QlFVTjZReXdyUTBGQmVVTTdRVUZEZWtNc2NVTkJRU3RDTzBGQlF5OUNMQ3REUVVGNVF6dEJRVU42UXl3MlEwRkJkVU03UVVGRmRrTXNjVU5CUVcxRE8wRkJSVzVETEVsQlFVMHNaVUZCWlN4SFFVRmpPMGxCUTJwRExFbEJRVWtzWjBKQlFVRTdTVUZEU2l4UFFVRlBMRzFDUVVGQk8wbEJRMUFzVlVGQlZTeHpRa0ZCUVR0SlFVTldMRlZCUVZVc2MwSkJRVUU3U1VGRFZpeExRVUZMTEdsQ1FVRkJPMGxCUTB3c1ZVRkJWU3h6UWtGQlFUdEpRVU5XTEZOQlFWTXNjVUpCUVVFN1NVRkRWQ3hQUVVGUExHMUNRVUZCTzBOQlExSXNRMEZCUXp0QlFVVkdMR3RDUVVGbExHVkJRV1VzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnBibWwwSUdaeWIyMGdYQ0l1TDJGd2FTOXBibWwwWENKY2JtbHRjRzl5ZENCeVpYRjFaWE4wSUdaeWIyMGdYQ0l1TDJGd2FTOXlaWEYxWlhOMFhDSmNibWx0Y0c5eWRDQjFjR3h2WVdSR2FXeGxJR1p5YjIwZ1hDSXVMMkZ3YVM5MWNHeHZZV1JHYVd4bFhDSmNibWx0Y0c5eWRDQnpaWFJUWlhOemFXOXVJR1p5YjIwZ1hDSXVMMkZ3YVM5elpYUlRaWE56YVc5dVhDSmNibWx0Y0c5eWRDQnNiMmRwYmlCbWNtOXRJRndpTGk5aGNHa3ZiRzluYVc1Y0lseHVhVzF3YjNKMElHZGxkRk5sYzNOcGIyNGdabkp2YlNCY0lpNHZZWEJwTDJkbGRGTmxjM05wYjI1Y0lseHVhVzF3YjNKMElHZGxkRU52Ym1acFp5Qm1jbTl0SUZ3aUxpOWhjR2t2WjJWMFEyOXVabWxuWENKY2JtbHRjRzl5ZENCN0lIZGxVbVZ4ZFdWemRDQjlJR1p5YjIwZ1hDSXVMMmx1ZEdWeVptRmpaVndpWEc1cGJYQnZjblFnZXlCMlpYSnphVzl1SUgwZ1puSnZiU0FuTGk5MlpYSnphVzl1SjF4dVhHNWpiMjV6ZENCM1pWSmxjWFZsYzNSUFltcGxZM1E2SUhkbFVtVnhkV1Z6ZENBOUlIdGNiaUFnYVc1cGRDeGNiaUFnY21WeGRXVnpkQ3hjYmlBZ2RYQnNiMkZrUm1sc1pTeGNiaUFnYzJWMFUyVnpjMmx2Yml4Y2JpQWdiRzluYVc0c1hHNGdJR2RsZEZObGMzTnBiMjRzWEc0Z0lHZGxkRU52Ym1acFp5eGNiaUFnZG1WeWMybHZibHh1ZlR0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2QyVlNaWEYxWlhOMFQySnFaV04wTzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGdldChvYmopIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3eC5nZXRTdG9yYWdlKHtcbiAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVzLmRhdGEpKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZXMuZGF0YSwgeyBpc0NhY2hlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0KG9iaiwgcmVhbERhdGEpIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlYWxEYXRhKSkpIHtcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgICAgICBkYXRhOiByZWFsRGF0YVxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgZ2V0OiBnZXQsXG4gICAgc2V0OiBzZXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMkZqYUdWTllXNWhaMlZ5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWpZV05vWlUxaGJtRm5aWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkZRU3hUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUZ0UWp0SlFVTTFRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlR0UlFVTm9RaXhQUVVGUE8wdEJRMVk3U1VGRFJDeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eFRRVUZUTzFGQlEyeENMRTlCUVU4c1dVRkJSU3hIUVVGSE8xbEJRMUlzU1VGRFNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrN1owSkJRMnhDTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExGVkJRVlVzU1VGQlNTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVU14UkR0blFrRkRSU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRMjVETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGQk8ybENRVU42UXp0aFFVTktPMWxCUTBRc1NVRkJSeXhQUVVGUExFZEJRVWNzUTBGQlF5eFJRVUZSTEV0QlFVc3NWVUZCVlN4RlFVRkZPMmRDUVVOdVF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1lVRkRiRUk3VVVGRFRDeERRVUZETzB0QlEwb3NRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFXMUNMRVZCUVVjc1VVRkJlVUk3U1VGRGVFUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFVkJRVVU3VVVGRGFFSXNUMEZCVHp0TFFVTldPMGxCUTBRc1NVRkRTU3hIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEVsQlFVazdVVUZEYkVJc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eExRVUZMTEV0QlFVc3NWVUZCVlN4SlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSVUZETVVRN1VVRkRSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFsQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhUUVVGVE8xbEJRMnhDTEVsQlFVa3NSVUZCUlN4UlFVRlJPMU5CUTJwQ0xFTkJRVU1zUTBGQlFUdExRVU5NTzBGQlEwd3NRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzUjBGQlJ5eExRVUZCTzBsQlEwZ3NSMEZCUnl4TFFVRkJPME5CUTA0c1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aVhHNWNibVoxYm1OMGFXOXVJR2RsZENodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUtTQjdYRzRnSUNBZ2FXWWdLQ0Z2WW1vdWIzSnBaMmx1VlhKc0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNGdJQ0FnZDNndVoyVjBVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJR3RsZVRvZ2IySnFMbTl5YVdkcGJsVnliQ3hjYmlBZ0lDQWdJQ0FnYzNWalkyVnpjeUFvY21WektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OaFkyaGxJRDA5UFNCMGNuVmxJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS0hSNWNHVnZaaUJ2WW1vdVkyRmphR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaUFtSmlCdlltb3VZMkZqYUdVb2NtVnpMbVJoZEdFcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91YzNWalkyVnpjeUE5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTV6ZFdOalpYTnpLSEpsY3k1a1lYUmhMQ0I3YVhORFlXTm9aVG9nZEhKMVpYMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZb2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OdmJYQnNaWFJsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJ6WlhRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQXNJSEpsWVd4RVlYUmhPaUJ6ZEhKcGJtY2dmQ0J2WW1wbFkzUXBJSHRjYmlBZ0lDQnBaaUFvSVc5aWFpNXZjbWxuYVc1VmNtd3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQWdJRzlpYWk1allXTm9aU0E5UFQwZ2RISjFaU0I4ZkZ4dUlDQWdJQ0FnSUNBb2RIbHdaVzltSUc5aWFpNWpZV05vWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpSUNZbUlHOWlhaTVqWVdOb1pTaHlaV0ZzUkdGMFlTa3BYRzRnSUNBZ0tTQjdYRzRnSUNBZ0lDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQnZZbW91YjNKcFoybHVWWEpzTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2NtVmhiRVJoZEdGY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFFzWEc0Z0lDQWdjMlYwWEc1OU8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2F0Y2hIYW5kbGVyID0gdm9pZCAwO1xudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBFcnJvcldpdGhEYXRhID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRXJyb3JXaXRoRGF0YSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBFcnJvcldpdGhEYXRhKG1zZywgZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSA9PT0gdm9pZCAwKSB7IGRhdGEgPSB7fTsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtc2cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBFcnJvcldpdGhEYXRhO1xufShFcnJvcikpO1xuZnVuY3Rpb24gY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KSB7XG4gICAgdmFyIHR5cGUgPSBlLnR5cGUsIHJlcyA9IGUucmVzO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrKG9iaiwgcmVzKTtcbiAgICB9XG4gICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKHJlcy5zdGF0dXNDb2RlLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnbG9naWMtZXJyb3InKSB7XG4gICAgICAgICAgICB2YXIgbXNnID0gZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5nZXRFcnJvck1zZyhyZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3JXaXRoRGF0YShtc2cuY29udGVudCwgcmVzLmRhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnc3lzdGVtLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IocmVzLmVyck1zZykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdodHRwLWVycm9yJyB8fCB0eXBlID09PSAnbG9naWMtZXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnc3lzdGVtLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuY2F0Y2hIYW5kbGVyID0gY2F0Y2hIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJGMFkyaElZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlqWVhSamFFaGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096czdPenM3T3p0QlFVTkJMQ3REUVVFd1F6dEJRVU14UXl3d1EwRkJiME03UVVGRmNFTTdTVUZCTkVJc2FVTkJRVXM3U1VGSE4wSXNkVUpCUVZrc1IwRkJWeXhGUVVGRkxFbEJRV003VVVGQlpDeHhRa0ZCUVN4RlFVRkJMRk5CUVdNN1VVRkJka01zV1VGRFNTeHJRa0ZCVFN4SFFVRkhMRU5CUVVNc1UwRkZZanRSUVVSSExFdEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPenRKUVVOeVFpeERRVUZETzBsQlEwd3NiMEpCUVVNN1FVRkJSQ3hEUVVGRExFRkJVRVFzUTBGQk5FSXNTMEZCU3l4SFFVOW9RenRCUVVWRUxGTkJRVk1zV1VGQldTeERRVUZETEVOQlFXVXNSVUZCUlN4SFFVRjFReXhGUVVGRkxFMUJRVGhDTzBsQlEyeEhMRWxCUVVFc1NVRkJTU3hIUVVGVkxFTkJRVU1zUzBGQldDeEZRVUZGTEVkQlFVY3NSMEZCU3l4RFFVRkRMRWxCUVU0c1EwRkJUenRKUVVkNFFpeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhoUVVGaExFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlF6VkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVOc1F6dEpRVVZFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1JVRkJSVHRSUVVOb1FpeEpRVUZKTEVsQlFVa3NTMEZCU3l4WlFVRlpMRVZCUVVVN1dVRkRka0lzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVVc1IwRkJjMFFzUTBGQlF5eFZRVUZWTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRek5ITzJGQlFVMHNTVUZCU1N4SlFVRkpMRXRCUVVzc1lVRkJZU3hGUVVGRk8xbEJReTlDTEVsQlFVa3NSMEZCUnl4SFFVRkhMSE5DUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFYRkVMRU5CUVVNc1EwRkJRenRaUVVNeFJpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMR0ZCUVdFc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eEZRVUZITEVkQlFYTkVMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU12Unp0aFFVRk5MRWxCUVVrc1NVRkJTU3hMUVVGTExHTkJRV01zUlVGQlJUdFpRVU5vUXl4UFFVRlBMRTFCUVUwc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVONFF6dGhRVUZOTzFsQlJVZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGNFSTdTMEZEU2p0VFFVRk5PMUZCUTBnc1NVRkJTU3hKUVVGSkxFdEJRVXNzV1VGQldTeEpRVUZKTEVsQlFVa3NTMEZCU3l4aFFVRmhMRVZCUVVVN1dVRkRha1FzVDBGQlR5eHpRa0ZCV1N4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQmNVUXNRMEZCUXl4RFFVRkRPMU5CUXpsR08yRkJRVTBzU1VGQlJ5eEpRVUZKTEV0QlFVc3NZMEZCWXl4RlFVRkZPMWxCUXk5Q0xFOUJRVThzYzBKQlFWa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVGhETEVOQlFVTXNRMEZCUXp0VFFVTjRSanRoUVVGTk8xbEJSVWdzVDBGQlR5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRjRUk3UzBGRFNqdEJRVU5NTEVOQlFVTTdRVUZGVVN4dlEwRkJXU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVMQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaXdnU1VWeWNtOXlUMkpxWldOMElIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dWFXMXdiM0owSUdWeWNtOXlTR0Z1Wkd4bGNpQm1jbTl0SUZ3aUxpOWxjbkp2Y2toaGJtUnNaWEpjSWp0Y2JtbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHVYRzVqYkdGemN5QkZjbkp2Y2xkcGRHaEVZWFJoSUdWNGRHVnVaSE1nUlhKeWIzSWdlMXh1SUNBZ0lHUmhkR0U2SUdGdWVUdGNibHh1SUNBZ0lHTnZibk4wY25WamRHOXlLRzF6WnpvZ2MzUnlhVzVuTENCa1lYUmhPaUJoYm5rZ1BTQjdmU2tnZTF4dUlDQWdJQ0FnSUNCemRYQmxjaWh0YzJjcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1SaGRHRWdQU0JrWVhSaE8xeHVJQ0FnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWTJGMFkyaElZVzVrYkdWeUtHVTZJRWxGY25KdmNrOWlhbVZqZEN3Z2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVMQ0J5WldwbFkzUTZJQ2h5WldGemIyNC9PaUJoYm5rcElEMCtJSFp2YVdRcElIdGNiaUFnSUNCamIyNXpkQ0I3SUhSNWNHVXNJSEpsY3lCOUlEMGdaVHRjYmx4dUlDQWdJQzh2SU9XbWd1YWVuT2FjaWVtRmplZTlydWU3bitTNGdPbVVtZWl2citXYm51aXdnK1dIdmVhVnNPKzhqT1dJbWVhSnAraWhqT1d1ZzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyRnNiR0poWTJzZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjVtYVdjdVpYSnliM0pEWVd4c1ltRmpheWh2WW1vc0lISmxjeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c5aWFpNWpZWFJqYUVWeWNtOXlLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsSUQwOVBTQW5hSFIwY0MxbGNuSnZjaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2JtVjNJRVZ5Y205eUtDaHlaWE1nWVhNZ1YyVmphR0YwVFdsdWFYQnliMmR5WVcwdVVtVnhkV1Z6ZEZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RDa3VjM1JoZEhWelEyOWtaUzUwYjFOMGNtbHVaeWdwS1NrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3WlNBOVBUMGdKMnh2WjJsakxXVnljbTl5SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHMXpaeUE5SUdWeWNtOXlTR0Z1Wkd4bGNpNW5aWFJGY25KdmNrMXpaeWh5WlhNZ1lYTWdWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0c1bGR5QkZjbkp2Y2xkcGRHaEVZWFJoS0cxelp5NWpiMjUwWlc1MExDQW9jbVZ6SUdGeklGZGxZMmhoZEUxcGJtbHdjbTluY21GdExsSmxjWFZsYzNSVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUXBMbVJoZEdFcEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbElEMDlQU0FuYzNsemRHVnRMV1Z5Y205eUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvY21WekxtVnljazF6WnlrcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVZVzI1THVXYW5QcGxKbm9yNjljYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3WlNBOVBUMGdKMmgwZEhBdFpYSnliM0luSUh4OElIUjVjR1VnUFQwOUlDZHNiMmRwWXkxbGNuSnZjaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmxjbkp2Y2toaGJtUnNaWEl1Ykc5bmFXTkZjbkp2Y2lodlltb3NJSEpsY3lCaGN5QlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtS0hSNWNHVWdQVDA5SUNkemVYTjBaVzB0WlhKeWIzSW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1pYSnliM0pJWVc1a2JHVnlMbk41YzNSbGJVVnljbTl5S0c5aWFpd2djbVZ6SUdGeklGZGxZMmhoZEUxcGJtbHdjbTluY21GdExrZGxibVZ5WVd4RFlXeHNZbUZqYTFKbGMzVnNkQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURsaGJia3U1WnFjK21VbWVpdnIxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaGxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYm4xY2JseHVaWGh3YjNKMElIc2dZMkYwWTJoSVlXNWtiR1Z5SUgwaVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xuZnVuY3Rpb24gc3RhcnQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cbmZ1bmN0aW9uIGVuZChvYmopIHtcbiAgICBvYmouX3JlcG9ydEVuZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBpZiAob2JqLnJlcG9ydCAmJiBvYmouX3JlcG9ydFN0YXJ0VGltZSkge1xuICAgICAgICByZXBvcnQob2JqLnJlcG9ydCwgb2JqLl9yZXBvcnRTdGFydFRpbWUsIG9iai5fcmVwb3J0RW5kVGltZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVwb3J0KG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWdfMS5kZWZhdWx0LnJlcG9ydENHSShuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJlcXVlc3RfMS5kZWZhdWx0KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kLFxuICAgIHJlcG9ydDogcmVwb3J0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXRiMlIxYkdVdlpIVnlZWFJwYjI1U1pYQnZjblJsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVOd1F5d3dRMEZCYjBNN1FVRkhjRU1zVTBGQlV5eExRVUZMTEVOQlFVTXNSMEZCZFVNN1NVRkRiRVFzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1FVRkRhRVFzUTBGQlF6dEJRVVZFTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWRCUVhWRE8wbEJRMmhFTEVkQlFVY3NRMEZCUXl4alFVRmpMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0SlFVTXhReXhKUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFGQlEyNURMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlowSXNSVUZCUlN4SFFVRkhMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNSMEZCUnl4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRE8wdEJRekZGTzBGQlEwd3NRMEZCUXp0QlFVVkVMRk5CUVZNc1RVRkJUU3hEUVVGRExFbEJRVmtzUlVGQlJTeFRRVUZwUWl4RlFVRkZMRTlCUVdVN1NVRkROVVFzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU40UXl4blFrRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hwUWtGQlR5eERRVUZETEVOQlFVTTdTMEZEZGtRN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4TFFVRkxMRTlCUVVFN1NVRkRUQ3hIUVVGSExFdEJRVUU3U1VGRFNDeE5RVUZOTEZGQlFVRTdRMEZEVkN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnY21WeGRXVnpkQ0JtY205dElDY3VMaTloY0drdmNtVnhkV1Z6ZENkY2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1TENCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlCOUlHWnliMjBnWENJdUxpOXBiblJsY21aaFkyVmNJanRjYmx4dVpuVnVZM1JwYjI0Z2MzUmhjblFvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUtTQjdYRzRnSUNBZ2IySnFMbDl5WlhCdmNuUlRkR0Z5ZEZScGJXVWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWlc1a0tHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJRzlpYWk1ZmNtVndiM0owUlc1a1ZHbHRaU0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncE8xeHVJQ0FnSUdsbUtHOWlhaTV5WlhCdmNuUWdKaVlnYjJKcUxsOXlaWEJ2Y25SVGRHRnlkRlJwYldVcElIdGNiaUFnSUNBZ0lDQWdjbVZ3YjNKMEtHOWlhaTV5WlhCdmNuUWdZWE1nYzNSeWFXNW5MQ0J2WW1vdVgzSmxjRzl5ZEZOMFlYSjBWR2x0WlN3Z2IySnFMbDl5WlhCdmNuUkZibVJVYVcxbEtUdGNiaUFnSUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUhKbGNHOXlkQ2h1WVcxbE9pQnpkSEpwYm1jc0lITjBZWEowVkdsdFpUb2diblZ0WW1WeUxDQmxibVJVYVcxbE9pQnVkVzFpWlhJcElIdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1eVpYQnZjblJEUjBrZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjVtYVdjdWNtVndiM0owUTBkSktHNWhiV1VzSUhOMFlYSjBWR2x0WlN3Z1pXNWtWR2x0WlN3Z2NtVnhkV1Z6ZENrN1hHNGdJQ0FnZlZ4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MzUmhjblFzWEc0Z0lDQWdaVzVrTEZ4dUlDQWdJSEpsY0c5eWRGeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi4vYXBpL3JlcXVlc3RcIik7XG5mdW5jdGlvbiBzeXN0ZW1FcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHJldHJ5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLmRlZmF1bHQob2JqKS50aGVuKG9iai5fcmVzb2x2ZSkuY2F0Y2gob2JqLl9yZWplY3QpOyB9O1xuICAgICAgICBkb0Vycm9yKFwiXCIsIHJlcy5lcnJNc2csIHJldHJ5KTtcbiAgICB9XG59XG5mdW5jdGlvbiBsb2dpY0Vycm9yKG9iaiwgcmVzKSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9ySGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25maWdfMS5kZWZhdWx0LmVycm9ySGFuZGxlcihyZXMuZGF0YSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgX2EgPSBnZXRFcnJvck1zZyhyZXMpLCB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgdmFyIHJldHJ5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLmRlZmF1bHQob2JqKS50aGVuKG9iai5fcmVzb2x2ZSkuY2F0Y2gob2JqLl9yZWplY3QpOyB9O1xuICAgICAgICBkb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0RXJyb3JNc2cocmVzKSB7XG4gICAgdmFyIHRpdGxlID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZShyZXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpdGxlID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlO1xuICAgIH1cbiAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudDtcbiAgICB9XG4gICAgcmV0dXJuIHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH07XG59XG5mdW5jdGlvbiBkb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSkge1xuICAgIHZhciBzaG93RXJyb3JSZXRyeUJ0biA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JSZXRyeUJ0biAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIjtcbiAgICB3eC5zaG93TW9kYWwoT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCBcIlwiLFxuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8IFwi572R57uc5oiW5pyN5Yqh5byC5bi477yM6K+356iN5ZCO6YeN6K+VXCIsXG4gICAgfSwgIXNob3dFcnJvclJldHJ5QnRuID8ge1xuICAgICAgICBzaG93Q2FuY2VsOiBmYWxzZVxuICAgIH0gOiB7XG4gICAgICAgIHNob3dDYW5jZWw6IHRydWUsXG4gICAgICAgIGNvbmZpcm1UZXh0OiAn6YeN6K+VJyxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgaWYgKHJlcy5jb25maXJtICYmIHR5cGVvZiByZXRyeSA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIHJldHJ5KCk7XG4gICAgICAgIH1cbiAgICB9KSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc3lzdGVtRXJyb3I6IHN5c3RlbUVycm9yLFxuICAgIGxvZ2ljRXJyb3I6IGxvZ2ljRXJyb3IsXG4gICAgZG9FcnJvcjogZG9FcnJvcixcbiAgICBnZXRFcnJvck1zZzogZ2V0RXJyb3JNc2dcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laWEp5YjNKSVlXNWtiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWxjbkp2Y2toaGJtUnNaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZEY0VNc01FTkJRWEZETzBGQlIzSkRMRk5CUVZNc1YwRkJWeXhEUVVGRExFZEJRWFZETEVWQlFVVXNSMEZCTkVNN1NVRkRkRWNzU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4SlFVRkpMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRMmhETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRGFrSTdVMEZCVFR0UlFVTklMRWxCUVUwc1MwRkJTeXhIUVVGSExHTkJRVTBzVDBGQlFTeHBRa0ZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCYkVRc1EwRkJhMFFzUTBGQlF6dFJRVU4yUlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hGUVVGRkxFZEJRVWNzUTBGQlF5eE5RVUZOTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1MwRkRiRU03UVVGRFRDeERRVUZETzBGQlJVUXNVMEZCVXl4VlFVRlZMRU5CUVVNc1IwRkJkVU1zUlVGQlJTeEhRVUYxUnp0SlFVTm9TeXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVsQlFVa3NTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRhRU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVOcVFqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGbEJRVmtzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEYkVRc1owSkJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRMnBETzFOQlFVMDdVVUZEUnl4SlFVRkJMRXRCUVcxQ0xGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCYkVNc1MwRkJTeXhYUVVGQkxFVkJRVVVzVDBGQlR5eGhRVUZ2UWl4RFFVRkRPMUZCUXpGRExFbEJRVTBzUzBGQlN5eEhRVUZITEdOQlFVMHNUMEZCUVN4cFFrRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJiRVFzUTBGQmEwUXNRMEZCUXp0UlFVTjJSU3hQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRMUVVOc1F6dEJRVU5NTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmRCUVZjc1EwRkJReXhIUVVGMVJ6dEpRVU40U0N4SlFVRkpMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRFppeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhWUVVGVkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEzcERMRWxCUVVrN1dVRkRRU3hMUVVGTExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZCTzFOQlEzUkRPMUZCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3VTBGRFdEdExRVU5LTzFOQlFVMHNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZGQlFWRXNSVUZCUlR0UlFVTTVReXhMUVVGTExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNN1MwRkROMEk3U1VGRlJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRha0lzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1dVRkJXU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU16UXl4SlFVRkpPMWxCUTBFc1QwRkJUeXhIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlFUdFRRVU14UXp0UlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8xTkJRMWc3UzBGRFNqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGbEJRVmtzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZEYUVRc1QwRkJUeXhIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRPMHRCUTJwRE8wbEJSVVFzVDBGQlR5eEZRVUZETEV0QlFVc3NUMEZCUVN4RlFVRkZMRTlCUVU4c1UwRkJRU3hGUVVGRExFTkJRVUU3UVVGRE0wSXNRMEZCUXp0QlFVZEVMRk5CUVZNc1QwRkJUeXhEUVVGRExFdEJRV0VzUlVGQlJTeFBRVUZsTEVWQlFVVXNTMEZCYVVJN1NVRkZPVVFzU1VGQlRTeHBRa0ZCYVVJc1IwRkJSeXhuUWtGQlRTeERRVUZETEdGQlFXRXNTVUZCU1N4UFFVRlBMRXRCUVVzc1MwRkJTeXhWUVVGVkxFTkJRVU03U1VGRE9VVXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzFGQlEzWkNMRXRCUVVzc1JVRkJSU3hMUVVGTExFbEJRVWtzUlVGQlJUdFJRVU5zUWl4UFFVRlBMRVZCUVVVc1QwRkJUeXhKUVVGSkxHVkJRV1U3UzBGRGRFTXNSVUZCUlN4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTndRaXhWUVVGVkxFVkJRVVVzUzBGQlN6dExRVU53UWl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOQkxGVkJRVlVzUlVGQlJTeEpRVUZKTzFGQlEyaENMRmRCUVZjc1JVRkJSU3hKUVVGSk8xRkJRMnBDTEU5QlFVOHNSVUZCVUN4VlFVRlJMRWRCUVhGRU8xbEJRM3BFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRTlCUVU4c1NVRkJTU3hQUVVGUExFdEJRVXNzUzBGQlN5eFZRVUZWTzJkQ1FVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRE8xRkJRelZFTEVOQlFVTTdTMEZEU2l4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOU0xFTkJRVU03UVVGRlJDeHJRa0ZCWlR0SlFVTllMRmRCUVZjc1lVRkJRVHRKUVVOWUxGVkJRVlVzV1VGQlFUdEpRVU5XTEU5QlFVOHNVMEZCUVR0SlFVTlFMRmRCUVZjc1lVRkJRVHREUVVOa0xFTkJRVUVpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCeVpYRjFaWE4wSUdaeWIyMGdKeTR1TDJGd2FTOXlaWEYxWlhOMEp6dGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTlwYm5SbGNtWmhZMlZjSWp0Y2JseHVablZ1WTNScGIyNGdjM2x6ZEdWdFJYSnliM0lvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUxDQnlaWE02SUZkbFkyaGhkRTFwYm1sd2NtOW5jbUZ0TGtkbGJtVnlZV3hEWVd4c1ltRmphMUpsYzNWc2RDa2dlMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdiMkpxTG1aaGFXd2dQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vdVptRnBiQ2h5WlhNcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsZEhKNUlEMGdLQ2tnUFQ0Z2NtVnhkV1Z6ZENodlltb3BMblJvWlc0b2IySnFMbDl5WlhOdmJIWmxLUzVqWVhSamFDaHZZbW91WDNKbGFtVmpkQ2s3WEc0Z0lDQWdJQ0FnSUdSdlJYSnliM0lvWENKY0lpd2djbVZ6TG1WeWNrMXpaeXdnY21WMGNua3BPMXh1SUNBZ0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2JHOW5hV05GY25KdmNpaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRzSUhKbGN6b2dWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ0I4SUZkbFkyaGhkRTFwYm1sd2NtOW5jbUZ0TGxWd2JHOWhaRVpwYkdWVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1bVlXbHNJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtWmhhV3dvY21WektUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WlhKeWIzSklZVzVrYkdWeUlEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibVpwWnk1bGNuSnZja2hoYm1Sc1pYSW9jbVZ6TG1SaGRHRXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUh0MGFYUnNaU3dnWTI5dWRHVnVkSDBnUFNCblpYUkZjbkp2Y2sxelp5aHlaWE1wTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J5WlhSeWVTQTlJQ2dwSUQwK0lISmxjWFZsYzNRb2IySnFLUzUwYUdWdUtHOWlhaTVmY21WemIyeDJaU2t1WTJGMFkyZ29iMkpxTGw5eVpXcGxZM1FwTzF4dUlDQWdJQ0FnSUNCa2IwVnljbTl5S0hScGRHeGxMQ0JqYjI1MFpXNTBMQ0J5WlhSeWVTazdYRzRnSUNBZ2ZWeHVmVnh1WEc1bWRXNWpkR2x2YmlCblpYUkZjbkp2Y2sxelp5aHlaWE02SUZkbFkyaGhkRTFwYm1sd2NtOW5jbUZ0TGxKbGNYVmxjM1JUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRZ2ZDQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYkdWMElIUnBkR3hsSUQwZ1hDSmNJanRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2xScGRHeGxJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhScGRHeGxJRDBnWTI5dVptbG5MbVZ5Y205eVZHbDBiR1VvY21WekxtUmhkR0VwWEc0Z0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bGNuSnZjbFJwZEd4bElEMDlQU0JjSW5OMGNtbHVaMXdpS1NCN1hHNGdJQ0FnSUNBZ0lIUnBkR3hsSUQwZ1kyOXVabWxuTG1WeWNtOXlWR2wwYkdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYkdWMElHTnZiblJsYm5RZ1BTQmNJbHdpTzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyOXVkR1Z1ZENBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjUwWlc1MElEMGdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkQ2h5WlhNdVpHRjBZU2xjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWRDQTlQVDBnWENKemRISnBibWRjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjUwWlc1MElEMGdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2UzUnBkR3hsTENCamIyNTBaVzUwZlZ4dWZWeHVYRzR2THlEcHU1am9ycVRwbEpub3I2L2xwSVRua0libW1LL2x2TG5ucXBkY2JtWjFibU4wYVc5dUlHUnZSWEp5YjNJb2RHbDBiR1U2SUhOMGNtbHVaeXdnWTI5dWRHVnVkRG9nYzNSeWFXNW5MQ0J5WlhSeWVUODZJQ2dwSUQwK0lHRnVlU2tnZTF4dUlDQWdJQzh2SU9hWXIrV1FwdWFZdnVla3V1bUhqZWl2bGVhTWllbVNybHh1SUNBZ0lHTnZibk4wSUhOb2IzZEZjbkp2Y2xKbGRISjVRblJ1SUQwZ1kyOXVabWxuTG1WeWNtOXlVbVYwY25sQ2RHNGdKaVlnZEhsd1pXOW1JSEpsZEhKNUlEMDlQU0JjSW1aMWJtTjBhVzl1WENJN1hHNGdJQ0FnZDNndWMyaHZkMDF2WkdGc0tFOWlhbVZqZEM1aGMzTnBaMjRvZTF4dUlDQWdJQ0FnSUNCMGFYUnNaVG9nZEdsMGJHVWdmSHdnWENKY0lpeGNiaUFnSUNBZ0lDQWdZMjl1ZEdWdWREb2dZMjl1ZEdWdWRDQjhmQ0JjSXVlOWtlZTduT2FJbHVhY2plV0tvZVc4Z3VXNHVPKzhqT2l2dCtlb2plV1FqdW1IamVpdmxWd2lMRnh1SUNBZ0lIMHNJQ0Z6YUc5M1JYSnliM0pTWlhSeWVVSjBiaUEvSUh0Y2JpQWdJQ0FnSUNBZ2MyaHZkME5oYm1ObGJEb2dabUZzYzJWY2JpQWdJQ0I5SURvZ2UxeHVJQ0FnSUNBZ0lDQnphRzkzUTJGdVkyVnNPaUIwY25WbExGeHVJQ0FnSUNBZ0lDQmpiMjVtYVhKdFZHVjRkRG9nSittSGplaXZsU2NzWEc0Z0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVRhRzkzVFc5a1lXeFRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTXVZMjl1Wm1seWJTQW1KaUIwZVhCbGIyWWdjbVYwY25rZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2NtVjBjbmtvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwcEtUdGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJSE41YzNSbGJVVnljbTl5TEZ4dUlDQWdJR3h2WjJsalJYSnliM0lzWEc0Z0lDQWdaRzlGY25KdmNpeGNiaUFnSUNCblpYUkZjbkp2Y2sxeloxeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgJiYgY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai51cmxdIHx8IChvYmoub3JpZ2luVXJsID8gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSA6ICcnKTtcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgfTtcbiAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXOWphMDFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDIxdlkydE5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMREpEUVVGeFF6dEJRVWR5UXl4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGMVF6dEpRVVZvUkN4SlFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRmFrWXNUMEZCVHl4TFFVRkxMRU5CUVVNN1MwRkRhRUk3U1VGRlJDeEpRVUZKTEVsQlFVa3NSMEZCUnl4blFrRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4blFrRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlJUZEdMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU40UXl4SlFVRk5MRWRCUVVjc1IwRkJSenRSUVVOU0xFbEJRVWtzVFVGQlFUdFJRVU5LTEZWQlFWVXNSVUZCUlN4SFFVRkhPMHRCUTJ4Q0xFTkJRVU03U1VGRlJpeHBRa0ZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wbEJRMllzVDBGQlR5eEhRVUZITEVOQlFVRTdRVUZEWkN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEhRVUZITEV0QlFVRTdRMEZEVGl4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYkc5aFpHbHVaeUJtY205dElDY3VMaTkxZEdsc0wyeHZZV1JwYm1jblhHNXBiWEJ2Y25RZ2V5QkpVbVZ4ZFdWemRFOXdkR2x2Yml3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0pjYmx4dVpuVnVZM1JwYjI0Z1oyVjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrNklHRnVlU0I3WEc1Y2JpQWdJQ0JwWmlnaEtHTnZibVpwWnk1dGIyTnJTbk52Ymx0dlltb3VkWEpzWFNCOGZDQW9iMkpxTG05eWFXZHBibFZ5YkNBbUppQmpiMjVtYVdjdWJXOWphMHB6YjI1YmIySnFMbTl5YVdkcGJsVnliRjBwS1NrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJ0YjJOcklPYXlvZWFjaWVXdnVlVzZsT2FPcGVXUG8rZWFoT2FWc09hTnJseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUdSaGRHRWdQU0JqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG5WeWJGMGdmSHdnS0c5aWFpNXZjbWxuYVc1VmNtd2dQeUJqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG05eWFXZHBibFZ5YkYwZ09pQW5KeWs3WEc0Z0lDQWdMeThnWkdWbGNDQmpiM0I1WEc0Z0lDQWdaR0YwWVNBOUlFcFRUMDR1Y0dGeWMyVW9TbE5QVGk1emRISnBibWRwWm5rb1pHRjBZU2twTzF4dUlDQWdJR052Ym5OMElISmxjeUE5SUh0Y2JpQWdJQ0FnSUNBZ1pHRjBZU3hjYmlBZ0lDQWdJQ0FnYzNSaGRIVnpRMjlrWlRvZ01qQXdYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHeHZZV1JwYm1jdWFHbGtaU2dwTzF4dUlDQWdJSEpsZEhWeWJpQnlaWE5jYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUdkbGRGeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG52YXIgbW9ja01hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL21vY2tNYW5hZ2VyXCIpO1xudmFyIGNhY2hlTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vY2FjaGVNYW5hZ2VyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbnZhciByZXNwb25zZUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc3BvbnNlSGFuZGxlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHVybF8xID0gcmVxdWlyZShcIi4uL3V0aWwvdXJsXCIpO1xudmFyIGNhdGNoSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vY2F0Y2hIYW5kbGVyXCIpO1xuZnVuY3Rpb24gZm9ybWF0KG9yaWdpblVybCkge1xuICAgIGlmIChvcmlnaW5Vcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5Vcmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXg7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsUGVyZml4ICsgb3JpZ2luVXJsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cbiAgICBpZiAob2JqLnJlTG9naW5Db3VudCA9PT0gMCAmJiB0eXBlb2Ygb2JqLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouYmVmb3JlU2VuZCgpO1xuICAgIH1cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cbiAgICBvYmouX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIG9iai5fcmVqZWN0ID0gcmVqZWN0O1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaGVhZGVyID0gY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBoZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouaGVhZGVyKSwgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIpO1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmRhdGEpLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZCksIG9iai5kYXRhKTtcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cbiAgICBvYmouaGVhZGVyID0gb2JqLmhlYWRlciA/IG9iai5oZWFkZXIgOiB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBoZWFkZXIgPSBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcigpO1xuICAgICAgICBpZiAodHlwZW9mIGhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG9iai5oZWFkZXIgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmhlYWRlciksIGhlYWRlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcik7XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZm9ybURhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmZvcm1EYXRhKSwgKF9hID0ge30sIF9hW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYSkpO1xuICAgIH1cbiAgICB2YXIgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGdkKSwgb2JqLmZvcm1EYXRhKTtcbiAgICBpZiAoIWNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RVc2VRdWVyeVN0cmluZykge1xuICAgICAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xuICAgICAgICB9XG4gICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGdldEdsb2JhbERhdGEoKSB7XG4gICAgdmFyIGdkID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZ2Q7XG59XG5mdW5jdGlvbiBkb1JlcXVlc3Qob2JqKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcbiAgICBpZiAob2JqLnJlTG9naW5Db3VudCA9PT0gMCAmJiB0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqID0gY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kKG9iaiwgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgd3gucmVxdWVzdChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqKSwgeyBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHR5cGU6ICdzeXN0ZW0tZXJyb3InLCByZXM6IHJlcyB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iaikge1xuICAgIG9iaiA9IGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaik7XG4gICAgaWYgKG9iai5yZUxvZ2luQ291bnQgPT09IDAgJiYgdHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iaiA9IGNvbmZpZ18xLmRlZmF1bHQuYmVmb3JlU2VuZChvYmosIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHd4LnVwbG9hZEZpbGUoX19hc3NpZ24oX19hc3NpZ24oe30sIG9iaiksIHsgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiAnc3lzdGVtLWVycm9yJywgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3Qob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xuICAgICAgICAgICAgdmFyIG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yUmVxdWVzdChtb2NrUmVzcG9uc2UsIG9iaik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvYmouY2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4ob2JqKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yUmVxdWVzdChyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYXRjaEhhbmRsZXJfMS5jYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xuICAgICAgICAgICAgdmFyIG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yVXBsb2FkRmlsZShtb2NrUmVzcG9uc2UsIG9iaik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKG9iaikudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iaik7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdC5yZXNwb25zZUZvclVwbG9hZEZpbGUocmVzLCBvYmopO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBjYXRjaEhhbmRsZXJfMS5jYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgIHVwbG9hZEZpbGU6IHVwbG9hZEZpbGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ4ZFdWemRFaGhibVJzWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM0psY1hWbGMzUklZVzVrYkdWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3UVVGQlFTd3lRMEZCY1VNN1FVRkRja01zTUVOQlFXOURPMEZCUTNCRExEQkRRVUZ2UXp0QlFVTndReXcyUTBGQmRVTTdRVUZEZGtNc0swTkJRWGxETzBGQlEzcERMRzFFUVVFMlF6dEJRVU0zUXl4eFJFRkJLME03UVVGREwwTXNkVVJCUVdsRU8wRkJRMnBFTEcxRFFVRTJRanRCUVVVM1Fpd3JRMEZCT0VNN1FVRkhPVU1zVTBGQlV5eE5RVUZOTEVOQlFVTXNVMEZCYVVJN1NVRkROMElzU1VGQlNTeFRRVUZUTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRk8xRkJRemxDTEU5QlFVOHNVMEZCVXl4RFFVRkJPMHRCUTI1Q08xTkJRVTA3VVVGRFNDeEpRVUZKTEZOQlFWTXNSMEZCUnl4blFrRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF6dFJRVU5xUXl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFRRVUZUTEV0QlFVc3NWVUZCVlN4RlFVRkZPMWxCUTNoRExGTkJRVk1zUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGQk8xTkJRMnBETzFGQlEwUXNUMEZCVHl4VFFVRlRMRWRCUVVjc1UwRkJVeXhEUVVGRE8wdEJRMmhETzBGQlEwd3NRMEZCUXp0QlFVZEVMRk5CUVZNc1MwRkJTeXhEUVVFclF5eEhRVUZOTEVWQlFVVXNUMEZCT0VJc1JVRkJSU3hOUVVFclFqdEpRVVZvU1N4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExGbEJRVmtzUzBGQlN5eFhRVUZYTEVWQlFVVTdVVUZEZWtNc1IwRkJSeXhEUVVGRExGbEJRVmtzUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZEZUVJN1UwRkJUVHRSUVVOSUxFZEJRVWNzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXp0TFFVTjBRanRKUVVWRUxFbEJRVWtzUjBGQlJ5eERRVUZETEZsQlFWa3NTMEZCU3l4RFFVRkRMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVlVGQlZTeExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTm9SU3hIUVVGSExFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdTMEZEY0VJN1NVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFhRVUZYTEVWQlFVVTdVVUZEYWtJc2FVSkJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8wdEJRMnBETzBsQlJVUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFVkJRVVU3VVVGRGFFSXNSMEZCUnl4RFFVRkRMRk5CUVZNc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlEzaENMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVNM1FqdEpRVVZFTEVkQlFVY3NRMEZCUXl4UlFVRlJMRWRCUVVjc1QwRkJUeXhEUVVGRE8wbEJRM1pDTEVkQlFVY3NRMEZCUXl4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRE8wbEJSWEpDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVkRUxGTkJRVk1zYjBKQlFXOUNMRU5CUVVNc1IwRkJiVUk3TzBsQlJUZERMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTzFGQlExZ3NSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU03UzBGRGFrSTdTVUZGUkN4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTXhReXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRM2hETEVsQlFVa3NUVUZCVFN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdVVUZEYUVNc1NVRkJTU3hQUVVGUExFMUJRVTBzUzBGQlN5eFJRVUZSTEVWQlFVVTdXVUZETlVJc1IwRkJSeXhEUVVGRExFMUJRVTBzZVVKQlFVOHNSMEZCUnl4RFFVRkRMRTFCUVUwc1IwRkJTeXhOUVVGTkxFTkJRVU1zUTBGQlF6dFRRVU16UXp0TFFVTktPMU5CUVUwc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNVMEZCVXl4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVNM1F5eEhRVUZITEVOQlFVTXNUVUZCVFN4NVFrRkJUeXhIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZMTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03UzBGRGNrUTdTVUZGUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhUUVVGVExFdEJRVXNzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhKUVVGSkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUXpsRUxFZEJRVWNzUTBGQlF5eEpRVUZKTEhsQ1FVRlJMRWRCUVVjc1EwRkJReXhKUVVGakxHZENRVUZITEdkQ1FVRk5MRU5CUVVNc1YwRkJWeXhKUVVGSExHZENRVUZOTEVOQlFVTXNUMEZCVHl4TlFVRkZMRU5CUVVNN1MwRkRPVVU3U1VGSFJDeEpRVUZOTEVWQlFVVXNSMEZCUnl4aFFVRmhMRVZCUVVVc1EwRkJRenRKUVVNelFpeEhRVUZITEVOQlFVTXNTVUZCU1N4NVFrRkJVU3hGUVVGRkxFZEJRVXNzUjBGQlJ5eERRVUZETEVsQlFXTXNRMEZCUlN4RFFVRkRPMGxCUlRWRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU03U1VGRGFrTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1IwRkJSeXhIUVVGSExFTkJRVU1zVVVGQlVTeEpRVUZKTEUxQlFVMHNRMEZCUXp0SlFVZDBReXhKUVVGSkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4dFFrRkJiVUlzU1VGQlNTeEhRVUZITEVOQlFVTXNUVUZCVFN4TFFVRkxMRXRCUVVzc1JVRkJSVHRSUVVOeVJDeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMmhDTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1lVRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4WlFVRkpMRWRCUVVNc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVsQlFVY3NaMEpCUVUwc1EwRkJReXhQUVVGUExFMUJRVWNzUTBGQlF6dFRRVU01UlR0UlFVTkVMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzB0QlEzaERPMGxCUlVRc01FSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSVFZDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVkRUxGTkJRVk1zZFVKQlFYVkNMRU5CUVVNc1IwRkJjMEk3TzBsQlEyNUVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTzFGQlEyWXNSMEZCUnl4RFFVRkRMRkZCUVZFc1IwRkJSeXhGUVVGRkxFTkJRVU03UzBGRGNrSTdTVUZGUkN4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTXhReXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRM2hETEVsQlFVa3NUVUZCVFN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdVVUZEYUVNc1NVRkJTU3hQUVVGUExFMUJRVTBzUzBGQlN5eFJRVUZSTEVWQlFVVTdXVUZETlVJc1IwRkJSeXhEUVVGRExFMUJRVTBzZVVKQlFVOHNSMEZCUnl4RFFVRkRMRTFCUVUwc1IwRkJTeXhOUVVGTkxFTkJRVU1zUTBGQlF6dFRRVU16UXp0TFFVTktPMU5CUVUwc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNVMEZCVXl4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVNM1F5eEhRVUZITEVOQlFVTXNUVUZCVFN4NVFrRkJUeXhIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZMTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03UzBGRGNrUTdTVUZGUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhUUVVGVExFdEJRVXNzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhKUVVGSkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUXpsRUxFZEJRVWNzUTBGQlF5eFJRVUZSTEhsQ1FVRlJMRWRCUVVjc1EwRkJReXhSUVVGclFpeG5Ra0ZCUnl4blFrRkJUU3hEUVVGRExGZEJRVmNzU1VGQlJ5eG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1RVRkJSU3hEUVVGRE8wdEJRM1JHTzBsQlIwUXNTVUZCVFN4RlFVRkZMRWRCUVVjc1lVRkJZU3hGUVVGRkxFTkJRVU03U1VGRE0wSXNSMEZCUnl4RFFVRkRMRkZCUVZFc2VVSkJRVkVzUlVGQlJTeEhRVUZMTEVkQlFVY3NRMEZCUXl4UlFVRlJMRU5CUVVVc1EwRkJRenRKUVVVeFF5eEpRVUZKTEVOQlFVTXNaMEpCUVUwc1EwRkJReXh0UWtGQmJVSXNSVUZCUlR0UlFVVTNRaXhKUVVGSkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZPMWxCUTJoQ0xFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NZVUZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eFpRVUZKTEVkQlFVTXNaMEpCUVUwc1EwRkJReXhYUVVGWExFbEJRVWNzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRTFCUVVjc1EwRkJRenRUUVVNNVJUdFJRVVZFTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1lVRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8wdEJRM2hETzBsQlJVUXNNRUpCUVdkQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUlRWQ0xFOUJRVThzUjBGQlJ5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVMRk5CUVZNc1lVRkJZVHRKUVVOc1FpeEpRVUZKTEVWQlFVVXNSMEZCVVN4RlFVRkZMRU5CUVVNN1NVRkRha0lzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU42UXl4RlFVRkZMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0TFFVTTFRanRUUVVGTkxFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1MwRkJTeXhSUVVGUkxFVkJRVVU3VVVGRE9VTXNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETzB0QlF6RkNPMGxCUTBRc1QwRkJUeXhGUVVGRkxFTkJRVU03UVVGRFpDeERRVUZETzBGQlJVUXNVMEZCVXl4VFFVRlRMRU5CUVVNc1IwRkJiVUk3U1VGRGJFTXNSMEZCUnl4SFFVRkhMRzlDUVVGdlFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJoRExFbEJRVWtzUjBGQlJ5eERRVUZETEZsQlFWa3NTMEZCU3l4RFFVRkRMRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRia1VzUjBGQlJ5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wdEJRMmhFTzBsQlEwUXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJhVVFzVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eDFRa0ZEU0N4SFFVRkhMRXRCUTA0c1QwRkJUeXhaUVVGRExFZEJRVWM3WjBKQlExQXNUMEZCVHl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVFSXNRMEZCUXp0WlFVTkVMRWxCUVVrc1dVRkJReXhIUVVGSE8yZENRVU5LTEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVVc1NVRkJTU3hGUVVGRkxHTkJRV01zUlVGQlJTeEhRVUZITEV0QlFVRXNSVUZCUlN4RFFVRkRMRU5CUVVNN1dVRkRha1FzUTBGQlF6dFpRVU5FTEZGQlFWRTdaMEpCUTBvc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFJRVUZSTEV0QlFVc3NWVUZCVlN4RlFVRkZPMjlDUVVOd1F5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN2FVSkJRMnhDTzJkQ1FVTkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJUdHZRa0ZEYWtJc2FVSkJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0cFFrRkRiRUk3V1VGRFRDeERRVUZETEVsQlEwZ3NRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNXVUZCV1N4RFFVRkRMRWRCUVhOQ08wbEJRM2hETEVkQlFVY3NSMEZCUnl4MVFrRkJkVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTnVReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFpRVUZaTEV0QlFVc3NRMEZCUXl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFZRVUZWTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTI1RkxFZEJRVWNzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRMUVVOb1JEdEpRVU5FTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVc5RUxGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZEYkVZc1JVRkJSU3hEUVVGRExGVkJRVlVzZFVKQlEwNHNSMEZCUnl4TFFVTk9MRTlCUVU4c1dVRkJReXhIUVVGSE8yZENRVU5RTEU5QlFVOHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hDTEVOQlFVTTdXVUZEUkN4SlFVRkpMRmxCUVVNc1IwRkJSenRuUWtGRFNpeFBRVUZQTEUxQlFVMHNRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hqUVVGakxFVkJRVVVzUjBGQlJ5eExRVUZCTEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUTJwRUxFTkJRVU03V1VGRFJDeFJRVUZSTzJkQ1FVTktMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVVVGQlVTeExRVUZMTEZWQlFWVXNSVUZCUlR0dlFrRkRjRU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMmxDUVVOc1FqdG5Ra0ZEUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhYUVVGWExFVkJRVVU3YjBKQlEycENMR2xDUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdhVUpCUTJ4Q08xbEJRMHdzUTBGQlF5eEpRVU5JTEVOQlFVRTdTVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeFRRVUZUTEU5QlFVOHNRMEZCVVN4SFFVRnRRanRKUVVOMlF5eFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3VVVGREwwSXNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhIUVVGSExFVkJRVVVzVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUld4RExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UlFVRlJMRVZCUVVVN1dVRkRha0lzU1VGQlNTeFpRVUZaTEVkQlFVY3NjVUpCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZUVNc1NVRkJTU3haUVVGWkxFVkJRVVU3WjBKQlEyUXNTVUZCU1N4UlFVRlJMRWRCUVVjc2VVSkJRV1VzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTNKRkxFOUJRVThzVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMkZCUXpWQ08xTkJRMG83VVVGRlJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4TFFVRkxMRVZCUVVVN1dVRkRXQ3h6UWtGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVONlFqdFJRVVZFTEhkQ1FVRmpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTXhRaXhQUVVGUExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUVR0UlFVTjZRaXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCUXl4SFFVRnRSRHRaUVVONFJDeEpRVUZKTEZGQlFWRXNSMEZCUnl4NVFrRkJaU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU0xUkN4SlFVRkpMRkZCUVZFc1NVRkJTU3hKUVVGSkxFVkJRVVU3WjBKQlEyeENMRTlCUVU4c1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJGQlF6VkNPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNRMEZCWlR0WlFVTnlRaXhQUVVGUExESkNRVUZaTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlFUdFJRVU4yUXl4RFFVRkRMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1ZVRkJWU3hEUVVGRExFZEJRWE5DTzBsQlEzUkRMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhIUVVGSExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NSVUZCUlN4UFFVRlBMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRmJFTXNTVUZCU1N4blFrRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJUdFpRVU5xUWl4SlFVRkpMRmxCUVZrc1IwRkJSeXh4UWtGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVONFF5eEpRVUZKTEZsQlFWa3NSVUZCUlR0blFrRkRaQ3hKUVVGSkxGRkJRVkVzUjBGQlJ5eDVRa0ZCWlN4RFFVRkRMSEZDUVVGeFFpeERRVUZETEZsQlFWa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRGVFVXNUMEZCVHl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03WVVGRE5VSTdVMEZEU2p0UlFVVkVMSGRDUVVGakxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVNeFFpeFBRVUZQTEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRVHRSUVVNMVFpeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJReXhIUVVGelJEdFpRVU16UkN4SlFVRkpMRkZCUVZFc1IwRkJSeXg1UWtGQlpTeERRVUZETEhGQ1FVRnhRaXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTXZSQ3hKUVVGSkxGRkJRVkVzU1VGQlNTeEpRVUZKTEVWQlFVVTdaMEpCUTJ4Q0xFOUJRVThzVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMkZCUXpWQ08xRkJRMHdzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVVNc1EwRkJaVHRaUVVOeVFpd3lRa0ZCV1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVRTdVVUZEYUVNc1EwRkJReXhEUVVGRExFTkJRVUU3U1VGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hyUWtGQlpUdEpRVU5ZTEUxQlFVMHNVVUZCUVR0SlFVTk9MRTlCUVU4c1UwRkJRVHRKUVVOUUxGVkJRVlVzV1VGQlFUdERRVU5pTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdiRzloWkdsdVp5Qm1jbTl0SUNjdUxpOTFkR2xzTDJ4dllXUnBibWNuWEc1cGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCemRHRjBkWE1nWm5KdmJTQW5MaTR2YzNSdmNtVXZjM1JoZEhWekoxeHVhVzF3YjNKMElHMXZZMnROWVc1aFoyVnlJR1p5YjIwZ0p5NHZiVzlqYTAxaGJtRm5aWEluWEc1cGJYQnZjblFnWTJGamFHVk5ZVzVoWjJWeUlHWnliMjBnSnk0dlkyRmphR1ZOWVc1aFoyVnlKMXh1YVcxd2IzSjBJSE5sYzNOcGIyNU5ZVzVoWjJWeUlHWnliMjBnSnk0dmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1cGJYQnZjblFnY21WemNHOXVjMlZJWVc1a2JHVnlJR1p5YjIwZ0p5NHZjbVZ6Y0c5dWMyVklZVzVrYkdWeUoxeHVhVzF3YjNKMElHUjFjbUYwYVc5dVVtVndiM0owWlhJZ1puSnZiU0JjSWk0dlpIVnlZWFJwYjI1U1pYQnZjblJsY2x3aVhHNXBiWEJ2Y25RZ2RYSnNJR1p5YjIwZ0p5NHVMM1YwYVd3dmRYSnNKMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVMQ0JKUlhKeWIzSlBZbXBsWTNRZ2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0pjYm1sdGNHOXlkQ0I3SUdOaGRHTm9TR0Z1Wkd4bGNpQjlJR1p5YjIwZ0p5NHZZMkYwWTJoSVlXNWtiR1Z5Snp0Y2JseHVMeThnNXFDODVieVA1WXlXZFhKc1hHNW1kVzVqZEdsdmJpQm1iM0p0WVhRb2IzSnBaMmx1VlhKc09pQnpkSEpwYm1jcElIdGNiaUFnSUNCcFppQW9iM0pwWjJsdVZYSnNMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQW5LU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjNKcFoybHVWWEpzWEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiR1YwSUhWeWJGQmxjbVpwZUNBOUlHTnZibVpwWnk1MWNteFFaWEptYVhnN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxuVnliRkJsY21acGVDQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMWNteFFaWEptYVhnZ1BTQmpiMjVtYVdjdWRYSnNVR1Z5Wm1sNEtDbGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkWEpzVUdWeVptbDRJQ3NnYjNKcFoybHVWWEpzTzF4dUlDQWdJSDFjYm4xY2JseHVMeThnNW9tQTVweUo2SyszNXJHQzVZK1I1WWU2NVltTjZaeUE2S2FCNVlHYTU1cUU1THFMNW9PRlhHNW1kVzVqZEdsdmJpQndjbVZFYnp4VUlHVjRkR1Z1WkhNZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2Ymo0b2IySnFPaUJVTENCeVpYTnZiSFpsT2lBb2RtRnNkV1UvT2lCaGJua3BJRDArSUhadmFXUXNJSEpsYW1WamREODZJQ2h5WldGemIyNC9PaUJoYm5rcElEMCtJSFp2YVdRcE9pQlVJSHRjYmlBZ0lDQXZMeURubWJ2bHZaWG1nSUhscExIbWxZanZ2SXpwaDQzbHBJM25tYnZsdlpYb3JxSG1sYkJjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1eVpVeHZaMmx1UTI5MWJuUWdQVDA5SUZ3aWRXNWtaV1pwYm1Wa1hDSXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxuSmxURzluYVc1RGIzVnVkQ0E5SURBN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxuSmxURzluYVc1RGIzVnVkQ3NyTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodlltb3VjbVZNYjJkcGJrTnZkVzUwSUQwOVBTQXdJQ1ltSUhSNWNHVnZaaUJ2WW1vdVltVm1iM0psVTJWdVpDQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1aVpXWnZjbVZUWlc1a0tDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzlpYWk1emFHOTNURzloWkdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0JzYjJGa2FXNW5Mbk5vYjNjb2IySnFMbk5vYjNkTWIyRmthVzVuS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb0lXOWlhaTV2Y21sbmFXNVZjbXdwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbTl5YVdkcGJsVnliQ0E5SUc5aWFpNTFjbXc3WEc0Z0lDQWdJQ0FnSUc5aWFpNTFjbXdnUFNCbWIzSnRZWFFvYjJKcUxuVnliQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiMkpxTGw5eVpYTnZiSFpsSUQwZ2NtVnpiMngyWlR0Y2JpQWdJQ0J2WW1vdVgzSmxhbVZqZENBOUlISmxhbVZqZER0Y2JseHVJQ0FnSUhKbGRIVnliaUJ2WW1vN1hHNTlYRzVjYmk4dklPYWd2T1c4aitXTWx1V2toT2VRaHVpdnQrYXhndWVhaEc5aWF1V0doZVd1dVZ4dVpuVnVZM1JwYjI0Z2FXNXBkR2xoYkdsNlpWSmxjWFZsYzNSUFltb29iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaWtnZTF4dVhHNGdJQ0FnYVdZZ0tDRnZZbW91WkdGMFlTa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vdVpHRjBZU0E5SUh0OU8xeHVJQ0FnSUgxY2JpQWdJQ0JjYmlBZ0lDQnZZbW91YUdWaFpHVnlJRDBnYjJKcUxtaGxZV1JsY2lBL0lHOWlhaTVvWldGa1pYSWdPaUI3ZlR0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTV6WlhSSVpXRmtaWElnUFQwOUlDZG1kVzVqZEdsdmJpY3BJSHRjYmlBZ0lDQWdJQ0FnYkdWMElHaGxZV1JsY2lBOUlHTnZibVpwWnk1elpYUklaV0ZrWlhJb0tUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJvWldGa1pYSWdQVDA5SUNkdlltcGxZM1FuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdWFHVmhaR1Z5SUQwZ2V5NHVMbTlpYWk1b1pXRmtaWElzSUM0dUxtaGxZV1JsY24wN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1YzJWMFNHVmhaR1Z5SUQwOVBTQW5iMkpxWldOMEp5a2dlMXh1SUNBZ0lDQWdJQ0J2WW1vdWFHVmhaR1Z5SUQwZ2V5NHVMbTlpYWk1b1pXRmtaWElzSUM0dUxtTnZibVpwWnk1elpYUklaV0ZrWlhKOU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHZZbW91YjNKcFoybHVWWEpzSUNFOVBTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTUxY213Z0ppWWdjM1JoZEhWekxuTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1SaGRHRWdQU0I3SUM0dUxtOWlhaTVrWVhSaElHRnpJRzlpYW1WamRDd2dXMk52Ym1acFp5NXpaWE56YVc5dVRtRnRaVjA2SUhOMFlYUjFjeTV6WlhOemFXOXVJSDA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnNWFhQzVwNmM1cHlKNVlXbzViR0E1WStDNXBXdzc3eU01WWlaNXJlNzVZcWdYRzRnSUNBZ1kyOXVjM1FnWjJRZ1BTQm5aWFJIYkc5aVlXeEVZWFJoS0NrN1hHNGdJQ0FnYjJKcUxtUmhkR0VnUFNCN0lDNHVMbWRrTENBdUxpNXZZbW91WkdGMFlTQmhjeUJ2WW1wbFkzUWdmVHRjYmx4dUlDQWdJRzlpYWk1dFpYUm9iMlFnUFNCdlltb3ViV1YwYUc5a0lIeDhJQ2RIUlZRbk8xeHVJQ0FnSUc5aWFpNWtZWFJoVkhsd1pTQTlJRzlpYWk1a1lYUmhWSGx3WlNCOGZDQW5hbk52YmljN1hHNWNiaUFnSUNBdkx5RGxwb0xtbnB6b3I3Zm1zWUxrdUkzbW1LOUhSVlR2dkl6bGlKbmxuS2hWVWt6a3VLM29oNnJsaXFqbGlxRGt1SXJubWJ2bHZaWG1nSUhsa296bGhhamxzWURsajRMbWxiQmNiaUFnSUNCcFppQW9JV052Ym1acFp5NWtiMDV2ZEZWelpWRjFaWEo1VTNSeWFXNW5JQ1ltSUc5aWFpNXRaWFJvYjJRZ0lUMDlJRndpUjBWVVhDSXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tITjBZWFIxY3k1elpYTnphVzl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdWRYSnNJRDBnZFhKc0xuTmxkRkJoY21GdGN5aHZZbW91ZFhKc0xDQjdJRnRqYjI1bWFXY3VjMlZ6YzJsdmJrNWhiV1ZkT2lCemRHRjBkWE11YzJWemMybHZiaUI5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdkWEpzTG5ObGRGQmhjbUZ0Y3lodlltb3VkWEpzTENCblpDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1emRHRnlkQ2h2WW1vcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc5aWFqdGNibjFjYmx4dUx5OGc1cUM4NWJ5UDVZeVc1YVNFNTVDRzVMaUs1THlnNXBhSDVMdTI1NXFFYjJKcTVZYUY1YTY1WEc1bWRXNWpkR2x2YmlCcGJtbDBhV0ZzYVhwbFZYQnNiMkZrUm1sc1pVOWlhaWh2WW1vNklFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUtTQjdYRzRnSUNBZ2FXWWdLQ0Z2WW1vdVptOXliVVJoZEdFcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1admNtMUVZWFJoSUQwZ2UzMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2IySnFMbWhsWVdSbGNpQTlJRzlpYWk1b1pXRmtaWElnUHlCdlltb3VhR1ZoWkdWeUlEb2dlMzA3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VjMlYwU0dWaFpHVnlJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQWdJR3hsZENCb1pXRmtaWElnUFNCamIyNW1hV2N1YzJWMFNHVmhaR1Z5S0NrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdhR1ZoWkdWeUlEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1obFlXUmxjaUE5SUhzdUxpNXZZbW91YUdWaFpHVnlMQ0F1TGk1b1pXRmtaWEo5TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5Mbk5sZEVobFlXUmxjaUE5UFQwZ0oyOWlhbVZqZENjcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1obFlXUmxjaUE5SUhzdUxpNXZZbW91YUdWaFpHVnlMQ0F1TGk1amIyNW1hV2N1YzJWMFNHVmhaR1Z5ZlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2IySnFMbTl5YVdkcGJsVnliQ0FoUFQwZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVkWEpzSUNZbUlITjBZWFIxY3k1elpYTnphVzl1S1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtYjNKdFJHRjBZU0E5SUhzZ0xpNHViMkpxTG1admNtMUVZWFJoSUdGeklHOWlhbVZqZEN3Z1cyTnZibVpwWnk1elpYTnphVzl1VG1GdFpWMDZJSE4wWVhSMWN5NXpaWE56YVc5dUlIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGc1YWFDNXA2YzVweUo1WVdvNWJHQTVZK0M1cFd3Nzd5TTVZaVo1cmU3NVlxZ1hHNGdJQ0FnWTI5dWMzUWdaMlFnUFNCblpYUkhiRzlpWVd4RVlYUmhLQ2s3WEc0Z0lDQWdiMkpxTG1admNtMUVZWFJoSUQwZ2V5QXVMaTVuWkN3Z0xpNHViMkpxTG1admNtMUVZWFJoSUgwN1hHNWNiaUFnSUNCcFppQW9JV052Ym1acFp5NWtiMDV2ZEZWelpWRjFaWEo1VTNSeWFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUM4dklPV3dodWVadSttWmh1YUFnZVM1bitXNHB1V2NxSFZ5Yk9TNGlseHVJQ0FnSUNBZ0lDQnBaaUFvYzNSaGRIVnpMbk5sYzNOcGIyNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTUxY213Z1BTQjFjbXd1YzJWMFVHRnlZVzF6S0c5aWFpNTFjbXdzSUhzZ1cyTnZibVpwWnk1elpYTnphVzl1VG1GdFpWMDZJSE4wWVhSMWN5NXpaWE56YVc5dUlIMHBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4dklPV0ZxT1d4Z09XUGd1YVZzT1dRak9hWHR1YVV2dVdjcUhWeWJPUzRpbHh1SUNBZ0lDQWdJQ0J2WW1vdWRYSnNJRDBnZFhKc0xuTmxkRkJoY21GdGN5aHZZbW91ZFhKc0xDQm5aQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXpkR0Z5ZENodlltb3BPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHOWlhanRjYm4xY2JseHVablZ1WTNScGIyNGdaMlYwUjJ4dlltRnNSR0YwWVNncElIdGNiaUFnSUNCc1pYUWdaMlE2SUdGdWVTQTlJSHQ5TzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbWRzYjJKaGJFUmhkR0VnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCblpDQTlJR052Ym1acFp5NW5iRzlpWVd4RVlYUmhLQ2s3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtZHNiMkpoYkVSaGRHRWdQVDA5SUZ3aWIySnFaV04wWENJcElIdGNiaUFnSUNBZ0lDQWdaMlFnUFNCamIyNW1hV2N1WjJ4dlltRnNSR0YwWVR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHZGtPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmtiMUpsY1hWbGMzUW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaWtnZTF4dUlDQWdJRzlpYWlBOUlHbHVhWFJwWVd4cGVtVlNaWEYxWlhOMFQySnFLRzlpYWlrN1hHNGdJQ0FnYVdZZ0tHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BUMDlJREFnSmlZZ2RIbHdaVzltSUdOdmJtWnBaeTVpWldadmNtVlRaVzVrSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFJRDBnWTI5dVptbG5MbUpsWm05eVpWTmxibVFvYjJKcUxDQnpkR0YwZFhNdWMyVnpjMmx2YmlrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaVHhYWldOb1lYUk5hVzVwY0hKdlozSmhiUzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwUGlnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSGQ0TG5KbGNYVmxjM1FvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMaTR1YjJKcUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWalkyVnpjeWh5WlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdaaGFXd29jbVZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2g3SUhSNWNHVTZJQ2R6ZVhOMFpXMHRaWEp5YjNJbkxDQnlaWE1nZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0d4bGRHVW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VZMjl0Y0d4bGRHVWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltb3VZMjl0Y0d4bGRHVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHOWlhaTV6YUc5M1RHOWhaR2x1WnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZTbGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pHOVZjR3h2WVdSR2FXeGxLRzlpYWpvZ1NWVndiRzloWkVacGJHVlBjSFJwYjI0cElIdGNiaUFnSUNCdlltb2dQU0JwYm1sMGFXRnNhWHBsVlhCc2IyRmtSbWxzWlU5aWFpaHZZbW9wTzF4dUlDQWdJR2xtSUNodlltb3VjbVZNYjJkcGJrTnZkVzUwSUQwOVBTQXdJQ1ltSUhSNWNHVnZaaUJqYjI1bWFXY3VZbVZtYjNKbFUyVnVaQ0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpQTlJR052Ym1acFp5NWlaV1p2Y21WVFpXNWtLRzlpYWl3Z2MzUmhkSFZ6TG5ObGMzTnBiMjRwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVThWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVWWEJzYjJGa1JtbHNaVk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZEQ0b0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0IzZUM1MWNHeHZZV1JHYVd4bEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM0dUxtOWlhaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lITjFZMk5sYzNNb2NtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQm1ZV2xzS0hKbGN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2V5QjBlWEJsT2lBbmMzbHpkR1Z0TFdWeWNtOXlKeXdnY21WeklIMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJYQnNaWFJsS0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdiMkpxTG1OdmJYQnNaWFJsSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OdmJYQnNaWFJsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h2WW1vdWMyaHZkMHh2WVdScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWhaR2x1Wnk1b2FXUmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDBwWEc1OVhHNWNibVoxYm1OMGFXOXVJSEpsY1hWbGMzUThWRkpsYzNBK0tHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBPaUJRY205dGFYTmxQRlJTWlhOd1BpQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYjJKcUlEMGdjSEpsUkc4b2IySnFMQ0J5WlhOdmJIWmxMQ0J5WldwbFkzUXBPMXh1WEc0Z0lDQWdJQ0FnSUdsbUlDaGpiMjVtYVdjdWJXOWphMHB6YjI0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnRiMk5yVW1WemNHOXVjMlVnUFNCdGIyTnJUV0Z1WVdkbGNpNW5aWFFvYjJKcUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHRiMk5yVW1WemNHOXVjMlVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSXVjbVZ6Y0c5dWMyVkdiM0pTWlhGMVpYTjBLRzF2WTJ0U1pYTndiMjV6WlN3Z2IySnFLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE53YjI1elpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JwWmlBb2IySnFMbU5oWTJobEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallXTm9aVTFoYm1GblpYSXVaMlYwS0c5aWFpazdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCelpYTnphVzl1VFdGdVlXZGxjaTV0WVdsdUtHOWlhaWt1ZEdobGJpZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdaRzlTWlhGMVpYTjBLRzlpYWlsY2JpQWdJQ0FnSUNBZ2ZTa3VkR2hsYmlnb2NtVnpPaUJYWldOb1lYUk5hVzVwY0hKdlozSmhiUzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSXVjbVZ6Y0c5dWMyVkdiM0pTWlhGMVpYTjBLSEpsY3l3Z2IySnFLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h5WlhOd2IyNXpaU0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6Y0c5dWMyVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlLUzVqWVhSamFDZ29aVG9nU1VWeWNtOXlUMkpxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyRjBZMmhJWVc1a2JHVnlLR1VzSUc5aWFpd2djbVZxWldOMEtWeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lIMHBYRzU5WEc1Y2JtWjFibU4wYVc5dUlIVndiRzloWkVacGJHVW9iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrNklHRnVlU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2IySnFJRDBnY0hKbFJHOG9iMkpxTENCeVpYTnZiSFpsTENCeVpXcGxZM1FwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3ViVzlqYTBwemIyNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J0YjJOclVtVnpjRzl1YzJVZ1BTQnRiMk5yVFdGdVlXZGxjaTVuWlhRb2IySnFLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h0YjJOclVtVnpjRzl1YzJVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY21WemNHOXVjMlVnUFNCeVpYTndiMjV6WlVoaGJtUnNaWEl1Y21WemNHOXVjMlZHYjNKVmNHeHZZV1JHYVd4bEtHMXZZMnRTWlhOd2IyNXpaU3dnYjJKcUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTndiMjV6WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnpaWE56YVc5dVRXRnVZV2RsY2k1dFlXbHVLRzlpYWlrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5VmNHeHZZV1JHYVd4bEtHOWlhaWxjYmlBZ0lDQWdJQ0FnZlNrdWRHaGxiaWdvY21Wek9pQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSXVjbVZ6Y0c5dWMyVkdiM0pWY0d4dllXUkdhV3hsS0hKbGN5d2diMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTndiMjV6WlNBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WemNHOXVjMlVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1M1allYUmphQ2dvWlRvZ1NVVnljbTl5VDJKcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhSamFFaGhibVJzWlhJb1pTd2diMkpxTENCeVpXcGxZM1FwWEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlNsY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdlMXh1SUNBZ0lHWnZjbTFoZEN4Y2JpQWdJQ0J5WlhGMVpYTjBMRnh1SUNBZ0lIVndiRzloWkVacGJHVmNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RIYW5kbGVyXCIpO1xudmFyIGNhY2hlTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vY2FjaGVNYW5hZ2VyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL3Nlc3Npb25NYW5hZ2VyXCIpO1xudmFyIGpzb25TdXBlcnNldF8xID0gcmVxdWlyZShcIi4uL3V0aWwvanNvblN1cGVyc2V0XCIpO1xuZnVuY3Rpb24gcmVzcG9uc2VGb3JSZXF1ZXN0KHJlcywgb2JqKSB7XG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuZW5kKG9iaik7XG4gICAgICAgIGlmIChvYmouZGF0YVR5cGUgPT09ICdqc29uJyAmJiB0eXBlb2YgcmVzLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXMuZGF0YSA9IGpzb25TdXBlcnNldF8xLmRlZmF1bHQocmVzLmRhdGEpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICdsb2dpYy1lcnJvcicsIHJlczogcmVzIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIHZhciByZWFsRGF0YSA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LnNldChvYmosIHJlYWxEYXRhKTtcbiAgICAgICAgICAgIGlmICghb2JqLm5vQ2FjaGVGbGFzaCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZWFsRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhbERhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyB7IHR5cGU6ICdodHRwLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXNwb25zZUZvclVwbG9hZEZpbGUocmVzLCBvYmopIHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5lbmQob2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXMuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcy5kYXRhID0ganNvblN1cGVyc2V0XzEuZGVmYXVsdChyZXMuZGF0YSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gSlNPTi5wYXJzZShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5sb2dpblRyaWdnZXIocmVzLmRhdGEpICYmIG9iai5yZUxvZ2luQ291bnQgIT09IHVuZGVmaW5lZCAmJiBvYmoucmVMb2dpbkNvdW50IDwgY29uZmlnXzEuZGVmYXVsdC5yZUxvZ2luTGltaXQpIHtcbiAgICAgICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5kZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnVwbG9hZEZpbGUob2JqKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NUcmlnZ2VyKHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgdmFyIHJlYWxEYXRhID0gXCJcIjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YShyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWFsRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgeyB0eXBlOiAnaHR0cC1lcnJvcicsIHJlczogcmVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHJlc3BvbnNlRm9yUmVxdWVzdDogcmVzcG9uc2VGb3JSZXF1ZXN0LFxuICAgIHJlc3BvbnNlRm9yVXBsb2FkRmlsZTogcmVzcG9uc2VGb3JVcGxvYWRGaWxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WemNHOXVjMlZJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5eVpYTndiMjV6WlVoaGJtUnNaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZEY0VNc2JVUkJRVFpETzBGQlF6ZERMQ3REUVVGNVF6dEJRVU42UXl4MVJFRkJhVVE3UVVGRGFrUXNiVVJCUVRaRE8wRkJSVGRETEhGRVFVRXJRenRCUVVVdlF5eFRRVUZUTEd0Q1FVRnJRaXhEUVVOMlFpeEhRVUZ0UkN4RlFVTnVSQ3hIUVVGdFFqdEpRVVZ1UWl4SlFVRkpMRWRCUVVjc1EwRkJReXhWUVVGVkxFdEJRVXNzUjBGQlJ5eEZRVUZGTzFGQlJYaENMREJDUVVGblFpeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVjeFFpeEpRVUZKTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1RVRkJUU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVsQlFVa3NTMEZCU3l4UlFVRlJMRVZCUVVVN1dVRkRla1FzUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4elFrRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTnNReXhKUVVGSk8yZENRVU5CTEVkQlFVY3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1lVRkRia003V1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0blFrRkRVaXhOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEdGQlFXRXNSVUZCUlN4SFFVRkhMRXRCUVVFc1JVRkJSU3hEUVVGQk8yRkJRM0pETzFOQlEwbzdVVUZGUkN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zV1VGQllTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zV1VGQldTeExRVUZMTEZOQlFWTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCWVN4RlFVRkZPMWxCUlRkSExIZENRVUZqTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1dVRkROVUlzVDBGQlR5eDNRa0ZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU4wUXp0aFFVRk5MRWxCUVVrc1owSkJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8xbEJSWGhETEVsQlFVa3NVVUZCVVN4SFFVRnpReXhGUVVGRkxFTkJRVU03V1VGRGNrUXNTVUZCU1R0blFrRkRRU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4WFFVRlhMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU14UXl4UlFVRlJMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8ybENRVU16UXp0eFFrRkJUVHR2UWtGRFNDeFJRVUZSTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJRenRwUWtGRGRrSTdZVUZEU2p0WlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFZEJRVVU3V1VGRlpDeHpRa0ZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVWQlFVVTdaMEpCUlc1Q0xFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNUMEZCVHl4TFFVRkxMRlZCUVZVc1JVRkJSVHR2UWtGRGJrTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dHBRa0ZEZWtJN2NVSkJRVTA3YjBKQlEwZ3NUMEZCVHl4UlFVRlJMRU5CUVVNN2FVSkJRMjVDTzJGQlEwbzdVMEZEU2p0aFFVRk5PMWxCUlVnc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeGhRVUZoTEVWQlFVVXNSMEZCUnl4TFFVRkJMRVZCUVVVc1EwRkJRVHRUUVVOeVF6dExRVU5LTzFOQlFVMDdVVUZGU0N4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRkxGbEJRVmtzUlVGQlJTeEhRVUZITEV0QlFVRXNSVUZCUlN4RFFVRkJPMHRCUTNCRE8wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNjVUpCUVhGQ0xFTkJRekZDTEVkQlFYTkVMRVZCUTNSRUxFZEJRWE5DTzBsQlJYUkNMRWxCUVVrc1IwRkJSeXhEUVVGRExGVkJRVlVzUzBGQlN5eEhRVUZITEVWQlFVVTdVVUZGZUVJc01FSkJRV2RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSekZDTEVsQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1NVRkJTU3hMUVVGTExGRkJRVkVzUlVGQlJUdFpRVU01UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hIUVVGSExITkNRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRMnhETEVsQlFVazdaMEpCUTBFc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dGhRVU51UXp0WlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8yZENRVU5TTEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVc1lVRkJZU3hGUVVGRkxFZEJRVWNzUzBGQlFTeEZRVUZGTEVOQlFVRTdZVUZEY2tNN1UwRkRTanRSUVVWRUxFbEJRVWtzWjBKQlFVMHNRMEZCUXl4WlFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4WlFVRlpMRXRCUVVzc1UwRkJVeXhKUVVGSkxFZEJRVWNzUTBGQlF5eFpRVUZaTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGaExFVkJRVVU3V1VGRk4wY3NkMEpCUVdNc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFpRVU0xUWl4UFFVRlBMSGRDUVVGakxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUTNwRE8yRkJRVTBzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdXVUZGZUVNc1NVRkJTU3hSUVVGUkxFZEJRWE5ETEVWQlFVVXNRMEZCUXp0WlFVTnlSQ3hKUVVGSk8yZENRVU5CTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGZEJRVmNzUzBGQlN5eFZRVUZWTEVWQlFVVTdiMEpCUXpGRExGRkJRVkVzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdhVUpCUXpORE8zRkNRVUZOTzI5Q1FVTklMRkZCUVZFc1IwRkJSeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETzJsQ1FVTjJRanRoUVVOS08xbEJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNSMEZCUlR0WlFVVmtMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eExRVUZMTEZWQlFWVXNSVUZCUlR0blFrRkRia01zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVONlFqdHBRa0ZCVFR0blFrRkRTQ3hQUVVGUExGRkJRVkVzUTBGQlF6dGhRVU51UWp0VFFVTktPMkZCUVUwN1dVRkZTQ3hOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEdGQlFXRXNSVUZCUlN4SFFVRkhMRXRCUVVFc1JVRkJSU3hEUVVGQk8xTkJRM0pETzB0QlEwbzdVMEZCVFR0UlFVVklMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzV1VGQldTeEZRVUZGTEVkQlFVY3NTMEZCUVN4RlFVRkZMRU5CUVVFN1MwRkRjRU03UVVGRFRDeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hyUWtGQmEwSXNiMEpCUVVFN1NVRkRiRUlzY1VKQlFYRkNMSFZDUVVGQk8wTkJRM2hDTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdZMjl1Wm1sbklHWnliMjBnSnk0dUwzTjBiM0psTDJOdmJtWnBaeWRjYm1sdGNHOXlkQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpQm1jbTl0SUNjdUwzSmxjWFZsYzNSSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUdOaFkyaGxUV0Z1WVdkbGNpQm1jbTl0SUNjdUwyTmhZMmhsVFdGdVlXZGxjaWRjYm1sdGNHOXlkQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlJR1p5YjIwZ0p5NHZaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpZGNibWx0Y0c5eWRDQnpaWE56YVc5dVRXRnVZV2RsY2lCbWNtOXRJQ2N1TDNObGMzTnBiMjVOWVc1aFoyVnlKMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVMQ0JKUVc1NVQySnFaV04wSUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lPMXh1YVcxd2IzSjBJR3B6YjI1VGRYQmxjbk5sZENCbWNtOXRJQ2N1TGk5MWRHbHNMMnB6YjI1VGRYQmxjbk5sZENkY2JseHVablZ1WTNScGIyNGdjbVZ6Y0c5dWMyVkdiM0pTWlhGMVpYTjBLRnh1SUNBZ0lISmxjem9nVjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZEN4Y2JpQWdJQ0J2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1WEc0cE9pQmhibmtnZTF4dUlDQWdJR2xtSUNoeVpYTXVjM1JoZEhWelEyOWtaU0E5UFQwZ01qQXdLU0I3WEc1Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1bGJtUW9iMkpxS1R0Y2JpQWdJQ0FnSUNBZ1hHNGdJQ0FnSUNBZ0lDOHZJT2l2dCtheGd1YWd2T1c4aitTNHVtcHpiMjd2dkl6a3ZZYm92NVRsbTU3a3VvWnpkSEpwYm1mdnZJem9yN1RtbUk3bGhvWGxycm5rdUszbGo2L29nNzNsclpqbG5LamxyN3pvaDdUa3ZiL2x2cGRLWVhaaFUyTnlhWEIwNWJ5QzViaTQ1NXFFNWEyWDU2eW1YRzRnSUNBZ0lDQWdJR2xtSUNodlltb3VaR0YwWVZSNWNHVWdQVDA5SUNkcWMyOXVKeUFtSmlCMGVYQmxiMllnY21WekxtUmhkR0VnUFQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYTXVaR0YwWVNBOUlHcHpiMjVUZFhCbGNuTmxkQ2h5WlhNdVpHRjBZU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGN5NWtZWFJoSUQwZ1NsTlBUaTV3WVhKelpTaHlaWE11WkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2V5QjBlWEJsT2lBbmJHOW5hV010WlhKeWIzSW5MQ0J5WlhNZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdhV1lnS0dOdmJtWnBaeTVzYjJkcGJsUnlhV2RuWlhJaEtISmxjeTVrWVhSaEtTQW1KaUJ2WW1vdWNtVk1iMmRwYmtOdmRXNTBJQ0U5UFNCMWJtUmxabWx1WldRZ0ppWWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQThJR052Ym1acFp5NXlaVXh2WjJsdVRHbHRhWFFoS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbm1idmx2WlhtZ0lIbHBMSG1sWWp2dkl6a3VKVHBoNDNvcjVYbXJLSG1sYkRrdUkzb3RvWG92NGZwaFkzbnZhNWNiaUFnSUNBZ0lDQWdJQ0FnSUhObGMzTnBiMjVOWVc1aFoyVnlMbVJsYkZObGMzTnBiMjRvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWEYxWlhOMFNHRnVaR3hsY2k1eVpYRjFaWE4wS0c5aWFpazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTI5dVptbG5Mbk4xWTJObGMzTlVjbWxuWjJWeUtISmxjeTVrWVhSaEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1bzZsNVkrajZMK1U1WnVlNW9pUTVZcWY1NkNCWEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY21WaGJFUmhkR0U2SUhOMGNtbHVaeUI4SUVsQmJubFBZbXBsWTNRZ2ZDQkJjbkpoZVVKMVptWmxjaUE5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5Mbk4xWTJObGMzTkVZWFJoSUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxZV3hFWVhSaElEMGdZMjl1Wm1sbkxuTjFZMk5sYzNORVlYUmhLSEpsY3k1a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpXRnNSR0YwWVNBOUlISmxjeTVrWVhSaE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdDlYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG52SlBsclpqbHJaamxncWhjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhZMmhsVFdGdVlXZGxjaTV6WlhRb2IySnFMQ0J5WldGc1JHRjBZU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVc5aWFpNXViME5oWTJobFJteGhjMmdwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RGxwb0xtbnB6a3VMcmt1b2JrdjUzb3I0SHBvYlhwbmFMa3VJM3BsNnJuZzRIdnZJemxpSm5rdUkzbG01N29zSVB2dkl6bGo2cm1tSy9udkpQbHJaam1uSURtbHJEbWxiRG1qYTd2dkl6bHZvWGt1SXZtcktIb3Y1dmxoYVhsaG8zbmxLaGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1emRXTmpaWE56SUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG5OMVkyTmxjM01vY21WaGJFUmhkR0VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXRnNSR0YwWVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURtanFYbGo2UG92NVRsbTU3bHBMSG90S1hub0lGY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lIc2dkSGx3WlRvZ0oyeHZaMmxqTFdWeWNtOXlKeXdnY21WeklIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDOHZJR2gwZEhCejZMK1U1WnVlNTRxMjVvQ0I1NkNCNloyZU1qQXdYRzRnSUNBZ0lDQWdJSFJvY205M0lIc2dkSGx3WlRvZ0oyaDBkSEF0WlhKeWIzSW5MQ0J5WlhNZ2ZWeHVJQ0FnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnY21WemNHOXVjMlZHYjNKVmNHeHZZV1JHYVd4bEtGeHVJQ0FnSUhKbGN6b2dWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVWWEJzYjJGa1JtbHNaVk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZEN4Y2JpQWdJQ0J2WW1vNklFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dVhHNHBPaUJoYm5rZ2UxeHVJQ0FnSUdsbUlDaHlaWE11YzNSaGRIVnpRMjlrWlNBOVBUMGdNakF3S1NCN1hHNWNiaUFnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNWxibVFvYjJKcUtUdGNibHh1SUNBZ0lDQWdJQ0F2THlEbGhvWGxycm5rdUszbGo2L29nNzNsclpqbG5LamxyN3pvaDdUa3ZiL2x2cGRLWVhaaFUyTnlhWEIwNWJ5QzViaTQ1NXFFNWEyWDU2eW1YRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnY21WekxtUmhkR0VnUFQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYTXVaR0YwWVNBOUlHcHpiMjVUZFhCbGNuTmxkQ2h5WlhNdVpHRjBZU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGN5NWtZWFJoSUQwZ1NsTlBUaTV3WVhKelpTaHlaWE11WkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2V5QjBlWEJsT2lBbmJHOW5hV010WlhKeWIzSW5MQ0J5WlhNZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdhV1lnS0dOdmJtWnBaeTVzYjJkcGJsUnlhV2RuWlhJaEtISmxjeTVrWVhSaEtTQW1KaUJ2WW1vdWNtVk1iMmRwYmtOdmRXNTBJQ0U5UFNCMWJtUmxabWx1WldRZ0ppWWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQThJR052Ym1acFp5NXlaVXh2WjJsdVRHbHRhWFFoS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbm1idmx2WlhtZ0lIbHBMSG1sWWp2dkl6a3VKVHBoNDNvcjVYbXJLSG1sYkRrdUkzb3RvWG92NGZwaFkzbnZhNWNiaUFnSUNBZ0lDQWdJQ0FnSUhObGMzTnBiMjVOWVc1aFoyVnlMbVJsYkZObGMzTnBiMjRvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWEYxWlhOMFNHRnVaR3hsY2k1MWNHeHZZV1JHYVd4bEtHOWlhaWs3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyOXVabWxuTG5OMVkyTmxjM05VY21sbloyVnlLSEpsY3k1a1lYUmhLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNW82bDVZK2o2TCtVNVp1ZTVvaVE1WXFmNTZDQlhHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVmhiRVJoZEdFNklITjBjbWx1WnlCOElFbEJibmxQWW1wbFkzUWdmQ0JCY25KaGVVSjFabVpsY2lBOUlGd2lYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG5OMVkyTmxjM05FWVhSaElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWVd4RVlYUmhJRDBnWTI5dVptbG5Mbk4xWTJObGMzTkVZWFJoS0hKbGN5NWtZWFJoS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaV0ZzUkdGMFlTQTlJSEpsY3k1a1lYUmhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHQ5WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxuTjFZMk5sYzNNZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTV6ZFdOalpYTnpLSEpsWVd4RVlYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbFlXeEVZWFJoTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1bzZsNVkrajZMK1U1WnVlNWFTeDZMU2w1NkNCWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCN0lIUjVjR1U2SUNkc2IyZHBZeTFsY25KdmNpY3NJSEpsY3lCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBdkx5Qm9kSFJ3YytpL2xPV2JudWVLdHVhQWdlZWdnZW1kbmpJd01GeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCN0lIUjVjR1U2SUNkb2RIUndMV1Z5Y205eUp5d2djbVZ6SUgxY2JpQWdJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCeVpYTndiMjV6WlVadmNsSmxjWFZsYzNRc1hHNGdJQ0FnY21WemNHOXVjMlZHYjNKVmNHeHZZV1JHYVd4bFhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuLi9hcGkvcmVxdWVzdFwiKTtcbnZhciBjaGVja1Nlc3Npb25Qcm9taXNlID0gbnVsbDtcbmZ1bmN0aW9uIGNoZWNrU2Vzc2lvbigpIHtcbiAgICBpZiAoIWNoZWNrU2Vzc2lvblByb21pc2UpIHtcbiAgICAgICAgY2hlY2tTZXNzaW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgd3guY2hlY2tTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfY2hlY2tTZXNzaW9uJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tTZXNzaW9uUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSB7XG4gICAgaWYgKCFzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKSB7XG4gICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrTG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgaWYgKGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSkge1xuICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG52YXIgbG9naW5Qcm9taXNlID0gbnVsbDtcbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbG9naW5Qcm9taXNlO1xufVxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTJTZXNzaW9uKHJlcy5jb2RlKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogXCJzeXN0ZW0tZXJyb3JcIiwgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfbG9naW4nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHR5cGU6IFwic3lzdGVtLWVycm9yXCIsIHJlczogcmVzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNldFNlc3Npb24oc2Vzc2lvbikge1xuICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZTtcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lLFxuICAgICAgICBkYXRhOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNvZGUyU2Vzc2lvbihjb2RlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgb2JqO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgPT09IFwiZnVuY3Rpb25cIikpIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEoY29kZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uY29kZU5hbWVdID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQuZm9ybWF0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nID8gY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIoKSA6IGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBjb25maWdfMS5kZWZhdWx0LmJlZm9yZVNlbmQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIsIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5yZXF1ZXN0KF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmopLCB7IHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnJlcG9ydCwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uc3VjY2VzcyhyZXMuZGF0YSwgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmdldEVycm9yTXNnKHJlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiBcImh0dHAtZXJyb3JcIiwgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXM6IHJlcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZGVsU2Vzc2lvbigpIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSAnJztcbiAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXG4gICAgfSk7XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IEluZmluaXR5O1xuICAgICAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1haW4ocmVsYXRlZFJlcXVlc3RPYmopIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgcmV0cnkgPSAhcmVsYXRlZFJlcXVlc3RPYmpcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFpbigpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KTsgfVxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0XzEuZGVmYXVsdChyZWxhdGVkUmVxdWVzdE9iaikudGhlbihyZWxhdGVkUmVxdWVzdE9iai5fcmVzb2x2ZSkuY2F0Y2gocmVsYXRlZFJlcXVlc3RPYmouX3JlamVjdCk7IH07XG4gICAgICAgIHJldHVybiBjaGVja0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA/IFByb21pc2UucmVzb2x2ZSgpIDogY2hlY2tTZXNzaW9uKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH0pO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBtYWluOiBtYWluLFxuICAgIHNldFNlc3Npb246IHNldFNlc3Npb24sXG4gICAgZGVsU2Vzc2lvbjogZGVsU2Vzc2lvblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVnpjMmx2YmsxaGJtRm5aWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzTmxjM05wYjI1TllXNWhaMlZ5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVc5RE8wRkJRM0JETEN0RFFVRjVRenRCUVVONlF5eDFSRUZCYVVRN1FVRkRha1FzYlVSQlFUWkRPMEZCUXpkRExESkRRVUZ4UXp0QlFVTnlReXd3UTBGQmIwTTdRVUZKY0VNc1NVRkJTU3h0UWtGQmJVSXNSMEZCVVN4SlFVRkpMRU5CUVVNN1FVRkZjRU1zVTBGQlV5eFpRVUZaTzBsQlEycENMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNSVUZCUlR0UlFVTjBRaXh0UWtGQmJVSXNSMEZCUnl4SlFVRkpMRTlCUVU4c1EwRkJUeXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFsQlEzQkVMRWxCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1dVRkRia01zUlVGQlJTeERRVUZETEZsQlFWa3NRMEZCUXp0blFrRkRXaXhQUVVGUE8yOUNRVVZJTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN1owSkJRM0pDTEVOQlFVTTdaMEpCUTBRc1NVRkJTU3hGUVVGS08yOUNRVVZKTEZWQlFWVXNSVUZCUlN4RFFVRkRPMjlDUVVOaUxFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPM2RDUVVOc1FpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMjlDUVVOeVFpeERRVUZETEVWQlFVVXNWVUZCUXl4SFFVRlJPM2RDUVVOU0xFOUJRVThzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMjlDUVVOMlFpeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRVQ3hEUVVGRE8yZENRVU5FTEZGQlFWRTdiMEpCUTBvc1NVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenR2UWtGRGFrTXNNRUpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEdsQ1FVRnBRaXhGUVVGRkxFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkRNMFFzUTBGQlF6dGhRVU5LTEVOQlFVTXNRMEZCUVR0UlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wdEJRMHc3U1VGRFJDeFBRVUZQTEcxQ1FVRnRRaXhEUVVGRE8wRkJReTlDTEVOQlFVTTdRVUZIUkN4VFFVRlRMSE5DUVVGelFqdEpRVU16UWl4SlFVRkpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eFBRVUZQTEVWQlFVVTdVVUZGYWtJc1QwRkJUeXhKUVVGSkxFTkJRVUU3UzBGRFpEdEpRVU5FTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hGUVVGRk8xRkJSWHBGTEZWQlFWVXNSVUZCUlN4RFFVRkRPMUZCUTJJc1QwRkJUeXhKUVVGSkxFTkJRVUU3UzBGRFpEdEpRVU5FTEU5QlFVOHNTMEZCU3l4RFFVRkJPMEZCUTJoQ0xFTkJRVU03UVVGRlJDeFRRVUZUTEZWQlFWVTdTVUZEWml4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGUExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZEY2tNc1NVRkJTU3h6UWtGQmMwSXNSVUZCUlN4RlFVRkZPMWxCUlRGQ0xHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFZEJRVWNzU1VGQlNTeERRVUZETzFsQlEyaERMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzJkQ1FVTnNRaXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzFsQlEzSkNMRU5CUVVNc1JVRkJSU3hWUVVGRExFZEJRVkU3WjBKQlExSXNUMEZCVHl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVFN1UwRkRURHRoUVVGTk8xbEJSVWdzVDBGQlR5eFBRVUZQTEVWQlFVVXNRMEZCUXp0VFFVTndRanRKUVVOTUxFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVZEVMRWxCUVVrc1dVRkJXU3hIUVVGUkxFbEJRVWtzUTBGQlF6dEJRVVUzUWl4VFFVRlRMRTlCUVU4N1NVRkRXaXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTzFGQlEyWXNXVUZCV1N4SFFVRkhMRWxCUVVrc1QwRkJUeXhEUVVGUExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdXVUZETjBNc1MwRkJTeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzJkQ1FVTlVMRmxCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU03WjBKQlEzQkNMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03V1VGRGNrSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVU1zUjBGQlJ6dG5Ra0ZEVkN4WlFVRlpMRWRCUVVjc1NVRkJTU3hEUVVGRE8yZENRVU53UWl4cFFrRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzJkQ1FVTm1MRTlCUVU4c1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzWkNMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMUFzUTBGQlF5eERRVUZETEVOQlFVRTdTMEZEVER0SlFVTkVMRTlCUVU4c1dVRkJXU3hEUVVGRE8wRkJRM2hDTEVOQlFVTTdRVUZGUkN4VFFVRlRMRXRCUVVzN1NVRkRWaXhQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZQTEZWQlFVTXNUMEZCVHl4RlFVRkZMRTFCUVUwN1VVRkRja01zU1VGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVU51UXl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRE8xbEJRMHdzVDBGQlR5eFpRVUZETEVkQlFVYzdaMEpCUTFBc1NVRkJTU3hIUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTzI5Q1FVTldMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPM2RDUVVONFFpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMjlDUVVOeVFpeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJReXhIUVVGSE8zZENRVU5VTEU5QlFVOHNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVU4yUWl4RFFVRkRMRU5CUVVNc1EwRkJRVHRwUWtGRFREdHhRa0ZCVFR0dlFrRkRTQ3hQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEVsQlFVa3NSVUZCUlN4alFVRmpMRVZCUVVVc1IwRkJSeXhMUVVGQkxFVkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVTTVRenRaUVVOTUxFTkJRVU03V1VGRFJDeFJRVUZSTzJkQ1FVTktMRWxCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1owSkJRMnBETERCQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM0JFTEVOQlFVTTdXVUZEUkN4SlFVRkpMRmxCUVVNc1IwRkJSenRuUWtGRFNpeFBRVUZQTEUxQlFVMHNRMEZCUXl4RlFVRkRMRWxCUVVrc1JVRkJSU3hqUVVGakxFVkJRVVVzUjBGQlJ5eExRVUZCTEVWQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXk5RExFTkJRVU03VTBGRFNpeERRVUZETEVOQlFVRTdTVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeFRRVUZUTEZWQlFWVXNRMEZCUXl4UFFVRmxPMGxCUXk5Q0xHZENRVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJRenRKUVVWNlFpeG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeEhRVUZITEVsQlFVa3NRMEZCUXp0SlFVVm9ReXhKUVVGSkxHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4blFrRkJaMElzUlVGQlJUdFJRVU55UkN4blFrRkJUU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU03VVVGRGRrVXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJRenRaUVVOV0xFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMR2RDUVVGblFqdFpRVU0xUWl4SlFVRkpMRVZCUVVVc1RVRkJUU3hEUVVGRExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRPMU5CUTNKRExFTkJRVU1zUTBGQlFUdExRVU5NTzBsQlEwUXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVOV0xFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRmRCUVhGQ08xRkJRMnBETEVsQlFVa3NSVUZCUlN4blFrRkJUU3hEUVVGRExFOUJRVTg3UzBGRGRrSXNRMEZCUXl4RFFVRkRPMEZCUTFBc1EwRkJRenRCUVVWRUxGTkJRV1VzV1VGQldTeERRVUZETEVsQlFWazdPenM3T3p0NVFrRkhhRU1zUTBGQlFTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUzBGQlN5eFZRVUZWTEVOQlFVRXNSVUZCTDBNc1kwRkJLME03YjBKQlEzaERMRmRCUVUwc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGQk96dHZRa0ZCTlVNc1NVRkJTU3hIUVVGSExGTkJRWEZETEVOQlFVTTdPenR2UWtGRk4wTXNTVUZCU1N4SFFVRkhMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNN096dHZRa0ZGTTBNc1NVRkJTU3huUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRVZCUVVVN2QwSkJReTlDTEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN2NVSkJRemxETzNsQ1FVRk5PM2RDUVVOSUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPM0ZDUVVOd1FqdHZRa0ZGUnl4SFFVRkhMRWRCUVVjN2QwSkJRMDRzUjBGQlJ5eEZRVUZGTEhkQ1FVRmpMRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJRenQzUWtGRGNFUXNTVUZCU1N4TlFVRkJPM2RDUVVOS0xFMUJRVTBzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFbEJRVWtzUzBGQlN6dDNRa0ZETlVNc1RVRkJUU3hGUVVGRkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGQkxFTkJRVU1zUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNN2NVSkJRM2hHTEVOQlFVRTdiMEpCUTBRc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNWVUZCVlN4TFFVRkxMRlZCUVZVc1JVRkJSVHQzUWtGRGVrTXNSMEZCUnl4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPM0ZDUVVOb1F6dHZRa0ZGUkN4WFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdORUpCUXk5Q0xFbEJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03TkVKQlEycERMRVZCUVVVc1EwRkJReXhQUVVGUExIVkNRVU5JTEVkQlFVY3NTMEZEVGl4UFFVRlBMRVZCUVZBc1ZVRkJVU3hIUVVGdFJEdHZRMEZEZGtRc1NVRkJTU3hIUVVGSExFTkJRVU1zVlVGQlZTeExRVUZMTEVkQlFVY3NSVUZCUlR0M1EwRkZlRUlzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFVkJRVVU3TkVOQlF6ZENMRWxCUVVrc1IwRkJSeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN05FTkJReTlDTERCQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkJPM2xEUVVOdVJUdDNRMEZGUkN4SlFVRkpMRU5CUVVNc1UwRkJRU3hEUVVGRE8zZERRVU5PTEVsQlFVazdORU5CUTBFc1EwRkJReXhIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPM2xEUVVOdVJEdDNRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHQ1UTBGRFdEdDNRMEZGUkN4SlFVRkpMRTlCUVU4c1EwRkJReXhMUVVGTExGRkJRVkVzUlVGQlJUczBRMEZEZGtJc1owSkJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RFFVRkRPelJEUVVWdVFpeG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeEhRVUZITEVsQlFVa3NRMEZCUXpzMFEwRkZhRU1zU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTEVWQlFVVTdaMFJCUTNKRUxHZENRVUZOTEVOQlFVTXNZVUZCWVN4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNRMEZCUXp0blJFRkRka1VzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXp0dlJFRkRWaXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4blFrRkJaMEk3YjBSQlF6VkNMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNN2FVUkJRM0pETEVOQlFVTXNRMEZCUVRzMlEwRkRURHMwUTBGRFJDeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMmRFUVVOV0xFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRmRCUVZjN1owUkJRM1pDTEVsQlFVa3NSVUZCUlN4blFrRkJUU3hEUVVGRExFOUJRVTg3TmtOQlEzWkNMRU5CUVVNc1EwRkJRenMwUTBGRFNDeFBRVUZQTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenQ1UTBGRGNrSTdOa05CUVUwN05FTkJRMGdzVDBGQlR5eE5RVUZOTEVOQlFVTXNjMEpCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0NVEwRkRhRVE3Y1VOQlEwbzdlVU5CUVUwN2QwTkJRMGdzVDBGQlR5eE5RVUZOTEVOQlFVTXNSVUZCUXl4SlFVRkpMRVZCUVVVc1dVRkJXU3hGUVVGRkxFZEJRVWNzUzBGQlFTeEZRVUZETEVOQlFVTXNRMEZCUXp0eFEwRkROVU03WjBOQlEwd3NRMEZCUXp0blEwRkRSQ3hSUVVGUk8yZERRVU5TTEVOQlFVTXNSVUZEUkN4SlFVRkpMRVZCUVVVc1ZVRkJReXhIUVVGSE8yOURRVU5PTEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1NVRkJTU3hGUVVGRkxHTkJRV01zUlVGQlJTeEhRVUZITEV0QlFVRXNSVUZCUXl4RFFVRkRMRU5CUVVNN1owTkJReTlETEVOQlFVTXNTVUZEU0N4RFFVRkJPM2RDUVVOT0xFTkJRVU1zUTBGQlF5eEZRVUZCT3pzN08wTkJRMHc3UVVGSFJDeFRRVUZUTEZWQlFWVTdTVUZEWml4blFrRkJUU3hEUVVGRExFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTVUZEY0VJc1JVRkJSU3hEUVVGRExHRkJRV0VzUTBGQlF6dFJRVU5pTEVkQlFVY3NSVUZCUlN4blFrRkJUU3hEUVVGRExGZEJRWEZDTzB0QlEzQkRMRU5CUVVNc1EwRkJRenRKUVVOSUxFbEJRVWtzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFGQlEzSkVMR2RDUVVGTkxFTkJRVU1zWVVGQllTeEhRVUZITEZGQlFWRXNRMEZCUXp0UlFVTm9ReXhGUVVGRkxFTkJRVU1zWVVGQllTeERRVUZETzFsQlEySXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENPMU5CUXk5Q0xFTkJRVU1zUTBGQlFUdExRVU5NTzBGQlEwd3NRMEZCUXp0QlFVVkVMRk5CUVZNc1NVRkJTU3hEUVVGRExHbENRVUZ6UkR0SlFVTm9SU3hQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZQTEZWQlFVTXNUMEZCVHl4RlFVRkZMRTFCUVUwN1VVRkRja01zU1VGQlNTeExRVUZMTEVkQlFVY3NRMEZCUXl4cFFrRkJhVUk3V1VGRk1VSXNRMEZCUXl4RFFVRkRMR05CUVUwc1QwRkJRU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZzUXl4RFFVRnJRenRaUVVVeFF5eERRVUZETEVOQlFVTXNZMEZCVFN4UFFVRkJMR2xDUVVGUExFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEdsQ1FVRnBRaXhEUVVGRExFOUJRVThzUTBGQlF5eEZRVUUxUml4RFFVRTBSaXhEUVVGRE8xRkJRM3BITEU5QlFVOHNWVUZCVlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRM0pDTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRVHRSUVVONFJTeERRVUZETEVWQlFVVXNWVUZCUXl4RlFVRm5RanRuUWtGQlppeExRVUZMTEZkQlFVRXNSVUZCUlN4UFFVRlBMR0ZCUVVFN1dVRkRaaXh6UWtGQldTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFsQlF6VkRMRTlCUVU4c1RVRkJUU3hEUVVGRExFVkJRVU1zUzBGQlN5eFBRVUZCTEVWQlFVVXNUMEZCVHl4VFFVRkJMRVZCUVVNc1EwRkJReXhEUVVGRE8xRkJRM0JETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVOS0xFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZEY2tJc1EwRkJReXhGUVVGRkxGVkJRVU1zUlVGQlowSTdaMEpCUVdZc1MwRkJTeXhYUVVGQkxFVkJRVVVzVDBGQlR5eGhRVUZCTzFsQlEyWXNjMEpCUVZrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVNMVF5eFBRVUZQTEUxQlFVMHNRMEZCUXl4RlFVRkRMRXRCUVVzc1QwRkJRU3hGUVVGRkxFOUJRVThzVTBGQlFTeEZRVUZETEVOQlFVTXNRMEZCUXp0UlFVTndReXhEUVVGRExFTkJRVU1zUTBGQlFUdEpRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NTVUZCU1N4TlFVRkJPMGxCUTBvc1ZVRkJWU3haUVVGQk8wbEJRMVlzVlVGQlZTeFpRVUZCTzBOQlEySXNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCemRHRjBkWE1nWm5KdmJTQW5MaTR2YzNSdmNtVXZjM1JoZEhWekoxeHVhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdaWEp5YjNKSVlXNWtiR1Z5SUdaeWIyMGdKeTR2WlhKeWIzSklZVzVrYkdWeUoxeHVhVzF3YjNKMElHUjFjbUYwYVc5dVVtVndiM0owWlhJZ1puSnZiU0FuTGk5a2RYSmhkR2x2YmxKbGNHOXlkR1Z5SjF4dWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHZjbVZ4ZFdWemRFaGhibVJzWlhJblhHNXBiWEJ2Y25RZ2JHOWhaR2x1WnlCbWNtOXRJQ2N1TGk5MWRHbHNMMnh2WVdScGJtY25YRzVwYlhCdmNuUWdjbVZ4ZFdWemRDQm1jbTl0SUNjdUxpOWhjR2t2Y21WeGRXVnpkQ2RjYm1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVMQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaUI5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lqdGNibHh1THlvZzU1U2Y1Wkc5NVpHbzVweWY1WWFGNVkrcTVZR2E1TGlBNXF5aDU1cUVZMmhsWTJ0VFpYTnphVzl1SUNvdlhHNXNaWFFnWTJobFkydFRaWE56YVc5dVVISnZiV2x6WlRvZ1lXNTVJRDBnYm5Wc2JEdGNibHh1Wm5WdVkzUnBiMjRnWTJobFkydFRaWE56YVc5dUtDa2dlMXh1SUNBZ0lHbG1JQ2doWTJobFkydFRaWE56YVc5dVVISnZiV2x6WlNrZ2UxeHVJQ0FnSUNBZ0lDQmphR1ZqYTFObGMzTnBiMjVRY205dGFYTmxJRDBnYm1WM0lGQnliMjFwYzJVOGRtOXBaRDRvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIZDRMbU5vWldOclUyVnpjMmx2YmloN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3lncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzU1bTc1YjJWNW9DQjVweUo1cFdJNzd5TTVMaVU1WnlvNXB5czU1U2Y1Wkc5NVpHbzVweWY1WWFGNXBlZzZhRzc1WWFONXFPQTZhcU01THFHWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1ZV2xzS0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbm1idmx2WlhtZ0lIb3Y0Zm1uSjljYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHVnNVMlZ6YzJsdmJpZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5TWIyZHBiaWdwTG5Sb1pXNG9LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3dnS0hKbGN6b2dZVzU1S1QwK2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZiWEJzWlhSbEtDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JsYm1RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1eVpYQnZjblFvSjNkNFgyTm9aV05yVTJWemMybHZiaWNzSUhOMFlYSjBMQ0JsYm1RcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgwcFhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJqYUdWamExTmxjM05wYjI1UWNtOXRhWE5sTzF4dWZWeHVYRzR2S2lEbGlLVG1scTF6WlhOemFXOXU1cGl2NVpDbTVMaTY1Nm02NW9pVzViZXk2TCtINXB5ZklDb3ZYRzVtZFc1amRHbHZiaUJwYzFObGMzTnBiMjVGZUhCcGNtVlBja1Z0Y0hSNUtDa2dlMXh1SUNBZ0lHbG1JQ2doYzNSaGRIVnpMbk5sYzNOcGIyNHBJSHRjYmlBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNTd5VDVhMlk1TGl0NXJLaDVweUpjMlZ6YzJsdmJseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVnh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbElDWW1JRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwSUQ0Z2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVXBJSHRjYmlBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNXB5SjZLNis1NzJ1NXB5czVaeXdjMlZ6YzJsdmJ1ZThrK1d0bU9hWHR1bVh0Tys4ak9TNGxPZThrK1d0bU9hWHR1bVh0T1czc3VXSXNGeHVJQ0FnSUNBZ0lDQmtaV3hUWlhOemFXOXVLQ2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwY25WbFhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlZ4dWZWeHVYRzVtZFc1amRHbHZiaUJqYUdWamEweHZaMmx1S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlR4MmIybGtQaWdvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwYzFObGMzTnBiMjVGZUhCcGNtVlBja1Z0Y0hSNUtDa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2F5b2VhY2llZVp1K21aaHVhQWdlKzhqT1M0amVtY2dPaW1nZVdHaldOb1pXTnJVMlZ6YzJsdmJseHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dVptbG5MbVJ2VG05MFEyaGxZMnRUWlhOemFXOXVJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrYjB4dloybHVLQ2t1ZEdobGJpZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzSUNoeVpYTTZJR0Z1ZVNrOVBudGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0hKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzU3eVQ1YTJZNUxpdDVweUpjMlZ6YzJsdmJ1UzRsT2FjcXVpL2grYWNuMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwcFhHNTlYRzVjYmk4cUlPZVp1K21aaHVhMWdlZW9pK2VhaEhCeWIyMXBjMlVnS2k5Y2JteGxkQ0JzYjJkcGJsQnliMjFwYzJVNklHRnVlU0E5SUc1MWJHdzdYRzVjYm1aMWJtTjBhVzl1SUdSdlRHOW5hVzRvS1NCN1hHNGdJQ0FnYVdZZ0tDRnNiMmRwYmxCeWIyMXBjMlVwSUh0Y2JpQWdJQ0FnSUNBZ2JHOW5hVzVRY205dGFYTmxJRDBnYm1WM0lGQnliMjFwYzJVOGRtOXBaRDRvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkc5bmFXNG9LUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc2IyZHBibEJ5YjIxcGMyVWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1M1allYUmphQ2dvY21WektTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkc5bmFXNVFjbTl0YVhObElEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc2IyRmthVzVuTG1ocFpHVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHeHZaMmx1VUhKdmJXbHpaVHRjYm4xY2JseHVablZ1WTNScGIyNGdiRzluYVc0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObFBIWnZhV1ErS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MzUmhjblFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNiaUFnSUNBZ0lDQWdkM2d1Ykc5bmFXNG9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3loeVpYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVnpMbU52WkdVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5a1pUSlRaWE56YVc5dUtISmxjeTVqYjJSbEtTNTBhR1Z1S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcExtTmhkR05vS0NoeVpYTXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSHQwZVhCbE9pQmNJbk41YzNSbGJTMWxjbkp2Y2x3aUxDQnlaWE45S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0d4bGRHVW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdaVzVrSUQwZ2JtVjNJRVJoZEdVb0tTNW5aWFJVYVcxbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXlaWEJ2Y25Rb0ozZDRYMnh2WjJsdUp5d2djM1JoY25Rc0lHVnVaQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1ptRnBiQ2h5WlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0h0MGVYQmxPaUJjSW5ONWMzUmxiUzFsY25KdmNsd2lMQ0J5WlhOOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCelpYUlRaWE56YVc5dUtITmxjM05wYjI0NklITjBjbWx1WnlrZ2UxeHVJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVJRDBnYzJWemMybHZianRjYmlBZ0lDQXZMeURtamFMbG01N21uYVhubW9SelpYTnphVzl1Nzd5TTVMaU42WnlBNkthQjVZYU5ZMmhsWTJ0VFpYTnphVzl1WEc0Z0lDQWdZMjl1Wm1sbkxtUnZUbTkwUTJobFkydFRaWE56YVc5dUlEMGdkSEoxWlR0Y2JpQWdJQ0F2THlEbHBvTG1ucHptbklub3JyN252YTdtbkt6bG5MQnpaWE56YVc5dTZMK0g1cHlmNXBlMjZaZTBYRzRnSUNBZ2FXWWdLR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpTQW1KaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTa2dlMXh1SUNBZ0lDQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BJQ3NnWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WVWFXMWxPMXh1SUNBZ0lDQWdJQ0IzZUM1elpYUlRkRzl5WVdkbEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUd0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaE9pQlRkSEpwYm1jb2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVXBYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmVnh1SUNBZ0lIZDRMbk5sZEZOMGIzSmhaMlVvZTF4dUlDQWdJQ0FnSUNCclpYazZJR052Ym1acFp5NXpaWE56YVc5dVRtRnRaU0JoY3lCemRISnBibWNzWEc0Z0lDQWdJQ0FnSUdSaGRHRTZJSE4wWVhSMWN5NXpaWE56YVc5dVhHNGdJQ0FnZlNrN1hHNTlYRzVjYm1GemVXNWpJR1oxYm1OMGFXOXVJR052WkdVeVUyVnpjMmx2YmloamIyUmxPaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnNaWFFnWkdGMFlUb2dZVzU1TzF4dUlDQWdJQzh2SUdOdlpHVlViMU5sYzNOcGIyNHVaR0YwWWVhVXIrYU1nZVdIdmVhVnNGeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVaR0YwWVNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHUmhkR0VnUFNCaGQyRnBkQ0JqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1a1lYUmhLR052WkdVcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdSaGRHRWdQU0JqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1a1lYUmhJSHg4SUh0OU8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVZMjlrWlU1aGJXVXBJSHRjYmlBZ0lDQWdJQ0FnWkdGMFlWdGpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVqYjJSbFRtRnRaVjBnUFNCamIyUmxPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHUmhkR0V1WTI5a1pTQTlJR052WkdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYkdWMElHOWlhaUE5SUh0Y2JpQWdJQ0FnSUNBZ2RYSnNPaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNW1iM0p0WVhRb1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVkWEpzS1N4Y2JpQWdJQ0FnSUNBZ1pHRjBZU3hjYmlBZ0lDQWdJQ0FnYldWMGFHOWtPaUJqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1dFpYUm9iMlFnZkh3Z0owZEZWQ2NzWEc0Z0lDQWdJQ0FnSUdobFlXUmxjam9nZEhsd1pXOW1JR052Ym1acFp5NXpaWFJJWldGa1pYSWdQVDA5SUNkbWRXNWpkR2x2YmljZ1B5QmpiMjVtYVdjdWMyVjBTR1ZoWkdWeUtDazZJR052Ym1acFp5NXpaWFJJWldGa1pYSXNYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1KbFptOXlaVk5sYm1RZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW9nUFNCamIyNW1hV2N1WW1WbWIzSmxVMlZ1WkNodlltb3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUd4bGRDQnpkR0Z5ZENBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0IzZUM1eVpYRjFaWE4wS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzR1TG05aWFpeGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjeTV6ZEdGMGRYTkRiMlJsSUQwOVBTQXlNREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNklDWDVwZTI1TGlLNW9xbFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNXlaWEJ2Y25RcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JsYm1RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSXVjbVZ3YjNKMEtHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbkpsY0c5eWRDd2djM1JoY25Rc0lHVnVaQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQnpPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjeUE5SUdOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxuTjFZMk5sYzNNb2NtVnpMbVJoZEdFc0lISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2N5QTlQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVJRDBnY3p0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPYU5vdVdibnVhZHBlZWFoSE5sYzNOcGIyN3Z2SXprdUkzcG5JRG9wb0hsaG8xamFHVmphMU5sYzNOcGIyNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibVpwWnk1a2IwNXZkRU5vWldOclUyVnpjMmx2YmlBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHptbklub3JyN252YTdtbkt6bG5MQnpaWE56YVc5dTZMK0g1cHlmNXBlMjZaZTBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WVWFXMWxJQ1ltSUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFMyVjVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1NBcklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlUb2dVM1J5YVc1bktITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCclpYazZJR052Ym1acFp5NXpaWE56YVc5dVRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb1pYSnliM0pJWVc1a2JHVnlMbWRsZEVWeWNtOXlUWE5uS0hKbGN5a3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN2RIbHdaVG9nWENKb2RIUndMV1Z5Y205eVhDSXNJSEpsYzMwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjIxd2JHVjBaU2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQm1ZV2xzT2lBb2NtVnpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2g3ZEhsd1pUb2dYQ0p6ZVhOMFpXMHRaWEp5YjNKY0lpd2djbVZ6ZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlNsY2JuMWNibHh1THlvZzVyaUY1Nm02YzJWemMybHZiaUFxTDF4dVpuVnVZM1JwYjI0Z1pHVnNVMlZ6YzJsdmJpZ3BJSHRjYmlBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmlBOUlDY25PMXh1SUNBZ0lIZDRMbkpsYlc5MlpWTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlNCaGN5QnpkSEpwYm1kY2JpQWdJQ0I5S1R0Y2JpQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsSUNZbUlHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxJRDBnU1c1bWFXNXBkSGs3WEc0Z0lDQWdJQ0FnSUhkNExuSmxiVzkyWlZOMGIzSmhaMlVvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdiV0ZwYmloeVpXeGhkR1ZrVW1WeGRXVnpkRTlpYWo4NklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0cElIdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVOGRtOXBaRDRvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnNaWFFnY21WMGNua2dQU0FoY21Wc1lYUmxaRkpsY1hWbGMzUlBZbXBjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PYXlvZWFjaWVXRnMraUJsT2VhaE9pdnQrYXhndSs4ak9tSGplaXZsZVdOcytpd2crZVVxT2lIcXVpNnExeHVJQ0FnSUNBZ0lDQWdJQ0FnUHlBb0tTQTlQaUJ0WVdsdUtDa3VkR2hsYmloeVpYTnZiSFpsS1M1allYUmphQ2h5WldwbFkzUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RGxwb0xtbnB6bW5JbmxoYlBvZ1pUbm1vVG9yN2Ztc1lMdnZJenBoNDNvcjVYbGpiUG9zSVBubEtqbWlZRGxoYlBvZ1pUbm1vVG9yN2Ztc1lKY2JpQWdJQ0FnSUNBZ0lDQWdJRG9nS0NrZ1BUNGdjbVZ4ZFdWemRDaHlaV3hoZEdWa1VtVnhkV1Z6ZEU5aWFpa3VkR2hsYmloeVpXeGhkR1ZrVW1WeGRXVnpkRTlpYWk1ZmNtVnpiMngyWlNrdVkyRjBZMmdvY21Wc1lYUmxaRkpsY1hWbGMzUlBZbW91WDNKbGFtVmpkQ2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJqYUdWamEweHZaMmx1S0NrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWTI5dVptbG5MbVJ2VG05MFEyaGxZMnRUWlhOemFXOXVJRDhnVUhKdmJXbHpaUzV5WlhOdmJIWmxLQ2tnT2lCamFHVmphMU5sYzNOcGIyNG9LVnh1SUNBZ0lDQWdJQ0I5TENBb2UzUnBkR3hsTENCamIyNTBaVzUwZlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pYSnliM0pJWVc1a2JHVnlMbVJ2UlhKeWIzSW9kR2wwYkdVc0lHTnZiblJsYm5Rc0lISmxkSEo1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2UzUnBkR3hsTENCamIyNTBaVzUwZlNrN1hHNGdJQ0FnSUNBZ0lIMHBMblJvWlc0b0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdmU3dnS0h0MGFYUnNaU3dnWTI5dWRHVnVkSDBwUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxtUnZSWEp5YjNJb2RHbDBiR1VzSUdOdmJuUmxiblFzSUhKbGRISjVLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvZTNScGRHeGxMQ0JqYjI1MFpXNTBmU2s3WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlNsY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdlMXh1SUNBZ0lHMWhhVzRzWEc0Z0lDQWdjMlYwVTJWemMybHZiaXhjYmlBZ0lDQmtaV3hUWlhOemFXOXVYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBkZWZhdWx0Q29uZmlnID0ge1xuICAgIHNlc3Npb25OYW1lOiBcInNlc3Npb25cIixcbiAgICBsb2dpblRyaWdnZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgY29kZVRvU2Vzc2lvbjoge1xuICAgICAgICB1cmw6IFwiXCIsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHsgfVxuICAgIH0sXG4gICAgc3VjY2Vzc1RyaWdnZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBzZXRIZWFkZXI6IHt9LFxuICAgIHVybFBlcmZpeDogXCJcIixcbiAgICBkb05vdENoZWNrU2Vzc2lvbjogZmFsc2UsXG4gICAgZXJyb3JUaXRsZTogXCLmk43kvZzlpLHotKVcIixcbiAgICBlcnJvckNvbnRlbnQ6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIGVycm9yUmV0cnlCdG46IGZhbHNlLFxuICAgIHJlTG9naW5MaW1pdDogMyxcbiAgICBlcnJvckNhbGxiYWNrOiBudWxsLFxuICAgIHJlcG9ydENHSTogZmFsc2UsXG4gICAgbW9ja0pzb246IGZhbHNlLFxuICAgIGdsb2JhbERhdGE6IGZhbHNlLFxuICAgIHNlc3Npb25FeHBpcmVLZXk6IFwic2Vzc2lvbkV4cGlyZUtleVwiLFxuICAgIGVycm9ySGFuZGxlcjogbnVsbCxcbiAgICBiZWZvcmVTZW5kOiBudWxsXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdENvbmZpZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwyTnZibVpwWnk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVVZCTEVsQlFVMHNZVUZCWVN4SFFVRm5RanRKUVVNdlFpeFhRVUZYTEVWQlFVVXNVMEZCVXp0SlFVTjBRaXhaUVVGWk8xRkJRMUlzVDBGQlR5eExRVUZMTEVOQlFVRTdTVUZEYUVJc1EwRkJRenRKUVVORUxHRkJRV0VzUlVGQlJUdFJRVU5ZTEVkQlFVY3NSVUZCUlN4RlFVRkZPMUZCUTFBc1QwRkJUeXhGUVVGRkxHTkJRVTBzUTBGQlF6dExRVU51UWp0SlFVTkVMR05CUVdNN1VVRkRWaXhQUVVGUExFbEJRVWtzUTBGQlFUdEpRVU5tTEVOQlFVTTdTVUZEUkN4VFFVRlRMRVZCUVVVc1JVRkJSVHRKUVVOaUxGTkJRVk1zUlVGQlJTeEZRVUZGTzBsQlEySXNhVUpCUVdsQ0xFVkJRVVVzUzBGQlN6dEpRVU40UWl4VlFVRlZMRVZCUVVVc1RVRkJUVHRKUVVOc1FpeFpRVUZaTEVWQlFWb3NWVUZCWVN4SFFVRlJPMUZCUTJwQ0xFOUJRVThzUjBGQlJ5eERRVUZCTzBsQlEyUXNRMEZCUXp0SlFVTkVMR0ZCUVdFc1JVRkJSU3hMUVVGTE8wbEJRM0JDTEZsQlFWa3NSVUZCUlN4RFFVRkRPMGxCUTJZc1lVRkJZU3hGUVVGRkxFbEJRVWs3U1VGRGJrSXNVMEZCVXl4RlFVRkZMRXRCUVVzN1NVRkRhRUlzVVVGQlVTeEZRVUZGTEV0QlFVczdTVUZEWml4VlFVRlZMRVZCUVVVc1MwRkJTenRKUVVWcVFpeG5Ra0ZCWjBJc1JVRkJSU3hyUWtGQmEwSTdTVUZGY0VNc1dVRkJXU3hGUVVGRkxFbEJRVWs3U1VGRmJFSXNWVUZCVlN4RlFVRkZMRWxCUVVrN1EwRkRia0lzUTBGQlF6dEJRVVZHTEd0Q1FVRmxMR0ZCUVdFc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUVsSmJtbDBUM0IwYVc5dUlIMGdabkp2YlNBbkxpNHZhVzUwWlhKbVlXTmxKMXh1WEc1amIyNXpkQ0JrWldaaGRXeDBRMjl1Wm1sbk9pQkpTVzVwZEU5d2RHbHZiaUE5SUh0Y2JpQWdJQ0J6WlhOemFXOXVUbUZ0WlRvZ1hDSnpaWE56YVc5dVhDSXNYRzRnSUNBZ2JHOW5hVzVVY21sbloyVnlLQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVmNiaUFnSUNCOUxGeHVJQ0FnSUdOdlpHVlViMU5sYzNOcGIyNDZJSHRjYmlBZ0lDQWdJQ0FnZFhKc09pQmNJbHdpTEZ4dUlDQWdJQ0FnSUNCemRXTmpaWE56T2lBb0tUMCtJSHQ5WEc0Z0lDQWdmU3hjYmlBZ0lDQnpkV05qWlhOelZISnBaMmRsY2lncElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1ZjYmlBZ0lDQjlMRnh1SUNBZ0lITmxkRWhsWVdSbGNqb2dlMzBzWEc0Z0lDQWdkWEpzVUdWeVptbDRPaUJjSWx3aUxGeHVJQ0FnSUdSdlRtOTBRMmhsWTJ0VFpYTnphVzl1T2lCbVlXeHpaU3hjYmlBZ0lDQmxjbkp2Y2xScGRHeGxPaUJjSXVhVGplUzluT1drc2VpMHBWd2lMRnh1SUNBZ0lHVnljbTl5UTI5dWRHVnVkQ2h5WlhNNklHRnVlU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WelhHNGdJQ0FnZlN4Y2JpQWdJQ0JsY25KdmNsSmxkSEo1UW5SdU9pQm1ZV3h6WlN4Y2JpQWdJQ0J5WlV4dloybHVUR2x0YVhRNklETXNYRzRnSUNBZ1pYSnliM0pEWVd4c1ltRmphem9nYm5Wc2JDeGNiaUFnSUNCeVpYQnZjblJEUjBrNklHWmhiSE5sTEZ4dUlDQWdJRzF2WTJ0S2MyOXVPaUJtWVd4elpTeGNiaUFnSUNCbmJHOWlZV3hFWVhSaE9pQm1ZV3h6WlN4Y2JpQWdJQ0F2THlCelpYTnphVzl1NVp5bzVweXM1Wnl3NTd5VDVhMlk1NXFFYTJWNVhHNGdJQ0FnYzJWemMybHZia1Y0Y0dseVpVdGxlVG9nWENKelpYTnphVzl1Ulhod2FYSmxTMlY1WENJc1hHNGdJQ0FnTHk4ZzZJZXE1YTZhNUxtSjZaU1o2Syt2NWFTRTU1Q0c1WWU5NXBXd1hHNGdJQ0FnWlhKeWIzSklZVzVrYkdWeU9pQnVkV3hzTEZ4dUlDQWdJQzh2SU9pdnQrYXhndVdQa2VtQWdlV0pqZSs4ak9hUGtPUyttMmh2YjJ2bnU1bmx2SURsajVIb2dJWG9oNnJscnBya3VZbmt2NjdtbExubGo1SHBnSUhsaG9YbHJybGNiaUFnSUNCaVpXWnZjbVZUWlc1a09pQnVkV3hzWEc1OU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmtaV1poZFd4MFEyOXVabWxuTzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXNzaW9uOiAnJyxcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMzUmhkSFZ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwzTjBZWFIxY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTEd0Q1FVRmxPMGxCUTFnc1QwRkJUeXhGUVVGRkxFVkJRVms3U1VGRmNrSXNZVUZCWVN4RlFVRkZMRkZCUVd0Q08wTkJRemRDTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVnpjMmx2YmpvZ0p5Y2dZWE1nYzNSeWFXNW5MRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN292NGZtbkovbm1vVG1sN2JwbDdUbmdybGNiaUFnSUNCelpYTnphVzl1Ulhod2FYSmxPaUJKYm1acGJtbDBlU0JoY3lCdWRXMWlaWEpjYm4wZ1lYTWdZVzU1WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBMSU5FRkVFRCA9IC9cXHUwMDBBL2c7XG52YXIgQ0FSUklBR0VSRVRVUk4gPSAvXFx1MDAwRC9nO1xudmFyIExJTkVfU0VQQVJBVE9SID0gL1xcdTIwMjgvZztcbnZhciBQQVJBR1JBUEhfU0VQQVJBVE9SID0gL1xcdTIwMjkvZztcbmZ1bmN0aW9uIHJlcGxhY2UocmVzKSB7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoTElORUZFRUQsIFwiXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKENBUlJJQUdFUkVUVVJOLCBcIlwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZShMSU5FX1NFUEFSQVRPUiwgXCJcIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoUEFSQUdSQVBIX1NFUEFSQVRPUiwgXCJcIik7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHJlcGxhY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhbk52YmxOMWNHVnljMlYwTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1YwYVd3dmFuTnZibE4xY0dWeWMyVjBMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlYwRXNTVUZCVFN4UlFVRlJMRWRCUVVjc1UwRkJVeXhEUVVGRE8wRkJRek5DTEVsQlFVMHNZMEZCWXl4SFFVRkhMRk5CUVZNc1EwRkJRenRCUVVOcVF5eEpRVUZOTEdOQlFXTXNSMEZCUnl4VFFVRlRMRU5CUVVNN1FVRkRha01zU1VGQlRTeHRRa0ZCYlVJc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGRmRFTXNVMEZCZDBJc1QwRkJUeXhEUVVGRExFZEJRVmM3U1VGRGVrTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zVVVGQlVTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUTJoRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMR05CUVdNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVU4wUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eGpRVUZqTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRkRU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc2JVSkJRVzFDTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRNME1zVDBGQlR5eEhRVUZITEVOQlFVRTdRVUZEV2l4RFFVRkRPMEZCVGtRc01FSkJUVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpQWdWU3N5TURJNElHRnVaQ0JWS3pJd01qa2dZWEpsSUdGc2JHOTNaV1FnYVc1emFXUmxJSE4wY21sdVozTWdhVzRnU2xOUFRpQW9ZWE1nWVd4c0lHeHBkR1Z5WVd4Y2JpQWdJQ0JWYm1samIyUmxJR05vWVhKaFkzUmxjbk1wSUdKMWRDQktZWFpoVTJOeWFYQjBJR1JsWm1sdVpYTWdkR2hsYlNCaGN5QnVaWGRzYVc1bFhHNGdJQ0FnYzJWd1pYSmhkRzl5Y3k0Z1FtVmpZWFZ6WlNCdWJ5QnNhWFJsY21Gc0lHNWxkMnhwYm1WeklHRnlaU0JoYkd4dmQyVmtJR2x1SUdFZ2MzUnlhVzVuTENCMGFHbHpYRzRnSUNBZ1kyRjFjMlZ6SUdFZ1VHRnljMlZGY25KdmNpQnBiaUIwYUdVZ1luSnZkM05sY2k0Z1YyVWdkMjl5YXlCaGNtOTFibVFnZEdocGN5QnBjM04xWlNCaWVWeHVJQ0FnSUhKbGNHeGhZMmx1WnlCMGFHVnRJSGRwZEdnZ2RHaGxJR1Z6WTJGd1pXUWdkbVZ5YzJsdmJpNGdWR2hwY3lCemFHOTFiR1FnWW1VZ2MyRm1aU0JpWldOaGRYTmxYRzRnSUNBZ1lXTmpiM0prYVc1bklIUnZJSFJvWlNCS1UwOU9JSE53WldNc0lIUm9aWE5sSUdOb1lYSmhZM1JsY25NZ1lYSmxJQ3B2Ym14NUtpQjJZV3hwWkNCcGJuTnBaR1ZjYmlBZ0lDQmhJSE4wY21sdVp5QmhibVFnYzJodmRXeGtJSFJvWlhKbFptOXlaU0J1YjNRZ1ltVWdjSEpsYzJWdWRDQmhibmtnYjNSb1pYSWdjR3hoWTJWekxseHVYRzRnSUNBZ2JXOXlaU0JwYm1admNtMWhkR2x2YmpvZ2FIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwzUmpNemt2Y0hKdmNHOXpZV3d0YW5OdmJpMXpkWEJsY25ObGRGeHVLaTljYmx4dVkyOXVjM1FnVEVsT1JVWkZSVVFnUFNBdlhGeDFNREF3UVM5bk8xeHVZMjl1YzNRZ1EwRlNVa2xCUjBWU1JWUlZVazRnUFNBdlhGeDFNREF3UkM5bk8xeHVZMjl1YzNRZ1RFbE9SVjlUUlZCQlVrRlVUMUlnUFNBdlhGeDFNakF5T0M5bk8xeHVZMjl1YzNRZ1VFRlNRVWRTUVZCSVgxTkZVRUZTUVZSUFVpQTlJQzljWEhVeU1ESTVMMmM3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdaMWJtTjBhVzl1SUhKbGNHeGhZMlVvY21Wek9pQnpkSEpwYm1jcElIdGNiaUFnY21WeklEMGdjbVZ6TG5KbGNHeGhZMlVvVEVsT1JVWkZSVVFzSUZ3aVhDSXBPMXh1SUNCeVpYTWdQU0J5WlhNdWNtVndiR0ZqWlNoRFFWSlNTVUZIUlZKRlZGVlNUaXdnWENKY0lpazdYRzRnSUhKbGN5QTlJSEpsY3k1eVpYQnNZV05sS0V4SlRrVmZVMFZRUVZKQlZFOVNMQ0JjSWx3aUtUdGNiaUFnY21WeklEMGdjbVZ6TG5KbGNHeGhZMlVvVUVGU1FVZFNRVkJJWDFORlVFRlNRVlJQVWl3Z1hDSmNJaWs3WEc0Z0lISmxkSFZ5YmlCeVpYTmNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHNob3codHh0KSB7XG4gICAgd3guc2hvd1RvYXN0KHtcbiAgICAgICAgdGl0bGU6IHR5cGVvZiB0eHQgPT09ICdib29sZWFuJyA/ICfliqDovb3kuK0nIDogdHh0LFxuICAgICAgICBpY29uOiAnbG9hZGluZycsXG4gICAgICAgIG1hc2s6IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiA2MDAwMFxuICAgIH0pO1xufVxuZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB3eC5oaWRlVG9hc3Qoe30pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNob3c6IHNob3csXG4gICAgaGlkZTogaGlkZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOWhaR2x1Wnk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc0wyeHZZV1JwYm1jdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4VFFVRlRMRWxCUVVrc1EwRkJReXhIUVVGeFFqdEpRVU12UWl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJRMVFzUzBGQlN5eEZRVUZGTEU5QlFVOHNSMEZCUnl4TFFVRkxMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhPMUZCUXpkRExFbEJRVWtzUlVGQlJTeFRRVUZUTzFGQlEyWXNTVUZCU1N4RlFVRkZMRWxCUVVrN1VVRkRWaXhSUVVGUkxFVkJRVVVzUzBGQlN6dExRVU5zUWl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eEpRVUZKTzBsQlExUXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU55UWl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEpRVUZKTEUxQlFVRTdTVUZEU2l4SlFVRkpMRTFCUVVFN1EwRkRVQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMmh2ZHloMGVIUTZJR0p2YjJ4bFlXNGdmQ0J6ZEhKcGJtY3BJSHRjYmlBZ0lDQjNlQzV6YUc5M1ZHOWhjM1FvZTF4dUlDQWdJQ0FnSUNCMGFYUnNaVG9nZEhsd1pXOW1JSFI0ZENBOVBUMGdKMkp2YjJ4bFlXNG5JRDhnSitXS29PaTl2ZVM0clNjZ09pQjBlSFFzWEc0Z0lDQWdJQ0FnSUdsamIyNDZJQ2RzYjJGa2FXNW5KeXhjYmlBZ0lDQWdJQ0FnYldGemF6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI0NklEWXdNREF3WEc0Z0lDQWdmU2xjYm4xY2JseHVablZ1WTNScGIyNGdhR2xrWlNncElIdGNiaUFnSUNCM2VDNW9hV1JsVkc5aGMzUW9lMzBwTzF4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyaHZkeXhjYmlBZ0lDQm9hV1JsWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gc2V0UGFyYW1zKHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICB2YXIgcXVlcnlTdHJpbmdJbmRleCA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgICB2YXIga3ZwID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICB2YXIgb2xkUXVlcnlTdHJpbmdfMSA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgb2xkUXVlcnlTdHJpbmdfMS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICB2YXIga3YgPSBvbGRRdWVyeVN0cmluZ18xW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGt2cCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBrdnApLCBwYXJhbXMpO1xuICAgIHZhciBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgKyBcIj1cIiArIGVuY29kZVVSSShrdnBba2V5XSk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsICsgXCI/XCIgKyBxdWVyeVN0cmluZztcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2V0UGFyYW1zOiBzZXRQYXJhbXNcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEpzTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1YwYVd3dmRYSnNMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN1FVRkJRU3hUUVVGVExGTkJRVk1zUTBGQlF5eEhRVUZuUWl4RlFVRkZMRTFCUVdNN1NVRkJhRU1zYjBKQlFVRXNSVUZCUVN4UlFVRm5RanRKUVVNdlFpeEpRVUZOTEdkQ1FVRm5RaXhIUVVGWExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRiRVFzU1VGQlNTeEhRVUZITEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFbEJRVWtzWjBKQlFXZENMRWxCUVVrc1EwRkJReXhGUVVGRk8xRkJRM1pDTEVsQlFVMHNaMEpCUVdNc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVWdVJTeG5Ra0ZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlEzaENMRWxCUVUwc1JVRkJSU3hIUVVGaExHZENRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyeEVMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRUanRKUVVWRUxFZEJRVWNzZVVKQlFVOHNSMEZCUnl4SFFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJSVEZDTEVsQlFVMHNWMEZCVnl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzFOQlF5OUNMRWRCUVVjc1EwRkJReXhWUVVGQkxFZEJRVWM3VVVGRFNpeFBRVUZWTEVkQlFVY3NVMEZCU1N4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZITEVOQlFVTTdTVUZETTBNc1EwRkJReXhEUVVGRE8xTkJRMFFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUldZc1NVRkJTU3huUWtGQlowSXNTVUZCU1N4RFFVRkRMRVZCUVVVN1VVRkRka0lzVDBGQlR5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3huUWtGQlowSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGREwwUTdVMEZCVFR0UlFVTklMRTlCUVU4c1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTTdTMEZEYkVNN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4VFFVRlRMRmRCUVVFN1EwRkRXaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMlYwVUdGeVlXMXpLSFZ5YkRvZ2MzUnlhVzVuSUQwZ1hDSmNJaXdnY0dGeVlXMXpPaUJ2WW1wbFkzUXBJSHRjYmlBZ0lDQmpiMjV6ZENCeGRXVnllVk4wY21sdVowbHVaR1Y0T2lCdWRXMWlaWElnUFNCMWNtd3VhVzVrWlhoUFppaGNJajljSWlrN1hHNGdJQ0FnYkdWMElHdDJjRG9nWVc1NUlEMGdlMzA3WEc0Z0lDQWdhV1lnS0hGMVpYSjVVM1J5YVc1blNXNWtaWGdnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnZiR1JSZFdWeWVWTjBjbWx1WnlBOUlIVnliQzV6ZFdKemRISW9jWFZsY25sVGRISnBibWRKYm1SbGVDQXJJREVwTG5Od2JHbDBLRndpSmx3aUtUdGNiaUFnSUNBZ0lDQWdMeThnUUhSekxXbG5ibTl5WlZ4dUlDQWdJQ0FnSUNCdmJHUlJkV1Z5ZVZOMGNtbHVaeTVtYjNKRllXTm9LQ2g0TENCcEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCcmRqb2djM1J5YVc1blcxMGdQU0J2YkdSUmRXVnllVk4wY21sdVoxdHBYUzV6Y0d4cGRDaGNJajFjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JyZG5CYmEzWmJNRjFkSUQwZ2EzWmJNVjA3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd0MmNDQTlJSHN1TGk1cmRuQXNJQzR1TG5CaGNtRnRjMzA3WEc1Y2JpQWdJQ0JqYjI1emRDQnhkV1Z5ZVZOMGNtbHVaeUE5SUU5aWFtVmpkQzVyWlhsektHdDJjQ2xjYmlBZ0lDQWdJQ0FnTG0xaGNDaHJaWGtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTJ0bGVYMDlKSHRsYm1OdlpHVlZVa2tvYTNad1cydGxlVjBwZldBN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQzVxYjJsdUtGd2lKbHdpS1R0Y2JseHVJQ0FnSUdsbUlDaHhkV1Z5ZVZOMGNtbHVaMGx1WkdWNElENDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDNXpkV0p6ZEhKcGJtY29NQ3dnY1hWbGNubFRkSEpwYm1kSmJtUmxlQ0FySURFcElDc2djWFZsY25sVGRISnBibWM3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnliQ0FySUZ3aVAxd2lJQ3NnY1hWbGNubFRkSEpwYm1jN1hHNGdJQ0FnZlZ4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVjBVR0Z5WVcxelhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52ZXJzaW9uID0gdm9pZCAwO1xudmFyIHZlcnNpb24gPSBfX1ZFUlNJT05fXztcbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZ5YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTkyWlhKemFXOXVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3p0QlFVVkJMRWxCUVUwc1QwRkJUeXhIUVVGSExGZEJRVmNzUTBGQlF6dEJRVVZ1UWl3d1FrRkJUeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1SbFkyeGhjbVVnWTI5dWMzUWdYMTlXUlZKVFNVOU9YMTg2SUhOMGNtbHVaenRjYmx4dVkyOXVjM1FnZG1WeWMybHZiaUE5SUY5ZlZrVlNVMGxQVGw5Zk8xeHVYRzVsZUhCdmNuUWdleUIyWlhKemFXOXVJSDA3WEc0aVhYMD0iXSwic291cmNlUm9vdCI6IiJ9