diff --git a/dist/preload.js b/dist/preload.js index 7a8e73a..c4a9f04 100644 --- a/dist/preload.js +++ b/dist/preload.js @@ -1 +1 @@ -var __webpack_modules__={741:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "P": () => (/* reexport */ ChildProcess),\n "u": () => (/* reexport */ Electron),\n "Fs": () => (/* reexport */ Fs)\n});\n\n// EXTERNAL MODULE: external "electron"\nvar external_electron_ = __webpack_require__(496);\n;// CONCATENATED MODULE: ./src/preload/api/electron.ts\nvar Electron;(function(Electron){function openPath(path){try{external_electron_.shell.openPath(path)}catch(error){console.error("[KernelSettings:Native]: Fatal error:",error)}}Electron.openPath=openPath;function showItemInFolder(path){try{external_electron_.shell.showItemInFolder(path)}catch(error){console.error("[KernelSettings:Native]: Fatal error:",error)}}Electron.showItemInFolder=showItemInFolder;function trashItem(path){try{external_electron_.shell.trashItem(path)}catch(error){console.error("[KernelSettings:Native]: Fatal error:",error)}}Electron.trashItem=trashItem})(Electron||(Electron={}))\n;// CONCATENATED MODULE: external "fs"\nconst external_fs_namespaceObject = require("fs");\nvar external_fs_default = /*#__PURE__*/__webpack_require__.n(external_fs_namespaceObject);\n;// CONCATENATED MODULE: ./src/preload/api/fs.ts\nvar Fs;(function(Fs){var current=Fs.current=__dirname;function exists(path){return external_fs_default().existsSync(path)}Fs.exists=exists;function isFile(path){return exists(path)&&external_fs_default().statSync(path).isFile()}Fs.isFile=isFile;function readFile(path,options){return external_fs_default().readFileSync(path,options)}Fs.readFile=readFile;function readDir(path,options){return external_fs_default().readdirSync(path,options)}Fs.readDir=readDir;function writeFile(path,data,options){return external_fs_default().writeFileSync(path,data,options)}Fs.writeFile=writeFile;function createDir(path,options){return external_fs_default().mkdirSync(path,options)}Fs.createDir=createDir;function stats(path){const stats=external_fs_default().statSync(path);const cloned={};for(const prop in stats){cloned[prop]=typeof stats[prop]==="function"?stats[prop].bind(stats):stats[prop]}return cloned}Fs.stats=stats})(Fs||(Fs={}))\n;// CONCATENATED MODULE: external "child_process"\nconst external_child_process_namespaceObject = require("child_process");\nvar external_child_process_default = /*#__PURE__*/__webpack_require__.n(external_child_process_namespaceObject);\n;// CONCATENATED MODULE: ./src/preload/api/child_process.ts\nvar ChildProcess;(function(ChildProcess){function exec(cmd,options,callback){const instance=external_child_process_default().exec(cmd,options,callback);return{...instance,kill(sig){return instance.kill(sig)}}}ChildProcess.exec=exec})(ChildProcess||(ChildProcess={}))\n;// CONCATENATED MODULE: ./src/preload/api/index.ts\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNsQixTQUFTQyxJQUFJLENBQUNDLEdBQVcsQ0FBRWhCLE9BQXVCLENBQUVpQixRQUF1RSxDQUFFLENBQ2hJLE1BQU1DLFFBQVEsQ0FBR0wscUNBQU8sQ0FBQ0csR0FBRyxDQUFFaEIsT0FBTyxDQUFFaUIsUUFBUSxDQUFDLE9BRXpDLENBQ0gsR0FBR0MsUUFBUSxDQUNYQyxJQUFJLENBQUNDLEdBQVcsQ0FBRSxDQUFDLE9BQU9GLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBRSxDQUNqRCxDQUNKLGFBUGVMLElBQUksQ0FBSkEsSUFBSSxHQURQRCxZQUFZLEdBQVpBLFlBQVksSyIsInNvdXJjZXMiOlsid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9wcmVsb2FkL2FwaS9lbGVjdHJvbi50cz81NGQyIiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy9leHRlcm5hbCBjb21tb25qcyBcImZzXCI/NTBmMiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcHJlbG9hZC9hcGkvZnMudHM/MzU3YiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvZXh0ZXJuYWwgY29tbW9uanMgXCJjaGlsZF9wcm9jZXNzXCI/MmJkOSIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcHJlbG9hZC9hcGkvY2hpbGRfcHJvY2Vzcy50cz9kZDY4Iiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9wcmVsb2FkL2FwaS9pbmRleC50cz8xMjQ2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2hlbGx9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIEVsZWN0cm9uIHtcbiAgICBleHBvcnQgZnVuY3Rpb24gb3BlblBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzaGVsbC5vcGVuUGF0aChwYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbS2VybmVsU2V0dGluZ3M6TmF0aXZlXTogRmF0YWwgZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNob3dJdGVtSW5Gb2xkZXIocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzaGVsbC5zaG93SXRlbUluRm9sZGVyKHBhdGgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltLZXJuZWxTZXR0aW5nczpOYXRpdmVdOiBGYXRhbCBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBcbiAgICBleHBvcnQgZnVuY3Rpb24gdHJhc2hJdGVtKHBhdGg6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2hlbGwudHJhc2hJdGVtKHBhdGgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltLZXJuZWxTZXR0aW5nczpOYXRpdmVdOiBGYXRhbCBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufSIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiZnNcIik7IiwiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuXG5leHBvcnQgbmFtZXNwYWNlIEZzIHtcbiAgICBleHBvcnQgY29uc3QgY3VycmVudDogc3RyaW5nID0gX19kaXJuYW1lO1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhwYXRoOiBmcy5QYXRoTGlrZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKTtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRmlsZShwYXRoOiBmcy5QYXRoTGlrZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXhpc3RzKHBhdGgpICYmIGZzLnN0YXRTeW5jKHBhdGgpLmlzRmlsZSgpO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUocGF0aDogZnMuUGF0aE9yRmlsZURlc2NyaXB0b3IsIG9wdGlvbnM/OiB7ZW5jb2Rpbmc/OiBudWxsLCBmbGFnPzogc3RyaW5nfSB8IEJ1ZmZlckVuY29kaW5nKTogc3RyaW5nIHwgVWludDhBcnJheSB7XG4gICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgb3B0aW9ucyk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiByZWFkRGlyKHBhdGg6IGZzLlBhdGhMaWtlLCBvcHRpb25zPzogQnVmZmVyRW5jb2RpbmcgfCB7ZW5jb2Rpbmc/OiBCdWZmZXJFbmNvZGluZywgd2l0aEZpbGVUeXBlcz86IGJvb2xlYW59KTogc3RyaW5nW10gfCBmcy5EaXJlbnRbXSB7XG4gICAgICAgIHJldHVybiBmcy5yZWFkZGlyU3luYyhwYXRoLCBvcHRpb25zIGFzIGFueSk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiB3cml0ZUZpbGUocGF0aDogZnMuUGF0aExpa2UsIGRhdGE6IHN0cmluZyB8IE5vZGVKUy5BcnJheUJ1ZmZlclZpZXcsIG9wdGlvbnM/OiBmcy5Xcml0ZUZpbGVPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHJldHVybiBmcy53cml0ZUZpbGVTeW5jKHBhdGgsIGRhdGEsIG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlyKHBhdGg6IGZzLlBhdGhMaWtlLCBvcHRpb25zPzogZnMuTWFrZURpcmVjdG9yeU9wdGlvbnMgJiB7cmVjdXJzaXZlOiBib29sZWFufSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBmcy5ta2RpclN5bmMocGF0aCwgb3B0aW9ucyk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBzdGF0cyhwYXRoOiBmcy5QYXRoTGlrZSk6IGZzLlN0YXRzIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoKTtcbiAgICAgICAgY29uc3QgY2xvbmVkID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHN0YXRzKSB7XG4gICAgICAgICAgICBjbG9uZWRbcHJvcF0gPSB0eXBlb2Ygc3RhdHNbcHJvcF0gPT09IFwiZnVuY3Rpb25cIiA/IHN0YXRzW3Byb3BdLmJpbmQoc3RhdHMpIDogc3RhdHNbcHJvcF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xvbmVkIGFzIHVua25vd24gYXMgZnMuU3RhdHM7XG4gICAgfTtcbn0iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7IiwiaW1wb3J0IENQIGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XHJcblxyXG5leHBvcnQgbmFtZXNwYWNlIENoaWxkUHJvY2VzcyB7XHJcbiAgICBleHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9uczoge2N3ZD86IHN0cmluZ30sIGNhbGxiYWNrOiAoZXJyb3I6IEVycm9yIHwgbnVsbCwgc3Rkb3V0OiBzdHJpbmcsIHN0ZGVycjogc3RyaW5nKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBDUC5leGVjKGNtZCwgb3B0aW9ucywgY2FsbGJhY2spO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5pbnN0YW5jZSxcclxuICAgICAgICAgICAga2lsbChzaWc6IG51bWJlcikge3JldHVybiBpbnN0YW5jZS5raWxsKHNpZyk7fVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgKiBmcm9tIFwiLi9lbGVjdHJvblwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9mc1wiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jaGlsZF9wcm9jZXNzXCI7Il0sIm5hbWVzIjpbInNoZWxsIiwiRWxlY3Ryb24iLCJvcGVuUGF0aCIsInBhdGgiLCJlcnJvciIsImNvbnNvbGUiLCJzaG93SXRlbUluRm9sZGVyIiwidHJhc2hJdGVtIiwiZnMiLCJGcyIsImN1cnJlbnQiLCJfX2Rpcm5hbWUiLCJleGlzdHMiLCJleGlzdHNTeW5jIiwiaXNGaWxlIiwic3RhdFN5bmMiLCJyZWFkRmlsZSIsIm9wdGlvbnMiLCJyZWFkRmlsZVN5bmMiLCJyZWFkRGlyIiwicmVhZGRpclN5bmMiLCJ3cml0ZUZpbGUiLCJkYXRhIiwid3JpdGVGaWxlU3luYyIsImNyZWF0ZURpciIsIm1rZGlyU3luYyIsInN0YXRzIiwiY2xvbmVkIiwicHJvcCIsImJpbmQiLCJDUCIsIkNoaWxkUHJvY2VzcyIsImV4ZWMiLCJjbWQiLCJjYWxsYmFjayIsImluc3RhbmNlIiwia2lsbCIsInNpZyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///741\n')},757:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(496);\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _native__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(785);\nif(process.contextIsolated){electron__WEBPACK_IMPORTED_MODULE_0__.contextBridge.exposeInMainWorld("SettingsNative",_native__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)}Object.assign(window,{SettingsNative: _native__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z})//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzU3LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFDc0MsR0FFbEMsT0FBUSxDQUFTRyxlQUFlLENBQUUsQ0FDbENILHFFQUErQixDQUFDLGdCQUFnQixDQUFFQyx3REFBYyxDQUFDLENBQ3BFLE1BRUssQ0FBQ0ssTUFBTSxDQUFDQyxNQUFNLENBQUUsQ0FBQ04sY0FBYywyREFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9wcmVsb2FkL2luZGV4LnRzPzJlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjb250ZXh0QnJpZGdlfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCBTZXR0aW5nc05hdGl2ZSBmcm9tIFwiLi9uYXRpdmVcIjtcblxuaWYgKChwcm9jZXNzIGFzIGFueSkuY29udGV4dElzb2xhdGVkKSB7XG4gICAgY29udGV4dEJyaWRnZS5leHBvc2VJbk1haW5Xb3JsZChcIlNldHRpbmdzTmF0aXZlXCIsIFNldHRpbmdzTmF0aXZlKTtcbn1cblxuT2JqZWN0LmFzc2lnbih3aW5kb3csIHtTZXR0aW5nc05hdGl2ZX0pOyJdLCJuYW1lcyI6WyJjb250ZXh0QnJpZGdlIiwiU2V0dGluZ3NOYXRpdmUiLCJwcm9jZXNzIiwiY29udGV4dElzb2xhdGVkIiwiZXhwb3NlSW5NYWluV29ybGQiLCJPYmplY3QiLCJhc3NpZ24iLCJ3aW5kb3ciXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///757\n')},33:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* unused harmony export events */\nconst events={};const IPC={on(event,callback){if(!events[event])events[event]=new Set;return events[event].add(callback),IPC.off.bind(null,event,callback)},off(event,callback){if(!events[event])return;events[event].delete(callback)},once(event,callback){const unsubscribe=IPC.on(event,(...args)=>{unsubscribe();return callback(...args)})},dispatch(event,...args){if(!events[event])return;for(const callback of events[event]){try{callback(...args)}catch(error){console.error(error)}}}};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (IPC);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUVPLE1BQU1BLE1BQU0sQ0FBd0MsRUFBRSxPQUN2REMsR0FBRyxDQUFHLENBQ1JDLEVBQUUsQ0FBa0JDLEtBQWEsQ0FBRUMsUUFBVyxDQUFFLENBQzVDLEdBQUksQ0FBQ0osTUFBTSxDQUFDRyxLQUFLLENBQUMsQ0FBRUgsTUFBTSxDQUFDRyxLQUFLLENBQUMsQ0FBRyxJQUFJRSxHQUFHLFFBRXBDTCxNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFDRyxHQUFHLENBQUNGLFFBQVEsQ0FBMkIsQ0FBRUgsR0FBRyxDQUFDTSxHQUFHLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUVMLEtBQUssQ0FBRUMsUUFBUSxDQUFDLENBQ3BHLENBQ0RHLEdBQUcsQ0FBa0JKLEtBQWEsQ0FBRUMsUUFBVyxDQUFFLENBQzdDLEdBQUksQ0FBQ0osTUFBTSxDQUFDRyxLQUFLLENBQUMsQ0FBRSxNQUFPLENBRTNCSCxNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFDTSxNQUFNLENBQUNMLFFBQVEsQ0FBMkIsQ0FDM0QsQ0FDRE0sSUFBSSxDQUFrQlAsS0FBVSxDQUFFQyxRQUFXLENBQUUsQ0FDM0MsTUFBTU8sV0FBVyxDQUFHVixHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsS0FBSyxDQUFFLENBQUlTLEdBQUFBLElBQUksR0FBSyxDQUMzQ0QsV0FBVyxFQUFFLFFBQ04sUUFBUyxJQUFvQ0MsSUFBSSxDQUFDLENBQzVELENBQUMsQ0FDTCxDQUNEQyxRQUFRLENBQUNWLEtBQWEsQ0FBRSxHQUFHUyxJQUFJLENBQVMsQ0FDcEMsR0FBSSxDQUFDWixNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFFLE1BQU8sS0FFdEIsTUFBTUMsUUFBUSxJQUFJSixNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFFLENBQ2xDLEdBQUksQ0FBQ0MsUUFBUSxJQUFJUSxJQUFJLENBQUMsQ0FBRSxNQUNqQkUsS0FBSyxDQUFFLENBQUNDLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDQSxLQUFLLENBQUMsQ0FBRSxDQUN4QyxDQUNKLENBQ0osQ0FBQyxpRUFFYWIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcHJlbG9hZC9pcGMudHM/NmZlMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIElQQ0NhbGxiYWNrID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xuXG5leHBvcnQgY29uc3QgZXZlbnRzOiB7W2V2ZW50OiBzdHJpbmddOiBTZXQ8SVBDQ2FsbGJhY2s+fSA9IHt9O1xuY29uc3QgSVBDID0ge1xuICAgIG9uPFQgPSBJUENDYWxsYmFjaz4oZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IFQpIHtcbiAgICAgICAgaWYgKCFldmVudHNbZXZlbnRdKSBldmVudHNbZXZlbnRdID0gbmV3IFNldCgpO1xuXG4gICAgICAgIHJldHVybiBldmVudHNbZXZlbnRdLmFkZChjYWxsYmFjayBhcyB1bmtub3duIGFzIElQQ0NhbGxiYWNrKSwgSVBDLm9mZi5iaW5kKG51bGwsIGV2ZW50LCBjYWxsYmFjayk7XG4gICAgfSxcbiAgICBvZmY8VCA9IElQQ0NhbGxiYWNrPihldmVudDogc3RyaW5nLCBjYWxsYmFjazogVCkge1xuICAgICAgICBpZiAoIWV2ZW50c1tldmVudF0pIHJldHVybjtcblxuICAgICAgICBldmVudHNbZXZlbnRdLmRlbGV0ZShjYWxsYmFjayBhcyB1bmtub3duIGFzIElQQ0NhbGxiYWNrKTtcbiAgICB9LFxuICAgIG9uY2U8VCA9IElQQ0NhbGxiYWNrPihldmVudDogYW55LCBjYWxsYmFjazogVCkge1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IElQQy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gKGNhbGxiYWNrIGFzIHVua25vd24gYXMgQ2FsbGFibGVGdW5jdGlvbikoLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZGlzcGF0Y2goZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgaWYgKCFldmVudHNbZXZlbnRdKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBldmVudHNbZXZlbnRdKSB7XG4gICAgICAgICAgICB0cnkge2NhbGxiYWNrKC4uLmFyZ3MpO31cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge2NvbnNvbGUuZXJyb3IoZXJyb3IpO31cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IElQQzsiXSwibmFtZXMiOlsiZXZlbnRzIiwiSVBDIiwib24iLCJldmVudCIsImNhbGxiYWNrIiwiU2V0IiwiYWRkIiwib2ZmIiwiYmluZCIsImRlbGV0ZSIsIm9uY2UiLCJ1bnN1YnNjcmliZSIsImFyZ3MiLCJkaXNwYXRjaCIsImVycm9yIiwiY29uc29sZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///33\n')},785:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ipc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33);\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(741);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(423);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__);\nconst SettingsNative={modules:["ipc","electron","fs","path","run","child_process"],requireModule(module){switch(module){case"ipc":return _ipc__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;case"electron":return _api__WEBPACK_IMPORTED_MODULE_1__/* .Electron */ .u;case"fs":return _api__WEBPACK_IMPORTED_MODULE_1__.Fs;case"path":return (path__WEBPACK_IMPORTED_MODULE_2___default());case"run":return js=>eval(js);case"child_process":return _api__WEBPACK_IMPORTED_MODULE_1__/* .ChildProcess */ .P;default:throw new Error(`Cannot find module "${module}"`)}}};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SettingsNative);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFd0IsTUFZbEJLLGNBQWMsQ0FBRyxDQUNuQkMsT0FBTyxDQUFFLENBQUMsS0FBSyxDQUFFLFVBQVUsQ0FBRSxJQUFJLENBQUUsTUFBTSxDQUFFLEtBQUssQ0FBRSxlQUFlLENBQUMsQ0FDbEVDLGFBQWEsQ0FBNkJDLE1BQVMsQ0FBbUIsQ0FDbEUsT0FBUUEsTUFBTSxFQUNWLElBQUssS0FBSyxDQUFFLE9BQU9SLHFEQUFHLEtBQ2pCLFVBQVUsQ0FBRSxPQUFPRSxtREFBUSxLQUMzQixJQUFJLENBQUUsT0FBT0Msb0NBQUUsS0FDZixNQUFNLENBQUUsT0FBT0MsNkNBQUksS0FDbkIsS0FBSyxDQUFFLE9BQVEsRUFBVyxFQUFLTSxJQUFJLENBQUNELEVBQUUsQ0FBQyxLQUN2QyxlQUFlLENBQUUsT0FBT1IsdURBQVksU0FFaEMsTUFBTSxJQUFJVSxLQUFLLENBQUMsQ0FBQyxvQkFBb0IsRUFBRUgsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzdELENBQ0osQ0FDSixDQUFDLGlFQUVhSCIsInNvdXJjZXMiOlsid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9wcmVsb2FkL25hdGl2ZS50cz85Yzc5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJUEMgZnJvbSBcIi4vaXBjXCI7XHJcbmltcG9ydCB7Q2hpbGRQcm9jZXNzLCBFbGVjdHJvbiwgRnN9IGZyb20gXCIuL2FwaVwiO1xyXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgTmF0aXZlTW9kdWxlTmFtZSA9IFwiaXBjXCIgfCBcImVsZWN0cm9uXCIgfCBcImZzXCIgfCBcInBhdGhcIiB8IFwicnVuXCIgfCBcImNoaWxkX3Byb2Nlc3NcIjtcclxuXHJcbmV4cG9ydCB0eXBlIE5hdGl2ZU1vZHVsZTxUPiA9XHJcbiAgICBUIGV4dGVuZHMgXCJpcGNcIiA/IHR5cGVvZiBJUEMgOlxyXG4gICAgVCBleHRlbmRzIFwiZWxlY3Ryb25cIiA/IHR5cGVvZiBFbGVjdHJvbiA6XHJcbiAgICBUIGV4dGVuZHMgXCJmc1wiID8gdHlwZW9mIEZzIDpcclxuICAgIFQgZXh0ZW5kcyBcInBhdGhcIiA/IHR5cGVvZiBwYXRoIDpcclxuICAgIFQgZXh0ZW5kcyBcInJ1blwiID8gdHlwZW9mIGV2YWwgOlxyXG4gICAgVCBleHRlbmRzIFwiY2hpbGRfcHJvY2Vzc1wiID8gdHlwZW9mIENoaWxkUHJvY2VzcyA6IG5ldmVyO1xyXG5cclxuY29uc3QgU2V0dGluZ3NOYXRpdmUgPSB7XHJcbiAgICBtb2R1bGVzOiBbXCJpcGNcIiwgXCJlbGVjdHJvblwiLCBcImZzXCIsIFwicGF0aFwiLCBcInJ1blwiLCBcImNoaWxkX3Byb2Nlc3NcIl0sXHJcbiAgICByZXF1aXJlTW9kdWxlPFQgZXh0ZW5kcyBOYXRpdmVNb2R1bGVOYW1lPihtb2R1bGU6IFQpOiBOYXRpdmVNb2R1bGU8VD4ge1xyXG4gICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJpcGNcIjogcmV0dXJuIElQQyBhcyBOYXRpdmVNb2R1bGU8dHlwZW9mIElQQz47XHJcbiAgICAgICAgICAgIGNhc2UgXCJlbGVjdHJvblwiOiByZXR1cm4gRWxlY3Ryb24gYXMgTmF0aXZlTW9kdWxlPHR5cGVvZiBFbGVjdHJvbj47XHJcbiAgICAgICAgICAgIGNhc2UgXCJmc1wiOiByZXR1cm4gRnMgYXMgTmF0aXZlTW9kdWxlPHR5cGVvZiBGcz47XHJcbiAgICAgICAgICAgIGNhc2UgXCJwYXRoXCI6IHJldHVybiBwYXRoIGFzIE5hdGl2ZU1vZHVsZTx0eXBlb2YgcGF0aD47XHJcbiAgICAgICAgICAgIGNhc2UgXCJydW5cIjogcmV0dXJuICgoanM6IHN0cmluZykgPT4gZXZhbChqcykpIGFzIE5hdGl2ZU1vZHVsZTwoKSA9PiBhbnk+O1xyXG4gICAgICAgICAgICBjYXNlIFwiY2hpbGRfcHJvY2Vzc1wiOiByZXR1cm4gQ2hpbGRQcm9jZXNzIGFzIE5hdGl2ZU1vZHVsZTx0eXBlb2YgQ2hpbGRQcm9jZXNzPjtcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgbW9kdWxlIFwiJHttb2R1bGV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTZXR0aW5nc05hdGl2ZTsiXSwibmFtZXMiOlsiSVBDIiwiQ2hpbGRQcm9jZXNzIiwiRWxlY3Ryb24iLCJGcyIsInBhdGgiLCJTZXR0aW5nc05hdGl2ZSIsIm1vZHVsZXMiLCJyZXF1aXJlTW9kdWxlIiwibW9kdWxlIiwianMiLCJldmFsIiwiRXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///785\n')},496:Q=>{Q.exports=require("electron")},423:Q=>{Q.exports=require("path")}},__webpack_module_cache__={};function __webpack_require__(Q){var c=__webpack_module_cache__[Q];if(void 0!==c)return c.exports;var e=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](e,e.exports,__webpack_require__),e.exports}__webpack_require__.n=Q=>{var c=Q&&Q.__esModule?()=>Q.default:()=>Q;return __webpack_require__.d(c,{a:c}),c},__webpack_require__.d=(Q,c)=>{for(var e in c)__webpack_require__.o(c,e)&&!__webpack_require__.o(Q,e)&&Object.defineProperty(Q,e,{enumerable:!0,get:c[e]})},__webpack_require__.o=(Q,c)=>Object.prototype.hasOwnProperty.call(Q,c),__webpack_require__.r=Q=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(Q,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(Q,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(757),__webpack_export_target__=exports;for(var i in __webpack_exports__)__webpack_export_target__[i]=__webpack_exports__[i];__webpack_exports__.__esModule&&Object.defineProperty(__webpack_export_target__,"__esModule",{value:!0}); \ No newline at end of file +var __webpack_modules__={247:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "P": () => (/* reexport */ ChildProcess),\n "u": () => (/* reexport */ Electron),\n "Fs": () => (/* reexport */ Fs)\n});\n\n// EXTERNAL MODULE: external "electron"\nvar external_electron_ = __webpack_require__(496);\n;// CONCATENATED MODULE: ./src/preload/api/electron.ts\nvar Electron;(function(Electron){function openPath(path){try{external_electron_.shell.openPath(path)}catch(error){console.error("[KernelSettings:Native]: Fatal error:",error)}}Electron.openPath=openPath;function showItemInFolder(path){try{external_electron_.shell.showItemInFolder(path)}catch(error){console.error("[KernelSettings:Native]: Fatal error:",error)}}Electron.showItemInFolder=showItemInFolder;function trashItem(path){try{external_electron_.shell.trashItem(path)}catch(error){console.error("[KernelSettings:Native]: Fatal error:",error)}}Electron.trashItem=trashItem})(Electron||(Electron={}));\n;// CONCATENATED MODULE: external "fs"\nconst external_fs_namespaceObject = require("fs");\nvar external_fs_default = /*#__PURE__*/__webpack_require__.n(external_fs_namespaceObject);\n;// CONCATENATED MODULE: ./src/preload/api/fs.ts\nvar Fs;(function(Fs){var current=Fs.current=__dirname;function exists(path){return external_fs_default().existsSync(path)}Fs.exists=exists;function isFile(path){return exists(path)&&external_fs_default().statSync(path).isFile()}Fs.isFile=isFile;function readFile(path,options){return external_fs_default().readFileSync(path,options)}Fs.readFile=readFile;function readDir(path,options){return external_fs_default().readdirSync(path,options)}Fs.readDir=readDir;function writeFile(path,data,options){return external_fs_default().writeFileSync(path,data,options)}Fs.writeFile=writeFile;function createDir(path,options){return external_fs_default().mkdirSync(path,options)}Fs.createDir=createDir;function stats(path){const stats=external_fs_default().statSync(path);const cloned={};for(const prop in stats){cloned[prop]=typeof stats[prop]==="function"?stats[prop].bind(stats):stats[prop]}return cloned}Fs.stats=stats})(Fs||(Fs={}));\n;// CONCATENATED MODULE: external "child_process"\nconst external_child_process_namespaceObject = require("child_process");\nvar external_child_process_default = /*#__PURE__*/__webpack_require__.n(external_child_process_namespaceObject);\n;// CONCATENATED MODULE: ./src/preload/api/child_process.ts\nvar ChildProcess;(function(ChildProcess){function exec(cmd,options,callback){const instance=external_child_process_default().exec(cmd,options,callback);return{...instance,kill(sig){return instance.kill(sig)}}}ChildProcess.exec=exec})(ChildProcess||(ChildProcess={}));\n;// CONCATENATED MODULE: ./src/preload/api/index.ts\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQ3LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRU8sSUFBVUMsUUF3QmhCLHFCQXZCVSxTQUFTQyxTQUFTQyxJQUFZLENBQUUsQ0FDbkMsR0FBSSxDQUNBSCxpQ0FBYyxDQUFDRyxLQUNuQixDQUFFLE1BQU9DLE1BQU8sQ0FDWkMsUUFBUUQsS0FBSyxDQUFDLHdDQUF5Q0EsTUFDM0QsQ0FDSixVQU5nQkYsU0FBQUEsU0FRVCxTQUFTSSxpQkFBaUJILElBQVksQ0FBRSxDQUMzQyxHQUFJLENBQ0FILHlDQUFzQixDQUFDRyxLQUMzQixDQUFFLE1BQU9DLE1BQU8sQ0FDWkMsUUFBUUQsS0FBSyxDQUFDLHdDQUF5Q0EsTUFDM0QsQ0FDSixVQU5nQkUsaUJBQUFBLGlCQVFULFNBQVNDLFVBQVVKLElBQVksQ0FBRSxDQUNwQyxHQUFJLENBQ0FILGtDQUFlLENBQUNHLEtBQ3BCLENBQUUsTUFBT0MsTUFBTyxDQUNaQyxRQUFRRCxLQUFLLENBQUMsd0NBQXlDQSxNQUMzRCxDQUNKLFVBTmdCRyxVQUFBQSxZQWpCSE4sV0FBQUEsYzs7QUNGakIsTUFBTSwyQkFBNEIsaUI7OztBQ0UzQixJQUFVUSxFQXFDaEIsbUJBcENnQkMsV0FBQUEsUUFBa0JDLFVBRXhCLFNBQVNDLE9BQU9ULElBQWlCLENBQVcsQ0FDL0MsT0FBT0ssZ0NBQWEsQ0FBQ0wsS0FDekIsSUFGZ0JTLE9BQUFBLE9BSVQsU0FBU0UsT0FBT1gsSUFBaUIsQ0FBVyxDQUMvQyxPQUFPUyxPQUFPVCxPQUFTSyw4QkFBVyxDQUFDTCxNQUFNVyxNQUFNLEVBQ25ELElBRmdCQSxPQUFBQSxPQUlULFNBQVNFLFNBQVNiLElBQTZCLENBQUVjLE9BQTJELENBQXVCLENBQ3RJLE9BQU9ULGtDQUFlLENBQUNMLEtBQU1jLFFBQ2pDLElBRmdCRCxTQUFBQSxTQUlULFNBQVNHLFFBQVFoQixJQUFpQixDQUFFYyxPQUErRSxDQUEwQixDQUNoSixPQUFPVCxpQ0FBYyxDQUFDTCxLQUFNYyxRQUNoQyxJQUZnQkUsUUFBQUEsUUFJVCxTQUFTRSxVQUFVbEIsSUFBaUIsQ0FBRW1CLElBQXFDLENBQUVMLE9BQTZCLENBQVEsQ0FDckgsT0FBT1QsbUNBQWdCLENBQUNMLEtBQU1tQixLQUFNTCxRQUN4QyxJQUZnQkksVUFBQUEsVUFJVCxTQUFTRyxVQUFVckIsSUFBaUIsQ0FBRWMsT0FBd0QsQ0FBVSxDQUMzRyxPQUFPVCwrQkFBWSxDQUFDTCxLQUFNYyxRQUM5QixJQUZnQk8sVUFBQUEsVUFJVCxTQUFTRSxNQUFNdkIsSUFBaUIsQ0FBWSxDQUMvQyxNQUFNdUIsTUFBUWxCLDhCQUFXLENBQUNMLE1BQzFCLE1BQU13QixPQUFTLENBQUMsRUFFaEIsSUFBSyxNQUFNQyxRQUFRRixNQUFPLENBQ3RCQyxNQUFNLENBQUNDLEtBQUssQ0FBRyxPQUFPRixLQUFLLENBQUNFLEtBQUssR0FBSyxXQUFhRixLQUFLLENBQUNFLEtBQUssQ0FBQ0MsSUFBSSxDQUFDSCxPQUFTQSxLQUFLLENBQUNFLEtBQUssQ0FHNUYsT0FBT0QsTUFDWCxJQVRnQkQsTUFBQUEsUUEzQkhqQixLQUFBQSxROztBQ0ZqQixNQUFNLHNDQUE0Qiw0Qjs7O0FDRTNCLElBQVVzQixZQVNoQix5QkFSVSxTQUFTQyxLQUFLQyxHQUFXLENBQUVoQixPQUF1QixDQUFFaUIsUUFBdUUsQ0FBRSxDQUNoSSxNQUFNQyxTQUFXTCxxQ0FBTyxDQUFDRyxJQUFLaEIsUUFBU2lCLFVBRXZDLE1BQU8sQ0FDSCxHQUFHQyxRQUFRLENBQ1hDLEtBQUtDLEdBQVcsQ0FBRSxDQUFDLE9BQU9GLFNBQVNDLElBQUksQ0FBQ0MsSUFBSyxDQUNqRCxDQUNKLGNBUGdCTCxLQUFBQSxPQURIRCxlQUFBQSxrQiIsInNvdXJjZXMiOlsid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9wcmVsb2FkL2FwaS9lbGVjdHJvbi50cz81NGQyIiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy9leHRlcm5hbCBjb21tb25qcyBcImZzXCI/NTBmMiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcHJlbG9hZC9hcGkvZnMudHM/MzU3YiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvZXh0ZXJuYWwgY29tbW9uanMgXCJjaGlsZF9wcm9jZXNzXCI/MmJkOSIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcHJlbG9hZC9hcGkvY2hpbGRfcHJvY2Vzcy50cz9kZDY4Iiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9wcmVsb2FkL2FwaS9pbmRleC50cz8xMjQ2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2hlbGx9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIEVsZWN0cm9uIHtcbiAgICBleHBvcnQgZnVuY3Rpb24gb3BlblBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzaGVsbC5vcGVuUGF0aChwYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbS2VybmVsU2V0dGluZ3M6TmF0aXZlXTogRmF0YWwgZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNob3dJdGVtSW5Gb2xkZXIocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzaGVsbC5zaG93SXRlbUluRm9sZGVyKHBhdGgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltLZXJuZWxTZXR0aW5nczpOYXRpdmVdOiBGYXRhbCBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBcbiAgICBleHBvcnQgZnVuY3Rpb24gdHJhc2hJdGVtKHBhdGg6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2hlbGwudHJhc2hJdGVtKHBhdGgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltLZXJuZWxTZXR0aW5nczpOYXRpdmVdOiBGYXRhbCBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufSIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiZnNcIik7IiwiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuXG5leHBvcnQgbmFtZXNwYWNlIEZzIHtcbiAgICBleHBvcnQgY29uc3QgY3VycmVudDogc3RyaW5nID0gX19kaXJuYW1lO1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhwYXRoOiBmcy5QYXRoTGlrZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKTtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRmlsZShwYXRoOiBmcy5QYXRoTGlrZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXhpc3RzKHBhdGgpICYmIGZzLnN0YXRTeW5jKHBhdGgpLmlzRmlsZSgpO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUocGF0aDogZnMuUGF0aE9yRmlsZURlc2NyaXB0b3IsIG9wdGlvbnM/OiB7ZW5jb2Rpbmc/OiBudWxsLCBmbGFnPzogc3RyaW5nfSB8IEJ1ZmZlckVuY29kaW5nKTogc3RyaW5nIHwgVWludDhBcnJheSB7XG4gICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgb3B0aW9ucyk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiByZWFkRGlyKHBhdGg6IGZzLlBhdGhMaWtlLCBvcHRpb25zPzogQnVmZmVyRW5jb2RpbmcgfCB7ZW5jb2Rpbmc/OiBCdWZmZXJFbmNvZGluZywgd2l0aEZpbGVUeXBlcz86IGJvb2xlYW59KTogc3RyaW5nW10gfCBmcy5EaXJlbnRbXSB7XG4gICAgICAgIHJldHVybiBmcy5yZWFkZGlyU3luYyhwYXRoLCBvcHRpb25zIGFzIGFueSk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiB3cml0ZUZpbGUocGF0aDogZnMuUGF0aExpa2UsIGRhdGE6IHN0cmluZyB8IE5vZGVKUy5BcnJheUJ1ZmZlclZpZXcsIG9wdGlvbnM/OiBmcy5Xcml0ZUZpbGVPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHJldHVybiBmcy53cml0ZUZpbGVTeW5jKHBhdGgsIGRhdGEsIG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlyKHBhdGg6IGZzLlBhdGhMaWtlLCBvcHRpb25zPzogZnMuTWFrZURpcmVjdG9yeU9wdGlvbnMgJiB7cmVjdXJzaXZlOiBib29sZWFufSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBmcy5ta2RpclN5bmMocGF0aCwgb3B0aW9ucyk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBzdGF0cyhwYXRoOiBmcy5QYXRoTGlrZSk6IGZzLlN0YXRzIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoKTtcbiAgICAgICAgY29uc3QgY2xvbmVkID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHN0YXRzKSB7XG4gICAgICAgICAgICBjbG9uZWRbcHJvcF0gPSB0eXBlb2Ygc3RhdHNbcHJvcF0gPT09IFwiZnVuY3Rpb25cIiA/IHN0YXRzW3Byb3BdLmJpbmQoc3RhdHMpIDogc3RhdHNbcHJvcF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xvbmVkIGFzIHVua25vd24gYXMgZnMuU3RhdHM7XG4gICAgfTtcbn0iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7IiwiaW1wb3J0IENQIGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XHJcblxyXG5leHBvcnQgbmFtZXNwYWNlIENoaWxkUHJvY2VzcyB7XHJcbiAgICBleHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9uczoge2N3ZD86IHN0cmluZ30sIGNhbGxiYWNrOiAoZXJyb3I6IEVycm9yIHwgbnVsbCwgc3Rkb3V0OiBzdHJpbmcsIHN0ZGVycjogc3RyaW5nKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBDUC5leGVjKGNtZCwgb3B0aW9ucywgY2FsbGJhY2spO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5pbnN0YW5jZSxcclxuICAgICAgICAgICAga2lsbChzaWc6IG51bWJlcikge3JldHVybiBpbnN0YW5jZS5raWxsKHNpZyk7fVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgKiBmcm9tIFwiLi9lbGVjdHJvblwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9mc1wiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jaGlsZF9wcm9jZXNzXCI7Il0sIm5hbWVzIjpbInNoZWxsIiwiRWxlY3Ryb24iLCJvcGVuUGF0aCIsInBhdGgiLCJlcnJvciIsImNvbnNvbGUiLCJzaG93SXRlbUluRm9sZGVyIiwidHJhc2hJdGVtIiwiZnMiLCJGcyIsImN1cnJlbnQiLCJfX2Rpcm5hbWUiLCJleGlzdHMiLCJleGlzdHNTeW5jIiwiaXNGaWxlIiwic3RhdFN5bmMiLCJyZWFkRmlsZSIsIm9wdGlvbnMiLCJyZWFkRmlsZVN5bmMiLCJyZWFkRGlyIiwicmVhZGRpclN5bmMiLCJ3cml0ZUZpbGUiLCJkYXRhIiwid3JpdGVGaWxlU3luYyIsImNyZWF0ZURpciIsIm1rZGlyU3luYyIsInN0YXRzIiwiY2xvbmVkIiwicHJvcCIsImJpbmQiLCJDUCIsIkNoaWxkUHJvY2VzcyIsImV4ZWMiLCJjbWQiLCJjYWxsYmFjayIsImluc3RhbmNlIiwia2lsbCIsInNpZyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///247\n')},759:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(496);\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _native__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(753);\nif(process.contextIsolated){electron__WEBPACK_IMPORTED_MODULE_0__.contextBridge.exposeInMainWorld("SettingsNative",_native__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)}Object.assign(window,{SettingsNative: _native__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzU5LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFHQSxHQUFJLFFBQWlCRyxlQUFlLENBQUUsQ0FDbENILHFFQUErQixDQUFDLGlCQUFrQkMsd0RBQWNBLENBQ3BFLENBQUMsT0FFTUssTUFBTSxDQUFDQyxPQUFRLENBQUNOLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcHJlbG9hZC9pbmRleC50cz8yZWVkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29udGV4dEJyaWRnZX0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgU2V0dGluZ3NOYXRpdmUgZnJvbSBcIi4vbmF0aXZlXCI7XG5cbmlmICgocHJvY2VzcyBhcyBhbnkpLmNvbnRleHRJc29sYXRlZCkge1xuICAgIGNvbnRleHRCcmlkZ2UuZXhwb3NlSW5NYWluV29ybGQoXCJTZXR0aW5nc05hdGl2ZVwiLCBTZXR0aW5nc05hdGl2ZSk7XG59XG5cbk9iamVjdC5hc3NpZ24od2luZG93LCB7U2V0dGluZ3NOYXRpdmV9KTsiXSwibmFtZXMiOlsiY29udGV4dEJyaWRnZSIsIlNldHRpbmdzTmF0aXZlIiwicHJvY2VzcyIsImNvbnRleHRJc29sYXRlZCIsImV4cG9zZUluTWFpbldvcmxkIiwiT2JqZWN0IiwiYXNzaWduIiwid2luZG93Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///759\n')},837:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* unused harmony export events */\nconst events={};const IPC={on(event,callback){if(!events[event])events[event]=new Set;return events[event].add(callback),IPC.off.bind(null,event,callback)},off(event,callback){if(!events[event])return;events[event].delete(callback)},once(event,callback){const unsubscribe=IPC.on(event,(...args)=>{unsubscribe();return callback(...args)})},dispatch(event,...args){if(!events[event])return;for(const callback of events[event]){try{callback(...args)}catch(error){console.error(error)}}}};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (IPC);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODM3LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFFTyxNQUFNQSxPQUE4QyxDQUFDLENBQUUsQ0FDOUQsTUFBTUMsSUFBTSxDQUNSQyxHQUFvQkMsS0FBYSxDQUFFQyxRQUFXLENBQUUsQ0FDNUMsR0FBSSxDQUFDSixNQUFNLENBQUNHLE1BQU0sQ0FBRUgsTUFBTSxDQUFDRyxNQUFNLENBQUcsSUFBSUUsR0FBTSxDQUU5QyxPQUFPTCxNQUFNLENBQUNHLE1BQU0sQ0FBQ0csR0FBRyxDQUFDRixVQUFxQ0gsSUFBSU0sR0FBRyxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFFTCxNQUFPQyxTQUFTLEVBRXJHRyxJQUFxQkosS0FBYSxDQUFFQyxRQUFXLENBQUUsQ0FDN0MsR0FBSSxDQUFDSixNQUFNLENBQUNHLE1BQU0sQ0FBRSxNQUFPLENBRTNCSCxNQUFNLENBQUNHLE1BQU0sQ0FBQ00sTUFBTSxDQUFDTCxTQUN6QixFQUNBTSxLQUFzQlAsS0FBVSxDQUFFQyxRQUFXLENBQUUsQ0FDM0MsTUFBTU8sWUFBY1YsSUFBSUMsRUFBRSxDQUFDQyxNQUFPLENBQUMsR0FBR1MsT0FBUyxDQUMzQ0QsY0FDQSxPQUFPLFlBQTZDQyxLQUN4RCxFQUNKLEVBQ0FDLFNBQVNWLEtBQWEsQ0FBRSxHQUFHUyxJQUFXLENBQUUsQ0FDcEMsR0FBSSxDQUFDWixNQUFNLENBQUNHLE1BQU0sQ0FBRSxNQUFPLENBRTNCLElBQUssTUFBTUMsWUFBWUosTUFBTSxDQUFDRyxNQUFNLENBQUUsQ0FDbEMsR0FBSSxDQUFDQyxZQUFZUSxLQUFNLENBQ3ZCLE1BQU9FLE1BQU8sQ0FBQ0MsUUFBUUQsS0FBSyxDQUFDQSxNQUFPLENBQ3hDLENBQ0osQ0FDSixDQUVBLGtFQUFlYixHQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3ByZWxvYWQvaXBjLnRzPzZmZTIiXSwic291cmNlc0NvbnRlbnQiOlsidHlwZSBJUENDYWxsYmFjayA9ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcblxuZXhwb3J0IGNvbnN0IGV2ZW50czoge1tldmVudDogc3RyaW5nXTogU2V0PElQQ0NhbGxiYWNrPn0gPSB7fTtcbmNvbnN0IElQQyA9IHtcbiAgICBvbjxUID0gSVBDQ2FsbGJhY2s+KGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBUKSB7XG4gICAgICAgIGlmICghZXZlbnRzW2V2ZW50XSkgZXZlbnRzW2V2ZW50XSA9IG5ldyBTZXQoKTtcblxuICAgICAgICByZXR1cm4gZXZlbnRzW2V2ZW50XS5hZGQoY2FsbGJhY2sgYXMgdW5rbm93biBhcyBJUENDYWxsYmFjayksIElQQy5vZmYuYmluZChudWxsLCBldmVudCwgY2FsbGJhY2spO1xuICAgIH0sXG4gICAgb2ZmPFQgPSBJUENDYWxsYmFjaz4oZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IFQpIHtcbiAgICAgICAgaWYgKCFldmVudHNbZXZlbnRdKSByZXR1cm47XG5cbiAgICAgICAgZXZlbnRzW2V2ZW50XS5kZWxldGUoY2FsbGJhY2sgYXMgdW5rbm93biBhcyBJUENDYWxsYmFjayk7XG4gICAgfSxcbiAgICBvbmNlPFQgPSBJUENDYWxsYmFjaz4oZXZlbnQ6IGFueSwgY2FsbGJhY2s6IFQpIHtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBJUEMub24oZXZlbnQsICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIChjYWxsYmFjayBhcyB1bmtub3duIGFzIENhbGxhYmxlRnVuY3Rpb24pKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGRpc3BhdGNoKGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgIGlmICghZXZlbnRzW2V2ZW50XSkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgZXZlbnRzW2V2ZW50XSkge1xuICAgICAgICAgICAgdHJ5IHtjYWxsYmFjayguLi5hcmdzKTt9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtjb25zb2xlLmVycm9yKGVycm9yKTt9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBJUEM7Il0sIm5hbWVzIjpbImV2ZW50cyIsIklQQyIsIm9uIiwiZXZlbnQiLCJjYWxsYmFjayIsIlNldCIsImFkZCIsIm9mZiIsImJpbmQiLCJkZWxldGUiLCJvbmNlIiwidW5zdWJzY3JpYmUiLCJhcmdzIiwiZGlzcGF0Y2giLCJlcnJvciIsImNvbnNvbGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///837\n')},753:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ipc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(837);\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(247);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(423);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__);\nconst SettingsNative={modules:["ipc","electron","fs","path","run","child_process"],requireModule(module){switch(module){case"ipc":return _ipc__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;case"electron":return _api__WEBPACK_IMPORTED_MODULE_1__/* .Electron */ .u;case"fs":return _api__WEBPACK_IMPORTED_MODULE_1__.Fs;case"path":return (path__WEBPACK_IMPORTED_MODULE_2___default());case"run":return js=>eval(js);case"child_process":return _api__WEBPACK_IMPORTED_MODULE_1__/* .ChildProcess */ .P;default:throw new Error(`Cannot find module "${module}"`)}}};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SettingsNative);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFjQSxNQUFNSyxlQUFpQixDQUNuQkMsUUFBUyxDQUFDLE1BQU8sV0FBWSxLQUFNLE9BQVEsTUFBTyxnQkFBZ0IsQ0FDbEVDLGNBQTBDQyxNQUFTLENBQW1CLENBQ2xFLE9BQVFBLFFBQ0osSUFBSyxNQUFPLE9BQU9SLHFEQUNuQixLQUFLLFdBQVksT0FBT0UsbURBQ3hCLEtBQUssS0FBTSxPQUFPQyxvQ0FDbEIsS0FBSyxPQUFRLE9BQU9DLDZDQUNwQixLQUFLLE1BQU8sT0FBUSxJQUFnQk0sS0FBS0QsR0FDekMsS0FBSyxnQkFBaUIsT0FBT1IsdURBRTdCLFNBQVMsTUFBTSxJQUFJVSxNQUFNLENBQUMsb0JBQW9CLEVBQUVILE9BQU8sQ0FBQyxDQUFDLENBQUUsQ0FFbkUsQ0FDSixDQUVBLGtFQUFlSCxjQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3ByZWxvYWQvbmF0aXZlLnRzPzljNzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IElQQyBmcm9tIFwiLi9pcGNcIjtcclxuaW1wb3J0IHtDaGlsZFByb2Nlc3MsIEVsZWN0cm9uLCBGc30gZnJvbSBcIi4vYXBpXCI7XHJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XHJcblxyXG5leHBvcnQgdHlwZSBOYXRpdmVNb2R1bGVOYW1lID0gXCJpcGNcIiB8IFwiZWxlY3Ryb25cIiB8IFwiZnNcIiB8IFwicGF0aFwiIHwgXCJydW5cIiB8IFwiY2hpbGRfcHJvY2Vzc1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgTmF0aXZlTW9kdWxlPFQ+ID1cclxuICAgIFQgZXh0ZW5kcyBcImlwY1wiID8gdHlwZW9mIElQQyA6XHJcbiAgICBUIGV4dGVuZHMgXCJlbGVjdHJvblwiID8gdHlwZW9mIEVsZWN0cm9uIDpcclxuICAgIFQgZXh0ZW5kcyBcImZzXCIgPyB0eXBlb2YgRnMgOlxyXG4gICAgVCBleHRlbmRzIFwicGF0aFwiID8gdHlwZW9mIHBhdGggOlxyXG4gICAgVCBleHRlbmRzIFwicnVuXCIgPyB0eXBlb2YgZXZhbCA6XHJcbiAgICBUIGV4dGVuZHMgXCJjaGlsZF9wcm9jZXNzXCIgPyB0eXBlb2YgQ2hpbGRQcm9jZXNzIDogbmV2ZXI7XHJcblxyXG5jb25zdCBTZXR0aW5nc05hdGl2ZSA9IHtcclxuICAgIG1vZHVsZXM6IFtcImlwY1wiLCBcImVsZWN0cm9uXCIsIFwiZnNcIiwgXCJwYXRoXCIsIFwicnVuXCIsIFwiY2hpbGRfcHJvY2Vzc1wiXSxcclxuICAgIHJlcXVpcmVNb2R1bGU8VCBleHRlbmRzIE5hdGl2ZU1vZHVsZU5hbWU+KG1vZHVsZTogVCk6IE5hdGl2ZU1vZHVsZTxUPiB7XHJcbiAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImlwY1wiOiByZXR1cm4gSVBDIGFzIE5hdGl2ZU1vZHVsZTx0eXBlb2YgSVBDPjtcclxuICAgICAgICAgICAgY2FzZSBcImVsZWN0cm9uXCI6IHJldHVybiBFbGVjdHJvbiBhcyBOYXRpdmVNb2R1bGU8dHlwZW9mIEVsZWN0cm9uPjtcclxuICAgICAgICAgICAgY2FzZSBcImZzXCI6IHJldHVybiBGcyBhcyBOYXRpdmVNb2R1bGU8dHlwZW9mIEZzPjtcclxuICAgICAgICAgICAgY2FzZSBcInBhdGhcIjogcmV0dXJuIHBhdGggYXMgTmF0aXZlTW9kdWxlPHR5cGVvZiBwYXRoPjtcclxuICAgICAgICAgICAgY2FzZSBcInJ1blwiOiByZXR1cm4gKChqczogc3RyaW5nKSA9PiBldmFsKGpzKSkgYXMgTmF0aXZlTW9kdWxlPCgpID0+IGFueT47XHJcbiAgICAgICAgICAgIGNhc2UgXCJjaGlsZF9wcm9jZXNzXCI6IHJldHVybiBDaGlsZFByb2Nlc3MgYXMgTmF0aXZlTW9kdWxlPHR5cGVvZiBDaGlsZFByb2Nlc3M+O1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBtb2R1bGUgXCIke21vZHVsZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNldHRpbmdzTmF0aXZlOyJdLCJuYW1lcyI6WyJJUEMiLCJDaGlsZFByb2Nlc3MiLCJFbGVjdHJvbiIsIkZzIiwicGF0aCIsIlNldHRpbmdzTmF0aXZlIiwibW9kdWxlcyIsInJlcXVpcmVNb2R1bGUiLCJtb2R1bGUiLCJqcyIsImV2YWwiLCJFcnJvciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///753\n')},496:c=>{c.exports=require("electron")},423:c=>{c.exports=require("path")}},__webpack_module_cache__={};function __webpack_require__(c){var e=__webpack_module_cache__[c];if(void 0!==e)return e.exports;var I=__webpack_module_cache__[c]={exports:{}};return __webpack_modules__[c](I,I.exports,__webpack_require__),I.exports}__webpack_require__.n=c=>{var e=c&&c.__esModule?()=>c.default:()=>c;return __webpack_require__.d(e,{a:e}),e},__webpack_require__.d=(c,e)=>{for(var I in e)__webpack_require__.o(e,I)&&!__webpack_require__.o(c,I)&&Object.defineProperty(c,I,{enumerable:!0,get:e[I]})},__webpack_require__.o=(c,e)=>Object.prototype.hasOwnProperty.call(c,e),__webpack_require__.r=c=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(759),__webpack_export_target__=exports;for(var i in __webpack_exports__)__webpack_export_target__[i]=__webpack_exports__[i];__webpack_exports__.__esModule&&Object.defineProperty(__webpack_export_target__,"__esModule",{value:!0}); \ No newline at end of file diff --git a/dist/renderer.js b/dist/renderer.js index 8bef422..9f18f4e 100644 --- a/dist/renderer.js +++ b/dist/renderer.js @@ -1 +1 @@ -var __webpack_modules__={575:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Q": () => (/* binding */ Core)\n});\n\n;// CONCATENATED MODULE: ./src/renderer/modules/events.ts\nconst Events=new EventTarget;/* harmony default export */ const events = (Events);\n;// CONCATENATED MODULE: ./src/renderer/modules/logger.ts\nvar Logger;(function(Logger){function parseType(type){switch(type){case"error":case"info":case"error":return type;default:return"log"}}function logMessage(type,module,...message){console[parseType(type)](`%c[KernelSettings]%c %c[${module}]%c`,"color: #A8D46B; font-weight: 700;","","color: #A8D46B","",...message)}function log(module,...message){logMessage("log",module,...message)}Logger.log=log;function info(module,...message){logMessage("info",module,...message)}Logger.info=info;function warn(module,...message){logMessage("warn",module,...message)}Logger.warn=warn;function error(module,...message){logMessage("error",module,...message)}Logger.error=error})(Logger||(Logger={}))\n;// CONCATENATED MODULE: ./src/renderer/modules/devserver.ts\nconst fs=SettingsNative.requireModule("fs");const path=SettingsNative.requireModule("path");var DevServer;(function(DevServer1){var ws=DevServer1.ws=null;var expectedClose=DevServer1.expectedClose=false;const tryJSON=function(json){try{return JSON.parse(json)}catch(error){return false}};function close(){if(!ws)return;Logger.log("DevServer","Closing WebSocket");DevServer.ws=ws=null}DevServer1.close=close;function initialize(){const win=window;if(win.KernelDevServer&&win.KernelDevServer.ws!=null){Logger.log("DevServer","Taking over socket");ws=DevServer.ws=win.KernelDevServer.ws}else{Logger.log("DevServer","Loading development server...");ws=DevServer.ws=new WebSocket("ws://localhost:5656")}win.KernelDevServer=DevServer;ws.onmessage=handleMessage;ws.onerror=error=>{Logger.error("DevServer","Fatal error:",error)};ws.onclose=()=>{DevServer.ws=ws=null;if(!expectedClose)Logger.error("DevServer","Connection closed...")}}DevServer1.initialize=initialize;async function reloadCore(){Logger.log("DevServer","Reloading core...");events.dispatchEvent(new Event("reload-core"));const content=fs.readFile(path.resolve(fs.current,"renderer.js"),"utf8");const script=document.head.appendChild(Object.assign(document.createElement("script"),{type:"module",textContent:content+";__webpack_exports__Core.start();",onload:()=>script.remove()}))}DevServer1.reloadCore=reloadCore;function reloadStyles(){events.dispatchEvent(new Event("reload-css"))}DevServer1.reloadStyles=reloadStyles;function reload(type){switch(type){case"core":{reloadCore()}break;case"styles":{reloadStyles()}break}}DevServer1.reload=reload;var handleMessage=DevServer1.handleMessage=({data})=>{const message=tryJSON(data);if(!message)return Logger.error("DevServer","Unable to parse message:",data);switch(message.operation){case"HELLO":{send("HELLO",{client:`Discord->${window.DiscordNative.app.getReleaseChannel()}`});Logger.log("DevServer","WS Connected")}break;case"RELOAD_STYLES":{reloadStyles()}break;case"RELOAD_CORE":{reloadCore()}break;default:{Logger.log("DevServer","Unknown operation:",message.operation)}}};function send(operation,data){if(!ws)throw"Tried sending message without connection established";ws.send(JSON.stringify({operation:operation,data:data}))}DevServer1.send=send})(DevServer||(DevServer={}))\n;// CONCATENATED MODULE: ./src/renderer/modules/storage.ts\nconst storage_fs=SettingsNative.requireModule("fs");const storage_path=SettingsNative.requireModule("path");var Storage;(function(Storage1){var listeners=Storage1.listeners=new Set;var location=Storage1.location="";var groups=Storage1.groups=new Map;function tryJSON(json){try{return JSON.parse(json)}catch(error){return error}}function emit(...args){const callbacks=[...listeners];for(let i=0;i{const remove=on(()=>{setState(factory())});return()=>void remove()},[]);return state}Storage1.use=use;function initialize(){location=Storage.location=storage_path.resolve(storage_fs.current,"..","..","..","storage","settings");if(!storage_fs.exists(location)){try{storage_fs.createDir(location,{recursive:true})}catch(error){return console.error(error)}}for(let files=storage_fs.readDir(location,"utf8"),i=0;icurr?.[name],groups.get(id)??def)}return groups.get(group)??def}Storage1.get=get;function set(group,data){if(~group.indexOf(".")){const[id,...paths]=group.split(".");group=id;const prop=paths.pop();const stored=groups.get(id);if(stored!=null){const object=paths.reduce((curr,name)=>curr?.[name],groups.get(id));if(object==null)throw new Error("Group path not found!");object[prop]=data}else{const tree=paths.reduce((curr,name)=>{if(!curr[name])curr[name]={};return curr[name]},{});tree[prop]=data;groups.set(id,tree)}}else{groups.set(group,data)}storage_fs.writeFile(storage_path.join(Storage.location,group+".json"),JSON.stringify(groups.get(group),null,"\t"));emit(group)}Storage1.set=set})(Storage||(Storage={}))\n;// CONCATENATED MODULE: ./src/renderer/modules/memoize.ts\nfunction memoize(object){const keys=Object.keys(object);const clone={};for(let i=0;isetTimeout(callback,0)}class Filters{static byProps(...props){return module=>props.every(prop=>prop in module)}static byDisplayName(name,def=false){return module=>(def?module=module.default:module)&& typeof module==="function"&&module.displayName===name}static byTypeString(...strings){return module=>module.type&&(module=module.type?.toString())&&strings.every(str=>module.indexOf(str)> -1)}}class WebpackModule{cache=null;#listeners=new Set;get Filters(){return Filters}get chunkName(){return"webpackChunkdiscord_app"}get id(){return Symbol("kernel-settings")}constructor(){this.whenReady=this.waitForGlobal.then(()=>new Promise(async onReady=>{const[Dispatcher,UserStore]=await this.findByProps(["_dispatch","dispatch"],["getCurrentUser","_dispatchToken"],{cache:false,bulk:true,wait:true,forever:true});if(UserStore.getCurrentUser())return onReady();const listener=function(){Dispatcher.unsubscribe("START_SESSION",listener);Dispatcher.unsubscribe("CONNECTION_OPEN",listener);onReady()};Dispatcher.subscribe("START_SESSION",listener);Dispatcher.subscribe("CONNECTION_OPEN",listener)}));this.whenReady.then(()=>{let originalPush=window[this.chunkName].push;const handlePush=chunk=>{const[,modules]=chunk;for(const moduleId in modules){const originalModule=modules[moduleId];modules[moduleId]=(...args)=>{const[,exports]=args;originalModule.apply(originalModule,args);const listeners=[...this.#listeners];for(let i=0;ihandlePush,set:newPush=>{originalPush=newPush;Object.defineProperty(window[this.chunkName],"push",{value:handlePush,configurable:true,writable:true})}})})}addListener(listener){this.#listeners.add(listener);return()=>{this.#listeners.delete(listener)}}removeListener(listener){return this.#listeners.delete(listener)}findLazy(filter){const fromCache=this.findModule(filter);if(fromCache)return Promise.resolve(fromCache);return new Promise(resolve=>{const listener=m=>{const directMatch=filter(m);if(directMatch){resolve(m);return void remove()}if(!m.default)return;const defaultMatch=filter(m.default);if(!defaultMatch)return;resolve(m.default);remove()};const remove=this.addListener(listener)})}async waitFor(filter,{retries=100,all=false,forever=false,delay=50}={}){for(let i=0;isetTimeout(res,delay))}}parseOptions(args,filter=thing=>typeof thing==="object"&&thing!=null&&!Array.isArray(thing)){return[args,filter(args.at(-1))?args.pop():{}]}request(cache1=true){if(cache1&&this.cache)return this.cache;let req=undefined;if(Array.isArray(window[this.chunkName])){const chunk=[[this.id],{},__nested_webpack_require_3327__=>req=__nested_webpack_require_3327__];webpackChunkdiscord_app.push(chunk);webpackChunkdiscord_app.splice(webpackChunkdiscord_app.indexOf(chunk),1)}if(cache1)this.cache=req;return req}findModule(filter,{all=false,cache:cache1=true,force=false,default:defaultExports=false}={}){if(typeof filter!=="function")return void 0;const __nested_webpack_require_3661__=this.request(cache1);const found=[];let hasError=null;if(!__nested_webpack_require_3661__)return;const wrapFilter=function(module,index){try{return filter(module,index)}catch(error){hasError??=error;return false}};for(const id in __nested_webpack_require_3661__.c){const module=__nested_webpack_require_3661__.c[id].exports;if(!module||module===window)continue;switch(typeof module){case"object":{if(wrapFilter(module,id)){if(!all)return module;found.push(module)}if(module.__esModule&&module.default!=null&& typeof module.default!=="number"&&wrapFilter(module.default,id)){const exports=defaultExports?module:module.default;if(!all)return exports;found.push(exports)}if(force&&module.__esModule)for(const key in module){if(!module[key])continue;if(wrapFilter(module[key],id)){if(!all)return module[key];found.push(module[key])}}break}case"function":{if(wrapFilter(module,id)){if(!all)return module;found.push(module)}break}}}if(hasError){setImmediate(()=>{console.warn("[Webpack] filter threw an error. This can cause lag spikes at the user\'s end. Please fix asap.\\n\\n",hasError)})}return all?found:found[0]}findModules(filter){return this.findModule(filter,{all:true})}bulk(...options){const[filters,{wait=false,...rest}]=this.parseOptions(options);const found=new Array(filters.length);const searchFunction=wait?this.waitFor:this.findModule;const wrappedFilters=filters.map(filter=>{if(Array.isArray(filter))filter=Filters.byProps(...filter);if(typeof filter==="string")filter=Filters.byDisplayName(filter);return m=>{try{return filter(m)}catch(error){return false}}});const returnValue=searchFunction.call(this,module=>{for(let i=0;ifound);return found}findByProps(...options){const[props,{bulk=false,wait=false,...rest}]=this.parseOptions(options);if(!bulk&&!wait){return this.findModule(Filters.byProps(...props),rest)}if(wait&&!bulk){return this.waitFor(Filters.byProps(...props),rest)}if(bulk){const filters=props.map(propsArray=>Filters.byProps(...propsArray)).concat({wait,...rest});return this.bulk(...filters)}return null}findByDisplayName(...options){const[displayNames,{bulk=false,wait=false,...rest}]=this.parseOptions(options);if(!bulk&&!wait){return this.findModule(Filters.byDisplayName(displayNames[0]),rest)}if(wait&&!bulk){return this.waitFor(Filters.byDisplayName(displayNames[0]),rest)}if(bulk){const filters=displayNames.map(filters.map(Filters.byDisplayName)).concat({wait,cache});return this.bulk(...filters)}return null}findIndex(filter){let foundIndex=-1;this.findModule((module,index)=>{if(filter(module))foundIndex=index});return foundIndex}atIndex(index){return this.request(true)?.c[index]}get waitForGlobal(){return new Promise(async onExists=>{while(!Array.isArray(window[this.chunkName])){await new Promise(setImmediate)}onExists()})}async wait(callback=null){return this.whenReady.then(()=>{typeof callback==="function"&&callback()})}get whenExists(){return this.waitForGlobal}on(event,listener){switch(event){case"LOADED":return this.whenReady.then(listener)}}get once(){return this.on}}const Webpack=new WebpackModule;/* harmony default export */ const webpack = (Webpack);\n;// CONCATENATED MODULE: ./src/renderer/components/discord.ts\nconst DiscordComponents=memoize({get Button(){return webpack.findByProps("BorderColors")},get Switch(){return webpack.findByDisplayName("Switch")},get Markdown(){return webpack.findModule(m=>m.displayName==="Markdown"&&"rules"in m)},get Header(){return webpack.findModule(m=>m.displayName==="Header"&&"Tags"in m)},get Text(){const names=new Set(["Text","LegacyText"]);return webpack.findModule(m=>names.has(m.displayName))},get Forms(){return webpack.findByProps("FormItem","FormTitle")},get Spinner(){return webpack.findByDisplayName("Spinner")},get Flex(){return webpack.findByDisplayName("Flex")},get Link(){return webpack.findByDisplayName("Anchor")},get Icons(){const icons=webpack.findModules(m=>typeof m==="function"&&m.displayName&&m.toString().indexOf("currentColor")> -1);return Object.fromEntries(icons.map(icon=>[icon.displayName,icon]))},get Tooltips(){const TooltipModule=webpack.findByProps("TooltipContainer");return{Container:TooltipModule.TooltipContainer,Tooltip:TooltipModule.default,...TooltipModule}}});/* harmony default export */ const discord = (DiscordComponents);\n;// CONCATENATED MODULE: ./src/renderer/components/card.tsx\nfunction _extends(){_extends=Object.assign||function(target){for(var i=1;inull);props.size??="16";return React.createElement(IconComponent,_extends({},props,{width:props.size,height:props.size}))}function ToolButton({label,icon,onClick,danger=false}){const{Tooltips,Button}=discord;return React.createElement(Tooltips.Tooltip,{text:label,position:"top"},props=>React.createElement(Button,_extends({},props,{className:"kernel-toolbutton",look:Button.Looks.BLANK,size:Button.Sizes.NONE,onClick:onClick}),React.createElement(Icon,{size:"20",name:icon,color:danger?"#ed4245":undefined})))}function SwitchWrapper({value,onChange,disabled}){const{Switch}=discord;const[isChecked,setChecked]=React.useState(value);return React.createElement(Switch,{checked:isChecked,disabled:disabled,onChange:React.useCallback(()=>{if(disabled)return;onChange(!isChecked);setChecked(value=>!value)},[onChange,isChecked])})}function openItem(path){if(path.endsWith(".asar"))return Electron.showItemInFolder(path);Electron.openPath(path)}function KernelCard({pkg}){const{Markdown,Text}=discord;return React.createElement("div",{className:"kernel-card"},React.createElement("div",{className:"kernel-card-tools"},React.createElement(ToolButton,{label:"Open Path",icon:"Folder",onClick:()=>openItem(pkg.path)}),React.createElement(ToolButton,{danger:true,label:"Delete",icon:"Trash",onClick:()=>Electron.trashItem(pkg.path)})),React.createElement("div",{className:"kernel-card-header"},React.createElement(Text,{className:"kernel-card-name"},pkg.name)),pkg.description!=null&&React.createElement(Text,{className:"kernel-card-desc"},React.createElement(Markdown,null,pkg.description)),React.createElement("div",{className:"kernel-footer"},React.createElement(SwitchWrapper,{value:pkg.enabled,disabled:pkg.id==="kernel-settings",onChange:value=>{if(!value)kernel.packages.stopPackage(pkg.id);else kernel.packages.startPackage(pkg.id)}})))}\n;// CONCATENATED MODULE: ./src/renderer/components/panel.tsx\nconst panel_kernel=window.kernel;function KernelPanel(){const{Forms:{FormTitle}}=discord;return React.createElement("div",{className:"kernel-panel"},React.createElement(FormTitle,{tag:FormTitle.Tags.H1},"Packages"),React.createElement("div",{className:"kernel-card-scroller"},Object.values(panel_kernel.packages.getPackages()).map(pkg=>React.createElement(KernelCard,{pkg:pkg,key:pkg.id??pkg.name}))))}\n;// CONCATENATED MODULE: ./src/renderer/modules/discord.ts\nconst DiscordModules=memoize({get Moment(){return webpack.findByProps("momentProperties")}});/* harmony default export */ const modules_discord = (DiscordModules);\n;// CONCATENATED MODULE: ./src/renderer/modules/makelazy.ts\nfunction makeLazy(factory,fallback){return function LazyComponent(props){const[state,setState]=React.useState({resolved:false,value:void 0});React.useEffect(()=>{if(state.resolved)return;factory(props).then(value=>{setState({value,resolved:true})})},[state]);return state.resolved?state.value:React.createElement(fallback,props)}}\n;// CONCATENATED MODULE: ./src/renderer/modules/simplegit.ts\nconst period="@@@===@@@";const commitFields=["hash","hash_short","author","date","message"];const hashFields=["short","full"];const child_process=SettingsNative.requireModule("child_process");class Git{static executeCmd(cmd,cwd){return new Promise((resolve,reject)=>{child_process.exec(cmd,{cwd},(error,stdout)=>{if(error)return reject(error);resolve(stdout)})})}static async isInstalled(){try{await this.executeCmd("git --version");return true}catch{return false}}static async isRepo(cwd){try{const result=await this.executeCmd("git rev-parse --is-inside-work-tree",cwd);return result==="true"}catch{return false}}static async getBranchName(cwd){try{const result=await this.executeCmd("git branch -a",cwd);if(!result)return null;return result.slice(2,result.indexOf("\\n"))}catch(error){console.error(error);return null}}static async getLatestCommit(cwd,target="master"){try{return this.parsePeriods(hashFields,await this.executeCmd(`git log -1 ${target} --pretty=format:"%h${period}%H"`,cwd))}catch(error){console.error(error);return{hasError:true}}}static async getDiff(cwd,target="master"){try{const result=await this.executeCmd(`git log ${target}..origin/${target} --pretty=format:"%H${period}%h${period}%an${period}%ar${period}%s"`,cwd);if(!result)return[];return result.split("\\n").map(p=>this.parsePeriods(commitFields,p))}catch(error){console.error(error);return[]}}static parsePeriods(fields,out){return Object.fromEntries(out.split(period).map((c,i)=>[fields[i],c]))}}\n;// CONCATENATED MODULE: ./src/renderer/components/icons/shield.tsx\nfunction shield_extends(){shield_extends=Object.assign||function(target){for(var i=1;iReact.createElement("svg",shield_extends({xmlns:"http://www.w3.org/2000/svg",height:"24",viewBox:"0 0 24 24",width:"24"},props),React.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),React.createElement("path",{d:"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z",fill:"currentColor"}));const Warning=props=>React.createElement("svg",shield_extends({xmlns:"http://www.w3.org/2000/svg","enable-background":"new 0 0 24 24",height:"24",viewBox:"0 0 24 24",width:"24"},props),React.createElement("g",null,React.createElement("path",{d:"M0,0h24v24H0V0z",fill:"none"})),React.createElement("g",null,React.createElement("path",{d:"M12,2L4,5v6.09c0,5.05,3.41,9.76,8,10.91c4.59-1.15,8-5.86,8-10.91V5L12,2z M13,16h-2v-2h2V16z M13,12h-2V7h2V12z",fill:"currentColor"})));var Types;(function(Types){Types["VERIFIED"]="VERIFIED";Types["WARNING"]="WARNING"})(Types||(Types={}));const Shield=({type,...props})=>{switch(type){case Types.VERIFIED:return React.createElement(Verified,shield_extends({},props));case Types.WARNING:return React.createElement(Warning,shield_extends({},props));default:return null}};Shield.Types=Types;/* harmony default export */ const shield = (Shield);\n;// CONCATENATED MODULE: ./src/renderer/components/icons/update_available.tsx\nfunction update_available_extends(){update_available_extends=Object.assign||function(target){for(var i=1;ichild?.props?.when)??def}function Match({when,children}){return children}function For({each,children}){const result=[];for(let i=0;i{Promise.resolve(factory()).then(result=>{setState({loaded:typeof result==="boolean"?true:!!result,result:result})}).catch(console.error)};React.useEffect(handleFetch,deps??[]);return{...state,fetch(){setState({loaded:false,result:null});handleFetch()}}}const LoadingSpinner=()=>{const{Spinner}=discord;return React.createElement(Spinner,{type:Spinner.Type.LOW_MOTION,className:"ksu-spinner"})};const CurrentBranch=makeLazy(async({gitLoaded})=>{if(!gitLoaded)return null;const{Link}=discord;const branch=await Git.getBranchName(updates_fs.current);return React.createElement(Link,{href:`https://github.com/strencher-kernel/settings/tree/${branch}`},branch)},LoadingSpinner);const CurrentCommitHash=makeLazy(async({gitLoaded})=>{if(!gitLoaded)return null;const{Text,Link}=discord;const hash=await Git.getLatestCommit(updates_fs.current,await Git.getBranchName(updates_fs.current));if(hash.hasError)return React.createElement(Text,{color:Text.Colors.RED},"error");return React.createElement(Link,{href:`https://github.com/strencher-kernel/settings/tree/${hash.full}`},hash.short)},LoadingSpinner);let needsReload=false;function UpdaterPanel(){const{Moment}=modules_discord;const[errorMessage,setError]=React.useState(null);const{Link,Button,Text,Flex,Forms:{FormTitle,FormNotice,FormDivider,FormItem},Spinner}=discord;const git=useGitCommand(()=>Git.isInstalled());const updates=useGitCommand(async()=>{if(!git.loaded||!git.result)return[];return Git.getDiff(updates_fs.current)},[git.loaded]);const lastUpdate=Moment(Storage.use(()=>Storage.get("updater.lastFetch",new Date)));return React.createElement("div",{className:"kernel-panel"},React.createElement(FormTitle,{tag:FormTitle.Tags.H1},"Updates"),React.createElement(Show,{when:git.loaded,fallback:React.createElement(Spinner,{type:Spinner.Type.WANDERING_CUBES})},React.createElement(Show,{when:!git.result},React.createElement(FormNotice,{type:FormNotice.Types.DANGER,className:"ks-marginBottom20",title:"Git installation not found!",imageData:{src:"/assets/6e97f6643e7df29b26571d96430e92f4.svg",width:60,height:60},body:React.createElement("span",null,"Currently KernelSettings relies on your local git installation. Please install git to use this updater.")})),React.createElement(Show,{when:errorMessage!=null},React.createElement(FormNotice,{type:FormNotice.Types.DANGER,className:"ks-marginBottom20",title:"Error occurred",imageData:{src:"/assets/6e97f6643e7df29b26571d96430e92f4.svg",width:60,height:60},body:React.createElement("span",null,errorMessage)})),React.createElement(Show,{when:errorMessage==null&&needsReload},React.createElement(FormNotice,{type:FormNotice.Types.WARNING,className:"ks-marginBottom20",title:"Reload required",imageData:{src:"/assets/6e97f6643e7df29b26571d96430e92f4.svg",width:60,height:60},body:React.createElement("span",null,"Client reload is required in order to make changes take affect.")})),React.createElement(Show,{when:git.result},React.createElement(Flex,{className:"ksu-card",direction:Flex.Direction.VERTICAL},React.createElement(Flex,{justify:Flex.Justify.BETWEEN,align:Flex.Align.CENTER},React.createElement(Flex,{className:"ksu-shield-container",direction:Flex.Direction.HORIZONTAL,align:Flex.Align.START,justify:Flex.Justify.CENTER},React.createElement(Show,{when:updates.loaded,fallback:React.createElement(UpdateAvailable,{width:"70",height:"70",className:"ks-update-available ksu-shield"})},React.createElement(shield,{type:updates.result?.length>0?shield.Types.WARNING:shield.Types.VERIFIED,width:"70",height:"70",className:`ksu-shield ${updates.result?.length>0?"ksu-shield-warn":"ksu-shield-ok"}`})),React.createElement(Flex.Child,null,React.createElement(Text,{size:Text.Sizes.SIZE_24,color:Text.Colors.HEADER_PRIMARY},React.createElement(Switch,{default:"Everything is up to date!"},React.createElement(Match,{when:!updates.loaded},"Loading..."),React.createElement(Match,{when:updates.result?.length>0},"Something needs to be updated!"))),React.createElement(Text,{size:Text.Sizes.SIZE_14,color:Text.Colors.HEADER_SECONDARY},"Last Checked: ",lastUpdate.calendar()))),React.createElement("div",{className:"ksu-git-info"},React.createElement(Text,{className:"ksu-git-info-item"},"Branch: ",React.createElement(CurrentBranch,{gitLoaded:!!git.result})),React.createElement(Text,{className:"ksu-git-info-item"},"Commit: ",React.createElement(CurrentCommitHash,{gitLoaded:!!git.result})))),React.createElement(FormDivider,{className:"ksu-divider"}),React.createElement(Flex,{direction:Flex.Direction.HORIZONTAL},React.createElement(Button,{disabled:!updates.loaded,color:Button.Colors.BRAND,size:Button.Sizes.SMALL,className:"ksu-button",onClick:()=>{updates.fetch();Storage.set("updater.lastFetch",new Date)}},"Check for Updates"),React.createElement(Show,{when:updates.result?.length>0},React.createElement(Button,{disabled:!updates.loaded,color:Button.Colors.YELLOW,size:Button.Sizes.SMALL,className:"ksu-button",onClick:()=>{Git.executeCmd("git pull",updates_fs.current).then(()=>{needsReload=true;updates.fetch()}).catch(error=>{Logger.error("Updater","Failed to update!",error);setError("Error occurred while updating kernel settings. Check your console (Ctrl/Cmd + Shift + I) and report any errors.")})}},"Update")),React.createElement(Show,{when:needsReload},React.createElement(Button,{color:Button.Colors.GREEN,size:Button.Sizes.SMALL,className:"ksu-button ksu-reload-button",onClick:()=>{window.location.reload()}},"Reload ",React.createElement(UpdateAvailable,null)))),React.createElement(Show,{when:updates.result?.length>0},React.createElement(FormDivider,{className:"ksu-divider"}),React.createElement(FormItem,{title:"Recent Commits",tag:"h5"},React.createElement(For,{each:updates.result},(commit,index)=>React.createElement("div",{className:"ksu-commit",key:index},React.createElement("span",{className:"ksu-commit-hash"},React.createElement(Link,{href:`https://github.com/strencher-kernel/settings/commit/${commit.hash}`},commit.hash_short)),React.createElement("span",{className:"ksu-commit-name"},commit.message),React.createElement("span",{className:"ksu-commit-author-label"}," by "),React.createElement("span",{className:"ksu-commit-author"},React.createElement("img",{className:"ksu-commit-author-avatar",src:`https://github.com/${commit.author}.png?size=20`}),React.createElement("span",{className:"ksu-commit-author-name"},commit.author))))))))))}\n;// CONCATENATED MODULE: ./src/renderer/modules/patcher.ts\nvar Patcher;(function(Patcher){const patches=new Set;function patch(module,func,callback,before=false){const original=module[func];const unpatch=()=>{module[func]=original};module[func]=function(){if(before){try{Reflect.apply(callback,this,arguments)}catch(error){console.error("[Kernel:patcher] Error during before patch:",error)}}let returnValue=Reflect.apply(original,this,arguments);if(before)return returnValue;try{const tempRet=Reflect.apply(callback,this,[arguments,returnValue]);if(tempRet!=null)returnValue=tempRet}catch(error1){console.error("[Kernel:patcher] Error during patch:",error1)}return returnValue};Object.assign(module[func],original,{toString(){return original.toString()}});patches.add(unpatch);return unpatch}Patcher.patch=patch;function unpatchAll(){for(const unpatch of patches)unpatch()}Patcher.unpatchAll=unpatchAll})(Patcher||(Patcher={}))\n;// CONCATENATED MODULE: ./src/renderer/modules/settings.ts\nconst win=window;var SettingsRenderer;(function(SettingsRenderer1){let initialized=false;var panels=SettingsRenderer1.panels=win["__kernel_settings_cache__"]??[{section:"DIVIDER"},{section:"HEADER",label:"Kernel",id:"kernel-settings"}];function register(name,render){const panel={section:`Kernel-${name}`,label:name,id:`kernel-settings-${name}`,className:`kernel-settings`,element:typeof render==="function"?render:render.render,...typeof render==="object"?render:{}};SettingsRenderer.panels.push(panel);SettingsRenderer.panels.sort((a,b)=>a.order-b.order);return()=>{const index=SettingsRenderer.panels.indexOf(panel);if(index<0)return false;SettingsRenderer.panels.splice(index,1);return true}}SettingsRenderer1.register=register;async function initialize(){if(initialized)return;initialized=true;const SettingsView=await webpack.findLazy(webpack.Filters.byDisplayName("SettingsView"));if(!win["__kernel_settings_cache__"])Patcher.patch(SettingsView.prototype,"getPredicateSections",function(_,res){if(!Array.isArray(res)||!res.some(e=>e?.section?.toLowerCase()==="changelog")||res.some(s=>s?.id==="kernel-settings"))return;const index=res.findIndex(s=>s?.section?.toLowerCase()==="changelog")-1;if(index<0)return;res.splice(index,0,...SettingsRenderer.panels)});events.addEventListener("reload-core",()=>{win["__kernel_settings_cache__"]=panels})}SettingsRenderer1.initialize=initialize})(SettingsRenderer||(SettingsRenderer={}))\n;// CONCATENATED MODULE: ./src/renderer/index.tsx\nconst renderer_fs=SettingsNative.requireModule("fs");const renderer_path=SettingsNative.requireModule("path");var Core;(function(Core){let styleElement=null;async function start(){await webpack.whenReady;Logger.log("Core","Started.");window.React=webpack.findByProps("createElement","useEffect");if(false){}SettingsRenderer.initialize();registerSettings();Storage.initialize();loadStyles();exposeGlobals()}Core.start=start;function registerSettings(){let flush=[SettingsRenderer.register("Updates",{render:()=>React.createElement(UpdaterPanel,null),order:2}),SettingsRenderer.register("Packages",{render:()=>React.createElement(KernelPanel,null),order:1})];events.addEventListener("reload-core",()=>{for(let i=0;iDispatcher.dispatch({type:"KERNEL_SETTINGS_INIT"}))}Core.exposeGlobals=exposeGlobals;function loadStyles(){const location=renderer_path.resolve(renderer_fs.current,"style.css");if(!renderer_fs.isFile(location))return;const load=function(){const styles=renderer_fs.readFile(location,"utf8");styleElement=document.head.appendChild(Object.assign(document.createElement("style"),{id:"kernel-style",textContent:styles}))};load();events.addEventListener("reload-css",()=>{styleElement.remove();load();Logger.log("Styles","Reloaded.")})}Core.loadStyles=loadStyles;function stop(){Patcher.unpatchAll();styleElement?.remove()}Core.stop=stop})(Core||(Core={}))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bW9kdWxlcy9ldmVudHMudHM/YzBmMSIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9sb2dnZXIudHM/NjRlNiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9kZXZzZXJ2ZXIudHM/ODdmYiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9zdG9yYWdlLnRzPzBmMDYiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL21vZHVsZXMvbWVtb2l6ZS50cz8wZDQ0Iiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9tb2R1bGVzL3dlYnBhY2sudHM/NTU4YSIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvY29tcG9uZW50cy9kaXNjb3JkLnRzP2U0YWUiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL2NvbXBvbmVudHMvY2FyZC50c3g/ZTIyYiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvY29tcG9uZW50cy9wYW5lbC50c3g/YmZkZSIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9kaXNjb3JkLnRzP2IzYzkiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL21vZHVsZXMvbWFrZWxhenkudHM/NjIwNSIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9zaW1wbGVnaXQudHM/NGM3MiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvY29tcG9uZW50cy9pY29ucy9zaGllbGQudHN4P2MxZTMiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL2NvbXBvbmVudHMvaWNvbnMvdXBkYXRlX2F2YWlsYWJsZS50c3g/MmM1OCIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvY29tcG9uZW50cy9wcmltaXRpdmVzLnRzeD8wNTg0Iiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL3VwZGF0ZXMudHN4PzgyZmEiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL21vZHVsZXMvcGF0Y2hlci50cz8xNGFiIiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9tb2R1bGVzL3NldHRpbmdzLnRzPzdjYTQiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL2luZGV4LnRzeD84OGE5Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEV2ZW50czogRXZlbnRUYXJnZXQgJiB7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudDogXCJyZWxvYWQtY3NzXCIgfCBcInJlbG9hZC1jb3JlXCIsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvbmNlPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudDogXCJyZWxvYWQtY3NzXCIgfCBcInJlbG9hZC1jb3JlXCIsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKTogdm9pZDtcbn0gPSBuZXcgRXZlbnRUYXJnZXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRzOyIsImV4cG9ydCBuYW1lc3BhY2UgTG9nZ2VyIHtcbiAgICB0eXBlIFR5cGVzID0gXCJsb2dcIiB8IFwid2FyblwiIHwgXCJlcnJvclwiIHwgXCJpbmZvXCI7XG5cbiAgICBmdW5jdGlvbiBwYXJzZVR5cGUodHlwZTogVHlwZXMpOiBzdHJpbmcge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJlcnJvclwiOlxuICAgICAgICAgICAgY2FzZSBcImluZm9cIjpcbiAgICAgICAgICAgIGNhc2UgXCJlcnJvclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIFwibG9nXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2dNZXNzYWdlKHR5cGU6IFR5cGVzLCBtb2R1bGU6IFN0cmluZywgLi4ubWVzc2FnZTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc29sZVtwYXJzZVR5cGUodHlwZSldKGAlY1tLZXJuZWxTZXR0aW5nc10lYyAlY1ske21vZHVsZX1dJWNgLCBcImNvbG9yOiAjQThENDZCOyBmb250LXdlaWdodDogNzAwO1wiLCBcIlwiLCBcImNvbG9yOiAjQThENDZCXCIsIFwiXCIsIC4uLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBsb2cobW9kdWxlLCAuLi5tZXNzYWdlKSB7bG9nTWVzc2FnZShcImxvZ1wiLCBtb2R1bGUsIC4uLm1lc3NhZ2UpO31cbiAgICBleHBvcnQgZnVuY3Rpb24gaW5mbyhtb2R1bGUsIC4uLm1lc3NhZ2UpIHtsb2dNZXNzYWdlKFwiaW5mb1wiLCBtb2R1bGUsIC4uLm1lc3NhZ2UpO31cbiAgICBleHBvcnQgZnVuY3Rpb24gd2Fybihtb2R1bGUsIC4uLm1lc3NhZ2UpIHtsb2dNZXNzYWdlKFwid2FyblwiLCBtb2R1bGUsIC4uLm1lc3NhZ2UpO31cbiAgICBleHBvcnQgZnVuY3Rpb24gZXJyb3IobW9kdWxlLCAuLi5tZXNzYWdlKSB7bG9nTWVzc2FnZShcImVycm9yXCIsIG1vZHVsZSwgLi4ubWVzc2FnZSk7fVxufSIsImltcG9ydCBFdmVudHMgZnJvbSBcIi4vZXZlbnRzXCI7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4vbG9nZ2VyXCI7XG5cbmNvbnN0IGZzID0gU2V0dGluZ3NOYXRpdmUucmVxdWlyZU1vZHVsZShcImZzXCIpO1xuY29uc3QgcGF0aCA9IFNldHRpbmdzTmF0aXZlLnJlcXVpcmVNb2R1bGUoXCJwYXRoXCIpO1xuXG5leHBvcnQgbmFtZXNwYWNlIERldlNlcnZlciB7XG4gICAgZXhwb3J0IGxldCB3czogV2ViU29ja2V0ID0gbnVsbDtcbiAgICBleHBvcnQgbGV0IGV4cGVjdGVkQ2xvc2UgPSBmYWxzZTtcblxuICAgIGNvbnN0IHRyeUpTT04gPSBmdW5jdGlvbiAoanNvbjogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghd3MpIHJldHVybjtcblxuICAgICAgICBMb2dnZXIubG9nKFwiRGV2U2VydmVyXCIsIFwiQ2xvc2luZyBXZWJTb2NrZXRcIik7XG4gICAgICAgIERldlNlcnZlci53cyA9IHdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICAgIFxuICAgICAgICBpZiAod2luLktlcm5lbERldlNlcnZlciAmJiB3aW4uS2VybmVsRGV2U2VydmVyLndzICE9IG51bGwpIHtcbiAgICAgICAgICAgIExvZ2dlci5sb2coXCJEZXZTZXJ2ZXJcIiwgXCJUYWtpbmcgb3ZlciBzb2NrZXRcIik7XG4gICAgICAgICAgICB3cyA9IERldlNlcnZlci53cyA9IHdpbi5LZXJuZWxEZXZTZXJ2ZXIud3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nKFwiRGV2U2VydmVyXCIsIFwiTG9hZGluZyBkZXZlbG9wbWVudCBzZXJ2ZXIuLi5cIik7XG4gICAgICAgICAgICB3cyA9IERldlNlcnZlci53cyA9IG5ldyBXZWJTb2NrZXQoXCJ3czovL2xvY2FsaG9zdDo1NjU2XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luLktlcm5lbERldlNlcnZlciA9IERldlNlcnZlcjtcbiAgICAgICAgd3Mub25tZXNzYWdlID0gaGFuZGxlTWVzc2FnZTtcbiAgICAgICAgd3Mub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgTG9nZ2VyLmVycm9yKFwiRGV2U2VydmVyXCIsIFwiRmF0YWwgZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICB3cy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgICAgRGV2U2VydmVyLndzID0gd3MgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFleHBlY3RlZENsb3NlKSBMb2dnZXIuZXJyb3IoXCJEZXZTZXJ2ZXJcIiwgXCJDb25uZWN0aW9uIGNsb3NlZC4uLlwiKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZENvcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIExvZ2dlci5sb2coXCJEZXZTZXJ2ZXJcIiwgXCJSZWxvYWRpbmcgY29yZS4uLlwiKTtcblxuICAgICAgICBFdmVudHMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJyZWxvYWQtY29yZVwiKSk7XG5cbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlKHBhdGgucmVzb2x2ZShmcy5jdXJyZW50LCBcInJlbmRlcmVyLmpzXCIpLCBcInV0ZjhcIiBhcyBhbnkpO1xuICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuICAgICAgICAgICAgdHlwZTogXCJtb2R1bGVcIixcbiAgICAgICAgICAgIHRleHRDb250ZW50OiBjb250ZW50ICsgXCI7X193ZWJwYWNrX2V4cG9ydHNfX0NvcmUuc3RhcnQoKTtcIixcbiAgICAgICAgICAgIG9ubG9hZDogKCkgPT4gc2NyaXB0LnJlbW92ZSgpXG4gICAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZFN0eWxlcygpOiB2b2lkIHtcbiAgICAgICAgRXZlbnRzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVsb2FkLWNzc1wiKSk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiByZWxvYWQodHlwZTogXCJhbGxcIiB8IFwiY29yZVwiIHwgXCJzdHlsZXNcIik6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjb3JlXCI6IHtcbiAgICAgICAgICAgICAgICByZWxvYWRDb3JlKCk7XG4gICAgICAgICAgICB9IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInN0eWxlc1wiOiB7XG4gICAgICAgICAgICAgICAgcmVsb2FkU3R5bGVzKCk7XG4gICAgICAgICAgICB9IGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBoYW5kbGVNZXNzYWdlID0gKHtkYXRhfSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdHJ5SlNPTihkYXRhKTtcbiAgICAgICAgaWYgKCFtZXNzYWdlKSByZXR1cm4gTG9nZ2VyLmVycm9yKFwiRGV2U2VydmVyXCIsIFwiVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2U6XCIsIGRhdGEpO1xuXG4gICAgICAgIHN3aXRjaCAobWVzc2FnZS5vcGVyYXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgXCJIRUxMT1wiOiB7XG4gICAgICAgICAgICAgICAgc2VuZChcIkhFTExPXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50OiBgRGlzY29yZC0+JHsod2luZG93IGFzIGFueSkuRGlzY29yZE5hdGl2ZS5hcHAuZ2V0UmVsZWFzZUNoYW5uZWwoKX1gXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBMb2dnZXIubG9nKFwiRGV2U2VydmVyXCIsIFwiV1MgQ29ubmVjdGVkXCIpO1xuICAgICAgICAgICAgfSBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIlJFTE9BRF9TVFlMRVNcIjoge1xuICAgICAgICAgICAgICAgIHJlbG9hZFN0eWxlcygpO1xuICAgICAgICAgICAgfSBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIlJFTE9BRF9DT1JFXCI6IHtcbiAgICAgICAgICAgICAgICByZWxvYWRDb3JlKCk7XG4gICAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgTG9nZ2VyLmxvZyhcIkRldlNlcnZlclwiLCBcIlVua25vd24gb3BlcmF0aW9uOlwiLCBtZXNzYWdlLm9wZXJhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNlbmQob3BlcmF0aW9uOiBcIkhFTExPXCIgfCBcIkNMT1NFXCIsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIXdzKSB0aHJvdyBcIlRyaWVkIHNlbmRpbmcgbWVzc2FnZSB3aXRob3V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWRcIjtcblxuICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9KSk7XG4gICAgfTtcbn0iLCJpbXBvcnQgdHlwZSB7RGlyZW50fSBmcm9tIFwiZnNcIjtcblxuY29uc3QgZnMgPSBTZXR0aW5nc05hdGl2ZS5yZXF1aXJlTW9kdWxlKFwiZnNcIik7XG5jb25zdCBwYXRoID0gU2V0dGluZ3NOYXRpdmUucmVxdWlyZU1vZHVsZShcInBhdGhcIik7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RvcmFnZSB7XG4gICAgZXhwb3J0IGxldCBsaXN0ZW5lcnM6IFNldDxGdW5jdGlvbj4gPSBuZXcgU2V0KCk7XG4gICAgZXhwb3J0IGxldCBsb2NhdGlvbiA9IFwiXCI7XG4gICAgZXhwb3J0IGNvbnN0IGdyb3VwczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIHRyeUpTT04oanNvbjogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gZW1pdCguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSBbLi4ubGlzdGVuZXJzXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdHJ5IHtjYWxsYmFja3NbaV0oLi4uYXJncyk7fVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7Y29uc29sZS5lcnJvcihlcnJvcik7fVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBvbihsaXN0ZW5lcjogRnVuY3Rpb24pOiAoKSA9PiBib29sZWFuIHtcbiAgICAgICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG5cbiAgICAgICAgcmV0dXJuIG9mZi5iaW5kKGxpc3RlbmVyKTtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG9mZihsaXN0ZW5lcjogRnVuY3Rpb24pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gdXNlPFQ+KGZhY3Rvcnk6ICgpID0+IFQpOiBUIHtcbiAgICAgICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShmYWN0b3J5KCkpO1xuXG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmUgPSBvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoZmFjdG9yeSgpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gdm9pZCByZW1vdmUoKTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9O1xuIFxuICAgIGV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBsb2NhdGlvbiA9IFN0b3JhZ2UubG9jYXRpb24gPSBwYXRoLnJlc29sdmUoZnMuY3VycmVudCwgXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCJzdG9yYWdlXCIsIFwic2V0dGluZ3NcIik7XG4gICAgICAgIGlmICghZnMuZXhpc3RzKGxvY2F0aW9uKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmcy5jcmVhdGVEaXIobG9jYXRpb24sIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgZmlsZXMgPSBmcy5yZWFkRGlyKGxvY2F0aW9uLCBcInV0ZjhcIiksIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXSBhcyBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRzKHBhdGguam9pbihsb2NhdGlvbiwgZmlsZSkpLmlzRmlsZSgpIHx8ICFmaWxlLmVuZHNXaXRoKFwiLmpzb25cIikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBmaWxlLnNsaWNlKDAsIGZpbGUuaW5kZXhPZihcIi5qc29uXCIpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZ3JvdXBzLnNldChncm91cCwgdHJ5SlNPTihmcy5yZWFkRmlsZShwYXRoLmpvaW4obG9jYXRpb24sIGZpbGUpLCBcInV0ZjhcIiBhcyBhbnkpIGFzIHN0cmluZykpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXQoZ3JvdXA6IHN0cmluZywgZGVmID0gbnVsbCkge1xuICAgICAgICBpZiAofmdyb3VwLmluZGV4T2YoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBbaWQsIC4uLnBhdGhzXSA9IGdyb3VwLnNwbGl0KFwiLlwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhdGhzLnJlZHVjZSgoY3VyciwgbmFtZSkgPT4gY3Vycj8uW25hbWVdLCBncm91cHMuZ2V0KGlkKSA/PyBkZWYpO1xuICAgICAgICB9IFxuXG4gICAgICAgIHJldHVybiBncm91cHMuZ2V0KGdyb3VwKSA/PyBkZWY7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXQoZ3JvdXA6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgICAgIGlmICh+Z3JvdXAuaW5kZXhPZihcIi5cIikpIHtcbiAgICAgICAgICAgIGNvbnN0IFtpZCwgLi4ucGF0aHNdID0gZ3JvdXAuc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgZ3JvdXAgPSBpZDtcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwYXRocy5wb3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZCA9IGdyb3Vwcy5nZXQoaWQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc3RvcmVkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSBwYXRocy5yZWR1Y2UoKGN1cnIsIG5hbWUpID0+IGN1cnI/LltuYW1lXSwgZ3JvdXBzLmdldChpZCkpO1xuICAgICAgICAgICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiR3JvdXAgcGF0aCBub3QgZm91bmQhXCIpO1xuXG4gICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BdID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJlZSA9IHBhdGhzLnJlZHVjZSgoY3VyciwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJbbmFtZV0pIGN1cnJbbmFtZV0gPSB7fTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycltuYW1lXTtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgICAgICB0cmVlW3Byb3BdID0gZGF0YTtcbiAgICAgICAgICAgICAgICBncm91cHMuc2V0KGlkLCB0cmVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyb3Vwcy5zZXQoZ3JvdXAsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnMud3JpdGVGaWxlKHBhdGguam9pbihTdG9yYWdlLmxvY2F0aW9uLCBncm91cCArIFwiLmpzb25cIiksIEpTT04uc3RyaW5naWZ5KGdyb3Vwcy5nZXQoZ3JvdXApLCBudWxsLCBcIlxcdFwiKSk7XG4gICAgICAgIGVtaXQoZ3JvdXApO1xuICAgIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVtb2l6ZTxUID0gYW55PihvYmplY3Q6IFQpOiB7W2tleSBpbiBrZXlvZiBUXTogYW55fSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gICAgY29uc3QgY2xvbmUgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7XG4gICAgICAgIGlmICghZGVzY3JpcHRvciB8fCAhZGVzY3JpcHRvci5nZXQpIHtcbiAgICAgICAgICAgIGNsb25lW2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2V0dGVyID0gZGVzY3JpcHRvci5nZXQ7XG4gICAgICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb25lLCBrZXksIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICh2YWx1ZSA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lIGFzIGFueTtcbn07IiwiLy8gQHRzLW5vY2hlY2tcblxuaWYgKHR5cGVvZiAoQXJyYXkucHJvdG90eXBlLmF0KSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgJ2F0Jywge1xuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYXQoaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA8IDAgPyB0aGlzW3RoaXMubGVuZ3RoIC0gTWF0aC5hYnMoaW5kZXgpXSA6IHRoaXNbaW5kZXhdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSlcbn1cblxuaWYgKHR5cGVvZiAoc2V0SW1tZWRpYXRlKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHdpbmRvdy5zZXRJbW1lZGlhdGUgPSAoY2FsbGJhY2s6IGFueSkgPT4gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJzIHtcbiAgICBzdGF0aWMgYnlQcm9wcyguLi5wcm9wczogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIChtb2R1bGU6IGFueSkgPT4gcHJvcHMuZXZlcnkocHJvcCA9PiBwcm9wIGluIG1vZHVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGJ5RGlzcGxheU5hbWUobmFtZTogc3RyaW5nLCBkZWYgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gKG1vZHVsZTogYW55KSA9PiAoZGVmID8gKG1vZHVsZSA9IG1vZHVsZS5kZWZhdWx0KSA6IG1vZHVsZSkgJiYgdHlwZW9mIChtb2R1bGUpID09PSBcImZ1bmN0aW9uXCIgJiYgbW9kdWxlLmRpc3BsYXlOYW1lID09PSBuYW1lO1xuICAgIH1cblxuICAgIHN0YXRpYyBieVR5cGVTdHJpbmcoLi4uc3RyaW5nczogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIChtb2R1bGU6IGFueSkgPT4gbW9kdWxlLnR5cGUgJiYgKG1vZHVsZSA9IG1vZHVsZS50eXBlPy50b1N0cmluZygpKSAmJiBzdHJpbmdzLmV2ZXJ5KHN0ciA9PiBtb2R1bGUuaW5kZXhPZihzdHIpID4gLTEpO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgTW9kdWxlRmlsdGVyID0gKG1vZHVsZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuO1xuXG5jbGFzcyBXZWJwYWNrTW9kdWxlIHtcbiAgICB3aGVuUmVhZHk6IFByb21pc2U8dm9pZD47XG4gICAgY2FjaGUgPSBudWxsO1xuICAgICNsaXN0ZW5lcnMgPSBuZXcgU2V0KCk7XG4gICAgZ2V0IEZpbHRlcnMoKSB7cmV0dXJuIEZpbHRlcnM7fVxuICAgIGdldCBjaHVua05hbWUoKSB7cmV0dXJuIFwid2VicGFja0NodW5rZGlzY29yZF9hcHBcIjt9XG4gICAgZ2V0IGlkKCkge3JldHVybiBTeW1ib2woXCJrZXJuZWwtc2V0dGluZ3NcIik7fVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMud2hlblJlYWR5ID0gdGhpcy53YWl0Rm9yR2xvYmFsLnRoZW4oKCkgPT4gbmV3IFByb21pc2UoYXN5bmMgb25SZWFkeSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbRGlzcGF0Y2hlciwgVXNlclN0b3JlXSA9IGF3YWl0IHRoaXMuZmluZEJ5UHJvcHMoXG4gICAgICAgICAgICAgICAgW1wiX2Rpc3BhdGNoXCIsIFwiZGlzcGF0Y2hcIl0sIFtcImdldEN1cnJlbnRVc2VyXCIsIFwiX2Rpc3BhdGNoVG9rZW5cIl0sXG4gICAgICAgICAgICAgICAge2NhY2hlOiBmYWxzZSwgYnVsazogdHJ1ZSwgd2FpdDogdHJ1ZSwgZm9yZXZlcjogdHJ1ZX1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChVc2VyU3RvcmUuZ2V0Q3VycmVudFVzZXIoKSkgcmV0dXJuIG9uUmVhZHkoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgRGlzcGF0Y2hlci51bnN1YnNjcmliZShcIlNUQVJUX1NFU1NJT05cIiwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIERpc3BhdGNoZXIudW5zdWJzY3JpYmUoXCJDT05ORUNUSU9OX09QRU5cIiwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIG9uUmVhZHkoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIERpc3BhdGNoZXIuc3Vic2NyaWJlKFwiU1RBUlRfU0VTU0lPTlwiLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICBEaXNwYXRjaGVyLnN1YnNjcmliZShcIkNPTk5FQ1RJT05fT1BFTlwiLCBsaXN0ZW5lcik7XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLndoZW5SZWFkeS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBvcmlnaW5hbFB1c2ggPSB3aW5kb3dbdGhpcy5jaHVua05hbWVdLnB1c2g7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVB1c2ggPSAoY2h1bms6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgWywgbW9kdWxlc10gPSBjaHVuaztcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbW9kdWxlSWQgaW4gbW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbE1vZHVsZSA9IG1vZHVsZXNbbW9kdWxlSWRdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZXNbbW9kdWxlSWRdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFssIGV4cG9ydHNdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsTW9kdWxlLmFwcGx5KG9yaWdpbmFsTW9kdWxlLCBhcmdzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gWy4uLnRoaXMuI2xpc3RlbmVyc107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7bGlzdGVuZXJzW2ldKGV4cG9ydHMpO31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltXZWJwYWNrXVwiLCBcIkNvdWxkIG5vdCBmaXJlIGNhbGxiYWNrIGxpc3RlbmVyOlwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obW9kdWxlc1ttb2R1bGVJZF0sIG9yaWdpbmFsTW9kdWxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogb3JpZ2luYWxNb2R1bGUudG9TdHJpbmcuYmluZChvcmlnaW5hbE1vZHVsZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBfX29yaWdpbmFsOiBvcmlnaW5hbE1vZHVsZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxQdXNoLmFwcGx5KHdpbmRvd1t0aGlzLmNodW5rTmFtZV0sIFtjaHVua10pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvd1t0aGlzLmNodW5rTmFtZV0sIFwicHVzaFwiLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gaGFuZGxlUHVzaCxcbiAgICAgICAgICAgICAgICBzZXQ6IChuZXdQdXNoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUHVzaCA9IG5ld1B1c2g7XG5cbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvd1t0aGlzLmNodW5rTmFtZV0sIFwicHVzaFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaGFuZGxlUHVzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcjogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy4jbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI2xpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyOiBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy4jbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgZmluZExhenkoZmlsdGVyOiBGdW5jdGlvbik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGZyb21DYWNoZSA9IHRoaXMuZmluZE1vZHVsZShmaWx0ZXIpO1xuICAgICAgICBpZiAoZnJvbUNhY2hlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZyb21DYWNoZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAobTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBmaWx0ZXIobSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIHJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoIW0uZGVmYXVsdCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRNYXRjaCA9IGZpbHRlcihtLmRlZmF1bHQpO1xuICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdE1hdGNoKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKG0uZGVmYXVsdCk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlKCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZW1vdmUgPSB0aGlzLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgd2FpdEZvcihmaWx0ZXI6IE1vZHVsZUZpbHRlciwge3JldHJpZXMgPSAxMDAsIGFsbCA9IGZhbHNlLCBmb3JldmVyID0gZmFsc2UsIGRlbGF5ID0gNTB9ID0ge30pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IChpIDwgcmV0cmllcykgfHwgZm9yZXZlcjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLmZpbmRNb2R1bGUoZmlsdGVyLCB7YWxsLCBjYWNoZTogZmFsc2V9KTtcbiAgICAgICAgICAgIGlmIChtb2R1bGUpIHJldHVybiBtb2R1bGU7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gc2V0VGltZW91dChyZXMsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZU9wdGlvbnMoYXJncywgZmlsdGVyID0gdGhpbmcgPT4gKHR5cGVvZiAodGhpbmcpID09PSBcIm9iamVjdFwiICYmIHRoaW5nICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodGhpbmcpKSkge1xuICAgICAgICByZXR1cm4gW2FyZ3MsIGZpbHRlcihhcmdzLmF0KC0xKSkgPyBhcmdzLnBvcCgpIDoge31dO1xuICAgIH1cblxuICAgIHJlcXVlc3QoY2FjaGUgPSB0cnVlKSB7XG4gICAgICAgIGlmIChjYWNoZSAmJiB0aGlzLmNhY2hlKSByZXR1cm4gdGhpcy5jYWNoZTtcbiAgICAgICAgbGV0IHJlcSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh3aW5kb3dbdGhpcy5jaHVua05hbWVdKSkge1xuICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBbW3RoaXMuaWRdLCB7fSwgX193ZWJwYWNrX3JlcXVpcmVfXyA9PiByZXEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fXTtcbiAgICAgICAgICAgIHdlYnBhY2tDaHVua2Rpc2NvcmRfYXBwLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgd2VicGFja0NodW5rZGlzY29yZF9hcHAuc3BsaWNlKHdlYnBhY2tDaHVua2Rpc2NvcmRfYXBwLmluZGV4T2YoY2h1bmspLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZSkgdGhpcy5jYWNoZSA9IHJlcTtcblxuICAgICAgICByZXR1cm4gcmVxO1xuICAgIH1cblxuICAgIGZpbmRNb2R1bGUoZmlsdGVyOiBNb2R1bGVGaWx0ZXIsIHthbGwgPSBmYWxzZSwgY2FjaGUgPSB0cnVlLCBmb3JjZSA9IGZhbHNlLCBkZWZhdWx0OiBkZWZhdWx0RXhwb3J0cyA9IGZhbHNlfSA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgKGZpbHRlcikgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZvaWQgMDtcblxuICAgICAgICBjb25zdCBfX3dlYnBhY2tfcmVxdWlyZV9fID0gdGhpcy5yZXF1ZXN0KGNhY2hlKTtcbiAgICAgICAgY29uc3QgZm91bmQgPSBbXTtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gbnVsbDtcblxuICAgICAgICBpZiAoIV9fd2VicGFja19yZXF1aXJlX18pIHJldHVybjtcblxuICAgICAgICBjb25zdCB3cmFwRmlsdGVyID0gZnVuY3Rpb24gKG1vZHVsZTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgICAgICB0cnkge3JldHVybiBmaWx0ZXIobW9kdWxlLCBpbmRleCk7fVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPz89IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIF9fd2VicGFja19yZXF1aXJlX18uYykge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW2lkXS5leHBvcnRzO1xuICAgICAgICAgICAgaWYgKCFtb2R1bGUgfHwgbW9kdWxlID09PSB3aW5kb3cpIGNvbnRpbnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBtb2R1bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdyYXBGaWx0ZXIobW9kdWxlLCBpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWxsKSByZXR1cm4gbW9kdWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQucHVzaChtb2R1bGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZHVsZS5fX2VzTW9kdWxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZGVmYXVsdCAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbW9kdWxlLmRlZmF1bHQgIT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBGaWx0ZXIobW9kdWxlLmRlZmF1bHQsIGlkKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBkZWZhdWx0RXhwb3J0cyA/IG1vZHVsZSA6IG1vZHVsZS5kZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGwpIHJldHVybiBleHBvcnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQucHVzaChleHBvcnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JjZSAmJiBtb2R1bGUuX19lc01vZHVsZSkgZm9yIChjb25zdCBrZXkgaW4gbW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZHVsZVtrZXldKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyYXBGaWx0ZXIobW9kdWxlW2tleV0sIGlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWxsKSByZXR1cm4gbW9kdWxlW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQucHVzaChtb2R1bGVba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdyYXBGaWx0ZXIobW9kdWxlLCBpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWxsKSByZXR1cm4gbW9kdWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQucHVzaChtb2R1bGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW1dlYnBhY2tdIGZpbHRlciB0aHJldyBhbiBlcnJvci4gVGhpcyBjYW4gY2F1c2UgbGFnIHNwaWtlcyBhdCB0aGUgdXNlcidzIGVuZC4gUGxlYXNlIGZpeCBhc2FwLlxcblxcblwiLCBoYXNFcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbGwgPyBmb3VuZCA6IGZvdW5kWzBdO1xuICAgIH1cblxuICAgIGZpbmRNb2R1bGVzKGZpbHRlcjogTW9kdWxlRmlsdGVyKSB7cmV0dXJuIHRoaXMuZmluZE1vZHVsZShmaWx0ZXIsIHthbGw6IHRydWV9KTt9XG5cbiAgICBidWxrKC4uLm9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IFtmaWx0ZXJzLCB7d2FpdCA9IGZhbHNlLCAuLi5yZXN0fV0gPSB0aGlzLnBhcnNlT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZm91bmQgPSBuZXcgQXJyYXkoZmlsdGVycy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBzZWFyY2hGdW5jdGlvbiA9IHdhaXQgPyB0aGlzLndhaXRGb3IgOiB0aGlzLmZpbmRNb2R1bGU7XG4gICAgICAgIGNvbnN0IHdyYXBwZWRGaWx0ZXJzID0gZmlsdGVycy5tYXAoZmlsdGVyID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIGZpbHRlciA9IEZpbHRlcnMuYnlQcm9wcyguLi5maWx0ZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiAoZmlsdGVyKSA9PT0gXCJzdHJpbmdcIikgZmlsdGVyID0gRmlsdGVycy5ieURpc3BsYXlOYW1lKGZpbHRlcik7XG5cbiAgICAgICAgICAgIHJldHVybiAobSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7cmV0dXJuIGZpbHRlcihtKTt9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIGZhbHNlO31cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gc2VhcmNoRnVuY3Rpb24uY2FsbCh0aGlzLCAobW9kdWxlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd3JhcHBlZEZpbHRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB3cmFwcGVkRmlsdGVyc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlciAhPT0gXCJmdW5jdGlvblwiIHx8ICFmaWx0ZXIobW9kdWxlKSB8fCBmb3VuZFtpXSAhPSBudWxsKSBjb250aW51ZTtcbiAgICBcbiAgICAgICAgICAgICAgICBmb3VuZFtpXSA9IG1vZHVsZTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQuZmlsdGVyKFN0cmluZykubGVuZ3RoID09PSBmaWx0ZXJzLmxlbmd0aDtcbiAgICAgICAgfSwgcmVzdCk7XG5cbiAgICAgICAgaWYgKHdhaXQpIHJldHVybiByZXR1cm5WYWx1ZS50aGVuKCgpID0+IGZvdW5kKTtcblxuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuXG4gICAgZmluZEJ5UHJvcHMoLi4ub3B0aW9uczogYW55W10pIHtcbiAgICAgICAgY29uc3QgW3Byb3BzLCB7YnVsayA9IGZhbHNlLCB3YWl0ID0gZmFsc2UsIC4uLnJlc3R9XSA9IHRoaXMucGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmICghYnVsayAmJiAhd2FpdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE1vZHVsZShGaWx0ZXJzLmJ5UHJvcHMoLi4ucHJvcHMpLCByZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3YWl0ICYmICFidWxrKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0Rm9yKEZpbHRlcnMuYnlQcm9wcyguLi5wcm9wcyksIHJlc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1bGspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBwcm9wcy5tYXAoKHByb3BzQXJyYXk6IHN0cmluZ1tdKSA9PiBGaWx0ZXJzLmJ5UHJvcHMoLi4ucHJvcHNBcnJheSkpLmNvbmNhdCh7d2FpdCwgLi4ucmVzdH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idWxrKC4uLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIFxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZpbmRCeURpc3BsYXlOYW1lKC4uLm9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IFtkaXNwbGF5TmFtZXMsIHtidWxrID0gZmFsc2UsIHdhaXQgPSBmYWxzZSwgLi4ucmVzdH1dID0gdGhpcy5wYXJzZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKCFidWxrICYmICF3YWl0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kTW9kdWxlKEZpbHRlcnMuYnlEaXNwbGF5TmFtZShkaXNwbGF5TmFtZXNbMF0pLCByZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3YWl0ICYmICFidWxrKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0Rm9yKEZpbHRlcnMuYnlEaXNwbGF5TmFtZShkaXNwbGF5TmFtZXNbMF0pLCByZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChidWxrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gZGlzcGxheU5hbWVzLm1hcChmaWx0ZXJzLm1hcChGaWx0ZXJzLmJ5RGlzcGxheU5hbWUpKS5jb25jYXQoe3dhaXQsIGNhY2hlfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1bGsoLi4uZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmaW5kSW5kZXgoZmlsdGVyOiBNb2R1bGVGaWx0ZXIpIHtcbiAgICAgICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcblxuICAgICAgICB0aGlzLmZpbmRNb2R1bGUoKG1vZHVsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIobW9kdWxlKSkgZm91bmRJbmRleCA9IGluZGV4OyBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZvdW5kSW5kZXg7XG4gICAgfVxuXG4gICAgYXRJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodHJ1ZSk/LmNbaW5kZXhdO1xuICAgIH1cblxuICAgIGdldCB3YWl0Rm9yR2xvYmFsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgb25FeGlzdHMgPT4ge1xuICAgICAgICAgICAgd2hpbGUgKCFBcnJheS5pc0FycmF5KHdpbmRvd1t0aGlzLmNodW5rTmFtZV0pKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2Uoc2V0SW1tZWRpYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb25FeGlzdHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqQGRlcHJlY2F0ZWQgVXNlIFdlYnBhY2sud2hlblJlYWR5LnRoZW4oKCkgPT4ge30pIGluc3RlYWQuICovXG4gICAgYXN5bmMgd2FpdChjYWxsYmFjayA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2hlblJlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqQGRlcHJlY2F0ZWQgVXNlIFdlYnBhY2sud2hlblJlYWR5LnRoZW4oKCkgPT4ge30pIGluc3RlYWQuICovXG4gICAgZ2V0IHdoZW5FeGlzdHMoKSB7cmV0dXJuIHRoaXMud2FpdEZvckdsb2JhbDt9XG5cbiAgICAvKipAZGVwcmVjYXRlZCBVc2UgV2VicGFjay53aGVuUmVhZHkudGhlbigoKSA9PiB7fSkgaW5zdGVhZC4gKi9cbiAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogRnVuY3Rpb24pIHtcbiAgICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICAgICAgY2FzZSBcIkxPQURFRFwiOiByZXR1cm4gdGhpcy53aGVuUmVhZHkudGhlbihsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipAZGVwcmVjYXRlZCBAc2VlIFdlYnBhY2sub24gKi9cbiAgICBnZXQgb25jZSgpIHtyZXR1cm4gdGhpcy5vbjt9XG59XG5cbmNvbnN0IFdlYnBhY2sgPSBuZXcgV2VicGFja01vZHVsZTtcblxuZXhwb3J0IGRlZmF1bHQgV2VicGFjaztcbiIsImltcG9ydCBtZW1vaXplIGZyb20gXCIuLi9tb2R1bGVzL21lbW9pemVcIjtcclxuaW1wb3J0IFdlYnBhY2sgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja1wiO1xyXG5cclxuY29uc3QgRGlzY29yZENvbXBvbmVudHMgPSBtZW1vaXplKHtcclxuICAgIGdldCBCdXR0b24oKSB7cmV0dXJuIFdlYnBhY2suZmluZEJ5UHJvcHMoXCJCb3JkZXJDb2xvcnNcIik7fSxcclxuICAgIGdldCBTd2l0Y2goKSB7cmV0dXJuIFdlYnBhY2suZmluZEJ5RGlzcGxheU5hbWUoXCJTd2l0Y2hcIik7fSxcclxuICAgIGdldCBNYXJrZG93bigpIHtyZXR1cm4gV2VicGFjay5maW5kTW9kdWxlKG0gPT4gbS5kaXNwbGF5TmFtZSA9PT0gXCJNYXJrZG93blwiICYmIFwicnVsZXNcIiBpbiBtKTt9LFxyXG4gICAgZ2V0IEhlYWRlcigpIHtyZXR1cm4gV2VicGFjay5maW5kTW9kdWxlKG0gPT4gbS5kaXNwbGF5TmFtZSA9PT0gXCJIZWFkZXJcIiAmJiBcIlRhZ3NcIiBpbiBtKTt9LFxyXG4gICAgZ2V0IFRleHQoKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZXMgPSBuZXcgU2V0KFtcIlRleHRcIiwgXCJMZWdhY3lUZXh0XCJdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFdlYnBhY2suZmluZE1vZHVsZShtID0+IG5hbWVzLmhhcyhtLmRpc3BsYXlOYW1lKSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0IEZvcm1zKCkge3JldHVybiBXZWJwYWNrLmZpbmRCeVByb3BzKFwiRm9ybUl0ZW1cIiwgXCJGb3JtVGl0bGVcIik7fSxcclxuICAgIGdldCBTcGlubmVyKCkge3JldHVybiBXZWJwYWNrLmZpbmRCeURpc3BsYXlOYW1lKFwiU3Bpbm5lclwiKTt9LFxyXG4gICAgZ2V0IEZsZXgoKSB7cmV0dXJuIFdlYnBhY2suZmluZEJ5RGlzcGxheU5hbWUoXCJGbGV4XCIpO30sXHJcbiAgICBnZXQgTGluaygpIHtyZXR1cm4gV2VicGFjay5maW5kQnlEaXNwbGF5TmFtZShcIkFuY2hvclwiKTt9LFxyXG4gICAgZ2V0IEljb25zKCkge1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gV2VicGFjay5maW5kTW9kdWxlcyhtID0+IHR5cGVvZiBtID09PSBcImZ1bmN0aW9uXCIgJiYgbS5kaXNwbGF5TmFtZSAmJiBtLnRvU3RyaW5nKCkuaW5kZXhPZihcImN1cnJlbnRDb2xvclwiKSA+IC0xKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhpY29ucy5tYXAoaWNvbiA9PiBbaWNvbi5kaXNwbGF5TmFtZSwgaWNvbl0pKTtcclxuICAgIH0sXHJcbiAgICBnZXQgVG9vbHRpcHMoKSB7XHJcbiAgICAgICAgY29uc3QgVG9vbHRpcE1vZHVsZSA9IFdlYnBhY2suZmluZEJ5UHJvcHMoXCJUb29sdGlwQ29udGFpbmVyXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBDb250YWluZXI6IFRvb2x0aXBNb2R1bGUuVG9vbHRpcENvbnRhaW5lcixcclxuICAgICAgICAgICAgVG9vbHRpcDogVG9vbHRpcE1vZHVsZS5kZWZhdWx0LFxyXG4gICAgICAgICAgICAuLi5Ub29sdGlwTW9kdWxlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEaXNjb3JkQ29tcG9uZW50czsiLCJpbXBvcnQgXCIuL2NhcmQuc2Nzc1wiO1xuaW1wb3J0IERpc2NvcmRDb21wb25lbnRzIGZyb20gXCIuL2Rpc2NvcmRcIjtcblxuY29uc3Qga2VybmVsOiBhbnkgPSAod2luZG93IGFzIGFueSkua2VybmVsO1xuY29uc3QgRWxlY3Ryb24gPSBTZXR0aW5nc05hdGl2ZS5yZXF1aXJlTW9kdWxlKFwiZWxlY3Ryb25cIik7XG5cbmV4cG9ydCBmdW5jdGlvbiBJY29uKHtuYW1lLCAuLi5wcm9wc30pIHtcbiAgICBjb25zdCBJY29uQ29tcG9uZW50ID0gRGlzY29yZENvbXBvbmVudHMuSWNvbnNbbmFtZV0gPz8gKCgpID0+IG51bGwpO1xuICAgIHByb3BzLnNpemUgPz89IFwiMTZcIjtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxJY29uQ29tcG9uZW50IHsuLi5wcm9wc30gd2lkdGg9e3Byb3BzLnNpemV9IGhlaWdodD17cHJvcHMuc2l6ZX0gLz5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVG9vbEJ1dHRvbih7bGFiZWwsIGljb24sIG9uQ2xpY2ssIGRhbmdlciA9IGZhbHNlfSkge1xuICAgIGNvbnN0IHtUb29sdGlwcywgQnV0dG9ufSA9IERpc2NvcmRDb21wb25lbnRzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFRvb2x0aXBzLlRvb2x0aXAgdGV4dD17bGFiZWx9IHBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICB7cHJvcHMgPT4gKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJrZXJuZWwtdG9vbGJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGxvb2s9e0J1dHRvbi5Mb29rcy5CTEFOS31cbiAgICAgICAgICAgICAgICAgICAgc2l6ZT17QnV0dG9uLlNpemVzLk5PTkV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBzaXplPVwiMjBcIiBuYW1lPXtpY29ufSBjb2xvcj17ZGFuZ2VyID8gXCIjZWQ0MjQ1XCIgOiB1bmRlZmluZWR9IC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L1Rvb2x0aXBzLlRvb2x0aXA+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN3aXRjaFdyYXBwZXIoe3ZhbHVlLCBvbkNoYW5nZSwgZGlzYWJsZWR9KSB7XG4gICAgY29uc3Qge1N3aXRjaH0gPSBEaXNjb3JkQ29tcG9uZW50cztcbiAgICBjb25zdCBbaXNDaGVja2VkLCBzZXRDaGVja2VkXSA9IFJlYWN0LnVzZVN0YXRlKHZhbHVlKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRpc2FibGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBvbkNoYW5nZSghaXNDaGVja2VkKTtcbiAgICAgICAgICAgICAgICBzZXRDaGVja2VkKCh2YWx1ZTogYm9vbGVhbikgPT4gIXZhbHVlKTtcbiAgICAgICAgICAgIH0sIFtvbkNoYW5nZSwgaXNDaGVja2VkXSl9XG4gICAgICAgIC8+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5JdGVtKHBhdGg6IHN0cmluZykge1xuICAgIGlmIChwYXRoLmVuZHNXaXRoKFwiLmFzYXJcIikpIHJldHVybiBFbGVjdHJvbi5zaG93SXRlbUluRm9sZGVyKHBhdGgpO1xuXG4gICAgRWxlY3Ryb24ub3BlblBhdGgocGF0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEtlcm5lbENhcmQoe3BrZ30pIHtcbiAgICBjb25zdCB7TWFya2Rvd24sIFRleHR9ID0gRGlzY29yZENvbXBvbmVudHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImtlcm5lbC1jYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImtlcm5lbC1jYXJkLXRvb2xzXCI+XG4gICAgICAgICAgICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJPcGVuIFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiRm9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb3Blbkl0ZW0ocGtnLnBhdGgpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgZGFuZ2VyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cIlRyYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gRWxlY3Ryb24udHJhc2hJdGVtKHBrZy5wYXRoKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImtlcm5lbC1jYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNsYXNzTmFtZT1cImtlcm5lbC1jYXJkLW5hbWVcIj57cGtnLm5hbWV9PC9UZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7cGtnLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNsYXNzTmFtZT1cImtlcm5lbC1jYXJkLWRlc2NcIj5cbiAgICAgICAgICAgICAgICAgICAgPE1hcmtkb3duPntwa2cuZGVzY3JpcHRpb259PC9NYXJrZG93bj5cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJrZXJuZWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPFN3aXRjaFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3BrZy5lbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cGtnLmlkID09PSBcImtlcm5lbC1zZXR0aW5nc1wifVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSBrZXJuZWwucGFja2FnZXMuc3RvcFBhY2thZ2UocGtnLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uga2VybmVsLnBhY2thZ2VzLnN0YXJ0UGFja2FnZShwa2cuaWQpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn0iLCJpbXBvcnQgS2VybmVsQ2FyZCBmcm9tIFwiLi9jYXJkXCI7XG5pbXBvcnQgRGlzY29yZENvbXBvbmVudHMgZnJvbSBcIi4vZGlzY29yZFwiO1xuaW1wb3J0IFwiLi9wYW5lbC5zY3NzXCI7XG5cbmNvbnN0IGtlcm5lbDogYW55ID0gKHdpbmRvdyBhcyBhbnkpLmtlcm5lbDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2VybmVsUGFuZWwoKSB7XG4gICAgY29uc3Qge0Zvcm1zOiB7Rm9ybVRpdGxlfX0gPSBEaXNjb3JkQ29tcG9uZW50cztcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwia2VybmVsLXBhbmVsXCI+XG4gICAgICAgICAgICA8Rm9ybVRpdGxlIHRhZz17Rm9ybVRpdGxlLlRhZ3MuSDF9PlBhY2thZ2VzPC9Gb3JtVGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImtlcm5lbC1jYXJkLXNjcm9sbGVyXCI+XG4gICAgICAgICAgICAgICAge09iamVjdC52YWx1ZXM8YW55PihrZXJuZWwucGFja2FnZXMuZ2V0UGFja2FnZXMoKSkubWFwKHBrZyA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxLZXJuZWxDYXJkIHBrZz17cGtnfSBrZXk9e3BrZy5pZCA/PyBwa2cubmFtZX0gLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufSIsImltcG9ydCBtZW1vaXplIGZyb20gXCIuL21lbW9pemVcIjtcbmltcG9ydCBXZWJwYWNrIGZyb20gXCIuL3dlYnBhY2tcIjtcblxuY29uc3QgRGlzY29yZE1vZHVsZXMgPSBtZW1vaXplKHtcbiAgICBnZXQgTW9tZW50KCkge3JldHVybiBXZWJwYWNrLmZpbmRCeVByb3BzKFwibW9tZW50UHJvcGVydGllc1wiKTt9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRGlzY29yZE1vZHVsZXM7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZUxhenk8UCA9IGFueT4oZmFjdG9yeTogKHByb3BzOiBQKSA9PiBQcm9taXNlPGFueT4sIGZhbGxiYWNrOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDx7fT4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gTGF6eUNvbXBvbmVudChwcm9wczogUCkge1xuICAgICAgICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHtyZXNvbHZlZDogZmFsc2UsIHZhbHVlOiB2b2lkIDB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlc29sdmVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGZhY3RvcnkocHJvcHMpLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoe3ZhbHVlLCByZXNvbHZlZDogdHJ1ZX0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIFtzdGF0ZV0pO1xuXG4gICAgICAgIHJldHVybiBzdGF0ZS5yZXNvbHZlZCA/IHN0YXRlLnZhbHVlIDogUmVhY3QuY3JlYXRlRWxlbWVudChmYWxsYmFjaywgcHJvcHMpO1xuICAgIH07XG59IiwiY29uc3QgcGVyaW9kID0gXCJAQEA9PT1AQEBcIjtcclxuY29uc3QgY29tbWl0RmllbGRzID0gW1wiaGFzaFwiLCBcImhhc2hfc2hvcnRcIiwgXCJhdXRob3JcIiwgXCJkYXRlXCIsIFwibWVzc2FnZVwiXTtcclxuY29uc3QgaGFzaEZpZWxkcyA9IFtcInNob3J0XCIsIFwiZnVsbFwiXTtcclxuXHJcbmNvbnN0IGNoaWxkX3Byb2Nlc3MgPSBTZXR0aW5nc05hdGl2ZS5yZXF1aXJlTW9kdWxlKFwiY2hpbGRfcHJvY2Vzc1wiKTtcclxuXHJcbmV4cG9ydCB0eXBlIENvbW1pdCA9IHtcclxuICAgIGhhc2g/OiBzdHJpbmcsXHJcbiAgICBoYXNoX3Nob3J0Pzogc3RyaW5nO1xyXG4gICAgYXV0aG9yPzogc3RyaW5nO1xyXG4gICAgZGF0ZT86IHN0cmluZztcclxuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHaXQge1xyXG4gICAgc3RhdGljIGV4ZWN1dGVDbWQoY21kOiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjKGNtZCwge2N3ZH0sIChlcnJvciwgc3Rkb3V0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHJldHVybiByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgaXNJbnN0YWxsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlQ21kKFwiZ2l0IC0tdmVyc2lvblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFzeW5jIGlzUmVwbyhjd2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNtZChcImdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlXCIsIGN3ZCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09PSBcInRydWVcIjtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0QnJhbmNoTmFtZShjd2Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlQ21kKFwiZ2l0IGJyYW5jaCAtYVwiLCBjd2QpO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsaWNlKDIsIHJlc3VsdC5pbmRleE9mKFwiXFxuXCIpKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRMYXRlc3RDb21taXQoY3dkOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nID0gXCJtYXN0ZXJcIik6IFByb21pc2U8e3Nob3J0Pzogc3RyaW5nLCBmdWxsPzogc3RyaW5nLCBoYXNFcnJvcj86IGJvb2xlYW59PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VQZXJpb2RzKGhhc2hGaWVsZHMsIGF3YWl0IHRoaXMuZXhlY3V0ZUNtZChgZ2l0IGxvZyAtMSAke3RhcmdldH0gLS1wcmV0dHk9Zm9ybWF0OlwiJWgke3BlcmlvZH0lSFwiYCwgY3dkKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiB7aGFzRXJyb3I6IHRydWV9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0RGlmZihjd2Q6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcgPSBcIm1hc3RlclwiKTogUHJvbWlzZTxDb21taXRbXT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNtZChgZ2l0IGxvZyAke3RhcmdldH0uLm9yaWdpbi8ke3RhcmdldH0gLS1wcmV0dHk9Zm9ybWF0OlwiJUgke3BlcmlvZH0laCR7cGVyaW9kfSVhbiR7cGVyaW9kfSVhciR7cGVyaW9kfSVzXCJgLCBjd2QpO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNwbGl0KFwiXFxuXCIpLm1hcChwID0+IHRoaXMucGFyc2VQZXJpb2RzKGNvbW1pdEZpZWxkcywgcCkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBwYXJzZVBlcmlvZHMoZmllbGRzOiBzdHJpbmdbXSwgb3V0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKG91dC5zcGxpdChwZXJpb2QpLm1hcCgoYywgaSkgPT4gW2ZpZWxkc1tpXSwgY10pKTtcclxuICAgIH1cclxufSIsImNvbnN0IFZlcmlmaWVkID0gKHByb3BzOiBhbnkpID0+IChcbiAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgey4uLnByb3BzfT5cbiAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgPC9zdmc+XG4pO1xuXG5jb25zdCBXYXJuaW5nID0gKHByb3BzKSA9PiAoXG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZW5hYmxlLWJhY2tncm91bmQ9XCJuZXcgMCAwIDI0IDI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIHsuLi5wcm9wc30+XG4gICAgICAgIDxnPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0wLDBoMjR2MjRIMFYwelwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8Zz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIsMkw0LDV2Ni4wOWMwLDUuMDUsMy40MSw5Ljc2LDgsMTAuOTFjNC41OS0xLjE1LDgtNS44Niw4LTEwLjkxVjVMMTIsMnogTTEzLDE2aC0ydi0yaDJWMTZ6IE0xMywxMmgtMlY3aDJWMTJ6XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgIDwvZz5cbiAgICA8L3N2Zz5cbik7XG5cbmVudW0gVHlwZXMge1xuICAgIFZFUklGSUVEID0gXCJWRVJJRklFRFwiLFxuICAgIFdBUk5JTkcgPSBcIldBUk5JTkdcIlxufTtcblxudHlwZSBGQzxTLCBQID0ge30+ID0gUmVhY3QuRkM8UD4gJiBTO1xuXG5jb25zdCBTaGllbGQ6IEZDPHtUeXBlcz86IHR5cGVvZiBUeXBlc30sIHt0eXBlOiBrZXlvZiB0eXBlb2YgVHlwZXN9ICYgUmVhY3QuU1ZHQXR0cmlidXRlczxhbnk+PiA9ICh7dHlwZSwgLi4ucHJvcHN9KSA9PiB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVHlwZXMuVkVSSUZJRUQ6IHJldHVybiA8VmVyaWZpZWQgey4uLnByb3BzfSAvPjtcbiAgICAgICAgY2FzZSBUeXBlcy5XQVJOSU5HOiByZXR1cm4gPFdhcm5pbmcgey4uLnByb3BzfSAvPjtcblxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5TaGllbGQuVHlwZXMgPSBUeXBlcztcblxuZXhwb3J0IGRlZmF1bHQgU2hpZWxkOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZUF2YWlsYWJsZShwcm9wczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJrcy11cGRhdGUtYXZhaWxhYmxlXCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB7Li4ucHJvcHN9PlxuICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTUsOCBMOSwxMiBMNiwxMiBDNiwxNS4zMSA4LjY5LDE4IDEyLDE4IEMxMy4wMSwxOCAxMy45NywxNy43NSAxNC44LDE3LjMgTDE2LjI2LDE4Ljc2IEMxNS4wMywxOS41NCAxMy41NywyMCAxMiwyMCBDNy41OCwyMCA0LDE2LjQyIDQsMTIgTDEsMTIgTDUsOCBaIE0xOCwxMiBDMTgsOC42OSAxNS4zMSw2IDEyLDYgQzEwLjk5LDYgMTAuMDMsNi4yNSA5LjIsNi43IEw3Ljc0LDUuMjQgQzguOTcsNC40NiAxMC40Myw0IDEyLDQgQzE2LjQyLDQgMjAsNy41OCAyMCwxMiBMMjMsMTIgTDE5LDE2IEwxNSwxMiBMMTgsMTIgWlwiIC8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMjQgMCAwIDAgMCAyNCAyNCAyNFwiIC8+XG4gICAgICAgICAgICA8L2c+XG4gICAgICAgIDwvc3ZnPlxuICAgICk7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIFNob3coe3doZW4sIGNoaWxkcmVuLCBmYWxsYmFjayA9IG51bGx9OiB7d2hlbjogYm9vbGVhbiwgY2hpbGRyZW46IGFueSwgZmFsbGJhY2s/OiBhbnl9KSB7XG4gICAgcmV0dXJuIHdoZW4gPyBjaGlsZHJlbiA6IGZhbGxiYWNrO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFN3aXRjaCh7Y2hpbGRyZW4sIGRlZmF1bHQ6IGRlZiA9IG51bGx9KSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuLmZpbmQoKGNoaWxkOiBhbnkpID0+IGNoaWxkPy5wcm9wcz8ud2hlbikgPz8gZGVmO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIE1hdGNoKHt3aGVuLCBjaGlsZHJlbn06IHt3aGVuOiBib29sZWFuLCBjaGlsZHJlbjogYW55fSkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBGb3I8VD4oe2VhY2gsIGNoaWxkcmVufToge2VhY2g6IFRbXSwgY2hpbGRyZW46IChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBhbnl9KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVhY2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY2hpbGRyZW4oZWFjaFtpXSwgaSkpO1xuICAgIH1cblxuICAgIHJldHVybiA8PntyZXN1bHR9PC8+O1xufTsiLCJpbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIkBtb2R1bGVzL2Rpc2NvcmRcIjtcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiQG1vZHVsZXMvbG9nZ2VyXCI7XG5pbXBvcnQgbWFrZUxhenkgZnJvbSBcIkBtb2R1bGVzL21ha2VsYXp5XCI7XG5pbXBvcnQgR2l0LCB7Q29tbWl0fSBmcm9tIFwiQG1vZHVsZXMvc2ltcGxlZ2l0XCI7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gXCJAbW9kdWxlcy9zdG9yYWdlXCI7XG5pbXBvcnQgRGlzY29yZENvbXBvbmVudHMgZnJvbSBcIi4vZGlzY29yZFwiO1xuaW1wb3J0IFNoaWVsZCBmcm9tIFwiLi9pY29ucy9zaGllbGRcIjtcbmltcG9ydCBVcGRhdGVBdmFpbGFibGUgZnJvbSBcIi4vaWNvbnMvdXBkYXRlX2F2YWlsYWJsZVwiO1xuaW1wb3J0IHtNYXRjaCwgU3dpdGNoLCBTaG93LCBGb3J9IGZyb20gXCIuL3ByaW1pdGl2ZXNcIjtcbmltcG9ydCBcIi4vdXBkYXRlcy5zY3NzXCI7XG5cbmNvbnN0IGZzID0gU2V0dGluZ3NOYXRpdmUucmVxdWlyZU1vZHVsZShcImZzXCIpO1xuXG5mdW5jdGlvbiB1c2VHaXRDb21tYW5kPFQ+KGZhY3Rvcnk6ICgpID0+IG51bGwgfCBQcm9taXNlPFQ+LCBkZXBzPzogYW55W10pOiB7bG9hZGVkOiBib29sZWFuLCByZXN1bHQ6IFQsIGZldGNoKCk6IHZvaWR9IHtcbiAgICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHtsb2FkZWQ6IGZhbHNlLCByZXN1bHQ6IG51bGx9KTtcblxuICAgIGNvbnN0IGhhbmRsZUZldGNoID0gKCkgPT4ge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoZmFjdG9yeSgpKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgbG9hZGVkOiB0eXBlb2YgcmVzdWx0ID09PSBcImJvb2xlYW5cIiA/IHRydWUgOiAhIXJlc3VsdCxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgIH07XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoaGFuZGxlRmV0Y2gsIGRlcHMgPz8gW10pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZldGNoKCkge1xuICAgICAgICAgICAgc2V0U3RhdGUoe2xvYWRlZDogZmFsc2UsIHJlc3VsdDogbnVsbH0pO1xuICAgICAgICAgICAgaGFuZGxlRmV0Y2goKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBMb2FkaW5nU3Bpbm5lciA9ICgpID0+IHtcbiAgICBjb25zdCB7U3Bpbm5lcn0gPSBEaXNjb3JkQ29tcG9uZW50cztcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxTcGlubmVyIHR5cGU9e1NwaW5uZXIuVHlwZS5MT1dfTU9USU9OfSBjbGFzc05hbWU9XCJrc3Utc3Bpbm5lclwiIC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBDdXJyZW50QnJhbmNoID0gbWFrZUxhenkoYXN5bmMgKHtnaXRMb2FkZWR9KSA9PiB7XG4gICAgaWYgKCFnaXRMb2FkZWQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qge0xpbmt9ID0gRGlzY29yZENvbXBvbmVudHM7XG5cbiAgICBjb25zdCBicmFuY2ggPSBhd2FpdCBHaXQuZ2V0QnJhbmNoTmFtZShmcy5jdXJyZW50KTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxMaW5rIGhyZWY9e2BodHRwczovL2dpdGh1Yi5jb20vc3RyZW5jaGVyLWtlcm5lbC9zZXR0aW5ncy90cmVlLyR7YnJhbmNofWB9PnticmFuY2h9PC9MaW5rPlxuICAgICk7XG59LCBMb2FkaW5nU3Bpbm5lcik7XG5cbmV4cG9ydCBjb25zdCBDdXJyZW50Q29tbWl0SGFzaCA9IG1ha2VMYXp5KGFzeW5jICh7Z2l0TG9hZGVkfSkgPT4ge1xuICAgIGlmICghZ2l0TG9hZGVkKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHtUZXh0LCBMaW5rfSA9IERpc2NvcmRDb21wb25lbnRzO1xuICAgIGNvbnN0IGhhc2g6IGFueSA9IGF3YWl0IEdpdC5nZXRMYXRlc3RDb21taXQoZnMuY3VycmVudCwgYXdhaXQgR2l0LmdldEJyYW5jaE5hbWUoZnMuY3VycmVudCkpO1xuXG4gICAgaWYgKGhhc2guaGFzRXJyb3IpIHJldHVybiAoXG4gICAgICAgIDxUZXh0IGNvbG9yPXtUZXh0LkNvbG9ycy5SRUR9PmVycm9yPC9UZXh0PlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8TGluayBocmVmPXtgaHR0cHM6Ly9naXRodWIuY29tL3N0cmVuY2hlci1rZXJuZWwvc2V0dGluZ3MvdHJlZS8ke2hhc2guZnVsbH1gfT57aGFzaC5zaG9ydH08L0xpbms+XG4gICAgKTtcbn0sIExvYWRpbmdTcGlubmVyKTtcblxubGV0IG5lZWRzUmVsb2FkID0gZmFsc2U7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVyUGFuZWwoKSB7XG4gICAgY29uc3Qge01vbWVudH0gPSBEaXNjb3JkTW9kdWxlcztcbiAgICBjb25zdCBbZXJyb3JNZXNzYWdlLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCB7TGluaywgQnV0dG9uLCBUZXh0LCBGbGV4LCBGb3Jtczoge0Zvcm1UaXRsZSwgRm9ybU5vdGljZSwgRm9ybURpdmlkZXIsIEZvcm1JdGVtfSwgU3Bpbm5lcn0gPSBEaXNjb3JkQ29tcG9uZW50cztcbiAgICBjb25zdCBnaXQgPSB1c2VHaXRDb21tYW5kPGJvb2xlYW4+KCgpID0+IEdpdC5pc0luc3RhbGxlZCgpKTtcbiAgICBjb25zdCB1cGRhdGVzID0gdXNlR2l0Q29tbWFuZDxDb21taXRbXT4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIWdpdC5sb2FkZWQgfHwgIWdpdC5yZXN1bHQpIHJldHVybiBbXTtcblxuICAgICAgICByZXR1cm4gR2l0LmdldERpZmYoZnMuY3VycmVudCk7XG4gICAgfSwgW2dpdC5sb2FkZWRdKTtcbiAgICBjb25zdCBsYXN0VXBkYXRlID0gTW9tZW50KFN0b3JhZ2UudXNlKCgpID0+IFN0b3JhZ2UuZ2V0KFwidXBkYXRlci5sYXN0RmV0Y2hcIiwgbmV3IERhdGUoKSkpKTtcbiAgICBcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImtlcm5lbC1wYW5lbFwiPlxuICAgICAgICAgICAgPEZvcm1UaXRsZSB0YWc9e0Zvcm1UaXRsZS5UYWdzLkgxfT5VcGRhdGVzPC9Gb3JtVGl0bGU+XG4gICAgICAgICAgICA8U2hvdyB3aGVuPXtnaXQubG9hZGVkfSBmYWxsYmFjaz17PFNwaW5uZXIgdHlwZT17U3Bpbm5lci5UeXBlLldBTkRFUklOR19DVUJFU30gLz59PlxuICAgICAgICAgICAgICAgIDxTaG93IHdoZW49eyFnaXQucmVzdWx0fT5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1Ob3RpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9e0Zvcm1Ob3RpY2UuVHlwZXMuREFOR0VSfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia3MtbWFyZ2luQm90dG9tMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJHaXQgaW5zdGFsbGF0aW9uIG5vdCBmb3VuZCFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VEYXRhPXt7c3JjOiBcIi9hc3NldHMvNmU5N2Y2NjQzZTdkZjI5YjI2NTcxZDk2NDMwZTkyZjQuc3ZnXCIsIHdpZHRoOiA2MCwgaGVpZ2h0OiA2MH19XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5PXs8c3Bhbj5DdXJyZW50bHkgS2VybmVsU2V0dGluZ3MgcmVsaWVzIG9uIHlvdXIgbG9jYWwgZ2l0IGluc3RhbGxhdGlvbi4gUGxlYXNlIGluc3RhbGwgZ2l0IHRvIHVzZSB0aGlzIHVwZGF0ZXIuPC9zcGFuPn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1Nob3c+XG4gICAgICAgICAgICAgICAgPFNob3cgd2hlbj17ZXJyb3JNZXNzYWdlICE9IG51bGx9PlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybU5vdGljZVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT17Rm9ybU5vdGljZS5UeXBlcy5EQU5HRVJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJrcy1tYXJnaW5Cb3R0b20yMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkVycm9yIG9jY3VycmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YT17e3NyYzogXCIvYXNzZXRzLzZlOTdmNjY0M2U3ZGYyOWIyNjU3MWQ5NjQzMGU5MmY0LnN2Z1wiLCB3aWR0aDogNjAsIGhlaWdodDogNjB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keT17PHNwYW4+e2Vycm9yTWVzc2FnZX08L3NwYW4+fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU2hvdz5cbiAgICAgICAgICAgICAgICA8U2hvdyB3aGVuPXtlcnJvck1lc3NhZ2UgPT0gbnVsbCAmJiBuZWVkc1JlbG9hZH0+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtTm90aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtGb3JtTm90aWNlLlR5cGVzLldBUk5JTkd9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJrcy1tYXJnaW5Cb3R0b20yMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlJlbG9hZCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZURhdGE9e3tzcmM6IFwiL2Fzc2V0cy82ZTk3ZjY2NDNlN2RmMjliMjY1NzFkOTY0MzBlOTJmNC5zdmdcIiwgd2lkdGg6IDYwLCBoZWlnaHQ6IDYwfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9ezxzcGFuPkNsaWVudCByZWxvYWQgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gbWFrZSBjaGFuZ2VzIHRha2UgYWZmZWN0Ljwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9TaG93PlxuICAgICAgICAgICAgICAgIDxTaG93IHdoZW49e2dpdC5yZXN1bHR9PlxuICAgICAgICAgICAgICAgICAgICA8RmxleCBjbGFzc05hbWU9XCJrc3UtY2FyZFwiIGRpcmVjdGlvbj17RmxleC5EaXJlY3Rpb24uVkVSVElDQUx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZsZXgganVzdGlmeT17RmxleC5KdXN0aWZ5LkJFVFdFRU59IGFsaWduPXtGbGV4LkFsaWduLkNFTlRFUn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZsZXggY2xhc3NOYW1lPVwia3N1LXNoaWVsZC1jb250YWluZXJcIiBkaXJlY3Rpb249e0ZsZXguRGlyZWN0aW9uLkhPUklaT05UQUx9IGFsaWduPXtGbGV4LkFsaWduLlNUQVJUfSBqdXN0aWZ5PXtGbGV4Lkp1c3RpZnkuQ0VOVEVSfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNob3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW49e3VwZGF0ZXMubG9hZGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9eyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VXBkYXRlQXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNzBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI3MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImtzLXVwZGF0ZS1hdmFpbGFibGUga3N1LXNoaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTaGllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXt1cGRhdGVzLnJlc3VsdD8ubGVuZ3RoID4gMCA/IFNoaWVsZC5UeXBlcy5XQVJOSU5HIDogU2hpZWxkLlR5cGVzLlZFUklGSUVEfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNzBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjcwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Brc3Utc2hpZWxkICR7dXBkYXRlcy5yZXN1bHQ/Lmxlbmd0aCA+IDAgPyBcImtzdS1zaGllbGQtd2FyblwiIDogXCJrc3Utc2hpZWxkLW9rXCJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2hvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZsZXguQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPXtUZXh0LlNpemVzLlNJWkVfMjR9IGNvbG9yPXtUZXh0LkNvbG9ycy5IRUFERVJfUFJJTUFSWX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaCBkZWZhdWx0PVwiRXZlcnl0aGluZyBpcyB1cCB0byBkYXRlIVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggd2hlbj17IXVwZGF0ZXMubG9hZGVkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRpbmcuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NYXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1hdGNoIHdoZW49e3VwZGF0ZXMucmVzdWx0Py5sZW5ndGggPiAwfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWV0aGluZyBuZWVkcyB0byBiZSB1cGRhdGVkIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L01hdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT17VGV4dC5TaXplcy5TSVpFXzE0fSBjb2xvcj17VGV4dC5Db2xvcnMuSEVBREVSX1NFQ09OREFSWX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFzdCBDaGVja2VkOiB7bGFzdFVwZGF0ZS5jYWxlbmRhcigpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZsZXguQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GbGV4PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwia3N1LWdpdC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNsYXNzTmFtZT1cImtzdS1naXQtaW5mby1pdGVtXCI+QnJhbmNoOiA8Q3VycmVudEJyYW5jaCBnaXRMb2FkZWQ9eyEhZ2l0LnJlc3VsdH0gLz48L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNsYXNzTmFtZT1cImtzdS1naXQtaW5mby1pdGVtXCI+Q29tbWl0OiA8Q3VycmVudENvbW1pdEhhc2ggZ2l0TG9hZGVkPXshIWdpdC5yZXN1bHR9IC8+PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GbGV4PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1EaXZpZGVyIGNsYXNzTmFtZT1cImtzdS1kaXZpZGVyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGbGV4IGRpcmVjdGlvbj17RmxleC5EaXJlY3Rpb24uSE9SSVpPTlRBTH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXVwZGF0ZXMubG9hZGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17QnV0dG9uLkNvbG9ycy5CUkFORH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT17QnV0dG9uLlNpemVzLlNNQUxMfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJrc3UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcy5mZXRjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZS5zZXQoXCJ1cGRhdGVyLmxhc3RGZXRjaFwiLCBuZXcgRGF0ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Q2hlY2sgZm9yIFVwZGF0ZXM8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2hvdyB3aGVuPXt1cGRhdGVzLnJlc3VsdD8ubGVuZ3RoID4gMH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshdXBkYXRlcy5sb2FkZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17QnV0dG9uLkNvbG9ycy5ZRUxMT1d9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPXtCdXR0b24uU2l6ZXMuU01BTEx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJrc3UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQuZXhlY3V0ZUNtZChcImdpdCBwdWxsXCIsIGZzLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzUmVsb2FkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMuZmV0Y2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dlci5lcnJvcihcIlVwZGF0ZXJcIiwgXCJGYWlsZWQgdG8gdXBkYXRlIVwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihcIkVycm9yIG9jY3VycmVkIHdoaWxlIHVwZGF0aW5nIGtlcm5lbCBzZXR0aW5ncy4gQ2hlY2sgeW91ciBjb25zb2xlIChDdHJsL0NtZCArIFNoaWZ0ICsgSSkgYW5kIHJlcG9ydCBhbnkgZXJyb3JzLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+VXBkYXRlPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TaG93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTaG93IHdoZW49e25lZWRzUmVsb2FkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e0J1dHRvbi5Db2xvcnMuR1JFRU59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPXtCdXR0b24uU2l6ZXMuU01BTEx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJrc3UtYnV0dG9uIGtzdS1yZWxvYWQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+UmVsb2FkIDxVcGRhdGVBdmFpbGFibGUgLz48L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Nob3c+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZsZXg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2hvdyB3aGVuPXt1cGRhdGVzLnJlc3VsdD8ubGVuZ3RoID4gMH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1EaXZpZGVyIGNsYXNzTmFtZT1cImtzdS1kaXZpZGVyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUl0ZW0gdGl0bGU9XCJSZWNlbnQgQ29tbWl0c1wiIHRhZz1cImg1XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3IgZWFjaD17dXBkYXRlcy5yZXN1bHR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhjb21taXQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJrc3UtY29tbWl0XCIga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImtzdS1jb21taXQtaGFzaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgaHJlZj17YGh0dHBzOi8vZ2l0aHViLmNvbS9zdHJlbmNoZXIta2VybmVsL3NldHRpbmdzL2NvbW1pdC8ke2NvbW1pdC5oYXNofWB9Pntjb21taXQuaGFzaF9zaG9ydH08L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3N1LWNvbW1pdC1uYW1lXCI+e2NvbW1pdC5tZXNzYWdlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3N1LWNvbW1pdC1hdXRob3ItbGFiZWxcIj4gYnkgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrc3UtY29tbWl0LWF1dGhvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzc05hbWU9XCJrc3UtY29tbWl0LWF1dGhvci1hdmF0YXJcIiBzcmM9e2BodHRwczovL2dpdGh1Yi5jb20vJHtjb21taXQuYXV0aG9yfS5wbmc/c2l6ZT0yMGB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrc3UtY29tbWl0LWF1dGhvci1uYW1lXCI+e2NvbW1pdC5hdXRob3J9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Zvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm1JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TaG93PlxuICAgICAgICAgICAgICAgICAgICA8L0ZsZXg+XG4gICAgICAgICAgICAgICAgPC9TaG93PlxuICAgICAgICAgICAgPC9TaG93PlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufSIsImV4cG9ydCBuYW1lc3BhY2UgUGF0Y2hlciB7XG4gICAgY29uc3QgcGF0Y2hlcyA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG5cbiAgICB0eXBlIFBhdGNoZXJDYWxsYmFjayA9ICh0aGlzT2JqZWN0OiBhbnksIG1ldGhvZEFyZ3VtZW50czogSUFyZ3VtZW50cywgcmV0dXJuVmFsdWU/OiBhbnkpID0+IGFueTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBwYXRjaChtb2R1bGU6IGFueSwgZnVuYzogc3RyaW5nLCBjYWxsYmFjazogUGF0Y2hlckNhbGxiYWNrLCBiZWZvcmUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbCA9IG1vZHVsZVtmdW5jXTtcbiAgICAgICAgY29uc3QgdW5wYXRjaCA9ICgpID0+IHttb2R1bGVbZnVuY10gPSBvcmlnaW5hbDt9O1xuXG4gICAgICAgIG1vZHVsZVtmdW5jXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChiZWZvcmUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrLCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbS2VybmVsOnBhdGNoZXJdIEVycm9yIGR1cmluZyBiZWZvcmUgcGF0Y2g6XCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IFJlZmxlY3QuYXBwbHkob3JpZ2luYWwsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlKSByZXR1cm4gcmV0dXJuVmFsdWU7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFJldCA9IFJlZmxlY3QuYXBwbHkoY2FsbGJhY2ssIHRoaXMsIFthcmd1bWVudHMsIHJldHVyblZhbHVlXSk7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXBSZXQgIT0gbnVsbCkgcmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiW0tlcm5lbDpwYXRjaGVyXSBFcnJvciBkdXJpbmcgcGF0Y2g6XCIsIGVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKG1vZHVsZVtmdW5jXSwgb3JpZ2luYWwsIHtcbiAgICAgICAgICAgIHRvU3RyaW5nKCkge3JldHVybiBvcmlnaW5hbC50b1N0cmluZygpfVxuICAgICAgICB9KTtcblxuICAgICAgICBwYXRjaGVzLmFkZCh1bnBhdGNoKTtcblxuICAgICAgICByZXR1cm4gdW5wYXRjaDtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVucGF0Y2hBbGwoKSB7XG4gICAgICAgIGZvciAoY29uc3QgdW5wYXRjaCBvZiBwYXRjaGVzKSB1bnBhdGNoKCk7XG4gICAgfTtcbn0iLCJpbXBvcnQge1BhdGNoZXJ9IGZyb20gXCIuL3BhdGNoZXJcIjtcbmltcG9ydCBXZWJwYWNrIGZyb20gXCIuL3dlYnBhY2tcIjtcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vZXZlbnRzXCI7XG5cbmNvbnN0IHdpbiA9IHdpbmRvdyBhcyBhbnk7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2V0dGluZ3NSZW5kZXJlciB7XG4gICAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBleHBvcnQgdHlwZSBTZWN0aW9uID0ge1xuICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIiB8IFwiQ1VTVE9NXCIgfCBzdHJpbmc7XG4gICAgICAgIGVsZW1lbnQ/KCk6IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgICAgICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgICAgIGlkPzogc3RyaW5nO1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIGljb24/OiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBzdHJpbmc7XG4gICAgICAgIGNvbG9yPzogc3RyaW5nO1xuICAgICAgICBvbkNsaWNrPzogRnVuY3Rpb247XG4gICAgICAgIG5ld0luZGljYXRvcj86IGJvb2xlYW47XG4gICAgICAgIGJhZGdlQ291bnQ/OiBudW1iZXI7XG4gICAgICAgIG9yZGVyPzogbnVtYmVyO1xuICAgIH07XG4gICAgXG4gICAgZXhwb3J0IHR5cGUgUGFuZWxPcHRpb25zID0ge1xuICAgICAgICByZW5kZXIoKTogUmVhY3QuUmVhY3RFbGVtZW50O1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIG9yZGVyPzogbnVtYmVyO1xuICAgIH07XG5cbiAgICBleHBvcnQgY29uc3QgcGFuZWxzOiBTZWN0aW9uW10gPSB3aW5bXCJfX2tlcm5lbF9zZXR0aW5nc19jYWNoZV9fXCJdID8/IFtcbiAgICAgICAge3NlY3Rpb246IFwiRElWSURFUlwifSxcbiAgICAgICAge3NlY3Rpb246IFwiSEVBREVSXCIsIGxhYmVsOiBcIktlcm5lbFwiLCBpZDogXCJrZXJuZWwtc2V0dGluZ3NcIn1cbiAgICBdO1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgcmVuZGVyOiAoKCkgPT4gUmVhY3QuUmVhY3RFbGVtZW50KSB8IFBhbmVsT3B0aW9ucykge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHtcbiAgICAgICAgICAgIHNlY3Rpb246IGBLZXJuZWwtJHtuYW1lfWAsXG4gICAgICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgICAgIGlkOiBga2VybmVsLXNldHRpbmdzLSR7bmFtZX1gLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBga2VybmVsLXNldHRpbmdzYCxcbiAgICAgICAgICAgIGVsZW1lbnQ6IHR5cGVvZiByZW5kZXIgPT09IFwiZnVuY3Rpb25cIiA/IHJlbmRlciA6IHJlbmRlci5yZW5kZXIsXG4gICAgICAgICAgICAuLi4odHlwZW9mIHJlbmRlciA9PT0gXCJvYmplY3RcIiA/IHJlbmRlciA6IHt9KVxuICAgICAgICB9O1xuXG4gICAgICAgIFNldHRpbmdzUmVuZGVyZXIucGFuZWxzLnB1c2gocGFuZWwpO1xuICAgICAgICBTZXR0aW5nc1JlbmRlcmVyLnBhbmVscy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gU2V0dGluZ3NSZW5kZXJlci5wYW5lbHMuaW5kZXhPZihwYW5lbCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBTZXR0aW5nc1JlbmRlcmVyLnBhbmVscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IFNldHRpbmdzVmlldyA9IGF3YWl0IFdlYnBhY2suZmluZExhenkoV2VicGFjay5GaWx0ZXJzLmJ5RGlzcGxheU5hbWUoXCJTZXR0aW5nc1ZpZXdcIikpO1xuICAgIFxuICAgICAgICBpZiAoIXdpbltcIl9fa2VybmVsX3NldHRpbmdzX2NhY2hlX19cIl0pIFBhdGNoZXIucGF0Y2goU2V0dGluZ3NWaWV3LnByb3RvdHlwZSwgXCJnZXRQcmVkaWNhdGVTZWN0aW9uc1wiLCBmdW5jdGlvbiAoXywgcmVzKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzKSB8fCAhcmVzLnNvbWUoZSA9PiBlPy5zZWN0aW9uPy50b0xvd2VyQ2FzZSgpID09PSBcImNoYW5nZWxvZ1wiKSB8fCByZXMuc29tZShzID0+IHM/LmlkID09PSBcImtlcm5lbC1zZXR0aW5nc1wiKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcy5maW5kSW5kZXgocyA9PiBzPy5zZWN0aW9uPy50b0xvd2VyQ2FzZSgpID09PSBcImNoYW5nZWxvZ1wiKSAtIDE7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG5cbiAgICAgICAgICAgIHJlcy5zcGxpY2UoaW5kZXgsIDAsIC4uLlNldHRpbmdzUmVuZGVyZXIucGFuZWxzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgRXZlbnRzLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWxvYWQtY29yZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICB3aW5bXCJfX2tlcm5lbF9zZXR0aW5nc19jYWNoZV9fXCJdID0gcGFuZWxzO1xuICAgICAgICB9KTtcbiAgICB9O1xufSIsIi8vIGltcG9ydCBLZXJuZWxQYW5lbCBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsLmpzXCI7XG5pbXBvcnQge0RldlNlcnZlcn0gZnJvbSBcIkBtb2R1bGVzL2RldnNlcnZlclwiO1xuaW1wb3J0IEV2ZW50cyBmcm9tIFwiQG1vZHVsZXMvZXZlbnRzXCI7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gXCJAbW9kdWxlcy9zdG9yYWdlXCI7XG5pbXBvcnQgS2VybmVsUGFuZWwgZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbFwiO1xuaW1wb3J0IFVwZGF0ZXJQYW5lbCBmcm9tIFwiLi9jb21wb25lbnRzL3VwZGF0ZXNcIjtcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi9tb2R1bGVzL2xvZ2dlclwiO1xuaW1wb3J0IHtQYXRjaGVyfSBmcm9tIFwiLi9tb2R1bGVzL3BhdGNoZXJcIjtcbmltcG9ydCB7U2V0dGluZ3NSZW5kZXJlcn0gZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc1wiO1xuaW1wb3J0IFdlYnBhY2sgZnJvbSBcIi4vbW9kdWxlcy93ZWJwYWNrXCI7XG4vLyBpbXBvcnQgR2l0IGZyb20gXCIuL3VwZGF0ZXIvZ2l0LmpzXCI7XG4vLyBpbXBvcnQgVXBkYXRlciBmcm9tIFwiLi91cGRhdGVyL2luZGV4LmpzXCI7XG5cbmNvbnN0IGZzID0gU2V0dGluZ3NOYXRpdmUucmVxdWlyZU1vZHVsZShcImZzXCIpO1xuY29uc3QgcGF0aCA9IFNldHRpbmdzTmF0aXZlLnJlcXVpcmVNb2R1bGUoXCJwYXRoXCIpO1xuXG5leHBvcnQgbmFtZXNwYWNlIENvcmUge1xuICAgIGxldCBzdHlsZUVsZW1lbnQ6IEVsZW1lbnQgPSBudWxsO1xuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBXZWJwYWNrLndoZW5SZWFkeTtcbiAgICAgICAgTG9nZ2VyLmxvZyhcIkNvcmVcIiwgXCJTdGFydGVkLlwiKTtcblxuICAgICAgICAod2luZG93IGFzIGFueSkuUmVhY3QgPSBXZWJwYWNrLmZpbmRCeVByb3BzKFwiY3JlYXRlRWxlbWVudFwiLCBcInVzZUVmZmVjdFwiKTtcblxuICAgICAgICBpZiAoX19OT0RFX0VOVl9fID09PSBcIkRFVkVMT1BNRU5UXCIpIERldlNlcnZlci5pbml0aWFsaXplKCk7XG4gICAgICAgIFNldHRpbmdzUmVuZGVyZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICByZWdpc3RlclNldHRpbmdzKCk7XG4gICAgICAgIFN0b3JhZ2UuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICAgIGxvYWRTdHlsZXMoKTtcbiAgICAgICAgZXhwb3NlR2xvYmFscygpO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJTZXR0aW5ncygpOiB2b2lkIHtcbiAgICAgICAgbGV0IGZsdXNoID0gW1xuICAgICAgICAgICAgU2V0dGluZ3NSZW5kZXJlci5yZWdpc3RlcihcIlVwZGF0ZXNcIiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogKCkgPT4gPFVwZGF0ZXJQYW5lbCAvPixcbiAgICAgICAgICAgICAgICBvcmRlcjogMlxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBTZXR0aW5nc1JlbmRlcmVyLnJlZ2lzdGVyKFwiUGFja2FnZXNcIiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogKCkgPT4gPEtlcm5lbFBhbmVsIC8+LFxuICAgICAgICAgICAgICAgIG9yZGVyOiAxXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuXG4gICAgICAgIEV2ZW50cy5hZGRFdmVudExpc3RlbmVyKFwicmVsb2FkLWNvcmVcIiwgKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbHVzaC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZsdXNoW2ldKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gZXhwb3NlR2xvYmFscygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgRGlzcGF0Y2hlciA9IFdlYnBhY2suZmluZEJ5UHJvcHMoXCJfZGlzcGF0Y2hcIiwgXCJkaXNwYXRjaFwiKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3aW5kb3csIHtcbiAgICAgICAgICAgIEtlcm5lbFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IE9iamVjdC5mcmVlemUoU2V0dGluZ3NSZW5kZXJlciksXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgS2VybmVsU3RvcmFnZToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBPYmplY3QuZnJlZXplKFN0b3JhZ2UpLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBEaXNwYXRjaGVyLndhaXQoKCkgPT4gRGlzcGF0Y2hlci5kaXNwYXRjaCh7dHlwZTogXCJLRVJORUxfU0VUVElOR1NfSU5JVFwifSkpO1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBsb2FkU3R5bGVzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShmcy5jdXJyZW50LCBcInN0eWxlLmNzc1wiKTtcbiAgICAgICAgaWYgKCFmcy5pc0ZpbGUobG9jYXRpb24pKSByZXR1cm4gLy8gVE9ETzogQmFpbCBvdXRcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZXMgPSBmcy5yZWFkRmlsZShsb2NhdGlvbiwgXCJ1dGY4XCIgYXMgYW55KTtcblxuICAgICAgICAgICAgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSwge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCJrZXJuZWwtc3R5bGVcIixcbiAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQ6IHN0eWxlc1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgICAgICBsb2FkKCk7XG5cbiAgICAgICAgRXZlbnRzLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWxvYWQtY3NzXCIsICgpID0+IHtcbiAgICAgICAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgIGxvYWQoKTtcbiAgICAgICAgICAgIExvZ2dlci5sb2coXCJTdHlsZXNcIiwgXCJSZWxvYWRlZC5cIik7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gc3RvcCgpOiB2b2lkIHtcbiAgICAgICAgUGF0Y2hlci51bnBhdGNoQWxsKCk7XG4gICAgICAgIHN0eWxlRWxlbWVudD8ucmVtb3ZlKCk7XG4gICAgfTtcbn0iXSwibmFtZXMiOlsiRXZlbnRzIiwiRXZlbnRUYXJnZXQiLCJMb2dnZXIiLCJwYXJzZVR5cGUiLCJ0eXBlIiwibG9nTWVzc2FnZSIsIm1vZHVsZSIsIm1lc3NhZ2UiLCJjb25zb2xlIiwibG9nIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImZzIiwiU2V0dGluZ3NOYXRpdmUiLCJyZXF1aXJlTW9kdWxlIiwicGF0aCIsIkRldlNlcnZlciIsIndzIiwiZXhwZWN0ZWRDbG9zZSIsInRyeUpTT04iLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiY2xvc2UiLCJpbml0aWFsaXplIiwid2luIiwid2luZG93IiwiS2VybmVsRGV2U2VydmVyIiwiV2ViU29ja2V0Iiwib25tZXNzYWdlIiwiaGFuZGxlTWVzc2FnZSIsIm9uZXJyb3IiLCJvbmNsb3NlIiwicmVsb2FkQ29yZSIsImRpc3BhdGNoRXZlbnQiLCJFdmVudCIsImNvbnRlbnQiLCJyZWFkRmlsZSIsInJlc29sdmUiLCJjdXJyZW50Iiwic2NyaXB0IiwiZG9jdW1lbnQiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJPYmplY3QiLCJhc3NpZ24iLCJjcmVhdGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJvbmxvYWQiLCJyZW1vdmUiLCJyZWxvYWRTdHlsZXMiLCJyZWxvYWQiLCJkYXRhIiwib3BlcmF0aW9uIiwic2VuZCIsImNsaWVudCIsIkRpc2NvcmROYXRpdmUiLCJhcHAiLCJnZXRSZWxlYXNlQ2hhbm5lbCIsInN0cmluZ2lmeSIsIlN0b3JhZ2UiLCJsaXN0ZW5lcnMiLCJTZXQiLCJsb2NhdGlvbiIsImdyb3VwcyIsIk1hcCIsImVtaXQiLCJhcmdzIiwiY2FsbGJhY2tzIiwiaSIsImxlbmd0aCIsIm9uIiwibGlzdGVuZXIiLCJhZGQiLCJvZmYiLCJiaW5kIiwiZGVsZXRlIiwidXNlIiwiZmFjdG9yeSIsInN0YXRlIiwic2V0U3RhdGUiLCJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiZXhpc3RzIiwiY3JlYXRlRGlyIiwicmVjdXJzaXZlIiwiZmlsZXMiLCJyZWFkRGlyIiwiZmlsZSIsInN0YXRzIiwiam9pbiIsImlzRmlsZSIsImVuZHNXaXRoIiwiZ3JvdXAiLCJzbGljZSIsImluZGV4T2YiLCJzZXQiLCJnZXQiLCJkZWYiLCJpZCIsInBhdGhzIiwic3BsaXQiLCJyZWR1Y2UiLCJjdXJyIiwibmFtZSIsInByb3AiLCJwb3AiLCJzdG9yZWQiLCJvYmplY3QiLCJFcnJvciIsInRyZWUiLCJ3cml0ZUZpbGUiLCJtZW1vaXplIiwia2V5cyIsImNsb25lIiwia2V5IiwiZGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldHRlciIsInZhbHVlIiwidW5kZWZpbmVkIiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJhdCIsImluZGV4IiwiTWF0aCIsImFicyIsInNldEltbWVkaWF0ZSIsImNhbGxiYWNrIiwic2V0VGltZW91dCIsIkZpbHRlcnMiLCJieVByb3BzIiwicHJvcHMiLCJldmVyeSIsImJ5RGlzcGxheU5hbWUiLCJkZWZhdWx0IiwiZGlzcGxheU5hbWUiLCJieVR5cGVTdHJpbmciLCJzdHJpbmdzIiwidG9TdHJpbmciLCJzdHIiLCJXZWJwYWNrTW9kdWxlIiwiY2FjaGUiLCJjaHVua05hbWUiLCJTeW1ib2wiLCJjb25zdHJ1Y3RvciIsIndoZW5SZWFkeSIsIndhaXRGb3JHbG9iYWwiLCJ0aGVuIiwiUHJvbWlzZSIsIm9uUmVhZHkiLCJEaXNwYXRjaGVyIiwiVXNlclN0b3JlIiwiZmluZEJ5UHJvcHMiLCJidWxrIiwid2FpdCIsImZvcmV2ZXIiLCJnZXRDdXJyZW50VXNlciIsInVuc3Vic2NyaWJlIiwic3Vic2NyaWJlIiwib3JpZ2luYWxQdXNoIiwicHVzaCIsImhhbmRsZVB1c2giLCJjaHVuayIsIm1vZHVsZXMiLCJtb2R1bGVJZCIsIm9yaWdpbmFsTW9kdWxlIiwiZXhwb3J0cyIsImFwcGx5IiwiX19vcmlnaW5hbCIsIm5ld1B1c2giLCJ3cml0YWJsZSIsImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiLCJmaW5kTGF6eSIsImZpbHRlciIsImZyb21DYWNoZSIsImZpbmRNb2R1bGUiLCJtIiwiZGlyZWN0TWF0Y2giLCJkZWZhdWx0TWF0Y2giLCJ3YWl0Rm9yIiwicmV0cmllcyIsImFsbCIsImRlbGF5IiwicmVzIiwicGFyc2VPcHRpb25zIiwidGhpbmciLCJpc0FycmF5IiwicmVxdWVzdCIsInJlcSIsIl9fd2VicGFja19yZXF1aXJlX18iLCJ3ZWJwYWNrQ2h1bmtkaXNjb3JkX2FwcCIsInNwbGljZSIsImZvcmNlIiwiZGVmYXVsdEV4cG9ydHMiLCJmb3VuZCIsImhhc0Vycm9yIiwid3JhcEZpbHRlciIsImMiLCJfX2VzTW9kdWxlIiwiZmluZE1vZHVsZXMiLCJvcHRpb25zIiwiZmlsdGVycyIsInJlc3QiLCJzZWFyY2hGdW5jdGlvbiIsIndyYXBwZWRGaWx0ZXJzIiwibWFwIiwicmV0dXJuVmFsdWUiLCJjYWxsIiwiU3RyaW5nIiwicHJvcHNBcnJheSIsImNvbmNhdCIsImZpbmRCeURpc3BsYXlOYW1lIiwiZGlzcGxheU5hbWVzIiwiZmluZEluZGV4IiwiZm91bmRJbmRleCIsImF0SW5kZXgiLCJvbkV4aXN0cyIsIndoZW5FeGlzdHMiLCJldmVudCIsIm9uY2UiLCJXZWJwYWNrIiwiRGlzY29yZENvbXBvbmVudHMiLCJCdXR0b24iLCJTd2l0Y2giLCJNYXJrZG93biIsIkhlYWRlciIsIlRleHQiLCJuYW1lcyIsImhhcyIsIkZvcm1zIiwiU3Bpbm5lciIsIkZsZXgiLCJMaW5rIiwiSWNvbnMiLCJpY29ucyIsImZyb21FbnRyaWVzIiwiaWNvbiIsIlRvb2x0aXBzIiwiVG9vbHRpcE1vZHVsZSIsIkNvbnRhaW5lciIsIlRvb2x0aXBDb250YWluZXIiLCJUb29sdGlwIiwia2VybmVsIiwiRWxlY3Ryb24iLCJJY29uIiwiSWNvbkNvbXBvbmVudCIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsIlRvb2xCdXR0b24iLCJsYWJlbCIsIm9uQ2xpY2siLCJkYW5nZXIiLCJ0ZXh0IiwicG9zaXRpb24iLCJjbGFzc05hbWUiLCJsb29rIiwiTG9va3MiLCJCTEFOSyIsIlNpemVzIiwiTk9ORSIsImNvbG9yIiwiU3dpdGNoV3JhcHBlciIsIm9uQ2hhbmdlIiwiZGlzYWJsZWQiLCJpc0NoZWNrZWQiLCJzZXRDaGVja2VkIiwiY2hlY2tlZCIsInVzZUNhbGxiYWNrIiwib3Blbkl0ZW0iLCJzaG93SXRlbUluRm9sZGVyIiwib3BlblBhdGgiLCJLZXJuZWxDYXJkIiwicGtnIiwiZGl2IiwidHJhc2hJdGVtIiwiZGVzY3JpcHRpb24iLCJlbmFibGVkIiwicGFja2FnZXMiLCJzdG9wUGFja2FnZSIsInN0YXJ0UGFja2FnZSIsIktlcm5lbFBhbmVsIiwiRm9ybVRpdGxlIiwidGFnIiwiVGFncyIsIkgxIiwidmFsdWVzIiwiZ2V0UGFja2FnZXMiLCJEaXNjb3JkTW9kdWxlcyIsIk1vbWVudCIsIm1ha2VMYXp5IiwiZmFsbGJhY2siLCJMYXp5Q29tcG9uZW50IiwicmVzb2x2ZWQiLCJwZXJpb2QiLCJjb21taXRGaWVsZHMiLCJoYXNoRmllbGRzIiwiY2hpbGRfcHJvY2VzcyIsIkdpdCIsImV4ZWN1dGVDbWQiLCJjbWQiLCJjd2QiLCJyZWplY3QiLCJleGVjIiwic3Rkb3V0IiwiaXNJbnN0YWxsZWQiLCJpc1JlcG8iLCJyZXN1bHQiLCJnZXRCcmFuY2hOYW1lIiwiZ2V0TGF0ZXN0Q29tbWl0IiwidGFyZ2V0IiwicGFyc2VQZXJpb2RzIiwiZ2V0RGlmZiIsInAiLCJmaWVsZHMiLCJvdXQiLCJWZXJpZmllZCIsInN2ZyIsInhtbG5zIiwidmlld0JveCIsImQiLCJmaWxsIiwiV2FybmluZyIsImVuYWJsZS1iYWNrZ3JvdW5kIiwiZyIsIlR5cGVzIiwiVkVSSUZJRUQiLCJXQVJOSU5HIiwiU2hpZWxkIiwiVXBkYXRlQXZhaWxhYmxlIiwiYXJpYS1oaWRkZW4iLCJmaWxsLXJ1bGUiLCJwb2x5Z29uIiwicG9pbnRzIiwiU2hvdyIsIndoZW4iLCJjaGlsZHJlbiIsImZpbmQiLCJjaGlsZCIsIk1hdGNoIiwiRm9yIiwiZWFjaCIsInVzZUdpdENvbW1hbmQiLCJkZXBzIiwibG9hZGVkIiwiaGFuZGxlRmV0Y2giLCJjYXRjaCIsImZldGNoIiwiTG9hZGluZ1NwaW5uZXIiLCJUeXBlIiwiTE9XX01PVElPTiIsIkN1cnJlbnRCcmFuY2giLCJnaXRMb2FkZWQiLCJicmFuY2giLCJocmVmIiwiQ3VycmVudENvbW1pdEhhc2giLCJoYXNoIiwiQ29sb3JzIiwiUkVEIiwiZnVsbCIsInNob3J0IiwibmVlZHNSZWxvYWQiLCJVcGRhdGVyUGFuZWwiLCJlcnJvck1lc3NhZ2UiLCJzZXRFcnJvciIsIkZvcm1Ob3RpY2UiLCJGb3JtRGl2aWRlciIsIkZvcm1JdGVtIiwiZ2l0IiwidXBkYXRlcyIsImxhc3RVcGRhdGUiLCJEYXRlIiwiV0FOREVSSU5HX0NVQkVTIiwiREFOR0VSIiwidGl0bGUiLCJpbWFnZURhdGEiLCJzcmMiLCJib2R5Iiwic3BhbiIsImRpcmVjdGlvbiIsIkRpcmVjdGlvbiIsIlZFUlRJQ0FMIiwianVzdGlmeSIsIkp1c3RpZnkiLCJCRVRXRUVOIiwiYWxpZ24iLCJBbGlnbiIsIkNFTlRFUiIsIkhPUklaT05UQUwiLCJTVEFSVCIsIkNoaWxkIiwiU0laRV8yNCIsIkhFQURFUl9QUklNQVJZIiwiU0laRV8xNCIsIkhFQURFUl9TRUNPTkRBUlkiLCJjYWxlbmRhciIsIkJSQU5EIiwiU01BTEwiLCJZRUxMT1ciLCJHUkVFTiIsImNvbW1pdCIsImhhc2hfc2hvcnQiLCJpbWciLCJhdXRob3IiLCJQYXRjaGVyIiwicGF0Y2hlcyIsInBhdGNoIiwiZnVuYyIsImJlZm9yZSIsIm9yaWdpbmFsIiwidW5wYXRjaCIsIlJlZmxlY3QiLCJhcmd1bWVudHMiLCJ0ZW1wUmV0IiwidW5wYXRjaEFsbCIsIlNldHRpbmdzUmVuZGVyZXIiLCJpbml0aWFsaXplZCIsInBhbmVscyIsInNlY3Rpb24iLCJyZWdpc3RlciIsInJlbmRlciIsInBhbmVsIiwiZWxlbWVudCIsInNvcnQiLCJhIiwiYiIsIm9yZGVyIiwiU2V0dGluZ3NWaWV3IiwiXyIsInNvbWUiLCJlIiwidG9Mb3dlckNhc2UiLCJzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIkNvcmUiLCJzdHlsZUVsZW1lbnQiLCJzdGFydCIsIl9fTk9ERV9FTlZfXyIsInJlZ2lzdGVyU2V0dGluZ3MiLCJsb2FkU3R5bGVzIiwiZXhwb3NlR2xvYmFscyIsImZsdXNoIiwiZGVmaW5lUHJvcGVydGllcyIsIktlcm5lbFNldHRpbmdzIiwiZnJlZXplIiwiS2VybmVsU3RvcmFnZSIsImRpc3BhdGNoIiwibG9hZCIsInN0eWxlcyIsInN0b3AiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///575\n')}},__webpack_require__={d:(Q,I)=>{for(var F in I)__webpack_require__.o(I,F)&&!__webpack_require__.o(Q,F)&&Object.defineProperty(Q,F,{enumerable:!0,get:I[F]})},o:(Q,I)=>Object.prototype.hasOwnProperty.call(Q,I)},__webpack_exports__={};__webpack_modules__[575](0,__webpack_exports__,__webpack_require__);var __webpack_exports__Core=__webpack_exports__.Q;export{__webpack_exports__Core as Core}; \ No newline at end of file +var __webpack_modules__={5:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Q": () => (/* binding */ Core)\n});\n\n;// CONCATENATED MODULE: ./src/renderer/modules/events.ts\nconst Events=new EventTarget;/* harmony default export */ const events = (Events);\n;// CONCATENATED MODULE: ./src/renderer/modules/logger.ts\nvar Logger;(function(Logger){function parseType(type){switch(type){case"error":case"info":case"error":return type;default:return"log"}}function logMessage(type,module,...message){console[parseType(type)](`%c[KernelSettings]%c %c[${module}]%c`,"color: #A8D46B; font-weight: 700;","","color: #A8D46B","",...message)}function log(module,...message){logMessage("log",module,...message)}Logger.log=log;function info(module,...message){logMessage("info",module,...message)}Logger.info=info;function warn(module,...message){logMessage("warn",module,...message)}Logger.warn=warn;function error(module,...message){logMessage("error",module,...message)}Logger.error=error})(Logger||(Logger={}));\n;// CONCATENATED MODULE: ./src/renderer/modules/devserver.ts\nconst fs=SettingsNative.requireModule("fs");const path=SettingsNative.requireModule("path");var DevServer;(function(DevServer1){var ws=DevServer1.ws=null;var expectedClose=DevServer1.expectedClose=false;const tryJSON=function(json){try{return JSON.parse(json)}catch(error){return false}};function close(){if(!ws)return;Logger.log("DevServer","Closing WebSocket");DevServer.ws=ws=null}DevServer1.close=close;function initialize(){const win=window;if(win.KernelDevServer&&win.KernelDevServer.ws!=null){Logger.log("DevServer","Taking over socket");ws=DevServer.ws=win.KernelDevServer.ws}else{Logger.log("DevServer","Loading development server...");ws=DevServer.ws=new WebSocket("ws://localhost:5656")}win.KernelDevServer=DevServer;ws.onmessage=handleMessage;ws.onerror=error=>{Logger.error("DevServer","Fatal error:",error)};ws.onclose=()=>{DevServer.ws=ws=null;if(!expectedClose)Logger.error("DevServer","Connection closed...")}}DevServer1.initialize=initialize;async function reloadCore(){Logger.log("DevServer","Reloading core...");events.dispatchEvent(new Event("reload-core"));const content=fs.readFile(path.resolve(fs.current,"renderer.js"),"utf8");const script=document.head.appendChild(Object.assign(document.createElement("script"),{type:"module",textContent:content+";__webpack_exports__Core.start();",onload:()=>script.remove()}))}DevServer1.reloadCore=reloadCore;function reloadStyles(){events.dispatchEvent(new Event("reload-css"))}DevServer1.reloadStyles=reloadStyles;function reload(type){switch(type){case"core":{reloadCore()}break;case"styles":{reloadStyles()}break}}DevServer1.reload=reload;var handleMessage=DevServer1.handleMessage=({data})=>{const message=tryJSON(data);if(!message)return Logger.error("DevServer","Unable to parse message:",data);switch(message.operation){case"HELLO":{send("HELLO",{client:`Discord->${window.DiscordNative.app.getReleaseChannel()}`});Logger.log("DevServer","WS Connected")}break;case"RELOAD_STYLES":{reloadStyles()}break;case"RELOAD_CORE":{reloadCore()}break;default:{Logger.log("DevServer","Unknown operation:",message.operation)}}};function send(operation,data){if(!ws)throw"Tried sending message without connection established";ws.send(JSON.stringify({operation:operation,data:data}))}DevServer1.send=send})(DevServer||(DevServer={}));\n;// CONCATENATED MODULE: ./src/renderer/modules/storage.ts\nconst storage_fs=SettingsNative.requireModule("fs");const storage_path=SettingsNative.requireModule("path");var Storage;(function(Storage1){var listeners=Storage1.listeners=new Set;var location=Storage1.location="";var groups=Storage1.groups=new Map;function tryJSON(json){try{return JSON.parse(json)}catch(error){return error}}function emit(...args){const callbacks=[...listeners];for(let i=0;i{const remove=on(()=>{setState(factory())});return()=>void remove()},[]);return state}Storage1.use=use;function initialize(){location=Storage.location=storage_path.resolve(storage_fs.current,"..","..","..","storage","settings");if(!storage_fs.exists(location)){try{storage_fs.createDir(location,{recursive:true})}catch(error){return console.error(error)}}for(let files=storage_fs.readDir(location,"utf8"),i=0;icurr?.[name],groups.get(id)??def)}return groups.get(group)??def}Storage1.get=get;function set(group,data){if(~group.indexOf(".")){const[id,...paths]=group.split(".");group=id;const prop=paths.pop();const stored=groups.get(id);if(stored!=null){const object=paths.reduce((curr,name)=>curr?.[name],groups.get(id));if(object==null)throw new Error("Group path not found!");object[prop]=data}else{const tree=paths.reduce((curr,name)=>{if(!curr[name])curr[name]={};return curr[name]},{});tree[prop]=data;groups.set(id,tree)}}else{groups.set(group,data)}storage_fs.writeFile(storage_path.join(Storage.location,group+".json"),JSON.stringify(groups.get(group),null,"\t"));emit(group)}Storage1.set=set})(Storage||(Storage={}));\n;// CONCATENATED MODULE: ./src/renderer/modules/memoize.ts\nfunction memoize(object){const keys=Object.keys(object);const clone={};for(let i=0;isetTimeout(callback,0)}class Filters{static byProps(...props){return module=>props.every(prop=>prop in module)}static byDisplayName(name,def=false){return module=>(def?module=module.default:module)&&typeof module==="function"&&module.displayName===name}static byTypeString(...strings){return module=>module.type&&(module=module.type?.toString())&&strings.every(str=>module.indexOf(str)>-1)}static byCode(...strings){return module=>(module=module.toString())&&strings.every(str=>module.indexOf(str)>-1)}static byPrototype(...props){const filter=Filters.byProps(...props);return module=>module.prototype&&filter(module.prototype)}}class WebpackModule{cache=null;#listeners=new Set;get Filters(){return Filters}get chunkName(){return"webpackChunkdiscord_app"}get id(){return Symbol("kernel-settings")}constructor(){this.whenReady=this.waitForGlobal.then(()=>new Promise(async onReady=>{const[Dispatcher,UserStore]=await this.findByProps(["_dispatch","dispatch"],["getCurrentUser","_dispatchToken"],{cache:false,bulk:true,wait:true,forever:true});if(UserStore.getCurrentUser())return onReady();const listener=function(){Dispatcher.unsubscribe("START_SESSION",listener);Dispatcher.unsubscribe("CONNECTION_OPEN",listener);onReady()};Dispatcher.subscribe("START_SESSION",listener);Dispatcher.subscribe("CONNECTION_OPEN",listener)}));this.whenReady.then(()=>{let originalPush=window[this.chunkName].push;const handlePush=chunk=>{const[,modules]=chunk;for(const moduleId in modules){const originalModule=modules[moduleId];modules[moduleId]=(...args)=>{const[,exports]=args;originalModule.apply(originalModule,args);const listeners=[...this.#listeners];for(let i=0;ihandlePush,set:newPush=>{originalPush=newPush;Object.defineProperty(window[this.chunkName],"push",{value:handlePush,configurable:true,writable:true})}})})}addListener(listener){this.#listeners.add(listener);return()=>{this.#listeners.delete(listener)}}removeListener(listener){return this.#listeners.delete(listener)}findLazy(filter){const fromCache=this.findModule(filter);if(fromCache)return Promise.resolve(fromCache);return new Promise(resolve=>{const listener=m=>{const directMatch=filter(m);if(directMatch){resolve(m);return void remove()}if(!m.default)return;const defaultMatch=filter(m.default);if(!defaultMatch)return;resolve(m.default);remove()};const remove=this.addListener(listener)})}async waitFor(filter,{retries=100,all=false,forever=false,delay=50}={}){for(let i=0;isetTimeout(res,delay))}}parseOptions(args,filter=thing=>typeof thing==="object"&&thing!=null&&!Array.isArray(thing)){return[args,filter(args.at(-1))?args.pop():{}]}request(cache1=true){if(cache1&&this.cache)return this.cache;let req=undefined;if(Array.isArray(window[this.chunkName])){const chunk=[[this.id],{},__nested_webpack_require_3563__=>req=__nested_webpack_require_3563__];webpackChunkdiscord_app.push(chunk);webpackChunkdiscord_app.splice(webpackChunkdiscord_app.indexOf(chunk),1)}if(cache1)this.cache=req;return req}findModule(filter,{all=false,cache:cache1=true,force=true,default:defaultExports=false}={}){if(typeof filter!=="function")return void 0;const __nested_webpack_require_3896__=this.request(cache1);const found=[];let hasError=null;if(!__nested_webpack_require_3896__)return;const wrapFilter=function(module,index){try{return filter(module,index)}catch(error){hasError??=error;return false}};for(const id in __nested_webpack_require_3896__.c){const module=__nested_webpack_require_3896__.c[id].exports;if(!module||module===window)continue;switch(typeof module){case"object":{if(wrapFilter(module,id)){if(!all)return module;found.push(module)}if(module.default!=null&&typeof module.default!=="number"&&wrapFilter(module.default,id)){const exports=defaultExports?module:module.default;if(!all)return exports;found.push(exports)}if(force)for(const key in module){if(!module[key])continue;if(wrapFilter(module[key],id)){if(!all)return module[key];found.push(module[key])}}break}case"function":{if(wrapFilter(module,id)){if(!all)return module;found.push(module)}break}}}if(hasError){setImmediate(()=>{console.warn("[Webpack] filter threw an error. This can cause lag spikes at the user\'s end. Please fix asap.\\n\\n",hasError)})}return all?found:found[0]}findModules(filter){return this.findModule(filter,{all:true})}bulk(...options){const[filters,{wait=false,...rest}]=this.parseOptions(options);const found=new Array(filters.length);const searchFunction=wait?this.waitFor:this.findModule;const wrappedFilters=filters.map(filter=>{if(Array.isArray(filter))filter=Filters.byProps(...filter);if(typeof filter==="string")filter=Filters.byDisplayName(filter);return m=>{try{return filter(m)}catch(error){return false}}});const returnValue=searchFunction.call(this,module=>{for(let i=0;ifound);return found}findByProps(...options){const[props,{bulk=false,wait=false,...rest}]=this.parseOptions(options);if(!bulk&&!wait){return this.findModule(Filters.byProps(...props),rest)}if(wait&&!bulk){return this.waitFor(Filters.byProps(...props),rest)}if(bulk){const filters=props.map(propsArray=>Filters.byProps(...propsArray)).concat({wait,...rest});return this.bulk(...filters)}return null}findByDisplayName(...options){const[displayNames,{bulk=false,wait=false,...rest}]=this.parseOptions(options);if(!bulk&&!wait){return this.findModule(Filters.byDisplayName(displayNames[0]),rest)}if(wait&&!bulk){return this.waitFor(Filters.byDisplayName(displayNames[0]),rest)}if(bulk){const filters=displayNames.map(filters.map(Filters.byDisplayName)).concat({wait,cache});return this.bulk(...filters)}return null}findIndex(filter){let foundIndex=-1;this.findModule((module,index)=>{if(filter(module))foundIndex=index});return foundIndex}atIndex(index){return this.request(true)?.c[index]}get waitForGlobal(){return new Promise(async onExists=>{while(!Array.isArray(window[this.chunkName])){await new Promise(setImmediate)}onExists()})}async wait(callback=null){return this.whenReady.then(()=>{typeof callback==="function"&&callback()})}get whenExists(){return this.waitForGlobal}on(event,listener){switch(event){case"LOADED":return this.whenReady.then(listener)}}get once(){return this.on}}const Webpack=new WebpackModule;/* harmony default export */ const webpack = (Webpack);\n;// CONCATENATED MODULE: ./src/renderer/components/discord.ts\nconst DiscordComponents=memoize({get Button(){return webpack.findByProps("BorderColors")},get Switch(){return webpack.findModule(m=>typeof m==="function"&&Filters.byCode("helpdeskArticleId")(m))},get Markdown(){return webpack.findModule(m=>m?.prototype?.render&&m.rules)},get Text(){return webpack.findModule(m=>m.Sizes?.SIZE_24&&m.Colors?.LINK)},get Spinner(){return webpack.findModule(m=>m.Type?.SPINNING_CIRCLE)},get Flex(){return webpack.findByProps("Child","Align")},get Link(){return webpack.findModule(m=>typeof m==="function"&&Filters.byCode("href","anchor")(m))},get FormTitle(){return webpack.findModule(m=>m.Tags&&Filters.byCode("errorSeparator")(m))},get FormNotice(){return webpack.findModule(m=>m.Types&&Filters.byCode("formNoticeTitle","formNoticeBody")(m))},get FormDivider(){return webpack.findModule(m=>typeof m==="function"&&(m=m.toString())&&m.length<200&&m.includes("divider"))},get FormItem(){return webpack.findModule(m=>m.Tags&&Filters.byCode("children","createElement","disabled","tag","title")(m))},get Tooltips(){return webpack.findByProps("Positions","Colors")}});/* harmony default export */ const discord = (DiscordComponents);\n;// CONCATENATED MODULE: ./src/renderer/components/icons/trash.tsx\nfunction _extends(){_extends=Object.assign||function(target){for(var i=1;iReact.createElement("svg",shield_extends({xmlns:"http://www.w3.org/2000/svg",height:"24",viewBox:"0 0 24 24",width:"24"},props),React.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),React.createElement("path",{d:"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z",fill:"currentColor"}));const Warning=props=>React.createElement("svg",shield_extends({xmlns:"http://www.w3.org/2000/svg","enable-background":"new 0 0 24 24",height:"24",viewBox:"0 0 24 24",width:"24"},props),React.createElement("g",null,React.createElement("path",{d:"M0,0h24v24H0V0z",fill:"none"})),React.createElement("g",null,React.createElement("path",{d:"M12,2L4,5v6.09c0,5.05,3.41,9.76,8,10.91c4.59-1.15,8-5.86,8-10.91V5L12,2z M13,16h-2v-2h2V16z M13,12h-2V7h2V12z",fill:"currentColor"})));var Types;(function(Types){Types["VERIFIED"]="VERIFIED";Types["WARNING"]="WARNING"})(Types||(Types={}));const Shield=({type,...props})=>{switch(type){case Types.VERIFIED:return React.createElement(Verified,shield_extends({},props));case Types.WARNING:return React.createElement(Warning,shield_extends({},props));default:return null}};Shield.Types=Types;/* harmony default export */ const shield = (Shield);\n;// CONCATENATED MODULE: ./src/renderer/components/icons/update_available.tsx\nfunction update_available_extends(){update_available_extends=Object.assign||function(target){for(var i=1;iReact.createElement(Button,card_extends({},props,{className:"kernel-toolbutton",look:Button.Looks.BLANK,size:Button.Sizes.NONE,onClick:onClick}),React.createElement(Icon,{size:"20",name:icon,color:danger?"#ed4245":undefined})))}function SwitchWrapper({value,onChange,disabled}){const{Switch}=discord;const[isChecked,setChecked]=React.useState(value);return React.createElement(Switch,{checked:isChecked,disabled:disabled,value:value,onChange:React.useCallback(()=>{if(disabled)return;onChange(!isChecked);setChecked(value=>!value)},[onChange,isChecked])})}function openItem(path){if(path.endsWith(".asar"))return Electron.showItemInFolder(path);Electron.openPath(path)}function KernelCard({pkg}){const{Markdown,Text}=discord;return React.createElement("div",{className:"kernel-card"},React.createElement("div",{className:"kernel-card-tools"},React.createElement(ToolButton,{label:"Open Path",icon:"Folder",onClick:()=>openItem(pkg.path)}),React.createElement(ToolButton,{danger:true,label:"Delete",icon:"Trash",onClick:()=>Electron.trashItem(pkg.path)})),React.createElement("div",{className:"kernel-card-header"},React.createElement(Text,{className:"kernel-card-name"},pkg.name)),pkg.description!=null&&React.createElement(Text,{className:"kernel-card-desc"},React.createElement(Markdown,null,pkg.description)),React.createElement("div",{className:"kernel-footer"},React.createElement(SwitchWrapper,{value:pkg.enabled,enabled:pkg.enabled,disabled:pkg.id==="kernel-settings",onChange:value=>{if(!value)kernel.packages.stopPackage(pkg.id);else kernel.packages.startPackage(pkg.id)}})))}\n;// CONCATENATED MODULE: ./src/renderer/components/panel.tsx\nconst panel_kernel=window.kernel;function KernelPanel(){const{FormTitle}=discord;return React.createElement("div",{className:"kernel-panel"},React.createElement(FormTitle,{tag:FormTitle.Tags.H1},"Packages"),React.createElement("div",{className:"kernel-card-scroller"},Object.values(panel_kernel.packages.getPackages()).map(pkg=>React.createElement(KernelCard,{pkg:pkg,key:pkg.id??pkg.name}))))}\n;// CONCATENATED MODULE: ./src/renderer/modules/discord.ts\nconst DiscordModules=memoize({get Moment(){return webpack.findByProps("momentProperties")}});/* harmony default export */ const modules_discord = (DiscordModules);\n;// CONCATENATED MODULE: ./src/renderer/modules/makelazy.ts\nfunction makeLazy(factory,fallback){return function LazyComponent(props){const[state,setState]=React.useState({resolved:false,value:void 0});React.useEffect(()=>{if(state.resolved)return;factory(props).then(value=>{setState({value,resolved:true})})},[state]);return state.resolved?state.value:React.createElement(fallback,props)}}\n;// CONCATENATED MODULE: ./src/renderer/modules/simplegit.ts\nconst period="@@@===@@@";const commitFields=["hash","hash_short","author","date","message"];const hashFields=["short","full"];const child_process=SettingsNative.requireModule("child_process");class Git{static executeCmd(cmd,cwd){return new Promise((resolve,reject)=>{child_process.exec(cmd,{cwd},(error,stdout)=>{if(error)return reject(error);resolve(stdout)})})}static async isInstalled(){try{await this.executeCmd("git --version");return true}catch{return false}}static async isRepo(cwd){try{const result=await this.executeCmd("git rev-parse --is-inside-work-tree",cwd);return result==="true"}catch{return false}}static async getBranchName(cwd){try{const result=await this.executeCmd("git branch -a",cwd);if(!result)return null;return result.slice(2,result.indexOf("\\n"))}catch(error){console.error(error);return null}}static async getLatestCommit(cwd,target="master"){try{return this.parsePeriods(hashFields,await this.executeCmd(`git log -1 ${target} --pretty=format:"%h${period}%H"`,cwd))}catch(error){console.error(error);return{hasError:true}}}static async getDiff(cwd,target="master"){try{const result=await this.executeCmd(`git log ${target}..origin/${target} --pretty=format:"%H${period}%h${period}%an${period}%ar${period}%s"`,cwd);if(!result)return[];return result.split("\\n").map(p=>this.parsePeriods(commitFields,p))}catch(error){console.error(error);return[]}}static parsePeriods(fields,out){return Object.fromEntries(out.split(period).map((c,i)=>[fields[i],c]))}}\n;// CONCATENATED MODULE: ./src/renderer/components/primitives.tsx\nfunction Show({when,children,fallback=null}){return when?children:fallback}function Switch({children,default:def=null}){return children.find(child=>child?.props?.when)??def}function Match({when,children}){return children}function For({each,children}){const result=[];for(let i=0;i{Promise.resolve(factory()).then(result=>{setState({loaded:typeof result==="boolean"?true:!!result,result:result})}).catch(console.error)};React.useEffect(handleFetch,deps??[]);return{...state,fetch(){setState({loaded:false,result:null});handleFetch()}}}const LoadingSpinner=()=>{const{Spinner}=discord;return React.createElement(Spinner,{type:Spinner.Type.LOW_MOTION,className:"ksu-spinner"})};const CurrentBranch=makeLazy(async({gitLoaded})=>{if(!gitLoaded)return null;const{Link}=discord;const branch=await Git.getBranchName(updates_fs.current);return React.createElement(Link,{href:`https://github.com/strencher-kernel/settings/tree/${branch}`},branch)},LoadingSpinner);const CurrentCommitHash=makeLazy(async({gitLoaded})=>{if(!gitLoaded)return null;const{Text,Link}=discord;const hash=await Git.getLatestCommit(updates_fs.current,await Git.getBranchName(updates_fs.current));if(hash.hasError)return React.createElement(Text,{color:Text.Colors.RED},"error");return React.createElement(Link,{href:`https://github.com/strencher-kernel/settings/tree/${hash.full}`},hash.short)},LoadingSpinner);let needsReload=false;function UpdaterPanel(){const{Moment}=modules_discord;const[errorMessage,setError]=React.useState(null);const{Link,Button,Text,Flex,FormTitle,FormNotice,FormDivider,FormItem,Spinner}=discord;const git=useGitCommand(()=>Git.isInstalled());const updates=useGitCommand(async()=>{if(!git.loaded||!git.result)return[];return Git.getDiff(updates_fs.current)},[git.loaded]);const lastUpdate=Moment(Storage.use(()=>Storage.get("updater.lastFetch",new Date)));return React.createElement("div",{className:"kernel-panel"},React.createElement(FormTitle,{tag:FormTitle.Tags.H1},"Updates"),React.createElement(Show,{when:git.loaded,fallback:React.createElement(Spinner,{type:Spinner.Type.WANDERING_CUBES})},React.createElement(Show,{when:!git.result},React.createElement(FormNotice,{type:FormNotice.Types.DANGER,className:"ks-marginBottom20",title:"Git installation not found!",imageData:{src:"/assets/6e97f6643e7df29b26571d96430e92f4.svg",width:60,height:60},body:React.createElement("span",null,"Currently KernelSettings relies on your local git installation. Please install git to use this updater.")})),React.createElement(Show,{when:errorMessage!=null},React.createElement(FormNotice,{type:FormNotice.Types.DANGER,className:"ks-marginBottom20",title:"Error occurred",imageData:{src:"/assets/6e97f6643e7df29b26571d96430e92f4.svg",width:60,height:60},body:React.createElement("span",null,errorMessage)})),React.createElement(Show,{when:errorMessage==null&&needsReload},React.createElement(FormNotice,{type:FormNotice.Types.WARNING,className:"ks-marginBottom20",title:"Reload required",imageData:{src:"/assets/6e97f6643e7df29b26571d96430e92f4.svg",width:60,height:60},body:React.createElement("span",null,"Client reload is required in order to make changes take affect.")})),React.createElement(Show,{when:git.result},React.createElement(Flex,{className:"ksu-card",direction:Flex.Direction.VERTICAL},React.createElement(Flex,{justify:Flex.Justify.BETWEEN,align:Flex.Align.CENTER},React.createElement(Flex,{className:"ksu-shield-container",direction:Flex.Direction.HORIZONTAL,align:Flex.Align.START,justify:Flex.Justify.CENTER},React.createElement(Show,{when:updates.loaded,fallback:React.createElement(UpdateAvailable,{width:"70",height:"70",className:"ks-update-available ksu-shield"})},React.createElement(shield,{type:updates.result?.length>0?shield.Types.WARNING:shield.Types.VERIFIED,width:"70",height:"70",className:`ksu-shield ${updates.result?.length>0?"ksu-shield-warn":"ksu-shield-ok"}`})),React.createElement(Flex.Child,null,React.createElement(Text,{size:Text.Sizes.SIZE_24,color:Text.Colors.HEADER_PRIMARY},React.createElement(Switch,{default:"Everything is up to date!"},React.createElement(Match,{when:!updates.loaded},"Loading..."),React.createElement(Match,{when:updates.result?.length>0},"Something needs to be updated!"))),React.createElement(Text,{size:Text.Sizes.SIZE_14,color:Text.Colors.HEADER_SECONDARY},"Last Checked: ",lastUpdate.calendar()))),React.createElement("div",{className:"ksu-git-info"},React.createElement(Text,{className:"ksu-git-info-item"},"Branch: ",React.createElement(CurrentBranch,{gitLoaded:!!git.result})),React.createElement(Text,{className:"ksu-git-info-item"},"Commit: ",React.createElement(CurrentCommitHash,{gitLoaded:!!git.result})))),React.createElement(FormDivider,{className:"ksu-divider"}),React.createElement(Flex,{direction:Flex.Direction.HORIZONTAL},React.createElement(Button,{disabled:!updates.loaded,color:Button.Colors.BRAND,size:Button.Sizes.SMALL,className:"ksu-button",onClick:()=>{updates.fetch();Storage.set("updater.lastFetch",new Date)}},"Check for Updates"),React.createElement(Show,{when:updates.result?.length>0},React.createElement(Button,{disabled:!updates.loaded,color:Button.Colors.YELLOW,size:Button.Sizes.SMALL,className:"ksu-button",onClick:()=>{Git.executeCmd("git pull",updates_fs.current).then(()=>{needsReload=true;updates.fetch()}).catch(error=>{Logger.error("Updater","Failed to update!",error);setError("Error occurred while updating kernel settings. Check your console (Ctrl/Cmd + Shift + I) and report any errors.")})}},"Update")),React.createElement(Show,{when:needsReload},React.createElement(Button,{color:Button.Colors.GREEN,size:Button.Sizes.SMALL,className:"ksu-button ksu-reload-button",onClick:()=>{window.location.reload()}},"Reload ",React.createElement(UpdateAvailable,null)))),React.createElement(Show,{when:updates.result?.length>0},React.createElement(FormDivider,{className:"ksu-divider"}),React.createElement(FormItem,{title:"Recent Commits",tag:"h5"},React.createElement(For,{each:updates.result},(commit,index)=>React.createElement("div",{className:"ksu-commit",key:index},React.createElement("span",{className:"ksu-commit-hash"},React.createElement(Link,{href:`https://github.com/strencher-kernel/settings/commit/${commit.hash}`},commit.hash_short)),React.createElement("span",{className:"ksu-commit-name"},commit.message),React.createElement("span",{className:"ksu-commit-author-label"}," by "),React.createElement("span",{className:"ksu-commit-author"},React.createElement("img",{className:"ksu-commit-author-avatar",src:`https://github.com/${commit.author}.png?size=20`}),React.createElement("span",{className:"ksu-commit-author-name"},commit.author))))))))))}\n;// CONCATENATED MODULE: ./src/renderer/modules/patcher.ts\nvar Patcher;(function(Patcher){const patches=new Set;function patch(module,func,callback,before=false){const original=module[func];const unpatch=()=>{module[func]=original};module[func]=function(){if(before){try{Reflect.apply(callback,this,arguments)}catch(error){console.error("[Kernel:patcher] Error during before patch:",error)}}let returnValue=Reflect.apply(original,this,arguments);if(before)return returnValue;try{const tempRet=Reflect.apply(callback,this,[arguments,returnValue]);if(tempRet!=null)returnValue=tempRet}catch(error1){console.error("[Kernel:patcher] Error during patch:",error1)}return returnValue};Object.assign(module[func],original,{toString(){return original.toString()}});patches.add(unpatch);return unpatch}Patcher.patch=patch;function unpatchAll(){for(const unpatch of patches)unpatch()}Patcher.unpatchAll=unpatchAll})(Patcher||(Patcher={}));\n;// CONCATENATED MODULE: ./src/renderer/modules/settings.ts\nconst win=window;var SettingsRenderer;(function(SettingsRenderer1){let initialized=false;var panels=SettingsRenderer1.panels=win["__kernel_settings_cache__"]??[{section:"DIVIDER"},{section:"HEADER",label:"Kernel",id:"kernel-settings"}];function register(name,render){const panel={section:`Kernel-${name}`,label:name,id:`kernel-settings-${name}`,className:`kernel-settings`,element:typeof render==="function"?render:render.render,...typeof render==="object"?render:{}};SettingsRenderer.panels.push(panel);SettingsRenderer.panels.sort((a,b)=>a.order-b.order);return()=>{const index=SettingsRenderer.panels.indexOf(panel);if(index<0)return false;SettingsRenderer.panels.splice(index,1);return true}}SettingsRenderer1.register=register;async function initialize(){if(initialized)return;initialized=true;const SettingsView=await webpack.findLazy(webpack.Filters.byPrototype("getPredicateSections"));if(!win["__kernel_settings_cache__"])Patcher.patch(SettingsView.prototype,"getPredicateSections",function(_,res){if(!Array.isArray(res)||!res.some(e=>e?.section?.toLowerCase()==="changelog")||res.some(s=>s?.id==="kernel-settings"))return;const index=res.findIndex(s=>s?.section?.toLowerCase()==="changelog")-1;if(index<0)return;res.splice(index,0,...SettingsRenderer.panels)});events.addEventListener("reload-core",()=>{win["__kernel_settings_cache__"]=panels})}SettingsRenderer1.initialize=initialize})(SettingsRenderer||(SettingsRenderer={}));\n;// CONCATENATED MODULE: ./src/renderer/index.tsx\nconst renderer_fs=SettingsNative.requireModule("fs");const renderer_path=SettingsNative.requireModule("path");var Core;(function(Core){let styleElement=null;async function start(){await webpack.whenReady;Logger.log("Core","Started.");window.React=webpack.findByProps("createElement","useEffect");if(false){}SettingsRenderer.initialize();registerSettings();Storage.initialize();loadStyles();exposeGlobals()}Core.start=start;function registerSettings(){let flush=[SettingsRenderer.register("Updates",{render:()=>React.createElement(UpdaterPanel,null),order:2}),SettingsRenderer.register("Packages",{render:()=>React.createElement(KernelPanel,null),order:1})];events.addEventListener("reload-core",()=>{for(let i=0;iDispatcher.dispatch({type:"KERNEL_SETTINGS_INIT"}))}Core.exposeGlobals=exposeGlobals;function loadStyles(){const location=renderer_path.resolve(renderer_fs.current,"style.css");if(!renderer_fs.isFile(location))return;const load=function(){const styles=renderer_fs.readFile(location,"utf8");styleElement=document.head.appendChild(Object.assign(document.createElement("style"),{id:"kernel-style",textContent:styles}))};load();events.addEventListener("reload-css",()=>{styleElement.remove();load();Logger.log("Styles","Reloaded.")})}Core.loadStyles=loadStyles;function stop(){Patcher.unpatchAll();styleElement?.remove()}Core.stop=stop})(Core||(Core={}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dlksUUFDbEIsTUFIZ0JxWixLQUFBQSxPQS9FSGYsT0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9ldmVudHMudHM/YzBmMSIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9sb2dnZXIudHM/NjRlNiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9kZXZzZXJ2ZXIudHM/ODdmYiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9zdG9yYWdlLnRzPzBmMDYiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL21vZHVsZXMvbWVtb2l6ZS50cz8wZDQ0Iiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9tb2R1bGVzL3dlYnBhY2sudHM/NTU4YSIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvY29tcG9uZW50cy9kaXNjb3JkLnRzP2U0YWUiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL2NvbXBvbmVudHMvaWNvbnMvdHJhc2gudHN4PzYzMWQiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL2NvbXBvbmVudHMvaWNvbnMvZm9sZGVyLnRzeD9kOGVmIiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2ljb25zL3NoaWVsZC50c3g/YzFlMyIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvY29tcG9uZW50cy9pY29ucy91cGRhdGVfYXZhaWxhYmxlLnRzeD8yYzU4Iiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2ljb25zL2luZGV4LnRzeD9jNzAyIiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2NhcmQudHN4P2UyMmIiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL2NvbXBvbmVudHMvcGFuZWwudHN4P2JmZGUiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL21vZHVsZXMvZGlzY29yZC50cz9iM2M5Iiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9tb2R1bGVzL21ha2VsYXp5LnRzPzYyMDUiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL21vZHVsZXMvc2ltcGxlZ2l0LnRzPzRjNzIiLCJ3ZWJwYWNrOi8va2VybmVsLXNldHRpbmdzLy4vc3JjL3JlbmRlcmVyL2NvbXBvbmVudHMvcHJpbWl0aXZlcy50c3g/MDU4NCIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvY29tcG9uZW50cy91cGRhdGVzLnRzeD84MmZhIiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9tb2R1bGVzL3BhdGNoZXIudHM/MTRhYiIsIndlYnBhY2s6Ly9rZXJuZWwtc2V0dGluZ3MvLi9zcmMvcmVuZGVyZXIvbW9kdWxlcy9zZXR0aW5ncy50cz83Y2E0Iiwid2VicGFjazovL2tlcm5lbC1zZXR0aW5ncy8uL3NyYy9yZW5kZXJlci9pbmRleC50c3g/ODhhOSJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBFdmVudHM6IEV2ZW50VGFyZ2V0ICYge1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnQ6IFwicmVsb2FkLWNzc1wiIHwgXCJyZWxvYWQtY29yZVwiLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb25jZT86IGJvb2xlYW4pOiB2b2lkO1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQ6IFwicmVsb2FkLWNzc1wiIHwgXCJyZWxvYWQtY29yZVwiLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCk6IHZvaWQ7XG59ID0gbmV3IEV2ZW50VGFyZ2V0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50czsiLCJleHBvcnQgbmFtZXNwYWNlIExvZ2dlciB7XG4gICAgdHlwZSBUeXBlcyA9IFwibG9nXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIiB8IFwiaW5mb1wiO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VUeXBlKHR5cGU6IFR5cGVzKTogc3RyaW5nIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbmZvXCI6XG4gICAgICAgICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBcImxvZ1wiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9nTWVzc2FnZSh0eXBlOiBUeXBlcywgbW9kdWxlOiBTdHJpbmcsIC4uLm1lc3NhZ2U6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnNvbGVbcGFyc2VUeXBlKHR5cGUpXShgJWNbS2VybmVsU2V0dGluZ3NdJWMgJWNbJHttb2R1bGV9XSVjYCwgXCJjb2xvcjogI0E4RDQ2QjsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJcIiwgXCJjb2xvcjogI0E4RDQ2QlwiLCBcIlwiLCAuLi5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbG9nKG1vZHVsZSwgLi4ubWVzc2FnZSkge2xvZ01lc3NhZ2UoXCJsb2dcIiwgbW9kdWxlLCAuLi5tZXNzYWdlKTt9XG4gICAgZXhwb3J0IGZ1bmN0aW9uIGluZm8obW9kdWxlLCAuLi5tZXNzYWdlKSB7bG9nTWVzc2FnZShcImluZm9cIiwgbW9kdWxlLCAuLi5tZXNzYWdlKTt9XG4gICAgZXhwb3J0IGZ1bmN0aW9uIHdhcm4obW9kdWxlLCAuLi5tZXNzYWdlKSB7bG9nTWVzc2FnZShcIndhcm5cIiwgbW9kdWxlLCAuLi5tZXNzYWdlKTt9XG4gICAgZXhwb3J0IGZ1bmN0aW9uIGVycm9yKG1vZHVsZSwgLi4ubWVzc2FnZSkge2xvZ01lc3NhZ2UoXCJlcnJvclwiLCBtb2R1bGUsIC4uLm1lc3NhZ2UpO31cbn0iLCJpbXBvcnQgRXZlbnRzIGZyb20gXCIuL2V2ZW50c1wiO1xuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuL2xvZ2dlclwiO1xuXG5jb25zdCBmcyA9IFNldHRpbmdzTmF0aXZlLnJlcXVpcmVNb2R1bGUoXCJmc1wiKTtcbmNvbnN0IHBhdGggPSBTZXR0aW5nc05hdGl2ZS5yZXF1aXJlTW9kdWxlKFwicGF0aFwiKTtcblxuZXhwb3J0IG5hbWVzcGFjZSBEZXZTZXJ2ZXIge1xuICAgIGV4cG9ydCBsZXQgd3M6IFdlYlNvY2tldCA9IG51bGw7XG4gICAgZXhwb3J0IGxldCBleHBlY3RlZENsb3NlID0gZmFsc2U7XG5cbiAgICBjb25zdCB0cnlKU09OID0gZnVuY3Rpb24gKGpzb246IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXdzKSByZXR1cm47XG5cbiAgICAgICAgTG9nZ2VyLmxvZyhcIkRldlNlcnZlclwiLCBcIkNsb3NpbmcgV2ViU29ja2V0XCIpO1xuICAgICAgICBEZXZTZXJ2ZXIud3MgPSB3cyA9IG51bGw7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB3aW4gPSB3aW5kb3cgYXMgYW55O1xuICAgICAgICBcbiAgICAgICAgaWYgKHdpbi5LZXJuZWxEZXZTZXJ2ZXIgJiYgd2luLktlcm5lbERldlNlcnZlci53cyAhPSBudWxsKSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nKFwiRGV2U2VydmVyXCIsIFwiVGFraW5nIG92ZXIgc29ja2V0XCIpO1xuICAgICAgICAgICAgd3MgPSBEZXZTZXJ2ZXIud3MgPSB3aW4uS2VybmVsRGV2U2VydmVyLndzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZyhcIkRldlNlcnZlclwiLCBcIkxvYWRpbmcgZGV2ZWxvcG1lbnQgc2VydmVyLi4uXCIpO1xuICAgICAgICAgICAgd3MgPSBEZXZTZXJ2ZXIud3MgPSBuZXcgV2ViU29ja2V0KFwid3M6Ly9sb2NhbGhvc3Q6NTY1NlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpbi5LZXJuZWxEZXZTZXJ2ZXIgPSBEZXZTZXJ2ZXI7XG4gICAgICAgIHdzLm9ubWVzc2FnZSA9IGhhbmRsZU1lc3NhZ2U7XG4gICAgICAgIHdzLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIExvZ2dlci5lcnJvcihcIkRldlNlcnZlclwiLCBcIkZhdGFsIGVycm9yOlwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgd3Mub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIERldlNlcnZlci53cyA9IHdzID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghZXhwZWN0ZWRDbG9zZSkgTG9nZ2VyLmVycm9yKFwiRGV2U2VydmVyXCIsIFwiQ29ubmVjdGlvbiBjbG9zZWQuLi5cIik7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWxvYWRDb3JlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBMb2dnZXIubG9nKFwiRGV2U2VydmVyXCIsIFwiUmVsb2FkaW5nIGNvcmUuLi5cIik7XG5cbiAgICAgICAgRXZlbnRzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVsb2FkLWNvcmVcIikpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZShwYXRoLnJlc29sdmUoZnMuY3VycmVudCwgXCJyZW5kZXJlci5qc1wiKSwgXCJ1dGY4XCIgYXMgYW55KTtcbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksIHtcbiAgICAgICAgICAgIHR5cGU6IFwibW9kdWxlXCIsXG4gICAgICAgICAgICB0ZXh0Q29udGVudDogY29udGVudCArIFwiO19fd2VicGFja19leHBvcnRzX19Db3JlLnN0YXJ0KCk7XCIsXG4gICAgICAgICAgICBvbmxvYWQ6ICgpID0+IHNjcmlwdC5yZW1vdmUoKVxuICAgICAgICB9KSk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiByZWxvYWRTdHlsZXMoKTogdm9pZCB7XG4gICAgICAgIEV2ZW50cy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInJlbG9hZC1jc3NcIikpO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gcmVsb2FkKHR5cGU6IFwiYWxsXCIgfCBcImNvcmVcIiB8IFwic3R5bGVzXCIpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiY29yZVwiOiB7XG4gICAgICAgICAgICAgICAgcmVsb2FkQ29yZSgpO1xuICAgICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzdHlsZXNcIjoge1xuICAgICAgICAgICAgICAgIHJlbG9hZFN0eWxlcygpO1xuICAgICAgICAgICAgfSBicmVhaztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBleHBvcnQgY29uc3QgaGFuZGxlTWVzc2FnZSA9ICh7ZGF0YX0pID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRyeUpTT04oZGF0YSk7XG4gICAgICAgIGlmICghbWVzc2FnZSkgcmV0dXJuIExvZ2dlci5lcnJvcihcIkRldlNlcnZlclwiLCBcIlVuYWJsZSB0byBwYXJzZSBtZXNzYWdlOlwiLCBkYXRhKTtcblxuICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uub3BlcmF0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIFwiSEVMTE9cIjoge1xuICAgICAgICAgICAgICAgIHNlbmQoXCJIRUxMT1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudDogYERpc2NvcmQtPiR7KHdpbmRvdyBhcyBhbnkpLkRpc2NvcmROYXRpdmUuYXBwLmdldFJlbGVhc2VDaGFubmVsKCl9YFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgTG9nZ2VyLmxvZyhcIkRldlNlcnZlclwiLCBcIldTIENvbm5lY3RlZFwiKTtcbiAgICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJSRUxPQURfU1RZTEVTXCI6IHtcbiAgICAgICAgICAgICAgICByZWxvYWRTdHlsZXMoKTtcbiAgICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJSRUxPQURfQ09SRVwiOiB7XG4gICAgICAgICAgICAgICAgcmVsb2FkQ29yZSgpO1xuICAgICAgICAgICAgfSBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIExvZ2dlci5sb2coXCJEZXZTZXJ2ZXJcIiwgXCJVbmtub3duIG9wZXJhdGlvbjpcIiwgbWVzc2FnZS5vcGVyYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBzZW5kKG9wZXJhdGlvbjogXCJIRUxMT1wiIHwgXCJDTE9TRVwiLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF3cykgdGhyb3cgXCJUcmllZCBzZW5kaW5nIG1lc3NhZ2Ugd2l0aG91dCBjb25uZWN0aW9uIGVzdGFibGlzaGVkXCI7XG5cbiAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvcGVyYXRpb246IG9wZXJhdGlvbixcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSkpO1xuICAgIH07XG59IiwiaW1wb3J0IHR5cGUge0RpcmVudH0gZnJvbSBcImZzXCI7XG5cbmNvbnN0IGZzID0gU2V0dGluZ3NOYXRpdmUucmVxdWlyZU1vZHVsZShcImZzXCIpO1xuY29uc3QgcGF0aCA9IFNldHRpbmdzTmF0aXZlLnJlcXVpcmVNb2R1bGUoXCJwYXRoXCIpO1xuXG5leHBvcnQgbmFtZXNwYWNlIFN0b3JhZ2Uge1xuICAgIGV4cG9ydCBsZXQgbGlzdGVuZXJzOiBTZXQ8RnVuY3Rpb24+ID0gbmV3IFNldCgpO1xuICAgIGV4cG9ydCBsZXQgbG9jYXRpb24gPSBcIlwiO1xuICAgIGV4cG9ydCBjb25zdCBncm91cHM6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiB0cnlKU09OKGpzb246IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGVtaXQoLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gWy4uLmxpc3RlbmVyc107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7Y2FsbGJhY2tzW2ldKC4uLmFyZ3MpO31cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge2NvbnNvbGUuZXJyb3IoZXJyb3IpO31cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gb24obGlzdGVuZXI6IEZ1bmN0aW9uKTogKCkgPT4gYm9vbGVhbiB7XG4gICAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuXG4gICAgICAgIHJldHVybiBvZmYuYmluZChsaXN0ZW5lcik7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBvZmYobGlzdGVuZXI6IEZ1bmN0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVzZTxUPihmYWN0b3J5OiAoKSA9PiBUKTogVCB7XG4gICAgICAgIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoZmFjdG9yeSgpKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlID0gb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKGZhY3RvcnkoKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHZvaWQgcmVtb3ZlKCk7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfTtcbiBcbiAgICBleHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgbG9jYXRpb24gPSBTdG9yYWdlLmxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGZzLmN1cnJlbnQsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwic3RvcmFnZVwiLCBcInNldHRpbmdzXCIpO1xuICAgICAgICBpZiAoIWZzLmV4aXN0cyhsb2NhdGlvbikpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZnMuY3JlYXRlRGlyKGxvY2F0aW9uLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGZpbGVzID0gZnMucmVhZERpcihsb2NhdGlvbiwgXCJ1dGY4XCIpLCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgaWYgKCFmcy5zdGF0cyhwYXRoLmpvaW4obG9jYXRpb24sIGZpbGUpKS5pc0ZpbGUoKSB8fCAhZmlsZS5lbmRzV2l0aChcIi5qc29uXCIpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZmlsZS5zbGljZSgwLCBmaWxlLmluZGV4T2YoXCIuanNvblwiKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGdyb3Vwcy5zZXQoZ3JvdXAsIHRyeUpTT04oZnMucmVhZEZpbGUocGF0aC5qb2luKGxvY2F0aW9uLCBmaWxlKSwgXCJ1dGY4XCIgYXMgYW55KSBhcyBzdHJpbmcpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gZ2V0KGdyb3VwOiBzdHJpbmcsIGRlZiA9IG51bGwpIHtcbiAgICAgICAgaWYgKH5ncm91cC5pbmRleE9mKFwiLlwiKSkge1xuICAgICAgICAgICAgY29uc3QgW2lkLCAuLi5wYXRoc10gPSBncm91cC5zcGxpdChcIi5cIik7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXRocy5yZWR1Y2UoKGN1cnIsIG5hbWUpID0+IGN1cnI/LltuYW1lXSwgZ3JvdXBzLmdldChpZCkgPz8gZGVmKTtcbiAgICAgICAgfSBcblxuICAgICAgICByZXR1cm4gZ3JvdXBzLmdldChncm91cCkgPz8gZGVmO1xuICAgIH07XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gc2V0KGdyb3VwOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgICAgICBpZiAofmdyb3VwLmluZGV4T2YoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBbaWQsIC4uLnBhdGhzXSA9IGdyb3VwLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgIGdyb3VwID0gaWQ7XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcGF0aHMucG9wKCk7XG4gICAgICAgICAgICBjb25zdCBzdG9yZWQgPSBncm91cHMuZ2V0KGlkKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHN0b3JlZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gcGF0aHMucmVkdWNlKChjdXJyLCBuYW1lKSA9PiBjdXJyPy5bbmFtZV0sIGdyb3Vwcy5nZXQoaWQpKTtcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkdyb3VwIHBhdGggbm90IGZvdW5kIVwiKTtcblxuICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWUgPSBwYXRocy5yZWR1Y2UoKGN1cnIsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyW25hbWVdKSBjdXJyW25hbWVdID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJbbmFtZV07XG4gICAgICAgICAgICAgICAgfSwge30pO1xuXG4gICAgICAgICAgICAgICAgdHJlZVtwcm9wXSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ3JvdXBzLnNldChpZCwgdHJlZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncm91cHMuc2V0KGdyb3VwLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZzLndyaXRlRmlsZShwYXRoLmpvaW4oU3RvcmFnZS5sb2NhdGlvbiwgZ3JvdXAgKyBcIi5qc29uXCIpLCBKU09OLnN0cmluZ2lmeShncm91cHMuZ2V0KGdyb3VwKSwgbnVsbCwgXCJcXHRcIikpO1xuICAgICAgICBlbWl0KGdyb3VwKTtcbiAgICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lbW9pemU8VCA9IGFueT4ob2JqZWN0OiBUKToge1trZXkgaW4ga2V5b2YgVF06IGFueX0ge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICAgIGNvbnN0IGNsb25lID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpO1xuICAgICAgICBpZiAoIWRlc2NyaXB0b3IgfHwgIWRlc2NyaXB0b3IuZ2V0KSB7XG4gICAgICAgICAgICBjbG9uZVtrZXldID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0O1xuICAgICAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9uZSwga2V5LCB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiAodmFsdWUgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZSBhcyBhbnk7XG59OyIsIi8vIEB0cy1ub2NoZWNrXG5cbmlmICh0eXBlb2YgKEFycmF5LnByb3RvdHlwZS5hdCkgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICdhdCcsIHtcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGF0KGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPCAwID8gdGhpc1t0aGlzLmxlbmd0aCAtIE1hdGguYWJzKGluZGV4KV0gOiB0aGlzW2luZGV4XTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG59XG5cbmlmICh0eXBlb2YgKHNldEltbWVkaWF0ZSkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aW5kb3cuc2V0SW1tZWRpYXRlID0gKGNhbGxiYWNrOiBhbnkpID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVycyB7XG4gICAgc3RhdGljIGJ5UHJvcHMoLi4ucHJvcHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiAobW9kdWxlOiBhbnkpID0+IHByb3BzLmV2ZXJ5KHByb3AgPT4gcHJvcCBpbiBtb2R1bGUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBieURpc3BsYXlOYW1lKG5hbWU6IHN0cmluZywgZGVmID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIChtb2R1bGU6IGFueSkgPT4gKGRlZiA/IChtb2R1bGUgPSBtb2R1bGUuZGVmYXVsdCkgOiBtb2R1bGUpICYmIHR5cGVvZiAobW9kdWxlKSA9PT0gXCJmdW5jdGlvblwiICYmIG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gbmFtZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYnlUeXBlU3RyaW5nKC4uLnN0cmluZ3M6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiAobW9kdWxlOiBhbnkpID0+IG1vZHVsZS50eXBlICYmIChtb2R1bGUgPSBtb2R1bGUudHlwZT8udG9TdHJpbmcoKSkgJiYgc3RyaW5ncy5ldmVyeShzdHIgPT4gbW9kdWxlLmluZGV4T2Yoc3RyKSA+IC0xKTtcbiAgICB9XG4gICAgc3RhdGljIGJ5Q29kZSguLi5zdHJpbmdzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gKG1vZHVsZTogYW55KSA9PiAobW9kdWxlID0gbW9kdWxlLnRvU3RyaW5nKCkpICYmIHN0cmluZ3MuZXZlcnkoc3RyID0+IG1vZHVsZS5pbmRleE9mKHN0cikgPiAtMSk7XG4gICAgfVxuICAgIHN0YXRpYyBieVByb3RvdHlwZSguLi5wcm9wczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gRmlsdGVycy5ieVByb3BzKC4uLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIChtb2R1bGU6IGFueSkgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBmaWx0ZXIobW9kdWxlLnByb3RvdHlwZSk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBNb2R1bGVGaWx0ZXIgPSAobW9kdWxlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW47XG5cbmNsYXNzIFdlYnBhY2tNb2R1bGUge1xuICAgIHdoZW5SZWFkeTogUHJvbWlzZTx2b2lkPjtcbiAgICBjYWNoZSA9IG51bGw7XG4gICAgI2xpc3RlbmVycyA9IG5ldyBTZXQoKTtcbiAgICBnZXQgRmlsdGVycygpIHtyZXR1cm4gRmlsdGVyczt9XG4gICAgZ2V0IGNodW5rTmFtZSgpIHtyZXR1cm4gXCJ3ZWJwYWNrQ2h1bmtkaXNjb3JkX2FwcFwiO31cbiAgICBnZXQgaWQoKSB7cmV0dXJuIFN5bWJvbChcImtlcm5lbC1zZXR0aW5nc1wiKTt9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy53aGVuUmVhZHkgPSB0aGlzLndhaXRGb3JHbG9iYWwudGhlbigoKSA9PiBuZXcgUHJvbWlzZShhc3luYyBvblJlYWR5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtEaXNwYXRjaGVyLCBVc2VyU3RvcmVdID0gYXdhaXQgdGhpcy5maW5kQnlQcm9wcyhcbiAgICAgICAgICAgICAgICBbXCJfZGlzcGF0Y2hcIiwgXCJkaXNwYXRjaFwiXSwgW1wiZ2V0Q3VycmVudFVzZXJcIiwgXCJfZGlzcGF0Y2hUb2tlblwiXSxcbiAgICAgICAgICAgICAgICB7Y2FjaGU6IGZhbHNlLCBidWxrOiB0cnVlLCB3YWl0OiB0cnVlLCBmb3JldmVyOiB0cnVlfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKFVzZXJTdG9yZS5nZXRDdXJyZW50VXNlcigpKSByZXR1cm4gb25SZWFkeSgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBEaXNwYXRjaGVyLnVuc3Vic2NyaWJlKFwiU1RBUlRfU0VTU0lPTlwiLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgRGlzcGF0Y2hlci51bnN1YnNjcmliZShcIkNPTk5FQ1RJT05fT1BFTlwiLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgb25SZWFkeSgpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgRGlzcGF0Y2hlci5zdWJzY3JpYmUoXCJTVEFSVF9TRVNTSU9OXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgIERpc3BhdGNoZXIuc3Vic2NyaWJlKFwiQ09OTkVDVElPTl9PUEVOXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMud2hlblJlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG9yaWdpbmFsUHVzaCA9IHdpbmRvd1t0aGlzLmNodW5rTmFtZV0ucHVzaDtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlUHVzaCA9IChjaHVuazogYW55W10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbLCBtb2R1bGVzXSA9IGNodW5rO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtb2R1bGVJZCBpbiBtb2R1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsTW9kdWxlID0gbW9kdWxlc1ttb2R1bGVJZF07XG5cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlc1ttb2R1bGVJZF0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWywgZXhwb3J0c10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxNb2R1bGUuYXBwbHkob3JpZ2luYWxNb2R1bGUsIGFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBbLi4udGhpcy4jbGlzdGVuZXJzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtsaXN0ZW5lcnNbaV0oZXhwb3J0cyk7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiW1dlYnBhY2tdXCIsIFwiQ291bGQgbm90IGZpcmUgY2FsbGJhY2sgbGlzdGVuZXI6XCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtb2R1bGVzW21vZHVsZUlkXSwgb3JpZ2luYWxNb2R1bGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBvcmlnaW5hbE1vZHVsZS50b1N0cmluZy5iaW5kKG9yaWdpbmFsTW9kdWxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fb3JpZ2luYWw6IG9yaWdpbmFsTW9kdWxlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFB1c2guYXBwbHkod2luZG93W3RoaXMuY2h1bmtOYW1lXSwgW2NodW5rXSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93W3RoaXMuY2h1bmtOYW1lXSwgXCJwdXNoXCIsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiBoYW5kbGVQdXNoLFxuICAgICAgICAgICAgICAgIHNldDogKG5ld1B1c2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxQdXNoID0gbmV3UHVzaDtcblxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93W3RoaXMuY2h1bmtOYW1lXSwgXCJwdXNoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBoYW5kbGVQdXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLiNsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXI6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBmaW5kTGF6eShmaWx0ZXI6IEZ1bmN0aW9uKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZnJvbUNhY2hlID0gdGhpcy5maW5kTW9kdWxlKGZpbHRlcik7XG4gICAgICAgIGlmIChmcm9tQ2FjaGUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZnJvbUNhY2hlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IChtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IGZpbHRlcihtKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgcmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmICghbS5kZWZhdWx0KSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdE1hdGNoID0gZmlsdGVyKG0uZGVmYXVsdCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkZWZhdWx0TWF0Y2gpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUobS5kZWZhdWx0KTtcbiAgICAgICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZSA9IHRoaXMuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyB3YWl0Rm9yKGZpbHRlcjogTW9kdWxlRmlsdGVyLCB7cmV0cmllcyA9IDEwMCwgYWxsID0gZmFsc2UsIGZvcmV2ZXIgPSBmYWxzZSwgZGVsYXkgPSA1MH0gPSB7fSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgKGkgPCByZXRyaWVzKSB8fCBmb3JldmVyOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMuZmluZE1vZHVsZShmaWx0ZXIsIHthbGwsIGNhY2hlOiBmYWxzZX0pO1xuICAgICAgICAgICAgaWYgKG1vZHVsZSkgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBzZXRUaW1lb3V0KHJlcywgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlT3B0aW9ucyhhcmdzLCBmaWx0ZXIgPSB0aGluZyA9PiAodHlwZW9mICh0aGluZykgPT09IFwib2JqZWN0XCIgJiYgdGhpbmcgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh0aGluZykpKSB7XG4gICAgICAgIHJldHVybiBbYXJncywgZmlsdGVyKGFyZ3MuYXQoLTEpKSA/IGFyZ3MucG9wKCkgOiB7fV07XG4gICAgfVxuXG4gICAgcmVxdWVzdChjYWNoZSA9IHRydWUpIHtcbiAgICAgICAgaWYgKGNhY2hlICYmIHRoaXMuY2FjaGUpIHJldHVybiB0aGlzLmNhY2hlO1xuICAgICAgICBsZXQgcmVxID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdpbmRvd1t0aGlzLmNodW5rTmFtZV0pKSB7XG4gICAgICAgICAgICBjb25zdCBjaHVuayA9IFtbdGhpcy5pZF0sIHt9LCBfX3dlYnBhY2tfcmVxdWlyZV9fID0+IHJlcSA9IF9fd2VicGFja19yZXF1aXJlX19dO1xuICAgICAgICAgICAgd2VicGFja0NodW5rZGlzY29yZF9hcHAucHVzaChjaHVuayk7XG4gICAgICAgICAgICB3ZWJwYWNrQ2h1bmtkaXNjb3JkX2FwcC5zcGxpY2Uod2VicGFja0NodW5rZGlzY29yZF9hcHAuaW5kZXhPZihjaHVuayksIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlKSB0aGlzLmNhY2hlID0gcmVxO1xuXG4gICAgICAgIHJldHVybiByZXE7XG4gICAgfVxuXG4gICAgZmluZE1vZHVsZShmaWx0ZXI6IE1vZHVsZUZpbHRlciwge2FsbCA9IGZhbHNlLCBjYWNoZSA9IHRydWUsIGZvcmNlID0gdHJ1ZSwgZGVmYXVsdDogZGVmYXVsdEV4cG9ydHMgPSBmYWxzZX0gPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIChmaWx0ZXIpICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2b2lkIDA7XG5cbiAgICAgICAgY29uc3QgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHRoaXMucmVxdWVzdChjYWNoZSk7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gW107XG4gICAgICAgIGxldCBoYXNFcnJvciA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFfX3dlYnBhY2tfcmVxdWlyZV9fKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgd3JhcEZpbHRlciA9IGZ1bmN0aW9uIChtb2R1bGU6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICAgICAgdHJ5IHtyZXR1cm4gZmlsdGVyKG1vZHVsZSwgaW5kZXgpO31cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhc0Vycm9yID8/PSBlcnJvcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBfX3dlYnBhY2tfcmVxdWlyZV9fLmMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18uY1tpZF0uZXhwb3J0cztcbiAgICAgICAgICAgIGlmICghbW9kdWxlIHx8IG1vZHVsZSA9PT0gd2luZG93KSBjb250aW51ZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgbW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3cmFwRmlsdGVyKG1vZHVsZSwgaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbCkgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLnB1c2gobW9kdWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgvKiBtb2R1bGUuX19lc01vZHVsZSAmJiAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmRlZmF1bHQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG1vZHVsZS5kZWZhdWx0ICE9PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB3cmFwRmlsdGVyKG1vZHVsZS5kZWZhdWx0LCBpZClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBvcnRzID0gZGVmYXVsdEV4cG9ydHMgPyBtb2R1bGUgOiBtb2R1bGUuZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWxsKSByZXR1cm4gZXhwb3J0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLnB1c2goZXhwb3J0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9yY2UgLyogJiYgbW9kdWxlLl9fZXNNb2R1bGUgKi8pIGZvciAoY29uc3Qga2V5IGluIG1vZHVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2R1bGVba2V5XSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cmFwRmlsdGVyKG1vZHVsZVtrZXldLCBpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbCkgcmV0dXJuIG1vZHVsZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLnB1c2gobW9kdWxlW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3cmFwRmlsdGVyKG1vZHVsZSwgaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbCkgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLnB1c2gobW9kdWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltXZWJwYWNrXSBmaWx0ZXIgdGhyZXcgYW4gZXJyb3IuIFRoaXMgY2FuIGNhdXNlIGxhZyBzcGlrZXMgYXQgdGhlIHVzZXIncyBlbmQuIFBsZWFzZSBmaXggYXNhcC5cXG5cXG5cIiwgaGFzRXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWxsID8gZm91bmQgOiBmb3VuZFswXTtcbiAgICB9XG5cbiAgICBmaW5kTW9kdWxlcyhmaWx0ZXI6IE1vZHVsZUZpbHRlcikge3JldHVybiB0aGlzLmZpbmRNb2R1bGUoZmlsdGVyLCB7YWxsOiB0cnVlfSk7fVxuXG4gICAgYnVsayguLi5vcHRpb25zOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBbZmlsdGVycywge3dhaXQgPSBmYWxzZSwgLi4ucmVzdH1dID0gdGhpcy5wYXJzZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gbmV3IEFycmF5KGZpbHRlcnMubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgc2VhcmNoRnVuY3Rpb24gPSB3YWl0ID8gdGhpcy53YWl0Rm9yIDogdGhpcy5maW5kTW9kdWxlO1xuICAgICAgICBjb25zdCB3cmFwcGVkRmlsdGVycyA9IGZpbHRlcnMubWFwKGZpbHRlciA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIpKSBmaWx0ZXIgPSBGaWx0ZXJzLmJ5UHJvcHMoLi4uZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKGZpbHRlcikgPT09IFwic3RyaW5nXCIpIGZpbHRlciA9IEZpbHRlcnMuYnlEaXNwbGF5TmFtZShmaWx0ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gKG0pID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge3JldHVybiBmaWx0ZXIobSk7fVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiBmYWxzZTt9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHNlYXJjaEZ1bmN0aW9uLmNhbGwodGhpcywgKG1vZHVsZTogYW55KSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdyYXBwZWRGaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gd3JhcHBlZEZpbHRlcnNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgIT09IFwiZnVuY3Rpb25cIiB8fCAhZmlsdGVyKG1vZHVsZSkgfHwgZm91bmRbaV0gIT0gbnVsbCkgY29udGludWU7XG4gICAgXG4gICAgICAgICAgICAgICAgZm91bmRbaV0gPSBtb2R1bGU7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvdW5kLmZpbHRlcihTdHJpbmcpLmxlbmd0aCA9PT0gZmlsdGVycy5sZW5ndGg7XG4gICAgICAgIH0sIHJlc3QpO1xuXG4gICAgICAgIGlmICh3YWl0KSByZXR1cm4gcmV0dXJuVmFsdWUudGhlbigoKSA9PiBmb3VuZCk7XG5cbiAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH1cblxuICAgIGZpbmRCeVByb3BzKC4uLm9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IFtwcm9wcywge2J1bGsgPSBmYWxzZSwgd2FpdCA9IGZhbHNlLCAuLi5yZXN0fV0gPSB0aGlzLnBhcnNlT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICBpZiAoIWJ1bGsgJiYgIXdhaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRNb2R1bGUoRmlsdGVycy5ieVByb3BzKC4uLnByb3BzKSwgcmVzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2FpdCAmJiAhYnVsaykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdEZvcihGaWx0ZXJzLmJ5UHJvcHMoLi4ucHJvcHMpLCByZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChidWxrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gcHJvcHMubWFwKChwcm9wc0FycmF5OiBzdHJpbmdbXSkgPT4gRmlsdGVycy5ieVByb3BzKC4uLnByb3BzQXJyYXkpKS5jb25jYXQoe3dhaXQsIC4uLnJlc3R9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVsayguLi5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmaW5kQnlEaXNwbGF5TmFtZSguLi5vcHRpb25zOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBbZGlzcGxheU5hbWVzLCB7YnVsayA9IGZhbHNlLCB3YWl0ID0gZmFsc2UsIC4uLnJlc3R9XSA9IHRoaXMucGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmICghYnVsayAmJiAhd2FpdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE1vZHVsZShGaWx0ZXJzLmJ5RGlzcGxheU5hbWUoZGlzcGxheU5hbWVzWzBdKSwgcmVzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2FpdCAmJiAhYnVsaykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdEZvcihGaWx0ZXJzLmJ5RGlzcGxheU5hbWUoZGlzcGxheU5hbWVzWzBdKSwgcmVzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnVsaykge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IGRpc3BsYXlOYW1lcy5tYXAoZmlsdGVycy5tYXAoRmlsdGVycy5ieURpc3BsYXlOYW1lKSkuY29uY2F0KHt3YWl0LCBjYWNoZX0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idWxrKC4uLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZmluZEluZGV4KGZpbHRlcjogTW9kdWxlRmlsdGVyKSB7XG4gICAgICAgIGxldCBmb3VuZEluZGV4ID0gLTE7XG5cbiAgICAgICAgdGhpcy5maW5kTW9kdWxlKChtb2R1bGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKG1vZHVsZSkpIGZvdW5kSW5kZXggPSBpbmRleDsgXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmb3VuZEluZGV4O1xuICAgIH1cblxuICAgIGF0SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHRydWUpPy5jW2luZGV4XTtcbiAgICB9XG5cbiAgICBnZXQgd2FpdEZvckdsb2JhbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIG9uRXhpc3RzID0+IHtcbiAgICAgICAgICAgIHdoaWxlICghQXJyYXkuaXNBcnJheSh3aW5kb3dbdGhpcy5jaHVua05hbWVdKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHNldEltbWVkaWF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9uRXhpc3RzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKkBkZXByZWNhdGVkIFVzZSBXZWJwYWNrLndoZW5SZWFkeS50aGVuKCgpID0+IHt9KSBpbnN0ZWFkLiAqL1xuICAgIGFzeW5jIHdhaXQoY2FsbGJhY2sgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndoZW5SZWFkeS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiICYmIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKkBkZXByZWNhdGVkIFVzZSBXZWJwYWNrLndoZW5SZWFkeS50aGVuKCgpID0+IHt9KSBpbnN0ZWFkLiAqL1xuICAgIGdldCB3aGVuRXhpc3RzKCkge3JldHVybiB0aGlzLndhaXRGb3JHbG9iYWw7fVxuXG4gICAgLyoqQGRlcHJlY2F0ZWQgVXNlIFdlYnBhY2sud2hlblJlYWR5LnRoZW4oKCkgPT4ge30pIGluc3RlYWQuICovXG4gICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJMT0FERURcIjogcmV0dXJuIHRoaXMud2hlblJlYWR5LnRoZW4obGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqQGRlcHJlY2F0ZWQgQHNlZSBXZWJwYWNrLm9uICovXG4gICAgZ2V0IG9uY2UoKSB7cmV0dXJuIHRoaXMub247fVxufVxuXG5jb25zdCBXZWJwYWNrID0gbmV3IFdlYnBhY2tNb2R1bGU7XG5cbmV4cG9ydCBkZWZhdWx0IFdlYnBhY2s7XG4iLCJpbXBvcnQgbWVtb2l6ZSBmcm9tIFwiLi4vbW9kdWxlcy9tZW1vaXplXCI7XHJcbmltcG9ydCBXZWJwYWNrLCB7IEZpbHRlcnMgfSBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrXCI7XHJcblxyXG5jb25zdCBEaXNjb3JkQ29tcG9uZW50cyA9IG1lbW9pemUoe1xyXG4gICAgZ2V0IEJ1dHRvbigpIHtyZXR1cm4gV2VicGFjay5maW5kQnlQcm9wcyhcIkJvcmRlckNvbG9yc1wiKTt9LFxyXG4gICAgZ2V0IFN3aXRjaCgpIHtyZXR1cm4gV2VicGFjay5maW5kTW9kdWxlKG0gPT4gdHlwZW9mIG0gPT09ICdmdW5jdGlvbicgJiYgRmlsdGVycy5ieUNvZGUoJ2hlbHBkZXNrQXJ0aWNsZUlkJykobSkpO30sXHJcbiAgICBnZXQgTWFya2Rvd24oKSB7cmV0dXJuIFdlYnBhY2suZmluZE1vZHVsZShtID0+IG0/LnByb3RvdHlwZT8ucmVuZGVyICYmIG0ucnVsZXMpO30sXHJcbiAgICBnZXQgVGV4dCgpIHtyZXR1cm4gV2VicGFjay5maW5kTW9kdWxlKG0gPT4gbS5TaXplcz8uU0laRV8yNCAmJiBtLkNvbG9ycz8uTElOSyk7fSxcclxuICAgIGdldCBTcGlubmVyKCkge3JldHVybiBXZWJwYWNrLmZpbmRNb2R1bGUobSA9PiBtLlR5cGU/LlNQSU5OSU5HX0NJUkNMRSk7fSxcclxuICAgIGdldCBGbGV4KCkge3JldHVybiBXZWJwYWNrLmZpbmRCeVByb3BzKFwiQ2hpbGRcIiwgXCJBbGlnblwiKTt9LFxyXG4gICAgZ2V0IExpbmsoKSB7cmV0dXJuIFdlYnBhY2suZmluZE1vZHVsZShtID0+IHR5cGVvZiBtID09PSAnZnVuY3Rpb24nICYmIEZpbHRlcnMuYnlDb2RlKCdocmVmJywgJ2FuY2hvcicpKG0pKTt9LFxyXG4gICAgZ2V0IEZvcm1UaXRsZSgpIHtyZXR1cm4gV2VicGFjay5maW5kTW9kdWxlKG0gPT4gbS5UYWdzICYmIEZpbHRlcnMuYnlDb2RlKCdlcnJvclNlcGFyYXRvcicpKG0pKTt9LFxyXG4gICAgZ2V0IEZvcm1Ob3RpY2UoKSB7cmV0dXJuIFdlYnBhY2suZmluZE1vZHVsZShtID0+IG0uVHlwZXMgJiYgRmlsdGVycy5ieUNvZGUoJ2Zvcm1Ob3RpY2VUaXRsZScsICdmb3JtTm90aWNlQm9keScpKG0pKTt9LFxyXG4gICAgZ2V0IEZvcm1EaXZpZGVyKCkge3JldHVybiBXZWJwYWNrLmZpbmRNb2R1bGUobSA9PiB0eXBlb2YgbSA9PT0gJ2Z1bmN0aW9uJyAmJiAobSA9IG0udG9TdHJpbmcoKSkgJiYgbS5sZW5ndGggPCAyMDAgJiYgbS5pbmNsdWRlcygnZGl2aWRlcicpKTt9LFxyXG4gICAgZ2V0IEZvcm1JdGVtKCkge3JldHVybiBXZWJwYWNrLmZpbmRNb2R1bGUobSA9PiBtLlRhZ3MgJiYgRmlsdGVycy5ieUNvZGUoJ2NoaWxkcmVuJywgJ2NyZWF0ZUVsZW1lbnQnLCAnZGlzYWJsZWQnLCAndGFnJywgJ3RpdGxlJykobSkpO30sXHJcbiAgICBnZXQgVG9vbHRpcHMoKSB7cmV0dXJuIFdlYnBhY2suZmluZEJ5UHJvcHMoXCJQb3NpdGlvbnNcIiwgXCJDb2xvcnNcIik7fVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IERpc2NvcmRDb21wb25lbnRzO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUcmFzaChwcm9wczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPHN2Z1xuICAgICAgICAgICAgd2lkdGg9JzI0J1xuICAgICAgICAgICAgaGVpZ2h0PScyNCdcbiAgICAgICAgICAgIHZpZXdCb3g9JzAgMCAyNCAyNCdcbiAgICAgICAgICAgIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZydcbiAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9J00xNSAzLjk5OVYySDlWMy45OTlIM1Y1Ljk5OUgyMVYzLjk5OUgxNVonXG4gICAgICAgICAgICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD0nTTUgNi45OTkwMlYxOC45OTlDNSAyMC4xMDEgNS44OTcgMjAuOTk5IDcgMjAuOTk5SDE3QzE4LjEwMyAyMC45OTkgMTkgMjAuMTAxIDE5IDE4Ljk5OVY2Ljk5OTAySDVaTTExIDE3SDlWMTFIMTFWMTdaTTE1IDE3SDEzVjExSDE1VjE3WidcbiAgICAgICAgICAgICAgICBmaWxsPSdjdXJyZW50Q29sb3InXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICApO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRm9sZGVyKHByb3BzOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8c3ZnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDUxMiA1MTInIHsuLi5wcm9wc30+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgICAgICAgICAgICBkPSdNNDY0IDEyOEgyNzJsLTY0LTY0SDQ4QzIxLjQ5IDY0IDAgODUuNDkgMCAxMTJ2Mjg4YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDE2YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTc2YzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6J1xuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgKTtcbn1cbiIsImNvbnN0IFZlcmlmaWVkID0gKHByb3BzOiBhbnkpID0+IChcbiAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgey4uLnByb3BzfT5cbiAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgPC9zdmc+XG4pO1xuXG5jb25zdCBXYXJuaW5nID0gKHByb3BzKSA9PiAoXG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZW5hYmxlLWJhY2tncm91bmQ9XCJuZXcgMCAwIDI0IDI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIHsuLi5wcm9wc30+XG4gICAgICAgIDxnPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0wLDBoMjR2MjRIMFYwelwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8Zz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIsMkw0LDV2Ni4wOWMwLDUuMDUsMy40MSw5Ljc2LDgsMTAuOTFjNC41OS0xLjE1LDgtNS44Niw4LTEwLjkxVjVMMTIsMnogTTEzLDE2aC0ydi0yaDJWMTZ6IE0xMywxMmgtMlY3aDJWMTJ6XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgIDwvZz5cbiAgICA8L3N2Zz5cbik7XG5cbmVudW0gVHlwZXMge1xuICAgIFZFUklGSUVEID0gXCJWRVJJRklFRFwiLFxuICAgIFdBUk5JTkcgPSBcIldBUk5JTkdcIlxufTtcblxudHlwZSBGQzxTLCBQID0ge30+ID0gUmVhY3QuRkM8UD4gJiBTO1xuXG5jb25zdCBTaGllbGQ6IEZDPHtUeXBlcz86IHR5cGVvZiBUeXBlc30sIHt0eXBlOiBrZXlvZiB0eXBlb2YgVHlwZXN9ICYgUmVhY3QuU1ZHQXR0cmlidXRlczxhbnk+PiA9ICh7dHlwZSwgLi4ucHJvcHN9KSA9PiB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVHlwZXMuVkVSSUZJRUQ6IHJldHVybiA8VmVyaWZpZWQgey4uLnByb3BzfSAvPjtcbiAgICAgICAgY2FzZSBUeXBlcy5XQVJOSU5HOiByZXR1cm4gPFdhcm5pbmcgey4uLnByb3BzfSAvPjtcblxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5TaGllbGQuVHlwZXMgPSBUeXBlcztcblxuZXhwb3J0IGRlZmF1bHQgU2hpZWxkOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZUF2YWlsYWJsZShwcm9wczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJrcy11cGRhdGUtYXZhaWxhYmxlXCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB7Li4ucHJvcHN9PlxuICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTUsOCBMOSwxMiBMNiwxMiBDNiwxNS4zMSA4LjY5LDE4IDEyLDE4IEMxMy4wMSwxOCAxMy45NywxNy43NSAxNC44LDE3LjMgTDE2LjI2LDE4Ljc2IEMxNS4wMywxOS41NCAxMy41NywyMCAxMiwyMCBDNy41OCwyMCA0LDE2LjQyIDQsMTIgTDEsMTIgTDUsOCBaIE0xOCwxMiBDMTgsOC42OSAxNS4zMSw2IDEyLDYgQzEwLjk5LDYgMTAuMDMsNi4yNSA5LjIsNi43IEw3Ljc0LDUuMjQgQzguOTcsNC40NiAxMC40Myw0IDEyLDQgQzE2LjQyLDQgMjAsNy41OCAyMCwxMiBMMjMsMTIgTDE5LDE2IEwxNSwxMiBMMTgsMTIgWlwiIC8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMjQgMCAwIDAgMCAyNCAyNCAyNFwiIC8+XG4gICAgICAgICAgICA8L2c+XG4gICAgICAgIDwvc3ZnPlxuICAgICk7XG59IiwiaW1wb3J0IFRyYXNoIGZyb20gJy4vdHJhc2gnO1xuaW1wb3J0IEZvbGRlciBmcm9tICcuL2ZvbGRlcic7XG5pbXBvcnQgU2hpZWxkIGZyb20gJy4vc2hpZWxkJztcbmltcG9ydCBVcGRhdGVBdmFpbGFibGUgZnJvbSAnLi91cGRhdGVfYXZhaWxhYmxlJztcblxuZXhwb3J0IGNvbnN0IEljb25zID0ge1xuICAgIFRyYXNoLFxuICAgIEZvbGRlcixcbiAgICBTaGllbGQsXG4gICAgVXBkYXRlQXZhaWxhYmxlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSWNvbih7XG4gICAgbmFtZSxcbiAgICAuLi5wcm9wc1xufToge1xuICAgIG5hbWU6IGtleW9mIHR5cGVvZiBJY29ucztcbiAgICBzaXplPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIGNsYXNzTmFtZT86IHN0cmluZztcbn0pIHtcbiAgICBjb25zdCBJY29uQ29tcG9uZW50ID0gSWNvbnNbbmFtZV07XG4gICAgY29uc3QgZXh0cmFQcm9wczogYW55ID0ge307XG5cbiAgICBpZiAoIUljb25Db21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwcm9wcy5zaXplKSB7XG4gICAgICAgIGV4dHJhUHJvcHMud2lkdGggPSBleHRyYVByb3BzLmhlaWdodCA9IHByb3BzLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDxJY29uQ29tcG9uZW50IHsuLi5wcm9wc30gey4uLmV4dHJhUHJvcHN9IC8+O1xufVxuIiwiaW1wb3J0IFwiLi9jYXJkLnNjc3NcIjtcbmltcG9ydCBEaXNjb3JkQ29tcG9uZW50cyBmcm9tIFwiLi9kaXNjb3JkXCI7XG5pbXBvcnQgSWNvbiBmcm9tIFwiLi9pY29uc1wiO1xuXG5jb25zdCBrZXJuZWw6IGFueSA9ICh3aW5kb3cgYXMgYW55KS5rZXJuZWw7XG5jb25zdCBFbGVjdHJvbiA9IFNldHRpbmdzTmF0aXZlLnJlcXVpcmVNb2R1bGUoXCJlbGVjdHJvblwiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRvb2xCdXR0b24oeyBsYWJlbCwgaWNvbiwgb25DbGljaywgZGFuZ2VyID0gZmFsc2UgfSkge1xuICBjb25zdCB7IFRvb2x0aXBzLCBCdXR0b24gfSA9IERpc2NvcmRDb21wb25lbnRzO1xuXG4gIHJldHVybiAoXG4gICAgPFRvb2x0aXBzIHRleHQ9e2xhYmVsfSBwb3NpdGlvbj1cInRvcFwiPlxuICAgICAgeyhwcm9wcykgPT4gKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImtlcm5lbC10b29sYnV0dG9uXCJcbiAgICAgICAgICBsb29rPXtCdXR0b24uTG9va3MuQkxBTkt9XG4gICAgICAgICAgc2l6ZT17QnV0dG9uLlNpemVzLk5PTkV9XG4gICAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIHNpemU9XCIyMFwiIG5hbWU9e2ljb259IGNvbG9yPXtkYW5nZXIgPyBcIiNlZDQyNDVcIiA6IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICApfVxuICAgIDwvVG9vbHRpcHM+XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTd2l0Y2hXcmFwcGVyKHsgdmFsdWUsIG9uQ2hhbmdlLCBkaXNhYmxlZCB9KSB7XG4gIGNvbnN0IHsgU3dpdGNoIH0gPSBEaXNjb3JkQ29tcG9uZW50cztcbiAgY29uc3QgW2lzQ2hlY2tlZCwgc2V0Q2hlY2tlZF0gPSBSZWFjdC51c2VTdGF0ZSh2YWx1ZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3dpdGNoXG4gICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBvbkNoYW5nZT17UmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHJldHVybjtcblxuICAgICAgICBvbkNoYW5nZSghaXNDaGVja2VkKTtcbiAgICAgICAgc2V0Q2hlY2tlZCgodmFsdWU6IGJvb2xlYW4pID0+ICF2YWx1ZSk7XG4gICAgICB9LCBbb25DaGFuZ2UsIGlzQ2hlY2tlZF0pfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuSXRlbShwYXRoOiBzdHJpbmcpIHtcbiAgaWYgKHBhdGguZW5kc1dpdGgoXCIuYXNhclwiKSkgcmV0dXJuIEVsZWN0cm9uLnNob3dJdGVtSW5Gb2xkZXIocGF0aCk7XG5cbiAgRWxlY3Ryb24ub3BlblBhdGgocGF0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEtlcm5lbENhcmQoeyBwa2cgfSkge1xuICBjb25zdCB7IE1hcmtkb3duLCBUZXh0IH0gPSBEaXNjb3JkQ29tcG9uZW50cztcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwia2VybmVsLWNhcmRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwia2VybmVsLWNhcmQtdG9vbHNcIj5cbiAgICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgICBsYWJlbD1cIk9wZW4gUGF0aFwiXG4gICAgICAgICAgaWNvbj1cIkZvbGRlclwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb3Blbkl0ZW0ocGtnLnBhdGgpfVxuICAgICAgICAvPlxuICAgICAgICA8VG9vbEJ1dHRvblxuICAgICAgICAgIGRhbmdlclxuICAgICAgICAgIGxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICBpY29uPVwiVHJhc2hcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IEVsZWN0cm9uLnRyYXNoSXRlbShwa2cucGF0aCl9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwia2VybmVsLWNhcmQtaGVhZGVyXCI+XG4gICAgICAgIDxUZXh0IGNsYXNzTmFtZT1cImtlcm5lbC1jYXJkLW5hbWVcIj57cGtnLm5hbWV9PC9UZXh0PlxuICAgICAgPC9kaXY+XG4gICAgICB7cGtnLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgKFxuICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJrZXJuZWwtY2FyZC1kZXNjXCI+XG4gICAgICAgICAgPE1hcmtkb3duPntwa2cuZGVzY3JpcHRpb259PC9NYXJrZG93bj5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwia2VybmVsLWZvb3RlclwiPlxuICAgICAgICA8U3dpdGNoV3JhcHBlclxuICAgICAgICAgIHZhbHVlPXtwa2cuZW5hYmxlZH1cbiAgICAgICAgICBlbmFibGVkPXtwa2cuZW5hYmxlZH1cbiAgICAgICAgICBkaXNhYmxlZD17cGtnLmlkID09PSBcImtlcm5lbC1zZXR0aW5nc1wifVxuICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIGtlcm5lbC5wYWNrYWdlcy5zdG9wUGFja2FnZShwa2cuaWQpO1xuICAgICAgICAgICAgZWxzZSBrZXJuZWwucGFja2FnZXMuc3RhcnRQYWNrYWdlKHBrZy5pZCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwiaW1wb3J0IEtlcm5lbENhcmQgZnJvbSBcIi4vY2FyZFwiO1xuaW1wb3J0IERpc2NvcmRDb21wb25lbnRzIGZyb20gXCIuL2Rpc2NvcmRcIjtcbmltcG9ydCBcIi4vcGFuZWwuc2Nzc1wiO1xuXG5jb25zdCBrZXJuZWw6IGFueSA9ICh3aW5kb3cgYXMgYW55KS5rZXJuZWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEtlcm5lbFBhbmVsKCkge1xuICAgIGNvbnN0IHtGb3JtVGl0bGV9ID0gRGlzY29yZENvbXBvbmVudHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImtlcm5lbC1wYW5lbFwiPlxuICAgICAgICAgICAgPEZvcm1UaXRsZSB0YWc9e0Zvcm1UaXRsZS5UYWdzLkgxfT5QYWNrYWdlczwvRm9ybVRpdGxlPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJrZXJuZWwtY2FyZC1zY3JvbGxlclwiPlxuICAgICAgICAgICAgICAgIHtPYmplY3QudmFsdWVzPGFueT4oa2VybmVsLnBhY2thZ2VzLmdldFBhY2thZ2VzKCkpLm1hcChwa2cgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8S2VybmVsQ2FyZCBwa2c9e3BrZ30ga2V5PXtwa2cuaWQgPz8gcGtnLm5hbWV9IC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cbiIsImltcG9ydCBtZW1vaXplIGZyb20gXCIuL21lbW9pemVcIjtcbmltcG9ydCBXZWJwYWNrIGZyb20gXCIuL3dlYnBhY2tcIjtcblxuY29uc3QgRGlzY29yZE1vZHVsZXMgPSBtZW1vaXplKHtcbiAgICBnZXQgTW9tZW50KCkge3JldHVybiBXZWJwYWNrLmZpbmRCeVByb3BzKFwibW9tZW50UHJvcGVydGllc1wiKTt9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRGlzY29yZE1vZHVsZXM7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZUxhenk8UCA9IGFueT4oZmFjdG9yeTogKHByb3BzOiBQKSA9PiBQcm9taXNlPGFueT4sIGZhbGxiYWNrOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDx7fT4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gTGF6eUNvbXBvbmVudChwcm9wczogUCkge1xuICAgICAgICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHtyZXNvbHZlZDogZmFsc2UsIHZhbHVlOiB2b2lkIDB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlc29sdmVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGZhY3RvcnkocHJvcHMpLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoe3ZhbHVlLCByZXNvbHZlZDogdHJ1ZX0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIFtzdGF0ZV0pO1xuXG4gICAgICAgIHJldHVybiBzdGF0ZS5yZXNvbHZlZCA/IHN0YXRlLnZhbHVlIDogUmVhY3QuY3JlYXRlRWxlbWVudChmYWxsYmFjaywgcHJvcHMpO1xuICAgIH07XG59IiwiY29uc3QgcGVyaW9kID0gXCJAQEA9PT1AQEBcIjtcclxuY29uc3QgY29tbWl0RmllbGRzID0gW1wiaGFzaFwiLCBcImhhc2hfc2hvcnRcIiwgXCJhdXRob3JcIiwgXCJkYXRlXCIsIFwibWVzc2FnZVwiXTtcclxuY29uc3QgaGFzaEZpZWxkcyA9IFtcInNob3J0XCIsIFwiZnVsbFwiXTtcclxuXHJcbmNvbnN0IGNoaWxkX3Byb2Nlc3MgPSBTZXR0aW5nc05hdGl2ZS5yZXF1aXJlTW9kdWxlKFwiY2hpbGRfcHJvY2Vzc1wiKTtcclxuXHJcbmV4cG9ydCB0eXBlIENvbW1pdCA9IHtcclxuICAgIGhhc2g/OiBzdHJpbmcsXHJcbiAgICBoYXNoX3Nob3J0Pzogc3RyaW5nO1xyXG4gICAgYXV0aG9yPzogc3RyaW5nO1xyXG4gICAgZGF0ZT86IHN0cmluZztcclxuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHaXQge1xyXG4gICAgc3RhdGljIGV4ZWN1dGVDbWQoY21kOiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjKGNtZCwge2N3ZH0sIChlcnJvciwgc3Rkb3V0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHJldHVybiByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgaXNJbnN0YWxsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlQ21kKFwiZ2l0IC0tdmVyc2lvblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFzeW5jIGlzUmVwbyhjd2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNtZChcImdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlXCIsIGN3ZCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09PSBcInRydWVcIjtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0QnJhbmNoTmFtZShjd2Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlQ21kKFwiZ2l0IGJyYW5jaCAtYVwiLCBjd2QpO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsaWNlKDIsIHJlc3VsdC5pbmRleE9mKFwiXFxuXCIpKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRMYXRlc3RDb21taXQoY3dkOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nID0gXCJtYXN0ZXJcIik6IFByb21pc2U8e3Nob3J0Pzogc3RyaW5nLCBmdWxsPzogc3RyaW5nLCBoYXNFcnJvcj86IGJvb2xlYW59PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VQZXJpb2RzKGhhc2hGaWVsZHMsIGF3YWl0IHRoaXMuZXhlY3V0ZUNtZChgZ2l0IGxvZyAtMSAke3RhcmdldH0gLS1wcmV0dHk9Zm9ybWF0OlwiJWgke3BlcmlvZH0lSFwiYCwgY3dkKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiB7aGFzRXJyb3I6IHRydWV9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0RGlmZihjd2Q6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcgPSBcIm1hc3RlclwiKTogUHJvbWlzZTxDb21taXRbXT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNtZChgZ2l0IGxvZyAke3RhcmdldH0uLm9yaWdpbi8ke3RhcmdldH0gLS1wcmV0dHk9Zm9ybWF0OlwiJUgke3BlcmlvZH0laCR7cGVyaW9kfSVhbiR7cGVyaW9kfSVhciR7cGVyaW9kfSVzXCJgLCBjd2QpO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNwbGl0KFwiXFxuXCIpLm1hcChwID0+IHRoaXMucGFyc2VQZXJpb2RzKGNvbW1pdEZpZWxkcywgcCkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBwYXJzZVBlcmlvZHMoZmllbGRzOiBzdHJpbmdbXSwgb3V0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKG91dC5zcGxpdChwZXJpb2QpLm1hcCgoYywgaSkgPT4gW2ZpZWxkc1tpXSwgY10pKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBmdW5jdGlvbiBTaG93KHt3aGVuLCBjaGlsZHJlbiwgZmFsbGJhY2sgPSBudWxsfToge3doZW46IGJvb2xlYW4sIGNoaWxkcmVuOiBhbnksIGZhbGxiYWNrPzogYW55fSkge1xuICAgIHJldHVybiB3aGVuID8gY2hpbGRyZW4gOiBmYWxsYmFjaztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTd2l0Y2goe2NoaWxkcmVuLCBkZWZhdWx0OiBkZWYgPSBudWxsfSkge1xuICAgIHJldHVybiBjaGlsZHJlbi5maW5kKChjaGlsZDogYW55KSA9PiBjaGlsZD8ucHJvcHM/LndoZW4pID8/IGRlZjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBNYXRjaCh7d2hlbiwgY2hpbGRyZW59OiB7d2hlbjogYm9vbGVhbiwgY2hpbGRyZW46IGFueX0pIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gRm9yPFQ+KHtlYWNoLCBjaGlsZHJlbn06IHtlYWNoOiBUW10sIGNoaWxkcmVuOiAoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gYW55fSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkcmVuKGVhY2hbaV0sIGkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gPD57cmVzdWx0fTwvPjtcbn07IiwiaW1wb3J0IERpc2NvcmRNb2R1bGVzIGZyb20gXCJAbW9kdWxlcy9kaXNjb3JkXCI7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIkBtb2R1bGVzL2xvZ2dlclwiO1xuaW1wb3J0IG1ha2VMYXp5IGZyb20gXCJAbW9kdWxlcy9tYWtlbGF6eVwiO1xuaW1wb3J0IEdpdCwge0NvbW1pdH0gZnJvbSBcIkBtb2R1bGVzL3NpbXBsZWdpdFwiO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tIFwiQG1vZHVsZXMvc3RvcmFnZVwiO1xuaW1wb3J0IERpc2NvcmRDb21wb25lbnRzIGZyb20gXCIuL2Rpc2NvcmRcIjtcbmltcG9ydCBTaGllbGQgZnJvbSBcIi4vaWNvbnMvc2hpZWxkXCI7XG5pbXBvcnQgVXBkYXRlQXZhaWxhYmxlIGZyb20gXCIuL2ljb25zL3VwZGF0ZV9hdmFpbGFibGVcIjtcbmltcG9ydCB7TWF0Y2gsIFN3aXRjaCwgU2hvdywgRm9yfSBmcm9tIFwiLi9wcmltaXRpdmVzXCI7XG5pbXBvcnQgXCIuL3VwZGF0ZXMuc2Nzc1wiO1xuXG5jb25zdCBmcyA9IFNldHRpbmdzTmF0aXZlLnJlcXVpcmVNb2R1bGUoXCJmc1wiKTtcblxuZnVuY3Rpb24gdXNlR2l0Q29tbWFuZDxUPihmYWN0b3J5OiAoKSA9PiBudWxsIHwgUHJvbWlzZTxUPiwgZGVwcz86IGFueVtdKToge2xvYWRlZDogYm9vbGVhbiwgcmVzdWx0OiBULCBmZXRjaCgpOiB2b2lkfSB7XG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSh7bG9hZGVkOiBmYWxzZSwgcmVzdWx0OiBudWxsfSk7XG5cbiAgICBjb25zdCBoYW5kbGVGZXRjaCA9ICgpID0+IHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGZhY3RvcnkoKSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGxvYWRlZDogdHlwZW9mIHJlc3VsdCA9PT0gXCJib29sZWFuXCIgPyB0cnVlIDogISFyZXN1bHQsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICB9O1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KGhhbmRsZUZldGNoLCBkZXBzID8/IFtdKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmZXRjaCgpIHtcbiAgICAgICAgICAgIHNldFN0YXRlKHtsb2FkZWQ6IGZhbHNlLCByZXN1bHQ6IG51bGx9KTtcbiAgICAgICAgICAgIGhhbmRsZUZldGNoKCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgTG9hZGluZ1NwaW5uZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qge1NwaW5uZXJ9ID0gRGlzY29yZENvbXBvbmVudHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8U3Bpbm5lciB0eXBlPXtTcGlubmVyLlR5cGUuTE9XX01PVElPTn0gY2xhc3NOYW1lPVwia3N1LXNwaW5uZXJcIiAvPlxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgQ3VycmVudEJyYW5jaCA9IG1ha2VMYXp5KGFzeW5jICh7Z2l0TG9hZGVkfSkgPT4ge1xuICAgIGlmICghZ2l0TG9hZGVkKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHtMaW5rfSA9IERpc2NvcmRDb21wb25lbnRzO1xuXG4gICAgY29uc3QgYnJhbmNoID0gYXdhaXQgR2l0LmdldEJyYW5jaE5hbWUoZnMuY3VycmVudCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8TGluayBocmVmPXtgaHR0cHM6Ly9naXRodWIuY29tL3N0cmVuY2hlci1rZXJuZWwvc2V0dGluZ3MvdHJlZS8ke2JyYW5jaH1gfT57YnJhbmNofTwvTGluaz5cbiAgICApO1xufSwgTG9hZGluZ1NwaW5uZXIpO1xuXG5leHBvcnQgY29uc3QgQ3VycmVudENvbW1pdEhhc2ggPSBtYWtlTGF6eShhc3luYyAoe2dpdExvYWRlZH0pID0+IHtcbiAgICBpZiAoIWdpdExvYWRlZCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCB7VGV4dCwgTGlua30gPSBEaXNjb3JkQ29tcG9uZW50cztcbiAgICBjb25zdCBoYXNoOiBhbnkgPSBhd2FpdCBHaXQuZ2V0TGF0ZXN0Q29tbWl0KGZzLmN1cnJlbnQsIGF3YWl0IEdpdC5nZXRCcmFuY2hOYW1lKGZzLmN1cnJlbnQpKTtcblxuICAgIGlmIChoYXNoLmhhc0Vycm9yKSByZXR1cm4gKFxuICAgICAgICA8VGV4dCBjb2xvcj17VGV4dC5Db2xvcnMuUkVEfT5lcnJvcjwvVGV4dD5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPExpbmsgaHJlZj17YGh0dHBzOi8vZ2l0aHViLmNvbS9zdHJlbmNoZXIta2VybmVsL3NldHRpbmdzL3RyZWUvJHtoYXNoLmZ1bGx9YH0+e2hhc2guc2hvcnR9PC9MaW5rPlxuICAgICk7XG59LCBMb2FkaW5nU3Bpbm5lcik7XG5cbmxldCBuZWVkc1JlbG9hZCA9IGZhbHNlO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlclBhbmVsKCkge1xuICAgIGNvbnN0IHtNb21lbnR9ID0gRGlzY29yZE1vZHVsZXM7XG4gICAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3Qge0xpbmssIEJ1dHRvbiwgVGV4dCwgRmxleCwgRm9ybVRpdGxlLCBGb3JtTm90aWNlLCBGb3JtRGl2aWRlciwgRm9ybUl0ZW0sIFNwaW5uZXJ9ID0gRGlzY29yZENvbXBvbmVudHM7XG4gICAgY29uc3QgZ2l0ID0gdXNlR2l0Q29tbWFuZDxib29sZWFuPigoKSA9PiBHaXQuaXNJbnN0YWxsZWQoKSk7XG4gICAgY29uc3QgdXBkYXRlcyA9IHVzZUdpdENvbW1hbmQ8Q29tbWl0W10+KGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCFnaXQubG9hZGVkIHx8ICFnaXQucmVzdWx0KSByZXR1cm4gW107XG5cbiAgICAgICAgcmV0dXJuIEdpdC5nZXREaWZmKGZzLmN1cnJlbnQpO1xuICAgIH0sIFtnaXQubG9hZGVkXSk7XG4gICAgY29uc3QgbGFzdFVwZGF0ZSA9IE1vbWVudChTdG9yYWdlLnVzZSgoKSA9PiBTdG9yYWdlLmdldChcInVwZGF0ZXIubGFzdEZldGNoXCIsIG5ldyBEYXRlKCkpKSk7XG4gICAgXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJrZXJuZWwtcGFuZWxcIj5cbiAgICAgICAgICAgIDxGb3JtVGl0bGUgdGFnPXtGb3JtVGl0bGUuVGFncy5IMX0+VXBkYXRlczwvRm9ybVRpdGxlPlxuICAgICAgICAgICAgPFNob3cgd2hlbj17Z2l0LmxvYWRlZH0gZmFsbGJhY2s9ezxTcGlubmVyIHR5cGU9e1NwaW5uZXIuVHlwZS5XQU5ERVJJTkdfQ1VCRVN9IC8+fT5cbiAgICAgICAgICAgICAgICA8U2hvdyB3aGVuPXshZ2l0LnJlc3VsdH0+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtTm90aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtGb3JtTm90aWNlLlR5cGVzLkRBTkdFUn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImtzLW1hcmdpbkJvdHRvbTIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiR2l0IGluc3RhbGxhdGlvbiBub3QgZm91bmQhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YT17e3NyYzogXCIvYXNzZXRzLzZlOTdmNjY0M2U3ZGYyOWIyNjU3MWQ5NjQzMGU5MmY0LnN2Z1wiLCB3aWR0aDogNjAsIGhlaWdodDogNjB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keT17PHNwYW4+Q3VycmVudGx5IEtlcm5lbFNldHRpbmdzIHJlbGllcyBvbiB5b3VyIGxvY2FsIGdpdCBpbnN0YWxsYXRpb24uIFBsZWFzZSBpbnN0YWxsIGdpdCB0byB1c2UgdGhpcyB1cGRhdGVyLjwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9TaG93PlxuICAgICAgICAgICAgICAgIDxTaG93IHdoZW49e2Vycm9yTWVzc2FnZSAhPSBudWxsfT5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1Ob3RpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9e0Zvcm1Ob3RpY2UuVHlwZXMuREFOR0VSfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia3MtbWFyZ2luQm90dG9tMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJFcnJvciBvY2N1cnJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZURhdGE9e3tzcmM6IFwiL2Fzc2V0cy82ZTk3ZjY2NDNlN2RmMjliMjY1NzFkOTY0MzBlOTJmNC5zdmdcIiwgd2lkdGg6IDYwLCBoZWlnaHQ6IDYwfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9ezxzcGFuPntlcnJvck1lc3NhZ2V9PC9zcGFuPn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1Nob3c+XG4gICAgICAgICAgICAgICAgPFNob3cgd2hlbj17ZXJyb3JNZXNzYWdlID09IG51bGwgJiYgbmVlZHNSZWxvYWR9PlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybU5vdGljZVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT17Rm9ybU5vdGljZS5UeXBlcy5XQVJOSU5HfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia3MtbWFyZ2luQm90dG9tMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZWxvYWQgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VEYXRhPXt7c3JjOiBcIi9hc3NldHMvNmU5N2Y2NjQzZTdkZjI5YjI2NTcxZDk2NDMwZTkyZjQuc3ZnXCIsIHdpZHRoOiA2MCwgaGVpZ2h0OiA2MH19XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5PXs8c3Bhbj5DbGllbnQgcmVsb2FkIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIG1ha2UgY2hhbmdlcyB0YWtlIGFmZmVjdC48L3NwYW4+fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU2hvdz5cbiAgICAgICAgICAgICAgICA8U2hvdyB3aGVuPXtnaXQucmVzdWx0fT5cbiAgICAgICAgICAgICAgICAgICAgPEZsZXggY2xhc3NOYW1lPVwia3N1LWNhcmRcIiBkaXJlY3Rpb249e0ZsZXguRGlyZWN0aW9uLlZFUlRJQ0FMfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGbGV4IGp1c3RpZnk9e0ZsZXguSnVzdGlmeS5CRVRXRUVOfSBhbGlnbj17RmxleC5BbGlnbi5DRU5URVJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGbGV4IGNsYXNzTmFtZT1cImtzdS1zaGllbGQtY29udGFpbmVyXCIgZGlyZWN0aW9uPXtGbGV4LkRpcmVjdGlvbi5IT1JJWk9OVEFMfSBhbGlnbj17RmxleC5BbGlnbi5TVEFSVH0ganVzdGlmeT17RmxleC5KdXN0aWZ5LkNFTlRFUn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTaG93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuPXt1cGRhdGVzLmxvYWRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPXsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFVwZGF0ZUF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjcwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNzBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJrcy11cGRhdGUtYXZhaWxhYmxlIGtzdS1zaGllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2hpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT17dXBkYXRlcy5yZXN1bHQ/Lmxlbmd0aCA+IDAgPyBTaGllbGQuVHlwZXMuV0FSTklORyA6IFNoaWVsZC5UeXBlcy5WRVJJRklFRH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjcwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI3MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtga3N1LXNoaWVsZCAke3VwZGF0ZXMucmVzdWx0Py5sZW5ndGggPiAwID8gXCJrc3Utc2hpZWxkLXdhcm5cIiA6IFwia3N1LXNoaWVsZC1va1wifWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Nob3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGbGV4LkNoaWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT17VGV4dC5TaXplcy5TSVpFXzI0fSBjb2xvcj17VGV4dC5Db2xvcnMuSEVBREVSX1BSSU1BUll9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2ggZGVmYXVsdD1cIkV2ZXJ5dGhpbmcgaXMgdXAgdG8gZGF0ZSFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1hdGNoIHdoZW49eyF1cGRhdGVzLmxvYWRlZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkaW5nLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxNYXRjaCB3aGVuPXt1cGRhdGVzLnJlc3VsdD8ubGVuZ3RoID4gMH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21ldGhpbmcgbmVlZHMgdG8gYmUgdXBkYXRlZCFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NYXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9e1RleHQuU2l6ZXMuU0laRV8xNH0gY29sb3I9e1RleHQuQ29sb3JzLkhFQURFUl9TRUNPTkRBUll9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhc3QgQ2hlY2tlZDoge2xhc3RVcGRhdGUuY2FsZW5kYXIoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GbGV4LkNoaWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmxleD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImtzdS1naXQtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJrc3UtZ2l0LWluZm8taXRlbVwiPkJyYW5jaDogPEN1cnJlbnRCcmFuY2ggZ2l0TG9hZGVkPXshIWdpdC5yZXN1bHR9IC8+PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJrc3UtZ2l0LWluZm8taXRlbVwiPkNvbW1pdDogPEN1cnJlbnRDb21taXRIYXNoIGdpdExvYWRlZD17ISFnaXQucmVzdWx0fSAvPjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmxleD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtRGl2aWRlciBjbGFzc05hbWU9XCJrc3UtZGl2aWRlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmxleCBkaXJlY3Rpb249e0ZsZXguRGlyZWN0aW9uLkhPUklaT05UQUx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF1cGRhdGVzLmxvYWRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e0J1dHRvbi5Db2xvcnMuQlJBTkR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9e0J1dHRvbi5TaXplcy5TTUFMTH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia3N1LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMuZmV0Y2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2Uuc2V0KFwidXBkYXRlci5sYXN0RmV0Y2hcIiwgbmV3IERhdGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPkNoZWNrIGZvciBVcGRhdGVzPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNob3cgd2hlbj17dXBkYXRlcy5yZXN1bHQ/Lmxlbmd0aCA+IDB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXVwZGF0ZXMubG9hZGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e0J1dHRvbi5Db2xvcnMuWUVMTE9XfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT17QnV0dG9uLlNpemVzLlNNQUxMfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia3N1LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l0LmV4ZWN1dGVDbWQoXCJnaXQgcHVsbFwiLCBmcy5jdXJyZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkc1JlbG9hZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVzLmZldGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dnZXIuZXJyb3IoXCJVcGRhdGVyXCIsIFwiRmFpbGVkIHRvIHVwZGF0ZSFcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoXCJFcnJvciBvY2N1cnJlZCB3aGlsZSB1cGRhdGluZyBrZXJuZWwgc2V0dGluZ3MuIENoZWNrIHlvdXIgY29uc29sZSAoQ3RybC9DbWQgKyBTaGlmdCArIEkpIGFuZCByZXBvcnQgYW55IGVycm9ycy5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlVwZGF0ZTwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2hvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2hvdyB3aGVuPXtuZWVkc1JlbG9hZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtCdXR0b24uQ29sb3JzLkdSRUVOfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT17QnV0dG9uLlNpemVzLlNNQUxMfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia3N1LWJ1dHRvbiBrc3UtcmVsb2FkLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlJlbG9hZCA8VXBkYXRlQXZhaWxhYmxlIC8+PC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TaG93PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GbGV4PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNob3cgd2hlbj17dXBkYXRlcy5yZXN1bHQ/Lmxlbmd0aCA+IDB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtRGl2aWRlciBjbGFzc05hbWU9XCJrc3UtZGl2aWRlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1JdGVtIHRpdGxlPVwiUmVjZW50IENvbW1pdHNcIiB0YWc9XCJoNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9yIGVhY2g9e3VwZGF0ZXMucmVzdWx0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoY29tbWl0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwia3N1LWNvbW1pdFwiIGtleT17aW5kZXh9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrc3UtY29tbWl0LWhhc2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIGhyZWY9e2BodHRwczovL2dpdGh1Yi5jb20vc3RyZW5jaGVyLWtlcm5lbC9zZXR0aW5ncy9jb21taXQvJHtjb21taXQuaGFzaH1gfT57Y29tbWl0Lmhhc2hfc2hvcnR9PC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImtzdS1jb21taXQtbmFtZVwiPntjb21taXQubWVzc2FnZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImtzdS1jb21taXQtYXV0aG9yLWxhYmVsXCI+IGJ5IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3N1LWNvbW1pdC1hdXRob3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3NOYW1lPVwia3N1LWNvbW1pdC1hdXRob3ItYXZhdGFyXCIgc3JjPXtgaHR0cHM6Ly9naXRodWIuY29tLyR7Y29tbWl0LmF1dGhvcn0ucG5nP3NpemU9MjBgfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3N1LWNvbW1pdC1hdXRob3ItbmFtZVwiPntjb21taXQuYXV0aG9yfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Gb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2hvdz5cbiAgICAgICAgICAgICAgICAgICAgPC9GbGV4PlxuICAgICAgICAgICAgICAgIDwvU2hvdz5cbiAgICAgICAgICAgIDwvU2hvdz5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cbiIsImV4cG9ydCBuYW1lc3BhY2UgUGF0Y2hlciB7XG4gICAgY29uc3QgcGF0Y2hlcyA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG5cbiAgICB0eXBlIFBhdGNoZXJDYWxsYmFjayA9ICh0aGlzT2JqZWN0OiBhbnksIG1ldGhvZEFyZ3VtZW50czogSUFyZ3VtZW50cywgcmV0dXJuVmFsdWU/OiBhbnkpID0+IGFueTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBwYXRjaChtb2R1bGU6IGFueSwgZnVuYzogc3RyaW5nLCBjYWxsYmFjazogUGF0Y2hlckNhbGxiYWNrLCBiZWZvcmUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbCA9IG1vZHVsZVtmdW5jXTtcbiAgICAgICAgY29uc3QgdW5wYXRjaCA9ICgpID0+IHttb2R1bGVbZnVuY10gPSBvcmlnaW5hbDt9O1xuXG4gICAgICAgIG1vZHVsZVtmdW5jXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChiZWZvcmUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrLCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbS2VybmVsOnBhdGNoZXJdIEVycm9yIGR1cmluZyBiZWZvcmUgcGF0Y2g6XCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IFJlZmxlY3QuYXBwbHkob3JpZ2luYWwsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlKSByZXR1cm4gcmV0dXJuVmFsdWU7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFJldCA9IFJlZmxlY3QuYXBwbHkoY2FsbGJhY2ssIHRoaXMsIFthcmd1bWVudHMsIHJldHVyblZhbHVlXSk7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXBSZXQgIT0gbnVsbCkgcmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiW0tlcm5lbDpwYXRjaGVyXSBFcnJvciBkdXJpbmcgcGF0Y2g6XCIsIGVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKG1vZHVsZVtmdW5jXSwgb3JpZ2luYWwsIHtcbiAgICAgICAgICAgIHRvU3RyaW5nKCkge3JldHVybiBvcmlnaW5hbC50b1N0cmluZygpfVxuICAgICAgICB9KTtcblxuICAgICAgICBwYXRjaGVzLmFkZCh1bnBhdGNoKTtcblxuICAgICAgICByZXR1cm4gdW5wYXRjaDtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVucGF0Y2hBbGwoKSB7XG4gICAgICAgIGZvciAoY29uc3QgdW5wYXRjaCBvZiBwYXRjaGVzKSB1bnBhdGNoKCk7XG4gICAgfTtcbn0iLCJpbXBvcnQge1BhdGNoZXJ9IGZyb20gXCIuL3BhdGNoZXJcIjtcbmltcG9ydCBXZWJwYWNrIGZyb20gXCIuL3dlYnBhY2tcIjtcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vZXZlbnRzXCI7XG5cbmNvbnN0IHdpbiA9IHdpbmRvdyBhcyBhbnk7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2V0dGluZ3NSZW5kZXJlciB7XG4gICAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBleHBvcnQgdHlwZSBTZWN0aW9uID0ge1xuICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIiB8IFwiQ1VTVE9NXCIgfCBzdHJpbmc7XG4gICAgICAgIGVsZW1lbnQ/KCk6IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgICAgICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgICAgIGlkPzogc3RyaW5nO1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIGljb24/OiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBzdHJpbmc7XG4gICAgICAgIGNvbG9yPzogc3RyaW5nO1xuICAgICAgICBvbkNsaWNrPzogRnVuY3Rpb247XG4gICAgICAgIG5ld0luZGljYXRvcj86IGJvb2xlYW47XG4gICAgICAgIGJhZGdlQ291bnQ/OiBudW1iZXI7XG4gICAgICAgIG9yZGVyPzogbnVtYmVyO1xuICAgIH07XG4gICAgXG4gICAgZXhwb3J0IHR5cGUgUGFuZWxPcHRpb25zID0ge1xuICAgICAgICByZW5kZXIoKTogUmVhY3QuUmVhY3RFbGVtZW50O1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIG9yZGVyPzogbnVtYmVyO1xuICAgIH07XG5cbiAgICBleHBvcnQgY29uc3QgcGFuZWxzOiBTZWN0aW9uW10gPSB3aW5bXCJfX2tlcm5lbF9zZXR0aW5nc19jYWNoZV9fXCJdID8/IFtcbiAgICAgICAge3NlY3Rpb246IFwiRElWSURFUlwifSxcbiAgICAgICAge3NlY3Rpb246IFwiSEVBREVSXCIsIGxhYmVsOiBcIktlcm5lbFwiLCBpZDogXCJrZXJuZWwtc2V0dGluZ3NcIn1cbiAgICBdO1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgcmVuZGVyOiAoKCkgPT4gUmVhY3QuUmVhY3RFbGVtZW50KSB8IFBhbmVsT3B0aW9ucykge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHtcbiAgICAgICAgICAgIHNlY3Rpb246IGBLZXJuZWwtJHtuYW1lfWAsXG4gICAgICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgICAgIGlkOiBga2VybmVsLXNldHRpbmdzLSR7bmFtZX1gLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBga2VybmVsLXNldHRpbmdzYCxcbiAgICAgICAgICAgIGVsZW1lbnQ6IHR5cGVvZiByZW5kZXIgPT09IFwiZnVuY3Rpb25cIiA/IHJlbmRlciA6IHJlbmRlci5yZW5kZXIsXG4gICAgICAgICAgICAuLi4odHlwZW9mIHJlbmRlciA9PT0gXCJvYmplY3RcIiA/IHJlbmRlciA6IHt9KVxuICAgICAgICB9O1xuXG4gICAgICAgIFNldHRpbmdzUmVuZGVyZXIucGFuZWxzLnB1c2gocGFuZWwpO1xuICAgICAgICBTZXR0aW5nc1JlbmRlcmVyLnBhbmVscy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gU2V0dGluZ3NSZW5kZXJlci5wYW5lbHMuaW5kZXhPZihwYW5lbCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBTZXR0aW5nc1JlbmRlcmVyLnBhbmVscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IFNldHRpbmdzVmlldyA9IGF3YWl0IFdlYnBhY2suZmluZExhenkoV2VicGFjay5GaWx0ZXJzLmJ5UHJvdG90eXBlKFwiZ2V0UHJlZGljYXRlU2VjdGlvbnNcIikpO1xuICAgIFxuICAgICAgICBpZiAoIXdpbltcIl9fa2VybmVsX3NldHRpbmdzX2NhY2hlX19cIl0pIFBhdGNoZXIucGF0Y2goU2V0dGluZ3NWaWV3LnByb3RvdHlwZSwgXCJnZXRQcmVkaWNhdGVTZWN0aW9uc1wiLCBmdW5jdGlvbiAoXywgcmVzKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzKSB8fCAhcmVzLnNvbWUoZSA9PiBlPy5zZWN0aW9uPy50b0xvd2VyQ2FzZSgpID09PSBcImNoYW5nZWxvZ1wiKSB8fCByZXMuc29tZShzID0+IHM/LmlkID09PSBcImtlcm5lbC1zZXR0aW5nc1wiKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcy5maW5kSW5kZXgocyA9PiBzPy5zZWN0aW9uPy50b0xvd2VyQ2FzZSgpID09PSBcImNoYW5nZWxvZ1wiKSAtIDE7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG5cbiAgICAgICAgICAgIHJlcy5zcGxpY2UoaW5kZXgsIDAsIC4uLlNldHRpbmdzUmVuZGVyZXIucGFuZWxzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgRXZlbnRzLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWxvYWQtY29yZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICB3aW5bXCJfX2tlcm5lbF9zZXR0aW5nc19jYWNoZV9fXCJdID0gcGFuZWxzO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuIiwiLy8gaW1wb3J0IEtlcm5lbFBhbmVsIGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWwuanNcIjtcbmltcG9ydCB7RGV2U2VydmVyfSBmcm9tIFwiQG1vZHVsZXMvZGV2c2VydmVyXCI7XG5pbXBvcnQgRXZlbnRzIGZyb20gXCJAbW9kdWxlcy9ldmVudHNcIjtcbmltcG9ydCB7U3RvcmFnZX0gZnJvbSBcIkBtb2R1bGVzL3N0b3JhZ2VcIjtcbmltcG9ydCBLZXJuZWxQYW5lbCBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsXCI7XG5pbXBvcnQgVXBkYXRlclBhbmVsIGZyb20gXCIuL2NvbXBvbmVudHMvdXBkYXRlc1wiO1xuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuL21vZHVsZXMvbG9nZ2VyXCI7XG5pbXBvcnQge1BhdGNoZXJ9IGZyb20gXCIuL21vZHVsZXMvcGF0Y2hlclwiO1xuaW1wb3J0IHtTZXR0aW5nc1JlbmRlcmVyfSBmcm9tIFwiLi9tb2R1bGVzL3NldHRpbmdzXCI7XG5pbXBvcnQgV2VicGFjayBmcm9tIFwiLi9tb2R1bGVzL3dlYnBhY2tcIjtcbi8vIGltcG9ydCBHaXQgZnJvbSBcIi4vdXBkYXRlci9naXQuanNcIjtcbi8vIGltcG9ydCBVcGRhdGVyIGZyb20gXCIuL3VwZGF0ZXIvaW5kZXguanNcIjtcblxuY29uc3QgZnMgPSBTZXR0aW5nc05hdGl2ZS5yZXF1aXJlTW9kdWxlKFwiZnNcIik7XG5jb25zdCBwYXRoID0gU2V0dGluZ3NOYXRpdmUucmVxdWlyZU1vZHVsZShcInBhdGhcIik7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29yZSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudDogRWxlbWVudCA9IG51bGw7XG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IFdlYnBhY2sud2hlblJlYWR5O1xuICAgICAgICBMb2dnZXIubG9nKFwiQ29yZVwiLCBcIlN0YXJ0ZWQuXCIpO1xuXG4gICAgICAgICh3aW5kb3cgYXMgYW55KS5SZWFjdCA9IFdlYnBhY2suZmluZEJ5UHJvcHMoXCJjcmVhdGVFbGVtZW50XCIsIFwidXNlRWZmZWN0XCIpO1xuXG4gICAgICAgIGlmIChfX05PREVfRU5WX18gPT09IFwiREVWRUxPUE1FTlRcIikgRGV2U2VydmVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgU2V0dGluZ3NSZW5kZXJlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHJlZ2lzdGVyU2V0dGluZ3MoKTtcbiAgICAgICAgU3RvcmFnZS5pbml0aWFsaXplKCk7XG5cbiAgICAgICAgbG9hZFN0eWxlcygpO1xuICAgICAgICBleHBvc2VHbG9iYWxzKCk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclNldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICBsZXQgZmx1c2ggPSBbXG4gICAgICAgICAgICBTZXR0aW5nc1JlbmRlcmVyLnJlZ2lzdGVyKFwiVXBkYXRlc1wiLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiAoKSA9PiA8VXBkYXRlclBhbmVsIC8+LFxuICAgICAgICAgICAgICAgIG9yZGVyOiAyXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFNldHRpbmdzUmVuZGVyZXIucmVnaXN0ZXIoXCJQYWNrYWdlc1wiLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiAoKSA9PiA8S2VybmVsUGFuZWwgLz4sXG4gICAgICAgICAgICAgICAgb3JkZXI6IDFcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgRXZlbnRzLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWxvYWQtY29yZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZsdXNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZmx1c2hbaV0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBleHBvc2VHbG9iYWxzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBEaXNwYXRjaGVyID0gV2VicGFjay5maW5kQnlQcm9wcyhcIl9kaXNwYXRjaFwiLCBcImRpc3BhdGNoXCIpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdpbmRvdywge1xuICAgICAgICAgICAgS2VybmVsU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogT2JqZWN0LmZyZWV6ZShTZXR0aW5nc1JlbmRlcmVyKSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBLZXJuZWxTdG9yYWdlOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IE9iamVjdC5mcmVlemUoU3RvcmFnZSksXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIERpc3BhdGNoZXIud2FpdCgoKSA9PiBEaXNwYXRjaGVyLmRpc3BhdGNoKHt0eXBlOiBcIktFUk5FTF9TRVRUSU5HU19JTklUXCJ9KSk7XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGxvYWRTdHlsZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGZzLmN1cnJlbnQsIFwic3R5bGUuY3NzXCIpO1xuICAgICAgICBpZiAoIWZzLmlzRmlsZShsb2NhdGlvbikpIHJldHVybiAvLyBUT0RPOiBCYWlsIG91dFxuICAgICAgICBcbiAgICAgICAgY29uc3QgbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IGZzLnJlYWRGaWxlKGxvY2F0aW9uLCBcInV0ZjhcIiBhcyBhbnkpO1xuXG4gICAgICAgICAgICBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLCB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcImtlcm5lbC1zdHlsZVwiLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudDogc3R5bGVzXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICAgIGxvYWQoKTtcblxuICAgICAgICBFdmVudHMuYWRkRXZlbnRMaXN0ZW5lcihcInJlbG9hZC1jc3NcIiwgKCkgPT4ge1xuICAgICAgICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgbG9hZCgpO1xuICAgICAgICAgICAgTG9nZ2VyLmxvZyhcIlN0eWxlc1wiLCBcIlJlbG9hZGVkLlwiKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBzdG9wKCk6IHZvaWQge1xuICAgICAgICBQYXRjaGVyLnVucGF0Y2hBbGwoKTtcbiAgICAgICAgc3R5bGVFbGVtZW50Py5yZW1vdmUoKTtcbiAgICB9O1xufSJdLCJuYW1lcyI6WyJFdmVudHMiLCJFdmVudFRhcmdldCIsIkxvZ2dlciIsInBhcnNlVHlwZSIsInR5cGUiLCJsb2dNZXNzYWdlIiwibW9kdWxlIiwibWVzc2FnZSIsImNvbnNvbGUiLCJsb2ciLCJpbmZvIiwid2FybiIsImVycm9yIiwiZnMiLCJTZXR0aW5nc05hdGl2ZSIsInJlcXVpcmVNb2R1bGUiLCJwYXRoIiwiRGV2U2VydmVyIiwid3MiLCJleHBlY3RlZENsb3NlIiwidHJ5SlNPTiIsImpzb24iLCJKU09OIiwicGFyc2UiLCJjbG9zZSIsImluaXRpYWxpemUiLCJ3aW4iLCJ3aW5kb3ciLCJLZXJuZWxEZXZTZXJ2ZXIiLCJXZWJTb2NrZXQiLCJvbm1lc3NhZ2UiLCJoYW5kbGVNZXNzYWdlIiwib25lcnJvciIsIm9uY2xvc2UiLCJyZWxvYWRDb3JlIiwiZGlzcGF0Y2hFdmVudCIsIkV2ZW50IiwiY29udGVudCIsInJlYWRGaWxlIiwicmVzb2x2ZSIsImN1cnJlbnQiLCJzY3JpcHQiLCJkb2N1bWVudCIsImhlYWQiLCJhcHBlbmRDaGlsZCIsIk9iamVjdCIsImFzc2lnbiIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0Q29udGVudCIsIm9ubG9hZCIsInJlbW92ZSIsInJlbG9hZFN0eWxlcyIsInJlbG9hZCIsImRhdGEiLCJvcGVyYXRpb24iLCJzZW5kIiwiY2xpZW50IiwiRGlzY29yZE5hdGl2ZSIsImFwcCIsImdldFJlbGVhc2VDaGFubmVsIiwic3RyaW5naWZ5IiwiU3RvcmFnZSIsImxpc3RlbmVycyIsIlNldCIsImxvY2F0aW9uIiwiZ3JvdXBzIiwiTWFwIiwiZW1pdCIsImFyZ3MiLCJjYWxsYmFja3MiLCJpIiwibGVuZ3RoIiwib24iLCJsaXN0ZW5lciIsImFkZCIsIm9mZiIsImJpbmQiLCJkZWxldGUiLCJ1c2UiLCJmYWN0b3J5Iiwic3RhdGUiLCJzZXRTdGF0ZSIsIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJleGlzdHMiLCJjcmVhdGVEaXIiLCJyZWN1cnNpdmUiLCJmaWxlcyIsInJlYWREaXIiLCJmaWxlIiwic3RhdHMiLCJqb2luIiwiaXNGaWxlIiwiZW5kc1dpdGgiLCJncm91cCIsInNsaWNlIiwiaW5kZXhPZiIsInNldCIsImdldCIsImRlZiIsImlkIiwicGF0aHMiLCJzcGxpdCIsInJlZHVjZSIsImN1cnIiLCJuYW1lIiwicHJvcCIsInBvcCIsInN0b3JlZCIsIm9iamVjdCIsIkVycm9yIiwidHJlZSIsIndyaXRlRmlsZSIsIm1lbW9pemUiLCJrZXlzIiwiY2xvbmUiLCJrZXkiLCJkZXNjcmlwdG9yIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0dGVyIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJBcnJheSIsInByb3RvdHlwZSIsImF0IiwiaW5kZXgiLCJNYXRoIiwiYWJzIiwic2V0SW1tZWRpYXRlIiwiY2FsbGJhY2siLCJzZXRUaW1lb3V0IiwiRmlsdGVycyIsImJ5UHJvcHMiLCJwcm9wcyIsImV2ZXJ5IiwiYnlEaXNwbGF5TmFtZSIsImRlZmF1bHQiLCJkaXNwbGF5TmFtZSIsImJ5VHlwZVN0cmluZyIsInN0cmluZ3MiLCJ0b1N0cmluZyIsInN0ciIsImJ5Q29kZSIsImJ5UHJvdG90eXBlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZSIsImNhY2hlIiwiY2h1bmtOYW1lIiwiU3ltYm9sIiwiY29uc3RydWN0b3IiLCJ3aGVuUmVhZHkiLCJ3YWl0Rm9yR2xvYmFsIiwidGhlbiIsIlByb21pc2UiLCJvblJlYWR5IiwiRGlzcGF0Y2hlciIsIlVzZXJTdG9yZSIsImZpbmRCeVByb3BzIiwiYnVsayIsIndhaXQiLCJmb3JldmVyIiwiZ2V0Q3VycmVudFVzZXIiLCJ1bnN1YnNjcmliZSIsInN1YnNjcmliZSIsIm9yaWdpbmFsUHVzaCIsInB1c2giLCJoYW5kbGVQdXNoIiwiY2h1bmsiLCJtb2R1bGVzIiwibW9kdWxlSWQiLCJvcmlnaW5hbE1vZHVsZSIsImV4cG9ydHMiLCJhcHBseSIsIl9fb3JpZ2luYWwiLCJuZXdQdXNoIiwid3JpdGFibGUiLCJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIiwiZmluZExhenkiLCJmcm9tQ2FjaGUiLCJmaW5kTW9kdWxlIiwibSIsImRpcmVjdE1hdGNoIiwiZGVmYXVsdE1hdGNoIiwid2FpdEZvciIsInJldHJpZXMiLCJhbGwiLCJkZWxheSIsInJlcyIsInBhcnNlT3B0aW9ucyIsInRoaW5nIiwiaXNBcnJheSIsInJlcXVlc3QiLCJyZXEiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwid2VicGFja0NodW5rZGlzY29yZF9hcHAiLCJzcGxpY2UiLCJmb3JjZSIsImRlZmF1bHRFeHBvcnRzIiwiZm91bmQiLCJoYXNFcnJvciIsIndyYXBGaWx0ZXIiLCJjIiwiZmluZE1vZHVsZXMiLCJvcHRpb25zIiwiZmlsdGVycyIsInJlc3QiLCJzZWFyY2hGdW5jdGlvbiIsIndyYXBwZWRGaWx0ZXJzIiwibWFwIiwicmV0dXJuVmFsdWUiLCJjYWxsIiwiU3RyaW5nIiwicHJvcHNBcnJheSIsImNvbmNhdCIsImZpbmRCeURpc3BsYXlOYW1lIiwiZGlzcGxheU5hbWVzIiwiZmluZEluZGV4IiwiZm91bmRJbmRleCIsImF0SW5kZXgiLCJvbkV4aXN0cyIsIndoZW5FeGlzdHMiLCJldmVudCIsIm9uY2UiLCJXZWJwYWNrIiwiRGlzY29yZENvbXBvbmVudHMiLCJCdXR0b24iLCJTd2l0Y2giLCJNYXJrZG93biIsInJlbmRlciIsInJ1bGVzIiwiVGV4dCIsIlNpemVzIiwiU0laRV8yNCIsIkNvbG9ycyIsIkxJTksiLCJTcGlubmVyIiwiVHlwZSIsIlNQSU5OSU5HX0NJUkNMRSIsIkZsZXgiLCJMaW5rIiwiRm9ybVRpdGxlIiwiVGFncyIsIkZvcm1Ob3RpY2UiLCJUeXBlcyIsIkZvcm1EaXZpZGVyIiwiaW5jbHVkZXMiLCJGb3JtSXRlbSIsIlRvb2x0aXBzIiwiVHJhc2giLCJzdmciLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJ4bWxucyIsImQiLCJmaWxsIiwiRm9sZGVyIiwiVmVyaWZpZWQiLCJXYXJuaW5nIiwiZW5hYmxlLWJhY2tncm91bmQiLCJnIiwiVkVSSUZJRUQiLCJXQVJOSU5HIiwiU2hpZWxkIiwiVXBkYXRlQXZhaWxhYmxlIiwiY2xhc3NOYW1lIiwiYXJpYS1oaWRkZW4iLCJmaWxsLXJ1bGUiLCJwb2x5Z29uIiwicG9pbnRzIiwiSWNvbnMiLCJJY29uIiwiSWNvbkNvbXBvbmVudCIsImV4dHJhUHJvcHMiLCJzaXplIiwia2VybmVsIiwiRWxlY3Ryb24iLCJUb29sQnV0dG9uIiwibGFiZWwiLCJpY29uIiwib25DbGljayIsImRhbmdlciIsInRleHQiLCJwb3NpdGlvbiIsImxvb2siLCJMb29rcyIsIkJMQU5LIiwiTk9ORSIsImNvbG9yIiwiU3dpdGNoV3JhcHBlciIsIm9uQ2hhbmdlIiwiZGlzYWJsZWQiLCJpc0NoZWNrZWQiLCJzZXRDaGVja2VkIiwiY2hlY2tlZCIsInVzZUNhbGxiYWNrIiwib3Blbkl0ZW0iLCJzaG93SXRlbUluRm9sZGVyIiwib3BlblBhdGgiLCJLZXJuZWxDYXJkIiwicGtnIiwiZGl2IiwidHJhc2hJdGVtIiwiZGVzY3JpcHRpb24iLCJlbmFibGVkIiwicGFja2FnZXMiLCJzdG9wUGFja2FnZSIsInN0YXJ0UGFja2FnZSIsIktlcm5lbFBhbmVsIiwidGFnIiwiSDEiLCJ2YWx1ZXMiLCJnZXRQYWNrYWdlcyIsIkRpc2NvcmRNb2R1bGVzIiwiTW9tZW50IiwibWFrZUxhenkiLCJmYWxsYmFjayIsIkxhenlDb21wb25lbnQiLCJyZXNvbHZlZCIsInBlcmlvZCIsImNvbW1pdEZpZWxkcyIsImhhc2hGaWVsZHMiLCJjaGlsZF9wcm9jZXNzIiwiR2l0IiwiZXhlY3V0ZUNtZCIsImNtZCIsImN3ZCIsInJlamVjdCIsImV4ZWMiLCJzdGRvdXQiLCJpc0luc3RhbGxlZCIsImlzUmVwbyIsInJlc3VsdCIsImdldEJyYW5jaE5hbWUiLCJnZXRMYXRlc3RDb21taXQiLCJ0YXJnZXQiLCJwYXJzZVBlcmlvZHMiLCJnZXREaWZmIiwicCIsImZpZWxkcyIsIm91dCIsImZyb21FbnRyaWVzIiwiU2hvdyIsIndoZW4iLCJjaGlsZHJlbiIsImZpbmQiLCJjaGlsZCIsIk1hdGNoIiwiRm9yIiwiZWFjaCIsInVzZUdpdENvbW1hbmQiLCJkZXBzIiwibG9hZGVkIiwiaGFuZGxlRmV0Y2giLCJjYXRjaCIsImZldGNoIiwiTG9hZGluZ1NwaW5uZXIiLCJMT1dfTU9USU9OIiwiQ3VycmVudEJyYW5jaCIsImdpdExvYWRlZCIsImJyYW5jaCIsImhyZWYiLCJDdXJyZW50Q29tbWl0SGFzaCIsImhhc2giLCJSRUQiLCJmdWxsIiwic2hvcnQiLCJuZWVkc1JlbG9hZCIsIlVwZGF0ZXJQYW5lbCIsImVycm9yTWVzc2FnZSIsInNldEVycm9yIiwiZ2l0IiwidXBkYXRlcyIsImxhc3RVcGRhdGUiLCJEYXRlIiwiV0FOREVSSU5HX0NVQkVTIiwiREFOR0VSIiwidGl0bGUiLCJpbWFnZURhdGEiLCJzcmMiLCJib2R5Iiwic3BhbiIsImRpcmVjdGlvbiIsIkRpcmVjdGlvbiIsIlZFUlRJQ0FMIiwianVzdGlmeSIsIkp1c3RpZnkiLCJCRVRXRUVOIiwiYWxpZ24iLCJBbGlnbiIsIkNFTlRFUiIsIkhPUklaT05UQUwiLCJTVEFSVCIsIkNoaWxkIiwiSEVBREVSX1BSSU1BUlkiLCJTSVpFXzE0IiwiSEVBREVSX1NFQ09OREFSWSIsImNhbGVuZGFyIiwiQlJBTkQiLCJTTUFMTCIsIllFTExPVyIsIkdSRUVOIiwiY29tbWl0IiwiaGFzaF9zaG9ydCIsImltZyIsImF1dGhvciIsIlBhdGNoZXIiLCJwYXRjaGVzIiwicGF0Y2giLCJmdW5jIiwiYmVmb3JlIiwib3JpZ2luYWwiLCJ1bnBhdGNoIiwiUmVmbGVjdCIsImFyZ3VtZW50cyIsInRlbXBSZXQiLCJ1bnBhdGNoQWxsIiwiU2V0dGluZ3NSZW5kZXJlciIsImluaXRpYWxpemVkIiwicGFuZWxzIiwic2VjdGlvbiIsInJlZ2lzdGVyIiwicGFuZWwiLCJlbGVtZW50Iiwic29ydCIsImEiLCJiIiwib3JkZXIiLCJTZXR0aW5nc1ZpZXciLCJfIiwic29tZSIsImUiLCJ0b0xvd2VyQ2FzZSIsInMiLCJhZGRFdmVudExpc3RlbmVyIiwiQ29yZSIsInN0eWxlRWxlbWVudCIsInN0YXJ0IiwiX19OT0RFX0VOVl9fIiwicmVnaXN0ZXJTZXR0aW5ncyIsImxvYWRTdHlsZXMiLCJleHBvc2VHbG9iYWxzIiwiZmx1c2giLCJkZWZpbmVQcm9wZXJ0aWVzIiwiS2VybmVsU2V0dGluZ3MiLCJmcmVlemUiLCJLZXJuZWxTdG9yYWdlIiwiZGlzcGF0Y2giLCJsb2FkIiwic3R5bGVzIiwic3RvcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n')}},__webpack_require__={d:(I,g)=>{for(var C in g)__webpack_require__.o(g,C)&&!__webpack_require__.o(I,C)&&Object.defineProperty(I,C,{enumerable:!0,get:g[C]})},o:(I,g)=>Object.prototype.hasOwnProperty.call(I,g)},__webpack_exports__={};__webpack_modules__[5](0,__webpack_exports__,__webpack_require__);var __webpack_exports__Core=__webpack_exports__.Q;export{__webpack_exports__Core as Core}; \ No newline at end of file diff --git a/src/renderer/components/card.tsx b/src/renderer/components/card.tsx index db1ecde..d094a68 100644 --- a/src/renderer/components/card.tsx +++ b/src/renderer/components/card.tsx @@ -1,98 +1,92 @@ import "./card.scss"; import DiscordComponents from "./discord"; +import Icon from "./icons"; const kernel: any = (window as any).kernel; const Electron = SettingsNative.requireModule("electron"); -export function Icon({name, ...props}) { - const IconComponent = DiscordComponents.Icons[name] ?? (() => null); - props.size ??= "16"; +export function ToolButton({ label, icon, onClick, danger = false }) { + const { Tooltips, Button } = DiscordComponents; - return ( - - ); + return ( + + {(props) => ( + + )} + + ); } -export function ToolButton({label, icon, onClick, danger = false}) { - const {Tooltips, Button} = DiscordComponents; +export function SwitchWrapper({ value, onChange, disabled }) { + const { Switch } = DiscordComponents; + const [isChecked, setChecked] = React.useState(value); - return ( - - {props => ( - - )} - - ); -} - -export function SwitchWrapper({value, onChange, disabled}) { - const {Switch} = DiscordComponents; - const [isChecked, setChecked] = React.useState(value); + return ( + { + if (disabled) return; - return ( - { - if (disabled) return; - - onChange(!isChecked); - setChecked((value: boolean) => !value); - }, [onChange, isChecked])} - /> - ); + onChange(!isChecked); + setChecked((value: boolean) => !value); + }, [onChange, isChecked])} + /> + ); } export function openItem(path: string) { - if (path.endsWith(".asar")) return Electron.showItemInFolder(path); + if (path.endsWith(".asar")) return Electron.showItemInFolder(path); - Electron.openPath(path); + Electron.openPath(path); } -export default function KernelCard({pkg}) { - const {Markdown, Text} = DiscordComponents; +export default function KernelCard({ pkg }) { + const { Markdown, Text } = DiscordComponents; - return ( -
-
- openItem(pkg.path)} - /> - Electron.trashItem(pkg.path)} - /> -
-
- {pkg.name} -
- {pkg.description != null && ( - - {pkg.description} - - )} -
- { - if (!value) kernel.packages.stopPackage(pkg.id); - else kernel.packages.startPackage(pkg.id); - }} - /> -
-
- ); -} \ No newline at end of file + return ( +
+
+ openItem(pkg.path)} + /> + Electron.trashItem(pkg.path)} + /> +
+
+ {pkg.name} +
+ {pkg.description != null && ( + + {pkg.description} + + )} +
+ { + if (!value) kernel.packages.stopPackage(pkg.id); + else kernel.packages.startPackage(pkg.id); + }} + /> +
+
+ ); +} diff --git a/src/renderer/components/discord.ts b/src/renderer/components/discord.ts index d03f48a..1647203 100644 --- a/src/renderer/components/discord.ts +++ b/src/renderer/components/discord.ts @@ -1,34 +1,19 @@ import memoize from "../modules/memoize"; -import Webpack from "../modules/webpack"; +import Webpack, { Filters } from "../modules/webpack"; const DiscordComponents = memoize({ get Button() {return Webpack.findByProps("BorderColors");}, - get Switch() {return Webpack.findByDisplayName("Switch");}, - get Markdown() {return Webpack.findModule(m => m.displayName === "Markdown" && "rules" in m);}, - get Header() {return Webpack.findModule(m => m.displayName === "Header" && "Tags" in m);}, - get Text() { - const names = new Set(["Text", "LegacyText"]); - - return Webpack.findModule(m => names.has(m.displayName)); - }, - get Forms() {return Webpack.findByProps("FormItem", "FormTitle");}, - get Spinner() {return Webpack.findByDisplayName("Spinner");}, - get Flex() {return Webpack.findByDisplayName("Flex");}, - get Link() {return Webpack.findByDisplayName("Anchor");}, - get Icons() { - const icons = Webpack.findModules(m => typeof m === "function" && m.displayName && m.toString().indexOf("currentColor") > -1); - - return Object.fromEntries(icons.map(icon => [icon.displayName, icon])); - }, - get Tooltips() { - const TooltipModule = Webpack.findByProps("TooltipContainer"); - - return { - Container: TooltipModule.TooltipContainer, - Tooltip: TooltipModule.default, - ...TooltipModule - }; - } + get Switch() {return Webpack.findModule(m => typeof m === 'function' && Filters.byCode('helpdeskArticleId')(m));}, + get Markdown() {return Webpack.findModule(m => m?.prototype?.render && m.rules);}, + get Text() {return Webpack.findModule(m => m.Sizes?.SIZE_24 && m.Colors?.LINK);}, + get Spinner() {return Webpack.findModule(m => m.Type?.SPINNING_CIRCLE);}, + get Flex() {return Webpack.findByProps("Child", "Align");}, + get Link() {return Webpack.findModule(m => typeof m === 'function' && Filters.byCode('href', 'anchor')(m));}, + get FormTitle() {return Webpack.findModule(m => m.Tags && Filters.byCode('errorSeparator')(m));}, + get FormNotice() {return Webpack.findModule(m => m.Types && Filters.byCode('formNoticeTitle', 'formNoticeBody')(m));}, + get FormDivider() {return Webpack.findModule(m => typeof m === 'function' && (m = m.toString()) && m.length < 200 && m.includes('divider'));}, + get FormItem() {return Webpack.findModule(m => m.Tags && Filters.byCode('children', 'createElement', 'disabled', 'tag', 'title')(m));}, + get Tooltips() {return Webpack.findByProps("Positions", "Colors");} }); -export default DiscordComponents; \ No newline at end of file +export default DiscordComponents; diff --git a/src/renderer/components/icons/folder.tsx b/src/renderer/components/icons/folder.tsx new file mode 100644 index 0000000..bbb37e3 --- /dev/null +++ b/src/renderer/components/icons/folder.tsx @@ -0,0 +1,10 @@ +export default function Folder(props: any) { + return ( + + + + ); +} diff --git a/src/renderer/components/icons/index.tsx b/src/renderer/components/icons/index.tsx new file mode 100644 index 0000000..ff76ca3 --- /dev/null +++ b/src/renderer/components/icons/index.tsx @@ -0,0 +1,32 @@ +import Trash from './trash'; +import Folder from './folder'; +import Shield from './shield'; +import UpdateAvailable from './update_available'; + +export const Icons = { + Trash, + Folder, + Shield, + UpdateAvailable, +}; + +export default function Icon({ + name, + ...props +}: { + name: keyof typeof Icons; + size?: string | number; + className?: string; +}) { + const IconComponent = Icons[name]; + const extraProps: any = {}; + + if (!IconComponent) { + return null; + } + if (props.size) { + extraProps.width = extraProps.height = props.size; + } + + return ; +} diff --git a/src/renderer/components/icons/trash.tsx b/src/renderer/components/icons/trash.tsx new file mode 100644 index 0000000..416df04 --- /dev/null +++ b/src/renderer/components/icons/trash.tsx @@ -0,0 +1,21 @@ +export default function Trash(props: any) { + return ( + + + + + + ); +} diff --git a/src/renderer/components/panel.tsx b/src/renderer/components/panel.tsx index ddc5d99..c11be78 100644 --- a/src/renderer/components/panel.tsx +++ b/src/renderer/components/panel.tsx @@ -5,7 +5,7 @@ import "./panel.scss"; const kernel: any = (window as any).kernel; export default function KernelPanel() { - const {Forms: {FormTitle}} = DiscordComponents; + const {FormTitle} = DiscordComponents; return (
@@ -17,4 +17,4 @@ export default function KernelPanel() {
); -} \ No newline at end of file +} diff --git a/src/renderer/components/updates.tsx b/src/renderer/components/updates.tsx index 903ad89..a24ad60 100644 --- a/src/renderer/components/updates.tsx +++ b/src/renderer/components/updates.tsx @@ -73,7 +73,7 @@ let needsReload = false; export default function UpdaterPanel() { const {Moment} = DiscordModules; const [errorMessage, setError] = React.useState(null); - const {Link, Button, Text, Flex, Forms: {FormTitle, FormNotice, FormDivider, FormItem}, Spinner} = DiscordComponents; + const {Link, Button, Text, Flex, FormTitle, FormNotice, FormDivider, FormItem, Spinner} = DiscordComponents; const git = useGitCommand(() => Git.isInstalled()); const updates = useGitCommand(async () => { if (!git.loaded || !git.result) return []; @@ -222,4 +222,4 @@ export default function UpdaterPanel() { ); -} \ No newline at end of file +} diff --git a/src/renderer/modules/settings.ts b/src/renderer/modules/settings.ts index cbcabb0..aa7571f 100644 --- a/src/renderer/modules/settings.ts +++ b/src/renderer/modules/settings.ts @@ -57,7 +57,7 @@ export namespace SettingsRenderer { if (initialized) return; initialized = true; - const SettingsView = await Webpack.findLazy(Webpack.Filters.byDisplayName("SettingsView")); + const SettingsView = await Webpack.findLazy(Webpack.Filters.byPrototype("getPredicateSections")); if (!win["__kernel_settings_cache__"]) Patcher.patch(SettingsView.prototype, "getPredicateSections", function (_, res) { if (!Array.isArray(res) || !res.some(e => e?.section?.toLowerCase() === "changelog") || res.some(s => s?.id === "kernel-settings")) return; @@ -72,4 +72,4 @@ export namespace SettingsRenderer { win["__kernel_settings_cache__"] = panels; }); }; -} \ No newline at end of file +} diff --git a/src/renderer/modules/webpack.ts b/src/renderer/modules/webpack.ts index 20068d3..e0bafc4 100644 --- a/src/renderer/modules/webpack.ts +++ b/src/renderer/modules/webpack.ts @@ -26,6 +26,13 @@ export class Filters { static byTypeString(...strings: string[]) { return (module: any) => module.type && (module = module.type?.toString()) && strings.every(str => module.indexOf(str) > -1); } + static byCode(...strings: string[]) { + return (module: any) => (module = module.toString()) && strings.every(str => module.indexOf(str) > -1); + } + static byPrototype(...props: string[]) { + const filter = Filters.byProps(...props); + return (module: any) => module.prototype && filter(module.prototype); + } } export type ModuleFilter = (module: any, index: number) => boolean; @@ -167,7 +174,7 @@ class WebpackModule { return req; } - findModule(filter: ModuleFilter, {all = false, cache = true, force = false, default: defaultExports = false} = {}) { + findModule(filter: ModuleFilter, {all = false, cache = true, force = true, default: defaultExports = false} = {}) { if (typeof (filter) !== "function") return void 0; const __webpack_require__ = this.request(cache); @@ -195,7 +202,7 @@ class WebpackModule { found.push(module); } - if (module.__esModule && + if (/* module.__esModule && */ module.default != null && typeof module.default !== "number" && wrapFilter(module.default, id) @@ -205,7 +212,7 @@ class WebpackModule { found.push(exports); } - if (force && module.__esModule) for (const key in module) { + if (force /* && module.__esModule */) for (const key in module) { if (!module[key]) continue; if (wrapFilter(module[key], id)) {