Blueno/demonic-web/dist/demonic-web.bundle.js

304 lines
1.0 MiB
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["DemonicWeb"] = factory();
else
root["DemonicWeb"] = factory();
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/cerberus.js");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./assets/demonic-web.css":
/*!********************************!*\
!*** ./assets/demonic-web.css ***!
\********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("\nvar content = __webpack_require__(/*! !../node_modules/css-loader/dist/cjs.js!./demonic-web.css */ \"./node_modules/css-loader/dist/cjs.js!./assets/demonic-web.css\");\n\nif(typeof content === 'string') content = [[module.i, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = __webpack_require__(/*! ../node_modules/style-loader/lib/addStyles.js */ \"./node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(false) {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vYXNzZXRzL2RlbW9uaWMtd2ViLmNzcz82OThmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxjQUFjLG1CQUFPLENBQUMsaUlBQTREOztBQUVsRiw0Q0FBNEMsUUFBUzs7QUFFckQ7QUFDQTs7OztBQUlBLGVBQWU7O0FBRWY7QUFDQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsbUdBQWdEOztBQUVyRTs7QUFFQSxHQUFHLEtBQVUsRUFBRSIsImZpbGUiOiIuL2Fzc2V0cy9kZW1vbmljLXdlYi5jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9kZW1vbmljLXdlYi5jc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSB1bmRlZmluZWQ7XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZGVtb25pYy13ZWIuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9kZW1vbmljLXdlYi5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/demonic-web.css\n");
/***/ }),
/***/ "./node_modules/base64-js/index.js":
/*!*****************************************!*\
!*** ./node_modules/base64-js/index.js ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcz8xZmI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFZOztBQUVaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsU0FBUztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDLFVBQVU7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/base64-js/index.js\n");
/***/ }),
/***/ "./node_modules/buffer/index.js":
/*!**************************************!*\
!*** ./node_modules/buffer/index.js ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(global) {/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\n\nvar base64 = __webpack_require__(/*! base64-js */ \"./node_modules/base64-js/index.js\")\nvar ieee754 = __webpack_require__(/*! ieee754 */ \"./node_modules/ieee754/index.js\")\nvar isArray = __webpack_require__(/*! isarray */ \"./node_modules/isarray/index.js\")\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcz9iNjM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVZOztBQUVaLGFBQWEsbUJBQU8sQ0FBQyxvREFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsZ0RBQVM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLGdEQUFTOztBQUUvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1EQUFtRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxFQUFFO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0EscUJBQXFCLGVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQixRQUFRO0FBQzdCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsWUFBWTtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/buffer/index.js\n");
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js!./assets/demonic-web.css":
/*!**********************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js!./assets/demonic-web.css ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \".demonic-web {\\n height: 25em;\\n background-color: black;\\n line-height: normal;\\n border: 1px solid gray;\\n resize: both;\\n overflow: auto;\\n position: relative;\\n}\\n\\n#status {\\n transition: 800ms;\\n background-color: #ff357a;\\n font-size: small;\\n font-weight: bold;\\n padding: 0.5em;\\n color: white;\\n}\\n\\n#status.connected {\\n background-color: #49ccd4;\\n}\\n\\ndiv#demonic-examples {\\n color: white;\\n line-height: 1.7;\\n padding-top: 2em;\\n padding-bottom: 2em;\\n transition: 800ms;\\n}\\n\\n#demonic-examples > code {\\n background-color: #29208e;\\n border-radius: 0;\\n margin: 0.5em;\\n cursor: pointer;\\n transition: 800ms;\\n display: inline-block;\\n padding: 0.5em;\\n font-weight: bold;\\n}\\n\\n\\n#demonic-examples > code:hover {\\n background-color: #FF357A;\\n transition: 800ms;\\n}\\n\\n.terminal.xterm {\\n padding: 1em;\\n}\\n\\n.what-is-this {\\n text-align: right;\\n margin-top: 1.5em;\\n color: gray;\\n}\\n\\n.what-is-this > a {\\n text-decoration: none;\\n}\\n\\n.what-is-this > a:hover {\\n text-decoration: underline;\\n}\\n\\n#terminal-container {\\n padding-bottom: 10%;\\n}\\n\\n.buttons {\\n position: absolute;\\n z-index: 100;\\n right: 1em;\\n top: 0;\\n}\\n\\n.buttons > button {\\n color: white;\\n}\\n\\n.dark-text > button {\\n color: black;\\n}\\n\\nbutton {\\n background-color: rgba(0, 0, 0, 0);\\n border: none;\\n height: 2em;\\n cursor: pointer;\\n font-size: larger;\\n padding: 0.5em;\\n}\\n\\nbutton:hover {\\n color: #FF357A;\\n}\\n\\n.hide {\\n display: none;\\n}\\n\\n.demonic-menu {\\n position: absolute;\\n top: 0;\\n right: 3em;\\n margin: 1em;\\n background: black;\\n color: white;\\n outline: 1px solid gray;\\n z-index: 100;\\n padding: 0;\\n font-size: smaller;\\n}\\n\\n.demonic-menu > li {\\n padding: 1em 2em 1em 2em;\\n cursor: pointer;\\n list-style: none;\\n}\\n\\n.demonic-menu > li:hover {\\n text-decoration: underline;\\n}\\n\\n.close {\\n background-color: #AA0000;\\n}\\n\\n.urlSpan {\\n float: right;\\n cursor: pointer;\\n}\\n\\n.fullscreen {\\n position: absolute;\\n top: 0;\\n left: 0;\\n height: 100%;\\n width: 100%;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vYXNzZXRzL2RlbW9uaWMtd2ViLmNzcz83MmRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0Esa0NBQWtDLG1CQUFPLENBQUMscUdBQWdEO0FBQzFGO0FBQ0E7QUFDQSxjQUFjLFFBQVMsaUJBQWlCLG1CQUFtQiw4QkFBOEIsMEJBQTBCLDZCQUE2QixtQkFBbUIscUJBQXFCLHlCQUF5QixHQUFHLGFBQWEsd0JBQXdCLGdDQUFnQyx1QkFBdUIsd0JBQXdCLHFCQUFxQixtQkFBbUIsR0FBRyx1QkFBdUIsZ0NBQWdDLEdBQUcsMEJBQTBCLG1CQUFtQix1QkFBdUIsdUJBQXVCLDBCQUEwQix3QkFBd0IsR0FBRyw4QkFBOEIsZ0NBQWdDLHVCQUF1QixvQkFBb0Isc0JBQXNCLHdCQUF3Qiw0QkFBNEIscUJBQXFCLHdCQUF3QixHQUFHLHNDQUFzQyxnQ0FBZ0Msd0JBQXdCLEdBQUcscUJBQXFCLG1CQUFtQixHQUFHLG1CQUFtQix3QkFBd0Isd0JBQXdCLGtCQUFrQixHQUFHLHVCQUF1Qiw0QkFBNEIsR0FBRyw2QkFBNkIsaUNBQWlDLEdBQUcseUJBQXlCLDBCQUEwQixHQUFHLGNBQWMseUJBQXlCLG1CQUFtQixpQkFBaUIsYUFBYSxHQUFHLHVCQUF1QixtQkFBbUIsR0FBRyx5QkFBeUIsbUJBQW1CLEdBQUcsWUFBWSx5Q0FBeUMsbUJBQW1CLGtCQUFrQixzQkFBc0Isd0JBQXdCLHFCQUFxQixHQUFHLGtCQUFrQixxQkFBcUIsR0FBRyxXQUFXLG9CQUFvQixHQUFHLG1CQUFtQix5QkFBeUIsYUFBYSxpQkFBaUIsa0JBQWtCLHdCQUF3QixtQkFBbUIsOEJBQThCLG1CQUFtQixpQkFBaUIseUJBQXlCLEdBQUcsd0JBQXdCLCtCQUErQixzQkFBc0IsdUJBQXVCLEdBQUcsOEJBQThCLGlDQUFpQyxHQUFHLFlBQVksZ0NBQWdDLEdBQUcsY0FBYyxtQkFBbUIsc0JBQXNCLEdBQUcsaUJBQWlCLHlCQUF5QixhQUFhLGNBQWMsbUJBQW1CLGtCQUFrQixHQUFHO0FBQ3hyRTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9hc3NldHMvZGVtb25pYy13ZWIuY3NzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xudmFyIF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5kZW1vbmljLXdlYiB7XFxuICAgIGhlaWdodDogMjVlbTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XFxuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7XFxuICAgIHJlc2l6ZTogYm90aDtcXG4gICAgb3ZlcmZsb3c6IGF1dG87XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuI3N0YXR1cyB7XFxuICAgIHRyYW5zaXRpb246IDgwMG1zO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYzNTdhO1xcbiAgICBmb250LXNpemU6IHNtYWxsO1xcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgcGFkZGluZzogMC41ZW07XFxuICAgIGNvbG9yOiB3aGl0ZTtcXG59XFxuXFxuI3N0YXR1cy5jb25uZWN0ZWQge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDljY2Q0O1xcbn1cXG5cXG5kaXYjZGVtb25pYy1leGFtcGxlcyB7XFxuICAgIGNvbG9yOiB3aGl0ZTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNztcXG4gICAgcGFkZGluZy10b3A6IDJlbTtcXG4gICAgcGFkZGluZy1ib3R0b206IDJlbTtcXG4gICAgdHJhbnNpdGlvbjogODAwbXM7XFxufVxcblxcbiNkZW1vbmljLWV4YW1wbGVzID4gY29kZSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTIwOGU7XFxuICAgIGJvcmRlci1yYWRpdXM6IDA7XFxuICAgIG1hcmdpbjogMC41ZW07XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgdHJhbnNpdGlvbjogODAwbXM7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgcGFkZGluZzogMC41ZW07XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5cXG5cXG4jZGVtb25pYy1leGFtcGxlcyA+IGNvZGU6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkYzNTdBO1xcbiAgICB0cmFuc2l0aW9uOiA4MDBtcztcXG59XFxuXFxuLnRlcm1pbmFsLnh0ZXJtIHtcXG4gICAgcGFkZGluZzogMWVtO1xcbn1cXG5cXG4ud2hhdC1pcy10aGlzIHtcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XFxuICAgIG1hcmdpbi10b3A6IDEuNWVtO1xcbiAgICBjb2xvcjogZ3JheTtcXG59XFxuXFxuLndoYXQtaXMtdGhpcyA+IGEge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi53aGF0LWlzLXRoaXMgPiBhOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbiN0ZXJtaW5hbC1jb250YWluZXIge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAlO1xcbn1cXG5cXG4uYnV0dG9ucyB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgei1pbmRleDogMTAwO1xcbiAgICByaWdodDogMWVtO1xcbiAgICB0b3A6IDA7XFxufVxcblxcbi5idXR0b25zID4gYnV0dG9uIHtcXG4gICAgY29sb3I6IHdoaXRlO1xcbn1cXG5cXG4uZGFyay10ZXh0ID4gYnV0dG9uIHtcXG4gICAgY29sb3I6IGJsYWNrO1xcbn1cXG5cXG5idXR0b24ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGhlaWdodDogMmVtO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIGZvbnQtc2l6ZTogbGFyZ2VyO1xcbiAgICBwYWRkaW5nOiAwLjVlbTtcXG59XFxuXFxuYnV0dG9uOmhvdmVyIHtcXG4gICAgY29sb3I6ICNGRjM1N0E7XFxufVxcblxcbi5oaWRlIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmRlbW9uaWMtbWVudSB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAwO1xcbiAgICByaWdodDogM2VtO1xcbiAgICBtYXJnaW46IDFlbTtcXG4gICAgYmFja2dyb3VuZDogYmxhY2s7XFxuICAgIGNvbG9yOiB3aGl0ZTtcXG4gICAgb3V0bGluZTogMXB4IHNvbGlkIGdyYXk7XFxuICAgIHotaW5kZXg6IDEwMDtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgZm9udC1zaXplOiBzbWFsbGVyO1xcbn1cXG5cXG4uZGVtb25pYy1tZW51ID4gbGkge1xcbiAgICBwYWRkaW5nOiAxZW0gMmVtIDFlbSAyZW07XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuLmRlbW9uaWMtbWVudSA+IGxpOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5jbG9zZSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNBQTAwMDA7XFxufVxcblxcbi51cmxTcGFuIHtcXG4gICAgZmxvYXQ6IHJpZ2h0O1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5mdWxsc2NyZWVuIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgd2lkdGg6IDEwMCU7XFxufVxcblwiLCBcIlwiXSk7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./assets/demonic-web.css\n");
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/xterm/css/xterm.css":
/*!********************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js!./node_modules/xterm/css/xterm.css ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"/**\\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\\n * https://github.com/chjj/term.js\\n * @license MIT\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining a copy\\n * of this software and associated documentation files (the \\\"Software\\\"), to deal\\n * in the Software without restriction, including without limitation the rights\\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\n * copies of the Software, and to permit persons to whom the Software is\\n * furnished to do so, subject to the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be included in\\n * all copies or substantial portions of the Software.\\n *\\n * THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\\n * THE SOFTWARE.\\n *\\n * Originally forked from (with the author's permission):\\n * Fabrice Bellard's javascript vt100 for jslinux:\\n * http://bellard.org/jslinux/\\n * Copyright (c) 2011 Fabrice Bellard\\n * The original design remains. The terminal itself\\n * has been extended to include xterm CSI codes, among\\n * other features.\\n */\\n\\n/**\\n * Default styles for xterm.js\\n */\\n\\n.xterm {\\n font-feature-settings: \\\"liga\\\" 0;\\n position: relative;\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n}\\n\\n.xterm.focus,\\n.xterm:focus {\\n outline: none;\\n}\\n\\n.xterm .xterm-helpers {\\n position: absolute;\\n top: 0;\\n /**\\n * The z-index of the helpers must be higher than the canvases in order for\\n * IMEs to appear on top.\\n */\\n z-index: 5;\\n}\\n\\n.xterm .xterm-helper-textarea {\\n padding: 0;\\n border: 0;\\n margin: 0;\\n /* Move textarea out of the screen to the far left, so that the cursor is not visible */\\n position: absolute;\\n opacity: 0;\\n left: -9999em;\\n top: 0;\\n width: 0;\\n height: 0;\\n z-index: -5;\\n /** Prevent wrapping so the IME appears against the textarea at the correct position */\\n white-space: nowrap;\\n overflow: hidden;\\n resize: none;\\n}\\n\\n.xterm .composition-view {\\n /* TODO: Composition position got messed up somewhere */\\n background: #000;\\n color: #FFF;\\n display: none;\\n position: absolute;\\n white-space: nowrap;\\n z-index: 1;\\n}\\n\\n.xterm .composition-view.active {\\n display: block;\\n}\\n\\n.xterm .xterm-viewport {\\n /* On OS X this is required in order for the scroll bar to appear fully opaque */\\n background-color: #000;\\n overflow-y: scroll;\\n cursor: default;\\n position: absolute;\\n right: 0;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n}\\n\\n.xterm .xterm-screen {\\n position: relative;\\n}\\n\\n.xterm .xterm-screen canvas {\\n position: absolute;\\n left: 0;\\n top: 0;\\n}\\n\\n.xterm .xterm-scroll-area {\\n visibility: hidden;\\n}\\n\\n.xterm-char-measure-element {\\n display: inline-block;\\n visibility: hidden;\\n position: absolute;\\n top: 0;\\n left: -9999em;\\n line-height: normal;\\n}\\n\\n.xterm {\\n cursor: text;\\n}\\n\\n.xterm.enable-mouse-events {\\n /* When mouse events are enabled (eg. tmux), revert to the standard pointer cursor */\\n cursor: default;\\n}\\n\\n.xterm.xterm-cursor-pointer {\\n cursor: pointer;\\n}\\n\\n.xterm.column-select.focus {\\n /* Column selection mode */\\n cursor: crosshair;\\n}\\n\\n.xterm .xterm-accessibility,\\n.xterm .xterm-message {\\n position: absolute;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n right: 0;\\n z-index: 10;\\n color: transparent;\\n}\\n\\n.xterm .live-region {\\n position: absolute;\\n left: -9999px;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.xterm-dim {\\n opacity: 0.5;\\n}\\n\\n.xterm-underline {\\n text-decoration: underline;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL3h0ZXJtL2Nzcy94dGVybS5jc3M/MTgwZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtDQUFrQyxtQkFBTyxDQUFDLDJGQUFzQztBQUNoRjtBQUNBO0FBQ0EsY0FBYyxRQUFTLDBvREFBMG9ELHdDQUF3Qyx5QkFBeUIsd0JBQXdCLDRCQUE0QixnQ0FBZ0MsR0FBRyxpQ0FBaUMsb0JBQW9CLEdBQUcsMkJBQTJCLHlCQUF5QixhQUFhLG1KQUFtSixHQUFHLG1DQUFtQyxpQkFBaUIsZ0JBQWdCLGdCQUFnQix1SEFBdUgsaUJBQWlCLG9CQUFvQixhQUFhLGVBQWUsZ0JBQWdCLGtCQUFrQix1SEFBdUgsdUJBQXVCLG1CQUFtQixHQUFHLDhCQUE4QixxRkFBcUYsa0JBQWtCLG9CQUFvQix5QkFBeUIsMEJBQTBCLGlCQUFpQixHQUFHLHFDQUFxQyxxQkFBcUIsR0FBRyw0QkFBNEIsb0hBQW9ILHlCQUF5QixzQkFBc0IseUJBQXlCLGVBQWUsY0FBYyxhQUFhLGdCQUFnQixHQUFHLDBCQUEwQix5QkFBeUIsR0FBRyxpQ0FBaUMseUJBQXlCLGNBQWMsYUFBYSxHQUFHLCtCQUErQix5QkFBeUIsR0FBRyxpQ0FBaUMsNEJBQTRCLHlCQUF5Qix5QkFBeUIsYUFBYSxvQkFBb0IsMEJBQTBCLEdBQUcsWUFBWSxtQkFBbUIsR0FBRyxnQ0FBZ0MsaUhBQWlILEdBQUcsaUNBQWlDLHNCQUFzQixHQUFHLGdDQUFnQyx5REFBeUQsR0FBRyx5REFBeUQseUJBQXlCLGNBQWMsYUFBYSxnQkFBZ0IsZUFBZSxrQkFBa0IseUJBQXlCLEdBQUcseUJBQXlCLHlCQUF5QixvQkFBb0IsaUJBQWlCLGtCQUFrQix1QkFBdUIsR0FBRyxnQkFBZ0IsbUJBQW1CLEdBQUcsc0JBQXNCLGlDQUFpQyxHQUFHO0FBQzNxSTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ub2RlX21vZHVsZXMveHRlcm0vY3NzL3h0ZXJtLmNzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbnZhciBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gPSByZXF1aXJlKFwiLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxNCBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMywgQ2hyaXN0b3BoZXIgSmVmZnJleSAoTUlUIExpY2Vuc2UpXFxuICogaHR0cHM6Ly9naXRodWIuY29tL2NoamovdGVybS5qc1xcbiAqIEBsaWNlbnNlIE1JVFxcbiAqXFxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFxcXCJTb2Z0d2FyZVxcXCIpLCB0byBkZWFsXFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxcbiAqXFxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cXG4gKlxcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcXFwiQVMgSVNcXFwiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXFxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXFxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxcbiAqIFRIRSBTT0ZUV0FSRS5cXG4gKlxcbiAqIE9yaWdpbmFsbHkgZm9ya2VkIGZyb20gKHdpdGggdGhlIGF1dGhvcidzIHBlcm1pc3Npb24pOlxcbiAqICAgRmFicmljZSBCZWxsYXJkJ3MgamF2YXNjcmlwdCB2dDEwMCBmb3IganNsaW51eDpcXG4gKiAgIGh0dHA6Ly9iZWxsYXJkLm9yZy9qc2xpbnV4L1xcbiAqICAgQ29weXJpZ2h0IChjKSAyMDExIEZhYnJpY2UgQmVsbGFyZFxcbiAqICAgVGhlIG9yaWdpbmFsIGRlc2lnbiByZW1haW5zLiBUaGUgdGVybWluYWwgaXRzZWxmXFxuICogICBoYXMgYmVlbiBleHRlbmRlZCB0byBpbmNsdWRlIHh0ZXJtIENTSSBjb2RlcywgYW1vbmdcXG4gKiAgIG90aGVyIGZlYXR1cmVzLlxcbiAqL1xcblxcbi8qKlxcbiAqICBEZWZhdWx0IHN0eWxlcyBmb3IgeHRlcm0uanNcXG4gKi9cXG5cXG4ueHRlcm0ge1xcbiAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFxcXCJsaWdhXFxcIiAwO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi54dGVybS5mb2N1cyxcXG4ueHRlcm06Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4ueHRlcm0gLnh0ZXJtLWhlbHBlcnMge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogMDtcXG4gICAgLyoqXFxuICAgICAqIFRoZSB6LWluZGV4IG9mIHRoZSBoZWxwZXJzIG11c3QgYmUgaGlnaGVyIHRoYW4gdGhlIGNhbnZhc2VzIGluIG9yZGVyIGZvclxcbiAgICAgKiBJTUVzIHRvIGFwcGVhciBvbiB0b3AuXFxuICAgICAqL1xcbiAgICB6LWluZGV4OiA1O1xcbn1cXG5cXG4ueHRlcm0gLnh0ZXJtLWhlbHBlci10ZXh0YXJlYSB7XFxuICAgIHBhZGRpbmc6IDA7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICAvKiBNb3ZlIHRleHRhcmVhIG91dCBvZiB0aGUgc2NyZWVuIHRvIHRoZSBmYXIgbGVmdCwgc28gdGhhdCB0aGUgY3Vyc29yIGlzIG5vdCB2aXNpYmxlICovXFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgbGVmdDogLTk5OTllbTtcXG4gICAgdG9wOiAwO1xcbiAgICB3aWR0aDogMDtcXG4gICAgaGVpZ2h0OiAwO1xcbiAgICB6LWluZGV4OiAtNTtcXG4gICAgLyoqIFByZXZlbnQgd3JhcHBpbmcgc28gdGhlIElNRSBhcHBlYXJzIGFnYWluc3QgdGhlIHRleHRhcmVhIGF0IHRoZSBjb3JyZWN0IHBvc2l0aW9uICovXFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHJlc2l6ZTogbm9uZTtcXG59XFxuXFxuLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3IHtcXG4gICAgLyogVE9ETzogQ29tcG9zaXRpb24gcG9zaXRpb24gZ290IG1lc3NlZCB1cCBzb21ld2hlcmUgKi9cXG4gICAgYmFja2dyb3VuZDogIzAwMDtcXG4gICAgY29sb3I6ICNGRkY7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgei1pbmRleDogMTtcXG59XFxuXFxuLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3LmFjdGl2ZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ueHRlcm0gLnh0ZXJtLXZpZXdwb3J0IHtcXG4gICAgLyogT24gT1MgWCB0aGlzIGlzIHJlcXVpcmVkIGluIG9yZGVyIGZvciB0aGUgc2Nyb2xsIGJhciB0byBhcHBlYXIgZnVsbHkgb3BhcXVlICovXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XFxuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcXG4gICAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICB0b3A6IDA7XFxuICAgIGJvdHRvbTogMDtcXG59XFxuXFxuLnh0ZXJtIC54dGVybS1zY3JlZW4ge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi54dGVybSAueHRlcm0tc2NyZWVuIGNhbnZhcyB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgbGVmdDogMDtcXG4gICAgdG9wOiAwO1xcbn1cXG5cXG4ueHRlcm0gLnh0ZXJtLXNjcm9sbC1hcmVhIHtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG5cXG4ueHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnQge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIGxlZnQ6IC05OTk5ZW07XFxuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxufVxcblxcbi54dGVybSB7XFxuICAgIGN1cnNvcjogdGV4dDtcXG59XFxuXFxuLnh0ZXJtLmVuYWJsZS1tb3VzZS1ldmVudHMge1xcbiAgICAvKiBXaGVuIG1vdXNlIGV2ZW50cyBhcmUgZW5hYmxlZCAoZWcuIHRtdXgpLCByZXZlcnQgdG8gdGhlIHN0YW5kYXJkIHBvaW50ZXIgY3Vyc29yICovXFxuICAgIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLnh0ZXJtLnh0ZXJtLWN1cnNvci1wb2ludGVyIHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4ueHRlcm0uY29sdW1uLXNlbGVjdC5mb2N1cyB7XFxuICAgIC8qIENvbHVtbiBzZWxlY3Rpb24gbW9kZSAqL1xcbiAgICBjdXJzb3I6IGNyb3NzaGFpcjtcXG59XFxuXFxuLnh0ZXJtIC54dGVybS1hY2Nlc3NpYmlsaXR5LFxcbi54dGVybSAueHRlcm0tbWVzc2FnZSB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgbGVmdDogMDtcXG4gICAgdG9wOiAwO1xcbiAgICBib3R0b206IDA7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICB6LWluZGV4OiAxMDtcXG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ueHRlcm0gLmxpdmUtcmVnaW9uIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBsZWZ0OiAtOTk5OXB4O1xcbiAgICB3aWR0aDogMXB4O1xcbiAgICBoZWlnaHQ6IDFweDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLnh0ZXJtLWRpbSB7XFxuICAgIG9wYWNpdHk6IDAuNTtcXG59XFxuXFxuLnh0ZXJtLXVuZGVybGluZSB7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG5cIiwgXCJcIl0pO1xuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/xterm/css/xterm.css\n");
/***/ }),
/***/ "./node_modules/css-loader/dist/runtime/api.js":
/*!*****************************************************!*\
!*** ./node_modules/css-loader/dist/runtime/api.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcz8yNGZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMscUJBQXFCO0FBQ2pFOztBQUVBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixxQkFBcUI7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhCQUE4Qjs7QUFFOUI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsY0FBYztBQUNuRTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1c2VTb3VyY2VNYXApIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICByZXR1cm4gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGNvbnRlbnQsIFwifVwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbignJyk7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSwgZGVkdXBlKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCAnJ11dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIHZhciBpZCA9IHRoaXNbaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW9kdWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2ldKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhUXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsyXSA9IFwiXCIuY29uY2F0KG1lZGlhUXVlcnksIFwiIGFuZCBcIikuY29uY2F0KGl0ZW1bMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuXG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8ICcnKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbignXFxuJyk7XG59IC8vIEFkYXB0ZWQgZnJvbSBjb252ZXJ0LXNvdXJjZS1tYXAgKE1JVClcblxuXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcbiAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICByZXR1cm4gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/api.js\n");
/***/ }),
/***/ "./node_modules/events/events.js":
/*!***************************************!*\
!*** ./node_modules/events/events.js ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanM/ZmFhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBLGlDQUFpQyxRQUFRO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esc0NBQXNDLFFBQVE7QUFDOUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEseUJBQXlCO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBldmVudExpc3RlbmVyKCkge1xuICAgICAgaWYgKGVycm9yTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG4gICAgdmFyIGVycm9yTGlzdGVuZXI7XG5cbiAgICAvLyBBZGRpbmcgYW4gZXJyb3IgbGlzdGVuZXIgaXMgbm90IG9wdGlvbmFsIGJlY2F1c2VcbiAgICAvLyBpZiBhbiBlcnJvciBpcyB0aHJvd24gb24gYW4gZXZlbnQgZW1pdHRlciB3ZSBjYW5ub3RcbiAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgYWN0dWFsIGV2ZW50IHdlIGFyZSB3YWl0aW5nIHdpbGxcbiAgICAvLyBiZSBmaXJlZC4gVGhlIHJlc3VsdCBjb3VsZCBiZSBhIHNpbGVudCB3YXkgdG8gY3JlYXRlXG4gICAgLy8gbWVtb3J5IG9yIGZpbGUgZGVzY3JpcHRvciBsZWFrcywgd2hpY2ggaXMgc29tZXRoaW5nXG4gICAgLy8gd2Ugc2hvdWxkIGF2b2lkLlxuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBlcnJvckxpc3RlbmVyID0gZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCBldmVudExpc3RlbmVyKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9O1xuXG4gICAgICBlbWl0dGVyLm9uY2UoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgZW1pdHRlci5vbmNlKG5hbWUsIGV2ZW50TGlzdGVuZXIpO1xuICB9KTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/events/events.js\n");
/***/ }),
/***/ "./node_modules/ieee754/index.js":
/*!***************************************!*\
!*** ./node_modules/ieee754/index.js ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanM/OTE1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVzs7QUFFbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsV0FBVzs7QUFFbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTs7QUFFbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/ieee754/index.js\n");
/***/ }),
/***/ "./node_modules/isarray/index.js":
/*!***************************************!*\
!*** ./node_modules/isarray/index.js ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanM/ZTNkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/isarray/index.js\n");
/***/ }),
/***/ "./node_modules/style-loader/lib/addStyles.js":
/*!****************************************************!*\
!*** ./node_modules/style-loader/lib/addStyles.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = __webpack_require__(/*! ./urls */ \"./node_modules/style-loader/lib/urls.js\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertAt.before, target);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\n\tif(options.attrs.nonce === undefined) {\n\t\tvar nonce = getNonce();\n\t\tif (nonce) {\n\t\t\toptions.attrs.nonce = nonce;\n\t\t}\n\t}\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction getNonce() {\n\tif (false) {}\n\n\treturn __webpack_require__.nc;\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = typeof options.transform === 'function'\n\t\t ? options.transform(obj.css) \n\t\t : options.transform.default(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzPzY4NDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsdURBQVE7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixzQkFBc0I7QUFDdkM7O0FBRUE7QUFDQSxtQkFBbUIsMkJBQTJCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLDJCQUEyQjtBQUM1QztBQUNBOztBQUVBLFFBQVEsdUJBQXVCO0FBQy9CO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQsa0RBQWtELHNCQUFzQjtBQUN4RTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBLEtBQUssS0FBd0MsRUFBRSxFQUU3Qzs7QUFFRixRQUFRLHNCQUFpQjtBQUN6Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUEsNkJBQTZCLG1CQUFtQjs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXJcdG1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW87XG5cblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodHlwZW9mIG1lbW8gPT09IFwidW5kZWZpbmVkXCIpIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9O1xufTtcblxudmFyIGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uICgpIHtcblx0Ly8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3Ncblx0Ly8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuXHQvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG5cdC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuXHQvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcblx0cmV0dXJuIHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iO1xufSk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0LCBwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCl7XG4gICAgcmV0dXJuIHBhcmVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbn07XG5cbnZhciBnZXRFbGVtZW50ID0gKGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbyA9IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQsIHBhcmVudCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHBhc3NpbmcgZnVuY3Rpb24gaW4gb3B0aW9ucywgdGhlbiB1c2UgaXQgZm9yIHJlc29sdmUgXCJoZWFkXCIgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAvLyBVc2VmdWwgZm9yIFNoYWRvdyBSb290IHN0eWxlIGkuZVxuICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgICAvLyAgIGluc2VydEludG86IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZm9vXCIpLnNoYWRvd1Jvb3QgfVxuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dmFyIHN0eWxlVGFyZ2V0ID0gZ2V0VGFyZ2V0LmNhbGwodGhpcywgdGFyZ2V0LCBwYXJlbnQpO1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblx0XHRcdGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW9bdGFyZ2V0XVxuXHR9O1xufSkoKTtcblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXJcdHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xudmFyXHRzdHlsZXNJbnNlcnRlZEF0VG9wID0gW107XG5cbnZhclx0Zml4VXJscyA9IHJlcXVpcmUoXCIuL3VybHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIERFQlVHICE9PSBcInVuZGVmaW5lZFwiICYmIERFQlVHKSB7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5hdHRycyA9IHR5cGVvZiBvcHRpb25zLmF0dHJzID09PSBcIm9iamVjdFwiID8gb3B0aW9ucy5hdHRycyA6IHt9O1xuXG5cdC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cdGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSBcImJvb2xlYW5cIikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgPGhlYWQ+IGVsZW1lbnRcbiAgICAgICAgaWYgKCFvcHRpb25zLmluc2VydEludG8pIG9wdGlvbnMuaW5zZXJ0SW50byA9IFwiaGVhZFwiO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0XG5cdGlmICghb3B0aW9ucy5pbnNlcnRBdCkgb3B0aW9ucy5pbnNlcnRBdCA9IFwiYm90dG9tXCI7XG5cblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0LCBvcHRpb25zKTtcblxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcblx0XHR2YXIgbWF5UmVtb3ZlID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdFx0ZG9tU3R5bGUucmVmcy0tO1xuXHRcdFx0bWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuXHRcdH1cblxuXHRcdGlmKG5ld0xpc3QpIHtcblx0XHRcdHZhciBuZXdTdHlsZXMgPSBsaXN0VG9TdHlsZXMobmV3TGlzdCwgb3B0aW9ucyk7XG5cdFx0XHRhZGRTdHlsZXNUb0RvbShuZXdTdHlsZXMsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV07XG5cblx0XHRcdGlmKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykgZG9tU3R5bGUucGFydHNbal0oKTtcblxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn07XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMsIG9wdGlvbnMpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdGlmKGRvbVN0eWxlKSB7XG5cdFx0XHRkb21TdHlsZS5yZWZzKys7XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBwYXJ0cyA9IFtdO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAobGlzdCwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGVzID0gW107XG5cdHZhciBuZXdTdHlsZXMgPSB7fTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IGxpc3RbaV07XG5cdFx0dmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG5cdFx0dmFyIGNzcyA9IGl0ZW1bMV07XG5cdFx0dmFyIG1lZGlhID0gaXRlbVsyXTtcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcblx0XHR2YXIgcGFydCA9IHtjc3M6IGNzcywgbWVkaWE6IG1lZGlhLCBzb3VyY2VNYXA6IHNvdXJjZU1hcH07XG5cblx0XHRpZighbmV3U3R5bGVzW2lkXSkgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtpZDogaWQsIHBhcnRzOiBbcGFydF19KTtcblx0XHRlbHNlIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KTtcblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudCAob3B0aW9ucywgc3R5bGUpIHtcblx0dmFyIHRhcmdldCA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvKVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG5cdH1cblxuXHR2YXIgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AgPSBzdHlsZXNJbnNlcnRlZEF0VG9wW3N0eWxlc0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcblx0XHRpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCB0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0fSBlbHNlIGlmIChsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZykge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH1cblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGUpO1xuXHR9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwiYm90dG9tXCIpIHtcblx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKSB7XG5cdFx0dmFyIG5leHRTaWJsaW5nID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEF0LmJlZm9yZSwgdGFyZ2V0KTtcblx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBuZXh0U2libGluZyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50IChzdHlsZSkge1xuXHRpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcblxuXHR2YXIgaWR4ID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlKTtcblx0aWYoaWR4ID49IDApIHtcblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cblx0aWYob3B0aW9ucy5hdHRycy50eXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdH1cblxuXHRpZihvcHRpb25zLmF0dHJzLm5vbmNlID09PSB1bmRlZmluZWQpIHtcblx0XHR2YXIgbm9uY2UgPSBnZXROb25jZSgpO1xuXHRcdGlmIChub25jZSkge1xuXHRcdFx0b3B0aW9ucy5hdHRycy5ub25jZSA9IG5vbmNlO1xuXHRcdH1cblx0fVxuXG5cdGFkZEF0dHJzKHN0eWxlLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIHN0eWxlKTtcblxuXHRyZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cblx0aWYob3B0aW9ucy5hdHRycy50eXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdH1cblx0b3B0aW9ucy5hdHRycy5yZWwgPSBcInN0eWxlc2hlZXRcIjtcblxuXHRhZGRBdHRycyhsaW5rLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIGxpbmspO1xuXG5cdHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRycyAoZWwsIGF0dHJzKSB7XG5cdE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRlbC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vbmNlKCkge1xuXHRpZiAodHlwZW9mIF9fd2VicGFja19ub25jZV9fID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIF9fd2VicGFja19ub25jZV9fO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdCA/IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpIFxuXHRcdCA6IG9wdGlvbnMudHJhbnNmb3JtLmRlZmF1bHQob2JqLmNzcyk7XG5cblx0ICAgIGlmIChyZXN1bHQpIHtcblx0ICAgIFx0Ly8gSWYgdHJhbnNmb3JtIHJldHVybnMgYSB2YWx1ZSwgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBydW5uaW5nIHJ1bnRpbWUgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBjc3MuXG5cdCAgICBcdG9iai5jc3MgPSByZXN1bHQ7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHQvLyBJZiB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHJldHVybnMgYSBmYWxzeSB2YWx1ZSwgZG9uJ3QgYWRkIHRoaXMgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBjb25kaXRpb25hbCBsb2FkaW5nIG9mIGNzc1xuXHQgICAgXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICBcdFx0Ly8gbm9vcFxuXHQgICAgXHR9O1xuXHQgICAgfVxuXHR9XG5cblx0aWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG5cdFx0dmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG5cblx0XHRzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcblxuXHRcdHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgZmFsc2UpO1xuXHRcdHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgdHJ1ZSk7XG5cblx0fSBlbHNlIGlmIChcblx0XHRvYmouc291cmNlTWFwICYmXG5cdFx0dHlwZW9mIFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5jcmVhdGVPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwucmV2b2tlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIlxuXHQpIHtcblx0XHRzdHlsZSA9IGNyZWF0ZUxpbmtFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IHVwZGF0ZUxpbmsuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblxuXHRcdFx0aWYoc3R5bGUuaHJlZikgVVJMLnJldm9rZU9iamVjdFVSTChzdHlsZS5ocmVmKTtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHN0eWxlID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblx0XHR9O1xuXHR9XG5cblx0dXBkYXRlKG9iaik7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmopIHtcblx0XHRpZiAobmV3T2JqKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcblx0XHRcdFx0bmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcblx0XHRcdFx0bmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlKG9iaiA9IG5ld09iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbW92ZSgpO1xuXHRcdH1cblx0fTtcbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcblx0dmFyIHRleHRTdG9yZSA9IFtdO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG5cdFx0dGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuXG5cdFx0cmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG5cdH07XG59KSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZSwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG5cdHZhciBjc3MgPSByZW1vdmUgPyBcIlwiIDogb2JqLmNzcztcblxuXHRpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcblx0XHR2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cblx0XHRpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcblxuXHRcdGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuXHRcdFx0c3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBtZWRpYSA9IG9iai5tZWRpYTtcblxuXHRpZihtZWRpYSkge1xuXHRcdHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIG1lZGlhKVxuXHR9XG5cblx0aWYoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0fSBlbHNlIHtcblx0XHR3aGlsZShzdHlsZS5maXJzdENoaWxkKSB7XG5cdFx0XHRzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcblx0XHR9XG5cblx0XHRzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaW5rIChsaW5rLCBvcHRpb25zLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG5cdC8qXG5cdFx0SWYgY29udmVydFRvQWJzb2x1dGVVcmxzIGlzbid0IGRlZmluZWQsIGJ1dCBzb3VyY2VtYXBzIGFyZSBlbmFibGVkXG5cdFx0YW5kIHRoZXJlIGlzIG5vIHB1YmxpY1BhdGggZGVmaW5lZCB0aGVuIGxldHMgdHVybiBjb252ZXJ0VG9BYnNvbHV0ZVVybHNcblx0XHRvbiBieSBkZWZhdWx0LiAgT3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIGNvbnZlcnRUb0Fic29sdXRlVXJscyBvcHRpb25cblx0XHRkaXJlY3RseVxuXHQqL1xuXHR2YXIgYXV0b0ZpeFVybHMgPSBvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyA9PT0gdW5kZWZpbmVkICYmIHNvdXJjZU1hcDtcblxuXHRpZiAob3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgfHwgYXV0b0ZpeFVybHMpIHtcblx0XHRjc3MgPSBmaXhVcmxzKGNzcyk7XG5cdH1cblxuXHRpZiAoc291cmNlTWFwKSB7XG5cdFx0Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcblx0XHRjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArIFwiICovXCI7XG5cdH1cblxuXHR2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3NdLCB7IHR5cGU6IFwidGV4dC9jc3NcIiB9KTtcblxuXHR2YXIgb2xkU3JjID0gbGluay5ocmVmO1xuXG5cdGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cblx0aWYob2xkU3JjKSBVUkwucmV2b2tlT2JqZWN0VVJMKG9sZFNyYyk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/style-loader/lib/addStyles.js\n");
/***/ }),
/***/ "./node_modules/style-loader/lib/urls.js":
/*!***********************************************!*\
!*** ./node_modules/style-loader/lib/urls.js ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcz9mNmQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVyxFQUFFO0FBQ3JELHdDQUF3QyxXQUFXLEVBQUU7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esc0NBQXNDO0FBQ3RDLEdBQUc7QUFDSDtBQUNBLDhEQUE4RDtBQUM5RDs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC98XFxzKiQpL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/style-loader/lib/urls.js\n");
/***/ }),
/***/ "./node_modules/webpack/buildin/global.js":
/*!***********************************!*\
!*** (webpack)/buildin/global.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcz9jZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/global.js\n");
/***/ }),
/***/ "./node_modules/xterm-addon-fit/lib/xterm-addon-fit.js":
/*!*************************************************************!*\
!*** ./node_modules/xterm-addon-fit/lib/xterm-addon-fit.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("!function(e,t){ true?module.exports=t():undefined}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=0)}([function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.activate=function(e){this._terminal=e},e.prototype.dispose=function(){},e.prototype.fit=function(){var e=this.proposeDimensions();if(e&&this._terminal){var t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}},e.prototype.proposeDimensions=function(){if(this._terminal&&this._terminal.element&&this._terminal.element.parentElement){var e=this._terminal._core,t=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(t.getPropertyValue(\"height\")),n=Math.max(0,parseInt(t.getPropertyValue(\"width\"))),o=window.getComputedStyle(this._terminal.element),i=r-(parseInt(o.getPropertyValue(\"padding-top\"))+parseInt(o.getPropertyValue(\"padding-bottom\"))),a=n-(parseInt(o.getPropertyValue(\"padding-right\"))+parseInt(o.getPropertyValue(\"padding-left\")))-e.viewport.scrollBarWidth;return{cols:Math.max(2,Math.floor(a/e._renderService.dimensions.actualCellWidth)),rows:Math.max(1,Math.floor(i/e._renderService.dimensions.actualCellHeight))}}},e}();t.FitAddon=n}])});\n//# sourceMappingURL=xterm-addon-fit.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL3h0ZXJtLWFkZG9uLWZpdC9saWIveHRlcm0tYWRkb24tZml0LmpzPzQ3ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFpRCxvQkFBb0IsU0FBK0csQ0FBQyxtQkFBbUIsbUJBQW1CLFNBQVMsY0FBYyw0QkFBNEIsWUFBWSxxQkFBcUIsMkRBQTJELHVDQUF1QyxxQ0FBcUMsb0JBQW9CLEVBQUUsaUJBQWlCLDRGQUE0RixlQUFlLHdDQUF3QyxTQUFTLEVBQUUsbUJBQW1CLDhCQUE4QixxREFBcUQsMEJBQTBCLDZDQUE2QyxzQkFBc0IsNkRBQTZELFlBQVksZUFBZSxTQUFTLGlCQUFpQixpQ0FBaUMsaUJBQWlCLFlBQVksVUFBVSxzQkFBc0IsbUJBQW1CLGlEQUFpRCxpQkFBaUIsa0JBQWtCLGFBQWEsc0NBQXNDLFNBQVMsRUFBRSxpQkFBaUIsY0FBYyx3Q0FBd0MsaUJBQWlCLGlDQUFpQyw0QkFBNEIsK0JBQStCLHNCQUFzQiwyQkFBMkIsNkhBQTZILDBDQUEwQyxpRkFBaUYsc2NBQXNjLE9BQU8seUpBQXlKLEdBQUcsR0FBRyxhQUFhLEdBQUc7QUFDM3hFIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3h0ZXJtLWFkZG9uLWZpdC9saWIveHRlcm0tYWRkb24tZml0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5GaXRBZGRvbj10KCk6ZS5GaXRBZGRvbj10KCl9KHdpbmRvdyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAsby5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZihyLnIobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciBvIGluIGUpci5kKG4sbyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLG8pKTtyZXR1cm4gbn0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHIucD1cIlwiLHIoci5zPTApfShbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fdGVybWluYWw9ZX0sZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuZml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wb3NlRGltZW5zaW9ucygpO2lmKGUmJnRoaXMuX3Rlcm1pbmFsKXt2YXIgdD10aGlzLl90ZXJtaW5hbC5fY29yZTt0aGlzLl90ZXJtaW5hbC5yb3dzPT09ZS5yb3dzJiZ0aGlzLl90ZXJtaW5hbC5jb2xzPT09ZS5jb2xzfHwodC5fcmVuZGVyU2VydmljZS5jbGVhcigpLHRoaXMuX3Rlcm1pbmFsLnJlc2l6ZShlLmNvbHMsZS5yb3dzKSl9fSxlLnByb3RvdHlwZS5wcm9wb3NlRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKHRoaXMuX3Rlcm1pbmFsJiZ0aGlzLl90ZXJtaW5hbC5lbGVtZW50JiZ0aGlzLl90ZXJtaW5hbC5lbGVtZW50LnBhcmVudEVsZW1lbnQpe3ZhciBlPXRoaXMuX3Rlcm1pbmFsLl9jb3JlLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fdGVybWluYWwuZWxlbWVudC5wYXJlbnRFbGVtZW50KSxyPXBhcnNlSW50KHQuZ2V0UHJvcGVydHlWYWx1ZShcImhlaWdodFwiKSksbj1NYXRoLm1heCgwLHBhcnNlSW50KHQuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIpKSksbz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl90ZXJtaW5hbC5lbGVtZW50KSxpPXItKHBhcnNlSW50KG8uZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctdG9wXCIpKStwYXJzZUludChvLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLWJvdHRvbVwiKSkpLGE9bi0ocGFyc2VJbnQoby5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1yaWdodFwiKSkrcGFyc2VJbnQoby5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1sZWZ0XCIpKSktZS52aWV3cG9ydC5zY3JvbGxCYXJXaWR0aDtyZXR1cm57Y29sczpNYXRoLm1heCgyLE1hdGguZmxvb3IoYS9lLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuYWN0dWFsQ2VsbFdpZHRoKSkscm93czpNYXRoLm1heCgxLE1hdGguZmxvb3IoaS9lLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuYWN0dWFsQ2VsbEhlaWdodCkpfX19LGV9KCk7dC5GaXRBZGRvbj1ufV0pfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD14dGVybS1hZGRvbi1maXQuanMubWFwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/xterm-addon-fit/lib/xterm-addon-fit.js\n");
/***/ }),
/***/ "./node_modules/xterm-addon-web-links/lib/xterm-addon-web-links.js":
/*!*************************************************************************!*\
!*** ./node_modules/xterm-addon-web-links/lib/xterm-addon-web-links.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("!function(e,t){ true?module.exports=t():undefined}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=0)}([function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1),i=new RegExp(\"(?:^|[^\\\\da-z\\\\.-]+)((https?:\\\\/\\\\/)((([\\\\da-z\\\\.-]+)\\\\.([a-z\\\\.]{2,6}))|((\\\\d{1,3}\\\\.){3}\\\\d{1,3})|(localhost))(:\\\\d{1,5})?((\\\\/[\\\\/\\\\w\\\\.\\\\-%~:+]*)*([^:\\\"'\\\\s]))?(\\\\?[0-9\\\\w\\\\[\\\\]\\\\(\\\\)\\\\/\\\\?\\\\!#@$%&'*+,:;~\\\\=\\\\.\\\\-]*)?(#[0-9\\\\w\\\\[\\\\]\\\\(\\\\)\\\\/\\\\?\\\\!#@$%&'*+,:;~\\\\=\\\\.\\\\-]*)?)($|[^\\\\/\\\\w\\\\.\\\\-%]+)\");function o(e,t){var n=window.open();n?(n.opener=null,n.location.href=t):console.warn(\"Opening link blocked as opener could not be cleared\")}var a=function(){function e(e,t,n){void 0===e&&(e=o),void 0===t&&(t={}),void 0===n&&(n=!1),this._handler=e,this._options=t,this._useLinkProvider=n,this._options.matchIndex=1}return e.prototype.activate=function(e){this._terminal=e,this._useLinkProvider&&\"registerLinkProvider\"in this._terminal?this._linkProvider=this._terminal.registerLinkProvider(new r.WebLinkProvider(this._terminal,i,this._handler)):this._linkMatcherId=this._terminal.registerLinkMatcher(i,this._handler,this._options)},e.prototype.dispose=function(){var e;void 0!==this._linkMatcherId&&void 0!==this._terminal&&this._terminal.deregisterLinkMatcher(this._linkMatcherId),null===(e=this._linkProvider)||void 0===e||e.dispose()},e}();t.WebLinksAddon=a},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(e,t,n){this._terminal=e,this._regex=t,this._handler=n}return e.prototype.provideLink=function(e,t){t(i.computeLink(e,this._regex,this._terminal,this._handler))},e}();t.WebLinkProvider=r;var i=function(){function e(){}return e.computeLink=function(t,n,r,i){for(var o,a=new RegExp(n.source,(n.flags||\"\")+\"g\"),s=e._translateBufferLineToStringWithWrap(t.y-1,!1,r),u=s[0],d=s[1],l=-1;null!==(o=a.exec(u));){var c=o[1];if(!c){console.log(\"match found without corresponding matchIndex\");break}if(l=u.indexOf(c,l+1),a.lastIndex=l+c.length,l<0)break;for(var f=l+c.length,p=d+1;f>r.cols;)f-=r.cols,p++;return{range:{start:{x:l+1,y:d+1},end:{x:f,y:p}},text:c,activate:i}}},e._translateBufferLineToStringWithWrap=function(e,t,n){var r,i,o=\"\";do{if(!(s=n.buffer.active.getLine(e)))break;s.isWrapped&&e--,i=s.isWrapped}while(i);var a=e;do{var s,u=n.buffer.active.getLine(e+1);if(r=!!u&&u.isWrapped,!(s=n.buffer.active.getLine(e)))break;o+=s.translateToString(!r&&t).substring(0,n.cols),e++}while(r);return[o,a]},e}();t.LinkComputer=i}])}));\n//# sourceMappingURL=xterm-addon-web-links.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL3h0ZXJtLWFkZG9uLXdlYi1saW5rcy9saWIveHRlcm0tYWRkb24td2ViLWxpbmtzLmpzPzQwOGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFpRCxvQkFBb0IsU0FBeUgsQ0FBQyxvQkFBb0IsbUJBQW1CLFNBQVMsY0FBYyw0QkFBNEIsWUFBWSxxQkFBcUIsMkRBQTJELHVDQUF1QyxxQ0FBcUMsb0JBQW9CLEVBQUUsaUJBQWlCLDRGQUE0RixlQUFlLHdDQUF3QyxTQUFTLEVBQUUsbUJBQW1CLDhCQUE4QixxREFBcUQsMEJBQTBCLDZDQUE2QyxzQkFBc0IsNkRBQTZELFlBQVksZUFBZSxTQUFTLGlCQUFpQixpQ0FBaUMsaUJBQWlCLFlBQVksVUFBVSxzQkFBc0IsbUJBQW1CLGlEQUFpRCxpQkFBaUIsa0JBQWtCLGFBQWEsc0NBQXNDLFNBQVMsRUFBRSwyRkFBMkYsSUFBSSxTQUFTLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxvQkFBb0IsSUFBSSxxRkFBcUYsdURBQXVELHVDQUF1QyxnQkFBZ0Isb0JBQW9CLHdHQUF3RyxpQkFBaUIsa0JBQWtCLG1DQUFtQyx3R0FBd0csd0NBQXdDLG9SQUFvUixnQ0FBZ0MsTUFBTSx3S0FBd0ssR0FBRyxHQUFHLGtCQUFrQixpQkFBaUIsYUFBYSxzQ0FBc0MsU0FBUyxFQUFFLGlCQUFpQixrQkFBa0IsK0NBQStDLDZDQUE2Qyw2REFBNkQsR0FBRyxHQUFHLG9CQUFvQixpQkFBaUIsY0FBYyx1Q0FBdUMsMkhBQTJILHFCQUFxQixFQUFFLFdBQVcsT0FBTyw0REFBNEQsTUFBTSx1REFBdUQsMkJBQTJCLFNBQVMsZUFBZSxPQUFPLE9BQU8sT0FBTyxZQUFZLE1BQU0sU0FBUyxxQkFBcUIsd0RBQXdELGFBQWEsR0FBRyx5Q0FBeUMsK0JBQStCLFNBQVMsUUFBUSxHQUFHLHFDQUFxQyw0REFBNEQsc0RBQXNELFNBQVMsWUFBWSxHQUFHLEdBQUcsaUJBQWlCLEdBQUc7QUFDejlHIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3h0ZXJtLWFkZG9uLXdlYi1saW5rcy9saWIveHRlcm0tYWRkb24td2ViLWxpbmtzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5XZWJMaW5rc0FkZG9uPXQoKTplLldlYkxpbmtzQWRkb249dCgpfSh3aW5kb3csKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBpPXRbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLG4pLGkubD0hMCxpLmV4cG9ydHN9cmV0dXJuIG4ubT1lLG4uYz10LG4uZD1mdW5jdGlvbihlLHQscil7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OnJ9KX0sbi5yPWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG4udD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9bihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiZcInN0cmluZ1wiIT10eXBlb2YgZSlmb3IodmFyIGkgaW4gZSluLmQocixpLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsaSkpO3JldHVybiByfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZCh0LFwiYVwiLHQpLHR9LG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5wPVwiXCIsbihuLnM9MCl9KFtmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bigxKSxpPW5ldyBSZWdFeHAoXCIoPzpefFteXFxcXGRhLXpcXFxcLi1dKykoKGh0dHBzPzpcXFxcL1xcXFwvKSgoKFtcXFxcZGEtelxcXFwuLV0rKVxcXFwuKFthLXpcXFxcLl17Miw2fSkpfCgoXFxcXGR7MSwzfVxcXFwuKXszfVxcXFxkezEsM30pfChsb2NhbGhvc3QpKSg6XFxcXGR7MSw1fSk/KChcXFxcL1tcXFxcL1xcXFx3XFxcXC5cXFxcLSV+OitdKikqKFteOlxcXCInXFxcXHNdKSk/KFxcXFw/WzAtOVxcXFx3XFxcXFtcXFxcXVxcXFwoXFxcXClcXFxcL1xcXFw/XFxcXCEjQCQlJicqKyw6O35cXFxcPVxcXFwuXFxcXC1dKik/KCNbMC05XFxcXHdcXFxcW1xcXFxdXFxcXChcXFxcKVxcXFwvXFxcXD9cXFxcISNAJCUmJyorLDo7flxcXFw9XFxcXC5cXFxcLV0qKT8pKCR8W15cXFxcL1xcXFx3XFxcXC5cXFxcLSVdKylcIik7ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPXdpbmRvdy5vcGVuKCk7bj8obi5vcGVuZXI9bnVsbCxuLmxvY2F0aW9uLmhyZWY9dCk6Y29uc29sZS53YXJuKFwiT3BlbmluZyBsaW5rIGJsb2NrZWQgYXMgb3BlbmVyIGNvdWxkIG5vdCBiZSBjbGVhcmVkXCIpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09ZSYmKGU9byksdm9pZCAwPT09dCYmKHQ9e30pLHZvaWQgMD09PW4mJihuPSExKSx0aGlzLl9oYW5kbGVyPWUsdGhpcy5fb3B0aW9ucz10LHRoaXMuX3VzZUxpbmtQcm92aWRlcj1uLHRoaXMuX29wdGlvbnMubWF0Y2hJbmRleD0xfXJldHVybiBlLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbihlKXt0aGlzLl90ZXJtaW5hbD1lLHRoaXMuX3VzZUxpbmtQcm92aWRlciYmXCJyZWdpc3RlckxpbmtQcm92aWRlclwiaW4gdGhpcy5fdGVybWluYWw/dGhpcy5fbGlua1Byb3ZpZGVyPXRoaXMuX3Rlcm1pbmFsLnJlZ2lzdGVyTGlua1Byb3ZpZGVyKG5ldyByLldlYkxpbmtQcm92aWRlcih0aGlzLl90ZXJtaW5hbCxpLHRoaXMuX2hhbmRsZXIpKTp0aGlzLl9saW5rTWF0Y2hlcklkPXRoaXMuX3Rlcm1pbmFsLnJlZ2lzdGVyTGlua01hdGNoZXIoaSx0aGlzLl9oYW5kbGVyLHRoaXMuX29wdGlvbnMpfSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIGU7dm9pZCAwIT09dGhpcy5fbGlua01hdGNoZXJJZCYmdm9pZCAwIT09dGhpcy5fdGVybWluYWwmJnRoaXMuX3Rlcm1pbmFsLmRlcmVnaXN0ZXJMaW5rTWF0Y2hlcih0aGlzLl9saW5rTWF0Y2hlcklkKSxudWxsPT09KGU9dGhpcy5fbGlua1Byb3ZpZGVyKXx8dm9pZCAwPT09ZXx8ZS5kaXNwb3NlKCl9LGV9KCk7dC5XZWJMaW5rc0FkZG9uPWF9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuX3Rlcm1pbmFsPWUsdGhpcy5fcmVnZXg9dCx0aGlzLl9oYW5kbGVyPW59cmV0dXJuIGUucHJvdG90eXBlLnByb3ZpZGVMaW5rPWZ1bmN0aW9uKGUsdCl7dChpLmNvbXB1dGVMaW5rKGUsdGhpcy5fcmVnZXgsdGhpcy5fdGVybWluYWwsdGhpcy5faGFuZGxlcikpfSxlfSgpO3QuV2ViTGlua1Byb3ZpZGVyPXI7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmNvbXB1dGVMaW5rPWZ1bmN0aW9uKHQsbixyLGkpe2Zvcih2YXIgbyxhPW5ldyBSZWdFeHAobi5zb3VyY2UsKG4uZmxhZ3N8fFwiXCIpK1wiZ1wiKSxzPWUuX3RyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZ1dpdGhXcmFwKHQueS0xLCExLHIpLHU9c1swXSxkPXNbMV0sbD0tMTtudWxsIT09KG89YS5leGVjKHUpKTspe3ZhciBjPW9bMV07aWYoIWMpe2NvbnNvbGUubG9nKFwibWF0Y2ggZm91bmQgd2l0aG91dCBjb3JyZXNwb25kaW5nIG1hdGNoSW5kZXhcIik7YnJlYWt9aWYobD11LmluZGV4T2YoYyxsKzEpLGEubGFzdEluZGV4PWwrYy5sZW5ndGgsbDwwKWJyZWFrO2Zvcih2YXIgZj1sK2MubGVuZ3RoLHA9ZCsxO2Y+ci5jb2xzOylmLT1yLmNvbHMscCsrO3JldHVybntyYW5nZTp7c3RhcnQ6e3g6bCsxLHk6ZCsxfSxlbmQ6e3g6Zix5OnB9fSx0ZXh0OmMsYWN0aXZhdGU6aX19fSxlLl90cmFuc2xhdGVCdWZmZXJMaW5lVG9TdHJpbmdXaXRoV3JhcD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPVwiXCI7ZG97aWYoIShzPW4uYnVmZmVyLmFjdGl2ZS5nZXRMaW5lKGUpKSlicmVhaztzLmlzV3JhcHBlZCYmZS0tLGk9cy5pc1dyYXBwZWR9d2hpbGUoaSk7dmFyIGE9ZTtkb3t2YXIgcyx1PW4uYnVmZmVyLmFjdGl2ZS5nZXRMaW5lKGUrMSk7aWYocj0hIXUmJnUuaXNXcmFwcGVkLCEocz1uLmJ1ZmZlci5hY3RpdmUuZ2V0TGluZShlKSkpYnJlYWs7bys9cy50cmFuc2xhdGVUb1N0cmluZyghciYmdCkuc3Vic3RyaW5nKDAsbi5jb2xzKSxlKyt9d2hpbGUocik7cmV0dXJuW28sYV19LGV9KCk7dC5MaW5rQ29tcHV0ZXI9aX1dKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXh0ZXJtLWFkZG9uLXdlYi1saW5rcy5qcy5tYXAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/xterm-addon-web-links/lib/xterm-addon-web-links.js\n");
/***/ }),
/***/ "./node_modules/xterm/css/xterm.css":
/*!******************************************!*\
!*** ./node_modules/xterm/css/xterm.css ***!
\******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("\nvar content = __webpack_require__(/*! !../../css-loader/dist/cjs.js!./xterm.css */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/xterm/css/xterm.css\");\n\nif(typeof content === 'string') content = [[module.i, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = __webpack_require__(/*! ../../style-loader/lib/addStyles.js */ \"./node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(false) {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL3h0ZXJtL2Nzcy94dGVybS5jc3M/ZjNjZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLDJIQUE0Qzs7QUFFbEUsNENBQTRDLFFBQVM7O0FBRXJEO0FBQ0E7Ozs7QUFJQSxlQUFlOztBQUVmO0FBQ0E7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLHlGQUFzQzs7QUFFM0Q7O0FBRUEsR0FBRyxLQUFVLEVBQUUiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMveHRlcm0vY3NzL3h0ZXJtLmNzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4veHRlcm0uY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi94dGVybS5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4veHRlcm0uY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/xterm/css/xterm.css\n");
/***/ }),
/***/ "./node_modules/xterm/lib/xterm.js":
/*!*****************************************!*\
!*** ./node_modules/xterm/lib/xterm.js ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("!function(e,t){if(true)module.exports=t();else { var i, r; }}(window,(function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)r.d(i,n,function(t){return e[t]}.bind(null,n));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=34)}([function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.forwardEvent=t.EventEmitter=void 0;var i=function(){function e(){this._listeners=[],this._disposed=!1}return Object.defineProperty(e.prototype,\"event\",{get:function(){var e=this;return this._event||(this._event=function(t){return e._listeners.push(t),{dispose:function(){if(!e._disposed)for(var r=0;r<e._listeners.length;r++)if(e._listeners[r]===t)return void e._listeners.splice(r,1)}}}),this._event},enumerable:!1,configurable:!0}),e.prototype.fire=function(e,t){for(var r=[],i=0;i<this._listeners.length;i++)r.push(this._listeners[i]);for(i=0;i<r.length;i++)r[i].call(void 0,e,t)},e.prototype.dispose=function(){this._listeners&&(this._listeners.length=0),this._disposed=!0},e}();t.EventEmitter=i,t.forwardEvent=function(e,t){return e((function(e){return t.fire(e)}))}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.IUnicodeService=t.IOptionsService=t.ILogService=t.IInstantiationService=t.IDirtyRowService=t.ICharsetService=t.ICoreService=t.ICoreMouseService=t.IBufferService=void 0;var i=r(14);t.IBufferService=i.createDecorator(\"BufferService\"),t.ICoreMouseService=i.createDecorator(\"CoreMouseService\"),t.ICoreService=i.createDecorator(\"CoreService\"),t.ICharsetService=i.createDecorator(\"CharsetService\"),t.IDirtyRowService=i.createDecorator(\"DirtyRowService\"),t.IInstantiationService=i.createDecorator(\"InstantiationService\"),t.ILogService=i.createDecorator(\"LogService\"),t.IOptionsService=i.createDecorator(\"OptionsService\"),t.IUnicodeService=i.createDecorator(\"UnicodeService\")},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getDisposeArrayDisposable=t.disposeArray=t.Disposable=void 0;var i=function(){function e(){this._disposables=[],this._isDisposed=!1}return e.prototype.dispose=function(){this._isDisposed=!0;for(var e=0,t=this._disposables;e<t.length;e++){t[e].dispose()}this._disposables.length=0},e.prototype.register=function(e){return this._disposables.push(e),e},e.prototype.unregister=function(e){var t=this._disposables.indexOf(e);-1!==t&&this._disposables.splice(t,1)},e}();function n(e){for(var t=0,r=e;t<r.length;t++){r[t].dispose()}e.length=0}t.Disposable=i,t.disposeArray=n,t.getDisposeArrayDisposable=function(e){return{dispose:function(){return n(e)}}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=256,t.DEFAULT_ATTR=256|t.DEFAULT_COLOR<<9,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR=\"\",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=\" \",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.CellData=void 0;var o=r(8),s=r(3),a=r(6),c=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.content=0,t.fg=0,t.bg=0,t.extended=new a.ExtendedAttrs,t.combinedData=\"\",t}return n(t,e),t.fromCharData=function(e){var r=new t;return r.setFromCharData(e),r},t.prototype.isCombined=function(){return 2097152&this.content},t.prototype.getWidth=function(){return this.content>>22},t.prototype.getChars=function(){return 2097152&this.content?this.combinedData:2097151&this.content?o.stringFromCodePoint(2097151&this.content):\"\"},t.prototype.getCode=function(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content},t.prototype.setFromCharData=function(e){this.fg=e[s.CHAR_DATA_ATTR_INDEX],this.bg=0;var t=!1;if(e[s.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[s.CHAR_DATA_CHAR_INDEX].length){var r=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=r&&r<=56319){var i=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=i&&i<=57343?this.content=1024*(r-55296)+i-56320+65536|e[s.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[s.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[s.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[s.CHAR_DATA_WIDTH_INDEX]<<22)},t.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},t}(a.AttributeData);t.CellData=c},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.ISoundService=t.ISelectionService=t.IRenderService=t.IMouseService=t.ICoreBrowserService=t.ICharSizeService=void 0;var i=r(14);t.ICharSizeService=i.createDecorator(\"CharSizeService\"),t.ICoreBrowserService=i.createDecorator(\"CoreBrowserService\"),t.IMouseService=i.createDecorator(\"MouseService\"),t.IRenderService=i.createDecorator(\"RenderService\"),t.ISelectionService=i.createDecorator(\"SelectionService\"),t.ISoundService=i.createDecorator(\"SoundService\")},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;var i=function(){function e(){this.fg=0,this.bg=0,this.extended=new n}return e.toColorRGB=function(e){return[e>>>16&255,e>>>8&255,255&e]},e.fromColorRGB=function(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]},e.prototype.clone=function(){var t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t},e.prototype.isInverse=function(){return 67108864&this.fg},e.prototype.isBold=function(){return 134217728&this.fg},e.prototype.isUnderline=function(){return 268435456&this.fg},e.prototype.isBlink=function(){return 536870912&this.fg},e.prototype.isInvisible=function(){return 1073741824&this.fg},e.prototype.isItalic=function(){return 67108864&this.bg},e.prototype.isDim=function(){return 134217728&this.bg},e.prototype.getFgColorMode=function(){return 50331648&this.fg},e.prototype.getBgColorMode=function(){return 50331648&this.bg},e.prototype.isFgRGB=function(){return 50331648==(50331648&this.fg)},e.prototype.isBgRGB=function(){return 50331648==(50331648&this.bg)},e.prototype.isFgPalette=function(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)},e.prototype.isBgPalette=function(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)},e.prototype.isFgDefault=function(){return 0==(50331648&this.fg)},e.prototype.isBgDefault=function(){return 0==(50331648&this.bg)},e.prototype.isAttributeDefault=function(){return 0===this.fg&&0===this.bg},e.prototype.getFgColor=function(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}},e.prototype.getBgColor=function(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}},e.prototype.hasExtendedAttrs=function(){return 268435456&this.bg},e.prototype.updateExtended=function(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456},e.prototype.getUnderlineColor=function(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()},e.prototype.getUnderlineColorMode=function(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()},e.prototype.isUnderlineColorRGB=function(){return 268435456&this.bg&&~this.extended.underlineColor?50331648==(50331648&this.extended.underlineColor):this.isFgRGB()},e.prototype.isUnderlineColorPalette=function(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()},e.prototype.isUnderlineColorDefault=function(){return 268435456&this.bg&&~this.extended.underlineColor?0==(50331648&this.extended.underlineColor):this.isFgDefault()},e.prototype.getUnderlineStyle=function(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0},e}();t.AttributeData=i;var n=function(){function e(e,t){void 0===e&&(e=0),void 0===t&&(t=-1),this.underlineStyle=e,this.underlineColor=t}return e.prototype.clone=function(){return new e(this.underlineStyle,this.underlineColor)},e.prototype.isEmpty=function(){return 0===this.underlineStyle},e}();t.ExtendedAttrs=n},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.addDisposableDomListener=void 0,t.addDisposableDomListener=function(e,t,r,i){e.addEventListener(t,r,i);var n=!1;return{dispose:function(){n||(n=!0,e.removeEventListener(t,r,i))}}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=t.utf32ToString=t.stringFromCodePoint=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=e.length);for(var i=\"\",n=t;n<r;++n){var o=e[n];o>65535?(o-=65536,i+=String.fromCharCode(55296+(o>>10))+String.fromCharCode(o%1024+56320)):i+=String.fromCharCode(o)}return i};var i=function(){function e(){this._interim=0}return e.prototype.clear=function(){this._interim=0},e.prototype.decode=function(e,t){var r=e.length;if(!r)return 0;var i=0,n=0;this._interim&&(56320<=(a=e.charCodeAt(n++))&&a<=57343?t[i++]=1024*(this._interim-55296)+a-56320+65536:(t[i++]=this._interim,t[i++]=a),this._interim=0);for(var o=n;o<r;++o){var s=e.charCodeAt(o);if(55296<=s&&s<=56319){if(++o>=r)return this._interim=s,i;var a;56320<=(a=e.charCodeAt(o))&&a<=57343?t[i++]=1024*(s-55296)+a-56320+65536:(t[i++]=s,t[i++]=a)}else t[i++]=s}return i},e}();t.StringToUtf32=i;var n=function(){function e(){this.interim=new Uint8Array(3)}return e.prototype.clear=function(){this.interim.fill(0)},e.prototype.decode=function(e,t){var r=e.length;if(!r)return 0;var i,n,o,s,a=0,c=0,l=0;if(this.interim[0]){var h=!1,u=this.interim[0];u&=192==(224&u)?31:224==(240&u)?15:7;for(var f=0,_=void 0;(_=63&this.interim[++f])&&f<4;)u<<=6,u|=_;for(var d=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,p=d-f;l<p;){if(l>=r)return 0;if(128!=(192&(_=e[l++]))){l--,h=!0;break}this.interim[f++]=_,u<<=6,u|=63&_}h||(2===d?u<128?l--:t[a++]=u:3===d?u<2048||u>=55296&&u<=57343||(t[a++]=u):u<65536||u>1114111||(t[a++]=u)),this.interim.fill(0)}for(var v=r-4,g=l;g<r;){for(;!(!(g<v)||128&(i=e[g])||128&(n=e[g+1])||128&(o=e[g+2])||128&(s=e[g+3]));)t[a++]=i,t[a++]=n,t[a++]=o,t[a++]=s,g+=4;if((i=e[g++])<128)t[a++]=i;else if(192==(224&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if((c=(31&i)<<6|63&n)<128){g--;continue}t[a++]=c}else if(224==(240&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,a;if(128!=(192&(o=e[g++]))){g--;continue}if((c=(15&i)<<12|(63&n)<<6|63&o)<2048||c>=55296&&c<=57343)continue;t[a++]=c}else if(240==(248&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,a;if(128!=(192&(o=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,this.interim[2]=o,a;if(128!=(192&(s=e[g++]))){g--;continue}if((c=(7&i)<<18|(63&n)<<12|(63&o)<<6|63&s)<65536||c>1114111)continue;t[a++]=c}}return a},e}();t.Utf8ToUtf32=n},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.CHAR_ATLAS_CELL_SPACING=t.DIM_OPACITY=t.INVERTED_DEFAULT_COLOR=void 0,t.INVERTED_DEFAULT_COLOR=257,t.DIM_OPACITY=.5,t.CHAR_ATLAS_CELL_SPACING=1},function(e,t,r){\"use strict\";var i,n,o,s;function a(e){var t=e.toString(16);return t.length<2?\"0\"+t:t}function c(e,t){return e<t?(t+.05)/(e+.05):(e+.05)/(t+.05)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.contrastRatio=t.toPaddedHex=t.rgba=t.rgb=t.css=t.color=t.channels=void 0,function(e){e.toCss=function(e,t,r,i){return void 0!==i?\"#\"+a(e)+a(t)+a(r)+a(i):\"#\"+a(e)+a(t)+a(r)},e.toRgba=function(e,t,r,i){return void 0===i&&(i=255),(e<<24|t<<16|r<<8|i)>>>0}}(i=t.channels||(t.channels={})),(n=t.color||(t.color={})).blend=function(e,t){var r=(255&t.rgba)/255;if(1===r)return{css:t.css,rgba:t.rgba};var n=t.rgba>>24&255,o=t.rgba>>16&255,s=t.rgba>>8&255,a=e.rgba>>24&255,c=e.rgba>>16&255,l=e.rgba>>8&255,h=a+Math.round((n-a)*r),u=c+Math.round((o-c)*r),f=l+Math.round((s-l)*r);return{css:i.toCss(h,u,f),rgba:i.toRgba(h,u,f)}},n.isOpaque=function(e){return 255==(255&e.rgba)},n.ensureContrastRatio=function(e,t,r){var i=s.ensureContrastRatio(e.rgba,t.rgba,r);if(i)return s.toColor(i>>24&255,i>>16&255,i>>8&255)},n.opaque=function(e){var t=(255|e.rgba)>>>0,r=s.toChannels(t),n=r[0],o=r[1],a=r[2];return{css:i.toCss(n,o,a),rgba:t}},n.opacity=function(e,t){var r=Math.round(255*t),n=s.toChannels(e.rgba),o=n[0],a=n[1],c=n[2];return{css:i.toCss(o,a,c,r),rgba:i.toRgba(o,a,c,r)}},(t.css||(t.css={})).toColor=function(e){switch(e.length){case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}throw new Error(\"css.toColor: Unsupported css format\")},function(e){function t(e,t,r){var i=e/255,n=t/255,o=r/255;return.2126*(i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))+.0722*(o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(o=t.rgb||(t.rgb={})),function(e){function t(e,t,r){for(var i=e>>24&255,n=e>>16&255,s=e>>8&255,a=t>>24&255,l=t>>16&255,h=t>>8&255,u=c(o.relativeLuminance2(a,h,l),o.relativeLuminance2(i,n,s));u<r&&(a>0||l>0||h>0);)a-=Math.max(0,Math.ceil(.1*a)),l-=Math.max(0,Math.ceil(.1*l)),h-=Math.max(0,Math.ceil(.1*h)),u=c(o.relativeLuminance2(a,h,l),o.relativeLuminance2(i,n,s));return(a<<24|l<<16|h<<8|255)>>>0}function r(e,t,r){for(var i=e>>24&255,n=e>>16&255,s=e>>8&255,a=t>>24&255,l=t>>16&255,h=t>>8&255,u=c(o.relativeLuminance2(a,h,l),o.relativeLuminance2(i,n,s));u<r&&(a<255||l<255||h<255);)a=Math.min(255,a+Math.ceil(.1*(255-a))),l=Math.min(255,l+Math.ceil(.1*(255-l))),h=Math.min(255,h+Math.ceil(.1*(255-h))),u=c(o.relativeLuminance2(a,h,l),o.relativeLuminance2(i,n,s));return(a<<24|l<<16|h<<8|255)>>>0}e.ensureContrastRatio=function(e,i,n){var s=o.relativeLuminance(e>>8),a=o.relativeLuminance(i>>8);if(c(s,a)<n)return a<s?t(e,i,n):r(e,i,n)},e.reduceLuminance=t,e.increaseLuminance=r,e.toChannels=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]},e.toColor=function(e,t,r){return{css:i.toCss(e,t,r),rgba:i.toRgba(e,t,r)}}}(s=t.rgba||(t.rgba={})),t.toPaddedHex=a,t.contrastRatio=c},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isLinux=t.isWindows=t.isIphone=t.isIpad=t.isMac=t.isSafari=t.isFirefox=void 0;var i=\"undefined\"==typeof navigator,n=i?\"node\":navigator.userAgent,o=i?\"node\":navigator.platform;function s(e,t){return e.indexOf(t)>=0}t.isFirefox=!!~n.indexOf(\"Firefox\"),t.isSafari=/^((?!chrome|android).)*safari/i.test(n),t.isMac=s([\"Macintosh\",\"MacIntel\",\"MacPPC\",\"Mac68K\"],o),t.isIpad=\"iPad\"===o,t.isIphone=\"iPhone\"===o,t.isWindows=s([\"Windows\",\"Win16\",\"Win32\",\"WinCE\"],o),t.isLinux=o.indexOf(\"Linux\")>=0},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.C1=t.C0=void 0,function(e){e.NUL=\"\\0\",e.SOH=\"\u0001\",e.STX=\"\u0002\",e.ETX=\"\u0003\",e.EOT=\"\u0004\",e.ENQ=\"\u0005\",e.ACK=\"\u0006\",e.BEL=\"\u0007\",e.BS=\"\\b\",e.HT=\"\\t\",e.LF=\"\\n\",e.VT=\"\\v\",e.FF=\"\\f\",e.CR=\"\\r\",e.SO=\"\u000e\",e.SI=\"\u000f\",e.DLE=\"\u0010\",e.DC1=\"\u0011\",e.DC2=\"\u0012\",e.DC3=\"\u0013\",e.DC4=\"\u0014\",e.NAK=\"\u0015\",e.SYN=\"\u0016\",e.ETB=\"\u0017\",e.CAN=\"\u0018\",e.EM=\"\u0019\",e.SUB=\"\u001a\",e.ESC=\"\u001b\",e.FS=\"\u001c\",e.GS=\"\u001d\",e.RS=\"\u001e\",e.US=\"\u001f\",e.SP=\" \",e.DEL=\"\"}(t.C0||(t.C0={})),function(e){e.PAD=\"€\",e.HOP=\"\",e.BPH=\"‚\",e.NBH=\"ƒ\",e.IND=\"„\",e.NEL=\"…\",e.SSA=\"†\",e.ESA=\"‡\",e.HTS=\"ˆ\",e.HTJ=\"‰\",e.VTS=\"Š\",e.PLD=\"‹\",e.PLU=\"Œ\",e.RI=\"\",e.SS2=\"Ž\",e.SS3=\"\",e.DCS=\"\",e.PU1=\"‘\",e.PU2=\"’\",e.STS=\"“\",e.CCH=\"”\",e.MW=\"•\",e.SPA=\"–\",e.EPA=\"—\",e.SOS=\"˜\",e.SGCI=\"™\",e.SCI=\"š\",e.CSI=\"›\",e.ST=\"œ\",e.OSC=\"\",e.PM=\"ž\",e.APC=\"Ÿ\"}(t.C1||(t.C1={}))},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.BaseRenderLayer=void 0;var i=r(3),n=r(9),o=r(25),s=r(6),a=r(28),c=r(10),l=r(17),h=function(){function e(e,t,r,i,n,o,s,a){this._container=e,this._alpha=i,this._colors=n,this._rendererId=o,this._bufferService=s,this._optionsService=a,this._scaledCharWidth=0,this._scaledCharHeight=0,this._scaledCellWidth=0,this._scaledCellHeight=0,this._scaledCharLeft=0,this._scaledCharTop=0,this._currentGlyphIdentifier={chars:\"\",code:0,bg:0,fg:0,bold:!1,dim:!1,italic:!1},this._canvas=document.createElement(\"canvas\"),this._canvas.classList.add(\"xterm-\"+t+\"-layer\"),this._canvas.style.zIndex=r.toString(),this._initCanvas(),this._container.appendChild(this._canvas)}return e.prototype.dispose=function(){var e;l.removeElementFromParent(this._canvas),null===(e=this._charAtlas)||void 0===e||e.dispose()},e.prototype._initCanvas=function(){this._ctx=a.throwIfFalsy(this._canvas.getContext(\"2d\",{alpha:this._alpha})),this._alpha||this._clearAll()},e.prototype.onOptionsChanged=function(){},e.prototype.onBlur=function(){},e.prototype.onFocus=function(){},e.prototype.onCursorMove=function(){},e.prototype.onGridChanged=function(e,t){},e.prototype.onSelectionChanged=function(e,t,r){void 0===r&&(r=!1)},e.prototype.setColors=function(e){this._refreshCharAtlas(e)},e.prototype._setTransparency=function(e){if(e!==this._alpha){var t=this._canvas;this._alpha=e,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,t),this._refreshCharAtlas(this._colors),this.onGridChanged(0,this._bufferService.rows-1)}},e.prototype._refreshCharAtlas=function(e){this._scaledCharWidth<=0&&this._scaledCharHeight<=0||(this._charAtlas=o.acquireCharAtlas(this._optionsService.options,this._rendererId,e,this._scaledCharWidth,this._scaledCharHeight),this._charAtlas.warmUp())},e.prototype.resize=function(e){this._scaledCellWidth=e.scaledCellWidth,this._scaledCellHeight=e.scaledCellHeight,this._scaledCharWidth=e.scaledCharWidth,this._scaledCharHeight=e.scaledCharHeight,this._scaledCharLeft=e.scaledCharLeft,this._scaledCharTop=e.scaledCharTop,this._canvas.width=e.scaledCanvasWidth,this._canvas.height=e.scaledCanvasHeight,this._canvas.style.width=e.canvasWidth+\"px\",this._canvas.style.height=e.canvasHeight+\"px\",this._alpha||this._clearAll(),this._refreshCharAtlas(this._colors)},e.prototype._fillCells=function(e,t,r,i){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight)},e.prototype._fillBottomLineAtCells=function(e,t,r){void 0===r&&(r=1),this._ctx.fillRect(e*this._scaledCellWidth,(t+1)*this._scaledCellHeight-window.devicePixelRatio-1,r*this._scaledCellWidth,window.devicePixelRatio)},e.prototype._fillLeftLineAtCell=function(e,t,r){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,window.devicePixelRatio*r,this._scaledCellHeight)},e.prototype._strokeRectAtCell=function(e,t,r,i){this._ctx.lineWidth=window.devicePixelRatio,this._ctx.strokeRect(e*this._scaledCellWidth+window.devicePixelRatio/2,t*this._scaledCellHeight+window.devicePixelRatio/2,r*this._scaledCellWidth-window.devicePixelRatio,i*this._scaledCellHeight-window.devicePixelRatio)},e.prototype._clearAll=function(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))},e.prototype._clearCells=function(e,t,r,i){this._alpha?this._ctx.clearRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight))},e.prototype._fillCharTrueColor=function(e,t,r){this._ctx.font=this._getFont(!1,!1),this._ctx.textBaseline=\"middle\",this._clipRow(r),this._ctx.fillText(e.getChars(),t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight/2)},e.prototype._drawChars=function(e,t,r){var o,s,a=this._getContrastColor(e);a||e.isFgRGB()||e.isBgRGB()?this._drawUncachedChars(e,t,r,a):(e.isInverse()?(o=e.isBgDefault()?n.INVERTED_DEFAULT_COLOR:e.getBgColor(),s=e.isFgDefault()?n.INVERTED_DEFAULT_COLOR:e.getFgColor()):(s=e.isBgDefault()?i.DEFAULT_COLOR:e.getBgColor(),o=e.isFgDefault()?i.DEFAULT_COLOR:e.getFgColor()),o+=this._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&o<8?8:0,this._currentGlyphIdentifier.chars=e.getChars()||i.WHITESPACE_CELL_CHAR,this._currentGlyphIdentifier.code=e.getCode()||i.WHITESPACE_CELL_CODE,this._currentGlyphIdentifier.bg=s,this._currentGlyphIdentifier.fg=o,this._currentGlyphIdentifier.bold=!!e.isBold(),this._currentGlyphIdentifier.dim=!!e.isDim(),this._currentGlyphIdentifier.italic=!!e.isItalic(),this._charAtlas&&this._charAtlas.draw(this._ctx,this._currentGlyphIdentifier,t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop)||this._drawUncachedChars(e,t,r))},e.prototype._drawUncachedChars=function(e,t,r,i){if(this._ctx.save(),this._ctx.font=this._getFont(!!e.isBold(),!!e.isItalic()),this._ctx.textBaseline=\"middle\",e.isInverse())if(i)this._ctx.fillStyle=i.css;else if(e.isBgDefault())this._ctx.fillStyle=c.color.opaque(this._colors.background).css;else if(e.isBgRGB())this._ctx.fillStyle=\"rgb(\"+s.AttributeData.toColorRGB(e.getBgColor()).join(\",\")+\")\";else{var o=e.getBgColor();this._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&o<8&&(o+=8),this._ctx.fillStyle=this._colors.ansi[o].css}else if(i)this._ctx.fillStyle=i.css;else if(e.isFgDefault())this._ctx.fillStyle=this._colors.foreground.css;else if(e.isFgRGB())this._ctx.fillStyle=\"rgb(\"+s.AttributeData.toColorRGB(e.getFgColor()).join(\",\")+\")\";else{var a=e.getFgColor();this._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&a<8&&(a+=8),this._ctx.fillStyle=this._colors.ansi[a].css}this._clipRow(r),e.isDim()&&(this._ctx.globalAlpha=n.DIM_OPACITY),this._ctx.fillText(e.getChars(),t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight/2),this._ctx.restore()},e.prototype._clipRow=function(e){this._ctx.beginPath(),this._ctx.rect(0,e*this._scaledCellHeight,this._bufferService.cols*this._scaledCellWidth,this._scaledCellHeight),this._ctx.clip()},e.prototype._getFont=function(e,t){return(t?\"italic\":\"\")+\" \"+(e?this._optionsService.options.fontWeightBold:this._optionsService.options.fontWeight)+\" \"+this._optionsService.options.fontSize*window.devicePixelRatio+\"px \"+this._optionsService.options.fontFamily},e.prototype._getContrastColor=function(e){if(1!==this._optionsService.options.minimumContrastRatio){var t=this._colors.contrastCache.getColor(e.bg,e.fg);if(void 0!==t)return t||void 0;var r=e.getFgColor(),i=e.getFgColorMode(),n=e.getBgColor(),o=e.getBgColorMode(),s=!!e.isInverse(),a=!!e.isInverse();if(s){var l=r;r=n,n=l;var h=i;i=o,o=h}var u=this._resolveBackgroundRgba(o,n,s),f=this._resolveForegroundRgba(i,r,s,a),_=c.rgba.ensureContrastRatio(u,f,this._optionsService.options.minimumContrastRatio);if(_){var d={css:c.channels.toCss(_>>24&255,_>>16&255,_>>8&255),rgba:_};return this._colors.contrastCache.setColor(e.bg,e.fg,d),d}this._colors.contrastCache.setColor(e.bg,e.fg,null)}},e.prototype._resolveBackgroundRgba=function(e,t,r){switch(e){case 16777216:case 33554432:return this._colors.ansi[t].rgba;case 50331648:return t<<8;case 0:default:return r?this._colors.foreground.rgba:this._colors.background.rgba}},e.prototype._resolveForegroundRgba=function(e,t,r,i){switch(e){case 16777216:case 33554432:return this._optionsService.options.drawBoldTextInBrightColors&&i&&t<8&&(t+=8),this._colors.ansi[t].rgba;case 50331648:return t<<8;case 0:default:return r?this._colors.background.rgba:this._colors.foreground.rgba}},e}();t.BaseRenderLayer=h},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.createDecorator=t.getServiceDependencies=t.serviceRegistry=void 0;function i(e,t,r){t.di$target===t?t.di$dependencies.push({id:e,index:r}):(t.di$dependencies=[{id:e,index:r}],t.di$target=t)}t.serviceRegistry=new Map,t.getServiceDependencies=function(e){return e.di$dependencies||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);var r=function(e,t,n){if(3!==arguments.length)throw new Error(\"@IServiceName-decorator can only be used to decorate a parameter\");i(r,e,n)};return r.toString=function(){return e},t.serviceRegistry.set(e,r),r}},function(e,t,r){\"use strict\";function i(e,t,r,i){if(void 0===r&&(r=0),void 0===i&&(i=e.length),r>=e.length)return e;r=(e.length+r)%e.length,i=i>=e.length?e.length:(e.length+i)%e.length;for(var n=r;n<i;++n)e[n]=t;return e}Object.defineProperty(t,\"__esModule\",{value:!0}),t.concat=t.fillFallback=t.fill=void 0,t.fill=function(e,t,r,n){return e.fill?e.fill(t,r,n):i(e,t,r,n)},t.fillFallback=i,t.concat=function(e,t){var r=new e.constructor(e.length+t.length);return r.set(e),r.set(t,e.length),r}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;var i=r(8),n=r(3),o=r(4),s=r(6);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);var a=function(){function e(e,t,r){void 0===r&&(r=!1),this.isWrapped=r,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*e);for(var i=t||o.CellData.fromCharData([0,n.NULL_CELL_CHAR,n.NULL_CELL_WIDTH,n.NULL_CELL_CODE]),s=0;s<e;++s)this.setCell(s,i);this.length=e}return e.prototype.get=function(e){var t=this._data[3*e+0],r=2097151&t;return[this._data[3*e+1],2097152&t?this._combined[e]:r?i.stringFromCodePoint(r):\"\",t>>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):r]},e.prototype.set=function(e,t){this._data[3*e+1]=t[n.CHAR_DATA_ATTR_INDEX],t[n.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[n.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[n.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[n.CHAR_DATA_WIDTH_INDEX]<<22},e.prototype.getWidth=function(e){return this._data[3*e+0]>>22},e.prototype.hasWidth=function(e){return 12582912&this._data[3*e+0]},e.prototype.getFg=function(e){return this._data[3*e+1]},e.prototype.getBg=function(e){return this._data[3*e+2]},e.prototype.hasContent=function(e){return 4194303&this._data[3*e+0]},e.prototype.getCodePoint=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t},e.prototype.isCombined=function(e){return 2097152&this._data[3*e+0]},e.prototype.getString=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?i.stringFromCodePoint(2097151&t):\"\"},e.prototype.loadCell=function(e,t){var r=3*e;return t.content=this._data[r+0],t.fg=this._data[r+1],t.bg=this._data[r+2],2097152&t.content&&(t.combinedData=this._combined[e]),268435456&t.bg&&(t.extended=this._extendedAttrs[e]),t},e.prototype.setCell=function(e,t){2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg},e.prototype.setCellFromCodePoint=function(e,t,r,i,n,o){268435456&n&&(this._extendedAttrs[e]=o),this._data[3*e+0]=t|r<<22,this._data[3*e+1]=i,this._data[3*e+2]=n},e.prototype.addCodepointToCell=function(e,t){var r=this._data[3*e+0];2097152&r?this._combined[e]+=i.stringFromCodePoint(t):(2097151&r?(this._combined[e]=i.stringFromCodePoint(2097151&r)+i.stringFromCodePoint(t),r&=-2097152,r|=2097152):r=t|1<<22,this._data[3*e+0]=r)},e.prototype.insertCells=function(e,t,r,i){if((e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),t<this.length-e){for(var n=new o.CellData,a=this.length-e-t-1;a>=0;--a)this.setCell(e+t+a,this.loadCell(e+a,n));for(a=0;a<t;++a)this.setCell(e+a,r)}else for(a=e;a<this.length;++a)this.setCell(a,r);2===this.getWidth(this.length-1)&&this.setCellFromCodePoint(this.length-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs)},e.prototype.deleteCells=function(e,t,r,i){if(e%=this.length,t<this.length-e){for(var n=new o.CellData,a=0;a<this.length-e-t;++a)this.setCell(e+a,this.loadCell(e+t+a,n));for(a=this.length-t;a<this.length;++a)this.setCell(a,r)}else for(a=e;a<this.length;++a)this.setCell(a,r);e&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),0!==this.getWidth(e)||this.hasContent(e)||this.setCellFromCodePoint(e,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs)},e.prototype.replaceCells=function(e,t,r,i){for(e&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),t<this.length&&2===this.getWidth(t-1)&&this.setCellFromCodePoint(t,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs);e<t&&e<this.length;)this.setCell(e++,r)},e.prototype.resize=function(e,t){if(e!==this.length){if(e>this.length){var r=new Uint32Array(3*e);this.length&&(3*e<this._data.length?r.set(this._data.subarray(0,3*e)):r.set(this._data)),this._data=r;for(var i=this.length;i<e;++i)this.setCell(i,t)}else if(e){(r=new Uint32Array(3*e)).set(this._data.subarray(0,3*e)),this._data=r;var n=Object.keys(this._combined);for(i=0;i<n.length;i++){var o=parseInt(n[i],10);o>=e&&delete this._combined[o]}}else this._data=new Uint32Array(0),this._combined={};this.length=e}},e.prototype.fill=function(e){this._combined={},this._extendedAttrs={};for(var t=0;t<this.length;++t)this.setCell(t,e)},e.prototype.copyFrom=function(e){for(var t in this.length!==e.length?this._data=new Uint32Array(e._data):this._data.set(e._data),this.length=e.length,this._combined={},e._combined)this._combined[t]=e._combined[t];for(var t in this._extendedAttrs={},e._extendedAttrs)this._extendedAttrs[t]=e._extendedAttrs[t];this.isWrapped=e.isWrapped},e.prototype.clone=function(){var t=new e(0);for(var r in t._data=new Uint32Array(this._data),t.length=this.length,this._combined)t._combined[r]=this._combined[r];for(var r in this._extendedAttrs)t._extendedAttrs[r]=this._extendedAttrs[r];return t.isWrapped=this.isWrapped,t},e.prototype.getTrimmedLength=function(){for(var e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0},e.prototype.copyCellsFrom=function(e,t,r,i,n){var o=e._data;if(n)for(var s=i-1;s>=0;s--)for(var a=0;a<3;a++)this._data[3*(r+s)+a]=o[3*(t+s)+a];else for(s=0;s<i;s++)for(a=0;a<3;a++)this._data[3*(r+s)+a]=o[3*(t+s)+a];var c=Object.keys(e._combined);for(a=0;a<c.length;a++){var l=parseInt(c[a],10);l>=t&&(this._combined[l-t+r]=e._combined[l])}},e.prototype.translateToString=function(e,t,r){void 0===e&&(e=!1),void 0===t&&(t=0),void 0===r&&(r=this.length),e&&(r=Math.min(r,this.getTrimmedLength()));for(var o=\"\";t<r;){var s=this._data[3*t+0],a=2097151&s;o+=2097152&s?this._combined[t]:a?i.stringFromCodePoint(a):n.WHITESPACE_CELL_CHAR,t+=s>>22||1}return o},e}();t.BufferLine=a},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.removeElementFromParent=void 0,t.removeElementFromParent=function(){for(var e,t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];for(var i=0,n=t;i<n.length;i++){var o=n[i];null===(e=null==o?void 0:o.parentElement)||void 0===e||e.removeChild(o)}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0,t.promptLabel=\"Terminal input\",t.tooMuchOutput=\"Too much output to announce, navigate to rows manually to read\"},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0;var o,s=r(12),a=r(20),c=r(39),l=r(2),h=r(15),u=r(8),f=r(16),_=r(0),d=r(3),p=r(4),v=r(6),g=r(22),y=r(24),b={\"(\":0,\")\":1,\"*\":2,\"+\":3,\"-\":1,\".\":2};function S(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}!function(e){e[e.GET_WIN_SIZE_PIXELS=0]=\"GET_WIN_SIZE_PIXELS\",e[e.GET_CELL_SIZE_PIXELS=1]=\"GET_CELL_SIZE_PIXELS\"}(o=t.WindowsOptionsReportType||(t.WindowsOptionsReportType={}));var m=function(){function e(e,t,r,i){this._bufferService=e,this._coreService=t,this._logService=r,this._optionsService=i,this._data=new Uint32Array(0)}return e.prototype.hook=function(e){this._data=new Uint32Array(0)},e.prototype.put=function(e,t,r){this._data=h.concat(this._data,e.subarray(t,r))},e.prototype.unhook=function(e){if(e){var t=u.utf32ToString(this._data);switch(this._data=new Uint32Array(0),t){case'\"q':return this._coreService.triggerDataEvent(s.C0.ESC+'P1$r0\"q'+s.C0.ESC+\"\\\\\");case'\"p':return this._coreService.triggerDataEvent(s.C0.ESC+'P1$r61;1\"p'+s.C0.ESC+\"\\\\\");case\"r\":var r=this._bufferService.buffer.scrollTop+1+\";\"+(this._bufferService.buffer.scrollBottom+1)+\"r\";return this._coreService.triggerDataEvent(s.C0.ESC+\"P1$r\"+r+s.C0.ESC+\"\\\\\");case\"m\":return this._coreService.triggerDataEvent(s.C0.ESC+\"P1$r0m\"+s.C0.ESC+\"\\\\\");case\" q\":var i={block:2,underline:4,bar:6}[this._optionsService.options.cursorStyle];return i-=this._optionsService.options.cursorBlink?1:0,this._coreService.triggerDataEvent(s.C0.ESC+\"P1$r\"+i+\" q\"+s.C0.ESC+\"\\\\\");default:this._logService.debug(\"Unknown DCS $q %s\",t),this._coreService.triggerDataEvent(s.C0.ESC+\"P0$r\"+s.C0.ESC+\"\\\\\")}}else this._data=new Uint32Array(0)},e}(),C=function(e){function t(t,r,i,n,o,l,h,d,v){void 0===v&&(v=new c.EscapeSequenceParser);var y=e.call(this)||this;y._bufferService=t,y._charsetService=r,y._coreService=i,y._dirtyRowService=n,y._logService=o,y._optionsService=l,y._coreMouseService=h,y._unicodeService=d,y._parser=v,y._parseBuffer=new Uint32Array(4096),y._stringDecoder=new u.StringToUtf32,y._utf8Decoder=new u.Utf8ToUtf32,y._workCell=new p.CellData,y._windowTitle=\"\",y._iconName=\"\",y._windowTitleStack=[],y._iconNameStack=[],y._curAttrData=f.DEFAULT_ATTR_DATA.clone(),y._eraseAttrDataInternal=f.DEFAULT_ATTR_DATA.clone(),y._onRequestBell=new _.EventEmitter,y._onRequestRefreshRows=new _.EventEmitter,y._onRequestReset=new _.EventEmitter,y._onRequestScroll=new _.EventEmitter,y._onRequestSyncScrollBar=new _.EventEmitter,y._onRequestWindowsOptionsReport=new _.EventEmitter,y._onA11yChar=new _.EventEmitter,y._onA11yTab=new _.EventEmitter,y._onCursorMove=new _.EventEmitter,y._onLineFeed=new _.EventEmitter,y._onScroll=new _.EventEmitter,y._onTitleChange=new _.EventEmitter,y.register(y._parser),y._parser.setCsiHandlerFallback((function(e,t){y._logService.debug(\"Unknown CSI code: \",{identifier:y._parser.identToString(e),params:t.toArray()})})),y._parser.setEscHandlerFallback((function(e){y._logService.debug(\"Unknown ESC code: \",{identifier:y._parser.identToString(e)})})),y._parser.setExecuteHandlerFallback((function(e){y._logService.debug(\"Unknown EXECUTE code: \",{code:e})})),y._parser.setOscHandlerFallback((function(e,t,r){y._logService.debug(\"Unknown OSC code: \",{identifier:e,action:t,data:r})})),y._parser.setDcsHandlerFallback((function(e,t,r){\"HOOK\"===t&&(r=r.toArray()),y._logService.debug(\"Unknown DCS code: \",{identifier:y._parser.identToString(e),action:t,payload:r})})),y._parser.setPrintHandler((function(e,t,r){return y.print(e,t,r)})),y._parser.setCsiHandler({final:\"@\"},(function(e){return y.insertChars(e)})),y._parser.setCsiHandler({intermediates:\" \",final:\"@\"},(function(e){return y.scrollLeft(e)})),y._parser.setCsiHandler({final:\"A\"},(function(e){return y.cursorUp(e)})),y._parser.setCsiHandler({intermediates:\" \",final:\"A\"},(function(e){return y.scrollRight(e)})),y._parser.setCsiHandler({final:\"B\"},(function(e){return y.cursorDown(e)})),y._parser.setCsiHandler({final:\"C\"},(function(e){return y.cursorForward(e)})),y._parser.setCsiHandler({final:\"D\"},(function(e){return y.cursorBackward(e)})),y._parser.setCsiHandler({final:\"E\"},(function(e){return y.cursorNextLine(e)})),y._parser.setCsiHandler({final:\"F\"},(function(e){return y.cursorPrecedingLine(e)})),y._parser.setCsiHandler({final:\"G\"},(function(e){return y.cursorCharAbsolute(e)})),y._parser.setCsiHandler({final:\"H\"},(function(e){return y.cursorPosition(e)})),y._parser.setCsiHandler({final:\"I\"},(function(e){return y.cursorForwardTab(e)})),y._parser.setCsiHandler({final:\"J\"},(function(e){return y.eraseInDisplay(e)})),y._parser.setCsiHandler({prefix:\"?\",final:\"J\"},(function(e){return y.eraseInDisplay(e)})),y._parser.setCsiHandler({final:\"K\"},(function(e){return y.eraseInLine(e)})),y._parser.setCsiHandler({prefix:\"?\",final:\"K\"},(function(e){return y.eraseInLine(e)})),y._parser.setCsiHandler({final:\"L\"},(function(e){return y.insertLines(e)})),y._parser.setCsiHandler({final:\"M\"},(function(e){return y.deleteLines(e)})),y._parser.setCsiHandler({final:\"P\"},(function(e){return y.deleteChars(e)})),y._parser.setCsiHandler({final:\"S\"},(function(e){return y.scrollUp(e)})),y._parser.setCsiHandler({final:\"T\"},(function(e){return y.scrollDown(e)})),y._parser.setCsiHandler({final:\"X\"},(function(e){return y.eraseChars(e)})),y._parser.setCsiHandler({final:\"Z\"},(function(e){return y.cursorBackwardTab(e)})),y._parser.setCsiHandler({final:\"`\"},(function(e){return y.charPosAbsolute(e)})),y._parser.setCsiHandler({final:\"a\"},(function(e){return y.hPositionRelative(e)})),y._parser.setCsiHandler({final:\"b\"},(function(e){return y.repeatPrecedingCharacter(e)})),y._parser.setCsiHandler({final:\"c\"},(function(e){return y.sendDeviceAttributesPrimary(e)})),y._parser.setCsiHandler({prefix:\">\",final:\"c\"},(function(e){return y.sendDeviceAttributesSecondary(e)})),y._parser.setCsiHandler({final:\"d\"},(function(e){return y.linePosAbsolute(e)})),y._parser.setCsiHandler({final:\"e\"},(function(e){return y.vPositionRelative(e)})),y._parser.setCsiHandler({final:\"f\"},(function(e){return y.hVPosition(e)})),y._parser.setCsiHandler({final:\"g\"},(function(e){return y.tabClear(e)})),y._parser.setCsiHandler({final:\"h\"},(function(e){return y.setMode(e)})),y._parser.setCsiHandler({prefix:\"?\",final:\"h\"},(function(e){return y.setModePrivate(e)})),y._parser.setCsiHandler({final:\"l\"},(function(e){return y.resetMode(e)})),y._parser.setCsiHandler({prefix:\"?\",final:\"l\"},(function(e){return y.resetModePrivate(e)})),y._parser.setCsiHandler({final:\"m\"},(function(e){return y.charAttributes(e)})),y._parser.setCsiHandler({final:\"n\"},(function(e){return y.deviceStatus(e)})),y._parser.setCsiHandler({prefix:\"?\",final:\"n\"},(function(e){return y.deviceStatusPrivate(e)})),y._parser.setCsiHandler({intermediates:\"!\",final:\"p\"},(function(e){return y.softReset(e)})),y._parser.setCsiHandler({intermediates:\" \",final:\"q\"},(function(e){return y.setCursorStyle(e)})),y._parser.setCsiHandler({final:\"r\"},(function(e){return y.setScrollRegion(e)})),y._parser.setCsiHandler({final:\"s\"},(function(e){return y.saveCursor(e)})),y._parser.setCsiHandler({final:\"t\"},(function(e){return y.windowOptions(e)})),y._parser.setCsiHandler({final:\"u\"},(function(e){return y.restoreCursor(e)})),y._parser.setCsiHandler({intermediates:\"'\",final:\"}\"},(function(e){return y.insertColumns(e)})),y._parser.setCsiHandler({intermediates:\"'\",final:\"~\"},(function(e){return y.deleteColumns(e)})),y._parser.setExecuteHandler(s.C0.BEL,(function(){return y.bell()})),y._parser.setExecuteHandler(s.C0.LF,(function(){return y.lineFeed()})),y._parser.setExecuteHandler(s.C0.VT,(function(){return y.lineFeed()})),y._parser.setExecuteHandler(s.C0.FF,(function(){return y.lineFeed()})),y._parser.setExecuteHandler(s.C0.CR,(function(){return y.carriageReturn()})),y._parser.setExecuteHandler(s.C0.BS,(function(){return y.backspace()})),y._parser.setExecuteHandler(s.C0.HT,(function(){return y.tab()})),y._parser.setExecuteHandler(s.C0.SO,(function(){return y.shiftOut()})),y._parser.setExecuteHandler(s.C0.SI,(function(){return y.shiftIn()})),y._parser.setExecuteHandler(s.C1.IND,(function(){return y.index()})),y._parser.setExecuteHandler(s.C1.NEL,(function(){return y.nextLine()})),y._parser.setExecuteHandler(s.C1.HTS,(function(){return y.tabSet()})),y._parser.setOscHandler(0,new g.OscHandler((function(e){y.setTitle(e),y.setIconName(e)}))),y._parser.setOscHandler(1,new g.OscHandler((function(e){return y.setIconName(e)}))),y._parser.setOscHandler(2,new g.OscHandler((function(e){return y.setTitle(e)}))),y._parser.setEscHandler({final:\"7\"},(function(){return y.saveCursor()})),y._parser.setEscHandler({final:\"8\"},(function(){return y.restoreCursor()})),y._parser.setEscHandler({final:\"D\"},(function(){return y.index()})),y._parser.setEscHandler({final:\"E\"},(function(){return y.nextLine()})),y._parser.setEscHandler({final:\"H\"},(function(){return y.tabSet()})),y._parser.setEscHandler({final:\"M\"},(function(){return y.reverseIndex()})),y._parser.setEscHandler({final:\"=\"},(function(){return y.keypadApplicationMode()})),y._parser.setEscHandler({final:\">\"},(function(){return y.keypadNumericMode()})),y._parser.setEscHandler({final:\"c\"},(function(){return y.fullReset()})),y._parser.setEscHandler({final:\"n\"},(function(){return y.setgLevel(2)})),y._parser.setEscHandler({final:\"o\"},(function(){return y.setgLevel(3)})),y._parser.setEscHandler({final:\"|\"},(function(){return y.setgLevel(3)})),y._parser.setEscHandler({final:\"}\"},(function(){return y.setgLevel(2)})),y._parser.setEscHandler({final:\"~\"},(function(){return y.setgLevel(1)})),y._parser.setEscHandler({intermediates:\"%\",final:\"@\"},(function(){return y.selectDefaultCharset()})),y._parser.setEscHandler({intermediates:\"%\",final:\"G\"},(function(){return y.selectDefaultCharset()}));var b=function(e){S._parser.setEscHandler({intermediates:\"(\",final:e},(function(){return y.selectCharset(\"(\"+e)})),S._parser.setEscHandler({intermediates:\")\",final:e},(function(){return y.selectCharset(\")\"+e)})),S._parser.setEscHandler({intermediates:\"*\",final:e},(function(){return y.selectCharset(\"*\"+e)})),S._parser.setEscHandler({intermediates:\"+\",final:e},(function(){return y.selectCharset(\"+\"+e)})),S._parser.setEscHandler({intermediates:\"-\",final:e},(function(){return y.selectCharset(\"-\"+e)})),S._parser.setEscHandler({intermediates:\".\",final:e},(function(){return y.selectCharset(\".\"+e)})),S._parser.setEscHandler({intermediates:\"/\",final:e},(function(){return y.selectCharset(\"/\"+e)}))},S=this;for(var C in a.CHARSETS)b(C);return y._parser.setEscHandler({intermediates:\"#\",final:\"8\"},(function(){return y.screenAlignmentPattern()})),y._parser.setErrorHandler((function(e){return y._logService.error(\"Parsing error: \",e),e})),y._parser.setDcsHandler({intermediates:\"$\",final:\"q\"},new m(y._bufferService,y._coreService,y._logService,y._optionsService)),y}return n(t,e),Object.defineProperty(t.prototype,\"onRequestBell\",{get:function(){return this._onRequestBell.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRequestRefreshRows\",{get:function(){return this._onRequestRefreshRows.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRequestReset\",{get:function(){return this._onRequestReset.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRequestScroll\",{get:function(){return this._onRequestScroll.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRequestSyncScrollBar\",{get:function(){return this._onRequestSyncScrollBar.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRequestWindowsOptionsReport\",{get:function(){return this._onRequestWindowsOptionsReport.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onA11yChar\",{get:function(){return this._onA11yChar.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onA11yTab\",{get:function(){return this._onA11yTab.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onCursorMove\",{get:function(){return this._onCursorMove.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onLineFeed\",{get:function(){return this._onLineFeed.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onScroll\",{get:function(){return this._onScroll.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onTitleChange\",{get:function(){return this._onTitleChange.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){e.prototype.dispose.call(this)},t.prototype.parse=function(e){var t=this._bufferService.buffer,r=t.x,i=t.y;if(this._logService.debug(\"parsing data\",e),this._parseBuffer.length<e.length&&this._parseBuffer.length<131072&&(this._parseBuffer=new Uint32Array(Math.min(e.length,131072))),this._dirtyRowService.clearRange(),e.length>131072)for(var n=0;n<e.length;n+=131072){var o=n+131072<e.length?n+131072:e.length,s=\"string\"==typeof e?this._stringDecoder.decode(e.substring(n,o),this._parseBuffer):this._utf8Decoder.decode(e.subarray(n,o),this._parseBuffer);this._parser.parse(this._parseBuffer,s)}else{s=\"string\"==typeof e?this._stringDecoder.decode(e,this._parseBuffer):this._utf8Decoder.decode(e,this._parseBuffer);this._parser.parse(this._parseBuffer,s)}(t=this._bufferService.buffer).x===r&&t.y===i||this._onCursorMove.fire(),this._onRequestRefreshRows.fire(this._dirtyRowService.start,this._dirtyRowService.end)},t.prototype.print=function(e,t,r){var i,n,o=this._bufferService.buffer,s=this._charsetService.charset,a=this._optionsService.options.screenReaderMode,c=this._bufferService.cols,l=this._coreService.decPrivateModes.wraparound,h=this._coreService.modes.insertMode,f=this._curAttrData,_=o.lines.get(o.ybase+o.y);this._dirtyRowService.markDirty(o.y),o.x&&r-t>0&&2===_.getWidth(o.x-1)&&_.setCellFromCodePoint(o.x-1,0,1,f.fg,f.bg,f.extended);for(var p=t;p<r;++p){if(i=e[p],n=this._unicodeService.wcwidth(i),i<127&&s){var v=s[String.fromCharCode(i)];v&&(i=v.charCodeAt(0))}if(a&&this._onA11yChar.fire(u.stringFromCodePoint(i)),n||!o.x){if(o.x+n-1>=c)if(l){for(;o.x<c;)_.setCellFromCodePoint(o.x++,0,1,f.fg,f.bg,f.extended);o.x=0,o.y++,o.y===o.scrollBottom+1?(o.y--,this._onRequestScroll.fire(this._eraseAttrData(),!0)):(o.y>=this._bufferService.rows&&(o.y=this._bufferService.rows-1),o.lines.get(o.ybase+o.y).isWrapped=!0),_=o.lines.get(o.ybase+o.y)}else if(o.x=c-1,2===n)continue;if(h&&(_.insertCells(o.x,n,o.getNullCell(f),f),2===_.getWidth(c-1)&&_.setCellFromCodePoint(c-1,d.NULL_CELL_CODE,d.NULL_CELL_WIDTH,f.fg,f.bg,f.extended)),_.setCellFromCodePoint(o.x++,i,n,f.fg,f.bg,f.extended),n>0)for(;--n;)_.setCellFromCodePoint(o.x++,0,0,f.fg,f.bg,f.extended)}else _.getWidth(o.x-1)?_.addCodepointToCell(o.x-1,i):_.addCodepointToCell(o.x-2,i)}r-t>0&&(_.loadCell(o.x-1,this._workCell),2===this._workCell.getWidth()||this._workCell.getCode()>65535?this._parser.precedingCodepoint=0:this._workCell.isCombined()?this._parser.precedingCodepoint=this._workCell.getChars().charCodeAt(0):this._parser.precedingCodepoint=this._workCell.content),o.x<c&&r-t>0&&0===_.getWidth(o.x)&&!_.hasContent(o.x)&&_.setCellFromCodePoint(o.x,0,1,f.fg,f.bg,f.extended),this._dirtyRowService.markDirty(o.y)},t.prototype.addCsiHandler=function(e,t){var r=this;return\"t\"!==e.final||e.prefix||e.intermediates?this._parser.addCsiHandler(e,t):this._parser.addCsiHandler(e,(function(e){return!S(e.params[0],r._optionsService.options.windowOptions)||t(e)}))},t.prototype.addDcsHandler=function(e,t){return this._parser.addDcsHandler(e,new y.DcsHandler(t))},t.prototype.addEscHandler=function(e,t){return this._parser.addEscHandler(e,t)},t.prototype.addOscHandler=function(e,t){return this._parser.addOscHandler(e,new g.OscHandler(t))},t.prototype.bell=function(){this._onRequestBell.fire()},t.prototype.lineFeed=function(){var e=this._bufferService.buffer;this._dirtyRowService.markDirty(e.y),this._optionsService.options.convertEol&&(e.x=0),e.y++,e.y===e.scrollBottom+1?(e.y--,this._onRequestScroll.fire(this._eraseAttrData())):e.y>=this._bufferService.rows&&(e.y=this._bufferService.rows-1),e.x>=this._bufferService.cols&&e.x--,this._dirtyRowService.markDirty(e.y),this._onLineFeed.fire()},t.prototype.carriageReturn=function(){this._bufferService.buffer.x=0},t.prototype.backspace=function(){var e,t=this._bufferService.buffer;if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),void(t.x>0&&t.x--);if(this._restrictCursor(this._bufferService.cols),t.x>0)t.x--;else if(0===t.x&&t.y>t.scrollTop&&t.y<=t.scrollBottom&&(null===(e=t.lines.get(t.ybase+t.y))||void 0===e?void 0:e.isWrapped)){t.lines.get(t.ybase+t.y).isWrapped=!1,t.y--,t.x=this._bufferService.cols-1;var r=t.lines.get(t.ybase+t.y);r.hasWidth(t.x)&&!r.hasContent(t.x)&&t.x--}this._restrictCursor()},t.prototype.tab=function(){if(!(this._bufferService.buffer.x>=this._bufferService.cols)){var e=this._bufferService.buffer.x;this._bufferService.buffer.x=this._bufferService.buffer.nextStop(),this._optionsService.options.screenReaderMode&&this._onA11yTab.fire(this._bufferService.buffer.x-e)}},t.prototype.shiftOut=function(){this._charsetService.setgLevel(1)},t.prototype.shiftIn=function(){this._charsetService.setgLevel(0)},t.prototype._restrictCursor=function(e){void 0===e&&(e=this._bufferService.cols-1),this._bufferService.buffer.x=Math.min(e,Math.max(0,this._bufferService.buffer.x)),this._bufferService.buffer.y=this._coreService.decPrivateModes.origin?Math.min(this._bufferService.buffer.scrollBottom,Math.max(this._bufferService.buffer.scrollTop,this._bufferService.buffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._bufferService.buffer.y)),this._dirtyRowService.markDirty(this._bufferService.buffer.y)},t.prototype._setCursor=function(e,t){this._dirtyRowService.markDirty(this._bufferService.buffer.y),this._coreService.decPrivateModes.origin?(this._bufferService.buffer.x=e,this._bufferService.buffer.y=this._bufferService.buffer.scrollTop+t):(this._bufferService.buffer.x=e,this._bufferService.buffer.y=t),this._restrictCursor(),this._dirtyRowService.markDirty(this._bufferService.buffer.y)},t.prototype._moveCursor=function(e,t){this._restrictCursor(),this._setCursor(this._bufferService.buffer.x+e,this._bufferService.buffer.y+t)},t.prototype.cursorUp=function(e){var t=this._bufferService.buffer.y-this._bufferService.buffer.scrollTop;t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1))},t.prototype.cursorDown=function(e){var t=this._bufferService.buffer.scrollBottom-this._bufferService.buffer.y;t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1)},t.prototype.cursorForward=function(e){this._moveCursor(e.params[0]||1,0)},t.prototype.cursorBackward=function(e){this._moveCursor(-(e.params[0]||1),0)},t.prototype.cursorNextLine=function(e){this.cursorDown(e),this._bufferService.buffer.x=0},t.prototype.cursorPrecedingLine=function(e){this.cursorUp(e),this._bufferService.buffer.x=0},t.prototype.cursorCharAbsolute=function(e){this._setCursor((e.params[0]||1)-1,this._bufferService.buffer.y)},t.prototype.cursorPosition=function(e){this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1)},t.prototype.charPosAbsolute=function(e){this._setCursor((e.params[0]||1)-1,this._bufferService.buffer.y)},t.prototype.hPositionRelative=function(e){this._moveCursor(e.params[0]||1,0)},t.prototype.linePosAbsolute=function(e){this._setCursor(this._bufferService.buffer.x,(e.params[0]||1)-1)},t.prototype.vPositionRelative=function(e){this._moveCursor(0,e.params[0]||1)},t.prototype.hVPosition=function(e){this.cursorPosition(e)},t.prototype.tabClear=function(e){var t=e.params[0];0===t?delete this._bufferService.buffer.tabs[this._bufferService.buffer.x]:3===t&&(this._bufferService.buffer.tabs={})},t.prototype.cursorForwardTab=function(e){if(!(this._bufferService.buffer.x>=this._bufferService.cols))for(var t=e.params[0]||1;t--;)this._bufferService.buffer.x=this._bufferService.buffer.nextStop()},t.prototype.cursorBackwardTab=function(e){if(!(this._bufferService.buffer.x>=this._bufferService.cols))for(var t=e.params[0]||1,r=this._bufferService.buffer;t--;)r.x=r.prevStop()},t.prototype._eraseInBufferLine=function(e,t,r,i){void 0===i&&(i=!1);var n=this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase+e);n.replaceCells(t,r,this._bufferService.buffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i&&(n.isWrapped=!1)},t.prototype._resetBufferLine=function(e){var t=this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase+e);t.fill(this._bufferService.buffer.getNullCell(this._eraseAttrData())),t.isWrapped=!1},t.prototype.eraseInDisplay=function(e){var t;switch(this._restrictCursor(),e.params[0]){case 0:for(t=this._bufferService.buffer.y,this._dirtyRowService.markDirty(t),this._eraseInBufferLine(t++,this._bufferService.buffer.x,this._bufferService.cols,0===this._bufferService.buffer.x);t<this._bufferService.rows;t++)this._resetBufferLine(t);this._dirtyRowService.markDirty(t);break;case 1:for(t=this._bufferService.buffer.y,this._dirtyRowService.markDirty(t),this._eraseInBufferLine(t,0,this._bufferService.buffer.x+1,!0),this._bufferService.buffer.x+1>=this._bufferService.cols&&(this._bufferService.buffer.lines.get(t+1).isWrapped=!1);t--;)this._resetBufferLine(t);this._dirtyRowService.markDirty(0);break;case 2:for(t=this._bufferService.rows,this._dirtyRowService.markDirty(t-1);t--;)this._resetBufferLine(t);this._dirtyRowService.markDirty(0);break;case 3:var r=this._bufferService.buffer.lines.length-this._bufferService.rows;r>0&&(this._bufferService.buffer.lines.trimStart(r),this._bufferService.buffer.ybase=Math.max(this._bufferService.buffer.ybase-r,0),this._bufferService.buffer.ydisp=Math.max(this._bufferService.buffer.ydisp-r,0),this._onScroll.fire(0))}},t.prototype.eraseInLine=function(e){switch(this._restrictCursor(),e.params[0]){case 0:this._eraseInBufferLine(this._bufferService.buffer.y,this._bufferService.buffer.x,this._bufferService.cols);break;case 1:this._eraseInBufferLine(this._bufferService.buffer.y,0,this._bufferService.buffer.x+1);break;case 2:this._eraseInBufferLine(this._bufferService.buffer.y,0,this._bufferService.cols)}this._dirtyRowService.markDirty(this._bufferService.buffer.y)},t.prototype.insertLines=function(e){this._restrictCursor();var t=e.params[0]||1,r=this._bufferService.buffer;if(!(r.y>r.scrollBottom||r.y<r.scrollTop)){for(var i=r.ybase+r.y,n=this._bufferService.rows-1-r.scrollBottom,o=this._bufferService.rows-1+r.ybase-n+1;t--;)r.lines.splice(o-1,1),r.lines.splice(i,0,r.getBlankLine(this._eraseAttrData()));this._dirtyRowService.markRangeDirty(r.y,r.scrollBottom),r.x=0}},t.prototype.deleteLines=function(e){this._restrictCursor();var t=e.params[0]||1,r=this._bufferService.buffer;if(!(r.y>r.scrollBottom||r.y<r.scrollTop)){var i,n=r.ybase+r.y;for(i=this._bufferService.rows-1-r.scrollBottom,i=this._bufferService.rows-1+r.ybase-i;t--;)r.lines.splice(n,1),r.lines.splice(i,0,r.getBlankLine(this._eraseAttrData()));this._dirtyRowService.markRangeDirty(r.y,r.scrollBottom),r.x=0}},t.prototype.insertChars=function(e){this._restrictCursor();var t=this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase+this._bufferService.buffer.y);t&&(t.insertCells(this._bufferService.buffer.x,e.params[0]||1,this._bufferService.buffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),this._dirtyRowService.markDirty(this._bufferService.buffer.y))},t.prototype.deleteChars=function(e){this._restrictCursor();var t=this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase+this._bufferService.buffer.y);t&&(t.deleteCells(this._bufferService.buffer.x,e.params[0]||1,this._bufferService.buffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),this._dirtyRowService.markDirty(this._bufferService.buffer.y))},t.prototype.scrollUp=function(e){for(var t=e.params[0]||1,r=this._bufferService.buffer;t--;)r.lines.splice(r.ybase+r.scrollTop,1),r.lines.splice(r.ybase+r.scrollBottom,0,r.getBlankLine(this._eraseAttrData()));this._dirtyRowService.markRangeDirty(r.scrollTop,r.scrollBottom)},t.prototype.scrollDown=function(e){for(var t=e.params[0]||1,r=this._bufferService.buffer;t--;)r.lines.splice(r.ybase+r.scrollBottom,1),r.lines.splice(r.ybase+r.scrollTop,0,r.getBlankLine(f.DEFAULT_ATTR_DATA));this._dirtyRowService.markRangeDirty(r.scrollTop,r.scrollBottom)},t.prototype.scrollLeft=function(e){var t=this._bufferService.buffer;if(!(t.y>t.scrollBottom||t.y<t.scrollTop)){for(var r=e.params[0]||1,i=t.scrollTop;i<=t.scrollBottom;++i){var n=t.lines.get(t.ybase+i);n.deleteCells(0,r,t.getNullCell(this._eraseAttrData()),this._eraseAttrData()),n.isWrapped=!1}this._dirtyRowService.markRangeDirty(t.scrollTop,t.scrollBottom)}},t.prototype.scrollRight=function(e){var t=this._bufferService.buffer;if(!(t.y>t.scrollBottom||t.y<t.scrollTop)){for(var r=e.params[0]||1,i=t.scrollTop;i<=t.scrollBottom;++i){var n=t.lines.get(t.ybase+i);n.insertCells(0,r,t.getNullCell(this._eraseAttrData()),this._eraseAttrData()),n.isWrapped=!1}this._dirtyRowService.markRangeDirty(t.scrollTop,t.scrollBottom)}},t.prototype.insertColumns=function(e){var t=this._bufferService.buffer;if(!(t.y>t.scrollBottom||t.y<t.scrollTop)){for(var r=e.params[0]||1,i=t.scrollTop;i<=t.scrollBottom;++i){var n=this._bufferService.buffer.lines.get(t.ybase+i);n.insertCells(t.x,r,t.getNullCell(this._eraseAttrData()),this._eraseAttrData()),n.isWrapped=!1}this._dirtyRowService.markRangeDirty(t.scrollTop,t.scrollBottom)}},t.prototype.deleteColumns=function(e){var t=this._bufferService.buffer;if(!(t.y>t.scrollBottom||t.y<t.scrollTop)){for(var r=e.params[0]||1,i=t.scrollTop;i<=t.scrollBottom;++i){var n=t.lines.get(t.ybase+i);n.deleteCells(t.x,r,t.getNullCell(this._eraseAttrData()),this._eraseAttrData()),n.isWrapped=!1}this._dirtyRowService.markRangeDirty(t.scrollTop,t.scrollBottom)}},t.prototype.eraseChars=function(e){this._restrictCursor();var t=this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase+this._bufferService.buffer.y);t&&(t.replaceCells(this._bufferService.buffer.x,this._bufferService.buffer.x+(e.params[0]||1),this._bufferService.buffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),this._dirtyRowService.markDirty(this._bufferService.buffer.y))},t.prototype.repeatPrecedingCharacter=function(e){if(this._parser.precedingCodepoint){for(var t=e.params[0]||1,r=new Uint32Array(t),i=0;i<t;++i)r[i]=this._parser.precedingCodepoint;this.print(r,0,r.length)}},t.prototype.sendDeviceAttributesPrimary=function(e){e.params[0]>0||(this._is(\"xterm\")||this._is(\"rxvt-unicode\")||this._is(\"screen\")?this._coreService.triggerDataEvent(s.C0.ESC+\"[?1;2c\"):this._is(\"linux\")&&this._coreService.triggerDataEvent(s.C0.ESC+\"[?6c\"))},t.prototype.sendDeviceAttributesSecondary=function(e){e.params[0]>0||(this._is(\"xterm\")?this._coreService.triggerDataEvent(s.C0.ESC+\"[>0;276;0c\"):this._is(\"rxvt-unicode\")?this._coreService.triggerDataEvent(s.C0.ESC+\"[>85;95;0c\"):this._is(\"linux\")?this._coreService.triggerDataEvent(e.params[0]+\"c\"):this._is(\"screen\")&&this._coreService.triggerDataEvent(s.C0.ESC+\"[>83;40003;0c\"))},t.prototype._is=function(e){return 0===(this._optionsService.options.termName+\"\").indexOf(e)},t.prototype.setMode=function(e){for(var t=0;t<e.length;t++)switch(e.params[t]){case 4:this._coreService.modes.insertMode=!0}},t.prototype.setModePrivate=function(e){for(var t=0;t<e.length;t++)switch(e.params[t]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,a.DEFAULT_CHARSET),this._charsetService.setgCharset(1,a.DEFAULT_CHARSET),this._charsetService.setgCharset(2,a.DEFAULT_CHARSET),this._charsetService.setgCharset(3,a.DEFAULT_CHARSET);break;case 3:this._optionsService.options.windowOptions.setWinLines&&(this._bufferService.resize(132,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!0,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!0;break;case 12:break;case 45:this._coreService.decPrivateModes.reverseWraparound=!0;break;case 66:this._logService.debug(\"Serial port requested application keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire();break;case 9:this._coreMouseService.activeProtocol=\"X10\";break;case 1e3:this._coreMouseService.activeProtocol=\"VT200\";break;case 1002:this._coreMouseService.activeProtocol=\"DRAG\";break;case 1003:this._coreMouseService.activeProtocol=\"ANY\";break;case 1004:this._coreService.decPrivateModes.sendFocus=!0;break;case 1005:this._logService.debug(\"DECSET 1005 not supported (see #2507)\");break;case 1006:this._coreMouseService.activeEncoding=\"SGR\";break;case 1015:this._logService.debug(\"DECSET 1015 not supported (see #2507)\");break;case 25:this._coreService.isCursorHidden=!1;break;case 1048:this.saveCursor();break;case 1049:this.saveCursor();case 47:case 1047:this._bufferService.buffers.activateAltBuffer(this._eraseAttrData()),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!0}},t.prototype.resetMode=function(e){for(var t=0;t<e.length;t++)switch(e.params[t]){case 4:this._coreService.modes.insertMode=!1}},t.prototype.resetModePrivate=function(e){for(var t=0;t<e.length;t++)switch(e.params[t]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.options.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug(\"Switching back to normal keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol=\"NONE\";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug(\"DECRST 1005 not supported (see #2507)\");break;case 1006:this._coreMouseService.activeEncoding=\"DEFAULT\";break;case 1015:this._logService.debug(\"DECRST 1015 not supported (see #2507)\");break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),1049===e.params[t]&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1}},t.prototype._updateAttrColor=function(e,t,r,i,n){return 2===t?(e|=50331648,e&=-16777216,e|=v.AttributeData.fromColorRGB([r,i,n])):5===t&&(e&=-50331904,e|=33554432|255&r),e},t.prototype._extractColor=function(e,t,r){var i=[0,0,-1,0,0,0],n=0,o=0;do{if(i[o+n]=e.params[t+o],e.hasSubParams(t+o)){var s=e.getSubParams(t+o),a=0;do{5===i[1]&&(n=1),i[o+a+1+n]=s[a]}while(++a<s.length&&a+o+1+n<i.length);break}if(5===i[1]&&o+n>=2||2===i[1]&&o+n>=5)break;i[1]&&(n=1)}while(++o+t<e.length&&o+n<i.length);for(a=2;a<i.length;++a)-1===i[a]&&(i[a]=0);switch(i[0]){case 38:r.fg=this._updateAttrColor(r.fg,i[1],i[3],i[4],i[5]);break;case 48:r.bg=this._updateAttrColor(r.bg,i[1],i[3],i[4],i[5]);break;case 58:r.extended=r.extended.clone(),r.extended.underlineColor=this._updateAttrColor(r.extended.underlineColor,i[1],i[3],i[4],i[5])}return o},t.prototype._processUnderline=function(e,t){t.extended=t.extended.clone(),(!~e||e>5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()},t.prototype.charAttributes=function(e){if(1===e.length&&0===e.params[0])return this._curAttrData.fg=f.DEFAULT_ATTR_DATA.fg,void(this._curAttrData.bg=f.DEFAULT_ATTR_DATA.bg);for(var t,r=e.length,i=this._curAttrData,n=0;n<r;n++)(t=e.params[n])>=30&&t<=37?(i.fg&=-50331904,i.fg|=16777216|t-30):t>=40&&t<=47?(i.bg&=-50331904,i.bg|=16777216|t-40):t>=90&&t<=97?(i.fg&=-50331904,i.fg|=16777224|t-90):t>=100&&t<=107?(i.bg&=-50331904,i.bg|=16777224|t-100):0===t?(i.fg=f.DEFAULT_ATTR_DATA.fg,i.bg=f.DEFAULT_ATTR_DATA.bg):1===t?i.fg|=134217728:3===t?i.bg|=67108864:4===t?(i.fg|=268435456,this._processUnderline(e.hasSubParams(n)?e.getSubParams(n)[0]:1,i)):5===t?i.fg|=536870912:7===t?i.fg|=67108864:8===t?i.fg|=1073741824:2===t?i.bg|=134217728:21===t?this._processUnderline(2,i):22===t?(i.fg&=-134217729,i.bg&=-134217729):23===t?i.bg&=-67108865:24===t?i.fg&=-268435457:25===t?i.fg&=-536870913:27===t?i.fg&=-67108865:28===t?i.fg&=-1073741825:39===t?(i.fg&=-67108864,i.fg|=16777215&f.DEFAULT_ATTR_DATA.fg):49===t?(i.bg&=-67108864,i.bg|=16777215&f.DEFAULT_ATTR_DATA.bg):38===t||48===t||58===t?n+=this._extractColor(e,n,i):59===t?(i.extended=i.extended.clone(),i.extended.underlineColor=-1,i.updateExtended()):100===t?(i.fg&=-67108864,i.fg|=16777215&f.DEFAULT_ATTR_DATA.fg,i.bg&=-67108864,i.bg|=16777215&f.DEFAULT_ATTR_DATA.bg):this._logService.debug(\"Unknown SGR attribute: %d.\",t)},t.prototype.deviceStatus=function(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(s.C0.ESC+\"[0n\");break;case 6:var t=this._bufferService.buffer.y+1,r=this._bufferService.buffer.x+1;this._coreService.triggerDataEvent(s.C0.ESC+\"[\"+t+\";\"+r+\"R\")}},t.prototype.deviceStatusPrivate=function(e){switch(e.params[0]){case 6:var t=this._bufferService.buffer.y+1,r=this._bufferService.buffer.x+1;this._coreService.triggerDataEvent(s.C0.ESC+\"[?\"+t+\";\"+r+\"R\")}},t.prototype.softReset=function(e){this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._bufferService.buffer.scrollTop=0,this._bufferService.buffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=f.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._bufferService.buffer.savedX=0,this._bufferService.buffer.savedY=this._bufferService.buffer.ybase,this._bufferService.buffer.savedCurAttrData.fg=this._curAttrData.fg,this._bufferService.buffer.savedCurAttrData.bg=this._curAttrData.bg,this._bufferService.buffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1},t.prototype.setCursorStyle=function(e){var t=e.params[0]||1;switch(t){case 1:case 2:this._optionsService.options.cursorStyle=\"block\";break;case 3:case 4:this._optionsService.options.cursorStyle=\"underline\";break;case 5:case 6:this._optionsService.options.cursorStyle=\"bar\"}var r=t%2==1;this._optionsService.options.cursorBlink=r},t.prototype.setScrollRegion=function(e){var t,r=e.params[0]||1;(e.length<2||(t=e.params[1])>this._bufferService.rows||0===t)&&(t=this._bufferService.rows),t>r&&(this._bufferService.buffer.scrollTop=r-1,this._bufferService.buffer.scrollBottom=t-1,this._setCursor(0,0))},t.prototype.windowOptions=function(e){if(S(e.params[0],this._optionsService.options.windowOptions)){var t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(o.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(o.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(s.C0.ESC+\"[8;\"+this._bufferService.rows+\";\"+this._bufferService.cols+\"t\");break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}}},t.prototype.saveCursor=function(e){this._bufferService.buffer.savedX=this._bufferService.buffer.x,this._bufferService.buffer.savedY=this._bufferService.buffer.ybase+this._bufferService.buffer.y,this._bufferService.buffer.savedCurAttrData.fg=this._curAttrData.fg,this._bufferService.buffer.savedCurAttrData.bg=this._curAttrData.bg,this._bufferService.buffer.savedCharset=this._charsetService.charset},t.prototype.restoreCursor=function(e){this._bufferService.buffer.x=this._bufferService.buffer.savedX||0,this._bufferService.buffer.y=Math.max(this._bufferService.buffer.savedY-this._bufferService.buffer.ybase,0),this._curAttrData.fg=this._bufferService.buffer.savedCurAttrData.fg,this._curAttrData.bg=this._bufferService.buffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._bufferService.buffer.savedCharset&&(this._charsetService.charset=this._bufferService.buffer.savedCharset),this._restrictCursor()},t.prototype.setTitle=function(e){this._windowTitle=e,this._onTitleChange.fire(e)},t.prototype.setIconName=function(e){this._iconName=e},t.prototype.nextLine=function(){this._bufferService.buffer.x=0,this.index()},t.prototype.keypadApplicationMode=function(){this._logService.debug(\"Serial port requested application keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire()},t.prototype.keypadNumericMode=function(){this._logService.debug(\"Switching back to normal keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire()},t.prototype.selectDefaultCharset=function(){this._charsetService.setgLevel(0),this._charsetService.setgCharset(0,a.DEFAULT_CHARSET)},t.prototype.selectCharset=function(e){2===e.length?\"/\"!==e[0]&&this._charsetService.setgCharset(b[e[0]],a.CHARSETS[e[1]]||a.DEFAULT_CHARSET):this.selectDefaultCharset()},t.prototype.index=function(){this._restrictCursor();var e=this._bufferService.buffer;this._bufferService.buffer.y++,e.y===e.scrollBottom+1?(e.y--,this._onRequestScroll.fire(this._eraseAttrData())):e.y>=this._bufferService.rows&&(e.y=this._bufferService.rows-1),this._restrictCursor()},t.prototype.tabSet=function(){this._bufferService.buffer.tabs[this._bufferService.buffer.x]=!0},t.prototype.reverseIndex=function(){this._restrictCursor();var e=this._bufferService.buffer;if(e.y===e.scrollTop){var t=e.scrollBottom-e.scrollTop;e.lines.shiftElements(e.ybase+e.y,t,1),e.lines.set(e.ybase+e.y,e.getBlankLine(this._eraseAttrData())),this._dirtyRowService.markRangeDirty(e.scrollTop,e.scrollBottom)}else e.y--,this._restrictCursor()},t.prototype.fullReset=function(){this._parser.reset(),this._onRequestReset.fire()},t.prototype.reset=function(){this._curAttrData=f.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=f.DEFAULT_ATTR_DATA.clone()},t.prototype._eraseAttrData=function(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal},t.prototype.setgLevel=function(e){this._charsetService.setgLevel(e)},t.prototype.screenAlignmentPattern=function(){var e=new p.CellData;e.content=1<<22|\"E\".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg;var t=this._bufferService.buffer;this._setCursor(0,0);for(var r=0;r<this._bufferService.rows;++r){var i=t.ybase+t.y+r,n=t.lines.get(i);n&&(n.fill(e),n.isWrapped=!1)}this._dirtyRowService.markAllDirty(),this._setCursor(0,0)},t}(l.Disposable);t.InputHandler=C},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={\"`\":\"◆\",a:\"▒\",b:\"␉\",c:\"␌\",d:\"␍\",e:\"␊\",f:\"°\",g:\"±\",h:\"␤\",i:\"␋\",j:\"┘\",k:\"┐\",l:\"┌\",m:\"└\",n:\"┼\",o:\"⎺\",p:\"⎻\",q:\"─\",r:\"⎼\",s:\"⎽\",t:\"├\",u:\"┤\",v:\"┴\",w:\"┬\",x:\"│\",y:\"≤\",z:\"≥\",\"{\":\"π\",\"|\":\"≠\",\"}\":\"£\",\"~\":\"·\"},t.CHARSETS.A={\"#\":\"£\"},t.CHARSETS.B=void 0,t.CHARSETS[4]={\"#\":\"£\",\"@\":\"¾\",\"[\":\"ij\",\"\\\\\":\"½\",\"]\":\"|\",\"{\":\"¨\",\"|\":\"f\",\"}\":\"¼\",\"~\":\"´\"},t.CHARSETS.C=t.CHARSETS[5]={\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"é\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS.R={\"#\":\"£\",\"@\":\"à\",\"[\":\"°\",\"\\\\\":\"ç\",\"]\":\"§\",\"{\":\"é\",\"|\":\"ù\",\"}\":\"è\",\"~\":\"¨\"},t.CHARSETS.Q={\"@\":\"à\",\"[\":\"â\",\"\\\\\":\"ç\",\"]\":\"ê\",\"^\":\"î\",\"`\":\"ô\",\"{\":\"é\",\"|\":\"ù\",\"}\":\"è\",\"~\":\"û\"},t.CHARSETS.K={\"@\":\"§\",\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Ü\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"ü\",\"~\":\"ß\"},t.CHARSETS.Y={\"#\":\"£\",\"@\":\"§\",\"[\":\"°\",\"\\\\\":\"ç\",\"]\":\"é\",\"`\":\"ù\",\"{\":\"à\",\"|\":\"ò\",\"}\":\"è\",\"~\":\"ì\"},t.CHARSETS.E=t.CHARSETS[6]={\"@\":\"Ä\",\"[\":\"Æ\",\"\\\\\":\"Ø\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"ä\",\"{\":\"æ\",\"|\":\"ø\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS.Z={\"#\":\"£\",\"@\":\"§\",\"[\":\"¡\",\"\\\\\":\"Ñ\",\"]\":\"¿\",\"{\":\"°\",\"|\":\"ñ\",\"}\":\"ç\"},t.CHARSETS.H=t.CHARSETS[7]={\"@\":\"É\",\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"é\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS[\"=\"]={\"#\":\"ù\",\"@\":\"à\",\"[\":\"é\",\"\\\\\":\"ç\",\"]\":\"ê\",\"^\":\"î\",_:\"è\",\"`\":\"ô\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"ü\",\"~\":\"û\"}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Params=void 0;var i=function(){function e(e,t){if(void 0===e&&(e=32),void 0===t&&(t=32),this.maxLength=e,this.maxSubParamsLength=t,t>256)throw new Error(\"maxSubParamsLength must not be greater than 256\");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}return e.fromArray=function(t){var r=new e;if(!t.length)return r;for(var i=t[0]instanceof Array?1:0;i<t.length;++i){var n=t[i];if(n instanceof Array)for(var o=0;o<n.length;++o)r.addSubParam(n[o]);else r.addParam(n)}return r},e.prototype.clone=function(){var t=new e(this.maxLength,this.maxSubParamsLength);return t.params.set(this.params),t.length=this.length,t._subParams.set(this._subParams),t._subParamsLength=this._subParamsLength,t._subParamsIdx.set(this._subParamsIdx),t._rejectDigits=this._rejectDigits,t._rejectSubDigits=this._rejectSubDigits,t._digitIsSub=this._digitIsSub,t},e.prototype.toArray=function(){for(var e=[],t=0;t<this.length;++t){e.push(this.params[t]);var r=this._subParamsIdx[t]>>8,i=255&this._subParamsIdx[t];i-r>0&&e.push(Array.prototype.slice.call(this._subParams,r,i))}return e},e.prototype.reset=function(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1},e.prototype.addParam=function(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>2147483647?2147483647:e}},e.prototype.addSubParam=function(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParams[this._subParamsLength++]=e>2147483647?2147483647:e,this._subParamsIdx[this.length-1]++}},e.prototype.hasSubParams=function(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0},e.prototype.getSubParams=function(e){var t=this._subParamsIdx[e]>>8,r=255&this._subParamsIdx[e];return r-t>0?this._subParams.subarray(t,r):null},e.prototype.getSubParamsAll=function(){for(var e={},t=0;t<this.length;++t){var r=this._subParamsIdx[t]>>8,i=255&this._subParamsIdx[t];i-r>0&&(e[t]=this._subParams.slice(r,i))}return e},e.prototype.addDigit=function(e){var t;if(!(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)){var r=this._digitIsSub?this._subParams:this.params,i=r[t-1];r[t-1]=~i?Math.min(10*i+e,2147483647):e}},e}();t.Params=i},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.OscHandler=t.OscParser=void 0;var i=r(23),n=r(8),o=function(){function e(){this._state=0,this._id=-1,this._handlers=Object.create(null),this._handlerFb=function(){}}return e.prototype.addHandler=function(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);var r=this._handlers[e];return r.push(t),{dispose:function(){var e=r.indexOf(t);-1!==e&&r.splice(e,1)}}},e.prototype.setHandler=function(e,t){this._handlers[e]=[t]},e.prototype.clearHandler=function(e){this._handlers[e]&&delete this._handlers[e]},e.prototype.setHandlerFallback=function(e){this._handlerFb=e},e.prototype.dispose=function(){this._handlers=Object.create(null),this._handlerFb=function(){}},e.prototype.reset=function(){2===this._state&&this.end(!1),this._id=-1,this._state=0},e.prototype._start=function(){var e=this._handlers[this._id];if(e)for(var t=e.length-1;t>=0;t--)e[t].start();else this._handlerFb(this._id,\"START\")},e.prototype._put=function(e,t,r){var i=this._handlers[this._id];if(i)for(var o=i.length-1;o>=0;o--)i[o].put(e,t,r);else this._handlerFb(this._id,\"PUT\",n.utf32ToString(e,t,r))},e.prototype._end=function(e){var t=this._handlers[this._id];if(t){for(var r=t.length-1;r>=0&&!1===t[r].end(e);r--);for(r--;r>=0;r--)t[r].end(!1)}else this._handlerFb(this._id,\"END\",e)},e.prototype.start=function(){this.reset(),this._id=-1,this._state=1},e.prototype.put=function(e,t,r){if(3!==this._state){if(1===this._state)for(;t<r;){var i=e[t++];if(59===i){this._state=2,this._start();break}if(i<48||57<i)return void(this._state=3);-1===this._id&&(this._id=0),this._id=10*this._id+i-48}2===this._state&&r-t>0&&this._put(e,t,r)}},e.prototype.end=function(e){0!==this._state&&(3!==this._state&&(1===this._state&&this._start(),this._end(e)),this._id=-1,this._state=0)},e}();t.OscParser=o;var s=function(){function e(e){this._handler=e,this._data=\"\",this._hitLimit=!1}return e.prototype.start=function(){this._data=\"\",this._hitLimit=!1},e.prototype.put=function(e,t,r){this._hitLimit||(this._data+=n.utf32ToString(e,t,r),this._data.length>i.PAYLOAD_LIMIT&&(this._data=\"\",this._hitLimit=!0))},e.prototype.end=function(e){var t;return this._hitLimit?t=!1:e&&(t=this._handler(this._data)),this._data=\"\",this._hitLimit=!1,t},e}();t.OscHandler=s},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PAYLOAD_LIMIT=void 0,t.PAYLOAD_LIMIT=1e7},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.DcsHandler=t.DcsParser=void 0;var i=r(8),n=r(21),o=r(23),s=[],a=function(){function e(){this._handlers=Object.create(null),this._active=s,this._ident=0,this._handlerFb=function(){}}return e.prototype.dispose=function(){this._handlers=Object.create(null),this._handlerFb=function(){}},e.prototype.addHandler=function(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);var r=this._handlers[e];return r.push(t),{dispose:function(){var e=r.indexOf(t);-1!==e&&r.splice(e,1)}}},e.prototype.setHandler=function(e,t){this._handlers[e]=[t]},e.prototype.clearHandler=function(e){this._handlers[e]&&delete this._handlers[e]},e.prototype.setHandlerFallback=function(e){this._handlerFb=e},e.prototype.reset=function(){this._active.length&&this.unhook(!1),this._active=s,this._ident=0},e.prototype.hook=function(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||s,this._active.length)for(var r=this._active.length-1;r>=0;r--)this._active[r].hook(t);else this._handlerFb(this._ident,\"HOOK\",t)},e.prototype.put=function(e,t,r){if(this._active.length)for(var n=this._active.length-1;n>=0;n--)this._active[n].put(e,t,r);else this._handlerFb(this._ident,\"PUT\",i.utf32ToString(e,t,r))},e.prototype.unhook=function(e){if(this._active.length){for(var t=this._active.length-1;t>=0&&!1===this._active[t].unhook(e);t--);for(t--;t>=0;t--)this._active[t].unhook(!1)}else this._handlerFb(this._ident,\"UNHOOK\",e);this._active=s,this._ident=0},e}();t.DcsParser=a;var c=function(){function e(e){this._handler=e,this._data=\"\",this._hitLimit=!1}return e.prototype.hook=function(e){this._params=e.clone(),this._data=\"\",this._hitLimit=!1},e.prototype.put=function(e,t,r){this._hitLimit||(this._data+=i.utf32ToString(e,t,r),this._data.length>o.PAYLOAD_LIMIT&&(this._data=\"\",this._hitLimit=!0))},e.prototype.unhook=function(e){var t;return this._hitLimit?t=!1:e&&(t=this._handler(this._data,this._params||new n.Params)),this._params=void 0,this._data=\"\",this._hitLimit=!1,t},e}();t.DcsHandler=c},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.removeTerminalFromCache=t.acquireCharAtlas=void 0;var i=r(26),n=r(43),o=[];t.acquireCharAtlas=function(e,t,r,s,a){for(var c=i.generateConfig(s,a,e,r),l=0;l<o.length;l++){var h=(u=o[l]).ownedBy.indexOf(t);if(h>=0){if(i.configEquals(u.config,c))return u.atlas;1===u.ownedBy.length?(u.atlas.dispose(),o.splice(l,1)):u.ownedBy.splice(h,1);break}}for(l=0;l<o.length;l++){var u=o[l];if(i.configEquals(u.config,c))return u.ownedBy.push(t),u.atlas}var f={atlas:new n.DynamicCharAtlas(document,c),config:c,ownedBy:[t]};return o.push(f),f.atlas},t.removeTerminalFromCache=function(e){for(var t=0;t<o.length;t++){var r=o[t].ownedBy.indexOf(e);if(-1!==r){1===o[t].ownedBy.length?(o[t].atlas.dispose(),o.splice(t,1)):o[t].ownedBy.splice(r,1);break}}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.is256Color=t.configEquals=t.generateConfig=void 0;var i=r(3);t.generateConfig=function(e,t,r,i){var n={foreground:i.foreground,background:i.background,cursor:void 0,cursorAccent:void 0,selection:void 0,ansi:i.ansi.slice(0,16)};return{devicePixelRatio:window.devicePixelRatio,scaledCharWidth:e,scaledCharHeight:t,fontFamily:r.fontFamily,fontSize:r.fontSize,fontWeight:r.fontWeight,fontWeightBold:r.fontWeightBold,allowTransparency:r.allowTransparency,colors:n}},t.configEquals=function(e,t){for(var r=0;r<e.colors.ansi.length;r++)if(e.colors.ansi[r].rgba!==t.colors.ansi[r].rgba)return!1;return e.devicePixelRatio===t.devicePixelRatio&&e.fontFamily===t.fontFamily&&e.fontSize===t.fontSize&&e.fontWeight===t.fontWeight&&e.fontWeightBold===t.fontWeightBold&&e.allowTransparency===t.allowTransparency&&e.scaledCharWidth===t.scaledCharWidth&&e.scaledCharHeight===t.scaledCharHeight&&e.colors.foreground===t.colors.foreground&&e.colors.background===t.colors.background},t.is256Color=function(e){return e<i.DEFAULT_COLOR}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.ColorManager=t.DEFAULT_ANSI_COLORS=void 0;var i=r(10),n=r(45),o=i.css.toColor(\"#ffffff\"),s=i.css.toColor(\"#000000\"),a=i.css.toColor(\"#ffffff\"),c=i.css.toColor(\"#000000\"),l={css:\"rgba(255, 255, 255, 0.3)\",rgba:4294967117};t.DEFAULT_ANSI_COLORS=function(){for(var e=[i.css.toColor(\"#2e3436\"),i.css.toColor(\"#cc0000\"),i.css.toColor(\"#4e9a06\"),i.css.toColor(\"#c4a000\"),i.css.toColor(\"#3465a4\"),i.css.toColor(\"#75507b\"),i.css.toColor(\"#06989a\"),i.css.toColor(\"#d3d7cf\"),i.css.toColor(\"#555753\"),i.css.toColor(\"#ef2929\"),i.css.toColor(\"#8ae234\"),i.css.toColor(\"#fce94f\"),i.css.toColor(\"#729fcf\"),i.css.toColor(\"#ad7fa8\"),i.css.toColor(\"#34e2e2\"),i.css.toColor(\"#eeeeec\")],t=[0,95,135,175,215,255],r=0;r<216;r++){var n=t[r/36%6|0],o=t[r/6%6|0],s=t[r%6];e.push({css:i.channels.toCss(n,o,s),rgba:i.channels.toRgba(n,o,s)})}for(r=0;r<24;r++){var a=8+10*r;e.push({css:i.channels.toCss(a,a,a),rgba:i.channels.toRgba(a,a,a)})}return e}();var h=function(){function e(e,r){this.allowTransparency=r;var h=e.createElement(\"canvas\");h.width=1,h.height=1;var u=h.getContext(\"2d\");if(!u)throw new Error(\"Could not get rendering context\");this._ctx=u,this._ctx.globalCompositeOperation=\"copy\",this._litmusColor=this._ctx.createLinearGradient(0,0,1,1),this._contrastCache=new n.ColorContrastCache,this.colors={foreground:o,background:s,cursor:a,cursorAccent:c,selectionTransparent:l,selectionOpaque:i.color.blend(s,l),ansi:t.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache}}return e.prototype.onOptionsChange=function(e){\"minimumContrastRatio\"===e&&this._contrastCache.clear()},e.prototype.setTheme=function(e){if(void 0===e&&(e={}),this.colors.foreground=this._parseColor(e.foreground,o),this.colors.background=this._parseColor(e.background,s),this.colors.cursor=this._parseColor(e.cursor,a,!0),this.colors.cursorAccent=this._parseColor(e.cursorAccent,c,!0),this.colors.selectionTransparent=this._parseColor(e.selection,l,!0),this.colors.selectionOpaque=i.color.blend(this.colors.background,this.colors.selectionTransparent),i.color.isOpaque(this.colors.selectionTransparent)){this.colors.selectionTransparent=i.color.opacity(this.colors.selectionTransparent,.3)}this.colors.ansi[0]=this._parseColor(e.black,t.DEFAULT_ANSI_COLORS[0]),this.colors.ansi[1]=this._parseColor(e.red,t.DEFAULT_ANSI_COLORS[1]),this.colors.ansi[2]=this._parseColor(e.green,t.DEFAULT_ANSI_COLORS[2]),this.colors.ansi[3]=this._parseColor(e.yellow,t.DEFAULT_ANSI_COLORS[3]),this.colors.ansi[4]=this._parseColor(e.blue,t.DEFAULT_ANSI_COLORS[4]),this.colors.ansi[5]=this._parseColor(e.magenta,t.DEFAULT_ANSI_COLORS[5]),this.colors.ansi[6]=this._parseColor(e.cyan,t.DEFAULT_ANSI_COLORS[6]),this.colors.ansi[7]=this._parseColor(e.white,t.DEFAULT_ANSI_COLORS[7]),this.colors.ansi[8]=this._parseColor(e.brightBlack,t.DEFAULT_ANSI_COLORS[8]),this.colors.ansi[9]=this._parseColor(e.brightRed,t.DEFAULT_ANSI_COLORS[9]),this.colors.ansi[10]=this._parseColor(e.brightGreen,t.DEFAULT_ANSI_COLORS[10]),this.colors.ansi[11]=this._parseColor(e.brightYellow,t.DEFAULT_ANSI_COLORS[11]),this.colors.ansi[12]=this._parseColor(e.brightBlue,t.DEFAULT_ANSI_COLORS[12]),this.colors.ansi[13]=this._parseColor(e.brightMagenta,t.DEFAULT_ANSI_COLORS[13]),this.colors.ansi[14]=this._parseColor(e.brightCyan,t.DEFAULT_ANSI_COLORS[14]),this.colors.ansi[15]=this._parseColor(e.brightWhite,t.DEFAULT_ANSI_COLORS[15]),this._contrastCache.clear()},e.prototype._parseColor=function(e,t,r){if(void 0===r&&(r=this.allowTransparency),void 0===e)return t;if(this._ctx.fillStyle=this._litmusColor,this._ctx.fillStyle=e,\"string\"!=typeof this._ctx.fillStyle)return console.warn(\"Color: \"+e+\" is invalid using fallback \"+t.css),t;this._ctx.fillRect(0,0,1,1);var n=this._ctx.getImageData(0,0,1,1).data;if(255!==n[3]){if(!r)return console.warn(\"Color: \"+e+\" is using transparency, but allowTransparency is false. Using fallback \"+t.css+\".\"),t;var o=this._ctx.fillStyle.substring(5,this._ctx.fillStyle.length-1).split(\",\").map((function(e){return Number(e)})),s=o[0],a=o[1],c=o[2],l=o[3],h=Math.round(255*l);return{rgba:i.channels.toRgba(s,a,c,h),css:e}}return{css:this._ctx.fillStyle,rgba:i.channels.toRgba(n[0],n[1],n[2],n[3])}},e}();t.ColorManager=h},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.throwIfFalsy=void 0,t.throwIfFalsy=function(e){if(!e)throw new Error(\"value must not be falsy\");return e}},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharacterJoinerRegistry=t.JoinedCellData=void 0;var o=r(6),s=r(3),a=r(4),c=function(e){function t(t,r,i){var n=e.call(this)||this;return n.content=0,n.combinedData=\"\",n.fg=t.fg,n.bg=t.bg,n.combinedData=r,n._width=i,n}return n(t,e),t.prototype.isCombined=function(){return 2097152},t.prototype.getWidth=function(){return this._width},t.prototype.getChars=function(){return this.combinedData},t.prototype.getCode=function(){return 2097151},t.prototype.setFromCharData=function(e){throw new Error(\"not implemented\")},t.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},t}(o.AttributeData);t.JoinedCellData=c;var l=function(){function e(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new a.CellData}return e.prototype.registerCharacterJoiner=function(e){var t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id},e.prototype.deregisterCharacterJoiner=function(e){for(var t=0;t<this._characterJoiners.length;t++)if(this._characterJoiners[t].id===e)return this._characterJoiners.splice(t,1),!0;return!1},e.prototype.getJoinedCharacters=function(e){if(0===this._characterJoiners.length)return[];var t=this._bufferService.buffer.lines.get(e);if(!t||0===t.length)return[];for(var r=[],i=t.translateToString(!0),n=0,o=0,a=0,c=t.getFg(0),l=t.getBg(0),h=0;h<t.getTrimmedLength();h++)if(t.loadCell(h,this._workCell),0!==this._workCell.getWidth()){if(this._workCell.fg!==c||this._workCell.bg!==l){if(h-n>1)for(var u=this._getJoinedRanges(i,a,o,t,n),f=0;f<u.length;f++)r.push(u[f]);n=h,a=o,c=this._workCell.fg,l=this._workCell.bg}o+=this._workCell.getChars().length||s.WHITESPACE_CELL_CHAR.length}if(this._bufferService.cols-n>1)for(u=this._getJoinedRanges(i,a,o,t,n),f=0;f<u.length;f++)r.push(u[f]);return r},e.prototype._getJoinedRanges=function(t,r,i,n,o){for(var s=t.substring(r,i),a=this._characterJoiners[0].handler(s),c=1;c<this._characterJoiners.length;c++)for(var l=this._characterJoiners[c].handler(s),h=0;h<l.length;h++)e._mergeRanges(a,l[h]);return this._stringRangesToCellRanges(a,n,o),a},e.prototype._stringRangesToCellRanges=function(e,t,r){var i=0,n=!1,o=0,a=e[i];if(a){for(var c=r;c<this._bufferService.cols;c++){var l=t.getWidth(c),h=t.getString(c).length||s.WHITESPACE_CELL_CHAR.length;if(0!==l){if(!n&&a[0]<=o&&(a[0]=c,n=!0),a[1]<=o){if(a[1]=c,!(a=e[++i]))break;a[0]<=o?(a[0]=c,n=!0):n=!1}o+=h}}a&&(a[1]=this._bufferService.cols)}},e._mergeRanges=function(e,t){for(var r=!1,i=0;i<e.length;i++){var n=e[i];if(r){if(t[1]<=n[0])return e[i-1][1]=t[1],e;if(t[1]<=n[1])return e[i-1][1]=Math.max(t[1],n[1]),e.splice(i,1),e;e.splice(i,1),i--}else{if(t[1]<=n[0])return e.splice(i,0,t),e;if(t[1]<=n[1])return n[0]=Math.min(t[0],n[0]),e;t[0]<n[1]&&(n[0]=Math.min(t[0],n[0]),r=!0)}}return r?e[e.length-1][1]=t[1]:e.push(t),e},e}();t.CharacterJoinerRegistry=l},function(e,t,r){\"use strict\";function i(e,t){var r=t.getBoundingClientRect();return[e.clientX-r.left,e.clientY-r.top]}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getRawByteCoords=t.getCoords=t.getCoordsRelativeToElement=void 0,t.getCoordsRelativeToElement=i,t.getCoords=function(e,t,r,n,o,s,a,c){if(o){var l=i(e,t);if(l)return l[0]=Math.ceil((l[0]+(c?s/2:0))/s),l[1]=Math.ceil(l[1]/a),l[0]=Math.min(Math.max(l[0],1),r+(c?1:0)),l[1]=Math.min(Math.max(l[1],1),n),l}},t.getRawByteCoords=function(e){if(e)return{x:e[0]+32,y:e[1]+32}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.RenderDebouncer=void 0;var i=function(){function e(e){this._renderCallback=e}return e.prototype.dispose=function(){this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.refresh=function(e,t,r){var i=this;this._rowCount=r,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,this._animationFrame||(this._animationFrame=window.requestAnimationFrame((function(){return i._innerRefresh()})))},e.prototype._innerRefresh=function(){if(void 0!==this._rowStart&&void 0!==this._rowEnd&&void 0!==this._rowCount){var e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._animationFrame=void 0,this._renderCallback(e,t)}},e}();t.RenderDebouncer=i},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.ScreenDprMonitor=void 0;var o=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._currentDevicePixelRatio=window.devicePixelRatio,t}return n(t,e),t.prototype.setListener=function(e){var t=this;this._listener&&this.clearListener(),this._listener=e,this._outerListener=function(){t._listener&&(t._listener(window.devicePixelRatio,t._currentDevicePixelRatio),t._updateDpr())},this._updateDpr()},t.prototype.dispose=function(){e.prototype.dispose.call(this),this.clearListener()},t.prototype._updateDpr=function(){var e;this._outerListener&&(null===(e=this._resolutionMediaMatchList)||void 0===e||e.removeListener(this._outerListener),this._currentDevicePixelRatio=window.devicePixelRatio,this._resolutionMediaMatchList=window.matchMedia(\"screen and (resolution: \"+window.devicePixelRatio+\"dppx)\"),this._resolutionMediaMatchList.addListener(this._outerListener))},t.prototype.clearListener=function(){this._resolutionMediaMatchList&&this._listener&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._listener=void 0,this._outerListener=void 0)},t}(r(2).Disposable);t.ScreenDprMonitor=o},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.clone=void 0,t.clone=function e(t,r){if(void 0===r&&(r=5),\"object\"!=typeof t)return t;var i=Array.isArray(t)?[]:{};for(var n in t)i[n]=r<=1?t[n]:t[n]?e(t[n],r-1):t[n];return i}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Terminal=void 0;var i=r(4),n=r(35),o=r(18),s=r(0),a=r(83),c=function(){function e(e){this._core=new n.Terminal(e),this._addonManager=new a.AddonManager}return e.prototype._checkProposedApi=function(){if(!this._core.optionsService.options.allowProposedApi)throw new Error(\"You must set the allowProposedApi option to true to use proposed API\")},Object.defineProperty(e.prototype,\"onCursorMove\",{get:function(){return this._core.onCursorMove},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onLineFeed\",{get:function(){return this._core.onLineFeed},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onSelectionChange\",{get:function(){return this._core.onSelectionChange},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onData\",{get:function(){return this._core.onData},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onBinary\",{get:function(){return this._core.onBinary},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onTitleChange\",{get:function(){return this._core.onTitleChange},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onScroll\",{get:function(){return this._core.onScroll},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onKey\",{get:function(){return this._core.onKey},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onRender\",{get:function(){return this._core.onRender},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onResize\",{get:function(){return this._core.onResize},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"element\",{get:function(){return this._core.element},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"parser\",{get:function(){return this._checkProposedApi(),this._parser||(this._parser=new f(this._core)),this._parser},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"unicode\",{get:function(){return this._checkProposedApi(),new _(this._core)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"textarea\",{get:function(){return this._core.textarea},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"rows\",{get:function(){return this._core.rows},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"cols\",{get:function(){return this._core.cols},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"buffer\",{get:function(){return this._checkProposedApi(),new h(this._core.buffers)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"markers\",{get:function(){return this._checkProposedApi(),this._core.markers},enumerable:!1,configurable:!0}),e.prototype.blur=function(){this._core.blur()},e.prototype.focus=function(){this._core.focus()},e.prototype.resize=function(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)},e.prototype.open=function(e){this._core.open(e)},e.prototype.attachCustomKeyEventHandler=function(e){this._core.attachCustomKeyEventHandler(e)},e.prototype.registerLinkMatcher=function(e,t,r){return this._checkProposedApi(),this._core.registerLinkMatcher(e,t,r)},e.prototype.deregisterLinkMatcher=function(e){this._checkProposedApi(),this._core.deregisterLinkMatcher(e)},e.prototype.registerLinkProvider=function(e){return this._checkProposedApi(),this._core.registerLinkProvider(e)},e.prototype.registerCharacterJoiner=function(e){return this._checkProposedApi(),this._core.registerCharacterJoiner(e)},e.prototype.deregisterCharacterJoiner=function(e){this._checkProposedApi(),this._core.deregisterCharacterJoiner(e)},e.prototype.registerMarker=function(e){return this._checkProposedApi(),this._verifyIntegers(e),this._core.addMarker(e)},e.prototype.addMarker=function(e){return this.registerMarker(e)},e.prototype.hasSelection=function(){return this._core.hasSelection()},e.prototype.select=function(e,t,r){this._verifyIntegers(e,t,r),this._core.select(e,t,r)},e.prototype.getSelection=function(){return this._core.getSelection()},e.prototype.getSelectionPosition=function(){return this._core.getSelectionPosition()},e.prototype.clearSelection=function(){this._core.clearSelection()},e.prototype.selectAll=function(){this._core.selectAll()},e.prototype.selectLines=function(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)},e.prototype.dispose=function(){this._addonManager.dispose(),this._core.dispose()},e.prototype.scrollLines=function(e){this._verifyIntegers(e),this._core.scrollLines(e)},e.prototype.scrollPages=function(e){this._verifyIntegers(e),this._core.scrollPages(e)},e.prototype.scrollToTop=function(){this._core.scrollToTop()},e.prototype.scrollToBottom=function(){this._core.scrollToBottom()},e.prototype.scrollToLine=function(e){this._verifyIntegers(e),this._core.scrollToLine(e)},e.prototype.clear=function(){this._core.clear()},e.prototype.write=function(e,t){this._core.write(e,t)},e.prototype.writeUtf8=function(e,t){this._core.write(e,t)},e.prototype.writeln=function(e,t){this._core.write(e),this._core.write(\"\\r\\n\",t)},e.prototype.paste=function(e){this._core.paste(e)},e.prototype.getOption=function(e){return this._core.optionsService.getOption(e)},e.prototype.setOption=function(e,t){this._core.optionsService.setOption(e,t)},e.prototype.refresh=function(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)},e.prototype.reset=function(){this._core.reset()},e.prototype.loadAddon=function(e){return this._addonManager.loadAddon(this,e)},Object.defineProperty(e,\"strings\",{get:function(){return o},enumerable:!1,configurable:!0}),e.prototype._verifyIntegers=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var r=0,i=e;r<i.length;r++){var n=i[r];if(n===1/0||isNaN(n)||n%1!=0)throw new Error(\"This API only accepts integers\")}},e}();t.Terminal=c;var l=function(){function e(e,t){this._buffer=e,this.type=t}return e.prototype.init=function(e){return this._buffer=e,this},Object.defineProperty(e.prototype,\"cursorY\",{get:function(){return this._buffer.y},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"cursorX\",{get:function(){return this._buffer.x},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"viewportY\",{get:function(){return this._buffer.ydisp},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"baseY\",{get:function(){return this._buffer.ybase},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"length\",{get:function(){return this._buffer.lines.length},enumerable:!1,configurable:!0}),e.prototype.getLine=function(e){var t=this._buffer.lines.get(e);if(t)return new u(t)},e.prototype.getNullCell=function(){return new i.CellData},e}(),h=function(){function e(e){var t=this;this._buffers=e,this._onBufferChange=new s.EventEmitter,this._normal=new l(this._buffers.normal,\"normal\"),this._alternate=new l(this._buffers.alt,\"alternate\"),this._buffers.onBufferActivate((function(){return t._onBufferChange.fire(t.active)}))}return Object.defineProperty(e.prototype,\"onBufferChange\",{get:function(){return this._onBufferChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"active\",{get:function(){if(this._buffers.active===this._buffers.normal)return this.normal;if(this._buffers.active===this._buffers.alt)return this.alternate;throw new Error(\"Active buffer is neither normal nor alternate\")},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"normal\",{get:function(){return this._normal.init(this._buffers.normal)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"alternate\",{get:function(){return this._alternate.init(this._buffers.alt)},enumerable:!1,configurable:!0}),e}(),u=function(){function e(e){this._line=e}return Object.defineProperty(e.prototype,\"isWrapped\",{get:function(){return this._line.isWrapped},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"length\",{get:function(){return this._line.length},enumerable:!1,configurable:!0}),e.prototype.getCell=function(e,t){if(!(e<0||e>=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new i.CellData)},e.prototype.translateToString=function(e,t,r){return this._line.translateToString(e,t,r)},e}(),f=function(){function e(e){this._core=e}return e.prototype.registerCsiHandler=function(e,t){return this._core.addCsiHandler(e,(function(e){return t(e.toArray())}))},e.prototype.addCsiHandler=function(e,t){return this.registerCsiHandler(e,t)},e.prototype.registerDcsHandler=function(e,t){return this._core.addDcsHandler(e,(function(e,r){return t(e,r.toArray())}))},e.prototype.addDcsHandler=function(e,t){return this.registerDcsHandler(e,t)},e.prototype.registerEscHandler=function(e,t){return this._core.addEscHandler(e,t)},e.prototype.addEscHandler=function(e,t){return this.registerEscHandler(e,t)},e.prototype.registerOscHandler=function(e,t){return this._core.addOscHandler(e,t)},e.prototype.addOscHandler=function(e,t){return this.registerOscHandler(e,t)},e}(),_=function(){function e(e){this._core=e}return e.prototype.register=function(e){this._core.unicodeService.register(e)},Object.defineProperty(e.prototype,\"versions\",{get:function(){return this._core.unicodeService.versions},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"activeVersion\",{get:function(){return this._core.unicodeService.activeVersion},set:function(e){this._core.unicodeService.activeVersion=e},enumerable:!1,configurable:!0}),e}()},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.Terminal=void 0;var o=r(36),s=r(37),a=r(38),c=r(12),l=r(19),h=r(40),u=r(50),f=r(51),_=r(11),d=r(7),p=r(18),v=r(54),g=r(55),y=r(56),b=r(57),S=r(59),m=r(0),C=r(16),w=r(27),E=r(60),L=r(5),A=r(61),R=r(62),k=r(63),x=r(64),D=r(65),T=\"undefined\"!=typeof window?window.document:null,O=function(e){function t(t){void 0===t&&(t={});var r=e.call(this,t)||this;return r.browser=_,r._keyDownHandled=!1,r._onCursorMove=new m.EventEmitter,r._onKey=new m.EventEmitter,r._onRender=new m.EventEmitter,r._onSelectionChange=new m.EventEmitter,r._onTitleChange=new m.EventEmitter,r._onFocus=new m.EventEmitter,r._onBlur=new m.EventEmitter,r._onA11yCharEmitter=new m.EventEmitter,r._onA11yTabEmitter=new m.EventEmitter,r._setup(),r.linkifier=r._instantiationService.createInstance(u.Linkifier),r.linkifier2=r.register(r._instantiationService.createInstance(k.Linkifier2)),r.register(r._inputHandler.onRequestBell((function(){return r.bell()}))),r.register(r._inputHandler.onRequestRefreshRows((function(e,t){return r.refresh(e,t)}))),r.register(r._inputHandler.onRequestReset((function(){return r.reset()}))),r.register(r._inputHandler.onRequestScroll((function(e,t){return r.scroll(e,t||void 0)}))),r.register(r._inputHandler.onRequestWindowsOptionsReport((function(e){return r._reportWindowsOptions(e)}))),r.register(m.forwardEvent(r._inputHandler.onCursorMove,r._onCursorMove)),r.register(m.forwardEvent(r._inputHandler.onTitleChange,r._onTitleChange)),r.register(m.forwardEvent(r._inputHandler.onA11yChar,r._onA11yCharEmitter)),r.register(m.forwardEvent(r._inputHandler.onA11yTab,r._onA11yTabEmitter)),r.register(r._bufferService.onResize((function(e){return r._afterResize(e.cols,e.rows)}))),r}return n(t,e),Object.defineProperty(t.prototype,\"options\",{get:function(){return this.optionsService.options},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onCursorMove\",{get:function(){return this._onCursorMove.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onKey\",{get:function(){return this._onKey.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRender\",{get:function(){return this._onRender.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onSelectionChange\",{get:function(){return this._onSelectionChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onTitleChange\",{get:function(){return this._onTitleChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onFocus\",{get:function(){return this._onFocus.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onBlur\",{get:function(){return this._onBlur.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onA11yChar\",{get:function(){return this._onA11yCharEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onA11yTab\",{get:function(){return this._onA11yTabEmitter.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){var t,r,i;this._isDisposed||(e.prototype.dispose.call(this),null===(t=this._renderService)||void 0===t||t.dispose(),this._customKeyEventHandler=void 0,this.write=function(){},null===(i=null===(r=this.element)||void 0===r?void 0:r.parentNode)||void 0===i||i.removeChild(this.element))},t.prototype._setup=function(){e.prototype._setup.call(this),this._customKeyEventHandler=void 0},Object.defineProperty(t.prototype,\"buffer\",{get:function(){return this.buffers.active},enumerable:!1,configurable:!0}),t.prototype.focus=function(){this.textarea&&this.textarea.focus({preventScroll:!0})},t.prototype._updateOptions=function(t){var r,i,n,o;switch(e.prototype._updateOptions.call(this,t),t){case\"fontFamily\":case\"fontSize\":null===(r=this._renderService)||void 0===r||r.clear(),null===(i=this._charSizeService)||void 0===i||i.measure();break;case\"cursorBlink\":case\"cursorStyle\":this.refresh(this.buffer.y,this.buffer.y);break;case\"drawBoldTextInBrightColors\":case\"letterSpacing\":case\"lineHeight\":case\"fontWeight\":case\"fontWeightBold\":case\"minimumContrastRatio\":this._renderService&&(this._renderService.clear(),this._renderService.onResize(this.cols,this.rows),this.refresh(0,this.rows-1));break;case\"rendererType\":this._renderService&&(this._renderService.setRenderer(this._createRenderer()),this._renderService.onResize(this.cols,this.rows));break;case\"scrollback\":null===(n=this.viewport)||void 0===n||n.syncScrollArea();break;case\"screenReaderMode\":this.optionsService.options.screenReaderMode?!this._accessibilityManager&&this._renderService&&(this._accessibilityManager=new y.AccessibilityManager(this,this._renderService)):(null===(o=this._accessibilityManager)||void 0===o||o.dispose(),this._accessibilityManager=void 0);break;case\"tabStopWidth\":this.buffers.setupTabStops();break;case\"theme\":this._setTheme(this.optionsService.options.theme)}},t.prototype._onTextAreaFocus=function(e){this._coreService.decPrivateModes.sendFocus&&this._coreService.triggerDataEvent(c.C0.ESC+\"[I\"),this.updateCursorStyle(e),this.element.classList.add(\"focus\"),this._showCursor(),this._onFocus.fire()},t.prototype.blur=function(){var e;return null===(e=this.textarea)||void 0===e?void 0:e.blur()},t.prototype._onTextAreaBlur=function(){this.textarea.value=\"\",this.refresh(this.buffer.y,this.buffer.y),this._coreService.decPrivateModes.sendFocus&&this._coreService.triggerDataEvent(c.C0.ESC+\"[O\"),this.element.classList.remove(\"focus\"),this._onBlur.fire()},t.prototype._syncTextArea=function(){if(this.textarea&&this.buffer.isCursorInViewport&&!this._compositionHelper.isComposing){var e=Math.ceil(this._charSizeService.height*this.optionsService.options.lineHeight),t=this._bufferService.buffer.y*e,r=this._bufferService.buffer.x*this._charSizeService.width;this.textarea.style.left=r+\"px\",this.textarea.style.top=t+\"px\",this.textarea.style.width=this._charSizeService.width+\"px\",this.textarea.style.height=e+\"px\",this.textarea.style.lineHeight=e+\"px\",this.textarea.style.zIndex=\"-5\"}},t.prototype._initGlobal=function(){var e=this;this._bindKeys(),this.register(d.addDisposableDomListener(this.element,\"copy\",(function(t){e.hasSelection()&&a.copyHandler(t,e._selectionService)})));var t=function(t){return a.handlePasteEvent(t,e.textarea,e._coreService)};this.register(d.addDisposableDomListener(this.textarea,\"paste\",t)),this.register(d.addDisposableDomListener(this.element,\"paste\",t)),_.isFirefox?this.register(d.addDisposableDomListener(this.element,\"mousedown\",(function(t){2===t.button&&a.rightClickHandler(t,e.textarea,e.screenElement,e._selectionService,e.options.rightClickSelectsWord)}))):this.register(d.addDisposableDomListener(this.element,\"contextmenu\",(function(t){a.rightClickHandler(t,e.textarea,e.screenElement,e._selectionService,e.options.rightClickSelectsWord)}))),_.isLinux&&this.register(d.addDisposableDomListener(this.element,\"auxclick\",(function(t){1===t.button&&a.moveTextAreaUnderMouseCursor(t,e.textarea,e.screenElement)})))},t.prototype._bindKeys=function(){var e=this;this.register(d.addDisposableDomListener(this.textarea,\"keyup\",(function(t){return e._keyUp(t)}),!0)),this.register(d.addDisposableDomListener(this.textarea,\"keydown\",(function(t){return e._keyDown(t)}),!0)),this.register(d.addDisposableDomListener(this.textarea,\"keypress\",(function(t){return e._keyPress(t)}),!0)),this.register(d.addDisposableDomListener(this.textarea,\"compositionstart\",(function(){return e._compositionHelper.compositionstart()}))),this.register(d.addDisposableDomListener(this.textarea,\"compositionupdate\",(function(t){return e._compositionHelper.compositionupdate(t)}))),this.register(d.addDisposableDomListener(this.textarea,\"compositionend\",(function(){return e._compositionHelper.compositionend()}))),this.register(this.onRender((function(){return e._compositionHelper.updateCompositionElements()}))),this.register(this.onRender((function(t){return e._queueLinkification(t.start,t.end)})))},t.prototype.open=function(e){var t=this;if(!e)throw new Error(\"Terminal requires a parent element.\");T.body.contains(e)||this._logService.debug(\"Terminal.open was called on an element that was not attached to the DOM\"),this._document=e.ownerDocument,this.element=this._document.createElement(\"div\"),this.element.dir=\"ltr\",this.element.classList.add(\"terminal\"),this.element.classList.add(\"xterm\"),this.element.setAttribute(\"tabindex\",\"0\"),e.appendChild(this.element);var r=T.createDocumentFragment();this._viewportElement=T.createElement(\"div\"),this._viewportElement.classList.add(\"xterm-viewport\"),r.appendChild(this._viewportElement),this._viewportScrollArea=T.createElement(\"div\"),this._viewportScrollArea.classList.add(\"xterm-scroll-area\"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=T.createElement(\"div\"),this.screenElement.classList.add(\"xterm-screen\"),this._helperContainer=T.createElement(\"div\"),this._helperContainer.classList.add(\"xterm-helpers\"),this.screenElement.appendChild(this._helperContainer),r.appendChild(this.screenElement),this.textarea=T.createElement(\"textarea\"),this.textarea.classList.add(\"xterm-helper-textarea\"),this.textarea.setAttribute(\"aria-label\",p.promptLabel),this.textarea.setAttribute(\"aria-multiline\",\"false\"),this.textarea.setAttribute(\"autocorrect\",\"off\"),this.textarea.setAttribute(\"autocapitalize\",\"off\"),this.textarea.setAttribute(\"spellcheck\",\"false\"),this.textarea.tabIndex=0,this.register(d.addDisposableDomListener(this.textarea,\"focus\",(function(e){return t._onTextAreaFocus(e)}))),this.register(d.addDisposableDomListener(this.textarea,\"blur\",(function(){return t._onTextAreaBlur()}))),this._helperContainer.appendChild(this.textarea);var i=this._instantiationService.createInstance(x.CoreBrowserService,this.textarea);this._instantiationService.setService(L.ICoreBrowserService,i),this._charSizeService=this._instantiationService.createInstance(A.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(L.ICharSizeService,this._charSizeService),this._compositionView=T.createElement(\"div\"),this._compositionView.classList.add(\"composition-view\"),this._compositionHelper=this._instantiationService.createInstance(o.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this.element.appendChild(r),this._theme=this.options.theme||this._theme,this._colorManager=new w.ColorManager(T,this.options.allowTransparency),this.register(this.optionsService.onOptionChange((function(e){return t._colorManager.onOptionsChange(e)}))),this._colorManager.setTheme(this._theme);var n=this._createRenderer();this._renderService=this.register(this._instantiationService.createInstance(E.RenderService,n,this.rows,this.screenElement)),this._instantiationService.setService(L.IRenderService,this._renderService),this.register(this._renderService.onRenderedBufferChange((function(e){return t._onRender.fire(e)}))),this.onResize((function(e){return t._renderService.resize(e.cols,e.rows)})),this._soundService=this._instantiationService.createInstance(v.SoundService),this._instantiationService.setService(L.ISoundService,this._soundService),this._mouseService=this._instantiationService.createInstance(R.MouseService),this._instantiationService.setService(L.IMouseService,this._mouseService),this.viewport=this._instantiationService.createInstance(s.Viewport,(function(e,r){return t.scrollLines(e,r)}),this._viewportElement,this._viewportScrollArea),this.viewport.onThemeChange(this._colorManager.colors),this.register(this._inputHandler.onRequestSyncScrollBar((function(){return t.viewport.syncScrollArea()}))),this.register(this.viewport),this.register(this.onCursorMove((function(){t._renderService.onCursorMove(),t._syncTextArea()}))),this.register(this.onResize((function(){return t._renderService.onResize(t.cols,t.rows)}))),this.register(this.onBlur((function(){return t._renderService.onBlur()}))),this.register(this.onFocus((function(){return t._renderService.onFocus()}))),this.register(this._renderService.onDimensionsChange((function(){return t.viewport.syncScrollArea()}))),this._selectionService=this.register(this._instantiationService.createInstance(f.SelectionService,this.element,this.screenElement)),this._instantiationService.setService(L.ISelectionService,this._selectionService),this.register(this._selectionService.onRequestScrollLines((function(e){return t.scrollLines(e.amount,e.suppressScrollEvent)}))),this.register(this._selectionService.onSelectionChange((function(){return t._onSelectionChange.fire()}))),this.register(this._selectionService.onRequestRedraw((function(e){return t._renderService.onSelectionChanged(e.start,e.end,e.columnSelectMode)}))),this.register(this._selectionService.onLinuxMouseSelection((function(e){t.textarea.value=e,t.textarea.focus(),t.textarea.select()}))),this.register(this.onScroll((function(){t.viewport.syncScrollArea(),t._selectionService.refresh()}))),this.register(d.addDisposableDomListener(this._viewportElement,\"scroll\",(function(){return t._selectionService.refresh()}))),this._mouseZoneManager=this._instantiationService.createInstance(g.MouseZoneManager,this.element,this.screenElement),this.register(this._mouseZoneManager),this.register(this.onScroll((function(){return t._mouseZoneManager.clearAll()}))),this.linkifier.attachToDom(this.element,this._mouseZoneManager),this.linkifier2.attachToDom(this.element,this._mouseService,this._renderService),this.register(d.addDisposableDomListener(this.element,\"mousedown\",(function(e){return t._selectionService.onMouseDown(e)}))),this._coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add(\"enable-mouse-events\")):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager=new y.AccessibilityManager(this,this._renderService)),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()},t.prototype._createRenderer=function(){switch(this.options.rendererType){case\"canvas\":return this._instantiationService.createInstance(h.Renderer,this._colorManager.colors,this.screenElement,this.linkifier,this.linkifier2);case\"dom\":return this._instantiationService.createInstance(b.DomRenderer,this._colorManager.colors,this.element,this.screenElement,this._viewportElement,this.linkifier,this.linkifier2);default:throw new Error('Unrecognized rendererType \"'+this.options.rendererType+'\"')}},t.prototype._setTheme=function(e){var t,r,i;this._theme=e,null===(t=this._colorManager)||void 0===t||t.setTheme(e),null===(r=this._renderService)||void 0===r||r.setColors(this._colorManager.colors),null===(i=this.viewport)||void 0===i||i.onThemeChange(this._colorManager.colors)},t.prototype.bindMouse=function(){var e=this,t=this,r=this.element;function i(e){var r,i,n=t._mouseService.getRawByteCoords(e,t.screenElement,t.cols,t.rows);if(!n)return!1;switch(e.overrideType||e.type){case\"mousemove\":i=32,void 0===e.buttons?(r=3,void 0!==e.button&&(r=e.button<3?e.button:3)):r=1&e.buttons?0:4&e.buttons?1:2&e.buttons?2:3;break;case\"mouseup\":i=0,r=e.button<3?e.button:3;break;case\"mousedown\":i=1,r=e.button<3?e.button:3;break;case\"wheel\":0!==e.deltaY&&(i=e.deltaY<0?0:1),r=4;break;default:return!1}return!(void 0===i||void 0===r||r>4)&&t._coreMouseService.triggerMouseEvent({col:n.x-33,row:n.y-33,button:r,action:i,ctrl:e.ctrlKey,alt:e.altKey,shift:e.shiftKey})}var n={mouseup:null,wheel:null,mousedrag:null,mousemove:null},o=function(t){return i(t),t.buttons||(e._document.removeEventListener(\"mouseup\",n.mouseup),n.mousedrag&&e._document.removeEventListener(\"mousemove\",n.mousedrag)),e.cancel(t)},s=function(t){return i(t),t.preventDefault(),e.cancel(t)},a=function(e){e.buttons&&i(e)},l=function(e){e.buttons||i(e)};this.register(this._coreMouseService.onProtocolChange((function(t){t?(\"debug\"===e.optionsService.options.logLevel&&e._logService.debug(\"Binding to mouse events:\",e._coreMouseService.explainEvents(t)),e.element.classList.add(\"enable-mouse-events\"),e._selectionService.disable()):(e._logService.debug(\"Unbinding from mouse events.\"),e.element.classList.remove(\"enable-mouse-events\"),e._selectionService.enable()),8&t?n.mousemove||(r.addEventListener(\"mousemove\",l),n.mousemove=l):(r.removeEventListener(\"mousemove\",n.mousemove),n.mousemove=null),16&t?n.wheel||(r.addEventListener(\"wheel\",s,{passive:!1}),n.wheel=s):(r.removeEventListener(\"wheel\",n.wheel),n.wheel=null),2&t?n.mouseup||(n.mouseup=o):(e._document.removeEventListener(\"mouseup\",n.mouseup),n.mouseup=null),4&t?n.mousedrag||(n.mousedrag=a):(e._document.removeEventListener(\"mousemove\",n.mousedrag),n.mousedrag=null)}))),this._coreMouseService.activeProtocol=this._coreMouseService.activeProtocol,this.register(d.addDisposableDomListener(r,\"mousedown\",(function(t){if(t.preventDefault(),e.focus(),e._coreMouseService.areMouseEventsActive&&!e._selectionService.shouldForceSelection(t))return i(t),n.mouseup&&e._document.addEventListener(\"mouseup\",n.mouseup),n.mousedrag&&e._document.addEventListener(\"mousemove\",n.mousedrag),e.cancel(t)}))),this.register(d.addDisposableDomListener(r,\"wheel\",(function(t){if(n.wheel);else if(!e.buffer.hasScrollback){var r=e.viewport.getLinesScrolled(t);if(0===r)return;for(var i=c.C0.ESC+(e._coreService.decPrivateModes.applicationCursorKeys?\"O\":\"[\")+(t.deltaY<0?\"A\":\"B\"),o=\"\",s=0;s<Math.abs(r);s++)o+=i;e._coreService.triggerDataEvent(o,!0)}}),{passive:!0})),this.register(d.addDisposableDomListener(r,\"wheel\",(function(t){if(!n.wheel)return e.viewport.onWheel(t)?void 0:e.cancel(t)}),{passive:!1})),this.register(d.addDisposableDomListener(r,\"touchstart\",(function(t){if(!e._coreMouseService.areMouseEventsActive)return e.viewport.onTouchStart(t),e.cancel(t)}),{passive:!0})),this.register(d.addDisposableDomListener(r,\"touchmove\",(function(t){if(!e._coreMouseService.areMouseEventsActive)return e.viewport.onTouchMove(t)?void 0:e.cancel(t)}),{passive:!1}))},t.prototype.refresh=function(e,t){var r;null===(r=this._renderService)||void 0===r||r.refreshRows(e,t)},t.prototype._queueLinkification=function(e,t){var r;null===(r=this.linkifier)||void 0===r||r.linkifyRows(e,t)},t.prototype.updateCursorStyle=function(e){this._selectionService&&this._selectionService.shouldColumnSelect(e)?this.element.classList.add(\"column-select\"):this.element.classList.remove(\"column-select\")},t.prototype._showCursor=function(){this._coreService.isCursorInitialized||(this._coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))},t.prototype.scrollLines=function(t,r){e.prototype.scrollLines.call(this,t,r),this.refresh(0,this.rows-1)},t.prototype.paste=function(e){a.paste(e,this.textarea,this._coreService)},t.prototype.attachCustomKeyEventHandler=function(e){this._customKeyEventHandler=e},t.prototype.registerLinkMatcher=function(e,t,r){var i=this.linkifier.registerLinkMatcher(e,t,r);return this.refresh(0,this.rows-1),i},t.prototype.deregisterLinkMatcher=function(e){this.linkifier.deregisterLinkMatcher(e)&&this.refresh(0,this.rows-1)},t.prototype.registerLinkProvider=function(e){return this.linkifier2.registerLinkProvider(e)},t.prototype.registerCharacterJoiner=function(e){var t=this._renderService.registerCharacterJoiner(e);return this.refresh(0,this.rows-1),t},t.prototype.deregisterCharacterJoiner=function(e){this._renderService.deregisterCharacterJoiner(e)&&this.refresh(0,this.rows-1)},Object.defineProperty(t.prototype,\"markers\",{get:function(){return this.buffer.markers},enumerable:!1,configurable:!0}),t.prototype.addMarker=function(e){if(this.buffer===this.buffers.normal)return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)},t.prototype.hasSelection=function(){return!!this._selectionService&&this._selectionService.hasSelection},t.prototype.select=function(e,t,r){this._selectionService.setSelection(e,t,r)},t.prototype.getSelection=function(){return this._selectionService?this._selectionService.selectionText:\"\"},t.prototype.getSelectionPosition=function(){if(this._selectionService&&this._selectionService.hasSelection)return{startColumn:this._selectionService.selectionStart[0],startRow:this._selectionService.selectionStart[1],endColumn:this._selectionService.selectionEnd[0],endRow:this._selectionService.selectionEnd[1]}},t.prototype.clearSelection=function(){var e;null===(e=this._selectionService)||void 0===e||e.clearSelection()},t.prototype.selectAll=function(){var e;null===(e=this._selectionService)||void 0===e||e.selectAll()},t.prototype.selectLines=function(e,t){var r;null===(r=this._selectionService)||void 0===r||r.selectLines(e,t)},t.prototype._keyDown=function(e){if(this._keyDownHandled=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(!this._compositionHelper.keydown(e))return this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(),!1;var t=S.evaluateKeyboardEvent(e,this._coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),3===t.type||2===t.type){var r=this.rows-1;return this.scrollLines(2===t.type?-r:r),this.cancel(e,!0)}return 1===t.type&&this.selectAll(),!!this._isThirdLevelShift(this.browser,e)||(t.cancel&&this.cancel(e,!0),!t.key||(t.key!==c.C0.ETX&&t.key!==c.C0.CR||(this.textarea.value=\"\"),this._onKey.fire({key:t.key,domEvent:e}),this._showCursor(),this._coreService.triggerDataEvent(t.key,!0),this.optionsService.options.screenReaderMode?void(this._keyDownHandled=!0):this.cancel(e,!0)))},t.prototype._isThirdLevelShift=function(e,t){var r=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey;return\"keypress\"===t.type?r:r&&(!t.keyCode||t.keyCode>47)},t.prototype._keyUp=function(e){this._customKeyEventHandler&&!1===this._customKeyEventHandler(e)||(function(e){return 16===e.keyCode||17===e.keyCode||18===e.keyCode}(e)||this.focus(),this.updateCursorStyle(e))},t.prototype._keyPress=function(e){var t;if(this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e))&&(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this._coreService.triggerDataEvent(t,!0),!0)},t.prototype.bell=function(){this._soundBell()&&this._soundService.playBellSound()},t.prototype.resize=function(t,r){t!==this.cols||r!==this.rows?e.prototype.resize.call(this,t,r):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()},t.prototype._afterResize=function(e,t){var r,i;null===(r=this._charSizeService)||void 0===r||r.measure(),null===(i=this.viewport)||void 0===i||i.syncScrollArea(!0)},t.prototype.clear=function(){if(0!==this.buffer.ybase||0!==this.buffer.y){this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(var e=1;e<this.rows;e++)this.buffer.lines.push(this.buffer.getBlankLine(C.DEFAULT_ATTR_DATA));this.refresh(0,this.rows-1),this._onScroll.fire(this.buffer.ydisp)}},t.prototype.reset=function(){var t,r;this.options.rows=this.rows,this.options.cols=this.cols;var i=this._customKeyEventHandler;this._setup(),e.prototype.reset.call(this),null===(t=this._selectionService)||void 0===t||t.reset(),this._customKeyEventHandler=i,this.refresh(0,this.rows-1),null===(r=this.viewport)||void 0===r||r.syncScrollArea()},t.prototype._reportWindowsOptions=function(e){if(this._renderService)switch(e){case l.WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:var t=this._renderService.dimensions.scaledCanvasWidth.toFixed(0),r=this._renderService.dimensions.scaledCanvasHeight.toFixed(0);this._coreService.triggerDataEvent(c.C0.ESC+\"[4;\"+r+\";\"+t+\"t\");break;case l.WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:var i=this._renderService.dimensions.scaledCellWidth.toFixed(0),n=this._renderService.dimensions.scaledCellHeight.toFixed(0);this._coreService.triggerDataEvent(c.C0.ESC+\"[6;\"+n+\";\"+i+\"t\")}},t.prototype.cancel=function(e,t){if(this.options.cancelEvents||t)return e.preventDefault(),e.stopPropagation(),!1},t.prototype._visualBell=function(){return!1},t.prototype._soundBell=function(){return\"sound\"===this.options.bellStyle},t}(D.CoreTerminal);t.Terminal=O},function(e,t,r){\"use strict\";var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CompositionHelper=void 0;var o=r(5),s=r(1),a=function(){function e(e,t,r,i,n,o){this._textarea=e,this._compositionView=t,this._bufferService=r,this._optionsService=i,this._charSizeService=n,this._coreService=o,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0}}return Object.defineProperty(e.prototype,\"isComposing\",{get:function(){return this._isComposing},enumerable:!1,configurable:!0}),e.prototype.compositionstart=function(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent=\"\",this._compositionView.classList.add(\"active\")},e.prototype.compositionupdate=function(e){var t=this;this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout((function(){t._compositionPosition.end=t._textarea.value.length}),0)},e.prototype.compositionend=function(){this._finalizeComposition(!0)},e.prototype.keydown=function(e){if(this._isComposing||this._isSendingComposition){if(229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)},e.prototype._finalizeComposition=function(e){var t=this;if(this._compositionView.classList.remove(\"active\"),this._isComposing=!1,e){var r={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout((function(){if(t._isSendingComposition){t._isSendingComposition=!1;var e=void 0;e=t._isComposing?t._textarea.value.substring(r.start,r.end):t._textarea.value.substring(r.start),t._coreService.triggerDataEvent(e,!0)}}),0)}else{this._isSendingComposition=!1;var i=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(i,!0)}},e.prototype._handleAnyTextareaChanges=function(){var e=this,t=this._textarea.value;setTimeout((function(){if(!e._isComposing){var r=e._textarea.value.replace(t,\"\");r.length>0&&e._coreService.triggerDataEvent(r,!0)}}),0)},e.prototype.updateCompositionElements=function(e){var t=this;if(this._isComposing){if(this._bufferService.buffer.isCursorInViewport){var r=Math.ceil(this._charSizeService.height*this._optionsService.options.lineHeight),i=this._bufferService.buffer.y*r,n=this._bufferService.buffer.x*this._charSizeService.width;this._compositionView.style.left=n+\"px\",this._compositionView.style.top=i+\"px\",this._compositionView.style.height=r+\"px\",this._compositionView.style.lineHeight=r+\"px\",this._compositionView.style.fontFamily=this._optionsService.options.fontFamily,this._compositionView.style.fontSize=this._optionsService.options.fontSize+\"px\";var o=this._compositionView.getBoundingClientRect();this._textarea.style.left=n+\"px\",this._textarea.style.top=i+\"px\",this._textarea.style.width=o.width+\"px\",this._textarea.style.height=o.height+\"px\",this._textarea.style.lineHeight=o.height+\"px\"}e||setTimeout((function(){return t.updateCompositionElements(!0)}),0)}},e=i([n(2,s.IBufferService),n(3,s.IOptionsService),n(4,o.ICharSizeService),n(5,s.ICoreService)],e)}();t.CompositionHelper=a},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.Viewport=void 0;var a=r(2),c=r(7),l=r(5),h=r(1),u=function(e){function t(t,r,i,n,o,s,a){var l=e.call(this)||this;return l._scrollLines=t,l._viewportElement=r,l._scrollArea=i,l._bufferService=n,l._optionsService=o,l._charSizeService=s,l._renderService=a,l.scrollBarWidth=0,l._currentRowHeight=0,l._lastRecordedBufferLength=0,l._lastRecordedViewportHeight=0,l._lastRecordedBufferHeight=0,l._lastTouchY=0,l._lastScrollTop=0,l._wheelPartialScroll=0,l._refreshAnimationFrame=null,l._ignoreNextScrollEvent=!1,l.scrollBarWidth=l._viewportElement.offsetWidth-l._scrollArea.offsetWidth||15,l.register(c.addDisposableDomListener(l._viewportElement,\"scroll\",l._onScroll.bind(l))),setTimeout((function(){return l.syncScrollArea()}),0),l}return n(t,e),t.prototype.onThemeChange=function(e){this._viewportElement.style.backgroundColor=e.background.css},t.prototype._refresh=function(e){var t=this;if(e)return this._innerRefresh(),void(null!==this._refreshAnimationFrame&&cancelAnimationFrame(this._refreshAnimationFrame));null===this._refreshAnimationFrame&&(this._refreshAnimationFrame=requestAnimationFrame((function(){return t._innerRefresh()})))},t.prototype._innerRefresh=function(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderService.dimensions.scaledCellHeight/window.devicePixelRatio,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;var e=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderService.dimensions.canvasHeight);this._lastRecordedBufferHeight!==e&&(this._lastRecordedBufferHeight=e,this._scrollArea.style.height=this._lastRecordedBufferHeight+\"px\")}var t=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==t&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=t),this._refreshAnimationFrame=null},t.prototype.syncScrollArea=function(e){if(void 0===e&&(e=!1),this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(e);if(this._lastRecordedViewportHeight===this._renderService.dimensions.canvasHeight){var t=this._bufferService.buffer.ydisp*this._currentRowHeight;this._lastScrollTop===t&&this._lastScrollTop===this._viewportElement.scrollTop&&this._renderService.dimensions.scaledCellHeight/window.devicePixelRatio===this._currentRowHeight||this._refresh(e)}else this._refresh(e)},t.prototype._onScroll=function(e){if(this._lastScrollTop=this._viewportElement.scrollTop,this._viewportElement.offsetParent)if(this._ignoreNextScrollEvent)this._ignoreNextScrollEvent=!1;else{var t=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._scrollLines(t,!0)}},t.prototype._bubbleScroll=function(e,t){var r=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(t<0&&0!==this._viewportElement.scrollTop||t>0&&r<this._lastRecordedBufferHeight)||(e.cancelable&&e.preventDefault(),!1)},t.prototype.onWheel=function(e){var t=this._getPixelsScrolled(e);return 0!==t&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))},t.prototype._getPixelsScrolled=function(e){if(0===e.deltaY)return 0;var t=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_LINE?t*=this._currentRowHeight:e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._currentRowHeight*this._bufferService.rows),t},t.prototype.getLinesScrolled=function(e){if(0===e.deltaY)return 0;var t=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(t/=this._currentRowHeight+0,this._wheelPartialScroll+=t,t=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._bufferService.rows),t},t.prototype._applyScrollModifier=function(e,t){var r=this._optionsService.options.fastScrollModifier;return\"alt\"===r&&t.altKey||\"ctrl\"===r&&t.ctrlKey||\"shift\"===r&&t.shiftKey?e*this._optionsService.options.fastScrollSensitivity*this._optionsService.options.scrollSensitivity:e*this._optionsService.options.scrollSensitivity},t.prototype.onTouchStart=function(e){this._lastTouchY=e.touches[0].pageY},t.prototype.onTouchMove=function(e){var t=this._lastTouchY-e.touches[0].pageY;return this._lastTouchY=e.touches[0].pageY,0!==t&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))},t=o([s(3,h.IBufferService),s(4,h.IOptionsService),s(5,l.ICharSizeService),s(6,l.IRenderService)],t)}(a.Disposable);t.Viewport=u},function(e,t,r){\"use strict\";function i(e){return e.replace(/\\r?\\n/g,\"\\r\")}function n(e,t){return t?\"\u001b[200~\"+e+\"\u001b[201~\":e}function o(e,t,r){e=n(e=i(e),r.decPrivateModes.bracketedPasteMode),r.triggerDataEvent(e,!0),t.value=\"\"}function s(e,t,r){var i=r.getBoundingClientRect(),n=e.clientX-i.left-10,o=e.clientY-i.top-10;t.style.width=\"20px\",t.style.height=\"20px\",t.style.left=n+\"px\",t.style.top=o+\"px\",t.style.zIndex=\"1000\",t.focus()}Object.defineProperty(t,\"__esModule\",{value:!0}),t.rightClickHandler=t.moveTextAreaUnderMouseCursor=t.paste=t.handlePasteEvent=t.copyHandler=t.bracketTextForPaste=t.prepareTextForTerminal=void 0,t.prepareTextForTerminal=i,t.bracketTextForPaste=n,t.copyHandler=function(e,t){e.clipboardData&&e.clipboardData.setData(\"text/plain\",t.selectionText),e.preventDefault()},t.handlePasteEvent=function(e,t,r){e.stopPropagation(),e.clipboardData&&o(e.clipboardData.getData(\"text/plain\"),t,r)},t.paste=o,t.moveTextAreaUnderMouseCursor=s,t.rightClickHandler=function(e,t,r,i,n){s(e,t,r),n&&!i.isClickInSelection(e)&&i.selectWordAtCursor(e),t.value=i.selectionText,t.select()}},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;var o=r(2),s=r(15),a=r(21),c=r(22),l=r(24),h=function(){function e(e){this.table=new Uint8Array(e)}return e.prototype.setDefault=function(e,t){s.fill(this.table,e<<4|t)},e.prototype.add=function(e,t,r,i){this.table[t<<8|e]=r<<4|i},e.prototype.addMany=function(e,t,r,i){for(var n=0;n<e.length;n++)this.table[t<<8|e[n]]=r<<4|i},e}();t.TransitionTable=h;t.VT500_TRANSITION_TABLE=function(){var e=new h(4095),t=Array.apply(null,Array(256)).map((function(e,t){return t})),r=function(e,r){return t.slice(e,r)},i=r(32,127),n=r(0,24);n.push(25),n.push.apply(n,r(28,32));var o,s=r(0,14);for(o in e.setDefault(1,0),e.addMany(i,0,2,0),s)e.addMany([24,26,153,154],o,3,0),e.addMany(r(128,144),o,3,0),e.addMany(r(144,152),o,3,0),e.add(156,o,0,0),e.add(27,o,11,1),e.add(157,o,4,8),e.addMany([152,158,159],o,0,7),e.add(155,o,11,3),e.add(144,o,11,9);return e.addMany(n,0,3,0),e.addMany(n,1,3,1),e.add(127,1,0,1),e.addMany(n,8,0,8),e.addMany(n,3,3,3),e.add(127,3,0,3),e.addMany(n,4,3,4),e.add(127,4,0,4),e.addMany(n,6,3,6),e.addMany(n,5,3,5),e.add(127,5,0,5),e.addMany(n,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(i,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(r(28,32),8,0,8),e.addMany([88,94,95],1,0,7),e.addMany(i,7,0,7),e.addMany(n,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(91,1,11,3),e.addMany(r(64,127),3,7,0),e.addMany(r(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(r(48,60),4,8,4),e.addMany(r(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(r(32,64),6,0,6),e.add(127,6,0,6),e.addMany(r(64,127),6,0,0),e.addMany(r(32,48),3,9,5),e.addMany(r(32,48),5,9,5),e.addMany(r(48,64),5,0,6),e.addMany(r(64,127),5,7,0),e.addMany(r(32,48),4,9,5),e.addMany(r(32,48),1,9,2),e.addMany(r(32,48),2,9,2),e.addMany(r(48,127),2,10,0),e.addMany(r(48,80),1,10,0),e.addMany(r(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(r(96,127),1,10,0),e.add(80,1,11,9),e.addMany(n,9,0,9),e.add(127,9,0,9),e.addMany(r(28,32),9,0,9),e.addMany(r(32,48),9,9,12),e.addMany(r(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(n,11,0,11),e.addMany(r(32,128),11,0,11),e.addMany(r(28,32),11,0,11),e.addMany(n,10,0,10),e.add(127,10,0,10),e.addMany(r(28,32),10,0,10),e.addMany(r(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(r(32,48),10,9,12),e.addMany(n,12,0,12),e.add(127,12,0,12),e.addMany(r(28,32),12,0,12),e.addMany(r(32,48),12,9,12),e.addMany(r(48,64),12,0,11),e.addMany(r(64,127),12,12,13),e.addMany(r(64,127),10,12,13),e.addMany(r(64,127),9,12,13),e.addMany(n,13,13,13),e.addMany(i,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(160,0,2,0),e.add(160,8,5,8),e.add(160,6,0,6),e.add(160,11,0,11),e.add(160,13,13,13),e}();var u=function(e){function r(r){void 0===r&&(r=t.VT500_TRANSITION_TABLE);var i=e.call(this)||this;return i._transitions=r,i.initialState=0,i.currentState=i.initialState,i._params=new a.Params,i._params.addParam(0),i._collect=0,i.precedingCodepoint=0,i._printHandlerFb=function(e,t,r){},i._executeHandlerFb=function(e){},i._csiHandlerFb=function(e,t){},i._escHandlerFb=function(e){},i._errorHandlerFb=function(e){return e},i._printHandler=i._printHandlerFb,i._executeHandlers=Object.create(null),i._csiHandlers=Object.create(null),i._escHandlers=Object.create(null),i._oscParser=new c.OscParser,i._dcsParser=new l.DcsParser,i._errorHandler=i._errorHandlerFb,i.setEscHandler({final:\"\\\\\"},(function(){})),i}return n(r,e),r.prototype._identifier=function(e,t){void 0===t&&(t=[64,126]);var r=0;if(e.prefix){if(e.prefix.length>1)throw new Error(\"only one byte as prefix supported\");if((r=e.prefix.charCodeAt(0))&&60>r||r>63)throw new Error(\"prefix must be in range 0x3c .. 0x3f\")}if(e.intermediates){if(e.intermediates.length>2)throw new Error(\"only two bytes as intermediates are supported\");for(var i=0;i<e.intermediates.length;++i){var n=e.intermediates.charCodeAt(i);if(32>n||n>47)throw new Error(\"intermediate must be in range 0x20 .. 0x2f\");r<<=8,r|=n}}if(1!==e.final.length)throw new Error(\"final must be a single byte\");var o=e.final.charCodeAt(0);if(t[0]>o||o>t[1])throw new Error(\"final must be in range \"+t[0]+\" .. \"+t[1]);return r<<=8,r|=o},r.prototype.identToString=function(e){for(var t=[];e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join(\"\")},r.prototype.dispose=function(){this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null),this._oscParser.dispose(),this._dcsParser.dispose()},r.prototype.setPrintHandler=function(e){this._printHandler=e},r.prototype.clearPrintHandler=function(){this._printHandler=this._printHandlerFb},r.prototype.addEscHandler=function(e,t){var r=this._identifier(e,[48,126]);void 0===this._escHandlers[r]&&(this._escHandlers[r]=[]);var i=this._escHandlers[r];return i.push(t),{dispose:function(){var e=i.indexOf(t);-1!==e&&i.splice(e,1)}}},r.prototype.setEscHandler=function(e,t){this._escHandlers[this._identifier(e,[48,126])]=[t]},r.prototype.clearEscHandler=function(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]},r.prototype.setEscHandlerFallback=function(e){this._escHandlerFb=e},r.prototype.setExecuteHandler=function(e,t){this._executeHandlers[e.charCodeAt(0)]=t},r.prototype.clearExecuteHandler=function(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]},r.prototype.setExecuteHandlerFallback=function(e){this._executeHandlerFb=e},r.prototype.addCsiHandler=function(e,t){var r=this._identifier(e);void 0===this._csiHandlers[r]&&(this._csiHandlers[r]=[]);var i=this._csiHandlers[r];return i.push(t),{dispose:function(){var e=i.indexOf(t);-1!==e&&i.splice(e,1)}}},r.prototype.setCsiHandler=function(e,t){this._csiHandlers[this._identifier(e)]=[t]},r.prototype.clearCsiHandler=function(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]},r.prototype.setCsiHandlerFallback=function(e){this._csiHandlerFb=e},r.prototype.addDcsHandler=function(e,t){return this._dcsParser.addHandler(this._identifier(e),t)},r.prototype.setDcsHandler=function(e,t){this._dcsParser.setHandler(this._identifier(e),t)},r.prototype.clearDcsHandler=function(e){this._dcsParser.clearHandler(this._identifier(e))},r.prototype.setDcsHandlerFallback=function(e){this._dcsParser.setHandlerFallback(e)},r.prototype.addOscHandler=function(e,t){return this._oscParser.addHandler(e,t)},r.prototype.setOscHandler=function(e,t){this._oscParser.setHandler(e,t)},r.prototype.clearOscHandler=function(e){this._oscParser.clearHandler(e)},r.prototype.setOscHandlerFallback=function(e){this._oscParser.setHandlerFallback(e)},r.prototype.setErrorHandler=function(e){this._errorHandler=e},r.prototype.clearErrorHandler=function(){this._errorHandler=this._errorHandlerFb},r.prototype.reset=function(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingCodepoint=0},r.prototype.parse=function(e,t){for(var r=0,i=0,n=this.currentState,o=this._oscParser,s=this._dcsParser,a=this._collect,c=this._params,l=this._transitions.table,h=0;h<t;++h){switch((i=l[n<<8|((r=e[h])<160?r:160)])>>4){case 2:for(var u=h+1;;++u){if(u>=t||(r=e[u])<32||r>126&&r<160){this._printHandler(e,h,u),h=u-1;break}if(++u>=t||(r=e[u])<32||r>126&&r<160){this._printHandler(e,h,u),h=u-1;break}if(++u>=t||(r=e[u])<32||r>126&&r<160){this._printHandler(e,h,u),h=u-1;break}if(++u>=t||(r=e[u])<32||r>126&&r<160){this._printHandler(e,h,u),h=u-1;break}}break;case 3:this._executeHandlers[r]?this._executeHandlers[r]():this._executeHandlerFb(r),this.precedingCodepoint=0;break;case 0:break;case 1:if(this._errorHandler({position:h,code:r,currentState:n,collect:a,params:c,abort:!1}).abort)return;break;case 7:for(var f=this._csiHandlers[a<<8|r],_=f?f.length-1:-1;_>=0&&!1===f[_](c);_--);_<0&&this._csiHandlerFb(a<<8|r,c),this.precedingCodepoint=0;break;case 8:do{switch(r){case 59:c.addParam(0);break;case 58:c.addSubParam(-1);break;default:c.addDigit(r-48)}}while(++h<t&&(r=e[h])>47&&r<60);h--;break;case 9:a<<=8,a|=r;break;case 10:for(var d=this._escHandlers[a<<8|r],p=d?d.length-1:-1;p>=0&&!1===d[p]();p--);p<0&&this._escHandlerFb(a<<8|r),this.precedingCodepoint=0;break;case 11:c.reset(),c.addParam(0),a=0;break;case 12:s.hook(a<<8|r,c);break;case 13:for(var v=h+1;;++v)if(v>=t||24===(r=e[v])||26===r||27===r||r>127&&r<160){s.put(e,h,v),h=v-1;break}break;case 14:s.unhook(24!==r&&26!==r),27===r&&(i|=1),c.reset(),c.addParam(0),a=0,this.precedingCodepoint=0;break;case 4:o.start();break;case 5:for(var g=h+1;;g++)if(g>=t||(r=e[g])<32||r>127&&r<=159){o.put(e,h,g),h=g-1;break}break;case 6:o.end(24!==r&&26!==r),27===r&&(i|=1),c.reset(),c.addParam(0),a=0,this.precedingCodepoint=0}n=15&i}this._collect=a,this.currentState=n},r}(o.Disposable);t.EscapeSequenceParser=u},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.Renderer=void 0;var a=r(41),c=r(47),l=r(48),h=r(49),u=r(29),f=r(2),_=r(5),d=r(1),p=r(25),v=r(0),g=1,y=function(e){function t(t,r,i,n,o,s,f,_,d){var p=e.call(this)||this;p._colors=t,p._screenElement=r,p._bufferService=o,p._charSizeService=s,p._optionsService=f,p._id=g++,p._onRequestRedraw=new v.EventEmitter;var y=p._optionsService.options.allowTransparency;return p._characterJoinerRegistry=new u.CharacterJoinerRegistry(p._bufferService),p._renderLayers=[new a.TextRenderLayer(p._screenElement,0,p._colors,p._characterJoinerRegistry,y,p._id,p._bufferService,f),new c.SelectionRenderLayer(p._screenElement,1,p._colors,p._id,p._bufferService,f),new h.LinkRenderLayer(p._screenElement,2,p._colors,p._id,i,n,p._bufferService,f),new l.CursorRenderLayer(p._screenElement,3,p._colors,p._id,p._onRequestRedraw,p._bufferService,f,_,d)],p.dimensions={scaledCharWidth:0,scaledCharHeight:0,scaledCellWidth:0,scaledCellHeight:0,scaledCharLeft:0,scaledCharTop:0,scaledCanvasWidth:0,scaledCanvasHeight:0,canvasWidth:0,canvasHeight:0,actualCellWidth:0,actualCellHeight:0},p._devicePixelRatio=window.devicePixelRatio,p._updateDimensions(),p.onOptionsChanged(),p}return n(t,e),Object.defineProperty(t.prototype,\"onRequestRedraw\",{get:function(){return this._onRequestRedraw.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){for(var t=0,r=this._renderLayers;t<r.length;t++){r[t].dispose()}e.prototype.dispose.call(this),p.removeTerminalFromCache(this._id)},t.prototype.onDevicePixelRatioChange=function(){this._devicePixelRatio!==window.devicePixelRatio&&(this._devicePixelRatio=window.devicePixelRatio,this.onResize(this._bufferService.cols,this._bufferService.rows))},t.prototype.setColors=function(e){this._colors=e;for(var t=0,r=this._renderLayers;t<r.length;t++){var i=r[t];i.setColors(this._colors),i.reset()}},t.prototype.onResize=function(e,t){this._updateDimensions();for(var r=0,i=this._renderLayers;r<i.length;r++){i[r].resize(this.dimensions)}this._screenElement.style.width=this.dimensions.canvasWidth+\"px\",this._screenElement.style.height=this.dimensions.canvasHeight+\"px\"},t.prototype.onCharSizeChanged=function(){this.onResize(this._bufferService.cols,this._bufferService.rows)},t.prototype.onBlur=function(){this._runOperation((function(e){return e.onBlur()}))},t.prototype.onFocus=function(){this._runOperation((function(e){return e.onFocus()}))},t.prototype.onSelectionChanged=function(e,t,r){void 0===r&&(r=!1),this._runOperation((function(i){return i.onSelectionChanged(e,t,r)}))},t.prototype.onCursorMove=function(){this._runOperation((function(e){return e.onCursorMove()}))},t.prototype.onOptionsChanged=function(){this._runOperation((function(e){return e.onOptionsChanged()}))},t.prototype.clear=function(){this._runOperation((function(e){return e.reset()}))},t.prototype._runOperation=function(e){for(var t=0,r=this._renderLayers;t<r.length;t++){e(r[t])}},t.prototype.renderRows=function(e,t){for(var r=0,i=this._renderLayers;r<i.length;r++){i[r].onGridChanged(e,t)}},t.prototype._updateDimensions=function(){this._charSizeService.hasValidSize&&(this.dimensions.scaledCharWidth=Math.floor(this._charSizeService.width*window.devicePixelRatio),this.dimensions.scaledCharHeight=Math.ceil(this._charSizeService.height*window.devicePixelRatio),this.dimensions.scaledCellHeight=Math.floor(this.dimensions.scaledCharHeight*this._optionsService.options.lineHeight),this.dimensions.scaledCharTop=1===this._optionsService.options.lineHeight?0:Math.round((this.dimensions.scaledCellHeight-this.dimensions.scaledCharHeight)/2),this.dimensions.scaledCellWidth=this.dimensions.scaledCharWidth+Math.round(this._optionsService.options.letterSpacing),this.dimensions.scaledCharLeft=Math.floor(this._optionsService.options.letterSpacing/2),this.dimensions.scaledCanvasHeight=this._bufferService.rows*this.dimensions.scaledCellHeight,this.dimensions.scaledCanvasWidth=this._bufferService.cols*this.dimensions.scaledCellWidth,this.dimensions.canvasHeight=Math.round(this.dimensions.scaledCanvasHeight/window.devicePixelRatio),this.dimensions.canvasWidth=Math.round(this.dimensions.scaledCanvasWidth/window.devicePixelRatio),this.dimensions.actualCellHeight=this.dimensions.canvasHeight/this._bufferService.rows,this.dimensions.actualCellWidth=this.dimensions.canvasWidth/this._bufferService.cols)},t.prototype.registerCharacterJoiner=function(e){return this._characterJoinerRegistry.registerCharacterJoiner(e)},t.prototype.deregisterCharacterJoiner=function(e){return this._characterJoinerRegistry.deregisterCharacterJoiner(e)},t=o([s(4,d.IBufferService),s(5,_.ICharSizeService),s(6,d.IOptionsService),s(7,d.ICoreService),s(8,_.ICoreBrowserService)],t)}(f.Disposable);t.Renderer=y},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.TextRenderLayer=void 0;var o=r(42),s=r(13),a=r(6),c=r(3),l=r(29),h=r(4),u=function(e){function t(t,r,i,n,s,a,c,l){var u=e.call(this,t,\"text\",r,s,i,a,c,l)||this;return u._characterWidth=0,u._characterFont=\"\",u._characterOverlapCache={},u._workCell=new h.CellData,u._state=new o.GridCache,u._characterJoinerRegistry=n,u}return n(t,e),t.prototype.resize=function(t){e.prototype.resize.call(this,t);var r=this._getFont(!1,!1);this._characterWidth===t.scaledCharWidth&&this._characterFont===r||(this._characterWidth=t.scaledCharWidth,this._characterFont=r,this._characterOverlapCache={}),this._state.clear(),this._state.resize(this._bufferService.cols,this._bufferService.rows)},t.prototype.reset=function(){this._state.clear(),this._clearAll()},t.prototype._forEachCell=function(e,t,r,i){for(var n=e;n<=t;n++)for(var o=n+this._bufferService.buffer.ydisp,s=this._bufferService.buffer.lines.get(o),a=r?r.getJoinedCharacters(o):[],h=0;h<this._bufferService.cols;h++){s.loadCell(h,this._workCell);var u=this._workCell,f=!1,_=h;if(0!==u.getWidth()){if(a.length>0&&h===a[0][0]){f=!0;var d=a.shift();u=new l.JoinedCellData(this._workCell,s.translateToString(!0,d[0],d[1]),d[1]-d[0]),_=d[1]-1}!f&&this._isOverlapping(u)&&_<s.length-1&&s.getCodePoint(_+1)===c.NULL_CELL_CODE&&(u.content&=-12582913,u.content|=2<<22),i(u,h,n),h=_}}},t.prototype._drawBackground=function(e,t){var r=this,i=this._ctx,n=this._bufferService.cols,o=0,s=0,c=null;i.save(),this._forEachCell(e,t,null,(function(e,t,l){var h=null;e.isInverse()?h=e.isFgDefault()?r._colors.foreground.css:e.isFgRGB()?\"rgb(\"+a.AttributeData.toColorRGB(e.getFgColor()).join(\",\")+\")\":r._colors.ansi[e.getFgColor()].css:e.isBgRGB()?h=\"rgb(\"+a.AttributeData.toColorRGB(e.getBgColor()).join(\",\")+\")\":e.isBgPalette()&&(h=r._colors.ansi[e.getBgColor()].css),null===c&&(o=t,s=l),l!==s?(i.fillStyle=c||\"\",r._fillCells(o,s,n-o,1),o=t,s=l):c!==h&&(i.fillStyle=c||\"\",r._fillCells(o,s,t-o,1),o=t,s=l),c=h})),null!==c&&(i.fillStyle=c,this._fillCells(o,s,n-o,1)),i.restore()},t.prototype._drawForeground=function(e,t){var r=this;this._forEachCell(e,t,this._characterJoinerRegistry,(function(e,t,i){if(!e.isInvisible()&&(r._drawChars(e,t,i),e.isUnderline())){if(r._ctx.save(),e.isInverse())if(e.isBgDefault())r._ctx.fillStyle=r._colors.background.css;else if(e.isBgRGB())r._ctx.fillStyle=\"rgb(\"+a.AttributeData.toColorRGB(e.getBgColor()).join(\",\")+\")\";else{var n=e.getBgColor();r._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&n<8&&(n+=8),r._ctx.fillStyle=r._colors.ansi[n].css}else if(e.isFgDefault())r._ctx.fillStyle=r._colors.foreground.css;else if(e.isFgRGB())r._ctx.fillStyle=\"rgb(\"+a.AttributeData.toColorRGB(e.getFgColor()).join(\",\")+\")\";else{var o=e.getFgColor();r._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&o<8&&(o+=8),r._ctx.fillStyle=r._colors.ansi[o].css}r._fillBottomLineAtCells(t,i,e.getWidth()),r._ctx.restore()}}))},t.prototype.onGridChanged=function(e,t){0!==this._state.cache.length&&(this._charAtlas&&this._charAtlas.beginFrame(),this._clearCells(0,e,this._bufferService.cols,t-e+1),this._drawBackground(e,t),this._drawForeground(e,t))},t.prototype.onOptionsChanged=function(){this._setTransparency(this._optionsService.options.allowTransparency)},t.prototype._isOverlapping=function(e){if(1!==e.getWidth())return!1;if(e.getCode()<256)return!1;var t=e.getChars();if(this._characterOverlapCache.hasOwnProperty(t))return this._characterOverlapCache[t];this._ctx.save(),this._ctx.font=this._characterFont;var r=Math.floor(this._ctx.measureText(t).width)>this._characterWidth;return this._ctx.restore(),this._characterOverlapCache[t]=r,r},t}(s.BaseRenderLayer);t.TextRenderLayer=u},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.GridCache=void 0;var i=function(){function e(){this.cache=[]}return e.prototype.resize=function(e,t){for(var r=0;r<e;r++){this.cache.length<=r&&this.cache.push([]);for(var i=this.cache[r].length;i<t;i++)this.cache[r].push(void 0);this.cache[r].length=t}this.cache.length=e},e.prototype.clear=function(){for(var e=0;e<this.cache.length;e++)for(var t=0;t<this.cache[e].length;t++)this.cache[e][t]=void 0},e}();t.GridCache=i},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.NoneCharAtlas=t.DynamicCharAtlas=t.getGlyphCacheKey=void 0;var o=r(9),s=r(44),a=r(27),c=r(46),l=r(11),h=r(28),u=r(10),f={css:\"rgba(0, 0, 0, 0)\",rgba:0};function _(e){return e.code<<21|e.bg<<12|e.fg<<3|(e.bold?0:4)+(e.dim?0:2)+(e.italic?0:1)}t.getGlyphCacheKey=_;var d=function(e){function t(t,r){var i=e.call(this)||this;i._config=r,i._drawToCacheCount=0,i._glyphsWaitingOnBitmap=[],i._bitmapCommitTimeout=null,i._bitmap=null,i._cacheCanvas=t.createElement(\"canvas\"),i._cacheCanvas.width=1024,i._cacheCanvas.height=1024,i._cacheCtx=h.throwIfFalsy(i._cacheCanvas.getContext(\"2d\",{alpha:!0}));var n=t.createElement(\"canvas\");n.width=i._config.scaledCharWidth,n.height=i._config.scaledCharHeight,i._tmpCtx=h.throwIfFalsy(n.getContext(\"2d\",{alpha:i._config.allowTransparency})),i._width=Math.floor(1024/i._config.scaledCharWidth),i._height=Math.floor(1024/i._config.scaledCharHeight);var o=i._width*i._height;return i._cacheMap=new c.LRUMap(o),i._cacheMap.prealloc(o),i}return n(t,e),t.prototype.dispose=function(){null!==this._bitmapCommitTimeout&&(window.clearTimeout(this._bitmapCommitTimeout),this._bitmapCommitTimeout=null)},t.prototype.beginFrame=function(){this._drawToCacheCount=0},t.prototype.draw=function(e,t,r,i){if(32===t.code)return!0;if(!this._canCache(t))return!1;var n=_(t),o=this._cacheMap.get(n);if(null!=o)return this._drawFromCache(e,o,r,i),!0;if(this._drawToCacheCount<100){var s=void 0;s=this._cacheMap.size<this._cacheMap.capacity?this._cacheMap.size:this._cacheMap.peek().index;var a=this._drawToCache(t,s);return this._cacheMap.set(n,a),this._drawFromCache(e,a,r,i),!0}return!1},t.prototype._canCache=function(e){return e.code<256},t.prototype._toCoordinateX=function(e){return e%this._width*this._config.scaledCharWidth},t.prototype._toCoordinateY=function(e){return Math.floor(e/this._width)*this._config.scaledCharHeight},t.prototype._drawFromCache=function(e,t,r,i){if(!t.isEmpty){var n=this._toCoordinateX(t.index),o=this._toCoordinateY(t.index);e.drawImage(t.inBitmap?this._bitmap:this._cacheCanvas,n,o,this._config.scaledCharWidth,this._config.scaledCharHeight,r,i,this._config.scaledCharWidth,this._config.scaledCharHeight)}},t.prototype._getColorFromAnsiIndex=function(e){return e<this._config.colors.ansi.length?this._config.colors.ansi[e]:a.DEFAULT_ANSI_COLORS[e]},t.prototype._getBackgroundColor=function(e){return this._config.allowTransparency?f:e.bg===o.INVERTED_DEFAULT_COLOR?this._config.colors.foreground:e.bg<256?this._getColorFromAnsiIndex(e.bg):this._config.colors.background},t.prototype._getForegroundColor=function(e){return e.fg===o.INVERTED_DEFAULT_COLOR?u.color.opaque(this._config.colors.background):e.fg<256?this._getColorFromAnsiIndex(e.fg):this._config.colors.foreground},t.prototype._drawToCache=function(e,t){this._drawToCacheCount++,this._tmpCtx.save();var r=this._getBackgroundColor(e);this._tmpCtx.globalCompositeOperation=\"copy\",this._tmpCtx.fillStyle=r.css,this._tmpCtx.fillRect(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight),this._tmpCtx.globalCompositeOperation=\"source-over\";var i=e.bold?this._config.fontWeightBold:this._config.fontWeight,n=e.italic?\"italic\":\"\";this._tmpCtx.font=n+\" \"+i+\" \"+this._config.fontSize*this._config.devicePixelRatio+\"px \"+this._config.fontFamily,this._tmpCtx.textBaseline=\"middle\",this._tmpCtx.fillStyle=this._getForegroundColor(e).css,e.dim&&(this._tmpCtx.globalAlpha=o.DIM_OPACITY),this._tmpCtx.fillText(e.chars,0,this._config.scaledCharHeight/2),this._tmpCtx.restore();var s=this._tmpCtx.getImageData(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight),a=!1;this._config.allowTransparency||(a=function(e,t){for(var r=!0,i=t.rgba>>>24,n=t.rgba>>>16&255,o=t.rgba>>>8&255,s=0;s<e.data.length;s+=4)e.data[s]===i&&e.data[s+1]===n&&e.data[s+2]===o?e.data[s+3]=0:r=!1;return r}(s,r));var c=this._toCoordinateX(t),l=this._toCoordinateY(t);this._cacheCtx.putImageData(s,c,l);var h={index:t,isEmpty:a,inBitmap:!1};return this._addGlyphToBitmap(h),h},t.prototype._addGlyphToBitmap=function(e){var t=this;!(\"createImageBitmap\"in window)||l.isFirefox||l.isSafari||(this._glyphsWaitingOnBitmap.push(e),null===this._bitmapCommitTimeout&&(this._bitmapCommitTimeout=window.setTimeout((function(){return t._generateBitmap()}),100)))},t.prototype._generateBitmap=function(){var e=this,t=this._glyphsWaitingOnBitmap;this._glyphsWaitingOnBitmap=[],window.createImageBitmap(this._cacheCanvas).then((function(r){e._bitmap=r;for(var i=0;i<t.length;i++){t[i].inBitmap=!0}})),this._bitmapCommitTimeout=null},t}(s.BaseCharAtlas);t.DynamicCharAtlas=d;var p=function(e){function t(t,r){return e.call(this)||this}return n(t,e),t.prototype.draw=function(e,t,r,i){return!1},t}(s.BaseCharAtlas);t.NoneCharAtlas=p},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.BaseCharAtlas=void 0;var i=function(){function e(){this._didWarmUp=!1}return e.prototype.dispose=function(){},e.prototype.warmUp=function(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)},e.prototype._doWarmUp=function(){},e.prototype.beginFrame=function(){},e}();t.BaseCharAtlas=i},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.ColorContrastCache=void 0;var i=function(){function e(){this._color={},this._rgba={}}return e.prototype.clear=function(){this._color={},this._rgba={}},e.prototype.setCss=function(e,t,r){this._rgba[e]||(this._rgba[e]={}),this._rgba[e][t]=r},e.prototype.getCss=function(e,t){return this._rgba[e]?this._rgba[e][t]:void 0},e.prototype.setColor=function(e,t,r){this._color[e]||(this._color[e]={}),this._color[e][t]=r},e.prototype.getColor=function(e,t){return this._color[e]?this._color[e][t]:void 0},e}();t.ColorContrastCache=i},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.LRUMap=void 0;var i=function(){function e(e){this.capacity=e,this._map={},this._head=null,this._tail=null,this._nodePool=[],this.size=0}return e.prototype._unlinkNode=function(e){var t=e.prev,r=e.next;e===this._head&&(this._head=r),e===this._tail&&(this._tail=t),null!==t&&(t.next=r),null!==r&&(r.prev=t)},e.prototype._appendNode=function(e){var t=this._tail;null!==t&&(t.next=e),e.prev=t,e.next=null,this._tail=e,null===this._head&&(this._head=e)},e.prototype.prealloc=function(e){for(var t=this._nodePool,r=0;r<e;r++)t.push({prev:null,next:null,key:null,value:null})},e.prototype.get=function(e){var t=this._map[e];return void 0!==t?(this._unlinkNode(t),this._appendNode(t),t.value):null},e.prototype.peekValue=function(e){var t=this._map[e];return void 0!==t?t.value:null},e.prototype.peek=function(){var e=this._head;return null===e?null:e.value},e.prototype.set=function(e,t){var r=this._map[e];if(void 0!==r)r=this._map[e],this._unlinkNode(r),r.value=t;else if(this.size>=this.capacity)r=this._head,this._unlinkNode(r),delete this._map[r.key],r.key=e,r.value=t,this._map[e]=r;else{var i=this._nodePool;i.length>0?((r=i.pop()).key=e,r.value=t):r={prev:null,next:null,key:e,value:t},this._map[e]=r,this.size++}this._appendNode(r)},e}();t.LRUMap=i},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.SelectionRenderLayer=void 0;var o=function(e){function t(t,r,i,n,o,s){var a=e.call(this,t,\"selection\",r,!0,i,n,o,s)||this;return a._clearState(),a}return n(t,e),t.prototype._clearState=function(){this._state={start:void 0,end:void 0,columnSelectMode:void 0,ydisp:void 0}},t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._clearState()},t.prototype.reset=function(){this._state.start&&this._state.end&&(this._clearState(),this._clearAll())},t.prototype.onSelectionChanged=function(e,t,r){if(this._didStateChange(e,t,r,this._bufferService.buffer.ydisp))if(this._clearAll(),e&&t){var i=e[1]-this._bufferService.buffer.ydisp,n=t[1]-this._bufferService.buffer.ydisp,o=Math.max(i,0),s=Math.min(n,this._bufferService.rows-1);if(o>=this._bufferService.rows||s<0)this._state.ydisp=this._bufferService.buffer.ydisp;else{if(this._ctx.fillStyle=this._colors.selectionTransparent.css,r){var a=e[0],c=t[0]-a,l=s-o+1;this._fillCells(a,o,c,l)}else{a=i===o?e[0]:0;var h=o===n?t[0]:this._bufferService.cols;this._fillCells(a,o,h-a,1);var u=Math.max(s-o-1,0);if(this._fillCells(0,o+1,this._bufferService.cols,u),o!==s){var f=n===s?t[0]:this._bufferService.cols;this._fillCells(0,s,f,1)}}this._state.start=[e[0],e[1]],this._state.end=[t[0],t[1]],this._state.columnSelectMode=r,this._state.ydisp=this._bufferService.buffer.ydisp}}else this._clearState()},t.prototype._didStateChange=function(e,t,r,i){return!this._areCoordinatesEqual(e,this._state.start)||!this._areCoordinatesEqual(t,this._state.end)||r!==this._state.columnSelectMode||i!==this._state.ydisp},t.prototype._areCoordinatesEqual=function(e,t){return!(!e||!t)&&(e[0]===t[0]&&e[1]===t[1])},t}(r(13).BaseRenderLayer);t.SelectionRenderLayer=o},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.CursorRenderLayer=void 0;var o=r(13),s=r(4),a=function(e){function t(t,r,i,n,o,a,c,l,h){var u=e.call(this,t,\"cursor\",r,!0,i,n,a,c)||this;return u._onRequestRedraw=o,u._coreService=l,u._coreBrowserService=h,u._cell=new s.CellData,u._state={x:0,y:0,isFocused:!1,style:\"\",width:0},u._cursorRenderers={bar:u._renderBarCursor.bind(u),block:u._renderBlockCursor.bind(u),underline:u._renderUnderlineCursor.bind(u)},u}return n(t,e),t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._state={x:0,y:0,isFocused:!1,style:\"\",width:0}},t.prototype.reset=function(){this._clearCursor(),this._cursorBlinkStateManager&&(this._cursorBlinkStateManager.dispose(),this._cursorBlinkStateManager=void 0,this.onOptionsChanged())},t.prototype.onBlur=function(){this._cursorBlinkStateManager&&this._cursorBlinkStateManager.pause(),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onFocus=function(){this._cursorBlinkStateManager?this._cursorBlinkStateManager.resume():this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onOptionsChanged=function(){var e,t=this;this._optionsService.options.cursorBlink?this._cursorBlinkStateManager||(this._cursorBlinkStateManager=new c(this._coreBrowserService.isFocused,(function(){t._render(!0)}))):(null===(e=this._cursorBlinkStateManager)||void 0===e||e.dispose(),this._cursorBlinkStateManager=void 0),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onCursorMove=function(){this._cursorBlinkStateManager&&this._cursorBlinkStateManager.restartBlinkAnimation()},t.prototype.onGridChanged=function(e,t){!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isPaused?this._render(!1):this._cursorBlinkStateManager.restartBlinkAnimation()},t.prototype._render=function(e){if(this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden){var t=this._bufferService.buffer.ybase+this._bufferService.buffer.y,r=t-this._bufferService.buffer.ydisp;if(r<0||r>=this._bufferService.rows)this._clearCursor();else{var i=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1);if(this._bufferService.buffer.lines.get(t).loadCell(i,this._cell),void 0!==this._cell.content){if(!this._coreBrowserService.isFocused){this._clearCursor(),this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css;var n=this._optionsService.options.cursorStyle;return n&&\"block\"!==n?this._cursorRenderers[n](i,r,this._cell):this._renderBlurCursor(i,r,this._cell),this._ctx.restore(),this._state.x=i,this._state.y=r,this._state.isFocused=!1,this._state.style=n,void(this._state.width=this._cell.getWidth())}if(!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isCursorVisible){if(this._state){if(this._state.x===i&&this._state.y===r&&this._state.isFocused===this._coreBrowserService.isFocused&&this._state.style===this._optionsService.options.cursorStyle&&this._state.width===this._cell.getWidth())return;this._clearCursor()}this._ctx.save(),this._cursorRenderers[this._optionsService.options.cursorStyle||\"block\"](i,r,this._cell),this._ctx.restore(),this._state.x=i,this._state.y=r,this._state.isFocused=!1,this._state.style=this._optionsService.options.cursorStyle,this._state.width=this._cell.getWidth()}else this._clearCursor()}}}else this._clearCursor()},t.prototype._clearCursor=function(){this._state&&(this._clearCells(this._state.x,this._state.y,this._state.width,1),this._state={x:0,y:0,isFocused:!1,style:\"\",width:0})},t.prototype._renderBarCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillLeftLineAtCell(e,t,this._optionsService.options.cursorWidth),this._ctx.restore()},t.prototype._renderBlockCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillCells(e,t,r.getWidth(),1),this._ctx.fillStyle=this._colors.cursorAccent.css,this._fillCharTrueColor(r,e,t),this._ctx.restore()},t.prototype._renderUnderlineCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillBottomLineAtCells(e,t),this._ctx.restore()},t.prototype._renderBlurCursor=function(e,t,r){this._ctx.save(),this._ctx.strokeStyle=this._colors.cursor.css,this._strokeRectAtCell(e,t,r.getWidth(),1),this._ctx.restore()},t}(o.BaseRenderLayer);t.CursorRenderLayer=a;var c=function(){function e(e,t){this._renderCallback=t,this.isCursorVisible=!0,e&&this._restartInterval()}return Object.defineProperty(e.prototype,\"isPaused\",{get:function(){return!(this._blinkStartTimeout||this._blinkInterval)},enumerable:!1,configurable:!0}),e.prototype.dispose=function(){this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.restartBlinkAnimation=function(){var e=this;this.isPaused||(this._animationTimeRestarted=Date.now(),this.isCursorVisible=!0,this._animationFrame||(this._animationFrame=window.requestAnimationFrame((function(){e._renderCallback(),e._animationFrame=void 0}))))},e.prototype._restartInterval=function(e){var t=this;void 0===e&&(e=600),this._blinkInterval&&window.clearInterval(this._blinkInterval),this._blinkStartTimeout=window.setTimeout((function(){if(t._animationTimeRestarted){var e=600-(Date.now()-t._animationTimeRestarted);if(t._animationTimeRestarted=void 0,e>0)return void t._restartInterval(e)}t.isCursorVisible=!1,t._animationFrame=window.requestAnimationFrame((function(){t._renderCallback(),t._animationFrame=void 0})),t._blinkInterval=window.setInterval((function(){if(t._animationTimeRestarted){var e=600-(Date.now()-t._animationTimeRestarted);return t._animationTimeRestarted=void 0,void t._restartInterval(e)}t.isCursorVisible=!t.isCursorVisible,t._animationFrame=window.requestAnimationFrame((function(){t._renderCallback(),t._animationFrame=void 0}))}),600)}),e)},e.prototype.pause=function(){this.isCursorVisible=!0,this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.resume=function(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this.restartBlinkAnimation()},e}()},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.LinkRenderLayer=void 0;var o=r(13),s=r(9),a=r(26),c=function(e){function t(t,r,i,n,o,s,a,c){var l=e.call(this,t,\"link\",r,!0,i,n,a,c)||this;return o.onShowLinkUnderline((function(e){return l._onShowLinkUnderline(e)})),o.onHideLinkUnderline((function(e){return l._onHideLinkUnderline(e)})),s.onShowLinkUnderline((function(e){return l._onShowLinkUnderline(e)})),s.onHideLinkUnderline((function(e){return l._onHideLinkUnderline(e)})),l}return n(t,e),t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._state=void 0},t.prototype.reset=function(){this._clearCurrentLink()},t.prototype._clearCurrentLink=function(){if(this._state){this._clearCells(this._state.x1,this._state.y1,this._state.cols-this._state.x1,1);var e=this._state.y2-this._state.y1-1;e>0&&this._clearCells(0,this._state.y1+1,this._state.cols,e),this._clearCells(0,this._state.y2,this._state.x2,1),this._state=void 0}},t.prototype._onShowLinkUnderline=function(e){if(e.fg===s.INVERTED_DEFAULT_COLOR?this._ctx.fillStyle=this._colors.background.css:e.fg&&a.is256Color(e.fg)?this._ctx.fillStyle=this._colors.ansi[e.fg].css:this._ctx.fillStyle=this._colors.foreground.css,e.y1===e.y2)this._fillBottomLineAtCells(e.x1,e.y1,e.x2-e.x1);else{this._fillBottomLineAtCells(e.x1,e.y1,e.cols-e.x1);for(var t=e.y1+1;t<e.y2;t++)this._fillBottomLineAtCells(0,t,e.cols);this._fillBottomLineAtCells(0,e.y2,e.x2)}this._state=e},t.prototype._onHideLinkUnderline=function(e){this._clearCurrentLink()},t}(o.BaseRenderLayer);t.LinkRenderLayer=c},function(e,t,r){\"use strict\";var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.MouseZone=t.Linkifier=void 0;var o=r(0),s=r(1),a=function(){function e(e,t,r){this._bufferService=e,this._logService=t,this._unicodeService=r,this._linkMatchers=[],this._nextLinkMatcherId=0,this._onShowLinkUnderline=new o.EventEmitter,this._onHideLinkUnderline=new o.EventEmitter,this._onLinkTooltip=new o.EventEmitter,this._rowsToLinkify={start:void 0,end:void 0}}return Object.defineProperty(e.prototype,\"onShowLinkUnderline\",{get:function(){return this._onShowLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onHideLinkUnderline\",{get:function(){return this._onHideLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onLinkTooltip\",{get:function(){return this._onLinkTooltip.event},enumerable:!1,configurable:!0}),e.prototype.attachToDom=function(e,t){this._element=e,this._mouseZoneManager=t},e.prototype.linkifyRows=function(t,r){var i=this;this._mouseZoneManager&&(void 0===this._rowsToLinkify.start||void 0===this._rowsToLinkify.end?(this._rowsToLinkify.start=t,this._rowsToLinkify.end=r):(this._rowsToLinkify.start=Math.min(this._rowsToLinkify.start,t),this._rowsToLinkify.end=Math.max(this._rowsToLinkify.end,r)),this._mouseZoneManager.clearAll(t,r),this._rowsTimeoutId&&clearTimeout(this._rowsTimeoutId),this._rowsTimeoutId=setTimeout((function(){return i._linkifyRows()}),e._timeBeforeLatency))},e.prototype._linkifyRows=function(){this._rowsTimeoutId=void 0;var e=this._bufferService.buffer;if(void 0!==this._rowsToLinkify.start&&void 0!==this._rowsToLinkify.end){var t=e.ydisp+this._rowsToLinkify.start;if(!(t>=e.lines.length)){for(var r=e.ydisp+Math.min(this._rowsToLinkify.end,this._bufferService.rows)+1,i=Math.ceil(2e3/this._bufferService.cols),n=this._bufferService.buffer.iterator(!1,t,r,i,i);n.hasNext();)for(var o=n.next(),s=0;s<this._linkMatchers.length;s++)this._doLinkifyRow(o.range.first,o.content,this._linkMatchers[s]);this._rowsToLinkify.start=void 0,this._rowsToLinkify.end=void 0}}else this._logService.debug(\"_rowToLinkify was unset before _linkifyRows was called\")},e.prototype.registerLinkMatcher=function(e,t,r){if(void 0===r&&(r={}),!t)throw new Error(\"handler must be defined\");var i={id:this._nextLinkMatcherId++,regex:e,handler:t,matchIndex:r.matchIndex,validationCallback:r.validationCallback,hoverTooltipCallback:r.tooltipCallback,hoverLeaveCallback:r.leaveCallback,willLinkActivate:r.willLinkActivate,priority:r.priority||0};return this._addLinkMatcherToList(i),i.id},e.prototype._addLinkMatcherToList=function(e){if(0!==this._linkMatchers.length){for(var t=this._linkMatchers.length-1;t>=0;t--)if(e.priority<=this._linkMatchers[t].priority)return void this._linkMatchers.splice(t+1,0,e);this._linkMatchers.splice(0,0,e)}else this._linkMatchers.push(e)},e.prototype.deregisterLinkMatcher=function(e){for(var t=0;t<this._linkMatchers.length;t++)if(this._linkMatchers[t].id===e)return this._linkMatchers.splice(t,1),!0;return!1},e.prototype._doLinkifyRow=function(e,t,r){for(var i,n=this,o=new RegExp(r.regex.source,(r.regex.flags||\"\")+\"g\"),s=-1,a=function(){var a=i[\"number\"!=typeof r.matchIndex?0:r.matchIndex];if(!a)return c._logService.debug(\"match found without corresponding matchIndex\",i,r),\"break\";if(s=t.indexOf(a,s+1),o.lastIndex=s+a.length,s<0)return\"break\";var l=c._bufferService.buffer.stringIndexToBufferIndex(e,s);if(l[0]<0)return\"break\";var h=c._bufferService.buffer.lines.get(l[0]);if(!h)return\"break\";var u=h.getFg(l[1]),f=u?u>>9&511:void 0;r.validationCallback?r.validationCallback(a,(function(e){n._rowsTimeoutId||e&&n._addLink(l[1],l[0]-n._bufferService.buffer.ydisp,a,r,f)})):c._addLink(l[1],l[0]-c._bufferService.buffer.ydisp,a,r,f)},c=this;null!==(i=o.exec(t));){if(\"break\"===a())break}},e.prototype._addLink=function(e,t,r,i,n){var o=this;if(this._mouseZoneManager&&this._element){var s=this._unicodeService.getStringCellWidth(r),a=e%this._bufferService.cols,l=t+Math.floor(e/this._bufferService.cols),h=(a+s)%this._bufferService.cols,u=l+Math.floor((a+s)/this._bufferService.cols);0===h&&(h=this._bufferService.cols,u--),this._mouseZoneManager.add(new c(a+1,l+1,h+1,u+1,(function(e){if(i.handler)return i.handler(e,r);var t=window.open();t?(t.opener=null,t.location.href=r):console.warn(\"Opening link blocked as opener could not be cleared\")}),(function(){o._onShowLinkUnderline.fire(o._createLinkHoverEvent(a,l,h,u,n)),o._element.classList.add(\"xterm-cursor-pointer\")}),(function(e){o._onLinkTooltip.fire(o._createLinkHoverEvent(a,l,h,u,n)),i.hoverTooltipCallback&&i.hoverTooltipCallback(e,r,{start:{x:a,y:l},end:{x:h,y:u}})}),(function(){o._onHideLinkUnderline.fire(o._createLinkHoverEvent(a,l,h,u,n)),o._element.classList.remove(\"xterm-cursor-pointer\"),i.hoverLeaveCallback&&i.hoverLeaveCallback()}),(function(e){return!i.willLinkActivate||i.willLinkActivate(e,r)})))}},e.prototype._createLinkHoverEvent=function(e,t,r,i,n){return{x1:e,y1:t,x2:r,y2:i,cols:this._bufferService.cols,fg:n}},e._timeBeforeLatency=200,e=i([n(0,s.IBufferService),n(1,s.ILogService),n(2,s.IUnicodeService)],e)}();t.Linkifier=a;var c=function(e,t,r,i,n,o,s,a,c){this.x1=e,this.y1=t,this.x2=r,this.y2=i,this.clickCallback=n,this.hoverCallback=o,this.tooltipCallback=s,this.leaveCallback=a,this.willLinkActivate=c};t.MouseZone=c},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.SelectionService=void 0;var a=r(11),c=r(52),l=r(4),h=r(0),u=r(5),f=r(1),_=r(30),d=r(53),p=r(2),v=String.fromCharCode(160),g=new RegExp(v,\"g\"),y=function(e){function t(t,r,i,n,o,s,a){var u=e.call(this)||this;return u._element=t,u._screenElement=r,u._bufferService=i,u._coreService=n,u._mouseService=o,u._optionsService=s,u._renderService=a,u._dragScrollAmount=0,u._enabled=!0,u._workCell=new l.CellData,u._mouseDownTimeStamp=0,u._onLinuxMouseSelection=u.register(new h.EventEmitter),u._onRedrawRequest=u.register(new h.EventEmitter),u._onSelectionChange=u.register(new h.EventEmitter),u._onRequestScrollLines=u.register(new h.EventEmitter),u._mouseMoveListener=function(e){return u._onMouseMove(e)},u._mouseUpListener=function(e){return u._onMouseUp(e)},u._coreService.onUserInput((function(){u.hasSelection&&u.clearSelection()})),u._trimListener=u._bufferService.buffer.lines.onTrim((function(e){return u._onTrim(e)})),u.register(u._bufferService.buffers.onBufferActivate((function(e){return u._onBufferActivate(e)}))),u.enable(),u._model=new c.SelectionModel(u._bufferService),u._activeSelectionMode=0,u}return n(t,e),Object.defineProperty(t.prototype,\"onLinuxMouseSelection\",{get:function(){return this._onLinuxMouseSelection.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRequestRedraw\",{get:function(){return this._onRedrawRequest.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onSelectionChange\",{get:function(){return this._onSelectionChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRequestScrollLines\",{get:function(){return this._onRequestScrollLines.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this._removeMouseDownListeners()},t.prototype.reset=function(){this.clearSelection()},t.prototype.disable=function(){this.clearSelection(),this._enabled=!1},t.prototype.enable=function(){this._enabled=!0},Object.defineProperty(t.prototype,\"selectionStart\",{get:function(){return this._model.finalSelectionStart},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"selectionEnd\",{get:function(){return this._model.finalSelectionEnd},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"hasSelection\",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t)&&(e[0]!==t[0]||e[1]!==t[1])},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"selectionText\",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return\"\";var r=this._bufferService.buffer,i=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return\"\";for(var n=e[1];n<=t[1];n++){var o=r.translateBufferLineToString(n,!0,e[0],t[0]);i.push(o)}}else{var s=e[1]===t[1]?t[0]:void 0;i.push(r.translateBufferLineToString(e[1],!0,e[0],s));for(n=e[1]+1;n<=t[1]-1;n++){var c=r.lines.get(n);o=r.translateBufferLineToString(n,!0);c&&c.isWrapped?i[i.length-1]+=o:i.push(o)}if(e[1]!==t[1]){c=r.lines.get(t[1]),o=r.translateBufferLineToString(t[1],!0,0,t[0]);c&&c.isWrapped?i[i.length-1]+=o:i.push(o)}}return i.map((function(e){return e.replace(g,\" \")})).join(a.isWindows?\"\\r\\n\":\"\\n\")},enumerable:!1,configurable:!0}),t.prototype.clearSelection=function(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()},t.prototype.refresh=function(e){var t=this;(this._refreshAnimationFrame||(this._refreshAnimationFrame=window.requestAnimationFrame((function(){return t._refresh()}))),a.isLinux&&e)&&(this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText))},t.prototype._refresh=function(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})},t.prototype.isClickInSelection=function(e){var t=this._getMouseBufferCoords(e),r=this._model.finalSelectionStart,i=this._model.finalSelectionEnd;return!!(r&&i&&t)&&this._areCoordsInSelection(t,r,i)},t.prototype._areCoordsInSelection=function(e,t,r){return e[1]>t[1]&&e[1]<r[1]||t[1]===r[1]&&e[1]===t[1]&&e[0]>=t[0]&&e[0]<r[0]||t[1]<r[1]&&e[1]===r[1]&&e[0]<r[0]||t[1]<r[1]&&e[1]===t[1]&&e[0]>=t[0]},t.prototype.selectWordAtCursor=function(e){var t=this._getMouseBufferCoords(e);t&&(this._selectWordAt(t,!1),this._model.selectionEnd=void 0,this.refresh(!0))},t.prototype.selectAll=function(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()},t.prototype.selectLines=function(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()},t.prototype._onTrim=function(e){this._model.onTrim(e)&&this.refresh()},t.prototype._getMouseBufferCoords=function(e){var t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t},t.prototype._getMouseEventScrollAmount=function(e){var t=_.getCoordsRelativeToElement(e,this._screenElement)[1],r=this._renderService.dimensions.canvasHeight;return t>=0&&t<=r?0:(t>r&&(t-=r),t=Math.min(Math.max(t,-50),50),(t/=50)/Math.abs(t)+Math.round(14*t))},t.prototype.shouldForceSelection=function(e){return a.isMac?e.altKey&&this._optionsService.options.macOptionClickForcesSelection:e.shiftKey},t.prototype.onMouseDown=function(e){if(this._mouseDownTimeStamp=e.timeStamp,(2!==e.button||!this.hasSelection)&&0===e.button){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._onIncrementalClick(e):1===e.detail?this._onSingleClick(e):2===e.detail?this._onDoubleClick(e):3===e.detail&&this._onTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}},t.prototype._addMouseDownListeners=function(){var e=this;this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener(\"mousemove\",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener(\"mouseup\",this._mouseUpListener)),this._dragScrollIntervalTimer=window.setInterval((function(){return e._dragScroll()}),50)},t.prototype._removeMouseDownListeners=function(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener(\"mousemove\",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener(\"mouseup\",this._mouseUpListener)),clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0},t.prototype._onIncrementalClick=function(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))},t.prototype._onSingleClick=function(e){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),this._model.selectionStart){this._model.selectionEnd=void 0;var t=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);t&&t.length!==this._model.selectionStart[0]&&0===t.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}},t.prototype._onDoubleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=1,this._selectWordAt(t,!0))},t.prototype._onTripleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))},t.prototype.shouldColumnSelect=function(e){return e.altKey&&!(a.isMac&&this._optionsService.options.macOptionClickForcesSelection)},t.prototype._onMouseMove=function(e){if(e.stopImmediatePropagation(),this._model.selectionStart){var t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),this._model.selectionEnd){2===this._activeSelectionMode?this._model.selectionEnd[1]<this._model.selectionStart[1]?this._model.selectionEnd[0]=0:this._model.selectionEnd[0]=this._bufferService.cols:1===this._activeSelectionMode&&this._selectToWordAt(this._model.selectionEnd),this._dragScrollAmount=this._getMouseEventScrollAmount(e),3!==this._activeSelectionMode&&(this._dragScrollAmount>0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));var r=this._bufferService.buffer;if(this._model.selectionEnd[1]<r.lines.length){var i=r.lines.get(this._model.selectionEnd[1]);i&&0===i.hasWidth(this._model.selectionEnd[0])&&this._model.selectionEnd[0]++}t&&t[0]===this._model.selectionEnd[0]&&t[1]===this._model.selectionEnd[1]||this.refresh(!0)}else this.refresh(!0)}},t.prototype._dragScroll=function(){if(this._model.selectionEnd&&this._model.selectionStart&&this._dragScrollAmount){this._onRequestScrollLines.fire({amount:this._dragScrollAmount,suppressScrollEvent:!1});var e=this._bufferService.buffer;this._dragScrollAmount>0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}},t.prototype._onMouseUp=function(e){var t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){var r=this._mouseService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(r&&void 0!==r[0]&&void 0!==r[1]){var i=d.moveToCellSequence(r[0]-1,r[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(i,!0)}}}else this.hasSelection&&this._onSelectionChange.fire()},t.prototype._onBufferActivate=function(e){var t=this;this.clearSelection(),this._trimListener.dispose(),this._trimListener=e.activeBuffer.lines.onTrim((function(e){return t._onTrim(e)}))},t.prototype._convertViewportColToCharacterIndex=function(e,t){for(var r=t[0],i=0;t[0]>=i;i++){var n=e.loadCell(i,this._workCell).getChars().length;0===this._workCell.getWidth()?r--:n>1&&t[0]!==i&&(r+=n-1)}return r},t.prototype.setSelection=function(e,t,r){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=r,this.refresh()},t.prototype._getWordAt=function(e,t,r,i){if(void 0===r&&(r=!0),void 0===i&&(i=!0),!(e[0]>=this._bufferService.cols)){var n=this._bufferService.buffer,o=n.lines.get(e[1]);if(o){var s=n.translateBufferLineToString(e[1],!1),a=this._convertViewportColToCharacterIndex(o,e),c=a,l=e[0]-a,h=0,u=0,f=0,_=0;if(\" \"===s.charAt(a)){for(;a>0&&\" \"===s.charAt(a-1);)a--;for(;c<s.length&&\" \"===s.charAt(c+1);)c++}else{var d=e[0],p=e[0];0===o.getWidth(d)&&(h++,d--),2===o.getWidth(p)&&(u++,p++);var v=o.getString(p).length;for(v>1&&(_+=v-1,c+=v-1);d>0&&a>0&&!this._isCharWordSeparator(o.loadCell(d-1,this._workCell));){o.loadCell(d-1,this._workCell);var g=this._workCell.getChars().length;0===this._workCell.getWidth()?(h++,d--):g>1&&(f+=g-1,a-=g-1),a--,d--}for(;p<o.length&&c+1<s.length&&!this._isCharWordSeparator(o.loadCell(p+1,this._workCell));){o.loadCell(p+1,this._workCell);var y=this._workCell.getChars().length;2===this._workCell.getWidth()?(u++,p++):y>1&&(_+=y-1,c+=y-1),c++,p++}}c++;var b=a+l-h+f,S=Math.min(this._bufferService.cols,c-a+h+u-f-_);if(t||\"\"!==s.slice(a,c).trim()){if(r&&0===b&&32!==o.getCodePoint(0)){var m=n.lines.get(e[1]-1);if(m&&o.isWrapped&&32!==m.getCodePoint(this._bufferService.cols-1)){var C=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(C){var w=this._bufferService.cols-C.start;b-=w,S+=w}}}if(i&&b+S===this._bufferService.cols&&32!==o.getCodePoint(this._bufferService.cols-1)){var E=n.lines.get(e[1]+1);if(E&&E.isWrapped&&32!==E.getCodePoint(0)){var L=this._getWordAt([0,e[1]+1],!1,!1,!0);L&&(S+=L.length)}}return{start:b,length:S}}}}},t.prototype._selectWordAt=function(e,t){var r=this._getWordAt(e,t);if(r){for(;r.start<0;)r.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[r.start,e[1]],this._model.selectionStartLength=r.length}},t.prototype._selectToWordAt=function(e){var t=this._getWordAt(e,!0);if(t){for(var r=e[1];t.start<0;)t.start+=this._bufferService.cols,r--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,r++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,r]}},t.prototype._isCharWordSeparator=function(e){return 0!==e.getWidth()&&this._optionsService.options.wordSeparator.indexOf(e.getChars())>=0},t.prototype._selectLineAt=function(e){var t=this._bufferService.buffer.getWrappedRangeForLine(e);this._model.selectionStart=[0,t.first],this._model.selectionEnd=[this._bufferService.cols,t.last],this._model.selectionStartLength=0},t=o([s(2,f.IBufferService),s(3,f.ICoreService),s(4,u.IMouseService),s(5,f.IOptionsService),s(6,u.IRenderService)],t)}(p.Disposable);t.SelectionService=y},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.SelectionModel=void 0;var i=function(){function e(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}return e.prototype.clearSelection=function(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0},Object.defineProperty(e.prototype,\"finalSelectionStart\",{get:function(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"finalSelectionEnd\",{get:function(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){var e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}return this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]?[Math.max(this.selectionStart[0]+this.selectionStartLength,this.selectionEnd[0]),this.selectionEnd[1]]:this.selectionEnd}},enumerable:!1,configurable:!0}),e.prototype.areSelectionValuesReversed=function(){var e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])},e.prototype.onTrim=function(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)},e}();t.SelectionModel=i},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.moveToCellSequence=void 0;var i=r(12);function n(e,t,r,i){var n=e-o(r,e),a=t-o(r,t);return l(Math.abs(n-a)-function(e,t,r){for(var i=0,n=e-o(r,e),a=t-o(r,t),c=0;c<Math.abs(n-a);c++){var l=\"A\"===s(e,t)?-1:1,h=r.buffer.lines.get(n+l*c);h&&h.isWrapped&&i++}return i}(e,t,r),c(s(e,t),i))}function o(e,t){for(var r=0,i=e.buffer.lines.get(t),n=i&&i.isWrapped;n&&t>=0&&t<e.rows;)r++,n=(i=e.buffer.lines.get(--t))&&i.isWrapped;return r}function s(e,t){return e>t?\"A\":\"B\"}function a(e,t,r,i,n,o){for(var s=e,a=t,c=\"\";s!==r||a!==i;)s+=n?1:-1,n&&s>o.cols-1?(c+=o.buffer.translateBufferLineToString(a,!1,e,s),s=0,e=0,a++):!n&&s<0&&(c+=o.buffer.translateBufferLineToString(a,!1,0,e+1),e=s=o.cols-1,a--);return c+o.buffer.translateBufferLineToString(a,!1,e,s)}function c(e,t){var r=t?\"O\":\"[\";return i.C0.ESC+r+e}function l(e,t){e=Math.floor(e);for(var r=\"\",i=0;i<e;i++)r+=t;return r}t.moveToCellSequence=function(e,t,r,i){var s,h=r.buffer.x,u=r.buffer.y;if(!r.buffer.hasScrollback)return function(e,t,r,i,s,h){if(0===n(t,i,s,h).length)return\"\";return l(a(e,t,e,t-o(s,t),!1,s).length,c(\"D\",h))}(h,u,0,t,r,i)+n(u,t,r,i)+function(e,t,r,i,s,h){var u;u=n(t,i,s,h).length>0?i-o(s,i):t;var f=i,_=function(e,t,r,i,s,a){var c;c=n(r,i,s,a).length>0?i-o(s,i):t;if(e<r&&c<=i||e>=r&&c<i)return\"C\";return\"D\"}(e,t,r,i,s,h);return l(a(e,u,r,f,\"C\"===_,s).length,c(_,h))}(h,u,e,t,r,i);if(u===t)return s=h>e?\"D\":\"C\",l(Math.abs(h-e),c(s,i));s=u>t?\"D\":\"C\";var f=Math.abs(u-t);return l(function(e,t){return t.cols-e}(u>t?e:h,r)+(f-1)*r.cols+1+((u>t?h:e)-1),c(s,i))}},function(e,t,r){\"use strict\";var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.SoundService=void 0;var o=r(1),s=function(){function e(e){this._optionsService=e}return Object.defineProperty(e,\"audioContext\",{get:function(){if(!e._audioContext){var t=window.AudioContext||window.webkitAudioContext;if(!t)return console.warn(\"Web Audio API is not supported by this browser. Consider upgrading to the latest version\"),null;e._audioContext=new t}return e._audioContext},enumerable:!1,configurable:!0}),e.prototype.playBellSound=function(){var t=e.audioContext;if(t){var r=t.createBufferSource();t.decodeAudioData(this._base64ToArrayBuffer(this._removeMimeType(this._optionsService.options.bellSound)),(function(e){r.buffer=e,r.connect(t.destination),r.start(0)}))}},e.prototype._base64ToArrayBuffer=function(e){for(var t=window.atob(e),r=t.length,i=new Uint8Array(r),n=0;n<r;n++)i[n]=t.charCodeAt(n);return i.buffer},e.prototype._removeMimeType=function(e){return e.split(\",\")[1]},e=i([n(0,o.IOptionsService)],e)}();t.SoundService=s},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.MouseZoneManager=void 0;var a=r(2),c=r(7),l=r(5),h=r(1),u=function(e){function t(t,r,i,n,o,s){var a=e.call(this)||this;return a._element=t,a._screenElement=r,a._bufferService=i,a._mouseService=n,a._selectionService=o,a._optionsService=s,a._zones=[],a._areZonesActive=!1,a._lastHoverCoords=[void 0,void 0],a._initialSelectionLength=0,a.register(c.addDisposableDomListener(a._element,\"mousedown\",(function(e){return a._onMouseDown(e)}))),a._mouseMoveListener=function(e){return a._onMouseMove(e)},a._mouseLeaveListener=function(e){return a._onMouseLeave(e)},a._clickListener=function(e){return a._onClick(e)},a}return n(t,e),t.prototype.dispose=function(){e.prototype.dispose.call(this),this._deactivate()},t.prototype.add=function(e){this._zones.push(e),1===this._zones.length&&this._activate()},t.prototype.clearAll=function(e,t){if(0!==this._zones.length){e&&t||(e=0,t=this._bufferService.rows-1);for(var r=0;r<this._zones.length;r++){var i=this._zones[r];(i.y1>e&&i.y1<=t+1||i.y2>e&&i.y2<=t+1||i.y1<e&&i.y2>t+1)&&(this._currentZone&&this._currentZone===i&&(this._currentZone.leaveCallback(),this._currentZone=void 0),this._zones.splice(r--,1))}0===this._zones.length&&this._deactivate()}},t.prototype._activate=function(){this._areZonesActive||(this._areZonesActive=!0,this._element.addEventListener(\"mousemove\",this._mouseMoveListener),this._element.addEventListener(\"mouseleave\",this._mouseLeaveListener),this._element.addEventListener(\"click\",this._clickListener))},t.prototype._deactivate=function(){this._areZonesActive&&(this._areZonesActive=!1,this._element.removeEventListener(\"mousemove\",this._mouseMoveListener),this._element.removeEventListener(\"mouseleave\",this._mouseLeaveListener),this._element.removeEventListener(\"click\",this._clickListener))},t.prototype._onMouseMove=function(e){this._lastHoverCoords[0]===e.pageX&&this._lastHoverCoords[1]===e.pageY||(this._onHover(e),this._lastHoverCoords=[e.pageX,e.pageY])},t.prototype._onHover=function(e){var t=this,r=this._findZoneEventAt(e);r!==this._currentZone&&(this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout)),r&&(this._currentZone=r,r.hoverCallback&&r.hoverCallback(e),this._tooltipTimeout=window.setTimeout((function(){return t._onTooltip(e)}),this._optionsService.options.linkTooltipHoverDuration)))},t.prototype._onTooltip=function(e){this._tooltipTimeout=void 0;var t=this._findZoneEventAt(e);t&&t.tooltipCallback&&t.tooltipCallback(e)},t.prototype._onMouseDown=function(e){if(this._initialSelectionLength=this._getSelectionLength(),this._areZonesActive){var t=this._findZoneEventAt(e);(null==t?void 0:t.willLinkActivate(e))&&(e.preventDefault(),e.stopImmediatePropagation())}},t.prototype._onMouseLeave=function(e){this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout))},t.prototype._onClick=function(e){var t=this._findZoneEventAt(e),r=this._getSelectionLength();t&&r===this._initialSelectionLength&&(t.clickCallback(e),e.preventDefault(),e.stopImmediatePropagation())},t.prototype._getSelectionLength=function(){var e=this._selectionService.selectionText;return e?e.length:0},t.prototype._findZoneEventAt=function(e){var t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows);if(t)for(var r=t[0],i=t[1],n=0;n<this._zones.length;n++){var o=this._zones[n];if(o.y1===o.y2){if(i===o.y1&&r>=o.x1&&r<o.x2)return o}else if(i===o.y1&&r>=o.x1||i===o.y2&&r<o.x2||i>o.y1&&i<o.y2)return o}},t=o([s(2,h.IBufferService),s(3,l.IMouseService),s(4,l.ISelectionService),s(5,h.IOptionsService)],t)}(a.Disposable);t.MouseZoneManager=u},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.AccessibilityManager=void 0;var o=r(18),s=r(11),a=r(31),c=r(7),l=r(2),h=r(32),u=r(17),f=function(e){function t(t,r){var i=e.call(this)||this;i._terminal=t,i._renderService=r,i._liveRegionLineCount=0,i._charsToConsume=[],i._charsToAnnounce=\"\",i._accessibilityTreeRoot=document.createElement(\"div\"),i._accessibilityTreeRoot.classList.add(\"xterm-accessibility\"),i._rowContainer=document.createElement(\"div\"),i._rowContainer.classList.add(\"xterm-accessibility-tree\"),i._rowContainer.setAttribute(\"role\",\"document\"),i._rowElements=[];for(var n=0;n<i._terminal.rows;n++)i._rowElements[n]=i._createAccessibilityTreeNode(),i._rowContainer.appendChild(i._rowElements[n]);if(i._topBoundaryFocusListener=function(e){return i._onBoundaryFocus(e,0)},i._bottomBoundaryFocusListener=function(e){return i._onBoundaryFocus(e,1)},i._rowElements[0].addEventListener(\"focus\",i._topBoundaryFocusListener),i._rowElements[i._rowElements.length-1].addEventListener(\"focus\",i._bottomBoundaryFocusListener),i._refreshRowsDimensions(),i._accessibilityTreeRoot.appendChild(i._rowContainer),i._renderRowsDebouncer=new a.RenderDebouncer(i._renderRows.bind(i)),i._refreshRows(),i._liveRegion=document.createElement(\"div\"),i._liveRegion.classList.add(\"live-region\"),i._liveRegion.setAttribute(\"aria-live\",\"assertive\"),i._accessibilityTreeRoot.appendChild(i._liveRegion),!i._terminal.element)throw new Error(\"Cannot enable accessibility before Terminal.open\");return i._terminal.element.insertAdjacentElement(\"afterbegin\",i._accessibilityTreeRoot),i.register(i._renderRowsDebouncer),i.register(i._terminal.onResize((function(e){return i._onResize(e.rows)}))),i.register(i._terminal.onRender((function(e){return i._refreshRows(e.start,e.end)}))),i.register(i._terminal.onScroll((function(){return i._refreshRows()}))),i.register(i._terminal.onA11yChar((function(e){return i._onChar(e)}))),i.register(i._terminal.onLineFeed((function(){return i._onChar(\"\\n\")}))),i.register(i._terminal.onA11yTab((function(e){return i._onTab(e)}))),i.register(i._terminal.onKey((function(e){return i._onKey(e.key)}))),i.register(i._terminal.onBlur((function(){return i._clearLiveRegion()}))),i.register(i._renderService.onDimensionsChange((function(){return i._refreshRowsDimensions()}))),i._screenDprMonitor=new h.ScreenDprMonitor,i.register(i._screenDprMonitor),i._screenDprMonitor.setListener((function(){return i._refreshRowsDimensions()})),i.register(c.addDisposableDomListener(window,\"resize\",(function(){return i._refreshRowsDimensions()}))),i}return n(t,e),t.prototype.dispose=function(){e.prototype.dispose.call(this),u.removeElementFromParent(this._accessibilityTreeRoot),this._rowElements.length=0},t.prototype._onBoundaryFocus=function(e,t){var r=e.target,i=this._rowElements[0===t?1:this._rowElements.length-2];if(r.getAttribute(\"aria-posinset\")!==(0===t?\"1\":\"\"+this._terminal.buffer.lines.length)&&e.relatedTarget===i){var n,o;if(0===t?(n=r,o=this._rowElements.pop(),this._rowContainer.removeChild(o)):(n=this._rowElements.shift(),o=r,this._rowContainer.removeChild(n)),n.removeEventListener(\"focus\",this._topBoundaryFocusListener),o.removeEventListener(\"focus\",this._bottomBoundaryFocusListener),0===t){var s=this._createAccessibilityTreeNode();this._rowElements.unshift(s),this._rowContainer.insertAdjacentElement(\"afterbegin\",s)}else{s=this._createAccessibilityTreeNode();this._rowElements.push(s),this._rowContainer.appendChild(s)}this._rowElements[0].addEventListener(\"focus\",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._terminal.scrollLines(0===t?-1:1),this._rowElements[0===t?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}},t.prototype._onResize=function(e){this._rowElements[this._rowElements.length-1].removeEventListener(\"focus\",this._bottomBoundaryFocusListener);for(var t=this._rowContainer.children.length;t<this._terminal.rows;t++)this._rowElements[t]=this._createAccessibilityTreeNode(),this._rowContainer.appendChild(this._rowElements[t]);for(;this._rowElements.length>e;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()},t.prototype._createAccessibilityTreeNode=function(){var e=document.createElement(\"div\");return e.setAttribute(\"role\",\"listitem\"),e.tabIndex=-1,this._refreshRowDimensions(e),e},t.prototype._onTab=function(e){for(var t=0;t<e;t++)this._onChar(\" \")},t.prototype._onChar=function(e){var t=this;if(this._liveRegionLineCount<21){if(this._charsToConsume.length>0)this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e);else this._charsToAnnounce+=e;\"\\n\"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent+=o.tooMuchOutput)),s.isMac&&this._liveRegion.textContent&&this._liveRegion.textContent.length>0&&!this._liveRegion.parentNode&&setTimeout((function(){t._accessibilityTreeRoot.appendChild(t._liveRegion)}),0)}},t.prototype._clearLiveRegion=function(){this._liveRegion.textContent=\"\",this._liveRegionLineCount=0,s.isMac&&u.removeElementFromParent(this._liveRegion)},t.prototype._onKey=function(e){this._clearLiveRegion(),this._charsToConsume.push(e)},t.prototype._refreshRows=function(e,t){this._renderRowsDebouncer.refresh(e,t,this._terminal.rows)},t.prototype._renderRows=function(e,t){for(var r=this._terminal.buffer,i=r.lines.length.toString(),n=e;n<=t;n++){var o=r.translateBufferLineToString(r.ydisp+n,!0),s=(r.ydisp+n+1).toString(),a=this._rowElements[n];a&&(0===o.length?a.innerHTML=\"&nbsp;\":a.textContent=o,a.setAttribute(\"aria-posinset\",s),a.setAttribute(\"aria-setsize\",i))}this._announceCharacters()},t.prototype._refreshRowsDimensions=function(){if(this._renderService.dimensions.actualCellHeight){this._rowElements.length!==this._terminal.rows&&this._onResize(this._terminal.rows);for(var e=0;e<this._terminal.rows;e++)this._refreshRowDimensions(this._rowElements[e])}},t.prototype._refreshRowDimensions=function(e){e.style.height=this._renderService.dimensions.actualCellHeight+\"px\"},t.prototype._announceCharacters=function(){0!==this._charsToAnnounce.length&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce=\"\")},t}(l.Disposable);t.AccessibilityManager=f},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.DomRenderer=void 0;var a=r(58),c=r(9),l=r(2),h=r(5),u=r(1),f=r(0),_=r(10),d=r(17),p=1,v=function(e){function t(t,r,i,n,o,s,c,l,h){var u=e.call(this)||this;return u._colors=t,u._element=r,u._screenElement=i,u._viewportElement=n,u._linkifier=o,u._linkifier2=s,u._charSizeService=c,u._optionsService=l,u._bufferService=h,u._terminalClass=p++,u._rowElements=[],u._rowContainer=document.createElement(\"div\"),u._rowContainer.classList.add(\"xterm-rows\"),u._rowContainer.style.lineHeight=\"normal\",u._rowContainer.setAttribute(\"aria-hidden\",\"true\"),u._refreshRowElements(u._bufferService.cols,u._bufferService.rows),u._selectionContainer=document.createElement(\"div\"),u._selectionContainer.classList.add(\"xterm-selection\"),u._selectionContainer.setAttribute(\"aria-hidden\",\"true\"),u.dimensions={scaledCharWidth:0,scaledCharHeight:0,scaledCellWidth:0,scaledCellHeight:0,scaledCharLeft:0,scaledCharTop:0,scaledCanvasWidth:0,scaledCanvasHeight:0,canvasWidth:0,canvasHeight:0,actualCellWidth:0,actualCellHeight:0},u._updateDimensions(),u._injectCss(),u._rowFactory=new a.DomRendererRowFactory(document,u._optionsService,u._colors),u._element.classList.add(\"xterm-dom-renderer-owner-\"+u._terminalClass),u._screenElement.appendChild(u._rowContainer),u._screenElement.appendChild(u._selectionContainer),u._linkifier.onShowLinkUnderline((function(e){return u._onLinkHover(e)})),u._linkifier.onHideLinkUnderline((function(e){return u._onLinkLeave(e)})),u._linkifier2.onShowLinkUnderline((function(e){return u._onLinkHover(e)})),u._linkifier2.onHideLinkUnderline((function(e){return u._onLinkLeave(e)})),u}return n(t,e),Object.defineProperty(t.prototype,\"onRequestRedraw\",{get:function(){return(new f.EventEmitter).event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this._element.classList.remove(\"xterm-dom-renderer-owner-\"+this._terminalClass),d.removeElementFromParent(this._rowContainer,this._selectionContainer,this._themeStyleElement,this._dimensionsStyleElement),e.prototype.dispose.call(this)},t.prototype._updateDimensions=function(){this.dimensions.scaledCharWidth=this._charSizeService.width*window.devicePixelRatio,this.dimensions.scaledCharHeight=Math.ceil(this._charSizeService.height*window.devicePixelRatio),this.dimensions.scaledCellWidth=this.dimensions.scaledCharWidth+Math.round(this._optionsService.options.letterSpacing),this.dimensions.scaledCellHeight=Math.floor(this.dimensions.scaledCharHeight*this._optionsService.options.lineHeight),this.dimensions.scaledCharLeft=0,this.dimensions.scaledCharTop=0,this.dimensions.scaledCanvasWidth=this.dimensions.scaledCellWidth*this._bufferService.cols,this.dimensions.scaledCanvasHeight=this.dimensions.scaledCellHeight*this._bufferService.rows,this.dimensions.canvasWidth=Math.round(this.dimensions.scaledCanvasWidth/window.devicePixelRatio),this.dimensions.canvasHeight=Math.round(this.dimensions.scaledCanvasHeight/window.devicePixelRatio),this.dimensions.actualCellWidth=this.dimensions.canvasWidth/this._bufferService.cols,this.dimensions.actualCellHeight=this.dimensions.canvasHeight/this._bufferService.rows;for(var e=0,t=this._rowElements;e<t.length;e++){var r=t[e];r.style.width=this.dimensions.canvasWidth+\"px\",r.style.height=this.dimensions.actualCellHeight+\"px\",r.style.lineHeight=this.dimensions.actualCellHeight+\"px\",r.style.overflow=\"hidden\"}this._dimensionsStyleElement||(this._dimensionsStyleElement=document.createElement(\"style\"),this._screenElement.appendChild(this._dimensionsStyleElement));var i=this._terminalSelector+\" .xterm-rows span { display: inline-block; height: 100%; vertical-align: top; width: \"+this.dimensions.actualCellWidth+\"px}\";this._dimensionsStyleElement.innerHTML=i,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=this.dimensions.canvasWidth+\"px\",this._screenElement.style.height=this.dimensions.canvasHeight+\"px\"},t.prototype.setColors=function(e){this._colors=e,this._injectCss()},t.prototype._injectCss=function(){var e=this;this._themeStyleElement||(this._themeStyleElement=document.createElement(\"style\"),this._screenElement.appendChild(this._themeStyleElement));var t=this._terminalSelector+\" .xterm-rows { color: \"+this._colors.foreground.css+\"; font-family: \"+this._optionsService.options.fontFamily+\"; font-size: \"+this._optionsService.options.fontSize+\"px;}\";t+=this._terminalSelector+\" span:not(.\"+a.BOLD_CLASS+\") { font-weight: \"+this._optionsService.options.fontWeight+\";}\"+this._terminalSelector+\" span.\"+a.BOLD_CLASS+\" { font-weight: \"+this._optionsService.options.fontWeightBold+\";}\"+this._terminalSelector+\" span.\"+a.ITALIC_CLASS+\" { font-style: italic;}\",t+=\"@keyframes blink_box_shadow_\"+this._terminalClass+\" { 50% { box-shadow: none; }}\",t+=\"@keyframes blink_block_\"+this._terminalClass+\" { 0% { background-color: \"+this._colors.cursor.css+\"; color: \"+this._colors.cursorAccent.css+\"; } 50% { background-color: \"+this._colors.cursorAccent.css+\"; color: \"+this._colors.cursor.css+\"; }}\",t+=this._terminalSelector+\" .xterm-rows:not(.xterm-focus) .\"+a.CURSOR_CLASS+\".\"+a.CURSOR_STYLE_BLOCK_CLASS+\" { outline: 1px solid \"+this._colors.cursor.css+\"; outline-offset: -1px;}\"+this._terminalSelector+\" .xterm-rows.xterm-focus .\"+a.CURSOR_CLASS+\".\"+a.CURSOR_BLINK_CLASS+\":not(.\"+a.CURSOR_STYLE_BLOCK_CLASS+\") { animation: blink_box_shadow_\"+this._terminalClass+\" 1s step-end infinite;}\"+this._terminalSelector+\" .xterm-rows.xterm-focus .\"+a.CURSOR_CLASS+\".\"+a.CURSOR_BLINK_CLASS+\".\"+a.CURSOR_STYLE_BLOCK_CLASS+\" { animation: blink_block_\"+this._terminalClass+\" 1s step-end infinite;}\"+this._terminalSelector+\" .xterm-rows.xterm-focus .\"+a.CURSOR_CLASS+\".\"+a.CURSOR_STYLE_BLOCK_CLASS+\" { background-color: \"+this._colors.cursor.css+\"; color: \"+this._colors.cursorAccent.css+\";}\"+this._terminalSelector+\" .xterm-rows .\"+a.CURSOR_CLASS+\".\"+a.CURSOR_STYLE_BAR_CLASS+\" { box-shadow: \"+this._optionsService.options.cursorWidth+\"px 0 0 \"+this._colors.cursor.css+\" inset;}\"+this._terminalSelector+\" .xterm-rows .\"+a.CURSOR_CLASS+\".\"+a.CURSOR_STYLE_UNDERLINE_CLASS+\" { box-shadow: 0 -1px 0 \"+this._colors.cursor.css+\" inset;}\",t+=this._terminalSelector+\" .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}\"+this._terminalSelector+\" .xterm-selection div { position: absolute; background-color: \"+this._colors.selectionTransparent.css+\";}\",this._colors.ansi.forEach((function(r,i){t+=e._terminalSelector+\" .xterm-fg-\"+i+\" { color: \"+r.css+\"; }\"+e._terminalSelector+\" .xterm-bg-\"+i+\" { background-color: \"+r.css+\"; }\"})),t+=this._terminalSelector+\" .xterm-fg-\"+c.INVERTED_DEFAULT_COLOR+\" { color: \"+_.color.opaque(this._colors.background).css+\"; }\"+this._terminalSelector+\" .xterm-bg-\"+c.INVERTED_DEFAULT_COLOR+\" { background-color: \"+this._colors.foreground.css+\"; }\",this._themeStyleElement.innerHTML=t},t.prototype.onDevicePixelRatioChange=function(){this._updateDimensions()},t.prototype._refreshRowElements=function(e,t){for(var r=this._rowElements.length;r<=t;r++){var i=document.createElement(\"div\");this._rowContainer.appendChild(i),this._rowElements.push(i)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop())},t.prototype.onResize=function(e,t){this._refreshRowElements(e,t),this._updateDimensions()},t.prototype.onCharSizeChanged=function(){this._updateDimensions()},t.prototype.onBlur=function(){this._rowContainer.classList.remove(\"xterm-focus\")},t.prototype.onFocus=function(){this._rowContainer.classList.add(\"xterm-focus\")},t.prototype.onSelectionChanged=function(e,t,r){for(;this._selectionContainer.children.length;)this._selectionContainer.removeChild(this._selectionContainer.children[0]);if(e&&t){var i=e[1]-this._bufferService.buffer.ydisp,n=t[1]-this._bufferService.buffer.ydisp,o=Math.max(i,0),s=Math.min(n,this._bufferService.rows-1);if(!(o>=this._bufferService.rows||s<0)){var a=document.createDocumentFragment();if(r)a.appendChild(this._createSelectionElement(o,e[0],t[0],s-o+1));else{var c=i===o?e[0]:0,l=o===n?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(o,c,l));var h=s-o-1;if(a.appendChild(this._createSelectionElement(o+1,0,this._bufferService.cols,h)),o!==s){var u=n===s?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(s,0,u))}}this._selectionContainer.appendChild(a)}}},t.prototype._createSelectionElement=function(e,t,r,i){void 0===i&&(i=1);var n=document.createElement(\"div\");return n.style.height=i*this.dimensions.actualCellHeight+\"px\",n.style.top=e*this.dimensions.actualCellHeight+\"px\",n.style.left=t*this.dimensions.actualCellWidth+\"px\",n.style.width=this.dimensions.actualCellWidth*(r-t)+\"px\",n},t.prototype.onCursorMove=function(){},t.prototype.onOptionsChanged=function(){this._updateDimensions(),this._injectCss()},t.prototype.clear=function(){for(var e=0,t=this._rowElements;e<t.length;e++){t[e].innerHTML=\"\"}},t.prototype.renderRows=function(e,t){for(var r=this._bufferService.buffer.ybase+this._bufferService.buffer.y,i=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1),n=this._optionsService.options.cursorBlink,o=e;o<=t;o++){var s=this._rowElements[o];s.innerHTML=\"\";var a=o+this._bufferService.buffer.ydisp,c=this._bufferService.buffer.lines.get(a),l=this._optionsService.options.cursorStyle;s.appendChild(this._rowFactory.createRow(c,a===r,l,i,n,this.dimensions.actualCellWidth,this._bufferService.cols))}},Object.defineProperty(t.prototype,\"_terminalSelector\",{get:function(){return\".xterm-dom-renderer-owner-\"+this._terminalClass},enumerable:!1,configurable:!0}),t.prototype.registerCharacterJoiner=function(e){return-1},t.prototype.deregisterCharacterJoiner=function(e){return!1},t.prototype._onLinkHover=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)},t.prototype._onLinkLeave=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)},t.prototype._setCellUnderline=function(e,t,r,i,n,o){for(;e!==t||r!==i;){var s=this._rowElements[r];if(!s)return;var a=s.children[e];a&&(a.style.textDecoration=o?\"underline\":\"none\"),++e>=n&&(e=0,r++)}},t=o([s(6,h.ICharSizeService),s(7,u.IOptionsService),s(8,u.IBufferService)],t)}(l.Disposable);t.DomRenderer=v},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.DomRendererRowFactory=t.CURSOR_STYLE_UNDERLINE_CLASS=t.CURSOR_STYLE_BAR_CLASS=t.CURSOR_STYLE_BLOCK_CLASS=t.CURSOR_BLINK_CLASS=t.CURSOR_CLASS=t.UNDERLINE_CLASS=t.ITALIC_CLASS=t.DIM_CLASS=t.BOLD_CLASS=void 0;var i=r(9),n=r(3),o=r(4),s=r(10);t.BOLD_CLASS=\"xterm-bold\",t.DIM_CLASS=\"xterm-dim\",t.ITALIC_CLASS=\"xterm-italic\",t.UNDERLINE_CLASS=\"xterm-underline\",t.CURSOR_CLASS=\"xterm-cursor\",t.CURSOR_BLINK_CLASS=\"xterm-cursor-blink\",t.CURSOR_STYLE_BLOCK_CLASS=\"xterm-cursor-block\",t.CURSOR_STYLE_BAR_CLASS=\"xterm-cursor-bar\",t.CURSOR_STYLE_UNDERLINE_CLASS=\"xterm-cursor-underline\";var a=function(){function e(e,t,r){this._document=e,this._optionsService=t,this._colors=r,this._workCell=new o.CellData}return e.prototype.setColors=function(e){this._colors=e},e.prototype.createRow=function(e,r,o,a,l,h,u){for(var f=this._document.createDocumentFragment(),_=0,d=Math.min(e.length,u)-1;d>=0;d--)if(e.loadCell(d,this._workCell).getCode()!==n.NULL_CELL_CODE||r&&d===a){_=d+1;break}for(d=0;d<_;d++){e.loadCell(d,this._workCell);var p=this._workCell.getWidth();if(0!==p){var v=this._document.createElement(\"span\");if(p>1&&(v.style.width=h*p+\"px\"),r&&d===a)switch(v.classList.add(t.CURSOR_CLASS),l&&v.classList.add(t.CURSOR_BLINK_CLASS),o){case\"bar\":v.classList.add(t.CURSOR_STYLE_BAR_CLASS);break;case\"underline\":v.classList.add(t.CURSOR_STYLE_UNDERLINE_CLASS);break;default:v.classList.add(t.CURSOR_STYLE_BLOCK_CLASS)}this._workCell.isBold()&&v.classList.add(t.BOLD_CLASS),this._workCell.isItalic()&&v.classList.add(t.ITALIC_CLASS),this._workCell.isDim()&&v.classList.add(t.DIM_CLASS),this._workCell.isUnderline()&&v.classList.add(t.UNDERLINE_CLASS),this._workCell.isInvisible()?v.textContent=n.WHITESPACE_CELL_CHAR:v.textContent=this._workCell.getChars()||n.WHITESPACE_CELL_CHAR;var g=this._workCell.getFgColor(),y=this._workCell.getFgColorMode(),b=this._workCell.getBgColor(),S=this._workCell.getBgColorMode(),m=!!this._workCell.isInverse();if(m){var C=g;g=b,b=C;var w=y;y=S,S=w}switch(y){case 16777216:case 33554432:this._workCell.isBold()&&g<8&&this._optionsService.options.drawBoldTextInBrightColors&&(g+=8),this._applyMinimumContrast(v,this._colors.background,this._colors.ansi[g])||v.classList.add(\"xterm-fg-\"+g);break;case 50331648:var E=s.rgba.toColor(g>>16&255,g>>8&255,255&g);this._applyMinimumContrast(v,this._colors.background,E)||this._addStyle(v,\"color:#\"+c(g.toString(16),\"0\",6));break;case 0:default:this._applyMinimumContrast(v,this._colors.background,this._colors.foreground)||m&&v.classList.add(\"xterm-fg-\"+i.INVERTED_DEFAULT_COLOR)}switch(S){case 16777216:case 33554432:v.classList.add(\"xterm-bg-\"+b);break;case 50331648:this._addStyle(v,\"background-color:#\"+c(b.toString(16),\"0\",6));break;case 0:default:m&&v.classList.add(\"xterm-bg-\"+i.INVERTED_DEFAULT_COLOR)}f.appendChild(v)}}return f},e.prototype._applyMinimumContrast=function(e,t,r){if(1===this._optionsService.options.minimumContrastRatio)return!1;var i=this._colors.contrastCache.getColor(this._workCell.bg,this._workCell.fg);return void 0===i&&(i=s.color.ensureContrastRatio(t,r,this._optionsService.options.minimumContrastRatio),this._colors.contrastCache.setColor(this._workCell.bg,this._workCell.fg,null!=i?i:null)),!!i&&(this._addStyle(e,\"color:\"+i.css),!0)},e.prototype._addStyle=function(e,t){e.setAttribute(\"style\",\"\"+(e.getAttribute(\"style\")||\"\")+t+\";\")},e}();function c(e,t,r){for(;e.length<r;)e=t+e;return e}t.DomRendererRowFactory=a},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.evaluateKeyboardEvent=void 0;var i=r(12),n={48:[\"0\",\")\"],49:[\"1\",\"!\"],50:[\"2\",\"@\"],51:[\"3\",\"#\"],52:[\"4\",\"$\"],53:[\"5\",\"%\"],54:[\"6\",\"^\"],55:[\"7\",\"&\"],56:[\"8\",\"*\"],57:[\"9\",\"(\"],186:[\";\",\":\"],187:[\"=\",\"+\"],188:[\",\",\"<\"],189:[\"-\",\"_\"],190:[\".\",\">\"],191:[\"/\",\"?\"],192:[\"`\",\"~\"],219:[\"[\",\"{\"],220:[\"\\\\\",\"|\"],221:[\"]\",\"}\"],222:[\"'\",'\"']};t.evaluateKeyboardEvent=function(e,t,r,o){var s={type:0,cancel:!1,key:void 0},a=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:\"UIKeyInputUpArrow\"===e.key?s.key=t?i.C0.ESC+\"OA\":i.C0.ESC+\"[A\":\"UIKeyInputLeftArrow\"===e.key?s.key=t?i.C0.ESC+\"OD\":i.C0.ESC+\"[D\":\"UIKeyInputRightArrow\"===e.key?s.key=t?i.C0.ESC+\"OC\":i.C0.ESC+\"[C\":\"UIKeyInputDownArrow\"===e.key&&(s.key=t?i.C0.ESC+\"OB\":i.C0.ESC+\"[B\");break;case 8:if(e.shiftKey){s.key=i.C0.BS;break}if(e.altKey){s.key=i.C0.ESC+i.C0.DEL;break}s.key=i.C0.DEL;break;case 9:if(e.shiftKey){s.key=i.C0.ESC+\"[Z\";break}s.key=i.C0.HT,s.cancel=!0;break;case 13:s.key=e.altKey?i.C0.ESC+i.C0.CR:i.C0.CR,s.cancel=!0;break;case 27:s.key=i.C0.ESC,e.altKey&&(s.key=i.C0.ESC+i.C0.ESC),s.cancel=!0;break;case 37:if(e.metaKey)break;a?(s.key=i.C0.ESC+\"[1;\"+(a+1)+\"D\",s.key===i.C0.ESC+\"[1;3D\"&&(s.key=i.C0.ESC+(r?\"b\":\"[1;5D\"))):s.key=t?i.C0.ESC+\"OD\":i.C0.ESC+\"[D\";break;case 39:if(e.metaKey)break;a?(s.key=i.C0.ESC+\"[1;\"+(a+1)+\"C\",s.key===i.C0.ESC+\"[1;3C\"&&(s.key=i.C0.ESC+(r?\"f\":\"[1;5C\"))):s.key=t?i.C0.ESC+\"OC\":i.C0.ESC+\"[C\";break;case 38:if(e.metaKey)break;a?(s.key=i.C0.ESC+\"[1;\"+(a+1)+\"A\",r||s.key!==i.C0.ESC+\"[1;3A\"||(s.key=i.C0.ESC+\"[1;5A\")):s.key=t?i.C0.ESC+\"OA\":i.C0.ESC+\"[A\";break;case 40:if(e.metaKey)break;a?(s.key=i.C0.ESC+\"[1;\"+(a+1)+\"B\",r||s.key!==i.C0.ESC+\"[1;3B\"||(s.key=i.C0.ESC+\"[1;5B\")):s.key=t?i.C0.ESC+\"OB\":i.C0.ESC+\"[B\";break;case 45:e.shiftKey||e.ctrlKey||(s.key=i.C0.ESC+\"[2~\");break;case 46:s.key=a?i.C0.ESC+\"[3;\"+(a+1)+\"~\":i.C0.ESC+\"[3~\";break;case 36:s.key=a?i.C0.ESC+\"[1;\"+(a+1)+\"H\":t?i.C0.ESC+\"OH\":i.C0.ESC+\"[H\";break;case 35:s.key=a?i.C0.ESC+\"[1;\"+(a+1)+\"F\":t?i.C0.ESC+\"OF\":i.C0.ESC+\"[F\";break;case 33:e.shiftKey?s.type=2:s.key=i.C0.ESC+\"[5~\";break;case 34:e.shiftKey?s.type=3:s.key=i.C0.ESC+\"[6~\";break;case 112:s.key=a?i.C0.ESC+\"[1;\"+(a+1)+\"P\":i.C0.ESC+\"OP\";break;case 113:s.key=a?i.C0.ESC+\"[1;\"+(a+1)+\"Q\":i.C0.ESC+\"OQ\";break;case 114:s.key=a?i.C0.ESC+\"[1;\"+(a+1)+\"R\":i.C0.ESC+\"OR\";break;case 115:s.key=a?i.C0.ESC+\"[1;\"+(a+1)+\"S\":i.C0.ESC+\"OS\";break;case 116:s.key=a?i.C0.ESC+\"[15;\"+(a+1)+\"~\":i.C0.ESC+\"[15~\";break;case 117:s.key=a?i.C0.ESC+\"[17;\"+(a+1)+\"~\":i.C0.ESC+\"[17~\";break;case 118:s.key=a?i.C0.ESC+\"[18;\"+(a+1)+\"~\":i.C0.ESC+\"[18~\";break;case 119:s.key=a?i.C0.ESC+\"[19;\"+(a+1)+\"~\":i.C0.ESC+\"[19~\";break;case 120:s.key=a?i.C0.ESC+\"[20;\"+(a+1)+\"~\":i.C0.ESC+\"[20~\";break;case 121:s.key=a?i.C0.ESC+\"[21;\"+(a+1)+\"~\":i.C0.ESC+\"[21~\";break;case 122:s.key=a?i.C0.ESC+\"[23;\"+(a+1)+\"~\":i.C0.ESC+\"[23~\";break;case 123:s.key=a?i.C0.ESC+\"[24;\"+(a+1)+\"~\":i.C0.ESC+\"[24~\";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(r&&!o||!e.altKey||e.metaKey)r&&!e.altKey&&!e.ctrlKey&&e.metaKey?65===e.keyCode&&(s.type=1):e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length?s.key=e.key:e.key&&e.ctrlKey&&\"_\"===e.key&&(s.key=i.C0.US);else{var c=n[e.keyCode],l=c&&c[e.shiftKey?1:0];if(l)s.key=i.C0.ESC+l;else if(e.keyCode>=65&&e.keyCode<=90){var h=e.ctrlKey?e.keyCode-64:e.keyCode+32;s.key=i.C0.ESC+String.fromCharCode(h)}}else e.keyCode>=65&&e.keyCode<=90?s.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?s.key=i.C0.NUL:e.keyCode>=51&&e.keyCode<=55?s.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?s.key=i.C0.DEL:219===e.keyCode?s.key=i.C0.ESC:220===e.keyCode?s.key=i.C0.FS:221===e.keyCode&&(s.key=i.C0.GS)}return s}},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.RenderService=void 0;var a=r(31),c=r(0),l=r(2),h=r(32),u=r(7),f=r(1),_=r(5),d=function(e){function t(t,r,i,n,o,s){var l=e.call(this)||this;if(l._renderer=t,l._rowCount=r,l._isPaused=!1,l._needsFullRefresh=!1,l._isNextRenderRedrawOnly=!0,l._needsSelectionRefresh=!1,l._canvasWidth=0,l._canvasHeight=0,l._selectionState={start:void 0,end:void 0,columnSelectMode:!1},l._onDimensionsChange=new c.EventEmitter,l._onRender=new c.EventEmitter,l._onRefreshRequest=new c.EventEmitter,l.register({dispose:function(){return l._renderer.dispose()}}),l._renderDebouncer=new a.RenderDebouncer((function(e,t){return l._renderRows(e,t)})),l.register(l._renderDebouncer),l._screenDprMonitor=new h.ScreenDprMonitor,l._screenDprMonitor.setListener((function(){return l.onDevicePixelRatioChange()})),l.register(l._screenDprMonitor),l.register(s.onResize((function(e){return l._fullRefresh()}))),l.register(n.onOptionChange((function(){return l._renderer.onOptionsChanged()}))),l.register(o.onCharSizeChange((function(){return l.onCharSizeChanged()}))),l._renderer.onRequestRedraw((function(e){return l.refreshRows(e.start,e.end,!0)})),l.register(u.addDisposableDomListener(window,\"resize\",(function(){return l.onDevicePixelRatioChange()}))),\"IntersectionObserver\"in window){var f=new IntersectionObserver((function(e){return l._onIntersectionChange(e[e.length-1])}),{threshold:0});f.observe(i),l.register({dispose:function(){return f.disconnect()}})}return l}return n(t,e),Object.defineProperty(t.prototype,\"onDimensionsChange\",{get:function(){return this._onDimensionsChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRenderedBufferChange\",{get:function(){return this._onRender.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onRefreshRequest\",{get:function(){return this._onRefreshRequest.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"dimensions\",{get:function(){return this._renderer.dimensions},enumerable:!1,configurable:!0}),t.prototype._onIntersectionChange=function(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,!this._isPaused&&this._needsFullRefresh&&(this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)},t.prototype.refreshRows=function(e,t,r){void 0===r&&(r=!1),this._isPaused?this._needsFullRefresh=!0:(r||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount))},t.prototype._renderRows=function(e,t){this._renderer.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.onSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0},t.prototype.resize=function(e,t){this._rowCount=t,this._fireOnCanvasResize()},t.prototype.changeOptions=function(){this._renderer.onOptionsChanged(),this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize()},t.prototype._fireOnCanvasResize=function(){this._renderer.dimensions.canvasWidth===this._canvasWidth&&this._renderer.dimensions.canvasHeight===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.dimensions)},t.prototype.dispose=function(){e.prototype.dispose.call(this)},t.prototype.setRenderer=function(e){var t=this;this._renderer.dispose(),this._renderer=e,this._renderer.onRequestRedraw((function(e){return t.refreshRows(e.start,e.end,!0)})),this._needsSelectionRefresh=!0,this._fullRefresh()},t.prototype._fullRefresh=function(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)},t.prototype.setColors=function(e){this._renderer.setColors(e),this._fullRefresh()},t.prototype.onDevicePixelRatioChange=function(){this._renderer.onDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1)},t.prototype.onResize=function(e,t){this._renderer.onResize(e,t),this._fullRefresh()},t.prototype.onCharSizeChanged=function(){this._renderer.onCharSizeChanged()},t.prototype.onBlur=function(){this._renderer.onBlur()},t.prototype.onFocus=function(){this._renderer.onFocus()},t.prototype.onSelectionChanged=function(e,t,r){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=r,this._renderer.onSelectionChanged(e,t,r)},t.prototype.onCursorMove=function(){this._renderer.onCursorMove()},t.prototype.clear=function(){this._renderer.clear()},t.prototype.registerCharacterJoiner=function(e){return this._renderer.registerCharacterJoiner(e)},t.prototype.deregisterCharacterJoiner=function(e){return this._renderer.deregisterCharacterJoiner(e)},t=o([s(3,f.IOptionsService),s(4,_.ICharSizeService),s(5,f.IBufferService)],t)}(l.Disposable);t.RenderService=d},function(e,t,r){\"use strict\";var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharSizeService=void 0;var o=r(1),s=r(0),a=function(){function e(e,t,r){this._optionsService=r,this.width=0,this.height=0,this._onCharSizeChange=new s.EventEmitter,this._measureStrategy=new c(e,t,this._optionsService)}return Object.defineProperty(e.prototype,\"hasValidSize\",{get:function(){return this.width>0&&this.height>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onCharSizeChange\",{get:function(){return this._onCharSizeChange.event},enumerable:!1,configurable:!0}),e.prototype.measure=function(){var e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())},e=i([n(2,o.IOptionsService)],e)}();t.CharSizeService=a;var c=function(){function e(e,t,r){this._document=e,this._parentElement=t,this._optionsService=r,this._result={width:0,height:0},this._measureElement=this._document.createElement(\"span\"),this._measureElement.classList.add(\"xterm-char-measure-element\"),this._measureElement.textContent=\"W\",this._measureElement.setAttribute(\"aria-hidden\",\"true\"),this._parentElement.appendChild(this._measureElement)}return e.prototype.measure=function(){this._measureElement.style.fontFamily=this._optionsService.options.fontFamily,this._measureElement.style.fontSize=this._optionsService.options.fontSize+\"px\";var e=this._measureElement.getBoundingClientRect();return 0!==e.width&&0!==e.height&&(this._result.width=e.width,this._result.height=Math.ceil(e.height)),this._result},e}()},function(e,t,r){\"use strict\";var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.MouseService=void 0;var o=r(5),s=r(30),a=function(){function e(e,t){this._renderService=e,this._charSizeService=t}return e.prototype.getCoords=function(e,t,r,i,n){return s.getCoords(e,t,r,i,this._charSizeService.hasValidSize,this._renderService.dimensions.actualCellWidth,this._renderService.dimensions.actualCellHeight,n)},e.prototype.getRawByteCoords=function(e,t,r,i){var n=this.getCoords(e,t,r,i);return s.getRawByteCoords(n)},e=i([n(0,o.IRenderService),n(1,o.ICharSizeService)],e)}();t.MouseService=a},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.Linkifier2=void 0;var a=r(1),c=r(0),l=r(2),h=r(7),u=function(e){function t(t){var r=e.call(this)||this;return r._bufferService=t,r._linkProviders=[],r._linkCacheDisposables=[],r._isMouseOut=!0,r._activeLine=-1,r._onShowLinkUnderline=r.register(new c.EventEmitter),r._onHideLinkUnderline=r.register(new c.EventEmitter),r.register(l.getDisposeArrayDisposable(r._linkCacheDisposables)),r}return n(t,e),Object.defineProperty(t.prototype,\"onShowLinkUnderline\",{get:function(){return this._onShowLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onHideLinkUnderline\",{get:function(){return this._onHideLinkUnderline.event},enumerable:!1,configurable:!0}),t.prototype.registerLinkProvider=function(e){var t=this;return this._linkProviders.push(e),{dispose:function(){var r=t._linkProviders.indexOf(e);-1!==r&&t._linkProviders.splice(r,1)}}},t.prototype.attachToDom=function(e,t,r){var i=this;this._element=e,this._mouseService=t,this._renderService=r,this.register(h.addDisposableDomListener(this._element,\"mouseleave\",(function(){i._isMouseOut=!0,i._clearCurrentLink()}))),this.register(h.addDisposableDomListener(this._element,\"mousemove\",this._onMouseMove.bind(this))),this.register(h.addDisposableDomListener(this._element,\"click\",this._onClick.bind(this)))},t.prototype._onMouseMove=function(e){if(this._lastMouseEvent=e,this._element&&this._mouseService){var t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(t){this._isMouseOut=!1;for(var r=e.composedPath(),i=0;i<r.length;i++){var n=r[i];if(n.classList.contains(\"xterm\"))break;if(n.classList.contains(\"xterm-hover\"))return}this._lastBufferCell&&t.x===this._lastBufferCell.x&&t.y===this._lastBufferCell.y||(this._onHover(t),this._lastBufferCell=t)}}},t.prototype._onHover=function(e){if(this._activeLine!==e.y)return this._clearCurrentLink(),void this._askForLink(e,!1);this._currentLink&&this._linkAtPosition(this._currentLink.link,e)||(this._clearCurrentLink(),this._askForLink(e,!0))},t.prototype._askForLink=function(e,t){var r,i=this;this._activeProviderReplies&&t||(null===(r=this._activeProviderReplies)||void 0===r||r.forEach((function(e){null==e||e.forEach((function(e){e.link.dispose&&e.link.dispose()}))})),this._activeProviderReplies=new Map,this._activeLine=e.y);var n=!1;this._linkProviders.forEach((function(r,o){var s;t?(null===(s=i._activeProviderReplies)||void 0===s?void 0:s.get(o))&&(n=i._checkLinkProviderResult(o,e,n)):r.provideLinks(e.y,(function(t){var r,s;if(!i._isMouseOut){var a=null==t?void 0:t.map((function(e){return{link:e}}));null===(r=i._activeProviderReplies)||void 0===r||r.set(o,a),n=i._checkLinkProviderResult(o,e,n),(null===(s=i._activeProviderReplies)||void 0===s?void 0:s.size)===i._linkProviders.length&&i._removeIntersectingLinks(e.y,i._activeProviderReplies)}}))}))},t.prototype._removeIntersectingLinks=function(e,t){for(var r=new Set,i=0;i<t.size;i++){var n=t.get(i);if(n)for(var o=0;o<n.length;o++)for(var s=n[o],a=s.link.range.start.y<e?0:s.link.range.start.x,c=s.link.range.end.y>e?this._bufferService.cols:s.link.range.end.x,l=a;l<=c;l++){if(r.has(l)){n.splice(o--,1);break}r.add(l)}}},t.prototype._checkLinkProviderResult=function(e,t,r){var i,n=this;if(!this._activeProviderReplies)return r;for(var o=this._activeProviderReplies.get(e),s=!1,a=0;a<e;a++)this._activeProviderReplies.has(a)&&!this._activeProviderReplies.get(a)||(s=!0);if(!s&&o){var c=o.find((function(e){return n._linkAtPosition(e.link,t)}));c&&(r=!0,this._handleNewLink(c))}if(this._activeProviderReplies.size===this._linkProviders.length&&!r)for(a=0;a<this._activeProviderReplies.size;a++){var l=null===(i=this._activeProviderReplies.get(a))||void 0===i?void 0:i.find((function(e){return n._linkAtPosition(e.link,t)}));if(l){r=!0,this._handleNewLink(l);break}}return r},t.prototype._onClick=function(e){if(this._element&&this._mouseService&&this._currentLink){var t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}},t.prototype._clearCurrentLink=function(e,t){this._element&&this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,l.disposeArray(this._linkCacheDisposables))},t.prototype._handleNewLink=function(e){var t=this;if(this._element&&this._lastMouseEvent&&this._mouseService){var r=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);r&&this._linkAtPosition(e.link,r)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:function(){var e,r;return null===(r=null===(e=t._currentLink)||void 0===e?void 0:e.state)||void 0===r?void 0:r.decorations.pointerCursor},set:function(e){var r,i;(null===(r=t._currentLink)||void 0===r?void 0:r.state)&&t._currentLink.state.decorations.pointerCursor!==e&&(t._currentLink.state.decorations.pointerCursor=e,t._currentLink.state.isHovered&&(null===(i=t._element)||void 0===i||i.classList.toggle(\"xterm-cursor-pointer\",e)))}},underline:{get:function(){var e,r;return null===(r=null===(e=t._currentLink)||void 0===e?void 0:e.state)||void 0===r?void 0:r.decorations.underline},set:function(r){var i,n,o;(null===(i=t._currentLink)||void 0===i?void 0:i.state)&&(null===(o=null===(n=t._currentLink)||void 0===n?void 0:n.state)||void 0===o?void 0:o.decorations.underline)!==r&&(t._currentLink.state.decorations.underline=r,t._currentLink.state.isHovered&&t._fireUnderlineEvent(e.link,r))}}}),this._renderService&&this._linkCacheDisposables.push(this._renderService.onRenderedBufferChange((function(e){var r=0===e.start?0:e.start+1+t._bufferService.buffer.ydisp;t._clearCurrentLink(r,e.end+1+t._bufferService.buffer.ydisp)}))))}},t.prototype._linkHover=function(e,t,r){var i;(null===(i=this._currentLink)||void 0===i?void 0:i.state)&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add(\"xterm-cursor-pointer\")),t.hover&&t.hover(r,t.text)},t.prototype._fireUnderlineEvent=function(e,t){var r=e.range,i=this._bufferService.buffer.ydisp,n=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-i-1,r.end.x,r.end.y-i-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(n)},t.prototype._linkLeave=function(e,t,r){var i;(null===(i=this._currentLink)||void 0===i?void 0:i.state)&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove(\"xterm-cursor-pointer\")),t.leave&&t.leave(r,t.text)},t.prototype._linkAtPosition=function(e,t){var r=e.range.start.y===e.range.end.y,i=e.range.start.y<t.y,n=e.range.end.y>t.y;return(r&&e.range.start.x<=t.x&&e.range.end.x>=t.x||i&&e.range.end.x>=t.x||n&&e.range.start.x<=t.x||i&&n)&&e.range.start.y<=t.y&&e.range.end.y>=t.y},t.prototype._positionFromMouseEvent=function(e,t,r){var i=r.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(i)return{x:i[0],y:i[1]+this._bufferService.buffer.ydisp}},t.prototype._createLinkUnderlineEvent=function(e,t,r,i,n){return{x1:e,y1:t,x2:r,y2:i,cols:this._bufferService.cols,fg:n}},t=o([s(0,a.IBufferService)],t)}(l.Disposable);t.Linkifier2=u},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreBrowserService=void 0;var i=function(){function e(e){this._textarea=e}return Object.defineProperty(e.prototype,\"isFocused\",{get:function(){return document.activeElement===this._textarea&&document.hasFocus()},enumerable:!1,configurable:!0}),e}();t.CoreBrowserService=i},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreTerminal=void 0;var o=r(2),s=r(1),a=r(66),c=r(67),l=r(68),h=r(74),u=r(75),f=r(0),_=r(76),d=r(77),p=r(78),v=r(80),g=r(81),y=r(19),b=r(82),S=function(e){function t(t){var r=e.call(this)||this;return r._onBinary=new f.EventEmitter,r._onData=new f.EventEmitter,r._onLineFeed=new f.EventEmitter,r._onResize=new f.EventEmitter,r._onScroll=new f.EventEmitter,r._instantiationService=new a.InstantiationService,r.optionsService=new h.OptionsService(t),r._instantiationService.setService(s.IOptionsService,r.optionsService),r._bufferService=r.register(r._instantiationService.createInstance(l.BufferService)),r._instantiationService.setService(s.IBufferService,r._bufferService),r._logService=r._instantiationService.createInstance(c.LogService),r._instantiationService.setService(s.ILogService,r._logService),r._coreService=r.register(r._instantiationService.createInstance(u.CoreService,(function(){return r.scrollToBottom()}))),r._instantiationService.setService(s.ICoreService,r._coreService),r._coreMouseService=r._instantiationService.createInstance(_.CoreMouseService),r._instantiationService.setService(s.ICoreMouseService,r._coreMouseService),r._dirtyRowService=r._instantiationService.createInstance(d.DirtyRowService),r._instantiationService.setService(s.IDirtyRowService,r._dirtyRowService),r.unicodeService=r._instantiationService.createInstance(p.UnicodeService),r._instantiationService.setService(s.IUnicodeService,r.unicodeService),r._charsetService=r._instantiationService.createInstance(v.CharsetService),r._instantiationService.setService(s.ICharsetService,r._charsetService),r._inputHandler=new y.InputHandler(r._bufferService,r._charsetService,r._coreService,r._dirtyRowService,r._logService,r.optionsService,r._coreMouseService,r.unicodeService),r.register(f.forwardEvent(r._inputHandler.onLineFeed,r._onLineFeed)),r.register(r._inputHandler),r.register(f.forwardEvent(r._bufferService.onResize,r._onResize)),r.register(f.forwardEvent(r._coreService.onData,r._onData)),r.register(f.forwardEvent(r._coreService.onBinary,r._onBinary)),r.register(r.optionsService.onOptionChange((function(e){return r._updateOptions(e)}))),r._writeBuffer=new b.WriteBuffer((function(e){return r._inputHandler.parse(e)})),r}return n(t,e),Object.defineProperty(t.prototype,\"onBinary\",{get:function(){return this._onBinary.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onData\",{get:function(){return this._onData.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onLineFeed\",{get:function(){return this._onLineFeed.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onResize\",{get:function(){return this._onResize.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onScroll\",{get:function(){return this._onScroll.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"cols\",{get:function(){return this._bufferService.cols},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"rows\",{get:function(){return this._bufferService.rows},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"buffers\",{get:function(){return this._bufferService.buffers},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){var t;this._isDisposed||(e.prototype.dispose.call(this),null===(t=this._windowsMode)||void 0===t||t.dispose(),this._windowsMode=void 0)},t.prototype.write=function(e,t){this._writeBuffer.write(e,t)},t.prototype.writeSync=function(e){this._writeBuffer.writeSync(e)},t.prototype.resize=function(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,l.MINIMUM_COLS),t=Math.max(t,l.MINIMUM_ROWS),this._bufferService.resize(e,t))},t.prototype.scroll=function(e,t){void 0===t&&(t=!1);var r,i=this._bufferService.buffer;(r=this._cachedBlankLine)&&r.length===this.cols&&r.getFg(0)===e.fg&&r.getBg(0)===e.bg||(r=i.getBlankLine(e,t),this._cachedBlankLine=r),r.isWrapped=t;var n=i.ybase+i.scrollTop,o=i.ybase+i.scrollBottom;if(0===i.scrollTop){var s=i.lines.isFull;o===i.lines.length-1?s?i.lines.recycle().copyFrom(r):i.lines.push(r.clone()):i.lines.splice(o+1,0,r.clone()),s?this._bufferService.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this._bufferService.isUserScrolling||i.ydisp++)}else{var a=o-n+1;i.lines.shiftElements(n+1,a-1,-1),i.lines.set(o,r.clone())}this._bufferService.isUserScrolling||(i.ydisp=i.ybase),this._dirtyRowService.markRangeDirty(i.scrollTop,i.scrollBottom),this._onScroll.fire(i.ydisp)},t.prototype.scrollLines=function(e,t){var r=this._bufferService.buffer;if(e<0){if(0===r.ydisp)return;this._bufferService.isUserScrolling=!0}else e+r.ydisp>=r.ybase&&(this._bufferService.isUserScrolling=!1);var i=r.ydisp;r.ydisp=Math.max(Math.min(r.ydisp+e,r.ybase),0),i!==r.ydisp&&(t||this._onScroll.fire(r.ydisp))},t.prototype.scrollPages=function(e){this.scrollLines(e*(this.rows-1))},t.prototype.scrollToTop=function(){this.scrollLines(-this._bufferService.buffer.ydisp)},t.prototype.scrollToBottom=function(){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)},t.prototype.scrollToLine=function(e){var t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)},t.prototype.addEscHandler=function(e,t){return this._inputHandler.addEscHandler(e,t)},t.prototype.addDcsHandler=function(e,t){return this._inputHandler.addDcsHandler(e,t)},t.prototype.addCsiHandler=function(e,t){return this._inputHandler.addCsiHandler(e,t)},t.prototype.addOscHandler=function(e,t){return this._inputHandler.addOscHandler(e,t)},t.prototype._setup=function(){this.optionsService.options.windowsMode&&this._enableWindowsMode()},t.prototype.reset=function(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this._coreService.reset(),this._coreMouseService.reset()},t.prototype._updateOptions=function(e){var t;switch(e){case\"scrollback\":this.buffers.resize(this.cols,this.rows);break;case\"windowsMode\":this.optionsService.options.windowsMode?this._enableWindowsMode():(null===(t=this._windowsMode)||void 0===t||t.dispose(),this._windowsMode=void 0)}},t.prototype._enableWindowsMode=function(){var e=this;if(!this._windowsMode){var t=[];t.push(this.onLineFeed(g.updateWindowsModeWrappedState.bind(null,this._bufferService))),t.push(this.addCsiHandler({final:\"H\"},(function(){return g.updateWindowsModeWrappedState(e._bufferService),!1}))),this._windowsMode={dispose:function(){for(var e=0,r=t;e<r.length;e++){r[e].dispose()}}}}},t}(o.Disposable);t.CoreTerminal=S},function(e,t,r){\"use strict\";var i=this&&this.__spreadArrays||function(){for(var e=0,t=0,r=arguments.length;t<r;t++)e+=arguments[t].length;var i=Array(e),n=0;for(t=0;t<r;t++)for(var o=arguments[t],s=0,a=o.length;s<a;s++,n++)i[n]=o[s];return i};Object.defineProperty(t,\"__esModule\",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;var n=r(1),o=r(14),s=function(){function e(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];this._entries=new Map;for(var r=0,i=e;r<i.length;r++){var n=i[r],o=n[0],s=n[1];this.set(o,s)}}return e.prototype.set=function(e,t){var r=this._entries.get(e);return this._entries.set(e,t),r},e.prototype.forEach=function(e){this._entries.forEach((function(t,r){return e(r,t)}))},e.prototype.has=function(e){return this._entries.has(e)},e.prototype.get=function(e){return this._entries.get(e)},e}();t.ServiceCollection=s;var a=function(){function e(){this._services=new s,this._services.set(n.IInstantiationService,this)}return e.prototype.setService=function(e,t){this._services.set(e,t)},e.prototype.getService=function(e){return this._services.get(e)},e.prototype.createInstance=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];for(var n=o.getServiceDependencies(e).sort((function(e,t){return e.index-t.index})),s=[],a=0,c=n;a<c.length;a++){var l=c[a],h=this._services.get(l.id);if(!h)throw new Error(\"[createInstance] \"+e.name+\" depends on UNKNOWN service \"+l.id+\".\");s.push(h)}var u=n.length>0?n[0].index:t.length;if(t.length!==u)throw new Error(\"[createInstance] First service dependency of \"+e.name+\" at position \"+(u+1)+\" conflicts with \"+t.length+\" static arguments\");return new(e.bind.apply(e,i([void 0],i(t,s))))},e}();t.InstantiationService=a},function(e,t,r){\"use strict\";var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}},o=this&&this.__spreadArrays||function(){for(var e=0,t=0,r=arguments.length;t<r;t++)e+=arguments[t].length;var i=Array(e),n=0;for(t=0;t<r;t++)for(var o=arguments[t],s=0,a=o.length;s<a;s++,n++)i[n]=o[s];return i};Object.defineProperty(t,\"__esModule\",{value:!0}),t.LogService=t.LogLevel=void 0;var s,a=r(1);!function(e){e[e.DEBUG=0]=\"DEBUG\",e[e.INFO=1]=\"INFO\",e[e.WARN=2]=\"WARN\",e[e.ERROR=3]=\"ERROR\",e[e.OFF=4]=\"OFF\"}(s=t.LogLevel||(t.LogLevel={}));var c={debug:s.DEBUG,info:s.INFO,warn:s.WARN,error:s.ERROR,off:s.OFF},l=function(){function e(e){var t=this;this._optionsService=e,this._updateLogLevel(),this._optionsService.onOptionChange((function(e){\"logLevel\"===e&&t._updateLogLevel()}))}return e.prototype._updateLogLevel=function(){this._logLevel=c[this._optionsService.options.logLevel]},e.prototype._evalLazyOptionalParams=function(e){for(var t=0;t<e.length;t++)\"function\"==typeof e[t]&&(e[t]=e[t]())},e.prototype._log=function(e,t,r){this._evalLazyOptionalParams(r),e.call.apply(e,o([console,\"xterm.js: \"+t],r))},e.prototype.debug=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this._logLevel<=s.DEBUG&&this._log(console.log,e,t)},e.prototype.info=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this._logLevel<=s.INFO&&this._log(console.info,e,t)},e.prototype.warn=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this._logLevel<=s.WARN&&this._log(console.warn,e,t)},e.prototype.error=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this._logLevel<=s.ERROR&&this._log(console.error,e,t)},e=i([n(0,a.IOptionsService)],e)}();t.LogService=l},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferService=t.MINIMUM_ROWS=t.MINIMUM_COLS=void 0;var a=r(1),c=r(69),l=r(0),h=r(2);t.MINIMUM_COLS=2,t.MINIMUM_ROWS=1;var u=function(e){function r(r){var i=e.call(this)||this;return i._optionsService=r,i.isUserScrolling=!1,i._onResize=new l.EventEmitter,i.cols=Math.max(r.options.cols,t.MINIMUM_COLS),i.rows=Math.max(r.options.rows,t.MINIMUM_ROWS),i.buffers=new c.BufferSet(r,i),i}return n(r,e),Object.defineProperty(r.prototype,\"onResize\",{get:function(){return this._onResize.event},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,\"buffer\",{get:function(){return this.buffers.active},enumerable:!1,configurable:!0}),r.prototype.dispose=function(){e.prototype.dispose.call(this),this.buffers.dispose()},r.prototype.resize=function(e,t){this.cols=e,this.rows=t,this.buffers.resize(e,t),this.buffers.setupTabStops(this.cols),this._onResize.fire({cols:e,rows:t})},r.prototype.reset=function(){this.buffers.dispose(),this.buffers=new c.BufferSet(this._optionsService,this),this.isUserScrolling=!1},r=o([s(0,a.IOptionsService)],r)}(h.Disposable);t.BufferService=u},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferSet=void 0;var o=r(70),s=r(0),a=function(e){function t(t,r){var i=e.call(this)||this;return i._onBufferActivate=i.register(new s.EventEmitter),i._normal=new o.Buffer(!0,t,r),i._normal.fillViewportRows(),i._alt=new o.Buffer(!1,t,r),i._activeBuffer=i._normal,i.setupTabStops(),i}return n(t,e),Object.defineProperty(t.prototype,\"onBufferActivate\",{get:function(){return this._onBufferActivate.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"alt\",{get:function(){return this._alt},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"active\",{get:function(){return this._activeBuffer},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"normal\",{get:function(){return this._normal},enumerable:!1,configurable:!0}),t.prototype.activateNormalBuffer=function(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))},t.prototype.activateAltBuffer=function(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))},t.prototype.resize=function(e,t){this._normal.resize(e,t),this._alt.resize(e,t)},t.prototype.setupTabStops=function(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)},t}(r(2).Disposable);t.BufferSet=a},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferStringIterator=t.Buffer=t.MAX_BUFFER_SIZE=void 0;var i=r(71),n=r(16),o=r(4),s=r(3),a=r(72),c=r(73),l=r(20),h=r(6);t.MAX_BUFFER_SIZE=4294967295;var u=function(){function e(e,t,r){this._hasScrollback=e,this._optionsService=t,this._bufferService=r,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.savedY=0,this.savedX=0,this.savedCurAttrData=n.DEFAULT_ATTR_DATA.clone(),this.savedCharset=l.DEFAULT_CHARSET,this.markers=[],this._nullCell=o.CellData.fromCharData([0,s.NULL_CELL_CHAR,s.NULL_CELL_WIDTH,s.NULL_CELL_CODE]),this._whitespaceCell=o.CellData.fromCharData([0,s.WHITESPACE_CELL_CHAR,s.WHITESPACE_CELL_WIDTH,s.WHITESPACE_CELL_CODE]),this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new i.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}return e.prototype.getNullCell=function(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new h.ExtendedAttrs),this._nullCell},e.prototype.getWhitespaceCell=function(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new h.ExtendedAttrs),this._whitespaceCell},e.prototype.getBlankLine=function(e,t){return new n.BufferLine(this._bufferService.cols,this.getNullCell(e),t)},Object.defineProperty(e.prototype,\"hasScrollback\",{get:function(){return this._hasScrollback&&this.lines.maxLength>this._rows},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isCursorInViewport\",{get:function(){var e=this.ybase+this.y-this.ydisp;return e>=0&&e<this._rows},enumerable:!1,configurable:!0}),e.prototype._getCorrectBufferLength=function(e){if(!this._hasScrollback)return e;var r=e+this._optionsService.options.scrollback;return r>t.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:r},e.prototype.fillViewportRows=function(e){if(0===this.lines.length){void 0===e&&(e=n.DEFAULT_ATTR_DATA);for(var t=this._rows;t--;)this.lines.push(this.getBlankLine(e))}},e.prototype.clear=function(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new i.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()},e.prototype.resize=function(e,t){var r=this.getNullCell(n.DEFAULT_ATTR_DATA),i=this._getCorrectBufferLength(t);if(i>this.lines.maxLength&&(this.lines.maxLength=i),this.lines.length>0){if(this._cols<e)for(var o=0;o<this.lines.length;o++)this.lines.get(o).resize(e,r);var s=0;if(this._rows<t)for(var a=this._rows;a<t;a++)this.lines.length<t+this.ybase&&(this._optionsService.options.windowsMode?this.lines.push(new n.BufferLine(e,r)):this.ybase>0&&this.lines.length<=this.ybase+this.y+s+1?(this.ybase--,s++,this.ydisp>0&&this.ydisp--):this.lines.push(new n.BufferLine(e,r)));else for(a=this._rows;a>t;a--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(i<this.lines.maxLength){var c=this.lines.length-i;c>0&&(this.lines.trimStart(c),this.ybase=Math.max(this.ybase-c,0),this.ydisp=Math.max(this.ydisp-c,0),this.savedY=Math.max(this.savedY-c,0)),this.lines.maxLength=i}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),s&&(this.y+=s),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(o=0;o<this.lines.length;o++)this.lines.get(o).resize(e,r);this._cols=e,this._rows=t},Object.defineProperty(e.prototype,\"_isReflowEnabled\",{get:function(){return this._hasScrollback&&!this._optionsService.options.windowsMode},enumerable:!1,configurable:!0}),e.prototype._reflow=function(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))},e.prototype._reflowLarger=function(e,t){var r=a.reflowLargerGetLinesToRemove(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(n.DEFAULT_ATTR_DATA));if(r.length>0){var i=a.reflowLargerCreateNewLayout(this.lines,r);a.reflowLargerApplyNewLayout(this.lines,i.layout),this._reflowLargerAdjustViewport(e,t,i.countRemoved)}},e.prototype._reflowLargerAdjustViewport=function(e,t,r){for(var i=this.getNullCell(n.DEFAULT_ATTR_DATA),o=r;o-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length<t&&this.lines.push(new n.BufferLine(e,i))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-r,0)},e.prototype._reflowSmaller=function(e,t){for(var r=this.getNullCell(n.DEFAULT_ATTR_DATA),i=[],o=0,s=this.lines.length-1;s>=0;s--){var c=this.lines.get(s);if(!(!c||!c.isWrapped&&c.getTrimmedLength()<=e)){for(var l=[c];c.isWrapped&&s>0;)c=this.lines.get(--s),l.unshift(c);var h=this.ybase+this.y;if(!(h>=s&&h<s+l.length)){var u=l[l.length-1].getTrimmedLength(),f=a.reflowSmallerGetNewLineLengths(l,this._cols,e),_=f.length-l.length,d=void 0;d=0===this.ybase&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+_):Math.max(0,this.lines.length-this.lines.maxLength+_);for(var p=[],v=0;v<_;v++){var g=this.getBlankLine(n.DEFAULT_ATTR_DATA,!0);p.push(g)}p.length>0&&(i.push({start:s+l.length+o,newLines:p}),o+=p.length),l.push.apply(l,p);var y=f.length-1,b=f[y];0===b&&(b=f[--y]);for(var S=l.length-_-1,m=u;S>=0;){var C=Math.min(m,b);if(l[y].copyCellsFrom(l[S],m-C,b-C,C,!0),0===(b-=C)&&(b=f[--y]),0===(m-=C)){S--;var w=Math.max(S,0);m=a.getWrappedLineTrimmedLength(l,w,this._cols)}}for(v=0;v<l.length;v++)f[v]<e&&l[v].setCell(f[v],r);for(var E=_-d;E-- >0;)0===this.ybase?this.y<t-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+o)-t&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+_,this.ybase+t-1)}}}if(i.length>0){var L=[],A=[];for(v=0;v<this.lines.length;v++)A.push(this.lines.get(v));var R=this.lines.length,k=R-1,x=0,D=i[x];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+o);var T=0;for(v=Math.min(this.lines.maxLength-1,R+o-1);v>=0;v--)if(D&&D.start>k+T){for(var O=D.newLines.length-1;O>=0;O--)this.lines.set(v--,D.newLines[O]);v++,L.push({index:k+1,amount:D.newLines.length}),T+=D.newLines.length,D=i[++x]}else this.lines.set(v,A[k--]);var M=0;for(v=L.length-1;v>=0;v--)L[v].index+=M,this.lines.onInsertEmitter.fire(L[v]),M+=L[v].amount;var P=Math.max(0,R+o-this.lines.maxLength);P>0&&this.lines.onTrimEmitter.fire(P)}},e.prototype.stringIndexToBufferIndex=function(e,t,r){for(void 0===r&&(r=!1);t;){var i=this.lines.get(e);if(!i)return[-1,-1];for(var n=r?i.getTrimmedLength():i.length,o=0;o<n;++o)if(i.get(o)[s.CHAR_DATA_WIDTH_INDEX]&&(t-=i.get(o)[s.CHAR_DATA_CHAR_INDEX].length||1),t<0)return[e,o];e++}return[e,0]},e.prototype.translateBufferLineToString=function(e,t,r,i){void 0===r&&(r=0);var n=this.lines.get(e);return n?n.translateToString(t,r,i):\"\"},e.prototype.getWrappedRangeForLine=function(e){for(var t=e,r=e;t>0&&this.lines.get(t).isWrapped;)t--;for(;r+1<this.lines.length&&this.lines.get(r+1).isWrapped;)r++;return{first:t,last:r}},e.prototype.setupTabStops=function(e){for(null!=e?this.tabs[e]||(e=this.prevStop(e)):(this.tabs={},e=0);e<this._cols;e+=this._optionsService.options.tabStopWidth)this.tabs[e]=!0},e.prototype.prevStop=function(e){for(null==e&&(e=this.x);!this.tabs[--e]&&e>0;);return e>=this._cols?this._cols-1:e<0?0:e},e.prototype.nextStop=function(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e<this._cols;);return e>=this._cols?this._cols-1:e<0?0:e},e.prototype.addMarker=function(e){var t=this,r=new c.Marker(e);return this.markers.push(r),r.register(this.lines.onTrim((function(e){r.line-=e,r.line<0&&r.dispose()}))),r.register(this.lines.onInsert((function(e){r.line>=e.index&&(r.line+=e.amount)}))),r.register(this.lines.onDelete((function(e){r.line>=e.index&&r.line<e.index+e.amount&&r.dispose(),r.line>e.index&&(r.line-=e.amount)}))),r.register(r.onDispose((function(){return t._removeMarker(r)}))),r},e.prototype._removeMarker=function(e){this.markers.splice(this.markers.indexOf(e),1)},e.prototype.iterator=function(e,t,r,i,n){return new f(this,e,t,r,i,n)},e}();t.Buffer=u;var f=function(){function e(e,t,r,i,n,o){void 0===r&&(r=0),void 0===i&&(i=e.lines.length),void 0===n&&(n=0),void 0===o&&(o=0),this._buffer=e,this._trimRight=t,this._startIndex=r,this._endIndex=i,this._startOverscan=n,this._endOverscan=o,this._startIndex<0&&(this._startIndex=0),this._endIndex>this._buffer.lines.length&&(this._endIndex=this._buffer.lines.length),this._current=this._startIndex}return e.prototype.hasNext=function(){return this._current<this._endIndex},e.prototype.next=function(){var e=this._buffer.getWrappedRangeForLine(this._current);e.first<this._startIndex-this._startOverscan&&(e.first=this._startIndex-this._startOverscan),e.last>this._endIndex+this._endOverscan&&(e.last=this._endIndex+this._endOverscan),e.first=Math.max(e.first,0),e.last=Math.min(e.last,this._buffer.lines.length);for(var t=\"\",r=e.first;r<=e.last;++r)t+=this._buffer.translateBufferLineToString(r,this._trimRight);return this._current=e.last+1,{range:e,content:t}},e}();t.BufferStringIterator=f},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.CircularList=void 0;var i=r(0),n=function(){function e(e){this._maxLength=e,this.onDeleteEmitter=new i.EventEmitter,this.onInsertEmitter=new i.EventEmitter,this.onTrimEmitter=new i.EventEmitter,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}return Object.defineProperty(e.prototype,\"onDelete\",{get:function(){return this.onDeleteEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onInsert\",{get:function(){return this.onInsertEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"onTrim\",{get:function(){return this.onTrimEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"maxLength\",{get:function(){return this._maxLength},set:function(e){if(this._maxLength!==e){for(var t=new Array(e),r=0;r<Math.min(e,this.length);r++)t[r]=this._array[this._getCyclicIndex(r)];this._array=t,this._maxLength=e,this._startIndex=0}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"length\",{get:function(){return this._length},set:function(e){if(e>this._length)for(var t=this._length;t<e;t++)this._array[t]=void 0;this._length=e},enumerable:!1,configurable:!0}),e.prototype.get=function(e){return this._array[this._getCyclicIndex(e)]},e.prototype.set=function(e,t){this._array[this._getCyclicIndex(e)]=t},e.prototype.push=function(e){this._array[this._getCyclicIndex(this._length)]=e,this._length===this._maxLength?(this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1)):this._length++},e.prototype.recycle=function(){if(this._length!==this._maxLength)throw new Error(\"Can only recycle when the buffer is full\");return this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1),this._array[this._getCyclicIndex(this._length-1)]},Object.defineProperty(e.prototype,\"isFull\",{get:function(){return this._length===this._maxLength},enumerable:!1,configurable:!0}),e.prototype.pop=function(){return this._array[this._getCyclicIndex(this._length---1)]},e.prototype.splice=function(e,t){for(var r=[],i=2;i<arguments.length;i++)r[i-2]=arguments[i];if(t){for(var n=e;n<this._length-t;n++)this._array[this._getCyclicIndex(n)]=this._array[this._getCyclicIndex(n+t)];this._length-=t}for(n=this._length-1;n>=e;n--)this._array[this._getCyclicIndex(n+r.length)]=this._array[this._getCyclicIndex(n)];for(n=0;n<r.length;n++)this._array[this._getCyclicIndex(e+n)]=r[n];if(this._length+r.length>this._maxLength){var o=this._length+r.length-this._maxLength;this._startIndex+=o,this._length=this._maxLength,this.onTrimEmitter.fire(o)}else this._length+=r.length},e.prototype.trimStart=function(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)},e.prototype.shiftElements=function(e,t,r){if(!(t<=0)){if(e<0||e>=this._length)throw new Error(\"start argument out of range\");if(e+r<0)throw new Error(\"Cannot shift elements in list beyond index 0\");if(r>0){for(var i=t-1;i>=0;i--)this.set(e+i+r,this.get(e+i));var n=e+t+r-this._length;if(n>0)for(this._length+=n;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(i=0;i<t;i++)this.set(e+i+r,this.get(e+i))}},e.prototype._getCyclicIndex=function(e){return(this._startIndex+e)%this._maxLength},e}();t.CircularList=n},function(e,t,r){\"use strict\";function i(e,t,r){if(t===e.length-1)return e[t].getTrimmedLength();var i=!e[t].hasContent(r-1)&&1===e[t].getWidth(r-1),n=2===e[t+1].getWidth(0);return i&&n?r-1:r}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getWrappedLineTrimmedLength=t.reflowSmallerGetNewLineLengths=t.reflowLargerApplyNewLayout=t.reflowLargerCreateNewLayout=t.reflowLargerGetLinesToRemove=void 0,t.reflowLargerGetLinesToRemove=function(e,t,r,n,o){for(var s=[],a=0;a<e.length-1;a++){var c=a,l=e.get(++c);if(l.isWrapped){for(var h=[e.get(a)];c<e.length&&l.isWrapped;)h.push(l),l=e.get(++c);if(n>=a&&n<c)a+=h.length-1;else{for(var u=0,f=i(h,u,t),_=1,d=0;_<h.length;){var p=i(h,_,t),v=p-d,g=r-f,y=Math.min(v,g);h[u].copyCellsFrom(h[_],d,f,y,!1),(f+=y)===r&&(u++,f=0),(d+=y)===p&&(_++,d=0),0===f&&0!==u&&2===h[u-1].getWidth(r-1)&&(h[u].copyCellsFrom(h[u-1],r-1,f++,1,!1),h[u-1].setCell(r-1,o))}h[u].replaceCells(f,r,o);for(var b=0,S=h.length-1;S>0&&(S>u||0===h[S].getTrimmedLength());S--)b++;b>0&&(s.push(a+h.length-b),s.push(b)),a+=h.length-1}}}return s},t.reflowLargerCreateNewLayout=function(e,t){for(var r=[],i=0,n=t[i],o=0,s=0;s<e.length;s++)if(n===s){var a=t[++i];e.onDeleteEmitter.fire({index:s-o,amount:a}),s+=a-1,o+=a,n=t[++i]}else r.push(s);return{layout:r,countRemoved:o}},t.reflowLargerApplyNewLayout=function(e,t){for(var r=[],i=0;i<t.length;i++)r.push(e.get(t[i]));for(i=0;i<r.length;i++)e.set(i,r[i]);e.length=t.length},t.reflowSmallerGetNewLineLengths=function(e,t,r){for(var n=[],o=e.map((function(r,n){return i(e,n,t)})).reduce((function(e,t){return e+t})),s=0,a=0,c=0;c<o;){if(o-c<r){n.push(o-c);break}s+=r;var l=i(e,a,t);s>l&&(s-=l,a++);var h=2===e[a].getWidth(s-1);h&&s--;var u=h?r-1:r;n.push(u),c+=u}return n},t.getWrappedLineTrimmedLength=i},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.Marker=void 0;var o=r(0),s=function(e){function t(r){var i=e.call(this)||this;return i.line=r,i._id=t._nextId++,i.isDisposed=!1,i._onDispose=new o.EventEmitter,i}return n(t,e),Object.defineProperty(t.prototype,\"id\",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onDispose\",{get:function(){return this._onDispose.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire())},t._nextId=1,t}(r(2).Disposable);t.Marker=s},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=t.DEFAULT_BELL_SOUND=void 0;var i=r(0),n=r(11),o=r(33);t.DEFAULT_BELL_SOUND=\"data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjMyLjEwNAAAAAAAAAAAAAAA//tQxAADB8AhSmxhIIEVCSiJrDCQBTcu3UrAIwUdkRgQbFAZC1CQEwTJ9mjRvBA4UOLD8nKVOWfh+UlK3z/177OXrfOdKl7pyn3Xf//WreyTRUoAWgBgkOAGbZHBgG1OF6zM82DWbZaUmMBptgQhGjsyYqc9ae9XFz280948NMBWInljyzsNRFLPWdnZGWrddDsjK1unuSrVN9jJsK8KuQtQCtMBjCEtImISdNKJOopIpBFpNSMbIHCSRpRR5iakjTiyzLhchUUBwCgyKiweBv/7UsQbg8isVNoMPMjAAAA0gAAABEVFGmgqK////9bP/6XCykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\",t.DEFAULT_OPTIONS=Object.freeze({cols:80,rows:24,cursorBlink:!1,cursorStyle:\"block\",cursorWidth:1,bellSound:t.DEFAULT_BELL_SOUND,bellStyle:\"none\",drawBoldTextInBrightColors:!0,fastScrollModifier:\"alt\",fastScrollSensitivity:5,fontFamily:\"courier-new, courier, monospace\",fontSize:15,fontWeight:\"normal\",fontWeightBold:\"bold\",lineHeight:1,linkTooltipHoverDuration:500,letterSpacing:0,logLevel:\"info\",scrollback:1e3,scrollSensitivity:1,screenReaderMode:!1,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!0,allowTransparency:!1,tabStopWidth:8,theme:{},rightClickSelectsWord:n.isMac,rendererType:\"canvas\",windowOptions:{},windowsMode:!1,wordSeparator:\" ()[]{}',\\\"`\",convertEol:!1,termName:\"xterm\",cancelEvents:!1});var s=[\"normal\",\"bold\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"],a=[\"cols\",\"rows\"],c=function(){function e(e){this._onOptionChange=new i.EventEmitter,this.options=o.clone(t.DEFAULT_OPTIONS);for(var r=0,n=Object.keys(e);r<n.length;r++){var s=n[r];if(s in this.options)try{var a=e[s];this.options[s]=this._sanitizeAndValidateOption(s,a)}catch(e){console.error(e)}}}return Object.defineProperty(e.prototype,\"onOptionChange\",{get:function(){return this._onOptionChange.event},enumerable:!1,configurable:!0}),e.prototype.setOption=function(e,r){if(!(e in t.DEFAULT_OPTIONS))throw new Error('No option with key \"'+e+'\"');if(-1!==a.indexOf(e))throw new Error('Option \"'+e+'\" can only be set in the constructor');this.options[e]!==r&&(r=this._sanitizeAndValidateOption(e,r),this.options[e]!==r&&(this.options[e]=r,this._onOptionChange.fire(e)))},e.prototype._sanitizeAndValidateOption=function(e,r){switch(e){case\"bellStyle\":case\"cursorStyle\":case\"rendererType\":case\"wordSeparator\":r||(r=t.DEFAULT_OPTIONS[e]);break;case\"fontWeight\":case\"fontWeightBold\":if(\"number\"==typeof r&&1<=r&&r<=1e3)break;r=-1!==s.indexOf(r)?r:t.DEFAULT_OPTIONS[e];break;case\"cursorWidth\":r=Math.floor(r);case\"lineHeight\":case\"tabStopWidth\":if(r<1)throw new Error(e+\" cannot be less than 1, value: \"+r);break;case\"minimumContrastRatio\":r=Math.max(1,Math.min(21,Math.round(10*r)/10));break;case\"scrollback\":if((r=Math.min(r,4294967295))<0)throw new Error(e+\" cannot be less than 0, value: \"+r);break;case\"fastScrollSensitivity\":case\"scrollSensitivity\":if(r<=0)throw new Error(e+\" cannot be less than or equal to 0, value: \"+r)}return r},e.prototype.getOption=function(e){if(!(e in t.DEFAULT_OPTIONS))throw new Error('No option with key \"'+e+'\"');return this.options[e]},e}();t.OptionsService=c},function(e,t,r){\"use strict\";var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreService=void 0;var a=r(1),c=r(0),l=r(33),h=r(2),u=Object.freeze({insertMode:!1}),f=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0}),_=function(e){function t(t,r,i,n){var o=e.call(this)||this;return o._bufferService=r,o._logService=i,o._optionsService=n,o.isCursorInitialized=!1,o.isCursorHidden=!1,o._onData=o.register(new c.EventEmitter),o._onUserInput=o.register(new c.EventEmitter),o._onBinary=o.register(new c.EventEmitter),o._scrollToBottom=t,o.register({dispose:function(){return o._scrollToBottom=void 0}}),o.modes=l.clone(u),o.decPrivateModes=l.clone(f),o}return n(t,e),Object.defineProperty(t.prototype,\"onData\",{get:function(){return this._onData.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onUserInput\",{get:function(){return this._onUserInput.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"onBinary\",{get:function(){return this._onBinary.event},enumerable:!1,configurable:!0}),t.prototype.reset=function(){this.modes=l.clone(u),this.decPrivateModes=l.clone(f)},t.prototype.triggerDataEvent=function(e,t){if(void 0===t&&(t=!1),!this._optionsService.options.disableStdin){var r=this._bufferService.buffer;r.ybase!==r.ydisp&&this._scrollToBottom(),t&&this._onUserInput.fire(),this._logService.debug('sending data \"'+e+'\"',(function(){return e.split(\"\").map((function(e){return e.charCodeAt(0)}))})),this._onData.fire(e)}},t.prototype.triggerBinaryEvent=function(e){this._optionsService.options.disableStdin||(this._logService.debug('sending binary \"'+e+'\"',(function(){return e.split(\"\").map((function(e){return e.charCodeAt(0)}))})),this._onBinary.fire(e))},t=o([s(1,a.IBufferService),s(2,a.ILogService),s(3,a.IOptionsService)],t)}(h.Disposable);t.CoreService=_},function(e,t,r){\"use strict\";var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreMouseService=void 0;var o=r(1),s=r(0),a={NONE:{events:0,restrict:function(){return!1}},X10:{events:1,restrict:function(e){return 4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)}},VT200:{events:19,restrict:function(e){return 32!==e.action}},DRAG:{events:23,restrict:function(e){return 32!==e.action||3!==e.button}},ANY:{events:31,restrict:function(e){return!0}}};function c(e,t){var r=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(r|=64,r|=e.action):(r|=3&e.button,4&e.button&&(r|=64),8&e.button&&(r|=128),32===e.action?r|=32:0!==e.action||t||(r|=3)),r}var l=String.fromCharCode,h={DEFAULT:function(e){var t=[c(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?\"\":\"\u001b[M\"+l(t[0])+l(t[1])+l(t[2])},SGR:function(e){var t=0===e.action&&4!==e.button?\"m\":\"M\";return\"\u001b[<\"+c(e,!0)+\";\"+e.col+\";\"+e.row+t}},u=function(){function e(e,t){this._bufferService=e,this._coreService=t,this._protocols={},this._encodings={},this._activeProtocol=\"\",this._activeEncoding=\"\",this._onProtocolChange=new s.EventEmitter,this._lastEvent=null;for(var r=0,i=Object.keys(a);r<i.length;r++){var n=i[r];this.addProtocol(n,a[n])}for(var o=0,c=Object.keys(h);o<c.length;o++){var l=c[o];this.addEncoding(l,h[l])}this.reset()}return e.prototype.addProtocol=function(e,t){this._protocols[e]=t},e.prototype.addEncoding=function(e,t){this._encodings[e]=t},Object.defineProperty(e.prototype,\"activeProtocol\",{get:function(){return this._activeProtocol},set:function(e){if(!this._protocols[e])throw new Error('unknown protocol \"'+e+'\"');this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"areMouseEventsActive\",{get:function(){return 0!==this._protocols[this._activeProtocol].events},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"activeEncoding\",{get:function(){return this._activeEncoding},set:function(e){if(!this._encodings[e])throw new Error('unknown encoding \"'+e+'\"');this._activeEncoding=e},enumerable:!1,configurable:!0}),e.prototype.reset=function(){this.activeProtocol=\"NONE\",this.activeEncoding=\"DEFAULT\",this._lastEvent=null},Object.defineProperty(e.prototype,\"onProtocolChange\",{get:function(){return this._onProtocolChange.event},enumerable:!1,configurable:!0}),e.prototype.triggerMouseEvent=function(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._compareEvents(this._lastEvent,e))return!1;if(!this._protocols[this._activeProtocol].restrict(e))return!1;var t=this._encodings[this._activeEncoding](e);return t&&(\"DEFAULT\"===this._activeEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0},e.prototype.explainEvents=function(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}},e.prototype._compareEvents=function(e,t){return e.col===t.col&&(e.row===t.row&&(e.button===t.button&&(e.action===t.action&&(e.ctrl===t.ctrl&&(e.alt===t.alt&&e.shift===t.shift)))))},e=i([n(0,o.IBufferService),n(1,o.ICoreService)],e)}();t.CoreMouseService=u},function(e,t,r){\"use strict\";var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.DirtyRowService=void 0;var o=r(1),s=function(){function e(e){this._bufferService=e,this.clearRange()}return Object.defineProperty(e.prototype,\"start\",{get:function(){return this._start},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"end\",{get:function(){return this._end},enumerable:!1,configurable:!0}),e.prototype.clearRange=function(){this._start=this._bufferService.buffer.y,this._end=this._bufferService.buffer.y},e.prototype.markDirty=function(e){e<this._start?this._start=e:e>this._end&&(this._end=e)},e.prototype.markRangeDirty=function(e,t){if(e>t){var r=e;e=t,t=r}e<this._start&&(this._start=e),t>this._end&&(this._end=t)},e.prototype.markAllDirty=function(){this.markRangeDirty(0,this._bufferService.rows-1)},e=i([n(0,o.IBufferService)],e)}();t.DirtyRowService=s},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeService=void 0;var i=r(0),n=r(79),o=function(){function e(){this._providers=Object.create(null),this._active=\"\",this._onChange=new i.EventEmitter;var e=new n.UnicodeV6;this.register(e),this._active=e.version,this._activeProvider=e}return Object.defineProperty(e.prototype,\"onChange\",{get:function(){return this._onChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"versions\",{get:function(){return Object.keys(this._providers)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"activeVersion\",{get:function(){return this._active},set:function(e){if(!this._providers[e])throw new Error('unknown Unicode version \"'+e+'\"');this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)},enumerable:!1,configurable:!0}),e.prototype.register=function(e){this._providers[e.version]=e},e.prototype.wcwidth=function(e){return this._activeProvider.wcwidth(e)},e.prototype.getStringCellWidth=function(e){for(var t=0,r=e.length,i=0;i<r;++i){var n=e.charCodeAt(i);if(55296<=n&&n<=56319){if(++i>=r)return t+this.wcwidth(n);var o=e.charCodeAt(i);56320<=o&&o<=57343?n=1024*(n-55296)+o-56320+65536:t+=this.wcwidth(o)}t+=this.wcwidth(n)}return t},e}();t.UnicodeService=o},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeV6=void 0;var i,n=r(15),o=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],s=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];var a=function(){function e(){if(this.version=\"6\",!i){i=new Uint8Array(65536),n.fill(i,1),i[0]=0,n.fill(i,0,1,32),n.fill(i,0,127,160),n.fill(i,2,4352,4448),i[9001]=2,i[9002]=2,n.fill(i,2,11904,42192),i[12351]=1,n.fill(i,2,44032,55204),n.fill(i,2,63744,64256),n.fill(i,2,65040,65050),n.fill(i,2,65072,65136),n.fill(i,2,65280,65377),n.fill(i,2,65504,65511);for(var e=0;e<o.length;++e)n.fill(i,0,o[e][0],o[e][1]+1)}}return e.prototype.wcwidth=function(e){return e<32?0:e<127?1:e<65536?i[e]:function(e,t){var r,i=0,n=t.length-1;if(e<t[0][0]||e>t[n][1])return!1;for(;n>=i;)if(e>t[r=i+n>>1][1])i=r+1;else{if(!(e<t[r][0]))return!0;n=r-1}return!1}(e,s)?0:e>=131072&&e<=196605||e>=196608&&e<=262141?2:1},e}();t.UnicodeV6=a},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharsetService=void 0;var i=function(){function e(){this.glevel=0,this._charsets=[]}return e.prototype.reset=function(){this.charset=void 0,this._charsets=[],this.glevel=0},e.prototype.setgLevel=function(e){this.glevel=e,this.charset=this._charsets[e]},e.prototype.setgCharset=function(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)},e}();t.CharsetService=i},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.updateWindowsModeWrappedState=void 0;var i=r(3);t.updateWindowsModeWrappedState=function(e){var t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),r=null==t?void 0:t.get(e.cols-1),n=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);n&&r&&(n.isWrapped=r[i.CHAR_DATA_CODE_INDEX]!==i.NULL_CELL_CODE&&r[i.CHAR_DATA_CODE_INDEX]!==i.WHITESPACE_CELL_CODE)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.WriteBuffer=void 0;var i=function(){function e(e){this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0}return e.prototype.writeSync=function(e){if(this._writeBuffer.length){for(var t=this._bufferOffset;t<this._writeBuffer.length;++t){var r=this._writeBuffer[t],i=this._callbacks[t];this._action(r),i&&i()}this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=2147483647}this._action(e)},e.prototype.write=function(e,t){var r=this;if(this._pendingData>5e7)throw new Error(\"write data discarded, use flow control to avoid losing data\");this._writeBuffer.length||(this._bufferOffset=0,setTimeout((function(){return r._innerWrite()}))),this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)},e.prototype._innerWrite=function(){for(var e=this,t=Date.now();this._writeBuffer.length>this._bufferOffset;){var r=this._writeBuffer[this._bufferOffset],i=this._callbacks[this._bufferOffset];if(this._bufferOffset++,this._action(r),this._pendingData-=r.length,i&&i(),Date.now()-t>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout((function(){return e._innerWrite()}),0)):(this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0)},e}();t.WriteBuffer=i},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AddonManager=void 0;var i=function(){function e(){this._addons=[]}return e.prototype.dispose=function(){for(var e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()},e.prototype.loadAddon=function(e,t){var r=this,i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=function(){return r._wrappedAddonDispose(i)},t.activate(e)},e.prototype._wrappedAddonDispose=function(e){if(!e.isDisposed){for(var t=-1,r=0;r<this._addons.length;r++)if(this._addons[r]===e){t=r;break}if(-1===t)throw new Error(\"Could not dispose an addon that has not been loaded\");e.isDisposed=!0,e.dispose.apply(e.instance),this._addons.splice(t,1)}},e}();t.AddonManager=i}])}));\n//# sourceMappingURL=xterm.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vbm9kZV9tb2R1bGVzL3h0ZXJtL2xpYi94dGVybS5qcz9mY2YzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsR0FBRyxJQUFpRCxvQkFBb0IsS0FBSyxhQUFpSSxDQUFDLG9CQUFvQixtQkFBbUIsU0FBUyxjQUFjLDRCQUE0QixZQUFZLHFCQUFxQiwyREFBMkQsdUNBQXVDLHFDQUFxQyxvQkFBb0IsRUFBRSxpQkFBaUIsNEZBQTRGLGVBQWUsd0NBQXdDLFNBQVMsRUFBRSxtQkFBbUIsOEJBQThCLHFEQUFxRCwwQkFBMEIsNkNBQTZDLHNCQUFzQiw2REFBNkQsWUFBWSxlQUFlLFNBQVMsaUJBQWlCLGlDQUFpQyxpQkFBaUIsWUFBWSxVQUFVLHNCQUFzQixtQkFBbUIsaURBQWlELGtCQUFrQixrQkFBa0IsYUFBYSxzQ0FBc0MsU0FBUyx1Q0FBdUMsaUJBQWlCLGFBQWEscUNBQXFDLGtEQUFrRCxlQUFlLFdBQVcsNkNBQTZDLDZCQUE2QixtQkFBbUIsNEJBQTRCLHNCQUFzQixrRUFBa0UsY0FBYywrQkFBK0IsaUNBQWlDLGlCQUFpQix5QkFBeUIsK0JBQStCLFFBQVEsV0FBVywwQkFBMEIsZ0NBQWdDLDhEQUE4RCxHQUFHLEdBQUcsOENBQThDLHNCQUFzQixpQkFBaUIsSUFBSSxpQkFBaUIsYUFBYSxzQ0FBc0MsU0FBUyw0S0FBNEssWUFBWSx3ZUFBd2UsaUJBQWlCLGFBQWEsc0NBQXNDLFNBQVMsaUVBQWlFLGlCQUFpQixhQUFhLHlDQUF5QyxzQ0FBc0Msb0JBQW9CLGdDQUFnQyxXQUFXLEtBQUssZUFBZSwyQkFBMkIsa0NBQWtDLG1DQUFtQyxvQ0FBb0MsbUNBQW1DLHNDQUFzQyxHQUFHLEdBQUcsY0FBYyxnQkFBZ0IsV0FBVyxLQUFLLGVBQWUsV0FBVyx3RUFBd0UsT0FBTyxtQkFBbUIsZUFBZSxpQkFBaUIsYUFBYSxzQ0FBc0MsU0FBUyx3aUJBQXdpQixpQkFBaUIsYUFBYSwrQ0FBK0MsaUNBQWlD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dUJBQXVCLHlGQUF5RixHQUFHLEdBQUcsZ0JBQWdCLGlCQUFpQixhQUFhLHNDQUFzQyxTQUFTLHdCQUF3QixpQkFBaUIsYUFBYSxnQkFBZ0Isc0NBQXNDLGdDQUFnQyxLQUFLLHVDQUF1QyxxQ0FBcUMsY0FBYyw0Q0FBNEMsMENBQTBDLGlDQUFpQyxlQUFlLDhDQUE4QyxrQkFBa0IsaUJBQWlCLHNCQUFzQiw0QkFBNEIsSUFBSSxNQUFNLGlGQUFpRixzRUFBc0UsR0FBRyxHQUFHLGlCQUFpQixHQUFHO0FBQzF6bFMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMveHRlcm0vbGliL3h0ZXJtLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciByPXQoKTtmb3IodmFyIGkgaW4gcikoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czplKVtpXT1yW2ldfX0od2luZG93LChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKGkpe2lmKHRbaV0pcmV0dXJuIHRbaV0uZXhwb3J0czt2YXIgbj10W2ldPXtpOmksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtpXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxyKSxuLmw9ITAsbi5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LGkpe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDppfSl9LHIucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihyLnIoaSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciBuIGluIGUpci5kKGksbixmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLG4pKTtyZXR1cm4gaX0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHIucD1cIlwiLHIoci5zPTM0KX0oW2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmZvcndhcmRFdmVudD10LkV2ZW50RW1pdHRlcj12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fbGlzdGVuZXJzPVtdLHRoaXMuX2Rpc3Bvc2VkPSExfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJldmVudFwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBlLl9saXN0ZW5lcnMucHVzaCh0KSx7ZGlzcG9zZTpmdW5jdGlvbigpe2lmKCFlLl9kaXNwb3NlZClmb3IodmFyIHI9MDtyPGUuX2xpc3RlbmVycy5sZW5ndGg7cisrKWlmKGUuX2xpc3RlbmVyc1tyXT09PXQpcmV0dXJuIHZvaWQgZS5fbGlzdGVuZXJzLnNwbGljZShyLDEpfX19KSx0aGlzLl9ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5maXJlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLGk9MDtpPHRoaXMuX2xpc3RlbmVycy5sZW5ndGg7aSsrKXIucHVzaCh0aGlzLl9saXN0ZW5lcnNbaV0pO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspcltpXS5jYWxsKHZvaWQgMCxlLHQpfSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzLmxlbmd0aD0wKSx0aGlzLl9kaXNwb3NlZD0hMH0sZX0oKTt0LkV2ZW50RW1pdHRlcj1pLHQuZm9yd2FyZEV2ZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmZpcmUoZSl9KSl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JVW5pY29kZVNlcnZpY2U9dC5JT3B0aW9uc1NlcnZpY2U9dC5JTG9nU2VydmljZT10LklJbnN0YW50aWF0aW9uU2VydmljZT10LklEaXJ0eVJvd1NlcnZpY2U9dC5JQ2hhcnNldFNlcnZpY2U9dC5JQ29yZVNlcnZpY2U9dC5JQ29yZU1vdXNlU2VydmljZT10LklCdWZmZXJTZXJ2aWNlPXZvaWQgMDt2YXIgaT1yKDE0KTt0LklCdWZmZXJTZXJ2aWNlPWkuY3JlYXRlRGVjb3JhdG9yKFwiQnVmZmVyU2VydmljZVwiKSx0LklDb3JlTW91c2VTZXJ2aWNlPWkuY3JlYXRlRGVjb3JhdG9yKFwiQ29yZU1vdXNlU2VydmljZVwiKSx0LklDb3JlU2VydmljZT1pLmNyZWF0ZURlY29yYXRvcihcIkNvcmVTZXJ2aWNlXCIpLHQuSUNoYXJzZXRTZXJ2aWNlPWkuY3JlYXRlRGVjb3JhdG9yKFwiQ2hhcnNldFNlcnZpY2VcIiksdC5JRGlydHlSb3dTZXJ2aWNlPWkuY3JlYXRlRGVjb3JhdG9yKFwiRGlydHlSb3dTZXJ2aWNlXCIpLHQuSUluc3RhbnRpYXRpb25TZXJ2aWNlPWkuY3JlYXRlRGVjb3JhdG9yKFwiSW5zdGFudGlhdGlvblNlcnZpY2VcIiksdC5JTG9nU2VydmljZT1pLmNyZWF0ZURlY29yYXRvcihcIkxvZ1NlcnZpY2VcIiksdC5JT3B0aW9uc1NlcnZpY2U9aS5jcmVhdGVEZWNvcmF0b3IoXCJPcHRpb25zU2VydmljZVwiKSx0LklVbmljb2RlU2VydmljZT1pLmNyZWF0ZURlY29yYXRvcihcIlVuaWNvZGVTZXJ2aWNlXCIpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXREaXNwb3NlQXJyYXlEaXNwb3NhYmxlPXQuZGlzcG9zZUFycmF5PXQuRGlzcG9zYWJsZT12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZGlzcG9zYWJsZXM9W10sdGhpcy5faXNEaXNwb3NlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2lzRGlzcG9zZWQ9ITA7Zm9yKHZhciBlPTAsdD10aGlzLl9kaXNwb3NhYmxlcztlPHQubGVuZ3RoO2UrKyl7dFtlXS5kaXNwb3NlKCl9dGhpcy5fZGlzcG9zYWJsZXMubGVuZ3RoPTB9LGUucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kaXNwb3NhYmxlcy5wdXNoKGUpLGV9LGUucHJvdG90eXBlLnVucmVnaXN0ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZGlzcG9zYWJsZXMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuX2Rpc3Bvc2FibGVzLnNwbGljZSh0LDEpfSxlfSgpO2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciB0PTAscj1lO3Q8ci5sZW5ndGg7dCsrKXtyW3RdLmRpc3Bvc2UoKX1lLmxlbmd0aD0wfXQuRGlzcG9zYWJsZT1pLHQuZGlzcG9zZUFycmF5PW4sdC5nZXREaXNwb3NlQXJyYXlEaXNwb3NhYmxlPWZ1bmN0aW9uKGUpe3JldHVybntkaXNwb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIG4oZSl9fX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LldISVRFU1BBQ0VfQ0VMTF9DT0RFPXQuV0hJVEVTUEFDRV9DRUxMX1dJRFRIPXQuV0hJVEVTUEFDRV9DRUxMX0NIQVI9dC5OVUxMX0NFTExfQ09ERT10Lk5VTExfQ0VMTF9XSURUSD10Lk5VTExfQ0VMTF9DSEFSPXQuQ0hBUl9EQVRBX0NPREVfSU5ERVg9dC5DSEFSX0RBVEFfV0lEVEhfSU5ERVg9dC5DSEFSX0RBVEFfQ0hBUl9JTkRFWD10LkNIQVJfREFUQV9BVFRSX0lOREVYPXQuREVGQVVMVF9BVFRSPXQuREVGQVVMVF9DT0xPUj12b2lkIDAsdC5ERUZBVUxUX0NPTE9SPTI1Nix0LkRFRkFVTFRfQVRUUj0yNTZ8dC5ERUZBVUxUX0NPTE9SPDw5LHQuQ0hBUl9EQVRBX0FUVFJfSU5ERVg9MCx0LkNIQVJfREFUQV9DSEFSX0lOREVYPTEsdC5DSEFSX0RBVEFfV0lEVEhfSU5ERVg9Mix0LkNIQVJfREFUQV9DT0RFX0lOREVYPTMsdC5OVUxMX0NFTExfQ0hBUj1cIlwiLHQuTlVMTF9DRUxMX1dJRFRIPTEsdC5OVUxMX0NFTExfQ09ERT0wLHQuV0hJVEVTUEFDRV9DRUxMX0NIQVI9XCIgXCIsdC5XSElURVNQQUNFX0NFTExfV0lEVEg9MSx0LldISVRFU1BBQ0VfQ0VMTF9DT0RFPTMyfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGksbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9aShlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHIucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyByKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2VsbERhdGE9dm9pZCAwO3ZhciBvPXIoOCkscz1yKDMpLGE9cig2KSxjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuY29udGVudD0wLHQuZmc9MCx0LmJnPTAsdC5leHRlbmRlZD1uZXcgYS5FeHRlbmRlZEF0dHJzLHQuY29tYmluZWREYXRhPVwiXCIsdH1yZXR1cm4gbih0LGUpLHQuZnJvbUNoYXJEYXRhPWZ1bmN0aW9uKGUpe3ZhciByPW5ldyB0O3JldHVybiByLnNldEZyb21DaGFyRGF0YShlKSxyfSx0LnByb3RvdHlwZS5pc0NvbWJpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIDIwOTcxNTImdGhpcy5jb250ZW50fSx0LnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnQ+PjIyfSx0LnByb3RvdHlwZS5nZXRDaGFycz1mdW5jdGlvbigpe3JldHVybiAyMDk3MTUyJnRoaXMuY29udGVudD90aGlzLmNvbWJpbmVkRGF0YToyMDk3MTUxJnRoaXMuY29udGVudD9vLnN0cmluZ0Zyb21Db2RlUG9pbnQoMjA5NzE1MSZ0aGlzLmNvbnRlbnQpOlwiXCJ9LHQucHJvdG90eXBlLmdldENvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0NvbWJpbmVkKCk/dGhpcy5jb21iaW5lZERhdGEuY2hhckNvZGVBdCh0aGlzLmNvbWJpbmVkRGF0YS5sZW5ndGgtMSk6MjA5NzE1MSZ0aGlzLmNvbnRlbnR9LHQucHJvdG90eXBlLnNldEZyb21DaGFyRGF0YT1mdW5jdGlvbihlKXt0aGlzLmZnPWVbcy5DSEFSX0RBVEFfQVRUUl9JTkRFWF0sdGhpcy5iZz0wO3ZhciB0PSExO2lmKGVbcy5DSEFSX0RBVEFfQ0hBUl9JTkRFWF0ubGVuZ3RoPjIpdD0hMDtlbHNlIGlmKDI9PT1lW3MuQ0hBUl9EQVRBX0NIQVJfSU5ERVhdLmxlbmd0aCl7dmFyIHI9ZVtzLkNIQVJfREFUQV9DSEFSX0lOREVYXS5jaGFyQ29kZUF0KDApO2lmKDU1Mjk2PD1yJiZyPD01NjMxOSl7dmFyIGk9ZVtzLkNIQVJfREFUQV9DSEFSX0lOREVYXS5jaGFyQ29kZUF0KDEpOzU2MzIwPD1pJiZpPD01NzM0Mz90aGlzLmNvbnRlbnQ9MTAyNCooci01NTI5NikraS01NjMyMCs2NTUzNnxlW3MuQ0hBUl9EQVRBX1dJRFRIX0lOREVYXTw8MjI6dD0hMH1lbHNlIHQ9ITB9ZWxzZSB0aGlzLmNvbnRlbnQ9ZVtzLkNIQVJfREFUQV9DSEFSX0lOREVYXS5jaGFyQ29kZUF0KDApfGVbcy5DSEFSX0RBVEFfV0lEVEhfSU5ERVhdPDwyMjt0JiYodGhpcy5jb21iaW5lZERhdGE9ZVtzLkNIQVJfREFUQV9DSEFSX0lOREVYXSx0aGlzLmNvbnRlbnQ9MjA5NzE1MnxlW3MuQ0hBUl9EQVRBX1dJRFRIX0lOREVYXTw8MjIpfSx0LnByb3RvdHlwZS5nZXRBc0NoYXJEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuZmcsdGhpcy5nZXRDaGFycygpLHRoaXMuZ2V0V2lkdGgoKSx0aGlzLmdldENvZGUoKV19LHR9KGEuQXR0cmlidXRlRGF0YSk7dC5DZWxsRGF0YT1jfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JU291bmRTZXJ2aWNlPXQuSVNlbGVjdGlvblNlcnZpY2U9dC5JUmVuZGVyU2VydmljZT10LklNb3VzZVNlcnZpY2U9dC5JQ29yZUJyb3dzZXJTZXJ2aWNlPXQuSUNoYXJTaXplU2VydmljZT12b2lkIDA7dmFyIGk9cigxNCk7dC5JQ2hhclNpemVTZXJ2aWNlPWkuY3JlYXRlRGVjb3JhdG9yKFwiQ2hhclNpemVTZXJ2aWNlXCIpLHQuSUNvcmVCcm93c2VyU2VydmljZT1pLmNyZWF0ZURlY29yYXRvcihcIkNvcmVCcm93c2VyU2VydmljZVwiKSx0LklNb3VzZVNlcnZpY2U9aS5jcmVhdGVEZWNvcmF0b3IoXCJNb3VzZVNlcnZpY2VcIiksdC5JUmVuZGVyU2VydmljZT1pLmNyZWF0ZURlY29yYXRvcihcIlJlbmRlclNlcnZpY2VcIiksdC5JU2VsZWN0aW9uU2VydmljZT1pLmNyZWF0ZURlY29yYXRvcihcIlNlbGVjdGlvblNlcnZpY2VcIiksdC5JU291bmRTZXJ2aWNlPWkuY3JlYXRlRGVjb3JhdG9yKFwiU291bmRTZXJ2aWNlXCIpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FeHRlbmRlZEF0dHJzPXQuQXR0cmlidXRlRGF0YT12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5mZz0wLHRoaXMuYmc9MCx0aGlzLmV4dGVuZGVkPW5ldyBufXJldHVybiBlLnRvQ29sb3JSR0I9ZnVuY3Rpb24oZSl7cmV0dXJuW2U+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlXX0sZS5mcm9tQ29sb3JSR0I9ZnVuY3Rpb24oZSl7cmV0dXJuKDI1NSZlWzBdKTw8MTZ8KDI1NSZlWzFdKTw8OHwyNTUmZVsyXX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZTtyZXR1cm4gdC5mZz10aGlzLmZnLHQuYmc9dGhpcy5iZyx0LmV4dGVuZGVkPXRoaXMuZXh0ZW5kZWQuY2xvbmUoKSx0fSxlLnByb3RvdHlwZS5pc0ludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gNjcxMDg4NjQmdGhpcy5mZ30sZS5wcm90b3R5cGUuaXNCb2xkPWZ1bmN0aW9uKCl7cmV0dXJuIDEzNDIxNzcyOCZ0aGlzLmZnfSxlLnByb3RvdHlwZS5pc1VuZGVybGluZT1mdW5jdGlvbigpe3JldHVybiAyNjg0MzU0NTYmdGhpcy5mZ30sZS5wcm90b3R5cGUuaXNCbGluaz1mdW5jdGlvbigpe3JldHVybiA1MzY4NzA5MTImdGhpcy5mZ30sZS5wcm90b3R5cGUuaXNJbnZpc2libGU9ZnVuY3Rpb24oKXtyZXR1cm4gMTA3Mzc0MTgyNCZ0aGlzLmZnfSxlLnByb3RvdHlwZS5pc0l0YWxpYz1mdW5jdGlvbigpe3JldHVybiA2NzEwODg2NCZ0aGlzLmJnfSxlLnByb3RvdHlwZS5pc0RpbT1mdW5jdGlvbigpe3JldHVybiAxMzQyMTc3MjgmdGhpcy5iZ30sZS5wcm90b3R5cGUuZ2V0RmdDb2xvck1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gNTAzMzE2NDgmdGhpcy5mZ30sZS5wcm90b3R5cGUuZ2V0QmdDb2xvck1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gNTAzMzE2NDgmdGhpcy5iZ30sZS5wcm90b3R5cGUuaXNGZ1JHQj1mdW5jdGlvbigpe3JldHVybiA1MDMzMTY0OD09KDUwMzMxNjQ4JnRoaXMuZmcpfSxlLnByb3RvdHlwZS5pc0JnUkdCPWZ1bmN0aW9uKCl7cmV0dXJuIDUwMzMxNjQ4PT0oNTAzMzE2NDgmdGhpcy5iZyl9LGUucHJvdG90eXBlLmlzRmdQYWxldHRlPWZ1bmN0aW9uKCl7cmV0dXJuIDE2Nzc3MjE2PT0oNTAzMzE2NDgmdGhpcy5mZyl8fDMzNTU0NDMyPT0oNTAzMzE2NDgmdGhpcy5mZyl9LGUucHJvdG90eXBlLmlzQmdQYWxldHRlPWZ1bmN0aW9uKCl7cmV0dXJuIDE2Nzc3MjE2PT0oNTAzMzE2NDgmdGhpcy5iZyl8fDMzNTU0NDMyPT0oNTAzMzE2NDgmdGhpcy5iZyl9LGUucHJvdG90eXBlLmlzRmdEZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSg1MDMzMTY0OCZ0aGlzLmZnKX0sZS5wcm90b3R5cGUuaXNCZ0RlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDUwMzMxNjQ4JnRoaXMuYmcpfSxlLnByb3RvdHlwZS5pc0F0dHJpYnV0ZURlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZmcmJjA9PT10aGlzLmJnfSxlLnByb3RvdHlwZS5nZXRGZ0NvbG9yPWZ1bmN0aW9uKCl7c3dpdGNoKDUwMzMxNjQ4JnRoaXMuZmcpe2Nhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpyZXR1cm4gMjU1JnRoaXMuZmc7Y2FzZSA1MDMzMTY0ODpyZXR1cm4gMTY3NzcyMTUmdGhpcy5mZztkZWZhdWx0OnJldHVybi0xfX0sZS5wcm90b3R5cGUuZ2V0QmdDb2xvcj1mdW5jdGlvbigpe3N3aXRjaCg1MDMzMTY0OCZ0aGlzLmJnKXtjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6cmV0dXJuIDI1NSZ0aGlzLmJnO2Nhc2UgNTAzMzE2NDg6cmV0dXJuIDE2Nzc3MjE1JnRoaXMuYmc7ZGVmYXVsdDpyZXR1cm4tMX19LGUucHJvdG90eXBlLmhhc0V4dGVuZGVkQXR0cnM9ZnVuY3Rpb24oKXtyZXR1cm4gMjY4NDM1NDU2JnRoaXMuYmd9LGUucHJvdG90eXBlLnVwZGF0ZUV4dGVuZGVkPWZ1bmN0aW9uKCl7dGhpcy5leHRlbmRlZC5pc0VtcHR5KCk/dGhpcy5iZyY9LTI2ODQzNTQ1Nzp0aGlzLmJnfD0yNjg0MzU0NTZ9LGUucHJvdG90eXBlLmdldFVuZGVybGluZUNvbG9yPWZ1bmN0aW9uKCl7aWYoMjY4NDM1NDU2JnRoaXMuYmcmJn50aGlzLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yKXN3aXRjaCg1MDMzMTY0OCZ0aGlzLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yKXtjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6cmV0dXJuIDI1NSZ0aGlzLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yO2Nhc2UgNTAzMzE2NDg6cmV0dXJuIDE2Nzc3MjE1JnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3I7ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRGZ0NvbG9yKCl9cmV0dXJuIHRoaXMuZ2V0RmdDb2xvcigpfSxlLnByb3RvdHlwZS5nZXRVbmRlcmxpbmVDb2xvck1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gMjY4NDM1NDU2JnRoaXMuYmcmJn50aGlzLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yPzUwMzMxNjQ4JnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3I6dGhpcy5nZXRGZ0NvbG9yTW9kZSgpfSxlLnByb3RvdHlwZS5pc1VuZGVybGluZUNvbG9yUkdCPWZ1bmN0aW9uKCl7cmV0dXJuIDI2ODQzNTQ1NiZ0aGlzLmJnJiZ+dGhpcy5leHRlbmRlZC51bmRlcmxpbmVDb2xvcj81MDMzMTY0OD09KDUwMzMxNjQ4JnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3IpOnRoaXMuaXNGZ1JHQigpfSxlLnByb3RvdHlwZS5pc1VuZGVybGluZUNvbG9yUGFsZXR0ZT1mdW5jdGlvbigpe3JldHVybiAyNjg0MzU0NTYmdGhpcy5iZyYmfnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3I/MTY3NzcyMTY9PSg1MDMzMTY0OCZ0aGlzLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yKXx8MzM1NTQ0MzI9PSg1MDMzMTY0OCZ0aGlzLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yKTp0aGlzLmlzRmdQYWxldHRlKCl9LGUucHJvdG90eXBlLmlzVW5kZXJsaW5lQ29sb3JEZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDI2ODQzNTQ1NiZ0aGlzLmJnJiZ+dGhpcy5leHRlbmRlZC51bmRlcmxpbmVDb2xvcj8wPT0oNTAzMzE2NDgmdGhpcy5leHRlbmRlZC51bmRlcmxpbmVDb2xvcik6dGhpcy5pc0ZnRGVmYXVsdCgpfSxlLnByb3RvdHlwZS5nZXRVbmRlcmxpbmVTdHlsZT1mdW5jdGlvbigpe3JldHVybiAyNjg0MzU0NTYmdGhpcy5mZz8yNjg0MzU0NTYmdGhpcy5iZz90aGlzLmV4dGVuZGVkLnVuZGVybGluZVN0eWxlOjE6MH0sZX0oKTt0LkF0dHJpYnV0ZURhdGE9aTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT10JiYodD0tMSksdGhpcy51bmRlcmxpbmVTdHlsZT1lLHRoaXMudW5kZXJsaW5lQ29sb3I9dH1yZXR1cm4gZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy51bmRlcmxpbmVTdHlsZSx0aGlzLnVuZGVybGluZUNvbG9yKX0sZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy51bmRlcmxpbmVTdHlsZX0sZX0oKTt0LkV4dGVuZGVkQXR0cnM9bn0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyPXZvaWQgMCx0LmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcj1mdW5jdGlvbihlLHQscixpKXtlLmFkZEV2ZW50TGlzdGVuZXIodCxyLGkpO3ZhciBuPSExO3JldHVybntkaXNwb3NlOmZ1bmN0aW9uKCl7bnx8KG49ITAsZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscixpKSl9fX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlV0ZjhUb1V0ZjMyPXQuU3RyaW5nVG9VdGYzMj10LnV0ZjMyVG9TdHJpbmc9dC5zdHJpbmdGcm9tQ29kZVBvaW50PXZvaWQgMCx0LnN0cmluZ0Zyb21Db2RlUG9pbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+NjU1MzU/KGUtPTY1NTM2LFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGU+PjEwKSkrU3RyaW5nLmZyb21DaGFyQ29kZShlJTEwMjQrNTYzMjApKTpTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSx0LnV0ZjMyVG9TdHJpbmc9ZnVuY3Rpb24oZSx0LHIpe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PXImJihyPWUubGVuZ3RoKTtmb3IodmFyIGk9XCJcIixuPXQ7bjxyOysrbil7dmFyIG89ZVtuXTtvPjY1NTM1PyhvLT02NTUzNixpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhvPj4xMCkpK1N0cmluZy5mcm9tQ2hhckNvZGUobyUxMDI0KzU2MzIwKSk6aSs9U3RyaW5nLmZyb21DaGFyQ29kZShvKX1yZXR1cm4gaX07dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5faW50ZXJpbT0wfXJldHVybiBlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2ludGVyaW09MH0sZS5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5sZW5ndGg7aWYoIXIpcmV0dXJuIDA7dmFyIGk9MCxuPTA7dGhpcy5faW50ZXJpbSYmKDU2MzIwPD0oYT1lLmNoYXJDb2RlQXQobisrKSkmJmE8PTU3MzQzP3RbaSsrXT0xMDI0Kih0aGlzLl9pbnRlcmltLTU1Mjk2KSthLTU2MzIwKzY1NTM2Oih0W2krK109dGhpcy5faW50ZXJpbSx0W2krK109YSksdGhpcy5faW50ZXJpbT0wKTtmb3IodmFyIG89bjtvPHI7KytvKXt2YXIgcz1lLmNoYXJDb2RlQXQobyk7aWYoNTUyOTY8PXMmJnM8PTU2MzE5KXtpZigrK28+PXIpcmV0dXJuIHRoaXMuX2ludGVyaW09cyxpO3ZhciBhOzU2MzIwPD0oYT1lLmNoYXJDb2RlQXQobykpJiZhPD01NzM0Mz90W2krK109MTAyNCoocy01NTI5NikrYS01NjMyMCs2NTUzNjoodFtpKytdPXMsdFtpKytdPWEpfWVsc2UgdFtpKytdPXN9cmV0dXJuIGl9LGV9KCk7dC5TdHJpbmdUb1V0ZjMyPWk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5pbnRlcmltPW5ldyBVaW50OEFycmF5KDMpfXJldHVybiBlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaW50ZXJpbS5maWxsKDApfSxlLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aDtpZighcilyZXR1cm4gMDt2YXIgaSxuLG8scyxhPTAsYz0wLGw9MDtpZih0aGlzLmludGVyaW1bMF0pe3ZhciBoPSExLHU9dGhpcy5pbnRlcmltWzBdO3UmPTE5Mj09KDIyNCZ1KT8zMToyMjQ9PSgyNDAmdSk/MTU6Nztmb3IodmFyIGY9MCxfPXZvaWQgMDsoXz02MyZ0aGlzLmludGVyaW1bKytmXSkmJmY8NDspdTw8PTYsdXw9Xztmb3IodmFyIGQ9MTkyPT0oMjI0JnRoaXMuaW50ZXJpbVswXSk/MjoyMjQ9PSgyNDAmdGhpcy5pbnRlcmltWzBdKT8zOjQscD1kLWY7bDxwOyl7aWYobD49cilyZXR1cm4gMDtpZigxMjghPSgxOTImKF89ZVtsKytdKSkpe2wtLSxoPSEwO2JyZWFrfXRoaXMuaW50ZXJpbVtmKytdPV8sdTw8PTYsdXw9NjMmX31ofHwoMj09PWQ/dTwxMjg/bC0tOnRbYSsrXT11OjM9PT1kP3U8MjA0OHx8dT49NTUyOTYmJnU8PTU3MzQzfHwodFthKytdPXUpOnU8NjU1MzZ8fHU+MTExNDExMXx8KHRbYSsrXT11KSksdGhpcy5pbnRlcmltLmZpbGwoMCl9Zm9yKHZhciB2PXItNCxnPWw7ZzxyOyl7Zm9yKDshKCEoZzx2KXx8MTI4JihpPWVbZ10pfHwxMjgmKG49ZVtnKzFdKXx8MTI4JihvPWVbZysyXSl8fDEyOCYocz1lW2crM10pKTspdFthKytdPWksdFthKytdPW4sdFthKytdPW8sdFthKytdPXMsZys9NDtpZigoaT1lW2crK10pPDEyOCl0W2ErK109aTtlbHNlIGlmKDE5Mj09KDIyNCZpKSl7aWYoZz49cilyZXR1cm4gdGhpcy5pbnRlcmltWzBdPWksYTtpZigxMjghPSgxOTImKG49ZVtnKytdKSkpe2ctLTtjb250aW51ZX1pZigoYz0oMzEmaSk8PDZ8NjMmbik8MTI4KXtnLS07Y29udGludWV9dFthKytdPWN9ZWxzZSBpZigyMjQ9PSgyNDAmaSkpe2lmKGc+PXIpcmV0dXJuIHRoaXMuaW50ZXJpbVswXT1pLGE7aWYoMTI4IT0oMTkyJihuPWVbZysrXSkpKXtnLS07Y29udGludWV9aWYoZz49cilyZXR1cm4gdGhpcy5pbnRlcmltWzBdPWksdGhpcy5pbnRlcmltWzFdPW4sYTtpZigxMjghPSgxOTImKG89ZVtnKytdKSkpe2ctLTtjb250aW51ZX1pZigoYz0oMTUmaSk8PDEyfCg2MyZuKTw8Nnw2MyZvKTwyMDQ4fHxjPj01NTI5NiYmYzw9NTczNDMpY29udGludWU7dFthKytdPWN9ZWxzZSBpZigyNDA9PSgyNDgmaSkpe2lmKGc+PXIpcmV0dXJuIHRoaXMuaW50ZXJpbVswXT1pLGE7aWYoMTI4IT0oMTkyJihuPWVbZysrXSkpKXtnLS07Y29udGludWV9aWYoZz49cilyZXR1cm4gdGhpcy5pbnRlcmltWzBdPWksdGhpcy5pbnRlcmltWzFdPW4sYTtpZigxMjghPSgxOTImKG89ZVtnKytdKSkpe2ctLTtjb250aW51ZX1pZihnPj1yKXJldHVybiB0aGlzLmludGVyaW1bMF09aSx0aGlzLmludGVyaW1bMV09bix0aGlzLmludGVyaW1bMl09byxhO2lmKDEyOCE9KDE5MiYocz1lW2crK10pKSl7Zy0tO2NvbnRpbnVlfWlmKChjPSg3JmkpPDwxOHwoNjMmbik8PDEyfCg2MyZvKTw8Nnw2MyZzKTw2NTUzNnx8Yz4xMTE0MTExKWNvbnRpbnVlO3RbYSsrXT1jfX1yZXR1cm4gYX0sZX0oKTt0LlV0ZjhUb1V0ZjMyPW59LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNIQVJfQVRMQVNfQ0VMTF9TUEFDSU5HPXQuRElNX09QQUNJVFk9dC5JTlZFUlRFRF9ERUZBVUxUX0NPTE9SPXZvaWQgMCx0LklOVkVSVEVEX0RFRkFVTFRfQ09MT1I9MjU3LHQuRElNX09QQUNJVFk9LjUsdC5DSEFSX0FUTEFTX0NFTExfU1BBQ0lORz0xfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGksbixvLHM7ZnVuY3Rpb24gYShlKXt2YXIgdD1lLnRvU3RyaW5nKDE2KTtyZXR1cm4gdC5sZW5ndGg8Mj9cIjBcIit0OnR9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBlPHQ/KHQrLjA1KS8oZSsuMDUpOihlKy4wNSkvKHQrLjA1KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNvbnRyYXN0UmF0aW89dC50b1BhZGRlZEhleD10LnJnYmE9dC5yZ2I9dC5jc3M9dC5jb2xvcj10LmNoYW5uZWxzPXZvaWQgMCxmdW5jdGlvbihlKXtlLnRvQ3NzPWZ1bmN0aW9uKGUsdCxyLGkpe3JldHVybiB2b2lkIDAhPT1pP1wiI1wiK2EoZSkrYSh0KSthKHIpK2EoaSk6XCIjXCIrYShlKSthKHQpK2Eocil9LGUudG9SZ2JhPWZ1bmN0aW9uKGUsdCxyLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT0yNTUpLChlPDwyNHx0PDwxNnxyPDw4fGkpPj4+MH19KGk9dC5jaGFubmVsc3x8KHQuY2hhbm5lbHM9e30pKSwobj10LmNvbG9yfHwodC5jb2xvcj17fSkpLmJsZW5kPWZ1bmN0aW9uKGUsdCl7dmFyIHI9KDI1NSZ0LnJnYmEpLzI1NTtpZigxPT09cilyZXR1cm57Y3NzOnQuY3NzLHJnYmE6dC5yZ2JhfTt2YXIgbj10LnJnYmE+PjI0JjI1NSxvPXQucmdiYT4+MTYmMjU1LHM9dC5yZ2JhPj44JjI1NSxhPWUucmdiYT4+MjQmMjU1LGM9ZS5yZ2JhPj4xNiYyNTUsbD1lLnJnYmE+PjgmMjU1LGg9YStNYXRoLnJvdW5kKChuLWEpKnIpLHU9YytNYXRoLnJvdW5kKChvLWMpKnIpLGY9bCtNYXRoLnJvdW5kKChzLWwpKnIpO3JldHVybntjc3M6aS50b0NzcyhoLHUsZikscmdiYTppLnRvUmdiYShoLHUsZil9fSxuLmlzT3BhcXVlPWZ1bmN0aW9uKGUpe3JldHVybiAyNTU9PSgyNTUmZS5yZ2JhKX0sbi5lbnN1cmVDb250cmFzdFJhdGlvPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1zLmVuc3VyZUNvbnRyYXN0UmF0aW8oZS5yZ2JhLHQucmdiYSxyKTtpZihpKXJldHVybiBzLnRvQ29sb3IoaT4+MjQmMjU1LGk+PjE2JjI1NSxpPj44JjI1NSl9LG4ub3BhcXVlPWZ1bmN0aW9uKGUpe3ZhciB0PSgyNTV8ZS5yZ2JhKT4+PjAscj1zLnRvQ2hhbm5lbHModCksbj1yWzBdLG89clsxXSxhPXJbMl07cmV0dXJue2NzczppLnRvQ3NzKG4sbyxhKSxyZ2JhOnR9fSxuLm9wYWNpdHk9ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnJvdW5kKDI1NSp0KSxuPXMudG9DaGFubmVscyhlLnJnYmEpLG89blswXSxhPW5bMV0sYz1uWzJdO3JldHVybntjc3M6aS50b0NzcyhvLGEsYyxyKSxyZ2JhOmkudG9SZ2JhKG8sYSxjLHIpfX0sKHQuY3NzfHwodC5jc3M9e30pKS50b0NvbG9yPWZ1bmN0aW9uKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSA3OnJldHVybntjc3M6ZSxyZ2JhOihwYXJzZUludChlLnNsaWNlKDEpLDE2KTw8OHwyNTUpPj4+MH07Y2FzZSA5OnJldHVybntjc3M6ZSxyZ2JhOnBhcnNlSW50KGUuc2xpY2UoMSksMTYpPj4+MH19dGhyb3cgbmV3IEVycm9yKFwiY3NzLnRvQ29sb3I6IFVuc3VwcG9ydGVkIGNzcyBmb3JtYXRcIil9LGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0LHIpe3ZhciBpPWUvMjU1LG49dC8yNTUsbz1yLzI1NTtyZXR1cm4uMjEyNiooaTw9LjAzOTI4P2kvMTIuOTI6TWF0aC5wb3coKGkrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihvPD0uMDM5Mjg/by8xMi45MjpNYXRoLnBvdygobysuMDU1KS8xLjA1NSwyLjQpKX1lLnJlbGF0aXZlTHVtaW5hbmNlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZSl9LGUucmVsYXRpdmVMdW1pbmFuY2UyPXR9KG89dC5yZ2J8fCh0LnJnYj17fSkpLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0LHIpe2Zvcih2YXIgaT1lPj4yNCYyNTUsbj1lPj4xNiYyNTUscz1lPj44JjI1NSxhPXQ+PjI0JjI1NSxsPXQ+PjE2JjI1NSxoPXQ+PjgmMjU1LHU9YyhvLnJlbGF0aXZlTHVtaW5hbmNlMihhLGgsbCksby5yZWxhdGl2ZUx1bWluYW5jZTIoaSxuLHMpKTt1PHImJihhPjB8fGw+MHx8aD4wKTspYS09TWF0aC5tYXgoMCxNYXRoLmNlaWwoLjEqYSkpLGwtPU1hdGgubWF4KDAsTWF0aC5jZWlsKC4xKmwpKSxoLT1NYXRoLm1heCgwLE1hdGguY2VpbCguMSpoKSksdT1jKG8ucmVsYXRpdmVMdW1pbmFuY2UyKGEsaCxsKSxvLnJlbGF0aXZlTHVtaW5hbmNlMihpLG4scykpO3JldHVybihhPDwyNHxsPDwxNnxoPDw4fDI1NSk+Pj4wfWZ1bmN0aW9uIHIoZSx0LHIpe2Zvcih2YXIgaT1lPj4yNCYyNTUsbj1lPj4xNiYyNTUscz1lPj44JjI1NSxhPXQ+PjI0JjI1NSxsPXQ+PjE2JjI1NSxoPXQ+PjgmMjU1LHU9YyhvLnJlbGF0aXZlTHVtaW5hbmNlMihhLGgsbCksby5yZWxhdGl2ZUx1bWluYW5jZTIoaSxuLHMpKTt1PHImJihhPDI1NXx8bDwyNTV8fGg8MjU1KTspYT1NYXRoLm1pbigyNTUsYStNYXRoLmNlaWwoLjEqKDI1NS1hKSkpLGw9TWF0aC5taW4oMjU1LGwrTWF0aC5jZWlsKC4xKigyNTUtbCkpKSxoPU1hdGgubWluKDI1NSxoK01hdGguY2VpbCguMSooMjU1LWgpKSksdT1jKG8ucmVsYXRpdmVMdW1pbmFuY2UyKGEsaCxsKSxvLnJlbGF0aXZlTHVtaW5hbmNlMihpLG4scykpO3JldHVybihhPDwyNHxsPDwxNnxoPDw4fDI1NSk+Pj4wfWUuZW5zdXJlQ29udHJhc3RSYXRpbz1mdW5jdGlvbihlLGksbil7dmFyIHM9by5yZWxhdGl2ZUx1bWluYW5jZShlPj44KSxhPW8ucmVsYXRpdmVMdW1pbmFuY2UoaT4+OCk7aWYoYyhzLGEpPG4pcmV0dXJuIGE8cz90KGUsaSxuKTpyKGUsaSxuKX0sZS5yZWR1Y2VMdW1pbmFuY2U9dCxlLmluY3JlYXNlTHVtaW5hbmNlPXIsZS50b0NoYW5uZWxzPWZ1bmN0aW9uKGUpe3JldHVybltlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXX0sZS50b0NvbG9yPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm57Y3NzOmkudG9Dc3MoZSx0LHIpLHJnYmE6aS50b1JnYmEoZSx0LHIpfX19KHM9dC5yZ2JhfHwodC5yZ2JhPXt9KSksdC50b1BhZGRlZEhleD1hLHQuY29udHJhc3RSYXRpbz1jfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5pc0xpbnV4PXQuaXNXaW5kb3dzPXQuaXNJcGhvbmU9dC5pc0lwYWQ9dC5pc01hYz10LmlzU2FmYXJpPXQuaXNGaXJlZm94PXZvaWQgMDt2YXIgaT1cInVuZGVmaW5lZFwiPT10eXBlb2YgbmF2aWdhdG9yLG49aT9cIm5vZGVcIjpuYXZpZ2F0b3IudXNlckFnZW50LG89aT9cIm5vZGVcIjpuYXZpZ2F0b3IucGxhdGZvcm07ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLmluZGV4T2YodCk+PTB9dC5pc0ZpcmVmb3g9ISF+bi5pbmRleE9mKFwiRmlyZWZveFwiKSx0LmlzU2FmYXJpPS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobiksdC5pc01hYz1zKFtcIk1hY2ludG9zaFwiLFwiTWFjSW50ZWxcIixcIk1hY1BQQ1wiLFwiTWFjNjhLXCJdLG8pLHQuaXNJcGFkPVwiaVBhZFwiPT09byx0LmlzSXBob25lPVwiaVBob25lXCI9PT1vLHQuaXNXaW5kb3dzPXMoW1wiV2luZG93c1wiLFwiV2luMTZcIixcIldpbjMyXCIsXCJXaW5DRVwiXSxvKSx0LmlzTGludXg9by5pbmRleE9mKFwiTGludXhcIik+PTB9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkMxPXQuQzA9dm9pZCAwLGZ1bmN0aW9uKGUpe2UuTlVMPVwiXFwwXCIsZS5TT0g9XCJcdTAwMDFcIixlLlNUWD1cIlx1MDAwMlwiLGUuRVRYPVwiXHUwMDAzXCIsZS5FT1Q9XCJcdTAwMDRcIixlLkVOUT1cIlx1MDAwNVwiLGUuQUNLPVwiXHUwMDA2XCIsZS5CRUw9XCJcdTAwMDdcIixlLkJTPVwiXFxiXCIsZS5IVD1cIlxcdFwiLGUuTEY9XCJcXG5cIixlLlZUPVwiXFx2XCIsZS5GRj1cIlxcZlwiLGUuQ1I9XCJcXHJcIixlLlNPPVwiXHUwMDBlXCIsZS5TST1cIlx1MDAwZlwiLGUuRExFPVwiXHUwMDEwXCIsZS5EQzE9XCJcdTAwMTFcIixlLkRDMj1cIlx1MDAxMlwiLGUuREMzPVwiXHUwMDEzXCIsZS5EQzQ9XCJcdTAwMTRcIixlLk5BSz1cIlx1MDAxNVwiLGUuU1lOPVwiXHUwMDE2XCIsZS5FVEI9XCJcdTAwMTdcIixlLkNBTj1cIlx1MDAxOFwiLGUuRU09XCJcdTAwMTlcIixlLlNVQj1cIlx1MDAxYVwiLGUuRVNDPVwiXHUwMDFiXCIsZS5GUz1cIlx1MDAxY1wiLGUuR1M9XCJcdTAwMWRcIixlLlJTPVwiXHUwMDFlXCIsZS5VUz1cIlx1MDAxZlwiLGUuU1A9XCIgXCIsZS5ERUw9XCJ/XCJ9KHQuQzB8fCh0LkMwPXt9KSksZnVuY3Rpb24oZSl7ZS5QQUQ9XCLCgFwiLGUuSE9QPVwiwoFcIixlLkJQSD1cIsKCXCIsZS5OQkg9XCLCg1wiLGUuSU5EPVwiwoRcIixlLk5FTD1cIsKFXCIsZS5TU0E9XCLChlwiLGUuRVNBPVwiwodcIixlLkhUUz1cIsKIXCIsZS5IVEo9XCLCiVwiLGUuVlRTPVwiwopcIixlLlBMRD1cIsKLXCIsZS5QTFU9XCLCjFwiLGUuUkk9XCLCjVwiLGUuU1MyPVwiwo5cIixlLlNTMz1cIsKPXCIsZS5EQ1M9XCLCkFwiLGUuUFUxPVwiwpFcIixlLlBVMj1cIsKSXCIsZS5TVFM9XCLCk1wiLGUuQ0NIPVwiwpRcIixlLk1XPVwiwpVcIixlLlNQQT1cIsKWXCIsZS5FUEE9XCLCl1wiLGUuU09TPVwiwphcIixlLlNHQ0k9XCLCmVwiLGUuU0NJPVwiwppcIixlLkNTST1cIsKbXCIsZS5TVD1cIsKcXCIsZS5PU0M9XCLCnVwiLGUuUE09XCLCnlwiLGUuQVBDPVwiwp9cIn0odC5DMXx8KHQuQzE9e30pKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmFzZVJlbmRlckxheWVyPXZvaWQgMDt2YXIgaT1yKDMpLG49cig5KSxvPXIoMjUpLHM9cig2KSxhPXIoMjgpLGM9cigxMCksbD1yKDE3KSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixpLG4sbyxzLGEpe3RoaXMuX2NvbnRhaW5lcj1lLHRoaXMuX2FscGhhPWksdGhpcy5fY29sb3JzPW4sdGhpcy5fcmVuZGVyZXJJZD1vLHRoaXMuX2J1ZmZlclNlcnZpY2U9cyx0aGlzLl9vcHRpb25zU2VydmljZT1hLHRoaXMuX3NjYWxlZENoYXJXaWR0aD0wLHRoaXMuX3NjYWxlZENoYXJIZWlnaHQ9MCx0aGlzLl9zY2FsZWRDZWxsV2lkdGg9MCx0aGlzLl9zY2FsZWRDZWxsSGVpZ2h0PTAsdGhpcy5fc2NhbGVkQ2hhckxlZnQ9MCx0aGlzLl9zY2FsZWRDaGFyVG9wPTAsdGhpcy5fY3VycmVudEdseXBoSWRlbnRpZmllcj17Y2hhcnM6XCJcIixjb2RlOjAsYmc6MCxmZzowLGJvbGQ6ITEsZGltOiExLGl0YWxpYzohMX0sdGhpcy5fY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdGhpcy5fY2FudmFzLmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1cIit0K1wiLWxheWVyXCIpLHRoaXMuX2NhbnZhcy5zdHlsZS56SW5kZXg9ci50b1N0cmluZygpLHRoaXMuX2luaXRDYW52YXMoKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY2FudmFzKX1yZXR1cm4gZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciBlO2wucmVtb3ZlRWxlbWVudEZyb21QYXJlbnQodGhpcy5fY2FudmFzKSxudWxsPT09KGU9dGhpcy5fY2hhckF0bGFzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwb3NlKCl9LGUucHJvdG90eXBlLl9pbml0Q2FudmFzPWZ1bmN0aW9uKCl7dGhpcy5fY3R4PWEudGhyb3dJZkZhbHN5KHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KFwiMmRcIix7YWxwaGE6dGhpcy5fYWxwaGF9KSksdGhpcy5fYWxwaGF8fHRoaXMuX2NsZWFyQWxsKCl9LGUucHJvdG90eXBlLm9uT3B0aW9uc0NoYW5nZWQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLm9uQmx1cj1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUub25Gb2N1cz1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUub25DdXJzb3JNb3ZlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5vbkdyaWRDaGFuZ2VkPWZ1bmN0aW9uKGUsdCl7fSxlLnByb3RvdHlwZS5vblNlbGVjdGlvbkNoYW5nZWQ9ZnVuY3Rpb24oZSx0LHIpe3ZvaWQgMD09PXImJihyPSExKX0sZS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKGUpe3RoaXMuX3JlZnJlc2hDaGFyQXRsYXMoZSl9LGUucHJvdG90eXBlLl9zZXRUcmFuc3BhcmVuY3k9ZnVuY3Rpb24oZSl7aWYoZSE9PXRoaXMuX2FscGhhKXt2YXIgdD10aGlzLl9jYW52YXM7dGhpcy5fYWxwaGE9ZSx0aGlzLl9jYW52YXM9dGhpcy5fY2FudmFzLmNsb25lTm9kZSgpLHRoaXMuX2luaXRDYW52YXMoKSx0aGlzLl9jb250YWluZXIucmVwbGFjZUNoaWxkKHRoaXMuX2NhbnZhcyx0KSx0aGlzLl9yZWZyZXNoQ2hhckF0bGFzKHRoaXMuX2NvbG9ycyksdGhpcy5vbkdyaWRDaGFuZ2VkKDAsdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEpfX0sZS5wcm90b3R5cGUuX3JlZnJlc2hDaGFyQXRsYXM9ZnVuY3Rpb24oZSl7dGhpcy5fc2NhbGVkQ2hhcldpZHRoPD0wJiZ0aGlzLl9zY2FsZWRDaGFySGVpZ2h0PD0wfHwodGhpcy5fY2hhckF0bGFzPW8uYWNxdWlyZUNoYXJBdGxhcyh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLHRoaXMuX3JlbmRlcmVySWQsZSx0aGlzLl9zY2FsZWRDaGFyV2lkdGgsdGhpcy5fc2NhbGVkQ2hhckhlaWdodCksdGhpcy5fY2hhckF0bGFzLndhcm1VcCgpKX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUpe3RoaXMuX3NjYWxlZENlbGxXaWR0aD1lLnNjYWxlZENlbGxXaWR0aCx0aGlzLl9zY2FsZWRDZWxsSGVpZ2h0PWUuc2NhbGVkQ2VsbEhlaWdodCx0aGlzLl9zY2FsZWRDaGFyV2lkdGg9ZS5zY2FsZWRDaGFyV2lkdGgsdGhpcy5fc2NhbGVkQ2hhckhlaWdodD1lLnNjYWxlZENoYXJIZWlnaHQsdGhpcy5fc2NhbGVkQ2hhckxlZnQ9ZS5zY2FsZWRDaGFyTGVmdCx0aGlzLl9zY2FsZWRDaGFyVG9wPWUuc2NhbGVkQ2hhclRvcCx0aGlzLl9jYW52YXMud2lkdGg9ZS5zY2FsZWRDYW52YXNXaWR0aCx0aGlzLl9jYW52YXMuaGVpZ2h0PWUuc2NhbGVkQ2FudmFzSGVpZ2h0LHRoaXMuX2NhbnZhcy5zdHlsZS53aWR0aD1lLmNhbnZhc1dpZHRoK1wicHhcIix0aGlzLl9jYW52YXMuc3R5bGUuaGVpZ2h0PWUuY2FudmFzSGVpZ2h0K1wicHhcIix0aGlzLl9hbHBoYXx8dGhpcy5fY2xlYXJBbGwoKSx0aGlzLl9yZWZyZXNoQ2hhckF0bGFzKHRoaXMuX2NvbG9ycyl9LGUucHJvdG90eXBlLl9maWxsQ2VsbHM9ZnVuY3Rpb24oZSx0LHIsaSl7dGhpcy5fY3R4LmZpbGxSZWN0KGUqdGhpcy5fc2NhbGVkQ2VsbFdpZHRoLHQqdGhpcy5fc2NhbGVkQ2VsbEhlaWdodCxyKnRoaXMuX3NjYWxlZENlbGxXaWR0aCxpKnRoaXMuX3NjYWxlZENlbGxIZWlnaHQpfSxlLnByb3RvdHlwZS5fZmlsbEJvdHRvbUxpbmVBdENlbGxzPWZ1bmN0aW9uKGUsdCxyKXt2b2lkIDA9PT1yJiYocj0xKSx0aGlzLl9jdHguZmlsbFJlY3QoZSp0aGlzLl9zY2FsZWRDZWxsV2lkdGgsKHQrMSkqdGhpcy5fc2NhbGVkQ2VsbEhlaWdodC13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpby0xLHIqdGhpcy5fc2NhbGVkQ2VsbFdpZHRoLHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKX0sZS5wcm90b3R5cGUuX2ZpbGxMZWZ0TGluZUF0Q2VsbD1mdW5jdGlvbihlLHQscil7dGhpcy5fY3R4LmZpbGxSZWN0KGUqdGhpcy5fc2NhbGVkQ2VsbFdpZHRoLHQqdGhpcy5fc2NhbGVkQ2VsbEhlaWdodCx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbypyLHRoaXMuX3NjYWxlZENlbGxIZWlnaHQpfSxlLnByb3RvdHlwZS5fc3Ryb2tlUmVjdEF0Q2VsbD1mdW5jdGlvbihlLHQscixpKXt0aGlzLl9jdHgubGluZVdpZHRoPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuX2N0eC5zdHJva2VSZWN0KGUqdGhpcy5fc2NhbGVkQ2VsbFdpZHRoK3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLzIsdCp0aGlzLl9zY2FsZWRDZWxsSGVpZ2h0K3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLzIscip0aGlzLl9zY2FsZWRDZWxsV2lkdGgtd2luZG93LmRldmljZVBpeGVsUmF0aW8saSp0aGlzLl9zY2FsZWRDZWxsSGVpZ2h0LXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKX0sZS5wcm90b3R5cGUuX2NsZWFyQWxsPWZ1bmN0aW9uKCl7dGhpcy5fYWxwaGE/dGhpcy5fY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5fY2FudmFzLndpZHRoLHRoaXMuX2NhbnZhcy5oZWlnaHQpOih0aGlzLl9jdHguZmlsbFN0eWxlPXRoaXMuX2NvbG9ycy5iYWNrZ3JvdW5kLmNzcyx0aGlzLl9jdHguZmlsbFJlY3QoMCwwLHRoaXMuX2NhbnZhcy53aWR0aCx0aGlzLl9jYW52YXMuaGVpZ2h0KSl9LGUucHJvdG90eXBlLl9jbGVhckNlbGxzPWZ1bmN0aW9uKGUsdCxyLGkpe3RoaXMuX2FscGhhP3RoaXMuX2N0eC5jbGVhclJlY3QoZSp0aGlzLl9zY2FsZWRDZWxsV2lkdGgsdCp0aGlzLl9zY2FsZWRDZWxsSGVpZ2h0LHIqdGhpcy5fc2NhbGVkQ2VsbFdpZHRoLGkqdGhpcy5fc2NhbGVkQ2VsbEhlaWdodCk6KHRoaXMuX2N0eC5maWxsU3R5bGU9dGhpcy5fY29sb3JzLmJhY2tncm91bmQuY3NzLHRoaXMuX2N0eC5maWxsUmVjdChlKnRoaXMuX3NjYWxlZENlbGxXaWR0aCx0KnRoaXMuX3NjYWxlZENlbGxIZWlnaHQscip0aGlzLl9zY2FsZWRDZWxsV2lkdGgsaSp0aGlzLl9zY2FsZWRDZWxsSGVpZ2h0KSl9LGUucHJvdG90eXBlLl9maWxsQ2hhclRydWVDb2xvcj1mdW5jdGlvbihlLHQscil7dGhpcy5fY3R4LmZvbnQ9dGhpcy5fZ2V0Rm9udCghMSwhMSksdGhpcy5fY3R4LnRleHRCYXNlbGluZT1cIm1pZGRsZVwiLHRoaXMuX2NsaXBSb3cociksdGhpcy5fY3R4LmZpbGxUZXh0KGUuZ2V0Q2hhcnMoKSx0KnRoaXMuX3NjYWxlZENlbGxXaWR0aCt0aGlzLl9zY2FsZWRDaGFyTGVmdCxyKnRoaXMuX3NjYWxlZENlbGxIZWlnaHQrdGhpcy5fc2NhbGVkQ2hhclRvcCt0aGlzLl9zY2FsZWRDaGFySGVpZ2h0LzIpfSxlLnByb3RvdHlwZS5fZHJhd0NoYXJzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbyxzLGE9dGhpcy5fZ2V0Q29udHJhc3RDb2xvcihlKTthfHxlLmlzRmdSR0IoKXx8ZS5pc0JnUkdCKCk/dGhpcy5fZHJhd1VuY2FjaGVkQ2hhcnMoZSx0LHIsYSk6KGUuaXNJbnZlcnNlKCk/KG89ZS5pc0JnRGVmYXVsdCgpP24uSU5WRVJURURfREVGQVVMVF9DT0xPUjplLmdldEJnQ29sb3IoKSxzPWUuaXNGZ0RlZmF1bHQoKT9uLklOVkVSVEVEX0RFRkFVTFRfQ09MT1I6ZS5nZXRGZ0NvbG9yKCkpOihzPWUuaXNCZ0RlZmF1bHQoKT9pLkRFRkFVTFRfQ09MT1I6ZS5nZXRCZ0NvbG9yKCksbz1lLmlzRmdEZWZhdWx0KCk/aS5ERUZBVUxUX0NPTE9SOmUuZ2V0RmdDb2xvcigpKSxvKz10aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzJiZlLmlzQm9sZCgpJiZvPDg/ODowLHRoaXMuX2N1cnJlbnRHbHlwaElkZW50aWZpZXIuY2hhcnM9ZS5nZXRDaGFycygpfHxpLldISVRFU1BBQ0VfQ0VMTF9DSEFSLHRoaXMuX2N1cnJlbnRHbHlwaElkZW50aWZpZXIuY29kZT1lLmdldENvZGUoKXx8aS5XSElURVNQQUNFX0NFTExfQ09ERSx0aGlzLl9jdXJyZW50R2x5cGhJZGVudGlmaWVyLmJnPXMsdGhpcy5fY3VycmVudEdseXBoSWRlbnRpZmllci5mZz1vLHRoaXMuX2N1cnJlbnRHbHlwaElkZW50aWZpZXIuYm9sZD0hIWUuaXNCb2xkKCksdGhpcy5fY3VycmVudEdseXBoSWRlbnRpZmllci5kaW09ISFlLmlzRGltKCksdGhpcy5fY3VycmVudEdseXBoSWRlbnRpZmllci5pdGFsaWM9ISFlLmlzSXRhbGljKCksdGhpcy5fY2hhckF0bGFzJiZ0aGlzLl9jaGFyQXRsYXMuZHJhdyh0aGlzLl9jdHgsdGhpcy5fY3VycmVudEdseXBoSWRlbnRpZmllcix0KnRoaXMuX3NjYWxlZENlbGxXaWR0aCt0aGlzLl9zY2FsZWRDaGFyTGVmdCxyKnRoaXMuX3NjYWxlZENlbGxIZWlnaHQrdGhpcy5fc2NhbGVkQ2hhclRvcCl8fHRoaXMuX2RyYXdVbmNhY2hlZENoYXJzKGUsdCxyKSl9LGUucHJvdG90eXBlLl9kcmF3VW5jYWNoZWRDaGFycz1mdW5jdGlvbihlLHQscixpKXtpZih0aGlzLl9jdHguc2F2ZSgpLHRoaXMuX2N0eC5mb250PXRoaXMuX2dldEZvbnQoISFlLmlzQm9sZCgpLCEhZS5pc0l0YWxpYygpKSx0aGlzLl9jdHgudGV4dEJhc2VsaW5lPVwibWlkZGxlXCIsZS5pc0ludmVyc2UoKSlpZihpKXRoaXMuX2N0eC5maWxsU3R5bGU9aS5jc3M7ZWxzZSBpZihlLmlzQmdEZWZhdWx0KCkpdGhpcy5fY3R4LmZpbGxTdHlsZT1jLmNvbG9yLm9wYXF1ZSh0aGlzLl9jb2xvcnMuYmFja2dyb3VuZCkuY3NzO2Vsc2UgaWYoZS5pc0JnUkdCKCkpdGhpcy5fY3R4LmZpbGxTdHlsZT1cInJnYihcIitzLkF0dHJpYnV0ZURhdGEudG9Db2xvclJHQihlLmdldEJnQ29sb3IoKSkuam9pbihcIixcIikrXCIpXCI7ZWxzZXt2YXIgbz1lLmdldEJnQ29sb3IoKTt0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzJiZlLmlzQm9sZCgpJiZvPDgmJihvKz04KSx0aGlzLl9jdHguZmlsbFN0eWxlPXRoaXMuX2NvbG9ycy5hbnNpW29dLmNzc31lbHNlIGlmKGkpdGhpcy5fY3R4LmZpbGxTdHlsZT1pLmNzcztlbHNlIGlmKGUuaXNGZ0RlZmF1bHQoKSl0aGlzLl9jdHguZmlsbFN0eWxlPXRoaXMuX2NvbG9ycy5mb3JlZ3JvdW5kLmNzcztlbHNlIGlmKGUuaXNGZ1JHQigpKXRoaXMuX2N0eC5maWxsU3R5bGU9XCJyZ2IoXCIrcy5BdHRyaWJ1dGVEYXRhLnRvQ29sb3JSR0IoZS5nZXRGZ0NvbG9yKCkpLmpvaW4oXCIsXCIpK1wiKVwiO2Vsc2V7dmFyIGE9ZS5nZXRGZ0NvbG9yKCk7dGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5kcmF3Qm9sZFRleHRJbkJyaWdodENvbG9ycyYmZS5pc0JvbGQoKSYmYTw4JiYoYSs9OCksdGhpcy5fY3R4LmZpbGxTdHlsZT10aGlzLl9jb2xvcnMuYW5zaVthXS5jc3N9dGhpcy5fY2xpcFJvdyhyKSxlLmlzRGltKCkmJih0aGlzLl9jdHguZ2xvYmFsQWxwaGE9bi5ESU1fT1BBQ0lUWSksdGhpcy5fY3R4LmZpbGxUZXh0KGUuZ2V0Q2hhcnMoKSx0KnRoaXMuX3NjYWxlZENlbGxXaWR0aCt0aGlzLl9zY2FsZWRDaGFyTGVmdCxyKnRoaXMuX3NjYWxlZENlbGxIZWlnaHQrdGhpcy5fc2NhbGVkQ2hhclRvcCt0aGlzLl9zY2FsZWRDaGFySGVpZ2h0LzIpLHRoaXMuX2N0eC5yZXN0b3JlKCl9LGUucHJvdG90eXBlLl9jbGlwUm93PWZ1bmN0aW9uKGUpe3RoaXMuX2N0eC5iZWdpblBhdGgoKSx0aGlzLl9jdHgucmVjdCgwLGUqdGhpcy5fc2NhbGVkQ2VsbEhlaWdodCx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMqdGhpcy5fc2NhbGVkQ2VsbFdpZHRoLHRoaXMuX3NjYWxlZENlbGxIZWlnaHQpLHRoaXMuX2N0eC5jbGlwKCl9LGUucHJvdG90eXBlLl9nZXRGb250PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ/XCJpdGFsaWNcIjpcIlwiKStcIiBcIisoZT90aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmZvbnRXZWlnaHRCb2xkOnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuZm9udFdlaWdodCkrXCIgXCIrdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5mb250U2l6ZSp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbytcInB4IFwiK3RoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuZm9udEZhbWlseX0sZS5wcm90b3R5cGUuX2dldENvbnRyYXN0Q29sb3I9ZnVuY3Rpb24oZSl7aWYoMSE9PXRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMubWluaW11bUNvbnRyYXN0UmF0aW8pe3ZhciB0PXRoaXMuX2NvbG9ycy5jb250cmFzdENhY2hlLmdldENvbG9yKGUuYmcsZS5mZyk7aWYodm9pZCAwIT09dClyZXR1cm4gdHx8dm9pZCAwO3ZhciByPWUuZ2V0RmdDb2xvcigpLGk9ZS5nZXRGZ0NvbG9yTW9kZSgpLG49ZS5nZXRCZ0NvbG9yKCksbz1lLmdldEJnQ29sb3JNb2RlKCkscz0hIWUuaXNJbnZlcnNlKCksYT0hIWUuaXNJbnZlcnNlKCk7aWYocyl7dmFyIGw9cjtyPW4sbj1sO3ZhciBoPWk7aT1vLG89aH12YXIgdT10aGlzLl9yZXNvbHZlQmFja2dyb3VuZFJnYmEobyxuLHMpLGY9dGhpcy5fcmVzb2x2ZUZvcmVncm91bmRSZ2JhKGkscixzLGEpLF89Yy5yZ2JhLmVuc3VyZUNvbnRyYXN0UmF0aW8odSxmLHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMubWluaW11bUNvbnRyYXN0UmF0aW8pO2lmKF8pe3ZhciBkPXtjc3M6Yy5jaGFubmVscy50b0NzcyhfPj4yNCYyNTUsXz4+MTYmMjU1LF8+PjgmMjU1KSxyZ2JhOl99O3JldHVybiB0aGlzLl9jb2xvcnMuY29udHJhc3RDYWNoZS5zZXRDb2xvcihlLmJnLGUuZmcsZCksZH10aGlzLl9jb2xvcnMuY29udHJhc3RDYWNoZS5zZXRDb2xvcihlLmJnLGUuZmcsbnVsbCl9fSxlLnByb3RvdHlwZS5fcmVzb2x2ZUJhY2tncm91bmRSZ2JhPWZ1bmN0aW9uKGUsdCxyKXtzd2l0Y2goZSl7Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOnJldHVybiB0aGlzLl9jb2xvcnMuYW5zaVt0XS5yZ2JhO2Nhc2UgNTAzMzE2NDg6cmV0dXJuIHQ8PDg7Y2FzZSAwOmRlZmF1bHQ6cmV0dXJuIHI/dGhpcy5fY29sb3JzLmZvcmVncm91bmQucmdiYTp0aGlzLl9jb2xvcnMuYmFja2dyb3VuZC5yZ2JhfX0sZS5wcm90b3R5cGUuX3Jlc29sdmVGb3JlZ3JvdW5kUmdiYT1mdW5jdGlvbihlLHQscixpKXtzd2l0Y2goZSl7Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOnJldHVybiB0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzJiZpJiZ0PDgmJih0Kz04KSx0aGlzLl9jb2xvcnMuYW5zaVt0XS5yZ2JhO2Nhc2UgNTAzMzE2NDg6cmV0dXJuIHQ8PDg7Y2FzZSAwOmRlZmF1bHQ6cmV0dXJuIHI/dGhpcy5fY29sb3JzLmJhY2tncm91bmQucmdiYTp0aGlzLl9jb2xvcnMuZm9yZWdyb3VuZC5yZ2JhfX0sZX0oKTt0LkJhc2VSZW5kZXJMYXllcj1ofSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5jcmVhdGVEZWNvcmF0b3I9dC5nZXRTZXJ2aWNlRGVwZW5kZW5jaWVzPXQuc2VydmljZVJlZ2lzdHJ5PXZvaWQgMDtmdW5jdGlvbiBpKGUsdCxyKXt0LmRpJHRhcmdldD09PXQ/dC5kaSRkZXBlbmRlbmNpZXMucHVzaCh7aWQ6ZSxpbmRleDpyfSk6KHQuZGkkZGVwZW5kZW5jaWVzPVt7aWQ6ZSxpbmRleDpyfV0sdC5kaSR0YXJnZXQ9dCl9dC5zZXJ2aWNlUmVnaXN0cnk9bmV3IE1hcCx0LmdldFNlcnZpY2VEZXBlbmRlbmNpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGkkZGVwZW5kZW5jaWVzfHxbXX0sdC5jcmVhdGVEZWNvcmF0b3I9ZnVuY3Rpb24oZSl7aWYodC5zZXJ2aWNlUmVnaXN0cnkuaGFzKGUpKXJldHVybiB0LnNlcnZpY2VSZWdpc3RyeS5nZXQoZSk7dmFyIHI9ZnVuY3Rpb24oZSx0LG4pe2lmKDMhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkBJU2VydmljZU5hbWUtZGVjb3JhdG9yIGNhbiBvbmx5IGJlIHVzZWQgdG8gZGVjb3JhdGUgYSBwYXJhbWV0ZXJcIik7aShyLGUsbil9O3JldHVybiByLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHQuc2VydmljZVJlZ2lzdHJ5LnNldChlLHIpLHJ9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaShlLHQscixpKXtpZih2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1pJiYoaT1lLmxlbmd0aCkscj49ZS5sZW5ndGgpcmV0dXJuIGU7cj0oZS5sZW5ndGgrciklZS5sZW5ndGgsaT1pPj1lLmxlbmd0aD9lLmxlbmd0aDooZS5sZW5ndGgraSklZS5sZW5ndGg7Zm9yKHZhciBuPXI7bjxpOysrbillW25dPXQ7cmV0dXJuIGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5jb25jYXQ9dC5maWxsRmFsbGJhY2s9dC5maWxsPXZvaWQgMCx0LmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGUuZmlsbD9lLmZpbGwodCxyLG4pOmkoZSx0LHIsbil9LHQuZmlsbEZhbGxiYWNrPWksdC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgZS5jb25zdHJ1Y3RvcihlLmxlbmd0aCt0Lmxlbmd0aCk7cmV0dXJuIHIuc2V0KGUpLHIuc2V0KHQsZS5sZW5ndGgpLHJ9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdWZmZXJMaW5lPXQuREVGQVVMVF9BVFRSX0RBVEE9dm9pZCAwO3ZhciBpPXIoOCksbj1yKDMpLG89cig0KSxzPXIoNik7dC5ERUZBVUxUX0FUVFJfREFUQT1PYmplY3QuZnJlZXplKG5ldyBzLkF0dHJpYnV0ZURhdGEpO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dm9pZCAwPT09ciYmKHI9ITEpLHRoaXMuaXNXcmFwcGVkPXIsdGhpcy5fY29tYmluZWQ9e30sdGhpcy5fZXh0ZW5kZWRBdHRycz17fSx0aGlzLl9kYXRhPW5ldyBVaW50MzJBcnJheSgzKmUpO2Zvcih2YXIgaT10fHxvLkNlbGxEYXRhLmZyb21DaGFyRGF0YShbMCxuLk5VTExfQ0VMTF9DSEFSLG4uTlVMTF9DRUxMX1dJRFRILG4uTlVMTF9DRUxMX0NPREVdKSxzPTA7czxlOysrcyl0aGlzLnNldENlbGwocyxpKTt0aGlzLmxlbmd0aD1lfXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZGF0YVszKmUrMF0scj0yMDk3MTUxJnQ7cmV0dXJuW3RoaXMuX2RhdGFbMyplKzFdLDIwOTcxNTImdD90aGlzLl9jb21iaW5lZFtlXTpyP2kuc3RyaW5nRnJvbUNvZGVQb2ludChyKTpcIlwiLHQ+PjIyLDIwOTcxNTImdD90aGlzLl9jb21iaW5lZFtlXS5jaGFyQ29kZUF0KHRoaXMuX2NvbWJpbmVkW2VdLmxlbmd0aC0xKTpyXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dGhpcy5fZGF0YVszKmUrMV09dFtuLkNIQVJfREFUQV9BVFRSX0lOREVYXSx0W24uQ0hBUl9EQVRBX0NIQVJfSU5ERVhdLmxlbmd0aD4xPyh0aGlzLl9jb21iaW5lZFtlXT10WzFdLHRoaXMuX2RhdGFbMyplKzBdPTIwOTcxNTJ8ZXx0W24uQ0hBUl9EQVRBX1dJRFRIX0lOREVYXTw8MjIpOnRoaXMuX2RhdGFbMyplKzBdPXRbbi5DSEFSX0RBVEFfQ0hBUl9JTkRFWF0uY2hhckNvZGVBdCgwKXx0W24uQ0hBUl9EQVRBX1dJRFRIX0lOREVYXTw8MjJ9LGUucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhWzMqZSswXT4+MjJ9LGUucHJvdG90eXBlLmhhc1dpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiAxMjU4MjkxMiZ0aGlzLl9kYXRhWzMqZSswXX0sZS5wcm90b3R5cGUuZ2V0Rmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGFbMyplKzFdfSxlLnByb3RvdHlwZS5nZXRCZz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGF0YVszKmUrMl19LGUucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDQxOTQzMDMmdGhpcy5fZGF0YVszKmUrMF19LGUucHJvdG90eXBlLmdldENvZGVQb2ludD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9kYXRhWzMqZSswXTtyZXR1cm4gMjA5NzE1MiZ0P3RoaXMuX2NvbWJpbmVkW2VdLmNoYXJDb2RlQXQodGhpcy5fY29tYmluZWRbZV0ubGVuZ3RoLTEpOjIwOTcxNTEmdH0sZS5wcm90b3R5cGUuaXNDb21iaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gMjA5NzE1MiZ0aGlzLl9kYXRhWzMqZSswXX0sZS5wcm90b3R5cGUuZ2V0U3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2RhdGFbMyplKzBdO3JldHVybiAyMDk3MTUyJnQ/dGhpcy5fY29tYmluZWRbZV06MjA5NzE1MSZ0P2kuc3RyaW5nRnJvbUNvZGVQb2ludCgyMDk3MTUxJnQpOlwiXCJ9LGUucHJvdG90eXBlLmxvYWRDZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MyplO3JldHVybiB0LmNvbnRlbnQ9dGhpcy5fZGF0YVtyKzBdLHQuZmc9dGhpcy5fZGF0YVtyKzFdLHQuYmc9dGhpcy5fZGF0YVtyKzJdLDIwOTcxNTImdC5jb250ZW50JiYodC5jb21iaW5lZERhdGE9dGhpcy5fY29tYmluZWRbZV0pLDI2ODQzNTQ1NiZ0LmJnJiYodC5leHRlbmRlZD10aGlzLl9leHRlbmRlZEF0dHJzW2VdKSx0fSxlLnByb3RvdHlwZS5zZXRDZWxsPWZ1bmN0aW9uKGUsdCl7MjA5NzE1MiZ0LmNvbnRlbnQmJih0aGlzLl9jb21iaW5lZFtlXT10LmNvbWJpbmVkRGF0YSksMjY4NDM1NDU2JnQuYmcmJih0aGlzLl9leHRlbmRlZEF0dHJzW2VdPXQuZXh0ZW5kZWQpLHRoaXMuX2RhdGFbMyplKzBdPXQuY29udGVudCx0aGlzLl9kYXRhWzMqZSsxXT10LmZnLHRoaXMuX2RhdGFbMyplKzJdPXQuYmd9LGUucHJvdG90eXBlLnNldENlbGxGcm9tQ29kZVBvaW50PWZ1bmN0aW9uKGUsdCxyLGksbixvKXsyNjg0MzU0NTYmbiYmKHRoaXMuX2V4dGVuZGVkQXR0cnNbZV09byksdGhpcy5fZGF0YVszKmUrMF09dHxyPDwyMix0aGlzLl9kYXRhWzMqZSsxXT1pLHRoaXMuX2RhdGFbMyplKzJdPW59LGUucHJvdG90eXBlLmFkZENvZGVwb2ludFRvQ2VsbD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2RhdGFbMyplKzBdOzIwOTcxNTImcj90aGlzLl9jb21iaW5lZFtlXSs9aS5zdHJpbmdGcm9tQ29kZVBvaW50KHQpOigyMDk3MTUxJnI/KHRoaXMuX2NvbWJpbmVkW2VdPWkuc3RyaW5nRnJvbUNvZGVQb2ludCgyMDk3MTUxJnIpK2kuc3RyaW5nRnJvbUNvZGVQb2ludCh0KSxyJj0tMjA5NzE1MixyfD0yMDk3MTUyKTpyPXR8MTw8MjIsdGhpcy5fZGF0YVszKmUrMF09cil9LGUucHJvdG90eXBlLmluc2VydENlbGxzPWZ1bmN0aW9uKGUsdCxyLGkpe2lmKChlJT10aGlzLmxlbmd0aCkmJjI9PT10aGlzLmdldFdpZHRoKGUtMSkmJnRoaXMuc2V0Q2VsbEZyb21Db2RlUG9pbnQoZS0xLDAsMSwobnVsbD09aT92b2lkIDA6aS5mZyl8fDAsKG51bGw9PWk/dm9pZCAwOmkuYmcpfHwwLChudWxsPT1pP3ZvaWQgMDppLmV4dGVuZGVkKXx8bmV3IHMuRXh0ZW5kZWRBdHRycyksdDx0aGlzLmxlbmd0aC1lKXtmb3IodmFyIG49bmV3IG8uQ2VsbERhdGEsYT10aGlzLmxlbmd0aC1lLXQtMTthPj0wOy0tYSl0aGlzLnNldENlbGwoZSt0K2EsdGhpcy5sb2FkQ2VsbChlK2EsbikpO2ZvcihhPTA7YTx0OysrYSl0aGlzLnNldENlbGwoZSthLHIpfWVsc2UgZm9yKGE9ZTthPHRoaXMubGVuZ3RoOysrYSl0aGlzLnNldENlbGwoYSxyKTsyPT09dGhpcy5nZXRXaWR0aCh0aGlzLmxlbmd0aC0xKSYmdGhpcy5zZXRDZWxsRnJvbUNvZGVQb2ludCh0aGlzLmxlbmd0aC0xLDAsMSwobnVsbD09aT92b2lkIDA6aS5mZyl8fDAsKG51bGw9PWk/dm9pZCAwOmkuYmcpfHwwLChudWxsPT1pP3ZvaWQgMDppLmV4dGVuZGVkKXx8bmV3IHMuRXh0ZW5kZWRBdHRycyl9LGUucHJvdG90eXBlLmRlbGV0ZUNlbGxzPWZ1bmN0aW9uKGUsdCxyLGkpe2lmKGUlPXRoaXMubGVuZ3RoLHQ8dGhpcy5sZW5ndGgtZSl7Zm9yKHZhciBuPW5ldyBvLkNlbGxEYXRhLGE9MDthPHRoaXMubGVuZ3RoLWUtdDsrK2EpdGhpcy5zZXRDZWxsKGUrYSx0aGlzLmxvYWRDZWxsKGUrdCthLG4pKTtmb3IoYT10aGlzLmxlbmd0aC10O2E8dGhpcy5sZW5ndGg7KythKXRoaXMuc2V0Q2VsbChhLHIpfWVsc2UgZm9yKGE9ZTthPHRoaXMubGVuZ3RoOysrYSl0aGlzLnNldENlbGwoYSxyKTtlJiYyPT09dGhpcy5nZXRXaWR0aChlLTEpJiZ0aGlzLnNldENlbGxGcm9tQ29kZVBvaW50KGUtMSwwLDEsKG51bGw9PWk/dm9pZCAwOmkuZmcpfHwwLChudWxsPT1pP3ZvaWQgMDppLmJnKXx8MCwobnVsbD09aT92b2lkIDA6aS5leHRlbmRlZCl8fG5ldyBzLkV4dGVuZGVkQXR0cnMpLDAhPT10aGlzLmdldFdpZHRoKGUpfHx0aGlzLmhhc0NvbnRlbnQoZSl8fHRoaXMuc2V0Q2VsbEZyb21Db2RlUG9pbnQoZSwwLDEsKG51bGw9PWk/dm9pZCAwOmkuZmcpfHwwLChudWxsPT1pP3ZvaWQgMDppLmJnKXx8MCwobnVsbD09aT92b2lkIDA6aS5leHRlbmRlZCl8fG5ldyBzLkV4dGVuZGVkQXR0cnMpfSxlLnByb3RvdHlwZS5yZXBsYWNlQ2VsbHM9ZnVuY3Rpb24oZSx0LHIsaSl7Zm9yKGUmJjI9PT10aGlzLmdldFdpZHRoKGUtMSkmJnRoaXMuc2V0Q2VsbEZyb21Db2RlUG9pbnQoZS0xLDAsMSwobnVsbD09aT92b2lkIDA6aS5mZyl8fDAsKG51bGw9PWk/dm9pZCAwOmkuYmcpfHwwLChudWxsPT1pP3ZvaWQgMDppLmV4dGVuZGVkKXx8bmV3IHMuRXh0ZW5kZWRBdHRycyksdDx0aGlzLmxlbmd0aCYmMj09PXRoaXMuZ2V0V2lkdGgodC0xKSYmdGhpcy5zZXRDZWxsRnJvbUNvZGVQb2ludCh0LDAsMSwobnVsbD09aT92b2lkIDA6aS5mZyl8fDAsKG51bGw9PWk/dm9pZCAwOmkuYmcpfHwwLChudWxsPT1pP3ZvaWQgMDppLmV4dGVuZGVkKXx8bmV3IHMuRXh0ZW5kZWRBdHRycyk7ZTx0JiZlPHRoaXMubGVuZ3RoOyl0aGlzLnNldENlbGwoZSsrLHIpfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSx0KXtpZihlIT09dGhpcy5sZW5ndGgpe2lmKGU+dGhpcy5sZW5ndGgpe3ZhciByPW5ldyBVaW50MzJBcnJheSgzKmUpO3RoaXMubGVuZ3RoJiYoMyplPHRoaXMuX2RhdGEubGVuZ3RoP3Iuc2V0KHRoaXMuX2RhdGEuc3ViYXJyYXkoMCwzKmUpKTpyLnNldCh0aGlzLl9kYXRhKSksdGhpcy5fZGF0YT1yO2Zvcih2YXIgaT10aGlzLmxlbmd0aDtpPGU7KytpKXRoaXMuc2V0Q2VsbChpLHQpfWVsc2UgaWYoZSl7KHI9bmV3IFVpbnQzMkFycmF5KDMqZSkpLnNldCh0aGlzLl9kYXRhLnN1YmFycmF5KDAsMyplKSksdGhpcy5fZGF0YT1yO3ZhciBuPU9iamVjdC5rZXlzKHRoaXMuX2NvbWJpbmVkKTtmb3IoaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1wYXJzZUludChuW2ldLDEwKTtvPj1lJiZkZWxldGUgdGhpcy5fY29tYmluZWRbb119fWVsc2UgdGhpcy5fZGF0YT1uZXcgVWludDMyQXJyYXkoMCksdGhpcy5fY29tYmluZWQ9e307dGhpcy5sZW5ndGg9ZX19LGUucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSl7dGhpcy5fY29tYmluZWQ9e30sdGhpcy5fZXh0ZW5kZWRBdHRycz17fTtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoOysrdCl0aGlzLnNldENlbGwodCxlKX0sZS5wcm90b3R5cGUuY29weUZyb209ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMubGVuZ3RoIT09ZS5sZW5ndGg/dGhpcy5fZGF0YT1uZXcgVWludDMyQXJyYXkoZS5fZGF0YSk6dGhpcy5fZGF0YS5zZXQoZS5fZGF0YSksdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fY29tYmluZWQ9e30sZS5fY29tYmluZWQpdGhpcy5fY29tYmluZWRbdF09ZS5fY29tYmluZWRbdF07Zm9yKHZhciB0IGluIHRoaXMuX2V4dGVuZGVkQXR0cnM9e30sZS5fZXh0ZW5kZWRBdHRycyl0aGlzLl9leHRlbmRlZEF0dHJzW3RdPWUuX2V4dGVuZGVkQXR0cnNbdF07dGhpcy5pc1dyYXBwZWQ9ZS5pc1dyYXBwZWR9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoMCk7Zm9yKHZhciByIGluIHQuX2RhdGE9bmV3IFVpbnQzMkFycmF5KHRoaXMuX2RhdGEpLHQubGVuZ3RoPXRoaXMubGVuZ3RoLHRoaXMuX2NvbWJpbmVkKXQuX2NvbWJpbmVkW3JdPXRoaXMuX2NvbWJpbmVkW3JdO2Zvcih2YXIgciBpbiB0aGlzLl9leHRlbmRlZEF0dHJzKXQuX2V4dGVuZGVkQXR0cnNbcl09dGhpcy5fZXh0ZW5kZWRBdHRyc1tyXTtyZXR1cm4gdC5pc1dyYXBwZWQ9dGhpcy5pc1dyYXBwZWQsdH0sZS5wcm90b3R5cGUuZ2V0VHJpbW1lZExlbmd0aD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmxlbmd0aC0xO2U+PTA7LS1lKWlmKDQxOTQzMDMmdGhpcy5fZGF0YVszKmUrMF0pcmV0dXJuIGUrKHRoaXMuX2RhdGFbMyplKzBdPj4yMik7cmV0dXJuIDB9LGUucHJvdG90eXBlLmNvcHlDZWxsc0Zyb209ZnVuY3Rpb24oZSx0LHIsaSxuKXt2YXIgbz1lLl9kYXRhO2lmKG4pZm9yKHZhciBzPWktMTtzPj0wO3MtLSlmb3IodmFyIGE9MDthPDM7YSsrKXRoaXMuX2RhdGFbMyoocitzKSthXT1vWzMqKHQrcykrYV07ZWxzZSBmb3Iocz0wO3M8aTtzKyspZm9yKGE9MDthPDM7YSsrKXRoaXMuX2RhdGFbMyoocitzKSthXT1vWzMqKHQrcykrYV07dmFyIGM9T2JqZWN0LmtleXMoZS5fY29tYmluZWQpO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBsPXBhcnNlSW50KGNbYV0sMTApO2w+PXQmJih0aGlzLl9jb21iaW5lZFtsLXQrcl09ZS5fY29tYmluZWRbbF0pfX0sZS5wcm90b3R5cGUudHJhbnNsYXRlVG9TdHJpbmc9ZnVuY3Rpb24oZSx0LHIpe3ZvaWQgMD09PWUmJihlPSExKSx2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj10aGlzLmxlbmd0aCksZSYmKHI9TWF0aC5taW4ocix0aGlzLmdldFRyaW1tZWRMZW5ndGgoKSkpO2Zvcih2YXIgbz1cIlwiO3Q8cjspe3ZhciBzPXRoaXMuX2RhdGFbMyp0KzBdLGE9MjA5NzE1MSZzO28rPTIwOTcxNTImcz90aGlzLl9jb21iaW5lZFt0XTphP2kuc3RyaW5nRnJvbUNvZGVQb2ludChhKTpuLldISVRFU1BBQ0VfQ0VMTF9DSEFSLHQrPXM+PjIyfHwxfXJldHVybiBvfSxlfSgpO3QuQnVmZmVyTGluZT1hfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5yZW1vdmVFbGVtZW50RnJvbVBhcmVudD12b2lkIDAsdC5yZW1vdmVFbGVtZW50RnJvbVBhcmVudD1mdW5jdGlvbigpe2Zvcih2YXIgZSx0PVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbcl09YXJndW1lbnRzW3JdO2Zvcih2YXIgaT0wLG49dDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtudWxsPT09KGU9bnVsbD09bz92b2lkIDA6by5wYXJlbnRFbGVtZW50KXx8dm9pZCAwPT09ZXx8ZS5yZW1vdmVDaGlsZChvKX19fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC50b29NdWNoT3V0cHV0PXQucHJvbXB0TGFiZWw9dm9pZCAwLHQucHJvbXB0TGFiZWw9XCJUZXJtaW5hbCBpbnB1dFwiLHQudG9vTXVjaE91dHB1dD1cIlRvbyBtdWNoIG91dHB1dCB0byBhbm5vdW5jZSwgbmF2aWdhdGUgdG8gcm93cyBtYW51YWxseSB0byByZWFkXCJ9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaSxuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoaT1mdW5jdGlvbihlLHQpe3JldHVybihpPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1pKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JbnB1dEhhbmRsZXI9dC5XaW5kb3dzT3B0aW9uc1JlcG9ydFR5cGU9dm9pZCAwO3ZhciBvLHM9cigxMiksYT1yKDIwKSxjPXIoMzkpLGw9cigyKSxoPXIoMTUpLHU9cig4KSxmPXIoMTYpLF89cigwKSxkPXIoMykscD1yKDQpLHY9cig2KSxnPXIoMjIpLHk9cigyNCksYj17XCIoXCI6MCxcIilcIjoxLFwiKlwiOjIsXCIrXCI6MyxcIi1cIjoxLFwiLlwiOjJ9O2Z1bmN0aW9uIFMoZSx0KXtpZihlPjI0KXJldHVybiB0LnNldFdpbkxpbmVzfHwhMTtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiEhdC5yZXN0b3JlV2luO2Nhc2UgMjpyZXR1cm4hIXQubWluaW1pemVXaW47Y2FzZSAzOnJldHVybiEhdC5zZXRXaW5Qb3NpdGlvbjtjYXNlIDQ6cmV0dXJuISF0LnNldFdpblNpemVQaXhlbHM7Y2FzZSA1OnJldHVybiEhdC5yYWlzZVdpbjtjYXNlIDY6cmV0dXJuISF0Lmxvd2VyV2luO2Nhc2UgNzpyZXR1cm4hIXQucmVmcmVzaFdpbjtjYXNlIDg6cmV0dXJuISF0LnNldFdpblNpemVDaGFycztjYXNlIDk6cmV0dXJuISF0Lm1heGltaXplV2luO2Nhc2UgMTA6cmV0dXJuISF0LmZ1bGxzY3JlZW5XaW47Y2FzZSAxMTpyZXR1cm4hIXQuZ2V0V2luU3RhdGU7Y2FzZSAxMzpyZXR1cm4hIXQuZ2V0V2luUG9zaXRpb247Y2FzZSAxNDpyZXR1cm4hIXQuZ2V0V2luU2l6ZVBpeGVscztjYXNlIDE1OnJldHVybiEhdC5nZXRTY3JlZW5TaXplUGl4ZWxzO2Nhc2UgMTY6cmV0dXJuISF0LmdldENlbGxTaXplUGl4ZWxzO2Nhc2UgMTg6cmV0dXJuISF0LmdldFdpblNpemVDaGFycztjYXNlIDE5OnJldHVybiEhdC5nZXRTY3JlZW5TaXplQ2hhcnM7Y2FzZSAyMDpyZXR1cm4hIXQuZ2V0SWNvblRpdGxlO2Nhc2UgMjE6cmV0dXJuISF0LmdldFdpblRpdGxlO2Nhc2UgMjI6cmV0dXJuISF0LnB1c2hUaXRsZTtjYXNlIDIzOnJldHVybiEhdC5wb3BUaXRsZTtjYXNlIDI0OnJldHVybiEhdC5zZXRXaW5MaW5lc31yZXR1cm4hMX0hZnVuY3Rpb24oZSl7ZVtlLkdFVF9XSU5fU0laRV9QSVhFTFM9MF09XCJHRVRfV0lOX1NJWkVfUElYRUxTXCIsZVtlLkdFVF9DRUxMX1NJWkVfUElYRUxTPTFdPVwiR0VUX0NFTExfU0laRV9QSVhFTFNcIn0obz10LldpbmRvd3NPcHRpb25zUmVwb3J0VHlwZXx8KHQuV2luZG93c09wdGlvbnNSZXBvcnRUeXBlPXt9KSk7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLGkpe3RoaXMuX2J1ZmZlclNlcnZpY2U9ZSx0aGlzLl9jb3JlU2VydmljZT10LHRoaXMuX2xvZ1NlcnZpY2U9cix0aGlzLl9vcHRpb25zU2VydmljZT1pLHRoaXMuX2RhdGE9bmV3IFVpbnQzMkFycmF5KDApfXJldHVybiBlLnByb3RvdHlwZS5ob29rPWZ1bmN0aW9uKGUpe3RoaXMuX2RhdGE9bmV3IFVpbnQzMkFycmF5KDApfSxlLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2RhdGE9aC5jb25jYXQodGhpcy5fZGF0YSxlLnN1YmFycmF5KHQscikpfSxlLnByb3RvdHlwZS51bmhvb2s9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dS51dGYzMlRvU3RyaW5nKHRoaXMuX2RhdGEpO3N3aXRjaCh0aGlzLl9kYXRhPW5ldyBVaW50MzJBcnJheSgwKSx0KXtjYXNlJ1wicSc6cmV0dXJuIHRoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQocy5DMC5FU0MrJ1AxJHIwXCJxJytzLkMwLkVTQytcIlxcXFxcIik7Y2FzZSdcInAnOnJldHVybiB0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KHMuQzAuRVNDKydQMSRyNjE7MVwicCcrcy5DMC5FU0MrXCJcXFxcXCIpO2Nhc2VcInJcIjp2YXIgcj10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5zY3JvbGxUb3ArMStcIjtcIisodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2Nyb2xsQm90dG9tKzEpK1wiclwiO3JldHVybiB0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KHMuQzAuRVNDK1wiUDEkclwiK3Ircy5DMC5FU0MrXCJcXFxcXCIpO2Nhc2VcIm1cIjpyZXR1cm4gdGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChzLkMwLkVTQytcIlAxJHIwbVwiK3MuQzAuRVNDK1wiXFxcXFwiKTtjYXNlXCIgcVwiOnZhciBpPXtibG9jazoyLHVuZGVybGluZTo0LGJhcjo2fVt0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmN1cnNvclN0eWxlXTtyZXR1cm4gaS09dGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5jdXJzb3JCbGluaz8xOjAsdGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChzLkMwLkVTQytcIlAxJHJcIitpK1wiIHFcIitzLkMwLkVTQytcIlxcXFxcIik7ZGVmYXVsdDp0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiVW5rbm93biBEQ1MgJHEgJXNcIix0KSx0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KHMuQzAuRVNDK1wiUDAkclwiK3MuQzAuRVNDK1wiXFxcXFwiKX19ZWxzZSB0aGlzLl9kYXRhPW5ldyBVaW50MzJBcnJheSgwKX0sZX0oKSxDPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyLGksbixvLGwsaCxkLHYpe3ZvaWQgMD09PXYmJih2PW5ldyBjLkVzY2FwZVNlcXVlbmNlUGFyc2VyKTt2YXIgeT1lLmNhbGwodGhpcyl8fHRoaXM7eS5fYnVmZmVyU2VydmljZT10LHkuX2NoYXJzZXRTZXJ2aWNlPXIseS5fY29yZVNlcnZpY2U9aSx5Ll9kaXJ0eVJvd1NlcnZpY2U9bix5Ll9sb2dTZXJ2aWNlPW8seS5fb3B0aW9uc1NlcnZpY2U9bCx5Ll9jb3JlTW91c2VTZXJ2aWNlPWgseS5fdW5pY29kZVNlcnZpY2U9ZCx5Ll9wYXJzZXI9dix5Ll9wYXJzZUJ1ZmZlcj1uZXcgVWludDMyQXJyYXkoNDA5NikseS5fc3RyaW5nRGVjb2Rlcj1uZXcgdS5TdHJpbmdUb1V0ZjMyLHkuX3V0ZjhEZWNvZGVyPW5ldyB1LlV0ZjhUb1V0ZjMyLHkuX3dvcmtDZWxsPW5ldyBwLkNlbGxEYXRhLHkuX3dpbmRvd1RpdGxlPVwiXCIseS5faWNvbk5hbWU9XCJcIix5Ll93aW5kb3dUaXRsZVN0YWNrPVtdLHkuX2ljb25OYW1lU3RhY2s9W10seS5fY3VyQXR0ckRhdGE9Zi5ERUZBVUxUX0FUVFJfREFUQS5jbG9uZSgpLHkuX2VyYXNlQXR0ckRhdGFJbnRlcm5hbD1mLkRFRkFVTFRfQVRUUl9EQVRBLmNsb25lKCkseS5fb25SZXF1ZXN0QmVsbD1uZXcgXy5FdmVudEVtaXR0ZXIseS5fb25SZXF1ZXN0UmVmcmVzaFJvd3M9bmV3IF8uRXZlbnRFbWl0dGVyLHkuX29uUmVxdWVzdFJlc2V0PW5ldyBfLkV2ZW50RW1pdHRlcix5Ll9vblJlcXVlc3RTY3JvbGw9bmV3IF8uRXZlbnRFbWl0dGVyLHkuX29uUmVxdWVzdFN5bmNTY3JvbGxCYXI9bmV3IF8uRXZlbnRFbWl0dGVyLHkuX29uUmVxdWVzdFdpbmRvd3NPcHRpb25zUmVwb3J0PW5ldyBfLkV2ZW50RW1pdHRlcix5Ll9vbkExMXlDaGFyPW5ldyBfLkV2ZW50RW1pdHRlcix5Ll9vbkExMXlUYWI9bmV3IF8uRXZlbnRFbWl0dGVyLHkuX29uQ3Vyc29yTW92ZT1uZXcgXy5FdmVudEVtaXR0ZXIseS5fb25MaW5lRmVlZD1uZXcgXy5FdmVudEVtaXR0ZXIseS5fb25TY3JvbGw9bmV3IF8uRXZlbnRFbWl0dGVyLHkuX29uVGl0bGVDaGFuZ2U9bmV3IF8uRXZlbnRFbWl0dGVyLHkucmVnaXN0ZXIoeS5fcGFyc2VyKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlckZhbGxiYWNrKChmdW5jdGlvbihlLHQpe3kuX2xvZ1NlcnZpY2UuZGVidWcoXCJVbmtub3duIENTSSBjb2RlOiBcIix7aWRlbnRpZmllcjp5Ll9wYXJzZXIuaWRlbnRUb1N0cmluZyhlKSxwYXJhbXM6dC50b0FycmF5KCl9KX0pKSx5Ll9wYXJzZXIuc2V0RXNjSGFuZGxlckZhbGxiYWNrKChmdW5jdGlvbihlKXt5Ll9sb2dTZXJ2aWNlLmRlYnVnKFwiVW5rbm93biBFU0MgY29kZTogXCIse2lkZW50aWZpZXI6eS5fcGFyc2VyLmlkZW50VG9TdHJpbmcoZSl9KX0pKSx5Ll9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXJGYWxsYmFjaygoZnVuY3Rpb24oZSl7eS5fbG9nU2VydmljZS5kZWJ1ZyhcIlVua25vd24gRVhFQ1VURSBjb2RlOiBcIix7Y29kZTplfSl9KSkseS5fcGFyc2VyLnNldE9zY0hhbmRsZXJGYWxsYmFjaygoZnVuY3Rpb24oZSx0LHIpe3kuX2xvZ1NlcnZpY2UuZGVidWcoXCJVbmtub3duIE9TQyBjb2RlOiBcIix7aWRlbnRpZmllcjplLGFjdGlvbjp0LGRhdGE6cn0pfSkpLHkuX3BhcnNlci5zZXREY3NIYW5kbGVyRmFsbGJhY2soKGZ1bmN0aW9uKGUsdCxyKXtcIkhPT0tcIj09PXQmJihyPXIudG9BcnJheSgpKSx5Ll9sb2dTZXJ2aWNlLmRlYnVnKFwiVW5rbm93biBEQ1MgY29kZTogXCIse2lkZW50aWZpZXI6eS5fcGFyc2VyLmlkZW50VG9TdHJpbmcoZSksYWN0aW9uOnQscGF5bG9hZDpyfSl9KSkseS5fcGFyc2VyLnNldFByaW50SGFuZGxlcigoZnVuY3Rpb24oZSx0LHIpe3JldHVybiB5LnByaW50KGUsdCxyKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7ZmluYWw6XCJAXCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5pbnNlcnRDaGFycyhlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIiBcIixmaW5hbDpcIkBcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LnNjcm9sbExlZnQoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiQVwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuY3Vyc29yVXAoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIgXCIsZmluYWw6XCJBXCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5zY3JvbGxSaWdodChlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7ZmluYWw6XCJCXCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5jdXJzb3JEb3duKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcIkNcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LmN1cnNvckZvcndhcmQoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiRFwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuY3Vyc29yQmFja3dhcmQoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiRVwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuY3Vyc29yTmV4dExpbmUoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiRlwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuY3Vyc29yUHJlY2VkaW5nTGluZShlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7ZmluYWw6XCJHXCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5jdXJzb3JDaGFyQWJzb2x1dGUoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiSFwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuY3Vyc29yUG9zaXRpb24oZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiSVwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuY3Vyc29yRm9yd2FyZFRhYihlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7ZmluYWw6XCJKXCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5lcmFzZUluRGlzcGxheShlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7cHJlZml4OlwiP1wiLGZpbmFsOlwiSlwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuZXJhc2VJbkRpc3BsYXkoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiS1wifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuZXJhc2VJbkxpbmUoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe3ByZWZpeDpcIj9cIixmaW5hbDpcIktcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LmVyYXNlSW5MaW5lKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcIkxcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5Lmluc2VydExpbmVzKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcIk1cIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LmRlbGV0ZUxpbmVzKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcIlBcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LmRlbGV0ZUNoYXJzKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcIlNcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LnNjcm9sbFVwKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcIlRcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LnNjcm9sbERvd24oZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiWFwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuZXJhc2VDaGFycyhlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7ZmluYWw6XCJaXCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5jdXJzb3JCYWNrd2FyZFRhYihlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7ZmluYWw6XCJgXCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5jaGFyUG9zQWJzb2x1dGUoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiYVwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuaFBvc2l0aW9uUmVsYXRpdmUoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiYlwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkucmVwZWF0UHJlY2VkaW5nQ2hhcmFjdGVyKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcImNcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LnNlbmREZXZpY2VBdHRyaWJ1dGVzUHJpbWFyeShlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7cHJlZml4OlwiPlwiLGZpbmFsOlwiY1wifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuc2VuZERldmljZUF0dHJpYnV0ZXNTZWNvbmRhcnkoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiZFwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkubGluZVBvc0Fic29sdXRlKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcImVcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LnZQb3NpdGlvblJlbGF0aXZlKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcImZcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LmhWUG9zaXRpb24oZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiZ1wifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkudGFiQ2xlYXIoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwiaFwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuc2V0TW9kZShlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7cHJlZml4OlwiP1wiLGZpbmFsOlwiaFwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuc2V0TW9kZVByaXZhdGUoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwibFwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkucmVzZXRNb2RlKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtwcmVmaXg6XCI/XCIsZmluYWw6XCJsXCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5yZXNldE1vZGVQcml2YXRlKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcIm1cIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LmNoYXJBdHRyaWJ1dGVzKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcIm5cIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LmRldmljZVN0YXR1cyhlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7cHJlZml4OlwiP1wiLGZpbmFsOlwiblwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkuZGV2aWNlU3RhdHVzUHJpdmF0ZShlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIiFcIixmaW5hbDpcInBcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LnNvZnRSZXNldChlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIiBcIixmaW5hbDpcInFcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LnNldEN1cnNvclN0eWxlKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcInJcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LnNldFNjcm9sbFJlZ2lvbihlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7ZmluYWw6XCJzXCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5zYXZlQ3Vyc29yKGUpfSkpLHkuX3BhcnNlci5zZXRDc2lIYW5kbGVyKHtmaW5hbDpcInRcIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5LndpbmRvd09wdGlvbnMoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ZpbmFsOlwidVwifSwoZnVuY3Rpb24oZSl7cmV0dXJuIHkucmVzdG9yZUN1cnNvcihlKX0pKSx5Ll9wYXJzZXIuc2V0Q3NpSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIidcIixmaW5hbDpcIn1cIn0sKGZ1bmN0aW9uKGUpe3JldHVybiB5Lmluc2VydENvbHVtbnMoZSl9KSkseS5fcGFyc2VyLnNldENzaUhhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCInXCIsZmluYWw6XCJ+XCJ9LChmdW5jdGlvbihlKXtyZXR1cm4geS5kZWxldGVDb2x1bW5zKGUpfSkpLHkuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihzLkMwLkJFTCwoZnVuY3Rpb24oKXtyZXR1cm4geS5iZWxsKCl9KSkseS5fcGFyc2VyLnNldEV4ZWN1dGVIYW5kbGVyKHMuQzAuTEYsKGZ1bmN0aW9uKCl7cmV0dXJuIHkubGluZUZlZWQoKX0pKSx5Ll9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXIocy5DMC5WVCwoZnVuY3Rpb24oKXtyZXR1cm4geS5saW5lRmVlZCgpfSkpLHkuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihzLkMwLkZGLChmdW5jdGlvbigpe3JldHVybiB5LmxpbmVGZWVkKCl9KSkseS5fcGFyc2VyLnNldEV4ZWN1dGVIYW5kbGVyKHMuQzAuQ1IsKGZ1bmN0aW9uKCl7cmV0dXJuIHkuY2FycmlhZ2VSZXR1cm4oKX0pKSx5Ll9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXIocy5DMC5CUywoZnVuY3Rpb24oKXtyZXR1cm4geS5iYWNrc3BhY2UoKX0pKSx5Ll9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXIocy5DMC5IVCwoZnVuY3Rpb24oKXtyZXR1cm4geS50YWIoKX0pKSx5Ll9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXIocy5DMC5TTywoZnVuY3Rpb24oKXtyZXR1cm4geS5zaGlmdE91dCgpfSkpLHkuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihzLkMwLlNJLChmdW5jdGlvbigpe3JldHVybiB5LnNoaWZ0SW4oKX0pKSx5Ll9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXIocy5DMS5JTkQsKGZ1bmN0aW9uKCl7cmV0dXJuIHkuaW5kZXgoKX0pKSx5Ll9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXIocy5DMS5ORUwsKGZ1bmN0aW9uKCl7cmV0dXJuIHkubmV4dExpbmUoKX0pKSx5Ll9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXIocy5DMS5IVFMsKGZ1bmN0aW9uKCl7cmV0dXJuIHkudGFiU2V0KCl9KSkseS5fcGFyc2VyLnNldE9zY0hhbmRsZXIoMCxuZXcgZy5Pc2NIYW5kbGVyKChmdW5jdGlvbihlKXt5LnNldFRpdGxlKGUpLHkuc2V0SWNvbk5hbWUoZSl9KSkpLHkuX3BhcnNlci5zZXRPc2NIYW5kbGVyKDEsbmV3IGcuT3NjSGFuZGxlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHkuc2V0SWNvbk5hbWUoZSl9KSkpLHkuX3BhcnNlci5zZXRPc2NIYW5kbGVyKDIsbmV3IGcuT3NjSGFuZGxlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHkuc2V0VGl0bGUoZSl9KSkpLHkuX3BhcnNlci5zZXRFc2NIYW5kbGVyKHtmaW5hbDpcIjdcIn0sKGZ1bmN0aW9uKCl7cmV0dXJuIHkuc2F2ZUN1cnNvcigpfSkpLHkuX3BhcnNlci5zZXRFc2NIYW5kbGVyKHtmaW5hbDpcIjhcIn0sKGZ1bmN0aW9uKCl7cmV0dXJuIHkucmVzdG9yZUN1cnNvcigpfSkpLHkuX3BhcnNlci5zZXRFc2NIYW5kbGVyKHtmaW5hbDpcIkRcIn0sKGZ1bmN0aW9uKCl7cmV0dXJuIHkuaW5kZXgoKX0pKSx5Ll9wYXJzZXIuc2V0RXNjSGFuZGxlcih7ZmluYWw6XCJFXCJ9LChmdW5jdGlvbigpe3JldHVybiB5Lm5leHRMaW5lKCl9KSkseS5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ZpbmFsOlwiSFwifSwoZnVuY3Rpb24oKXtyZXR1cm4geS50YWJTZXQoKX0pKSx5Ll9wYXJzZXIuc2V0RXNjSGFuZGxlcih7ZmluYWw6XCJNXCJ9LChmdW5jdGlvbigpe3JldHVybiB5LnJldmVyc2VJbmRleCgpfSkpLHkuX3BhcnNlci5zZXRFc2NIYW5kbGVyKHtmaW5hbDpcIj1cIn0sKGZ1bmN0aW9uKCl7cmV0dXJuIHkua2V5cGFkQXBwbGljYXRpb25Nb2RlKCl9KSkseS5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ZpbmFsOlwiPlwifSwoZnVuY3Rpb24oKXtyZXR1cm4geS5rZXlwYWROdW1lcmljTW9kZSgpfSkpLHkuX3BhcnNlci5zZXRFc2NIYW5kbGVyKHtmaW5hbDpcImNcIn0sKGZ1bmN0aW9uKCl7cmV0dXJuIHkuZnVsbFJlc2V0KCl9KSkseS5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ZpbmFsOlwiblwifSwoZnVuY3Rpb24oKXtyZXR1cm4geS5zZXRnTGV2ZWwoMil9KSkseS5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ZpbmFsOlwib1wifSwoZnVuY3Rpb24oKXtyZXR1cm4geS5zZXRnTGV2ZWwoMyl9KSkseS5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ZpbmFsOlwifFwifSwoZnVuY3Rpb24oKXtyZXR1cm4geS5zZXRnTGV2ZWwoMyl9KSkseS5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ZpbmFsOlwifVwifSwoZnVuY3Rpb24oKXtyZXR1cm4geS5zZXRnTGV2ZWwoMil9KSkseS5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ZpbmFsOlwiflwifSwoZnVuY3Rpb24oKXtyZXR1cm4geS5zZXRnTGV2ZWwoMSl9KSkseS5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIlXCIsZmluYWw6XCJAXCJ9LChmdW5jdGlvbigpe3JldHVybiB5LnNlbGVjdERlZmF1bHRDaGFyc2V0KCl9KSkseS5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIlXCIsZmluYWw6XCJHXCJ9LChmdW5jdGlvbigpe3JldHVybiB5LnNlbGVjdERlZmF1bHRDaGFyc2V0KCl9KSk7dmFyIGI9ZnVuY3Rpb24oZSl7Uy5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIoXCIsZmluYWw6ZX0sKGZ1bmN0aW9uKCl7cmV0dXJuIHkuc2VsZWN0Q2hhcnNldChcIihcIitlKX0pKSxTLl9wYXJzZXIuc2V0RXNjSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIilcIixmaW5hbDplfSwoZnVuY3Rpb24oKXtyZXR1cm4geS5zZWxlY3RDaGFyc2V0KFwiKVwiK2UpfSkpLFMuX3BhcnNlci5zZXRFc2NIYW5kbGVyKHtpbnRlcm1lZGlhdGVzOlwiKlwiLGZpbmFsOmV9LChmdW5jdGlvbigpe3JldHVybiB5LnNlbGVjdENoYXJzZXQoXCIqXCIrZSl9KSksUy5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIrXCIsZmluYWw6ZX0sKGZ1bmN0aW9uKCl7cmV0dXJuIHkuc2VsZWN0Q2hhcnNldChcIitcIitlKX0pKSxTLl9wYXJzZXIuc2V0RXNjSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIi1cIixmaW5hbDplfSwoZnVuY3Rpb24oKXtyZXR1cm4geS5zZWxlY3RDaGFyc2V0KFwiLVwiK2UpfSkpLFMuX3BhcnNlci5zZXRFc2NIYW5kbGVyKHtpbnRlcm1lZGlhdGVzOlwiLlwiLGZpbmFsOmV9LChmdW5jdGlvbigpe3JldHVybiB5LnNlbGVjdENoYXJzZXQoXCIuXCIrZSl9KSksUy5fcGFyc2VyLnNldEVzY0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIvXCIsZmluYWw6ZX0sKGZ1bmN0aW9uKCl7cmV0dXJuIHkuc2VsZWN0Q2hhcnNldChcIi9cIitlKX0pKX0sUz10aGlzO2Zvcih2YXIgQyBpbiBhLkNIQVJTRVRTKWIoQyk7cmV0dXJuIHkuX3BhcnNlci5zZXRFc2NIYW5kbGVyKHtpbnRlcm1lZGlhdGVzOlwiI1wiLGZpbmFsOlwiOFwifSwoZnVuY3Rpb24oKXtyZXR1cm4geS5zY3JlZW5BbGlnbm1lbnRQYXR0ZXJuKCl9KSkseS5fcGFyc2VyLnNldEVycm9ySGFuZGxlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHkuX2xvZ1NlcnZpY2UuZXJyb3IoXCJQYXJzaW5nIGVycm9yOiBcIixlKSxlfSkpLHkuX3BhcnNlci5zZXREY3NIYW5kbGVyKHtpbnRlcm1lZGlhdGVzOlwiJFwiLGZpbmFsOlwicVwifSxuZXcgbSh5Ll9idWZmZXJTZXJ2aWNlLHkuX2NvcmVTZXJ2aWNlLHkuX2xvZ1NlcnZpY2UseS5fb3B0aW9uc1NlcnZpY2UpKSx5fXJldHVybiBuKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25SZXF1ZXN0QmVsbFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25SZXF1ZXN0QmVsbC5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvblJlcXVlc3RSZWZyZXNoUm93c1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25SZXF1ZXN0UmVmcmVzaFJvd3MuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25SZXF1ZXN0UmVzZXRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uUmVxdWVzdFJlc2V0LmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uUmVxdWVzdFNjcm9sbFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25SZXF1ZXN0U2Nyb2xsLmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uUmVxdWVzdFN5bmNTY3JvbGxCYXJcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uUmVxdWVzdFN5bmNTY3JvbGxCYXIuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25SZXF1ZXN0V2luZG93c09wdGlvbnNSZXBvcnRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uUmVxdWVzdFdpbmRvd3NPcHRpb25zUmVwb3J0LmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uQTExeUNoYXJcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQTExeUNoYXIuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25BMTF5VGFiXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkExMXlUYWIuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25DdXJzb3JNb3ZlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkN1cnNvck1vdmUuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25MaW5lRmVlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25MaW5lRmVlZC5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvblNjcm9sbFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25TY3JvbGwuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25UaXRsZUNoYW5nZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25UaXRsZUNoYW5nZS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcixyPXQueCxpPXQueTtpZih0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwicGFyc2luZyBkYXRhXCIsZSksdGhpcy5fcGFyc2VCdWZmZXIubGVuZ3RoPGUubGVuZ3RoJiZ0aGlzLl9wYXJzZUJ1ZmZlci5sZW5ndGg8MTMxMDcyJiYodGhpcy5fcGFyc2VCdWZmZXI9bmV3IFVpbnQzMkFycmF5KE1hdGgubWluKGUubGVuZ3RoLDEzMTA3MikpKSx0aGlzLl9kaXJ0eVJvd1NlcnZpY2UuY2xlYXJSYW5nZSgpLGUubGVuZ3RoPjEzMTA3Milmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTEzMTA3Mil7dmFyIG89bisxMzEwNzI8ZS5sZW5ndGg/bisxMzEwNzI6ZS5sZW5ndGgscz1cInN0cmluZ1wiPT10eXBlb2YgZT90aGlzLl9zdHJpbmdEZWNvZGVyLmRlY29kZShlLnN1YnN0cmluZyhuLG8pLHRoaXMuX3BhcnNlQnVmZmVyKTp0aGlzLl91dGY4RGVjb2Rlci5kZWNvZGUoZS5zdWJhcnJheShuLG8pLHRoaXMuX3BhcnNlQnVmZmVyKTt0aGlzLl9wYXJzZXIucGFyc2UodGhpcy5fcGFyc2VCdWZmZXIscyl9ZWxzZXtzPVwic3RyaW5nXCI9PXR5cGVvZiBlP3RoaXMuX3N0cmluZ0RlY29kZXIuZGVjb2RlKGUsdGhpcy5fcGFyc2VCdWZmZXIpOnRoaXMuX3V0ZjhEZWNvZGVyLmRlY29kZShlLHRoaXMuX3BhcnNlQnVmZmVyKTt0aGlzLl9wYXJzZXIucGFyc2UodGhpcy5fcGFyc2VCdWZmZXIscyl9KHQ9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIpLng9PT1yJiZ0Lnk9PT1pfHx0aGlzLl9vbkN1cnNvck1vdmUuZmlyZSgpLHRoaXMuX29uUmVxdWVzdFJlZnJlc2hSb3dzLmZpcmUodGhpcy5fZGlydHlSb3dTZXJ2aWNlLnN0YXJ0LHRoaXMuX2RpcnR5Um93U2VydmljZS5lbmQpfSx0LnByb3RvdHlwZS5wcmludD1mdW5jdGlvbihlLHQscil7dmFyIGksbixvPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLHM9dGhpcy5fY2hhcnNldFNlcnZpY2UuY2hhcnNldCxhPXRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuc2NyZWVuUmVhZGVyTW9kZSxjPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyxsPXRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy53cmFwYXJvdW5kLGg9dGhpcy5fY29yZVNlcnZpY2UubW9kZXMuaW5zZXJ0TW9kZSxmPXRoaXMuX2N1ckF0dHJEYXRhLF89by5saW5lcy5nZXQoby55YmFzZStvLnkpO3RoaXMuX2RpcnR5Um93U2VydmljZS5tYXJrRGlydHkoby55KSxvLngmJnItdD4wJiYyPT09Xy5nZXRXaWR0aChvLngtMSkmJl8uc2V0Q2VsbEZyb21Db2RlUG9pbnQoby54LTEsMCwxLGYuZmcsZi5iZyxmLmV4dGVuZGVkKTtmb3IodmFyIHA9dDtwPHI7KytwKXtpZihpPWVbcF0sbj10aGlzLl91bmljb2RlU2VydmljZS53Y3dpZHRoKGkpLGk8MTI3JiZzKXt2YXIgdj1zW1N0cmluZy5mcm9tQ2hhckNvZGUoaSldO3YmJihpPXYuY2hhckNvZGVBdCgwKSl9aWYoYSYmdGhpcy5fb25BMTF5Q2hhci5maXJlKHUuc3RyaW5nRnJvbUNvZGVQb2ludChpKSksbnx8IW8ueCl7aWYoby54K24tMT49YylpZihsKXtmb3IoO28ueDxjOylfLnNldENlbGxGcm9tQ29kZVBvaW50KG8ueCsrLDAsMSxmLmZnLGYuYmcsZi5leHRlbmRlZCk7by54PTAsby55Kyssby55PT09by5zY3JvbGxCb3R0b20rMT8oby55LS0sdGhpcy5fb25SZXF1ZXN0U2Nyb2xsLmZpcmUodGhpcy5fZXJhc2VBdHRyRGF0YSgpLCEwKSk6KG8ueT49dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzJiYoby55PXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xKSxvLmxpbmVzLmdldChvLnliYXNlK28ueSkuaXNXcmFwcGVkPSEwKSxfPW8ubGluZXMuZ2V0KG8ueWJhc2Urby55KX1lbHNlIGlmKG8ueD1jLTEsMj09PW4pY29udGludWU7aWYoaCYmKF8uaW5zZXJ0Q2VsbHMoby54LG4sby5nZXROdWxsQ2VsbChmKSxmKSwyPT09Xy5nZXRXaWR0aChjLTEpJiZfLnNldENlbGxGcm9tQ29kZVBvaW50KGMtMSxkLk5VTExfQ0VMTF9DT0RFLGQuTlVMTF9DRUxMX1dJRFRILGYuZmcsZi5iZyxmLmV4dGVuZGVkKSksXy5zZXRDZWxsRnJvbUNvZGVQb2ludChvLngrKyxpLG4sZi5mZyxmLmJnLGYuZXh0ZW5kZWQpLG4+MClmb3IoOy0tbjspXy5zZXRDZWxsRnJvbUNvZGVQb2ludChvLngrKywwLDAsZi5mZyxmLmJnLGYuZXh0ZW5kZWQpfWVsc2UgXy5nZXRXaWR0aChvLngtMSk/Xy5hZGRDb2RlcG9pbnRUb0NlbGwoby54LTEsaSk6Xy5hZGRDb2RlcG9pbnRUb0NlbGwoby54LTIsaSl9ci10PjAmJihfLmxvYWRDZWxsKG8ueC0xLHRoaXMuX3dvcmtDZWxsKSwyPT09dGhpcy5fd29ya0NlbGwuZ2V0V2lkdGgoKXx8dGhpcy5fd29ya0NlbGwuZ2V0Q29kZSgpPjY1NTM1P3RoaXMuX3BhcnNlci5wcmVjZWRpbmdDb2RlcG9pbnQ9MDp0aGlzLl93b3JrQ2VsbC5pc0NvbWJpbmVkKCk/dGhpcy5fcGFyc2VyLnByZWNlZGluZ0NvZGVwb2ludD10aGlzLl93b3JrQ2VsbC5nZXRDaGFycygpLmNoYXJDb2RlQXQoMCk6dGhpcy5fcGFyc2VyLnByZWNlZGluZ0NvZGVwb2ludD10aGlzLl93b3JrQ2VsbC5jb250ZW50KSxvLng8YyYmci10PjAmJjA9PT1fLmdldFdpZHRoKG8ueCkmJiFfLmhhc0NvbnRlbnQoby54KSYmXy5zZXRDZWxsRnJvbUNvZGVQb2ludChvLngsMCwxLGYuZmcsZi5iZyxmLmV4dGVuZGVkKSx0aGlzLl9kaXJ0eVJvd1NlcnZpY2UubWFya0RpcnR5KG8ueSl9LHQucHJvdG90eXBlLmFkZENzaUhhbmRsZXI9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3JldHVyblwidFwiIT09ZS5maW5hbHx8ZS5wcmVmaXh8fGUuaW50ZXJtZWRpYXRlcz90aGlzLl9wYXJzZXIuYWRkQ3NpSGFuZGxlcihlLHQpOnRoaXMuX3BhcnNlci5hZGRDc2lIYW5kbGVyKGUsKGZ1bmN0aW9uKGUpe3JldHVybiFTKGUucGFyYW1zWzBdLHIuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMud2luZG93T3B0aW9ucyl8fHQoZSl9KSl9LHQucHJvdG90eXBlLmFkZERjc0hhbmRsZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyc2VyLmFkZERjc0hhbmRsZXIoZSxuZXcgeS5EY3NIYW5kbGVyKHQpKX0sdC5wcm90b3R5cGUuYWRkRXNjSGFuZGxlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJzZXIuYWRkRXNjSGFuZGxlcihlLHQpfSx0LnByb3RvdHlwZS5hZGRPc2NIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcnNlci5hZGRPc2NIYW5kbGVyKGUsbmV3IGcuT3NjSGFuZGxlcih0KSl9LHQucHJvdG90eXBlLmJlbGw9ZnVuY3Rpb24oKXt0aGlzLl9vblJlcXVlc3RCZWxsLmZpcmUoKX0sdC5wcm90b3R5cGUubGluZUZlZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjt0aGlzLl9kaXJ0eVJvd1NlcnZpY2UubWFya0RpcnR5KGUueSksdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5jb252ZXJ0RW9sJiYoZS54PTApLGUueSsrLGUueT09PWUuc2Nyb2xsQm90dG9tKzE/KGUueS0tLHRoaXMuX29uUmVxdWVzdFNjcm9sbC5maXJlKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpOmUueT49dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzJiYoZS55PXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xKSxlLng+PXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyYmZS54LS0sdGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtEaXJ0eShlLnkpLHRoaXMuX29uTGluZUZlZWQuZmlyZSgpfSx0LnByb3RvdHlwZS5jYXJyaWFnZVJldHVybj1mdW5jdGlvbigpe3RoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLng9MH0sdC5wcm90b3R5cGUuYmFja3NwYWNlPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjtpZighdGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLnJldmVyc2VXcmFwYXJvdW5kKXJldHVybiB0aGlzLl9yZXN0cmljdEN1cnNvcigpLHZvaWQodC54PjAmJnQueC0tKTtpZih0aGlzLl9yZXN0cmljdEN1cnNvcih0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpLHQueD4wKXQueC0tO2Vsc2UgaWYoMD09PXQueCYmdC55PnQuc2Nyb2xsVG9wJiZ0Lnk8PXQuc2Nyb2xsQm90dG9tJiYobnVsbD09PShlPXQubGluZXMuZ2V0KHQueWJhc2UrdC55KSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuaXNXcmFwcGVkKSl7dC5saW5lcy5nZXQodC55YmFzZSt0LnkpLmlzV3JhcHBlZD0hMSx0LnktLSx0Lng9dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLTE7dmFyIHI9dC5saW5lcy5nZXQodC55YmFzZSt0LnkpO3IuaGFzV2lkdGgodC54KSYmIXIuaGFzQ29udGVudCh0LngpJiZ0LngtLX10aGlzLl9yZXN0cmljdEN1cnNvcigpfSx0LnByb3RvdHlwZS50YWI9ZnVuY3Rpb24oKXtpZighKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLng+PXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scykpe3ZhciBlPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLng7dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5uZXh0U3RvcCgpLHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuc2NyZWVuUmVhZGVyTW9kZSYmdGhpcy5fb25BMTF5VGFiLmZpcmUodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueC1lKX19LHQucHJvdG90eXBlLnNoaWZ0T3V0PWZ1bmN0aW9uKCl7dGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0xldmVsKDEpfSx0LnByb3RvdHlwZS5zaGlmdEluPWZ1bmN0aW9uKCl7dGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0xldmVsKDApfSx0LnByb3RvdHlwZS5fcmVzdHJpY3RDdXJzb3I9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLTEpLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLng9TWF0aC5taW4oZSxNYXRoLm1heCgwLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLngpKSx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55PXRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5vcmlnaW4/TWF0aC5taW4odGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2Nyb2xsQm90dG9tLE1hdGgubWF4KHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnNjcm9sbFRvcCx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55KSk6TWF0aC5taW4odGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEsTWF0aC5tYXgoMCx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55KSksdGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtEaXJ0eSh0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55KX0sdC5wcm90b3R5cGUuX3NldEN1cnNvcj1mdW5jdGlvbihlLHQpe3RoaXMuX2RpcnR5Um93U2VydmljZS5tYXJrRGlydHkodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSksdGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLm9yaWdpbj8odGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueD1lLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnk9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2Nyb2xsVG9wK3QpOih0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci54PWUsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueT10KSx0aGlzLl9yZXN0cmljdEN1cnNvcigpLHRoaXMuX2RpcnR5Um93U2VydmljZS5tYXJrRGlydHkodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSl9LHQucHJvdG90eXBlLl9tb3ZlQ3Vyc29yPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcmVzdHJpY3RDdXJzb3IoKSx0aGlzLl9zZXRDdXJzb3IodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueCtlLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnkrdCl9LHQucHJvdG90eXBlLmN1cnNvclVwPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnktdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2Nyb2xsVG9wO3Q+PTA/dGhpcy5fbW92ZUN1cnNvcigwLC1NYXRoLm1pbih0LGUucGFyYW1zWzBdfHwxKSk6dGhpcy5fbW92ZUN1cnNvcigwLC0oZS5wYXJhbXNbMF18fDEpKX0sdC5wcm90b3R5cGUuY3Vyc29yRG93bj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5zY3JvbGxCb3R0b20tdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueTt0Pj0wP3RoaXMuX21vdmVDdXJzb3IoMCxNYXRoLm1pbih0LGUucGFyYW1zWzBdfHwxKSk6dGhpcy5fbW92ZUN1cnNvcigwLGUucGFyYW1zWzBdfHwxKX0sdC5wcm90b3R5cGUuY3Vyc29yRm9yd2FyZD1mdW5jdGlvbihlKXt0aGlzLl9tb3ZlQ3Vyc29yKGUucGFyYW1zWzBdfHwxLDApfSx0LnByb3RvdHlwZS5jdXJzb3JCYWNrd2FyZD1mdW5jdGlvbihlKXt0aGlzLl9tb3ZlQ3Vyc29yKC0oZS5wYXJhbXNbMF18fDEpLDApfSx0LnByb3RvdHlwZS5jdXJzb3JOZXh0TGluZT1mdW5jdGlvbihlKXt0aGlzLmN1cnNvckRvd24oZSksdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueD0wfSx0LnByb3RvdHlwZS5jdXJzb3JQcmVjZWRpbmdMaW5lPWZ1bmN0aW9uKGUpe3RoaXMuY3Vyc29yVXAoZSksdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueD0wfSx0LnByb3RvdHlwZS5jdXJzb3JDaGFyQWJzb2x1dGU9ZnVuY3Rpb24oZSl7dGhpcy5fc2V0Q3Vyc29yKChlLnBhcmFtc1swXXx8MSktMSx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55KX0sdC5wcm90b3R5cGUuY3Vyc29yUG9zaXRpb249ZnVuY3Rpb24oZSl7dGhpcy5fc2V0Q3Vyc29yKGUubGVuZ3RoPj0yPyhlLnBhcmFtc1sxXXx8MSktMTowLChlLnBhcmFtc1swXXx8MSktMSl9LHQucHJvdG90eXBlLmNoYXJQb3NBYnNvbHV0ZT1mdW5jdGlvbihlKXt0aGlzLl9zZXRDdXJzb3IoKGUucGFyYW1zWzBdfHwxKS0xLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnkpfSx0LnByb3RvdHlwZS5oUG9zaXRpb25SZWxhdGl2ZT1mdW5jdGlvbihlKXt0aGlzLl9tb3ZlQ3Vyc29yKGUucGFyYW1zWzBdfHwxLDApfSx0LnByb3RvdHlwZS5saW5lUG9zQWJzb2x1dGU9ZnVuY3Rpb24oZSl7dGhpcy5fc2V0Q3Vyc29yKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLngsKGUucGFyYW1zWzBdfHwxKS0xKX0sdC5wcm90b3R5cGUudlBvc2l0aW9uUmVsYXRpdmU9ZnVuY3Rpb24oZSl7dGhpcy5fbW92ZUN1cnNvcigwLGUucGFyYW1zWzBdfHwxKX0sdC5wcm90b3R5cGUuaFZQb3NpdGlvbj1mdW5jdGlvbihlKXt0aGlzLmN1cnNvclBvc2l0aW9uKGUpfSx0LnByb3RvdHlwZS50YWJDbGVhcj1mdW5jdGlvbihlKXt2YXIgdD1lLnBhcmFtc1swXTswPT09dD9kZWxldGUgdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIudGFic1t0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci54XTozPT09dCYmKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnRhYnM9e30pfSx0LnByb3RvdHlwZS5jdXJzb3JGb3J3YXJkVGFiPWZ1bmN0aW9uKGUpe2lmKCEodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueD49dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzKSlmb3IodmFyIHQ9ZS5wYXJhbXNbMF18fDE7dC0tOyl0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci54PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLm5leHRTdG9wKCl9LHQucHJvdG90eXBlLmN1cnNvckJhY2t3YXJkVGFiPWZ1bmN0aW9uKGUpe2lmKCEodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueD49dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzKSlmb3IodmFyIHQ9ZS5wYXJhbXNbMF18fDEscj10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjt0LS07KXIueD1yLnByZXZTdG9wKCl9LHQucHJvdG90eXBlLl9lcmFzZUluQnVmZmVyTGluZT1mdW5jdGlvbihlLHQscixpKXt2b2lkIDA9PT1pJiYoaT0hMSk7dmFyIG49dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMuZ2V0KHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnliYXNlK2UpO24ucmVwbGFjZUNlbGxzKHQscix0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5nZXROdWxsQ2VsbCh0aGlzLl9lcmFzZUF0dHJEYXRhKCkpLHRoaXMuX2VyYXNlQXR0ckRhdGEoKSksaSYmKG4uaXNXcmFwcGVkPSExKX0sdC5wcm90b3R5cGUuX3Jlc2V0QnVmZmVyTGluZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5saW5lcy5nZXQodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWJhc2UrZSk7dC5maWxsKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmdldE51bGxDZWxsKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpLHQuaXNXcmFwcGVkPSExfSx0LnByb3RvdHlwZS5lcmFzZUluRGlzcGxheT1mdW5jdGlvbihlKXt2YXIgdDtzd2l0Y2godGhpcy5fcmVzdHJpY3RDdXJzb3IoKSxlLnBhcmFtc1swXSl7Y2FzZSAwOmZvcih0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnksdGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtEaXJ0eSh0KSx0aGlzLl9lcmFzZUluQnVmZmVyTGluZSh0KyssdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueCx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsMD09PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLngpO3Q8dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzO3QrKyl0aGlzLl9yZXNldEJ1ZmZlckxpbmUodCk7dGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtEaXJ0eSh0KTticmVhaztjYXNlIDE6Zm9yKHQ9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSx0aGlzLl9kaXJ0eVJvd1NlcnZpY2UubWFya0RpcnR5KHQpLHRoaXMuX2VyYXNlSW5CdWZmZXJMaW5lKHQsMCx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci54KzEsITApLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLngrMT49dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzJiYodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMuZ2V0KHQrMSkuaXNXcmFwcGVkPSExKTt0LS07KXRoaXMuX3Jlc2V0QnVmZmVyTGluZSh0KTt0aGlzLl9kaXJ0eVJvd1NlcnZpY2UubWFya0RpcnR5KDApO2JyZWFrO2Nhc2UgMjpmb3IodD10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MsdGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtEaXJ0eSh0LTEpO3QtLTspdGhpcy5fcmVzZXRCdWZmZXJMaW5lKHQpO3RoaXMuX2RpcnR5Um93U2VydmljZS5tYXJrRGlydHkoMCk7YnJlYWs7Y2FzZSAzOnZhciByPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmxlbmd0aC10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3M7cj4wJiYodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMudHJpbVN0YXJ0KHIpLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnliYXNlPU1hdGgubWF4KHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnliYXNlLXIsMCksdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3A9TWF0aC5tYXgodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3AtciwwKSx0aGlzLl9vblNjcm9sbC5maXJlKDApKX19LHQucHJvdG90eXBlLmVyYXNlSW5MaW5lPWZ1bmN0aW9uKGUpe3N3aXRjaCh0aGlzLl9yZXN0cmljdEN1cnNvcigpLGUucGFyYW1zWzBdKXtjYXNlIDA6dGhpcy5fZXJhc2VJbkJ1ZmZlckxpbmUodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci54LHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyk7YnJlYWs7Y2FzZSAxOnRoaXMuX2VyYXNlSW5CdWZmZXJMaW5lKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnksMCx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci54KzEpO2JyZWFrO2Nhc2UgMjp0aGlzLl9lcmFzZUluQnVmZmVyTGluZSh0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55LDAsdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzKX10aGlzLl9kaXJ0eVJvd1NlcnZpY2UubWFya0RpcnR5KHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnkpfSx0LnByb3RvdHlwZS5pbnNlcnRMaW5lcz1mdW5jdGlvbihlKXt0aGlzLl9yZXN0cmljdEN1cnNvcigpO3ZhciB0PWUucGFyYW1zWzBdfHwxLHI9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXI7aWYoIShyLnk+ci5zY3JvbGxCb3R0b218fHIueTxyLnNjcm9sbFRvcCkpe2Zvcih2YXIgaT1yLnliYXNlK3IueSxuPXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xLXIuc2Nyb2xsQm90dG9tLG89dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTErci55YmFzZS1uKzE7dC0tOylyLmxpbmVzLnNwbGljZShvLTEsMSksci5saW5lcy5zcGxpY2UoaSwwLHIuZ2V0QmxhbmtMaW5lKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpO3RoaXMuX2RpcnR5Um93U2VydmljZS5tYXJrUmFuZ2VEaXJ0eShyLnksci5zY3JvbGxCb3R0b20pLHIueD0wfX0sdC5wcm90b3R5cGUuZGVsZXRlTGluZXM9ZnVuY3Rpb24oZSl7dGhpcy5fcmVzdHJpY3RDdXJzb3IoKTt2YXIgdD1lLnBhcmFtc1swXXx8MSxyPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyO2lmKCEoci55PnIuc2Nyb2xsQm90dG9tfHxyLnk8ci5zY3JvbGxUb3ApKXt2YXIgaSxuPXIueWJhc2Urci55O2ZvcihpPXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xLXIuc2Nyb2xsQm90dG9tLGk9dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTErci55YmFzZS1pO3QtLTspci5saW5lcy5zcGxpY2UobiwxKSxyLmxpbmVzLnNwbGljZShpLDAsci5nZXRCbGFua0xpbmUodGhpcy5fZXJhc2VBdHRyRGF0YSgpKSk7dGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtSYW5nZURpcnR5KHIueSxyLnNjcm9sbEJvdHRvbSksci54PTB9fSx0LnByb3RvdHlwZS5pbnNlcnRDaGFycz1mdW5jdGlvbihlKXt0aGlzLl9yZXN0cmljdEN1cnNvcigpO3ZhciB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmdldCh0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55YmFzZSt0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55KTt0JiYodC5pbnNlcnRDZWxscyh0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci54LGUucGFyYW1zWzBdfHwxLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmdldE51bGxDZWxsKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSksdGhpcy5fZXJhc2VBdHRyRGF0YSgpKSx0aGlzLl9kaXJ0eVJvd1NlcnZpY2UubWFya0RpcnR5KHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnkpKX0sdC5wcm90b3R5cGUuZGVsZXRlQ2hhcnM9ZnVuY3Rpb24oZSl7dGhpcy5fcmVzdHJpY3RDdXJzb3IoKTt2YXIgdD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5saW5lcy5nZXQodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWJhc2UrdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSk7dCYmKHQuZGVsZXRlQ2VsbHModGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueCxlLnBhcmFtc1swXXx8MSx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5nZXROdWxsQ2VsbCh0aGlzLl9lcmFzZUF0dHJEYXRhKCkpLHRoaXMuX2VyYXNlQXR0ckRhdGEoKSksdGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtEaXJ0eSh0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55KSl9LHQucHJvdG90eXBlLnNjcm9sbFVwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnBhcmFtc1swXXx8MSxyPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyO3QtLTspci5saW5lcy5zcGxpY2Uoci55YmFzZStyLnNjcm9sbFRvcCwxKSxyLmxpbmVzLnNwbGljZShyLnliYXNlK3Iuc2Nyb2xsQm90dG9tLDAsci5nZXRCbGFua0xpbmUodGhpcy5fZXJhc2VBdHRyRGF0YSgpKSk7dGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtSYW5nZURpcnR5KHIuc2Nyb2xsVG9wLHIuc2Nyb2xsQm90dG9tKX0sdC5wcm90b3R5cGUuc2Nyb2xsRG93bj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5wYXJhbXNbMF18fDEscj10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjt0LS07KXIubGluZXMuc3BsaWNlKHIueWJhc2Urci5zY3JvbGxCb3R0b20sMSksci5saW5lcy5zcGxpY2Uoci55YmFzZStyLnNjcm9sbFRvcCwwLHIuZ2V0QmxhbmtMaW5lKGYuREVGQVVMVF9BVFRSX0RBVEEpKTt0aGlzLl9kaXJ0eVJvd1NlcnZpY2UubWFya1JhbmdlRGlydHkoci5zY3JvbGxUb3Asci5zY3JvbGxCb3R0b20pfSx0LnByb3RvdHlwZS5zY3JvbGxMZWZ0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyO2lmKCEodC55PnQuc2Nyb2xsQm90dG9tfHx0Lnk8dC5zY3JvbGxUb3ApKXtmb3IodmFyIHI9ZS5wYXJhbXNbMF18fDEsaT10LnNjcm9sbFRvcDtpPD10LnNjcm9sbEJvdHRvbTsrK2kpe3ZhciBuPXQubGluZXMuZ2V0KHQueWJhc2UraSk7bi5kZWxldGVDZWxscygwLHIsdC5nZXROdWxsQ2VsbCh0aGlzLl9lcmFzZUF0dHJEYXRhKCkpLHRoaXMuX2VyYXNlQXR0ckRhdGEoKSksbi5pc1dyYXBwZWQ9ITF9dGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtSYW5nZURpcnR5KHQuc2Nyb2xsVG9wLHQuc2Nyb2xsQm90dG9tKX19LHQucHJvdG90eXBlLnNjcm9sbFJpZ2h0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyO2lmKCEodC55PnQuc2Nyb2xsQm90dG9tfHx0Lnk8dC5zY3JvbGxUb3ApKXtmb3IodmFyIHI9ZS5wYXJhbXNbMF18fDEsaT10LnNjcm9sbFRvcDtpPD10LnNjcm9sbEJvdHRvbTsrK2kpe3ZhciBuPXQubGluZXMuZ2V0KHQueWJhc2UraSk7bi5pbnNlcnRDZWxscygwLHIsdC5nZXROdWxsQ2VsbCh0aGlzLl9lcmFzZUF0dHJEYXRhKCkpLHRoaXMuX2VyYXNlQXR0ckRhdGEoKSksbi5pc1dyYXBwZWQ9ITF9dGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtSYW5nZURpcnR5KHQuc2Nyb2xsVG9wLHQuc2Nyb2xsQm90dG9tKX19LHQucHJvdG90eXBlLmluc2VydENvbHVtbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXI7aWYoISh0Lnk+dC5zY3JvbGxCb3R0b218fHQueTx0LnNjcm9sbFRvcCkpe2Zvcih2YXIgcj1lLnBhcmFtc1swXXx8MSxpPXQuc2Nyb2xsVG9wO2k8PXQuc2Nyb2xsQm90dG9tOysraSl7dmFyIG49dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMuZ2V0KHQueWJhc2UraSk7bi5pbnNlcnRDZWxscyh0Lngscix0LmdldE51bGxDZWxsKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSksdGhpcy5fZXJhc2VBdHRyRGF0YSgpKSxuLmlzV3JhcHBlZD0hMX10aGlzLl9kaXJ0eVJvd1NlcnZpY2UubWFya1JhbmdlRGlydHkodC5zY3JvbGxUb3AsdC5zY3JvbGxCb3R0b20pfX0sdC5wcm90b3R5cGUuZGVsZXRlQ29sdW1ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjtpZighKHQueT50LnNjcm9sbEJvdHRvbXx8dC55PHQuc2Nyb2xsVG9wKSl7Zm9yKHZhciByPWUucGFyYW1zWzBdfHwxLGk9dC5zY3JvbGxUb3A7aTw9dC5zY3JvbGxCb3R0b207KytpKXt2YXIgbj10LmxpbmVzLmdldCh0LnliYXNlK2kpO24uZGVsZXRlQ2VsbHModC54LHIsdC5nZXROdWxsQ2VsbCh0aGlzLl9lcmFzZUF0dHJEYXRhKCkpLHRoaXMuX2VyYXNlQXR0ckRhdGEoKSksbi5pc1dyYXBwZWQ9ITF9dGhpcy5fZGlydHlSb3dTZXJ2aWNlLm1hcmtSYW5nZURpcnR5KHQuc2Nyb2xsVG9wLHQuc2Nyb2xsQm90dG9tKX19LHQucHJvdG90eXBlLmVyYXNlQ2hhcnM9ZnVuY3Rpb24oZSl7dGhpcy5fcmVzdHJpY3RDdXJzb3IoKTt2YXIgdD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5saW5lcy5nZXQodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWJhc2UrdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSk7dCYmKHQucmVwbGFjZUNlbGxzKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLngsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueCsoZS5wYXJhbXNbMF18fDEpLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmdldE51bGxDZWxsKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSksdGhpcy5fZXJhc2VBdHRyRGF0YSgpKSx0aGlzLl9kaXJ0eVJvd1NlcnZpY2UubWFya0RpcnR5KHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnkpKX0sdC5wcm90b3R5cGUucmVwZWF0UHJlY2VkaW5nQ2hhcmFjdGVyPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX3BhcnNlci5wcmVjZWRpbmdDb2RlcG9pbnQpe2Zvcih2YXIgdD1lLnBhcmFtc1swXXx8MSxyPW5ldyBVaW50MzJBcnJheSh0KSxpPTA7aTx0OysraSlyW2ldPXRoaXMuX3BhcnNlci5wcmVjZWRpbmdDb2RlcG9pbnQ7dGhpcy5wcmludChyLDAsci5sZW5ndGgpfX0sdC5wcm90b3R5cGUuc2VuZERldmljZUF0dHJpYnV0ZXNQcmltYXJ5PWZ1bmN0aW9uKGUpe2UucGFyYW1zWzBdPjB8fCh0aGlzLl9pcyhcInh0ZXJtXCIpfHx0aGlzLl9pcyhcInJ4dnQtdW5pY29kZVwiKXx8dGhpcy5faXMoXCJzY3JlZW5cIik/dGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChzLkMwLkVTQytcIls/MTsyY1wiKTp0aGlzLl9pcyhcImxpbnV4XCIpJiZ0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KHMuQzAuRVNDK1wiWz82Y1wiKSl9LHQucHJvdG90eXBlLnNlbmREZXZpY2VBdHRyaWJ1dGVzU2Vjb25kYXJ5PWZ1bmN0aW9uKGUpe2UucGFyYW1zWzBdPjB8fCh0aGlzLl9pcyhcInh0ZXJtXCIpP3RoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQocy5DMC5FU0MrXCJbPjA7Mjc2OzBjXCIpOnRoaXMuX2lzKFwicnh2dC11bmljb2RlXCIpP3RoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQocy5DMC5FU0MrXCJbPjg1Ozk1OzBjXCIpOnRoaXMuX2lzKFwibGludXhcIik/dGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChlLnBhcmFtc1swXStcImNcIik6dGhpcy5faXMoXCJzY3JlZW5cIikmJnRoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQocy5DMC5FU0MrXCJbPjgzOzQwMDAzOzBjXCIpKX0sdC5wcm90b3R5cGUuX2lzPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09KHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMudGVybU5hbWUrXCJcIikuaW5kZXhPZihlKX0sdC5wcm90b3R5cGUuc2V0TW9kZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylzd2l0Y2goZS5wYXJhbXNbdF0pe2Nhc2UgNDp0aGlzLl9jb3JlU2VydmljZS5tb2Rlcy5pbnNlcnRNb2RlPSEwfX0sdC5wcm90b3R5cGUuc2V0TW9kZVByaXZhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspc3dpdGNoKGUucGFyYW1zW3RdKXtjYXNlIDE6dGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLmFwcGxpY2F0aW9uQ3Vyc29yS2V5cz0hMDticmVhaztjYXNlIDI6dGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0NoYXJzZXQoMCxhLkRFRkFVTFRfQ0hBUlNFVCksdGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0NoYXJzZXQoMSxhLkRFRkFVTFRfQ0hBUlNFVCksdGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0NoYXJzZXQoMixhLkRFRkFVTFRfQ0hBUlNFVCksdGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0NoYXJzZXQoMyxhLkRFRkFVTFRfQ0hBUlNFVCk7YnJlYWs7Y2FzZSAzOnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMud2luZG93T3B0aW9ucy5zZXRXaW5MaW5lcyYmKHRoaXMuX2J1ZmZlclNlcnZpY2UucmVzaXplKDEzMix0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpLHRoaXMuX29uUmVxdWVzdFJlc2V0LmZpcmUoKSk7YnJlYWs7Y2FzZSA2OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5vcmlnaW49ITAsdGhpcy5fc2V0Q3Vyc29yKDAsMCk7YnJlYWs7Y2FzZSA3OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy53cmFwYXJvdW5kPSEwO2JyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSA0NTp0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMucmV2ZXJzZVdyYXBhcm91bmQ9ITA7YnJlYWs7Y2FzZSA2Njp0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiU2VyaWFsIHBvcnQgcmVxdWVzdGVkIGFwcGxpY2F0aW9uIGtleXBhZC5cIiksdGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLmFwcGxpY2F0aW9uS2V5cGFkPSEwLHRoaXMuX29uUmVxdWVzdFN5bmNTY3JvbGxCYXIuZmlyZSgpO2JyZWFrO2Nhc2UgOTp0aGlzLl9jb3JlTW91c2VTZXJ2aWNlLmFjdGl2ZVByb3RvY29sPVwiWDEwXCI7YnJlYWs7Y2FzZSAxZTM6dGhpcy5fY29yZU1vdXNlU2VydmljZS5hY3RpdmVQcm90b2NvbD1cIlZUMjAwXCI7YnJlYWs7Y2FzZSAxMDAyOnRoaXMuX2NvcmVNb3VzZVNlcnZpY2UuYWN0aXZlUHJvdG9jb2w9XCJEUkFHXCI7YnJlYWs7Y2FzZSAxMDAzOnRoaXMuX2NvcmVNb3VzZVNlcnZpY2UuYWN0aXZlUHJvdG9jb2w9XCJBTllcIjticmVhaztjYXNlIDEwMDQ6dGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLnNlbmRGb2N1cz0hMDticmVhaztjYXNlIDEwMDU6dGhpcy5fbG9nU2VydmljZS5kZWJ1ZyhcIkRFQ1NFVCAxMDA1IG5vdCBzdXBwb3J0ZWQgKHNlZSAjMjUwNylcIik7YnJlYWs7Y2FzZSAxMDA2OnRoaXMuX2NvcmVNb3VzZVNlcnZpY2UuYWN0aXZlRW5jb2Rpbmc9XCJTR1JcIjticmVhaztjYXNlIDEwMTU6dGhpcy5fbG9nU2VydmljZS5kZWJ1ZyhcIkRFQ1NFVCAxMDE1IG5vdCBzdXBwb3J0ZWQgKHNlZSAjMjUwNylcIik7YnJlYWs7Y2FzZSAyNTp0aGlzLl9jb3JlU2VydmljZS5pc0N1cnNvckhpZGRlbj0hMTticmVhaztjYXNlIDEwNDg6dGhpcy5zYXZlQ3Vyc29yKCk7YnJlYWs7Y2FzZSAxMDQ5OnRoaXMuc2F2ZUN1cnNvcigpO2Nhc2UgNDc6Y2FzZSAxMDQ3OnRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVycy5hY3RpdmF0ZUFsdEJ1ZmZlcih0aGlzLl9lcmFzZUF0dHJEYXRhKCkpLHRoaXMuX2NvcmVTZXJ2aWNlLmlzQ3Vyc29ySW5pdGlhbGl6ZWQ9ITAsdGhpcy5fb25SZXF1ZXN0UmVmcmVzaFJvd3MuZmlyZSgwLHRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xKSx0aGlzLl9vblJlcXVlc3RTeW5jU2Nyb2xsQmFyLmZpcmUoKTticmVhaztjYXNlIDIwMDQ6dGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLmJyYWNrZXRlZFBhc3RlTW9kZT0hMH19LHQucHJvdG90eXBlLnJlc2V0TW9kZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylzd2l0Y2goZS5wYXJhbXNbdF0pe2Nhc2UgNDp0aGlzLl9jb3JlU2VydmljZS5tb2Rlcy5pbnNlcnRNb2RlPSExfX0sdC5wcm90b3R5cGUucmVzZXRNb2RlUHJpdmF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylzd2l0Y2goZS5wYXJhbXNbdF0pe2Nhc2UgMTp0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuYXBwbGljYXRpb25DdXJzb3JLZXlzPSExO2JyZWFrO2Nhc2UgMzp0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLndpbmRvd09wdGlvbnMuc2V0V2luTGluZXMmJih0aGlzLl9idWZmZXJTZXJ2aWNlLnJlc2l6ZSg4MCx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpLHRoaXMuX29uUmVxdWVzdFJlc2V0LmZpcmUoKSk7YnJlYWs7Y2FzZSA2OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5vcmlnaW49ITEsdGhpcy5fc2V0Q3Vyc29yKDAsMCk7YnJlYWs7Y2FzZSA3OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy53cmFwYXJvdW5kPSExO2JyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSA0NTp0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMucmV2ZXJzZVdyYXBhcm91bmQ9ITE7YnJlYWs7Y2FzZSA2Njp0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiU3dpdGNoaW5nIGJhY2sgdG8gbm9ybWFsIGtleXBhZC5cIiksdGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLmFwcGxpY2F0aW9uS2V5cGFkPSExLHRoaXMuX29uUmVxdWVzdFN5bmNTY3JvbGxCYXIuZmlyZSgpO2JyZWFrO2Nhc2UgOTpjYXNlIDFlMzpjYXNlIDEwMDI6Y2FzZSAxMDAzOnRoaXMuX2NvcmVNb3VzZVNlcnZpY2UuYWN0aXZlUHJvdG9jb2w9XCJOT05FXCI7YnJlYWs7Y2FzZSAxMDA0OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5zZW5kRm9jdXM9ITE7YnJlYWs7Y2FzZSAxMDA1OnRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJERUNSU1QgMTAwNSBub3Qgc3VwcG9ydGVkIChzZWUgIzI1MDcpXCIpO2JyZWFrO2Nhc2UgMTAwNjp0aGlzLl9jb3JlTW91c2VTZXJ2aWNlLmFjdGl2ZUVuY29kaW5nPVwiREVGQVVMVFwiO2JyZWFrO2Nhc2UgMTAxNTp0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiREVDUlNUIDEwMTUgbm90IHN1cHBvcnRlZCAoc2VlICMyNTA3KVwiKTticmVhaztjYXNlIDI1OnRoaXMuX2NvcmVTZXJ2aWNlLmlzQ3Vyc29ySGlkZGVuPSEwO2JyZWFrO2Nhc2UgMTA0ODp0aGlzLnJlc3RvcmVDdXJzb3IoKTticmVhaztjYXNlIDEwNDk6Y2FzZSA0NzpjYXNlIDEwNDc6dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzLmFjdGl2YXRlTm9ybWFsQnVmZmVyKCksMTA0OT09PWUucGFyYW1zW3RdJiZ0aGlzLnJlc3RvcmVDdXJzb3IoKSx0aGlzLl9jb3JlU2VydmljZS5pc0N1cnNvckluaXRpYWxpemVkPSEwLHRoaXMuX29uUmVxdWVzdFJlZnJlc2hSb3dzLmZpcmUoMCx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MtMSksdGhpcy5fb25SZXF1ZXN0U3luY1Njcm9sbEJhci5maXJlKCk7YnJlYWs7Y2FzZSAyMDA0OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5icmFja2V0ZWRQYXN0ZU1vZGU9ITF9fSx0LnByb3RvdHlwZS5fdXBkYXRlQXR0ckNvbG9yPWZ1bmN0aW9uKGUsdCxyLGksbil7cmV0dXJuIDI9PT10PyhlfD01MDMzMTY0OCxlJj0tMTY3NzcyMTYsZXw9di5BdHRyaWJ1dGVEYXRhLmZyb21Db2xvclJHQihbcixpLG5dKSk6NT09PXQmJihlJj0tNTAzMzE5MDQsZXw9MzM1NTQ0MzJ8MjU1JnIpLGV9LHQucHJvdG90eXBlLl9leHRyYWN0Q29sb3I9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPVswLDAsLTEsMCwwLDBdLG49MCxvPTA7ZG97aWYoaVtvK25dPWUucGFyYW1zW3Qrb10sZS5oYXNTdWJQYXJhbXModCtvKSl7dmFyIHM9ZS5nZXRTdWJQYXJhbXModCtvKSxhPTA7ZG97NT09PWlbMV0mJihuPTEpLGlbbythKzErbl09c1thXX13aGlsZSgrK2E8cy5sZW5ndGgmJmErbysxK248aS5sZW5ndGgpO2JyZWFrfWlmKDU9PT1pWzFdJiZvK24+PTJ8fDI9PT1pWzFdJiZvK24+PTUpYnJlYWs7aVsxXSYmKG49MSl9d2hpbGUoKytvK3Q8ZS5sZW5ndGgmJm8rbjxpLmxlbmd0aCk7Zm9yKGE9MjthPGkubGVuZ3RoOysrYSktMT09PWlbYV0mJihpW2FdPTApO3N3aXRjaChpWzBdKXtjYXNlIDM4OnIuZmc9dGhpcy5fdXBkYXRlQXR0ckNvbG9yKHIuZmcsaVsxXSxpWzNdLGlbNF0saVs1XSk7YnJlYWs7Y2FzZSA0ODpyLmJnPXRoaXMuX3VwZGF0ZUF0dHJDb2xvcihyLmJnLGlbMV0saVszXSxpWzRdLGlbNV0pO2JyZWFrO2Nhc2UgNTg6ci5leHRlbmRlZD1yLmV4dGVuZGVkLmNsb25lKCksci5leHRlbmRlZC51bmRlcmxpbmVDb2xvcj10aGlzLl91cGRhdGVBdHRyQ29sb3Ioci5leHRlbmRlZC51bmRlcmxpbmVDb2xvcixpWzFdLGlbM10saVs0XSxpWzVdKX1yZXR1cm4gb30sdC5wcm90b3R5cGUuX3Byb2Nlc3NVbmRlcmxpbmU9ZnVuY3Rpb24oZSx0KXt0LmV4dGVuZGVkPXQuZXh0ZW5kZWQuY2xvbmUoKSwoIX5lfHxlPjUpJiYoZT0xKSx0LmV4dGVuZGVkLnVuZGVybGluZVN0eWxlPWUsdC5mZ3w9MjY4NDM1NDU2LDA9PT1lJiYodC5mZyY9LTI2ODQzNTQ1NyksdC51cGRhdGVFeHRlbmRlZCgpfSx0LnByb3RvdHlwZS5jaGFyQXR0cmlidXRlcz1mdW5jdGlvbihlKXtpZigxPT09ZS5sZW5ndGgmJjA9PT1lLnBhcmFtc1swXSlyZXR1cm4gdGhpcy5fY3VyQXR0ckRhdGEuZmc9Zi5ERUZBVUxUX0FUVFJfREFUQS5mZyx2b2lkKHRoaXMuX2N1ckF0dHJEYXRhLmJnPWYuREVGQVVMVF9BVFRSX0RBVEEuYmcpO2Zvcih2YXIgdCxyPWUubGVuZ3RoLGk9dGhpcy5fY3VyQXR0ckRhdGEsbj0wO248cjtuKyspKHQ9ZS5wYXJhbXNbbl0pPj0zMCYmdDw9Mzc/KGkuZmcmPS01MDMzMTkwNCxpLmZnfD0xNjc3NzIxNnx0LTMwKTp0Pj00MCYmdDw9NDc/KGkuYmcmPS01MDMzMTkwNCxpLmJnfD0xNjc3NzIxNnx0LTQwKTp0Pj05MCYmdDw9OTc/KGkuZmcmPS01MDMzMTkwNCxpLmZnfD0xNjc3NzIyNHx0LTkwKTp0Pj0xMDAmJnQ8PTEwNz8oaS5iZyY9LTUwMzMxOTA0LGkuYmd8PTE2Nzc3MjI0fHQtMTAwKTowPT09dD8oaS5mZz1mLkRFRkFVTFRfQVRUUl9EQVRBLmZnLGkuYmc9Zi5ERUZBVUxUX0FUVFJfREFUQS5iZyk6MT09PXQ/aS5mZ3w9MTM0MjE3NzI4OjM9PT10P2kuYmd8PTY3MTA4ODY0OjQ9PT10PyhpLmZnfD0yNjg0MzU0NTYsdGhpcy5fcHJvY2Vzc1VuZGVybGluZShlLmhhc1N1YlBhcmFtcyhuKT9lLmdldFN1YlBhcmFtcyhuKVswXToxLGkpKTo1PT09dD9pLmZnfD01MzY4NzA5MTI6Nz09PXQ/aS5mZ3w9NjcxMDg4NjQ6OD09PXQ/aS5mZ3w9MTA3Mzc0MTgyNDoyPT09dD9pLmJnfD0xMzQyMTc3Mjg6MjE9PT10P3RoaXMuX3Byb2Nlc3NVbmRlcmxpbmUoMixpKToyMj09PXQ/KGkuZmcmPS0xMzQyMTc3MjksaS5iZyY9LTEzNDIxNzcyOSk6MjM9PT10P2kuYmcmPS02NzEwODg2NToyND09PXQ/aS5mZyY9LTI2ODQzNTQ1NzoyNT09PXQ/aS5mZyY9LTUzNjg3MDkxMzoyNz09PXQ/aS5mZyY9LTY3MTA4ODY1OjI4PT09dD9pLmZnJj0tMTA3Mzc0MTgyNTozOT09PXQ/KGkuZmcmPS02NzEwODg2NCxpLmZnfD0xNjc3NzIxNSZmLkRFRkFVTFRfQVRUUl9EQVRBLmZnKTo0OT09PXQ/KGkuYmcmPS02NzEwODg2NCxpLmJnfD0xNjc3NzIxNSZmLkRFRkFVTFRfQVRUUl9EQVRBLmJnKTozOD09PXR8fDQ4PT09dHx8NTg9PT10P24rPXRoaXMuX2V4dHJhY3RDb2xvcihlLG4saSk6NTk9PT10PyhpLmV4dGVuZGVkPWkuZXh0ZW5kZWQuY2xvbmUoKSxpLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yPS0xLGkudXBkYXRlRXh0ZW5kZWQoKSk6MTAwPT09dD8oaS5mZyY9LTY3MTA4ODY0LGkuZmd8PTE2Nzc3MjE1JmYuREVGQVVMVF9BVFRSX0RBVEEuZmcsaS5iZyY9LTY3MTA4ODY0LGkuYmd8PTE2Nzc3MjE1JmYuREVGQVVMVF9BVFRSX0RBVEEuYmcpOnRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJVbmtub3duIFNHUiBhdHRyaWJ1dGU6ICVkLlwiLHQpfSx0LnByb3RvdHlwZS5kZXZpY2VTdGF0dXM9ZnVuY3Rpb24oZSl7c3dpdGNoKGUucGFyYW1zWzBdKXtjYXNlIDU6dGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChzLkMwLkVTQytcIlswblwiKTticmVhaztjYXNlIDY6dmFyIHQ9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSsxLHI9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueCsxO3RoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQocy5DMC5FU0MrXCJbXCIrdCtcIjtcIityK1wiUlwiKX19LHQucHJvdG90eXBlLmRldmljZVN0YXR1c1ByaXZhdGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUucGFyYW1zWzBdKXtjYXNlIDY6dmFyIHQ9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSsxLHI9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueCsxO3RoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQocy5DMC5FU0MrXCJbP1wiK3QrXCI7XCIrcitcIlJcIil9fSx0LnByb3RvdHlwZS5zb2Z0UmVzZXQ9ZnVuY3Rpb24oZSl7dGhpcy5fY29yZVNlcnZpY2UuaXNDdXJzb3JIaWRkZW49ITEsdGhpcy5fb25SZXF1ZXN0U3luY1Njcm9sbEJhci5maXJlKCksdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2Nyb2xsVG9wPTAsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2Nyb2xsQm90dG9tPXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xLHRoaXMuX2N1ckF0dHJEYXRhPWYuREVGQVVMVF9BVFRSX0RBVEEuY2xvbmUoKSx0aGlzLl9jb3JlU2VydmljZS5yZXNldCgpLHRoaXMuX2NoYXJzZXRTZXJ2aWNlLnJlc2V0KCksdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2F2ZWRYPTAsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2F2ZWRZPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnliYXNlLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnNhdmVkQ3VyQXR0ckRhdGEuZmc9dGhpcy5fY3VyQXR0ckRhdGEuZmcsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2F2ZWRDdXJBdHRyRGF0YS5iZz10aGlzLl9jdXJBdHRyRGF0YS5iZyx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5zYXZlZENoYXJzZXQ9dGhpcy5fY2hhcnNldFNlcnZpY2UuY2hhcnNldCx0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMub3JpZ2luPSExfSx0LnByb3RvdHlwZS5zZXRDdXJzb3JTdHlsZT1mdW5jdGlvbihlKXt2YXIgdD1lLnBhcmFtc1swXXx8MTtzd2l0Y2godCl7Y2FzZSAxOmNhc2UgMjp0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmN1cnNvclN0eWxlPVwiYmxvY2tcIjticmVhaztjYXNlIDM6Y2FzZSA0OnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuY3Vyc29yU3R5bGU9XCJ1bmRlcmxpbmVcIjticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuY3Vyc29yU3R5bGU9XCJiYXJcIn12YXIgcj10JTI9PTE7dGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5jdXJzb3JCbGluaz1yfSx0LnByb3RvdHlwZS5zZXRTY3JvbGxSZWdpb249ZnVuY3Rpb24oZSl7dmFyIHQscj1lLnBhcmFtc1swXXx8MTsoZS5sZW5ndGg8Mnx8KHQ9ZS5wYXJhbXNbMV0pPnRoaXMuX2J1ZmZlclNlcnZpY2Uucm93c3x8MD09PXQpJiYodD10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpLHQ+ciYmKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnNjcm9sbFRvcD1yLTEsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2Nyb2xsQm90dG9tPXQtMSx0aGlzLl9zZXRDdXJzb3IoMCwwKSl9LHQucHJvdG90eXBlLndpbmRvd09wdGlvbnM9ZnVuY3Rpb24oZSl7aWYoUyhlLnBhcmFtc1swXSx0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLndpbmRvd09wdGlvbnMpKXt2YXIgdD1lLmxlbmd0aD4xP2UucGFyYW1zWzFdOjA7c3dpdGNoKGUucGFyYW1zWzBdKXtjYXNlIDE0OjIhPT10JiZ0aGlzLl9vblJlcXVlc3RXaW5kb3dzT3B0aW9uc1JlcG9ydC5maXJlKG8uR0VUX1dJTl9TSVpFX1BJWEVMUyk7YnJlYWs7Y2FzZSAxNjp0aGlzLl9vblJlcXVlc3RXaW5kb3dzT3B0aW9uc1JlcG9ydC5maXJlKG8uR0VUX0NFTExfU0laRV9QSVhFTFMpO2JyZWFrO2Nhc2UgMTg6dGhpcy5fYnVmZmVyU2VydmljZSYmdGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChzLkMwLkVTQytcIls4O1wiK3RoaXMuX2J1ZmZlclNlcnZpY2Uucm93cytcIjtcIit0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMrXCJ0XCIpO2JyZWFrO2Nhc2UgMjI6MCE9PXQmJjIhPT10fHwodGhpcy5fd2luZG93VGl0bGVTdGFjay5wdXNoKHRoaXMuX3dpbmRvd1RpdGxlKSx0aGlzLl93aW5kb3dUaXRsZVN0YWNrLmxlbmd0aD4xMCYmdGhpcy5fd2luZG93VGl0bGVTdGFjay5zaGlmdCgpKSwwIT09dCYmMSE9PXR8fCh0aGlzLl9pY29uTmFtZVN0YWNrLnB1c2godGhpcy5faWNvbk5hbWUpLHRoaXMuX2ljb25OYW1lU3RhY2subGVuZ3RoPjEwJiZ0aGlzLl9pY29uTmFtZVN0YWNrLnNoaWZ0KCkpO2JyZWFrO2Nhc2UgMjM6MCE9PXQmJjIhPT10fHx0aGlzLl93aW5kb3dUaXRsZVN0YWNrLmxlbmd0aCYmdGhpcy5zZXRUaXRsZSh0aGlzLl93aW5kb3dUaXRsZVN0YWNrLnBvcCgpKSwwIT09dCYmMSE9PXR8fHRoaXMuX2ljb25OYW1lU3RhY2subGVuZ3RoJiZ0aGlzLnNldEljb25OYW1lKHRoaXMuX2ljb25OYW1lU3RhY2sucG9wKCkpfX19LHQucHJvdG90eXBlLnNhdmVDdXJzb3I9ZnVuY3Rpb24oZSl7dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2F2ZWRYPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLngsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2F2ZWRZPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnliYXNlK3RoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnksdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2F2ZWRDdXJBdHRyRGF0YS5mZz10aGlzLl9jdXJBdHRyRGF0YS5mZyx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5zYXZlZEN1ckF0dHJEYXRhLmJnPXRoaXMuX2N1ckF0dHJEYXRhLmJnLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnNhdmVkQ2hhcnNldD10aGlzLl9jaGFyc2V0U2VydmljZS5jaGFyc2V0fSx0LnByb3RvdHlwZS5yZXN0b3JlQ3Vyc29yPWZ1bmN0aW9uKGUpe3RoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLng9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2F2ZWRYfHwwLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnk9TWF0aC5tYXgodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2F2ZWRZLXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnliYXNlLDApLHRoaXMuX2N1ckF0dHJEYXRhLmZnPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnNhdmVkQ3VyQXR0ckRhdGEuZmcsdGhpcy5fY3VyQXR0ckRhdGEuYmc9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2F2ZWRDdXJBdHRyRGF0YS5iZyx0aGlzLl9jaGFyc2V0U2VydmljZS5jaGFyc2V0PXRoaXMuX3NhdmVkQ2hhcnNldCx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5zYXZlZENoYXJzZXQmJih0aGlzLl9jaGFyc2V0U2VydmljZS5jaGFyc2V0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnNhdmVkQ2hhcnNldCksdGhpcy5fcmVzdHJpY3RDdXJzb3IoKX0sdC5wcm90b3R5cGUuc2V0VGl0bGU9ZnVuY3Rpb24oZSl7dGhpcy5fd2luZG93VGl0bGU9ZSx0aGlzLl9vblRpdGxlQ2hhbmdlLmZpcmUoZSl9LHQucHJvdG90eXBlLnNldEljb25OYW1lPWZ1bmN0aW9uKGUpe3RoaXMuX2ljb25OYW1lPWV9LHQucHJvdG90eXBlLm5leHRMaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueD0wLHRoaXMuaW5kZXgoKX0sdC5wcm90b3R5cGUua2V5cGFkQXBwbGljYXRpb25Nb2RlPWZ1bmN0aW9uKCl7dGhpcy5fbG9nU2VydmljZS5kZWJ1ZyhcIlNlcmlhbCBwb3J0IHJlcXVlc3RlZCBhcHBsaWNhdGlvbiBrZXlwYWQuXCIpLHRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5hcHBsaWNhdGlvbktleXBhZD0hMCx0aGlzLl9vblJlcXVlc3RTeW5jU2Nyb2xsQmFyLmZpcmUoKX0sdC5wcm90b3R5cGUua2V5cGFkTnVtZXJpY01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiU3dpdGNoaW5nIGJhY2sgdG8gbm9ybWFsIGtleXBhZC5cIiksdGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLmFwcGxpY2F0aW9uS2V5cGFkPSExLHRoaXMuX29uUmVxdWVzdFN5bmNTY3JvbGxCYXIuZmlyZSgpfSx0LnByb3RvdHlwZS5zZWxlY3REZWZhdWx0Q2hhcnNldD1mdW5jdGlvbigpe3RoaXMuX2NoYXJzZXRTZXJ2aWNlLnNldGdMZXZlbCgwKSx0aGlzLl9jaGFyc2V0U2VydmljZS5zZXRnQ2hhcnNldCgwLGEuREVGQVVMVF9DSEFSU0VUKX0sdC5wcm90b3R5cGUuc2VsZWN0Q2hhcnNldD1mdW5jdGlvbihlKXsyPT09ZS5sZW5ndGg/XCIvXCIhPT1lWzBdJiZ0aGlzLl9jaGFyc2V0U2VydmljZS5zZXRnQ2hhcnNldChiW2VbMF1dLGEuQ0hBUlNFVFNbZVsxXV18fGEuREVGQVVMVF9DSEFSU0VUKTp0aGlzLnNlbGVjdERlZmF1bHRDaGFyc2V0KCl9LHQucHJvdG90eXBlLmluZGV4PWZ1bmN0aW9uKCl7dGhpcy5fcmVzdHJpY3RDdXJzb3IoKTt2YXIgZT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjt0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55KyssZS55PT09ZS5zY3JvbGxCb3R0b20rMT8oZS55LS0sdGhpcy5fb25SZXF1ZXN0U2Nyb2xsLmZpcmUodGhpcy5fZXJhc2VBdHRyRGF0YSgpKSk6ZS55Pj10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MmJihlLnk9dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEpLHRoaXMuX3Jlc3RyaWN0Q3Vyc29yKCl9LHQucHJvdG90eXBlLnRhYlNldD1mdW5jdGlvbigpe3RoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnRhYnNbdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueF09ITB9LHQucHJvdG90eXBlLnJldmVyc2VJbmRleD1mdW5jdGlvbigpe3RoaXMuX3Jlc3RyaWN0Q3Vyc29yKCk7dmFyIGU9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXI7aWYoZS55PT09ZS5zY3JvbGxUb3Ape3ZhciB0PWUuc2Nyb2xsQm90dG9tLWUuc2Nyb2xsVG9wO2UubGluZXMuc2hpZnRFbGVtZW50cyhlLnliYXNlK2UueSx0LDEpLGUubGluZXMuc2V0KGUueWJhc2UrZS55LGUuZ2V0QmxhbmtMaW5lKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpLHRoaXMuX2RpcnR5Um93U2VydmljZS5tYXJrUmFuZ2VEaXJ0eShlLnNjcm9sbFRvcCxlLnNjcm9sbEJvdHRvbSl9ZWxzZSBlLnktLSx0aGlzLl9yZXN0cmljdEN1cnNvcigpfSx0LnByb3RvdHlwZS5mdWxsUmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9wYXJzZXIucmVzZXQoKSx0aGlzLl9vblJlcXVlc3RSZXNldC5maXJlKCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fY3VyQXR0ckRhdGE9Zi5ERUZBVUxUX0FUVFJfREFUQS5jbG9uZSgpLHRoaXMuX2VyYXNlQXR0ckRhdGFJbnRlcm5hbD1mLkRFRkFVTFRfQVRUUl9EQVRBLmNsb25lKCl9LHQucHJvdG90eXBlLl9lcmFzZUF0dHJEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VyYXNlQXR0ckRhdGFJbnRlcm5hbC5iZyY9LTY3MTA4ODY0LHRoaXMuX2VyYXNlQXR0ckRhdGFJbnRlcm5hbC5iZ3w9NjcxMDg4NjMmdGhpcy5fY3VyQXR0ckRhdGEuYmcsdGhpcy5fZXJhc2VBdHRyRGF0YUludGVybmFsfSx0LnByb3RvdHlwZS5zZXRnTGV2ZWw9ZnVuY3Rpb24oZSl7dGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0xldmVsKGUpfSx0LnByb3RvdHlwZS5zY3JlZW5BbGlnbm1lbnRQYXR0ZXJuPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHAuQ2VsbERhdGE7ZS5jb250ZW50PTE8PDIyfFwiRVwiLmNoYXJDb2RlQXQoMCksZS5mZz10aGlzLl9jdXJBdHRyRGF0YS5mZyxlLmJnPXRoaXMuX2N1ckF0dHJEYXRhLmJnO3ZhciB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyO3RoaXMuX3NldEN1cnNvcigwLDApO2Zvcih2YXIgcj0wO3I8dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzOysrcil7dmFyIGk9dC55YmFzZSt0LnkrcixuPXQubGluZXMuZ2V0KGkpO24mJihuLmZpbGwoZSksbi5pc1dyYXBwZWQ9ITEpfXRoaXMuX2RpcnR5Um93U2VydmljZS5tYXJrQWxsRGlydHkoKSx0aGlzLl9zZXRDdXJzb3IoMCwwKX0sdH0obC5EaXNwb3NhYmxlKTt0LklucHV0SGFuZGxlcj1DfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5ERUZBVUxUX0NIQVJTRVQ9dC5DSEFSU0VUUz12b2lkIDAsdC5DSEFSU0VUUz17fSx0LkRFRkFVTFRfQ0hBUlNFVD10LkNIQVJTRVRTLkIsdC5DSEFSU0VUU1swXT17XCJgXCI6XCLil4ZcIixhOlwi4paSXCIsYjpcIuKQiVwiLGM6XCLikIxcIixkOlwi4pCNXCIsZTpcIuKQilwiLGY6XCLCsFwiLGc6XCLCsVwiLGg6XCLikKRcIixpOlwi4pCLXCIsajpcIuKUmFwiLGs6XCLilJBcIixsOlwi4pSMXCIsbTpcIuKUlFwiLG46XCLilLxcIixvOlwi4o66XCIscDpcIuKOu1wiLHE6XCLilIBcIixyOlwi4o68XCIsczpcIuKOvVwiLHQ6XCLilJxcIix1Olwi4pSkXCIsdjpcIuKUtFwiLHc6XCLilKxcIix4Olwi4pSCXCIseTpcIuKJpFwiLHo6XCLiiaVcIixcIntcIjpcIs+AXCIsXCJ8XCI6XCLiiaBcIixcIn1cIjpcIsKjXCIsXCJ+XCI6XCLCt1wifSx0LkNIQVJTRVRTLkE9e1wiI1wiOlwiwqNcIn0sdC5DSEFSU0VUUy5CPXZvaWQgMCx0LkNIQVJTRVRTWzRdPXtcIiNcIjpcIsKjXCIsXCJAXCI6XCLCvlwiLFwiW1wiOlwiaWpcIixcIlxcXFxcIjpcIsK9XCIsXCJdXCI6XCJ8XCIsXCJ7XCI6XCLCqFwiLFwifFwiOlwiZlwiLFwifVwiOlwiwrxcIixcIn5cIjpcIsK0XCJ9LHQuQ0hBUlNFVFMuQz10LkNIQVJTRVRTWzVdPXtcIltcIjpcIsOEXCIsXCJcXFxcXCI6XCLDllwiLFwiXVwiOlwiw4VcIixcIl5cIjpcIsOcXCIsXCJgXCI6XCLDqVwiLFwie1wiOlwiw6RcIixcInxcIjpcIsO2XCIsXCJ9XCI6XCLDpVwiLFwiflwiOlwiw7xcIn0sdC5DSEFSU0VUUy5SPXtcIiNcIjpcIsKjXCIsXCJAXCI6XCLDoFwiLFwiW1wiOlwiwrBcIixcIlxcXFxcIjpcIsOnXCIsXCJdXCI6XCLCp1wiLFwie1wiOlwiw6lcIixcInxcIjpcIsO5XCIsXCJ9XCI6XCLDqFwiLFwiflwiOlwiwqhcIn0sdC5DSEFSU0VUUy5RPXtcIkBcIjpcIsOgXCIsXCJbXCI6XCLDolwiLFwiXFxcXFwiOlwiw6dcIixcIl1cIjpcIsOqXCIsXCJeXCI6XCLDrlwiLFwiYFwiOlwiw7RcIixcIntcIjpcIsOpXCIsXCJ8XCI6XCLDuVwiLFwifVwiOlwiw6hcIixcIn5cIjpcIsO7XCJ9LHQuQ0hBUlNFVFMuSz17XCJAXCI6XCLCp1wiLFwiW1wiOlwiw4RcIixcIlxcXFxcIjpcIsOWXCIsXCJdXCI6XCLDnFwiLFwie1wiOlwiw6RcIixcInxcIjpcIsO2XCIsXCJ9XCI6XCLDvFwiLFwiflwiOlwiw59cIn0sdC5DSEFSU0VUUy5ZPXtcIiNcIjpcIsKjXCIsXCJAXCI6XCLCp1wiLFwiW1wiOlwiwrBcIixcIlxcXFxcIjpcIsOnXCIsXCJdXCI6XCLDqVwiLFwiYFwiOlwiw7lcIixcIntcIjpcIsOgXCIsXCJ8XCI6XCLDslwiLFwifVwiOlwiw6hcIixcIn5cIjpcIsOsXCJ9LHQuQ0hBUlNFVFMuRT10LkNIQVJTRVRTWzZdPXtcIkBcIjpcIsOEXCIsXCJbXCI6XCLDhlwiLFwiXFxcXFwiOlwiw5hcIixcIl1cIjpcIsOFXCIsXCJeXCI6XCLDnFwiLFwiYFwiOlwiw6RcIixcIntcIjpcIsOmXCIsXCJ8XCI6XCLDuFwiLFwifVwiOlwiw6VcIixcIn5cIjpcIsO8XCJ9LHQuQ0hBUlNFVFMuWj17XCIjXCI6XCLCo1wiLFwiQFwiOlwiwqdcIixcIltcIjpcIsKhXCIsXCJcXFxcXCI6XCLDkVwiLFwiXVwiOlwiwr9cIixcIntcIjpcIsKwXCIsXCJ8XCI6XCLDsVwiLFwifVwiOlwiw6dcIn0sdC5DSEFSU0VUUy5IPXQuQ0hBUlNFVFNbN109e1wiQFwiOlwiw4lcIixcIltcIjpcIsOEXCIsXCJcXFxcXCI6XCLDllwiLFwiXVwiOlwiw4VcIixcIl5cIjpcIsOcXCIsXCJgXCI6XCLDqVwiLFwie1wiOlwiw6RcIixcInxcIjpcIsO2XCIsXCJ9XCI6XCLDpVwiLFwiflwiOlwiw7xcIn0sdC5DSEFSU0VUU1tcIj1cIl09e1wiI1wiOlwiw7lcIixcIkBcIjpcIsOgXCIsXCJbXCI6XCLDqVwiLFwiXFxcXFwiOlwiw6dcIixcIl1cIjpcIsOqXCIsXCJeXCI6XCLDrlwiLF86XCLDqFwiLFwiYFwiOlwiw7RcIixcIntcIjpcIsOkXCIsXCJ8XCI6XCLDtlwiLFwifVwiOlwiw7xcIixcIn5cIjpcIsO7XCJ9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QYXJhbXM9dm9pZCAwO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2lmKHZvaWQgMD09PWUmJihlPTMyKSx2b2lkIDA9PT10JiYodD0zMiksdGhpcy5tYXhMZW5ndGg9ZSx0aGlzLm1heFN1YlBhcmFtc0xlbmd0aD10LHQ+MjU2KXRocm93IG5ldyBFcnJvcihcIm1heFN1YlBhcmFtc0xlbmd0aCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gMjU2XCIpO3RoaXMucGFyYW1zPW5ldyBJbnQzMkFycmF5KGUpLHRoaXMubGVuZ3RoPTAsdGhpcy5fc3ViUGFyYW1zPW5ldyBJbnQzMkFycmF5KHQpLHRoaXMuX3N1YlBhcmFtc0xlbmd0aD0wLHRoaXMuX3N1YlBhcmFtc0lkeD1uZXcgVWludDE2QXJyYXkoZSksdGhpcy5fcmVqZWN0RGlnaXRzPSExLHRoaXMuX3JlamVjdFN1YkRpZ2l0cz0hMSx0aGlzLl9kaWdpdElzU3ViPSExfXJldHVybiBlLmZyb21BcnJheT1mdW5jdGlvbih0KXt2YXIgcj1uZXcgZTtpZighdC5sZW5ndGgpcmV0dXJuIHI7Zm9yKHZhciBpPXRbMF1pbnN0YW5jZW9mIEFycmF5PzE6MDtpPHQubGVuZ3RoOysraSl7dmFyIG49dFtpXTtpZihuIGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pci5hZGRTdWJQYXJhbShuW29dKTtlbHNlIHIuYWRkUGFyYW0obil9cmV0dXJuIHJ9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUodGhpcy5tYXhMZW5ndGgsdGhpcy5tYXhTdWJQYXJhbXNMZW5ndGgpO3JldHVybiB0LnBhcmFtcy5zZXQodGhpcy5wYXJhbXMpLHQubGVuZ3RoPXRoaXMubGVuZ3RoLHQuX3N1YlBhcmFtcy5zZXQodGhpcy5fc3ViUGFyYW1zKSx0Ll9zdWJQYXJhbXNMZW5ndGg9dGhpcy5fc3ViUGFyYW1zTGVuZ3RoLHQuX3N1YlBhcmFtc0lkeC5zZXQodGhpcy5fc3ViUGFyYW1zSWR4KSx0Ll9yZWplY3REaWdpdHM9dGhpcy5fcmVqZWN0RGlnaXRzLHQuX3JlamVjdFN1YkRpZ2l0cz10aGlzLl9yZWplY3RTdWJEaWdpdHMsdC5fZGlnaXRJc1N1Yj10aGlzLl9kaWdpdElzU3ViLHR9LGUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8dGhpcy5sZW5ndGg7Kyt0KXtlLnB1c2godGhpcy5wYXJhbXNbdF0pO3ZhciByPXRoaXMuX3N1YlBhcmFtc0lkeFt0XT4+OCxpPTI1NSZ0aGlzLl9zdWJQYXJhbXNJZHhbdF07aS1yPjAmJmUucHVzaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9zdWJQYXJhbXMscixpKSl9cmV0dXJuIGV9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9zdWJQYXJhbXNMZW5ndGg9MCx0aGlzLl9yZWplY3REaWdpdHM9ITEsdGhpcy5fcmVqZWN0U3ViRGlnaXRzPSExLHRoaXMuX2RpZ2l0SXNTdWI9ITF9LGUucHJvdG90eXBlLmFkZFBhcmFtPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2RpZ2l0SXNTdWI9ITEsdGhpcy5sZW5ndGg+PXRoaXMubWF4TGVuZ3RoKXRoaXMuX3JlamVjdERpZ2l0cz0hMDtlbHNle2lmKGU8LTEpdGhyb3cgbmV3IEVycm9yKFwidmFsdWVzIGxlc3NlciB0aGFuIC0xIGFyZSBub3QgYWxsb3dlZFwiKTt0aGlzLl9zdWJQYXJhbXNJZHhbdGhpcy5sZW5ndGhdPXRoaXMuX3N1YlBhcmFtc0xlbmd0aDw8OHx0aGlzLl9zdWJQYXJhbXNMZW5ndGgsdGhpcy5wYXJhbXNbdGhpcy5sZW5ndGgrK109ZT4yMTQ3NDgzNjQ3PzIxNDc0ODM2NDc6ZX19LGUucHJvdG90eXBlLmFkZFN1YlBhcmFtPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2RpZ2l0SXNTdWI9ITAsdGhpcy5sZW5ndGgpaWYodGhpcy5fcmVqZWN0RGlnaXRzfHx0aGlzLl9zdWJQYXJhbXNMZW5ndGg+PXRoaXMubWF4U3ViUGFyYW1zTGVuZ3RoKXRoaXMuX3JlamVjdFN1YkRpZ2l0cz0hMDtlbHNle2lmKGU8LTEpdGhyb3cgbmV3IEVycm9yKFwidmFsdWVzIGxlc3NlciB0aGFuIC0xIGFyZSBub3QgYWxsb3dlZFwiKTt0aGlzLl9zdWJQYXJhbXNbdGhpcy5fc3ViUGFyYW1zTGVuZ3RoKytdPWU+MjE0NzQ4MzY0Nz8yMTQ3NDgzNjQ3OmUsdGhpcy5fc3ViUGFyYW1zSWR4W3RoaXMubGVuZ3RoLTFdKyt9fSxlLnByb3RvdHlwZS5oYXNTdWJQYXJhbXM9ZnVuY3Rpb24oZSl7cmV0dXJuKDI1NSZ0aGlzLl9zdWJQYXJhbXNJZHhbZV0pLSh0aGlzLl9zdWJQYXJhbXNJZHhbZV0+PjgpPjB9LGUucHJvdG90eXBlLmdldFN1YlBhcmFtcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zdWJQYXJhbXNJZHhbZV0+Pjgscj0yNTUmdGhpcy5fc3ViUGFyYW1zSWR4W2VdO3JldHVybiByLXQ+MD90aGlzLl9zdWJQYXJhbXMuc3ViYXJyYXkodCxyKTpudWxsfSxlLnByb3RvdHlwZS5nZXRTdWJQYXJhbXNBbGw9ZnVuY3Rpb24oKXtmb3IodmFyIGU9e30sdD0wO3Q8dGhpcy5sZW5ndGg7Kyt0KXt2YXIgcj10aGlzLl9zdWJQYXJhbXNJZHhbdF0+PjgsaT0yNTUmdGhpcy5fc3ViUGFyYW1zSWR4W3RdO2ktcj4wJiYoZVt0XT10aGlzLl9zdWJQYXJhbXMuc2xpY2UocixpKSl9cmV0dXJuIGV9LGUucHJvdG90eXBlLmFkZERpZ2l0PWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCEodGhpcy5fcmVqZWN0RGlnaXRzfHwhKHQ9dGhpcy5fZGlnaXRJc1N1Yj90aGlzLl9zdWJQYXJhbXNMZW5ndGg6dGhpcy5sZW5ndGgpfHx0aGlzLl9kaWdpdElzU3ViJiZ0aGlzLl9yZWplY3RTdWJEaWdpdHMpKXt2YXIgcj10aGlzLl9kaWdpdElzU3ViP3RoaXMuX3N1YlBhcmFtczp0aGlzLnBhcmFtcyxpPXJbdC0xXTtyW3QtMV09fmk/TWF0aC5taW4oMTAqaStlLDIxNDc0ODM2NDcpOmV9fSxlfSgpO3QuUGFyYW1zPWl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9zY0hhbmRsZXI9dC5Pc2NQYXJzZXI9dm9pZCAwO3ZhciBpPXIoMjMpLG49cig4KSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3N0YXRlPTAsdGhpcy5faWQ9LTEsdGhpcy5faGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9oYW5kbGVyRmI9ZnVuY3Rpb24oKXt9fXJldHVybiBlLnByb3RvdHlwZS5hZGRIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dGhpcy5faGFuZGxlcnNbZV0mJih0aGlzLl9oYW5kbGVyc1tlXT1bXSk7dmFyIHI9dGhpcy5faGFuZGxlcnNbZV07cmV0dXJuIHIucHVzaCh0KSx7ZGlzcG9zZTpmdW5jdGlvbigpe3ZhciBlPXIuaW5kZXhPZih0KTstMSE9PWUmJnIuc3BsaWNlKGUsMSl9fX0sZS5wcm90b3R5cGUuc2V0SGFuZGxlcj1mdW5jdGlvbihlLHQpe3RoaXMuX2hhbmRsZXJzW2VdPVt0XX0sZS5wcm90b3R5cGUuY2xlYXJIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuX2hhbmRsZXJzW2VdJiZkZWxldGUgdGhpcy5faGFuZGxlcnNbZV19LGUucHJvdG90eXBlLnNldEhhbmRsZXJGYWxsYmFjaz1mdW5jdGlvbihlKXt0aGlzLl9oYW5kbGVyRmI9ZX0sZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2hhbmRsZXJzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5faGFuZGxlckZiPWZ1bmN0aW9uKCl7fX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXsyPT09dGhpcy5fc3RhdGUmJnRoaXMuZW5kKCExKSx0aGlzLl9pZD0tMSx0aGlzLl9zdGF0ZT0wfSxlLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9oYW5kbGVyc1t0aGlzLl9pZF07aWYoZSlmb3IodmFyIHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSllW3RdLnN0YXJ0KCk7ZWxzZSB0aGlzLl9oYW5kbGVyRmIodGhpcy5faWQsXCJTVEFSVFwiKX0sZS5wcm90b3R5cGUuX3B1dD1mdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy5faGFuZGxlcnNbdGhpcy5faWRdO2lmKGkpZm9yKHZhciBvPWkubGVuZ3RoLTE7bz49MDtvLS0paVtvXS5wdXQoZSx0LHIpO2Vsc2UgdGhpcy5faGFuZGxlckZiKHRoaXMuX2lkLFwiUFVUXCIsbi51dGYzMlRvU3RyaW5nKGUsdCxyKSl9LGUucHJvdG90eXBlLl9lbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faGFuZGxlcnNbdGhpcy5faWRdO2lmKHQpe2Zvcih2YXIgcj10Lmxlbmd0aC0xO3I+PTAmJiExPT09dFtyXS5lbmQoZSk7ci0tKTtmb3Ioci0tO3I+PTA7ci0tKXRbcl0uZW5kKCExKX1lbHNlIHRoaXMuX2hhbmRsZXJGYih0aGlzLl9pZCxcIkVORFwiLGUpfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKSx0aGlzLl9pZD0tMSx0aGlzLl9zdGF0ZT0xfSxlLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oZSx0LHIpe2lmKDMhPT10aGlzLl9zdGF0ZSl7aWYoMT09PXRoaXMuX3N0YXRlKWZvcig7dDxyOyl7dmFyIGk9ZVt0KytdO2lmKDU5PT09aSl7dGhpcy5fc3RhdGU9Mix0aGlzLl9zdGFydCgpO2JyZWFrfWlmKGk8NDh8fDU3PGkpcmV0dXJuIHZvaWQodGhpcy5fc3RhdGU9Myk7LTE9PT10aGlzLl9pZCYmKHRoaXMuX2lkPTApLHRoaXMuX2lkPTEwKnRoaXMuX2lkK2ktNDh9Mj09PXRoaXMuX3N0YXRlJiZyLXQ+MCYmdGhpcy5fcHV0KGUsdCxyKX19LGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlKXswIT09dGhpcy5fc3RhdGUmJigzIT09dGhpcy5fc3RhdGUmJigxPT09dGhpcy5fc3RhdGUmJnRoaXMuX3N0YXJ0KCksdGhpcy5fZW5kKGUpKSx0aGlzLl9pZD0tMSx0aGlzLl9zdGF0ZT0wKX0sZX0oKTt0Lk9zY1BhcnNlcj1vO3ZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9oYW5kbGVyPWUsdGhpcy5fZGF0YT1cIlwiLHRoaXMuX2hpdExpbWl0PSExfXJldHVybiBlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3RoaXMuX2RhdGE9XCJcIix0aGlzLl9oaXRMaW1pdD0hMX0sZS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9oaXRMaW1pdHx8KHRoaXMuX2RhdGErPW4udXRmMzJUb1N0cmluZyhlLHQsciksdGhpcy5fZGF0YS5sZW5ndGg+aS5QQVlMT0FEX0xJTUlUJiYodGhpcy5fZGF0YT1cIlwiLHRoaXMuX2hpdExpbWl0PSEwKSl9LGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpcy5faGl0TGltaXQ/dD0hMTplJiYodD10aGlzLl9oYW5kbGVyKHRoaXMuX2RhdGEpKSx0aGlzLl9kYXRhPVwiXCIsdGhpcy5faGl0TGltaXQ9ITEsdH0sZX0oKTt0Lk9zY0hhbmRsZXI9c30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUEFZTE9BRF9MSU1JVD12b2lkIDAsdC5QQVlMT0FEX0xJTUlUPTFlN30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGNzSGFuZGxlcj10LkRjc1BhcnNlcj12b2lkIDA7dmFyIGk9cig4KSxuPXIoMjEpLG89cigyMykscz1bXSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2hhbmRsZXJzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fYWN0aXZlPXMsdGhpcy5faWRlbnQ9MCx0aGlzLl9oYW5kbGVyRmI9ZnVuY3Rpb24oKXt9fXJldHVybiBlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5faGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9oYW5kbGVyRmI9ZnVuY3Rpb24oKXt9fSxlLnByb3RvdHlwZS5hZGRIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dGhpcy5faGFuZGxlcnNbZV0mJih0aGlzLl9oYW5kbGVyc1tlXT1bXSk7dmFyIHI9dGhpcy5faGFuZGxlcnNbZV07cmV0dXJuIHIucHVzaCh0KSx7ZGlzcG9zZTpmdW5jdGlvbigpe3ZhciBlPXIuaW5kZXhPZih0KTstMSE9PWUmJnIuc3BsaWNlKGUsMSl9fX0sZS5wcm90b3R5cGUuc2V0SGFuZGxlcj1mdW5jdGlvbihlLHQpe3RoaXMuX2hhbmRsZXJzW2VdPVt0XX0sZS5wcm90b3R5cGUuY2xlYXJIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuX2hhbmRsZXJzW2VdJiZkZWxldGUgdGhpcy5faGFuZGxlcnNbZV19LGUucHJvdG90eXBlLnNldEhhbmRsZXJGYWxsYmFjaz1mdW5jdGlvbihlKXt0aGlzLl9oYW5kbGVyRmI9ZX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmUubGVuZ3RoJiZ0aGlzLnVuaG9vayghMSksdGhpcy5fYWN0aXZlPXMsdGhpcy5faWRlbnQ9MH0sZS5wcm90b3R5cGUuaG9vaz1mdW5jdGlvbihlLHQpe2lmKHRoaXMucmVzZXQoKSx0aGlzLl9pZGVudD1lLHRoaXMuX2FjdGl2ZT10aGlzLl9oYW5kbGVyc1tlXXx8cyx0aGlzLl9hY3RpdmUubGVuZ3RoKWZvcih2YXIgcj10aGlzLl9hY3RpdmUubGVuZ3RoLTE7cj49MDtyLS0pdGhpcy5fYWN0aXZlW3JdLmhvb2sodCk7ZWxzZSB0aGlzLl9oYW5kbGVyRmIodGhpcy5faWRlbnQsXCJIT09LXCIsdCl9LGUucHJvdG90eXBlLnB1dD1mdW5jdGlvbihlLHQscil7aWYodGhpcy5fYWN0aXZlLmxlbmd0aClmb3IodmFyIG49dGhpcy5fYWN0aXZlLmxlbmd0aC0xO24+PTA7bi0tKXRoaXMuX2FjdGl2ZVtuXS5wdXQoZSx0LHIpO2Vsc2UgdGhpcy5faGFuZGxlckZiKHRoaXMuX2lkZW50LFwiUFVUXCIsaS51dGYzMlRvU3RyaW5nKGUsdCxyKSl9LGUucHJvdG90eXBlLnVuaG9vaz1mdW5jdGlvbihlKXtpZih0aGlzLl9hY3RpdmUubGVuZ3RoKXtmb3IodmFyIHQ9dGhpcy5fYWN0aXZlLmxlbmd0aC0xO3Q+PTAmJiExPT09dGhpcy5fYWN0aXZlW3RdLnVuaG9vayhlKTt0LS0pO2Zvcih0LS07dD49MDt0LS0pdGhpcy5fYWN0aXZlW3RdLnVuaG9vayghMSl9ZWxzZSB0aGlzLl9oYW5kbGVyRmIodGhpcy5faWRlbnQsXCJVTkhPT0tcIixlKTt0aGlzLl9hY3RpdmU9cyx0aGlzLl9pZGVudD0wfSxlfSgpO3QuRGNzUGFyc2VyPWE7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2hhbmRsZXI9ZSx0aGlzLl9kYXRhPVwiXCIsdGhpcy5faGl0TGltaXQ9ITF9cmV0dXJuIGUucHJvdG90eXBlLmhvb2s9ZnVuY3Rpb24oZSl7dGhpcy5fcGFyYW1zPWUuY2xvbmUoKSx0aGlzLl9kYXRhPVwiXCIsdGhpcy5faGl0TGltaXQ9ITF9LGUucHJvdG90eXBlLnB1dD1mdW5jdGlvbihlLHQscil7dGhpcy5faGl0TGltaXR8fCh0aGlzLl9kYXRhKz1pLnV0ZjMyVG9TdHJpbmcoZSx0LHIpLHRoaXMuX2RhdGEubGVuZ3RoPm8uUEFZTE9BRF9MSU1JVCYmKHRoaXMuX2RhdGE9XCJcIix0aGlzLl9oaXRMaW1pdD0hMCkpfSxlLnByb3RvdHlwZS51bmhvb2s9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHRoaXMuX2hpdExpbWl0P3Q9ITE6ZSYmKHQ9dGhpcy5faGFuZGxlcih0aGlzLl9kYXRhLHRoaXMuX3BhcmFtc3x8bmV3IG4uUGFyYW1zKSksdGhpcy5fcGFyYW1zPXZvaWQgMCx0aGlzLl9kYXRhPVwiXCIsdGhpcy5faGl0TGltaXQ9ITEsdH0sZX0oKTt0LkRjc0hhbmRsZXI9Y30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQucmVtb3ZlVGVybWluYWxGcm9tQ2FjaGU9dC5hY3F1aXJlQ2hhckF0bGFzPXZvaWQgMDt2YXIgaT1yKDI2KSxuPXIoNDMpLG89W107dC5hY3F1aXJlQ2hhckF0bGFzPWZ1bmN0aW9uKGUsdCxyLHMsYSl7Zm9yKHZhciBjPWkuZ2VuZXJhdGVDb25maWcocyxhLGUsciksbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgaD0odT1vW2xdKS5vd25lZEJ5LmluZGV4T2YodCk7aWYoaD49MCl7aWYoaS5jb25maWdFcXVhbHModS5jb25maWcsYykpcmV0dXJuIHUuYXRsYXM7MT09PXUub3duZWRCeS5sZW5ndGg/KHUuYXRsYXMuZGlzcG9zZSgpLG8uc3BsaWNlKGwsMSkpOnUub3duZWRCeS5zcGxpY2UoaCwxKTticmVha319Zm9yKGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIHU9b1tsXTtpZihpLmNvbmZpZ0VxdWFscyh1LmNvbmZpZyxjKSlyZXR1cm4gdS5vd25lZEJ5LnB1c2godCksdS5hdGxhc312YXIgZj17YXRsYXM6bmV3IG4uRHluYW1pY0NoYXJBdGxhcyhkb2N1bWVudCxjKSxjb25maWc6Yyxvd25lZEJ5Olt0XX07cmV0dXJuIG8ucHVzaChmKSxmLmF0bGFzfSx0LnJlbW92ZVRlcm1pbmFsRnJvbUNhY2hlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8by5sZW5ndGg7dCsrKXt2YXIgcj1vW3RdLm93bmVkQnkuaW5kZXhPZihlKTtpZigtMSE9PXIpezE9PT1vW3RdLm93bmVkQnkubGVuZ3RoPyhvW3RdLmF0bGFzLmRpc3Bvc2UoKSxvLnNwbGljZSh0LDEpKTpvW3RdLm93bmVkQnkuc3BsaWNlKHIsMSk7YnJlYWt9fX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmlzMjU2Q29sb3I9dC5jb25maWdFcXVhbHM9dC5nZW5lcmF0ZUNvbmZpZz12b2lkIDA7dmFyIGk9cigzKTt0LmdlbmVyYXRlQ29uZmlnPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBuPXtmb3JlZ3JvdW5kOmkuZm9yZWdyb3VuZCxiYWNrZ3JvdW5kOmkuYmFja2dyb3VuZCxjdXJzb3I6dm9pZCAwLGN1cnNvckFjY2VudDp2b2lkIDAsc2VsZWN0aW9uOnZvaWQgMCxhbnNpOmkuYW5zaS5zbGljZSgwLDE2KX07cmV0dXJue2RldmljZVBpeGVsUmF0aW86d2luZG93LmRldmljZVBpeGVsUmF0aW8sc2NhbGVkQ2hhcldpZHRoOmUsc2NhbGVkQ2hhckhlaWdodDp0LGZvbnRGYW1pbHk6ci5mb250RmFtaWx5LGZvbnRTaXplOnIuZm9udFNpemUsZm9udFdlaWdodDpyLmZvbnRXZWlnaHQsZm9udFdlaWdodEJvbGQ6ci5mb250V2VpZ2h0Qm9sZCxhbGxvd1RyYW5zcGFyZW5jeTpyLmFsbG93VHJhbnNwYXJlbmN5LGNvbG9yczpufX0sdC5jb25maWdFcXVhbHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPGUuY29sb3JzLmFuc2kubGVuZ3RoO3IrKylpZihlLmNvbG9ycy5hbnNpW3JdLnJnYmEhPT10LmNvbG9ycy5hbnNpW3JdLnJnYmEpcmV0dXJuITE7cmV0dXJuIGUuZGV2aWNlUGl4ZWxSYXRpbz09PXQuZGV2aWNlUGl4ZWxSYXRpbyYmZS5mb250RmFtaWx5PT09dC5mb250RmFtaWx5JiZlLmZvbnRTaXplPT09dC5mb250U2l6ZSYmZS5mb250V2VpZ2h0PT09dC5mb250V2VpZ2h0JiZlLmZvbnRXZWlnaHRCb2xkPT09dC5mb250V2VpZ2h0Qm9sZCYmZS5hbGxvd1RyYW5zcGFyZW5jeT09PXQuYWxsb3dUcmFuc3BhcmVuY3kmJmUuc2NhbGVkQ2hhcldpZHRoPT09dC5zY2FsZWRDaGFyV2lkdGgmJmUuc2NhbGVkQ2hhckhlaWdodD09PXQuc2NhbGVkQ2hhckhlaWdodCYmZS5jb2xvcnMuZm9yZWdyb3VuZD09PXQuY29sb3JzLmZvcmVncm91bmQmJmUuY29sb3JzLmJhY2tncm91bmQ9PT10LmNvbG9ycy5iYWNrZ3JvdW5kfSx0LmlzMjU2Q29sb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8aS5ERUZBVUxUX0NPTE9SfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29sb3JNYW5hZ2VyPXQuREVGQVVMVF9BTlNJX0NPTE9SUz12b2lkIDA7dmFyIGk9cigxMCksbj1yKDQ1KSxvPWkuY3NzLnRvQ29sb3IoXCIjZmZmZmZmXCIpLHM9aS5jc3MudG9Db2xvcihcIiMwMDAwMDBcIiksYT1pLmNzcy50b0NvbG9yKFwiI2ZmZmZmZlwiKSxjPWkuY3NzLnRvQ29sb3IoXCIjMDAwMDAwXCIpLGw9e2NzczpcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKVwiLHJnYmE6NDI5NDk2NzExN307dC5ERUZBVUxUX0FOU0lfQ09MT1JTPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtpLmNzcy50b0NvbG9yKFwiIzJlMzQzNlwiKSxpLmNzcy50b0NvbG9yKFwiI2NjMDAwMFwiKSxpLmNzcy50b0NvbG9yKFwiIzRlOWEwNlwiKSxpLmNzcy50b0NvbG9yKFwiI2M0YTAwMFwiKSxpLmNzcy50b0NvbG9yKFwiIzM0NjVhNFwiKSxpLmNzcy50b0NvbG9yKFwiIzc1NTA3YlwiKSxpLmNzcy50b0NvbG9yKFwiIzA2OTg5YVwiKSxpLmNzcy50b0NvbG9yKFwiI2QzZDdjZlwiKSxpLmNzcy50b0NvbG9yKFwiIzU1NTc1M1wiKSxpLmNzcy50b0NvbG9yKFwiI2VmMjkyOVwiKSxpLmNzcy50b0NvbG9yKFwiIzhhZTIzNFwiKSxpLmNzcy50b0NvbG9yKFwiI2ZjZTk0ZlwiKSxpLmNzcy50b0NvbG9yKFwiIzcyOWZjZlwiKSxpLmNzcy50b0NvbG9yKFwiI2FkN2ZhOFwiKSxpLmNzcy50b0NvbG9yKFwiIzM0ZTJlMlwiKSxpLmNzcy50b0NvbG9yKFwiI2VlZWVlY1wiKV0sdD1bMCw5NSwxMzUsMTc1LDIxNSwyNTVdLHI9MDtyPDIxNjtyKyspe3ZhciBuPXRbci8zNiU2fDBdLG89dFtyLzYlNnwwXSxzPXRbciU2XTtlLnB1c2goe2NzczppLmNoYW5uZWxzLnRvQ3NzKG4sbyxzKSxyZ2JhOmkuY2hhbm5lbHMudG9SZ2JhKG4sbyxzKX0pfWZvcihyPTA7cjwyNDtyKyspe3ZhciBhPTgrMTAqcjtlLnB1c2goe2NzczppLmNoYW5uZWxzLnRvQ3NzKGEsYSxhKSxyZ2JhOmkuY2hhbm5lbHMudG9SZ2JhKGEsYSxhKX0pfXJldHVybiBlfSgpO3ZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIpe3RoaXMuYWxsb3dUcmFuc3BhcmVuY3k9cjt2YXIgaD1lLmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7aC53aWR0aD0xLGguaGVpZ2h0PTE7dmFyIHU9aC5nZXRDb250ZXh0KFwiMmRcIik7aWYoIXUpdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCByZW5kZXJpbmcgY29udGV4dFwiKTt0aGlzLl9jdHg9dSx0aGlzLl9jdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwiY29weVwiLHRoaXMuX2xpdG11c0NvbG9yPXRoaXMuX2N0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLDAsMSwxKSx0aGlzLl9jb250cmFzdENhY2hlPW5ldyBuLkNvbG9yQ29udHJhc3RDYWNoZSx0aGlzLmNvbG9ycz17Zm9yZWdyb3VuZDpvLGJhY2tncm91bmQ6cyxjdXJzb3I6YSxjdXJzb3JBY2NlbnQ6YyxzZWxlY3Rpb25UcmFuc3BhcmVudDpsLHNlbGVjdGlvbk9wYXF1ZTppLmNvbG9yLmJsZW5kKHMsbCksYW5zaTp0LkRFRkFVTFRfQU5TSV9DT0xPUlMuc2xpY2UoKSxjb250cmFzdENhY2hlOnRoaXMuX2NvbnRyYXN0Q2FjaGV9fXJldHVybiBlLnByb3RvdHlwZS5vbk9wdGlvbnNDaGFuZ2U9ZnVuY3Rpb24oZSl7XCJtaW5pbXVtQ29udHJhc3RSYXRpb1wiPT09ZSYmdGhpcy5fY29udHJhc3RDYWNoZS5jbGVhcigpfSxlLnByb3RvdHlwZS5zZXRUaGVtZT1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5jb2xvcnMuZm9yZWdyb3VuZD10aGlzLl9wYXJzZUNvbG9yKGUuZm9yZWdyb3VuZCxvKSx0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kPXRoaXMuX3BhcnNlQ29sb3IoZS5iYWNrZ3JvdW5kLHMpLHRoaXMuY29sb3JzLmN1cnNvcj10aGlzLl9wYXJzZUNvbG9yKGUuY3Vyc29yLGEsITApLHRoaXMuY29sb3JzLmN1cnNvckFjY2VudD10aGlzLl9wYXJzZUNvbG9yKGUuY3Vyc29yQWNjZW50LGMsITApLHRoaXMuY29sb3JzLnNlbGVjdGlvblRyYW5zcGFyZW50PXRoaXMuX3BhcnNlQ29sb3IoZS5zZWxlY3Rpb24sbCwhMCksdGhpcy5jb2xvcnMuc2VsZWN0aW9uT3BhcXVlPWkuY29sb3IuYmxlbmQodGhpcy5jb2xvcnMuYmFja2dyb3VuZCx0aGlzLmNvbG9ycy5zZWxlY3Rpb25UcmFuc3BhcmVudCksaS5jb2xvci5pc09wYXF1ZSh0aGlzLmNvbG9ycy5zZWxlY3Rpb25UcmFuc3BhcmVudCkpe3RoaXMuY29sb3JzLnNlbGVjdGlvblRyYW5zcGFyZW50PWkuY29sb3Iub3BhY2l0eSh0aGlzLmNvbG9ycy5zZWxlY3Rpb25UcmFuc3BhcmVudCwuMyl9dGhpcy5jb2xvcnMuYW5zaVswXT10aGlzLl9wYXJzZUNvbG9yKGUuYmxhY2ssdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzBdKSx0aGlzLmNvbG9ycy5hbnNpWzFdPXRoaXMuX3BhcnNlQ29sb3IoZS5yZWQsdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzFdKSx0aGlzLmNvbG9ycy5hbnNpWzJdPXRoaXMuX3BhcnNlQ29sb3IoZS5ncmVlbix0LkRFRkFVTFRfQU5TSV9DT0xPUlNbMl0pLHRoaXMuY29sb3JzLmFuc2lbM109dGhpcy5fcGFyc2VDb2xvcihlLnllbGxvdyx0LkRFRkFVTFRfQU5TSV9DT0xPUlNbM10pLHRoaXMuY29sb3JzLmFuc2lbNF09dGhpcy5fcGFyc2VDb2xvcihlLmJsdWUsdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzRdKSx0aGlzLmNvbG9ycy5hbnNpWzVdPXRoaXMuX3BhcnNlQ29sb3IoZS5tYWdlbnRhLHQuREVGQVVMVF9BTlNJX0NPTE9SU1s1XSksdGhpcy5jb2xvcnMuYW5zaVs2XT10aGlzLl9wYXJzZUNvbG9yKGUuY3lhbix0LkRFRkFVTFRfQU5TSV9DT0xPUlNbNl0pLHRoaXMuY29sb3JzLmFuc2lbN109dGhpcy5fcGFyc2VDb2xvcihlLndoaXRlLHQuREVGQVVMVF9BTlNJX0NPTE9SU1s3XSksdGhpcy5jb2xvcnMuYW5zaVs4XT10aGlzLl9wYXJzZUNvbG9yKGUuYnJpZ2h0QmxhY2ssdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzhdKSx0aGlzLmNvbG9ycy5hbnNpWzldPXRoaXMuX3BhcnNlQ29sb3IoZS5icmlnaHRSZWQsdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzldKSx0aGlzLmNvbG9ycy5hbnNpWzEwXT10aGlzLl9wYXJzZUNvbG9yKGUuYnJpZ2h0R3JlZW4sdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzEwXSksdGhpcy5jb2xvcnMuYW5zaVsxMV09dGhpcy5fcGFyc2VDb2xvcihlLmJyaWdodFllbGxvdyx0LkRFRkFVTFRfQU5TSV9DT0xPUlNbMTFdKSx0aGlzLmNvbG9ycy5hbnNpWzEyXT10aGlzLl9wYXJzZUNvbG9yKGUuYnJpZ2h0Qmx1ZSx0LkRFRkFVTFRfQU5TSV9DT0xPUlNbMTJdKSx0aGlzLmNvbG9ycy5hbnNpWzEzXT10aGlzLl9wYXJzZUNvbG9yKGUuYnJpZ2h0TWFnZW50YSx0LkRFRkFVTFRfQU5TSV9DT0xPUlNbMTNdKSx0aGlzLmNvbG9ycy5hbnNpWzE0XT10aGlzLl9wYXJzZUNvbG9yKGUuYnJpZ2h0Q3lhbix0LkRFRkFVTFRfQU5TSV9DT0xPUlNbMTRdKSx0aGlzLmNvbG9ycy5hbnNpWzE1XT10aGlzLl9wYXJzZUNvbG9yKGUuYnJpZ2h0V2hpdGUsdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzE1XSksdGhpcy5fY29udHJhc3RDYWNoZS5jbGVhcigpfSxlLnByb3RvdHlwZS5fcGFyc2VDb2xvcj1mdW5jdGlvbihlLHQscil7aWYodm9pZCAwPT09ciYmKHI9dGhpcy5hbGxvd1RyYW5zcGFyZW5jeSksdm9pZCAwPT09ZSlyZXR1cm4gdDtpZih0aGlzLl9jdHguZmlsbFN0eWxlPXRoaXMuX2xpdG11c0NvbG9yLHRoaXMuX2N0eC5maWxsU3R5bGU9ZSxcInN0cmluZ1wiIT10eXBlb2YgdGhpcy5fY3R4LmZpbGxTdHlsZSlyZXR1cm4gY29uc29sZS53YXJuKFwiQ29sb3I6IFwiK2UrXCIgaXMgaW52YWxpZCB1c2luZyBmYWxsYmFjayBcIit0LmNzcyksdDt0aGlzLl9jdHguZmlsbFJlY3QoMCwwLDEsMSk7dmFyIG49dGhpcy5fY3R4LmdldEltYWdlRGF0YSgwLDAsMSwxKS5kYXRhO2lmKDI1NSE9PW5bM10pe2lmKCFyKXJldHVybiBjb25zb2xlLndhcm4oXCJDb2xvcjogXCIrZStcIiBpcyB1c2luZyB0cmFuc3BhcmVuY3ksIGJ1dCBhbGxvd1RyYW5zcGFyZW5jeSBpcyBmYWxzZS4gVXNpbmcgZmFsbGJhY2sgXCIrdC5jc3MrXCIuXCIpLHQ7dmFyIG89dGhpcy5fY3R4LmZpbGxTdHlsZS5zdWJzdHJpbmcoNSx0aGlzLl9jdHguZmlsbFN0eWxlLmxlbmd0aC0xKS5zcGxpdChcIixcIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUpfSkpLHM9b1swXSxhPW9bMV0sYz1vWzJdLGw9b1szXSxoPU1hdGgucm91bmQoMjU1KmwpO3JldHVybntyZ2JhOmkuY2hhbm5lbHMudG9SZ2JhKHMsYSxjLGgpLGNzczplfX1yZXR1cm57Y3NzOnRoaXMuX2N0eC5maWxsU3R5bGUscmdiYTppLmNoYW5uZWxzLnRvUmdiYShuWzBdLG5bMV0sblsyXSxuWzNdKX19LGV9KCk7dC5Db2xvck1hbmFnZXI9aH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudGhyb3dJZkZhbHN5PXZvaWQgMCx0LnRocm93SWZGYWxzeT1mdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBtdXN0IG5vdCBiZSBmYWxzeVwiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaSxuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoaT1mdW5jdGlvbihlLHQpe3JldHVybihpPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1pKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGFyYWN0ZXJKb2luZXJSZWdpc3RyeT10LkpvaW5lZENlbGxEYXRhPXZvaWQgMDt2YXIgbz1yKDYpLHM9cigzKSxhPXIoNCksYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscixpKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uY29udGVudD0wLG4uY29tYmluZWREYXRhPVwiXCIsbi5mZz10LmZnLG4uYmc9dC5iZyxuLmNvbWJpbmVkRGF0YT1yLG4uX3dpZHRoPWksbn1yZXR1cm4gbih0LGUpLHQucHJvdG90eXBlLmlzQ29tYmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gMjA5NzE1Mn0sdC5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LHQucHJvdG90eXBlLmdldENoYXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tYmluZWREYXRhfSx0LnByb3RvdHlwZS5nZXRDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIDIwOTcxNTF9LHQucHJvdG90eXBlLnNldEZyb21DaGFyRGF0YT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIil9LHQucHJvdG90eXBlLmdldEFzQ2hhckRhdGE9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5mZyx0aGlzLmdldENoYXJzKCksdGhpcy5nZXRXaWR0aCgpLHRoaXMuZ2V0Q29kZSgpXX0sdH0oby5BdHRyaWJ1dGVEYXRhKTt0LkpvaW5lZENlbGxEYXRhPWM7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2J1ZmZlclNlcnZpY2U9ZSx0aGlzLl9jaGFyYWN0ZXJKb2luZXJzPVtdLHRoaXMuX25leHRDaGFyYWN0ZXJKb2luZXJJZD0wLHRoaXMuX3dvcmtDZWxsPW5ldyBhLkNlbGxEYXRhfXJldHVybiBlLnByb3RvdHlwZS5yZWdpc3RlckNoYXJhY3RlckpvaW5lcj1mdW5jdGlvbihlKXt2YXIgdD17aWQ6dGhpcy5fbmV4dENoYXJhY3RlckpvaW5lcklkKyssaGFuZGxlcjplfTtyZXR1cm4gdGhpcy5fY2hhcmFjdGVySm9pbmVycy5wdXNoKHQpLHQuaWR9LGUucHJvdG90eXBlLmRlcmVnaXN0ZXJDaGFyYWN0ZXJKb2luZXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLl9jaGFyYWN0ZXJKb2luZXJzLmxlbmd0aDt0KyspaWYodGhpcy5fY2hhcmFjdGVySm9pbmVyc1t0XS5pZD09PWUpcmV0dXJuIHRoaXMuX2NoYXJhY3RlckpvaW5lcnMuc3BsaWNlKHQsMSksITA7cmV0dXJuITF9LGUucHJvdG90eXBlLmdldEpvaW5lZENoYXJhY3RlcnM9ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMuX2NoYXJhY3RlckpvaW5lcnMubGVuZ3RoKXJldHVybltdO3ZhciB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmdldChlKTtpZighdHx8MD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPXQudHJhbnNsYXRlVG9TdHJpbmcoITApLG49MCxvPTAsYT0wLGM9dC5nZXRGZygwKSxsPXQuZ2V0QmcoMCksaD0wO2g8dC5nZXRUcmltbWVkTGVuZ3RoKCk7aCsrKWlmKHQubG9hZENlbGwoaCx0aGlzLl93b3JrQ2VsbCksMCE9PXRoaXMuX3dvcmtDZWxsLmdldFdpZHRoKCkpe2lmKHRoaXMuX3dvcmtDZWxsLmZnIT09Y3x8dGhpcy5fd29ya0NlbGwuYmchPT1sKXtpZihoLW4+MSlmb3IodmFyIHU9dGhpcy5fZ2V0Sm9pbmVkUmFuZ2VzKGksYSxvLHQsbiksZj0wO2Y8dS5sZW5ndGg7ZisrKXIucHVzaCh1W2ZdKTtuPWgsYT1vLGM9dGhpcy5fd29ya0NlbGwuZmcsbD10aGlzLl93b3JrQ2VsbC5iZ31vKz10aGlzLl93b3JrQ2VsbC5nZXRDaGFycygpLmxlbmd0aHx8cy5XSElURVNQQUNFX0NFTExfQ0hBUi5sZW5ndGh9aWYodGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLW4+MSlmb3IodT10aGlzLl9nZXRKb2luZWRSYW5nZXMoaSxhLG8sdCxuKSxmPTA7Zjx1Lmxlbmd0aDtmKyspci5wdXNoKHVbZl0pO3JldHVybiByfSxlLnByb3RvdHlwZS5fZ2V0Sm9pbmVkUmFuZ2VzPWZ1bmN0aW9uKHQscixpLG4sbyl7Zm9yKHZhciBzPXQuc3Vic3RyaW5nKHIsaSksYT10aGlzLl9jaGFyYWN0ZXJKb2luZXJzWzBdLmhhbmRsZXIocyksYz0xO2M8dGhpcy5fY2hhcmFjdGVySm9pbmVycy5sZW5ndGg7YysrKWZvcih2YXIgbD10aGlzLl9jaGFyYWN0ZXJKb2luZXJzW2NdLmhhbmRsZXIocyksaD0wO2g8bC5sZW5ndGg7aCsrKWUuX21lcmdlUmFuZ2VzKGEsbFtoXSk7cmV0dXJuIHRoaXMuX3N0cmluZ1Jhbmdlc1RvQ2VsbFJhbmdlcyhhLG4sbyksYX0sZS5wcm90b3R5cGUuX3N0cmluZ1Jhbmdlc1RvQ2VsbFJhbmdlcz1mdW5jdGlvbihlLHQscil7dmFyIGk9MCxuPSExLG89MCxhPWVbaV07aWYoYSl7Zm9yKHZhciBjPXI7Yzx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHM7YysrKXt2YXIgbD10LmdldFdpZHRoKGMpLGg9dC5nZXRTdHJpbmcoYykubGVuZ3RofHxzLldISVRFU1BBQ0VfQ0VMTF9DSEFSLmxlbmd0aDtpZigwIT09bCl7aWYoIW4mJmFbMF08PW8mJihhWzBdPWMsbj0hMCksYVsxXTw9byl7aWYoYVsxXT1jLCEoYT1lWysraV0pKWJyZWFrO2FbMF08PW8/KGFbMF09YyxuPSEwKTpuPSExfW8rPWh9fWEmJihhWzFdPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyl9fSxlLl9tZXJnZVJhbmdlcz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0hMSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBuPWVbaV07aWYocil7aWYodFsxXTw9blswXSlyZXR1cm4gZVtpLTFdWzFdPXRbMV0sZTtpZih0WzFdPD1uWzFdKXJldHVybiBlW2ktMV1bMV09TWF0aC5tYXgodFsxXSxuWzFdKSxlLnNwbGljZShpLDEpLGU7ZS5zcGxpY2UoaSwxKSxpLS19ZWxzZXtpZih0WzFdPD1uWzBdKXJldHVybiBlLnNwbGljZShpLDAsdCksZTtpZih0WzFdPD1uWzFdKXJldHVybiBuWzBdPU1hdGgubWluKHRbMF0sblswXSksZTt0WzBdPG5bMV0mJihuWzBdPU1hdGgubWluKHRbMF0sblswXSkscj0hMCl9fXJldHVybiByP2VbZS5sZW5ndGgtMV1bMV09dFsxXTplLnB1c2godCksZX0sZX0oKTt0LkNoYXJhY3RlckpvaW5lclJlZ2lzdHJ5PWx9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKGUsdCl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS5jbGllbnRYLXIubGVmdCxlLmNsaWVudFktci50b3BdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0UmF3Qnl0ZUNvb3Jkcz10LmdldENvb3Jkcz10LmdldENvb3Jkc1JlbGF0aXZlVG9FbGVtZW50PXZvaWQgMCx0LmdldENvb3Jkc1JlbGF0aXZlVG9FbGVtZW50PWksdC5nZXRDb29yZHM9ZnVuY3Rpb24oZSx0LHIsbixvLHMsYSxjKXtpZihvKXt2YXIgbD1pKGUsdCk7aWYobClyZXR1cm4gbFswXT1NYXRoLmNlaWwoKGxbMF0rKGM/cy8yOjApKS9zKSxsWzFdPU1hdGguY2VpbChsWzFdL2EpLGxbMF09TWF0aC5taW4oTWF0aC5tYXgobFswXSwxKSxyKyhjPzE6MCkpLGxbMV09TWF0aC5taW4oTWF0aC5tYXgobFsxXSwxKSxuKSxsfX0sdC5nZXRSYXdCeXRlQ29vcmRzPWZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJue3g6ZVswXSszMix5OmVbMV0rMzJ9fX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmVuZGVyRGVib3VuY2VyPXZvaWQgMDt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fcmVuZGVyQ2FsbGJhY2s9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2FuaW1hdGlvbkZyYW1lJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbkZyYW1lKSx0aGlzLl9hbmltYXRpb25GcmFtZT12b2lkIDApfSxlLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10aGlzO3RoaXMuX3Jvd0NvdW50PXIsZT12b2lkIDAhPT1lP2U6MCx0PXZvaWQgMCE9PXQ/dDp0aGlzLl9yb3dDb3VudC0xLHRoaXMuX3Jvd1N0YXJ0PXZvaWQgMCE9PXRoaXMuX3Jvd1N0YXJ0P01hdGgubWluKHRoaXMuX3Jvd1N0YXJ0LGUpOmUsdGhpcy5fcm93RW5kPXZvaWQgMCE9PXRoaXMuX3Jvd0VuZD9NYXRoLm1heCh0aGlzLl9yb3dFbmQsdCk6dCx0aGlzLl9hbmltYXRpb25GcmFtZXx8KHRoaXMuX2FuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2lubmVyUmVmcmVzaCgpfSkpKX0sZS5wcm90b3R5cGUuX2lubmVyUmVmcmVzaD1mdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMuX3Jvd1N0YXJ0JiZ2b2lkIDAhPT10aGlzLl9yb3dFbmQmJnZvaWQgMCE9PXRoaXMuX3Jvd0NvdW50KXt2YXIgZT1NYXRoLm1heCh0aGlzLl9yb3dTdGFydCwwKSx0PU1hdGgubWluKHRoaXMuX3Jvd0VuZCx0aGlzLl9yb3dDb3VudC0xKTt0aGlzLl9yb3dTdGFydD12b2lkIDAsdGhpcy5fcm93RW5kPXZvaWQgMCx0aGlzLl9hbmltYXRpb25GcmFtZT12b2lkIDAsdGhpcy5fcmVuZGVyQ2FsbGJhY2soZSx0KX19LGV9KCk7dC5SZW5kZXJEZWJvdW5jZXI9aX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBpLG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWkoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNjcmVlbkRwck1vbml0b3I9dm9pZCAwO3ZhciBvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuX2N1cnJlbnREZXZpY2VQaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHR9cmV0dXJuIG4odCxlKSx0LnByb3RvdHlwZS5zZXRMaXN0ZW5lcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuX2xpc3RlbmVyJiZ0aGlzLmNsZWFyTGlzdGVuZXIoKSx0aGlzLl9saXN0ZW5lcj1lLHRoaXMuX291dGVyTGlzdGVuZXI9ZnVuY3Rpb24oKXt0Ll9saXN0ZW5lciYmKHQuX2xpc3RlbmVyKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHQuX2N1cnJlbnREZXZpY2VQaXhlbFJhdGlvKSx0Ll91cGRhdGVEcHIoKSl9LHRoaXMuX3VwZGF0ZURwcigpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpLHRoaXMuY2xlYXJMaXN0ZW5lcigpfSx0LnByb3RvdHlwZS5fdXBkYXRlRHByPWZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5fb3V0ZXJMaXN0ZW5lciYmKG51bGw9PT0oZT10aGlzLl9yZXNvbHV0aW9uTWVkaWFNYXRjaExpc3QpfHx2b2lkIDA9PT1lfHxlLnJlbW92ZUxpc3RlbmVyKHRoaXMuX291dGVyTGlzdGVuZXIpLHRoaXMuX2N1cnJlbnREZXZpY2VQaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuX3Jlc29sdXRpb25NZWRpYU1hdGNoTGlzdD13aW5kb3cubWF0Y2hNZWRpYShcInNjcmVlbiBhbmQgKHJlc29sdXRpb246IFwiK3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvK1wiZHBweClcIiksdGhpcy5fcmVzb2x1dGlvbk1lZGlhTWF0Y2hMaXN0LmFkZExpc3RlbmVyKHRoaXMuX291dGVyTGlzdGVuZXIpKX0sdC5wcm90b3R5cGUuY2xlYXJMaXN0ZW5lcj1mdW5jdGlvbigpe3RoaXMuX3Jlc29sdXRpb25NZWRpYU1hdGNoTGlzdCYmdGhpcy5fbGlzdGVuZXImJnRoaXMuX291dGVyTGlzdGVuZXImJih0aGlzLl9yZXNvbHV0aW9uTWVkaWFNYXRjaExpc3QucmVtb3ZlTGlzdGVuZXIodGhpcy5fb3V0ZXJMaXN0ZW5lciksdGhpcy5fcmVzb2x1dGlvbk1lZGlhTWF0Y2hMaXN0PXZvaWQgMCx0aGlzLl9saXN0ZW5lcj12b2lkIDAsdGhpcy5fb3V0ZXJMaXN0ZW5lcj12b2lkIDApfSx0fShyKDIpLkRpc3Bvc2FibGUpO3QuU2NyZWVuRHByTW9uaXRvcj1vfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5jbG9uZT12b2lkIDAsdC5jbG9uZT1mdW5jdGlvbiBlKHQscil7aWYodm9pZCAwPT09ciYmKHI9NSksXCJvYmplY3RcIiE9dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGk9QXJyYXkuaXNBcnJheSh0KT9bXTp7fTtmb3IodmFyIG4gaW4gdClpW25dPXI8PTE/dFtuXTp0W25dP2UodFtuXSxyLTEpOnRbbl07cmV0dXJuIGl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXJtaW5hbD12b2lkIDA7dmFyIGk9cig0KSxuPXIoMzUpLG89cigxOCkscz1yKDApLGE9cig4MyksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fY29yZT1uZXcgbi5UZXJtaW5hbChlKSx0aGlzLl9hZGRvbk1hbmFnZXI9bmV3IGEuQWRkb25NYW5hZ2VyfXJldHVybiBlLnByb3RvdHlwZS5fY2hlY2tQcm9wb3NlZEFwaT1mdW5jdGlvbigpe2lmKCF0aGlzLl9jb3JlLm9wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuYWxsb3dQcm9wb3NlZEFwaSl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgbXVzdCBzZXQgdGhlIGFsbG93UHJvcG9zZWRBcGkgb3B0aW9uIHRvIHRydWUgdG8gdXNlIHByb3Bvc2VkIEFQSVwiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25DdXJzb3JNb3ZlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3JlLm9uQ3Vyc29yTW92ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJvbkxpbmVGZWVkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3JlLm9uTGluZUZlZWR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25TZWxlY3Rpb25DaGFuZ2VcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvcmUub25TZWxlY3Rpb25DaGFuZ2V9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25EYXRhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3JlLm9uRGF0YX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJvbkJpbmFyeVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29yZS5vbkJpbmFyeX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJvblRpdGxlQ2hhbmdlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3JlLm9uVGl0bGVDaGFuZ2V9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25TY3JvbGxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvcmUub25TY3JvbGx9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25LZXlcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvcmUub25LZXl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25SZW5kZXJcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvcmUub25SZW5kZXJ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25SZXNpemVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvcmUub25SZXNpemV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiZWxlbWVudFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29yZS5lbGVtZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcInBhcnNlclwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tQcm9wb3NlZEFwaSgpLHRoaXMuX3BhcnNlcnx8KHRoaXMuX3BhcnNlcj1uZXcgZih0aGlzLl9jb3JlKSksdGhpcy5fcGFyc2VyfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcInVuaWNvZGVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrUHJvcG9zZWRBcGkoKSxuZXcgXyh0aGlzLl9jb3JlKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJ0ZXh0YXJlYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29yZS50ZXh0YXJlYX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJyb3dzXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3JlLnJvd3N9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiY29sc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29yZS5jb2xzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImJ1ZmZlclwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tQcm9wb3NlZEFwaSgpLG5ldyBoKHRoaXMuX2NvcmUuYnVmZmVycyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwibWFya2Vyc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tQcm9wb3NlZEFwaSgpLHRoaXMuX2NvcmUubWFya2Vyc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5ibHVyPWZ1bmN0aW9uKCl7dGhpcy5fY29yZS5ibHVyKCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fY29yZS5mb2N1cygpfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSx0KXt0aGlzLl92ZXJpZnlJbnRlZ2VycyhlLHQpLHRoaXMuX2NvcmUucmVzaXplKGUsdCl9LGUucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oZSl7dGhpcy5fY29yZS5vcGVuKGUpfSxlLnByb3RvdHlwZS5hdHRhY2hDdXN0b21LZXlFdmVudEhhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5fY29yZS5hdHRhY2hDdXN0b21LZXlFdmVudEhhbmRsZXIoZSl9LGUucHJvdG90eXBlLnJlZ2lzdGVyTGlua01hdGNoZXI9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLl9jaGVja1Byb3Bvc2VkQXBpKCksdGhpcy5fY29yZS5yZWdpc3RlckxpbmtNYXRjaGVyKGUsdCxyKX0sZS5wcm90b3R5cGUuZGVyZWdpc3RlckxpbmtNYXRjaGVyPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrUHJvcG9zZWRBcGkoKSx0aGlzLl9jb3JlLmRlcmVnaXN0ZXJMaW5rTWF0Y2hlcihlKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJMaW5rUHJvdmlkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NoZWNrUHJvcG9zZWRBcGkoKSx0aGlzLl9jb3JlLnJlZ2lzdGVyTGlua1Byb3ZpZGVyKGUpfSxlLnByb3RvdHlwZS5yZWdpc3RlckNoYXJhY3RlckpvaW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2hlY2tQcm9wb3NlZEFwaSgpLHRoaXMuX2NvcmUucmVnaXN0ZXJDaGFyYWN0ZXJKb2luZXIoZSl9LGUucHJvdG90eXBlLmRlcmVnaXN0ZXJDaGFyYWN0ZXJKb2luZXI9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tQcm9wb3NlZEFwaSgpLHRoaXMuX2NvcmUuZGVyZWdpc3RlckNoYXJhY3RlckpvaW5lcihlKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJNYXJrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NoZWNrUHJvcG9zZWRBcGkoKSx0aGlzLl92ZXJpZnlJbnRlZ2VycyhlKSx0aGlzLl9jb3JlLmFkZE1hcmtlcihlKX0sZS5wcm90b3R5cGUuYWRkTWFya2VyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlZ2lzdGVyTWFya2VyKGUpfSxlLnByb3RvdHlwZS5oYXNTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29yZS5oYXNTZWxlY3Rpb24oKX0sZS5wcm90b3R5cGUuc2VsZWN0PWZ1bmN0aW9uKGUsdCxyKXt0aGlzLl92ZXJpZnlJbnRlZ2VycyhlLHQsciksdGhpcy5fY29yZS5zZWxlY3QoZSx0LHIpfSxlLnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29yZS5nZXRTZWxlY3Rpb24oKX0sZS5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29yZS5nZXRTZWxlY3Rpb25Qb3NpdGlvbigpfSxlLnByb3RvdHlwZS5jbGVhclNlbGVjdGlvbj1mdW5jdGlvbigpe3RoaXMuX2NvcmUuY2xlYXJTZWxlY3Rpb24oKX0sZS5wcm90b3R5cGUuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fY29yZS5zZWxlY3RBbGwoKX0sZS5wcm90b3R5cGUuc2VsZWN0TGluZXM9ZnVuY3Rpb24oZSx0KXt0aGlzLl92ZXJpZnlJbnRlZ2VycyhlLHQpLHRoaXMuX2NvcmUuc2VsZWN0TGluZXMoZSx0KX0sZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2FkZG9uTWFuYWdlci5kaXNwb3NlKCksdGhpcy5fY29yZS5kaXNwb3NlKCl9LGUucHJvdG90eXBlLnNjcm9sbExpbmVzPWZ1bmN0aW9uKGUpe3RoaXMuX3ZlcmlmeUludGVnZXJzKGUpLHRoaXMuX2NvcmUuc2Nyb2xsTGluZXMoZSl9LGUucHJvdG90eXBlLnNjcm9sbFBhZ2VzPWZ1bmN0aW9uKGUpe3RoaXMuX3ZlcmlmeUludGVnZXJzKGUpLHRoaXMuX2NvcmUuc2Nyb2xsUGFnZXMoZSl9LGUucHJvdG90eXBlLnNjcm9sbFRvVG9wPWZ1bmN0aW9uKCl7dGhpcy5fY29yZS5zY3JvbGxUb1RvcCgpfSxlLnByb3RvdHlwZS5zY3JvbGxUb0JvdHRvbT1mdW5jdGlvbigpe3RoaXMuX2NvcmUuc2Nyb2xsVG9Cb3R0b20oKX0sZS5wcm90b3R5cGUuc2Nyb2xsVG9MaW5lPWZ1bmN0aW9uKGUpe3RoaXMuX3ZlcmlmeUludGVnZXJzKGUpLHRoaXMuX2NvcmUuc2Nyb2xsVG9MaW5lKGUpfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2NvcmUuY2xlYXIoKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb3JlLndyaXRlKGUsdCl9LGUucHJvdG90eXBlLndyaXRlVXRmOD1mdW5jdGlvbihlLHQpe3RoaXMuX2NvcmUud3JpdGUoZSx0KX0sZS5wcm90b3R5cGUud3JpdGVsbj1mdW5jdGlvbihlLHQpe3RoaXMuX2NvcmUud3JpdGUoZSksdGhpcy5fY29yZS53cml0ZShcIlxcclxcblwiLHQpfSxlLnByb3RvdHlwZS5wYXN0ZT1mdW5jdGlvbihlKXt0aGlzLl9jb3JlLnBhc3RlKGUpfSxlLnByb3RvdHlwZS5nZXRPcHRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NvcmUub3B0aW9uc1NlcnZpY2UuZ2V0T3B0aW9uKGUpfSxlLnByb3RvdHlwZS5zZXRPcHRpb249ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb3JlLm9wdGlvbnNTZXJ2aWNlLnNldE9wdGlvbihlLHQpfSxlLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5fdmVyaWZ5SW50ZWdlcnMoZSx0KSx0aGlzLl9jb3JlLnJlZnJlc2goZSx0KX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb3JlLnJlc2V0KCl9LGUucHJvdG90eXBlLmxvYWRBZGRvbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYWRkb25NYW5hZ2VyLmxvYWRBZGRvbih0aGlzLGUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInN0cmluZ3NcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3ZlcmlmeUludGVnZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgcj0wLGk9ZTtyPGkubGVuZ3RoO3IrKyl7dmFyIG49aVtyXTtpZihuPT09MS8wfHxpc05hTihuKXx8biUxIT0wKXRocm93IG5ldyBFcnJvcihcIlRoaXMgQVBJIG9ubHkgYWNjZXB0cyBpbnRlZ2Vyc1wiKX19LGV9KCk7dC5UZXJtaW5hbD1jO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2J1ZmZlcj1lLHRoaXMudHlwZT10fXJldHVybiBlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9idWZmZXI9ZSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJjdXJzb3JZXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWZmZXIueX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJjdXJzb3JYXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWZmZXIueH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJ2aWV3cG9ydFlcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1ZmZlci55ZGlzcH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJiYXNlWVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyLnliYXNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImxlbmd0aFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyLmxpbmVzLmxlbmd0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRMaW5lPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2J1ZmZlci5saW5lcy5nZXQoZSk7aWYodClyZXR1cm4gbmV3IHUodCl9LGUucHJvdG90eXBlLmdldE51bGxDZWxsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpLkNlbGxEYXRhfSxlfSgpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXM7dGhpcy5fYnVmZmVycz1lLHRoaXMuX29uQnVmZmVyQ2hhbmdlPW5ldyBzLkV2ZW50RW1pdHRlcix0aGlzLl9ub3JtYWw9bmV3IGwodGhpcy5fYnVmZmVycy5ub3JtYWwsXCJub3JtYWxcIiksdGhpcy5fYWx0ZXJuYXRlPW5ldyBsKHRoaXMuX2J1ZmZlcnMuYWx0LFwiYWx0ZXJuYXRlXCIpLHRoaXMuX2J1ZmZlcnMub25CdWZmZXJBY3RpdmF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25CdWZmZXJDaGFuZ2UuZmlyZSh0LmFjdGl2ZSl9KSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcIm9uQnVmZmVyQ2hhbmdlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJ1ZmZlckNoYW5nZS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJhY3RpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fYnVmZmVycy5hY3RpdmU9PT10aGlzLl9idWZmZXJzLm5vcm1hbClyZXR1cm4gdGhpcy5ub3JtYWw7aWYodGhpcy5fYnVmZmVycy5hY3RpdmU9PT10aGlzLl9idWZmZXJzLmFsdClyZXR1cm4gdGhpcy5hbHRlcm5hdGU7dGhyb3cgbmV3IEVycm9yKFwiQWN0aXZlIGJ1ZmZlciBpcyBuZWl0aGVyIG5vcm1hbCBub3IgYWx0ZXJuYXRlXCIpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcIm5vcm1hbFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ybWFsLmluaXQodGhpcy5fYnVmZmVycy5ub3JtYWwpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImFsdGVybmF0ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWx0ZXJuYXRlLmluaXQodGhpcy5fYnVmZmVycy5hbHQpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KCksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fbGluZT1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJpc1dyYXBwZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xpbmUuaXNXcmFwcGVkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImxlbmd0aFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGluZS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0Q2VsbD1mdW5jdGlvbihlLHQpe2lmKCEoZTwwfHxlPj10aGlzLl9saW5lLmxlbmd0aCkpcmV0dXJuIHQ/KHRoaXMuX2xpbmUubG9hZENlbGwoZSx0KSx0KTp0aGlzLl9saW5lLmxvYWRDZWxsKGUsbmV3IGkuQ2VsbERhdGEpfSxlLnByb3RvdHlwZS50cmFuc2xhdGVUb1N0cmluZz1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2xpbmUudHJhbnNsYXRlVG9TdHJpbmcoZSx0LHIpfSxlfSgpLGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2NvcmU9ZX1yZXR1cm4gZS5wcm90b3R5cGUucmVnaXN0ZXJDc2lIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NvcmUuYWRkQ3NpSGFuZGxlcihlLChmdW5jdGlvbihlKXtyZXR1cm4gdChlLnRvQXJyYXkoKSl9KSl9LGUucHJvdG90eXBlLmFkZENzaUhhbmRsZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5yZWdpc3RlckNzaUhhbmRsZXIoZSx0KX0sZS5wcm90b3R5cGUucmVnaXN0ZXJEY3NIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NvcmUuYWRkRGNzSGFuZGxlcihlLChmdW5jdGlvbihlLHIpe3JldHVybiB0KGUsci50b0FycmF5KCkpfSkpfSxlLnByb3RvdHlwZS5hZGREY3NIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJEY3NIYW5kbGVyKGUsdCl9LGUucHJvdG90eXBlLnJlZ2lzdGVyRXNjSGFuZGxlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9jb3JlLmFkZEVzY0hhbmRsZXIoZSx0KX0sZS5wcm90b3R5cGUuYWRkRXNjSGFuZGxlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnJlZ2lzdGVyRXNjSGFuZGxlcihlLHQpfSxlLnByb3RvdHlwZS5yZWdpc3Rlck9zY0hhbmRsZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fY29yZS5hZGRPc2NIYW5kbGVyKGUsdCl9LGUucHJvdG90eXBlLmFkZE9zY0hhbmRsZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5yZWdpc3Rlck9zY0hhbmRsZXIoZSx0KX0sZX0oKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9jb3JlPWV9cmV0dXJuIGUucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3RoaXMuX2NvcmUudW5pY29kZVNlcnZpY2UucmVnaXN0ZXIoZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcInZlcnNpb25zXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3JlLnVuaWNvZGVTZXJ2aWNlLnZlcnNpb25zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImFjdGl2ZVZlcnNpb25cIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvcmUudW5pY29kZVNlcnZpY2UuYWN0aXZlVmVyc2lvbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2NvcmUudW5pY29kZVNlcnZpY2UuYWN0aXZlVmVyc2lvbj1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KCl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaSxuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoaT1mdW5jdGlvbihlLHQpe3JldHVybihpPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1pKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXJtaW5hbD12b2lkIDA7dmFyIG89cigzNikscz1yKDM3KSxhPXIoMzgpLGM9cigxMiksbD1yKDE5KSxoPXIoNDApLHU9cig1MCksZj1yKDUxKSxfPXIoMTEpLGQ9cig3KSxwPXIoMTgpLHY9cig1NCksZz1yKDU1KSx5PXIoNTYpLGI9cig1NyksUz1yKDU5KSxtPXIoMCksQz1yKDE2KSx3PXIoMjcpLEU9cig2MCksTD1yKDUpLEE9cig2MSksUj1yKDYyKSxrPXIoNjMpLHg9cig2NCksRD1yKDY1KSxUPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93LmRvY3VtZW50Om51bGwsTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgcj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gci5icm93c2VyPV8sci5fa2V5RG93bkhhbmRsZWQ9ITEsci5fb25DdXJzb3JNb3ZlPW5ldyBtLkV2ZW50RW1pdHRlcixyLl9vbktleT1uZXcgbS5FdmVudEVtaXR0ZXIsci5fb25SZW5kZXI9bmV3IG0uRXZlbnRFbWl0dGVyLHIuX29uU2VsZWN0aW9uQ2hhbmdlPW5ldyBtLkV2ZW50RW1pdHRlcixyLl9vblRpdGxlQ2hhbmdlPW5ldyBtLkV2ZW50RW1pdHRlcixyLl9vbkZvY3VzPW5ldyBtLkV2ZW50RW1pdHRlcixyLl9vbkJsdXI9bmV3IG0uRXZlbnRFbWl0dGVyLHIuX29uQTExeUNoYXJFbWl0dGVyPW5ldyBtLkV2ZW50RW1pdHRlcixyLl9vbkExMXlUYWJFbWl0dGVyPW5ldyBtLkV2ZW50RW1pdHRlcixyLl9zZXR1cCgpLHIubGlua2lmaWVyPXIuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKHUuTGlua2lmaWVyKSxyLmxpbmtpZmllcjI9ci5yZWdpc3RlcihyLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZShrLkxpbmtpZmllcjIpKSxyLnJlZ2lzdGVyKHIuX2lucHV0SGFuZGxlci5vblJlcXVlc3RCZWxsKChmdW5jdGlvbigpe3JldHVybiByLmJlbGwoKX0pKSksci5yZWdpc3RlcihyLl9pbnB1dEhhbmRsZXIub25SZXF1ZXN0UmVmcmVzaFJvd3MoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIucmVmcmVzaChlLHQpfSkpKSxyLnJlZ2lzdGVyKHIuX2lucHV0SGFuZGxlci5vblJlcXVlc3RSZXNldCgoZnVuY3Rpb24oKXtyZXR1cm4gci5yZXNldCgpfSkpKSxyLnJlZ2lzdGVyKHIuX2lucHV0SGFuZGxlci5vblJlcXVlc3RTY3JvbGwoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuc2Nyb2xsKGUsdHx8dm9pZCAwKX0pKSksci5yZWdpc3RlcihyLl9pbnB1dEhhbmRsZXIub25SZXF1ZXN0V2luZG93c09wdGlvbnNSZXBvcnQoKGZ1bmN0aW9uKGUpe3JldHVybiByLl9yZXBvcnRXaW5kb3dzT3B0aW9ucyhlKX0pKSksci5yZWdpc3RlcihtLmZvcndhcmRFdmVudChyLl9pbnB1dEhhbmRsZXIub25DdXJzb3JNb3ZlLHIuX29uQ3Vyc29yTW92ZSkpLHIucmVnaXN0ZXIobS5mb3J3YXJkRXZlbnQoci5faW5wdXRIYW5kbGVyLm9uVGl0bGVDaGFuZ2Usci5fb25UaXRsZUNoYW5nZSkpLHIucmVnaXN0ZXIobS5mb3J3YXJkRXZlbnQoci5faW5wdXRIYW5kbGVyLm9uQTExeUNoYXIsci5fb25BMTF5Q2hhckVtaXR0ZXIpKSxyLnJlZ2lzdGVyKG0uZm9yd2FyZEV2ZW50KHIuX2lucHV0SGFuZGxlci5vbkExMXlUYWIsci5fb25BMTF5VGFiRW1pdHRlcikpLHIucmVnaXN0ZXIoci5fYnVmZmVyU2VydmljZS5vblJlc2l6ZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHIuX2FmdGVyUmVzaXplKGUuY29scyxlLnJvd3MpfSkpKSxyfXJldHVybiBuKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib3B0aW9uc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zU2VydmljZS5vcHRpb25zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uQ3Vyc29yTW92ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25DdXJzb3JNb3ZlLmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uS2V5XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbktleS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvblJlbmRlclwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25SZW5kZXIuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25TZWxlY3Rpb25DaGFuZ2VcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlLmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uVGl0bGVDaGFuZ2VcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVGl0bGVDaGFuZ2UuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25Gb2N1c1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25Gb2N1cy5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvbkJsdXJcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQmx1ci5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvbkExMXlDaGFyXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkExMXlDaGFyRW1pdHRlci5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvbkExMXlUYWJcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQTExeVRhYkVtaXR0ZXIuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0LHIsaTt0aGlzLl9pc0Rpc3Bvc2VkfHwoZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpLG51bGw9PT0odD10aGlzLl9yZW5kZXJTZXJ2aWNlKXx8dm9pZCAwPT09dHx8dC5kaXNwb3NlKCksdGhpcy5fY3VzdG9tS2V5RXZlbnRIYW5kbGVyPXZvaWQgMCx0aGlzLndyaXRlPWZ1bmN0aW9uKCl7fSxudWxsPT09KGk9bnVsbD09PShyPXRoaXMuZWxlbWVudCl8fHZvaWQgMD09PXI/dm9pZCAwOnIucGFyZW50Tm9kZSl8fHZvaWQgMD09PWl8fGkucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KSl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2N1c3RvbUtleUV2ZW50SGFuZGxlcj12b2lkIDB9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcImJ1ZmZlclwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idWZmZXJzLmFjdGl2ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMudGV4dGFyZWEmJnRoaXMudGV4dGFyZWEuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0sdC5wcm90b3R5cGUuX3VwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24odCl7dmFyIHIsaSxuLG87c3dpdGNoKGUucHJvdG90eXBlLl91cGRhdGVPcHRpb25zLmNhbGwodGhpcyx0KSx0KXtjYXNlXCJmb250RmFtaWx5XCI6Y2FzZVwiZm9udFNpemVcIjpudWxsPT09KHI9dGhpcy5fcmVuZGVyU2VydmljZSl8fHZvaWQgMD09PXJ8fHIuY2xlYXIoKSxudWxsPT09KGk9dGhpcy5fY2hhclNpemVTZXJ2aWNlKXx8dm9pZCAwPT09aXx8aS5tZWFzdXJlKCk7YnJlYWs7Y2FzZVwiY3Vyc29yQmxpbmtcIjpjYXNlXCJjdXJzb3JTdHlsZVwiOnRoaXMucmVmcmVzaCh0aGlzLmJ1ZmZlci55LHRoaXMuYnVmZmVyLnkpO2JyZWFrO2Nhc2VcImRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzXCI6Y2FzZVwibGV0dGVyU3BhY2luZ1wiOmNhc2VcImxpbmVIZWlnaHRcIjpjYXNlXCJmb250V2VpZ2h0XCI6Y2FzZVwiZm9udFdlaWdodEJvbGRcIjpjYXNlXCJtaW5pbXVtQ29udHJhc3RSYXRpb1wiOnRoaXMuX3JlbmRlclNlcnZpY2UmJih0aGlzLl9yZW5kZXJTZXJ2aWNlLmNsZWFyKCksdGhpcy5fcmVuZGVyU2VydmljZS5vblJlc2l6ZSh0aGlzLmNvbHMsdGhpcy5yb3dzKSx0aGlzLnJlZnJlc2goMCx0aGlzLnJvd3MtMSkpO2JyZWFrO2Nhc2VcInJlbmRlcmVyVHlwZVwiOnRoaXMuX3JlbmRlclNlcnZpY2UmJih0aGlzLl9yZW5kZXJTZXJ2aWNlLnNldFJlbmRlcmVyKHRoaXMuX2NyZWF0ZVJlbmRlcmVyKCkpLHRoaXMuX3JlbmRlclNlcnZpY2Uub25SZXNpemUodGhpcy5jb2xzLHRoaXMucm93cykpO2JyZWFrO2Nhc2VcInNjcm9sbGJhY2tcIjpudWxsPT09KG49dGhpcy52aWV3cG9ydCl8fHZvaWQgMD09PW58fG4uc3luY1Njcm9sbEFyZWEoKTticmVhaztjYXNlXCJzY3JlZW5SZWFkZXJNb2RlXCI6dGhpcy5vcHRpb25zU2VydmljZS5vcHRpb25zLnNjcmVlblJlYWRlck1vZGU/IXRoaXMuX2FjY2Vzc2liaWxpdHlNYW5hZ2VyJiZ0aGlzLl9yZW5kZXJTZXJ2aWNlJiYodGhpcy5fYWNjZXNzaWJpbGl0eU1hbmFnZXI9bmV3IHkuQWNjZXNzaWJpbGl0eU1hbmFnZXIodGhpcyx0aGlzLl9yZW5kZXJTZXJ2aWNlKSk6KG51bGw9PT0obz10aGlzLl9hY2Nlc3NpYmlsaXR5TWFuYWdlcil8fHZvaWQgMD09PW98fG8uZGlzcG9zZSgpLHRoaXMuX2FjY2Vzc2liaWxpdHlNYW5hZ2VyPXZvaWQgMCk7YnJlYWs7Y2FzZVwidGFiU3RvcFdpZHRoXCI6dGhpcy5idWZmZXJzLnNldHVwVGFiU3RvcHMoKTticmVhaztjYXNlXCJ0aGVtZVwiOnRoaXMuX3NldFRoZW1lKHRoaXMub3B0aW9uc1NlcnZpY2Uub3B0aW9ucy50aGVtZSl9fSx0LnByb3RvdHlwZS5fb25UZXh0QXJlYUZvY3VzPWZ1bmN0aW9uKGUpe3RoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5zZW5kRm9jdXMmJnRoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoYy5DMC5FU0MrXCJbSVwiKSx0aGlzLnVwZGF0ZUN1cnNvclN0eWxlKGUpLHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZm9jdXNcIiksdGhpcy5fc2hvd0N1cnNvcigpLHRoaXMuX29uRm9jdXMuZmlyZSgpfSx0LnByb3RvdHlwZS5ibHVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT10aGlzLnRleHRhcmVhKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5ibHVyKCl9LHQucHJvdG90eXBlLl9vblRleHRBcmVhQmx1cj1mdW5jdGlvbigpe3RoaXMudGV4dGFyZWEudmFsdWU9XCJcIix0aGlzLnJlZnJlc2godGhpcy5idWZmZXIueSx0aGlzLmJ1ZmZlci55KSx0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuc2VuZEZvY3VzJiZ0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KGMuQzAuRVNDK1wiW09cIiksdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJmb2N1c1wiKSx0aGlzLl9vbkJsdXIuZmlyZSgpfSx0LnByb3RvdHlwZS5fc3luY1RleHRBcmVhPWZ1bmN0aW9uKCl7aWYodGhpcy50ZXh0YXJlYSYmdGhpcy5idWZmZXIuaXNDdXJzb3JJblZpZXdwb3J0JiYhdGhpcy5fY29tcG9zaXRpb25IZWxwZXIuaXNDb21wb3Npbmcpe3ZhciBlPU1hdGguY2VpbCh0aGlzLl9jaGFyU2l6ZVNlcnZpY2UuaGVpZ2h0KnRoaXMub3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5saW5lSGVpZ2h0KSx0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnkqZSxyPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLngqdGhpcy5fY2hhclNpemVTZXJ2aWNlLndpZHRoO3RoaXMudGV4dGFyZWEuc3R5bGUubGVmdD1yK1wicHhcIix0aGlzLnRleHRhcmVhLnN0eWxlLnRvcD10K1wicHhcIix0aGlzLnRleHRhcmVhLnN0eWxlLndpZHRoPXRoaXMuX2NoYXJTaXplU2VydmljZS53aWR0aCtcInB4XCIsdGhpcy50ZXh0YXJlYS5zdHlsZS5oZWlnaHQ9ZStcInB4XCIsdGhpcy50ZXh0YXJlYS5zdHlsZS5saW5lSGVpZ2h0PWUrXCJweFwiLHRoaXMudGV4dGFyZWEuc3R5bGUuekluZGV4PVwiLTVcIn19LHQucHJvdG90eXBlLl9pbml0R2xvYmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9iaW5kS2V5cygpLHRoaXMucmVnaXN0ZXIoZC5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIodGhpcy5lbGVtZW50LFwiY29weVwiLChmdW5jdGlvbih0KXtlLmhhc1NlbGVjdGlvbigpJiZhLmNvcHlIYW5kbGVyKHQsZS5fc2VsZWN0aW9uU2VydmljZSl9KSkpO3ZhciB0PWZ1bmN0aW9uKHQpe3JldHVybiBhLmhhbmRsZVBhc3RlRXZlbnQodCxlLnRleHRhcmVhLGUuX2NvcmVTZXJ2aWNlKX07dGhpcy5yZWdpc3RlcihkLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcih0aGlzLnRleHRhcmVhLFwicGFzdGVcIix0KSksdGhpcy5yZWdpc3RlcihkLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcih0aGlzLmVsZW1lbnQsXCJwYXN0ZVwiLHQpKSxfLmlzRmlyZWZveD90aGlzLnJlZ2lzdGVyKGQuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKHRoaXMuZWxlbWVudCxcIm1vdXNlZG93blwiLChmdW5jdGlvbih0KXsyPT09dC5idXR0b24mJmEucmlnaHRDbGlja0hhbmRsZXIodCxlLnRleHRhcmVhLGUuc2NyZWVuRWxlbWVudCxlLl9zZWxlY3Rpb25TZXJ2aWNlLGUub3B0aW9ucy5yaWdodENsaWNrU2VsZWN0c1dvcmQpfSkpKTp0aGlzLnJlZ2lzdGVyKGQuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKHRoaXMuZWxlbWVudCxcImNvbnRleHRtZW51XCIsKGZ1bmN0aW9uKHQpe2EucmlnaHRDbGlja0hhbmRsZXIodCxlLnRleHRhcmVhLGUuc2NyZWVuRWxlbWVudCxlLl9zZWxlY3Rpb25TZXJ2aWNlLGUub3B0aW9ucy5yaWdodENsaWNrU2VsZWN0c1dvcmQpfSkpKSxfLmlzTGludXgmJnRoaXMucmVnaXN0ZXIoZC5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIodGhpcy5lbGVtZW50LFwiYXV4Y2xpY2tcIiwoZnVuY3Rpb24odCl7MT09PXQuYnV0dG9uJiZhLm1vdmVUZXh0QXJlYVVuZGVyTW91c2VDdXJzb3IodCxlLnRleHRhcmVhLGUuc2NyZWVuRWxlbWVudCl9KSkpfSx0LnByb3RvdHlwZS5fYmluZEtleXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMucmVnaXN0ZXIoZC5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIodGhpcy50ZXh0YXJlYSxcImtleXVwXCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9rZXlVcCh0KX0pLCEwKSksdGhpcy5yZWdpc3RlcihkLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcih0aGlzLnRleHRhcmVhLFwia2V5ZG93blwiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5fa2V5RG93bih0KX0pLCEwKSksdGhpcy5yZWdpc3RlcihkLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcih0aGlzLnRleHRhcmVhLFwia2V5cHJlc3NcIiwoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2tleVByZXNzKHQpfSksITApKSx0aGlzLnJlZ2lzdGVyKGQuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKHRoaXMudGV4dGFyZWEsXCJjb21wb3NpdGlvbnN0YXJ0XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2NvbXBvc2l0aW9uSGVscGVyLmNvbXBvc2l0aW9uc3RhcnQoKX0pKSksdGhpcy5yZWdpc3RlcihkLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcih0aGlzLnRleHRhcmVhLFwiY29tcG9zaXRpb251cGRhdGVcIiwoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NvbXBvc2l0aW9uSGVscGVyLmNvbXBvc2l0aW9udXBkYXRlKHQpfSkpKSx0aGlzLnJlZ2lzdGVyKGQuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKHRoaXMudGV4dGFyZWEsXCJjb21wb3NpdGlvbmVuZFwiLChmdW5jdGlvbigpe3JldHVybiBlLl9jb21wb3NpdGlvbkhlbHBlci5jb21wb3NpdGlvbmVuZCgpfSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMub25SZW5kZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2NvbXBvc2l0aW9uSGVscGVyLnVwZGF0ZUNvbXBvc2l0aW9uRWxlbWVudHMoKX0pKSksdGhpcy5yZWdpc3Rlcih0aGlzLm9uUmVuZGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fcXVldWVMaW5raWZpY2F0aW9uKHQuc3RhcnQsdC5lbmQpfSkpKX0sdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlRlcm1pbmFsIHJlcXVpcmVzIGEgcGFyZW50IGVsZW1lbnQuXCIpO1QuYm9keS5jb250YWlucyhlKXx8dGhpcy5fbG9nU2VydmljZS5kZWJ1ZyhcIlRlcm1pbmFsLm9wZW4gd2FzIGNhbGxlZCBvbiBhbiBlbGVtZW50IHRoYXQgd2FzIG5vdCBhdHRhY2hlZCB0byB0aGUgRE9NXCIpLHRoaXMuX2RvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLmVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLmVsZW1lbnQuZGlyPVwibHRyXCIsdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ0ZXJtaW5hbFwiKSx0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInh0ZXJtXCIpLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiMFwiKSxlLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7dmFyIHI9VC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7dGhpcy5fdmlld3BvcnRFbGVtZW50PVQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInh0ZXJtLXZpZXdwb3J0XCIpLHIuYXBwZW5kQ2hpbGQodGhpcy5fdmlld3BvcnRFbGVtZW50KSx0aGlzLl92aWV3cG9ydFNjcm9sbEFyZWE9VC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsQXJlYS5jbGFzc0xpc3QuYWRkKFwieHRlcm0tc2Nyb2xsLWFyZWFcIiksdGhpcy5fdmlld3BvcnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3ZpZXdwb3J0U2Nyb2xsQXJlYSksdGhpcy5zY3JlZW5FbGVtZW50PVQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLnNjcmVlbkVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInh0ZXJtLXNjcmVlblwiKSx0aGlzLl9oZWxwZXJDb250YWluZXI9VC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuX2hlbHBlckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwieHRlcm0taGVscGVyc1wiKSx0aGlzLnNjcmVlbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5faGVscGVyQ29udGFpbmVyKSxyLmFwcGVuZENoaWxkKHRoaXMuc2NyZWVuRWxlbWVudCksdGhpcy50ZXh0YXJlYT1ULmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKSx0aGlzLnRleHRhcmVhLmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1oZWxwZXItdGV4dGFyZWFcIiksdGhpcy50ZXh0YXJlYS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIscC5wcm9tcHRMYWJlbCksdGhpcy50ZXh0YXJlYS5zZXRBdHRyaWJ1dGUoXCJhcmlhLW11bHRpbGluZVwiLFwiZmFsc2VcIiksdGhpcy50ZXh0YXJlYS5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLFwib2ZmXCIpLHRoaXMudGV4dGFyZWEuc2V0QXR0cmlidXRlKFwiYXV0b2NhcGl0YWxpemVcIixcIm9mZlwiKSx0aGlzLnRleHRhcmVhLnNldEF0dHJpYnV0ZShcInNwZWxsY2hlY2tcIixcImZhbHNlXCIpLHRoaXMudGV4dGFyZWEudGFiSW5kZXg9MCx0aGlzLnJlZ2lzdGVyKGQuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKHRoaXMudGV4dGFyZWEsXCJmb2N1c1wiLChmdW5jdGlvbihlKXtyZXR1cm4gdC5fb25UZXh0QXJlYUZvY3VzKGUpfSkpKSx0aGlzLnJlZ2lzdGVyKGQuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKHRoaXMudGV4dGFyZWEsXCJibHVyXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX29uVGV4dEFyZWFCbHVyKCl9KSkpLHRoaXMuX2hlbHBlckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRleHRhcmVhKTt2YXIgaT10aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZSh4LkNvcmVCcm93c2VyU2VydmljZSx0aGlzLnRleHRhcmVhKTt0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKEwuSUNvcmVCcm93c2VyU2VydmljZSxpKSx0aGlzLl9jaGFyU2l6ZVNlcnZpY2U9dGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoQS5DaGFyU2l6ZVNlcnZpY2UsdGhpcy5fZG9jdW1lbnQsdGhpcy5faGVscGVyQ29udGFpbmVyKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKEwuSUNoYXJTaXplU2VydmljZSx0aGlzLl9jaGFyU2l6ZVNlcnZpY2UpLHRoaXMuX2NvbXBvc2l0aW9uVmlldz1ULmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy5fY29tcG9zaXRpb25WaWV3LmNsYXNzTGlzdC5hZGQoXCJjb21wb3NpdGlvbi12aWV3XCIpLHRoaXMuX2NvbXBvc2l0aW9uSGVscGVyPXRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKG8uQ29tcG9zaXRpb25IZWxwZXIsdGhpcy50ZXh0YXJlYSx0aGlzLl9jb21wb3NpdGlvblZpZXcpLHRoaXMuX2hlbHBlckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9jb21wb3NpdGlvblZpZXcpLHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChyKSx0aGlzLl90aGVtZT10aGlzLm9wdGlvbnMudGhlbWV8fHRoaXMuX3RoZW1lLHRoaXMuX2NvbG9yTWFuYWdlcj1uZXcgdy5Db2xvck1hbmFnZXIoVCx0aGlzLm9wdGlvbnMuYWxsb3dUcmFuc3BhcmVuY3kpLHRoaXMucmVnaXN0ZXIodGhpcy5vcHRpb25zU2VydmljZS5vbk9wdGlvbkNoYW5nZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2NvbG9yTWFuYWdlci5vbk9wdGlvbnNDaGFuZ2UoZSl9KSkpLHRoaXMuX2NvbG9yTWFuYWdlci5zZXRUaGVtZSh0aGlzLl90aGVtZSk7dmFyIG49dGhpcy5fY3JlYXRlUmVuZGVyZXIoKTt0aGlzLl9yZW5kZXJTZXJ2aWNlPXRoaXMucmVnaXN0ZXIodGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoRS5SZW5kZXJTZXJ2aWNlLG4sdGhpcy5yb3dzLHRoaXMuc2NyZWVuRWxlbWVudCkpLHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2UoTC5JUmVuZGVyU2VydmljZSx0aGlzLl9yZW5kZXJTZXJ2aWNlKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX3JlbmRlclNlcnZpY2Uub25SZW5kZXJlZEJ1ZmZlckNoYW5nZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX29uUmVuZGVyLmZpcmUoZSl9KSkpLHRoaXMub25SZXNpemUoKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9yZW5kZXJTZXJ2aWNlLnJlc2l6ZShlLmNvbHMsZS5yb3dzKX0pKSx0aGlzLl9zb3VuZFNlcnZpY2U9dGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2Uodi5Tb3VuZFNlcnZpY2UpLHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2UoTC5JU291bmRTZXJ2aWNlLHRoaXMuX3NvdW5kU2VydmljZSksdGhpcy5fbW91c2VTZXJ2aWNlPXRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKFIuTW91c2VTZXJ2aWNlKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKEwuSU1vdXNlU2VydmljZSx0aGlzLl9tb3VzZVNlcnZpY2UpLHRoaXMudmlld3BvcnQ9dGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2Uocy5WaWV3cG9ydCwoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5zY3JvbGxMaW5lcyhlLHIpfSksdGhpcy5fdmlld3BvcnRFbGVtZW50LHRoaXMuX3ZpZXdwb3J0U2Nyb2xsQXJlYSksdGhpcy52aWV3cG9ydC5vblRoZW1lQ2hhbmdlKHRoaXMuX2NvbG9yTWFuYWdlci5jb2xvcnMpLHRoaXMucmVnaXN0ZXIodGhpcy5faW5wdXRIYW5kbGVyLm9uUmVxdWVzdFN5bmNTY3JvbGxCYXIoKGZ1bmN0aW9uKCl7cmV0dXJuIHQudmlld3BvcnQuc3luY1Njcm9sbEFyZWEoKX0pKSksdGhpcy5yZWdpc3Rlcih0aGlzLnZpZXdwb3J0KSx0aGlzLnJlZ2lzdGVyKHRoaXMub25DdXJzb3JNb3ZlKChmdW5jdGlvbigpe3QuX3JlbmRlclNlcnZpY2Uub25DdXJzb3JNb3ZlKCksdC5fc3luY1RleHRBcmVhKCl9KSkpLHRoaXMucmVnaXN0ZXIodGhpcy5vblJlc2l6ZSgoZnVuY3Rpb24oKXtyZXR1cm4gdC5fcmVuZGVyU2VydmljZS5vblJlc2l6ZSh0LmNvbHMsdC5yb3dzKX0pKSksdGhpcy5yZWdpc3Rlcih0aGlzLm9uQmx1cigoZnVuY3Rpb24oKXtyZXR1cm4gdC5fcmVuZGVyU2VydmljZS5vbkJsdXIoKX0pKSksdGhpcy5yZWdpc3Rlcih0aGlzLm9uRm9jdXMoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3JlbmRlclNlcnZpY2Uub25Gb2N1cygpfSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX3JlbmRlclNlcnZpY2Uub25EaW1lbnNpb25zQ2hhbmdlKChmdW5jdGlvbigpe3JldHVybiB0LnZpZXdwb3J0LnN5bmNTY3JvbGxBcmVhKCl9KSkpLHRoaXMuX3NlbGVjdGlvblNlcnZpY2U9dGhpcy5yZWdpc3Rlcih0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZShmLlNlbGVjdGlvblNlcnZpY2UsdGhpcy5lbGVtZW50LHRoaXMuc2NyZWVuRWxlbWVudCkpLHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2UoTC5JU2VsZWN0aW9uU2VydmljZSx0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX3NlbGVjdGlvblNlcnZpY2Uub25SZXF1ZXN0U2Nyb2xsTGluZXMoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjcm9sbExpbmVzKGUuYW1vdW50LGUuc3VwcHJlc3NTY3JvbGxFdmVudCl9KSkpLHRoaXMucmVnaXN0ZXIodGhpcy5fc2VsZWN0aW9uU2VydmljZS5vblNlbGVjdGlvbkNoYW5nZSgoZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25TZWxlY3Rpb25DaGFuZ2UuZmlyZSgpfSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX3NlbGVjdGlvblNlcnZpY2Uub25SZXF1ZXN0UmVkcmF3KChmdW5jdGlvbihlKXtyZXR1cm4gdC5fcmVuZGVyU2VydmljZS5vblNlbGVjdGlvbkNoYW5nZWQoZS5zdGFydCxlLmVuZCxlLmNvbHVtblNlbGVjdE1vZGUpfSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX3NlbGVjdGlvblNlcnZpY2Uub25MaW51eE1vdXNlU2VsZWN0aW9uKChmdW5jdGlvbihlKXt0LnRleHRhcmVhLnZhbHVlPWUsdC50ZXh0YXJlYS5mb2N1cygpLHQudGV4dGFyZWEuc2VsZWN0KCl9KSkpLHRoaXMucmVnaXN0ZXIodGhpcy5vblNjcm9sbCgoZnVuY3Rpb24oKXt0LnZpZXdwb3J0LnN5bmNTY3JvbGxBcmVhKCksdC5fc2VsZWN0aW9uU2VydmljZS5yZWZyZXNoKCl9KSkpLHRoaXMucmVnaXN0ZXIoZC5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIodGhpcy5fdmlld3BvcnRFbGVtZW50LFwic2Nyb2xsXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3NlbGVjdGlvblNlcnZpY2UucmVmcmVzaCgpfSkpKSx0aGlzLl9tb3VzZVpvbmVNYW5hZ2VyPXRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKGcuTW91c2Vab25lTWFuYWdlcix0aGlzLmVsZW1lbnQsdGhpcy5zY3JlZW5FbGVtZW50KSx0aGlzLnJlZ2lzdGVyKHRoaXMuX21vdXNlWm9uZU1hbmFnZXIpLHRoaXMucmVnaXN0ZXIodGhpcy5vblNjcm9sbCgoZnVuY3Rpb24oKXtyZXR1cm4gdC5fbW91c2Vab25lTWFuYWdlci5jbGVhckFsbCgpfSkpKSx0aGlzLmxpbmtpZmllci5hdHRhY2hUb0RvbSh0aGlzLmVsZW1lbnQsdGhpcy5fbW91c2Vab25lTWFuYWdlciksdGhpcy5saW5raWZpZXIyLmF0dGFjaFRvRG9tKHRoaXMuZWxlbWVudCx0aGlzLl9tb3VzZVNlcnZpY2UsdGhpcy5fcmVuZGVyU2VydmljZSksdGhpcy5yZWdpc3RlcihkLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcih0aGlzLmVsZW1lbnQsXCJtb3VzZWRvd25cIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3NlbGVjdGlvblNlcnZpY2Uub25Nb3VzZURvd24oZSl9KSkpLHRoaXMuX2NvcmVNb3VzZVNlcnZpY2UuYXJlTW91c2VFdmVudHNBY3RpdmU/KHRoaXMuX3NlbGVjdGlvblNlcnZpY2UuZGlzYWJsZSgpLHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZW5hYmxlLW1vdXNlLWV2ZW50c1wiKSk6dGhpcy5fc2VsZWN0aW9uU2VydmljZS5lbmFibGUoKSx0aGlzLm9wdGlvbnMuc2NyZWVuUmVhZGVyTW9kZSYmKHRoaXMuX2FjY2Vzc2liaWxpdHlNYW5hZ2VyPW5ldyB5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyKHRoaXMsdGhpcy5fcmVuZGVyU2VydmljZSkpLHRoaXMuX2NoYXJTaXplU2VydmljZS5tZWFzdXJlKCksdGhpcy5yZWZyZXNoKDAsdGhpcy5yb3dzLTEpLHRoaXMuX2luaXRHbG9iYWwoKSx0aGlzLmJpbmRNb3VzZSgpfSx0LnByb3RvdHlwZS5fY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5vcHRpb25zLnJlbmRlcmVyVHlwZSl7Y2FzZVwiY2FudmFzXCI6cmV0dXJuIHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKGguUmVuZGVyZXIsdGhpcy5fY29sb3JNYW5hZ2VyLmNvbG9ycyx0aGlzLnNjcmVlbkVsZW1lbnQsdGhpcy5saW5raWZpZXIsdGhpcy5saW5raWZpZXIyKTtjYXNlXCJkb21cIjpyZXR1cm4gdGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoYi5Eb21SZW5kZXJlcix0aGlzLl9jb2xvck1hbmFnZXIuY29sb3JzLHRoaXMuZWxlbWVudCx0aGlzLnNjcmVlbkVsZW1lbnQsdGhpcy5fdmlld3BvcnRFbGVtZW50LHRoaXMubGlua2lmaWVyLHRoaXMubGlua2lmaWVyMik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCByZW5kZXJlclR5cGUgXCInK3RoaXMub3B0aW9ucy5yZW5kZXJlclR5cGUrJ1wiJyl9fSx0LnByb3RvdHlwZS5fc2V0VGhlbWU9ZnVuY3Rpb24oZSl7dmFyIHQscixpO3RoaXMuX3RoZW1lPWUsbnVsbD09PSh0PXRoaXMuX2NvbG9yTWFuYWdlcil8fHZvaWQgMD09PXR8fHQuc2V0VGhlbWUoZSksbnVsbD09PShyPXRoaXMuX3JlbmRlclNlcnZpY2UpfHx2b2lkIDA9PT1yfHxyLnNldENvbG9ycyh0aGlzLl9jb2xvck1hbmFnZXIuY29sb3JzKSxudWxsPT09KGk9dGhpcy52aWV3cG9ydCl8fHZvaWQgMD09PWl8fGkub25UaGVtZUNoYW5nZSh0aGlzLl9jb2xvck1hbmFnZXIuY29sb3JzKX0sdC5wcm90b3R5cGUuYmluZE1vdXNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMscj10aGlzLmVsZW1lbnQ7ZnVuY3Rpb24gaShlKXt2YXIgcixpLG49dC5fbW91c2VTZXJ2aWNlLmdldFJhd0J5dGVDb29yZHMoZSx0LnNjcmVlbkVsZW1lbnQsdC5jb2xzLHQucm93cyk7aWYoIW4pcmV0dXJuITE7c3dpdGNoKGUub3ZlcnJpZGVUeXBlfHxlLnR5cGUpe2Nhc2VcIm1vdXNlbW92ZVwiOmk9MzIsdm9pZCAwPT09ZS5idXR0b25zPyhyPTMsdm9pZCAwIT09ZS5idXR0b24mJihyPWUuYnV0dG9uPDM/ZS5idXR0b246MykpOnI9MSZlLmJ1dHRvbnM/MDo0JmUuYnV0dG9ucz8xOjImZS5idXR0b25zPzI6MzticmVhaztjYXNlXCJtb3VzZXVwXCI6aT0wLHI9ZS5idXR0b248Mz9lLmJ1dHRvbjozO2JyZWFrO2Nhc2VcIm1vdXNlZG93blwiOmk9MSxyPWUuYnV0dG9uPDM/ZS5idXR0b246MzticmVhaztjYXNlXCJ3aGVlbFwiOjAhPT1lLmRlbHRhWSYmKGk9ZS5kZWx0YVk8MD8wOjEpLHI9NDticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEodm9pZCAwPT09aXx8dm9pZCAwPT09cnx8cj40KSYmdC5fY29yZU1vdXNlU2VydmljZS50cmlnZ2VyTW91c2VFdmVudCh7Y29sOm4ueC0zMyxyb3c6bi55LTMzLGJ1dHRvbjpyLGFjdGlvbjppLGN0cmw6ZS5jdHJsS2V5LGFsdDplLmFsdEtleSxzaGlmdDplLnNoaWZ0S2V5fSl9dmFyIG49e21vdXNldXA6bnVsbCx3aGVlbDpudWxsLG1vdXNlZHJhZzpudWxsLG1vdXNlbW92ZTpudWxsfSxvPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLHQuYnV0dG9uc3x8KGUuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsbi5tb3VzZXVwKSxuLm1vdXNlZHJhZyYmZS5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG4ubW91c2VkcmFnKSksZS5jYW5jZWwodCl9LHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCksdC5wcmV2ZW50RGVmYXVsdCgpLGUuY2FuY2VsKHQpfSxhPWZ1bmN0aW9uKGUpe2UuYnV0dG9ucyYmaShlKX0sbD1mdW5jdGlvbihlKXtlLmJ1dHRvbnN8fGkoZSl9O3RoaXMucmVnaXN0ZXIodGhpcy5fY29yZU1vdXNlU2VydmljZS5vblByb3RvY29sQ2hhbmdlKChmdW5jdGlvbih0KXt0PyhcImRlYnVnXCI9PT1lLm9wdGlvbnNTZXJ2aWNlLm9wdGlvbnMubG9nTGV2ZWwmJmUuX2xvZ1NlcnZpY2UuZGVidWcoXCJCaW5kaW5nIHRvIG1vdXNlIGV2ZW50czpcIixlLl9jb3JlTW91c2VTZXJ2aWNlLmV4cGxhaW5FdmVudHModCkpLGUuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZW5hYmxlLW1vdXNlLWV2ZW50c1wiKSxlLl9zZWxlY3Rpb25TZXJ2aWNlLmRpc2FibGUoKSk6KGUuX2xvZ1NlcnZpY2UuZGVidWcoXCJVbmJpbmRpbmcgZnJvbSBtb3VzZSBldmVudHMuXCIpLGUuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZW5hYmxlLW1vdXNlLWV2ZW50c1wiKSxlLl9zZWxlY3Rpb25TZXJ2aWNlLmVuYWJsZSgpKSw4JnQ/bi5tb3VzZW1vdmV8fChyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixsKSxuLm1vdXNlbW92ZT1sKTooci5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsbi5tb3VzZW1vdmUpLG4ubW91c2Vtb3ZlPW51bGwpLDE2JnQ/bi53aGVlbHx8KHIuYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIscyx7cGFzc2l2ZTohMX0pLG4ud2hlZWw9cyk6KHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsbi53aGVlbCksbi53aGVlbD1udWxsKSwyJnQ/bi5tb3VzZXVwfHwobi5tb3VzZXVwPW8pOihlLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLG4ubW91c2V1cCksbi5tb3VzZXVwPW51bGwpLDQmdD9uLm1vdXNlZHJhZ3x8KG4ubW91c2VkcmFnPWEpOihlLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsbi5tb3VzZWRyYWcpLG4ubW91c2VkcmFnPW51bGwpfSkpKSx0aGlzLl9jb3JlTW91c2VTZXJ2aWNlLmFjdGl2ZVByb3RvY29sPXRoaXMuX2NvcmVNb3VzZVNlcnZpY2UuYWN0aXZlUHJvdG9jb2wsdGhpcy5yZWdpc3RlcihkLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcihyLFwibW91c2Vkb3duXCIsKGZ1bmN0aW9uKHQpe2lmKHQucHJldmVudERlZmF1bHQoKSxlLmZvY3VzKCksZS5fY29yZU1vdXNlU2VydmljZS5hcmVNb3VzZUV2ZW50c0FjdGl2ZSYmIWUuX3NlbGVjdGlvblNlcnZpY2Uuc2hvdWxkRm9yY2VTZWxlY3Rpb24odCkpcmV0dXJuIGkodCksbi5tb3VzZXVwJiZlLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLG4ubW91c2V1cCksbi5tb3VzZWRyYWcmJmUuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixuLm1vdXNlZHJhZyksZS5jYW5jZWwodCl9KSkpLHRoaXMucmVnaXN0ZXIoZC5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIocixcIndoZWVsXCIsKGZ1bmN0aW9uKHQpe2lmKG4ud2hlZWwpO2Vsc2UgaWYoIWUuYnVmZmVyLmhhc1Njcm9sbGJhY2spe3ZhciByPWUudmlld3BvcnQuZ2V0TGluZXNTY3JvbGxlZCh0KTtpZigwPT09cilyZXR1cm47Zm9yKHZhciBpPWMuQzAuRVNDKyhlLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuYXBwbGljYXRpb25DdXJzb3JLZXlzP1wiT1wiOlwiW1wiKSsodC5kZWx0YVk8MD9cIkFcIjpcIkJcIiksbz1cIlwiLHM9MDtzPE1hdGguYWJzKHIpO3MrKylvKz1pO2UuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQobywhMCl9fSkse3Bhc3NpdmU6ITB9KSksdGhpcy5yZWdpc3RlcihkLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcihyLFwid2hlZWxcIiwoZnVuY3Rpb24odCl7aWYoIW4ud2hlZWwpcmV0dXJuIGUudmlld3BvcnQub25XaGVlbCh0KT92b2lkIDA6ZS5jYW5jZWwodCl9KSx7cGFzc2l2ZTohMX0pKSx0aGlzLnJlZ2lzdGVyKGQuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKHIsXCJ0b3VjaHN0YXJ0XCIsKGZ1bmN0aW9uKHQpe2lmKCFlLl9jb3JlTW91c2VTZXJ2aWNlLmFyZU1vdXNlRXZlbnRzQWN0aXZlKXJldHVybiBlLnZpZXdwb3J0Lm9uVG91Y2hTdGFydCh0KSxlLmNhbmNlbCh0KX0pLHtwYXNzaXZlOiEwfSkpLHRoaXMucmVnaXN0ZXIoZC5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIocixcInRvdWNobW92ZVwiLChmdW5jdGlvbih0KXtpZighZS5fY29yZU1vdXNlU2VydmljZS5hcmVNb3VzZUV2ZW50c0FjdGl2ZSlyZXR1cm4gZS52aWV3cG9ydC5vblRvdWNoTW92ZSh0KT92b2lkIDA6ZS5jYW5jZWwodCl9KSx7cGFzc2l2ZTohMX0pKX0sdC5wcm90b3R5cGUucmVmcmVzaD1mdW5jdGlvbihlLHQpe3ZhciByO251bGw9PT0ocj10aGlzLl9yZW5kZXJTZXJ2aWNlKXx8dm9pZCAwPT09cnx8ci5yZWZyZXNoUm93cyhlLHQpfSx0LnByb3RvdHlwZS5fcXVldWVMaW5raWZpY2F0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIHI7bnVsbD09PShyPXRoaXMubGlua2lmaWVyKXx8dm9pZCAwPT09cnx8ci5saW5raWZ5Um93cyhlLHQpfSx0LnByb3RvdHlwZS51cGRhdGVDdXJzb3JTdHlsZT1mdW5jdGlvbihlKXt0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlJiZ0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnNob3VsZENvbHVtblNlbGVjdChlKT90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNvbHVtbi1zZWxlY3RcIik6dGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2x1bW4tc2VsZWN0XCIpfSx0LnByb3RvdHlwZS5fc2hvd0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuX2NvcmVTZXJ2aWNlLmlzQ3Vyc29ySW5pdGlhbGl6ZWR8fCh0aGlzLl9jb3JlU2VydmljZS5pc0N1cnNvckluaXRpYWxpemVkPSEwLHRoaXMucmVmcmVzaCh0aGlzLmJ1ZmZlci55LHRoaXMuYnVmZmVyLnkpKX0sdC5wcm90b3R5cGUuc2Nyb2xsTGluZXM9ZnVuY3Rpb24odCxyKXtlLnByb3RvdHlwZS5zY3JvbGxMaW5lcy5jYWxsKHRoaXMsdCxyKSx0aGlzLnJlZnJlc2goMCx0aGlzLnJvd3MtMSl9LHQucHJvdG90eXBlLnBhc3RlPWZ1bmN0aW9uKGUpe2EucGFzdGUoZSx0aGlzLnRleHRhcmVhLHRoaXMuX2NvcmVTZXJ2aWNlKX0sdC5wcm90b3R5cGUuYXR0YWNoQ3VzdG9tS2V5RXZlbnRIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuX2N1c3RvbUtleUV2ZW50SGFuZGxlcj1lfSx0LnByb3RvdHlwZS5yZWdpc3RlckxpbmtNYXRjaGVyPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10aGlzLmxpbmtpZmllci5yZWdpc3RlckxpbmtNYXRjaGVyKGUsdCxyKTtyZXR1cm4gdGhpcy5yZWZyZXNoKDAsdGhpcy5yb3dzLTEpLGl9LHQucHJvdG90eXBlLmRlcmVnaXN0ZXJMaW5rTWF0Y2hlcj1mdW5jdGlvbihlKXt0aGlzLmxpbmtpZmllci5kZXJlZ2lzdGVyTGlua01hdGNoZXIoZSkmJnRoaXMucmVmcmVzaCgwLHRoaXMucm93cy0xKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJMaW5rUHJvdmlkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGlua2lmaWVyMi5yZWdpc3RlckxpbmtQcm92aWRlcihlKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJDaGFyYWN0ZXJKb2luZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVuZGVyU2VydmljZS5yZWdpc3RlckNoYXJhY3RlckpvaW5lcihlKTtyZXR1cm4gdGhpcy5yZWZyZXNoKDAsdGhpcy5yb3dzLTEpLHR9LHQucHJvdG90eXBlLmRlcmVnaXN0ZXJDaGFyYWN0ZXJKb2luZXI9ZnVuY3Rpb24oZSl7dGhpcy5fcmVuZGVyU2VydmljZS5kZXJlZ2lzdGVyQ2hhcmFjdGVySm9pbmVyKGUpJiZ0aGlzLnJlZnJlc2goMCx0aGlzLnJvd3MtMSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm1hcmtlcnNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVmZmVyLm1hcmtlcnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYWRkTWFya2VyPWZ1bmN0aW9uKGUpe2lmKHRoaXMuYnVmZmVyPT09dGhpcy5idWZmZXJzLm5vcm1hbClyZXR1cm4gdGhpcy5idWZmZXIuYWRkTWFya2VyKHRoaXMuYnVmZmVyLnliYXNlK3RoaXMuYnVmZmVyLnkrZSl9LHQucHJvdG90eXBlLmhhc1NlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2VsZWN0aW9uU2VydmljZSYmdGhpcy5fc2VsZWN0aW9uU2VydmljZS5oYXNTZWxlY3Rpb259LHQucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbihlLHQscil7dGhpcy5fc2VsZWN0aW9uU2VydmljZS5zZXRTZWxlY3Rpb24oZSx0LHIpfSx0LnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uU2VydmljZT90aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvblRleHQ6XCJcIn0sdC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uUG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlJiZ0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLmhhc1NlbGVjdGlvbilyZXR1cm57c3RhcnRDb2x1bW46dGhpcy5fc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25TdGFydFswXSxzdGFydFJvdzp0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvblN0YXJ0WzFdLGVuZENvbHVtbjp0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbkVuZFswXSxlbmRSb3c6dGhpcy5fc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25FbmRbMV19fSx0LnByb3RvdHlwZS5jbGVhclNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBlO251bGw9PT0oZT10aGlzLl9zZWxlY3Rpb25TZXJ2aWNlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhclNlbGVjdGlvbigpfSx0LnByb3RvdHlwZS5zZWxlY3RBbGw9ZnVuY3Rpb24oKXt2YXIgZTtudWxsPT09KGU9dGhpcy5fc2VsZWN0aW9uU2VydmljZSl8fHZvaWQgMD09PWV8fGUuc2VsZWN0QWxsKCl9LHQucHJvdG90eXBlLnNlbGVjdExpbmVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI7bnVsbD09PShyPXRoaXMuX3NlbGVjdGlvblNlcnZpY2UpfHx2b2lkIDA9PT1yfHxyLnNlbGVjdExpbmVzKGUsdCl9LHQucHJvdG90eXBlLl9rZXlEb3duPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2tleURvd25IYW5kbGVkPSExLHRoaXMuX2N1c3RvbUtleUV2ZW50SGFuZGxlciYmITE9PT10aGlzLl9jdXN0b21LZXlFdmVudEhhbmRsZXIoZSkpcmV0dXJuITE7aWYoIXRoaXMuX2NvbXBvc2l0aW9uSGVscGVyLmtleWRvd24oZSkpcmV0dXJuIHRoaXMuYnVmZmVyLnliYXNlIT09dGhpcy5idWZmZXIueWRpc3AmJnRoaXMuc2Nyb2xsVG9Cb3R0b20oKSwhMTt2YXIgdD1TLmV2YWx1YXRlS2V5Ym9hcmRFdmVudChlLHRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5hcHBsaWNhdGlvbkN1cnNvcktleXMsdGhpcy5icm93c2VyLmlzTWFjLHRoaXMub3B0aW9ucy5tYWNPcHRpb25Jc01ldGEpO2lmKHRoaXMudXBkYXRlQ3Vyc29yU3R5bGUoZSksMz09PXQudHlwZXx8Mj09PXQudHlwZSl7dmFyIHI9dGhpcy5yb3dzLTE7cmV0dXJuIHRoaXMuc2Nyb2xsTGluZXMoMj09PXQudHlwZT8tcjpyKSx0aGlzLmNhbmNlbChlLCEwKX1yZXR1cm4gMT09PXQudHlwZSYmdGhpcy5zZWxlY3RBbGwoKSwhIXRoaXMuX2lzVGhpcmRMZXZlbFNoaWZ0KHRoaXMuYnJvd3NlcixlKXx8KHQuY2FuY2VsJiZ0aGlzLmNhbmNlbChlLCEwKSwhdC5rZXl8fCh0LmtleSE9PWMuQzAuRVRYJiZ0LmtleSE9PWMuQzAuQ1J8fCh0aGlzLnRleHRhcmVhLnZhbHVlPVwiXCIpLHRoaXMuX29uS2V5LmZpcmUoe2tleTp0LmtleSxkb21FdmVudDplfSksdGhpcy5fc2hvd0N1cnNvcigpLHRoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQodC5rZXksITApLHRoaXMub3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5zY3JlZW5SZWFkZXJNb2RlP3ZvaWQodGhpcy5fa2V5RG93bkhhbmRsZWQ9ITApOnRoaXMuY2FuY2VsKGUsITApKSl9LHQucHJvdG90eXBlLl9pc1RoaXJkTGV2ZWxTaGlmdD1mdW5jdGlvbihlLHQpe3ZhciByPWUuaXNNYWMmJiF0aGlzLm9wdGlvbnMubWFjT3B0aW9uSXNNZXRhJiZ0LmFsdEtleSYmIXQuY3RybEtleSYmIXQubWV0YUtleXx8ZS5pc1dpbmRvd3MmJnQuYWx0S2V5JiZ0LmN0cmxLZXkmJiF0Lm1ldGFLZXk7cmV0dXJuXCJrZXlwcmVzc1wiPT09dC50eXBlP3I6ciYmKCF0LmtleUNvZGV8fHQua2V5Q29kZT40Nyl9LHQucHJvdG90eXBlLl9rZXlVcD1mdW5jdGlvbihlKXt0aGlzLl9jdXN0b21LZXlFdmVudEhhbmRsZXImJiExPT09dGhpcy5fY3VzdG9tS2V5RXZlbnRIYW5kbGVyKGUpfHwoZnVuY3Rpb24oZSl7cmV0dXJuIDE2PT09ZS5rZXlDb2RlfHwxNz09PWUua2V5Q29kZXx8MTg9PT1lLmtleUNvZGV9KGUpfHx0aGlzLmZvY3VzKCksdGhpcy51cGRhdGVDdXJzb3JTdHlsZShlKSl9LHQucHJvdG90eXBlLl9rZXlQcmVzcz1mdW5jdGlvbihlKXt2YXIgdDtpZih0aGlzLl9rZXlEb3duSGFuZGxlZClyZXR1cm4hMTtpZih0aGlzLl9jdXN0b21LZXlFdmVudEhhbmRsZXImJiExPT09dGhpcy5fY3VzdG9tS2V5RXZlbnRIYW5kbGVyKGUpKXJldHVybiExO2lmKHRoaXMuY2FuY2VsKGUpLGUuY2hhckNvZGUpdD1lLmNoYXJDb2RlO2Vsc2UgaWYobnVsbD09PWUud2hpY2h8fHZvaWQgMD09PWUud2hpY2gpdD1lLmtleUNvZGU7ZWxzZXtpZigwPT09ZS53aGljaHx8MD09PWUuY2hhckNvZGUpcmV0dXJuITE7dD1lLndoaWNofXJldHVybiEoIXR8fChlLmFsdEtleXx8ZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiYhdGhpcy5faXNUaGlyZExldmVsU2hpZnQodGhpcy5icm93c2VyLGUpKSYmKHQ9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0aGlzLl9vbktleS5maXJlKHtrZXk6dCxkb21FdmVudDplfSksdGhpcy5fc2hvd0N1cnNvcigpLHRoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQodCwhMCksITApfSx0LnByb3RvdHlwZS5iZWxsPWZ1bmN0aW9uKCl7dGhpcy5fc291bmRCZWxsKCkmJnRoaXMuX3NvdW5kU2VydmljZS5wbGF5QmVsbFNvdW5kKCl9LHQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LHIpe3QhPT10aGlzLmNvbHN8fHIhPT10aGlzLnJvd3M/ZS5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyx0LHIpOnRoaXMuX2NoYXJTaXplU2VydmljZSYmIXRoaXMuX2NoYXJTaXplU2VydmljZS5oYXNWYWxpZFNpemUmJnRoaXMuX2NoYXJTaXplU2VydmljZS5tZWFzdXJlKCl9LHQucHJvdG90eXBlLl9hZnRlclJlc2l6ZT1mdW5jdGlvbihlLHQpe3ZhciByLGk7bnVsbD09PShyPXRoaXMuX2NoYXJTaXplU2VydmljZSl8fHZvaWQgMD09PXJ8fHIubWVhc3VyZSgpLG51bGw9PT0oaT10aGlzLnZpZXdwb3J0KXx8dm9pZCAwPT09aXx8aS5zeW5jU2Nyb2xsQXJlYSghMCl9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMuYnVmZmVyLnliYXNlfHwwIT09dGhpcy5idWZmZXIueSl7dGhpcy5idWZmZXIubGluZXMuc2V0KDAsdGhpcy5idWZmZXIubGluZXMuZ2V0KHRoaXMuYnVmZmVyLnliYXNlK3RoaXMuYnVmZmVyLnkpKSx0aGlzLmJ1ZmZlci5saW5lcy5sZW5ndGg9MSx0aGlzLmJ1ZmZlci55ZGlzcD0wLHRoaXMuYnVmZmVyLnliYXNlPTAsdGhpcy5idWZmZXIueT0wO2Zvcih2YXIgZT0xO2U8dGhpcy5yb3dzO2UrKyl0aGlzLmJ1ZmZlci5saW5lcy5wdXNoKHRoaXMuYnVmZmVyLmdldEJsYW5rTGluZShDLkRFRkFVTFRfQVRUUl9EQVRBKSk7dGhpcy5yZWZyZXNoKDAsdGhpcy5yb3dzLTEpLHRoaXMuX29uU2Nyb2xsLmZpcmUodGhpcy5idWZmZXIueWRpc3ApfX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt2YXIgdCxyO3RoaXMub3B0aW9ucy5yb3dzPXRoaXMucm93cyx0aGlzLm9wdGlvbnMuY29scz10aGlzLmNvbHM7dmFyIGk9dGhpcy5fY3VzdG9tS2V5RXZlbnRIYW5kbGVyO3RoaXMuX3NldHVwKCksZS5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKSxudWxsPT09KHQ9dGhpcy5fc2VsZWN0aW9uU2VydmljZSl8fHZvaWQgMD09PXR8fHQucmVzZXQoKSx0aGlzLl9jdXN0b21LZXlFdmVudEhhbmRsZXI9aSx0aGlzLnJlZnJlc2goMCx0aGlzLnJvd3MtMSksbnVsbD09PShyPXRoaXMudmlld3BvcnQpfHx2b2lkIDA9PT1yfHxyLnN5bmNTY3JvbGxBcmVhKCl9LHQucHJvdG90eXBlLl9yZXBvcnRXaW5kb3dzT3B0aW9ucz1mdW5jdGlvbihlKXtpZih0aGlzLl9yZW5kZXJTZXJ2aWNlKXN3aXRjaChlKXtjYXNlIGwuV2luZG93c09wdGlvbnNSZXBvcnRUeXBlLkdFVF9XSU5fU0laRV9QSVhFTFM6dmFyIHQ9dGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLnNjYWxlZENhbnZhc1dpZHRoLnRvRml4ZWQoMCkscj10aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuc2NhbGVkQ2FudmFzSGVpZ2h0LnRvRml4ZWQoMCk7dGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChjLkMwLkVTQytcIls0O1wiK3IrXCI7XCIrdCtcInRcIik7YnJlYWs7Y2FzZSBsLldpbmRvd3NPcHRpb25zUmVwb3J0VHlwZS5HRVRfQ0VMTF9TSVpFX1BJWEVMUzp2YXIgaT10aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuc2NhbGVkQ2VsbFdpZHRoLnRvRml4ZWQoMCksbj10aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuc2NhbGVkQ2VsbEhlaWdodC50b0ZpeGVkKDApO3RoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoYy5DMC5FU0MrXCJbNjtcIituK1wiO1wiK2krXCJ0XCIpfX0sdC5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5vcHRpb25zLmNhbmNlbEV2ZW50c3x8dClyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksITF9LHQucHJvdG90eXBlLl92aXN1YWxCZWxsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHQucHJvdG90eXBlLl9zb3VuZEJlbGw9ZnVuY3Rpb24oKXtyZXR1cm5cInNvdW5kXCI9PT10aGlzLm9wdGlvbnMuYmVsbFN0eWxlfSx0fShELkNvcmVUZXJtaW5hbCk7dC5UZXJtaW5hbD1PfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQscixpKXt2YXIgbixvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09aT9pPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTppO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixpKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShuPWVbYV0pJiYocz0obzwzP24ocyk6bz4zP24odCxyLHMpOm4odCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30sbj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7dChyLGksZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbXBvc2l0aW9uSGVscGVyPXZvaWQgMDt2YXIgbz1yKDUpLHM9cigxKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixpLG4sbyl7dGhpcy5fdGV4dGFyZWE9ZSx0aGlzLl9jb21wb3NpdGlvblZpZXc9dCx0aGlzLl9idWZmZXJTZXJ2aWNlPXIsdGhpcy5fb3B0aW9uc1NlcnZpY2U9aSx0aGlzLl9jaGFyU2l6ZVNlcnZpY2U9bix0aGlzLl9jb3JlU2VydmljZT1vLHRoaXMuX2lzQ29tcG9zaW5nPSExLHRoaXMuX2lzU2VuZGluZ0NvbXBvc2l0aW9uPSExLHRoaXMuX2NvbXBvc2l0aW9uUG9zaXRpb249e3N0YXJ0OjAsZW5kOjB9fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJpc0NvbXBvc2luZ1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNDb21wb3Npbmd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY29tcG9zaXRpb25zdGFydD1mdW5jdGlvbigpe3RoaXMuX2lzQ29tcG9zaW5nPSEwLHRoaXMuX2NvbXBvc2l0aW9uUG9zaXRpb24uc3RhcnQ9dGhpcy5fdGV4dGFyZWEudmFsdWUubGVuZ3RoLHRoaXMuX2NvbXBvc2l0aW9uVmlldy50ZXh0Q29udGVudD1cIlwiLHRoaXMuX2NvbXBvc2l0aW9uVmlldy5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpfSxlLnByb3RvdHlwZS5jb21wb3NpdGlvbnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuX2NvbXBvc2l0aW9uVmlldy50ZXh0Q29udGVudD1lLmRhdGEsdGhpcy51cGRhdGVDb21wb3NpdGlvbkVsZW1lbnRzKCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Ll9jb21wb3NpdGlvblBvc2l0aW9uLmVuZD10Ll90ZXh0YXJlYS52YWx1ZS5sZW5ndGh9KSwwKX0sZS5wcm90b3R5cGUuY29tcG9zaXRpb25lbmQ9ZnVuY3Rpb24oKXt0aGlzLl9maW5hbGl6ZUNvbXBvc2l0aW9uKCEwKX0sZS5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihlKXtpZih0aGlzLl9pc0NvbXBvc2luZ3x8dGhpcy5faXNTZW5kaW5nQ29tcG9zaXRpb24pe2lmKDIyOT09PWUua2V5Q29kZSlyZXR1cm4hMTtpZigxNj09PWUua2V5Q29kZXx8MTc9PT1lLmtleUNvZGV8fDE4PT09ZS5rZXlDb2RlKXJldHVybiExO3RoaXMuX2ZpbmFsaXplQ29tcG9zaXRpb24oITEpfXJldHVybiAyMjkhPT1lLmtleUNvZGV8fCh0aGlzLl9oYW5kbGVBbnlUZXh0YXJlYUNoYW5nZXMoKSwhMSl9LGUucHJvdG90eXBlLl9maW5hbGl6ZUNvbXBvc2l0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5fY29tcG9zaXRpb25WaWV3LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIiksdGhpcy5faXNDb21wb3Npbmc9ITEsZSl7dmFyIHI9e3N0YXJ0OnRoaXMuX2NvbXBvc2l0aW9uUG9zaXRpb24uc3RhcnQsZW5kOnRoaXMuX2NvbXBvc2l0aW9uUG9zaXRpb24uZW5kfTt0aGlzLl9pc1NlbmRpbmdDb21wb3NpdGlvbj0hMCxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2lmKHQuX2lzU2VuZGluZ0NvbXBvc2l0aW9uKXt0Ll9pc1NlbmRpbmdDb21wb3NpdGlvbj0hMTt2YXIgZT12b2lkIDA7ZT10Ll9pc0NvbXBvc2luZz90Ll90ZXh0YXJlYS52YWx1ZS5zdWJzdHJpbmcoci5zdGFydCxyLmVuZCk6dC5fdGV4dGFyZWEudmFsdWUuc3Vic3RyaW5nKHIuc3RhcnQpLHQuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoZSwhMCl9fSksMCl9ZWxzZXt0aGlzLl9pc1NlbmRpbmdDb21wb3NpdGlvbj0hMTt2YXIgaT10aGlzLl90ZXh0YXJlYS52YWx1ZS5zdWJzdHJpbmcodGhpcy5fY29tcG9zaXRpb25Qb3NpdGlvbi5zdGFydCx0aGlzLl9jb21wb3NpdGlvblBvc2l0aW9uLmVuZCk7dGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChpLCEwKX19LGUucHJvdG90eXBlLl9oYW5kbGVBbnlUZXh0YXJlYUNoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5fdGV4dGFyZWEudmFsdWU7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpZighZS5faXNDb21wb3Npbmcpe3ZhciByPWUuX3RleHRhcmVhLnZhbHVlLnJlcGxhY2UodCxcIlwiKTtyLmxlbmd0aD4wJiZlLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KHIsITApfX0pLDApfSxlLnByb3RvdHlwZS51cGRhdGVDb21wb3NpdGlvbkVsZW1lbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5faXNDb21wb3Npbmcpe2lmKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmlzQ3Vyc29ySW5WaWV3cG9ydCl7dmFyIHI9TWF0aC5jZWlsKHRoaXMuX2NoYXJTaXplU2VydmljZS5oZWlnaHQqdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5saW5lSGVpZ2h0KSxpPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnkqcixuPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLngqdGhpcy5fY2hhclNpemVTZXJ2aWNlLndpZHRoO3RoaXMuX2NvbXBvc2l0aW9uVmlldy5zdHlsZS5sZWZ0PW4rXCJweFwiLHRoaXMuX2NvbXBvc2l0aW9uVmlldy5zdHlsZS50b3A9aStcInB4XCIsdGhpcy5fY29tcG9zaXRpb25WaWV3LnN0eWxlLmhlaWdodD1yK1wicHhcIix0aGlzLl9jb21wb3NpdGlvblZpZXcuc3R5bGUubGluZUhlaWdodD1yK1wicHhcIix0aGlzLl9jb21wb3NpdGlvblZpZXcuc3R5bGUuZm9udEZhbWlseT10aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmZvbnRGYW1pbHksdGhpcy5fY29tcG9zaXRpb25WaWV3LnN0eWxlLmZvbnRTaXplPXRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuZm9udFNpemUrXCJweFwiO3ZhciBvPXRoaXMuX2NvbXBvc2l0aW9uVmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl90ZXh0YXJlYS5zdHlsZS5sZWZ0PW4rXCJweFwiLHRoaXMuX3RleHRhcmVhLnN0eWxlLnRvcD1pK1wicHhcIix0aGlzLl90ZXh0YXJlYS5zdHlsZS53aWR0aD1vLndpZHRoK1wicHhcIix0aGlzLl90ZXh0YXJlYS5zdHlsZS5oZWlnaHQ9by5oZWlnaHQrXCJweFwiLHRoaXMuX3RleHRhcmVhLnN0eWxlLmxpbmVIZWlnaHQ9by5oZWlnaHQrXCJweFwifWV8fHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQudXBkYXRlQ29tcG9zaXRpb25FbGVtZW50cyghMCl9KSwwKX19LGU9aShbbigyLHMuSUJ1ZmZlclNlcnZpY2UpLG4oMyxzLklPcHRpb25zU2VydmljZSksbig0LG8uSUNoYXJTaXplU2VydmljZSksbig1LHMuSUNvcmVTZXJ2aWNlKV0sZSl9KCk7dC5Db21wb3NpdGlvbkhlbHBlcj1hfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGksbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9aShlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHIucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyByKX0pLG89dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQscixpKXt2YXIgbixvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09aT9pPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTppO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixpKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShuPWVbYV0pJiYocz0obzwzP24ocyk6bz4zP24odCxyLHMpOm4odCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30scz10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7dChyLGksZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlZpZXdwb3J0PXZvaWQgMDt2YXIgYT1yKDIpLGM9cig3KSxsPXIoNSksaD1yKDEpLHU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIsaSxuLG8scyxhKXt2YXIgbD1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGwuX3Njcm9sbExpbmVzPXQsbC5fdmlld3BvcnRFbGVtZW50PXIsbC5fc2Nyb2xsQXJlYT1pLGwuX2J1ZmZlclNlcnZpY2U9bixsLl9vcHRpb25zU2VydmljZT1vLGwuX2NoYXJTaXplU2VydmljZT1zLGwuX3JlbmRlclNlcnZpY2U9YSxsLnNjcm9sbEJhcldpZHRoPTAsbC5fY3VycmVudFJvd0hlaWdodD0wLGwuX2xhc3RSZWNvcmRlZEJ1ZmZlckxlbmd0aD0wLGwuX2xhc3RSZWNvcmRlZFZpZXdwb3J0SGVpZ2h0PTAsbC5fbGFzdFJlY29yZGVkQnVmZmVySGVpZ2h0PTAsbC5fbGFzdFRvdWNoWT0wLGwuX2xhc3RTY3JvbGxUb3A9MCxsLl93aGVlbFBhcnRpYWxTY3JvbGw9MCxsLl9yZWZyZXNoQW5pbWF0aW9uRnJhbWU9bnVsbCxsLl9pZ25vcmVOZXh0U2Nyb2xsRXZlbnQ9ITEsbC5zY3JvbGxCYXJXaWR0aD1sLl92aWV3cG9ydEVsZW1lbnQub2Zmc2V0V2lkdGgtbC5fc2Nyb2xsQXJlYS5vZmZzZXRXaWR0aHx8MTUsbC5yZWdpc3RlcihjLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcihsLl92aWV3cG9ydEVsZW1lbnQsXCJzY3JvbGxcIixsLl9vblNjcm9sbC5iaW5kKGwpKSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbC5zeW5jU2Nyb2xsQXJlYSgpfSksMCksbH1yZXR1cm4gbih0LGUpLHQucHJvdG90eXBlLm9uVGhlbWVDaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5fdmlld3BvcnRFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLmJhY2tncm91bmQuY3NzfSx0LnByb3RvdHlwZS5fcmVmcmVzaD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGUpcmV0dXJuIHRoaXMuX2lubmVyUmVmcmVzaCgpLHZvaWQobnVsbCE9PXRoaXMuX3JlZnJlc2hBbmltYXRpb25GcmFtZSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVmcmVzaEFuaW1hdGlvbkZyYW1lKSk7bnVsbD09PXRoaXMuX3JlZnJlc2hBbmltYXRpb25GcmFtZSYmKHRoaXMuX3JlZnJlc2hBbmltYXRpb25GcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2lubmVyUmVmcmVzaCgpfSkpKX0sdC5wcm90b3R5cGUuX2lubmVyUmVmcmVzaD1mdW5jdGlvbigpe2lmKHRoaXMuX2NoYXJTaXplU2VydmljZS5oZWlnaHQ+MCl7dGhpcy5fY3VycmVudFJvd0hlaWdodD10aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuc2NhbGVkQ2VsbEhlaWdodC93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLl9sYXN0UmVjb3JkZWRWaWV3cG9ydEhlaWdodD10aGlzLl92aWV3cG9ydEVsZW1lbnQub2Zmc2V0SGVpZ2h0O3ZhciBlPU1hdGgucm91bmQodGhpcy5fY3VycmVudFJvd0hlaWdodCp0aGlzLl9sYXN0UmVjb3JkZWRCdWZmZXJMZW5ndGgpKyh0aGlzLl9sYXN0UmVjb3JkZWRWaWV3cG9ydEhlaWdodC10aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuY2FudmFzSGVpZ2h0KTt0aGlzLl9sYXN0UmVjb3JkZWRCdWZmZXJIZWlnaHQhPT1lJiYodGhpcy5fbGFzdFJlY29yZGVkQnVmZmVySGVpZ2h0PWUsdGhpcy5fc2Nyb2xsQXJlYS5zdHlsZS5oZWlnaHQ9dGhpcy5fbGFzdFJlY29yZGVkQnVmZmVySGVpZ2h0K1wicHhcIil9dmFyIHQ9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3AqdGhpcy5fY3VycmVudFJvd0hlaWdodDt0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wIT09dCYmKHRoaXMuX2lnbm9yZU5leHRTY3JvbGxFdmVudD0hMCx0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wPXQpLHRoaXMuX3JlZnJlc2hBbmltYXRpb25GcmFtZT1udWxsfSx0LnByb3RvdHlwZS5zeW5jU2Nyb2xsQXJlYT1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksdGhpcy5fbGFzdFJlY29yZGVkQnVmZmVyTGVuZ3RoIT09dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMubGVuZ3RoKXJldHVybiB0aGlzLl9sYXN0UmVjb3JkZWRCdWZmZXJMZW5ndGg9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMubGVuZ3RoLHZvaWQgdGhpcy5fcmVmcmVzaChlKTtpZih0aGlzLl9sYXN0UmVjb3JkZWRWaWV3cG9ydEhlaWdodD09PXRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jYW52YXNIZWlnaHQpe3ZhciB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwKnRoaXMuX2N1cnJlbnRSb3dIZWlnaHQ7dGhpcy5fbGFzdFNjcm9sbFRvcD09PXQmJnRoaXMuX2xhc3RTY3JvbGxUb3A9PT10aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wJiZ0aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuc2NhbGVkQ2VsbEhlaWdodC93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz09PXRoaXMuX2N1cnJlbnRSb3dIZWlnaHR8fHRoaXMuX3JlZnJlc2goZSl9ZWxzZSB0aGlzLl9yZWZyZXNoKGUpfSx0LnByb3RvdHlwZS5fb25TY3JvbGw9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbGFzdFNjcm9sbFRvcD10aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wLHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5vZmZzZXRQYXJlbnQpaWYodGhpcy5faWdub3JlTmV4dFNjcm9sbEV2ZW50KXRoaXMuX2lnbm9yZU5leHRTY3JvbGxFdmVudD0hMTtlbHNle3ZhciB0PU1hdGgucm91bmQodGhpcy5fbGFzdFNjcm9sbFRvcC90aGlzLl9jdXJyZW50Um93SGVpZ2h0KS10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcDt0aGlzLl9zY3JvbGxMaW5lcyh0LCEwKX19LHQucHJvdG90eXBlLl9idWJibGVTY3JvbGw9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wK3RoaXMuX2xhc3RSZWNvcmRlZFZpZXdwb3J0SGVpZ2h0O3JldHVybiEodDwwJiYwIT09dGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcHx8dD4wJiZyPHRoaXMuX2xhc3RSZWNvcmRlZEJ1ZmZlckhlaWdodCl8fChlLmNhbmNlbGFibGUmJmUucHJldmVudERlZmF1bHQoKSwhMSl9LHQucHJvdG90eXBlLm9uV2hlZWw9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0UGl4ZWxzU2Nyb2xsZWQoZSk7cmV0dXJuIDAhPT10JiYodGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcCs9dCx0aGlzLl9idWJibGVTY3JvbGwoZSx0KSl9LHQucHJvdG90eXBlLl9nZXRQaXhlbHNTY3JvbGxlZD1mdW5jdGlvbihlKXtpZigwPT09ZS5kZWx0YVkpcmV0dXJuIDA7dmFyIHQ9dGhpcy5fYXBwbHlTY3JvbGxNb2RpZmllcihlLmRlbHRhWSxlKTtyZXR1cm4gZS5kZWx0YU1vZGU9PT1XaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FP3QqPXRoaXMuX2N1cnJlbnRSb3dIZWlnaHQ6ZS5kZWx0YU1vZGU9PT1XaGVlbEV2ZW50LkRPTV9ERUxUQV9QQUdFJiYodCo9dGhpcy5fY3VycmVudFJvd0hlaWdodCp0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpLHR9LHQucHJvdG90eXBlLmdldExpbmVzU2Nyb2xsZWQ9ZnVuY3Rpb24oZSl7aWYoMD09PWUuZGVsdGFZKXJldHVybiAwO3ZhciB0PXRoaXMuX2FwcGx5U2Nyb2xsTW9kaWZpZXIoZS5kZWx0YVksZSk7cmV0dXJuIGUuZGVsdGFNb2RlPT09V2hlZWxFdmVudC5ET01fREVMVEFfUElYRUw/KHQvPXRoaXMuX2N1cnJlbnRSb3dIZWlnaHQrMCx0aGlzLl93aGVlbFBhcnRpYWxTY3JvbGwrPXQsdD1NYXRoLmZsb29yKE1hdGguYWJzKHRoaXMuX3doZWVsUGFydGlhbFNjcm9sbCkpKih0aGlzLl93aGVlbFBhcnRpYWxTY3JvbGw+MD8xOi0xKSx0aGlzLl93aGVlbFBhcnRpYWxTY3JvbGwlPTEpOmUuZGVsdGFNb2RlPT09V2hlZWxFdmVudC5ET01fREVMVEFfUEFHRSYmKHQqPXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cyksdH0sdC5wcm90b3R5cGUuX2FwcGx5U2Nyb2xsTW9kaWZpZXI9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmZhc3RTY3JvbGxNb2RpZmllcjtyZXR1cm5cImFsdFwiPT09ciYmdC5hbHRLZXl8fFwiY3RybFwiPT09ciYmdC5jdHJsS2V5fHxcInNoaWZ0XCI9PT1yJiZ0LnNoaWZ0S2V5P2UqdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5mYXN0U2Nyb2xsU2Vuc2l0aXZpdHkqdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5zY3JvbGxTZW5zaXRpdml0eTplKnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuc2Nyb2xsU2Vuc2l0aXZpdHl9LHQucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihlKXt0aGlzLl9sYXN0VG91Y2hZPWUudG91Y2hlc1swXS5wYWdlWX0sdC5wcm90b3R5cGUub25Ub3VjaE1vdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbGFzdFRvdWNoWS1lLnRvdWNoZXNbMF0ucGFnZVk7cmV0dXJuIHRoaXMuX2xhc3RUb3VjaFk9ZS50b3VjaGVzWzBdLnBhZ2VZLDAhPT10JiYodGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcCs9dCx0aGlzLl9idWJibGVTY3JvbGwoZSx0KSl9LHQ9byhbcygzLGguSUJ1ZmZlclNlcnZpY2UpLHMoNCxoLklPcHRpb25zU2VydmljZSkscyg1LGwuSUNoYXJTaXplU2VydmljZSkscyg2LGwuSVJlbmRlclNlcnZpY2UpXSx0KX0oYS5EaXNwb3NhYmxlKTt0LlZpZXdwb3J0PXV9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKGUpe3JldHVybiBlLnJlcGxhY2UoL1xccj9cXG4vZyxcIlxcclwiKX1mdW5jdGlvbiBuKGUsdCl7cmV0dXJuIHQ/XCJcdTAwMWJbMjAwflwiK2UrXCJcdTAwMWJbMjAxflwiOmV9ZnVuY3Rpb24gbyhlLHQscil7ZT1uKGU9aShlKSxyLmRlY1ByaXZhdGVNb2Rlcy5icmFja2V0ZWRQYXN0ZU1vZGUpLHIudHJpZ2dlckRhdGFFdmVudChlLCEwKSx0LnZhbHVlPVwiXCJ9ZnVuY3Rpb24gcyhlLHQscil7dmFyIGk9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUuY2xpZW50WC1pLmxlZnQtMTAsbz1lLmNsaWVudFktaS50b3AtMTA7dC5zdHlsZS53aWR0aD1cIjIwcHhcIix0LnN0eWxlLmhlaWdodD1cIjIwcHhcIix0LnN0eWxlLmxlZnQ9bitcInB4XCIsdC5zdHlsZS50b3A9bytcInB4XCIsdC5zdHlsZS56SW5kZXg9XCIxMDAwXCIsdC5mb2N1cygpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQucmlnaHRDbGlja0hhbmRsZXI9dC5tb3ZlVGV4dEFyZWFVbmRlck1vdXNlQ3Vyc29yPXQucGFzdGU9dC5oYW5kbGVQYXN0ZUV2ZW50PXQuY29weUhhbmRsZXI9dC5icmFja2V0VGV4dEZvclBhc3RlPXQucHJlcGFyZVRleHRGb3JUZXJtaW5hbD12b2lkIDAsdC5wcmVwYXJlVGV4dEZvclRlcm1pbmFsPWksdC5icmFja2V0VGV4dEZvclBhc3RlPW4sdC5jb3B5SGFuZGxlcj1mdW5jdGlvbihlLHQpe2UuY2xpcGJvYXJkRGF0YSYmZS5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsdC5zZWxlY3Rpb25UZXh0KSxlLnByZXZlbnREZWZhdWx0KCl9LHQuaGFuZGxlUGFzdGVFdmVudD1mdW5jdGlvbihlLHQscil7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLmNsaXBib2FyZERhdGEmJm8oZS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpLHQscil9LHQucGFzdGU9byx0Lm1vdmVUZXh0QXJlYVVuZGVyTW91c2VDdXJzb3I9cyx0LnJpZ2h0Q2xpY2tIYW5kbGVyPWZ1bmN0aW9uKGUsdCxyLGksbil7cyhlLHQsciksbiYmIWkuaXNDbGlja0luU2VsZWN0aW9uKGUpJiZpLnNlbGVjdFdvcmRBdEN1cnNvcihlKSx0LnZhbHVlPWkuc2VsZWN0aW9uVGV4dCx0LnNlbGVjdCgpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBpLG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWkoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkVzY2FwZVNlcXVlbmNlUGFyc2VyPXQuVlQ1MDBfVFJBTlNJVElPTl9UQUJMRT10LlRyYW5zaXRpb25UYWJsZT12b2lkIDA7dmFyIG89cigyKSxzPXIoMTUpLGE9cigyMSksYz1yKDIyKSxsPXIoMjQpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudGFibGU9bmV3IFVpbnQ4QXJyYXkoZSl9cmV0dXJuIGUucHJvdG90eXBlLnNldERlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtzLmZpbGwodGhpcy50YWJsZSxlPDw0fHQpfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0LHIsaSl7dGhpcy50YWJsZVt0PDw4fGVdPXI8PDR8aX0sZS5wcm90b3R5cGUuYWRkTWFueT1mdW5jdGlvbihlLHQscixpKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLnRhYmxlW3Q8PDh8ZVtuXV09cjw8NHxpfSxlfSgpO3QuVHJhbnNpdGlvblRhYmxlPWg7dC5WVDUwMF9UUkFOU0lUSU9OX1RBQkxFPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IGgoNDA5NSksdD1BcnJheS5hcHBseShudWxsLEFycmF5KDI1NikpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pKSxyPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc2xpY2UoZSxyKX0saT1yKDMyLDEyNyksbj1yKDAsMjQpO24ucHVzaCgyNSksbi5wdXNoLmFwcGx5KG4scigyOCwzMikpO3ZhciBvLHM9cigwLDE0KTtmb3IobyBpbiBlLnNldERlZmF1bHQoMSwwKSxlLmFkZE1hbnkoaSwwLDIsMCkscyllLmFkZE1hbnkoWzI0LDI2LDE1MywxNTRdLG8sMywwKSxlLmFkZE1hbnkocigxMjgsMTQ0KSxvLDMsMCksZS5hZGRNYW55KHIoMTQ0LDE1MiksbywzLDApLGUuYWRkKDE1NixvLDAsMCksZS5hZGQoMjcsbywxMSwxKSxlLmFkZCgxNTcsbyw0LDgpLGUuYWRkTWFueShbMTUyLDE1OCwxNTldLG8sMCw3KSxlLmFkZCgxNTUsbywxMSwzKSxlLmFkZCgxNDQsbywxMSw5KTtyZXR1cm4gZS5hZGRNYW55KG4sMCwzLDApLGUuYWRkTWFueShuLDEsMywxKSxlLmFkZCgxMjcsMSwwLDEpLGUuYWRkTWFueShuLDgsMCw4KSxlLmFkZE1hbnkobiwzLDMsMyksZS5hZGQoMTI3LDMsMCwzKSxlLmFkZE1hbnkobiw0LDMsNCksZS5hZGQoMTI3LDQsMCw0KSxlLmFkZE1hbnkobiw2LDMsNiksZS5hZGRNYW55KG4sNSwzLDUpLGUuYWRkKDEyNyw1LDAsNSksZS5hZGRNYW55KG4sMiwzLDIpLGUuYWRkKDEyNywyLDAsMiksZS5hZGQoOTMsMSw0LDgpLGUuYWRkTWFueShpLDgsNSw4KSxlLmFkZCgxMjcsOCw1LDgpLGUuYWRkTWFueShbMTU2LDI3LDI0LDI2LDddLDgsNiwwKSxlLmFkZE1hbnkocigyOCwzMiksOCwwLDgpLGUuYWRkTWFueShbODgsOTQsOTVdLDEsMCw3KSxlLmFkZE1hbnkoaSw3LDAsNyksZS5hZGRNYW55KG4sNywwLDcpLGUuYWRkKDE1Niw3LDAsMCksZS5hZGQoMTI3LDcsMCw3KSxlLmFkZCg5MSwxLDExLDMpLGUuYWRkTWFueShyKDY0LDEyNyksMyw3LDApLGUuYWRkTWFueShyKDQ4LDYwKSwzLDgsNCksZS5hZGRNYW55KFs2MCw2MSw2Miw2M10sMyw5LDQpLGUuYWRkTWFueShyKDQ4LDYwKSw0LDgsNCksZS5hZGRNYW55KHIoNjQsMTI3KSw0LDcsMCksZS5hZGRNYW55KFs2MCw2MSw2Miw2M10sNCwwLDYpLGUuYWRkTWFueShyKDMyLDY0KSw2LDAsNiksZS5hZGQoMTI3LDYsMCw2KSxlLmFkZE1hbnkocig2NCwxMjcpLDYsMCwwKSxlLmFkZE1hbnkocigzMiw0OCksMyw5LDUpLGUuYWRkTWFueShyKDMyLDQ4KSw1LDksNSksZS5hZGRNYW55KHIoNDgsNjQpLDUsMCw2KSxlLmFkZE1hbnkocig2NCwxMjcpLDUsNywwKSxlLmFkZE1hbnkocigzMiw0OCksNCw5LDUpLGUuYWRkTWFueShyKDMyLDQ4KSwxLDksMiksZS5hZGRNYW55KHIoMzIsNDgpLDIsOSwyKSxlLmFkZE1hbnkocig0OCwxMjcpLDIsMTAsMCksZS5hZGRNYW55KHIoNDgsODApLDEsMTAsMCksZS5hZGRNYW55KHIoODEsODgpLDEsMTAsMCksZS5hZGRNYW55KFs4OSw5MCw5Ml0sMSwxMCwwKSxlLmFkZE1hbnkocig5NiwxMjcpLDEsMTAsMCksZS5hZGQoODAsMSwxMSw5KSxlLmFkZE1hbnkobiw5LDAsOSksZS5hZGQoMTI3LDksMCw5KSxlLmFkZE1hbnkocigyOCwzMiksOSwwLDkpLGUuYWRkTWFueShyKDMyLDQ4KSw5LDksMTIpLGUuYWRkTWFueShyKDQ4LDYwKSw5LDgsMTApLGUuYWRkTWFueShbNjAsNjEsNjIsNjNdLDksOSwxMCksZS5hZGRNYW55KG4sMTEsMCwxMSksZS5hZGRNYW55KHIoMzIsMTI4KSwxMSwwLDExKSxlLmFkZE1hbnkocigyOCwzMiksMTEsMCwxMSksZS5hZGRNYW55KG4sMTAsMCwxMCksZS5hZGQoMTI3LDEwLDAsMTApLGUuYWRkTWFueShyKDI4LDMyKSwxMCwwLDEwKSxlLmFkZE1hbnkocig0OCw2MCksMTAsOCwxMCksZS5hZGRNYW55KFs2MCw2MSw2Miw2M10sMTAsMCwxMSksZS5hZGRNYW55KHIoMzIsNDgpLDEwLDksMTIpLGUuYWRkTWFueShuLDEyLDAsMTIpLGUuYWRkKDEyNywxMiwwLDEyKSxlLmFkZE1hbnkocigyOCwzMiksMTIsMCwxMiksZS5hZGRNYW55KHIoMzIsNDgpLDEyLDksMTIpLGUuYWRkTWFueShyKDQ4LDY0KSwxMiwwLDExKSxlLmFkZE1hbnkocig2NCwxMjcpLDEyLDEyLDEzKSxlLmFkZE1hbnkocig2NCwxMjcpLDEwLDEyLDEzKSxlLmFkZE1hbnkocig2NCwxMjcpLDksMTIsMTMpLGUuYWRkTWFueShuLDEzLDEzLDEzKSxlLmFkZE1hbnkoaSwxMywxMywxMyksZS5hZGQoMTI3LDEzLDAsMTMpLGUuYWRkTWFueShbMjcsMTU2LDI0LDI2XSwxMywxNCwwKSxlLmFkZCgxNjAsMCwyLDApLGUuYWRkKDE2MCw4LDUsOCksZS5hZGQoMTYwLDYsMCw2KSxlLmFkZCgxNjAsMTEsMCwxMSksZS5hZGQoMTYwLDEzLDEzLDEzKSxlfSgpO3ZhciB1PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7dm9pZCAwPT09ciYmKHI9dC5WVDUwMF9UUkFOU0lUSU9OX1RBQkxFKTt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3RyYW5zaXRpb25zPXIsaS5pbml0aWFsU3RhdGU9MCxpLmN1cnJlbnRTdGF0ZT1pLmluaXRpYWxTdGF0ZSxpLl9wYXJhbXM9bmV3IGEuUGFyYW1zLGkuX3BhcmFtcy5hZGRQYXJhbSgwKSxpLl9jb2xsZWN0PTAsaS5wcmVjZWRpbmdDb2RlcG9pbnQ9MCxpLl9wcmludEhhbmRsZXJGYj1mdW5jdGlvbihlLHQscil7fSxpLl9leGVjdXRlSGFuZGxlckZiPWZ1bmN0aW9uKGUpe30saS5fY3NpSGFuZGxlckZiPWZ1bmN0aW9uKGUsdCl7fSxpLl9lc2NIYW5kbGVyRmI9ZnVuY3Rpb24oZSl7fSxpLl9lcnJvckhhbmRsZXJGYj1mdW5jdGlvbihlKXtyZXR1cm4gZX0saS5fcHJpbnRIYW5kbGVyPWkuX3ByaW50SGFuZGxlckZiLGkuX2V4ZWN1dGVIYW5kbGVycz1PYmplY3QuY3JlYXRlKG51bGwpLGkuX2NzaUhhbmRsZXJzPU9iamVjdC5jcmVhdGUobnVsbCksaS5fZXNjSGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSxpLl9vc2NQYXJzZXI9bmV3IGMuT3NjUGFyc2VyLGkuX2Rjc1BhcnNlcj1uZXcgbC5EY3NQYXJzZXIsaS5fZXJyb3JIYW5kbGVyPWkuX2Vycm9ySGFuZGxlckZiLGkuc2V0RXNjSGFuZGxlcih7ZmluYWw6XCJcXFxcXCJ9LChmdW5jdGlvbigpe30pKSxpfXJldHVybiBuKHIsZSksci5wcm90b3R5cGUuX2lkZW50aWZpZXI9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1bNjQsMTI2XSk7dmFyIHI9MDtpZihlLnByZWZpeCl7aWYoZS5wcmVmaXgubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgYnl0ZSBhcyBwcmVmaXggc3VwcG9ydGVkXCIpO2lmKChyPWUucHJlZml4LmNoYXJDb2RlQXQoMCkpJiY2MD5yfHxyPjYzKXRocm93IG5ldyBFcnJvcihcInByZWZpeCBtdXN0IGJlIGluIHJhbmdlIDB4M2MgLi4gMHgzZlwiKX1pZihlLmludGVybWVkaWF0ZXMpe2lmKGUuaW50ZXJtZWRpYXRlcy5sZW5ndGg+Mil0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IHR3byBieXRlcyBhcyBpbnRlcm1lZGlhdGVzIGFyZSBzdXBwb3J0ZWRcIik7Zm9yKHZhciBpPTA7aTxlLmludGVybWVkaWF0ZXMubGVuZ3RoOysraSl7dmFyIG49ZS5pbnRlcm1lZGlhdGVzLmNoYXJDb2RlQXQoaSk7aWYoMzI+bnx8bj40Nyl0aHJvdyBuZXcgRXJyb3IoXCJpbnRlcm1lZGlhdGUgbXVzdCBiZSBpbiByYW5nZSAweDIwIC4uIDB4MmZcIik7cjw8PTgscnw9bn19aWYoMSE9PWUuZmluYWwubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImZpbmFsIG11c3QgYmUgYSBzaW5nbGUgYnl0ZVwiKTt2YXIgbz1lLmZpbmFsLmNoYXJDb2RlQXQoMCk7aWYodFswXT5vfHxvPnRbMV0pdGhyb3cgbmV3IEVycm9yKFwiZmluYWwgbXVzdCBiZSBpbiByYW5nZSBcIit0WzBdK1wiIC4uIFwiK3RbMV0pO3JldHVybiByPDw9OCxyfD1vfSxyLnByb3RvdHlwZS5pZGVudFRvU3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlOyl0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmZSkpLGU+Pj04O3JldHVybiB0LnJldmVyc2UoKS5qb2luKFwiXCIpfSxyLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fY3NpSGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9leGVjdXRlSGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9lc2NIYW5kbGVycz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX29zY1BhcnNlci5kaXNwb3NlKCksdGhpcy5fZGNzUGFyc2VyLmRpc3Bvc2UoKX0sci5wcm90b3R5cGUuc2V0UHJpbnRIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuX3ByaW50SGFuZGxlcj1lfSxyLnByb3RvdHlwZS5jbGVhclByaW50SGFuZGxlcj1mdW5jdGlvbigpe3RoaXMuX3ByaW50SGFuZGxlcj10aGlzLl9wcmludEhhbmRsZXJGYn0sci5wcm90b3R5cGUuYWRkRXNjSGFuZGxlcj1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2lkZW50aWZpZXIoZSxbNDgsMTI2XSk7dm9pZCAwPT09dGhpcy5fZXNjSGFuZGxlcnNbcl0mJih0aGlzLl9lc2NIYW5kbGVyc1tyXT1bXSk7dmFyIGk9dGhpcy5fZXNjSGFuZGxlcnNbcl07cmV0dXJuIGkucHVzaCh0KSx7ZGlzcG9zZTpmdW5jdGlvbigpe3ZhciBlPWkuaW5kZXhPZih0KTstMSE9PWUmJmkuc3BsaWNlKGUsMSl9fX0sci5wcm90b3R5cGUuc2V0RXNjSGFuZGxlcj1mdW5jdGlvbihlLHQpe3RoaXMuX2VzY0hhbmRsZXJzW3RoaXMuX2lkZW50aWZpZXIoZSxbNDgsMTI2XSldPVt0XX0sci5wcm90b3R5cGUuY2xlYXJFc2NIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuX2VzY0hhbmRsZXJzW3RoaXMuX2lkZW50aWZpZXIoZSxbNDgsMTI2XSldJiZkZWxldGUgdGhpcy5fZXNjSGFuZGxlcnNbdGhpcy5faWRlbnRpZmllcihlLFs0OCwxMjZdKV19LHIucHJvdG90eXBlLnNldEVzY0hhbmRsZXJGYWxsYmFjaz1mdW5jdGlvbihlKXt0aGlzLl9lc2NIYW5kbGVyRmI9ZX0sci5wcm90b3R5cGUuc2V0RXhlY3V0ZUhhbmRsZXI9ZnVuY3Rpb24oZSx0KXt0aGlzLl9leGVjdXRlSGFuZGxlcnNbZS5jaGFyQ29kZUF0KDApXT10fSxyLnByb3RvdHlwZS5jbGVhckV4ZWN1dGVIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuX2V4ZWN1dGVIYW5kbGVyc1tlLmNoYXJDb2RlQXQoMCldJiZkZWxldGUgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzW2UuY2hhckNvZGVBdCgwKV19LHIucHJvdG90eXBlLnNldEV4ZWN1dGVIYW5kbGVyRmFsbGJhY2s9ZnVuY3Rpb24oZSl7dGhpcy5fZXhlY3V0ZUhhbmRsZXJGYj1lfSxyLnByb3RvdHlwZS5hZGRDc2lIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5faWRlbnRpZmllcihlKTt2b2lkIDA9PT10aGlzLl9jc2lIYW5kbGVyc1tyXSYmKHRoaXMuX2NzaUhhbmRsZXJzW3JdPVtdKTt2YXIgaT10aGlzLl9jc2lIYW5kbGVyc1tyXTtyZXR1cm4gaS5wdXNoKHQpLHtkaXNwb3NlOmZ1bmN0aW9uKCl7dmFyIGU9aS5pbmRleE9mKHQpOy0xIT09ZSYmaS5zcGxpY2UoZSwxKX19fSxyLnByb3RvdHlwZS5zZXRDc2lIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7dGhpcy5fY3NpSGFuZGxlcnNbdGhpcy5faWRlbnRpZmllcihlKV09W3RdfSxyLnByb3RvdHlwZS5jbGVhckNzaUhhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5fY3NpSGFuZGxlcnNbdGhpcy5faWRlbnRpZmllcihlKV0mJmRlbGV0ZSB0aGlzLl9jc2lIYW5kbGVyc1t0aGlzLl9pZGVudGlmaWVyKGUpXX0sci5wcm90b3R5cGUuc2V0Q3NpSGFuZGxlckZhbGxiYWNrPWZ1bmN0aW9uKGUpe3RoaXMuX2NzaUhhbmRsZXJGYj1lfSxyLnByb3RvdHlwZS5hZGREY3NIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2Rjc1BhcnNlci5hZGRIYW5kbGVyKHRoaXMuX2lkZW50aWZpZXIoZSksdCl9LHIucHJvdG90eXBlLnNldERjc0hhbmRsZXI9ZnVuY3Rpb24oZSx0KXt0aGlzLl9kY3NQYXJzZXIuc2V0SGFuZGxlcih0aGlzLl9pZGVudGlmaWVyKGUpLHQpfSxyLnByb3RvdHlwZS5jbGVhckRjc0hhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5fZGNzUGFyc2VyLmNsZWFySGFuZGxlcih0aGlzLl9pZGVudGlmaWVyKGUpKX0sci5wcm90b3R5cGUuc2V0RGNzSGFuZGxlckZhbGxiYWNrPWZ1bmN0aW9uKGUpe3RoaXMuX2Rjc1BhcnNlci5zZXRIYW5kbGVyRmFsbGJhY2soZSl9LHIucHJvdG90eXBlLmFkZE9zY0hhbmRsZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fb3NjUGFyc2VyLmFkZEhhbmRsZXIoZSx0KX0sci5wcm90b3R5cGUuc2V0T3NjSGFuZGxlcj1mdW5jdGlvbihlLHQpe3RoaXMuX29zY1BhcnNlci5zZXRIYW5kbGVyKGUsdCl9LHIucHJvdG90eXBlLmNsZWFyT3NjSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLl9vc2NQYXJzZXIuY2xlYXJIYW5kbGVyKGUpfSxyLnByb3RvdHlwZS5zZXRPc2NIYW5kbGVyRmFsbGJhY2s9ZnVuY3Rpb24oZSl7dGhpcy5fb3NjUGFyc2VyLnNldEhhbmRsZXJGYWxsYmFjayhlKX0sci5wcm90b3R5cGUuc2V0RXJyb3JIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuX2Vycm9ySGFuZGxlcj1lfSxyLnByb3RvdHlwZS5jbGVhckVycm9ySGFuZGxlcj1mdW5jdGlvbigpe3RoaXMuX2Vycm9ySGFuZGxlcj10aGlzLl9lcnJvckhhbmRsZXJGYn0sci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTdGF0ZT10aGlzLmluaXRpYWxTdGF0ZSx0aGlzLl9vc2NQYXJzZXIucmVzZXQoKSx0aGlzLl9kY3NQYXJzZXIucmVzZXQoKSx0aGlzLl9wYXJhbXMucmVzZXQoKSx0aGlzLl9wYXJhbXMuYWRkUGFyYW0oMCksdGhpcy5fY29sbGVjdD0wLHRoaXMucHJlY2VkaW5nQ29kZXBvaW50PTB9LHIucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsaT0wLG49dGhpcy5jdXJyZW50U3RhdGUsbz10aGlzLl9vc2NQYXJzZXIscz10aGlzLl9kY3NQYXJzZXIsYT10aGlzLl9jb2xsZWN0LGM9dGhpcy5fcGFyYW1zLGw9dGhpcy5fdHJhbnNpdGlvbnMudGFibGUsaD0wO2g8dDsrK2gpe3N3aXRjaCgoaT1sW248PDh8KChyPWVbaF0pPDE2MD9yOjE2MCldKT4+NCl7Y2FzZSAyOmZvcih2YXIgdT1oKzE7OysrdSl7aWYodT49dHx8KHI9ZVt1XSk8MzJ8fHI+MTI2JiZyPDE2MCl7dGhpcy5fcHJpbnRIYW5kbGVyKGUsaCx1KSxoPXUtMTticmVha31pZigrK3U+PXR8fChyPWVbdV0pPDMyfHxyPjEyNiYmcjwxNjApe3RoaXMuX3ByaW50SGFuZGxlcihlLGgsdSksaD11LTE7YnJlYWt9aWYoKyt1Pj10fHwocj1lW3VdKTwzMnx8cj4xMjYmJnI8MTYwKXt0aGlzLl9wcmludEhhbmRsZXIoZSxoLHUpLGg9dS0xO2JyZWFrfWlmKCsrdT49dHx8KHI9ZVt1XSk8MzJ8fHI+MTI2JiZyPDE2MCl7dGhpcy5fcHJpbnRIYW5kbGVyKGUsaCx1KSxoPXUtMTticmVha319YnJlYWs7Y2FzZSAzOnRoaXMuX2V4ZWN1dGVIYW5kbGVyc1tyXT90aGlzLl9leGVjdXRlSGFuZGxlcnNbcl0oKTp0aGlzLl9leGVjdXRlSGFuZGxlckZiKHIpLHRoaXMucHJlY2VkaW5nQ29kZXBvaW50PTA7YnJlYWs7Y2FzZSAwOmJyZWFrO2Nhc2UgMTppZih0aGlzLl9lcnJvckhhbmRsZXIoe3Bvc2l0aW9uOmgsY29kZTpyLGN1cnJlbnRTdGF0ZTpuLGNvbGxlY3Q6YSxwYXJhbXM6YyxhYm9ydDohMX0pLmFib3J0KXJldHVybjticmVhaztjYXNlIDc6Zm9yKHZhciBmPXRoaXMuX2NzaUhhbmRsZXJzW2E8PDh8cl0sXz1mP2YubGVuZ3RoLTE6LTE7Xz49MCYmITE9PT1mW19dKGMpO18tLSk7XzwwJiZ0aGlzLl9jc2lIYW5kbGVyRmIoYTw8OHxyLGMpLHRoaXMucHJlY2VkaW5nQ29kZXBvaW50PTA7YnJlYWs7Y2FzZSA4OmRve3N3aXRjaChyKXtjYXNlIDU5OmMuYWRkUGFyYW0oMCk7YnJlYWs7Y2FzZSA1ODpjLmFkZFN1YlBhcmFtKC0xKTticmVhaztkZWZhdWx0OmMuYWRkRGlnaXQoci00OCl9fXdoaWxlKCsraDx0JiYocj1lW2hdKT40NyYmcjw2MCk7aC0tO2JyZWFrO2Nhc2UgOTphPDw9OCxhfD1yO2JyZWFrO2Nhc2UgMTA6Zm9yKHZhciBkPXRoaXMuX2VzY0hhbmRsZXJzW2E8PDh8cl0scD1kP2QubGVuZ3RoLTE6LTE7cD49MCYmITE9PT1kW3BdKCk7cC0tKTtwPDAmJnRoaXMuX2VzY0hhbmRsZXJGYihhPDw4fHIpLHRoaXMucHJlY2VkaW5nQ29kZXBvaW50PTA7YnJlYWs7Y2FzZSAxMTpjLnJlc2V0KCksYy5hZGRQYXJhbSgwKSxhPTA7YnJlYWs7Y2FzZSAxMjpzLmhvb2soYTw8OHxyLGMpO2JyZWFrO2Nhc2UgMTM6Zm9yKHZhciB2PWgrMTs7Kyt2KWlmKHY+PXR8fDI0PT09KHI9ZVt2XSl8fDI2PT09cnx8Mjc9PT1yfHxyPjEyNyYmcjwxNjApe3MucHV0KGUsaCx2KSxoPXYtMTticmVha31icmVhaztjYXNlIDE0OnMudW5ob29rKDI0IT09ciYmMjYhPT1yKSwyNz09PXImJihpfD0xKSxjLnJlc2V0KCksYy5hZGRQYXJhbSgwKSxhPTAsdGhpcy5wcmVjZWRpbmdDb2RlcG9pbnQ9MDticmVhaztjYXNlIDQ6by5zdGFydCgpO2JyZWFrO2Nhc2UgNTpmb3IodmFyIGc9aCsxOztnKyspaWYoZz49dHx8KHI9ZVtnXSk8MzJ8fHI+MTI3JiZyPD0xNTkpe28ucHV0KGUsaCxnKSxoPWctMTticmVha31icmVhaztjYXNlIDY6by5lbmQoMjQhPT1yJiYyNiE9PXIpLDI3PT09ciYmKGl8PTEpLGMucmVzZXQoKSxjLmFkZFBhcmFtKDApLGE9MCx0aGlzLnByZWNlZGluZ0NvZGVwb2ludD0wfW49MTUmaX10aGlzLl9jb2xsZWN0PWEsdGhpcy5jdXJyZW50U3RhdGU9bn0scn0oby5EaXNwb3NhYmxlKTt0LkVzY2FwZVNlcXVlbmNlUGFyc2VyPXV9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaSxuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoaT1mdW5jdGlvbihlLHQpe3JldHVybihpPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1pKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSksbz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBuLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1pP2k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOmk7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLGkpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKG49ZVthXSkmJihzPShvPDM/bihzKTpvPjM/bih0LHIscyk6bih0LHIpKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfSxzPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixpKXt0KHIsaSxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmVuZGVyZXI9dm9pZCAwO3ZhciBhPXIoNDEpLGM9cig0NyksbD1yKDQ4KSxoPXIoNDkpLHU9cigyOSksZj1yKDIpLF89cig1KSxkPXIoMSkscD1yKDI1KSx2PXIoMCksZz0xLHk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIsaSxuLG8scyxmLF8sZCl7dmFyIHA9ZS5jYWxsKHRoaXMpfHx0aGlzO3AuX2NvbG9ycz10LHAuX3NjcmVlbkVsZW1lbnQ9cixwLl9idWZmZXJTZXJ2aWNlPW8scC5fY2hhclNpemVTZXJ2aWNlPXMscC5fb3B0aW9uc1NlcnZpY2U9ZixwLl9pZD1nKysscC5fb25SZXF1ZXN0UmVkcmF3PW5ldyB2LkV2ZW50RW1pdHRlcjt2YXIgeT1wLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmFsbG93VHJhbnNwYXJlbmN5O3JldHVybiBwLl9jaGFyYWN0ZXJKb2luZXJSZWdpc3RyeT1uZXcgdS5DaGFyYWN0ZXJKb2luZXJSZWdpc3RyeShwLl9idWZmZXJTZXJ2aWNlKSxwLl9yZW5kZXJMYXllcnM9W25ldyBhLlRleHRSZW5kZXJMYXllcihwLl9zY3JlZW5FbGVtZW50LDAscC5fY29sb3JzLHAuX2NoYXJhY3RlckpvaW5lclJlZ2lzdHJ5LHkscC5faWQscC5fYnVmZmVyU2VydmljZSxmKSxuZXcgYy5TZWxlY3Rpb25SZW5kZXJMYXllcihwLl9zY3JlZW5FbGVtZW50LDEscC5fY29sb3JzLHAuX2lkLHAuX2J1ZmZlclNlcnZpY2UsZiksbmV3IGguTGlua1JlbmRlckxheWVyKHAuX3NjcmVlbkVsZW1lbnQsMixwLl9jb2xvcnMscC5faWQsaSxuLHAuX2J1ZmZlclNlcnZpY2UsZiksbmV3IGwuQ3Vyc29yUmVuZGVyTGF5ZXIocC5fc2NyZWVuRWxlbWVudCwzLHAuX2NvbG9ycyxwLl9pZCxwLl9vblJlcXVlc3RSZWRyYXcscC5fYnVmZmVyU2VydmljZSxmLF8sZCldLHAuZGltZW5zaW9ucz17c2NhbGVkQ2hhcldpZHRoOjAsc2NhbGVkQ2hhckhlaWdodDowLHNjYWxlZENlbGxXaWR0aDowLHNjYWxlZENlbGxIZWlnaHQ6MCxzY2FsZWRDaGFyTGVmdDowLHNjYWxlZENoYXJUb3A6MCxzY2FsZWRDYW52YXNXaWR0aDowLHNjYWxlZENhbnZhc0hlaWdodDowLGNhbnZhc1dpZHRoOjAsY2FudmFzSGVpZ2h0OjAsYWN0dWFsQ2VsbFdpZHRoOjAsYWN0dWFsQ2VsbEhlaWdodDowfSxwLl9kZXZpY2VQaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHAuX3VwZGF0ZURpbWVuc2lvbnMoKSxwLm9uT3B0aW9uc0NoYW5nZWQoKSxwfXJldHVybiBuKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25SZXF1ZXN0UmVkcmF3XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblJlcXVlc3RSZWRyYXcuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9dGhpcy5fcmVuZGVyTGF5ZXJzO3Q8ci5sZW5ndGg7dCsrKXtyW3RdLmRpc3Bvc2UoKX1lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcykscC5yZW1vdmVUZXJtaW5hbEZyb21DYWNoZSh0aGlzLl9pZCl9LHQucHJvdG90eXBlLm9uRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZT1mdW5jdGlvbigpe3RoaXMuX2RldmljZVBpeGVsUmF0aW8hPT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyYmKHRoaXMuX2RldmljZVBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW8sdGhpcy5vblJlc2l6ZSh0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzKSl9LHQucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbihlKXt0aGlzLl9jb2xvcnM9ZTtmb3IodmFyIHQ9MCxyPXRoaXMuX3JlbmRlckxheWVyczt0PHIubGVuZ3RoO3QrKyl7dmFyIGk9clt0XTtpLnNldENvbG9ycyh0aGlzLl9jb2xvcnMpLGkucmVzZXQoKX19LHQucHJvdG90eXBlLm9uUmVzaXplPWZ1bmN0aW9uKGUsdCl7dGhpcy5fdXBkYXRlRGltZW5zaW9ucygpO2Zvcih2YXIgcj0wLGk9dGhpcy5fcmVuZGVyTGF5ZXJzO3I8aS5sZW5ndGg7cisrKXtpW3JdLnJlc2l6ZSh0aGlzLmRpbWVuc2lvbnMpfXRoaXMuX3NjcmVlbkVsZW1lbnQuc3R5bGUud2lkdGg9dGhpcy5kaW1lbnNpb25zLmNhbnZhc1dpZHRoK1wicHhcIix0aGlzLl9zY3JlZW5FbGVtZW50LnN0eWxlLmhlaWdodD10aGlzLmRpbWVuc2lvbnMuY2FudmFzSGVpZ2h0K1wicHhcIn0sdC5wcm90b3R5cGUub25DaGFyU2l6ZUNoYW5nZWQ9ZnVuY3Rpb24oKXt0aGlzLm9uUmVzaXplKHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpfSx0LnByb3RvdHlwZS5vbkJsdXI9ZnVuY3Rpb24oKXt0aGlzLl9ydW5PcGVyYXRpb24oKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9uQmx1cigpfSkpfSx0LnByb3RvdHlwZS5vbkZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fcnVuT3BlcmF0aW9uKChmdW5jdGlvbihlKXtyZXR1cm4gZS5vbkZvY3VzKCl9KSl9LHQucHJvdG90eXBlLm9uU2VsZWN0aW9uQ2hhbmdlZD1mdW5jdGlvbihlLHQscil7dm9pZCAwPT09ciYmKHI9ITEpLHRoaXMuX3J1bk9wZXJhdGlvbigoZnVuY3Rpb24oaSl7cmV0dXJuIGkub25TZWxlY3Rpb25DaGFuZ2VkKGUsdCxyKX0pKX0sdC5wcm90b3R5cGUub25DdXJzb3JNb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fcnVuT3BlcmF0aW9uKChmdW5jdGlvbihlKXtyZXR1cm4gZS5vbkN1cnNvck1vdmUoKX0pKX0sdC5wcm90b3R5cGUub25PcHRpb25zQ2hhbmdlZD1mdW5jdGlvbigpe3RoaXMuX3J1bk9wZXJhdGlvbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUub25PcHRpb25zQ2hhbmdlZCgpfSkpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX3J1bk9wZXJhdGlvbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVzZXQoKX0pKX0sdC5wcm90b3R5cGUuX3J1bk9wZXJhdGlvbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPXRoaXMuX3JlbmRlckxheWVyczt0PHIubGVuZ3RoO3QrKyl7ZShyW3RdKX19LHQucHJvdG90eXBlLnJlbmRlclJvd3M9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MCxpPXRoaXMuX3JlbmRlckxheWVycztyPGkubGVuZ3RoO3IrKyl7aVtyXS5vbkdyaWRDaGFuZ2VkKGUsdCl9fSx0LnByb3RvdHlwZS5fdXBkYXRlRGltZW5zaW9ucz1mdW5jdGlvbigpe3RoaXMuX2NoYXJTaXplU2VydmljZS5oYXNWYWxpZFNpemUmJih0aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2hhcldpZHRoPU1hdGguZmxvb3IodGhpcy5fY2hhclNpemVTZXJ2aWNlLndpZHRoKndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2hhckhlaWdodD1NYXRoLmNlaWwodGhpcy5fY2hhclNpemVTZXJ2aWNlLmhlaWdodCp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5kaW1lbnNpb25zLnNjYWxlZENlbGxIZWlnaHQ9TWF0aC5mbG9vcih0aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2hhckhlaWdodCp0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxpbmVIZWlnaHQpLHRoaXMuZGltZW5zaW9ucy5zY2FsZWRDaGFyVG9wPTE9PT10aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxpbmVIZWlnaHQ/MDpNYXRoLnJvdW5kKCh0aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2VsbEhlaWdodC10aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2hhckhlaWdodCkvMiksdGhpcy5kaW1lbnNpb25zLnNjYWxlZENlbGxXaWR0aD10aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2hhcldpZHRoK01hdGgucm91bmQodGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5sZXR0ZXJTcGFjaW5nKSx0aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2hhckxlZnQ9TWF0aC5mbG9vcih0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxldHRlclNwYWNpbmcvMiksdGhpcy5kaW1lbnNpb25zLnNjYWxlZENhbnZhc0hlaWdodD10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MqdGhpcy5kaW1lbnNpb25zLnNjYWxlZENlbGxIZWlnaHQsdGhpcy5kaW1lbnNpb25zLnNjYWxlZENhbnZhc1dpZHRoPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyp0aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2VsbFdpZHRoLHRoaXMuZGltZW5zaW9ucy5jYW52YXNIZWlnaHQ9TWF0aC5yb3VuZCh0aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2FudmFzSGVpZ2h0L3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLmRpbWVuc2lvbnMuY2FudmFzV2lkdGg9TWF0aC5yb3VuZCh0aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2FudmFzV2lkdGgvd2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuZGltZW5zaW9ucy5hY3R1YWxDZWxsSGVpZ2h0PXRoaXMuZGltZW5zaW9ucy5jYW52YXNIZWlnaHQvdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLHRoaXMuZGltZW5zaW9ucy5hY3R1YWxDZWxsV2lkdGg9dGhpcy5kaW1lbnNpb25zLmNhbnZhc1dpZHRoL3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scyl9LHQucHJvdG90eXBlLnJlZ2lzdGVyQ2hhcmFjdGVySm9pbmVyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9jaGFyYWN0ZXJKb2luZXJSZWdpc3RyeS5yZWdpc3RlckNoYXJhY3RlckpvaW5lcihlKX0sdC5wcm90b3R5cGUuZGVyZWdpc3RlckNoYXJhY3RlckpvaW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2hhcmFjdGVySm9pbmVyUmVnaXN0cnkuZGVyZWdpc3RlckNoYXJhY3RlckpvaW5lcihlKX0sdD1vKFtzKDQsZC5JQnVmZmVyU2VydmljZSkscyg1LF8uSUNoYXJTaXplU2VydmljZSkscyg2LGQuSU9wdGlvbnNTZXJ2aWNlKSxzKDcsZC5JQ29yZVNlcnZpY2UpLHMoOCxfLklDb3JlQnJvd3NlclNlcnZpY2UpXSx0KX0oZi5EaXNwb3NhYmxlKTt0LlJlbmRlcmVyPXl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaSxuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoaT1mdW5jdGlvbihlLHQpe3JldHVybihpPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1pKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXh0UmVuZGVyTGF5ZXI9dm9pZCAwO3ZhciBvPXIoNDIpLHM9cigxMyksYT1yKDYpLGM9cigzKSxsPXIoMjkpLGg9cig0KSx1PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyLGksbixzLGEsYyxsKXt2YXIgdT1lLmNhbGwodGhpcyx0LFwidGV4dFwiLHIscyxpLGEsYyxsKXx8dGhpcztyZXR1cm4gdS5fY2hhcmFjdGVyV2lkdGg9MCx1Ll9jaGFyYWN0ZXJGb250PVwiXCIsdS5fY2hhcmFjdGVyT3ZlcmxhcENhY2hlPXt9LHUuX3dvcmtDZWxsPW5ldyBoLkNlbGxEYXRhLHUuX3N0YXRlPW5ldyBvLkdyaWRDYWNoZSx1Ll9jaGFyYWN0ZXJKb2luZXJSZWdpc3RyeT1uLHV9cmV0dXJuIG4odCxlKSx0LnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7ZS5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyx0KTt2YXIgcj10aGlzLl9nZXRGb250KCExLCExKTt0aGlzLl9jaGFyYWN0ZXJXaWR0aD09PXQuc2NhbGVkQ2hhcldpZHRoJiZ0aGlzLl9jaGFyYWN0ZXJGb250PT09cnx8KHRoaXMuX2NoYXJhY3RlcldpZHRoPXQuc2NhbGVkQ2hhcldpZHRoLHRoaXMuX2NoYXJhY3RlckZvbnQ9cix0aGlzLl9jaGFyYWN0ZXJPdmVybGFwQ2FjaGU9e30pLHRoaXMuX3N0YXRlLmNsZWFyKCksdGhpcy5fc3RhdGUucmVzaXplKHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3N0YXRlLmNsZWFyKCksdGhpcy5fY2xlYXJBbGwoKX0sdC5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKGUsdCxyLGkpe2Zvcih2YXIgbj1lO248PXQ7bisrKWZvcih2YXIgbz1uK3RoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwLHM9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMuZ2V0KG8pLGE9cj9yLmdldEpvaW5lZENoYXJhY3RlcnMobyk6W10saD0wO2g8dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzO2grKyl7cy5sb2FkQ2VsbChoLHRoaXMuX3dvcmtDZWxsKTt2YXIgdT10aGlzLl93b3JrQ2VsbCxmPSExLF89aDtpZigwIT09dS5nZXRXaWR0aCgpKXtpZihhLmxlbmd0aD4wJiZoPT09YVswXVswXSl7Zj0hMDt2YXIgZD1hLnNoaWZ0KCk7dT1uZXcgbC5Kb2luZWRDZWxsRGF0YSh0aGlzLl93b3JrQ2VsbCxzLnRyYW5zbGF0ZVRvU3RyaW5nKCEwLGRbMF0sZFsxXSksZFsxXS1kWzBdKSxfPWRbMV0tMX0hZiYmdGhpcy5faXNPdmVybGFwcGluZyh1KSYmXzxzLmxlbmd0aC0xJiZzLmdldENvZGVQb2ludChfKzEpPT09Yy5OVUxMX0NFTExfQ09ERSYmKHUuY29udGVudCY9LTEyNTgyOTEzLHUuY29udGVudHw9Mjw8MjIpLGkodSxoLG4pLGg9X319fSx0LnByb3RvdHlwZS5fZHJhd0JhY2tncm91bmQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLGk9dGhpcy5fY3R4LG49dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLG89MCxzPTAsYz1udWxsO2kuc2F2ZSgpLHRoaXMuX2ZvckVhY2hDZWxsKGUsdCxudWxsLChmdW5jdGlvbihlLHQsbCl7dmFyIGg9bnVsbDtlLmlzSW52ZXJzZSgpP2g9ZS5pc0ZnRGVmYXVsdCgpP3IuX2NvbG9ycy5mb3JlZ3JvdW5kLmNzczplLmlzRmdSR0IoKT9cInJnYihcIithLkF0dHJpYnV0ZURhdGEudG9Db2xvclJHQihlLmdldEZnQ29sb3IoKSkuam9pbihcIixcIikrXCIpXCI6ci5fY29sb3JzLmFuc2lbZS5nZXRGZ0NvbG9yKCldLmNzczplLmlzQmdSR0IoKT9oPVwicmdiKFwiK2EuQXR0cmlidXRlRGF0YS50b0NvbG9yUkdCKGUuZ2V0QmdDb2xvcigpKS5qb2luKFwiLFwiKStcIilcIjplLmlzQmdQYWxldHRlKCkmJihoPXIuX2NvbG9ycy5hbnNpW2UuZ2V0QmdDb2xvcigpXS5jc3MpLG51bGw9PT1jJiYobz10LHM9bCksbCE9PXM/KGkuZmlsbFN0eWxlPWN8fFwiXCIsci5fZmlsbENlbGxzKG8scyxuLW8sMSksbz10LHM9bCk6YyE9PWgmJihpLmZpbGxTdHlsZT1jfHxcIlwiLHIuX2ZpbGxDZWxscyhvLHMsdC1vLDEpLG89dCxzPWwpLGM9aH0pKSxudWxsIT09YyYmKGkuZmlsbFN0eWxlPWMsdGhpcy5fZmlsbENlbGxzKG8scyxuLW8sMSkpLGkucmVzdG9yZSgpfSx0LnByb3RvdHlwZS5fZHJhd0ZvcmVncm91bmQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3RoaXMuX2ZvckVhY2hDZWxsKGUsdCx0aGlzLl9jaGFyYWN0ZXJKb2luZXJSZWdpc3RyeSwoZnVuY3Rpb24oZSx0LGkpe2lmKCFlLmlzSW52aXNpYmxlKCkmJihyLl9kcmF3Q2hhcnMoZSx0LGkpLGUuaXNVbmRlcmxpbmUoKSkpe2lmKHIuX2N0eC5zYXZlKCksZS5pc0ludmVyc2UoKSlpZihlLmlzQmdEZWZhdWx0KCkpci5fY3R4LmZpbGxTdHlsZT1yLl9jb2xvcnMuYmFja2dyb3VuZC5jc3M7ZWxzZSBpZihlLmlzQmdSR0IoKSlyLl9jdHguZmlsbFN0eWxlPVwicmdiKFwiK2EuQXR0cmlidXRlRGF0YS50b0NvbG9yUkdCKGUuZ2V0QmdDb2xvcigpKS5qb2luKFwiLFwiKStcIilcIjtlbHNle3ZhciBuPWUuZ2V0QmdDb2xvcigpO3IuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuZHJhd0JvbGRUZXh0SW5CcmlnaHRDb2xvcnMmJmUuaXNCb2xkKCkmJm48OCYmKG4rPTgpLHIuX2N0eC5maWxsU3R5bGU9ci5fY29sb3JzLmFuc2lbbl0uY3NzfWVsc2UgaWYoZS5pc0ZnRGVmYXVsdCgpKXIuX2N0eC5maWxsU3R5bGU9ci5fY29sb3JzLmZvcmVncm91bmQuY3NzO2Vsc2UgaWYoZS5pc0ZnUkdCKCkpci5fY3R4LmZpbGxTdHlsZT1cInJnYihcIithLkF0dHJpYnV0ZURhdGEudG9Db2xvclJHQihlLmdldEZnQ29sb3IoKSkuam9pbihcIixcIikrXCIpXCI7ZWxzZXt2YXIgbz1lLmdldEZnQ29sb3IoKTtyLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzJiZlLmlzQm9sZCgpJiZvPDgmJihvKz04KSxyLl9jdHguZmlsbFN0eWxlPXIuX2NvbG9ycy5hbnNpW29dLmNzc31yLl9maWxsQm90dG9tTGluZUF0Q2VsbHModCxpLGUuZ2V0V2lkdGgoKSksci5fY3R4LnJlc3RvcmUoKX19KSl9LHQucHJvdG90eXBlLm9uR3JpZENoYW5nZWQ9ZnVuY3Rpb24oZSx0KXswIT09dGhpcy5fc3RhdGUuY2FjaGUubGVuZ3RoJiYodGhpcy5fY2hhckF0bGFzJiZ0aGlzLl9jaGFyQXRsYXMuYmVnaW5GcmFtZSgpLHRoaXMuX2NsZWFyQ2VsbHMoMCxlLHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0LWUrMSksdGhpcy5fZHJhd0JhY2tncm91bmQoZSx0KSx0aGlzLl9kcmF3Rm9yZWdyb3VuZChlLHQpKX0sdC5wcm90b3R5cGUub25PcHRpb25zQ2hhbmdlZD1mdW5jdGlvbigpe3RoaXMuX3NldFRyYW5zcGFyZW5jeSh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmFsbG93VHJhbnNwYXJlbmN5KX0sdC5wcm90b3R5cGUuX2lzT3ZlcmxhcHBpbmc9ZnVuY3Rpb24oZSl7aWYoMSE9PWUuZ2V0V2lkdGgoKSlyZXR1cm4hMTtpZihlLmdldENvZGUoKTwyNTYpcmV0dXJuITE7dmFyIHQ9ZS5nZXRDaGFycygpO2lmKHRoaXMuX2NoYXJhY3Rlck92ZXJsYXBDYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5fY2hhcmFjdGVyT3ZlcmxhcENhY2hlW3RdO3RoaXMuX2N0eC5zYXZlKCksdGhpcy5fY3R4LmZvbnQ9dGhpcy5fY2hhcmFjdGVyRm9udDt2YXIgcj1NYXRoLmZsb29yKHRoaXMuX2N0eC5tZWFzdXJlVGV4dCh0KS53aWR0aCk+dGhpcy5fY2hhcmFjdGVyV2lkdGg7cmV0dXJuIHRoaXMuX2N0eC5yZXN0b3JlKCksdGhpcy5fY2hhcmFjdGVyT3ZlcmxhcENhY2hlW3RdPXIscn0sdH0ocy5CYXNlUmVuZGVyTGF5ZXIpO3QuVGV4dFJlbmRlckxheWVyPXV9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkdyaWRDYWNoZT12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5jYWNoZT1bXX1yZXR1cm4gZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjxlO3IrKyl7dGhpcy5jYWNoZS5sZW5ndGg8PXImJnRoaXMuY2FjaGUucHVzaChbXSk7Zm9yKHZhciBpPXRoaXMuY2FjaGVbcl0ubGVuZ3RoO2k8dDtpKyspdGhpcy5jYWNoZVtyXS5wdXNoKHZvaWQgMCk7dGhpcy5jYWNoZVtyXS5sZW5ndGg9dH10aGlzLmNhY2hlLmxlbmd0aD1lfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5jYWNoZS5sZW5ndGg7ZSsrKWZvcih2YXIgdD0wO3Q8dGhpcy5jYWNoZVtlXS5sZW5ndGg7dCsrKXRoaXMuY2FjaGVbZV1bdF09dm9pZCAwfSxlfSgpO3QuR3JpZENhY2hlPWl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaSxuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoaT1mdW5jdGlvbihlLHQpe3JldHVybihpPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1pKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ob25lQ2hhckF0bGFzPXQuRHluYW1pY0NoYXJBdGxhcz10LmdldEdseXBoQ2FjaGVLZXk9dm9pZCAwO3ZhciBvPXIoOSkscz1yKDQ0KSxhPXIoMjcpLGM9cig0NiksbD1yKDExKSxoPXIoMjgpLHU9cigxMCksZj17Y3NzOlwicmdiYSgwLCAwLCAwLCAwKVwiLHJnYmE6MH07ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZS5jb2RlPDwyMXxlLmJnPDwxMnxlLmZnPDwzfChlLmJvbGQ/MDo0KSsoZS5kaW0/MDoyKSsoZS5pdGFsaWM/MDoxKX10LmdldEdseXBoQ2FjaGVLZXk9Xzt2YXIgZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO2kuX2NvbmZpZz1yLGkuX2RyYXdUb0NhY2hlQ291bnQ9MCxpLl9nbHlwaHNXYWl0aW5nT25CaXRtYXA9W10saS5fYml0bWFwQ29tbWl0VGltZW91dD1udWxsLGkuX2JpdG1hcD1udWxsLGkuX2NhY2hlQ2FudmFzPXQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxpLl9jYWNoZUNhbnZhcy53aWR0aD0xMDI0LGkuX2NhY2hlQ2FudmFzLmhlaWdodD0xMDI0LGkuX2NhY2hlQ3R4PWgudGhyb3dJZkZhbHN5KGkuX2NhY2hlQ2FudmFzLmdldENvbnRleHQoXCIyZFwiLHthbHBoYTohMH0pKTt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7bi53aWR0aD1pLl9jb25maWcuc2NhbGVkQ2hhcldpZHRoLG4uaGVpZ2h0PWkuX2NvbmZpZy5zY2FsZWRDaGFySGVpZ2h0LGkuX3RtcEN0eD1oLnRocm93SWZGYWxzeShuLmdldENvbnRleHQoXCIyZFwiLHthbHBoYTppLl9jb25maWcuYWxsb3dUcmFuc3BhcmVuY3l9KSksaS5fd2lkdGg9TWF0aC5mbG9vcigxMDI0L2kuX2NvbmZpZy5zY2FsZWRDaGFyV2lkdGgpLGkuX2hlaWdodD1NYXRoLmZsb29yKDEwMjQvaS5fY29uZmlnLnNjYWxlZENoYXJIZWlnaHQpO3ZhciBvPWkuX3dpZHRoKmkuX2hlaWdodDtyZXR1cm4gaS5fY2FjaGVNYXA9bmV3IGMuTFJVTWFwKG8pLGkuX2NhY2hlTWFwLnByZWFsbG9jKG8pLGl9cmV0dXJuIG4odCxlKSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX2JpdG1hcENvbW1pdFRpbWVvdXQmJih3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2JpdG1hcENvbW1pdFRpbWVvdXQpLHRoaXMuX2JpdG1hcENvbW1pdFRpbWVvdXQ9bnVsbCl9LHQucHJvdG90eXBlLmJlZ2luRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9kcmF3VG9DYWNoZUNvdW50PTB9LHQucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oZSx0LHIsaSl7aWYoMzI9PT10LmNvZGUpcmV0dXJuITA7aWYoIXRoaXMuX2NhbkNhY2hlKHQpKXJldHVybiExO3ZhciBuPV8odCksbz10aGlzLl9jYWNoZU1hcC5nZXQobik7aWYobnVsbCE9bylyZXR1cm4gdGhpcy5fZHJhd0Zyb21DYWNoZShlLG8scixpKSwhMDtpZih0aGlzLl9kcmF3VG9DYWNoZUNvdW50PDEwMCl7dmFyIHM9dm9pZCAwO3M9dGhpcy5fY2FjaGVNYXAuc2l6ZTx0aGlzLl9jYWNoZU1hcC5jYXBhY2l0eT90aGlzLl9jYWNoZU1hcC5zaXplOnRoaXMuX2NhY2hlTWFwLnBlZWsoKS5pbmRleDt2YXIgYT10aGlzLl9kcmF3VG9DYWNoZSh0LHMpO3JldHVybiB0aGlzLl9jYWNoZU1hcC5zZXQobixhKSx0aGlzLl9kcmF3RnJvbUNhY2hlKGUsYSxyLGkpLCEwfXJldHVybiExfSx0LnByb3RvdHlwZS5fY2FuQ2FjaGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29kZTwyNTZ9LHQucHJvdG90eXBlLl90b0Nvb3JkaW5hdGVYPWZ1bmN0aW9uKGUpe3JldHVybiBlJXRoaXMuX3dpZHRoKnRoaXMuX2NvbmZpZy5zY2FsZWRDaGFyV2lkdGh9LHQucHJvdG90eXBlLl90b0Nvb3JkaW5hdGVZPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmZsb29yKGUvdGhpcy5fd2lkdGgpKnRoaXMuX2NvbmZpZy5zY2FsZWRDaGFySGVpZ2h0fSx0LnByb3RvdHlwZS5fZHJhd0Zyb21DYWNoZT1mdW5jdGlvbihlLHQscixpKXtpZighdC5pc0VtcHR5KXt2YXIgbj10aGlzLl90b0Nvb3JkaW5hdGVYKHQuaW5kZXgpLG89dGhpcy5fdG9Db29yZGluYXRlWSh0LmluZGV4KTtlLmRyYXdJbWFnZSh0LmluQml0bWFwP3RoaXMuX2JpdG1hcDp0aGlzLl9jYWNoZUNhbnZhcyxuLG8sdGhpcy5fY29uZmlnLnNjYWxlZENoYXJXaWR0aCx0aGlzLl9jb25maWcuc2NhbGVkQ2hhckhlaWdodCxyLGksdGhpcy5fY29uZmlnLnNjYWxlZENoYXJXaWR0aCx0aGlzLl9jb25maWcuc2NhbGVkQ2hhckhlaWdodCl9fSx0LnByb3RvdHlwZS5fZ2V0Q29sb3JGcm9tQW5zaUluZGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPHRoaXMuX2NvbmZpZy5jb2xvcnMuYW5zaS5sZW5ndGg/dGhpcy5fY29uZmlnLmNvbG9ycy5hbnNpW2VdOmEuREVGQVVMVF9BTlNJX0NPTE9SU1tlXX0sdC5wcm90b3R5cGUuX2dldEJhY2tncm91bmRDb2xvcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY29uZmlnLmFsbG93VHJhbnNwYXJlbmN5P2Y6ZS5iZz09PW8uSU5WRVJURURfREVGQVVMVF9DT0xPUj90aGlzLl9jb25maWcuY29sb3JzLmZvcmVncm91bmQ6ZS5iZzwyNTY/dGhpcy5fZ2V0Q29sb3JGcm9tQW5zaUluZGV4KGUuYmcpOnRoaXMuX2NvbmZpZy5jb2xvcnMuYmFja2dyb3VuZH0sdC5wcm90b3R5cGUuX2dldEZvcmVncm91bmRDb2xvcj1mdW5jdGlvbihlKXtyZXR1cm4gZS5mZz09PW8uSU5WRVJURURfREVGQVVMVF9DT0xPUj91LmNvbG9yLm9wYXF1ZSh0aGlzLl9jb25maWcuY29sb3JzLmJhY2tncm91bmQpOmUuZmc8MjU2P3RoaXMuX2dldENvbG9yRnJvbUFuc2lJbmRleChlLmZnKTp0aGlzLl9jb25maWcuY29sb3JzLmZvcmVncm91bmR9LHQucHJvdG90eXBlLl9kcmF3VG9DYWNoZT1mdW5jdGlvbihlLHQpe3RoaXMuX2RyYXdUb0NhY2hlQ291bnQrKyx0aGlzLl90bXBDdHguc2F2ZSgpO3ZhciByPXRoaXMuX2dldEJhY2tncm91bmRDb2xvcihlKTt0aGlzLl90bXBDdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwiY29weVwiLHRoaXMuX3RtcEN0eC5maWxsU3R5bGU9ci5jc3MsdGhpcy5fdG1wQ3R4LmZpbGxSZWN0KDAsMCx0aGlzLl9jb25maWcuc2NhbGVkQ2hhcldpZHRoLHRoaXMuX2NvbmZpZy5zY2FsZWRDaGFySGVpZ2h0KSx0aGlzLl90bXBDdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwic291cmNlLW92ZXJcIjt2YXIgaT1lLmJvbGQ/dGhpcy5fY29uZmlnLmZvbnRXZWlnaHRCb2xkOnRoaXMuX2NvbmZpZy5mb250V2VpZ2h0LG49ZS5pdGFsaWM/XCJpdGFsaWNcIjpcIlwiO3RoaXMuX3RtcEN0eC5mb250PW4rXCIgXCIraStcIiBcIit0aGlzLl9jb25maWcuZm9udFNpemUqdGhpcy5fY29uZmlnLmRldmljZVBpeGVsUmF0aW8rXCJweCBcIit0aGlzLl9jb25maWcuZm9udEZhbWlseSx0aGlzLl90bXBDdHgudGV4dEJhc2VsaW5lPVwibWlkZGxlXCIsdGhpcy5fdG1wQ3R4LmZpbGxTdHlsZT10aGlzLl9nZXRGb3JlZ3JvdW5kQ29sb3IoZSkuY3NzLGUuZGltJiYodGhpcy5fdG1wQ3R4Lmdsb2JhbEFscGhhPW8uRElNX09QQUNJVFkpLHRoaXMuX3RtcEN0eC5maWxsVGV4dChlLmNoYXJzLDAsdGhpcy5fY29uZmlnLnNjYWxlZENoYXJIZWlnaHQvMiksdGhpcy5fdG1wQ3R4LnJlc3RvcmUoKTt2YXIgcz10aGlzLl90bXBDdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLl9jb25maWcuc2NhbGVkQ2hhcldpZHRoLHRoaXMuX2NvbmZpZy5zY2FsZWRDaGFySGVpZ2h0KSxhPSExO3RoaXMuX2NvbmZpZy5hbGxvd1RyYW5zcGFyZW5jeXx8KGE9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ITAsaT10LnJnYmE+Pj4yNCxuPXQucmdiYT4+PjE2JjI1NSxvPXQucmdiYT4+PjgmMjU1LHM9MDtzPGUuZGF0YS5sZW5ndGg7cys9NCllLmRhdGFbc109PT1pJiZlLmRhdGFbcysxXT09PW4mJmUuZGF0YVtzKzJdPT09bz9lLmRhdGFbcyszXT0wOnI9ITE7cmV0dXJuIHJ9KHMscikpO3ZhciBjPXRoaXMuX3RvQ29vcmRpbmF0ZVgodCksbD10aGlzLl90b0Nvb3JkaW5hdGVZKHQpO3RoaXMuX2NhY2hlQ3R4LnB1dEltYWdlRGF0YShzLGMsbCk7dmFyIGg9e2luZGV4OnQsaXNFbXB0eTphLGluQml0bWFwOiExfTtyZXR1cm4gdGhpcy5fYWRkR2x5cGhUb0JpdG1hcChoKSxofSx0LnByb3RvdHlwZS5fYWRkR2x5cGhUb0JpdG1hcD1mdW5jdGlvbihlKXt2YXIgdD10aGlzOyEoXCJjcmVhdGVJbWFnZUJpdG1hcFwiaW4gd2luZG93KXx8bC5pc0ZpcmVmb3h8fGwuaXNTYWZhcml8fCh0aGlzLl9nbHlwaHNXYWl0aW5nT25CaXRtYXAucHVzaChlKSxudWxsPT09dGhpcy5fYml0bWFwQ29tbWl0VGltZW91dCYmKHRoaXMuX2JpdG1hcENvbW1pdFRpbWVvdXQ9d2luZG93LnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2dlbmVyYXRlQml0bWFwKCl9KSwxMDApKSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUJpdG1hcD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLl9nbHlwaHNXYWl0aW5nT25CaXRtYXA7dGhpcy5fZ2x5cGhzV2FpdGluZ09uQml0bWFwPVtdLHdpbmRvdy5jcmVhdGVJbWFnZUJpdG1hcCh0aGlzLl9jYWNoZUNhbnZhcykudGhlbigoZnVuY3Rpb24ocil7ZS5fYml0bWFwPXI7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3RbaV0uaW5CaXRtYXA9ITB9fSkpLHRoaXMuX2JpdG1hcENvbW1pdFRpbWVvdXQ9bnVsbH0sdH0ocy5CYXNlQ2hhckF0bGFzKTt0LkR5bmFtaWNDaGFyQXRsYXM9ZDt2YXIgcD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscil7cmV0dXJuIGUuY2FsbCh0aGlzKXx8dGhpc31yZXR1cm4gbih0LGUpLHQucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oZSx0LHIsaSl7cmV0dXJuITF9LHR9KHMuQmFzZUNoYXJBdGxhcyk7dC5Ob25lQ2hhckF0bGFzPXB9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJhc2VDaGFyQXRsYXM9dm9pZCAwO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2RpZFdhcm1VcD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUud2FybVVwPWZ1bmN0aW9uKCl7dGhpcy5fZGlkV2FybVVwfHwodGhpcy5fZG9XYXJtVXAoKSx0aGlzLl9kaWRXYXJtVXA9ITApfSxlLnByb3RvdHlwZS5fZG9XYXJtVXA9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLmJlZ2luRnJhbWU9ZnVuY3Rpb24oKXt9LGV9KCk7dC5CYXNlQ2hhckF0bGFzPWl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbG9yQ29udHJhc3RDYWNoZT12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fY29sb3I9e30sdGhpcy5fcmdiYT17fX1yZXR1cm4gZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9jb2xvcj17fSx0aGlzLl9yZ2JhPXt9fSxlLnByb3RvdHlwZS5zZXRDc3M9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX3JnYmFbZV18fCh0aGlzLl9yZ2JhW2VdPXt9KSx0aGlzLl9yZ2JhW2VdW3RdPXJ9LGUucHJvdG90eXBlLmdldENzcz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9yZ2JhW2VdP3RoaXMuX3JnYmFbZV1bdF06dm9pZCAwfSxlLnByb3RvdHlwZS5zZXRDb2xvcj1mdW5jdGlvbihlLHQscil7dGhpcy5fY29sb3JbZV18fCh0aGlzLl9jb2xvcltlXT17fSksdGhpcy5fY29sb3JbZV1bdF09cn0sZS5wcm90b3R5cGUuZ2V0Q29sb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fY29sb3JbZV0/dGhpcy5fY29sb3JbZV1bdF06dm9pZCAwfSxlfSgpO3QuQ29sb3JDb250cmFzdENhY2hlPWl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxSVU1hcD12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuY2FwYWNpdHk9ZSx0aGlzLl9tYXA9e30sdGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbCx0aGlzLl9ub2RlUG9vbD1bXSx0aGlzLnNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuX3VubGlua05vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wcmV2LHI9ZS5uZXh0O2U9PT10aGlzLl9oZWFkJiYodGhpcy5faGVhZD1yKSxlPT09dGhpcy5fdGFpbCYmKHRoaXMuX3RhaWw9dCksbnVsbCE9PXQmJih0Lm5leHQ9ciksbnVsbCE9PXImJihyLnByZXY9dCl9LGUucHJvdG90eXBlLl9hcHBlbmROb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3RhaWw7bnVsbCE9PXQmJih0Lm5leHQ9ZSksZS5wcmV2PXQsZS5uZXh0PW51bGwsdGhpcy5fdGFpbD1lLG51bGw9PT10aGlzLl9oZWFkJiYodGhpcy5faGVhZD1lKX0sZS5wcm90b3R5cGUucHJlYWxsb2M9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuX25vZGVQb29sLHI9MDtyPGU7cisrKXQucHVzaCh7cHJldjpudWxsLG5leHQ6bnVsbCxrZXk6bnVsbCx2YWx1ZTpudWxsfSl9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9tYXBbZV07cmV0dXJuIHZvaWQgMCE9PXQ/KHRoaXMuX3VubGlua05vZGUodCksdGhpcy5fYXBwZW5kTm9kZSh0KSx0LnZhbHVlKTpudWxsfSxlLnByb3RvdHlwZS5wZWVrVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWFwW2VdO3JldHVybiB2b2lkIDAhPT10P3QudmFsdWU6bnVsbH0sZS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2hlYWQ7cmV0dXJuIG51bGw9PT1lP251bGw6ZS52YWx1ZX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMCE9PXIpcj10aGlzLl9tYXBbZV0sdGhpcy5fdW5saW5rTm9kZShyKSxyLnZhbHVlPXQ7ZWxzZSBpZih0aGlzLnNpemU+PXRoaXMuY2FwYWNpdHkpcj10aGlzLl9oZWFkLHRoaXMuX3VubGlua05vZGUociksZGVsZXRlIHRoaXMuX21hcFtyLmtleV0sci5rZXk9ZSxyLnZhbHVlPXQsdGhpcy5fbWFwW2VdPXI7ZWxzZXt2YXIgaT10aGlzLl9ub2RlUG9vbDtpLmxlbmd0aD4wPygocj1pLnBvcCgpKS5rZXk9ZSxyLnZhbHVlPXQpOnI9e3ByZXY6bnVsbCxuZXh0Om51bGwsa2V5OmUsdmFsdWU6dH0sdGhpcy5fbWFwW2VdPXIsdGhpcy5zaXplKyt9dGhpcy5fYXBwZW5kTm9kZShyKX0sZX0oKTt0LkxSVU1hcD1pfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGksbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9aShlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHIucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyByKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU2VsZWN0aW9uUmVuZGVyTGF5ZXI9dm9pZCAwO3ZhciBvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyLGksbixvLHMpe3ZhciBhPWUuY2FsbCh0aGlzLHQsXCJzZWxlY3Rpb25cIixyLCEwLGksbixvLHMpfHx0aGlzO3JldHVybiBhLl9jbGVhclN0YXRlKCksYX1yZXR1cm4gbih0LGUpLHQucHJvdG90eXBlLl9jbGVhclN0YXRlPWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGU9e3N0YXJ0OnZvaWQgMCxlbmQ6dm9pZCAwLGNvbHVtblNlbGVjdE1vZGU6dm9pZCAwLHlkaXNwOnZvaWQgMH19LHQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtlLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLHQpLHRoaXMuX2NsZWFyU3RhdGUoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9zdGF0ZS5zdGFydCYmdGhpcy5fc3RhdGUuZW5kJiYodGhpcy5fY2xlYXJTdGF0ZSgpLHRoaXMuX2NsZWFyQWxsKCkpfSx0LnByb3RvdHlwZS5vblNlbGVjdGlvbkNoYW5nZWQ9ZnVuY3Rpb24oZSx0LHIpe2lmKHRoaXMuX2RpZFN0YXRlQ2hhbmdlKGUsdCxyLHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwKSlpZih0aGlzLl9jbGVhckFsbCgpLGUmJnQpe3ZhciBpPWVbMV0tdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3Asbj10WzFdLXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwLG89TWF0aC5tYXgoaSwwKSxzPU1hdGgubWluKG4sdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEpO2lmKG8+PXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93c3x8czwwKXRoaXMuX3N0YXRlLnlkaXNwPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwO2Vsc2V7aWYodGhpcy5fY3R4LmZpbGxTdHlsZT10aGlzLl9jb2xvcnMuc2VsZWN0aW9uVHJhbnNwYXJlbnQuY3NzLHIpe3ZhciBhPWVbMF0sYz10WzBdLWEsbD1zLW8rMTt0aGlzLl9maWxsQ2VsbHMoYSxvLGMsbCl9ZWxzZXthPWk9PT1vP2VbMF06MDt2YXIgaD1vPT09bj90WzBdOnRoaXMuX2J1ZmZlclNlcnZpY2UuY29sczt0aGlzLl9maWxsQ2VsbHMoYSxvLGgtYSwxKTt2YXIgdT1NYXRoLm1heChzLW8tMSwwKTtpZih0aGlzLl9maWxsQ2VsbHMoMCxvKzEsdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHUpLG8hPT1zKXt2YXIgZj1uPT09cz90WzBdOnRoaXMuX2J1ZmZlclNlcnZpY2UuY29sczt0aGlzLl9maWxsQ2VsbHMoMCxzLGYsMSl9fXRoaXMuX3N0YXRlLnN0YXJ0PVtlWzBdLGVbMV1dLHRoaXMuX3N0YXRlLmVuZD1bdFswXSx0WzFdXSx0aGlzLl9zdGF0ZS5jb2x1bW5TZWxlY3RNb2RlPXIsdGhpcy5fc3RhdGUueWRpc3A9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3B9fWVsc2UgdGhpcy5fY2xlYXJTdGF0ZSgpfSx0LnByb3RvdHlwZS5fZGlkU3RhdGVDaGFuZ2U9ZnVuY3Rpb24oZSx0LHIsaSl7cmV0dXJuIXRoaXMuX2FyZUNvb3JkaW5hdGVzRXF1YWwoZSx0aGlzLl9zdGF0ZS5zdGFydCl8fCF0aGlzLl9hcmVDb29yZGluYXRlc0VxdWFsKHQsdGhpcy5fc3RhdGUuZW5kKXx8ciE9PXRoaXMuX3N0YXRlLmNvbHVtblNlbGVjdE1vZGV8fGkhPT10aGlzLl9zdGF0ZS55ZGlzcH0sdC5wcm90b3R5cGUuX2FyZUNvb3JkaW5hdGVzRXF1YWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKCFlfHwhdCkmJihlWzBdPT09dFswXSYmZVsxXT09PXRbMV0pfSx0fShyKDEzKS5CYXNlUmVuZGVyTGF5ZXIpO3QuU2VsZWN0aW9uUmVuZGVyTGF5ZXI9b30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBpLG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWkoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkN1cnNvclJlbmRlckxheWVyPXZvaWQgMDt2YXIgbz1yKDEzKSxzPXIoNCksYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscixpLG4sbyxhLGMsbCxoKXt2YXIgdT1lLmNhbGwodGhpcyx0LFwiY3Vyc29yXCIsciwhMCxpLG4sYSxjKXx8dGhpcztyZXR1cm4gdS5fb25SZXF1ZXN0UmVkcmF3PW8sdS5fY29yZVNlcnZpY2U9bCx1Ll9jb3JlQnJvd3NlclNlcnZpY2U9aCx1Ll9jZWxsPW5ldyBzLkNlbGxEYXRhLHUuX3N0YXRlPXt4OjAseTowLGlzRm9jdXNlZDohMSxzdHlsZTpcIlwiLHdpZHRoOjB9LHUuX2N1cnNvclJlbmRlcmVycz17YmFyOnUuX3JlbmRlckJhckN1cnNvci5iaW5kKHUpLGJsb2NrOnUuX3JlbmRlckJsb2NrQ3Vyc29yLmJpbmQodSksdW5kZXJsaW5lOnUuX3JlbmRlclVuZGVybGluZUN1cnNvci5iaW5kKHUpfSx1fXJldHVybiBuKHQsZSksdC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe2UucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsdCksdGhpcy5fc3RhdGU9e3g6MCx5OjAsaXNGb2N1c2VkOiExLHN0eWxlOlwiXCIsd2lkdGg6MH19LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJDdXJzb3IoKSx0aGlzLl9jdXJzb3JCbGlua1N0YXRlTWFuYWdlciYmKHRoaXMuX2N1cnNvckJsaW5rU3RhdGVNYW5hZ2VyLmRpc3Bvc2UoKSx0aGlzLl9jdXJzb3JCbGlua1N0YXRlTWFuYWdlcj12b2lkIDAsdGhpcy5vbk9wdGlvbnNDaGFuZ2VkKCkpfSx0LnByb3RvdHlwZS5vbkJsdXI9ZnVuY3Rpb24oKXt0aGlzLl9jdXJzb3JCbGlua1N0YXRlTWFuYWdlciYmdGhpcy5fY3Vyc29yQmxpbmtTdGF0ZU1hbmFnZXIucGF1c2UoKSx0aGlzLl9vblJlcXVlc3RSZWRyYXcuZmlyZSh7c3RhcnQ6dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSxlbmQ6dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueX0pfSx0LnByb3RvdHlwZS5vbkZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fY3Vyc29yQmxpbmtTdGF0ZU1hbmFnZXI/dGhpcy5fY3Vyc29yQmxpbmtTdGF0ZU1hbmFnZXIucmVzdW1lKCk6dGhpcy5fb25SZXF1ZXN0UmVkcmF3LmZpcmUoe3N0YXJ0OnRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnksZW5kOnRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnl9KX0sdC5wcm90b3R5cGUub25PcHRpb25zQ2hhbmdlZD1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpczt0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmN1cnNvckJsaW5rP3RoaXMuX2N1cnNvckJsaW5rU3RhdGVNYW5hZ2VyfHwodGhpcy5fY3Vyc29yQmxpbmtTdGF0ZU1hbmFnZXI9bmV3IGModGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLmlzRm9jdXNlZCwoZnVuY3Rpb24oKXt0Ll9yZW5kZXIoITApfSkpKToobnVsbD09PShlPXRoaXMuX2N1cnNvckJsaW5rU3RhdGVNYW5hZ2VyKXx8dm9pZCAwPT09ZXx8ZS5kaXNwb3NlKCksdGhpcy5fY3Vyc29yQmxpbmtTdGF0ZU1hbmFnZXI9dm9pZCAwKSx0aGlzLl9vblJlcXVlc3RSZWRyYXcuZmlyZSh7c3RhcnQ6dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSxlbmQ6dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueX0pfSx0LnByb3RvdHlwZS5vbkN1cnNvck1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJzb3JCbGlua1N0YXRlTWFuYWdlciYmdGhpcy5fY3Vyc29yQmxpbmtTdGF0ZU1hbmFnZXIucmVzdGFydEJsaW5rQW5pbWF0aW9uKCl9LHQucHJvdG90eXBlLm9uR3JpZENoYW5nZWQ9ZnVuY3Rpb24oZSx0KXshdGhpcy5fY3Vyc29yQmxpbmtTdGF0ZU1hbmFnZXJ8fHRoaXMuX2N1cnNvckJsaW5rU3RhdGVNYW5hZ2VyLmlzUGF1c2VkP3RoaXMuX3JlbmRlcighMSk6dGhpcy5fY3Vyc29yQmxpbmtTdGF0ZU1hbmFnZXIucmVzdGFydEJsaW5rQW5pbWF0aW9uKCl9LHQucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oZSl7aWYodGhpcy5fY29yZVNlcnZpY2UuaXNDdXJzb3JJbml0aWFsaXplZCYmIXRoaXMuX2NvcmVTZXJ2aWNlLmlzQ3Vyc29ySGlkZGVuKXt2YXIgdD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55YmFzZSt0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55LHI9dC10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcDtpZihyPDB8fHI+PXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cyl0aGlzLl9jbGVhckN1cnNvcigpO2Vsc2V7dmFyIGk9TWF0aC5taW4odGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueCx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMtMSk7aWYodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMuZ2V0KHQpLmxvYWRDZWxsKGksdGhpcy5fY2VsbCksdm9pZCAwIT09dGhpcy5fY2VsbC5jb250ZW50KXtpZighdGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLmlzRm9jdXNlZCl7dGhpcy5fY2xlYXJDdXJzb3IoKSx0aGlzLl9jdHguc2F2ZSgpLHRoaXMuX2N0eC5maWxsU3R5bGU9dGhpcy5fY29sb3JzLmN1cnNvci5jc3M7dmFyIG49dGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5jdXJzb3JTdHlsZTtyZXR1cm4gbiYmXCJibG9ja1wiIT09bj90aGlzLl9jdXJzb3JSZW5kZXJlcnNbbl0oaSxyLHRoaXMuX2NlbGwpOnRoaXMuX3JlbmRlckJsdXJDdXJzb3IoaSxyLHRoaXMuX2NlbGwpLHRoaXMuX2N0eC5yZXN0b3JlKCksdGhpcy5fc3RhdGUueD1pLHRoaXMuX3N0YXRlLnk9cix0aGlzLl9zdGF0ZS5pc0ZvY3VzZWQ9ITEsdGhpcy5fc3RhdGUuc3R5bGU9bix2b2lkKHRoaXMuX3N0YXRlLndpZHRoPXRoaXMuX2NlbGwuZ2V0V2lkdGgoKSl9aWYoIXRoaXMuX2N1cnNvckJsaW5rU3RhdGVNYW5hZ2VyfHx0aGlzLl9jdXJzb3JCbGlua1N0YXRlTWFuYWdlci5pc0N1cnNvclZpc2libGUpe2lmKHRoaXMuX3N0YXRlKXtpZih0aGlzLl9zdGF0ZS54PT09aSYmdGhpcy5fc3RhdGUueT09PXImJnRoaXMuX3N0YXRlLmlzRm9jdXNlZD09PXRoaXMuX2NvcmVCcm93c2VyU2VydmljZS5pc0ZvY3VzZWQmJnRoaXMuX3N0YXRlLnN0eWxlPT09dGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5jdXJzb3JTdHlsZSYmdGhpcy5fc3RhdGUud2lkdGg9PT10aGlzLl9jZWxsLmdldFdpZHRoKCkpcmV0dXJuO3RoaXMuX2NsZWFyQ3Vyc29yKCl9dGhpcy5fY3R4LnNhdmUoKSx0aGlzLl9jdXJzb3JSZW5kZXJlcnNbdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5jdXJzb3JTdHlsZXx8XCJibG9ja1wiXShpLHIsdGhpcy5fY2VsbCksdGhpcy5fY3R4LnJlc3RvcmUoKSx0aGlzLl9zdGF0ZS54PWksdGhpcy5fc3RhdGUueT1yLHRoaXMuX3N0YXRlLmlzRm9jdXNlZD0hMSx0aGlzLl9zdGF0ZS5zdHlsZT10aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmN1cnNvclN0eWxlLHRoaXMuX3N0YXRlLndpZHRoPXRoaXMuX2NlbGwuZ2V0V2lkdGgoKX1lbHNlIHRoaXMuX2NsZWFyQ3Vyc29yKCl9fX1lbHNlIHRoaXMuX2NsZWFyQ3Vyc29yKCl9LHQucHJvdG90eXBlLl9jbGVhckN1cnNvcj1mdW5jdGlvbigpe3RoaXMuX3N0YXRlJiYodGhpcy5fY2xlYXJDZWxscyh0aGlzLl9zdGF0ZS54LHRoaXMuX3N0YXRlLnksdGhpcy5fc3RhdGUud2lkdGgsMSksdGhpcy5fc3RhdGU9e3g6MCx5OjAsaXNGb2N1c2VkOiExLHN0eWxlOlwiXCIsd2lkdGg6MH0pfSx0LnByb3RvdHlwZS5fcmVuZGVyQmFyQ3Vyc29yPWZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9jdHguc2F2ZSgpLHRoaXMuX2N0eC5maWxsU3R5bGU9dGhpcy5fY29sb3JzLmN1cnNvci5jc3MsdGhpcy5fZmlsbExlZnRMaW5lQXRDZWxsKGUsdCx0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmN1cnNvcldpZHRoKSx0aGlzLl9jdHgucmVzdG9yZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyQmxvY2tDdXJzb3I9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2N0eC5zYXZlKCksdGhpcy5fY3R4LmZpbGxTdHlsZT10aGlzLl9jb2xvcnMuY3Vyc29yLmNzcyx0aGlzLl9maWxsQ2VsbHMoZSx0LHIuZ2V0V2lkdGgoKSwxKSx0aGlzLl9jdHguZmlsbFN0eWxlPXRoaXMuX2NvbG9ycy5jdXJzb3JBY2NlbnQuY3NzLHRoaXMuX2ZpbGxDaGFyVHJ1ZUNvbG9yKHIsZSx0KSx0aGlzLl9jdHgucmVzdG9yZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyVW5kZXJsaW5lQ3Vyc29yPWZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9jdHguc2F2ZSgpLHRoaXMuX2N0eC5maWxsU3R5bGU9dGhpcy5fY29sb3JzLmN1cnNvci5jc3MsdGhpcy5fZmlsbEJvdHRvbUxpbmVBdENlbGxzKGUsdCksdGhpcy5fY3R4LnJlc3RvcmUoKX0sdC5wcm90b3R5cGUuX3JlbmRlckJsdXJDdXJzb3I9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2N0eC5zYXZlKCksdGhpcy5fY3R4LnN0cm9rZVN0eWxlPXRoaXMuX2NvbG9ycy5jdXJzb3IuY3NzLHRoaXMuX3N0cm9rZVJlY3RBdENlbGwoZSx0LHIuZ2V0V2lkdGgoKSwxKSx0aGlzLl9jdHgucmVzdG9yZSgpfSx0fShvLkJhc2VSZW5kZXJMYXllcik7dC5DdXJzb3JSZW5kZXJMYXllcj1hO3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX3JlbmRlckNhbGxiYWNrPXQsdGhpcy5pc0N1cnNvclZpc2libGU9ITAsZSYmdGhpcy5fcmVzdGFydEludGVydmFsKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImlzUGF1c2VkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiEodGhpcy5fYmxpbmtTdGFydFRpbWVvdXR8fHRoaXMuX2JsaW5rSW50ZXJ2YWwpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9ibGlua0ludGVydmFsJiYod2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fYmxpbmtJbnRlcnZhbCksdGhpcy5fYmxpbmtJbnRlcnZhbD12b2lkIDApLHRoaXMuX2JsaW5rU3RhcnRUaW1lb3V0JiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9ibGlua1N0YXJ0VGltZW91dCksdGhpcy5fYmxpbmtTdGFydFRpbWVvdXQ9dm9pZCAwKSx0aGlzLl9hbmltYXRpb25GcmFtZSYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25GcmFtZSksdGhpcy5fYW5pbWF0aW9uRnJhbWU9dm9pZCAwKX0sZS5wcm90b3R5cGUucmVzdGFydEJsaW5rQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmlzUGF1c2VkfHwodGhpcy5fYW5pbWF0aW9uVGltZVJlc3RhcnRlZD1EYXRlLm5vdygpLHRoaXMuaXNDdXJzb3JWaXNpYmxlPSEwLHRoaXMuX2FuaW1hdGlvbkZyYW1lfHwodGhpcy5fYW5pbWF0aW9uRnJhbWU9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXtlLl9yZW5kZXJDYWxsYmFjaygpLGUuX2FuaW1hdGlvbkZyYW1lPXZvaWQgMH0pKSkpfSxlLnByb3RvdHlwZS5fcmVzdGFydEludGVydmFsPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dm9pZCAwPT09ZSYmKGU9NjAwKSx0aGlzLl9ibGlua0ludGVydmFsJiZ3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9ibGlua0ludGVydmFsKSx0aGlzLl9ibGlua1N0YXJ0VGltZW91dD13aW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtpZih0Ll9hbmltYXRpb25UaW1lUmVzdGFydGVkKXt2YXIgZT02MDAtKERhdGUubm93KCktdC5fYW5pbWF0aW9uVGltZVJlc3RhcnRlZCk7aWYodC5fYW5pbWF0aW9uVGltZVJlc3RhcnRlZD12b2lkIDAsZT4wKXJldHVybiB2b2lkIHQuX3Jlc3RhcnRJbnRlcnZhbChlKX10LmlzQ3Vyc29yVmlzaWJsZT0hMSx0Ll9hbmltYXRpb25GcmFtZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3QuX3JlbmRlckNhbGxiYWNrKCksdC5fYW5pbWF0aW9uRnJhbWU9dm9pZCAwfSkpLHQuX2JsaW5rSW50ZXJ2YWw9d2luZG93LnNldEludGVydmFsKChmdW5jdGlvbigpe2lmKHQuX2FuaW1hdGlvblRpbWVSZXN0YXJ0ZWQpe3ZhciBlPTYwMC0oRGF0ZS5ub3coKS10Ll9hbmltYXRpb25UaW1lUmVzdGFydGVkKTtyZXR1cm4gdC5fYW5pbWF0aW9uVGltZVJlc3RhcnRlZD12b2lkIDAsdm9pZCB0Ll9yZXN0YXJ0SW50ZXJ2YWwoZSl9dC5pc0N1cnNvclZpc2libGU9IXQuaXNDdXJzb3JWaXNpYmxlLHQuX2FuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7dC5fcmVuZGVyQ2FsbGJhY2soKSx0Ll9hbmltYXRpb25GcmFtZT12b2lkIDB9KSl9KSw2MDApfSksZSl9LGUucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5pc0N1cnNvclZpc2libGU9ITAsdGhpcy5fYmxpbmtJbnRlcnZhbCYmKHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX2JsaW5rSW50ZXJ2YWwpLHRoaXMuX2JsaW5rSW50ZXJ2YWw9dm9pZCAwKSx0aGlzLl9ibGlua1N0YXJ0VGltZW91dCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fYmxpbmtTdGFydFRpbWVvdXQpLHRoaXMuX2JsaW5rU3RhcnRUaW1lb3V0PXZvaWQgMCksdGhpcy5fYW5pbWF0aW9uRnJhbWUmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWUpLHRoaXMuX2FuaW1hdGlvbkZyYW1lPXZvaWQgMCl9LGUucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3RoaXMucGF1c2UoKSx0aGlzLl9hbmltYXRpb25UaW1lUmVzdGFydGVkPXZvaWQgMCx0aGlzLl9yZXN0YXJ0SW50ZXJ2YWwoKSx0aGlzLnJlc3RhcnRCbGlua0FuaW1hdGlvbigpfSxlfSgpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGksbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9aShlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHIucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyByKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlua1JlbmRlckxheWVyPXZvaWQgMDt2YXIgbz1yKDEzKSxzPXIoOSksYT1yKDI2KSxjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyLGksbixvLHMsYSxjKXt2YXIgbD1lLmNhbGwodGhpcyx0LFwibGlua1wiLHIsITAsaSxuLGEsYyl8fHRoaXM7cmV0dXJuIG8ub25TaG93TGlua1VuZGVybGluZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGwuX29uU2hvd0xpbmtVbmRlcmxpbmUoZSl9KSksby5vbkhpZGVMaW5rVW5kZXJsaW5lKChmdW5jdGlvbihlKXtyZXR1cm4gbC5fb25IaWRlTGlua1VuZGVybGluZShlKX0pKSxzLm9uU2hvd0xpbmtVbmRlcmxpbmUoKGZ1bmN0aW9uKGUpe3JldHVybiBsLl9vblNob3dMaW5rVW5kZXJsaW5lKGUpfSkpLHMub25IaWRlTGlua1VuZGVybGluZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGwuX29uSGlkZUxpbmtVbmRlcmxpbmUoZSl9KSksbH1yZXR1cm4gbih0LGUpLHQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtlLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLHQpLHRoaXMuX3N0YXRlPXZvaWQgMH0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckN1cnJlbnRMaW5rKCl9LHQucHJvdG90eXBlLl9jbGVhckN1cnJlbnRMaW5rPWZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhdGUpe3RoaXMuX2NsZWFyQ2VsbHModGhpcy5fc3RhdGUueDEsdGhpcy5fc3RhdGUueTEsdGhpcy5fc3RhdGUuY29scy10aGlzLl9zdGF0ZS54MSwxKTt2YXIgZT10aGlzLl9zdGF0ZS55Mi10aGlzLl9zdGF0ZS55MS0xO2U+MCYmdGhpcy5fY2xlYXJDZWxscygwLHRoaXMuX3N0YXRlLnkxKzEsdGhpcy5fc3RhdGUuY29scyxlKSx0aGlzLl9jbGVhckNlbGxzKDAsdGhpcy5fc3RhdGUueTIsdGhpcy5fc3RhdGUueDIsMSksdGhpcy5fc3RhdGU9dm9pZCAwfX0sdC5wcm90b3R5cGUuX29uU2hvd0xpbmtVbmRlcmxpbmU9ZnVuY3Rpb24oZSl7aWYoZS5mZz09PXMuSU5WRVJURURfREVGQVVMVF9DT0xPUj90aGlzLl9jdHguZmlsbFN0eWxlPXRoaXMuX2NvbG9ycy5iYWNrZ3JvdW5kLmNzczplLmZnJiZhLmlzMjU2Q29sb3IoZS5mZyk/dGhpcy5fY3R4LmZpbGxTdHlsZT10aGlzLl9jb2xvcnMuYW5zaVtlLmZnXS5jc3M6dGhpcy5fY3R4LmZpbGxTdHlsZT10aGlzLl9jb2xvcnMuZm9yZWdyb3VuZC5jc3MsZS55MT09PWUueTIpdGhpcy5fZmlsbEJvdHRvbUxpbmVBdENlbGxzKGUueDEsZS55MSxlLngyLWUueDEpO2Vsc2V7dGhpcy5fZmlsbEJvdHRvbUxpbmVBdENlbGxzKGUueDEsZS55MSxlLmNvbHMtZS54MSk7Zm9yKHZhciB0PWUueTErMTt0PGUueTI7dCsrKXRoaXMuX2ZpbGxCb3R0b21MaW5lQXRDZWxscygwLHQsZS5jb2xzKTt0aGlzLl9maWxsQm90dG9tTGluZUF0Q2VsbHMoMCxlLnkyLGUueDIpfXRoaXMuX3N0YXRlPWV9LHQucHJvdG90eXBlLl9vbkhpZGVMaW5rVW5kZXJsaW5lPWZ1bmN0aW9uKGUpe3RoaXMuX2NsZWFyQ3VycmVudExpbmsoKX0sdH0oby5CYXNlUmVuZGVyTGF5ZXIpO3QuTGlua1JlbmRlckxheWVyPWN9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBuLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1pP2k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOmk7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLGkpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKG49ZVthXSkmJihzPShvPDM/bihzKTpvPjM/bih0LHIscyk6bih0LHIpKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfSxuPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixpKXt0KHIsaSxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTW91c2Vab25lPXQuTGlua2lmaWVyPXZvaWQgMDt2YXIgbz1yKDApLHM9cigxKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5fYnVmZmVyU2VydmljZT1lLHRoaXMuX2xvZ1NlcnZpY2U9dCx0aGlzLl91bmljb2RlU2VydmljZT1yLHRoaXMuX2xpbmtNYXRjaGVycz1bXSx0aGlzLl9uZXh0TGlua01hdGNoZXJJZD0wLHRoaXMuX29uU2hvd0xpbmtVbmRlcmxpbmU9bmV3IG8uRXZlbnRFbWl0dGVyLHRoaXMuX29uSGlkZUxpbmtVbmRlcmxpbmU9bmV3IG8uRXZlbnRFbWl0dGVyLHRoaXMuX29uTGlua1Rvb2x0aXA9bmV3IG8uRXZlbnRFbWl0dGVyLHRoaXMuX3Jvd3NUb0xpbmtpZnk9e3N0YXJ0OnZvaWQgMCxlbmQ6dm9pZCAwfX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25TaG93TGlua1VuZGVybGluZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25TaG93TGlua1VuZGVybGluZS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJvbkhpZGVMaW5rVW5kZXJsaW5lXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkhpZGVMaW5rVW5kZXJsaW5lLmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcIm9uTGlua1Rvb2x0aXBcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uTGlua1Rvb2x0aXAuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYXR0YWNoVG9Eb209ZnVuY3Rpb24oZSx0KXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fbW91c2Vab25lTWFuYWdlcj10fSxlLnByb3RvdHlwZS5saW5raWZ5Um93cz1mdW5jdGlvbih0LHIpe3ZhciBpPXRoaXM7dGhpcy5fbW91c2Vab25lTWFuYWdlciYmKHZvaWQgMD09PXRoaXMuX3Jvd3NUb0xpbmtpZnkuc3RhcnR8fHZvaWQgMD09PXRoaXMuX3Jvd3NUb0xpbmtpZnkuZW5kPyh0aGlzLl9yb3dzVG9MaW5raWZ5LnN0YXJ0PXQsdGhpcy5fcm93c1RvTGlua2lmeS5lbmQ9cik6KHRoaXMuX3Jvd3NUb0xpbmtpZnkuc3RhcnQ9TWF0aC5taW4odGhpcy5fcm93c1RvTGlua2lmeS5zdGFydCx0KSx0aGlzLl9yb3dzVG9MaW5raWZ5LmVuZD1NYXRoLm1heCh0aGlzLl9yb3dzVG9MaW5raWZ5LmVuZCxyKSksdGhpcy5fbW91c2Vab25lTWFuYWdlci5jbGVhckFsbCh0LHIpLHRoaXMuX3Jvd3NUaW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl9yb3dzVGltZW91dElkKSx0aGlzLl9yb3dzVGltZW91dElkPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2xpbmtpZnlSb3dzKCl9KSxlLl90aW1lQmVmb3JlTGF0ZW5jeSkpfSxlLnByb3RvdHlwZS5fbGlua2lmeVJvd3M9ZnVuY3Rpb24oKXt0aGlzLl9yb3dzVGltZW91dElkPXZvaWQgMDt2YXIgZT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjtpZih2b2lkIDAhPT10aGlzLl9yb3dzVG9MaW5raWZ5LnN0YXJ0JiZ2b2lkIDAhPT10aGlzLl9yb3dzVG9MaW5raWZ5LmVuZCl7dmFyIHQ9ZS55ZGlzcCt0aGlzLl9yb3dzVG9MaW5raWZ5LnN0YXJ0O2lmKCEodD49ZS5saW5lcy5sZW5ndGgpKXtmb3IodmFyIHI9ZS55ZGlzcCtNYXRoLm1pbih0aGlzLl9yb3dzVG9MaW5raWZ5LmVuZCx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpKzEsaT1NYXRoLmNlaWwoMmUzL3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scyksbj10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5pdGVyYXRvcighMSx0LHIsaSxpKTtuLmhhc05leHQoKTspZm9yKHZhciBvPW4ubmV4dCgpLHM9MDtzPHRoaXMuX2xpbmtNYXRjaGVycy5sZW5ndGg7cysrKXRoaXMuX2RvTGlua2lmeVJvdyhvLnJhbmdlLmZpcnN0LG8uY29udGVudCx0aGlzLl9saW5rTWF0Y2hlcnNbc10pO3RoaXMuX3Jvd3NUb0xpbmtpZnkuc3RhcnQ9dm9pZCAwLHRoaXMuX3Jvd3NUb0xpbmtpZnkuZW5kPXZvaWQgMH19ZWxzZSB0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiX3Jvd1RvTGlua2lmeSB3YXMgdW5zZXQgYmVmb3JlIF9saW5raWZ5Um93cyB3YXMgY2FsbGVkXCIpfSxlLnByb3RvdHlwZS5yZWdpc3RlckxpbmtNYXRjaGVyPWZ1bmN0aW9uKGUsdCxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksIXQpdGhyb3cgbmV3IEVycm9yKFwiaGFuZGxlciBtdXN0IGJlIGRlZmluZWRcIik7dmFyIGk9e2lkOnRoaXMuX25leHRMaW5rTWF0Y2hlcklkKysscmVnZXg6ZSxoYW5kbGVyOnQsbWF0Y2hJbmRleDpyLm1hdGNoSW5kZXgsdmFsaWRhdGlvbkNhbGxiYWNrOnIudmFsaWRhdGlvbkNhbGxiYWNrLGhvdmVyVG9vbHRpcENhbGxiYWNrOnIudG9vbHRpcENhbGxiYWNrLGhvdmVyTGVhdmVDYWxsYmFjazpyLmxlYXZlQ2FsbGJhY2ssd2lsbExpbmtBY3RpdmF0ZTpyLndpbGxMaW5rQWN0aXZhdGUscHJpb3JpdHk6ci5wcmlvcml0eXx8MH07cmV0dXJuIHRoaXMuX2FkZExpbmtNYXRjaGVyVG9MaXN0KGkpLGkuaWR9LGUucHJvdG90eXBlLl9hZGRMaW5rTWF0Y2hlclRvTGlzdD1mdW5jdGlvbihlKXtpZigwIT09dGhpcy5fbGlua01hdGNoZXJzLmxlbmd0aCl7Zm9yKHZhciB0PXRoaXMuX2xpbmtNYXRjaGVycy5sZW5ndGgtMTt0Pj0wO3QtLSlpZihlLnByaW9yaXR5PD10aGlzLl9saW5rTWF0Y2hlcnNbdF0ucHJpb3JpdHkpcmV0dXJuIHZvaWQgdGhpcy5fbGlua01hdGNoZXJzLnNwbGljZSh0KzEsMCxlKTt0aGlzLl9saW5rTWF0Y2hlcnMuc3BsaWNlKDAsMCxlKX1lbHNlIHRoaXMuX2xpbmtNYXRjaGVycy5wdXNoKGUpfSxlLnByb3RvdHlwZS5kZXJlZ2lzdGVyTGlua01hdGNoZXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLl9saW5rTWF0Y2hlcnMubGVuZ3RoO3QrKylpZih0aGlzLl9saW5rTWF0Y2hlcnNbdF0uaWQ9PT1lKXJldHVybiB0aGlzLl9saW5rTWF0Y2hlcnMuc3BsaWNlKHQsMSksITA7cmV0dXJuITF9LGUucHJvdG90eXBlLl9kb0xpbmtpZnlSb3c9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgaSxuPXRoaXMsbz1uZXcgUmVnRXhwKHIucmVnZXguc291cmNlLChyLnJlZ2V4LmZsYWdzfHxcIlwiKStcImdcIikscz0tMSxhPWZ1bmN0aW9uKCl7dmFyIGE9aVtcIm51bWJlclwiIT10eXBlb2Ygci5tYXRjaEluZGV4PzA6ci5tYXRjaEluZGV4XTtpZighYSlyZXR1cm4gYy5fbG9nU2VydmljZS5kZWJ1ZyhcIm1hdGNoIGZvdW5kIHdpdGhvdXQgY29ycmVzcG9uZGluZyBtYXRjaEluZGV4XCIsaSxyKSxcImJyZWFrXCI7aWYocz10LmluZGV4T2YoYSxzKzEpLG8ubGFzdEluZGV4PXMrYS5sZW5ndGgsczwwKXJldHVyblwiYnJlYWtcIjt2YXIgbD1jLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5zdHJpbmdJbmRleFRvQnVmZmVySW5kZXgoZSxzKTtpZihsWzBdPDApcmV0dXJuXCJicmVha1wiO3ZhciBoPWMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmdldChsWzBdKTtpZighaClyZXR1cm5cImJyZWFrXCI7dmFyIHU9aC5nZXRGZyhsWzFdKSxmPXU/dT4+OSY1MTE6dm9pZCAwO3IudmFsaWRhdGlvbkNhbGxiYWNrP3IudmFsaWRhdGlvbkNhbGxiYWNrKGEsKGZ1bmN0aW9uKGUpe24uX3Jvd3NUaW1lb3V0SWR8fGUmJm4uX2FkZExpbmsobFsxXSxsWzBdLW4uX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwLGEscixmKX0pKTpjLl9hZGRMaW5rKGxbMV0sbFswXS1jLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcCxhLHIsZil9LGM9dGhpcztudWxsIT09KGk9by5leGVjKHQpKTspe2lmKFwiYnJlYWtcIj09PWEoKSlicmVha319LGUucHJvdG90eXBlLl9hZGRMaW5rPWZ1bmN0aW9uKGUsdCxyLGksbil7dmFyIG89dGhpcztpZih0aGlzLl9tb3VzZVpvbmVNYW5hZ2VyJiZ0aGlzLl9lbGVtZW50KXt2YXIgcz10aGlzLl91bmljb2RlU2VydmljZS5nZXRTdHJpbmdDZWxsV2lkdGgociksYT1lJXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyxsPXQrTWF0aC5mbG9vcihlL3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scyksaD0oYStzKSV0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdT1sK01hdGguZmxvb3IoKGErcykvdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzKTswPT09aCYmKGg9dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHUtLSksdGhpcy5fbW91c2Vab25lTWFuYWdlci5hZGQobmV3IGMoYSsxLGwrMSxoKzEsdSsxLChmdW5jdGlvbihlKXtpZihpLmhhbmRsZXIpcmV0dXJuIGkuaGFuZGxlcihlLHIpO3ZhciB0PXdpbmRvdy5vcGVuKCk7dD8odC5vcGVuZXI9bnVsbCx0LmxvY2F0aW9uLmhyZWY9cik6Y29uc29sZS53YXJuKFwiT3BlbmluZyBsaW5rIGJsb2NrZWQgYXMgb3BlbmVyIGNvdWxkIG5vdCBiZSBjbGVhcmVkXCIpfSksKGZ1bmN0aW9uKCl7by5fb25TaG93TGlua1VuZGVybGluZS5maXJlKG8uX2NyZWF0ZUxpbmtIb3ZlckV2ZW50KGEsbCxoLHUsbikpLG8uX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChcInh0ZXJtLWN1cnNvci1wb2ludGVyXCIpfSksKGZ1bmN0aW9uKGUpe28uX29uTGlua1Rvb2x0aXAuZmlyZShvLl9jcmVhdGVMaW5rSG92ZXJFdmVudChhLGwsaCx1LG4pKSxpLmhvdmVyVG9vbHRpcENhbGxiYWNrJiZpLmhvdmVyVG9vbHRpcENhbGxiYWNrKGUscix7c3RhcnQ6e3g6YSx5Omx9LGVuZDp7eDpoLHk6dX19KX0pLChmdW5jdGlvbigpe28uX29uSGlkZUxpbmtVbmRlcmxpbmUuZmlyZShvLl9jcmVhdGVMaW5rSG92ZXJFdmVudChhLGwsaCx1LG4pKSxvLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJ4dGVybS1jdXJzb3ItcG9pbnRlclwiKSxpLmhvdmVyTGVhdmVDYWxsYmFjayYmaS5ob3ZlckxlYXZlQ2FsbGJhY2soKX0pLChmdW5jdGlvbihlKXtyZXR1cm4haS53aWxsTGlua0FjdGl2YXRlfHxpLndpbGxMaW5rQWN0aXZhdGUoZSxyKX0pKSl9fSxlLnByb3RvdHlwZS5fY3JlYXRlTGlua0hvdmVyRXZlbnQ9ZnVuY3Rpb24oZSx0LHIsaSxuKXtyZXR1cm57eDE6ZSx5MTp0LHgyOnIseTI6aSxjb2xzOnRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyxmZzpufX0sZS5fdGltZUJlZm9yZUxhdGVuY3k9MjAwLGU9aShbbigwLHMuSUJ1ZmZlclNlcnZpY2UpLG4oMSxzLklMb2dTZXJ2aWNlKSxuKDIscy5JVW5pY29kZVNlcnZpY2UpXSxlKX0oKTt0LkxpbmtpZmllcj1hO3ZhciBjPWZ1bmN0aW9uKGUsdCxyLGksbixvLHMsYSxjKXt0aGlzLngxPWUsdGhpcy55MT10LHRoaXMueDI9cix0aGlzLnkyPWksdGhpcy5jbGlja0NhbGxiYWNrPW4sdGhpcy5ob3ZlckNhbGxiYWNrPW8sdGhpcy50b29sdGlwQ2FsbGJhY2s9cyx0aGlzLmxlYXZlQ2FsbGJhY2s9YSx0aGlzLndpbGxMaW5rQWN0aXZhdGU9Y307dC5Nb3VzZVpvbmU9Y30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBpLG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWkoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KSxvPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG4sbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PWk/aT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6aTtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsaSk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkobj1lW2FdKSYmKHM9KG88Mz9uKHMpOm8+Mz9uKHQscixzKTpuKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9LHM9dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyLGkpe3QocixpLGUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TZWxlY3Rpb25TZXJ2aWNlPXZvaWQgMDt2YXIgYT1yKDExKSxjPXIoNTIpLGw9cig0KSxoPXIoMCksdT1yKDUpLGY9cigxKSxfPXIoMzApLGQ9cig1MykscD1yKDIpLHY9U3RyaW5nLmZyb21DaGFyQ29kZSgxNjApLGc9bmV3IFJlZ0V4cCh2LFwiZ1wiKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyLGksbixvLHMsYSl7dmFyIHU9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB1Ll9lbGVtZW50PXQsdS5fc2NyZWVuRWxlbWVudD1yLHUuX2J1ZmZlclNlcnZpY2U9aSx1Ll9jb3JlU2VydmljZT1uLHUuX21vdXNlU2VydmljZT1vLHUuX29wdGlvbnNTZXJ2aWNlPXMsdS5fcmVuZGVyU2VydmljZT1hLHUuX2RyYWdTY3JvbGxBbW91bnQ9MCx1Ll9lbmFibGVkPSEwLHUuX3dvcmtDZWxsPW5ldyBsLkNlbGxEYXRhLHUuX21vdXNlRG93blRpbWVTdGFtcD0wLHUuX29uTGludXhNb3VzZVNlbGVjdGlvbj11LnJlZ2lzdGVyKG5ldyBoLkV2ZW50RW1pdHRlciksdS5fb25SZWRyYXdSZXF1ZXN0PXUucmVnaXN0ZXIobmV3IGguRXZlbnRFbWl0dGVyKSx1Ll9vblNlbGVjdGlvbkNoYW5nZT11LnJlZ2lzdGVyKG5ldyBoLkV2ZW50RW1pdHRlciksdS5fb25SZXF1ZXN0U2Nyb2xsTGluZXM9dS5yZWdpc3RlcihuZXcgaC5FdmVudEVtaXR0ZXIpLHUuX21vdXNlTW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUpe3JldHVybiB1Ll9vbk1vdXNlTW92ZShlKX0sdS5fbW91c2VVcExpc3RlbmVyPWZ1bmN0aW9uKGUpe3JldHVybiB1Ll9vbk1vdXNlVXAoZSl9LHUuX2NvcmVTZXJ2aWNlLm9uVXNlcklucHV0KChmdW5jdGlvbigpe3UuaGFzU2VsZWN0aW9uJiZ1LmNsZWFyU2VsZWN0aW9uKCl9KSksdS5fdHJpbUxpc3RlbmVyPXUuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLm9uVHJpbSgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuX29uVHJpbShlKX0pKSx1LnJlZ2lzdGVyKHUuX2J1ZmZlclNlcnZpY2UuYnVmZmVycy5vbkJ1ZmZlckFjdGl2YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gdS5fb25CdWZmZXJBY3RpdmF0ZShlKX0pKSksdS5lbmFibGUoKSx1Ll9tb2RlbD1uZXcgYy5TZWxlY3Rpb25Nb2RlbCh1Ll9idWZmZXJTZXJ2aWNlKSx1Ll9hY3RpdmVTZWxlY3Rpb25Nb2RlPTAsdX1yZXR1cm4gbih0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uTGludXhNb3VzZVNlbGVjdGlvblwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25MaW51eE1vdXNlU2VsZWN0aW9uLmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uUmVxdWVzdFJlZHJhd1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25SZWRyYXdSZXF1ZXN0LmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uU2VsZWN0aW9uQ2hhbmdlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblNlbGVjdGlvbkNoYW5nZS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvblJlcXVlc3RTY3JvbGxMaW5lc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25SZXF1ZXN0U2Nyb2xsTGluZXMuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZU1vdXNlRG93bkxpc3RlbmVycygpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLl9lbmFibGVkPSExfSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJzZWxlY3Rpb25TdGFydFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9kZWwuZmluYWxTZWxlY3Rpb25TdGFydH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJzZWxlY3Rpb25FbmRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uRW5kfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcImhhc1NlbGVjdGlvblwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9tb2RlbC5maW5hbFNlbGVjdGlvblN0YXJ0LHQ9dGhpcy5fbW9kZWwuZmluYWxTZWxlY3Rpb25FbmQ7cmV0dXJuISghZXx8IXQpJiYoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJzZWxlY3Rpb25UZXh0XCIse2dldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uU3RhcnQsdD10aGlzLl9tb2RlbC5maW5hbFNlbGVjdGlvbkVuZDtpZighZXx8IXQpcmV0dXJuXCJcIjt2YXIgcj10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcixpPVtdO2lmKDM9PT10aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlKXtpZihlWzBdPT09dFswXSlyZXR1cm5cIlwiO2Zvcih2YXIgbj1lWzFdO248PXRbMV07bisrKXt2YXIgbz1yLnRyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZyhuLCEwLGVbMF0sdFswXSk7aS5wdXNoKG8pfX1lbHNle3ZhciBzPWVbMV09PT10WzFdP3RbMF06dm9pZCAwO2kucHVzaChyLnRyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZyhlWzFdLCEwLGVbMF0scykpO2ZvcihuPWVbMV0rMTtuPD10WzFdLTE7bisrKXt2YXIgYz1yLmxpbmVzLmdldChuKTtvPXIudHJhbnNsYXRlQnVmZmVyTGluZVRvU3RyaW5nKG4sITApO2MmJmMuaXNXcmFwcGVkP2lbaS5sZW5ndGgtMV0rPW86aS5wdXNoKG8pfWlmKGVbMV0hPT10WzFdKXtjPXIubGluZXMuZ2V0KHRbMV0pLG89ci50cmFuc2xhdGVCdWZmZXJMaW5lVG9TdHJpbmcodFsxXSwhMCwwLHRbMF0pO2MmJmMuaXNXcmFwcGVkP2lbaS5sZW5ndGgtMV0rPW86aS5wdXNoKG8pfX1yZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoZyxcIiBcIil9KSkuam9pbihhLmlzV2luZG93cz9cIlxcclxcblwiOlwiXFxuXCIpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fbW9kZWwuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLl9yZW1vdmVNb3VzZURvd25MaXN0ZW5lcnMoKSx0aGlzLnJlZnJlc2goKSx0aGlzLl9vblNlbGVjdGlvbkNoYW5nZS5maXJlKCl9LHQucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczsodGhpcy5fcmVmcmVzaEFuaW1hdGlvbkZyYW1lfHwodGhpcy5fcmVmcmVzaEFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3JlZnJlc2goKX0pKSksYS5pc0xpbnV4JiZlKSYmKHRoaXMuc2VsZWN0aW9uVGV4dC5sZW5ndGgmJnRoaXMuX29uTGludXhNb3VzZVNlbGVjdGlvbi5maXJlKHRoaXMuc2VsZWN0aW9uVGV4dCkpfSx0LnByb3RvdHlwZS5fcmVmcmVzaD1mdW5jdGlvbigpe3RoaXMuX3JlZnJlc2hBbmltYXRpb25GcmFtZT12b2lkIDAsdGhpcy5fb25SZWRyYXdSZXF1ZXN0LmZpcmUoe3N0YXJ0OnRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uU3RhcnQsZW5kOnRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uRW5kLGNvbHVtblNlbGVjdE1vZGU6Mz09PXRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGV9KX0sdC5wcm90b3R5cGUuaXNDbGlja0luU2VsZWN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldE1vdXNlQnVmZmVyQ29vcmRzKGUpLHI9dGhpcy5fbW9kZWwuZmluYWxTZWxlY3Rpb25TdGFydCxpPXRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uRW5kO3JldHVybiEhKHImJmkmJnQpJiZ0aGlzLl9hcmVDb29yZHNJblNlbGVjdGlvbih0LHIsaSl9LHQucHJvdG90eXBlLl9hcmVDb29yZHNJblNlbGVjdGlvbj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbMV0+dFsxXSYmZVsxXTxyWzFdfHx0WzFdPT09clsxXSYmZVsxXT09PXRbMV0mJmVbMF0+PXRbMF0mJmVbMF08clswXXx8dFsxXTxyWzFdJiZlWzFdPT09clsxXSYmZVswXTxyWzBdfHx0WzFdPHJbMV0mJmVbMV09PT10WzFdJiZlWzBdPj10WzBdfSx0LnByb3RvdHlwZS5zZWxlY3RXb3JkQXRDdXJzb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0TW91c2VCdWZmZXJDb29yZHMoZSk7dCYmKHRoaXMuX3NlbGVjdFdvcmRBdCh0LCExKSx0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmQ9dm9pZCAwLHRoaXMucmVmcmVzaCghMCkpfSx0LnByb3RvdHlwZS5zZWxlY3RBbGw9ZnVuY3Rpb24oKXt0aGlzLl9tb2RlbC5pc1NlbGVjdEFsbEFjdGl2ZT0hMCx0aGlzLnJlZnJlc2goKSx0aGlzLl9vblNlbGVjdGlvbkNoYW5nZS5maXJlKCl9LHQucHJvdG90eXBlLnNlbGVjdExpbmVzPWZ1bmN0aW9uKGUsdCl7dGhpcy5fbW9kZWwuY2xlYXJTZWxlY3Rpb24oKSxlPU1hdGgubWF4KGUsMCksdD1NYXRoLm1pbih0LHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmxlbmd0aC0xKSx0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydD1bMCxlXSx0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmQ9W3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0XSx0aGlzLnJlZnJlc2goKSx0aGlzLl9vblNlbGVjdGlvbkNoYW5nZS5maXJlKCl9LHQucHJvdG90eXBlLl9vblRyaW09ZnVuY3Rpb24oZSl7dGhpcy5fbW9kZWwub25UcmltKGUpJiZ0aGlzLnJlZnJlc2goKX0sdC5wcm90b3R5cGUuX2dldE1vdXNlQnVmZmVyQ29vcmRzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21vdXNlU2VydmljZS5nZXRDb29yZHMoZSx0aGlzLl9zY3JlZW5FbGVtZW50LHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MsITApO2lmKHQpcmV0dXJuIHRbMF0tLSx0WzFdLS0sdFsxXSs9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3AsdH0sdC5wcm90b3R5cGUuX2dldE1vdXNlRXZlbnRTY3JvbGxBbW91bnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9Xy5nZXRDb29yZHNSZWxhdGl2ZVRvRWxlbWVudChlLHRoaXMuX3NjcmVlbkVsZW1lbnQpWzFdLHI9dGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNhbnZhc0hlaWdodDtyZXR1cm4gdD49MCYmdDw9cj8wOih0PnImJih0LT1yKSx0PU1hdGgubWluKE1hdGgubWF4KHQsLTUwKSw1MCksKHQvPTUwKS9NYXRoLmFicyh0KStNYXRoLnJvdW5kKDE0KnQpKX0sdC5wcm90b3R5cGUuc2hvdWxkRm9yY2VTZWxlY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGEuaXNNYWM/ZS5hbHRLZXkmJnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMubWFjT3B0aW9uQ2xpY2tGb3JjZXNTZWxlY3Rpb246ZS5zaGlmdEtleX0sdC5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7aWYodGhpcy5fbW91c2VEb3duVGltZVN0YW1wPWUudGltZVN0YW1wLCgyIT09ZS5idXR0b258fCF0aGlzLmhhc1NlbGVjdGlvbikmJjA9PT1lLmJ1dHRvbil7aWYoIXRoaXMuX2VuYWJsZWQpe2lmKCF0aGlzLnNob3VsZEZvcmNlU2VsZWN0aW9uKGUpKXJldHVybjtlLnN0b3BQcm9wYWdhdGlvbigpfWUucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnU2Nyb2xsQW1vdW50PTAsdGhpcy5fZW5hYmxlZCYmZS5zaGlmdEtleT90aGlzLl9vbkluY3JlbWVudGFsQ2xpY2soZSk6MT09PWUuZGV0YWlsP3RoaXMuX29uU2luZ2xlQ2xpY2soZSk6Mj09PWUuZGV0YWlsP3RoaXMuX29uRG91YmxlQ2xpY2soZSk6Mz09PWUuZGV0YWlsJiZ0aGlzLl9vblRyaXBsZUNsaWNrKGUpLHRoaXMuX2FkZE1vdXNlRG93bkxpc3RlbmVycygpLHRoaXMucmVmcmVzaCghMCl9fSx0LnByb3RvdHlwZS5fYWRkTW91c2VEb3duTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9zY3JlZW5FbGVtZW50Lm93bmVyRG9jdW1lbnQmJih0aGlzLl9zY3JlZW5FbGVtZW50Lm93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuX21vdXNlTW92ZUxpc3RlbmVyKSx0aGlzLl9zY3JlZW5FbGVtZW50Lm93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLl9tb3VzZVVwTGlzdGVuZXIpKSx0aGlzLl9kcmFnU2Nyb2xsSW50ZXJ2YWxUaW1lcj13aW5kb3cuc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2RyYWdTY3JvbGwoKX0pLDUwKX0sdC5wcm90b3R5cGUuX3JlbW92ZU1vdXNlRG93bkxpc3RlbmVycz1mdW5jdGlvbigpe3RoaXMuX3NjcmVlbkVsZW1lbnQub3duZXJEb2N1bWVudCYmKHRoaXMuX3NjcmVlbkVsZW1lbnQub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fbW91c2VNb3ZlTGlzdGVuZXIpLHRoaXMuX3NjcmVlbkVsZW1lbnQub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMuX21vdXNlVXBMaXN0ZW5lcikpLGNsZWFySW50ZXJ2YWwodGhpcy5fZHJhZ1Njcm9sbEludGVydmFsVGltZXIpLHRoaXMuX2RyYWdTY3JvbGxJbnRlcnZhbFRpbWVyPXZvaWQgMH0sdC5wcm90b3R5cGUuX29uSW5jcmVtZW50YWxDbGljaz1mdW5jdGlvbihlKXt0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydCYmKHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZD10aGlzLl9nZXRNb3VzZUJ1ZmZlckNvb3JkcyhlKSl9LHQucHJvdG90eXBlLl9vblNpbmdsZUNsaWNrPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0TGVuZ3RoPTAsdGhpcy5fbW9kZWwuaXNTZWxlY3RBbGxBY3RpdmU9ITEsdGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZT10aGlzLnNob3VsZENvbHVtblNlbGVjdChlKT8zOjAsdGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnQ9dGhpcy5fZ2V0TW91c2VCdWZmZXJDb29yZHMoZSksdGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnQpe3RoaXMuX21vZGVsLnNlbGVjdGlvbkVuZD12b2lkIDA7dmFyIHQ9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMuZ2V0KHRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0WzFdKTt0JiZ0Lmxlbmd0aCE9PXRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0WzBdJiYwPT09dC5oYXNXaWR0aCh0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydFswXSkmJnRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0WzBdKyt9fSx0LnByb3RvdHlwZS5fb25Eb3VibGVDbGljaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRNb3VzZUJ1ZmZlckNvb3JkcyhlKTt0JiYodGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZT0xLHRoaXMuX3NlbGVjdFdvcmRBdCh0LCEwKSl9LHQucHJvdG90eXBlLl9vblRyaXBsZUNsaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldE1vdXNlQnVmZmVyQ29vcmRzKGUpO3QmJih0aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlPTIsdGhpcy5fc2VsZWN0TGluZUF0KHRbMV0pKX0sdC5wcm90b3R5cGUuc2hvdWxkQ29sdW1uU2VsZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBlLmFsdEtleSYmIShhLmlzTWFjJiZ0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLm1hY09wdGlvbkNsaWNrRm9yY2VzU2VsZWN0aW9uKX0sdC5wcm90b3R5cGUuX29uTW91c2VNb3ZlPWZ1bmN0aW9uKGUpe2lmKGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnQpe3ZhciB0PXRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZD9bdGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzBdLHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFsxXV06bnVsbDtpZih0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmQ9dGhpcy5fZ2V0TW91c2VCdWZmZXJDb29yZHMoZSksdGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kKXsyPT09dGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZT90aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMV08dGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnRbMV0/dGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzBdPTA6dGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzBdPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29sczoxPT09dGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZSYmdGhpcy5fc2VsZWN0VG9Xb3JkQXQodGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kKSx0aGlzLl9kcmFnU2Nyb2xsQW1vdW50PXRoaXMuX2dldE1vdXNlRXZlbnRTY3JvbGxBbW91bnQoZSksMyE9PXRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGUmJih0aGlzLl9kcmFnU2Nyb2xsQW1vdW50PjA/dGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzBdPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29sczp0aGlzLl9kcmFnU2Nyb2xsQW1vdW50PDAmJih0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMF09MCkpO3ZhciByPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyO2lmKHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFsxXTxyLmxpbmVzLmxlbmd0aCl7dmFyIGk9ci5saW5lcy5nZXQodGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzFdKTtpJiYwPT09aS5oYXNXaWR0aCh0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMF0pJiZ0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMF0rK310JiZ0WzBdPT09dGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzBdJiZ0WzFdPT09dGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzFdfHx0aGlzLnJlZnJlc2goITApfWVsc2UgdGhpcy5yZWZyZXNoKCEwKX19LHQucHJvdG90eXBlLl9kcmFnU2Nyb2xsPWZ1bmN0aW9uKCl7aWYodGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kJiZ0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydCYmdGhpcy5fZHJhZ1Njcm9sbEFtb3VudCl7dGhpcy5fb25SZXF1ZXN0U2Nyb2xsTGluZXMuZmlyZSh7YW1vdW50OnRoaXMuX2RyYWdTY3JvbGxBbW91bnQsc3VwcHJlc3NTY3JvbGxFdmVudDohMX0pO3ZhciBlPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyO3RoaXMuX2RyYWdTY3JvbGxBbW91bnQ+MD8oMyE9PXRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGUmJih0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMF09dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzKSx0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMV09TWF0aC5taW4oZS55ZGlzcCt0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MsZS5saW5lcy5sZW5ndGgtMSkpOigzIT09dGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZSYmKHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFswXT0wKSx0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMV09ZS55ZGlzcCksdGhpcy5yZWZyZXNoKCl9fSx0LnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKGUpe3ZhciB0PWUudGltZVN0YW1wLXRoaXMuX21vdXNlRG93blRpbWVTdGFtcDtpZih0aGlzLl9yZW1vdmVNb3VzZURvd25MaXN0ZW5lcnMoKSx0aGlzLnNlbGVjdGlvblRleHQubGVuZ3RoPD0xJiZ0PDUwMCYmZS5hbHRLZXkpe2lmKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnliYXNlPT09dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3Ape3ZhciByPXRoaXMuX21vdXNlU2VydmljZS5nZXRDb29yZHMoZSx0aGlzLl9lbGVtZW50LHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MsITEpO2lmKHImJnZvaWQgMCE9PXJbMF0mJnZvaWQgMCE9PXJbMV0pe3ZhciBpPWQubW92ZVRvQ2VsbFNlcXVlbmNlKHJbMF0tMSxyWzFdLTEsdGhpcy5fYnVmZmVyU2VydmljZSx0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuYXBwbGljYXRpb25DdXJzb3JLZXlzKTt0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KGksITApfX19ZWxzZSB0aGlzLmhhc1NlbGVjdGlvbiYmdGhpcy5fb25TZWxlY3Rpb25DaGFuZ2UuZmlyZSgpfSx0LnByb3RvdHlwZS5fb25CdWZmZXJBY3RpdmF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLl90cmltTGlzdGVuZXIuZGlzcG9zZSgpLHRoaXMuX3RyaW1MaXN0ZW5lcj1lLmFjdGl2ZUJ1ZmZlci5saW5lcy5vblRyaW0oKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9vblRyaW0oZSl9KSl9LHQucHJvdG90eXBlLl9jb252ZXJ0Vmlld3BvcnRDb2xUb0NoYXJhY3RlckluZGV4PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRbMF0saT0wO3RbMF0+PWk7aSsrKXt2YXIgbj1lLmxvYWRDZWxsKGksdGhpcy5fd29ya0NlbGwpLmdldENoYXJzKCkubGVuZ3RoOzA9PT10aGlzLl93b3JrQ2VsbC5nZXRXaWR0aCgpP3ItLTpuPjEmJnRbMF0hPT1pJiYocis9bi0xKX1yZXR1cm4gcn0sdC5wcm90b3R5cGUuc2V0U2VsZWN0aW9uPWZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9tb2RlbC5jbGVhclNlbGVjdGlvbigpLHRoaXMuX3JlbW92ZU1vdXNlRG93bkxpc3RlbmVycygpLHRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0PVtlLHRdLHRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0TGVuZ3RoPXIsdGhpcy5yZWZyZXNoKCl9LHQucHJvdG90eXBlLl9nZXRXb3JkQXQ9ZnVuY3Rpb24oZSx0LHIsaSl7aWYodm9pZCAwPT09ciYmKHI9ITApLHZvaWQgMD09PWkmJihpPSEwKSwhKGVbMF0+PXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scykpe3ZhciBuPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLG89bi5saW5lcy5nZXQoZVsxXSk7aWYobyl7dmFyIHM9bi50cmFuc2xhdGVCdWZmZXJMaW5lVG9TdHJpbmcoZVsxXSwhMSksYT10aGlzLl9jb252ZXJ0Vmlld3BvcnRDb2xUb0NoYXJhY3RlckluZGV4KG8sZSksYz1hLGw9ZVswXS1hLGg9MCx1PTAsZj0wLF89MDtpZihcIiBcIj09PXMuY2hhckF0KGEpKXtmb3IoO2E+MCYmXCIgXCI9PT1zLmNoYXJBdChhLTEpOylhLS07Zm9yKDtjPHMubGVuZ3RoJiZcIiBcIj09PXMuY2hhckF0KGMrMSk7KWMrK31lbHNle3ZhciBkPWVbMF0scD1lWzBdOzA9PT1vLmdldFdpZHRoKGQpJiYoaCsrLGQtLSksMj09PW8uZ2V0V2lkdGgocCkmJih1KysscCsrKTt2YXIgdj1vLmdldFN0cmluZyhwKS5sZW5ndGg7Zm9yKHY+MSYmKF8rPXYtMSxjKz12LTEpO2Q+MCYmYT4wJiYhdGhpcy5faXNDaGFyV29yZFNlcGFyYXRvcihvLmxvYWRDZWxsKGQtMSx0aGlzLl93b3JrQ2VsbCkpOyl7by5sb2FkQ2VsbChkLTEsdGhpcy5fd29ya0NlbGwpO3ZhciBnPXRoaXMuX3dvcmtDZWxsLmdldENoYXJzKCkubGVuZ3RoOzA9PT10aGlzLl93b3JrQ2VsbC5nZXRXaWR0aCgpPyhoKyssZC0tKTpnPjEmJihmKz1nLTEsYS09Zy0xKSxhLS0sZC0tfWZvcig7cDxvLmxlbmd0aCYmYysxPHMubGVuZ3RoJiYhdGhpcy5faXNDaGFyV29yZFNlcGFyYXRvcihvLmxvYWRDZWxsKHArMSx0aGlzLl93b3JrQ2VsbCkpOyl7by5sb2FkQ2VsbChwKzEsdGhpcy5fd29ya0NlbGwpO3ZhciB5PXRoaXMuX3dvcmtDZWxsLmdldENoYXJzKCkubGVuZ3RoOzI9PT10aGlzLl93b3JrQ2VsbC5nZXRXaWR0aCgpPyh1KysscCsrKTp5PjEmJihfKz15LTEsYys9eS0xKSxjKysscCsrfX1jKys7dmFyIGI9YStsLWgrZixTPU1hdGgubWluKHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyxjLWEraCt1LWYtXyk7aWYodHx8XCJcIiE9PXMuc2xpY2UoYSxjKS50cmltKCkpe2lmKHImJjA9PT1iJiYzMiE9PW8uZ2V0Q29kZVBvaW50KDApKXt2YXIgbT1uLmxpbmVzLmdldChlWzFdLTEpO2lmKG0mJm8uaXNXcmFwcGVkJiYzMiE9PW0uZ2V0Q29kZVBvaW50KHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scy0xKSl7dmFyIEM9dGhpcy5fZ2V0V29yZEF0KFt0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMtMSxlWzFdLTFdLCExLCEwLCExKTtpZihDKXt2YXIgdz10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMtQy5zdGFydDtiLT13LFMrPXd9fX1pZihpJiZiK1M9PT10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMmJjMyIT09by5nZXRDb2RlUG9pbnQodGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLTEpKXt2YXIgRT1uLmxpbmVzLmdldChlWzFdKzEpO2lmKEUmJkUuaXNXcmFwcGVkJiYzMiE9PUUuZ2V0Q29kZVBvaW50KDApKXt2YXIgTD10aGlzLl9nZXRXb3JkQXQoWzAsZVsxXSsxXSwhMSwhMSwhMCk7TCYmKFMrPUwubGVuZ3RoKX19cmV0dXJue3N0YXJ0OmIsbGVuZ3RoOlN9fX19fSx0LnByb3RvdHlwZS5fc2VsZWN0V29yZEF0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fZ2V0V29yZEF0KGUsdCk7aWYocil7Zm9yKDtyLnN0YXJ0PDA7KXIuc3RhcnQrPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyxlWzFdLS07dGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnQ9W3Iuc3RhcnQsZVsxXV0sdGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnRMZW5ndGg9ci5sZW5ndGh9fSx0LnByb3RvdHlwZS5fc2VsZWN0VG9Xb3JkQXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0V29yZEF0KGUsITApO2lmKHQpe2Zvcih2YXIgcj1lWzFdO3Quc3RhcnQ8MDspdC5zdGFydCs9dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHItLTtpZighdGhpcy5fbW9kZWwuYXJlU2VsZWN0aW9uVmFsdWVzUmV2ZXJzZWQoKSlmb3IoO3Quc3RhcnQrdC5sZW5ndGg+dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzOyl0Lmxlbmd0aC09dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHIrKzt0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmQ9W3RoaXMuX21vZGVsLmFyZVNlbGVjdGlvblZhbHVlc1JldmVyc2VkKCk/dC5zdGFydDp0LnN0YXJ0K3QubGVuZ3RoLHJdfX0sdC5wcm90b3R5cGUuX2lzQ2hhcldvcmRTZXBhcmF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1lLmdldFdpZHRoKCkmJnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMud29yZFNlcGFyYXRvci5pbmRleE9mKGUuZ2V0Q2hhcnMoKSk+PTB9LHQucHJvdG90eXBlLl9zZWxlY3RMaW5lQXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuZ2V0V3JhcHBlZFJhbmdlRm9yTGluZShlKTt0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydD1bMCx0LmZpcnN0XSx0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmQ9W3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0Lmxhc3RdLHRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0TGVuZ3RoPTB9LHQ9byhbcygyLGYuSUJ1ZmZlclNlcnZpY2UpLHMoMyxmLklDb3JlU2VydmljZSkscyg0LHUuSU1vdXNlU2VydmljZSkscyg1LGYuSU9wdGlvbnNTZXJ2aWNlKSxzKDYsdS5JUmVuZGVyU2VydmljZSldLHQpfShwLkRpc3Bvc2FibGUpO3QuU2VsZWN0aW9uU2VydmljZT15fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TZWxlY3Rpb25Nb2RlbD12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2J1ZmZlclNlcnZpY2U9ZSx0aGlzLmlzU2VsZWN0QWxsQWN0aXZlPSExLHRoaXMuc2VsZWN0aW9uU3RhcnRMZW5ndGg9MH1yZXR1cm4gZS5wcm90b3R5cGUuY2xlYXJTZWxlY3Rpb249ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvblN0YXJ0PXZvaWQgMCx0aGlzLnNlbGVjdGlvbkVuZD12b2lkIDAsdGhpcy5pc1NlbGVjdEFsbEFjdGl2ZT0hMSx0aGlzLnNlbGVjdGlvblN0YXJ0TGVuZ3RoPTB9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImZpbmFsU2VsZWN0aW9uU3RhcnRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RBbGxBY3RpdmU/WzAsMF06dGhpcy5zZWxlY3Rpb25FbmQmJnRoaXMuc2VsZWN0aW9uU3RhcnQmJnRoaXMuYXJlU2VsZWN0aW9uVmFsdWVzUmV2ZXJzZWQoKT90aGlzLnNlbGVjdGlvbkVuZDp0aGlzLnNlbGVjdGlvblN0YXJ0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImZpbmFsU2VsZWN0aW9uRW5kXCIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuaXNTZWxlY3RBbGxBY3RpdmUpcmV0dXJuW3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55YmFzZSt0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MtMV07aWYodGhpcy5zZWxlY3Rpb25TdGFydCl7aWYoIXRoaXMuc2VsZWN0aW9uRW5kfHx0aGlzLmFyZVNlbGVjdGlvblZhbHVlc1JldmVyc2VkKCkpe3ZhciBlPXRoaXMuc2VsZWN0aW9uU3RhcnRbMF0rdGhpcy5zZWxlY3Rpb25TdGFydExlbmd0aDtyZXR1cm4gZT50aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHM/W2UldGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHRoaXMuc2VsZWN0aW9uU3RhcnRbMV0rTWF0aC5mbG9vcihlL3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scyldOltlLHRoaXMuc2VsZWN0aW9uU3RhcnRbMV1dfXJldHVybiB0aGlzLnNlbGVjdGlvblN0YXJ0TGVuZ3RoJiZ0aGlzLnNlbGVjdGlvbkVuZFsxXT09PXRoaXMuc2VsZWN0aW9uU3RhcnRbMV0/W01hdGgubWF4KHRoaXMuc2VsZWN0aW9uU3RhcnRbMF0rdGhpcy5zZWxlY3Rpb25TdGFydExlbmd0aCx0aGlzLnNlbGVjdGlvbkVuZFswXSksdGhpcy5zZWxlY3Rpb25FbmRbMV1dOnRoaXMuc2VsZWN0aW9uRW5kfX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hcmVTZWxlY3Rpb25WYWx1ZXNSZXZlcnNlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2VsZWN0aW9uU3RhcnQsdD10aGlzLnNlbGVjdGlvbkVuZDtyZXR1cm4hKCFlfHwhdCkmJihlWzFdPnRbMV18fGVbMV09PT10WzFdJiZlWzBdPnRbMF0pfSxlLnByb3RvdHlwZS5vblRyaW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhcnQmJih0aGlzLnNlbGVjdGlvblN0YXJ0WzFdLT1lKSx0aGlzLnNlbGVjdGlvbkVuZCYmKHRoaXMuc2VsZWN0aW9uRW5kWzFdLT1lKSx0aGlzLnNlbGVjdGlvbkVuZCYmdGhpcy5zZWxlY3Rpb25FbmRbMV08MD8odGhpcy5jbGVhclNlbGVjdGlvbigpLCEwKToodGhpcy5zZWxlY3Rpb25TdGFydCYmdGhpcy5zZWxlY3Rpb25TdGFydFsxXTwwJiYodGhpcy5zZWxlY3Rpb25TdGFydFsxXT0wKSwhMSl9LGV9KCk7dC5TZWxlY3Rpb25Nb2RlbD1pfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5tb3ZlVG9DZWxsU2VxdWVuY2U9dm9pZCAwO3ZhciBpPXIoMTIpO2Z1bmN0aW9uIG4oZSx0LHIsaSl7dmFyIG49ZS1vKHIsZSksYT10LW8ocix0KTtyZXR1cm4gbChNYXRoLmFicyhuLWEpLWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGk9MCxuPWUtbyhyLGUpLGE9dC1vKHIsdCksYz0wO2M8TWF0aC5hYnMobi1hKTtjKyspe3ZhciBsPVwiQVwiPT09cyhlLHQpPy0xOjEsaD1yLmJ1ZmZlci5saW5lcy5nZXQobitsKmMpO2gmJmguaXNXcmFwcGVkJiZpKyt9cmV0dXJuIGl9KGUsdCxyKSxjKHMoZSx0KSxpKSl9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wLGk9ZS5idWZmZXIubGluZXMuZ2V0KHQpLG49aSYmaS5pc1dyYXBwZWQ7biYmdD49MCYmdDxlLnJvd3M7KXIrKyxuPShpPWUuYnVmZmVyLmxpbmVzLmdldCgtLXQpKSYmaS5pc1dyYXBwZWQ7cmV0dXJuIHJ9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlPnQ/XCJBXCI6XCJCXCJ9ZnVuY3Rpb24gYShlLHQscixpLG4sbyl7Zm9yKHZhciBzPWUsYT10LGM9XCJcIjtzIT09cnx8YSE9PWk7KXMrPW4/MTotMSxuJiZzPm8uY29scy0xPyhjKz1vLmJ1ZmZlci50cmFuc2xhdGVCdWZmZXJMaW5lVG9TdHJpbmcoYSwhMSxlLHMpLHM9MCxlPTAsYSsrKTohbiYmczwwJiYoYys9by5idWZmZXIudHJhbnNsYXRlQnVmZmVyTGluZVRvU3RyaW5nKGEsITEsMCxlKzEpLGU9cz1vLmNvbHMtMSxhLS0pO3JldHVybiBjK28uYnVmZmVyLnRyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZyhhLCExLGUscyl9ZnVuY3Rpb24gYyhlLHQpe3ZhciByPXQ/XCJPXCI6XCJbXCI7cmV0dXJuIGkuQzAuRVNDK3IrZX1mdW5jdGlvbiBsKGUsdCl7ZT1NYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1cIlwiLGk9MDtpPGU7aSsrKXIrPXQ7cmV0dXJuIHJ9dC5tb3ZlVG9DZWxsU2VxdWVuY2U9ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIHMsaD1yLmJ1ZmZlci54LHU9ci5idWZmZXIueTtpZighci5idWZmZXIuaGFzU2Nyb2xsYmFjaylyZXR1cm4gZnVuY3Rpb24oZSx0LHIsaSxzLGgpe2lmKDA9PT1uKHQsaSxzLGgpLmxlbmd0aClyZXR1cm5cIlwiO3JldHVybiBsKGEoZSx0LGUsdC1vKHMsdCksITEscykubGVuZ3RoLGMoXCJEXCIsaCkpfShoLHUsMCx0LHIsaSkrbih1LHQscixpKStmdW5jdGlvbihlLHQscixpLHMsaCl7dmFyIHU7dT1uKHQsaSxzLGgpLmxlbmd0aD4wP2ktbyhzLGkpOnQ7dmFyIGY9aSxfPWZ1bmN0aW9uKGUsdCxyLGkscyxhKXt2YXIgYztjPW4ocixpLHMsYSkubGVuZ3RoPjA/aS1vKHMsaSk6dDtpZihlPHImJmM8PWl8fGU+PXImJmM8aSlyZXR1cm5cIkNcIjtyZXR1cm5cIkRcIn0oZSx0LHIsaSxzLGgpO3JldHVybiBsKGEoZSx1LHIsZixcIkNcIj09PV8scykubGVuZ3RoLGMoXyxoKSl9KGgsdSxlLHQscixpKTtpZih1PT09dClyZXR1cm4gcz1oPmU/XCJEXCI6XCJDXCIsbChNYXRoLmFicyhoLWUpLGMocyxpKSk7cz11PnQ/XCJEXCI6XCJDXCI7dmFyIGY9TWF0aC5hYnModS10KTtyZXR1cm4gbChmdW5jdGlvbihlLHQpe3JldHVybiB0LmNvbHMtZX0odT50P2U6aCxyKSsoZi0xKSpyLmNvbHMrMSsoKHU+dD9oOmUpLTEpLGMocyxpKSl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQscixpKXt2YXIgbixvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09aT9pPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTppO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixpKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShuPWVbYV0pJiYocz0obzwzP24ocyk6bz4zP24odCxyLHMpOm4odCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30sbj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7dChyLGksZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNvdW5kU2VydmljZT12b2lkIDA7dmFyIG89cigxKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9vcHRpb25zU2VydmljZT1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImF1ZGlvQ29udGV4dFwiLHtnZXQ6ZnVuY3Rpb24oKXtpZighZS5fYXVkaW9Db250ZXh0KXt2YXIgdD13aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oXCJXZWIgQXVkaW8gQVBJIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLiBDb25zaWRlciB1cGdyYWRpbmcgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uXCIpLG51bGw7ZS5fYXVkaW9Db250ZXh0PW5ldyB0fXJldHVybiBlLl9hdWRpb0NvbnRleHR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUucGxheUJlbGxTb3VuZD1mdW5jdGlvbigpe3ZhciB0PWUuYXVkaW9Db250ZXh0O2lmKHQpe3ZhciByPXQuY3JlYXRlQnVmZmVyU291cmNlKCk7dC5kZWNvZGVBdWRpb0RhdGEodGhpcy5fYmFzZTY0VG9BcnJheUJ1ZmZlcih0aGlzLl9yZW1vdmVNaW1lVHlwZSh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmJlbGxTb3VuZCkpLChmdW5jdGlvbihlKXtyLmJ1ZmZlcj1lLHIuY29ubmVjdCh0LmRlc3RpbmF0aW9uKSxyLnN0YXJ0KDApfSkpfX0sZS5wcm90b3R5cGUuX2Jhc2U2NFRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXdpbmRvdy5hdG9iKGUpLHI9dC5sZW5ndGgsaT1uZXcgVWludDhBcnJheShyKSxuPTA7bjxyO24rKylpW25dPXQuY2hhckNvZGVBdChuKTtyZXR1cm4gaS5idWZmZXJ9LGUucHJvdG90eXBlLl9yZW1vdmVNaW1lVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIixcIilbMV19LGU9aShbbigwLG8uSU9wdGlvbnNTZXJ2aWNlKV0sZSl9KCk7dC5Tb3VuZFNlcnZpY2U9c30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBpLG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWkoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KSxvPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG4sbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PWk/aT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6aTtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsaSk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkobj1lW2FdKSYmKHM9KG88Mz9uKHMpOm8+Mz9uKHQscixzKTpuKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9LHM9dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyLGkpe3QocixpLGUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Nb3VzZVpvbmVNYW5hZ2VyPXZvaWQgMDt2YXIgYT1yKDIpLGM9cig3KSxsPXIoNSksaD1yKDEpLHU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIsaSxuLG8scyl7dmFyIGE9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBhLl9lbGVtZW50PXQsYS5fc2NyZWVuRWxlbWVudD1yLGEuX2J1ZmZlclNlcnZpY2U9aSxhLl9tb3VzZVNlcnZpY2U9bixhLl9zZWxlY3Rpb25TZXJ2aWNlPW8sYS5fb3B0aW9uc1NlcnZpY2U9cyxhLl96b25lcz1bXSxhLl9hcmVab25lc0FjdGl2ZT0hMSxhLl9sYXN0SG92ZXJDb29yZHM9W3ZvaWQgMCx2b2lkIDBdLGEuX2luaXRpYWxTZWxlY3Rpb25MZW5ndGg9MCxhLnJlZ2lzdGVyKGMuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKGEuX2VsZW1lbnQsXCJtb3VzZWRvd25cIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuX29uTW91c2VEb3duKGUpfSkpKSxhLl9tb3VzZU1vdmVMaXN0ZW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gYS5fb25Nb3VzZU1vdmUoZSl9LGEuX21vdXNlTGVhdmVMaXN0ZW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gYS5fb25Nb3VzZUxlYXZlKGUpfSxhLl9jbGlja0xpc3RlbmVyPWZ1bmN0aW9uKGUpe3JldHVybiBhLl9vbkNsaWNrKGUpfSxhfXJldHVybiBuKHQsZSksdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKSx0aGlzLl9kZWFjdGl2YXRlKCl9LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLl96b25lcy5wdXNoKGUpLDE9PT10aGlzLl96b25lcy5sZW5ndGgmJnRoaXMuX2FjdGl2YXRlKCl9LHQucHJvdG90eXBlLmNsZWFyQWxsPWZ1bmN0aW9uKGUsdCl7aWYoMCE9PXRoaXMuX3pvbmVzLmxlbmd0aCl7ZSYmdHx8KGU9MCx0PXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xKTtmb3IodmFyIHI9MDtyPHRoaXMuX3pvbmVzLmxlbmd0aDtyKyspe3ZhciBpPXRoaXMuX3pvbmVzW3JdOyhpLnkxPmUmJmkueTE8PXQrMXx8aS55Mj5lJiZpLnkyPD10KzF8fGkueTE8ZSYmaS55Mj50KzEpJiYodGhpcy5fY3VycmVudFpvbmUmJnRoaXMuX2N1cnJlbnRab25lPT09aSYmKHRoaXMuX2N1cnJlbnRab25lLmxlYXZlQ2FsbGJhY2soKSx0aGlzLl9jdXJyZW50Wm9uZT12b2lkIDApLHRoaXMuX3pvbmVzLnNwbGljZShyLS0sMSkpfTA9PT10aGlzLl96b25lcy5sZW5ndGgmJnRoaXMuX2RlYWN0aXZhdGUoKX19LHQucHJvdG90eXBlLl9hY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuX2FyZVpvbmVzQWN0aXZlfHwodGhpcy5fYXJlWm9uZXNBY3RpdmU9ITAsdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fbW91c2VNb3ZlTGlzdGVuZXIpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix0aGlzLl9tb3VzZUxlYXZlTGlzdGVuZXIpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5fY2xpY2tMaXN0ZW5lcikpfSx0LnByb3RvdHlwZS5fZGVhY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuX2FyZVpvbmVzQWN0aXZlJiYodGhpcy5fYXJlWm9uZXNBY3RpdmU9ITEsdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fbW91c2VNb3ZlTGlzdGVuZXIpLHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix0aGlzLl9tb3VzZUxlYXZlTGlzdGVuZXIpLHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5fY2xpY2tMaXN0ZW5lcikpfSx0LnByb3RvdHlwZS5fb25Nb3VzZU1vdmU9ZnVuY3Rpb24oZSl7dGhpcy5fbGFzdEhvdmVyQ29vcmRzWzBdPT09ZS5wYWdlWCYmdGhpcy5fbGFzdEhvdmVyQ29vcmRzWzFdPT09ZS5wYWdlWXx8KHRoaXMuX29uSG92ZXIoZSksdGhpcy5fbGFzdEhvdmVyQ29vcmRzPVtlLnBhZ2VYLGUucGFnZVldKX0sdC5wcm90b3R5cGUuX29uSG92ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMuX2ZpbmRab25lRXZlbnRBdChlKTtyIT09dGhpcy5fY3VycmVudFpvbmUmJih0aGlzLl9jdXJyZW50Wm9uZSYmKHRoaXMuX2N1cnJlbnRab25lLmxlYXZlQ2FsbGJhY2soKSx0aGlzLl9jdXJyZW50Wm9uZT12b2lkIDAsdGhpcy5fdG9vbHRpcFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl90b29sdGlwVGltZW91dCkpLHImJih0aGlzLl9jdXJyZW50Wm9uZT1yLHIuaG92ZXJDYWxsYmFjayYmci5ob3ZlckNhbGxiYWNrKGUpLHRoaXMuX3Rvb2x0aXBUaW1lb3V0PXdpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiB0Ll9vblRvb2x0aXAoZSl9KSx0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxpbmtUb29sdGlwSG92ZXJEdXJhdGlvbikpKX0sdC5wcm90b3R5cGUuX29uVG9vbHRpcD1mdW5jdGlvbihlKXt0aGlzLl90b29sdGlwVGltZW91dD12b2lkIDA7dmFyIHQ9dGhpcy5fZmluZFpvbmVFdmVudEF0KGUpO3QmJnQudG9vbHRpcENhbGxiYWNrJiZ0LnRvb2x0aXBDYWxsYmFjayhlKX0sdC5wcm90b3R5cGUuX29uTW91c2VEb3duPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2luaXRpYWxTZWxlY3Rpb25MZW5ndGg9dGhpcy5fZ2V0U2VsZWN0aW9uTGVuZ3RoKCksdGhpcy5fYXJlWm9uZXNBY3RpdmUpe3ZhciB0PXRoaXMuX2ZpbmRab25lRXZlbnRBdChlKTsobnVsbD09dD92b2lkIDA6dC53aWxsTGlua0FjdGl2YXRlKGUpKSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19LHQucHJvdG90eXBlLl9vbk1vdXNlTGVhdmU9ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudFpvbmUmJih0aGlzLl9jdXJyZW50Wm9uZS5sZWF2ZUNhbGxiYWNrKCksdGhpcy5fY3VycmVudFpvbmU9dm9pZCAwLHRoaXMuX3Rvb2x0aXBUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fdG9vbHRpcFRpbWVvdXQpKX0sdC5wcm90b3R5cGUuX29uQ2xpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZmluZFpvbmVFdmVudEF0KGUpLHI9dGhpcy5fZ2V0U2VsZWN0aW9uTGVuZ3RoKCk7dCYmcj09PXRoaXMuX2luaXRpYWxTZWxlY3Rpb25MZW5ndGgmJih0LmNsaWNrQ2FsbGJhY2soZSksZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSx0LnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25UZXh0O3JldHVybiBlP2UubGVuZ3RoOjB9LHQucHJvdG90eXBlLl9maW5kWm9uZUV2ZW50QXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbW91c2VTZXJ2aWNlLmdldENvb3JkcyhlLHRoaXMuX3NjcmVlbkVsZW1lbnQsdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cyk7aWYodClmb3IodmFyIHI9dFswXSxpPXRbMV0sbj0wO248dGhpcy5fem9uZXMubGVuZ3RoO24rKyl7dmFyIG89dGhpcy5fem9uZXNbbl07aWYoby55MT09PW8ueTIpe2lmKGk9PT1vLnkxJiZyPj1vLngxJiZyPG8ueDIpcmV0dXJuIG99ZWxzZSBpZihpPT09by55MSYmcj49by54MXx8aT09PW8ueTImJnI8by54Mnx8aT5vLnkxJiZpPG8ueTIpcmV0dXJuIG99fSx0PW8oW3MoMixoLklCdWZmZXJTZXJ2aWNlKSxzKDMsbC5JTW91c2VTZXJ2aWNlKSxzKDQsbC5JU2VsZWN0aW9uU2VydmljZSkscyg1LGguSU9wdGlvbnNTZXJ2aWNlKV0sdCl9KGEuRGlzcG9zYWJsZSk7dC5Nb3VzZVpvbmVNYW5hZ2VyPXV9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaSxuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoaT1mdW5jdGlvbihlLHQpe3JldHVybihpPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1pKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5BY2Nlc3NpYmlsaXR5TWFuYWdlcj12b2lkIDA7dmFyIG89cigxOCkscz1yKDExKSxhPXIoMzEpLGM9cig3KSxsPXIoMiksaD1yKDMyKSx1PXIoMTcpLGY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIpe3ZhciBpPWUuY2FsbCh0aGlzKXx8dGhpcztpLl90ZXJtaW5hbD10LGkuX3JlbmRlclNlcnZpY2U9cixpLl9saXZlUmVnaW9uTGluZUNvdW50PTAsaS5fY2hhcnNUb0NvbnN1bWU9W10saS5fY2hhcnNUb0Fubm91bmNlPVwiXCIsaS5fYWNjZXNzaWJpbGl0eVRyZWVSb290PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksaS5fYWNjZXNzaWJpbGl0eVRyZWVSb290LmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1hY2Nlc3NpYmlsaXR5XCIpLGkuX3Jvd0NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGkuX3Jvd0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwieHRlcm0tYWNjZXNzaWJpbGl0eS10cmVlXCIpLGkuX3Jvd0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJkb2N1bWVudFwiKSxpLl9yb3dFbGVtZW50cz1bXTtmb3IodmFyIG49MDtuPGkuX3Rlcm1pbmFsLnJvd3M7bisrKWkuX3Jvd0VsZW1lbnRzW25dPWkuX2NyZWF0ZUFjY2Vzc2liaWxpdHlUcmVlTm9kZSgpLGkuX3Jvd0NvbnRhaW5lci5hcHBlbmRDaGlsZChpLl9yb3dFbGVtZW50c1tuXSk7aWYoaS5fdG9wQm91bmRhcnlGb2N1c0xpc3RlbmVyPWZ1bmN0aW9uKGUpe3JldHVybiBpLl9vbkJvdW5kYXJ5Rm9jdXMoZSwwKX0saS5fYm90dG9tQm91bmRhcnlGb2N1c0xpc3RlbmVyPWZ1bmN0aW9uKGUpe3JldHVybiBpLl9vbkJvdW5kYXJ5Rm9jdXMoZSwxKX0saS5fcm93RWxlbWVudHNbMF0uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsaS5fdG9wQm91bmRhcnlGb2N1c0xpc3RlbmVyKSxpLl9yb3dFbGVtZW50c1tpLl9yb3dFbGVtZW50cy5sZW5ndGgtMV0uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsaS5fYm90dG9tQm91bmRhcnlGb2N1c0xpc3RlbmVyKSxpLl9yZWZyZXNoUm93c0RpbWVuc2lvbnMoKSxpLl9hY2Nlc3NpYmlsaXR5VHJlZVJvb3QuYXBwZW5kQ2hpbGQoaS5fcm93Q29udGFpbmVyKSxpLl9yZW5kZXJSb3dzRGVib3VuY2VyPW5ldyBhLlJlbmRlckRlYm91bmNlcihpLl9yZW5kZXJSb3dzLmJpbmQoaSkpLGkuX3JlZnJlc2hSb3dzKCksaS5fbGl2ZVJlZ2lvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGkuX2xpdmVSZWdpb24uY2xhc3NMaXN0LmFkZChcImxpdmUtcmVnaW9uXCIpLGkuX2xpdmVSZWdpb24uc2V0QXR0cmlidXRlKFwiYXJpYS1saXZlXCIsXCJhc3NlcnRpdmVcIiksaS5fYWNjZXNzaWJpbGl0eVRyZWVSb290LmFwcGVuZENoaWxkKGkuX2xpdmVSZWdpb24pLCFpLl90ZXJtaW5hbC5lbGVtZW50KXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBlbmFibGUgYWNjZXNzaWJpbGl0eSBiZWZvcmUgVGVybWluYWwub3BlblwiKTtyZXR1cm4gaS5fdGVybWluYWwuZWxlbWVudC5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsaS5fYWNjZXNzaWJpbGl0eVRyZWVSb290KSxpLnJlZ2lzdGVyKGkuX3JlbmRlclJvd3NEZWJvdW5jZXIpLGkucmVnaXN0ZXIoaS5fdGVybWluYWwub25SZXNpemUoKGZ1bmN0aW9uKGUpe3JldHVybiBpLl9vblJlc2l6ZShlLnJvd3MpfSkpKSxpLnJlZ2lzdGVyKGkuX3Rlcm1pbmFsLm9uUmVuZGVyKChmdW5jdGlvbihlKXtyZXR1cm4gaS5fcmVmcmVzaFJvd3MoZS5zdGFydCxlLmVuZCl9KSkpLGkucmVnaXN0ZXIoaS5fdGVybWluYWwub25TY3JvbGwoKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3JlZnJlc2hSb3dzKCl9KSkpLGkucmVnaXN0ZXIoaS5fdGVybWluYWwub25BMTF5Q2hhcigoZnVuY3Rpb24oZSl7cmV0dXJuIGkuX29uQ2hhcihlKX0pKSksaS5yZWdpc3RlcihpLl90ZXJtaW5hbC5vbkxpbmVGZWVkKChmdW5jdGlvbigpe3JldHVybiBpLl9vbkNoYXIoXCJcXG5cIil9KSkpLGkucmVnaXN0ZXIoaS5fdGVybWluYWwub25BMTF5VGFiKChmdW5jdGlvbihlKXtyZXR1cm4gaS5fb25UYWIoZSl9KSkpLGkucmVnaXN0ZXIoaS5fdGVybWluYWwub25LZXkoKGZ1bmN0aW9uKGUpe3JldHVybiBpLl9vbktleShlLmtleSl9KSkpLGkucmVnaXN0ZXIoaS5fdGVybWluYWwub25CbHVyKChmdW5jdGlvbigpe3JldHVybiBpLl9jbGVhckxpdmVSZWdpb24oKX0pKSksaS5yZWdpc3RlcihpLl9yZW5kZXJTZXJ2aWNlLm9uRGltZW5zaW9uc0NoYW5nZSgoZnVuY3Rpb24oKXtyZXR1cm4gaS5fcmVmcmVzaFJvd3NEaW1lbnNpb25zKCl9KSkpLGkuX3NjcmVlbkRwck1vbml0b3I9bmV3IGguU2NyZWVuRHByTW9uaXRvcixpLnJlZ2lzdGVyKGkuX3NjcmVlbkRwck1vbml0b3IpLGkuX3NjcmVlbkRwck1vbml0b3Iuc2V0TGlzdGVuZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3JlZnJlc2hSb3dzRGltZW5zaW9ucygpfSkpLGkucmVnaXN0ZXIoYy5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIod2luZG93LFwicmVzaXplXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3JlZnJlc2hSb3dzRGltZW5zaW9ucygpfSkpKSxpfXJldHVybiBuKHQsZSksdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKSx1LnJlbW92ZUVsZW1lbnRGcm9tUGFyZW50KHRoaXMuX2FjY2Vzc2liaWxpdHlUcmVlUm9vdCksdGhpcy5fcm93RWxlbWVudHMubGVuZ3RoPTB9LHQucHJvdG90eXBlLl9vbkJvdW5kYXJ5Rm9jdXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnRhcmdldCxpPXRoaXMuX3Jvd0VsZW1lbnRzWzA9PT10PzE6dGhpcy5fcm93RWxlbWVudHMubGVuZ3RoLTJdO2lmKHIuZ2V0QXR0cmlidXRlKFwiYXJpYS1wb3NpbnNldFwiKSE9PSgwPT09dD9cIjFcIjpcIlwiK3RoaXMuX3Rlcm1pbmFsLmJ1ZmZlci5saW5lcy5sZW5ndGgpJiZlLnJlbGF0ZWRUYXJnZXQ9PT1pKXt2YXIgbixvO2lmKDA9PT10PyhuPXIsbz10aGlzLl9yb3dFbGVtZW50cy5wb3AoKSx0aGlzLl9yb3dDb250YWluZXIucmVtb3ZlQ2hpbGQobykpOihuPXRoaXMuX3Jvd0VsZW1lbnRzLnNoaWZ0KCksbz1yLHRoaXMuX3Jvd0NvbnRhaW5lci5yZW1vdmVDaGlsZChuKSksbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl90b3BCb3VuZGFyeUZvY3VzTGlzdGVuZXIpLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsdGhpcy5fYm90dG9tQm91bmRhcnlGb2N1c0xpc3RlbmVyKSwwPT09dCl7dmFyIHM9dGhpcy5fY3JlYXRlQWNjZXNzaWJpbGl0eVRyZWVOb2RlKCk7dGhpcy5fcm93RWxlbWVudHMudW5zaGlmdChzKSx0aGlzLl9yb3dDb250YWluZXIuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLHMpfWVsc2V7cz10aGlzLl9jcmVhdGVBY2Nlc3NpYmlsaXR5VHJlZU5vZGUoKTt0aGlzLl9yb3dFbGVtZW50cy5wdXNoKHMpLHRoaXMuX3Jvd0NvbnRhaW5lci5hcHBlbmRDaGlsZChzKX10aGlzLl9yb3dFbGVtZW50c1swXS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl90b3BCb3VuZGFyeUZvY3VzTGlzdGVuZXIpLHRoaXMuX3Jvd0VsZW1lbnRzW3RoaXMuX3Jvd0VsZW1lbnRzLmxlbmd0aC0xXS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl9ib3R0b21Cb3VuZGFyeUZvY3VzTGlzdGVuZXIpLHRoaXMuX3Rlcm1pbmFsLnNjcm9sbExpbmVzKDA9PT10Py0xOjEpLHRoaXMuX3Jvd0VsZW1lbnRzWzA9PT10PzE6dGhpcy5fcm93RWxlbWVudHMubGVuZ3RoLTJdLmZvY3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9fSx0LnByb3RvdHlwZS5fb25SZXNpemU9ZnVuY3Rpb24oZSl7dGhpcy5fcm93RWxlbWVudHNbdGhpcy5fcm93RWxlbWVudHMubGVuZ3RoLTFdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHRoaXMuX2JvdHRvbUJvdW5kYXJ5Rm9jdXNMaXN0ZW5lcik7Zm9yKHZhciB0PXRoaXMuX3Jvd0NvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGg7dDx0aGlzLl90ZXJtaW5hbC5yb3dzO3QrKyl0aGlzLl9yb3dFbGVtZW50c1t0XT10aGlzLl9jcmVhdGVBY2Nlc3NpYmlsaXR5VHJlZU5vZGUoKSx0aGlzLl9yb3dDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcm93RWxlbWVudHNbdF0pO2Zvcig7dGhpcy5fcm93RWxlbWVudHMubGVuZ3RoPmU7KXRoaXMuX3Jvd0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLl9yb3dFbGVtZW50cy5wb3AoKSk7dGhpcy5fcm93RWxlbWVudHNbdGhpcy5fcm93RWxlbWVudHMubGVuZ3RoLTFdLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHRoaXMuX2JvdHRvbUJvdW5kYXJ5Rm9jdXNMaXN0ZW5lciksdGhpcy5fcmVmcmVzaFJvd3NEaW1lbnNpb25zKCl9LHQucHJvdG90eXBlLl9jcmVhdGVBY2Nlc3NpYmlsaXR5VHJlZU5vZGU9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBlLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImxpc3RpdGVtXCIpLGUudGFiSW5kZXg9LTEsdGhpcy5fcmVmcmVzaFJvd0RpbWVuc2lvbnMoZSksZX0sdC5wcm90b3R5cGUuX29uVGFiPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZTt0KyspdGhpcy5fb25DaGFyKFwiIFwiKX0sdC5wcm90b3R5cGUuX29uQ2hhcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMuX2xpdmVSZWdpb25MaW5lQ291bnQ8MjEpe2lmKHRoaXMuX2NoYXJzVG9Db25zdW1lLmxlbmd0aD4wKXRoaXMuX2NoYXJzVG9Db25zdW1lLnNoaWZ0KCkhPT1lJiYodGhpcy5fY2hhcnNUb0Fubm91bmNlKz1lKTtlbHNlIHRoaXMuX2NoYXJzVG9Bbm5vdW5jZSs9ZTtcIlxcblwiPT09ZSYmKHRoaXMuX2xpdmVSZWdpb25MaW5lQ291bnQrKywyMT09PXRoaXMuX2xpdmVSZWdpb25MaW5lQ291bnQmJih0aGlzLl9saXZlUmVnaW9uLnRleHRDb250ZW50Kz1vLnRvb011Y2hPdXRwdXQpKSxzLmlzTWFjJiZ0aGlzLl9saXZlUmVnaW9uLnRleHRDb250ZW50JiZ0aGlzLl9saXZlUmVnaW9uLnRleHRDb250ZW50Lmxlbmd0aD4wJiYhdGhpcy5fbGl2ZVJlZ2lvbi5wYXJlbnROb2RlJiZzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX2FjY2Vzc2liaWxpdHlUcmVlUm9vdC5hcHBlbmRDaGlsZCh0Ll9saXZlUmVnaW9uKX0pLDApfX0sdC5wcm90b3R5cGUuX2NsZWFyTGl2ZVJlZ2lvbj1mdW5jdGlvbigpe3RoaXMuX2xpdmVSZWdpb24udGV4dENvbnRlbnQ9XCJcIix0aGlzLl9saXZlUmVnaW9uTGluZUNvdW50PTAscy5pc01hYyYmdS5yZW1vdmVFbGVtZW50RnJvbVBhcmVudCh0aGlzLl9saXZlUmVnaW9uKX0sdC5wcm90b3R5cGUuX29uS2V5PWZ1bmN0aW9uKGUpe3RoaXMuX2NsZWFyTGl2ZVJlZ2lvbigpLHRoaXMuX2NoYXJzVG9Db25zdW1lLnB1c2goZSl9LHQucHJvdG90eXBlLl9yZWZyZXNoUm93cz1mdW5jdGlvbihlLHQpe3RoaXMuX3JlbmRlclJvd3NEZWJvdW5jZXIucmVmcmVzaChlLHQsdGhpcy5fdGVybWluYWwucm93cyl9LHQucHJvdG90eXBlLl9yZW5kZXJSb3dzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMuX3Rlcm1pbmFsLmJ1ZmZlcixpPXIubGluZXMubGVuZ3RoLnRvU3RyaW5nKCksbj1lO248PXQ7bisrKXt2YXIgbz1yLnRyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZyhyLnlkaXNwK24sITApLHM9KHIueWRpc3ArbisxKS50b1N0cmluZygpLGE9dGhpcy5fcm93RWxlbWVudHNbbl07YSYmKDA9PT1vLmxlbmd0aD9hLmlubmVySFRNTD1cIiZuYnNwO1wiOmEudGV4dENvbnRlbnQ9byxhLnNldEF0dHJpYnV0ZShcImFyaWEtcG9zaW5zZXRcIixzKSxhLnNldEF0dHJpYnV0ZShcImFyaWEtc2V0c2l6ZVwiLGkpKX10aGlzLl9hbm5vdW5jZUNoYXJhY3RlcnMoKX0sdC5wcm90b3R5cGUuX3JlZnJlc2hSb3dzRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKHRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5hY3R1YWxDZWxsSGVpZ2h0KXt0aGlzLl9yb3dFbGVtZW50cy5sZW5ndGghPT10aGlzLl90ZXJtaW5hbC5yb3dzJiZ0aGlzLl9vblJlc2l6ZSh0aGlzLl90ZXJtaW5hbC5yb3dzKTtmb3IodmFyIGU9MDtlPHRoaXMuX3Rlcm1pbmFsLnJvd3M7ZSsrKXRoaXMuX3JlZnJlc2hSb3dEaW1lbnNpb25zKHRoaXMuX3Jvd0VsZW1lbnRzW2VdKX19LHQucHJvdG90eXBlLl9yZWZyZXNoUm93RGltZW5zaW9ucz1mdW5jdGlvbihlKXtlLnN0eWxlLmhlaWdodD10aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuYWN0dWFsQ2VsbEhlaWdodCtcInB4XCJ9LHQucHJvdG90eXBlLl9hbm5vdW5jZUNoYXJhY3RlcnM9ZnVuY3Rpb24oKXswIT09dGhpcy5fY2hhcnNUb0Fubm91bmNlLmxlbmd0aCYmKHRoaXMuX2xpdmVSZWdpb24udGV4dENvbnRlbnQrPXRoaXMuX2NoYXJzVG9Bbm5vdW5jZSx0aGlzLl9jaGFyc1RvQW5ub3VuY2U9XCJcIil9LHR9KGwuRGlzcG9zYWJsZSk7dC5BY2Nlc3NpYmlsaXR5TWFuYWdlcj1mfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGksbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9aShlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHIucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyByKX0pLG89dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQscixpKXt2YXIgbixvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09aT9pPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTppO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixpKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShuPWVbYV0pJiYocz0obzwzP24ocyk6bz4zP24odCxyLHMpOm4odCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30scz10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7dChyLGksZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRvbVJlbmRlcmVyPXZvaWQgMDt2YXIgYT1yKDU4KSxjPXIoOSksbD1yKDIpLGg9cig1KSx1PXIoMSksZj1yKDApLF89cigxMCksZD1yKDE3KSxwPTEsdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscixpLG4sbyxzLGMsbCxoKXt2YXIgdT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHUuX2NvbG9ycz10LHUuX2VsZW1lbnQ9cix1Ll9zY3JlZW5FbGVtZW50PWksdS5fdmlld3BvcnRFbGVtZW50PW4sdS5fbGlua2lmaWVyPW8sdS5fbGlua2lmaWVyMj1zLHUuX2NoYXJTaXplU2VydmljZT1jLHUuX29wdGlvbnNTZXJ2aWNlPWwsdS5fYnVmZmVyU2VydmljZT1oLHUuX3Rlcm1pbmFsQ2xhc3M9cCsrLHUuX3Jvd0VsZW1lbnRzPVtdLHUuX3Jvd0NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHUuX3Jvd0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwieHRlcm0tcm93c1wiKSx1Ll9yb3dDb250YWluZXIuc3R5bGUubGluZUhlaWdodD1cIm5vcm1hbFwiLHUuX3Jvd0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSx1Ll9yZWZyZXNoUm93RWxlbWVudHModS5fYnVmZmVyU2VydmljZS5jb2xzLHUuX2J1ZmZlclNlcnZpY2Uucm93cyksdS5fc2VsZWN0aW9uQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdS5fc2VsZWN0aW9uQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1zZWxlY3Rpb25cIiksdS5fc2VsZWN0aW9uQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLHUuZGltZW5zaW9ucz17c2NhbGVkQ2hhcldpZHRoOjAsc2NhbGVkQ2hhckhlaWdodDowLHNjYWxlZENlbGxXaWR0aDowLHNjYWxlZENlbGxIZWlnaHQ6MCxzY2FsZWRDaGFyTGVmdDowLHNjYWxlZENoYXJUb3A6MCxzY2FsZWRDYW52YXNXaWR0aDowLHNjYWxlZENhbnZhc0hlaWdodDowLGNhbnZhc1dpZHRoOjAsY2FudmFzSGVpZ2h0OjAsYWN0dWFsQ2VsbFdpZHRoOjAsYWN0dWFsQ2VsbEhlaWdodDowfSx1Ll91cGRhdGVEaW1lbnNpb25zKCksdS5faW5qZWN0Q3NzKCksdS5fcm93RmFjdG9yeT1uZXcgYS5Eb21SZW5kZXJlclJvd0ZhY3RvcnkoZG9jdW1lbnQsdS5fb3B0aW9uc1NlcnZpY2UsdS5fY29sb3JzKSx1Ll9lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1kb20tcmVuZGVyZXItb3duZXItXCIrdS5fdGVybWluYWxDbGFzcyksdS5fc2NyZWVuRWxlbWVudC5hcHBlbmRDaGlsZCh1Ll9yb3dDb250YWluZXIpLHUuX3NjcmVlbkVsZW1lbnQuYXBwZW5kQ2hpbGQodS5fc2VsZWN0aW9uQ29udGFpbmVyKSx1Ll9saW5raWZpZXIub25TaG93TGlua1VuZGVybGluZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuX29uTGlua0hvdmVyKGUpfSkpLHUuX2xpbmtpZmllci5vbkhpZGVMaW5rVW5kZXJsaW5lKChmdW5jdGlvbihlKXtyZXR1cm4gdS5fb25MaW5rTGVhdmUoZSl9KSksdS5fbGlua2lmaWVyMi5vblNob3dMaW5rVW5kZXJsaW5lKChmdW5jdGlvbihlKXtyZXR1cm4gdS5fb25MaW5rSG92ZXIoZSl9KSksdS5fbGlua2lmaWVyMi5vbkhpZGVMaW5rVW5kZXJsaW5lKChmdW5jdGlvbihlKXtyZXR1cm4gdS5fb25MaW5rTGVhdmUoZSl9KSksdX1yZXR1cm4gbih0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uUmVxdWVzdFJlZHJhd1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IGYuRXZlbnRFbWl0dGVyKS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwieHRlcm0tZG9tLXJlbmRlcmVyLW93bmVyLVwiK3RoaXMuX3Rlcm1pbmFsQ2xhc3MpLGQucmVtb3ZlRWxlbWVudEZyb21QYXJlbnQodGhpcy5fcm93Q29udGFpbmVyLHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5lcix0aGlzLl90aGVtZVN0eWxlRWxlbWVudCx0aGlzLl9kaW1lbnNpb25zU3R5bGVFbGVtZW50KSxlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLl91cGRhdGVEaW1lbnNpb25zPWZ1bmN0aW9uKCl7dGhpcy5kaW1lbnNpb25zLnNjYWxlZENoYXJXaWR0aD10aGlzLl9jaGFyU2l6ZVNlcnZpY2Uud2lkdGgqd2luZG93LmRldmljZVBpeGVsUmF0aW8sdGhpcy5kaW1lbnNpb25zLnNjYWxlZENoYXJIZWlnaHQ9TWF0aC5jZWlsKHRoaXMuX2NoYXJTaXplU2VydmljZS5oZWlnaHQqd2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuZGltZW5zaW9ucy5zY2FsZWRDZWxsV2lkdGg9dGhpcy5kaW1lbnNpb25zLnNjYWxlZENoYXJXaWR0aCtNYXRoLnJvdW5kKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMubGV0dGVyU3BhY2luZyksdGhpcy5kaW1lbnNpb25zLnNjYWxlZENlbGxIZWlnaHQ9TWF0aC5mbG9vcih0aGlzLmRpbWVuc2lvbnMuc2NhbGVkQ2hhckhlaWdodCp0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxpbmVIZWlnaHQpLHRoaXMuZGltZW5zaW9ucy5zY2FsZWRDaGFyTGVmdD0wLHRoaXMuZGltZW5zaW9ucy5zY2FsZWRDaGFyVG9wPTAsdGhpcy5kaW1lbnNpb25zLnNjYWxlZENhbnZhc1dpZHRoPXRoaXMuZGltZW5zaW9ucy5zY2FsZWRDZWxsV2lkdGgqdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHRoaXMuZGltZW5zaW9ucy5zY2FsZWRDYW52YXNIZWlnaHQ9dGhpcy5kaW1lbnNpb25zLnNjYWxlZENlbGxIZWlnaHQqdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLHRoaXMuZGltZW5zaW9ucy5jYW52YXNXaWR0aD1NYXRoLnJvdW5kKHRoaXMuZGltZW5zaW9ucy5zY2FsZWRDYW52YXNXaWR0aC93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5kaW1lbnNpb25zLmNhbnZhc0hlaWdodD1NYXRoLnJvdW5kKHRoaXMuZGltZW5zaW9ucy5zY2FsZWRDYW52YXNIZWlnaHQvd2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuZGltZW5zaW9ucy5hY3R1YWxDZWxsV2lkdGg9dGhpcy5kaW1lbnNpb25zLmNhbnZhc1dpZHRoL3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLmRpbWVuc2lvbnMuYWN0dWFsQ2VsbEhlaWdodD10aGlzLmRpbWVuc2lvbnMuY2FudmFzSGVpZ2h0L3RoaXMuX2J1ZmZlclNlcnZpY2Uucm93cztmb3IodmFyIGU9MCx0PXRoaXMuX3Jvd0VsZW1lbnRzO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3Iuc3R5bGUud2lkdGg9dGhpcy5kaW1lbnNpb25zLmNhbnZhc1dpZHRoK1wicHhcIixyLnN0eWxlLmhlaWdodD10aGlzLmRpbWVuc2lvbnMuYWN0dWFsQ2VsbEhlaWdodCtcInB4XCIsci5zdHlsZS5saW5lSGVpZ2h0PXRoaXMuZGltZW5zaW9ucy5hY3R1YWxDZWxsSGVpZ2h0K1wicHhcIixyLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCJ9dGhpcy5fZGltZW5zaW9uc1N0eWxlRWxlbWVudHx8KHRoaXMuX2RpbWVuc2lvbnNTdHlsZUVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLHRoaXMuX3NjcmVlbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZGltZW5zaW9uc1N0eWxlRWxlbWVudCkpO3ZhciBpPXRoaXMuX3Rlcm1pbmFsU2VsZWN0b3IrXCIgLnh0ZXJtLXJvd3Mgc3BhbiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAxMDAlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogXCIrdGhpcy5kaW1lbnNpb25zLmFjdHVhbENlbGxXaWR0aCtcInB4fVwiO3RoaXMuX2RpbWVuc2lvbnNTdHlsZUVsZW1lbnQuaW5uZXJIVE1MPWksdGhpcy5fc2VsZWN0aW9uQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLl92aWV3cG9ydEVsZW1lbnQuc3R5bGUuaGVpZ2h0LHRoaXMuX3NjcmVlbkVsZW1lbnQuc3R5bGUud2lkdGg9dGhpcy5kaW1lbnNpb25zLmNhbnZhc1dpZHRoK1wicHhcIix0aGlzLl9zY3JlZW5FbGVtZW50LnN0eWxlLmhlaWdodD10aGlzLmRpbWVuc2lvbnMuY2FudmFzSGVpZ2h0K1wicHhcIn0sdC5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKGUpe3RoaXMuX2NvbG9ycz1lLHRoaXMuX2luamVjdENzcygpfSx0LnByb3RvdHlwZS5faW5qZWN0Q3NzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl90aGVtZVN0eWxlRWxlbWVudHx8KHRoaXMuX3RoZW1lU3R5bGVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSx0aGlzLl9zY3JlZW5FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3RoZW1lU3R5bGVFbGVtZW50KSk7dmFyIHQ9dGhpcy5fdGVybWluYWxTZWxlY3RvcitcIiAueHRlcm0tcm93cyB7IGNvbG9yOiBcIit0aGlzLl9jb2xvcnMuZm9yZWdyb3VuZC5jc3MrXCI7IGZvbnQtZmFtaWx5OiBcIit0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmZvbnRGYW1pbHkrXCI7IGZvbnQtc2l6ZTogXCIrdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5mb250U2l6ZStcInB4O31cIjt0Kz10aGlzLl90ZXJtaW5hbFNlbGVjdG9yK1wiIHNwYW46bm90KC5cIithLkJPTERfQ0xBU1MrXCIpIHsgZm9udC13ZWlnaHQ6IFwiK3RoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuZm9udFdlaWdodCtcIjt9XCIrdGhpcy5fdGVybWluYWxTZWxlY3RvcitcIiBzcGFuLlwiK2EuQk9MRF9DTEFTUytcIiB7IGZvbnQtd2VpZ2h0OiBcIit0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmZvbnRXZWlnaHRCb2xkK1wiO31cIit0aGlzLl90ZXJtaW5hbFNlbGVjdG9yK1wiIHNwYW4uXCIrYS5JVEFMSUNfQ0xBU1MrXCIgeyBmb250LXN0eWxlOiBpdGFsaWM7fVwiLHQrPVwiQGtleWZyYW1lcyBibGlua19ib3hfc2hhZG93X1wiK3RoaXMuX3Rlcm1pbmFsQ2xhc3MrXCIgeyA1MCUgeyAgYm94LXNoYWRvdzogbm9uZTsgfX1cIix0Kz1cIkBrZXlmcmFtZXMgYmxpbmtfYmxvY2tfXCIrdGhpcy5fdGVybWluYWxDbGFzcytcIiB7IDAlIHsgIGJhY2tncm91bmQtY29sb3I6IFwiK3RoaXMuX2NvbG9ycy5jdXJzb3IuY3NzK1wiOyAgY29sb3I6IFwiK3RoaXMuX2NvbG9ycy5jdXJzb3JBY2NlbnQuY3NzK1wiOyB9IDUwJSB7ICBiYWNrZ3JvdW5kLWNvbG9yOiBcIit0aGlzLl9jb2xvcnMuY3Vyc29yQWNjZW50LmNzcytcIjsgIGNvbG9yOiBcIit0aGlzLl9jb2xvcnMuY3Vyc29yLmNzcytcIjsgfX1cIix0Kz10aGlzLl90ZXJtaW5hbFNlbGVjdG9yK1wiIC54dGVybS1yb3dzOm5vdCgueHRlcm0tZm9jdXMpIC5cIithLkNVUlNPUl9DTEFTUytcIi5cIithLkNVUlNPUl9TVFlMRV9CTE9DS19DTEFTUytcIiB7IG91dGxpbmU6IDFweCBzb2xpZCBcIit0aGlzLl9jb2xvcnMuY3Vyc29yLmNzcytcIjsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7fVwiK3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3IrXCIgLnh0ZXJtLXJvd3MueHRlcm0tZm9jdXMgLlwiK2EuQ1VSU09SX0NMQVNTK1wiLlwiK2EuQ1VSU09SX0JMSU5LX0NMQVNTK1wiOm5vdCguXCIrYS5DVVJTT1JfU1RZTEVfQkxPQ0tfQ0xBU1MrXCIpIHsgYW5pbWF0aW9uOiBibGlua19ib3hfc2hhZG93X1wiK3RoaXMuX3Rlcm1pbmFsQ2xhc3MrXCIgMXMgc3RlcC1lbmQgaW5maW5pdGU7fVwiK3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3IrXCIgLnh0ZXJtLXJvd3MueHRlcm0tZm9jdXMgLlwiK2EuQ1VSU09SX0NMQVNTK1wiLlwiK2EuQ1VSU09SX0JMSU5LX0NMQVNTK1wiLlwiK2EuQ1VSU09SX1NUWUxFX0JMT0NLX0NMQVNTK1wiIHsgYW5pbWF0aW9uOiBibGlua19ibG9ja19cIit0aGlzLl90ZXJtaW5hbENsYXNzK1wiIDFzIHN0ZXAtZW5kIGluZmluaXRlO31cIit0aGlzLl90ZXJtaW5hbFNlbGVjdG9yK1wiIC54dGVybS1yb3dzLnh0ZXJtLWZvY3VzIC5cIithLkNVUlNPUl9DTEFTUytcIi5cIithLkNVUlNPUl9TVFlMRV9CTE9DS19DTEFTUytcIiB7IGJhY2tncm91bmQtY29sb3I6IFwiK3RoaXMuX2NvbG9ycy5jdXJzb3IuY3NzK1wiOyBjb2xvcjogXCIrdGhpcy5fY29sb3JzLmN1cnNvckFjY2VudC5jc3MrXCI7fVwiK3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3IrXCIgLnh0ZXJtLXJvd3MgLlwiK2EuQ1VSU09SX0NMQVNTK1wiLlwiK2EuQ1VSU09SX1NUWUxFX0JBUl9DTEFTUytcIiB7IGJveC1zaGFkb3c6IFwiK3RoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuY3Vyc29yV2lkdGgrXCJweCAwIDAgXCIrdGhpcy5fY29sb3JzLmN1cnNvci5jc3MrXCIgaW5zZXQ7fVwiK3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3IrXCIgLnh0ZXJtLXJvd3MgLlwiK2EuQ1VSU09SX0NMQVNTK1wiLlwiK2EuQ1VSU09SX1NUWUxFX1VOREVSTElORV9DTEFTUytcIiB7IGJveC1zaGFkb3c6IDAgLTFweCAwIFwiK3RoaXMuX2NvbG9ycy5jdXJzb3IuY3NzK1wiIGluc2V0O31cIix0Kz10aGlzLl90ZXJtaW5hbFNlbGVjdG9yK1wiIC54dGVybS1zZWxlY3Rpb24geyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgei1pbmRleDogMTsgcG9pbnRlci1ldmVudHM6IG5vbmU7fVwiK3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3IrXCIgLnh0ZXJtLXNlbGVjdGlvbiBkaXYgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGJhY2tncm91bmQtY29sb3I6IFwiK3RoaXMuX2NvbG9ycy5zZWxlY3Rpb25UcmFuc3BhcmVudC5jc3MrXCI7fVwiLHRoaXMuX2NvbG9ycy5hbnNpLmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7dCs9ZS5fdGVybWluYWxTZWxlY3RvcitcIiAueHRlcm0tZmctXCIraStcIiB7IGNvbG9yOiBcIityLmNzcytcIjsgfVwiK2UuX3Rlcm1pbmFsU2VsZWN0b3IrXCIgLnh0ZXJtLWJnLVwiK2krXCIgeyBiYWNrZ3JvdW5kLWNvbG9yOiBcIityLmNzcytcIjsgfVwifSkpLHQrPXRoaXMuX3Rlcm1pbmFsU2VsZWN0b3IrXCIgLnh0ZXJtLWZnLVwiK2MuSU5WRVJURURfREVGQVVMVF9DT0xPUitcIiB7IGNvbG9yOiBcIitfLmNvbG9yLm9wYXF1ZSh0aGlzLl9jb2xvcnMuYmFja2dyb3VuZCkuY3NzK1wiOyB9XCIrdGhpcy5fdGVybWluYWxTZWxlY3RvcitcIiAueHRlcm0tYmctXCIrYy5JTlZFUlRFRF9ERUZBVUxUX0NPTE9SK1wiIHsgYmFja2dyb3VuZC1jb2xvcjogXCIrdGhpcy5fY29sb3JzLmZvcmVncm91bmQuY3NzK1wiOyB9XCIsdGhpcy5fdGhlbWVTdHlsZUVsZW1lbnQuaW5uZXJIVE1MPXR9LHQucHJvdG90eXBlLm9uRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZURpbWVuc2lvbnMoKX0sdC5wcm90b3R5cGUuX3JlZnJlc2hSb3dFbGVtZW50cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLl9yb3dFbGVtZW50cy5sZW5ndGg7cjw9dDtyKyspe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dGhpcy5fcm93Q29udGFpbmVyLmFwcGVuZENoaWxkKGkpLHRoaXMuX3Jvd0VsZW1lbnRzLnB1c2goaSl9Zm9yKDt0aGlzLl9yb3dFbGVtZW50cy5sZW5ndGg+dDspdGhpcy5fcm93Q29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuX3Jvd0VsZW1lbnRzLnBvcCgpKX0sdC5wcm90b3R5cGUub25SZXNpemU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZWZyZXNoUm93RWxlbWVudHMoZSx0KSx0aGlzLl91cGRhdGVEaW1lbnNpb25zKCl9LHQucHJvdG90eXBlLm9uQ2hhclNpemVDaGFuZ2VkPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlRGltZW5zaW9ucygpfSx0LnByb3RvdHlwZS5vbkJsdXI9ZnVuY3Rpb24oKXt0aGlzLl9yb3dDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcInh0ZXJtLWZvY3VzXCIpfSx0LnByb3RvdHlwZS5vbkZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fcm93Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1mb2N1c1wiKX0sdC5wcm90b3R5cGUub25TZWxlY3Rpb25DaGFuZ2VkPWZ1bmN0aW9uKGUsdCxyKXtmb3IoO3RoaXMuX3NlbGVjdGlvbkNvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGg7KXRoaXMuX3NlbGVjdGlvbkNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLl9zZWxlY3Rpb25Db250YWluZXIuY2hpbGRyZW5bMF0pO2lmKGUmJnQpe3ZhciBpPWVbMV0tdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3Asbj10WzFdLXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwLG89TWF0aC5tYXgoaSwwKSxzPU1hdGgubWluKG4sdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEpO2lmKCEobz49dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzfHxzPDApKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYocilhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNlbGVjdGlvbkVsZW1lbnQobyxlWzBdLHRbMF0scy1vKzEpKTtlbHNle3ZhciBjPWk9PT1vP2VbMF06MCxsPW89PT1uP3RbMF06dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzO2EuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU2VsZWN0aW9uRWxlbWVudChvLGMsbCkpO3ZhciBoPXMtby0xO2lmKGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU2VsZWN0aW9uRWxlbWVudChvKzEsMCx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsaCkpLG8hPT1zKXt2YXIgdT1uPT09cz90WzBdOnRoaXMuX2J1ZmZlclNlcnZpY2UuY29sczthLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNlbGVjdGlvbkVsZW1lbnQocywwLHUpKX19dGhpcy5fc2VsZWN0aW9uQ29udGFpbmVyLmFwcGVuZENoaWxkKGEpfX19LHQucHJvdG90eXBlLl9jcmVhdGVTZWxlY3Rpb25FbGVtZW50PWZ1bmN0aW9uKGUsdCxyLGkpe3ZvaWQgMD09PWkmJihpPTEpO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIG4uc3R5bGUuaGVpZ2h0PWkqdGhpcy5kaW1lbnNpb25zLmFjdHVhbENlbGxIZWlnaHQrXCJweFwiLG4uc3R5bGUudG9wPWUqdGhpcy5kaW1lbnNpb25zLmFjdHVhbENlbGxIZWlnaHQrXCJweFwiLG4uc3R5bGUubGVmdD10KnRoaXMuZGltZW5zaW9ucy5hY3R1YWxDZWxsV2lkdGgrXCJweFwiLG4uc3R5bGUud2lkdGg9dGhpcy5kaW1lbnNpb25zLmFjdHVhbENlbGxXaWR0aCooci10KStcInB4XCIsbn0sdC5wcm90b3R5cGUub25DdXJzb3JNb3ZlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5vbk9wdGlvbnNDaGFuZ2VkPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlRGltZW5zaW9ucygpLHRoaXMuX2luamVjdENzcygpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9dGhpcy5fcm93RWxlbWVudHM7ZTx0Lmxlbmd0aDtlKyspe3RbZV0uaW5uZXJIVE1MPVwiXCJ9fSx0LnByb3RvdHlwZS5yZW5kZXJSb3dzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnliYXNlK3RoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnksaT1NYXRoLm1pbih0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci54LHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scy0xKSxuPXRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuY3Vyc29yQmxpbmssbz1lO288PXQ7bysrKXt2YXIgcz10aGlzLl9yb3dFbGVtZW50c1tvXTtzLmlubmVySFRNTD1cIlwiO3ZhciBhPW8rdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3AsYz10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5saW5lcy5nZXQoYSksbD10aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmN1cnNvclN0eWxlO3MuYXBwZW5kQ2hpbGQodGhpcy5fcm93RmFjdG9yeS5jcmVhdGVSb3coYyxhPT09cixsLGksbix0aGlzLmRpbWVuc2lvbnMuYWN0dWFsQ2VsbFdpZHRoLHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scykpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwiX3Rlcm1pbmFsU2VsZWN0b3JcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCIueHRlcm0tZG9tLXJlbmRlcmVyLW93bmVyLVwiK3RoaXMuX3Rlcm1pbmFsQ2xhc3N9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUucmVnaXN0ZXJDaGFyYWN0ZXJKb2luZXI9ZnVuY3Rpb24oZSl7cmV0dXJuLTF9LHQucHJvdG90eXBlLmRlcmVnaXN0ZXJDaGFyYWN0ZXJKb2luZXI9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LHQucHJvdG90eXBlLl9vbkxpbmtIb3Zlcj1mdW5jdGlvbihlKXt0aGlzLl9zZXRDZWxsVW5kZXJsaW5lKGUueDEsZS54MixlLnkxLGUueTIsZS5jb2xzLCEwKX0sdC5wcm90b3R5cGUuX29uTGlua0xlYXZlPWZ1bmN0aW9uKGUpe3RoaXMuX3NldENlbGxVbmRlcmxpbmUoZS54MSxlLngyLGUueTEsZS55MixlLmNvbHMsITEpfSx0LnByb3RvdHlwZS5fc2V0Q2VsbFVuZGVybGluZT1mdW5jdGlvbihlLHQscixpLG4sbyl7Zm9yKDtlIT09dHx8ciE9PWk7KXt2YXIgcz10aGlzLl9yb3dFbGVtZW50c1tyXTtpZighcylyZXR1cm47dmFyIGE9cy5jaGlsZHJlbltlXTthJiYoYS5zdHlsZS50ZXh0RGVjb3JhdGlvbj1vP1widW5kZXJsaW5lXCI6XCJub25lXCIpLCsrZT49biYmKGU9MCxyKyspfX0sdD1vKFtzKDYsaC5JQ2hhclNpemVTZXJ2aWNlKSxzKDcsdS5JT3B0aW9uc1NlcnZpY2UpLHMoOCx1LklCdWZmZXJTZXJ2aWNlKV0sdCl9KGwuRGlzcG9zYWJsZSk7dC5Eb21SZW5kZXJlcj12fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Eb21SZW5kZXJlclJvd0ZhY3Rvcnk9dC5DVVJTT1JfU1RZTEVfVU5ERVJMSU5FX0NMQVNTPXQuQ1VSU09SX1NUWUxFX0JBUl9DTEFTUz10LkNVUlNPUl9TVFlMRV9CTE9DS19DTEFTUz10LkNVUlNPUl9CTElOS19DTEFTUz10LkNVUlNPUl9DTEFTUz10LlVOREVSTElORV9DTEFTUz10LklUQUxJQ19DTEFTUz10LkRJTV9DTEFTUz10LkJPTERfQ0xBU1M9dm9pZCAwO3ZhciBpPXIoOSksbj1yKDMpLG89cig0KSxzPXIoMTApO3QuQk9MRF9DTEFTUz1cInh0ZXJtLWJvbGRcIix0LkRJTV9DTEFTUz1cInh0ZXJtLWRpbVwiLHQuSVRBTElDX0NMQVNTPVwieHRlcm0taXRhbGljXCIsdC5VTkRFUkxJTkVfQ0xBU1M9XCJ4dGVybS11bmRlcmxpbmVcIix0LkNVUlNPUl9DTEFTUz1cInh0ZXJtLWN1cnNvclwiLHQuQ1VSU09SX0JMSU5LX0NMQVNTPVwieHRlcm0tY3Vyc29yLWJsaW5rXCIsdC5DVVJTT1JfU1RZTEVfQkxPQ0tfQ0xBU1M9XCJ4dGVybS1jdXJzb3ItYmxvY2tcIix0LkNVUlNPUl9TVFlMRV9CQVJfQ0xBU1M9XCJ4dGVybS1jdXJzb3ItYmFyXCIsdC5DVVJTT1JfU1RZTEVfVU5ERVJMSU5FX0NMQVNTPVwieHRlcm0tY3Vyc29yLXVuZGVybGluZVwiO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5fZG9jdW1lbnQ9ZSx0aGlzLl9vcHRpb25zU2VydmljZT10LHRoaXMuX2NvbG9ycz1yLHRoaXMuX3dvcmtDZWxsPW5ldyBvLkNlbGxEYXRhfXJldHVybiBlLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oZSl7dGhpcy5fY29sb3JzPWV9LGUucHJvdG90eXBlLmNyZWF0ZVJvdz1mdW5jdGlvbihlLHIsbyxhLGwsaCx1KXtmb3IodmFyIGY9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLF89MCxkPU1hdGgubWluKGUubGVuZ3RoLHUpLTE7ZD49MDtkLS0paWYoZS5sb2FkQ2VsbChkLHRoaXMuX3dvcmtDZWxsKS5nZXRDb2RlKCkhPT1uLk5VTExfQ0VMTF9DT0RFfHxyJiZkPT09YSl7Xz1kKzE7YnJlYWt9Zm9yKGQ9MDtkPF87ZCsrKXtlLmxvYWRDZWxsKGQsdGhpcy5fd29ya0NlbGwpO3ZhciBwPXRoaXMuX3dvcmtDZWxsLmdldFdpZHRoKCk7aWYoMCE9PXApe3ZhciB2PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO2lmKHA+MSYmKHYuc3R5bGUud2lkdGg9aCpwK1wicHhcIiksciYmZD09PWEpc3dpdGNoKHYuY2xhc3NMaXN0LmFkZCh0LkNVUlNPUl9DTEFTUyksbCYmdi5jbGFzc0xpc3QuYWRkKHQuQ1VSU09SX0JMSU5LX0NMQVNTKSxvKXtjYXNlXCJiYXJcIjp2LmNsYXNzTGlzdC5hZGQodC5DVVJTT1JfU1RZTEVfQkFSX0NMQVNTKTticmVhaztjYXNlXCJ1bmRlcmxpbmVcIjp2LmNsYXNzTGlzdC5hZGQodC5DVVJTT1JfU1RZTEVfVU5ERVJMSU5FX0NMQVNTKTticmVhaztkZWZhdWx0OnYuY2xhc3NMaXN0LmFkZCh0LkNVUlNPUl9TVFlMRV9CTE9DS19DTEFTUyl9dGhpcy5fd29ya0NlbGwuaXNCb2xkKCkmJnYuY2xhc3NMaXN0LmFkZCh0LkJPTERfQ0xBU1MpLHRoaXMuX3dvcmtDZWxsLmlzSXRhbGljKCkmJnYuY2xhc3NMaXN0LmFkZCh0LklUQUxJQ19DTEFTUyksdGhpcy5fd29ya0NlbGwuaXNEaW0oKSYmdi5jbGFzc0xpc3QuYWRkKHQuRElNX0NMQVNTKSx0aGlzLl93b3JrQ2VsbC5pc1VuZGVybGluZSgpJiZ2LmNsYXNzTGlzdC5hZGQodC5VTkRFUkxJTkVfQ0xBU1MpLHRoaXMuX3dvcmtDZWxsLmlzSW52aXNpYmxlKCk/di50ZXh0Q29udGVudD1uLldISVRFU1BBQ0VfQ0VMTF9DSEFSOnYudGV4dENvbnRlbnQ9dGhpcy5fd29ya0NlbGwuZ2V0Q2hhcnMoKXx8bi5XSElURVNQQUNFX0NFTExfQ0hBUjt2YXIgZz10aGlzLl93b3JrQ2VsbC5nZXRGZ0NvbG9yKCkseT10aGlzLl93b3JrQ2VsbC5nZXRGZ0NvbG9yTW9kZSgpLGI9dGhpcy5fd29ya0NlbGwuZ2V0QmdDb2xvcigpLFM9dGhpcy5fd29ya0NlbGwuZ2V0QmdDb2xvck1vZGUoKSxtPSEhdGhpcy5fd29ya0NlbGwuaXNJbnZlcnNlKCk7aWYobSl7dmFyIEM9ZztnPWIsYj1DO3ZhciB3PXk7eT1TLFM9d31zd2l0Y2goeSl7Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOnRoaXMuX3dvcmtDZWxsLmlzQm9sZCgpJiZnPDgmJnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuZHJhd0JvbGRUZXh0SW5CcmlnaHRDb2xvcnMmJihnKz04KSx0aGlzLl9hcHBseU1pbmltdW1Db250cmFzdCh2LHRoaXMuX2NvbG9ycy5iYWNrZ3JvdW5kLHRoaXMuX2NvbG9ycy5hbnNpW2ddKXx8di5jbGFzc0xpc3QuYWRkKFwieHRlcm0tZmctXCIrZyk7YnJlYWs7Y2FzZSA1MDMzMTY0ODp2YXIgRT1zLnJnYmEudG9Db2xvcihnPj4xNiYyNTUsZz4+OCYyNTUsMjU1JmcpO3RoaXMuX2FwcGx5TWluaW11bUNvbnRyYXN0KHYsdGhpcy5fY29sb3JzLmJhY2tncm91bmQsRSl8fHRoaXMuX2FkZFN0eWxlKHYsXCJjb2xvcjojXCIrYyhnLnRvU3RyaW5nKDE2KSxcIjBcIiw2KSk7YnJlYWs7Y2FzZSAwOmRlZmF1bHQ6dGhpcy5fYXBwbHlNaW5pbXVtQ29udHJhc3Qodix0aGlzLl9jb2xvcnMuYmFja2dyb3VuZCx0aGlzLl9jb2xvcnMuZm9yZWdyb3VuZCl8fG0mJnYuY2xhc3NMaXN0LmFkZChcInh0ZXJtLWZnLVwiK2kuSU5WRVJURURfREVGQVVMVF9DT0xPUil9c3dpdGNoKFMpe2Nhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjp2LmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1iZy1cIitiKTticmVhaztjYXNlIDUwMzMxNjQ4OnRoaXMuX2FkZFN0eWxlKHYsXCJiYWNrZ3JvdW5kLWNvbG9yOiNcIitjKGIudG9TdHJpbmcoMTYpLFwiMFwiLDYpKTticmVhaztjYXNlIDA6ZGVmYXVsdDptJiZ2LmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1iZy1cIitpLklOVkVSVEVEX0RFRkFVTFRfQ09MT1IpfWYuYXBwZW5kQ2hpbGQodil9fXJldHVybiBmfSxlLnByb3RvdHlwZS5fYXBwbHlNaW5pbXVtQ29udHJhc3Q9ZnVuY3Rpb24oZSx0LHIpe2lmKDE9PT10aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLm1pbmltdW1Db250cmFzdFJhdGlvKXJldHVybiExO3ZhciBpPXRoaXMuX2NvbG9ycy5jb250cmFzdENhY2hlLmdldENvbG9yKHRoaXMuX3dvcmtDZWxsLmJnLHRoaXMuX3dvcmtDZWxsLmZnKTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9cy5jb2xvci5lbnN1cmVDb250cmFzdFJhdGlvKHQscix0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLm1pbmltdW1Db250cmFzdFJhdGlvKSx0aGlzLl9jb2xvcnMuY29udHJhc3RDYWNoZS5zZXRDb2xvcih0aGlzLl93b3JrQ2VsbC5iZyx0aGlzLl93b3JrQ2VsbC5mZyxudWxsIT1pP2k6bnVsbCkpLCEhaSYmKHRoaXMuX2FkZFN0eWxlKGUsXCJjb2xvcjpcIitpLmNzcyksITApfSxlLnByb3RvdHlwZS5fYWRkU3R5bGU9ZnVuY3Rpb24oZSx0KXtlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsXCJcIisoZS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKXx8XCJcIikrdCtcIjtcIil9LGV9KCk7ZnVuY3Rpb24gYyhlLHQscil7Zm9yKDtlLmxlbmd0aDxyOyllPXQrZTtyZXR1cm4gZX10LkRvbVJlbmRlcmVyUm93RmFjdG9yeT1hfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5ldmFsdWF0ZUtleWJvYXJkRXZlbnQ9dm9pZCAwO3ZhciBpPXIoMTIpLG49ezQ4OltcIjBcIixcIilcIl0sNDk6W1wiMVwiLFwiIVwiXSw1MDpbXCIyXCIsXCJAXCJdLDUxOltcIjNcIixcIiNcIl0sNTI6W1wiNFwiLFwiJFwiXSw1MzpbXCI1XCIsXCIlXCJdLDU0OltcIjZcIixcIl5cIl0sNTU6W1wiN1wiLFwiJlwiXSw1NjpbXCI4XCIsXCIqXCJdLDU3OltcIjlcIixcIihcIl0sMTg2OltcIjtcIixcIjpcIl0sMTg3OltcIj1cIixcIitcIl0sMTg4OltcIixcIixcIjxcIl0sMTg5OltcIi1cIixcIl9cIl0sMTkwOltcIi5cIixcIj5cIl0sMTkxOltcIi9cIixcIj9cIl0sMTkyOltcImBcIixcIn5cIl0sMjE5OltcIltcIixcIntcIl0sMjIwOltcIlxcXFxcIixcInxcIl0sMjIxOltcIl1cIixcIn1cIl0sMjIyOltcIidcIiwnXCInXX07dC5ldmFsdWF0ZUtleWJvYXJkRXZlbnQ9ZnVuY3Rpb24oZSx0LHIsbyl7dmFyIHM9e3R5cGU6MCxjYW5jZWw6ITEsa2V5OnZvaWQgMH0sYT0oZS5zaGlmdEtleT8xOjApfChlLmFsdEtleT8yOjApfChlLmN0cmxLZXk/NDowKXwoZS5tZXRhS2V5Pzg6MCk7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSAwOlwiVUlLZXlJbnB1dFVwQXJyb3dcIj09PWUua2V5P3Mua2V5PXQ/aS5DMC5FU0MrXCJPQVwiOmkuQzAuRVNDK1wiW0FcIjpcIlVJS2V5SW5wdXRMZWZ0QXJyb3dcIj09PWUua2V5P3Mua2V5PXQ/aS5DMC5FU0MrXCJPRFwiOmkuQzAuRVNDK1wiW0RcIjpcIlVJS2V5SW5wdXRSaWdodEFycm93XCI9PT1lLmtleT9zLmtleT10P2kuQzAuRVNDK1wiT0NcIjppLkMwLkVTQytcIltDXCI6XCJVSUtleUlucHV0RG93bkFycm93XCI9PT1lLmtleSYmKHMua2V5PXQ/aS5DMC5FU0MrXCJPQlwiOmkuQzAuRVNDK1wiW0JcIik7YnJlYWs7Y2FzZSA4OmlmKGUuc2hpZnRLZXkpe3Mua2V5PWkuQzAuQlM7YnJlYWt9aWYoZS5hbHRLZXkpe3Mua2V5PWkuQzAuRVNDK2kuQzAuREVMO2JyZWFrfXMua2V5PWkuQzAuREVMO2JyZWFrO2Nhc2UgOTppZihlLnNoaWZ0S2V5KXtzLmtleT1pLkMwLkVTQytcIltaXCI7YnJlYWt9cy5rZXk9aS5DMC5IVCxzLmNhbmNlbD0hMDticmVhaztjYXNlIDEzOnMua2V5PWUuYWx0S2V5P2kuQzAuRVNDK2kuQzAuQ1I6aS5DMC5DUixzLmNhbmNlbD0hMDticmVhaztjYXNlIDI3OnMua2V5PWkuQzAuRVNDLGUuYWx0S2V5JiYocy5rZXk9aS5DMC5FU0MraS5DMC5FU0MpLHMuY2FuY2VsPSEwO2JyZWFrO2Nhc2UgMzc6aWYoZS5tZXRhS2V5KWJyZWFrO2E/KHMua2V5PWkuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJEXCIscy5rZXk9PT1pLkMwLkVTQytcIlsxOzNEXCImJihzLmtleT1pLkMwLkVTQysocj9cImJcIjpcIlsxOzVEXCIpKSk6cy5rZXk9dD9pLkMwLkVTQytcIk9EXCI6aS5DMC5FU0MrXCJbRFwiO2JyZWFrO2Nhc2UgMzk6aWYoZS5tZXRhS2V5KWJyZWFrO2E/KHMua2V5PWkuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJDXCIscy5rZXk9PT1pLkMwLkVTQytcIlsxOzNDXCImJihzLmtleT1pLkMwLkVTQysocj9cImZcIjpcIlsxOzVDXCIpKSk6cy5rZXk9dD9pLkMwLkVTQytcIk9DXCI6aS5DMC5FU0MrXCJbQ1wiO2JyZWFrO2Nhc2UgMzg6aWYoZS5tZXRhS2V5KWJyZWFrO2E/KHMua2V5PWkuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJBXCIscnx8cy5rZXkhPT1pLkMwLkVTQytcIlsxOzNBXCJ8fChzLmtleT1pLkMwLkVTQytcIlsxOzVBXCIpKTpzLmtleT10P2kuQzAuRVNDK1wiT0FcIjppLkMwLkVTQytcIltBXCI7YnJlYWs7Y2FzZSA0MDppZihlLm1ldGFLZXkpYnJlYWs7YT8ocy5rZXk9aS5DMC5FU0MrXCJbMTtcIisoYSsxKStcIkJcIixyfHxzLmtleSE9PWkuQzAuRVNDK1wiWzE7M0JcInx8KHMua2V5PWkuQzAuRVNDK1wiWzE7NUJcIikpOnMua2V5PXQ/aS5DMC5FU0MrXCJPQlwiOmkuQzAuRVNDK1wiW0JcIjticmVhaztjYXNlIDQ1OmUuc2hpZnRLZXl8fGUuY3RybEtleXx8KHMua2V5PWkuQzAuRVNDK1wiWzJ+XCIpO2JyZWFrO2Nhc2UgNDY6cy5rZXk9YT9pLkMwLkVTQytcIlszO1wiKyhhKzEpK1wiflwiOmkuQzAuRVNDK1wiWzN+XCI7YnJlYWs7Y2FzZSAzNjpzLmtleT1hP2kuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJIXCI6dD9pLkMwLkVTQytcIk9IXCI6aS5DMC5FU0MrXCJbSFwiO2JyZWFrO2Nhc2UgMzU6cy5rZXk9YT9pLkMwLkVTQytcIlsxO1wiKyhhKzEpK1wiRlwiOnQ/aS5DMC5FU0MrXCJPRlwiOmkuQzAuRVNDK1wiW0ZcIjticmVhaztjYXNlIDMzOmUuc2hpZnRLZXk/cy50eXBlPTI6cy5rZXk9aS5DMC5FU0MrXCJbNX5cIjticmVhaztjYXNlIDM0OmUuc2hpZnRLZXk/cy50eXBlPTM6cy5rZXk9aS5DMC5FU0MrXCJbNn5cIjticmVhaztjYXNlIDExMjpzLmtleT1hP2kuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJQXCI6aS5DMC5FU0MrXCJPUFwiO2JyZWFrO2Nhc2UgMTEzOnMua2V5PWE/aS5DMC5FU0MrXCJbMTtcIisoYSsxKStcIlFcIjppLkMwLkVTQytcIk9RXCI7YnJlYWs7Y2FzZSAxMTQ6cy5rZXk9YT9pLkMwLkVTQytcIlsxO1wiKyhhKzEpK1wiUlwiOmkuQzAuRVNDK1wiT1JcIjticmVhaztjYXNlIDExNTpzLmtleT1hP2kuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJTXCI6aS5DMC5FU0MrXCJPU1wiO2JyZWFrO2Nhc2UgMTE2OnMua2V5PWE/aS5DMC5FU0MrXCJbMTU7XCIrKGErMSkrXCJ+XCI6aS5DMC5FU0MrXCJbMTV+XCI7YnJlYWs7Y2FzZSAxMTc6cy5rZXk9YT9pLkMwLkVTQytcIlsxNztcIisoYSsxKStcIn5cIjppLkMwLkVTQytcIlsxN35cIjticmVhaztjYXNlIDExODpzLmtleT1hP2kuQzAuRVNDK1wiWzE4O1wiKyhhKzEpK1wiflwiOmkuQzAuRVNDK1wiWzE4flwiO2JyZWFrO2Nhc2UgMTE5OnMua2V5PWE/aS5DMC5FU0MrXCJbMTk7XCIrKGErMSkrXCJ+XCI6aS5DMC5FU0MrXCJbMTl+XCI7YnJlYWs7Y2FzZSAxMjA6cy5rZXk9YT9pLkMwLkVTQytcIlsyMDtcIisoYSsxKStcIn5cIjppLkMwLkVTQytcIlsyMH5cIjticmVhaztjYXNlIDEyMTpzLmtleT1hP2kuQzAuRVNDK1wiWzIxO1wiKyhhKzEpK1wiflwiOmkuQzAuRVNDK1wiWzIxflwiO2JyZWFrO2Nhc2UgMTIyOnMua2V5PWE/aS5DMC5FU0MrXCJbMjM7XCIrKGErMSkrXCJ+XCI6aS5DMC5FU0MrXCJbMjN+XCI7YnJlYWs7Y2FzZSAxMjM6cy5rZXk9YT9pLkMwLkVTQytcIlsyNDtcIisoYSsxKStcIn5cIjppLkMwLkVTQytcIlsyNH5cIjticmVhaztkZWZhdWx0OmlmKCFlLmN0cmxLZXl8fGUuc2hpZnRLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpaWYociYmIW98fCFlLmFsdEtleXx8ZS5tZXRhS2V5KXImJiFlLmFsdEtleSYmIWUuY3RybEtleSYmZS5tZXRhS2V5PzY1PT09ZS5rZXlDb2RlJiYocy50eXBlPTEpOmUua2V5JiYhZS5jdHJsS2V5JiYhZS5hbHRLZXkmJiFlLm1ldGFLZXkmJmUua2V5Q29kZT49NDgmJjE9PT1lLmtleS5sZW5ndGg/cy5rZXk9ZS5rZXk6ZS5rZXkmJmUuY3RybEtleSYmXCJfXCI9PT1lLmtleSYmKHMua2V5PWkuQzAuVVMpO2Vsc2V7dmFyIGM9bltlLmtleUNvZGVdLGw9YyYmY1tlLnNoaWZ0S2V5PzE6MF07aWYobClzLmtleT1pLkMwLkVTQytsO2Vsc2UgaWYoZS5rZXlDb2RlPj02NSYmZS5rZXlDb2RlPD05MCl7dmFyIGg9ZS5jdHJsS2V5P2Uua2V5Q29kZS02NDplLmtleUNvZGUrMzI7cy5rZXk9aS5DMC5FU0MrU3RyaW5nLmZyb21DaGFyQ29kZShoKX19ZWxzZSBlLmtleUNvZGU+PTY1JiZlLmtleUNvZGU8PTkwP3Mua2V5PVN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlLTY0KTozMj09PWUua2V5Q29kZT9zLmtleT1pLkMwLk5VTDplLmtleUNvZGU+PTUxJiZlLmtleUNvZGU8PTU1P3Mua2V5PVN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlLTUxKzI3KTo1Nj09PWUua2V5Q29kZT9zLmtleT1pLkMwLkRFTDoyMTk9PT1lLmtleUNvZGU/cy5rZXk9aS5DMC5FU0M6MjIwPT09ZS5rZXlDb2RlP3Mua2V5PWkuQzAuRlM6MjIxPT09ZS5rZXlDb2RlJiYocy5rZXk9aS5DMC5HUyl9cmV0dXJuIHN9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGksbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9aShlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHIucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyByKX0pLG89dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQscixpKXt2YXIgbixvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09aT9pPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTppO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixpKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShuPWVbYV0pJiYocz0obzwzP24ocyk6bz4zP24odCxyLHMpOm4odCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30scz10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7dChyLGksZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJlbmRlclNlcnZpY2U9dm9pZCAwO3ZhciBhPXIoMzEpLGM9cigwKSxsPXIoMiksaD1yKDMyKSx1PXIoNyksZj1yKDEpLF89cig1KSxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyLGksbixvLHMpe3ZhciBsPWUuY2FsbCh0aGlzKXx8dGhpcztpZihsLl9yZW5kZXJlcj10LGwuX3Jvd0NvdW50PXIsbC5faXNQYXVzZWQ9ITEsbC5fbmVlZHNGdWxsUmVmcmVzaD0hMSxsLl9pc05leHRSZW5kZXJSZWRyYXdPbmx5PSEwLGwuX25lZWRzU2VsZWN0aW9uUmVmcmVzaD0hMSxsLl9jYW52YXNXaWR0aD0wLGwuX2NhbnZhc0hlaWdodD0wLGwuX3NlbGVjdGlvblN0YXRlPXtzdGFydDp2b2lkIDAsZW5kOnZvaWQgMCxjb2x1bW5TZWxlY3RNb2RlOiExfSxsLl9vbkRpbWVuc2lvbnNDaGFuZ2U9bmV3IGMuRXZlbnRFbWl0dGVyLGwuX29uUmVuZGVyPW5ldyBjLkV2ZW50RW1pdHRlcixsLl9vblJlZnJlc2hSZXF1ZXN0PW5ldyBjLkV2ZW50RW1pdHRlcixsLnJlZ2lzdGVyKHtkaXNwb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIGwuX3JlbmRlcmVyLmRpc3Bvc2UoKX19KSxsLl9yZW5kZXJEZWJvdW5jZXI9bmV3IGEuUmVuZGVyRGVib3VuY2VyKChmdW5jdGlvbihlLHQpe3JldHVybiBsLl9yZW5kZXJSb3dzKGUsdCl9KSksbC5yZWdpc3RlcihsLl9yZW5kZXJEZWJvdW5jZXIpLGwuX3NjcmVlbkRwck1vbml0b3I9bmV3IGguU2NyZWVuRHByTW9uaXRvcixsLl9zY3JlZW5EcHJNb25pdG9yLnNldExpc3RlbmVyKChmdW5jdGlvbigpe3JldHVybiBsLm9uRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZSgpfSkpLGwucmVnaXN0ZXIobC5fc2NyZWVuRHByTW9uaXRvciksbC5yZWdpc3RlcihzLm9uUmVzaXplKChmdW5jdGlvbihlKXtyZXR1cm4gbC5fZnVsbFJlZnJlc2goKX0pKSksbC5yZWdpc3RlcihuLm9uT3B0aW9uQ2hhbmdlKChmdW5jdGlvbigpe3JldHVybiBsLl9yZW5kZXJlci5vbk9wdGlvbnNDaGFuZ2VkKCl9KSkpLGwucmVnaXN0ZXIoby5vbkNoYXJTaXplQ2hhbmdlKChmdW5jdGlvbigpe3JldHVybiBsLm9uQ2hhclNpemVDaGFuZ2VkKCl9KSkpLGwuX3JlbmRlcmVyLm9uUmVxdWVzdFJlZHJhdygoZnVuY3Rpb24oZSl7cmV0dXJuIGwucmVmcmVzaFJvd3MoZS5zdGFydCxlLmVuZCwhMCl9KSksbC5yZWdpc3Rlcih1LmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcih3aW5kb3csXCJyZXNpemVcIiwoZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkRldmljZVBpeGVsUmF0aW9DaGFuZ2UoKX0pKSksXCJJbnRlcnNlY3Rpb25PYnNlcnZlclwiaW4gd2luZG93KXt2YXIgZj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBsLl9vbkludGVyc2VjdGlvbkNoYW5nZShlW2UubGVuZ3RoLTFdKX0pLHt0aHJlc2hvbGQ6MH0pO2Yub2JzZXJ2ZShpKSxsLnJlZ2lzdGVyKHtkaXNwb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZGlzY29ubmVjdCgpfX0pfXJldHVybiBsfXJldHVybiBuKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25EaW1lbnNpb25zQ2hhbmdlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkRpbWVuc2lvbnNDaGFuZ2UuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25SZW5kZXJlZEJ1ZmZlckNoYW5nZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25SZW5kZXIuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25SZWZyZXNoUmVxdWVzdFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25SZWZyZXNoUmVxdWVzdC5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJkaW1lbnNpb25zXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5kaW1lbnNpb25zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9vbkludGVyc2VjdGlvbkNoYW5nZT1mdW5jdGlvbihlKXt0aGlzLl9pc1BhdXNlZD12b2lkIDA9PT1lLmlzSW50ZXJzZWN0aW5nPzA9PT1lLmludGVyc2VjdGlvblJhdGlvOiFlLmlzSW50ZXJzZWN0aW5nLCF0aGlzLl9pc1BhdXNlZCYmdGhpcy5fbmVlZHNGdWxsUmVmcmVzaCYmKHRoaXMucmVmcmVzaFJvd3MoMCx0aGlzLl9yb3dDb3VudC0xKSx0aGlzLl9uZWVkc0Z1bGxSZWZyZXNoPSExKX0sdC5wcm90b3R5cGUucmVmcmVzaFJvd3M9ZnVuY3Rpb24oZSx0LHIpe3ZvaWQgMD09PXImJihyPSExKSx0aGlzLl9pc1BhdXNlZD90aGlzLl9uZWVkc0Z1bGxSZWZyZXNoPSEwOihyfHwodGhpcy5faXNOZXh0UmVuZGVyUmVkcmF3T25seT0hMSksdGhpcy5fcmVuZGVyRGVib3VuY2VyLnJlZnJlc2goZSx0LHRoaXMuX3Jvd0NvdW50KSl9LHQucHJvdG90eXBlLl9yZW5kZXJSb3dzPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcmVuZGVyZXIucmVuZGVyUm93cyhlLHQpLHRoaXMuX25lZWRzU2VsZWN0aW9uUmVmcmVzaCYmKHRoaXMuX3JlbmRlcmVyLm9uU2VsZWN0aW9uQ2hhbmdlZCh0aGlzLl9zZWxlY3Rpb25TdGF0ZS5zdGFydCx0aGlzLl9zZWxlY3Rpb25TdGF0ZS5lbmQsdGhpcy5fc2VsZWN0aW9uU3RhdGUuY29sdW1uU2VsZWN0TW9kZSksdGhpcy5fbmVlZHNTZWxlY3Rpb25SZWZyZXNoPSExKSx0aGlzLl9pc05leHRSZW5kZXJSZWRyYXdPbmx5fHx0aGlzLl9vblJlbmRlci5maXJlKHtzdGFydDplLGVuZDp0fSksdGhpcy5faXNOZXh0UmVuZGVyUmVkcmF3T25seT0hMH0sdC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcm93Q291bnQ9dCx0aGlzLl9maXJlT25DYW52YXNSZXNpemUoKX0sdC5wcm90b3R5cGUuY2hhbmdlT3B0aW9ucz1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLm9uT3B0aW9uc0NoYW5nZWQoKSx0aGlzLnJlZnJlc2hSb3dzKDAsdGhpcy5fcm93Q291bnQtMSksdGhpcy5fZmlyZU9uQ2FudmFzUmVzaXplKCl9LHQucHJvdG90eXBlLl9maXJlT25DYW52YXNSZXNpemU9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5kaW1lbnNpb25zLmNhbnZhc1dpZHRoPT09dGhpcy5fY2FudmFzV2lkdGgmJnRoaXMuX3JlbmRlcmVyLmRpbWVuc2lvbnMuY2FudmFzSGVpZ2h0PT09dGhpcy5fY2FudmFzSGVpZ2h0fHx0aGlzLl9vbkRpbWVuc2lvbnNDaGFuZ2UuZmlyZSh0aGlzLl9yZW5kZXJlci5kaW1lbnNpb25zKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuc2V0UmVuZGVyZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9yZW5kZXJlci5kaXNwb3NlKCksdGhpcy5fcmVuZGVyZXI9ZSx0aGlzLl9yZW5kZXJlci5vblJlcXVlc3RSZWRyYXcoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJlZnJlc2hSb3dzKGUuc3RhcnQsZS5lbmQsITApfSkpLHRoaXMuX25lZWRzU2VsZWN0aW9uUmVmcmVzaD0hMCx0aGlzLl9mdWxsUmVmcmVzaCgpfSx0LnByb3RvdHlwZS5fZnVsbFJlZnJlc2g9ZnVuY3Rpb24oKXt0aGlzLl9pc1BhdXNlZD90aGlzLl9uZWVkc0Z1bGxSZWZyZXNoPSEwOnRoaXMucmVmcmVzaFJvd3MoMCx0aGlzLl9yb3dDb3VudC0xKX0sdC5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKGUpe3RoaXMuX3JlbmRlcmVyLnNldENvbG9ycyhlKSx0aGlzLl9mdWxsUmVmcmVzaCgpfSx0LnByb3RvdHlwZS5vbkRldmljZVBpeGVsUmF0aW9DaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5vbkRldmljZVBpeGVsUmF0aW9DaGFuZ2UoKSx0aGlzLnJlZnJlc2hSb3dzKDAsdGhpcy5fcm93Q291bnQtMSl9LHQucHJvdG90eXBlLm9uUmVzaXplPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcmVuZGVyZXIub25SZXNpemUoZSx0KSx0aGlzLl9mdWxsUmVmcmVzaCgpfSx0LnByb3RvdHlwZS5vbkNoYXJTaXplQ2hhbmdlZD1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLm9uQ2hhclNpemVDaGFuZ2VkKCl9LHQucHJvdG90eXBlLm9uQmx1cj1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLm9uQmx1cigpfSx0LnByb3RvdHlwZS5vbkZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIub25Gb2N1cygpfSx0LnByb3RvdHlwZS5vblNlbGVjdGlvbkNoYW5nZWQ9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX3NlbGVjdGlvblN0YXRlLnN0YXJ0PWUsdGhpcy5fc2VsZWN0aW9uU3RhdGUuZW5kPXQsdGhpcy5fc2VsZWN0aW9uU3RhdGUuY29sdW1uU2VsZWN0TW9kZT1yLHRoaXMuX3JlbmRlcmVyLm9uU2VsZWN0aW9uQ2hhbmdlZChlLHQscil9LHQucHJvdG90eXBlLm9uQ3Vyc29yTW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLm9uQ3Vyc29yTW92ZSgpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLmNsZWFyKCl9LHQucHJvdG90eXBlLnJlZ2lzdGVyQ2hhcmFjdGVySm9pbmVyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZW5kZXJlci5yZWdpc3RlckNoYXJhY3RlckpvaW5lcihlKX0sdC5wcm90b3R5cGUuZGVyZWdpc3RlckNoYXJhY3RlckpvaW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZGVyZWdpc3RlckNoYXJhY3RlckpvaW5lcihlKX0sdD1vKFtzKDMsZi5JT3B0aW9uc1NlcnZpY2UpLHMoNCxfLklDaGFyU2l6ZVNlcnZpY2UpLHMoNSxmLklCdWZmZXJTZXJ2aWNlKV0sdCl9KGwuRGlzcG9zYWJsZSk7dC5SZW5kZXJTZXJ2aWNlPWR9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBuLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1pP2k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOmk7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLGkpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKG49ZVthXSkmJihzPShvPDM/bihzKTpvPjM/bih0LHIscyk6bih0LHIpKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfSxuPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixpKXt0KHIsaSxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hhclNpemVTZXJ2aWNlPXZvaWQgMDt2YXIgbz1yKDEpLHM9cigwKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5fb3B0aW9uc1NlcnZpY2U9cix0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLl9vbkNoYXJTaXplQ2hhbmdlPW5ldyBzLkV2ZW50RW1pdHRlcix0aGlzLl9tZWFzdXJlU3RyYXRlZ3k9bmV3IGMoZSx0LHRoaXMuX29wdGlvbnNTZXJ2aWNlKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiaGFzVmFsaWRTaXplXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRoPjAmJnRoaXMuaGVpZ2h0PjB9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25DaGFyU2l6ZUNoYW5nZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25DaGFyU2l6ZUNoYW5nZS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbWVhc3VyZVN0cmF0ZWd5Lm1lYXN1cmUoKTtlLndpZHRoPT09dGhpcy53aWR0aCYmZS5oZWlnaHQ9PT10aGlzLmhlaWdodHx8KHRoaXMud2lkdGg9ZS53aWR0aCx0aGlzLmhlaWdodD1lLmhlaWdodCx0aGlzLl9vbkNoYXJTaXplQ2hhbmdlLmZpcmUoKSl9LGU9aShbbigyLG8uSU9wdGlvbnNTZXJ2aWNlKV0sZSl9KCk7dC5DaGFyU2l6ZVNlcnZpY2U9YTt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3RoaXMuX2RvY3VtZW50PWUsdGhpcy5fcGFyZW50RWxlbWVudD10LHRoaXMuX29wdGlvbnNTZXJ2aWNlPXIsdGhpcy5fcmVzdWx0PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLl9tZWFzdXJlRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwieHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnRcIiksdGhpcy5fbWVhc3VyZUVsZW1lbnQudGV4dENvbnRlbnQ9XCJXXCIsdGhpcy5fbWVhc3VyZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIiksdGhpcy5fcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCl9cmV0dXJuIGUucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24oKXt0aGlzLl9tZWFzdXJlRWxlbWVudC5zdHlsZS5mb250RmFtaWx5PXRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuZm9udEZhbWlseSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zdHlsZS5mb250U2l6ZT10aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmZvbnRTaXplK1wicHhcIjt2YXIgZT10aGlzLl9tZWFzdXJlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gMCE9PWUud2lkdGgmJjAhPT1lLmhlaWdodCYmKHRoaXMuX3Jlc3VsdC53aWR0aD1lLndpZHRoLHRoaXMuX3Jlc3VsdC5oZWlnaHQ9TWF0aC5jZWlsKGUuaGVpZ2h0KSksdGhpcy5fcmVzdWx0fSxlfSgpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQscixpKXt2YXIgbixvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09aT9pPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTppO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixpKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShuPWVbYV0pJiYocz0obzwzP24ocyk6bz4zP24odCxyLHMpOm4odCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30sbj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7dChyLGksZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1vdXNlU2VydmljZT12b2lkIDA7dmFyIG89cig1KSxzPXIoMzApLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5fcmVuZGVyU2VydmljZT1lLHRoaXMuX2NoYXJTaXplU2VydmljZT10fXJldHVybiBlLnByb3RvdHlwZS5nZXRDb29yZHM9ZnVuY3Rpb24oZSx0LHIsaSxuKXtyZXR1cm4gcy5nZXRDb29yZHMoZSx0LHIsaSx0aGlzLl9jaGFyU2l6ZVNlcnZpY2UuaGFzVmFsaWRTaXplLHRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5hY3R1YWxDZWxsV2lkdGgsdGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmFjdHVhbENlbGxIZWlnaHQsbil9LGUucHJvdG90eXBlLmdldFJhd0J5dGVDb29yZHM9ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG49dGhpcy5nZXRDb29yZHMoZSx0LHIsaSk7cmV0dXJuIHMuZ2V0UmF3Qnl0ZUNvb3JkcyhuKX0sZT1pKFtuKDAsby5JUmVuZGVyU2VydmljZSksbigxLG8uSUNoYXJTaXplU2VydmljZSldLGUpfSgpO3QuTW91c2VTZXJ2aWNlPWF9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaSxuPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoaT1mdW5jdGlvbihlLHQpe3JldHVybihpPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1pKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSksbz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBuLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1pP2k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOmk7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLGkpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKG49ZVthXSkmJihzPShvPDM/bihzKTpvPjM/bih0LHIscyk6bih0LHIpKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfSxzPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixpKXt0KHIsaSxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlua2lmaWVyMj12b2lkIDA7dmFyIGE9cigxKSxjPXIoMCksbD1yKDIpLGg9cig3KSx1PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9idWZmZXJTZXJ2aWNlPXQsci5fbGlua1Byb3ZpZGVycz1bXSxyLl9saW5rQ2FjaGVEaXNwb3NhYmxlcz1bXSxyLl9pc01vdXNlT3V0PSEwLHIuX2FjdGl2ZUxpbmU9LTEsci5fb25TaG93TGlua1VuZGVybGluZT1yLnJlZ2lzdGVyKG5ldyBjLkV2ZW50RW1pdHRlciksci5fb25IaWRlTGlua1VuZGVybGluZT1yLnJlZ2lzdGVyKG5ldyBjLkV2ZW50RW1pdHRlciksci5yZWdpc3RlcihsLmdldERpc3Bvc2VBcnJheURpc3Bvc2FibGUoci5fbGlua0NhY2hlRGlzcG9zYWJsZXMpKSxyfXJldHVybiBuKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25TaG93TGlua1VuZGVybGluZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25TaG93TGlua1VuZGVybGluZS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvbkhpZGVMaW5rVW5kZXJsaW5lXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkhpZGVMaW5rVW5kZXJsaW5lLmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnJlZ2lzdGVyTGlua1Byb3ZpZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX2xpbmtQcm92aWRlcnMucHVzaChlKSx7ZGlzcG9zZTpmdW5jdGlvbigpe3ZhciByPXQuX2xpbmtQcm92aWRlcnMuaW5kZXhPZihlKTstMSE9PXImJnQuX2xpbmtQcm92aWRlcnMuc3BsaWNlKHIsMSl9fX0sdC5wcm90b3R5cGUuYXR0YWNoVG9Eb209ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXRoaXM7dGhpcy5fZWxlbWVudD1lLHRoaXMuX21vdXNlU2VydmljZT10LHRoaXMuX3JlbmRlclNlcnZpY2U9cix0aGlzLnJlZ2lzdGVyKGguYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKHRoaXMuX2VsZW1lbnQsXCJtb3VzZWxlYXZlXCIsKGZ1bmN0aW9uKCl7aS5faXNNb3VzZU91dD0hMCxpLl9jbGVhckN1cnJlbnRMaW5rKCl9KSkpLHRoaXMucmVnaXN0ZXIoaC5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIodGhpcy5fZWxlbWVudCxcIm1vdXNlbW92ZVwiLHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcykpKSx0aGlzLnJlZ2lzdGVyKGguYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKHRoaXMuX2VsZW1lbnQsXCJjbGlja1wiLHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSkpfSx0LnByb3RvdHlwZS5fb25Nb3VzZU1vdmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbGFzdE1vdXNlRXZlbnQ9ZSx0aGlzLl9lbGVtZW50JiZ0aGlzLl9tb3VzZVNlcnZpY2Upe3ZhciB0PXRoaXMuX3Bvc2l0aW9uRnJvbU1vdXNlRXZlbnQoZSx0aGlzLl9lbGVtZW50LHRoaXMuX21vdXNlU2VydmljZSk7aWYodCl7dGhpcy5faXNNb3VzZU91dD0hMTtmb3IodmFyIHI9ZS5jb21wb3NlZFBhdGgoKSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBuPXJbaV07aWYobi5jbGFzc0xpc3QuY29udGFpbnMoXCJ4dGVybVwiKSlicmVhaztpZihuLmNsYXNzTGlzdC5jb250YWlucyhcInh0ZXJtLWhvdmVyXCIpKXJldHVybn10aGlzLl9sYXN0QnVmZmVyQ2VsbCYmdC54PT09dGhpcy5fbGFzdEJ1ZmZlckNlbGwueCYmdC55PT09dGhpcy5fbGFzdEJ1ZmZlckNlbGwueXx8KHRoaXMuX29uSG92ZXIodCksdGhpcy5fbGFzdEJ1ZmZlckNlbGw9dCl9fX0sdC5wcm90b3R5cGUuX29uSG92ZXI9ZnVuY3Rpb24oZSl7aWYodGhpcy5fYWN0aXZlTGluZSE9PWUueSlyZXR1cm4gdGhpcy5fY2xlYXJDdXJyZW50TGluaygpLHZvaWQgdGhpcy5fYXNrRm9yTGluayhlLCExKTt0aGlzLl9jdXJyZW50TGluayYmdGhpcy5fbGlua0F0UG9zaXRpb24odGhpcy5fY3VycmVudExpbmsubGluayxlKXx8KHRoaXMuX2NsZWFyQ3VycmVudExpbmsoKSx0aGlzLl9hc2tGb3JMaW5rKGUsITApKX0sdC5wcm90b3R5cGUuX2Fza0Zvckxpbms9ZnVuY3Rpb24oZSx0KXt2YXIgcixpPXRoaXM7dGhpcy5fYWN0aXZlUHJvdmlkZXJSZXBsaWVzJiZ0fHwobnVsbD09PShyPXRoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcyl8fHZvaWQgMD09PXJ8fHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bnVsbD09ZXx8ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmxpbmsuZGlzcG9zZSYmZS5saW5rLmRpc3Bvc2UoKX0pKX0pKSx0aGlzLl9hY3RpdmVQcm92aWRlclJlcGxpZXM9bmV3IE1hcCx0aGlzLl9hY3RpdmVMaW5lPWUueSk7dmFyIG49ITE7dGhpcy5fbGlua1Byb3ZpZGVycy5mb3JFYWNoKChmdW5jdGlvbihyLG8pe3ZhciBzO3Q/KG51bGw9PT0ocz1pLl9hY3RpdmVQcm92aWRlclJlcGxpZXMpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmdldChvKSkmJihuPWkuX2NoZWNrTGlua1Byb3ZpZGVyUmVzdWx0KG8sZSxuKSk6ci5wcm92aWRlTGlua3MoZS55LChmdW5jdGlvbih0KXt2YXIgcixzO2lmKCFpLl9pc01vdXNlT3V0KXt2YXIgYT1udWxsPT10P3ZvaWQgMDp0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue2xpbms6ZX19KSk7bnVsbD09PShyPWkuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcyl8fHZvaWQgMD09PXJ8fHIuc2V0KG8sYSksbj1pLl9jaGVja0xpbmtQcm92aWRlclJlc3VsdChvLGUsbiksKG51bGw9PT0ocz1pLl9hY3RpdmVQcm92aWRlclJlcGxpZXMpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnNpemUpPT09aS5fbGlua1Byb3ZpZGVycy5sZW5ndGgmJmkuX3JlbW92ZUludGVyc2VjdGluZ0xpbmtzKGUueSxpLl9hY3RpdmVQcm92aWRlclJlcGxpZXMpfX0pKX0pKX0sdC5wcm90b3R5cGUuX3JlbW92ZUludGVyc2VjdGluZ0xpbmtzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW5ldyBTZXQsaT0wO2k8dC5zaXplO2krKyl7dmFyIG49dC5nZXQoaSk7aWYobilmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylmb3IodmFyIHM9bltvXSxhPXMubGluay5yYW5nZS5zdGFydC55PGU/MDpzLmxpbmsucmFuZ2Uuc3RhcnQueCxjPXMubGluay5yYW5nZS5lbmQueT5lP3RoaXMuX2J1ZmZlclNlcnZpY2UuY29sczpzLmxpbmsucmFuZ2UuZW5kLngsbD1hO2w8PWM7bCsrKXtpZihyLmhhcyhsKSl7bi5zcGxpY2Uoby0tLDEpO2JyZWFrfXIuYWRkKGwpfX19LHQucHJvdG90eXBlLl9jaGVja0xpbmtQcm92aWRlclJlc3VsdD1mdW5jdGlvbihlLHQscil7dmFyIGksbj10aGlzO2lmKCF0aGlzLl9hY3RpdmVQcm92aWRlclJlcGxpZXMpcmV0dXJuIHI7Zm9yKHZhciBvPXRoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcy5nZXQoZSkscz0hMSxhPTA7YTxlO2ErKyl0aGlzLl9hY3RpdmVQcm92aWRlclJlcGxpZXMuaGFzKGEpJiYhdGhpcy5fYWN0aXZlUHJvdmlkZXJSZXBsaWVzLmdldChhKXx8KHM9ITApO2lmKCFzJiZvKXt2YXIgYz1vLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBuLl9saW5rQXRQb3NpdGlvbihlLmxpbmssdCl9KSk7YyYmKHI9ITAsdGhpcy5faGFuZGxlTmV3TGluayhjKSl9aWYodGhpcy5fYWN0aXZlUHJvdmlkZXJSZXBsaWVzLnNpemU9PT10aGlzLl9saW5rUHJvdmlkZXJzLmxlbmd0aCYmIXIpZm9yKGE9MDthPHRoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcy5zaXplO2ErKyl7dmFyIGw9bnVsbD09PShpPXRoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcy5nZXQoYSkpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBuLl9saW5rQXRQb3NpdGlvbihlLmxpbmssdCl9KSk7aWYobCl7cj0hMCx0aGlzLl9oYW5kbGVOZXdMaW5rKGwpO2JyZWFrfX1yZXR1cm4gcn0sdC5wcm90b3R5cGUuX29uQ2xpY2s9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZWxlbWVudCYmdGhpcy5fbW91c2VTZXJ2aWNlJiZ0aGlzLl9jdXJyZW50TGluayl7dmFyIHQ9dGhpcy5fcG9zaXRpb25Gcm9tTW91c2VFdmVudChlLHRoaXMuX2VsZW1lbnQsdGhpcy5fbW91c2VTZXJ2aWNlKTt0JiZ0aGlzLl9saW5rQXRQb3NpdGlvbih0aGlzLl9jdXJyZW50TGluay5saW5rLHQpJiZ0aGlzLl9jdXJyZW50TGluay5saW5rLmFjdGl2YXRlKGUsdGhpcy5fY3VycmVudExpbmsubGluay50ZXh0KX19LHQucHJvdG90eXBlLl9jbGVhckN1cnJlbnRMaW5rPWZ1bmN0aW9uKGUsdCl7dGhpcy5fZWxlbWVudCYmdGhpcy5fY3VycmVudExpbmsmJnRoaXMuX2xhc3RNb3VzZUV2ZW50JiYoIWV8fCF0fHx0aGlzLl9jdXJyZW50TGluay5saW5rLnJhbmdlLnN0YXJ0Lnk+PWUmJnRoaXMuX2N1cnJlbnRMaW5rLmxpbmsucmFuZ2UuZW5kLnk8PXQpJiYodGhpcy5fbGlua0xlYXZlKHRoaXMuX2VsZW1lbnQsdGhpcy5fY3VycmVudExpbmsubGluayx0aGlzLl9sYXN0TW91c2VFdmVudCksdGhpcy5fY3VycmVudExpbms9dm9pZCAwLGwuZGlzcG9zZUFycmF5KHRoaXMuX2xpbmtDYWNoZURpc3Bvc2FibGVzKSl9LHQucHJvdG90eXBlLl9oYW5kbGVOZXdMaW5rPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5fZWxlbWVudCYmdGhpcy5fbGFzdE1vdXNlRXZlbnQmJnRoaXMuX21vdXNlU2VydmljZSl7dmFyIHI9dGhpcy5fcG9zaXRpb25Gcm9tTW91c2VFdmVudCh0aGlzLl9sYXN0TW91c2VFdmVudCx0aGlzLl9lbGVtZW50LHRoaXMuX21vdXNlU2VydmljZSk7ciYmdGhpcy5fbGlua0F0UG9zaXRpb24oZS5saW5rLHIpJiYodGhpcy5fY3VycmVudExpbms9ZSx0aGlzLl9jdXJyZW50TGluay5zdGF0ZT17ZGVjb3JhdGlvbnM6e3VuZGVybGluZTp2b2lkIDA9PT1lLmxpbmsuZGVjb3JhdGlvbnN8fGUubGluay5kZWNvcmF0aW9ucy51bmRlcmxpbmUscG9pbnRlckN1cnNvcjp2b2lkIDA9PT1lLmxpbmsuZGVjb3JhdGlvbnN8fGUubGluay5kZWNvcmF0aW9ucy5wb2ludGVyQ3Vyc29yfSxpc0hvdmVyZWQ6ITB9LHRoaXMuX2xpbmtIb3Zlcih0aGlzLl9lbGVtZW50LGUubGluayx0aGlzLl9sYXN0TW91c2VFdmVudCksZS5saW5rLmRlY29yYXRpb25zPXt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUubGluay5kZWNvcmF0aW9ucyx7cG9pbnRlckN1cnNvcjp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGUscjtyZXR1cm4gbnVsbD09PShyPW51bGw9PT0oZT10Ll9jdXJyZW50TGluayl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmRlY29yYXRpb25zLnBvaW50ZXJDdXJzb3J9LHNldDpmdW5jdGlvbihlKXt2YXIgcixpOyhudWxsPT09KHI9dC5fY3VycmVudExpbmspfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXRlKSYmdC5fY3VycmVudExpbmsuc3RhdGUuZGVjb3JhdGlvbnMucG9pbnRlckN1cnNvciE9PWUmJih0Ll9jdXJyZW50TGluay5zdGF0ZS5kZWNvcmF0aW9ucy5wb2ludGVyQ3Vyc29yPWUsdC5fY3VycmVudExpbmsuc3RhdGUuaXNIb3ZlcmVkJiYobnVsbD09PShpPXQuX2VsZW1lbnQpfHx2b2lkIDA9PT1pfHxpLmNsYXNzTGlzdC50b2dnbGUoXCJ4dGVybS1jdXJzb3ItcG9pbnRlclwiLGUpKSl9fSx1bmRlcmxpbmU6e2dldDpmdW5jdGlvbigpe3ZhciBlLHI7cmV0dXJuIG51bGw9PT0ocj1udWxsPT09KGU9dC5fY3VycmVudExpbmspfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXRlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5kZWNvcmF0aW9ucy51bmRlcmxpbmV9LHNldDpmdW5jdGlvbihyKXt2YXIgaSxuLG87KG51bGw9PT0oaT10Ll9jdXJyZW50TGluayl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc3RhdGUpJiYobnVsbD09PShvPW51bGw9PT0obj10Ll9jdXJyZW50TGluayl8fHZvaWQgMD09PW4/dm9pZCAwOm4uc3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmRlY29yYXRpb25zLnVuZGVybGluZSkhPT1yJiYodC5fY3VycmVudExpbmsuc3RhdGUuZGVjb3JhdGlvbnMudW5kZXJsaW5lPXIsdC5fY3VycmVudExpbmsuc3RhdGUuaXNIb3ZlcmVkJiZ0Ll9maXJlVW5kZXJsaW5lRXZlbnQoZS5saW5rLHIpKX19fSksdGhpcy5fcmVuZGVyU2VydmljZSYmdGhpcy5fbGlua0NhY2hlRGlzcG9zYWJsZXMucHVzaCh0aGlzLl9yZW5kZXJTZXJ2aWNlLm9uUmVuZGVyZWRCdWZmZXJDaGFuZ2UoKGZ1bmN0aW9uKGUpe3ZhciByPTA9PT1lLnN0YXJ0PzA6ZS5zdGFydCsxK3QuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwO3QuX2NsZWFyQ3VycmVudExpbmsocixlLmVuZCsxK3QuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwKX0pKSkpfX0sdC5wcm90b3R5cGUuX2xpbmtIb3Zlcj1mdW5jdGlvbihlLHQscil7dmFyIGk7KG51bGw9PT0oaT10aGlzLl9jdXJyZW50TGluayl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc3RhdGUpJiYodGhpcy5fY3VycmVudExpbmsuc3RhdGUuaXNIb3ZlcmVkPSEwLHRoaXMuX2N1cnJlbnRMaW5rLnN0YXRlLmRlY29yYXRpb25zLnVuZGVybGluZSYmdGhpcy5fZmlyZVVuZGVybGluZUV2ZW50KHQsITApLHRoaXMuX2N1cnJlbnRMaW5rLnN0YXRlLmRlY29yYXRpb25zLnBvaW50ZXJDdXJzb3ImJmUuY2xhc3NMaXN0LmFkZChcInh0ZXJtLWN1cnNvci1wb2ludGVyXCIpKSx0LmhvdmVyJiZ0LmhvdmVyKHIsdC50ZXh0KX0sdC5wcm90b3R5cGUuX2ZpcmVVbmRlcmxpbmVFdmVudD1mdW5jdGlvbihlLHQpe3ZhciByPWUucmFuZ2UsaT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcCxuPXRoaXMuX2NyZWF0ZUxpbmtVbmRlcmxpbmVFdmVudChyLnN0YXJ0LngtMSxyLnN0YXJ0LnktaS0xLHIuZW5kLngsci5lbmQueS1pLTEsdm9pZCAwKTsodD90aGlzLl9vblNob3dMaW5rVW5kZXJsaW5lOnRoaXMuX29uSGlkZUxpbmtVbmRlcmxpbmUpLmZpcmUobil9LHQucHJvdG90eXBlLl9saW5rTGVhdmU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpOyhudWxsPT09KGk9dGhpcy5fY3VycmVudExpbmspfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN0YXRlKSYmKHRoaXMuX2N1cnJlbnRMaW5rLnN0YXRlLmlzSG92ZXJlZD0hMSx0aGlzLl9jdXJyZW50TGluay5zdGF0ZS5kZWNvcmF0aW9ucy51bmRlcmxpbmUmJnRoaXMuX2ZpcmVVbmRlcmxpbmVFdmVudCh0LCExKSx0aGlzLl9jdXJyZW50TGluay5zdGF0ZS5kZWNvcmF0aW9ucy5wb2ludGVyQ3Vyc29yJiZlLmNsYXNzTGlzdC5yZW1vdmUoXCJ4dGVybS1jdXJzb3ItcG9pbnRlclwiKSksdC5sZWF2ZSYmdC5sZWF2ZShyLHQudGV4dCl9LHQucHJvdG90eXBlLl9saW5rQXRQb3NpdGlvbj1mdW5jdGlvbihlLHQpe3ZhciByPWUucmFuZ2Uuc3RhcnQueT09PWUucmFuZ2UuZW5kLnksaT1lLnJhbmdlLnN0YXJ0Lnk8dC55LG49ZS5yYW5nZS5lbmQueT50Lnk7cmV0dXJuKHImJmUucmFuZ2Uuc3RhcnQueDw9dC54JiZlLnJhbmdlLmVuZC54Pj10Lnh8fGkmJmUucmFuZ2UuZW5kLng+PXQueHx8biYmZS5yYW5nZS5zdGFydC54PD10Lnh8fGkmJm4pJiZlLnJhbmdlLnN0YXJ0Lnk8PXQueSYmZS5yYW5nZS5lbmQueT49dC55fSx0LnByb3RvdHlwZS5fcG9zaXRpb25Gcm9tTW91c2VFdmVudD1mdW5jdGlvbihlLHQscil7dmFyIGk9ci5nZXRDb29yZHMoZSx0LHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpO2lmKGkpcmV0dXJue3g6aVswXSx5OmlbMV0rdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3B9fSx0LnByb3RvdHlwZS5fY3JlYXRlTGlua1VuZGVybGluZUV2ZW50PWZ1bmN0aW9uKGUsdCxyLGksbil7cmV0dXJue3gxOmUseTE6dCx4MjpyLHkyOmksY29sczp0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsZmc6bn19LHQ9byhbcygwLGEuSUJ1ZmZlclNlcnZpY2UpXSx0KX0obC5EaXNwb3NhYmxlKTt0LkxpbmtpZmllcjI9dX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29yZUJyb3dzZXJTZXJ2aWNlPXZvaWQgMDt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fdGV4dGFyZWE9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiaXNGb2N1c2VkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fdGV4dGFyZWEmJmRvY3VtZW50Lmhhc0ZvY3VzKCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oKTt0LkNvcmVCcm93c2VyU2VydmljZT1pfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGksbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9aShlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHIucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyByKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29yZVRlcm1pbmFsPXZvaWQgMDt2YXIgbz1yKDIpLHM9cigxKSxhPXIoNjYpLGM9cig2NyksbD1yKDY4KSxoPXIoNzQpLHU9cig3NSksZj1yKDApLF89cig3NiksZD1yKDc3KSxwPXIoNzgpLHY9cig4MCksZz1yKDgxKSx5PXIoMTkpLGI9cig4MiksUz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fb25CaW5hcnk9bmV3IGYuRXZlbnRFbWl0dGVyLHIuX29uRGF0YT1uZXcgZi5FdmVudEVtaXR0ZXIsci5fb25MaW5lRmVlZD1uZXcgZi5FdmVudEVtaXR0ZXIsci5fb25SZXNpemU9bmV3IGYuRXZlbnRFbWl0dGVyLHIuX29uU2Nyb2xsPW5ldyBmLkV2ZW50RW1pdHRlcixyLl9pbnN0YW50aWF0aW9uU2VydmljZT1uZXcgYS5JbnN0YW50aWF0aW9uU2VydmljZSxyLm9wdGlvbnNTZXJ2aWNlPW5ldyBoLk9wdGlvbnNTZXJ2aWNlKHQpLHIuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2Uocy5JT3B0aW9uc1NlcnZpY2Usci5vcHRpb25zU2VydmljZSksci5fYnVmZmVyU2VydmljZT1yLnJlZ2lzdGVyKHIuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKGwuQnVmZmVyU2VydmljZSkpLHIuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2Uocy5JQnVmZmVyU2VydmljZSxyLl9idWZmZXJTZXJ2aWNlKSxyLl9sb2dTZXJ2aWNlPXIuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKGMuTG9nU2VydmljZSksci5faW5zdGFudGlhdGlvblNlcnZpY2Uuc2V0U2VydmljZShzLklMb2dTZXJ2aWNlLHIuX2xvZ1NlcnZpY2UpLHIuX2NvcmVTZXJ2aWNlPXIucmVnaXN0ZXIoci5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UodS5Db3JlU2VydmljZSwoZnVuY3Rpb24oKXtyZXR1cm4gci5zY3JvbGxUb0JvdHRvbSgpfSkpKSxyLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKHMuSUNvcmVTZXJ2aWNlLHIuX2NvcmVTZXJ2aWNlKSxyLl9jb3JlTW91c2VTZXJ2aWNlPXIuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKF8uQ29yZU1vdXNlU2VydmljZSksci5faW5zdGFudGlhdGlvblNlcnZpY2Uuc2V0U2VydmljZShzLklDb3JlTW91c2VTZXJ2aWNlLHIuX2NvcmVNb3VzZVNlcnZpY2UpLHIuX2RpcnR5Um93U2VydmljZT1yLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZShkLkRpcnR5Um93U2VydmljZSksci5faW5zdGFudGlhdGlvblNlcnZpY2Uuc2V0U2VydmljZShzLklEaXJ0eVJvd1NlcnZpY2Usci5fZGlydHlSb3dTZXJ2aWNlKSxyLnVuaWNvZGVTZXJ2aWNlPXIuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKHAuVW5pY29kZVNlcnZpY2UpLHIuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2Uocy5JVW5pY29kZVNlcnZpY2Usci51bmljb2RlU2VydmljZSksci5fY2hhcnNldFNlcnZpY2U9ci5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2Uodi5DaGFyc2V0U2VydmljZSksci5faW5zdGFudGlhdGlvblNlcnZpY2Uuc2V0U2VydmljZShzLklDaGFyc2V0U2VydmljZSxyLl9jaGFyc2V0U2VydmljZSksci5faW5wdXRIYW5kbGVyPW5ldyB5LklucHV0SGFuZGxlcihyLl9idWZmZXJTZXJ2aWNlLHIuX2NoYXJzZXRTZXJ2aWNlLHIuX2NvcmVTZXJ2aWNlLHIuX2RpcnR5Um93U2VydmljZSxyLl9sb2dTZXJ2aWNlLHIub3B0aW9uc1NlcnZpY2Usci5fY29yZU1vdXNlU2VydmljZSxyLnVuaWNvZGVTZXJ2aWNlKSxyLnJlZ2lzdGVyKGYuZm9yd2FyZEV2ZW50KHIuX2lucHV0SGFuZGxlci5vbkxpbmVGZWVkLHIuX29uTGluZUZlZWQpKSxyLnJlZ2lzdGVyKHIuX2lucHV0SGFuZGxlciksci5yZWdpc3RlcihmLmZvcndhcmRFdmVudChyLl9idWZmZXJTZXJ2aWNlLm9uUmVzaXplLHIuX29uUmVzaXplKSksci5yZWdpc3RlcihmLmZvcndhcmRFdmVudChyLl9jb3JlU2VydmljZS5vbkRhdGEsci5fb25EYXRhKSksci5yZWdpc3RlcihmLmZvcndhcmRFdmVudChyLl9jb3JlU2VydmljZS5vbkJpbmFyeSxyLl9vbkJpbmFyeSkpLHIucmVnaXN0ZXIoci5vcHRpb25zU2VydmljZS5vbk9wdGlvbkNoYW5nZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHIuX3VwZGF0ZU9wdGlvbnMoZSl9KSkpLHIuX3dyaXRlQnVmZmVyPW5ldyBiLldyaXRlQnVmZmVyKChmdW5jdGlvbihlKXtyZXR1cm4gci5faW5wdXRIYW5kbGVyLnBhcnNlKGUpfSkpLHJ9cmV0dXJuIG4odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvbkJpbmFyeVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25CaW5hcnkuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25EYXRhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkRhdGEuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25MaW5lRmVlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25MaW5lRmVlZC5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJvblJlc2l6ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25SZXNpemUuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25TY3JvbGxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uU2Nyb2xsLmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcImNvbHNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1ZmZlclNlcnZpY2UuY29sc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJyb3dzXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3N9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwiYnVmZmVyc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLl9pc0Rpc3Bvc2VkfHwoZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpLG51bGw9PT0odD10aGlzLl93aW5kb3dzTW9kZSl8fHZvaWQgMD09PXR8fHQuZGlzcG9zZSgpLHRoaXMuX3dpbmRvd3NNb2RlPXZvaWQgMCl9LHQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy5fd3JpdGVCdWZmZXIud3JpdGUoZSx0KX0sdC5wcm90b3R5cGUud3JpdGVTeW5jPWZ1bmN0aW9uKGUpe3RoaXMuX3dyaXRlQnVmZmVyLndyaXRlU3luYyhlKX0sdC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUsdCl7aXNOYU4oZSl8fGlzTmFOKHQpfHwoZT1NYXRoLm1heChlLGwuTUlOSU1VTV9DT0xTKSx0PU1hdGgubWF4KHQsbC5NSU5JTVVNX1JPV1MpLHRoaXMuX2J1ZmZlclNlcnZpY2UucmVzaXplKGUsdCkpfSx0LnByb3RvdHlwZS5zY3JvbGw9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIHIsaT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjsocj10aGlzLl9jYWNoZWRCbGFua0xpbmUpJiZyLmxlbmd0aD09PXRoaXMuY29scyYmci5nZXRGZygwKT09PWUuZmcmJnIuZ2V0QmcoMCk9PT1lLmJnfHwocj1pLmdldEJsYW5rTGluZShlLHQpLHRoaXMuX2NhY2hlZEJsYW5rTGluZT1yKSxyLmlzV3JhcHBlZD10O3ZhciBuPWkueWJhc2UraS5zY3JvbGxUb3Asbz1pLnliYXNlK2kuc2Nyb2xsQm90dG9tO2lmKDA9PT1pLnNjcm9sbFRvcCl7dmFyIHM9aS5saW5lcy5pc0Z1bGw7bz09PWkubGluZXMubGVuZ3RoLTE/cz9pLmxpbmVzLnJlY3ljbGUoKS5jb3B5RnJvbShyKTppLmxpbmVzLnB1c2goci5jbG9uZSgpKTppLmxpbmVzLnNwbGljZShvKzEsMCxyLmNsb25lKCkpLHM/dGhpcy5fYnVmZmVyU2VydmljZS5pc1VzZXJTY3JvbGxpbmcmJihpLnlkaXNwPU1hdGgubWF4KGkueWRpc3AtMSwwKSk6KGkueWJhc2UrKyx0aGlzLl9idWZmZXJTZXJ2aWNlLmlzVXNlclNjcm9sbGluZ3x8aS55ZGlzcCsrKX1lbHNle3ZhciBhPW8tbisxO2kubGluZXMuc2hpZnRFbGVtZW50cyhuKzEsYS0xLC0xKSxpLmxpbmVzLnNldChvLHIuY2xvbmUoKSl9dGhpcy5fYnVmZmVyU2VydmljZS5pc1VzZXJTY3JvbGxpbmd8fChpLnlkaXNwPWkueWJhc2UpLHRoaXMuX2RpcnR5Um93U2VydmljZS5tYXJrUmFuZ2VEaXJ0eShpLnNjcm9sbFRvcCxpLnNjcm9sbEJvdHRvbSksdGhpcy5fb25TY3JvbGwuZmlyZShpLnlkaXNwKX0sdC5wcm90b3R5cGUuc2Nyb2xsTGluZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjtpZihlPDApe2lmKDA9PT1yLnlkaXNwKXJldHVybjt0aGlzLl9idWZmZXJTZXJ2aWNlLmlzVXNlclNjcm9sbGluZz0hMH1lbHNlIGUrci55ZGlzcD49ci55YmFzZSYmKHRoaXMuX2J1ZmZlclNlcnZpY2UuaXNVc2VyU2Nyb2xsaW5nPSExKTt2YXIgaT1yLnlkaXNwO3IueWRpc3A9TWF0aC5tYXgoTWF0aC5taW4oci55ZGlzcCtlLHIueWJhc2UpLDApLGkhPT1yLnlkaXNwJiYodHx8dGhpcy5fb25TY3JvbGwuZmlyZShyLnlkaXNwKSl9LHQucHJvdG90eXBlLnNjcm9sbFBhZ2VzPWZ1bmN0aW9uKGUpe3RoaXMuc2Nyb2xsTGluZXMoZSoodGhpcy5yb3dzLTEpKX0sdC5wcm90b3R5cGUuc2Nyb2xsVG9Ub3A9ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbExpbmVzKC10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcCl9LHQucHJvdG90eXBlLnNjcm9sbFRvQm90dG9tPWZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxMaW5lcyh0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55YmFzZS10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcCl9LHQucHJvdG90eXBlLnNjcm9sbFRvTGluZT1mdW5jdGlvbihlKXt2YXIgdD1lLXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwOzAhPT10JiZ0aGlzLnNjcm9sbExpbmVzKHQpfSx0LnByb3RvdHlwZS5hZGRFc2NIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2lucHV0SGFuZGxlci5hZGRFc2NIYW5kbGVyKGUsdCl9LHQucHJvdG90eXBlLmFkZERjc0hhbmRsZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5faW5wdXRIYW5kbGVyLmFkZERjc0hhbmRsZXIoZSx0KX0sdC5wcm90b3R5cGUuYWRkQ3NpSGFuZGxlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9pbnB1dEhhbmRsZXIuYWRkQ3NpSGFuZGxlcihlLHQpfSx0LnByb3RvdHlwZS5hZGRPc2NIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2lucHV0SGFuZGxlci5hZGRPc2NIYW5kbGVyKGUsdCl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3RoaXMub3B0aW9uc1NlcnZpY2Uub3B0aW9ucy53aW5kb3dzTW9kZSYmdGhpcy5fZW5hYmxlV2luZG93c01vZGUoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9pbnB1dEhhbmRsZXIucmVzZXQoKSx0aGlzLl9idWZmZXJTZXJ2aWNlLnJlc2V0KCksdGhpcy5fY2hhcnNldFNlcnZpY2UucmVzZXQoKSx0aGlzLl9jb3JlU2VydmljZS5yZXNldCgpLHRoaXMuX2NvcmVNb3VzZVNlcnZpY2UucmVzZXQoKX0sdC5wcm90b3R5cGUuX3VwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ7c3dpdGNoKGUpe2Nhc2VcInNjcm9sbGJhY2tcIjp0aGlzLmJ1ZmZlcnMucmVzaXplKHRoaXMuY29scyx0aGlzLnJvd3MpO2JyZWFrO2Nhc2VcIndpbmRvd3NNb2RlXCI6dGhpcy5vcHRpb25zU2VydmljZS5vcHRpb25zLndpbmRvd3NNb2RlP3RoaXMuX2VuYWJsZVdpbmRvd3NNb2RlKCk6KG51bGw9PT0odD10aGlzLl93aW5kb3dzTW9kZSl8fHZvaWQgMD09PXR8fHQuZGlzcG9zZSgpLHRoaXMuX3dpbmRvd3NNb2RlPXZvaWQgMCl9fSx0LnByb3RvdHlwZS5fZW5hYmxlV2luZG93c01vZGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLl93aW5kb3dzTW9kZSl7dmFyIHQ9W107dC5wdXNoKHRoaXMub25MaW5lRmVlZChnLnVwZGF0ZVdpbmRvd3NNb2RlV3JhcHBlZFN0YXRlLmJpbmQobnVsbCx0aGlzLl9idWZmZXJTZXJ2aWNlKSkpLHQucHVzaCh0aGlzLmFkZENzaUhhbmRsZXIoe2ZpbmFsOlwiSFwifSwoZnVuY3Rpb24oKXtyZXR1cm4gZy51cGRhdGVXaW5kb3dzTW9kZVdyYXBwZWRTdGF0ZShlLl9idWZmZXJTZXJ2aWNlKSwhMX0pKSksdGhpcy5fd2luZG93c01vZGU9e2Rpc3Bvc2U6ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKyspe3JbZV0uZGlzcG9zZSgpfX19fX0sdH0oby5EaXNwb3NhYmxlKTt0LkNvcmVUZXJtaW5hbD1TfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5c3x8ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAscj1hcmd1bWVudHMubGVuZ3RoO3Q8cjt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgaT1BcnJheShlKSxuPTA7Zm9yKHQ9MDt0PHI7dCsrKWZvcih2YXIgbz1hcmd1bWVudHNbdF0scz0wLGE9by5sZW5ndGg7czxhO3MrKyxuKyspaVtuXT1vW3NdO3JldHVybiBpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkluc3RhbnRpYXRpb25TZXJ2aWNlPXQuU2VydmljZUNvbGxlY3Rpb249dm9pZCAwO3ZhciBuPXIoMSksbz1yKDE0KSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt0aGlzLl9lbnRyaWVzPW5ldyBNYXA7Zm9yKHZhciByPTAsaT1lO3I8aS5sZW5ndGg7cisrKXt2YXIgbj1pW3JdLG89blswXSxzPW5bMV07dGhpcy5zZXQobyxzKX19cmV0dXJuIGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2VudHJpZXMuZ2V0KGUpO3JldHVybiB0aGlzLl9lbnRyaWVzLnNldChlLHQpLHJ9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dGhpcy5fZW50cmllcy5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3JldHVybiBlKHIsdCl9KSl9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZW50cmllcy5oYXMoZSl9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZW50cmllcy5nZXQoZSl9LGV9KCk7dC5TZXJ2aWNlQ29sbGVjdGlvbj1zO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3NlcnZpY2VzPW5ldyBzLHRoaXMuX3NlcnZpY2VzLnNldChuLklJbnN0YW50aWF0aW9uU2VydmljZSx0aGlzKX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0U2VydmljZT1mdW5jdGlvbihlLHQpe3RoaXMuX3NlcnZpY2VzLnNldChlLHQpfSxlLnByb3RvdHlwZS5nZXRTZXJ2aWNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9zZXJ2aWNlcy5nZXQoZSl9LGUucHJvdG90eXBlLmNyZWF0ZUluc3RhbmNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgbj1vLmdldFNlcnZpY2VEZXBlbmRlbmNpZXMoZSkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pbmRleC10LmluZGV4fSkpLHM9W10sYT0wLGM9bjthPGMubGVuZ3RoO2ErKyl7dmFyIGw9Y1thXSxoPXRoaXMuX3NlcnZpY2VzLmdldChsLmlkKTtpZighaCl0aHJvdyBuZXcgRXJyb3IoXCJbY3JlYXRlSW5zdGFuY2VdIFwiK2UubmFtZStcIiBkZXBlbmRzIG9uIFVOS05PV04gc2VydmljZSBcIitsLmlkK1wiLlwiKTtzLnB1c2goaCl9dmFyIHU9bi5sZW5ndGg+MD9uWzBdLmluZGV4OnQubGVuZ3RoO2lmKHQubGVuZ3RoIT09dSl0aHJvdyBuZXcgRXJyb3IoXCJbY3JlYXRlSW5zdGFuY2VdIEZpcnN0IHNlcnZpY2UgZGVwZW5kZW5jeSBvZiBcIitlLm5hbWUrXCIgYXQgcG9zaXRpb24gXCIrKHUrMSkrXCIgY29uZmxpY3RzIHdpdGggXCIrdC5sZW5ndGgrXCIgc3RhdGljIGFyZ3VtZW50c1wiKTtyZXR1cm4gbmV3KGUuYmluZC5hcHBseShlLGkoW3ZvaWQgMF0saSh0LHMpKSkpfSxlfSgpO3QuSW5zdGFudGlhdGlvblNlcnZpY2U9YX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBpPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG4sbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PWk/aT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6aTtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsaSk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkobj1lW2FdKSYmKHM9KG88Mz9uKHMpOm8+Mz9uKHQscixzKTpuKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9LG49dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyLGkpe3QocixpLGUpfX0sbz10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXlzfHxmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MCxyPWFyZ3VtZW50cy5sZW5ndGg7dDxyO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciBpPUFycmF5KGUpLG49MDtmb3IodD0wO3Q8cjt0KyspZm9yKHZhciBvPWFyZ3VtZW50c1t0XSxzPTAsYT1vLmxlbmd0aDtzPGE7cysrLG4rKylpW25dPW9bc107cmV0dXJuIGl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTG9nU2VydmljZT10LkxvZ0xldmVsPXZvaWQgMDt2YXIgcyxhPXIoMSk7IWZ1bmN0aW9uKGUpe2VbZS5ERUJVRz0wXT1cIkRFQlVHXCIsZVtlLklORk89MV09XCJJTkZPXCIsZVtlLldBUk49Ml09XCJXQVJOXCIsZVtlLkVSUk9SPTNdPVwiRVJST1JcIixlW2UuT0ZGPTRdPVwiT0ZGXCJ9KHM9dC5Mb2dMZXZlbHx8KHQuTG9nTGV2ZWw9e30pKTt2YXIgYz17ZGVidWc6cy5ERUJVRyxpbmZvOnMuSU5GTyx3YXJuOnMuV0FSTixlcnJvcjpzLkVSUk9SLG9mZjpzLk9GRn0sbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9dGhpczt0aGlzLl9vcHRpb25zU2VydmljZT1lLHRoaXMuX3VwZGF0ZUxvZ0xldmVsKCksdGhpcy5fb3B0aW9uc1NlcnZpY2Uub25PcHRpb25DaGFuZ2UoKGZ1bmN0aW9uKGUpe1wibG9nTGV2ZWxcIj09PWUmJnQuX3VwZGF0ZUxvZ0xldmVsKCl9KSl9cmV0dXJuIGUucHJvdG90eXBlLl91cGRhdGVMb2dMZXZlbD1mdW5jdGlvbigpe3RoaXMuX2xvZ0xldmVsPWNbdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5sb2dMZXZlbF19LGUucHJvdG90eXBlLl9ldmFsTGF6eU9wdGlvbmFsUGFyYW1zPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKVwiZnVuY3Rpb25cIj09dHlwZW9mIGVbdF0mJihlW3RdPWVbdF0oKSl9LGUucHJvdG90eXBlLl9sb2c9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2V2YWxMYXp5T3B0aW9uYWxQYXJhbXMociksZS5jYWxsLmFwcGx5KGUsbyhbY29uc29sZSxcInh0ZXJtLmpzOiBcIit0XSxyKSl9LGUucHJvdG90eXBlLmRlYnVnPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX2xvZ0xldmVsPD1zLkRFQlVHJiZ0aGlzLl9sb2coY29uc29sZS5sb2csZSx0KX0sZS5wcm90b3R5cGUuaW5mbz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLl9sb2dMZXZlbDw9cy5JTkZPJiZ0aGlzLl9sb2coY29uc29sZS5pbmZvLGUsdCl9LGUucHJvdG90eXBlLndhcm49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07dGhpcy5fbG9nTGV2ZWw8PXMuV0FSTiYmdGhpcy5fbG9nKGNvbnNvbGUud2FybixlLHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLl9sb2dMZXZlbDw9cy5FUlJPUiYmdGhpcy5fbG9nKGNvbnNvbGUuZXJyb3IsZSx0KX0sZT1pKFtuKDAsYS5JT3B0aW9uc1NlcnZpY2UpXSxlKX0oKTt0LkxvZ1NlcnZpY2U9bH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBpLG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWkoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KSxvPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG4sbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PWk/aT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6aTtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsaSk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkobj1lW2FdKSYmKHM9KG88Mz9uKHMpOm8+Mz9uKHQscixzKTpuKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9LHM9dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyLGkpe3QocixpLGUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdWZmZXJTZXJ2aWNlPXQuTUlOSU1VTV9ST1dTPXQuTUlOSU1VTV9DT0xTPXZvaWQgMDt2YXIgYT1yKDEpLGM9cig2OSksbD1yKDApLGg9cigyKTt0Lk1JTklNVU1fQ09MUz0yLHQuTUlOSU1VTV9ST1dTPTE7dmFyIHU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX29wdGlvbnNTZXJ2aWNlPXIsaS5pc1VzZXJTY3JvbGxpbmc9ITEsaS5fb25SZXNpemU9bmV3IGwuRXZlbnRFbWl0dGVyLGkuY29scz1NYXRoLm1heChyLm9wdGlvbnMuY29scyx0Lk1JTklNVU1fQ09MUyksaS5yb3dzPU1hdGgubWF4KHIub3B0aW9ucy5yb3dzLHQuTUlOSU1VTV9ST1dTKSxpLmJ1ZmZlcnM9bmV3IGMuQnVmZmVyU2V0KHIsaSksaX1yZXR1cm4gbihyLGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSxcIm9uUmVzaXplXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblJlc2l6ZS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsXCJidWZmZXJcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVmZmVycy5hY3RpdmV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKSx0aGlzLmJ1ZmZlcnMuZGlzcG9zZSgpfSxyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbHM9ZSx0aGlzLnJvd3M9dCx0aGlzLmJ1ZmZlcnMucmVzaXplKGUsdCksdGhpcy5idWZmZXJzLnNldHVwVGFiU3RvcHModGhpcy5jb2xzKSx0aGlzLl9vblJlc2l6ZS5maXJlKHtjb2xzOmUscm93czp0fSl9LHIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5idWZmZXJzLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlcnM9bmV3IGMuQnVmZmVyU2V0KHRoaXMuX29wdGlvbnNTZXJ2aWNlLHRoaXMpLHRoaXMuaXNVc2VyU2Nyb2xsaW5nPSExfSxyPW8oW3MoMCxhLklPcHRpb25zU2VydmljZSldLHIpfShoLkRpc3Bvc2FibGUpO3QuQnVmZmVyU2VydmljZT11fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGksbj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9aShlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHIucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyByKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQnVmZmVyU2V0PXZvaWQgMDt2YXIgbz1yKDcwKSxzPXIoMCksYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl9vbkJ1ZmZlckFjdGl2YXRlPWkucmVnaXN0ZXIobmV3IHMuRXZlbnRFbWl0dGVyKSxpLl9ub3JtYWw9bmV3IG8uQnVmZmVyKCEwLHQsciksaS5fbm9ybWFsLmZpbGxWaWV3cG9ydFJvd3MoKSxpLl9hbHQ9bmV3IG8uQnVmZmVyKCExLHQsciksaS5fYWN0aXZlQnVmZmVyPWkuX25vcm1hbCxpLnNldHVwVGFiU3RvcHMoKSxpfXJldHVybiBuKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25CdWZmZXJBY3RpdmF0ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25CdWZmZXJBY3RpdmF0ZS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJhbHRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FsdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJhY3RpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUJ1ZmZlcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJub3JtYWxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcm1hbH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hY3RpdmF0ZU5vcm1hbEJ1ZmZlcj1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUJ1ZmZlciE9PXRoaXMuX25vcm1hbCYmKHRoaXMuX25vcm1hbC54PXRoaXMuX2FsdC54LHRoaXMuX25vcm1hbC55PXRoaXMuX2FsdC55LHRoaXMuX2FsdC5jbGVhcigpLHRoaXMuX2FjdGl2ZUJ1ZmZlcj10aGlzLl9ub3JtYWwsdGhpcy5fb25CdWZmZXJBY3RpdmF0ZS5maXJlKHthY3RpdmVCdWZmZXI6dGhpcy5fbm9ybWFsLGluYWN0aXZlQnVmZmVyOnRoaXMuX2FsdH0pKX0sdC5wcm90b3R5cGUuYWN0aXZhdGVBbHRCdWZmZXI9ZnVuY3Rpb24oZSl7dGhpcy5fYWN0aXZlQnVmZmVyIT09dGhpcy5fYWx0JiYodGhpcy5fYWx0LmZpbGxWaWV3cG9ydFJvd3MoZSksdGhpcy5fYWx0Lng9dGhpcy5fbm9ybWFsLngsdGhpcy5fYWx0Lnk9dGhpcy5fbm9ybWFsLnksdGhpcy5fYWN0aXZlQnVmZmVyPXRoaXMuX2FsdCx0aGlzLl9vbkJ1ZmZlckFjdGl2YXRlLmZpcmUoe2FjdGl2ZUJ1ZmZlcjp0aGlzLl9hbHQsaW5hY3RpdmVCdWZmZXI6dGhpcy5fbm9ybWFsfSkpfSx0LnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9ub3JtYWwucmVzaXplKGUsdCksdGhpcy5fYWx0LnJlc2l6ZShlLHQpfSx0LnByb3RvdHlwZS5zZXR1cFRhYlN0b3BzPWZ1bmN0aW9uKGUpe3RoaXMuX25vcm1hbC5zZXR1cFRhYlN0b3BzKGUpLHRoaXMuX2FsdC5zZXR1cFRhYlN0b3BzKGUpfSx0fShyKDIpLkRpc3Bvc2FibGUpO3QuQnVmZmVyU2V0PWF9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1ZmZlclN0cmluZ0l0ZXJhdG9yPXQuQnVmZmVyPXQuTUFYX0JVRkZFUl9TSVpFPXZvaWQgMDt2YXIgaT1yKDcxKSxuPXIoMTYpLG89cig0KSxzPXIoMyksYT1yKDcyKSxjPXIoNzMpLGw9cigyMCksaD1yKDYpO3QuTUFYX0JVRkZFUl9TSVpFPTQyOTQ5NjcyOTU7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLl9oYXNTY3JvbGxiYWNrPWUsdGhpcy5fb3B0aW9uc1NlcnZpY2U9dCx0aGlzLl9idWZmZXJTZXJ2aWNlPXIsdGhpcy55ZGlzcD0wLHRoaXMueWJhc2U9MCx0aGlzLnk9MCx0aGlzLng9MCx0aGlzLnNhdmVkWT0wLHRoaXMuc2F2ZWRYPTAsdGhpcy5zYXZlZEN1ckF0dHJEYXRhPW4uREVGQVVMVF9BVFRSX0RBVEEuY2xvbmUoKSx0aGlzLnNhdmVkQ2hhcnNldD1sLkRFRkFVTFRfQ0hBUlNFVCx0aGlzLm1hcmtlcnM9W10sdGhpcy5fbnVsbENlbGw9by5DZWxsRGF0YS5mcm9tQ2hhckRhdGEoWzAscy5OVUxMX0NFTExfQ0hBUixzLk5VTExfQ0VMTF9XSURUSCxzLk5VTExfQ0VMTF9DT0RFXSksdGhpcy5fd2hpdGVzcGFjZUNlbGw9by5DZWxsRGF0YS5mcm9tQ2hhckRhdGEoWzAscy5XSElURVNQQUNFX0NFTExfQ0hBUixzLldISVRFU1BBQ0VfQ0VMTF9XSURUSCxzLldISVRFU1BBQ0VfQ0VMTF9DT0RFXSksdGhpcy5fY29scz10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5fcm93cz10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MsdGhpcy5saW5lcz1uZXcgaS5DaXJjdWxhckxpc3QodGhpcy5fZ2V0Q29ycmVjdEJ1ZmZlckxlbmd0aCh0aGlzLl9yb3dzKSksdGhpcy5zY3JvbGxUb3A9MCx0aGlzLnNjcm9sbEJvdHRvbT10aGlzLl9yb3dzLTEsdGhpcy5zZXR1cFRhYlN0b3BzKCl9cmV0dXJuIGUucHJvdG90eXBlLmdldE51bGxDZWxsPWZ1bmN0aW9uKGUpe3JldHVybiBlPyh0aGlzLl9udWxsQ2VsbC5mZz1lLmZnLHRoaXMuX251bGxDZWxsLmJnPWUuYmcsdGhpcy5fbnVsbENlbGwuZXh0ZW5kZWQ9ZS5leHRlbmRlZCk6KHRoaXMuX251bGxDZWxsLmZnPTAsdGhpcy5fbnVsbENlbGwuYmc9MCx0aGlzLl9udWxsQ2VsbC5leHRlbmRlZD1uZXcgaC5FeHRlbmRlZEF0dHJzKSx0aGlzLl9udWxsQ2VsbH0sZS5wcm90b3R5cGUuZ2V0V2hpdGVzcGFjZUNlbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/KHRoaXMuX3doaXRlc3BhY2VDZWxsLmZnPWUuZmcsdGhpcy5fd2hpdGVzcGFjZUNlbGwuYmc9ZS5iZyx0aGlzLl93aGl0ZXNwYWNlQ2VsbC5leHRlbmRlZD1lLmV4dGVuZGVkKToodGhpcy5fd2hpdGVzcGFjZUNlbGwuZmc9MCx0aGlzLl93aGl0ZXNwYWNlQ2VsbC5iZz0wLHRoaXMuX3doaXRlc3BhY2VDZWxsLmV4dGVuZGVkPW5ldyBoLkV4dGVuZGVkQXR0cnMpLHRoaXMuX3doaXRlc3BhY2VDZWxsfSxlLnByb3RvdHlwZS5nZXRCbGFua0xpbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG4uQnVmZmVyTGluZSh0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5nZXROdWxsQ2VsbChlKSx0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiaGFzU2Nyb2xsYmFja1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzU2Nyb2xsYmFjayYmdGhpcy5saW5lcy5tYXhMZW5ndGg+dGhpcy5fcm93c30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJpc0N1cnNvckluVmlld3BvcnRcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy55YmFzZSt0aGlzLnktdGhpcy55ZGlzcDtyZXR1cm4gZT49MCYmZTx0aGlzLl9yb3dzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9nZXRDb3JyZWN0QnVmZmVyTGVuZ3RoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9oYXNTY3JvbGxiYWNrKXJldHVybiBlO3ZhciByPWUrdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5zY3JvbGxiYWNrO3JldHVybiByPnQuTUFYX0JVRkZFUl9TSVpFP3QuTUFYX0JVRkZFUl9TSVpFOnJ9LGUucHJvdG90eXBlLmZpbGxWaWV3cG9ydFJvd3M9ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMubGluZXMubGVuZ3RoKXt2b2lkIDA9PT1lJiYoZT1uLkRFRkFVTFRfQVRUUl9EQVRBKTtmb3IodmFyIHQ9dGhpcy5fcm93czt0LS07KXRoaXMubGluZXMucHVzaCh0aGlzLmdldEJsYW5rTGluZShlKSl9fSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMueWRpc3A9MCx0aGlzLnliYXNlPTAsdGhpcy55PTAsdGhpcy54PTAsdGhpcy5saW5lcz1uZXcgaS5DaXJjdWxhckxpc3QodGhpcy5fZ2V0Q29ycmVjdEJ1ZmZlckxlbmd0aCh0aGlzLl9yb3dzKSksdGhpcy5zY3JvbGxUb3A9MCx0aGlzLnNjcm9sbEJvdHRvbT10aGlzLl9yb3dzLTEsdGhpcy5zZXR1cFRhYlN0b3BzKCl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0TnVsbENlbGwobi5ERUZBVUxUX0FUVFJfREFUQSksaT10aGlzLl9nZXRDb3JyZWN0QnVmZmVyTGVuZ3RoKHQpO2lmKGk+dGhpcy5saW5lcy5tYXhMZW5ndGgmJih0aGlzLmxpbmVzLm1heExlbmd0aD1pKSx0aGlzLmxpbmVzLmxlbmd0aD4wKXtpZih0aGlzLl9jb2xzPGUpZm9yKHZhciBvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDtvKyspdGhpcy5saW5lcy5nZXQobykucmVzaXplKGUscik7dmFyIHM9MDtpZih0aGlzLl9yb3dzPHQpZm9yKHZhciBhPXRoaXMuX3Jvd3M7YTx0O2ErKyl0aGlzLmxpbmVzLmxlbmd0aDx0K3RoaXMueWJhc2UmJih0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLndpbmRvd3NNb2RlP3RoaXMubGluZXMucHVzaChuZXcgbi5CdWZmZXJMaW5lKGUscikpOnRoaXMueWJhc2U+MCYmdGhpcy5saW5lcy5sZW5ndGg8PXRoaXMueWJhc2UrdGhpcy55K3MrMT8odGhpcy55YmFzZS0tLHMrKyx0aGlzLnlkaXNwPjAmJnRoaXMueWRpc3AtLSk6dGhpcy5saW5lcy5wdXNoKG5ldyBuLkJ1ZmZlckxpbmUoZSxyKSkpO2Vsc2UgZm9yKGE9dGhpcy5fcm93czthPnQ7YS0tKXRoaXMubGluZXMubGVuZ3RoPnQrdGhpcy55YmFzZSYmKHRoaXMubGluZXMubGVuZ3RoPnRoaXMueWJhc2UrdGhpcy55KzE/dGhpcy5saW5lcy5wb3AoKToodGhpcy55YmFzZSsrLHRoaXMueWRpc3ArKykpO2lmKGk8dGhpcy5saW5lcy5tYXhMZW5ndGgpe3ZhciBjPXRoaXMubGluZXMubGVuZ3RoLWk7Yz4wJiYodGhpcy5saW5lcy50cmltU3RhcnQoYyksdGhpcy55YmFzZT1NYXRoLm1heCh0aGlzLnliYXNlLWMsMCksdGhpcy55ZGlzcD1NYXRoLm1heCh0aGlzLnlkaXNwLWMsMCksdGhpcy5zYXZlZFk9TWF0aC5tYXgodGhpcy5zYXZlZFktYywwKSksdGhpcy5saW5lcy5tYXhMZW5ndGg9aX10aGlzLng9TWF0aC5taW4odGhpcy54LGUtMSksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LTEpLHMmJih0aGlzLnkrPXMpLHRoaXMuc2F2ZWRYPU1hdGgubWluKHRoaXMuc2F2ZWRYLGUtMSksdGhpcy5zY3JvbGxUb3A9MH1pZih0aGlzLnNjcm9sbEJvdHRvbT10LTEsdGhpcy5faXNSZWZsb3dFbmFibGVkJiYodGhpcy5fcmVmbG93KGUsdCksdGhpcy5fY29scz5lKSlmb3Iobz0wO288dGhpcy5saW5lcy5sZW5ndGg7bysrKXRoaXMubGluZXMuZ2V0KG8pLnJlc2l6ZShlLHIpO3RoaXMuX2NvbHM9ZSx0aGlzLl9yb3dzPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcIl9pc1JlZmxvd0VuYWJsZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc1Njcm9sbGJhY2smJiF0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLndpbmRvd3NNb2RlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9yZWZsb3c9ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb2xzIT09ZSYmKGU+dGhpcy5fY29scz90aGlzLl9yZWZsb3dMYXJnZXIoZSx0KTp0aGlzLl9yZWZsb3dTbWFsbGVyKGUsdCkpfSxlLnByb3RvdHlwZS5fcmVmbG93TGFyZ2VyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YS5yZWZsb3dMYXJnZXJHZXRMaW5lc1RvUmVtb3ZlKHRoaXMubGluZXMsdGhpcy5fY29scyxlLHRoaXMueWJhc2UrdGhpcy55LHRoaXMuZ2V0TnVsbENlbGwobi5ERUZBVUxUX0FUVFJfREFUQSkpO2lmKHIubGVuZ3RoPjApe3ZhciBpPWEucmVmbG93TGFyZ2VyQ3JlYXRlTmV3TGF5b3V0KHRoaXMubGluZXMscik7YS5yZWZsb3dMYXJnZXJBcHBseU5ld0xheW91dCh0aGlzLmxpbmVzLGkubGF5b3V0KSx0aGlzLl9yZWZsb3dMYXJnZXJBZGp1c3RWaWV3cG9ydChlLHQsaS5jb3VudFJlbW92ZWQpfX0sZS5wcm90b3R5cGUuX3JlZmxvd0xhcmdlckFkanVzdFZpZXdwb3J0PWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGk9dGhpcy5nZXROdWxsQ2VsbChuLkRFRkFVTFRfQVRUUl9EQVRBKSxvPXI7by0tID4wOykwPT09dGhpcy55YmFzZT8odGhpcy55PjAmJnRoaXMueS0tLHRoaXMubGluZXMubGVuZ3RoPHQmJnRoaXMubGluZXMucHVzaChuZXcgbi5CdWZmZXJMaW5lKGUsaSkpKToodGhpcy55ZGlzcD09PXRoaXMueWJhc2UmJnRoaXMueWRpc3AtLSx0aGlzLnliYXNlLS0pO3RoaXMuc2F2ZWRZPU1hdGgubWF4KHRoaXMuc2F2ZWRZLXIsMCl9LGUucHJvdG90eXBlLl9yZWZsb3dTbWFsbGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMuZ2V0TnVsbENlbGwobi5ERUZBVUxUX0FUVFJfREFUQSksaT1bXSxvPTAscz10aGlzLmxpbmVzLmxlbmd0aC0xO3M+PTA7cy0tKXt2YXIgYz10aGlzLmxpbmVzLmdldChzKTtpZighKCFjfHwhYy5pc1dyYXBwZWQmJmMuZ2V0VHJpbW1lZExlbmd0aCgpPD1lKSl7Zm9yKHZhciBsPVtjXTtjLmlzV3JhcHBlZCYmcz4wOyljPXRoaXMubGluZXMuZ2V0KC0tcyksbC51bnNoaWZ0KGMpO3ZhciBoPXRoaXMueWJhc2UrdGhpcy55O2lmKCEoaD49cyYmaDxzK2wubGVuZ3RoKSl7dmFyIHU9bFtsLmxlbmd0aC0xXS5nZXRUcmltbWVkTGVuZ3RoKCksZj1hLnJlZmxvd1NtYWxsZXJHZXROZXdMaW5lTGVuZ3RocyhsLHRoaXMuX2NvbHMsZSksXz1mLmxlbmd0aC1sLmxlbmd0aCxkPXZvaWQgMDtkPTA9PT10aGlzLnliYXNlJiZ0aGlzLnkhPT10aGlzLmxpbmVzLmxlbmd0aC0xP01hdGgubWF4KDAsdGhpcy55LXRoaXMubGluZXMubWF4TGVuZ3RoK18pOk1hdGgubWF4KDAsdGhpcy5saW5lcy5sZW5ndGgtdGhpcy5saW5lcy5tYXhMZW5ndGgrXyk7Zm9yKHZhciBwPVtdLHY9MDt2PF87disrKXt2YXIgZz10aGlzLmdldEJsYW5rTGluZShuLkRFRkFVTFRfQVRUUl9EQVRBLCEwKTtwLnB1c2goZyl9cC5sZW5ndGg+MCYmKGkucHVzaCh7c3RhcnQ6cytsLmxlbmd0aCtvLG5ld0xpbmVzOnB9KSxvKz1wLmxlbmd0aCksbC5wdXNoLmFwcGx5KGwscCk7dmFyIHk9Zi5sZW5ndGgtMSxiPWZbeV07MD09PWImJihiPWZbLS15XSk7Zm9yKHZhciBTPWwubGVuZ3RoLV8tMSxtPXU7Uz49MDspe3ZhciBDPU1hdGgubWluKG0sYik7aWYobFt5XS5jb3B5Q2VsbHNGcm9tKGxbU10sbS1DLGItQyxDLCEwKSwwPT09KGItPUMpJiYoYj1mWy0teV0pLDA9PT0obS09Qykpe1MtLTt2YXIgdz1NYXRoLm1heChTLDApO209YS5nZXRXcmFwcGVkTGluZVRyaW1tZWRMZW5ndGgobCx3LHRoaXMuX2NvbHMpfX1mb3Iodj0wO3Y8bC5sZW5ndGg7disrKWZbdl08ZSYmbFt2XS5zZXRDZWxsKGZbdl0scik7Zm9yKHZhciBFPV8tZDtFLS0gPjA7KTA9PT10aGlzLnliYXNlP3RoaXMueTx0LTE/KHRoaXMueSsrLHRoaXMubGluZXMucG9wKCkpOih0aGlzLnliYXNlKyssdGhpcy55ZGlzcCsrKTp0aGlzLnliYXNlPE1hdGgubWluKHRoaXMubGluZXMubWF4TGVuZ3RoLHRoaXMubGluZXMubGVuZ3RoK28pLXQmJih0aGlzLnliYXNlPT09dGhpcy55ZGlzcCYmdGhpcy55ZGlzcCsrLHRoaXMueWJhc2UrKyk7dGhpcy5zYXZlZFk9TWF0aC5taW4odGhpcy5zYXZlZFkrXyx0aGlzLnliYXNlK3QtMSl9fX1pZihpLmxlbmd0aD4wKXt2YXIgTD1bXSxBPVtdO2Zvcih2PTA7djx0aGlzLmxpbmVzLmxlbmd0aDt2KyspQS5wdXNoKHRoaXMubGluZXMuZ2V0KHYpKTt2YXIgUj10aGlzLmxpbmVzLmxlbmd0aCxrPVItMSx4PTAsRD1pW3hdO3RoaXMubGluZXMubGVuZ3RoPU1hdGgubWluKHRoaXMubGluZXMubWF4TGVuZ3RoLHRoaXMubGluZXMubGVuZ3RoK28pO3ZhciBUPTA7Zm9yKHY9TWF0aC5taW4odGhpcy5saW5lcy5tYXhMZW5ndGgtMSxSK28tMSk7dj49MDt2LS0paWYoRCYmRC5zdGFydD5rK1Qpe2Zvcih2YXIgTz1ELm5ld0xpbmVzLmxlbmd0aC0xO08+PTA7Ty0tKXRoaXMubGluZXMuc2V0KHYtLSxELm5ld0xpbmVzW09dKTt2KyssTC5wdXNoKHtpbmRleDprKzEsYW1vdW50OkQubmV3TGluZXMubGVuZ3RofSksVCs9RC5uZXdMaW5lcy5sZW5ndGgsRD1pWysreF19ZWxzZSB0aGlzLmxpbmVzLnNldCh2LEFbay0tXSk7dmFyIE09MDtmb3Iodj1MLmxlbmd0aC0xO3Y+PTA7di0tKUxbdl0uaW5kZXgrPU0sdGhpcy5saW5lcy5vbkluc2VydEVtaXR0ZXIuZmlyZShMW3ZdKSxNKz1MW3ZdLmFtb3VudDt2YXIgUD1NYXRoLm1heCgwLFIrby10aGlzLmxpbmVzLm1heExlbmd0aCk7UD4wJiZ0aGlzLmxpbmVzLm9uVHJpbUVtaXR0ZXIuZmlyZShQKX19LGUucHJvdG90eXBlLnN0cmluZ0luZGV4VG9CdWZmZXJJbmRleD1mdW5jdGlvbihlLHQscil7Zm9yKHZvaWQgMD09PXImJihyPSExKTt0Oyl7dmFyIGk9dGhpcy5saW5lcy5nZXQoZSk7aWYoIWkpcmV0dXJuWy0xLC0xXTtmb3IodmFyIG49cj9pLmdldFRyaW1tZWRMZW5ndGgoKTppLmxlbmd0aCxvPTA7bzxuOysrbylpZihpLmdldChvKVtzLkNIQVJfREFUQV9XSURUSF9JTkRFWF0mJih0LT1pLmdldChvKVtzLkNIQVJfREFUQV9DSEFSX0lOREVYXS5sZW5ndGh8fDEpLHQ8MClyZXR1cm5bZSxvXTtlKyt9cmV0dXJuW2UsMF19LGUucHJvdG90eXBlLnRyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZz1mdW5jdGlvbihlLHQscixpKXt2b2lkIDA9PT1yJiYocj0wKTt2YXIgbj10aGlzLmxpbmVzLmdldChlKTtyZXR1cm4gbj9uLnRyYW5zbGF0ZVRvU3RyaW5nKHQscixpKTpcIlwifSxlLnByb3RvdHlwZS5nZXRXcmFwcGVkUmFuZ2VGb3JMaW5lPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLHI9ZTt0PjAmJnRoaXMubGluZXMuZ2V0KHQpLmlzV3JhcHBlZDspdC0tO2Zvcig7cisxPHRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmxpbmVzLmdldChyKzEpLmlzV3JhcHBlZDspcisrO3JldHVybntmaXJzdDp0LGxhc3Q6cn19LGUucHJvdG90eXBlLnNldHVwVGFiU3RvcHM9ZnVuY3Rpb24oZSl7Zm9yKG51bGwhPWU/dGhpcy50YWJzW2VdfHwoZT10aGlzLnByZXZTdG9wKGUpKToodGhpcy50YWJzPXt9LGU9MCk7ZTx0aGlzLl9jb2xzO2UrPXRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMudGFiU3RvcFdpZHRoKXRoaXMudGFic1tlXT0hMH0sZS5wcm90b3R5cGUucHJldlN0b3A9ZnVuY3Rpb24oZSl7Zm9yKG51bGw9PWUmJihlPXRoaXMueCk7IXRoaXMudGFic1stLWVdJiZlPjA7KTtyZXR1cm4gZT49dGhpcy5fY29scz90aGlzLl9jb2xzLTE6ZTwwPzA6ZX0sZS5wcm90b3R5cGUubmV4dFN0b3A9ZnVuY3Rpb24oZSl7Zm9yKG51bGw9PWUmJihlPXRoaXMueCk7IXRoaXMudGFic1srK2VdJiZlPHRoaXMuX2NvbHM7KTtyZXR1cm4gZT49dGhpcy5fY29scz90aGlzLl9jb2xzLTE6ZTwwPzA6ZX0sZS5wcm90b3R5cGUuYWRkTWFya2VyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1uZXcgYy5NYXJrZXIoZSk7cmV0dXJuIHRoaXMubWFya2Vycy5wdXNoKHIpLHIucmVnaXN0ZXIodGhpcy5saW5lcy5vblRyaW0oKGZ1bmN0aW9uKGUpe3IubGluZS09ZSxyLmxpbmU8MCYmci5kaXNwb3NlKCl9KSkpLHIucmVnaXN0ZXIodGhpcy5saW5lcy5vbkluc2VydCgoZnVuY3Rpb24oZSl7ci5saW5lPj1lLmluZGV4JiYoci5saW5lKz1lLmFtb3VudCl9KSkpLHIucmVnaXN0ZXIodGhpcy5saW5lcy5vbkRlbGV0ZSgoZnVuY3Rpb24oZSl7ci5saW5lPj1lLmluZGV4JiZyLmxpbmU8ZS5pbmRleCtlLmFtb3VudCYmci5kaXNwb3NlKCksci5saW5lPmUuaW5kZXgmJihyLmxpbmUtPWUuYW1vdW50KX0pKSksci5yZWdpc3RlcihyLm9uRGlzcG9zZSgoZnVuY3Rpb24oKXtyZXR1cm4gdC5fcmVtb3ZlTWFya2VyKHIpfSkpKSxyfSxlLnByb3RvdHlwZS5fcmVtb3ZlTWFya2VyPWZ1bmN0aW9uKGUpe3RoaXMubWFya2Vycy5zcGxpY2UodGhpcy5tYXJrZXJzLmluZGV4T2YoZSksMSl9LGUucHJvdG90eXBlLml0ZXJhdG9yPWZ1bmN0aW9uKGUsdCxyLGksbil7cmV0dXJuIG5ldyBmKHRoaXMsZSx0LHIsaSxuKX0sZX0oKTt0LkJ1ZmZlcj11O3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixpLG4sbyl7dm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09aSYmKGk9ZS5saW5lcy5sZW5ndGgpLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PW8mJihvPTApLHRoaXMuX2J1ZmZlcj1lLHRoaXMuX3RyaW1SaWdodD10LHRoaXMuX3N0YXJ0SW5kZXg9cix0aGlzLl9lbmRJbmRleD1pLHRoaXMuX3N0YXJ0T3ZlcnNjYW49bix0aGlzLl9lbmRPdmVyc2Nhbj1vLHRoaXMuX3N0YXJ0SW5kZXg8MCYmKHRoaXMuX3N0YXJ0SW5kZXg9MCksdGhpcy5fZW5kSW5kZXg+dGhpcy5fYnVmZmVyLmxpbmVzLmxlbmd0aCYmKHRoaXMuX2VuZEluZGV4PXRoaXMuX2J1ZmZlci5saW5lcy5sZW5ndGgpLHRoaXMuX2N1cnJlbnQ9dGhpcy5fc3RhcnRJbmRleH1yZXR1cm4gZS5wcm90b3R5cGUuaGFzTmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50PHRoaXMuX2VuZEluZGV4fSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYnVmZmVyLmdldFdyYXBwZWRSYW5nZUZvckxpbmUodGhpcy5fY3VycmVudCk7ZS5maXJzdDx0aGlzLl9zdGFydEluZGV4LXRoaXMuX3N0YXJ0T3ZlcnNjYW4mJihlLmZpcnN0PXRoaXMuX3N0YXJ0SW5kZXgtdGhpcy5fc3RhcnRPdmVyc2NhbiksZS5sYXN0PnRoaXMuX2VuZEluZGV4K3RoaXMuX2VuZE92ZXJzY2FuJiYoZS5sYXN0PXRoaXMuX2VuZEluZGV4K3RoaXMuX2VuZE92ZXJzY2FuKSxlLmZpcnN0PU1hdGgubWF4KGUuZmlyc3QsMCksZS5sYXN0PU1hdGgubWluKGUubGFzdCx0aGlzLl9idWZmZXIubGluZXMubGVuZ3RoKTtmb3IodmFyIHQ9XCJcIixyPWUuZmlyc3Q7cjw9ZS5sYXN0Oysrcil0Kz10aGlzLl9idWZmZXIudHJhbnNsYXRlQnVmZmVyTGluZVRvU3RyaW5nKHIsdGhpcy5fdHJpbVJpZ2h0KTtyZXR1cm4gdGhpcy5fY3VycmVudD1lLmxhc3QrMSx7cmFuZ2U6ZSxjb250ZW50OnR9fSxlfSgpO3QuQnVmZmVyU3RyaW5nSXRlcmF0b3I9Zn0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2lyY3VsYXJMaXN0PXZvaWQgMDt2YXIgaT1yKDApLG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX21heExlbmd0aD1lLHRoaXMub25EZWxldGVFbWl0dGVyPW5ldyBpLkV2ZW50RW1pdHRlcix0aGlzLm9uSW5zZXJ0RW1pdHRlcj1uZXcgaS5FdmVudEVtaXR0ZXIsdGhpcy5vblRyaW1FbWl0dGVyPW5ldyBpLkV2ZW50RW1pdHRlcix0aGlzLl9hcnJheT1uZXcgQXJyYXkodGhpcy5fbWF4TGVuZ3RoKSx0aGlzLl9zdGFydEluZGV4PTAsdGhpcy5fbGVuZ3RoPTB9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcIm9uRGVsZXRlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uRGVsZXRlRW1pdHRlci5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJvbkluc2VydFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbkluc2VydEVtaXR0ZXIuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwib25UcmltXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uVHJpbUVtaXR0ZXIuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwibWF4TGVuZ3RoXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMZW5ndGh9LHNldDpmdW5jdGlvbihlKXtpZih0aGlzLl9tYXhMZW5ndGghPT1lKXtmb3IodmFyIHQ9bmV3IEFycmF5KGUpLHI9MDtyPE1hdGgubWluKGUsdGhpcy5sZW5ndGgpO3IrKyl0W3JdPXRoaXMuX2FycmF5W3RoaXMuX2dldEN5Y2xpY0luZGV4KHIpXTt0aGlzLl9hcnJheT10LHRoaXMuX21heExlbmd0aD1lLHRoaXMuX3N0YXJ0SW5kZXg9MH19LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwibGVuZ3RoXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW5ndGh9LHNldDpmdW5jdGlvbihlKXtpZihlPnRoaXMuX2xlbmd0aClmb3IodmFyIHQ9dGhpcy5fbGVuZ3RoO3Q8ZTt0KyspdGhpcy5fYXJyYXlbdF09dm9pZCAwO3RoaXMuX2xlbmd0aD1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYXJyYXlbdGhpcy5fZ2V0Q3ljbGljSW5kZXgoZSldfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9hcnJheVt0aGlzLl9nZXRDeWNsaWNJbmRleChlKV09dH0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXt0aGlzLl9hcnJheVt0aGlzLl9nZXRDeWNsaWNJbmRleCh0aGlzLl9sZW5ndGgpXT1lLHRoaXMuX2xlbmd0aD09PXRoaXMuX21heExlbmd0aD8odGhpcy5fc3RhcnRJbmRleD0rK3RoaXMuX3N0YXJ0SW5kZXgldGhpcy5fbWF4TGVuZ3RoLHRoaXMub25UcmltRW1pdHRlci5maXJlKDEpKTp0aGlzLl9sZW5ndGgrK30sZS5wcm90b3R5cGUucmVjeWNsZT1mdW5jdGlvbigpe2lmKHRoaXMuX2xlbmd0aCE9PXRoaXMuX21heExlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDYW4gb25seSByZWN5Y2xlIHdoZW4gdGhlIGJ1ZmZlciBpcyBmdWxsXCIpO3JldHVybiB0aGlzLl9zdGFydEluZGV4PSsrdGhpcy5fc3RhcnRJbmRleCV0aGlzLl9tYXhMZW5ndGgsdGhpcy5vblRyaW1FbWl0dGVyLmZpcmUoMSksdGhpcy5fYXJyYXlbdGhpcy5fZ2V0Q3ljbGljSW5kZXgodGhpcy5fbGVuZ3RoLTEpXX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiaXNGdWxsXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW5ndGg9PT10aGlzLl9tYXhMZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5W3RoaXMuX2dldEN5Y2xpY0luZGV4KHRoaXMuX2xlbmd0aC0tLTEpXX0sZS5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLGk9MjtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXJbaS0yXT1hcmd1bWVudHNbaV07aWYodCl7Zm9yKHZhciBuPWU7bjx0aGlzLl9sZW5ndGgtdDtuKyspdGhpcy5fYXJyYXlbdGhpcy5fZ2V0Q3ljbGljSW5kZXgobildPXRoaXMuX2FycmF5W3RoaXMuX2dldEN5Y2xpY0luZGV4KG4rdCldO3RoaXMuX2xlbmd0aC09dH1mb3Iobj10aGlzLl9sZW5ndGgtMTtuPj1lO24tLSl0aGlzLl9hcnJheVt0aGlzLl9nZXRDeWNsaWNJbmRleChuK3IubGVuZ3RoKV09dGhpcy5fYXJyYXlbdGhpcy5fZ2V0Q3ljbGljSW5kZXgobildO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy5fYXJyYXlbdGhpcy5fZ2V0Q3ljbGljSW5kZXgoZStuKV09cltuXTtpZih0aGlzLl9sZW5ndGgrci5sZW5ndGg+dGhpcy5fbWF4TGVuZ3RoKXt2YXIgbz10aGlzLl9sZW5ndGgrci5sZW5ndGgtdGhpcy5fbWF4TGVuZ3RoO3RoaXMuX3N0YXJ0SW5kZXgrPW8sdGhpcy5fbGVuZ3RoPXRoaXMuX21heExlbmd0aCx0aGlzLm9uVHJpbUVtaXR0ZXIuZmlyZShvKX1lbHNlIHRoaXMuX2xlbmd0aCs9ci5sZW5ndGh9LGUucHJvdG90eXBlLnRyaW1TdGFydD1mdW5jdGlvbihlKXtlPnRoaXMuX2xlbmd0aCYmKGU9dGhpcy5fbGVuZ3RoKSx0aGlzLl9zdGFydEluZGV4Kz1lLHRoaXMuX2xlbmd0aC09ZSx0aGlzLm9uVHJpbUVtaXR0ZXIuZmlyZShlKX0sZS5wcm90b3R5cGUuc2hpZnRFbGVtZW50cz1mdW5jdGlvbihlLHQscil7aWYoISh0PD0wKSl7aWYoZTwwfHxlPj10aGlzLl9sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwic3RhcnQgYXJndW1lbnQgb3V0IG9mIHJhbmdlXCIpO2lmKGUrcjwwKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzaGlmdCBlbGVtZW50cyBpbiBsaXN0IGJleW9uZCBpbmRleCAwXCIpO2lmKHI+MCl7Zm9yKHZhciBpPXQtMTtpPj0wO2ktLSl0aGlzLnNldChlK2krcix0aGlzLmdldChlK2kpKTt2YXIgbj1lK3Qrci10aGlzLl9sZW5ndGg7aWYobj4wKWZvcih0aGlzLl9sZW5ndGgrPW47dGhpcy5fbGVuZ3RoPnRoaXMuX21heExlbmd0aDspdGhpcy5fbGVuZ3RoLS0sdGhpcy5fc3RhcnRJbmRleCsrLHRoaXMub25UcmltRW1pdHRlci5maXJlKDEpfWVsc2UgZm9yKGk9MDtpPHQ7aSsrKXRoaXMuc2V0KGUraStyLHRoaXMuZ2V0KGUraSkpfX0sZS5wcm90b3R5cGUuX2dldEN5Y2xpY0luZGV4PWZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9zdGFydEluZGV4K2UpJXRoaXMuX21heExlbmd0aH0sZX0oKTt0LkNpcmN1bGFyTGlzdD1ufSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaShlLHQscil7aWYodD09PWUubGVuZ3RoLTEpcmV0dXJuIGVbdF0uZ2V0VHJpbW1lZExlbmd0aCgpO3ZhciBpPSFlW3RdLmhhc0NvbnRlbnQoci0xKSYmMT09PWVbdF0uZ2V0V2lkdGgoci0xKSxuPTI9PT1lW3QrMV0uZ2V0V2lkdGgoMCk7cmV0dXJuIGkmJm4/ci0xOnJ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRXcmFwcGVkTGluZVRyaW1tZWRMZW5ndGg9dC5yZWZsb3dTbWFsbGVyR2V0TmV3TGluZUxlbmd0aHM9dC5yZWZsb3dMYXJnZXJBcHBseU5ld0xheW91dD10LnJlZmxvd0xhcmdlckNyZWF0ZU5ld0xheW91dD10LnJlZmxvd0xhcmdlckdldExpbmVzVG9SZW1vdmU9dm9pZCAwLHQucmVmbG93TGFyZ2VyR2V0TGluZXNUb1JlbW92ZT1mdW5jdGlvbihlLHQscixuLG8pe2Zvcih2YXIgcz1bXSxhPTA7YTxlLmxlbmd0aC0xO2ErKyl7dmFyIGM9YSxsPWUuZ2V0KCsrYyk7aWYobC5pc1dyYXBwZWQpe2Zvcih2YXIgaD1bZS5nZXQoYSldO2M8ZS5sZW5ndGgmJmwuaXNXcmFwcGVkOyloLnB1c2gobCksbD1lLmdldCgrK2MpO2lmKG4+PWEmJm48YylhKz1oLmxlbmd0aC0xO2Vsc2V7Zm9yKHZhciB1PTAsZj1pKGgsdSx0KSxfPTEsZD0wO188aC5sZW5ndGg7KXt2YXIgcD1pKGgsXyx0KSx2PXAtZCxnPXItZix5PU1hdGgubWluKHYsZyk7aFt1XS5jb3B5Q2VsbHNGcm9tKGhbX10sZCxmLHksITEpLChmKz15KT09PXImJih1KyssZj0wKSwoZCs9eSk9PT1wJiYoXysrLGQ9MCksMD09PWYmJjAhPT11JiYyPT09aFt1LTFdLmdldFdpZHRoKHItMSkmJihoW3VdLmNvcHlDZWxsc0Zyb20oaFt1LTFdLHItMSxmKyssMSwhMSksaFt1LTFdLnNldENlbGwoci0xLG8pKX1oW3VdLnJlcGxhY2VDZWxscyhmLHIsbyk7Zm9yKHZhciBiPTAsUz1oLmxlbmd0aC0xO1M+MCYmKFM+dXx8MD09PWhbU10uZ2V0VHJpbW1lZExlbmd0aCgpKTtTLS0pYisrO2I+MCYmKHMucHVzaChhK2gubGVuZ3RoLWIpLHMucHVzaChiKSksYSs9aC5sZW5ndGgtMX19fXJldHVybiBzfSx0LnJlZmxvd0xhcmdlckNyZWF0ZU5ld0xheW91dD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxpPTAsbj10W2ldLG89MCxzPTA7czxlLmxlbmd0aDtzKyspaWYobj09PXMpe3ZhciBhPXRbKytpXTtlLm9uRGVsZXRlRW1pdHRlci5maXJlKHtpbmRleDpzLW8sYW1vdW50OmF9KSxzKz1hLTEsbys9YSxuPXRbKytpXX1lbHNlIHIucHVzaChzKTtyZXR1cm57bGF5b3V0OnIsY291bnRSZW1vdmVkOm99fSx0LnJlZmxvd0xhcmdlckFwcGx5TmV3TGF5b3V0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLGk9MDtpPHQubGVuZ3RoO2krKylyLnB1c2goZS5nZXQodFtpXSkpO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspZS5zZXQoaSxyW2ldKTtlLmxlbmd0aD10Lmxlbmd0aH0sdC5yZWZsb3dTbWFsbGVyR2V0TmV3TGluZUxlbmd0aHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj1bXSxvPWUubWFwKChmdW5jdGlvbihyLG4pe3JldHVybiBpKGUsbix0KX0pKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pKSxzPTAsYT0wLGM9MDtjPG87KXtpZihvLWM8cil7bi5wdXNoKG8tYyk7YnJlYWt9cys9cjt2YXIgbD1pKGUsYSx0KTtzPmwmJihzLT1sLGErKyk7dmFyIGg9Mj09PWVbYV0uZ2V0V2lkdGgocy0xKTtoJiZzLS07dmFyIHU9aD9yLTE6cjtuLnB1c2godSksYys9dX1yZXR1cm4gbn0sdC5nZXRXcmFwcGVkTGluZVRyaW1tZWRMZW5ndGg9aX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBpLG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWkoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1hcmtlcj12b2lkIDA7dmFyIG89cigwKSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmxpbmU9cixpLl9pZD10Ll9uZXh0SWQrKyxpLmlzRGlzcG9zZWQ9ITEsaS5fb25EaXNwb3NlPW5ldyBvLkV2ZW50RW1pdHRlcixpfXJldHVybiBuKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwiaWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uRGlzcG9zZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25EaXNwb3NlLmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmlzRGlzcG9zZWR8fCh0aGlzLmlzRGlzcG9zZWQ9ITAsdGhpcy5saW5lPS0xLHRoaXMuX29uRGlzcG9zZS5maXJlKCkpfSx0Ll9uZXh0SWQ9MSx0fShyKDIpLkRpc3Bvc2FibGUpO3QuTWFya2VyPXN9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wdGlvbnNTZXJ2aWNlPXQuREVGQVVMVF9PUFRJT05TPXQuREVGQVVMVF9CRUxMX1NPVU5EPXZvaWQgMDt2YXIgaT1yKDApLG49cigxMSksbz1yKDMzKTt0LkRFRkFVTFRfQkVMTF9TT1VORD1cImRhdGE6YXVkaW8vbXAzO2Jhc2U2NCxTVVF6QkFBQUFBQUFJMVJUVTBVQUFBQVBBQUFEVEdGMlpqVTRMak15TGpFd05BQUFBQUFBQUFBQUFBQUEvL3RReEFBREI4QWhTbXhoSUlFVkNTaUpyRENRQlRjdTNVckFJd1Vka1JnUWJGQVpDMUNRRXdUSjltalJ2QkE0VU9MRDhuS1ZPV2ZoK1VsSzN6LzE3N09YcmZPZEtsN3B5bjNYZi8vV3JleVRSVW9BV2dCZ2tPQUdiWkhCZ0cxT0Y2ek04MkRXYlphVW1NQnB0Z1FoR2pzeVlxYzlhZTlYRnoyODA5NDhOTUJXSW5sanl6c05SRkxQV2RuWkdXcmRkRHNqSzF1bnVTclZOOWpKc0s4S3VRdFFDdE1CakNFdEltSVNkTktKT29wSXBCRnBOU01iSUhDU1JwUlI1aWFralRpeXpMaGNoVVVCd0NneUtpd2VCdi83VXNRYmc4aXNWTm9NUE1qQUFBQTBnQUFBQkVWRkdtZ3FLLy8vLzliUC82WEN5a3hCVFVVekxqRXdNS3FxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxXCIsdC5ERUZBVUxUX09QVElPTlM9T2JqZWN0LmZyZWV6ZSh7Y29sczo4MCxyb3dzOjI0LGN1cnNvckJsaW5rOiExLGN1cnNvclN0eWxlOlwiYmxvY2tcIixjdXJzb3JXaWR0aDoxLGJlbGxTb3VuZDp0LkRFRkFVTFRfQkVMTF9TT1VORCxiZWxsU3R5bGU6XCJub25lXCIsZHJhd0JvbGRUZXh0SW5CcmlnaHRDb2xvcnM6ITAsZmFzdFNjcm9sbE1vZGlmaWVyOlwiYWx0XCIsZmFzdFNjcm9sbFNlbnNpdGl2aXR5OjUsZm9udEZhbWlseTpcImNvdXJpZXItbmV3LCBjb3VyaWVyLCBtb25vc3BhY2VcIixmb250U2l6ZToxNSxmb250V2VpZ2h0Olwibm9ybWFsXCIsZm9udFdlaWdodEJvbGQ6XCJib2xkXCIsbGluZUhlaWdodDoxLGxpbmtUb29sdGlwSG92ZXJEdXJhdGlvbjo1MDAsbGV0dGVyU3BhY2luZzowLGxvZ0xldmVsOlwiaW5mb1wiLHNjcm9sbGJhY2s6MWUzLHNjcm9sbFNlbnNpdGl2aXR5OjEsc2NyZWVuUmVhZGVyTW9kZTohMSxtYWNPcHRpb25Jc01ldGE6ITEsbWFjT3B0aW9uQ2xpY2tGb3JjZXNTZWxlY3Rpb246ITEsbWluaW11bUNvbnRyYXN0UmF0aW86MSxkaXNhYmxlU3RkaW46ITEsYWxsb3dQcm9wb3NlZEFwaTohMCxhbGxvd1RyYW5zcGFyZW5jeTohMSx0YWJTdG9wV2lkdGg6OCx0aGVtZTp7fSxyaWdodENsaWNrU2VsZWN0c1dvcmQ6bi5pc01hYyxyZW5kZXJlclR5cGU6XCJjYW52YXNcIix3aW5kb3dPcHRpb25zOnt9LHdpbmRvd3NNb2RlOiExLHdvcmRTZXBhcmF0b3I6XCIgKClbXXt9JyxcXFwiYFwiLGNvbnZlcnRFb2w6ITEsdGVybU5hbWU6XCJ4dGVybVwiLGNhbmNlbEV2ZW50czohMX0pO3ZhciBzPVtcIm5vcm1hbFwiLFwiYm9sZFwiLFwiMTAwXCIsXCIyMDBcIixcIjMwMFwiLFwiNDAwXCIsXCI1MDBcIixcIjYwMFwiLFwiNzAwXCIsXCI4MDBcIixcIjkwMFwiXSxhPVtcImNvbHNcIixcInJvd3NcIl0sYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fb25PcHRpb25DaGFuZ2U9bmV3IGkuRXZlbnRFbWl0dGVyLHRoaXMub3B0aW9ucz1vLmNsb25lKHQuREVGQVVMVF9PUFRJT05TKTtmb3IodmFyIHI9MCxuPU9iamVjdC5rZXlzKGUpO3I8bi5sZW5ndGg7cisrKXt2YXIgcz1uW3JdO2lmKHMgaW4gdGhpcy5vcHRpb25zKXRyeXt2YXIgYT1lW3NdO3RoaXMub3B0aW9uc1tzXT10aGlzLl9zYW5pdGl6ZUFuZFZhbGlkYXRlT3B0aW9uKHMsYSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJvbk9wdGlvbkNoYW5nZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25PcHRpb25DaGFuZ2UuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuc2V0T3B0aW9uPWZ1bmN0aW9uKGUscil7aWYoIShlIGluIHQuREVGQVVMVF9PUFRJT05TKSl0aHJvdyBuZXcgRXJyb3IoJ05vIG9wdGlvbiB3aXRoIGtleSBcIicrZSsnXCInKTtpZigtMSE9PWEuaW5kZXhPZihlKSl0aHJvdyBuZXcgRXJyb3IoJ09wdGlvbiBcIicrZSsnXCIgY2FuIG9ubHkgYmUgc2V0IGluIHRoZSBjb25zdHJ1Y3RvcicpO3RoaXMub3B0aW9uc1tlXSE9PXImJihyPXRoaXMuX3Nhbml0aXplQW5kVmFsaWRhdGVPcHRpb24oZSxyKSx0aGlzLm9wdGlvbnNbZV0hPT1yJiYodGhpcy5vcHRpb25zW2VdPXIsdGhpcy5fb25PcHRpb25DaGFuZ2UuZmlyZShlKSkpfSxlLnByb3RvdHlwZS5fc2FuaXRpemVBbmRWYWxpZGF0ZU9wdGlvbj1mdW5jdGlvbihlLHIpe3N3aXRjaChlKXtjYXNlXCJiZWxsU3R5bGVcIjpjYXNlXCJjdXJzb3JTdHlsZVwiOmNhc2VcInJlbmRlcmVyVHlwZVwiOmNhc2VcIndvcmRTZXBhcmF0b3JcIjpyfHwocj10LkRFRkFVTFRfT1BUSU9OU1tlXSk7YnJlYWs7Y2FzZVwiZm9udFdlaWdodFwiOmNhc2VcImZvbnRXZWlnaHRCb2xkXCI6aWYoXCJudW1iZXJcIj09dHlwZW9mIHImJjE8PXImJnI8PTFlMylicmVhaztyPS0xIT09cy5pbmRleE9mKHIpP3I6dC5ERUZBVUxUX09QVElPTlNbZV07YnJlYWs7Y2FzZVwiY3Vyc29yV2lkdGhcIjpyPU1hdGguZmxvb3Iocik7Y2FzZVwibGluZUhlaWdodFwiOmNhc2VcInRhYlN0b3BXaWR0aFwiOmlmKHI8MSl0aHJvdyBuZXcgRXJyb3IoZStcIiBjYW5ub3QgYmUgbGVzcyB0aGFuIDEsIHZhbHVlOiBcIityKTticmVhaztjYXNlXCJtaW5pbXVtQ29udHJhc3RSYXRpb1wiOnI9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxNYXRoLnJvdW5kKDEwKnIpLzEwKSk7YnJlYWs7Y2FzZVwic2Nyb2xsYmFja1wiOmlmKChyPU1hdGgubWluKHIsNDI5NDk2NzI5NSkpPDApdGhyb3cgbmV3IEVycm9yKGUrXCIgY2Fubm90IGJlIGxlc3MgdGhhbiAwLCB2YWx1ZTogXCIrcik7YnJlYWs7Y2FzZVwiZmFzdFNjcm9sbFNlbnNpdGl2aXR5XCI6Y2FzZVwic2Nyb2xsU2Vuc2l0aXZpdHlcIjppZihyPD0wKXRocm93IG5ldyBFcnJvcihlK1wiIGNhbm5vdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMCwgdmFsdWU6IFwiK3IpfXJldHVybiByfSxlLnByb3RvdHlwZS5nZXRPcHRpb249ZnVuY3Rpb24oZSl7aWYoIShlIGluIHQuREVGQVVMVF9PUFRJT05TKSl0aHJvdyBuZXcgRXJyb3IoJ05vIG9wdGlvbiB3aXRoIGtleSBcIicrZSsnXCInKTtyZXR1cm4gdGhpcy5vcHRpb25zW2VdfSxlfSgpO3QuT3B0aW9uc1NlcnZpY2U9Y30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBpLG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWkoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KSxvPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG4sbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PWk/aT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6aTtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsaSk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkobj1lW2FdKSYmKHM9KG88Mz9uKHMpOm8+Mz9uKHQscixzKTpuKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9LHM9dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyLGkpe3QocixpLGUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db3JlU2VydmljZT12b2lkIDA7dmFyIGE9cigxKSxjPXIoMCksbD1yKDMzKSxoPXIoMiksdT1PYmplY3QuZnJlZXplKHtpbnNlcnRNb2RlOiExfSksZj1PYmplY3QuZnJlZXplKHthcHBsaWNhdGlvbkN1cnNvcktleXM6ITEsYXBwbGljYXRpb25LZXlwYWQ6ITEsYnJhY2tldGVkUGFzdGVNb2RlOiExLG9yaWdpbjohMSxyZXZlcnNlV3JhcGFyb3VuZDohMSxzZW5kRm9jdXM6ITEsd3JhcGFyb3VuZDohMH0pLF89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIsaSxuKXt2YXIgbz1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8uX2J1ZmZlclNlcnZpY2U9cixvLl9sb2dTZXJ2aWNlPWksby5fb3B0aW9uc1NlcnZpY2U9bixvLmlzQ3Vyc29ySW5pdGlhbGl6ZWQ9ITEsby5pc0N1cnNvckhpZGRlbj0hMSxvLl9vbkRhdGE9by5yZWdpc3RlcihuZXcgYy5FdmVudEVtaXR0ZXIpLG8uX29uVXNlcklucHV0PW8ucmVnaXN0ZXIobmV3IGMuRXZlbnRFbWl0dGVyKSxvLl9vbkJpbmFyeT1vLnJlZ2lzdGVyKG5ldyBjLkV2ZW50RW1pdHRlciksby5fc2Nyb2xsVG9Cb3R0b209dCxvLnJlZ2lzdGVyKHtkaXNwb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3Njcm9sbFRvQm90dG9tPXZvaWQgMH19KSxvLm1vZGVzPWwuY2xvbmUodSksby5kZWNQcml2YXRlTW9kZXM9bC5jbG9uZShmKSxvfXJldHVybiBuKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25EYXRhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkRhdGEuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwib25Vc2VySW5wdXRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVXNlcklucHV0LmV2ZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm9uQmluYXJ5XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJpbmFyeS5ldmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMubW9kZXM9bC5jbG9uZSh1KSx0aGlzLmRlY1ByaXZhdGVNb2Rlcz1sLmNsb25lKGYpfSx0LnByb3RvdHlwZS50cmlnZ2VyRGF0YUV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ITEpLCF0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmRpc2FibGVTdGRpbil7dmFyIHI9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXI7ci55YmFzZSE9PXIueWRpc3AmJnRoaXMuX3Njcm9sbFRvQm90dG9tKCksdCYmdGhpcy5fb25Vc2VySW5wdXQuZmlyZSgpLHRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoJ3NlbmRpbmcgZGF0YSBcIicrZSsnXCInLChmdW5jdGlvbigpe3JldHVybiBlLnNwbGl0KFwiXCIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKX0pKX0pKSx0aGlzLl9vbkRhdGEuZmlyZShlKX19LHQucHJvdG90eXBlLnRyaWdnZXJCaW5hcnlFdmVudD1mdW5jdGlvbihlKXt0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmRpc2FibGVTdGRpbnx8KHRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoJ3NlbmRpbmcgYmluYXJ5IFwiJytlKydcIicsKGZ1bmN0aW9uKCl7cmV0dXJuIGUuc3BsaXQoXCJcIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQ29kZUF0KDApfSkpfSkpLHRoaXMuX29uQmluYXJ5LmZpcmUoZSkpfSx0PW8oW3MoMSxhLklCdWZmZXJTZXJ2aWNlKSxzKDIsYS5JTG9nU2VydmljZSkscygzLGEuSU9wdGlvbnNTZXJ2aWNlKV0sdCl9KGguRGlzcG9zYWJsZSk7dC5Db3JlU2VydmljZT1ffSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQscixpKXt2YXIgbixvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09aT9pPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTppO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixpKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShuPWVbYV0pJiYocz0obzwzP24ocyk6bz4zP24odCxyLHMpOm4odCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30sbj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7dChyLGksZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvcmVNb3VzZVNlcnZpY2U9dm9pZCAwO3ZhciBvPXIoMSkscz1yKDApLGE9e05PTkU6e2V2ZW50czowLHJlc3RyaWN0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSxYMTA6e2V2ZW50czoxLHJlc3RyaWN0OmZ1bmN0aW9uKGUpe3JldHVybiA0IT09ZS5idXR0b24mJjE9PT1lLmFjdGlvbiYmKGUuY3RybD0hMSxlLmFsdD0hMSxlLnNoaWZ0PSExLCEwKX19LFZUMjAwOntldmVudHM6MTkscmVzdHJpY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIDMyIT09ZS5hY3Rpb259fSxEUkFHOntldmVudHM6MjMscmVzdHJpY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIDMyIT09ZS5hY3Rpb258fDMhPT1lLmJ1dHRvbn19LEFOWTp7ZXZlbnRzOjMxLHJlc3RyaWN0OmZ1bmN0aW9uKGUpe3JldHVybiEwfX19O2Z1bmN0aW9uIGMoZSx0KXt2YXIgcj0oZS5jdHJsPzE2OjApfChlLnNoaWZ0PzQ6MCl8KGUuYWx0Pzg6MCk7cmV0dXJuIDQ9PT1lLmJ1dHRvbj8ocnw9NjQscnw9ZS5hY3Rpb24pOihyfD0zJmUuYnV0dG9uLDQmZS5idXR0b24mJihyfD02NCksOCZlLmJ1dHRvbiYmKHJ8PTEyOCksMzI9PT1lLmFjdGlvbj9yfD0zMjowIT09ZS5hY3Rpb258fHR8fChyfD0zKSkscn12YXIgbD1TdHJpbmcuZnJvbUNoYXJDb2RlLGg9e0RFRkFVTFQ6ZnVuY3Rpb24oZSl7dmFyIHQ9W2MoZSwhMSkrMzIsZS5jb2wrMzIsZS5yb3crMzJdO3JldHVybiB0WzBdPjI1NXx8dFsxXT4yNTV8fHRbMl0+MjU1P1wiXCI6XCJcdTAwMWJbTVwiK2wodFswXSkrbCh0WzFdKStsKHRbMl0pfSxTR1I6ZnVuY3Rpb24oZSl7dmFyIHQ9MD09PWUuYWN0aW9uJiY0IT09ZS5idXR0b24/XCJtXCI6XCJNXCI7cmV0dXJuXCJcdTAwMWJbPFwiK2MoZSwhMCkrXCI7XCIrZS5jb2wrXCI7XCIrZS5yb3crdH19LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5fYnVmZmVyU2VydmljZT1lLHRoaXMuX2NvcmVTZXJ2aWNlPXQsdGhpcy5fcHJvdG9jb2xzPXt9LHRoaXMuX2VuY29kaW5ncz17fSx0aGlzLl9hY3RpdmVQcm90b2NvbD1cIlwiLHRoaXMuX2FjdGl2ZUVuY29kaW5nPVwiXCIsdGhpcy5fb25Qcm90b2NvbENoYW5nZT1uZXcgcy5FdmVudEVtaXR0ZXIsdGhpcy5fbGFzdEV2ZW50PW51bGw7Zm9yKHZhciByPTAsaT1PYmplY3Qua2V5cyhhKTtyPGkubGVuZ3RoO3IrKyl7dmFyIG49aVtyXTt0aGlzLmFkZFByb3RvY29sKG4sYVtuXSl9Zm9yKHZhciBvPTAsYz1PYmplY3Qua2V5cyhoKTtvPGMubGVuZ3RoO28rKyl7dmFyIGw9Y1tvXTt0aGlzLmFkZEVuY29kaW5nKGwsaFtsXSl9dGhpcy5yZXNldCgpfXJldHVybiBlLnByb3RvdHlwZS5hZGRQcm90b2NvbD1mdW5jdGlvbihlLHQpe3RoaXMuX3Byb3RvY29sc1tlXT10fSxlLnByb3RvdHlwZS5hZGRFbmNvZGluZz1mdW5jdGlvbihlLHQpe3RoaXMuX2VuY29kaW5nc1tlXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJhY3RpdmVQcm90b2NvbFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlUHJvdG9jb2x9LHNldDpmdW5jdGlvbihlKXtpZighdGhpcy5fcHJvdG9jb2xzW2VdKXRocm93IG5ldyBFcnJvcigndW5rbm93biBwcm90b2NvbCBcIicrZSsnXCInKTt0aGlzLl9hY3RpdmVQcm90b2NvbD1lLHRoaXMuX29uUHJvdG9jb2xDaGFuZ2UuZmlyZSh0aGlzLl9wcm90b2NvbHNbZV0uZXZlbnRzKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJhcmVNb3VzZUV2ZW50c0FjdGl2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMuX3Byb3RvY29sc1t0aGlzLl9hY3RpdmVQcm90b2NvbF0uZXZlbnRzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImFjdGl2ZUVuY29kaW5nXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmVFbmNvZGluZ30sc2V0OmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9lbmNvZGluZ3NbZV0pdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGVuY29kaW5nIFwiJytlKydcIicpO3RoaXMuX2FjdGl2ZUVuY29kaW5nPWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZVByb3RvY29sPVwiTk9ORVwiLHRoaXMuYWN0aXZlRW5jb2Rpbmc9XCJERUZBVUxUXCIsdGhpcy5fbGFzdEV2ZW50PW51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcIm9uUHJvdG9jb2xDaGFuZ2VcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uUHJvdG9jb2xDaGFuZ2UuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudHJpZ2dlck1vdXNlRXZlbnQ9ZnVuY3Rpb24oZSl7aWYoZS5jb2w8MHx8ZS5jb2w+PXRoaXMuX2J1ZmZlclNlcnZpY2UuY29sc3x8ZS5yb3c8MHx8ZS5yb3c+PXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cylyZXR1cm4hMTtpZig0PT09ZS5idXR0b24mJjMyPT09ZS5hY3Rpb24pcmV0dXJuITE7aWYoMz09PWUuYnV0dG9uJiYzMiE9PWUuYWN0aW9uKXJldHVybiExO2lmKDQhPT1lLmJ1dHRvbiYmKDI9PT1lLmFjdGlvbnx8Mz09PWUuYWN0aW9uKSlyZXR1cm4hMTtpZihlLmNvbCsrLGUucm93KyssMzI9PT1lLmFjdGlvbiYmdGhpcy5fbGFzdEV2ZW50JiZ0aGlzLl9jb21wYXJlRXZlbnRzKHRoaXMuX2xhc3RFdmVudCxlKSlyZXR1cm4hMTtpZighdGhpcy5fcHJvdG9jb2xzW3RoaXMuX2FjdGl2ZVByb3RvY29sXS5yZXN0cmljdChlKSlyZXR1cm4hMTt2YXIgdD10aGlzLl9lbmNvZGluZ3NbdGhpcy5fYWN0aXZlRW5jb2RpbmddKGUpO3JldHVybiB0JiYoXCJERUZBVUxUXCI9PT10aGlzLl9hY3RpdmVFbmNvZGluZz90aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyQmluYXJ5RXZlbnQodCk6dGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudCh0LCEwKSksdGhpcy5fbGFzdEV2ZW50PWUsITB9LGUucHJvdG90eXBlLmV4cGxhaW5FdmVudHM9ZnVuY3Rpb24oZSl7cmV0dXJue2Rvd246ISEoMSZlKSx1cDohISgyJmUpLGRyYWc6ISEoNCZlKSxtb3ZlOiEhKDgmZSksd2hlZWw6ISEoMTYmZSl9fSxlLnByb3RvdHlwZS5fY29tcGFyZUV2ZW50cz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbD09PXQuY29sJiYoZS5yb3c9PT10LnJvdyYmKGUuYnV0dG9uPT09dC5idXR0b24mJihlLmFjdGlvbj09PXQuYWN0aW9uJiYoZS5jdHJsPT09dC5jdHJsJiYoZS5hbHQ9PT10LmFsdCYmZS5zaGlmdD09PXQuc2hpZnQpKSkpKX0sZT1pKFtuKDAsby5JQnVmZmVyU2VydmljZSksbigxLG8uSUNvcmVTZXJ2aWNlKV0sZSl9KCk7dC5Db3JlTW91c2VTZXJ2aWNlPXV9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBuLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1pP2k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOmk7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLGkpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKG49ZVthXSkmJihzPShvPDM/bihzKTpvPjM/bih0LHIscyk6bih0LHIpKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfSxuPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixpKXt0KHIsaSxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGlydHlSb3dTZXJ2aWNlPXZvaWQgMDt2YXIgbz1yKDEpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2J1ZmZlclNlcnZpY2U9ZSx0aGlzLmNsZWFyUmFuZ2UoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwic3RhcnRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImVuZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5kfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNsZWFyUmFuZ2U9ZnVuY3Rpb24oKXt0aGlzLl9zdGFydD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55LHRoaXMuX2VuZD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55fSxlLnByb3RvdHlwZS5tYXJrRGlydHk9ZnVuY3Rpb24oZSl7ZTx0aGlzLl9zdGFydD90aGlzLl9zdGFydD1lOmU+dGhpcy5fZW5kJiYodGhpcy5fZW5kPWUpfSxlLnByb3RvdHlwZS5tYXJrUmFuZ2VEaXJ0eT1mdW5jdGlvbihlLHQpe2lmKGU+dCl7dmFyIHI9ZTtlPXQsdD1yfWU8dGhpcy5fc3RhcnQmJih0aGlzLl9zdGFydD1lKSx0PnRoaXMuX2VuZCYmKHRoaXMuX2VuZD10KX0sZS5wcm90b3R5cGUubWFya0FsbERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5tYXJrUmFuZ2VEaXJ0eSgwLHRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xKX0sZT1pKFtuKDAsby5JQnVmZmVyU2VydmljZSldLGUpfSgpO3QuRGlydHlSb3dTZXJ2aWNlPXN9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlVuaWNvZGVTZXJ2aWNlPXZvaWQgMDt2YXIgaT1yKDApLG49cig3OSksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9wcm92aWRlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9hY3RpdmU9XCJcIix0aGlzLl9vbkNoYW5nZT1uZXcgaS5FdmVudEVtaXR0ZXI7dmFyIGU9bmV3IG4uVW5pY29kZVY2O3RoaXMucmVnaXN0ZXIoZSksdGhpcy5fYWN0aXZlPWUudmVyc2lvbix0aGlzLl9hY3RpdmVQcm92aWRlcj1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJvbkNoYW5nZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25DaGFuZ2UuZXZlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwidmVyc2lvbnNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3Byb3ZpZGVycyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiYWN0aXZlVmVyc2lvblwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfSxzZXQ6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuX3Byb3ZpZGVyc1tlXSl0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gVW5pY29kZSB2ZXJzaW9uIFwiJytlKydcIicpO3RoaXMuX2FjdGl2ZT1lLHRoaXMuX2FjdGl2ZVByb3ZpZGVyPXRoaXMuX3Byb3ZpZGVyc1tlXSx0aGlzLl9vbkNoYW5nZS5maXJlKGUpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3RoaXMuX3Byb3ZpZGVyc1tlLnZlcnNpb25dPWV9LGUucHJvdG90eXBlLndjd2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2FjdGl2ZVByb3ZpZGVyLndjd2lkdGgoZSl9LGUucHJvdG90eXBlLmdldFN0cmluZ0NlbGxXaWR0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWUubGVuZ3RoLGk9MDtpPHI7KytpKXt2YXIgbj1lLmNoYXJDb2RlQXQoaSk7aWYoNTUyOTY8PW4mJm48PTU2MzE5KXtpZigrK2k+PXIpcmV0dXJuIHQrdGhpcy53Y3dpZHRoKG4pO3ZhciBvPWUuY2hhckNvZGVBdChpKTs1NjMyMDw9byYmbzw9NTczNDM/bj0xMDI0KihuLTU1Mjk2KStvLTU2MzIwKzY1NTM2OnQrPXRoaXMud2N3aWR0aChvKX10Kz10aGlzLndjd2lkdGgobil9cmV0dXJuIHR9LGV9KCk7dC5Vbmljb2RlU2VydmljZT1vfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Vbmljb2RlVjY9dm9pZCAwO3ZhciBpLG49cigxNSksbz1bWzc2OCw4NzldLFsxMTU1LDExNThdLFsxMTYwLDExNjFdLFsxNDI1LDE0NjldLFsxNDcxLDE0NzFdLFsxNDczLDE0NzRdLFsxNDc2LDE0NzddLFsxNDc5LDE0NzldLFsxNTM2LDE1MzldLFsxNTUyLDE1NTddLFsxNjExLDE2MzBdLFsxNjQ4LDE2NDhdLFsxNzUwLDE3NjRdLFsxNzY3LDE3NjhdLFsxNzcwLDE3NzNdLFsxODA3LDE4MDddLFsxODA5LDE4MDldLFsxODQwLDE4NjZdLFsxOTU4LDE5NjhdLFsyMDI3LDIwMzVdLFsyMzA1LDIzMDZdLFsyMzY0LDIzNjRdLFsyMzY5LDIzNzZdLFsyMzgxLDIzODFdLFsyMzg1LDIzODhdLFsyNDAyLDI0MDNdLFsyNDMzLDI0MzNdLFsyNDkyLDI0OTJdLFsyNDk3LDI1MDBdLFsyNTA5LDI1MDldLFsyNTMwLDI1MzFdLFsyNTYxLDI1NjJdLFsyNjIwLDI2MjBdLFsyNjI1LDI2MjZdLFsyNjMxLDI2MzJdLFsyNjM1LDI2MzddLFsyNjcyLDI2NzNdLFsyNjg5LDI2OTBdLFsyNzQ4LDI3NDhdLFsyNzUzLDI3NTddLFsyNzU5LDI3NjBdLFsyNzY1LDI3NjVdLFsyNzg2LDI3ODddLFsyODE3LDI4MTddLFsyODc2LDI4NzZdLFsyODc5LDI4NzldLFsyODgxLDI4ODNdLFsyODkzLDI4OTNdLFsyOTAyLDI5MDJdLFsyOTQ2LDI5NDZdLFszMDA4LDMwMDhdLFszMDIxLDMwMjFdLFszMTM0LDMxMzZdLFszMTQyLDMxNDRdLFszMTQ2LDMxNDldLFszMTU3LDMxNThdLFszMjYwLDMyNjBdLFszMjYzLDMyNjNdLFszMjcwLDMyNzBdLFszMjc2LDMyNzddLFszMjk4LDMyOTldLFszMzkzLDMzOTVdLFszNDA1LDM0MDVdLFszNTMwLDM1MzBdLFszNTM4LDM1NDBdLFszNTQyLDM1NDJdLFszNjMzLDM2MzNdLFszNjM2LDM2NDJdLFszNjU1LDM2NjJdLFszNzYxLDM3NjFdLFszNzY0LDM3NjldLFszNzcxLDM3NzJdLFszNzg0LDM3ODldLFszODY0LDM4NjVdLFszODkzLDM4OTNdLFszODk1LDM4OTVdLFszODk3LDM4OTddLFszOTUzLDM5NjZdLFszOTY4LDM5NzJdLFszOTc0LDM5NzVdLFszOTg0LDM5OTFdLFszOTkzLDQwMjhdLFs0MDM4LDQwMzhdLFs0MTQxLDQxNDRdLFs0MTQ2LDQxNDZdLFs0MTUwLDQxNTFdLFs0MTUzLDQxNTNdLFs0MTg0LDQxODVdLFs0NDQ4LDQ2MDddLFs0OTU5LDQ5NTldLFs1OTA2LDU5MDhdLFs1OTM4LDU5NDBdLFs1OTcwLDU5NzFdLFs2MDAyLDYwMDNdLFs2MDY4LDYwNjldLFs2MDcxLDYwNzddLFs2MDg2LDYwODZdLFs2MDg5LDYwOTldLFs2MTA5LDYxMDldLFs2MTU1LDYxNTddLFs2MzEzLDYzMTNdLFs2NDMyLDY0MzRdLFs2NDM5LDY0NDBdLFs2NDUwLDY0NTBdLFs2NDU3LDY0NTldLFs2Njc5LDY2ODBdLFs2OTEyLDY5MTVdLFs2OTY0LDY5NjRdLFs2OTY2LDY5NzBdLFs2OTcyLDY5NzJdLFs2OTc4LDY5NzhdLFs3MDE5LDcwMjddLFs3NjE2LDc2MjZdLFs3Njc4LDc2NzldLFs4MjAzLDgyMDddLFs4MjM0LDgyMzhdLFs4Mjg4LDgyOTFdLFs4Mjk4LDgzMDNdLFs4NDAwLDg0MzFdLFsxMjMzMCwxMjMzNV0sWzEyNDQxLDEyNDQyXSxbNDMwMTQsNDMwMTRdLFs0MzAxOSw0MzAxOV0sWzQzMDQ1LDQzMDQ2XSxbNjQyODYsNjQyODZdLFs2NTAyNCw2NTAzOV0sWzY1MDU2LDY1MDU5XSxbNjUyNzksNjUyNzldLFs2NTUyOSw2NTUzMV1dLHM9W1s2ODA5Nyw2ODA5OV0sWzY4MTAxLDY4MTAyXSxbNjgxMDgsNjgxMTFdLFs2ODE1Miw2ODE1NF0sWzY4MTU5LDY4MTU5XSxbMTE5MTQzLDExOTE0NV0sWzExOTE1NSwxMTkxNzBdLFsxMTkxNzMsMTE5MTc5XSxbMTE5MjEwLDExOTIxM10sWzExOTM2MiwxMTkzNjRdLFs5MTc1MDUsOTE3NTA1XSxbOTE3NTM2LDkxNzYzMV0sWzkxNzc2MCw5MTc5OTldXTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZih0aGlzLnZlcnNpb249XCI2XCIsIWkpe2k9bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLG4uZmlsbChpLDEpLGlbMF09MCxuLmZpbGwoaSwwLDEsMzIpLG4uZmlsbChpLDAsMTI3LDE2MCksbi5maWxsKGksMiw0MzUyLDQ0NDgpLGlbOTAwMV09MixpWzkwMDJdPTIsbi5maWxsKGksMiwxMTkwNCw0MjE5MiksaVsxMjM1MV09MSxuLmZpbGwoaSwyLDQ0MDMyLDU1MjA0KSxuLmZpbGwoaSwyLDYzNzQ0LDY0MjU2KSxuLmZpbGwoaSwyLDY1MDQwLDY1MDUwKSxuLmZpbGwoaSwyLDY1MDcyLDY1MTM2KSxuLmZpbGwoaSwyLDY1MjgwLDY1Mzc3KSxuLmZpbGwoaSwyLDY1NTA0LDY1NTExKTtmb3IodmFyIGU9MDtlPG8ubGVuZ3RoOysrZSluLmZpbGwoaSwwLG9bZV1bMF0sb1tlXVsxXSsxKX19cmV0dXJuIGUucHJvdG90eXBlLndjd2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MzI/MDplPDEyNz8xOmU8NjU1MzY/aVtlXTpmdW5jdGlvbihlLHQpe3ZhciByLGk9MCxuPXQubGVuZ3RoLTE7aWYoZTx0WzBdWzBdfHxlPnRbbl1bMV0pcmV0dXJuITE7Zm9yKDtuPj1pOylpZihlPnRbcj1pK24+PjFdWzFdKWk9cisxO2Vsc2V7aWYoIShlPHRbcl1bMF0pKXJldHVybiEwO249ci0xfXJldHVybiExfShlLHMpPzA6ZT49MTMxMDcyJiZlPD0xOTY2MDV8fGU+PTE5NjYwOCYmZTw9MjYyMTQxPzI6MX0sZX0oKTt0LlVuaWNvZGVWNj1hfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGFyc2V0U2VydmljZT12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5nbGV2ZWw9MCx0aGlzLl9jaGFyc2V0cz1bXX1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmNoYXJzZXQ9dm9pZCAwLHRoaXMuX2NoYXJzZXRzPVtdLHRoaXMuZ2xldmVsPTB9LGUucHJvdG90eXBlLnNldGdMZXZlbD1mdW5jdGlvbihlKXt0aGlzLmdsZXZlbD1lLHRoaXMuY2hhcnNldD10aGlzLl9jaGFyc2V0c1tlXX0sZS5wcm90b3R5cGUuc2V0Z0NoYXJzZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9jaGFyc2V0c1tlXT10LHRoaXMuZ2xldmVsPT09ZSYmKHRoaXMuY2hhcnNldD10KX0sZX0oKTt0LkNoYXJzZXRTZXJ2aWNlPWl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVwZGF0ZVdpbmRvd3NNb2RlV3JhcHBlZFN0YXRlPXZvaWQgMDt2YXIgaT1yKDMpO3QudXBkYXRlV2luZG93c01vZGVXcmFwcGVkU3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5idWZmZXIubGluZXMuZ2V0KGUuYnVmZmVyLnliYXNlK2UuYnVmZmVyLnktMSkscj1udWxsPT10P3ZvaWQgMDp0LmdldChlLmNvbHMtMSksbj1lLmJ1ZmZlci5saW5lcy5nZXQoZS5idWZmZXIueWJhc2UrZS5idWZmZXIueSk7biYmciYmKG4uaXNXcmFwcGVkPXJbaS5DSEFSX0RBVEFfQ09ERV9JTkRFWF0hPT1pLk5VTExfQ0VMTF9DT0RFJiZyW2kuQ0hBUl9EQVRBX0NPREVfSU5ERVhdIT09aS5XSElURVNQQUNFX0NFTExfQ09ERSl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Xcml0ZUJ1ZmZlcj12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2FjdGlvbj1lLHRoaXMuX3dyaXRlQnVmZmVyPVtdLHRoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl9wZW5kaW5nRGF0YT0wLHRoaXMuX2J1ZmZlck9mZnNldD0wfXJldHVybiBlLnByb3RvdHlwZS53cml0ZVN5bmM9ZnVuY3Rpb24oZSl7aWYodGhpcy5fd3JpdGVCdWZmZXIubGVuZ3RoKXtmb3IodmFyIHQ9dGhpcy5fYnVmZmVyT2Zmc2V0O3Q8dGhpcy5fd3JpdGVCdWZmZXIubGVuZ3RoOysrdCl7dmFyIHI9dGhpcy5fd3JpdGVCdWZmZXJbdF0saT10aGlzLl9jYWxsYmFja3NbdF07dGhpcy5fYWN0aW9uKHIpLGkmJmkoKX10aGlzLl93cml0ZUJ1ZmZlcj1bXSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fcGVuZGluZ0RhdGE9MCx0aGlzLl9idWZmZXJPZmZzZXQ9MjE0NzQ4MzY0N310aGlzLl9hY3Rpb24oZSl9LGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztpZih0aGlzLl9wZW5kaW5nRGF0YT41ZTcpdGhyb3cgbmV3IEVycm9yKFwid3JpdGUgZGF0YSBkaXNjYXJkZWQsIHVzZSBmbG93IGNvbnRyb2wgdG8gYXZvaWQgbG9zaW5nIGRhdGFcIik7dGhpcy5fd3JpdGVCdWZmZXIubGVuZ3RofHwodGhpcy5fYnVmZmVyT2Zmc2V0PTAsc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gci5faW5uZXJXcml0ZSgpfSkpKSx0aGlzLl9wZW5kaW5nRGF0YSs9ZS5sZW5ndGgsdGhpcy5fd3JpdGVCdWZmZXIucHVzaChlKSx0aGlzLl9jYWxsYmFja3MucHVzaCh0KX0sZS5wcm90b3R5cGUuX2lubmVyV3JpdGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PURhdGUubm93KCk7dGhpcy5fd3JpdGVCdWZmZXIubGVuZ3RoPnRoaXMuX2J1ZmZlck9mZnNldDspe3ZhciByPXRoaXMuX3dyaXRlQnVmZmVyW3RoaXMuX2J1ZmZlck9mZnNldF0saT10aGlzLl9jYWxsYmFja3NbdGhpcy5fYnVmZmVyT2Zmc2V0XTtpZih0aGlzLl9idWZmZXJPZmZzZXQrKyx0aGlzLl9hY3Rpb24ociksdGhpcy5fcGVuZGluZ0RhdGEtPXIubGVuZ3RoLGkmJmkoKSxEYXRlLm5vdygpLXQ+PTEyKWJyZWFrfXRoaXMuX3dyaXRlQnVmZmVyLmxlbmd0aD50aGlzLl9idWZmZXJPZmZzZXQ/KHRoaXMuX2J1ZmZlck9mZnNldD41MCYmKHRoaXMuX3dyaXRlQnVmZmVyPXRoaXMuX3dyaXRlQnVmZmVyLnNsaWNlKHRoaXMuX2J1ZmZlck9mZnNldCksdGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5zbGljZSh0aGlzLl9idWZmZXJPZmZzZXQpLHRoaXMuX2J1ZmZlck9mZnNldD0wKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLl9pbm5lcldyaXRlKCl9KSwwKSk6KHRoaXMuX3dyaXRlQnVmZmVyPVtdLHRoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl9wZW5kaW5nRGF0YT0wLHRoaXMuX2J1ZmZlck9mZnNldD0wKX0sZX0oKTt0LldyaXRlQnVmZmVyPWl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkFkZG9uTWFuYWdlcj12b2lkIDA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fYWRkb25zPVtdfXJldHVybiBlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX2FkZG9ucy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLl9hZGRvbnNbZV0uaW5zdGFuY2UuZGlzcG9zZSgpfSxlLnByb3RvdHlwZS5sb2FkQWRkb249ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLGk9e2luc3RhbmNlOnQsZGlzcG9zZTp0LmRpc3Bvc2UsaXNEaXNwb3NlZDohMX07dGhpcy5fYWRkb25zLnB1c2goaSksdC5kaXNwb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX3dyYXBwZWRBZGRvbkRpc3Bvc2UoaSl9LHQuYWN0aXZhdGUoZSl9LGUucHJvdG90eXBlLl93cmFwcGVkQWRkb25EaXNwb3NlPWZ1bmN0aW9uKGUpe2lmKCFlLmlzRGlzcG9zZWQpe2Zvcih2YXIgdD0tMSxyPTA7cjx0aGlzLl9hZGRvbnMubGVuZ3RoO3IrKylpZih0aGlzLl9hZGRvbnNbcl09PT1lKXt0PXI7YnJlYWt9aWYoLTE9PT10KXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkaXNwb3NlIGFuIGFkZG9uIHRoYXQgaGFzIG5vdCBiZWVuIGxvYWRlZFwiKTtlLmlzRGlzcG9zZWQ9ITAsZS5kaXNwb3NlLmFwcGx5KGUuaW5zdGFuY2UpLHRoaXMuX2FkZG9ucy5zcGxpY2UodCwxKX19LGV9KCk7dC5BZGRvbk1hbmFnZXI9aX1dKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXh0ZXJtLmpzLm1hcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/xterm/lib/xterm.js\n");
/***/ }),
/***/ "./src/cerberus.js":
/*!*************************!*\
!*** ./src/cerberus.js ***!
\*************************/
/*! exports provided: run */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"run\", function() { return run; });\n/* harmony import */ var _assets_demonic_web_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../assets/demonic-web.css */ \"./assets/demonic-web.css\");\n/* harmony import */ var _assets_demonic_web_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_assets_demonic_web_css__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var xterm_css_xterm_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! xterm/css/xterm.css */ \"./node_modules/xterm/css/xterm.css\");\n/* harmony import */ var xterm_css_xterm_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(xterm_css_xterm_css__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _demonic_web_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./demonic-web.js */ \"./src/demonic-web.js\");\n/* harmony import */ var xterm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! xterm */ \"./node_modules/xterm/lib/xterm.js\");\n/* harmony import */ var xterm__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(xterm__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\n\nlet darkTheme = {\n brightMagenta: '#ed68d9',\n brightGreen: '#5af78e',\n brightBlue: '#678cfa',\n brightCyan: '#9aedfe',\n background: '#000000',\n foreground: '#ffffff',\n cursor: '#ffffff',\n};\n\nlet lightTheme = {\n brightMagenta: '#ed68d9',\n brightGreen: '#008000',\n brightBlue: '#678cfa',\n brightCyan: '#02bfe5',\n background: '#fffafa',\n foreground: '#000000',\n cursor: '#000000',\n};\n\nfunction run(args) {\n if (document.readyState == \"complete\" || document.readyState == \"loaded\")\n return bootup(args)\n else\n document.addEventListener('DOMContentLoaded', () => bootup(args));\n}\n\nfunction bootup(args) {\n const url = args.url || 'wss://liambeckman.com:8181';\n\n let container = args.elem;\n if (container == null)\n container = document.getElementsByClassName('demonic-web')[0];\n\n // xterm.js constructor\n const terminal = new xterm__WEBPACK_IMPORTED_MODULE_3__[\"Terminal\"]({\n convertEol: true,\n });\n terminal.open(container);\n\n // User prompt\n const MAGENTA='\\x1b[1;35m';\n const GREEN='\\x1b[1;32m';\n const CYAN='\\x1b[1;36m';\n const NC='\\x1b[0m';\n const userPrompt = args.userPrompt ||\n `${CYAN}demo${NC}${MAGENTA} @ ${NC}${CYAN}demonic${NC} ${GREEN}>${NC} `;\n terminal.write(userPrompt);\n\n // Command\n if (args.write != false)\n terminal.write(args.data);\n terminal.focus();\n\n let demonicWeb = new _demonic_web_js__WEBPACK_IMPORTED_MODULE_2__[\"DemonicWeb\"](terminal, url, userPrompt);\n demonicWeb.connect();\n\n // Resize terminal\n new ResizeObserver(() => {\n if (demonicWeb.getReadyState() == WebSocket.OPEN)\n demonicWeb.fit();\n }).observe(container);\n\n // Status bar\n let termElement = container.querySelector('.terminal');\n let statusBar = container.querySelector('#status');\n if (statusBar == null) {\n statusBar = document.createElement('div');\n statusBar.id = 'status';\n container.insertBefore(statusBar, termElement);\n }\n if (args.statusBar == false)\n statusBar.classList.add('hide');\n\n // Current WebSocket address\n let urlSpan = document.createElement('span');\n urlSpan.innerHTML = url;\n urlSpan.classList.add('urlSpan');\n urlSpan.title = 'Set WebSocket Address';\n urlSpan.innerHTML = url;\n urlSpan.onclick = () => getNewUrl(demonicWeb, urlSpan);\n\n // 'connecting' event listener\n demonicWeb.eventEmitter.addListener('connecting', () => {\n statusBar.classList.remove('connected');\n statusBar.innerHTML = 'Status: Connecting...';\n statusBar.appendChild(urlSpan);\n terminal.setOption('cursorBlink', false);\n });\n\n // 'connected' event listener\n let init = true;\n demonicWeb.eventEmitter.addListener('connected', () => {\n statusBar.classList.add('connected');\n statusBar.innerHTML = 'Status: Connected!';\n statusBar.appendChild(urlSpan);\n\n terminal.setOption('cursorBlink', true);\n\n if (init) {\n demonicWeb.send(args);\n init = false;\n }\n });\n\n // Examples\n const examples = document.getElementById('demonic-examples');\n if (examples != null) {\n examples.addEventListener('click', (event) => {\n const example = event.target;\n if (example == examples)\n return;\n const data = example.innerHTML;\n\n demonicWeb.clearLine();\n demonicWeb.write(data);\n demonicWeb.send(data);\n terminal.focus();\n });\n }\n\n // Theme\n let theme = (args.theme == 'light') ? lightTheme : darkTheme;\n terminal.setOption('theme', theme);\n\n // Buttons\n let buttons = document.createElement('div');\n buttons.className = 'buttons';\n termElement.appendChild(buttons);\n\n // Menu button\n let menuBtn = document.createElement('button');\n menuBtn.textContent = '☰';\n menuBtn.title = 'Open Menu';\n buttons.appendChild(menuBtn);\n\n menuBtn.onclick = () => {\n menu.classList.toggle('hide');\n }\n\n window.addEventListener('click', (e) => {\n if (e.target != menuBtn && !menu.contains(e.target))\n menu.classList.add('hide');\n });\n\n terminal.onKey(e => {\n // Escape key\n if (e.key == '\\u001b')\n menu.classList.add('hide');\n });\n\n let menu = document.createElement('ul');\n menu.classList.add('demonic-menu');\n menu.classList.add('hide');\n termElement.appendChild(menu);\n\n // Change theme button\n let themeItem = document.createElement('li');\n themeItem.textContent = '☯ Change Theme';\n menu.appendChild(themeItem);\n\n themeItem.onclick = () => {\n theme = (theme == lightTheme) ? darkTheme : lightTheme;\n terminal.setOption('theme', theme);\n buttons.classList.toggle('dark-text');\n }\n\n // Toggle status button\n let statusItem = document.createElement('li');\n statusItem.textContent = '🛈 Toggle Status Bar';\n menu.appendChild(statusItem);\n\n statusItem.onclick = () => statusBar.classList.toggle('hide');\n\n // Set WebSocket address button\n let wsItem = document.createElement('li');\n wsItem.textContent = '✉ Set WebSocket Address';\n menu.appendChild(wsItem);\n\n wsItem.onclick = () => getNewUrl(demonicWeb, urlSpan);\n\n // Fullscreen button\n let fullItem = document.createElement('li');\n fullItem.textContent = '⛶ Toggle Fullscreen';\n menu.appendChild(fullItem);\n\n fullItem.onclick = () => container.classList.toggle('fullscreen');\n\n // Close button\n let closeItem = document.createElement('li');\n closeItem.textContent = '✕ Close Terminal';\n closeItem.classList.add('close');\n menu.appendChild(closeItem);\n\n closeItem.onclick = () => {\n demonicWeb.close();\n container.remove();\n }\n\n return demonicWeb;\n}\n\nfunction getNewUrl(demonicWeb, urlSpan) {\n let url = prompt('Enter WebSocket Address:', demonicWeb.url);\n if (url != null) {\n urlSpan.innerHTML = url;\n\n demonicWeb.close();\n demonicWeb.url = url;\n demonicWeb.connect();\n }\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vc3JjL2NlcmJlcnVzLmpzP2YyY2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWU7QUFDb0I7QUFDTjtBQUNpQjtBQUNiOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5Qiw4Q0FBUTtBQUNqQztBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQix3QkFBd0I7QUFDeEIsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSxXQUFXLEtBQUssTUFBTSxHQUFHLEVBQUUsUUFBUSxLQUFLLEdBQUcsRUFBRSxLQUFLLFNBQVMsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHO0FBQzdFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5QiwwREFBVTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9zcmMvY2VyYmVydXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBydW4gfTtcbmltcG9ydCAnLi4vYXNzZXRzL2RlbW9uaWMtd2ViLmNzcyc7XG5pbXBvcnQgJ3h0ZXJtL2Nzcy94dGVybS5jc3MnO1xuaW1wb3J0IHsgRGVtb25pY1dlYiB9IGZyb20gJy4vZGVtb25pYy13ZWIuanMnO1xuaW1wb3J0IHsgVGVybWluYWwgfSBmcm9tICd4dGVybSc7XG5cbmxldCBkYXJrVGhlbWUgPSB7XG4gICAgYnJpZ2h0TWFnZW50YTogJyNlZDY4ZDknLFxuICAgIGJyaWdodEdyZWVuOiAgICcjNWFmNzhlJyxcbiAgICBicmlnaHRCbHVlOiAgICAnIzY3OGNmYScsXG4gICAgYnJpZ2h0Q3lhbjogICAgJyM5YWVkZmUnLFxuICAgIGJhY2tncm91bmQ6ICAgICcjMDAwMDAwJyxcbiAgICBmb3JlZ3JvdW5kOiAgICAnI2ZmZmZmZicsXG4gICAgY3Vyc29yOiAgICAgICAgJyNmZmZmZmYnLFxufTtcblxubGV0IGxpZ2h0VGhlbWUgPSB7XG4gICAgYnJpZ2h0TWFnZW50YTogJyNlZDY4ZDknLFxuICAgIGJyaWdodEdyZWVuOiAgICcjMDA4MDAwJyxcbiAgICBicmlnaHRCbHVlOiAgICAnIzY3OGNmYScsXG4gICAgYnJpZ2h0Q3lhbjogICAgJyMwMmJmZTUnLFxuICAgIGJhY2tncm91bmQ6ICAgICcjZmZmYWZhJyxcbiAgICBmb3JlZ3JvdW5kOiAgICAnIzAwMDAwMCcsXG4gICAgY3Vyc29yOiAgICAgICAgJyMwMDAwMDAnLFxufTtcblxuZnVuY3Rpb24gcnVuKGFyZ3MpIHtcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PSBcImNvbXBsZXRlXCIgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PSBcImxvYWRlZFwiKVxuICAgICAgICByZXR1cm4gYm9vdHVwKGFyZ3MpXG4gICAgZWxzZVxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gYm9vdHVwKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gYm9vdHVwKGFyZ3MpIHtcbiAgICBjb25zdCB1cmwgPSBhcmdzLnVybCB8fCAnd3NzOi8vbGlhbWJlY2ttYW4uY29tOjgxODEnO1xuXG4gICAgbGV0IGNvbnRhaW5lciA9IGFyZ3MuZWxlbTtcbiAgICBpZiAoY29udGFpbmVyID09IG51bGwpXG4gICAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2RlbW9uaWMtd2ViJylbMF07XG5cbiAgICAvLyB4dGVybS5qcyBjb25zdHJ1Y3RvclxuICAgIGNvbnN0IHRlcm1pbmFsID0gbmV3IFRlcm1pbmFsKHtcbiAgICAgICAgY29udmVydEVvbDogdHJ1ZSxcbiAgICB9KTtcbiAgICB0ZXJtaW5hbC5vcGVuKGNvbnRhaW5lcik7XG5cbiAgICAvLyBVc2VyIHByb21wdFxuICAgIGNvbnN0IE1BR0VOVEE9J1xceDFiWzE7MzVtJztcbiAgICBjb25zdCBHUkVFTj0nXFx4MWJbMTszMm0nO1xuICAgIGNvbnN0IENZQU49J1xceDFiWzE7MzZtJztcbiAgICBjb25zdCBOQz0nXFx4MWJbMG0nO1xuICAgIGNvbnN0IHVzZXJQcm9tcHQgPSBhcmdzLnVzZXJQcm9tcHQgfHxcbiAgICAgICAgYCR7Q1lBTn1kZW1vJHtOQ30ke01BR0VOVEF9IEAgJHtOQ30ke0NZQU59ZGVtb25pYyR7TkN9ICR7R1JFRU59PiR7TkN9IGA7XG4gICAgdGVybWluYWwud3JpdGUodXNlclByb21wdCk7XG5cbiAgICAvLyBDb21tYW5kXG4gICAgaWYgKGFyZ3Mud3JpdGUgIT0gZmFsc2UpXG4gICAgICAgIHRlcm1pbmFsLndyaXRlKGFyZ3MuZGF0YSk7XG4gICAgdGVybWluYWwuZm9jdXMoKTtcblxuICAgIGxldCBkZW1vbmljV2ViID0gbmV3IERlbW9uaWNXZWIodGVybWluYWwsIHVybCwgdXNlclByb21wdCk7XG4gICAgZGVtb25pY1dlYi5jb25uZWN0KCk7XG5cbiAgICAvLyBSZXNpemUgdGVybWluYWxcbiAgICBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoZGVtb25pY1dlYi5nZXRSZWFkeVN0YXRlKCkgPT0gV2ViU29ja2V0Lk9QRU4pXG4gICAgICAgICAgICBkZW1vbmljV2ViLmZpdCgpO1xuICAgIH0pLm9ic2VydmUoY29udGFpbmVyKTtcblxuICAgIC8vIFN0YXR1cyBiYXJcbiAgICBsZXQgdGVybUVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLnRlcm1pbmFsJyk7XG4gICAgbGV0IHN0YXR1c0JhciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjc3RhdHVzJyk7XG4gICAgaWYgKHN0YXR1c0JhciA9PSBudWxsKSB7XG4gICAgICAgIHN0YXR1c0JhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzdGF0dXNCYXIuaWQgPSAnc3RhdHVzJztcbiAgICAgICAgY29udGFpbmVyLmluc2VydEJlZm9yZShzdGF0dXNCYXIsIHRlcm1FbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGFyZ3Muc3RhdHVzQmFyID09IGZhbHNlKVxuICAgICAgICBzdGF0dXNCYXIuY2xhc3NMaXN0LmFkZCgnaGlkZScpO1xuXG4gICAgLy8gQ3VycmVudCBXZWJTb2NrZXQgYWRkcmVzc1xuICAgIGxldCB1cmxTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHVybFNwYW4uaW5uZXJIVE1MID0gdXJsO1xuICAgIHVybFNwYW4uY2xhc3NMaXN0LmFkZCgndXJsU3BhbicpO1xuICAgIHVybFNwYW4udGl0bGUgPSAnU2V0IFdlYlNvY2tldCBBZGRyZXNzJztcbiAgICB1cmxTcGFuLmlubmVySFRNTCA9IHVybDtcbiAgICB1cmxTcGFuLm9uY2xpY2sgPSAoKSA9PiBnZXROZXdVcmwoZGVtb25pY1dlYiwgdXJsU3Bhbik7XG5cbiAgICAvLyAnY29ubmVjdGluZycgZXZlbnQgbGlzdGVuZXJcbiAgICBkZW1vbmljV2ViLmV2ZW50RW1pdHRlci5hZGRMaXN0ZW5lcignY29ubmVjdGluZycsICgpID0+IHtcbiAgICAgICAgc3RhdHVzQmFyLmNsYXNzTGlzdC5yZW1vdmUoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICBzdGF0dXNCYXIuaW5uZXJIVE1MID0gJ1N0YXR1czogQ29ubmVjdGluZy4uLic7XG4gICAgICAgIHN0YXR1c0Jhci5hcHBlbmRDaGlsZCh1cmxTcGFuKTtcbiAgICAgICAgdGVybWluYWwuc2V0T3B0aW9uKCdjdXJzb3JCbGluaycsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vICdjb25uZWN0ZWQnIGV2ZW50IGxpc3RlbmVyXG4gICAgbGV0IGluaXQgPSB0cnVlO1xuICAgIGRlbW9uaWNXZWIuZXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyKCdjb25uZWN0ZWQnLCAoKSA9PiB7XG4gICAgICAgIHN0YXR1c0Jhci5jbGFzc0xpc3QuYWRkKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgc3RhdHVzQmFyLmlubmVySFRNTCA9ICdTdGF0dXM6IENvbm5lY3RlZCEnO1xuICAgICAgICBzdGF0dXNCYXIuYXBwZW5kQ2hpbGQodXJsU3Bhbik7XG5cbiAgICAgICAgdGVybWluYWwuc2V0T3B0aW9uKCdjdXJzb3JCbGluaycsIHRydWUpO1xuXG4gICAgICAgIGlmIChpbml0KSB7XG4gICAgICAgICAgICBkZW1vbmljV2ViLnNlbmQoYXJncyk7XG4gICAgICAgICAgICBpbml0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEV4YW1wbGVzXG4gICAgY29uc3QgZXhhbXBsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVtb25pYy1leGFtcGxlcycpO1xuICAgIGlmIChleGFtcGxlcyAhPSBudWxsKSB7XG4gICAgICAgIGV4YW1wbGVzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGFtcGxlID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgaWYgKGV4YW1wbGUgPT0gZXhhbXBsZXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGV4YW1wbGUuaW5uZXJIVE1MO1xuXG4gICAgICAgICAgICBkZW1vbmljV2ViLmNsZWFyTGluZSgpO1xuICAgICAgICAgICAgZGVtb25pY1dlYi53cml0ZShkYXRhKTtcbiAgICAgICAgICAgIGRlbW9uaWNXZWIuc2VuZChkYXRhKTtcbiAgICAgICAgICAgIHRlcm1pbmFsLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRoZW1lXG4gICAgbGV0IHRoZW1lID0gKGFyZ3MudGhlbWUgPT0gJ2xpZ2h0JykgPyBsaWdodFRoZW1lIDogZGFya1RoZW1lO1xuICAgIHRlcm1pbmFsLnNldE9wdGlvbigndGhlbWUnLCB0aGVtZSk7XG5cbiAgICAvLyBCdXR0b25zXG4gICAgbGV0IGJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBidXR0b25zLmNsYXNzTmFtZSA9ICdidXR0b25zJztcbiAgICB0ZXJtRWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25zKTtcblxuICAgIC8vIE1lbnUgYnV0dG9uXG4gICAgbGV0IG1lbnVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICBtZW51QnRuLnRleHRDb250ZW50ID0gJ+KYsCc7XG4gICAgbWVudUJ0bi50aXRsZSA9ICdPcGVuIE1lbnUnO1xuICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQobWVudUJ0bik7XG5cbiAgICBtZW51QnRuLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIG1lbnUuY2xhc3NMaXN0LnRvZ2dsZSgnaGlkZScpO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLnRhcmdldCAhPSBtZW51QnRuICYmICFtZW51LmNvbnRhaW5zKGUudGFyZ2V0KSlcbiAgICAgICAgICAgIG1lbnUuY2xhc3NMaXN0LmFkZCgnaGlkZScpO1xuICAgIH0pO1xuXG4gICAgdGVybWluYWwub25LZXkoZSA9PiB7XG4gICAgICAgIC8vIEVzY2FwZSBrZXlcbiAgICAgICAgaWYgKGUua2V5ID09ICdcXHUwMDFiJylcbiAgICAgICAgICAgIG1lbnUuY2xhc3NMaXN0LmFkZCgnaGlkZScpO1xuICAgIH0pO1xuXG4gICAgbGV0IG1lbnUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICAgIG1lbnUuY2xhc3NMaXN0LmFkZCgnZGVtb25pYy1tZW51Jyk7XG4gICAgbWVudS5jbGFzc0xpc3QuYWRkKCdoaWRlJyk7XG4gICAgdGVybUVsZW1lbnQuYXBwZW5kQ2hpbGQobWVudSk7XG5cbiAgICAvLyBDaGFuZ2UgdGhlbWUgYnV0dG9uXG4gICAgbGV0IHRoZW1lSXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgdGhlbWVJdGVtLnRleHRDb250ZW50ID0gJ+KYryBDaGFuZ2UgVGhlbWUnO1xuICAgIG1lbnUuYXBwZW5kQ2hpbGQodGhlbWVJdGVtKTtcblxuICAgIHRoZW1lSXRlbS5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGVtZSA9ICh0aGVtZSA9PSBsaWdodFRoZW1lKSA/IGRhcmtUaGVtZSA6IGxpZ2h0VGhlbWU7XG4gICAgICAgIHRlcm1pbmFsLnNldE9wdGlvbigndGhlbWUnLCB0aGVtZSk7XG4gICAgICAgIGJ1dHRvbnMuY2xhc3NMaXN0LnRvZ2dsZSgnZGFyay10ZXh0Jyk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHN0YXR1cyBidXR0b25cbiAgICBsZXQgc3RhdHVzSXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgc3RhdHVzSXRlbS50ZXh0Q29udGVudCA9ICfwn5uIIFRvZ2dsZSBTdGF0dXMgQmFyJztcbiAgICBtZW51LmFwcGVuZENoaWxkKHN0YXR1c0l0ZW0pO1xuXG4gICAgc3RhdHVzSXRlbS5vbmNsaWNrID0gKCkgPT4gc3RhdHVzQmFyLmNsYXNzTGlzdC50b2dnbGUoJ2hpZGUnKTtcblxuICAgIC8vIFNldCBXZWJTb2NrZXQgYWRkcmVzcyBidXR0b25cbiAgICBsZXQgd3NJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICB3c0l0ZW0udGV4dENvbnRlbnQgPSAn4pyJIFNldCBXZWJTb2NrZXQgQWRkcmVzcyc7XG4gICAgbWVudS5hcHBlbmRDaGlsZCh3c0l0ZW0pO1xuXG4gICAgd3NJdGVtLm9uY2xpY2sgPSAoKSA9PiBnZXROZXdVcmwoZGVtb25pY1dlYiwgdXJsU3Bhbik7XG5cbiAgICAvLyBGdWxsc2NyZWVuIGJ1dHRvblxuICAgIGxldCBmdWxsSXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgZnVsbEl0ZW0udGV4dENvbnRlbnQgPSAn4pu2IFRvZ2dsZSBGdWxsc2NyZWVuJztcbiAgICBtZW51LmFwcGVuZENoaWxkKGZ1bGxJdGVtKTtcblxuICAgIGZ1bGxJdGVtLm9uY2xpY2sgPSAoKSA9PiBjb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZSgnZnVsbHNjcmVlbicpO1xuXG4gICAgLy8gQ2xvc2UgYnV0dG9uXG4gICAgbGV0IGNsb3NlSXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgY2xvc2VJdGVtLnRleHRDb250ZW50ID0gJ+KclSBDbG9zZSBUZXJtaW5hbCc7XG4gICAgY2xvc2VJdGVtLmNsYXNzTGlzdC5hZGQoJ2Nsb3NlJyk7XG4gICAgbWVudS5hcHBlbmRDaGlsZChjbG9zZUl0ZW0pO1xuXG4gICAgY2xvc2VJdGVtLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGRlbW9uaWNXZWIuY2xvc2UoKTtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZW1vbmljV2ViO1xufVxuXG5mdW5jdGlvbiBnZXROZXdVcmwoZGVtb25pY1dlYiwgdXJsU3Bhbikge1xuICAgIGxldCB1cmwgPSBwcm9tcHQoJ0VudGVyIFdlYlNvY2tldCBBZGRyZXNzOicsIGRlbW9uaWNXZWIudXJsKTtcbiAgICBpZiAodXJsICE9IG51bGwpIHtcbiAgICAgICAgdXJsU3Bhbi5pbm5lckhUTUwgPSB1cmw7XG5cbiAgICAgICAgZGVtb25pY1dlYi5jbG9zZSgpO1xuICAgICAgICBkZW1vbmljV2ViLnVybCA9IHVybDtcbiAgICAgICAgZGVtb25pY1dlYi5jb25uZWN0KCk7XG4gICAgfVxufVxuXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/cerberus.js\n");
/***/ }),
/***/ "./src/demonic-web.js":
/*!****************************!*\
!*** ./src/demonic-web.js ***!
\****************************/
/*! exports provided: DemonicWeb */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DemonicWeb\", function() { return DemonicWeb; });\n/* harmony import */ var xterm_addon_fit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! xterm-addon-fit */ \"./node_modules/xterm-addon-fit/lib/xterm-addon-fit.js\");\n/* harmony import */ var xterm_addon_fit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(xterm_addon_fit__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var xterm_addon_web_links__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! xterm-addon-web-links */ \"./node_modules/xterm-addon-web-links/lib/xterm-addon-web-links.js\");\n/* harmony import */ var xterm_addon_web_links__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(xterm_addon_web_links__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nconst events = __webpack_require__(/*! events */ \"./node_modules/events/events.js\");\n\nclass DemonicWeb {\n constructor(term, url, userPrompt) {\n this.term = term;\n this.url = url;\n this.userPrompt = userPrompt;\n this.eventEmitter = new events.EventEmitter();\n this.ws = null;\n this.cmds = [];\n this.draw = true;\n this.heartbeat = null;\n\n // WebLink addon\n term.loadAddon(new xterm_addon_web_links__WEBPACK_IMPORTED_MODULE_1__[\"WebLinksAddon\"]());\n\n // Fit addon\n const fitAddon = new xterm_addon_fit__WEBPACK_IMPORTED_MODULE_0__[\"FitAddon\"]();\n term.loadAddon(fitAddon);\n this.fitAddon = fitAddon;\n this.fit();\n\n // Add key listeners\n this.addKeyListeners(term);\n }\n\n fit() {\n this.fitAddon.fit();\n }\n\n deserialize(input) {\n const buff = new Buffer(input);\n const output = buff.toString('utf8');\n return output;\n }\n\n getReadyState() {\n return this.ws.readyState;\n }\n\n isOpen() {\n return this.getReadyState() == WebSocket.OPEN;\n }\n\n clear() {\n this.term.clear();\n }\n\n clearLine() {\n this.write('\\x1b[2K\\r');\n this.send('\\x1b[2K\\r');\n this.write(this.userPrompt);\n }\n\n write(data) {\n this.term.write(data);\n }\n\n send(data) {\n let msg;\n if (typeof data == 'object')\n msg = data;\n else\n msg = {'data': data};\n\n msg.cols = this.term.cols;\n msg.rows = this.term.rows;\n\n if (this.ws.readyState == WebSocket.CONNECTING)\n this.ws.addEventListener('open', () => this.ws.send(JSON.stringify(msg)));\n else\n this.ws.send(JSON.stringify(msg));\n }\n\n atPrompt() {\n let plainPrompt = this.userPrompt.replace(/\\x1B\\[.*?m/g, '');\n return (this.term.buffer.active.cursorX == plainPrompt.length);\n }\n\n close() {\n this.ws.close();\n clearInterval(this.heartbeat);\n }\n\n connect() {\n this.ws = this.createWebSocket(this.url);\n\n this.heartbeat = setInterval(() => {\n if (this.ws.readyState == WebSocket.CLOSED) {\n this.clearLine();\n this.ws = this.createWebSocket(this.url);\n }\n }, 2000);\n }\n\n addKeyListeners(term) {\n let cmdIndex = 0;\n let cmd = '';\n term.onKey((e) => {\n // Escape\n if (e.key == '\\u001b')\n term.blur();\n\n if (!this.isOpen)\n return;\n\n this.send(e.key);\n\n if (!this.draw)\n return;\n\n switch (e.key) {\n // Enter\n case '\\r':\n term.write('\\n');\n cmdIndex = 0;\n break;\n\n // Backspace\n case '\\u007f':\n if (!this.atPrompt())\n term.write('\\b \\b');\n break;\n\n // Ctrl + l\n case '\\u000c':\n term.clear();\n this.clearLine();\n break;\n\n // Ctrl + a\n case '\\u0001':\n break;\n\n // Ctrl + e\n case '\\u0005':\n break;\n\n // Ctrl + u\n case '\\u0015':\n this.clearLine();\n break;\n\n // Up arrow\n case '\\u001b[A':\n this.clearLine();\n if (cmdIndex < this.cmds.length)\n cmdIndex += 1;\n cmd = this.cmds[this.cmds.length - cmdIndex];\n if (typeof cmd != 'undefined') {\n term.write(cmd);\n this.send(cmd);\n }\n break;\n\n // Down arrow\n case '\\u001b[B':\n this.clearLine();\n if (cmdIndex > 0)\n cmdIndex -= 1;\n cmd = this.cmds[this.cmds.length - cmdIndex];\n if (typeof cmd != 'undefined') {\n term.write(cmd);\n this.send(cmd);\n }\n break;\n\n // Left arrow\n case '\\u001b[D':\n if (!this.atPrompt())\n term.write(e.key);\n break;\n\n // All other keys\n default:\n cmdIndex = 0;\n term.write(e.key);\n }\n });\n }\n\n createWebSocket(url) {\n let obj = {};\n let loading = false;\n let message = '';\n\n let ws = new WebSocket(url);\n this.eventEmitter.emit('connecting');\n\n ws.onclose = () => {\n this.eventEmitter.emit('connecting');\n }\n\n ws.onopen = () => {\n this.eventEmitter.emit('connected');\n }\n\n ws.onmessage = (e) => {\n obj = JSON.parse(e.data);\n\n if (obj.cmd != null) {\n this.cmds.push(obj.cmd);\n }\n\n if (obj.draw != null) {\n this.draw = obj.draw;\n return;\n }\n\n if (obj.loading) {\n loading = true;\n this.term.write(' ');\n const spin = async () => {\n const chars = '| / - \\\\';\n const arr = chars.split(' ');\n let i = 0\n\n while (loading) {\n this.term.write('\\b \\b')\n this.term.write(arr[i++ % arr.length]);\n await new Promise(resolve => setTimeout(resolve, 200));;\n }\n }\n spin();\n }\n\n if (obj.err) {\n if (loading)\n this.term.write('\\b \\b')\n this.term.write(obj.err);\n }\n\n if (obj.exit != null) {\n this.draw = true;\n if (loading)\n loading = false;\n this.term.write(this.userPrompt);\n }\n\n if (obj.out) {\n if (loading == true) {\n this.term.write('\\b')\n loading = false;\n }\n this.term.focus();\n message = this.deserialize(obj.out);\n this.term.write(message);\n }\n }\n\n return ws;\n }\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/buffer/index.js */ \"./node_modules/buffer/index.js\").Buffer))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EZW1vbmljV2ViLy4vc3JjL2RlbW9uaWMtd2ViLmpzPzE4OTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXFCO0FBQ3NCO0FBQ1c7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLCtDQUFROztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixtRUFBYTs7QUFFeEM7QUFDQSw2QkFBNkIsd0RBQVE7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9zcmMvZGVtb25pYy13ZWIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBEZW1vbmljV2ViIH1cbmltcG9ydCB7IEZpdEFkZG9uIH0gZnJvbSAneHRlcm0tYWRkb24tZml0JztcbmltcG9ydCB7IFdlYkxpbmtzQWRkb24gfSBmcm9tICd4dGVybS1hZGRvbi13ZWItbGlua3MnO1xuY29uc3QgZXZlbnRzID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5cbmNsYXNzIERlbW9uaWNXZWIge1xuICAgIGNvbnN0cnVjdG9yKHRlcm0sIHVybCwgdXNlclByb21wdCkge1xuICAgICAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgICAgdGhpcy51c2VyUHJvbXB0ID0gdXNlclByb21wdDtcbiAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLndzID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbWRzID0gW107XG4gICAgICAgIHRoaXMuZHJhdyA9IHRydWU7XG4gICAgICAgIHRoaXMuaGVhcnRiZWF0ID0gbnVsbDtcblxuICAgICAgICAvLyBXZWJMaW5rIGFkZG9uXG4gICAgICAgIHRlcm0ubG9hZEFkZG9uKG5ldyBXZWJMaW5rc0FkZG9uKCkpO1xuXG4gICAgICAgIC8vIEZpdCBhZGRvblxuICAgICAgICBjb25zdCBmaXRBZGRvbiA9IG5ldyBGaXRBZGRvbigpO1xuICAgICAgICB0ZXJtLmxvYWRBZGRvbihmaXRBZGRvbik7XG4gICAgICAgIHRoaXMuZml0QWRkb24gPSBmaXRBZGRvbjtcbiAgICAgICAgdGhpcy5maXQoKTtcblxuICAgICAgICAvLyBBZGQga2V5IGxpc3RlbmVyc1xuICAgICAgICB0aGlzLmFkZEtleUxpc3RlbmVycyh0ZXJtKTtcbiAgICB9XG5cbiAgICBmaXQoKSB7XG4gICAgICAgIHRoaXMuZml0QWRkb24uZml0KCk7XG4gICAgfVxuXG4gICAgZGVzZXJpYWxpemUoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBCdWZmZXIoaW5wdXQpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBidWZmLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgZ2V0UmVhZHlTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3MucmVhZHlTdGF0ZTtcbiAgICB9XG5cbiAgICBpc09wZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlYWR5U3RhdGUoKSA9PSBXZWJTb2NrZXQuT1BFTjtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy50ZXJtLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgY2xlYXJMaW5lKCkge1xuICAgICAgICB0aGlzLndyaXRlKCdcXHgxYlsyS1xccicpO1xuICAgICAgICB0aGlzLnNlbmQoJ1xceDFiWzJLXFxyJyk7XG4gICAgICAgIHRoaXMud3JpdGUodGhpcy51c2VyUHJvbXB0KTtcbiAgICB9XG5cbiAgICB3cml0ZShkYXRhKSB7XG4gICAgICAgIHRoaXMudGVybS53cml0ZShkYXRhKTtcbiAgICB9XG5cbiAgICBzZW5kKGRhdGEpIHtcbiAgICAgICAgbGV0IG1zZztcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdvYmplY3QnKVxuICAgICAgICAgICAgbXNnID0gZGF0YTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXNnID0geydkYXRhJzogZGF0YX07XG5cbiAgICAgICAgbXNnLmNvbHMgPSB0aGlzLnRlcm0uY29scztcbiAgICAgICAgbXNnLnJvd3MgPSB0aGlzLnRlcm0ucm93cztcblxuICAgICAgICBpZiAodGhpcy53cy5yZWFkeVN0YXRlID09IFdlYlNvY2tldC5DT05ORUNUSU5HKVxuICAgICAgICAgICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgKCkgPT4gdGhpcy53cy5zZW5kKEpTT04uc3RyaW5naWZ5KG1zZykpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy53cy5zZW5kKEpTT04uc3RyaW5naWZ5KG1zZykpO1xuICAgIH1cblxuICAgIGF0UHJvbXB0KCkge1xuICAgICAgICBsZXQgcGxhaW5Qcm9tcHQgPSB0aGlzLnVzZXJQcm9tcHQucmVwbGFjZSgvXFx4MUJcXFsuKj9tL2csICcnKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLnRlcm0uYnVmZmVyLmFjdGl2ZS5jdXJzb3JYID09IHBsYWluUHJvbXB0Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMud3MuY2xvc2UoKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0YmVhdCk7XG4gICAgfVxuXG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy53cyA9IHRoaXMuY3JlYXRlV2ViU29ja2V0KHRoaXMudXJsKTtcblxuICAgICAgICB0aGlzLmhlYXJ0YmVhdCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLndzLnJlYWR5U3RhdGUgPT0gV2ViU29ja2V0LkNMT1NFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJMaW5lKCk7XG4gICAgICAgICAgICAgICAgdGhpcy53cyA9IHRoaXMuY3JlYXRlV2ViU29ja2V0KHRoaXMudXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMjAwMCk7XG4gICAgfVxuXG4gICAgYWRkS2V5TGlzdGVuZXJzKHRlcm0pIHtcbiAgICAgICAgbGV0IGNtZEluZGV4ID0gMDtcbiAgICAgICAgbGV0IGNtZCA9ICcnO1xuICAgICAgICB0ZXJtLm9uS2V5KChlKSA9PiB7XG4gICAgICAgICAgICAvLyBFc2NhcGVcbiAgICAgICAgICAgIGlmIChlLmtleSA9PSAnXFx1MDAxYicpXG4gICAgICAgICAgICAgICAgdGVybS5ibHVyKCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc09wZW4pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLnNlbmQoZS5rZXkpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuZHJhdylcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW50ZXJcbiAgICAgICAgICAgICAgICBjYXNlICdcXHInOlxuICAgICAgICAgICAgICAgICAgICB0ZXJtLndyaXRlKCdcXG4nKTtcbiAgICAgICAgICAgICAgICAgICAgY21kSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAvLyBCYWNrc3BhY2VcbiAgICAgICAgICAgICAgICBjYXNlICdcXHUwMDdmJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF0UHJvbXB0KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtLndyaXRlKCdcXGIgXFxiJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEN0cmwgKyBsXG4gICAgICAgICAgICAgICAgY2FzZSAnXFx1MDAwYyc6XG4gICAgICAgICAgICAgICAgICAgIHRlcm0uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckxpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ3RybCArIGFcbiAgICAgICAgICAgICAgICBjYXNlICdcXHUwMDAxJzpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ3RybCArIGVcbiAgICAgICAgICAgICAgICBjYXNlICdcXHUwMDA1JzpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ3RybCArIHVcbiAgICAgICAgICAgICAgICBjYXNlICdcXHUwMDE1JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckxpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXAgYXJyb3dcbiAgICAgICAgICAgICAgICBjYXNlICdcXHUwMDFiW0EnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyTGluZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY21kSW5kZXggPCB0aGlzLmNtZHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgY21kSW5kZXggKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgY21kID0gdGhpcy5jbWRzW3RoaXMuY21kcy5sZW5ndGggLSBjbWRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY21kICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtLndyaXRlKGNtZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmQoY21kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAvLyBEb3duIGFycm93XG4gICAgICAgICAgICAgICAgY2FzZSAnXFx1MDAxYltCJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckxpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNtZEluZGV4ID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZEluZGV4IC09IDE7XG4gICAgICAgICAgICAgICAgICAgIGNtZCA9IHRoaXMuY21kc1t0aGlzLmNtZHMubGVuZ3RoIC0gY21kSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNtZCAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVybS53cml0ZShjbWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kKGNtZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBhcnJvd1xuICAgICAgICAgICAgICAgIGNhc2UgJ1xcdTAwMWJbRCc6XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hdFByb21wdCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGVybS53cml0ZShlLmtleSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFsbCBvdGhlciBrZXlzXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY21kSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICB0ZXJtLndyaXRlKGUua2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlV2ViU29ja2V0KHVybCkge1xuICAgICAgICBsZXQgb2JqID0ge307XG4gICAgICAgIGxldCBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgICAgICAgbGV0IHdzID0gbmV3IFdlYlNvY2tldCh1cmwpO1xuICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KCdjb25uZWN0aW5nJyk7XG5cbiAgICAgICAgd3Mub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoJ2Nvbm5lY3RpbmcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdzLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgd3Mub25tZXNzYWdlID0gKGUpID0+IHtcbiAgICAgICAgICAgIG9iaiA9IEpTT04ucGFyc2UoZS5kYXRhKTtcblxuICAgICAgICAgICAgaWYgKG9iai5jbWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY21kcy5wdXNoKG9iai5jbWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob2JqLmRyYXcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhdyA9IG9iai5kcmF3O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9iai5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgbG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXJtLndyaXRlKCcgJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BpbiA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcnMgPSAnfCAvIC0gXFxcXCc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGNoYXJzLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMFxuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlcm0ud3JpdGUoJ1xcYiBcXGInKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXJtLndyaXRlKGFycltpKysgJSBhcnIubGVuZ3RoXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKSk7O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwaW4oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9iai5lcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9hZGluZylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXJtLndyaXRlKCdcXGIgXFxiJylcbiAgICAgICAgICAgICAgICB0aGlzLnRlcm0ud3JpdGUob2JqLmVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvYmouZXhpdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAobG9hZGluZylcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudGVybS53cml0ZSh0aGlzLnVzZXJQcm9tcHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob2JqLm91dCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXJtLndyaXRlKCdcXGInKVxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudGVybS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLmRlc2VyaWFsaXplKG9iai5vdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMudGVybS53cml0ZShtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3cztcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/demonic-web.js\n");
/***/ })
/******/ });
});