@dwelle/excalidraw 0.3.21 → 0.3.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +2 -0
- package/dist/excalidraw-assets/image-2be1c869cd5bacebdc3c.js +1 -0
- package/dist/excalidraw.development.js +10 -10
- package/dist/excalidraw.production.min.js +2 -1
- package/package.json +4 -4
- package/types/packages/excalidraw/dist/excalidraw-assets/image-2be1c869cd5bacebdc3c.d.ts +0 -0
- package/types/packages/excalidraw/dist/excalidraw-assets/image-8e0c265e832504f62477.d.ts +0 -0
- package/types/packages/excalidraw/dist/excalidraw-assets/image-9592159c56d563857679.d.ts +0 -0
- package/types/packages/excalidraw/dist/excalidraw-assets/image-98a7b39bd21998c69c4b.d.ts +0 -0
- package/types/packages/excalidraw/dist/excalidraw-assets/image-af02967a8a4c328f2713.d.ts +0 -0
- package/types/packages/excalidraw/dist/excalidraw-assets/image-bd5991c772b4867c8d27.d.ts +0 -0
- package/types/packages/excalidraw/dist/excalidraw-assets/image-c198828284ec0dba28dc.d.ts +0 -0
- package/types/packages/excalidraw/dist/excalidraw-assets/image-eac20119cbc2ceb81523.d.ts +0 -0
- package/types/packages/excalidraw/webpack.prod.config.d.ts +2 -0
- package/dist/excalidraw-assets/image-02a1f3ecd6baf42daaa6.js +0 -1
- package/dist/excalidraw-assets/image-0db17e06143a31f9772b.js +0 -1
- package/dist/excalidraw-assets/image-46f5e8e621bfedbf6d91.js +0 -1
- package/dist/excalidraw-assets/image-6f8d3b9873832b5f7a67.js +0 -1
- package/dist/excalidraw-assets/image-a26261fb8a718f15853e.js +0 -1
- package/dist/excalidraw-assets/image-a97adda58b4c4d8d0107.js +0 -1
- package/dist/excalidraw-assets/image-eafab0c39ce13f7fea67.js +0 -1
- package/dist/excalidraw-assets/vendor-1018b0a7e7e60d808384.js +0 -2
- package/dist/excalidraw-assets/vendor-1018b0a7e7e60d808384.js.LICENSE.txt +0 -14
- package/dist/excalidraw-assets/vendor-405364e1fdefedf5d3d7.js +0 -2
- package/dist/excalidraw-assets/vendor-405364e1fdefedf5d3d7.js.LICENSE.txt +0 -14
- package/dist/excalidraw-assets/vendor-448ccb79e58765b61834.js +0 -2
- package/dist/excalidraw-assets/vendor-448ccb79e58765b61834.js.LICENSE.txt +0 -1
- package/dist/excalidraw-assets/vendor-585a4c89d479fd91edeb.js +0 -2
- package/dist/excalidraw-assets/vendor-585a4c89d479fd91edeb.js.LICENSE.txt +0 -1
- package/dist/excalidraw-assets/vendor-807e23d7531555236936.js +0 -2
- package/dist/excalidraw-assets/vendor-807e23d7531555236936.js.LICENSE.txt +0 -14
- package/dist/excalidraw-assets/vendor-b088910ac1ba8853a571.js +0 -2
- package/dist/excalidraw-assets/vendor-b088910ac1ba8853a571.js.LICENSE.txt +0 -8
- package/dist/excalidraw-assets/vendor-cb708a4580b007d81177.js +0 -2
- package/dist/excalidraw-assets/vendor-cb708a4580b007d81177.js.LICENSE.txt +0 -1
- package/dist/excalidraw-assets/vendor-ce466849186c701b6c48.js +0 -2
- package/dist/excalidraw-assets/vendor-ce466849186c701b6c48.js.LICENSE.txt +0 -14
- package/dist/excalidraw-assets/vendor-e5c6cd57013e8e575a61.js +0 -1
- package/dist/excalidraw-assets-dev/image-028ba554a42cc8a4995a.js +0 -42
- package/dist/excalidraw-assets-dev/image-664005f0b02c93342b89.js +0 -42
- package/dist/excalidraw-assets-dev/image-821afe7d20de2d2ca898.js +0 -42
- package/dist/excalidraw-assets-dev/image-9f771c114a0a3ad7b334.js +0 -42
- package/dist/excalidraw-assets-dev/image-a98d24ea9aa42940a0df.js +0 -42
- package/dist/excalidraw-assets-dev/image-b2befe1e2a0424a41fb3.js +0 -42
- package/dist/excalidraw-assets-dev/image-cacb3d0c02eb2e346ecc.js +0 -33
- package/dist/excalidraw-assets-dev/image-d7e941a51c2e0a7b3c23.js +0 -42
- package/dist/excalidraw-assets-dev/vendor-0454f90696ac835aeb45.js +0 -356
- package/dist/excalidraw-assets-dev/vendor-26ccabf52930f0ce0ffd.js +0 -334
- package/dist/excalidraw-assets-dev/vendor-5d1c4700bd0fa2109ab5.js +0 -334
- package/dist/excalidraw-assets-dev/vendor-7664c12c379862ed98a5.js +0 -356
- package/dist/excalidraw-assets-dev/vendor-7fcb99cece261da4983f.js +0 -344
- package/dist/excalidraw-assets-dev/vendor-bb07a412033591d5470d.js +0 -344
- package/dist/excalidraw-assets-dev/vendor-ec7db14ff9ba640888c4.js +0 -344
|
@@ -1098,7 +1098,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1098
1098
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
1099
1099
|
|
|
1100
1100
|
"use strict";
|
|
1101
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".excalidraw .UserList {\\n pointer-events: none;\\n /*github corner*/\\n padding: var(--space-factor);\\n display: flex;\\n justify-content: flex-end;\\n overflow: hidden;\\n border-radius: 60px;\\n}\\n.excalidraw .UserList.layout-vertical {\\n grid-column: 3;\\n flex-direction: column-reverse;\\n position: absolute;\\n top: 60px;\\n right: var(--space-factor);\\n max-height: calc(\\n 100vh - var(--space-factor) - 60px - 60px +\\n var(--itemOffset)\\n );\\n padding-bottom: max(var(--itemOffset) * -1, 0px);\\n}\\n.excalidraw .UserList.layout-vertical .Avatar {\\n width: 2.4rem;\\n height: 2.4rem;\\n}\\n.excalidraw .UserList > * {\\n pointer-events: all;\\n}\\n.excalidraw .UserList.layout-vertical > * {\\n margin-bottom: var(--itemOffset);\\n}\\n.excalidraw .UserList.layout-horizontal > * {\\n margin-right: var(--itemOffset);\\n}\\n.excalidraw .UserList_mobile {\\n padding: 0;\\n justify-content: normal;\\n}\\n.excalidraw .UserList_mobile > * {\\n margin: 0 var(--space-factor) var(--space-factor) 0;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../components/UserList.scss\"],\"names\":[],\"mappings\":\"AAKE;EACE,oBAAA;EACA,gBAAA;EACA,4BAAA;EACA,aAAA;EACA,yBAAA;EAEA,gBAAA;EACA,mBAAA;AALJ;AAOI;EACE,cAAA;EACA,8BAAA;EACA,kBAAA;EACA,SAlBQ;EAmBR,0BAAA;EACA;;;OAAA;EAUA,gDAAA;AAXN;AAMM;EACE,aAAA;EACA,cAAA;AAJR;AAWE;EACE,mBAAA;AATJ;AAWE;EACE,gCAAA;AATJ;AAWE;EACE,+BAAA;AATJ;AAYE;EACE,UAAA;EACA,uBAAA;AAVJ;AAaE;EACE,mDAAA;AAXJ\",\"sourcesContent\":[\".excalidraw {\\n $marginTop: 60px;\\n // eye-balled\\n $bottomOffset: 60px;\\n\\n .UserList {\\n pointer-events: none;\\n /*github corner*/\\n padding: var(--space-factor);\\n display: flex;\\n justify-content: flex-end;\\n\\n overflow: hidden;\\n border-radius: 60px;\\n\\n &.layout-vertical {\\n grid-column: 3;\\n flex-direction: column-reverse;\\n position: absolute;\\n top: $marginTop;\\n right: var(--space-factor);\\n max-height: calc(\\n 100vh - var(--space-factor) - #{$marginTop} - #{$bottomOffset} +\\n var(--itemOffset)\\n );\\n\\n .Avatar {\\n width: 2.4rem;\\n height: 2.4rem;\\n }\\n\\n padding-bottom: max(calc(var(--itemOffset) * -1), 0px);\\n }\\n }\\n\\n .UserList > * {\\n pointer-events: all;\\n }\\n .UserList.layout-vertical > * {\\n margin-bottom: var(--itemOffset);\\n }\\n .UserList.layout-horizontal > * {\\n margin-right: var(--itemOffset);\\n }\\n\\n .UserList_mobile {\\n padding: 0;\\n justify-content: normal;\\n }\\n\\n .UserList_mobile > * {\\n margin: 0 var(--space-factor) var(--space-factor) 0;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1swXS51c2VbMl0hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vY29tcG9uZW50cy9Vc2VyTGlzdC5zY3NzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDOEg7QUFDakI7QUFDN0csOEJBQThCLHVHQUEyQixDQUFDLGdIQUFxQztBQUMvRjtBQUNBLGlFQUFpRSx5QkFBeUIsc0RBQXNELGtCQUFrQiw4QkFBOEIscUJBQXFCLHdCQUF3QixHQUFHLHlDQUF5QyxtQkFBbUIsbUNBQW1DLHVCQUF1QixjQUFjLCtCQUErQixpSEFBaUgscURBQXFELEdBQUcsaURBQWlELGtCQUFrQixtQkFBbUIsR0FBRyw2QkFBNkIsd0JBQXdCLEdBQUcsNkNBQTZDLHFDQUFxQyxHQUFHLCtDQUErQyxvQ0FBb0MsR0FBRyxnQ0FBZ0MsZUFBZSw0QkFBNEIsR0FBRyxvQ0FBb0Msd0RBQXdELEdBQUcsT0FBTyxpR0FBaUcsV0FBVyxXQUFXLFdBQVcsVUFBVSxXQUFXLFdBQVcsV0FBVyxLQUFLLEtBQUssVUFBVSxXQUFXLFdBQVcsV0FBVyxZQUFZLE9BQU8sS0FBSyxXQUFXLEtBQUssS0FBSyxVQUFVLFVBQVUsS0FBSyxLQUFLLFdBQVcsS0FBSyxLQUFLLFdBQVcsS0FBSyxLQUFLLFdBQVcsS0FBSyxLQUFLLFVBQVUsV0FBVyxLQUFLLEtBQUssV0FBVyxzQ0FBc0MscUJBQXFCLHlDQUF5QyxpQkFBaUIsMkJBQTJCLDBEQUEwRCxvQkFBb0IsZ0NBQWdDLHlCQUF5QiwwQkFBMEIsMkJBQTJCLHVCQUF1Qix1Q0FBdUMsMkJBQTJCLHdCQUF3QixtQ0FBbUMsbUVBQW1FLFlBQVksSUFBSSxlQUFlLHdDQUF3QyxtQkFBbUIsd0JBQXdCLHlCQUF5QixTQUFTLGlFQUFpRSxPQUFPLEtBQUsscUJBQXFCLDBCQUEwQixLQUFLLG1DQUFtQyx1Q0FBdUMsS0FBSyxxQ0FBcUMsc0NBQXNDLEtBQUssd0JBQXdCLGlCQUFpQiw4QkFBOEIsS0FBSyw0QkFBNEIsMERBQTBELEtBQUssR0FBRyxxQkFBcUI7QUFDeGxGO0FBQ0EsaUVBQWUsdUJBQXVCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9Vc2VyTGlzdC5zY3NzP2YzZTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL3BhY2thZ2VzL2V4Y2FsaWRyYXcvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL3BhY2thZ2VzL2V4Y2FsaWRyYXcvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmV4Y2FsaWRyYXcgLlVzZXJMaXN0IHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLypnaXRodWIgY29ybmVyKi9cXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLWZhY3Rvcik7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiA2MHB4O1xcbn1cXG4uZXhjYWxpZHJhdyAuVXNlckxpc3QubGF5b3V0LXZlcnRpY2FsIHtcXG4gIGdyaWQtY29sdW1uOiAzO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA2MHB4O1xcbiAgcmlnaHQ6IHZhcigtLXNwYWNlLWZhY3Rvcik7XFxuICBtYXgtaGVpZ2h0OiBjYWxjKFxcbiAgICAgICAgMTAwdmggLSB2YXIoLS1zcGFjZS1mYWN0b3IpIC0gNjBweCAtIDYwcHggK1xcbiAgICAgICAgICB2YXIoLS1pdGVtT2Zmc2V0KVxcbiAgICAgICk7XFxuICBwYWRkaW5nLWJvdHRvbTogbWF4KHZhcigtLWl0ZW1PZmZzZXQpICogLTEsIDBweCk7XFxufVxcbi5leGNhbGlkcmF3IC5Vc2VyTGlzdC5sYXlvdXQtdmVydGljYWwgLkF2YXRhciB7XFxuICB3aWR0aDogMi40cmVtO1xcbiAgaGVpZ2h0OiAyLjRyZW07XFxufVxcbi5leGNhbGlkcmF3IC5Vc2VyTGlzdCA+ICoge1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG59XFxuLmV4Y2FsaWRyYXcgLlVzZXJMaXN0LmxheW91dC12ZXJ0aWNhbCA+ICoge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0taXRlbU9mZnNldCk7XFxufVxcbi5leGNhbGlkcmF3IC5Vc2VyTGlzdC5sYXlvdXQtaG9yaXpvbnRhbCA+ICoge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1pdGVtT2Zmc2V0KTtcXG59XFxuLmV4Y2FsaWRyYXcgLlVzZXJMaXN0X21vYmlsZSB7XFxuICBwYWRkaW5nOiAwO1xcbiAganVzdGlmeS1jb250ZW50OiBub3JtYWw7XFxufVxcbi5leGNhbGlkcmF3IC5Vc2VyTGlzdF9tb2JpbGUgPiAqIHtcXG4gIG1hcmdpbjogMCB2YXIoLS1zcGFjZS1mYWN0b3IpIHZhcigtLXNwYWNlLWZhY3RvcikgMDtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vLi4vLi4vY29tcG9uZW50cy9Vc2VyTGlzdC5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUtFO0VBQ0Usb0JBQUE7RUFDQSxnQkFBQTtFQUNBLDRCQUFBO0VBQ0EsYUFBQTtFQUNBLHlCQUFBO0VBRUEsZ0JBQUE7RUFDQSxtQkFBQTtBQUxKO0FBT0k7RUFDRSxjQUFBO0VBQ0EsOEJBQUE7RUFDQSxrQkFBQTtFQUNBLFNBbEJRO0VBbUJSLDBCQUFBO0VBQ0E7OztPQUFBO0VBVUEsZ0RBQUE7QUFYTjtBQU1NO0VBQ0UsYUFBQTtFQUNBLGNBQUE7QUFKUjtBQVdFO0VBQ0UsbUJBQUE7QUFUSjtBQVdFO0VBQ0UsZ0NBQUE7QUFUSjtBQVdFO0VBQ0UsK0JBQUE7QUFUSjtBQVlFO0VBQ0UsVUFBQTtFQUNBLHVCQUFBO0FBVko7QUFhRTtFQUNFLG1EQUFBO0FBWEpcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLmV4Y2FsaWRyYXcge1xcbiAgJG1hcmdpblRvcDogNjBweDtcXG4gIC8vIGV5ZS1iYWxsZWRcXG4gICRib3R0b21PZmZzZXQ6IDYwcHg7XFxuXFxuICAuVXNlckxpc3Qge1xcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gICAgLypnaXRodWIgY29ybmVyKi9cXG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtZmFjdG9yKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG5cXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgYm9yZGVyLXJhZGl1czogNjBweDtcXG5cXG4gICAgJi5sYXlvdXQtdmVydGljYWwge1xcbiAgICAgIGdyaWQtY29sdW1uOiAzO1xcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgdG9wOiAkbWFyZ2luVG9wO1xcbiAgICAgIHJpZ2h0OiB2YXIoLS1zcGFjZS1mYWN0b3IpO1xcbiAgICAgIG1heC1oZWlnaHQ6IGNhbGMoXFxuICAgICAgICAxMDB2aCAtIHZhcigtLXNwYWNlLWZhY3RvcikgLSAjeyRtYXJnaW5Ub3B9IC0gI3skYm90dG9tT2Zmc2V0fSArXFxuICAgICAgICAgIHZhcigtLWl0ZW1PZmZzZXQpXFxuICAgICAgKTtcXG5cXG4gICAgICAuQXZhdGFyIHtcXG4gICAgICAgIHdpZHRoOiAyLjRyZW07XFxuICAgICAgICBoZWlnaHQ6IDIuNHJlbTtcXG4gICAgICB9XFxuXFxuICAgICAgcGFkZGluZy1ib3R0b206IG1heChjYWxjKHZhcigtLWl0ZW1PZmZzZXQpICogLTEpLCAwcHgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAuVXNlckxpc3QgPiAqIHtcXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG4gIH1cXG4gIC5Vc2VyTGlzdC5sYXlvdXQtdmVydGljYWwgPiAqIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0taXRlbU9mZnNldCk7XFxuICB9XFxuICAuVXNlckxpc3QubGF5b3V0LWhvcml6b250YWwgPiAqIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1pdGVtT2Zmc2V0KTtcXG4gIH1cXG5cXG4gIC5Vc2VyTGlzdF9tb2JpbGUge1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IG5vcm1hbDtcXG4gIH1cXG5cXG4gIC5Vc2VyTGlzdF9tb2JpbGUgPiAqIHtcXG4gICAgbWFyZ2luOiAwIHZhcigtLXNwYWNlLWZhY3RvcikgdmFyKC0tc3BhY2UtZmFjdG9yKSAwO1xcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./node_modules/sass-loader/dist/cjs.js!../../components/UserList.scss\n");
|
|
1101
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".excalidraw .UserList {\\n pointer-events: none;\\n /*github corner*/\\n padding: var(--space-factor);\\n display: flex;\\n justify-content: flex-end;\\n overflow: hidden;\\n border-radius: 60px;\\n}\\n.excalidraw .UserList:empty {\\n display: none;\\n}\\n.excalidraw .UserList.layout-vertical {\\n grid-column: 3;\\n flex-direction: column-reverse;\\n position: absolute;\\n top: 60px;\\n right: var(--space-factor);\\n max-height: calc(\\n 100vh - var(--space-factor) - 60px - 60px +\\n var(--itemOffset)\\n );\\n padding-bottom: max(var(--itemOffset) * -1, 0px);\\n}\\n.excalidraw .UserList.layout-vertical .Avatar {\\n width: 2.4rem;\\n height: 2.4rem;\\n}\\n.excalidraw .UserList > * {\\n pointer-events: all;\\n}\\n.excalidraw .UserList.layout-vertical > * {\\n margin-bottom: var(--itemOffset);\\n}\\n.excalidraw .UserList.layout-horizontal > * {\\n margin-right: var(--itemOffset);\\n}\\n.excalidraw .UserList_mobile {\\n padding: 0;\\n justify-content: normal;\\n}\\n.excalidraw .UserList_mobile > * {\\n margin: 0 var(--space-factor) var(--space-factor) 0;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../components/UserList.scss\"],\"names\":[],\"mappings\":\"AAKE;EACE,oBAAA;EACA,gBAAA;EACA,4BAAA;EACA,aAAA;EACA,yBAAA;EAEA,gBAAA;EACA,mBAAA;AALJ;AAOI;EACE,aAAA;AALN;AAQI;EACE,cAAA;EACA,8BAAA;EACA,kBAAA;EACA,SAtBQ;EAuBR,0BAAA;EACA;;;OAAA;EAUA,gDAAA;AAZN;AAOM;EACE,aAAA;EACA,cAAA;AALR;AAYE;EACE,mBAAA;AAVJ;AAYE;EACE,gCAAA;AAVJ;AAYE;EACE,+BAAA;AAVJ;AAaE;EACE,UAAA;EACA,uBAAA;AAXJ;AAcE;EACE,mDAAA;AAZJ\",\"sourcesContent\":[\".excalidraw {\\n $marginTop: 60px;\\n // eye-balled\\n $bottomOffset: 60px;\\n\\n .UserList {\\n pointer-events: none;\\n /*github corner*/\\n padding: var(--space-factor);\\n display: flex;\\n justify-content: flex-end;\\n\\n overflow: hidden;\\n border-radius: 60px;\\n\\n &:empty {\\n display: none;\\n }\\n\\n &.layout-vertical {\\n grid-column: 3;\\n flex-direction: column-reverse;\\n position: absolute;\\n top: $marginTop;\\n right: var(--space-factor);\\n max-height: calc(\\n 100vh - var(--space-factor) - #{$marginTop} - #{$bottomOffset} +\\n var(--itemOffset)\\n );\\n\\n .Avatar {\\n width: 2.4rem;\\n height: 2.4rem;\\n }\\n\\n padding-bottom: max(calc(var(--itemOffset) * -1), 0px);\\n }\\n }\\n\\n .UserList > * {\\n pointer-events: all;\\n }\\n .UserList.layout-vertical > * {\\n margin-bottom: var(--itemOffset);\\n }\\n .UserList.layout-horizontal > * {\\n margin-right: var(--itemOffset);\\n }\\n\\n .UserList_mobile {\\n padding: 0;\\n justify-content: normal;\\n }\\n\\n .UserList_mobile > * {\\n margin: 0 var(--space-factor) var(--space-factor) 0;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1swXS51c2VbMl0hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vY29tcG9uZW50cy9Vc2VyTGlzdC5zY3NzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDOEg7QUFDakI7QUFDN0csOEJBQThCLHVHQUEyQixDQUFDLGdIQUFxQztBQUMvRjtBQUNBLGlFQUFpRSx5QkFBeUIsc0RBQXNELGtCQUFrQiw4QkFBOEIscUJBQXFCLHdCQUF3QixHQUFHLCtCQUErQixrQkFBa0IsR0FBRyx5Q0FBeUMsbUJBQW1CLG1DQUFtQyx1QkFBdUIsY0FBYywrQkFBK0IsaUhBQWlILHFEQUFxRCxHQUFHLGlEQUFpRCxrQkFBa0IsbUJBQW1CLEdBQUcsNkJBQTZCLHdCQUF3QixHQUFHLDZDQUE2QyxxQ0FBcUMsR0FBRywrQ0FBK0Msb0NBQW9DLEdBQUcsZ0NBQWdDLGVBQWUsNEJBQTRCLEdBQUcsb0NBQW9DLHdEQUF3RCxHQUFHLE9BQU8saUdBQWlHLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsV0FBVyxXQUFXLFdBQVcsWUFBWSxPQUFPLEtBQUssV0FBVyxLQUFLLEtBQUssVUFBVSxVQUFVLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxVQUFVLFdBQVcsS0FBSyxLQUFLLFdBQVcsc0NBQXNDLHFCQUFxQix5Q0FBeUMsaUJBQWlCLDJCQUEyQiwwREFBMEQsb0JBQW9CLGdDQUFnQyx5QkFBeUIsMEJBQTBCLGlCQUFpQixzQkFBc0IsT0FBTywyQkFBMkIsdUJBQXVCLHVDQUF1QywyQkFBMkIsd0JBQXdCLG1DQUFtQyxtRUFBbUUsWUFBWSxJQUFJLGVBQWUsd0NBQXdDLG1CQUFtQix3QkFBd0IseUJBQXlCLFNBQVMsaUVBQWlFLE9BQU8sS0FBSyxxQkFBcUIsMEJBQTBCLEtBQUssbUNBQW1DLHVDQUF1QyxLQUFLLHFDQUFxQyxzQ0FBc0MsS0FBSyx3QkFBd0IsaUJBQWlCLDhCQUE4QixLQUFLLDRCQUE0QiwwREFBMEQsS0FBSyxHQUFHLHFCQUFxQjtBQUM5c0Y7QUFDQSxpRUFBZSx1QkFBdUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL1VzZXJMaXN0LnNjc3M/ZjNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vcGFja2FnZXMvZXhjYWxpZHJhdy9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vcGFja2FnZXMvZXhjYWxpZHJhdy9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuZXhjYWxpZHJhdyAuVXNlckxpc3Qge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAvKmdpdGh1YiBjb3JuZXIqL1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2UtZmFjdG9yKTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IDYwcHg7XFxufVxcbi5leGNhbGlkcmF3IC5Vc2VyTGlzdDplbXB0eSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4uZXhjYWxpZHJhdyAuVXNlckxpc3QubGF5b3V0LXZlcnRpY2FsIHtcXG4gIGdyaWQtY29sdW1uOiAzO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA2MHB4O1xcbiAgcmlnaHQ6IHZhcigtLXNwYWNlLWZhY3Rvcik7XFxuICBtYXgtaGVpZ2h0OiBjYWxjKFxcbiAgICAgICAgMTAwdmggLSB2YXIoLS1zcGFjZS1mYWN0b3IpIC0gNjBweCAtIDYwcHggK1xcbiAgICAgICAgICB2YXIoLS1pdGVtT2Zmc2V0KVxcbiAgICAgICk7XFxuICBwYWRkaW5nLWJvdHRvbTogbWF4KHZhcigtLWl0ZW1PZmZzZXQpICogLTEsIDBweCk7XFxufVxcbi5leGNhbGlkcmF3IC5Vc2VyTGlzdC5sYXlvdXQtdmVydGljYWwgLkF2YXRhciB7XFxuICB3aWR0aDogMi40cmVtO1xcbiAgaGVpZ2h0OiAyLjRyZW07XFxufVxcbi5leGNhbGlkcmF3IC5Vc2VyTGlzdCA+ICoge1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG59XFxuLmV4Y2FsaWRyYXcgLlVzZXJMaXN0LmxheW91dC12ZXJ0aWNhbCA+ICoge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0taXRlbU9mZnNldCk7XFxufVxcbi5leGNhbGlkcmF3IC5Vc2VyTGlzdC5sYXlvdXQtaG9yaXpvbnRhbCA+ICoge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1pdGVtT2Zmc2V0KTtcXG59XFxuLmV4Y2FsaWRyYXcgLlVzZXJMaXN0X21vYmlsZSB7XFxuICBwYWRkaW5nOiAwO1xcbiAganVzdGlmeS1jb250ZW50OiBub3JtYWw7XFxufVxcbi5leGNhbGlkcmF3IC5Vc2VyTGlzdF9tb2JpbGUgPiAqIHtcXG4gIG1hcmdpbjogMCB2YXIoLS1zcGFjZS1mYWN0b3IpIHZhcigtLXNwYWNlLWZhY3RvcikgMDtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vLi4vLi4vY29tcG9uZW50cy9Vc2VyTGlzdC5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUtFO0VBQ0Usb0JBQUE7RUFDQSxnQkFBQTtFQUNBLDRCQUFBO0VBQ0EsYUFBQTtFQUNBLHlCQUFBO0VBRUEsZ0JBQUE7RUFDQSxtQkFBQTtBQUxKO0FBT0k7RUFDRSxhQUFBO0FBTE47QUFRSTtFQUNFLGNBQUE7RUFDQSw4QkFBQTtFQUNBLGtCQUFBO0VBQ0EsU0F0QlE7RUF1QlIsMEJBQUE7RUFDQTs7O09BQUE7RUFVQSxnREFBQTtBQVpOO0FBT007RUFDRSxhQUFBO0VBQ0EsY0FBQTtBQUxSO0FBWUU7RUFDRSxtQkFBQTtBQVZKO0FBWUU7RUFDRSxnQ0FBQTtBQVZKO0FBWUU7RUFDRSwrQkFBQTtBQVZKO0FBYUU7RUFDRSxVQUFBO0VBQ0EsdUJBQUE7QUFYSjtBQWNFO0VBQ0UsbURBQUE7QUFaSlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuZXhjYWxpZHJhdyB7XFxuICAkbWFyZ2luVG9wOiA2MHB4O1xcbiAgLy8gZXllLWJhbGxlZFxcbiAgJGJvdHRvbU9mZnNldDogNjBweDtcXG5cXG4gIC5Vc2VyTGlzdCB7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICAvKmdpdGh1YiBjb3JuZXIqL1xcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS1mYWN0b3IpO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcblxcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBib3JkZXItcmFkaXVzOiA2MHB4O1xcblxcbiAgICAmOmVtcHR5IHtcXG4gICAgICBkaXNwbGF5OiBub25lO1xcbiAgICB9XFxuXFxuICAgICYubGF5b3V0LXZlcnRpY2FsIHtcXG4gICAgICBncmlkLWNvbHVtbjogMztcXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIHRvcDogJG1hcmdpblRvcDtcXG4gICAgICByaWdodDogdmFyKC0tc3BhY2UtZmFjdG9yKTtcXG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKFxcbiAgICAgICAgMTAwdmggLSB2YXIoLS1zcGFjZS1mYWN0b3IpIC0gI3skbWFyZ2luVG9wfSAtICN7JGJvdHRvbU9mZnNldH0gK1xcbiAgICAgICAgICB2YXIoLS1pdGVtT2Zmc2V0KVxcbiAgICAgICk7XFxuXFxuICAgICAgLkF2YXRhciB7XFxuICAgICAgICB3aWR0aDogMi40cmVtO1xcbiAgICAgICAgaGVpZ2h0OiAyLjRyZW07XFxuICAgICAgfVxcblxcbiAgICAgIHBhZGRpbmctYm90dG9tOiBtYXgoY2FsYyh2YXIoLS1pdGVtT2Zmc2V0KSAqIC0xKSwgMHB4KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLlVzZXJMaXN0ID4gKiB7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICB9XFxuICAuVXNlckxpc3QubGF5b3V0LXZlcnRpY2FsID4gKiB7XFxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLWl0ZW1PZmZzZXQpO1xcbiAgfVxcbiAgLlVzZXJMaXN0LmxheW91dC1ob3Jpem9udGFsID4gKiB7XFxuICAgIG1hcmdpbi1yaWdodDogdmFyKC0taXRlbU9mZnNldCk7XFxuICB9XFxuXFxuICAuVXNlckxpc3RfbW9iaWxlIHtcXG4gICAgcGFkZGluZzogMDtcXG4gICAganVzdGlmeS1jb250ZW50OiBub3JtYWw7XFxuICB9XFxuXFxuICAuVXNlckxpc3RfbW9iaWxlID4gKiB7XFxuICAgIG1hcmdpbjogMCB2YXIoLS1zcGFjZS1mYWN0b3IpIHZhcigtLXNwYWNlLWZhY3RvcikgMDtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./node_modules/sass-loader/dist/cjs.js!../../components/UserList.scss\n");
|
|
1102
1102
|
|
|
1103
1103
|
/***/ }),
|
|
1104
1104
|
|
|
@@ -1120,7 +1120,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1120
1120
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
1121
1121
|
|
|
1122
1122
|
"use strict";
|
|
1123
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/getUrl.js */ \"./node_modules/css-loader/dist/runtime/getUrl.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n// Imports\n\n\n\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"292.4\" height=\"292.4\" viewBox=\"0 0 292 292\"><path d=\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\"/></svg> */ \"data:image/svg+xml,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"292.4\\\" height=\\\"292.4\\\" viewBox=\\\"0 0 292 292\\\"><path d=\\\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\\\"/></svg>\"), __webpack_require__.b);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"292.4\" height=\"292.4\" viewBox=\"0 0 292 292\"><path fill=\"%23ced4da\" d=\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\"/></svg> */ \"data:image/svg+xml,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"292.4\\\" height=\\\"292.4\\\" viewBox=\\\"0 0 292 292\\\"><path fill=\\\"%23ced4da\\\" d=\\\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\\\"/></svg>\"), __webpack_require__.b);\nvar ___CSS_LOADER_EXPORT___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":export {\\n themeFilter: invert(93%) hue-rotate(180deg);\\n}\\n\\n:export {\\n themeFilter: invert(93%) hue-rotate(180deg);\\n}\\n\\n.excalidraw {\\n --theme-filter: none;\\n --button-destructive-bg-color: #ffe3e3;\\n --button-destructive-color: #c92a2a;\\n --button-gray-1: #e9ecef;\\n --button-gray-2: #ced4da;\\n --button-gray-3: #adb5bd;\\n --button-special-active-bg-color: #ebfbee;\\n --dialog-border-color: #868e96;\\n --dropdown-icon: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n --focus-highlight-color: #a5d8ff;\\n --icon-fill-color: #000000;\\n --icon-green-fill-color: #2b8a3e;\\n --default-bg-color: #ffffff;\\n --input-bg-color: #ffffff;\\n --input-border-color: #ced4da;\\n --input-hover-bg-color: #f1f3f5;\\n --input-label-color: #495057;\\n --island-bg-color: rgba(255, 255, 255, 0.96);\\n --keybinding-color: #adb5bd;\\n --link-color: #1c7ed6;\\n --overlay-bg-color: rgba(255, 255, 255, 0.88);\\n --popup-bg-color: #ffffff;\\n --popup-secondary-bg-color: #f1f3f5;\\n --popup-text-color: #000000;\\n --popup-text-inverted-color: #ffffff;\\n --sab: env(safe-area-inset-bottom);\\n --sal: env(safe-area-inset-left);\\n --sar: env(safe-area-inset-right);\\n --sat: env(safe-area-inset-top);\\n --select-highlight-color: #339af0;\\n --shadow-island: 0 1px 5px rgba(0, 0, 0, 0.15);\\n --space-factor: 0.25rem;\\n --text-primary-color: #343a40;\\n}\\n.excalidraw.theme--dark {\\n background: #000000;\\n}\\n.excalidraw.theme--dark.theme--dark-background-none {\\n background: none;\\n}\\n.excalidraw.theme--dark {\\n --theme-filter: invert(93%) hue-rotate(180deg);\\n --button-destructive-bg-color: #5a0000;\\n --button-destructive-color: #ffa8a8;\\n --button-gray-1: #363636;\\n --button-gray-2: #272727;\\n --button-gray-3: #222;\\n --button-special-active-bg-color: #204624;\\n --dialog-border-color: #212529;\\n --dropdown-icon: url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \");\\n --focus-highlight-color: #228be6;\\n --icon-fill-color: #ced4da;\\n --icon-green-fill-color: #69db7c;\\n --default-bg-color: #121212;\\n --input-bg-color: #121212;\\n --input-border-color: #2e2e2e;\\n --input-hover-bg-color: #181818;\\n --input-label-color: #e9ecef;\\n --island-bg-color: rgba(30, 30, 30, 0.98);\\n --keybinding-color: #868e96;\\n --link-color: #4dabf7;\\n --overlay-bg-color: rgba(52, 58, 64, 0.12);\\n --popup-bg-color: #2c2c2c;\\n --popup-secondary-bg-color: #222;\\n --popup-text-color: #ced4da;\\n --popup-text-inverted-color: #635c5c;\\n --select-highlight-color: #4dabf7;\\n --shadow-island: 0 1px 5px rgba(0, 0, 0, 0.3);\\n --text-primary-color: #ced4da;\\n}\\n\\n:root {\\n --zIndex-canvas: 1;\\n --zIndex-wysiwyg: 2;\\n --zIndex-layerUI: 3;\\n}\\n\\n.excalidraw {\\n position: relative;\\n overflow: hidden;\\n color: var(--text-primary-color);\\n display: flex;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n height: 100%;\\n width: 100%;\\n user-select: none;\\n}\\n.excalidraw:focus {\\n outline: none;\\n}\\n.excalidraw a {\\n font-weight: 500;\\n text-decoration: none;\\n color: var(--link-color);\\n}\\n.excalidraw a:hover {\\n text-decoration: underline;\\n}\\n.excalidraw canvas {\\n touch-action: none;\\n image-rendering: pixelated;\\n image-rendering: -moz-crisp-edges;\\n z-index: var(--zIndex-canvas);\\n}\\n.excalidraw__canvas {\\n position: absolute;\\n}\\n.excalidraw.theme--dark canvas {\\n filter: var(--theme-filter);\\n}\\n.excalidraw .FixedSideContainer {\\n padding-top: var(--sat, 0);\\n padding-right: var(--sar, 0);\\n padding-bottom: var(--sab, 0);\\n padding-left: var(--sal, 0);\\n}\\n.excalidraw .panelRow {\\n display: flex;\\n justify-content: space-between;\\n}\\n.excalidraw .panelColumn {\\n display: flex;\\n flex-direction: column;\\n}\\n.excalidraw .panelColumn h3,\\n.excalidraw .panelColumn legend,\\n.excalidraw .panelColumn .control-label {\\n margin-top: 0.333rem;\\n margin-bottom: 0.333rem;\\n font-size: 0.75rem;\\n color: var(--text-primary-color);\\n font-weight: bold;\\n display: block;\\n}\\n.excalidraw .panelColumn .control-label input {\\n display: block;\\n width: 100%;\\n}\\n.excalidraw .panelColumn h3:first-child,\\n.excalidraw .panelColumn legend:first-child,\\n.excalidraw .panelColumn .control-label:first-child {\\n margin-top: 0;\\n}\\n.excalidraw .panelColumn legend {\\n padding: 0;\\n}\\n.excalidraw .panelColumn .iconSelectList {\\n flex-wrap: wrap;\\n position: relative;\\n}\\n.excalidraw .panelColumn .buttonList {\\n flex-wrap: wrap;\\n}\\n.excalidraw .panelColumn .buttonList label {\\n margin-right: 0.25rem;\\n font-size: 0.75rem;\\n display: inline-block;\\n}\\n.excalidraw .panelColumn .buttonList input[type=radio],\\n.excalidraw .panelColumn .buttonList input[type=button] {\\n opacity: 0;\\n position: absolute;\\n pointer-events: none;\\n}\\n.excalidraw .panelColumn .buttonList .iconRow {\\n margin-top: 8px;\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon {\\n margin: 0;\\n margin-inline-end: 8px;\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon:hover {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon:active {\\n background-color: var(--button-gray-3);\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon:disabled {\\n cursor: not-allowed;\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon__icon {\\n width: 28px;\\n height: 28px;\\n}\\n.excalidraw .panelColumn fieldset {\\n margin: 0;\\n margin-top: 0.333rem;\\n padding: 0;\\n border: none;\\n}\\n.excalidraw .divider {\\n width: 1px;\\n background-color: #e9ecef;\\n margin: 1px;\\n}\\n.excalidraw .buttonList label:focus-within,\\n.excalidraw input:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n.excalidraw button,\\n.excalidraw .buttonList label {\\n user-select: none;\\n background-color: var(--button-gray-1);\\n border: 0;\\n border-radius: 4px;\\n margin: 0.125rem 0;\\n padding: 0.25rem;\\n white-space: nowrap;\\n cursor: pointer;\\n}\\n.excalidraw button:focus,\\n.excalidraw .buttonList label:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n.excalidraw button:hover,\\n.excalidraw .buttonList label:hover {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw button:active,\\n.excalidraw .buttonList label:active {\\n background-color: var(--button-gray-3);\\n}\\n.excalidraw button:disabled,\\n.excalidraw .buttonList label:disabled {\\n cursor: not-allowed;\\n}\\n.excalidraw .active,\\n.excalidraw .buttonList label.active {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .active:hover,\\n.excalidraw .buttonList label.active:hover {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .active:active,\\n.excalidraw .buttonList label.active:active {\\n background-color: var(--button-gray-3);\\n}\\n.excalidraw .buttonList.buttonListIcon label {\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.excalidraw .buttonList.buttonListIcon label svg {\\n width: 36px;\\n height: 14px;\\n padding: 2px;\\n opacity: 0.6;\\n}\\n.excalidraw .buttonList.buttonListIcon label.active svg {\\n opacity: 1;\\n}\\n.excalidraw .App-top-bar {\\n z-index: var(--zIndex-layerUI);\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n}\\n.excalidraw .App-bottom-bar {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n --bar-padding: calc(4 * var(--space-factor));\\n padding-top: max(var(--bar-padding), var(--sat,0));\\n padding-right: var(--sar, 0);\\n padding-bottom: var(--sab, 0);\\n padding-left: var(--sal, 0);\\n z-index: 4;\\n display: flex;\\n align-items: flex-end;\\n pointer-events: none;\\n}\\n.excalidraw .App-bottom-bar > .Island {\\n width: 100%;\\n max-width: 100%;\\n min-width: 100%;\\n box-sizing: border-box;\\n max-height: 100%;\\n display: flex;\\n flex-direction: column;\\n pointer-events: initial;\\n}\\n.excalidraw .App-bottom-bar > .Island .panelColumn {\\n padding: 8px 8px 0 8px;\\n}\\n.excalidraw .App-toolbar {\\n width: 100%;\\n box-sizing: border-box;\\n}\\n.excalidraw .App-toolbar-content {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 8px;\\n}\\n.excalidraw .App-mobile-menu {\\n width: 100%;\\n overflow-x: visible;\\n overflow-y: auto;\\n box-sizing: border-box;\\n margin-bottom: var(--bar-padding);\\n}\\n.excalidraw .App-menu {\\n display: grid;\\n color: var(--icon-fill-color);\\n}\\n.excalidraw .App-menu_top {\\n grid-template-columns: 1fr auto 1fr;\\n grid-gap: 4px;\\n align-items: flex-start;\\n cursor: default;\\n pointer-events: none !important;\\n}\\n.excalidraw .layer-ui__wrapper:not(.disable-pointerEvents) .App-menu_top > * {\\n pointer-events: all;\\n}\\n.excalidraw .App-menu_top > *:first-child {\\n justify-self: flex-start;\\n}\\n.excalidraw .App-menu_top > *:last-child {\\n justify-self: flex-end;\\n}\\n.excalidraw .App-menu_bottom {\\n position: absolute;\\n bottom: 0;\\n grid-template-columns: min-content auto min-content;\\n grid-gap: 15px;\\n align-items: flex-start;\\n cursor: default;\\n pointer-events: none !important;\\n z-index: 100;\\n}\\n:root[dir=ltr] .excalidraw .App-menu_bottom {\\n left: 0.25rem;\\n}\\n:root[dir=rtl] .excalidraw .App-menu_bottom {\\n right: 0.25rem;\\n}\\n.excalidraw .App-menu_bottom--transition-left section {\\n width: 185px;\\n}\\n.excalidraw .App-menu_bottom section {\\n display: flex;\\n}\\n.excalidraw .App-menu_bottom > *:first-child {\\n justify-self: flex-start;\\n}\\n.excalidraw .App-menu_bottom > *:last-child {\\n justify-self: flex-end;\\n}\\n.excalidraw .App-menu_left {\\n grid-template-rows: 1fr auto 1fr;\\n height: 100%;\\n}\\n.excalidraw .App-menu_right {\\n grid-template-rows: 1fr;\\n height: 100%;\\n}\\n.excalidraw .App-menu__left {\\n overflow-y: auto;\\n}\\n.excalidraw .dropdown-select {\\n height: 1.5rem;\\n padding: 0;\\n padding-inline-start: 0.5rem;\\n padding-inline-end: 1.5rem;\\n color: var(--icon-fill-color);\\n background-color: var(--button-gray-1);\\n border-radius: var(--space-factor);\\n border: 1px solid var(--button-gray-2);\\n font-size: 0.8rem;\\n outline: none;\\n appearance: none;\\n background-image: var(--dropdown-icon);\\n background-repeat: no-repeat;\\n background-position: right 0.7rem top 50%, 0 0;\\n background-size: 0.65em auto, 100%;\\n}\\n:root[dir=rtl] .excalidraw .dropdown-select {\\n background-position: left 0.7rem top 50%, 0 0;\\n}\\n.excalidraw .dropdown-select:focus {\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n.excalidraw .dropdown-select:hover {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .dropdown-select:active {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .zIndexButton {\\n margin: 0;\\n margin-inline-end: 8px;\\n padding: 5px;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.excalidraw .zIndexButton svg {\\n width: 18px;\\n height: 18px;\\n}\\n.excalidraw .scroll-back-to-content {\\n color: var(--popup-text-color);\\n position: absolute;\\n left: 50%;\\n bottom: 30px;\\n transform: translateX(-50%);\\n padding: 10px 20px;\\n}\\n.excalidraw .help-icon {\\n display: flex;\\n cursor: pointer;\\n fill: #868e96;\\n padding: 0;\\n margin: 0;\\n background: none;\\n color: var(--icon-fill-color);\\n}\\n.excalidraw .help-icon svg {\\n width: 1.5rem;\\n height: 1.5rem;\\n}\\n.excalidraw .help-icon:hover {\\n background: none;\\n}\\n.excalidraw .reset-zoom-button {\\n padding: 0.2em;\\n background: transparent;\\n color: var(--text-primary-color);\\n font-family: var(--ui-font);\\n}\\n.excalidraw .undo-redo-buttons {\\n display: grid;\\n grid-auto-flow: column;\\n gap: 0.4em;\\n margin-top: auto;\\n margin-bottom: auto;\\n margin-inline-start: 0.6em;\\n}\\n.excalidraw--mobile.excalidraw aside {\\n display: none;\\n}\\n.excalidraw--mobile.excalidraw .scroll-back-to-content {\\n bottom: calc(80px + var(--sab, 0));\\n z-index: -1;\\n}\\n\\n:root[dir=rtl] .excalidraw .rtl-mirror {\\n transform: scaleX(-1);\\n}\\n.excalidraw .zen-mode-visibility {\\n visibility: visible;\\n opacity: 1;\\n height: auto;\\n width: auto;\\n transition: opacity 0.5s;\\n}\\n.excalidraw .zen-mode-visibility.zen-mode-visibility--hidden {\\n visibility: hidden;\\n opacity: 0;\\n height: 0;\\n width: 0;\\n transition: opacity 0.5s;\\n}\\n.excalidraw .disable-pointerEvents {\\n pointer-events: none !important;\\n}\\n.excalidraw.excalidraw--view-mode .App-menu {\\n display: flex;\\n justify-content: space-between;\\n}\\n.excalidraw input[type=text],\\n.excalidraw textarea:not(.excalidraw-wysiwyg) {\\n color: var(--text-primary-color);\\n border: 1.5px solid var(--input-border-color);\\n padding: 0.75rem;\\n white-space: nowrap;\\n border-radius: var(--space-factor);\\n background-color: var(--input-bg-color);\\n}\\n.excalidraw input[type=text]:not(:focus):hover,\\n.excalidraw textarea:not(.excalidraw-wysiwyg):not(:focus):hover {\\n background-color: var(--input-hover-bg-color);\\n}\\n.excalidraw input[type=text]:focus,\\n.excalidraw textarea:not(.excalidraw-wysiwyg):focus {\\n outline: none;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n@media print {\\n .excalidraw .App-bottom-bar,\\n.excalidraw .FixedSideContainer,\\n.excalidraw .layer-ui__wrapper {\\n display: none;\\n }\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating {\\n display: inline-block;\\n position: absolute;\\n top: 60px;\\n left: calc(-2 * var(--space-factor));\\n border-radius: 0 20px 20px 0;\\n background-color: var(--button-gray-1);\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating:hover {\\n background-color: var(--button-gray-1);\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating:active {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating .ToolIcon__icon {\\n border-radius: inherit;\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating svg {\\n position: static;\\n}\\n\\n.ErrorSplash.excalidraw {\\n min-height: 100vh;\\n padding: 20px 0;\\n overflow: auto;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n user-select: text;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-messageContainer {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n padding: 40px;\\n background-color: #ffe3e3;\\n border: 3px solid #c92a2a;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-paragraph {\\n margin: 15px 0;\\n max-width: 600px;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-paragraph.align-center {\\n text-align: center;\\n}\\n.ErrorSplash.excalidraw .bigger,\\n.ErrorSplash.excalidraw .bigger button {\\n font-size: 1.1em;\\n}\\n.ErrorSplash.excalidraw .smaller,\\n.ErrorSplash.excalidraw .smaller button {\\n font-size: 0.9em;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-details {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-details textarea {\\n width: 100%;\\n margin: 10px 0;\\n font-family: \\\"Cascadia\\\";\\n font-size: 0.8em;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../css/variables.module.scss\",\"webpack://./../../css/styles.scss\",\"webpack://./../../css/theme.scss\",\"webpack://./../../../node_modules/open-color/open-color.scss\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"@import \\\"open-color/open-color.scss\\\";\\n\\n@mixin isMobile() {\\n @at-root .excalidraw--mobile#{&} {\\n @content;\\n }\\n}\\n\\n$theme-filter: \\\"invert(93%) hue-rotate(180deg)\\\";\\n\\n:export {\\n themeFilter: unquote($theme-filter);\\n}\\n\",\"@import \\\"./variables.module\\\";\\n@import \\\"./theme\\\";\\n\\n:root {\\n --zIndex-canvas: 1;\\n --zIndex-wysiwyg: 2;\\n --zIndex-layerUI: 3;\\n}\\n\\n.excalidraw {\\n position: relative;\\n overflow: hidden;\\n color: var(--text-primary-color);\\n display: flex;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n height: 100%;\\n width: 100%;\\n\\n &:focus {\\n outline: none;\\n }\\n\\n // serves 2 purposes:\\n // 1. prevent selecting text outside the component when double-clicking or\\n // dragging inside it (e.g. on canvas)\\n // 2. prevent selecting UI, both from the inside, and from outside the\\n // component (e.g. if you select text in a sidebar)\\n user-select: none;\\n\\n a {\\n font-weight: 500;\\n text-decoration: none;\\n color: var(--link-color);\\n\\n &:hover {\\n text-decoration: underline;\\n }\\n }\\n\\n canvas {\\n touch-action: none;\\n\\n // following props improve blurriness at certain devicePixelRatios.\\n // AFAIK it doesn't affect export (in fact, export seems sharp either way).\\n\\n image-rendering: pixelated; // chromium\\n // NOTE: must be declared *after* the above\\n image-rendering: -moz-crisp-edges; // FF\\n\\n z-index: var(--zIndex-canvas);\\n\\n // Remove the main canvas from document flow to avoid resizeObserver\\n // feedback loop (see https://github.com/excalidraw/excalidraw/pull/3379)\\n }\\n\\n &__canvas {\\n position: absolute;\\n }\\n\\n &.theme--dark {\\n // The percentage is inspired by\\n // https://material.io/design/color/dark-theme.html#properties, which\\n // recommends surface color of #121212, 93% yields #111111 for #FFF\\n\\n canvas {\\n filter: var(--theme-filter);\\n }\\n }\\n\\n .FixedSideContainer {\\n padding-top: var(--sat, 0);\\n padding-right: var(--sar, 0);\\n padding-bottom: var(--sab, 0);\\n padding-left: var(--sal, 0);\\n }\\n\\n .panelRow {\\n display: flex;\\n justify-content: space-between;\\n }\\n\\n .panelColumn {\\n display: flex;\\n flex-direction: column;\\n\\n h3,\\n legend,\\n .control-label {\\n margin-top: 0.333rem;\\n margin-bottom: 0.333rem;\\n font-size: 0.75rem;\\n color: var(--text-primary-color);\\n font-weight: bold;\\n display: block;\\n }\\n\\n .control-label input {\\n display: block;\\n width: 100%;\\n }\\n\\n h3:first-child,\\n legend:first-child,\\n .control-label:first-child {\\n margin-top: 0;\\n }\\n\\n legend {\\n padding: 0;\\n }\\n\\n .iconSelectList {\\n flex-wrap: wrap;\\n position: relative;\\n }\\n\\n .buttonList {\\n flex-wrap: wrap;\\n\\n label {\\n margin-right: 0.25rem;\\n font-size: 0.75rem;\\n display: inline-block;\\n }\\n\\n input[type=\\\"radio\\\"],\\n input[type=\\\"button\\\"] {\\n opacity: 0;\\n position: absolute;\\n pointer-events: none;\\n }\\n\\n .iconRow {\\n margin-top: 8px;\\n }\\n\\n .ToolIcon {\\n margin: 0;\\n margin-inline-end: 8px;\\n\\n &:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n\\n &:hover {\\n background-color: var(--button-gray-2);\\n }\\n\\n &:active {\\n background-color: var(--button-gray-3);\\n }\\n\\n &:disabled {\\n cursor: not-allowed;\\n }\\n }\\n\\n .ToolIcon__icon {\\n width: 28px;\\n height: 28px;\\n }\\n }\\n\\n fieldset {\\n margin: 0;\\n margin-top: 0.333rem;\\n padding: 0;\\n border: none;\\n }\\n }\\n\\n .divider {\\n width: 1px;\\n background-color: $oc-gray-2;\\n margin: 1px;\\n }\\n\\n .buttonList label:focus-within,\\n input:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n\\n button,\\n .buttonList label {\\n user-select: none;\\n background-color: var(--button-gray-1);\\n border: 0;\\n border-radius: 4px;\\n margin: 0.125rem 0;\\n padding: 0.25rem;\\n white-space: nowrap;\\n\\n cursor: pointer;\\n\\n &:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n\\n &:hover {\\n background-color: var(--button-gray-2);\\n }\\n\\n &:active {\\n background-color: var(--button-gray-3);\\n }\\n\\n &:disabled {\\n cursor: not-allowed;\\n }\\n }\\n\\n .active,\\n .buttonList label.active {\\n background-color: var(--button-gray-2);\\n\\n &:hover {\\n background-color: var(--button-gray-2);\\n }\\n\\n &:active {\\n background-color: var(--button-gray-3);\\n }\\n }\\n\\n .buttonList.buttonListIcon {\\n label {\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n svg {\\n width: 36px;\\n height: 14px;\\n padding: 2px;\\n opacity: 0.6;\\n }\\n &.active svg {\\n opacity: 1;\\n }\\n }\\n }\\n\\n .App-top-bar {\\n z-index: var(--zIndex-layerUI);\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n }\\n\\n .App-bottom-bar {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n --bar-padding: calc(4 * var(--space-factor));\\n padding-top: #{\\\"max(var(--bar-padding), var(--sat,0))\\\"};\\n padding-right: var(--sar, 0);\\n padding-bottom: var(--sab, 0);\\n padding-left: var(--sal, 0);\\n z-index: 4;\\n display: flex;\\n align-items: flex-end;\\n pointer-events: none;\\n\\n > .Island {\\n width: 100%;\\n max-width: 100%;\\n min-width: 100%;\\n box-sizing: border-box;\\n max-height: 100%;\\n display: flex;\\n flex-direction: column;\\n pointer-events: initial;\\n\\n .panelColumn {\\n padding: 8px 8px 0 8px;\\n }\\n }\\n }\\n\\n .App-toolbar {\\n width: 100%;\\n\\n box-sizing: border-box;\\n }\\n\\n .App-toolbar-content {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 8px;\\n }\\n\\n .App-mobile-menu {\\n width: 100%;\\n overflow-x: visible;\\n overflow-y: auto;\\n box-sizing: border-box;\\n margin-bottom: var(--bar-padding);\\n }\\n\\n .App-menu {\\n display: grid;\\n color: var(--icon-fill-color);\\n }\\n\\n .App-menu_top {\\n grid-template-columns: 1fr auto 1fr;\\n grid-gap: 4px;\\n align-items: flex-start;\\n cursor: default;\\n pointer-events: none !important;\\n }\\n\\n .layer-ui__wrapper:not(.disable-pointerEvents) .App-menu_top > * {\\n pointer-events: all;\\n }\\n\\n .App-menu_top > *:first-child {\\n justify-self: flex-start;\\n }\\n\\n .App-menu_top > *:last-child {\\n justify-self: flex-end;\\n }\\n\\n .App-menu_bottom {\\n position: absolute;\\n bottom: 0;\\n grid-template-columns: min-content auto min-content;\\n grid-gap: 15px;\\n align-items: flex-start;\\n cursor: default;\\n pointer-events: none !important;\\n z-index: 100;\\n\\n :root[dir=\\\"ltr\\\"] & {\\n left: 0.25rem;\\n }\\n\\n :root[dir=\\\"rtl\\\"] & {\\n right: 0.25rem;\\n }\\n\\n &--transition-left {\\n section {\\n width: 185px;\\n }\\n }\\n\\n section {\\n display: flex;\\n }\\n }\\n\\n .App-menu_bottom > *:first-child {\\n justify-self: flex-start;\\n }\\n\\n .App-menu_bottom > *:last-child {\\n justify-self: flex-end;\\n }\\n\\n .App-menu_left {\\n grid-template-rows: 1fr auto 1fr;\\n height: 100%;\\n }\\n\\n .App-menu_right {\\n grid-template-rows: 1fr;\\n height: 100%;\\n }\\n\\n .App-menu__left {\\n overflow-y: auto;\\n }\\n\\n .dropdown-select {\\n height: 1.5rem;\\n padding: 0;\\n padding-inline-start: 0.5rem;\\n padding-inline-end: 1.5rem;\\n color: var(--icon-fill-color);\\n background-color: var(--button-gray-1);\\n border-radius: var(--space-factor);\\n border: 1px solid var(--button-gray-2);\\n font-size: 0.8rem;\\n outline: none;\\n appearance: none;\\n background-image: var(--dropdown-icon);\\n background-repeat: no-repeat;\\n background-position: right 0.7rem top 50%, 0 0;\\n\\n :root[dir=\\\"rtl\\\"] & {\\n background-position: left 0.7rem top 50%, 0 0;\\n }\\n\\n background-size: 0.65em auto, 100%;\\n\\n &:focus {\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n\\n &:hover {\\n background-color: var(--button-gray-2);\\n }\\n\\n &:active {\\n background-color: var(--button-gray-2);\\n }\\n }\\n\\n .zIndexButton {\\n margin: 0;\\n margin-inline-end: 8px;\\n padding: 5px;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n\\n svg {\\n width: 18px;\\n height: 18px;\\n }\\n }\\n\\n .scroll-back-to-content {\\n color: var(--popup-text-color);\\n position: absolute;\\n left: 50%;\\n bottom: 30px;\\n transform: translateX(-50%);\\n padding: 10px 20px;\\n }\\n\\n .help-icon {\\n display: flex;\\n cursor: pointer;\\n fill: $oc-gray-6;\\n padding: 0;\\n margin: 0;\\n background: none;\\n color: var(--icon-fill-color);\\n\\n svg {\\n width: 1.5rem;\\n height: 1.5rem;\\n }\\n\\n &:hover {\\n background: none;\\n }\\n }\\n\\n .reset-zoom-button {\\n padding: 0.2em;\\n background: transparent;\\n color: var(--text-primary-color);\\n font-family: var(--ui-font);\\n }\\n\\n .undo-redo-buttons {\\n display: grid;\\n grid-auto-flow: column;\\n gap: 0.4em;\\n margin-top: auto;\\n margin-bottom: auto;\\n margin-inline-start: 0.6em;\\n }\\n\\n @include isMobile {\\n aside {\\n display: none;\\n }\\n .scroll-back-to-content {\\n bottom: calc(80px + var(--sab, 0));\\n z-index: -1;\\n }\\n }\\n\\n .rtl-mirror {\\n :root[dir=\\\"rtl\\\"] & {\\n transform: scaleX(-1);\\n }\\n }\\n\\n .zen-mode-visibility {\\n visibility: visible;\\n opacity: 1;\\n height: auto;\\n width: auto;\\n transition: opacity 0.5s;\\n\\n &.zen-mode-visibility--hidden {\\n visibility: hidden;\\n opacity: 0;\\n height: 0;\\n width: 0;\\n transition: opacity 0.5s;\\n }\\n }\\n\\n .disable-pointerEvents {\\n pointer-events: none !important;\\n }\\n\\n &.excalidraw--view-mode {\\n .App-menu {\\n display: flex;\\n justify-content: space-between;\\n }\\n }\\n\\n input[type=\\\"text\\\"],\\n textarea:not(.excalidraw-wysiwyg) {\\n color: var(--text-primary-color);\\n border: 1.5px solid var(--input-border-color);\\n padding: 0.75rem;\\n white-space: nowrap;\\n border-radius: var(--space-factor);\\n background-color: var(--input-bg-color);\\n\\n &:not(:focus) {\\n &:hover {\\n background-color: var(--input-hover-bg-color);\\n }\\n }\\n\\n &:focus {\\n outline: none;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n }\\n\\n @media print {\\n .App-bottom-bar,\\n .FixedSideContainer,\\n .layer-ui__wrapper {\\n display: none;\\n }\\n }\\n\\n .HomeButton.ToolIcon.ToolIcon_type_floating {\\n display: inline-block;\\n position: absolute;\\n top: 60px;\\n left: calc(-2 * var(--space-factor));\\n border-radius: 0 20px 20px 0;\\n\\n background-color: var(--button-gray-1);\\n &:hover {\\n background-color: var(--button-gray-1);\\n }\\n &:active {\\n background-color: var(--button-gray-2);\\n }\\n\\n .ToolIcon__icon {\\n border-radius: inherit;\\n }\\n svg {\\n position: static;\\n }\\n }\\n}\\n\\n.ErrorSplash.excalidraw {\\n min-height: 100vh;\\n padding: 20px 0;\\n overflow: auto;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n user-select: text;\\n\\n .ErrorSplash-messageContainer {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n\\n padding: 40px;\\n background-color: $oc-red-1;\\n border: 3px solid $oc-red-9;\\n }\\n\\n .ErrorSplash-paragraph {\\n margin: 15px 0;\\n max-width: 600px;\\n\\n &.align-center {\\n text-align: center;\\n }\\n }\\n\\n .bigger,\\n .bigger button {\\n font-size: 1.1em;\\n }\\n\\n .smaller,\\n .smaller button {\\n font-size: 0.9em;\\n }\\n\\n .ErrorSplash-details {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n\\n textarea {\\n width: 100%;\\n margin: 10px 0;\\n font-family: \\\"Cascadia\\\";\\n font-size: 0.8em;\\n }\\n }\\n}\\n\",\"@import \\\"open-color/open-color.scss\\\";\\n@import \\\"./variables.module.scss\\\";\\n\\n.excalidraw {\\n --theme-filter: none;\\n --button-destructive-bg-color: #{$oc-red-1};\\n --button-destructive-color: #{$oc-red-9};\\n --button-gray-1: #{$oc-gray-2};\\n --button-gray-2: #{$oc-gray-4};\\n --button-gray-3: #{$oc-gray-5};\\n --button-special-active-bg-color: #{$oc-green-0};\\n --dialog-border-color: #{$oc-gray-6};\\n --dropdown-icon: url('data:image/svg+xml,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"292.4\\\" height=\\\"292.4\\\" viewBox=\\\"0 0 292 292\\\"><path d=\\\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\\\"/></svg>');\\n --focus-highlight-color: #{$oc-blue-2};\\n --icon-fill-color: #{$oc-black};\\n --icon-green-fill-color: #{$oc-green-9};\\n --default-bg-color: #{$oc-white};\\n --input-bg-color: #{$oc-white};\\n --input-border-color: #{$oc-gray-4};\\n --input-hover-bg-color: #{$oc-gray-1};\\n --input-label-color: #{$oc-gray-7};\\n --island-bg-color: rgba(255, 255, 255, 0.96);\\n --keybinding-color: #{$oc-gray-5};\\n --link-color: #{$oc-blue-7};\\n --overlay-bg-color: #{transparentize($oc-white, 0.12)};\\n --popup-bg-color: #{$oc-white};\\n --popup-secondary-bg-color: #{$oc-gray-1};\\n --popup-text-color: #{$oc-black};\\n --popup-text-inverted-color: #{$oc-white};\\n --sab: env(safe-area-inset-bottom);\\n --sal: env(safe-area-inset-left);\\n --sar: env(safe-area-inset-right);\\n --sat: env(safe-area-inset-top);\\n --select-highlight-color: #{$oc-blue-5};\\n --shadow-island: 0 1px 5px #{transparentize($oc-black, 0.85)};\\n --space-factor: 0.25rem;\\n --text-primary-color: #{$oc-gray-8};\\n\\n &.theme--dark {\\n background: $oc-black;\\n\\n &.theme--dark-background-none {\\n background: none;\\n }\\n }\\n\\n &.theme--dark {\\n --theme-filter: #{$theme-filter};\\n --button-destructive-bg-color: #5a0000;\\n --button-destructive-color: #{$oc-red-3};\\n --button-gray-1: #363636;\\n --button-gray-2: #272727;\\n --button-gray-3: #222;\\n --button-special-active-bg-color: #204624;\\n --dialog-border-color: #{$oc-gray-9};\\n --dropdown-icon: url('data:image/svg+xml,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"292.4\\\" height=\\\"292.4\\\" viewBox=\\\"0 0 292 292\\\"><path fill=\\\"%23ced4da\\\" d=\\\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\\\"/></svg>');\\n --focus-highlight-color: #{$oc-blue-6};\\n --icon-fill-color: #{$oc-gray-4};\\n --icon-green-fill-color: #{$oc-green-4};\\n --default-bg-color: #121212;\\n --input-bg-color: #121212;\\n --input-border-color: #2e2e2e;\\n --input-hover-bg-color: #181818;\\n --input-label-color: #{$oc-gray-2};\\n --island-bg-color: rgba(30, 30, 30, 0.98);\\n --keybinding-color: #{$oc-gray-6};\\n --link-color: #{$oc-blue-4};\\n --overlay-bg-color: #{transparentize($oc-gray-8, 0.88)};\\n --popup-bg-color: #2c2c2c;\\n --popup-secondary-bg-color: #222;\\n --popup-text-color: #{$oc-gray-4};\\n --popup-text-inverted-color: #635c5c;\\n --select-highlight-color: #{$oc-blue-4};\\n --shadow-island: 0 1px 5px #{transparentize($oc-black, 0.7)};\\n --text-primary-color: #{$oc-gray-4};\\n }\\n}\\n\",\"//\\n//\\n// 𝗖 𝗢 𝗟 𝗢 𝗥\\n// v 1.9.1\\n//\\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n\\n\\n// General\\n// ───────────────────────────────────\\n\\n$oc-white: #ffffff;\\n$oc-black: #000000;\\n\\n\\n// Gray\\n// ───────────────────────────────────\\n\\n$oc-gray-list: (\\n \\\"0\\\": #f8f9fa,\\n \\\"1\\\": #f1f3f5,\\n \\\"2\\\": #e9ecef,\\n \\\"3\\\": #dee2e6,\\n \\\"4\\\": #ced4da,\\n \\\"5\\\": #adb5bd,\\n \\\"6\\\": #868e96,\\n \\\"7\\\": #495057,\\n \\\"8\\\": #343a40,\\n \\\"9\\\": #212529\\n);\\n\\n$oc-gray-0: map-get($oc-gray-list, \\\"0\\\");\\n$oc-gray-1: map-get($oc-gray-list, \\\"1\\\");\\n$oc-gray-2: map-get($oc-gray-list, \\\"2\\\");\\n$oc-gray-3: map-get($oc-gray-list, \\\"3\\\");\\n$oc-gray-4: map-get($oc-gray-list, \\\"4\\\");\\n$oc-gray-5: map-get($oc-gray-list, \\\"5\\\");\\n$oc-gray-6: map-get($oc-gray-list, \\\"6\\\");\\n$oc-gray-7: map-get($oc-gray-list, \\\"7\\\");\\n$oc-gray-8: map-get($oc-gray-list, \\\"8\\\");\\n$oc-gray-9: map-get($oc-gray-list, \\\"9\\\");\\n\\n\\n// Red\\n// ───────────────────────────────────\\n\\n$oc-red-list: (\\n \\\"0\\\": #fff5f5,\\n \\\"1\\\": #ffe3e3,\\n \\\"2\\\": #ffc9c9,\\n \\\"3\\\": #ffa8a8,\\n \\\"4\\\": #ff8787,\\n \\\"5\\\": #ff6b6b,\\n \\\"6\\\": #fa5252,\\n \\\"7\\\": #f03e3e,\\n \\\"8\\\": #e03131,\\n \\\"9\\\": #c92a2a\\n);\\n\\n$oc-red-0: map-get($oc-red-list, \\\"0\\\");\\n$oc-red-1: map-get($oc-red-list, \\\"1\\\");\\n$oc-red-2: map-get($oc-red-list, \\\"2\\\");\\n$oc-red-3: map-get($oc-red-list, \\\"3\\\");\\n$oc-red-4: map-get($oc-red-list, \\\"4\\\");\\n$oc-red-5: map-get($oc-red-list, \\\"5\\\");\\n$oc-red-6: map-get($oc-red-list, \\\"6\\\");\\n$oc-red-7: map-get($oc-red-list, \\\"7\\\");\\n$oc-red-8: map-get($oc-red-list, \\\"8\\\");\\n$oc-red-9: map-get($oc-red-list, \\\"9\\\");\\n\\n\\n// Pink\\n// ───────────────────────────────────\\n\\n$oc-pink-list: (\\n \\\"0\\\": #fff0f6,\\n \\\"1\\\": #ffdeeb,\\n \\\"2\\\": #fcc2d7,\\n \\\"3\\\": #faa2c1,\\n \\\"4\\\": #f783ac,\\n \\\"5\\\": #f06595,\\n \\\"6\\\": #e64980,\\n \\\"7\\\": #d6336c,\\n \\\"8\\\": #c2255c,\\n \\\"9\\\": #a61e4d\\n);\\n\\n$oc-pink-0: map-get($oc-pink-list, \\\"0\\\");\\n$oc-pink-1: map-get($oc-pink-list, \\\"1\\\");\\n$oc-pink-2: map-get($oc-pink-list, \\\"2\\\");\\n$oc-pink-3: map-get($oc-pink-list, \\\"3\\\");\\n$oc-pink-4: map-get($oc-pink-list, \\\"4\\\");\\n$oc-pink-5: map-get($oc-pink-list, \\\"5\\\");\\n$oc-pink-6: map-get($oc-pink-list, \\\"6\\\");\\n$oc-pink-7: map-get($oc-pink-list, \\\"7\\\");\\n$oc-pink-8: map-get($oc-pink-list, \\\"8\\\");\\n$oc-pink-9: map-get($oc-pink-list, \\\"9\\\");\\n\\n\\n// Grape\\n// ───────────────────────────────────\\n\\n$oc-grape-list: (\\n \\\"0\\\": #f8f0fc,\\n \\\"1\\\": #f3d9fa,\\n \\\"2\\\": #eebefa,\\n \\\"3\\\": #e599f7,\\n \\\"4\\\": #da77f2,\\n \\\"5\\\": #cc5de8,\\n \\\"6\\\": #be4bdb,\\n \\\"7\\\": #ae3ec9,\\n \\\"8\\\": #9c36b5,\\n \\\"9\\\": #862e9c\\n);\\n\\n$oc-grape-0: map-get($oc-grape-list, \\\"0\\\");\\n$oc-grape-1: map-get($oc-grape-list, \\\"1\\\");\\n$oc-grape-2: map-get($oc-grape-list, \\\"2\\\");\\n$oc-grape-3: map-get($oc-grape-list, \\\"3\\\");\\n$oc-grape-4: map-get($oc-grape-list, \\\"4\\\");\\n$oc-grape-5: map-get($oc-grape-list, \\\"5\\\");\\n$oc-grape-6: map-get($oc-grape-list, \\\"6\\\");\\n$oc-grape-7: map-get($oc-grape-list, \\\"7\\\");\\n$oc-grape-8: map-get($oc-grape-list, \\\"8\\\");\\n$oc-grape-9: map-get($oc-grape-list, \\\"9\\\");\\n\\n\\n// Violet\\n// ───────────────────────────────────\\n\\n$oc-violet-list: (\\n \\\"0\\\": #f3f0ff,\\n \\\"1\\\": #e5dbff,\\n \\\"2\\\": #d0bfff,\\n \\\"3\\\": #b197fc,\\n \\\"4\\\": #9775fa,\\n \\\"5\\\": #845ef7,\\n \\\"6\\\": #7950f2,\\n \\\"7\\\": #7048e8,\\n \\\"8\\\": #6741d9,\\n \\\"9\\\": #5f3dc4\\n);\\n\\n$oc-violet-0: map-get($oc-violet-list, \\\"0\\\");\\n$oc-violet-1: map-get($oc-violet-list, \\\"1\\\");\\n$oc-violet-2: map-get($oc-violet-list, \\\"2\\\");\\n$oc-violet-3: map-get($oc-violet-list, \\\"3\\\");\\n$oc-violet-4: map-get($oc-violet-list, \\\"4\\\");\\n$oc-violet-5: map-get($oc-violet-list, \\\"5\\\");\\n$oc-violet-6: map-get($oc-violet-list, \\\"6\\\");\\n$oc-violet-7: map-get($oc-violet-list, \\\"7\\\");\\n$oc-violet-8: map-get($oc-violet-list, \\\"8\\\");\\n$oc-violet-9: map-get($oc-violet-list, \\\"9\\\");\\n\\n\\n// Indigo\\n// ───────────────────────────────────\\n\\n$oc-indigo-list: (\\n \\\"0\\\": #edf2ff,\\n \\\"1\\\": #dbe4ff,\\n \\\"2\\\": #bac8ff,\\n \\\"3\\\": #91a7ff,\\n \\\"4\\\": #748ffc,\\n \\\"5\\\": #5c7cfa,\\n \\\"6\\\": #4c6ef5,\\n \\\"7\\\": #4263eb,\\n \\\"8\\\": #3b5bdb,\\n \\\"9\\\": #364fc7\\n);\\n\\n$oc-indigo-0: map-get($oc-indigo-list, \\\"0\\\");\\n$oc-indigo-1: map-get($oc-indigo-list, \\\"1\\\");\\n$oc-indigo-2: map-get($oc-indigo-list, \\\"2\\\");\\n$oc-indigo-3: map-get($oc-indigo-list, \\\"3\\\");\\n$oc-indigo-4: map-get($oc-indigo-list, \\\"4\\\");\\n$oc-indigo-5: map-get($oc-indigo-list, \\\"5\\\");\\n$oc-indigo-6: map-get($oc-indigo-list, \\\"6\\\");\\n$oc-indigo-7: map-get($oc-indigo-list, \\\"7\\\");\\n$oc-indigo-8: map-get($oc-indigo-list, \\\"8\\\");\\n$oc-indigo-9: map-get($oc-indigo-list, \\\"9\\\");\\n\\n\\n// Blue\\n// ───────────────────────────────────\\n\\n$oc-blue-list: (\\n \\\"0\\\": #e7f5ff,\\n \\\"1\\\": #d0ebff,\\n \\\"2\\\": #a5d8ff,\\n \\\"3\\\": #74c0fc,\\n \\\"4\\\": #4dabf7,\\n \\\"5\\\": #339af0,\\n \\\"6\\\": #228be6,\\n \\\"7\\\": #1c7ed6,\\n \\\"8\\\": #1971c2,\\n \\\"9\\\": #1864ab\\n);\\n\\n$oc-blue-0: map-get($oc-blue-list, \\\"0\\\");\\n$oc-blue-1: map-get($oc-blue-list, \\\"1\\\");\\n$oc-blue-2: map-get($oc-blue-list, \\\"2\\\");\\n$oc-blue-3: map-get($oc-blue-list, \\\"3\\\");\\n$oc-blue-4: map-get($oc-blue-list, \\\"4\\\");\\n$oc-blue-5: map-get($oc-blue-list, \\\"5\\\");\\n$oc-blue-6: map-get($oc-blue-list, \\\"6\\\");\\n$oc-blue-7: map-get($oc-blue-list, \\\"7\\\");\\n$oc-blue-8: map-get($oc-blue-list, \\\"8\\\");\\n$oc-blue-9: map-get($oc-blue-list, \\\"9\\\");\\n\\n\\n// Cyan\\n// ───────────────────────────────────\\n\\n$oc-cyan-list: (\\n \\\"0\\\": #e3fafc,\\n \\\"1\\\": #c5f6fa,\\n \\\"2\\\": #99e9f2,\\n \\\"3\\\": #66d9e8,\\n \\\"4\\\": #3bc9db,\\n \\\"5\\\": #22b8cf,\\n \\\"6\\\": #15aabf,\\n \\\"7\\\": #1098ad,\\n \\\"8\\\": #0c8599,\\n \\\"9\\\": #0b7285\\n);\\n\\n$oc-cyan-0: map-get($oc-cyan-list, \\\"0\\\");\\n$oc-cyan-1: map-get($oc-cyan-list, \\\"1\\\");\\n$oc-cyan-2: map-get($oc-cyan-list, \\\"2\\\");\\n$oc-cyan-3: map-get($oc-cyan-list, \\\"3\\\");\\n$oc-cyan-4: map-get($oc-cyan-list, \\\"4\\\");\\n$oc-cyan-5: map-get($oc-cyan-list, \\\"5\\\");\\n$oc-cyan-6: map-get($oc-cyan-list, \\\"6\\\");\\n$oc-cyan-7: map-get($oc-cyan-list, \\\"7\\\");\\n$oc-cyan-8: map-get($oc-cyan-list, \\\"8\\\");\\n$oc-cyan-9: map-get($oc-cyan-list, \\\"9\\\");\\n\\n\\n// Teal\\n// ───────────────────────────────────\\n\\n$oc-teal-list: (\\n \\\"0\\\": #e6fcf5,\\n \\\"1\\\": #c3fae8,\\n \\\"2\\\": #96f2d7,\\n \\\"3\\\": #63e6be,\\n \\\"4\\\": #38d9a9,\\n \\\"5\\\": #20c997,\\n \\\"6\\\": #12b886,\\n \\\"7\\\": #0ca678,\\n \\\"8\\\": #099268,\\n \\\"9\\\": #087f5b\\n);\\n\\n$oc-teal-0: map-get($oc-teal-list, \\\"0\\\");\\n$oc-teal-1: map-get($oc-teal-list, \\\"1\\\");\\n$oc-teal-2: map-get($oc-teal-list, \\\"2\\\");\\n$oc-teal-3: map-get($oc-teal-list, \\\"3\\\");\\n$oc-teal-4: map-get($oc-teal-list, \\\"4\\\");\\n$oc-teal-5: map-get($oc-teal-list, \\\"5\\\");\\n$oc-teal-6: map-get($oc-teal-list, \\\"6\\\");\\n$oc-teal-7: map-get($oc-teal-list, \\\"7\\\");\\n$oc-teal-8: map-get($oc-teal-list, \\\"8\\\");\\n$oc-teal-9: map-get($oc-teal-list, \\\"9\\\");\\n\\n\\n// Green\\n// ───────────────────────────────────\\n\\n$oc-green-list: (\\n \\\"0\\\": #ebfbee,\\n \\\"1\\\": #d3f9d8,\\n \\\"2\\\": #b2f2bb,\\n \\\"3\\\": #8ce99a,\\n \\\"4\\\": #69db7c,\\n \\\"5\\\": #51cf66,\\n \\\"6\\\": #40c057,\\n \\\"7\\\": #37b24d,\\n \\\"8\\\": #2f9e44,\\n \\\"9\\\": #2b8a3e\\n);\\n\\n$oc-green-0: map-get($oc-green-list, \\\"0\\\");\\n$oc-green-1: map-get($oc-green-list, \\\"1\\\");\\n$oc-green-2: map-get($oc-green-list, \\\"2\\\");\\n$oc-green-3: map-get($oc-green-list, \\\"3\\\");\\n$oc-green-4: map-get($oc-green-list, \\\"4\\\");\\n$oc-green-5: map-get($oc-green-list, \\\"5\\\");\\n$oc-green-6: map-get($oc-green-list, \\\"6\\\");\\n$oc-green-7: map-get($oc-green-list, \\\"7\\\");\\n$oc-green-8: map-get($oc-green-list, \\\"8\\\");\\n$oc-green-9: map-get($oc-green-list, \\\"9\\\");\\n\\n\\n// Lime\\n// ───────────────────────────────────\\n\\n$oc-lime-list: (\\n \\\"0\\\": #f4fce3,\\n \\\"1\\\": #e9fac8,\\n \\\"2\\\": #d8f5a2,\\n \\\"3\\\": #c0eb75,\\n \\\"4\\\": #a9e34b,\\n \\\"5\\\": #94d82d,\\n \\\"6\\\": #82c91e,\\n \\\"7\\\": #74b816,\\n \\\"8\\\": #66a80f,\\n \\\"9\\\": #5c940d\\n);\\n\\n$oc-lime-0: map-get($oc-lime-list, \\\"0\\\");\\n$oc-lime-1: map-get($oc-lime-list, \\\"1\\\");\\n$oc-lime-2: map-get($oc-lime-list, \\\"2\\\");\\n$oc-lime-3: map-get($oc-lime-list, \\\"3\\\");\\n$oc-lime-4: map-get($oc-lime-list, \\\"4\\\");\\n$oc-lime-5: map-get($oc-lime-list, \\\"5\\\");\\n$oc-lime-6: map-get($oc-lime-list, \\\"6\\\");\\n$oc-lime-7: map-get($oc-lime-list, \\\"7\\\");\\n$oc-lime-8: map-get($oc-lime-list, \\\"8\\\");\\n$oc-lime-9: map-get($oc-lime-list, \\\"9\\\");\\n\\n\\n// Yellow\\n// ───────────────────────────────────\\n\\n$oc-yellow-list: (\\n \\\"0\\\": #fff9db,\\n \\\"1\\\": #fff3bf,\\n \\\"2\\\": #ffec99,\\n \\\"3\\\": #ffe066,\\n \\\"4\\\": #ffd43b,\\n \\\"5\\\": #fcc419,\\n \\\"6\\\": #fab005,\\n \\\"7\\\": #f59f00,\\n \\\"8\\\": #f08c00,\\n \\\"9\\\": #e67700\\n);\\n\\n$oc-yellow-0: map-get($oc-yellow-list, \\\"0\\\");\\n$oc-yellow-1: map-get($oc-yellow-list, \\\"1\\\");\\n$oc-yellow-2: map-get($oc-yellow-list, \\\"2\\\");\\n$oc-yellow-3: map-get($oc-yellow-list, \\\"3\\\");\\n$oc-yellow-4: map-get($oc-yellow-list, \\\"4\\\");\\n$oc-yellow-5: map-get($oc-yellow-list, \\\"5\\\");\\n$oc-yellow-6: map-get($oc-yellow-list, \\\"6\\\");\\n$oc-yellow-7: map-get($oc-yellow-list, \\\"7\\\");\\n$oc-yellow-8: map-get($oc-yellow-list, \\\"8\\\");\\n$oc-yellow-9: map-get($oc-yellow-list, \\\"9\\\");\\n\\n\\n// Orange\\n// ───────────────────────────────────\\n\\n$oc-orange-list: (\\n \\\"0\\\": #fff4e6,\\n \\\"1\\\": #ffe8cc,\\n \\\"2\\\": #ffd8a8,\\n \\\"3\\\": #ffc078,\\n \\\"4\\\": #ffa94d,\\n \\\"5\\\": #ff922b,\\n \\\"6\\\": #fd7e14,\\n \\\"7\\\": #f76707,\\n \\\"8\\\": #e8590c,\\n \\\"9\\\": #d9480f\\n);\\n\\n$oc-orange-0: map-get($oc-orange-list, \\\"0\\\");\\n$oc-orange-1: map-get($oc-orange-list, \\\"1\\\");\\n$oc-orange-2: map-get($oc-orange-list, \\\"2\\\");\\n$oc-orange-3: map-get($oc-orange-list, \\\"3\\\");\\n$oc-orange-4: map-get($oc-orange-list, \\\"4\\\");\\n$oc-orange-5: map-get($oc-orange-list, \\\"5\\\");\\n$oc-orange-6: map-get($oc-orange-list, \\\"6\\\");\\n$oc-orange-7: map-get($oc-orange-list, \\\"7\\\");\\n$oc-orange-8: map-get($oc-orange-list, \\\"8\\\");\\n$oc-orange-9: map-get($oc-orange-list, \\\"9\\\");\\n\\n\\n// Color list\\n// ───────────────────────────────────\\n\\n$oc-color-spectrum: 9;\\n\\n$oc-color-list: (\\n $oc-gray-list: \\\"gray\\\",\\n $oc-red-list: \\\"red\\\",\\n $oc-pink-list: \\\"pink\\\",\\n $oc-grape-list: \\\"grape\\\",\\n $oc-violet-list: \\\"violet\\\",\\n $oc-indigo-list: \\\"indigo\\\",\\n $oc-blue-list: \\\"blue\\\",\\n $oc-cyan-list: \\\"cyan\\\",\\n $oc-teal-list: \\\"teal\\\",\\n $oc-green-list: \\\"green\\\",\\n $oc-lime-list: \\\"lime\\\",\\n $oc-yellow-list: \\\"yellow\\\",\\n $oc-orange-list: \\\"orange\\\"\\n);\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1swXS51c2VbMl0hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vY3NzL3N0eWxlcy5zY3NzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUM4SDtBQUNqQjtBQUNPO0FBQ3BILDRDQUE0Qyw2akJBQWtSO0FBQzlULDRDQUE0QyxpbUJBQXFTO0FBQ2pWLDhCQUE4Qix1R0FBMkIsQ0FBQyxnSEFBcUM7QUFDL0YseUNBQXlDLDBHQUErQjtBQUN4RSx5Q0FBeUMsMEdBQStCO0FBQ3hFO0FBQ0EsbURBQW1ELGdEQUFnRCxHQUFHLGFBQWEsZ0RBQWdELEdBQUcsaUJBQWlCLHlCQUF5QiwyQ0FBMkMsd0NBQXdDLDZCQUE2Qiw2QkFBNkIsNkJBQTZCLDhDQUE4QyxtQ0FBbUMscUVBQXFFLHFDQUFxQywrQkFBK0IscUNBQXFDLGdDQUFnQyw4QkFBOEIsa0NBQWtDLG9DQUFvQyxpQ0FBaUMsaURBQWlELGdDQUFnQywwQkFBMEIsa0RBQWtELDhCQUE4Qix3Q0FBd0MsZ0NBQWdDLHlDQUF5Qyx1Q0FBdUMscUNBQXFDLHNDQUFzQyxvQ0FBb0Msc0NBQXNDLG1EQUFtRCw0QkFBNEIsa0NBQWtDLEdBQUcsMkJBQTJCLHdCQUF3QixHQUFHLHVEQUF1RCxxQkFBcUIsR0FBRywyQkFBMkIsbURBQW1ELDJDQUEyQyx3Q0FBd0MsNkJBQTZCLDZCQUE2QiwwQkFBMEIsOENBQThDLG1DQUFtQyxxRUFBcUUscUNBQXFDLCtCQUErQixxQ0FBcUMsZ0NBQWdDLDhCQUE4QixrQ0FBa0Msb0NBQW9DLGlDQUFpQyw4Q0FBOEMsZ0NBQWdDLDBCQUEwQiwrQ0FBK0MsOEJBQThCLHFDQUFxQyxnQ0FBZ0MseUNBQXlDLHNDQUFzQyxrREFBa0Qsa0NBQWtDLEdBQUcsV0FBVyx1QkFBdUIs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LFdBQVcsTUFBTSxNQUFNLFdBQVcsV0FBVyxXQUFXLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFdBQVcsV0FBVyxXQUFXLFdBQVcsTUFBTSxNQUFNLFVBQVUsV0FBVyxNQUFNLE1BQU0sVUFBVSxXQUFXLE1BQU0sUUFBUSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxNQUFNLE1BQU0sVUFBVSxVQUFVLE1BQU0sUUFBUSxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU0sTUFBTSxVQUFVLFdBQVcsTUFBTSxNQUFNLFVBQVUsTUFBTSxNQUFNLFdBQVcsV0FBVyxXQUFXLE1BQU0sT0FBTyxVQUFVLFdBQVcsV0FBVyxNQUFNLE1BQU0sVUFBVSxNQUFNLE1BQU0sVUFBVSxXQUFXLE1BQU0sTUFBTSxXQUFXLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFVBQVUsVUFBVSxNQUFNLE1BQU0sVUFBVSxXQUFXLFVBQVUsVUFBVSxNQUFNLE1BQU0sVUFBVSxZQUFZLFdBQVcsTUFBTSxPQUFPLFdBQVcsV0FBVyxNQUFNLE9BQU8sV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLE1BQU0sT0FBTyxXQUFXLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxNQUFNLFdBQVcsV0FBVyxXQUFXLE1BQU0sTUFBTSxVQUFVLFVBQVUsVUFBVSxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU0sTUFBTSxXQUFXLFVBQVUsV0FBVyxXQUFXLE1BQU0sTUFBTSxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFdBQVcsTUFBTSxNQUFNLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxNQUFNLE1BQU0sV0FBVyxNQUFNLE1BQU0sVUFBVSxXQUFXLE1BQU0sTUFBTSxVQUFVLFdBQVcsV0FBVyxVQUFVLE1BQU0sS0FBSyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsTUFBTSxLQUFLLFVBQVUsV0FBVyxNQUFNLEtBQUssV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFVBQVUsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFdBQVcsS0FBSyxLQUFLLFdBQVcsS0FBSyxLQUFLLFdBQVcsVUFBVSxLQUFLLEtBQUssV0FBVyxVQUFVLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsS0FBSyxLQUFLLFVBQVUsVUFBVSxLQUFLLEtBQUssV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFdBQVcsS0FBSyxLQUFLLFVBQVUsVUFBVSxXQUFXLFdBQVcsVUFBVSxXQUFXLFdBQVcsS0FBSyxLQUFLLFVBQVUsVUFBVSxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssVUFBVSxXQUFXLFdBQVcsV0FBVyxLQUFLLE1BQU0sVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsS0FBSyxNQUFNLFVBQVUsTUFBTSxNQUFNLFdBQVcsVUFBVSxPQUFPLE1BQU0sV0FBVyxNQUFNLE1BQU0sV0FBVyxVQUFVLFVBQVUsVUFBVSxXQUFXLE1BQU0sTUFBTSxXQUFXLFVBQVUsVUFBVSxVQUFV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Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsMFFBQTBRLDRDQUE0QywwQ0FBMEMsMENBQTBDLDBDQUEwQywwQ0FBMEMsMENBQTBDLDBDQUEwQywwQ0FBMEMsMENBQTBDLDBDQUEwQyw0UUFBNFEsOENBQThDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDhRQUE4USxnREFBZ0QsOENBQThDLDhDQUE4Qyw4Q0FBOEMsOENBQThDLDhDQUE4Qyw4Q0FBOEMsOENBQThDLDhDQUE4Qyw4Q0FBOEMsZ1JBQWdSLGtEQUFrRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnUkFBZ1Isa0RBQWtELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELDRRQUE0USw4Q0FBOEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNFFBQTRRLDhDQUE4Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0UUFBNFEsOENBQThDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDhRQUE4USxnREFBZ0QsOENBQThDLDhDQUE4Qyw4Q0FBOEMsOENBQThDLDhDQUE4Qyw4Q0FBOEMsOENBQThDLDhDQUE4Qyw4Q0FBOEMsNFFBQTRRLDhDQUE4Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0QyxnUkFBZ1Isa0RBQWtELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdSQUFnUixrREFBa0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QseUZBQXlGLHVkQUF1ZCxxQkFBcUI7QUFDaGk2QztBQUNBLGlFQUFlLHVCQUF1QixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2Nzcy9zdHlsZXMuc2Nzcz8wZDU1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9wYWNrYWdlcy9leGNhbGlkcmF3L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9wYWNrYWdlcy9leGNhbGlkcmF3L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fIGZyb20gXCIuLi9wYWNrYWdlcy9leGNhbGlkcmF3L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyA9IG5ldyBVUkwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIyOTIuNFxcXCIgaGVpZ2h0PVxcXCIyOTIuNFxcXCIgdmlld0JveD1cXFwiMCAwIDI5MiAyOTJcXFwiPjxwYXRoIGQ9XFxcIk0yODcgMTk3TDE1OSA2OWMtNC0zLTgtNS0xMy01cy05IDItMTMgNUw1IDE5N2MtMyA0LTUgOC01IDEzczIgOSA1IDEzYzQgNCA4IDUgMTMgNWgyNTZjNSAwIDktMSAxMy01czUtOCA1LTEzLTEtOS01LTEzelxcXCIvPjwvc3ZnPlwiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fID0gbmV3IFVSTChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgd2lkdGg9XFxcIjI5Mi40XFxcIiBoZWlnaHQ9XFxcIjI5Mi40XFxcIiB2aWV3Qm94PVxcXCIwIDAgMjkyIDI5MlxcXCI+PHBhdGggZmlsbD1cXFwiJTIzY2VkNGRhXFxcIiBkPVxcXCJNMjg3IDE5N0wxNTkgNjljLTQtMy04LTUtMTMtNXMtOSAyLTEzIDVMNSAxOTdjLTMgNC01IDgtNSAxM3MyIDkgNSAxM2M0IDQgOCA1IDEzIDVoMjU2YzUgMCA5LTEgMTMtNXM1LTggNS0xMy0xLTktNS0xM3pcXFwiLz48L3N2Zz5cIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiOmV4cG9ydCB7XFxuICB0aGVtZUZpbHRlcjogaW52ZXJ0KDkzJSkgaHVlLXJvdGF0ZSgxODBkZWcpO1xcbn1cXG5cXG46ZXhwb3J0IHtcXG4gIHRoZW1lRmlsdGVyOiBpbnZlcnQoOTMlKSBodWUtcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5leGNhbGlkcmF3IHtcXG4gIC0tdGhlbWUtZmlsdGVyOiBub25lO1xcbiAgLS1idXR0b24tZGVzdHJ1Y3RpdmUtYmctY29sb3I6ICNmZmUzZTM7XFxuICAtLWJ1dHRvbi1kZXN0cnVjdGl2ZS1jb2xvcjogI2M5MmEyYTtcXG4gIC0tYnV0dG9uLWdyYXktMTogI2U5ZWNlZjtcXG4gIC0tYnV0dG9uLWdyYXktMjogI2NlZDRkYTtcXG4gIC0tYnV0dG9uLWdyYXktMzogI2FkYjViZDtcXG4gIC0tYnV0dG9uLXNwZWNpYWwtYWN0aXZlLWJnLWNvbG9yOiAjZWJmYmVlO1xcbiAgLS1kaWFsb2ctYm9yZGVyLWNvbG9yOiAjODY4ZTk2O1xcbiAgLS1kcm9wZG93bi1pY29uOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbiAgLS1mb2N1cy1oaWdobGlnaHQtY29sb3I6ICNhNWQ4ZmY7XFxuICAtLWljb24tZmlsbC1jb2xvcjogIzAwMDAwMDtcXG4gIC0taWNvbi1ncmVlbi1maWxsLWNvbG9yOiAjMmI4YTNlO1xcbiAgLS1kZWZhdWx0LWJnLWNvbG9yOiAjZmZmZmZmO1xcbiAgLS1pbnB1dC1iZy1jb2xvcjogI2ZmZmZmZjtcXG4gIC0taW5wdXQtYm9yZGVyLWNvbG9yOiAjY2VkNGRhO1xcbiAgLS1pbnB1dC1ob3Zlci1iZy1jb2xvcjogI2YxZjNmNTtcXG4gIC0taW5wdXQtbGFiZWwtY29sb3I6ICM0OTUwNTc7XFxuICAtLWlzbGFuZC1iZy1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTtcXG4gIC0ta2V5YmluZGluZy1jb2xvcjogI2FkYjViZDtcXG4gIC0tbGluay1jb2xvcjogIzFjN2VkNjtcXG4gIC0tb3ZlcmxheS1iZy1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg4KTtcXG4gIC0tcG9wdXAtYmctY29sb3I6ICNmZmZmZmY7XFxuICAtLXBvcHVwLXNlY29uZGFyeS1iZy1jb2xvcjogI2YxZjNmNTtcXG4gIC0tcG9wdXAtdGV4dC1jb2xvcjogIzAwMDAwMDtcXG4gIC0tcG9wdXAtdGV4dC1pbnZlcnRlZC1jb2xvcjogI2ZmZmZmZjtcXG4gIC0tc2FiOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XFxuICAtLXNhbDogZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcXG4gIC0tc2FyOiBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KTtcXG4gIC0tc2F0OiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7XFxuICAtLXNlbGVjdC1oaWdobGlnaHQtY29sb3I6ICMzMzlhZjA7XFxuICAtLXNoYWRvdy1pc2xhbmQ6IDAgMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcbiAgLS1zcGFjZS1mYWN0b3I6IDAuMjVyZW07XFxuICAtLXRleHQtcHJpbWFyeS1jb2xvcjogIzM0M2E0MDtcXG59XFxuLmV4Y2FsaWRyYXcudGhlbWUtLWRhcmsge1xcbiAgYmFja2dyb3VuZDogIzAwMDAwMDtcXG59XFxuLmV4Y2FsaWRyYXcudGhlbWUtLWRhcmsudGhlbWUtLWRhcmstYmFja2dyb3VuZC1ub25lIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxufVxcbi5leGNhbGlkcmF3LnRoZW1lLS1kYXJrIHtcXG4gIC0tdGhlbWUtZmlsdGVyOiBpbnZlcnQoOTMlKSBodWUtcm90YXRlKDE4MGRlZyk7XFxuICAtLWJ1dHRvbi1kZXN0cnVjdGl2ZS1iZy1jb2xvcjogIzVhMDAwMDtcXG4gIC0tYnV0dG9uLWRlc3RydWN0aXZlLWNvbG9yOiAjZmZhOGE4O1xcbiAgLS1idXR0b24tZ3JheS0xOiAjMzYzNjM2O1xcbiAgLS1idXR0b24tZ3JheS0yOiAjMjcyNzI3O1xcbiAgLS1idXR0b24tZ3JheS0zOiAjMjIyO1xcbiAgLS1idXR0b24tc3BlY2lhbC1hY3RpdmUtYmctY29sb3I6ICMyMDQ2MjQ7XFxuICAtLWRpYWxvZy1ib3JkZXItY29sb3I6ICMyMTI1Mjk7XFxuICAtLWRyb3Bkb3duLWljb246IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gKyBcIik7XFxuICAtLWZvY3VzLWhpZ2hsaWdodC1jb2xvcjogIzIyOGJlNjtcXG4gIC0taWNvbi1maWxsLWNvbG9yOiAjY2VkNGRhO1xcbiAgLS1pY29uLWdyZWVuLWZpbGwtY29sb3I6ICM2OWRiN2M7XFxuICAtLWRlZmF1bHQtYmctY29sb3I6ICMxMjEyMTI7XFxuICAtLWlucHV0LWJnLWNvbG9yOiAjMTIxMjEyO1xcbiAgLS1pbnB1dC1ib3JkZXItY29sb3I6ICMyZTJlMmU7XFxuICAtLWlucHV0LWhvdmVyLWJnLWNvbG9yOiAjMTgxODE4O1xcbiAgLS1pbnB1dC1sYWJlbC1jb2xvcjogI2U5ZWNlZjtcXG4gIC0taXNsYW5kLWJnLWNvbG9yOiByZ2JhKDMwLCAzMCwgMzAsIDAuOTgpO1xcbiAgLS1rZXliaW5kaW5nLWNvbG9yOiAjODY4ZTk2O1xcbiAgLS1saW5rLWNvbG9yOiAjNGRhYmY3O1xcbiAgLS1vdmVybGF5LWJnLWNvbG9yOiByZ2JhKDUyLCA1OCwgNjQsIDAuMTIpO1xcbiAgLS1wb3B1cC1iZy1jb2xvcjogIzJjMmMyYztcXG4gIC0tcG9wdXAtc2Vjb25kYXJ5LWJnLWNvbG9yOiAjMjIyO1xcbiAgLS1wb3B1cC10ZXh0LWNvbG9yOiAjY2VkNGRhO1xcbiAgLS1wb3B1cC10ZXh0LWludmVydGVkLWNvbG9yOiAjNjM1YzVjO1xcbiAgLS1zZWxlY3QtaGlnaGxpZ2h0LWNvbG9yOiAjNGRhYmY3O1xcbiAgLS1zaGFkb3ctaXNsYW5kOiAwIDFweCA1cHggcmdiYSgwLCAwLCAwLCAwLjMpO1xcbiAgLS10ZXh0LXByaW1hcnktY29sb3I6ICNjZWQ0ZGE7XFxufVxcblxcbjpyb290IHtcXG4gIC0tekluZGV4LWNhbnZhczogMTtcXG4gIC0tekluZGV4LXd5c2l3eWc6IDI7XFxuICAtLXpJbmRleC1sYXllclVJOiAzO1xcbn1cXG5cXG4uZXhjYWxpZHJhdyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeS1jb2xvcik7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuLmV4Y2FsaWRyYXc6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuLmV4Y2FsaWRyYXcgYSB7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xcbn1cXG4uZXhjYWxpZHJhdyBhOmhvdmVyIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG4uZXhjYWxpZHJhdyBjYW52YXMge1xcbiAgdG91Y2gtYWN0aW9uOiBub25lO1xcbiAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XFxuICBpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7XFxuICB6LWluZGV4OiB2YXIoLS16SW5kZXgtY2FudmFzKTtcXG59XFxuLmV4Y2FsaWRyYXdfX2NhbnZhcyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5leGNhbGlkcmF3LnRoZW1lLS1kYXJrIGNhbnZhcyB7XFxuICBmaWx0ZXI6IHZhcigtLXRoZW1lLWZpbHRlcik7XFxufVxcbi5leGNhbGlkcmF3IC5GaXhlZFNpZGVDb250YWluZXIge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNhdCwgMCk7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zYXIsIDApO1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNhYiwgMCk7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNhbCwgMCk7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbFJvdyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiBoMyxcXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gbGVnZW5kLFxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuY29udHJvbC1sYWJlbCB7XFxuICBtYXJnaW4tdG9wOiAwLjMzM3JlbTtcXG4gIG1hcmdpbi1ib3R0b206IDAuMzMzcmVtO1xcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xcbiAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeS1jb2xvcik7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gLmNvbnRyb2wtbGFiZWwgaW5wdXQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIGgzOmZpcnN0LWNoaWxkLFxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiBsZWdlbmQ6Zmlyc3QtY2hpbGQsXFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIC5jb250cm9sLWxhYmVsOmZpcnN0LWNoaWxkIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiBsZWdlbmQge1xcbiAgcGFkZGluZzogMDtcXG59XFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIC5pY29uU2VsZWN0TGlzdCB7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCB7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCBsYWJlbCB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW07XFxuICBmb250LXNpemU6IDAuNzVyZW07XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCBpbnB1dFt0eXBlPXJhZGlvXSxcXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gLmJ1dHRvbkxpc3QgaW5wdXRbdHlwZT1idXR0b25dIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIC5idXR0b25MaXN0IC5pY29uUm93IHtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG59XFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIC5idXR0b25MaXN0IC5Ub29sSWNvbiB7XFxuICBtYXJnaW46IDA7XFxuICBtYXJnaW4taW5saW5lLWVuZDogOHB4O1xcbn1cXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gLmJ1dHRvbkxpc3QgLlRvb2xJY29uOmZvY3VzIHtcXG4gIG91dGxpbmU6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZvY3VzLWhpZ2hsaWdodC1jb2xvcik7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCAuVG9vbEljb246aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCAuVG9vbEljb246YWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTMpO1xcbn1cXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gLmJ1dHRvbkxpc3QgLlRvb2xJY29uOmRpc2FibGVkIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCAuVG9vbEljb25fX2ljb24ge1xcbiAgd2lkdGg6IDI4cHg7XFxuICBoZWlnaHQ6IDI4cHg7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiBmaWVsZHNldCB7XFxuICBtYXJnaW46IDA7XFxuICBtYXJnaW4tdG9wOiAwLjMzM3JlbTtcXG4gIHBhZGRpbmc6IDA7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcbi5leGNhbGlkcmF3IC5kaXZpZGVyIHtcXG4gIHdpZHRoOiAxcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgbWFyZ2luOiAxcHg7XFxufVxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsOmZvY3VzLXdpdGhpbixcXG4uZXhjYWxpZHJhdyBpbnB1dDpmb2N1cyB7XFxuICBvdXRsaW5lOiB0cmFuc3BhcmVudDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1mb2N1cy1oaWdobGlnaHQtY29sb3IpO1xcbn1cXG4uZXhjYWxpZHJhdyBidXR0b24sXFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QgbGFiZWwge1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0xKTtcXG4gIGJvcmRlcjogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIG1hcmdpbjogMC4xMjVyZW0gMDtcXG4gIHBhZGRpbmc6IDAuMjVyZW07XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uZXhjYWxpZHJhdyBidXR0b246Zm9jdXMsXFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QgbGFiZWw6Zm9jdXMge1xcbiAgb3V0bGluZTogdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG59XFxuLmV4Y2FsaWRyYXcgYnV0dG9uOmhvdmVyLFxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbn1cXG4uZXhjYWxpZHJhdyBidXR0b246YWN0aXZlLFxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG59XFxuLmV4Y2FsaWRyYXcgYnV0dG9uOmRpc2FibGVkLFxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsOmRpc2FibGVkIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi5leGNhbGlkcmF3IC5hY3RpdmUsXFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QgbGFiZWwuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbn1cXG4uZXhjYWxpZHJhdyAuYWN0aXZlOmhvdmVyLFxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsLmFjdGl2ZTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG59XFxuLmV4Y2FsaWRyYXcgLmFjdGl2ZTphY3RpdmUsXFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QgbGFiZWwuYWN0aXZlOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG59XFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QuYnV0dG9uTGlzdEljb24gbGFiZWwge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0LmJ1dHRvbkxpc3RJY29uIGxhYmVsIHN2ZyB7XFxuICB3aWR0aDogMzZweDtcXG4gIGhlaWdodDogMTRweDtcXG4gIHBhZGRpbmc6IDJweDtcXG4gIG9wYWNpdHk6IDAuNjtcXG59XFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QuYnV0dG9uTGlzdEljb24gbGFiZWwuYWN0aXZlIHN2ZyB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLXRvcC1iYXIge1xcbiAgei1pbmRleDogdmFyKC0tekluZGV4LWxheWVyVUkpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLWJvdHRvbS1iYXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgLS1iYXItcGFkZGluZzogY2FsYyg0ICogdmFyKC0tc3BhY2UtZmFjdG9yKSk7XFxuICBwYWRkaW5nLXRvcDogbWF4KHZhcigtLWJhci1wYWRkaW5nKSwgdmFyKC0tc2F0LDApKTtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNhciwgMCk7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2FiLCAwKTtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2FsLCAwKTtcXG4gIHotaW5kZXg6IDQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtYm90dG9tLWJhciA+IC5Jc2xhbmQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBtaW4td2lkdGg6IDEwMCU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgbWF4LWhlaWdodDogMTAwJTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtYm90dG9tLWJhciA+IC5Jc2xhbmQgLnBhbmVsQ29sdW1uIHtcXG4gIHBhZGRpbmc6IDhweCA4cHggMCA4cHg7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtdG9vbGJhciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtdG9vbGJhci1jb250ZW50IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcGFkZGluZzogOHB4O1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1vYmlsZS1tZW51IHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tYmFyLXBhZGRpbmcpO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnUge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIGNvbG9yOiB2YXIoLS1pY29uLWZpbGwtY29sb3IpO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnVfdG9wIHtcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG8gMWZyO1xcbiAgZ3JpZC1nYXA6IDRweDtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmV4Y2FsaWRyYXcgLmxheWVyLXVpX193cmFwcGVyOm5vdCguZGlzYWJsZS1wb2ludGVyRXZlbnRzKSAuQXBwLW1lbnVfdG9wID4gKiB7XFxuICBwb2ludGVyLWV2ZW50czogYWxsO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnVfdG9wID4gKjpmaXJzdC1jaGlsZCB7XFxuICBqdXN0aWZ5LXNlbGY6IGZsZXgtc3RhcnQ7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtbWVudV90b3AgPiAqOmxhc3QtY2hpbGQge1xcbiAganVzdGlmeS1zZWxmOiBmbGV4LWVuZDtcXG59XFxuLmV4Y2FsaWRyYXcgLkFwcC1tZW51X2JvdHRvbSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbi1jb250ZW50IGF1dG8gbWluLWNvbnRlbnQ7XFxuICBncmlkLWdhcDogMTVweDtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG4gIHotaW5kZXg6IDEwMDtcXG59XFxuOnJvb3RbZGlyPWx0cl0gLmV4Y2FsaWRyYXcgLkFwcC1tZW51X2JvdHRvbSB7XFxuICBsZWZ0OiAwLjI1cmVtO1xcbn1cXG46cm9vdFtkaXI9cnRsXSAuZXhjYWxpZHJhdyAuQXBwLW1lbnVfYm90dG9tIHtcXG4gIHJpZ2h0OiAwLjI1cmVtO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnVfYm90dG9tLS10cmFuc2l0aW9uLWxlZnQgc2VjdGlvbiB7XFxuICB3aWR0aDogMTg1cHg7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtbWVudV9ib3R0b20gc2VjdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnVfYm90dG9tID4gKjpmaXJzdC1jaGlsZCB7XFxuICBqdXN0aWZ5LXNlbGY6IGZsZXgtc3RhcnQ7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtbWVudV9ib3R0b20gPiAqOmxhc3QtY2hpbGQge1xcbiAganVzdGlmeS1zZWxmOiBmbGV4LWVuZDtcXG59XFxuLmV4Y2FsaWRyYXcgLkFwcC1tZW51X2xlZnQge1xcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgYXV0byAxZnI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtbWVudV9yaWdodCB7XFxuICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLmV4Y2FsaWRyYXcgLkFwcC1tZW51X19sZWZ0IHtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcbi5leGNhbGlkcmF3IC5kcm9wZG93bi1zZWxlY3Qge1xcbiAgaGVpZ2h0OiAxLjVyZW07XFxuICBwYWRkaW5nOiAwO1xcbiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDAuNXJlbTtcXG4gIHBhZGRpbmctaW5saW5lLWVuZDogMS41cmVtO1xcbiAgY29sb3I6IHZhcigtLWljb24tZmlsbC1jb2xvcik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0xKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXNwYWNlLWZhY3Rvcik7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS1kcm9wZG93bi1pY29uKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwLjdyZW0gdG9wIDUwJSwgMCAwO1xcbiAgYmFja2dyb3VuZC1zaXplOiAwLjY1ZW0gYXV0bywgMTAwJTtcXG59XFxuOnJvb3RbZGlyPXJ0bF0gLmV4Y2FsaWRyYXcgLmRyb3Bkb3duLXNlbGVjdCB7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IDAuN3JlbSB0b3AgNTAlLCAwIDA7XFxufVxcbi5leGNhbGlkcmF3IC5kcm9wZG93bi1zZWxlY3Q6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZvY3VzLWhpZ2hsaWdodC1jb2xvcik7XFxufVxcbi5leGNhbGlkcmF3IC5kcm9wZG93bi1zZWxlY3Q6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxufVxcbi5leGNhbGlkcmF3IC5kcm9wZG93bi1zZWxlY3Q6YWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbn1cXG4uZXhjYWxpZHJhdyAuekluZGV4QnV0dG9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIG1hcmdpbi1pbmxpbmUtZW5kOiA4cHg7XFxuICBwYWRkaW5nOiA1cHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLmV4Y2FsaWRyYXcgLnpJbmRleEJ1dHRvbiBzdmcge1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDE4cHg7XFxufVxcbi5leGNhbGlkcmF3IC5zY3JvbGwtYmFjay10by1jb250ZW50IHtcXG4gIGNvbG9yOiB2YXIoLS1wb3B1cC10ZXh0LWNvbG9yKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIGJvdHRvbTogMzBweDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcXG59XFxuLmV4Y2FsaWRyYXcgLmhlbHAtaWNvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZmlsbDogIzg2OGU5NjtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgY29sb3I6IHZhcigtLWljb24tZmlsbC1jb2xvcik7XFxufVxcbi5leGNhbGlkcmF3IC5oZWxwLWljb24gc3ZnIHtcXG4gIHdpZHRoOiAxLjVyZW07XFxuICBoZWlnaHQ6IDEuNXJlbTtcXG59XFxuLmV4Y2FsaWRyYXcgLmhlbHAtaWNvbjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbn1cXG4uZXhjYWxpZHJhdyAucmVzZXQtem9vbS1idXR0b24ge1xcbiAgcGFkZGluZzogMC4yZW07XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnktY29sb3IpO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLXVpLWZvbnQpO1xcbn1cXG4uZXhjYWxpZHJhdyAudW5kby1yZWRvLWJ1dHRvbnMge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XFxuICBnYXA6IDAuNGVtO1xcbiAgbWFyZ2luLXRvcDogYXV0bztcXG4gIG1hcmdpbi1ib3R0b206IGF1dG87XFxuICBtYXJnaW4taW5saW5lLXN0YXJ0OiAwLjZlbTtcXG59XFxuLmV4Y2FsaWRyYXctLW1vYmlsZS5leGNhbGlkcmF3IGFzaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5leGNhbGlkcmF3LS1tb2JpbGUuZXhjYWxpZHJhdyAuc2Nyb2xsLWJhY2stdG8tY29udGVudCB7XFxuICBib3R0b206IGNhbGMoODBweCArIHZhcigtLXNhYiwgMCkpO1xcbiAgei1pbmRleDogLTE7XFxufVxcblxcbjpyb290W2Rpcj1ydGxdIC5leGNhbGlkcmF3IC5ydGwtbWlycm9yIHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcXG59XFxuLmV4Y2FsaWRyYXcgLnplbi1tb2RlLXZpc2liaWxpdHkge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG4gIG9wYWNpdHk6IDE7XFxuICBoZWlnaHQ6IGF1dG87XFxuICB3aWR0aDogYXV0bztcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cztcXG59XFxuLmV4Y2FsaWRyYXcgLnplbi1tb2RlLXZpc2liaWxpdHkuemVuLW1vZGUtdmlzaWJpbGl0eS0taGlkZGVuIHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIG9wYWNpdHk6IDA7XFxuICBoZWlnaHQ6IDA7XFxuICB3aWR0aDogMDtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cztcXG59XFxuLmV4Y2FsaWRyYXcgLmRpc2FibGUtcG9pbnRlckV2ZW50cyB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4uZXhjYWxpZHJhdy5leGNhbGlkcmF3LS12aWV3LW1vZGUgLkFwcC1tZW51IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi5leGNhbGlkcmF3IGlucHV0W3R5cGU9dGV4dF0sXFxuLmV4Y2FsaWRyYXcgdGV4dGFyZWE6bm90KC5leGNhbGlkcmF3LXd5c2l3eWcpIHtcXG4gIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnktY29sb3IpO1xcbiAgYm9yZGVyOiAxLjVweCBzb2xpZCB2YXIoLS1pbnB1dC1ib3JkZXItY29sb3IpO1xcbiAgcGFkZGluZzogMC43NXJlbTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1zcGFjZS1mYWN0b3IpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5wdXQtYmctY29sb3IpO1xcbn1cXG4uZXhjYWxpZHJhdyBpbnB1dFt0eXBlPXRleHRdOm5vdCg6Zm9jdXMpOmhvdmVyLFxcbi5leGNhbGlkcmF3IHRleHRhcmVhOm5vdCguZXhjYWxpZHJhdy13eXNpd3lnKTpub3QoOmZvY3VzKTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pbnB1dC1ob3Zlci1iZy1jb2xvcik7XFxufVxcbi5leGNhbGlkcmF3IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsXFxuLmV4Y2FsaWRyYXcgdGV4dGFyZWE6bm90KC5leGNhbGlkcmF3LXd5c2l3eWcpOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG59XFxuQG1lZGlhIHByaW50IHtcXG4gIC5leGNhbGlkcmF3IC5BcHAtYm90dG9tLWJhcixcXG4uZXhjYWxpZHJhdyAuRml4ZWRTaWRlQ29udGFpbmVyLFxcbi5leGNhbGlkcmF3IC5sYXllci11aV9fd3JhcHBlciB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxufVxcbi5leGNhbGlkcmF3IC5Ib21lQnV0dG9uLlRvb2xJY29uLlRvb2xJY29uX3R5cGVfZmxvYXRpbmcge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA2MHB4O1xcbiAgbGVmdDogY2FsYygtMiAqIHZhcigtLXNwYWNlLWZhY3RvcikpO1xcbiAgYm9yZGVyLXJhZGl1czogMCAyMHB4IDIwcHggMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbn1cXG4uZXhjYWxpZHJhdyAuSG9tZUJ1dHRvbi5Ub29sSWNvbi5Ub29sSWNvbl90eXBlX2Zsb2F0aW5nOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbn1cXG4uZXhjYWxpZHJhdyAuSG9tZUJ1dHRvbi5Ub29sSWNvbi5Ub29sSWNvbl90eXBlX2Zsb2F0aW5nOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG59XFxuLmV4Y2FsaWRyYXcgLkhvbWVCdXR0b24uVG9vbEljb24uVG9vbEljb25fdHlwZV9mbG9hdGluZyAuVG9vbEljb25fX2ljb24ge1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG59XFxuLmV4Y2FsaWRyYXcgLkhvbWVCdXR0b24uVG9vbEljb24uVG9vbEljb25fdHlwZV9mbG9hdGluZyBzdmcge1xcbiAgcG9zaXRpb246IHN0YXRpYztcXG59XFxuXFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcge1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxuICBwYWRkaW5nOiAyMHB4IDA7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB1c2VyLXNlbGVjdDogdGV4dDtcXG59XFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcgLkVycm9yU3BsYXNoLW1lc3NhZ2VDb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBwYWRkaW5nOiA0MHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTNlMztcXG4gIGJvcmRlcjogM3B4IHNvbGlkICNjOTJhMmE7XFxufVxcbi5FcnJvclNwbGFzaC5leGNhbGlkcmF3IC5FcnJvclNwbGFzaC1wYXJhZ3JhcGgge1xcbiAgbWFyZ2luOiAxNXB4IDA7XFxuICBtYXgtd2lkdGg6IDYwMHB4O1xcbn1cXG4uRXJyb3JTcGxhc2guZXhjYWxpZHJhdyAuRXJyb3JTcGxhc2gtcGFyYWdyYXBoLmFsaWduLWNlbnRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5FcnJvclNwbGFzaC5leGNhbGlkcmF3IC5iaWdnZXIsXFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcgLmJpZ2dlciBidXR0b24ge1xcbiAgZm9udC1zaXplOiAxLjFlbTtcXG59XFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcgLnNtYWxsZXIsXFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcgLnNtYWxsZXIgYnV0dG9uIHtcXG4gIGZvbnQtc2l6ZTogMC45ZW07XFxufVxcbi5FcnJvclNwbGFzaC5leGNhbGlkcmF3IC5FcnJvclNwbGFzaC1kZXRhaWxzIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxufVxcbi5FcnJvclNwbGFzaC5leGNhbGlkcmF3IC5FcnJvclNwbGFzaC1kZXRhaWxzIHRleHRhcmVhIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAxMHB4IDA7XFxuICBmb250LWZhbWlseTogXFxcIkNhc2NhZGlhXFxcIjtcXG4gIGZvbnQtc2l6ZTogMC44ZW07XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uLy4uLy4uL2Nzcy92YXJpYWJsZXMubW9kdWxlLnNjc3NcIixcIndlYnBhY2s6Ly8uLy4uLy4uL2Nzcy9zdHlsZXMuc2Nzc1wiLFwid2VicGFjazovLy4vLi4vLi4vY3NzL3RoZW1lLnNjc3NcIixcIndlYnBhY2s6Ly8uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9vcGVuLWNvbG9yL29wZW4tY29sb3Iuc2Nzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFVQTtFQUNFLDJDQUFBO0FDVEY7O0FEUUE7RUFDRSwyQ0FBQTtBQ0xGOztBQ0hBO0VBQ0Usb0JBQUE7RUFDQSxzQ0FBQTtFQUNBLG1DQUFBO0VBQ0Esd0JBQUE7RUFDQSx3QkFBQTtFQUNBLHdCQUFBO0VBQ0EseUNBQUE7RUFDQSw4QkFBQTtFQUNBLHdEQUFBO0VBQ0EsZ0NBQUE7RUFDQSwwQkFBQTtFQUNBLGdDQUFBO0VBQ0EsMkJBQUE7RUFDQSx5QkFBQTtFQUNBLDZCQUFBO0VBQ0EsK0JBQUE7RUFDQSw0QkFBQTtFQUNBLDRDQUFBO0VBQ0EsMkJBQUE7RUFDQSxxQkFBQTtFQUNBLDZDQUFBO0VBQ0EseUJBQUE7RUFDQSxtQ0FBQTtFQUNBLDJCQUFBO0VBQ0Esb0NBQUE7RUFDQSxrQ0FBQTtFQUNBLGdDQUFBO0VBQ0EsaUNBQUE7RUFDQSwrQkFBQTtFQUNBLGlDQUFBO0VBQ0EsOENBQUE7RUFDQSx1QkFBQTtFQUNBLDZCQUFBO0FETUY7QUNKRTtFQUNFLG1CQzNCZTtBRmlDbkI7QUNKSTtFQUNFLGdCQUFBO0FETU47QUNGRTtFQUNFLDhDQUFBO0VBQ0Esc0NBQUE7RUFDQSxtQ0FBQTtFQUNBLHdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxxQkFBQTtFQUNBLHlDQUFBO0VBQ0EsOEJBQUE7RUFDQSx3REFBQTtFQUNBLGdDQUFBO0VBQ0EsMEJBQUE7RUFDQSxnQ0FBQTtFQUNBLDJC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QUFBO0VBQ0EsNkNBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0Esa0NBQUE7RUFDQSx1Q0FBQTtBQTFCSjtBQTZCTTs7RUFDRSw2Q0FBQTtBQTFCUjtBQThCSTs7RUFDRSxhQUFBO0VBQ0Esa0RBQUE7QUEzQk47QUErQkU7RUFDRTs7O0lBR0UsYUFBQTtFQTdCSjtBQUNGO0FBZ0NFO0VBQ0UscUJBQUE7RUFDQSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxvQ0FBQTtFQUNBLDRCQUFBO0VBRUEsc0NBQUE7QUEvQko7QUFnQ0k7RUFDRSxzQ0FBQTtBQTlCTjtBQWdDSTtFQUNFLHNDQUFBO0FBOUJOO0FBaUNJO0VBQ0Usc0JBQUE7QUEvQk47QUFpQ0k7RUFDRSxnQkFBQTtBQS9CTjs7QUFvQ0E7RUFDRSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSxpQkFBQTtBQWpDRjtBQW1DRTtFQUNFLGFBQUE7RUFDQSxzQkFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFFQSxhQUFBO0VBQ0EseUJFaGhCTztFRmloQlAseUJBQUE7QUFsQ0o7QUFxQ0U7RUFDRSxjQUFBO0VBQ0EsZ0JBQUE7QUFuQ0o7QUFxQ0k7RUFDRSxrQkFBQTtBQW5DTjtBQXVDRTs7RUFFRSxnQkFBQTtBQXJDSjtBQXdDRTs7RUFFRSxnQkFBQTtBQXRDSjtBQXlDRTtFQUNFLGFBQUE7RUFDQSxzQkFBQTtFQUNBLHVCQUFBO0FBdkNKO0FBeUNJO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0FBdkNOXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIkBpbXBvcnQgXFxcIm9wZW4tY29sb3Ivb3Blbi1jb2xvci5zY3NzXFxcIjtcXG5cXG5AbWl4aW4gaXNNb2JpbGUoKSB7XFxuICBAYXQtcm9vdCAuZXhjYWxpZHJhdy0tbW9iaWxlI3smfSB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cXG4kdGhlbWUtZmlsdGVyOiBcXFwiaW52ZXJ0KDkzJSkgaHVlLXJvdGF0ZSgxODBkZWcpXFxcIjtcXG5cXG46ZXhwb3J0IHtcXG4gIHRoZW1lRmlsdGVyOiB1bnF1b3RlKCR0aGVtZS1maWx0ZXIpO1xcbn1cXG5cIixcIkBpbXBvcnQgXFxcIi4vdmFyaWFibGVzLm1vZHVsZVxcXCI7XFxuQGltcG9ydCBcXFwiLi90aGVtZVxcXCI7XFxuXFxuOnJvb3Qge1xcbiAgLS16SW5kZXgtY2FudmFzOiAxO1xcbiAgLS16SW5kZXgtd3lzaXd5ZzogMjtcXG4gIC0tekluZGV4LWxheWVyVUk6IDM7XFxufVxcblxcbi5leGNhbGlkcmF3IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5LWNvbG9yKTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG5cXG4gICY6Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lO1xcbiAgfVxcblxcbiAgLy8gc2VydmVzIDIgcHVycG9zZXM6XFxuICAvLyAxLiBwcmV2ZW50IHNlbGVjdGluZyB0ZXh0IG91dHNpZGUgdGhlIGNvbXBvbmVudCB3aGVuIGRvdWJsZS1jbGlja2luZyBvclxcbiAgLy8gICAgZHJhZ2dpbmcgaW5zaWRlIGl0IChlLmcuIG9uIGNhbnZhcylcXG4gIC8vIDIuIHByZXZlbnQgc2VsZWN0aW5nIFVJLCBib3RoIGZyb20gdGhlIGluc2lkZSwgYW5kIGZyb20gb3V0c2lkZSB0aGVcXG4gIC8vICAgIGNvbXBvbmVudCAoZS5nLiBpZiB5b3Ugc2VsZWN0IHRleHQgaW4gYSBzaWRlYmFyKVxcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuXFxuICBhIHtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICBjb2xvcjogdmFyKC0tbGluay1jb2xvcik7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICB9XFxuICB9XFxuXFxuICBjYW52YXMge1xcbiAgICB0b3VjaC1hY3Rpb246IG5vbmU7XFxuXFxuICAgIC8vIGZvbGxvd2luZyBwcm9wcyBpbXByb3ZlIGJsdXJyaW5lc3MgYXQgY2VydGFpbiBkZXZpY2VQaXhlbFJhdGlvcy5cXG4gICAgLy8gQUZBSUsgaXQgZG9lc24ndCBhZmZlY3QgZXhwb3J0IChpbiBmYWN0LCBleHBvcnQgc2VlbXMgc2hhcnAgZWl0aGVyIHdheSkuXFxuXFxuICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkOyAvLyBjaHJvbWl1bVxcbiAgICAvLyBOT1RFOiBtdXN0IGJlIGRlY2xhcmVkICphZnRlciogdGhlIGFib3ZlXFxuICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsgLy8gRkZcXG5cXG4gICAgei1pbmRleDogdmFyKC0tekluZGV4LWNhbnZhcyk7XFxuXFxuICAgIC8vIFJlbW92ZSB0aGUgbWFpbiBjYW52YXMgZnJvbSBkb2N1bWVudCBmbG93IHRvIGF2b2lkIHJlc2l6ZU9ic2VydmVyXFxuICAgIC8vIGZlZWRiYWNrIGxvb3AgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXhjYWxpZHJhdy9leGNhbGlkcmF3L3B1bGwvMzM3OSlcXG4gIH1cXG5cXG4gICZfX2NhbnZhcyB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIH1cXG5cXG4gICYudGhlbWUtLWRhcmsge1xcbiAgICAvLyBUaGUgcGVyY2VudGFnZSBpcyBpbnNwaXJlZCBieVxcbiAgICAvLyBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb2xvci9kYXJrLXRoZW1lLmh0bWwjcHJvcGVydGllcywgd2hpY2hcXG4gICAgLy8gcmVjb21tZW5kcyBzdXJmYWNlIGNvbG9yIG9mICMxMjEyMTIsIDkzJSB5aWVsZHMgIzExMTExMSBmb3IgI0ZGRlxcblxcbiAgICBjYW52YXMge1xcbiAgICAgIGZpbHRlcjogdmFyKC0tdGhlbWUtZmlsdGVyKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLkZpeGVkU2lkZUNvbnRhaW5lciB7XFxuICAgIHBhZGRpbmctdG9wOiB2YXIoLS1zYXQsIDApO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zYXIsIDApO1xcbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2FiLCAwKTtcXG4gICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zYWwsIDApO1xcbiAgfVxcblxcbiAgLnBhbmVsUm93IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgfVxcblxcbiAgLnBhbmVsQ29sdW1uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG5cXG4gICAgaDMsXFxuICAgIGxlZ2VuZCxcXG4gICAgLmNvbnRyb2wtbGFiZWwge1xcbiAgICAgIG1hcmdpbi10b3A6IDAuMzMzcmVtO1xcbiAgICAgIG1hcmdpbi1ib3R0b206IDAuMzMzcmVtO1xcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5LWNvbG9yKTtcXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgfVxcblxcbiAgICAuY29udHJvbC1sYWJlbCBpbnB1dCB7XFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG5cXG4gICAgaDM6Zmlyc3QtY2hpbGQsXFxuICAgIGxlZ2VuZDpmaXJzdC1jaGlsZCxcXG4gICAgLmNvbnRyb2wtbGFiZWw6Zmlyc3QtY2hpbGQge1xcbiAgICAgIG1hcmdpbi10b3A6IDA7XFxuICAgIH1cXG5cXG4gICAgbGVnZW5kIHtcXG4gICAgICBwYWRkaW5nOiAwO1xcbiAgICB9XFxuXFxuICAgIC5pY29uU2VsZWN0TGlzdCB7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgfVxcblxcbiAgICAuYnV0dG9uTGlzdCB7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcblxcbiAgICAgIGxhYmVsIHtcXG4gICAgICAgIG1hcmdpbi1yaWdodDogMC4yNXJlbTtcXG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICB9XFxuXFxuICAgICAgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSxcXG4gICAgICBpbnB1dFt0eXBlPVxcXCJidXR0b25cXFwiXSB7XFxuICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgICAgfVxcblxcbiAgICAgIC5pY29uUm93IHtcXG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcXG4gICAgICB9XFxuXFxuICAgICAgLlRvb2xJY29uIHtcXG4gICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgIG1hcmdpbi1pbmxpbmUtZW5kOiA4cHg7XFxuXFxuICAgICAgICAmOmZvY3VzIHtcXG4gICAgICAgICAgb3V0bGluZTogdHJhbnNwYXJlbnQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1mb2N1cy1oaWdobGlnaHQtY29sb3IpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgJjphY3RpdmUge1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgICY6ZGlzYWJsZWQge1xcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICAuVG9vbEljb25fX2ljb24ge1xcbiAgICAgICAgd2lkdGg6IDI4cHg7XFxuICAgICAgICBoZWlnaHQ6IDI4cHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGZpZWxkc2V0IHtcXG4gICAgICBtYXJnaW46IDA7XFxuICAgICAgbWFyZ2luLXRvcDogMC4zMzNyZW07XFxuICAgICAgcGFkZGluZzogMDtcXG4gICAgICBib3JkZXI6IG5vbmU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5kaXZpZGVyIHtcXG4gICAgd2lkdGg6IDFweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG9jLWdyYXktMjtcXG4gICAgbWFyZ2luOiAxcHg7XFxuICB9XFxuXFxuICAuYnV0dG9uTGlzdCBsYWJlbDpmb2N1cy13aXRoaW4sXFxuICBpbnB1dDpmb2N1cyB7XFxuICAgIG91dGxpbmU6IHRyYW5zcGFyZW50O1xcbiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG4gIH1cXG5cXG4gIGJ1dHRvbixcXG4gIC5idXR0b25MaXN0IGxhYmVsIHtcXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbiAgICBib3JkZXI6IDA7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgbWFyZ2luOiAwLjEyNXJlbSAwO1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcblxcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIG91dGxpbmU6IHRyYW5zcGFyZW50O1xcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1mb2N1cy1oaWdobGlnaHQtY29sb3IpO1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbiAgICB9XFxuXFxuICAgICY6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG4gICAgfVxcblxcbiAgICAmOmRpc2FibGVkIHtcXG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICB9XFxuICB9XFxuXFxuICAuYWN0aXZlLFxcbiAgLmJ1dHRvbkxpc3QgbGFiZWwuYWN0aXZlIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbiAgICB9XFxuXFxuICAgICY6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmJ1dHRvbkxpc3QuYnV0dG9uTGlzdEljb24ge1xcbiAgICBsYWJlbCB7XFxuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBzdmcge1xcbiAgICAgICAgd2lkdGg6IDM2cHg7XFxuICAgICAgICBoZWlnaHQ6IDE0cHg7XFxuICAgICAgICBwYWRkaW5nOiAycHg7XFxuICAgICAgICBvcGFjaXR5OiAwLjY7XFxuICAgICAgfVxcbiAgICAgICYuYWN0aXZlIHN2ZyB7XFxuICAgICAgICBvcGFjaXR5OiAxO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblxcbiAgLkFwcC10b3AtYmFyIHtcXG4gICAgei1pbmRleDogdmFyKC0tekluZGV4LWxheWVyVUkpO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgfVxcblxcbiAgLkFwcC1ib3R0b20tYmFyIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIC0tYmFyLXBhZGRpbmc6IGNhbGMoNCAqIHZhcigtLXNwYWNlLWZhY3RvcikpO1xcbiAgICBwYWRkaW5nLXRvcDogI3tcXFwibWF4KHZhcigtLWJhci1wYWRkaW5nKSwgdmFyKC0tc2F0LDApKVxcXCJ9O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zYXIsIDApO1xcbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2FiLCAwKTtcXG4gICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zYWwsIDApO1xcbiAgICB6LWluZGV4OiA0O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcblxcbiAgICA+IC5Jc2xhbmQge1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICAgIG1heC13aWR0aDogMTAwJTtcXG4gICAgICBtaW4td2lkdGg6IDEwMCU7XFxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgICBwb2ludGVyLWV2ZW50czogaW5pdGlhbDtcXG5cXG4gICAgICAucGFuZWxDb2x1bW4ge1xcbiAgICAgICAgcGFkZGluZzogOHB4IDhweCAwIDhweDtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5BcHAtdG9vbGJhciB7XFxuICAgIHdpZHRoOiAxMDAlO1xcblxcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgfVxcblxcbiAgLkFwcC10b29sYmFyLWNvbnRlbnQge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIHBhZGRpbmc6IDhweDtcXG4gIH1cXG5cXG4gIC5BcHAtbW9iaWxlLW1lbnUge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogdmlzaWJsZTtcXG4gICAgb3ZlcmZsb3cteTogYXV0bztcXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tYmFyLXBhZGRpbmcpO1xcbiAgfVxcblxcbiAgLkFwcC1tZW51IHtcXG4gICAgZGlzcGxheTogZ3JpZDtcXG4gICAgY29sb3I6IHZhcigtLWljb24tZmlsbC1jb2xvcik7XFxuICB9XFxuXFxuICAuQXBwLW1lbnVfdG9wIHtcXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgYXV0byAxZnI7XFxuICAgIGdyaWQtZ2FwOiA0cHg7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuXFxuICAubGF5ZXItdWlfX3dyYXBwZXI6bm90KC5kaXNhYmxlLXBvaW50ZXJFdmVudHMpIC5BcHAtbWVudV90b3AgPiAqIHtcXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG4gIH1cXG5cXG4gIC5BcHAtbWVudV90b3AgPiAqOmZpcnN0LWNoaWxkIHtcXG4gICAganVzdGlmeS1zZWxmOiBmbGV4LXN0YXJ0O1xcbiAgfVxcblxcbiAgLkFwcC1tZW51X3RvcCA+ICo6bGFzdC1jaGlsZCB7XFxuICAgIGp1c3RpZnktc2VsZjogZmxleC1lbmQ7XFxuICB9XFxuXFxuICAuQXBwLW1lbnVfYm90dG9tIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBib3R0b206IDA7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWluLWNvbnRlbnQgYXV0byBtaW4tY29udGVudDtcXG4gICAgZ3JpZC1nYXA6IDE1cHg7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuICAgIHotaW5kZXg6IDEwMDtcXG5cXG4gICAgOnJvb3RbZGlyPVxcXCJsdHJcXFwiXSAmIHtcXG4gICAgICBsZWZ0OiAwLjI1cmVtO1xcbiAgICB9XFxuXFxuICAgIDpyb290W2Rpcj1cXFwicnRsXFxcIl0gJiB7XFxuICAgICAgcmlnaHQ6IDAuMjVyZW07XFxuICAgIH1cXG5cXG4gICAgJi0tdHJhbnNpdGlvbi1sZWZ0IHtcXG4gICAgICBzZWN0aW9uIHtcXG4gICAgICAgIHdpZHRoOiAxODVweDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgc2VjdGlvbiB7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLkFwcC1tZW51X2JvdHRvbSA+ICo6Zmlyc3QtY2hpbGQge1xcbiAgICBqdXN0aWZ5LXNlbGY6IGZsZXgtc3RhcnQ7XFxuICB9XFxuXFxuICAuQXBwLW1lbnVfYm90dG9tID4gKjpsYXN0LWNoaWxkIHtcXG4gICAganVzdGlmeS1zZWxmOiBmbGV4LWVuZDtcXG4gIH1cXG5cXG4gIC5BcHAtbWVudV9sZWZ0IHtcXG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgYXV0byAxZnI7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gIH1cXG5cXG4gIC5BcHAtbWVudV9yaWdodCB7XFxuICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICB9XFxuXFxuICAuQXBwLW1lbnVfX2xlZnQge1xcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgfVxcblxcbiAgLmRyb3Bkb3duLXNlbGVjdCB7XFxuICAgIGhlaWdodDogMS41cmVtO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogMC41cmVtO1xcbiAgICBwYWRkaW5nLWlubGluZS1lbmQ6IDEuNXJlbTtcXG4gICAgY29sb3I6IHZhcigtLWljb24tZmlsbC1jb2xvcik7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zcGFjZS1mYWN0b3IpO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG4gICAgZm9udC1zaXplOiAwLjhyZW07XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIGFwcGVhcmFuY2U6IG5vbmU7XFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWRyb3Bkb3duLWljb24pO1xcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwLjdyZW0gdG9wIDUwJSwgMCAwO1xcblxcbiAgICA6cm9vdFtkaXI9XFxcInJ0bFxcXCJdICYge1xcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgMC43cmVtIHRvcCA1MCUsIDAgMDtcXG4gICAgfVxcblxcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDAuNjVlbSBhdXRvLCAxMDAlO1xcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG4gICAgfVxcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG4gICAgfVxcblxcbiAgICAmOmFjdGl2ZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC56SW5kZXhCdXR0b24ge1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiA4cHg7XFxuICAgIHBhZGRpbmc6IDVweDtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiAxOHB4O1xcbiAgICAgIGhlaWdodDogMThweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnNjcm9sbC1iYWNrLXRvLWNvbnRlbnQge1xcbiAgICBjb2xvcjogdmFyKC0tcG9wdXAtdGV4dC1jb2xvcik7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBib3R0b206IDMwcHg7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xcbiAgfVxcblxcbiAgLmhlbHAtaWNvbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgZmlsbDogJG9jLWdyYXktNjtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgICBjb2xvcjogdmFyKC0taWNvbi1maWxsLWNvbG9yKTtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogMS41cmVtO1xcbiAgICAgIGhlaWdodDogMS41cmVtO1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5yZXNldC16b29tLWJ1dHRvbiB7XFxuICAgIHBhZGRpbmc6IDAuMmVtO1xcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeS1jb2xvcik7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS11aS1mb250KTtcXG4gIH1cXG5cXG4gIC51bmRvLXJlZG8tYnV0dG9ucyB7XFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XFxuICAgIGdhcDogMC40ZW07XFxuICAgIG1hcmdpbi10b3A6IGF1dG87XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG87XFxuICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDAuNmVtO1xcbiAgfVxcblxcbiAgQGluY2x1ZGUgaXNNb2JpbGUge1xcbiAgICBhc2lkZSB7XFxuICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgfVxcbiAgICAuc2Nyb2xsLWJhY2stdG8tY29udGVudCB7XFxuICAgICAgYm90dG9tOiBjYWxjKDgwcHggKyB2YXIoLS1zYWIsIDApKTtcXG4gICAgICB6LWluZGV4OiAtMTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnJ0bC1taXJyb3Ige1xcbiAgICA6cm9vdFtkaXI9XFxcInJ0bFxcXCJdICYge1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnplbi1tb2RlLXZpc2liaWxpdHkge1xcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXM7XFxuXFxuICAgICYuemVuLW1vZGUtdmlzaWJpbGl0eS0taGlkZGVuIHtcXG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgICBoZWlnaHQ6IDA7XFxuICAgICAgd2lkdGg6IDA7XFxuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGlzYWJsZS1wb2ludGVyRXZlbnRzIHtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG5cXG4gICYuZXhjYWxpZHJhdy0tdmlldy1tb2RlIHtcXG4gICAgLkFwcC1tZW51IHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgfVxcbiAgfVxcblxcbiAgaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLFxcbiAgdGV4dGFyZWE6bm90KC5leGNhbGlkcmF3LXd5c2l3eWcpIHtcXG4gICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeS1jb2xvcik7XFxuICAgIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taW5wdXQtYm9yZGVyLWNvbG9yKTtcXG4gICAgcGFkZGluZzogMC43NXJlbTtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc3BhY2UtZmFjdG9yKTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5wdXQtYmctY29sb3IpO1xcblxcbiAgICAmOm5vdCg6Zm9jdXMpIHtcXG4gICAgICAmOmhvdmVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlucHV0LWhvdmVyLWJnLWNvbG9yKTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIHByaW50IHtcXG4gICAgLkFwcC1ib3R0b20tYmFyLFxcbiAgICAuRml4ZWRTaWRlQ29udGFpbmVyLFxcbiAgICAubGF5ZXItdWlfX3dyYXBwZXIge1xcbiAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5Ib21lQnV0dG9uLlRvb2xJY29uLlRvb2xJY29uX3R5cGVfZmxvYXRpbmcge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiA2MHB4O1xcbiAgICBsZWZ0OiBjYWxjKC0yICogdmFyKC0tc3BhY2UtZmFjdG9yKSk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDAgMjBweCAyMHB4IDA7XFxuXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0xKTtcXG4gICAgfVxcbiAgICAmOmFjdGl2ZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxuICAgIH1cXG5cXG4gICAgLlRvb2xJY29uX19pY29uIHtcXG4gICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbiAgICB9XFxuICAgIHN2ZyB7XFxuICAgICAgcG9zaXRpb246IHN0YXRpYztcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4uRXJyb3JTcGxhc2guZXhjYWxpZHJhdyB7XFxuICBtaW4taGVpZ2h0OiAxMDB2aDtcXG4gIHBhZGRpbmc6IDIwcHggMDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHVzZXItc2VsZWN0OiB0ZXh0O1xcblxcbiAgLkVycm9yU3BsYXNoLW1lc3NhZ2VDb250YWluZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG5cXG4gICAgcGFkZGluZzogNDBweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG9jLXJlZC0xO1xcbiAgICBib3JkZXI6IDNweCBzb2xpZCAkb2MtcmVkLTk7XFxuICB9XFxuXFxuICAuRXJyb3JTcGxhc2gtcGFyYWdyYXBoIHtcXG4gICAgbWFyZ2luOiAxNXB4IDA7XFxuICAgIG1heC13aWR0aDogNjAwcHg7XFxuXFxuICAgICYuYWxpZ24tY2VudGVyIHtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5iaWdnZXIsXFxuICAuYmlnZ2VyIGJ1dHRvbiB7XFxuICAgIGZvbnQtc2l6ZTogMS4xZW07XFxuICB9XFxuXFxuICAuc21hbGxlcixcXG4gIC5zbWFsbGVyIGJ1dHRvbiB7XFxuICAgIGZvbnQtc2l6ZTogMC45ZW07XFxuICB9XFxuXFxuICAuRXJyb3JTcGxhc2gtZGV0YWlscyB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcblxcbiAgICB0ZXh0YXJlYSB7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgbWFyZ2luOiAxMHB4IDA7XFxuICAgICAgZm9udC1mYW1pbHk6IFxcXCJDYXNjYWRpYVxcXCI7XFxuICAgICAgZm9udC1zaXplOiAwLjhlbTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIixcIkBpbXBvcnQgXFxcIm9wZW4tY29sb3Ivb3Blbi1jb2xvci5zY3NzXFxcIjtcXG5AaW1wb3J0IFxcXCIuL3ZhcmlhYmxlcy5tb2R1bGUuc2Nzc1xcXCI7XFxuXFxuLmV4Y2FsaWRyYXcge1xcbiAgLS10aGVtZS1maWx0ZXI6IG5vbmU7XFxuICAtLWJ1dHRvbi1kZXN0cnVjdGl2ZS1iZy1jb2xvcjogI3skb2MtcmVkLTF9O1xcbiAgLS1idXR0b24tZGVzdHJ1Y3RpdmUtY29sb3I6ICN7JG9jLXJlZC05fTtcXG4gIC0tYnV0dG9uLWdyYXktMTogI3skb2MtZ3JheS0yfTtcXG4gIC0tYnV0dG9uLWdyYXktMjogI3skb2MtZ3JheS00fTtcXG4gIC0tYnV0dG9uLWdyYXktMzogI3skb2MtZ3JheS01fTtcXG4gIC0tYnV0dG9uLXNwZWNpYWwtYWN0aXZlLWJnLWNvbG9yOiAjeyRvYy1ncmVlbi0wfTtcXG4gIC0tZGlhbG9nLWJvcmRlci1jb2xvcjogI3skb2MtZ3JheS02fTtcXG4gIC0tZHJvcGRvd24taWNvbjogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIyOTIuNFxcXCIgaGVpZ2h0PVxcXCIyOTIuNFxcXCIgdmlld0JveD1cXFwiMCAwIDI5MiAyOTJcXFwiPjxwYXRoIGQ9XFxcIk0yODcgMTk3TDE1OSA2OWMtNC0zLTgtNS0xMy01cy05IDItMTMgNUw1IDE5N2MtMyA0LTUgOC01IDEzczIgOSA1IDEzYzQgNCA4IDUgMTMgNWgyNTZjNSAwIDktMSAxMy01czUtOCA1LTEzLTEtOS01LTEzelxcXCIvPjwvc3ZnPicpO1xcbiAgLS1mb2N1cy1oaWdobGlnaHQtY29sb3I6ICN7JG9jLWJsdWUtMn07XFxuICAtLWljb24tZmlsbC1jb2xvcjogI3skb2MtYmxhY2t9O1xcbiAgLS1pY29uLWdyZWVuLWZpbGwtY29sb3I6ICN7JG9jLWdyZWVuLTl9O1xcbiAgLS1kZWZhdWx0LWJnLWNvbG9yOiAjeyRvYy13aGl0ZX07XFxuICAtLWlucHV0LWJnLWNvbG9yOiAjeyRvYy13aGl0ZX07XFxuICAtLWlucHV0LWJvcmRlci1jb2xvcjogI3skb2MtZ3JheS00fTtcXG4gIC0taW5wdXQtaG92ZXItYmctY29sb3I6ICN7JG9jLWdyYXktMX07XFxuICAtLWlucHV0LWxhYmVsLWNvbG9yOiAjeyRvYy1ncmF5LTd9O1xcbiAgLS1pc2xhbmQtYmctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7XFxuICAtLWtleWJpbmRpbmctY29sb3I6ICN7JG9jLWdyYXktNX07XFxuICAtLWxpbmstY29sb3I6ICN7JG9jLWJsdWUtN307XFxuICAtLW92ZXJsYXktYmctY29sb3I6ICN7dHJhbnNwYXJlbnRpemUoJG9jLXdoaXRlLCAwLjEyKX07XFxuICAtLXBvcHVwLWJnLWNvbG9yOiAjeyRvYy13aGl0ZX07XFxuICAtLXBvcHVwLXNlY29uZGFyeS1iZy1jb2xvcjogI3skb2MtZ3JheS0xfTtcXG4gIC0tcG9wdXAtdGV4dC1jb2xvcjogI3skb2MtYmxhY2t9O1xcbiAgLS1wb3B1cC10ZXh0LWludmVydGVkLWNvbG9yOiAjeyRvYy13aGl0ZX07XFxuICAtLXNhYjogZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xcbiAgLS1zYWw6IGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XFxuICAtLXNhcjogZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7XFxuICAtLXNhdDogZW52KHNhZmUtYXJlYS1pbnNldC10b3ApO1xcbiAgLS1zZWxlY3QtaGlnaGxpZ2h0LWNvbG9yOiAjeyRvYy1ibHVlLTV9O1xcbiAgLS1zaGFkb3ctaXNsYW5kOiAwIDFweCA1cHggI3t0cmFuc3BhcmVudGl6ZSgkb2MtYmxhY2ssIDAuODUpfTtcXG4gIC0tc3BhY2UtZmFjdG9yOiAwLjI1cmVtO1xcbiAgLS10ZXh0LXByaW1hcnktY29sb3I6ICN7JG9jLWdyYXktOH07XFxuXFxuICAmLnRoZW1lLS1kYXJrIHtcXG4gICAgYmFja2dyb3VuZDogJG9jLWJsYWNrO1xcblxcbiAgICAmLnRoZW1lLS1kYXJrLWJhY2tncm91bmQtbm9uZSB7XFxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi50aGVtZS0tZGFyayB7XFxuICAgIC0tdGhlbWUtZmlsdGVyOiAjeyR0aGVtZS1maWx0ZXJ9O1xcbiAgICAtLWJ1dHRvbi1kZXN0cnVjdGl2ZS1iZy1jb2xvcjogIzVhMDAwMDtcXG4gICAgLS1idXR0b24tZGVzdHJ1Y3RpdmUtY29sb3I6ICN7JG9jLXJlZC0zfTtcXG4gICAgLS1idXR0b24tZ3JheS0xOiAjMzYzNjM2O1xcbiAgICAtLWJ1dHRvbi1ncmF5LTI6ICMyNzI3Mjc7XFxuICAgIC0tYnV0dG9uLWdyYXktMzogIzIyMjtcXG4gICAgLS1idXR0b24tc3BlY2lhbC1hY3RpdmUtYmctY29sb3I6ICMyMDQ2MjQ7XFxuICAgIC0tZGlhbG9nLWJvcmRlci1jb2xvcjogI3skb2MtZ3JheS05fTtcXG4gICAgLS1kcm9wZG93bi1pY29uOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgd2lkdGg9XFxcIjI5Mi40XFxcIiBoZWlnaHQ9XFxcIjI5Mi40XFxcIiB2aWV3Qm94PVxcXCIwIDAgMjkyIDI5MlxcXCI+PHBhdGggZmlsbD1cXFwiJTIzY2VkNGRhXFxcIiBkPVxcXCJNMjg3IDE5N0wxNTkgNjljLTQtMy04LTUtMTMtNXMtOSAyLTEzIDVMNSAxOTdjLTMgNC01IDgtNSAxM3MyIDkgNSAxM2M0IDQgOCA1IDEzIDVoMjU2YzUgMCA5LTEgMTMtNXM1LTggNS0xMy0xLTktNS0xM3pcXFwiLz48L3N2Zz4nKTtcXG4gICAgLS1mb2N1cy1oaWdobGlnaHQtY29sb3I6ICN7JG9jLWJsdWUtNn07XFxuICAgIC0taWNvbi1maWxsLWNvbG9yOiAjeyRvYy1ncmF5LTR9O1xcbiAgICAtLWljb24tZ3JlZW4tZmlsbC1jb2xvcjogI3skb2MtZ3JlZW4tNH07XFxuICAgIC0tZGVmYXVsdC1iZy1jb2xvcjogIzEyMTIxMjtcXG4gICAgLS1pbnB1dC1iZy1jb2xvcjogIzEyMTIxMjtcXG4gICAgLS1pbnB1dC1ib3JkZXItY29sb3I6ICMyZTJlMmU7XFxuICAgIC0taW5wdXQtaG92ZXItYmctY29sb3I6ICMxODE4MTg7XFxuICAgIC0taW5wdXQtbGFiZWwtY29sb3I6ICN7JG9jLWdyYXktMn07XFxuICAgIC0taXNsYW5kLWJnLWNvbG9yOiByZ2JhKDMwLCAzMCwgMzAsIDAuOTgpO1xcbiAgICAtLWtleWJpbmRpbmctY29sb3I6ICN7JG9jLWdyYXktNn07XFxuICAgIC0tbGluay1jb2xvcjogI3skb2MtYmx1ZS00fTtcXG4gICAgLS1vdmVybGF5LWJnLWNvbG9yOiAje3RyYW5zcGFyZW50aXplKCRvYy1ncmF5LTgsIDAuODgpfTtcXG4gICAgLS1wb3B1cC1iZy1jb2xvcjogIzJjMmMyYztcXG4gICAgLS1wb3B1cC1zZWNvbmRhcnktYmctY29sb3I6ICMyMjI7XFxuICAgIC0tcG9wdXAtdGV4dC1jb2xvcjogI3skb2MtZ3JheS00fTtcXG4gICAgLS1wb3B1cC10ZXh0LWludmVydGVkLWNvbG9yOiAjNjM1YzVjO1xcbiAgICAtLXNlbGVjdC1oaWdobGlnaHQtY29sb3I6ICN7JG9jLWJsdWUtNH07XFxuICAgIC0tc2hhZG93LWlzbGFuZDogMCAxcHggNXB4ICN7dHJhbnNwYXJlbnRpemUoJG9jLWJsYWNrLCAwLjcpfTtcXG4gICAgLS10ZXh0LXByaW1hcnktY29sb3I6ICN7JG9jLWdyYXktNH07XFxuICB9XFxufVxcblwiLFwiLy9cXG4vL1xcbi8vICDwnZeWIPCdl6Ig8J2XnyDwnZeiIPCdl6VcXG4vLyAgdiAxLjkuMVxcbi8vXFxuLy8gIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxcblxcblxcbi8vICBHZW5lcmFsXFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy13aGl0ZTogICAgICAgICAjZmZmZmZmO1xcbiRvYy1ibGFjazogICAgICAgICAjMDAwMDAwO1xcblxcblxcbi8vICBHcmF5XFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy1ncmF5LWxpc3Q6IChcXG4gIFxcXCIwXFxcIjogI2Y4ZjlmYSxcXG4gIFxcXCIxXFxcIjogI2YxZjNmNSxcXG4gIFxcXCIyXFxcIjogI2U5ZWNlZixcXG4gIFxcXCIzXFxcIjogI2RlZTJlNixcXG4gIFxcXCI0XFxcIjogI2NlZDRkYSxcXG4gIFxcXCI1XFxcIjogI2FkYjViZCxcXG4gIFxcXCI2XFxcIjogIzg2OGU5NixcXG4gIFxcXCI3XFxcIjogIzQ5NTA1NyxcXG4gIFxcXCI4XFxcIjogIzM0M2E0MCxcXG4gIFxcXCI5XFxcIjogIzIxMjUyOVxcbik7XFxuXFxuJG9jLWdyYXktMDogbWFwLWdldCgkb2MtZ3JheS1saXN0LCBcXFwiMFxcXCIpO1xcbiRvYy1ncmF5LTE6IG1hcC1nZXQoJG9jLWdyYXktbGlzdCwgXFxcIjFcXFwiKTtcXG4kb2MtZ3JheS0yOiBtYXAtZ2V0KCRvYy1ncmF5LWxpc3QsIFxcXCIyXFxcIik7XFxuJG9jLWdyYXktMzogbWFwLWdldCgkb2MtZ3JheS1saXN0LCBcXFwiM1xcXCIpO1xcbiRvYy1ncmF5LTQ6IG1hcC1nZXQoJG9jLWdyYXktbGlzdCwgXFxcIjRcXFwiKTtcXG4kb2MtZ3JheS01OiBtYXAtZ2V0KCRvYy1ncmF5LWxpc3QsIFxcXCI1XFxcIik7XFxuJG9jLWdyYXktNjogbWFwLWdldCgkb2MtZ3JheS1saXN0LCBcXFwiNlxcXCIpO1xcbiRvYy1ncmF5LTc6IG1hcC1nZXQoJG9jLWdyYXktbGlzdCwgXFxcIjdcXFwiKTtcXG4kb2MtZ3JheS04OiBtYXAtZ2V0KCRvYy1ncmF5LWxpc3QsIFxcXCI4XFxcIik7XFxuJG9jLWdyYXktOTogbWFwLWdldCgkb2MtZ3JheS1saXN0LCBcXFwiOVxcXCIpO1xcblxcblxcbi8vICBSZWRcXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLXJlZC1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNmZmY1ZjUsXFxuICBcXFwiMVxcXCI6ICNmZmUzZTMsXFxuICBcXFwiMlxcXCI6ICNmZmM5YzksXFxuICBcXFwiM1xcXCI6ICNmZmE4YTgsXFxuICBcXFwiNFxcXCI6ICNmZjg3ODcsXFxuICBcXFwiNVxcXCI6ICNmZjZiNmIsXFxuICBcXFwiNlxcXCI6ICNmYTUyNTIsXFxuICBcXFwiN1xcXCI6ICNmMDNlM2UsXFxuICBcXFwiOFxcXCI6ICNlMDMxMzEsXFxuICBcXFwiOVxcXCI6ICNjOTJhMmFcXG4pO1xcblxcbiRvYy1yZWQtMDogbWFwLWdldCgkb2MtcmVkLWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLXJlZC0xOiBtYXAtZ2V0KCRvYy1yZWQtbGlzdCwgXFxcIjFcXFwiKTtcXG4kb2MtcmVkLTI6IG1hcC1nZXQoJG9jLXJlZC1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy1yZWQtMzogbWFwLWdldCgkb2MtcmVkLWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLXJlZC00OiBtYXAtZ2V0KCRvYy1yZWQtbGlzdCwgXFxcIjRcXFwiKTtcXG4kb2MtcmVkLTU6IG1hcC1nZXQoJG9jLXJlZC1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy1yZWQtNjogbWFwLWdldCgkb2MtcmVkLWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLXJlZC03OiBtYXAtZ2V0KCRvYy1yZWQtbGlzdCwgXFxcIjdcXFwiKTtcXG4kb2MtcmVkLTg6IG1hcC1nZXQoJG9jLXJlZC1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy1yZWQtOTogbWFwLWdldCgkb2MtcmVkLWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIFBpbmtcXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLXBpbmstbGlzdDogKFxcbiAgXFxcIjBcXFwiOiAjZmZmMGY2LFxcbiAgXFxcIjFcXFwiOiAjZmZkZWViLFxcbiAgXFxcIjJcXFwiOiAjZmNjMmQ3LFxcbiAgXFxcIjNcXFwiOiAjZmFhMmMxLFxcbiAgXFxcIjRcXFwiOiAjZjc4M2FjLFxcbiAgXFxcIjVcXFwiOiAjZjA2NTk1LFxcbiAgXFxcIjZcXFwiOiAjZTY0OTgwLFxcbiAgXFxcIjdcXFwiOiAjZDYzMzZjLFxcbiAgXFxcIjhcXFwiOiAjYzIyNTVjLFxcbiAgXFxcIjlcXFwiOiAjYTYxZTRkXFxuKTtcXG5cXG4kb2MtcGluay0wOiBtYXAtZ2V0KCRvYy1waW5rLWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLXBpbmstMTogbWFwLWdldCgkb2MtcGluay1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy1waW5rLTI6IG1hcC1nZXQoJG9jLXBpbmstbGlzdCwgXFxcIjJcXFwiKTtcXG4kb2MtcGluay0zOiBtYXAtZ2V0KCRvYy1waW5rLWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLXBpbmstNDogbWFwLWdldCgkb2MtcGluay1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy1waW5rLTU6IG1hcC1nZXQoJG9jLXBpbmstbGlzdCwgXFxcIjVcXFwiKTtcXG4kb2MtcGluay02OiBtYXAtZ2V0KCRvYy1waW5rLWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLXBpbmstNzogbWFwLWdldCgkb2MtcGluay1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy1waW5rLTg6IG1hcC1nZXQoJG9jLXBpbmstbGlzdCwgXFxcIjhcXFwiKTtcXG4kb2MtcGluay05OiBtYXAtZ2V0KCRvYy1waW5rLWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIEdyYXBlXFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy1ncmFwZS1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNmOGYwZmMsXFxuICBcXFwiMVxcXCI6ICNmM2Q5ZmEsXFxuICBcXFwiMlxcXCI6ICNlZWJlZmEsXFxuICBcXFwiM1xcXCI6ICNlNTk5ZjcsXFxuICBcXFwiNFxcXCI6ICNkYTc3ZjIsXFxuICBcXFwiNVxcXCI6ICNjYzVkZTgsXFxuICBcXFwiNlxcXCI6ICNiZTRiZGIsXFxuICBcXFwiN1xcXCI6ICNhZTNlYzksXFxuICBcXFwiOFxcXCI6ICM5YzM2YjUsXFxuICBcXFwiOVxcXCI6ICM4NjJlOWNcXG4pO1xcblxcbiRvYy1ncmFwZS0wOiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiMFxcXCIpO1xcbiRvYy1ncmFwZS0xOiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy1ncmFwZS0yOiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy1ncmFwZS0zOiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiM1xcXCIpO1xcbiRvYy1ncmFwZS00OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy1ncmFwZS01OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy1ncmFwZS02OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiNlxcXCIpO1xcbiRvYy1ncmFwZS03OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy1ncmFwZS04OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy1ncmFwZS05OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiOVxcXCIpO1xcblxcblxcbi8vICBWaW9sZXRcXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLXZpb2xldC1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNmM2YwZmYsXFxuICBcXFwiMVxcXCI6ICNlNWRiZmYsXFxuICBcXFwiMlxcXCI6ICNkMGJmZmYsXFxuICBcXFwiM1xcXCI6ICNiMTk3ZmMsXFxuICBcXFwiNFxcXCI6ICM5Nzc1ZmEsXFxuICBcXFwiNVxcXCI6ICM4NDVlZjcsXFxuICBcXFwiNlxcXCI6ICM3OTUwZjIsXFxuICBcXFwiN1xcXCI6ICM3MDQ4ZTgsXFxuICBcXFwiOFxcXCI6ICM2NzQxZDksXFxuICBcXFwiOVxcXCI6ICM1ZjNkYzRcXG4pO1xcblxcbiRvYy12aW9sZXQtMDogbWFwLWdldCgkb2MtdmlvbGV0LWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLXZpb2xldC0xOiBtYXAtZ2V0KCRvYy12aW9sZXQtbGlzdCwgXFxcIjFcXFwiKTtcXG4kb2MtdmlvbGV0LTI6IG1hcC1nZXQoJG9jLXZpb2xldC1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy12aW9sZXQtMzogbWFwLWdldCgkb2MtdmlvbGV0LWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLXZpb2xldC00OiBtYXAtZ2V0KCRvYy12aW9sZXQtbGlzdCwgXFxcIjRcXFwiKTtcXG4kb2MtdmlvbGV0LTU6IG1hcC1nZXQoJG9jLXZpb2xldC1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy12aW9sZXQtNjogbWFwLWdldCgkb2MtdmlvbGV0LWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLXZpb2xldC03OiBtYXAtZ2V0KCRvYy12aW9sZXQtbGlzdCwgXFxcIjdcXFwiKTtcXG4kb2MtdmlvbGV0LTg6IG1hcC1nZXQoJG9jLXZpb2xldC1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy12aW9sZXQtOTogbWFwLWdldCgkb2MtdmlvbGV0LWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIEluZGlnb1xcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MtaW5kaWdvLWxpc3Q6IChcXG4gIFxcXCIwXFxcIjogI2VkZjJmZixcXG4gIFxcXCIxXFxcIjogI2RiZTRmZixcXG4gIFxcXCIyXFxcIjogI2JhYzhmZixcXG4gIFxcXCIzXFxcIjogIzkxYTdmZixcXG4gIFxcXCI0XFxcIjogIzc0OGZmYyxcXG4gIFxcXCI1XFxcIjogIzVjN2NmYSxcXG4gIFxcXCI2XFxcIjogIzRjNmVmNSxcXG4gIFxcXCI3XFxcIjogIzQyNjNlYixcXG4gIFxcXCI4XFxcIjogIzNiNWJkYixcXG4gIFxcXCI5XFxcIjogIzM2NGZjN1xcbik7XFxuXFxuJG9jLWluZGlnby0wOiBtYXAtZ2V0KCRvYy1pbmRpZ28tbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MtaW5kaWdvLTE6IG1hcC1nZXQoJG9jLWluZGlnby1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy1pbmRpZ28tMjogbWFwLWdldCgkb2MtaW5kaWdvLWxpc3QsIFxcXCIyXFxcIik7XFxuJG9jLWluZGlnby0zOiBtYXAtZ2V0KCRvYy1pbmRpZ28tbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MtaW5kaWdvLTQ6IG1hcC1nZXQoJG9jLWluZGlnby1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy1pbmRpZ28tNTogbWFwLWdldCgkb2MtaW5kaWdvLWxpc3QsIFxcXCI1XFxcIik7XFxuJG9jLWluZGlnby02OiBtYXAtZ2V0KCRvYy1pbmRpZ28tbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MtaW5kaWdvLTc6IG1hcC1nZXQoJG9jLWluZGlnby1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy1pbmRpZ28tODogbWFwLWdldCgkb2MtaW5kaWdvLWxpc3QsIFxcXCI4XFxcIik7XFxuJG9jLWluZGlnby05OiBtYXAtZ2V0KCRvYy1pbmRpZ28tbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgQmx1ZVxcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MtYmx1ZS1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNlN2Y1ZmYsXFxuICBcXFwiMVxcXCI6ICNkMGViZmYsXFxuICBcXFwiMlxcXCI6ICNhNWQ4ZmYsXFxuICBcXFwiM1xcXCI6ICM3NGMwZmMsXFxuICBcXFwiNFxcXCI6ICM0ZGFiZjcsXFxuICBcXFwiNVxcXCI6ICMzMzlhZjAsXFxuICBcXFwiNlxcXCI6ICMyMjhiZTYsXFxuICBcXFwiN1xcXCI6ICMxYzdlZDYsXFxuICBcXFwiOFxcXCI6ICMxOTcxYzIsXFxuICBcXFwiOVxcXCI6ICMxODY0YWJcXG4pO1xcblxcbiRvYy1ibHVlLTA6IG1hcC1nZXQoJG9jLWJsdWUtbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MtYmx1ZS0xOiBtYXAtZ2V0KCRvYy1ibHVlLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLWJsdWUtMjogbWFwLWdldCgkb2MtYmx1ZS1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy1ibHVlLTM6IG1hcC1nZXQoJG9jLWJsdWUtbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MtYmx1ZS00OiBtYXAtZ2V0KCRvYy1ibHVlLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLWJsdWUtNTogbWFwLWdldCgkb2MtYmx1ZS1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy1ibHVlLTY6IG1hcC1nZXQoJG9jLWJsdWUtbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MtYmx1ZS03OiBtYXAtZ2V0KCRvYy1ibHVlLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLWJsdWUtODogbWFwLWdldCgkb2MtYmx1ZS1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy1ibHVlLTk6IG1hcC1nZXQoJG9jLWJsdWUtbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgQ3lhblxcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MtY3lhbi1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNlM2ZhZmMsXFxuICBcXFwiMVxcXCI6ICNjNWY2ZmEsXFxuICBcXFwiMlxcXCI6ICM5OWU5ZjIsXFxuICBcXFwiM1xcXCI6ICM2NmQ5ZTgsXFxuICBcXFwiNFxcXCI6ICMzYmM5ZGIsXFxuICBcXFwiNVxcXCI6ICMyMmI4Y2YsXFxuICBcXFwiNlxcXCI6ICMxNWFhYmYsXFxuICBcXFwiN1xcXCI6ICMxMDk4YWQsXFxuICBcXFwiOFxcXCI6ICMwYzg1OTksXFxuICBcXFwiOVxcXCI6ICMwYjcyODVcXG4pO1xcblxcbiRvYy1jeWFuLTA6IG1hcC1nZXQoJG9jLWN5YW4tbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MtY3lhbi0xOiBtYXAtZ2V0KCRvYy1jeWFuLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLWN5YW4tMjogbWFwLWdldCgkb2MtY3lhbi1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy1jeWFuLTM6IG1hcC1nZXQoJG9jLWN5YW4tbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MtY3lhbi00OiBtYXAtZ2V0KCRvYy1jeWFuLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLWN5YW4tNTogbWFwLWdldCgkb2MtY3lhbi1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy1jeWFuLTY6IG1hcC1nZXQoJG9jLWN5YW4tbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MtY3lhbi03OiBtYXAtZ2V0KCRvYy1jeWFuLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLWN5YW4tODogbWFwLWdldCgkb2MtY3lhbi1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy1jeWFuLTk6IG1hcC1nZXQoJG9jLWN5YW4tbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgVGVhbFxcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MtdGVhbC1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNlNmZjZjUsXFxuICBcXFwiMVxcXCI6ICNjM2ZhZTgsXFxuICBcXFwiMlxcXCI6ICM5NmYyZDcsXFxuICBcXFwiM1xcXCI6ICM2M2U2YmUsXFxuICBcXFwiNFxcXCI6ICMzOGQ5YTksXFxuICBcXFwiNVxcXCI6ICMyMGM5OTcsXFxuICBcXFwiNlxcXCI6ICMxMmI4ODYsXFxuICBcXFwiN1xcXCI6ICMwY2E2NzgsXFxuICBcXFwiOFxcXCI6ICMwOTkyNjgsXFxuICBcXFwiOVxcXCI6ICMwODdmNWJcXG4pO1xcblxcbiRvYy10ZWFsLTA6IG1hcC1nZXQoJG9jLXRlYWwtbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MtdGVhbC0xOiBtYXAtZ2V0KCRvYy10ZWFsLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLXRlYWwtMjogbWFwLWdldCgkb2MtdGVhbC1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy10ZWFsLTM6IG1hcC1nZXQoJG9jLXRlYWwtbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MtdGVhbC00OiBtYXAtZ2V0KCRvYy10ZWFsLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLXRlYWwtNTogbWFwLWdldCgkb2MtdGVhbC1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy10ZWFsLTY6IG1hcC1nZXQoJG9jLXRlYWwtbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MtdGVhbC03OiBtYXAtZ2V0KCRvYy10ZWFsLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLXRlYWwtODogbWFwLWdldCgkb2MtdGVhbC1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy10ZWFsLTk6IG1hcC1nZXQoJG9jLXRlYWwtbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgR3JlZW5cXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLWdyZWVuLWxpc3Q6IChcXG4gIFxcXCIwXFxcIjogI2ViZmJlZSxcXG4gIFxcXCIxXFxcIjogI2QzZjlkOCxcXG4gIFxcXCIyXFxcIjogI2IyZjJiYixcXG4gIFxcXCIzXFxcIjogIzhjZTk5YSxcXG4gIFxcXCI0XFxcIjogIzY5ZGI3YyxcXG4gIFxcXCI1XFxcIjogIzUxY2Y2NixcXG4gIFxcXCI2XFxcIjogIzQwYzA1NyxcXG4gIFxcXCI3XFxcIjogIzM3YjI0ZCxcXG4gIFxcXCI4XFxcIjogIzJmOWU0NCxcXG4gIFxcXCI5XFxcIjogIzJiOGEzZVxcbik7XFxuXFxuJG9jLWdyZWVuLTA6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLWdyZWVuLTE6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLWdyZWVuLTI6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCIyXFxcIik7XFxuJG9jLWdyZWVuLTM6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLWdyZWVuLTQ6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLWdyZWVuLTU6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI1XFxcIik7XFxuJG9jLWdyZWVuLTY6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLWdyZWVuLTc6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLWdyZWVuLTg6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI4XFxcIik7XFxuJG9jLWdyZWVuLTk6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIExpbWVcXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLWxpbWUtbGlzdDogKFxcbiAgXFxcIjBcXFwiOiAjZjRmY2UzLFxcbiAgXFxcIjFcXFwiOiAjZTlmYWM4LFxcbiAgXFxcIjJcXFwiOiAjZDhmNWEyLFxcbiAgXFxcIjNcXFwiOiAjYzBlYjc1LFxcbiAgXFxcIjRcXFwiOiAjYTllMzRiLFxcbiAgXFxcIjVcXFwiOiAjOTRkODJkLFxcbiAgXFxcIjZcXFwiOiAjODJjOTFlLFxcbiAgXFxcIjdcXFwiOiAjNzRiODE2LFxcbiAgXFxcIjhcXFwiOiAjNjZhODBmLFxcbiAgXFxcIjlcXFwiOiAjNWM5NDBkXFxuKTtcXG5cXG4kb2MtbGltZS0wOiBtYXAtZ2V0KCRvYy1saW1lLWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLWxpbWUtMTogbWFwLWdldCgkb2MtbGltZS1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy1saW1lLTI6IG1hcC1nZXQoJG9jLWxpbWUtbGlzdCwgXFxcIjJcXFwiKTtcXG4kb2MtbGltZS0zOiBtYXAtZ2V0KCRvYy1saW1lLWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLWxpbWUtNDogbWFwLWdldCgkb2MtbGltZS1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy1saW1lLTU6IG1hcC1nZXQoJG9jLWxpbWUtbGlzdCwgXFxcIjVcXFwiKTtcXG4kb2MtbGltZS02OiBtYXAtZ2V0KCRvYy1saW1lLWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLWxpbWUtNzogbWFwLWdldCgkb2MtbGltZS1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy1saW1lLTg6IG1hcC1nZXQoJG9jLWxpbWUtbGlzdCwgXFxcIjhcXFwiKTtcXG4kb2MtbGltZS05OiBtYXAtZ2V0KCRvYy1saW1lLWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIFllbGxvd1xcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MteWVsbG93LWxpc3Q6IChcXG4gIFxcXCIwXFxcIjogI2ZmZjlkYixcXG4gIFxcXCIxXFxcIjogI2ZmZjNiZixcXG4gIFxcXCIyXFxcIjogI2ZmZWM5OSxcXG4gIFxcXCIzXFxcIjogI2ZmZTA2NixcXG4gIFxcXCI0XFxcIjogI2ZmZDQzYixcXG4gIFxcXCI1XFxcIjogI2ZjYzQxOSxcXG4gIFxcXCI2XFxcIjogI2ZhYjAwNSxcXG4gIFxcXCI3XFxcIjogI2Y1OWYwMCxcXG4gIFxcXCI4XFxcIjogI2YwOGMwMCxcXG4gIFxcXCI5XFxcIjogI2U2NzcwMFxcbik7XFxuXFxuJG9jLXllbGxvdy0wOiBtYXAtZ2V0KCRvYy15ZWxsb3ctbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MteWVsbG93LTE6IG1hcC1nZXQoJG9jLXllbGxvdy1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy15ZWxsb3ctMjogbWFwLWdldCgkb2MteWVsbG93LWxpc3QsIFxcXCIyXFxcIik7XFxuJG9jLXllbGxvdy0zOiBtYXAtZ2V0KCRvYy15ZWxsb3ctbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MteWVsbG93LTQ6IG1hcC1nZXQoJG9jLXllbGxvdy1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy15ZWxsb3ctNTogbWFwLWdldCgkb2MteWVsbG93LWxpc3QsIFxcXCI1XFxcIik7XFxuJG9jLXllbGxvdy02OiBtYXAtZ2V0KCRvYy15ZWxsb3ctbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MteWVsbG93LTc6IG1hcC1nZXQoJG9jLXllbGxvdy1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy15ZWxsb3ctODogbWFwLWdldCgkb2MteWVsbG93LWxpc3QsIFxcXCI4XFxcIik7XFxuJG9jLXllbGxvdy05OiBtYXAtZ2V0KCRvYy15ZWxsb3ctbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgT3JhbmdlXFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy1vcmFuZ2UtbGlzdDogKFxcbiAgXFxcIjBcXFwiOiAjZmZmNGU2LFxcbiAgXFxcIjFcXFwiOiAjZmZlOGNjLFxcbiAgXFxcIjJcXFwiOiAjZmZkOGE4LFxcbiAgXFxcIjNcXFwiOiAjZmZjMDc4LFxcbiAgXFxcIjRcXFwiOiAjZmZhOTRkLFxcbiAgXFxcIjVcXFwiOiAjZmY5MjJiLFxcbiAgXFxcIjZcXFwiOiAjZmQ3ZTE0LFxcbiAgXFxcIjdcXFwiOiAjZjc2NzA3LFxcbiAgXFxcIjhcXFwiOiAjZTg1OTBjLFxcbiAgXFxcIjlcXFwiOiAjZDk0ODBmXFxuKTtcXG5cXG4kb2Mtb3JhbmdlLTA6IG1hcC1nZXQoJG9jLW9yYW5nZS1saXN0LCBcXFwiMFxcXCIpO1xcbiRvYy1vcmFuZ2UtMTogbWFwLWdldCgkb2Mtb3JhbmdlLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLW9yYW5nZS0yOiBtYXAtZ2V0KCRvYy1vcmFuZ2UtbGlzdCwgXFxcIjJcXFwiKTtcXG4kb2Mtb3JhbmdlLTM6IG1hcC1nZXQoJG9jLW9yYW5nZS1saXN0LCBcXFwiM1xcXCIpO1xcbiRvYy1vcmFuZ2UtNDogbWFwLWdldCgkb2Mtb3JhbmdlLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLW9yYW5nZS01OiBtYXAtZ2V0KCRvYy1vcmFuZ2UtbGlzdCwgXFxcIjVcXFwiKTtcXG4kb2Mtb3JhbmdlLTY6IG1hcC1nZXQoJG9jLW9yYW5nZS1saXN0LCBcXFwiNlxcXCIpO1xcbiRvYy1vcmFuZ2UtNzogbWFwLWdldCgkb2Mtb3JhbmdlLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLW9yYW5nZS04OiBtYXAtZ2V0KCRvYy1vcmFuZ2UtbGlzdCwgXFxcIjhcXFwiKTtcXG4kb2Mtb3JhbmdlLTk6IG1hcC1nZXQoJG9jLW9yYW5nZS1saXN0LCBcXFwiOVxcXCIpO1xcblxcblxcbi8vICBDb2xvciBsaXN0XFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy1jb2xvci1zcGVjdHJ1bTogICA5O1xcblxcbiRvYy1jb2xvci1saXN0OiAoXFxuICAkb2MtZ3JheS1saXN0OiAgICAgIFxcXCJncmF5XFxcIixcXG4gICRvYy1yZWQtbGlzdDogICAgICBcXFwicmVkXFxcIixcXG4gICRvYy1waW5rLWxpc3Q6ICAgICAgXFxcInBpbmtcXFwiLFxcbiAgJG9jLWdyYXBlLWxpc3Q6ICAgICAgXFxcImdyYXBlXFxcIixcXG4gICRvYy12aW9sZXQtbGlzdDogICAgICBcXFwidmlvbGV0XFxcIixcXG4gICRvYy1pbmRpZ28tbGlzdDogICAgICBcXFwiaW5kaWdvXFxcIixcXG4gICRvYy1ibHVlLWxpc3Q6ICAgICAgXFxcImJsdWVcXFwiLFxcbiAgJG9jLWN5YW4tbGlzdDogICAgICBcXFwiY3lhblxcXCIsXFxuICAkb2MtdGVhbC1saXN0OiAgICAgIFxcXCJ0ZWFsXFxcIixcXG4gICRvYy1ncmVlbi1saXN0OiAgICAgIFxcXCJncmVlblxcXCIsXFxuICAkb2MtbGltZS1saXN0OiAgICAgIFxcXCJsaW1lXFxcIixcXG4gICRvYy15ZWxsb3ctbGlzdDogICAgICBcXFwieWVsbG93XFxcIixcXG4gICRvYy1vcmFuZ2UtbGlzdDogICAgICBcXFwib3JhbmdlXFxcIlxcbik7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./node_modules/sass-loader/dist/cjs.js!../../css/styles.scss\n");
|
|
1123
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/getUrl.js */ \"./node_modules/css-loader/dist/runtime/getUrl.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n// Imports\n\n\n\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"292.4\" height=\"292.4\" viewBox=\"0 0 292 292\"><path d=\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\"/></svg> */ \"data:image/svg+xml,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"292.4\\\" height=\\\"292.4\\\" viewBox=\\\"0 0 292 292\\\"><path d=\\\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\\\"/></svg>\"), __webpack_require__.b);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"292.4\" height=\"292.4\" viewBox=\"0 0 292 292\"><path fill=\"%23ced4da\" d=\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\"/></svg> */ \"data:image/svg+xml,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"292.4\\\" height=\\\"292.4\\\" viewBox=\\\"0 0 292 292\\\"><path fill=\\\"%23ced4da\\\" d=\\\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\\\"/></svg>\"), __webpack_require__.b);\nvar ___CSS_LOADER_EXPORT___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":export {\\n themeFilter: invert(93%) hue-rotate(180deg);\\n}\\n\\n:export {\\n themeFilter: invert(93%) hue-rotate(180deg);\\n}\\n\\n.excalidraw {\\n --theme-filter: none;\\n --button-destructive-bg-color: #ffe3e3;\\n --button-destructive-color: #c92a2a;\\n --button-gray-1: #e9ecef;\\n --button-gray-2: #ced4da;\\n --button-gray-3: #adb5bd;\\n --button-special-active-bg-color: #ebfbee;\\n --dialog-border-color: #868e96;\\n --dropdown-icon: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n --focus-highlight-color: #a5d8ff;\\n --icon-fill-color: #000000;\\n --icon-green-fill-color: #2b8a3e;\\n --default-bg-color: #ffffff;\\n --input-bg-color: #ffffff;\\n --input-border-color: #ced4da;\\n --input-hover-bg-color: #f1f3f5;\\n --input-label-color: #495057;\\n --island-bg-color: rgba(255, 255, 255, 0.96);\\n --keybinding-color: #adb5bd;\\n --link-color: #1c7ed6;\\n --overlay-bg-color: rgba(255, 255, 255, 0.88);\\n --popup-bg-color: #ffffff;\\n --popup-secondary-bg-color: #f1f3f5;\\n --popup-text-color: #000000;\\n --popup-text-inverted-color: #ffffff;\\n --sab: env(safe-area-inset-bottom);\\n --sal: env(safe-area-inset-left);\\n --sar: env(safe-area-inset-right);\\n --sat: env(safe-area-inset-top);\\n --select-highlight-color: #339af0;\\n --shadow-island: 0 1px 5px rgba(0, 0, 0, 0.15);\\n --space-factor: 0.25rem;\\n --text-primary-color: #343a40;\\n}\\n.excalidraw.theme--dark {\\n background: #000000;\\n}\\n.excalidraw.theme--dark.theme--dark-background-none {\\n background: none;\\n}\\n.excalidraw.theme--dark {\\n --theme-filter: invert(93%) hue-rotate(180deg);\\n --button-destructive-bg-color: #5a0000;\\n --button-destructive-color: #ffa8a8;\\n --button-gray-1: #363636;\\n --button-gray-2: #272727;\\n --button-gray-3: #222;\\n --button-special-active-bg-color: #204624;\\n --dialog-border-color: #212529;\\n --dropdown-icon: url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \");\\n --focus-highlight-color: #228be6;\\n --icon-fill-color: #ced4da;\\n --icon-green-fill-color: #69db7c;\\n --default-bg-color: #121212;\\n --input-bg-color: #121212;\\n --input-border-color: #2e2e2e;\\n --input-hover-bg-color: #181818;\\n --input-label-color: #e9ecef;\\n --island-bg-color: rgba(30, 30, 30, 0.98);\\n --keybinding-color: #868e96;\\n --link-color: #4dabf7;\\n --overlay-bg-color: rgba(52, 58, 64, 0.12);\\n --popup-bg-color: #2c2c2c;\\n --popup-secondary-bg-color: #222;\\n --popup-text-color: #ced4da;\\n --popup-text-inverted-color: #635c5c;\\n --select-highlight-color: #4dabf7;\\n --shadow-island: 0 1px 5px rgba(0, 0, 0, 0.3);\\n --text-primary-color: #ced4da;\\n}\\n\\n:root {\\n --zIndex-canvas: 1;\\n --zIndex-wysiwyg: 2;\\n --zIndex-layerUI: 3;\\n}\\n\\n.excalidraw {\\n position: relative;\\n overflow: hidden;\\n color: var(--text-primary-color);\\n display: flex;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n height: 100%;\\n width: 100%;\\n user-select: none;\\n}\\n.excalidraw:focus {\\n outline: none;\\n}\\n.excalidraw a {\\n font-weight: 500;\\n text-decoration: none;\\n color: var(--link-color);\\n}\\n.excalidraw a:hover {\\n text-decoration: underline;\\n}\\n.excalidraw canvas {\\n touch-action: none;\\n image-rendering: pixelated;\\n image-rendering: -moz-crisp-edges;\\n z-index: var(--zIndex-canvas);\\n}\\n.excalidraw__canvas {\\n position: absolute;\\n}\\n.excalidraw.theme--dark canvas {\\n filter: var(--theme-filter);\\n}\\n.excalidraw .FixedSideContainer {\\n padding-top: var(--sat, 0);\\n padding-right: var(--sar, 0);\\n padding-bottom: var(--sab, 0);\\n padding-left: var(--sal, 0);\\n}\\n.excalidraw .panelRow {\\n display: flex;\\n justify-content: space-between;\\n}\\n.excalidraw .panelColumn {\\n display: flex;\\n flex-direction: column;\\n}\\n.excalidraw .panelColumn h3,\\n.excalidraw .panelColumn legend,\\n.excalidraw .panelColumn .control-label {\\n margin-top: 0.333rem;\\n margin-bottom: 0.333rem;\\n font-size: 0.75rem;\\n color: var(--text-primary-color);\\n font-weight: bold;\\n display: block;\\n}\\n.excalidraw .panelColumn .control-label input {\\n display: block;\\n width: 100%;\\n}\\n.excalidraw .panelColumn h3:first-child,\\n.excalidraw .panelColumn legend:first-child,\\n.excalidraw .panelColumn .control-label:first-child {\\n margin-top: 0;\\n}\\n.excalidraw .panelColumn legend {\\n padding: 0;\\n}\\n.excalidraw .panelColumn .iconSelectList {\\n flex-wrap: wrap;\\n position: relative;\\n}\\n.excalidraw .panelColumn .buttonList {\\n flex-wrap: wrap;\\n}\\n.excalidraw .panelColumn .buttonList label {\\n margin-right: 0.25rem;\\n font-size: 0.75rem;\\n display: inline-block;\\n}\\n.excalidraw .panelColumn .buttonList input[type=radio],\\n.excalidraw .panelColumn .buttonList input[type=button] {\\n opacity: 0;\\n position: absolute;\\n pointer-events: none;\\n}\\n.excalidraw .panelColumn .buttonList .iconRow {\\n margin-top: 8px;\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon {\\n margin: 0;\\n margin-inline-end: 8px;\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon:hover {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon:active {\\n background-color: var(--button-gray-3);\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon:disabled {\\n cursor: not-allowed;\\n}\\n.excalidraw .panelColumn .buttonList .ToolIcon__icon {\\n width: 28px;\\n height: 28px;\\n}\\n.excalidraw .panelColumn fieldset {\\n margin: 0;\\n margin-top: 0.333rem;\\n padding: 0;\\n border: none;\\n}\\n.excalidraw .divider {\\n width: 1px;\\n background-color: #e9ecef;\\n margin: 1px;\\n}\\n.excalidraw .buttonList label:focus-within,\\n.excalidraw input:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n.excalidraw button,\\n.excalidraw .buttonList label {\\n user-select: none;\\n background-color: var(--button-gray-1);\\n border: 0;\\n border-radius: 4px;\\n margin: 0.125rem 0;\\n padding: 0.25rem;\\n white-space: nowrap;\\n cursor: pointer;\\n}\\n.excalidraw button:focus,\\n.excalidraw .buttonList label:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n.excalidraw button:hover,\\n.excalidraw .buttonList label:hover {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw button:active,\\n.excalidraw .buttonList label:active {\\n background-color: var(--button-gray-3);\\n}\\n.excalidraw button:disabled,\\n.excalidraw .buttonList label:disabled {\\n cursor: not-allowed;\\n}\\n.excalidraw .active,\\n.excalidraw .buttonList label.active {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .active:hover,\\n.excalidraw .buttonList label.active:hover {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .active:active,\\n.excalidraw .buttonList label.active:active {\\n background-color: var(--button-gray-3);\\n}\\n.excalidraw .buttonList.buttonListIcon label {\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.excalidraw .buttonList.buttonListIcon label svg {\\n width: 36px;\\n height: 14px;\\n padding: 2px;\\n opacity: 0.6;\\n}\\n.excalidraw .buttonList.buttonListIcon label.active svg {\\n opacity: 1;\\n}\\n.excalidraw .App-top-bar {\\n z-index: var(--zIndex-layerUI);\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n}\\n.excalidraw .App-bottom-bar {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n --bar-padding: calc(4 * var(--space-factor));\\n padding-top: max(var(--bar-padding), var(--sat,0));\\n padding-right: var(--sar, 0);\\n padding-bottom: var(--sab, 0);\\n padding-left: var(--sal, 0);\\n z-index: 4;\\n display: flex;\\n align-items: flex-end;\\n pointer-events: none;\\n}\\n.excalidraw .App-bottom-bar > .Island {\\n width: 100%;\\n max-width: 100%;\\n min-width: 100%;\\n box-sizing: border-box;\\n max-height: 100%;\\n display: flex;\\n flex-direction: column;\\n pointer-events: initial;\\n}\\n.excalidraw .App-bottom-bar > .Island .panelColumn {\\n padding: 8px 8px 0 8px;\\n}\\n.excalidraw .App-toolbar {\\n width: 100%;\\n box-sizing: border-box;\\n}\\n.excalidraw .App-toolbar-content {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 8px;\\n}\\n.excalidraw .App-mobile-menu {\\n width: 100%;\\n overflow-x: visible;\\n overflow-y: auto;\\n box-sizing: border-box;\\n margin-bottom: var(--bar-padding);\\n}\\n.excalidraw .App-menu {\\n display: grid;\\n color: var(--icon-fill-color);\\n}\\n.excalidraw .App-menu_top {\\n grid-template-columns: auto max-content auto;\\n grid-gap: 4px;\\n align-items: flex-start;\\n cursor: default;\\n pointer-events: none !important;\\n}\\n.excalidraw .layer-ui__wrapper:not(.disable-pointerEvents) .App-menu_top > * {\\n pointer-events: all;\\n}\\n.excalidraw .App-menu_top > *:first-child {\\n justify-self: flex-start;\\n}\\n.excalidraw .App-menu_top > *:last-child {\\n justify-self: flex-end;\\n}\\n.excalidraw .App-menu_bottom {\\n position: absolute;\\n bottom: 0;\\n grid-template-columns: min-content auto min-content;\\n grid-gap: 15px;\\n align-items: flex-start;\\n cursor: default;\\n pointer-events: none !important;\\n z-index: 100;\\n}\\n:root[dir=ltr] .excalidraw .App-menu_bottom {\\n left: 0.25rem;\\n}\\n:root[dir=rtl] .excalidraw .App-menu_bottom {\\n right: 0.25rem;\\n}\\n.excalidraw .App-menu_bottom--transition-left section {\\n width: 185px;\\n}\\n.excalidraw .App-menu_bottom section {\\n display: flex;\\n}\\n.excalidraw .App-menu_bottom > *:first-child {\\n justify-self: flex-start;\\n}\\n.excalidraw .App-menu_bottom > *:last-child {\\n justify-self: flex-end;\\n}\\n.excalidraw .App-menu_left {\\n grid-template-rows: 1fr auto 1fr;\\n height: 100%;\\n}\\n.excalidraw .App-menu_right {\\n grid-template-rows: 1fr;\\n height: 100%;\\n}\\n.excalidraw .App-menu__left {\\n overflow-y: auto;\\n}\\n.excalidraw .dropdown-select {\\n height: 1.5rem;\\n padding: 0;\\n padding-inline-start: 0.5rem;\\n padding-inline-end: 1.5rem;\\n color: var(--icon-fill-color);\\n background-color: var(--button-gray-1);\\n border-radius: var(--space-factor);\\n border: 1px solid var(--button-gray-2);\\n font-size: 0.8rem;\\n outline: none;\\n appearance: none;\\n background-image: var(--dropdown-icon);\\n background-repeat: no-repeat;\\n background-position: right 0.7rem top 50%, 0 0;\\n background-size: 0.65em auto, 100%;\\n}\\n:root[dir=rtl] .excalidraw .dropdown-select {\\n background-position: left 0.7rem top 50%, 0 0;\\n}\\n.excalidraw .dropdown-select:focus {\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n.excalidraw .dropdown-select:hover {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .dropdown-select:active {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .zIndexButton {\\n margin: 0;\\n margin-inline-end: 8px;\\n padding: 5px;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.excalidraw .zIndexButton svg {\\n width: 18px;\\n height: 18px;\\n}\\n.excalidraw .scroll-back-to-content {\\n color: var(--popup-text-color);\\n position: absolute;\\n left: 50%;\\n bottom: 30px;\\n transform: translateX(-50%);\\n padding: 10px 20px;\\n}\\n.excalidraw .help-icon {\\n display: flex;\\n cursor: pointer;\\n fill: #868e96;\\n padding: 0;\\n margin: 0;\\n background: none;\\n color: var(--icon-fill-color);\\n}\\n.excalidraw .help-icon svg {\\n width: 1.5rem;\\n height: 1.5rem;\\n}\\n.excalidraw .help-icon:hover {\\n background: none;\\n}\\n.excalidraw .reset-zoom-button {\\n padding: 0.2em;\\n background: transparent;\\n color: var(--text-primary-color);\\n font-family: var(--ui-font);\\n}\\n.excalidraw .undo-redo-buttons {\\n display: grid;\\n grid-auto-flow: column;\\n gap: 0.4em;\\n margin-top: auto;\\n margin-bottom: auto;\\n margin-inline-start: 0.6em;\\n}\\n.excalidraw--mobile.excalidraw aside {\\n display: none;\\n}\\n.excalidraw--mobile.excalidraw .scroll-back-to-content {\\n bottom: calc(80px + var(--sab, 0));\\n z-index: -1;\\n}\\n\\n:root[dir=rtl] .excalidraw .rtl-mirror {\\n transform: scaleX(-1);\\n}\\n.excalidraw .zen-mode-visibility {\\n visibility: visible;\\n opacity: 1;\\n height: auto;\\n width: auto;\\n transition: opacity 0.5s;\\n}\\n.excalidraw .zen-mode-visibility.zen-mode-visibility--hidden {\\n visibility: hidden;\\n opacity: 0;\\n height: 0;\\n width: 0;\\n transition: opacity 0.5s;\\n}\\n.excalidraw .disable-pointerEvents {\\n pointer-events: none !important;\\n}\\n.excalidraw.excalidraw--view-mode .App-menu {\\n display: flex;\\n justify-content: space-between;\\n}\\n.excalidraw input[type=text],\\n.excalidraw textarea:not(.excalidraw-wysiwyg) {\\n color: var(--text-primary-color);\\n border: 1.5px solid var(--input-border-color);\\n padding: 0.75rem;\\n white-space: nowrap;\\n border-radius: var(--space-factor);\\n background-color: var(--input-bg-color);\\n}\\n.excalidraw input[type=text]:not(:focus):hover,\\n.excalidraw textarea:not(.excalidraw-wysiwyg):not(:focus):hover {\\n background-color: var(--input-hover-bg-color);\\n}\\n.excalidraw input[type=text]:focus,\\n.excalidraw textarea:not(.excalidraw-wysiwyg):focus {\\n outline: none;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n}\\n@media print {\\n .excalidraw .App-bottom-bar,\\n.excalidraw .FixedSideContainer,\\n.excalidraw .layer-ui__wrapper {\\n display: none;\\n }\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating {\\n display: inline-block;\\n position: absolute;\\n top: 60px;\\n left: calc(-2 * var(--space-factor));\\n border-radius: 0 20px 20px 0;\\n background-color: var(--button-gray-1);\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating:hover {\\n background-color: var(--button-gray-1);\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating:active {\\n background-color: var(--button-gray-2);\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating .ToolIcon__icon {\\n border-radius: inherit;\\n}\\n.excalidraw .HomeButton.ToolIcon.ToolIcon_type_floating svg {\\n position: static;\\n}\\n\\n.ErrorSplash.excalidraw {\\n min-height: 100vh;\\n padding: 20px 0;\\n overflow: auto;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n user-select: text;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-messageContainer {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n padding: 40px;\\n background-color: #ffe3e3;\\n border: 3px solid #c92a2a;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-paragraph {\\n margin: 15px 0;\\n max-width: 600px;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-paragraph.align-center {\\n text-align: center;\\n}\\n.ErrorSplash.excalidraw .bigger,\\n.ErrorSplash.excalidraw .bigger button {\\n font-size: 1.1em;\\n}\\n.ErrorSplash.excalidraw .smaller,\\n.ErrorSplash.excalidraw .smaller button {\\n font-size: 0.9em;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-details {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n}\\n.ErrorSplash.excalidraw .ErrorSplash-details textarea {\\n width: 100%;\\n margin: 10px 0;\\n font-family: \\\"Cascadia\\\";\\n font-size: 0.8em;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../css/variables.module.scss\",\"webpack://./../../css/styles.scss\",\"webpack://./../../css/theme.scss\",\"webpack://./../../../node_modules/open-color/open-color.scss\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"@import \\\"open-color/open-color.scss\\\";\\n\\n@mixin isMobile() {\\n @at-root .excalidraw--mobile#{&} {\\n @content;\\n }\\n}\\n\\n$theme-filter: \\\"invert(93%) hue-rotate(180deg)\\\";\\n\\n:export {\\n themeFilter: unquote($theme-filter);\\n}\\n\",\"@import \\\"./variables.module\\\";\\n@import \\\"./theme\\\";\\n\\n:root {\\n --zIndex-canvas: 1;\\n --zIndex-wysiwyg: 2;\\n --zIndex-layerUI: 3;\\n}\\n\\n.excalidraw {\\n position: relative;\\n overflow: hidden;\\n color: var(--text-primary-color);\\n display: flex;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n height: 100%;\\n width: 100%;\\n\\n &:focus {\\n outline: none;\\n }\\n\\n // serves 2 purposes:\\n // 1. prevent selecting text outside the component when double-clicking or\\n // dragging inside it (e.g. on canvas)\\n // 2. prevent selecting UI, both from the inside, and from outside the\\n // component (e.g. if you select text in a sidebar)\\n user-select: none;\\n\\n a {\\n font-weight: 500;\\n text-decoration: none;\\n color: var(--link-color);\\n\\n &:hover {\\n text-decoration: underline;\\n }\\n }\\n\\n canvas {\\n touch-action: none;\\n\\n // following props improve blurriness at certain devicePixelRatios.\\n // AFAIK it doesn't affect export (in fact, export seems sharp either way).\\n\\n image-rendering: pixelated; // chromium\\n // NOTE: must be declared *after* the above\\n image-rendering: -moz-crisp-edges; // FF\\n\\n z-index: var(--zIndex-canvas);\\n\\n // Remove the main canvas from document flow to avoid resizeObserver\\n // feedback loop (see https://github.com/excalidraw/excalidraw/pull/3379)\\n }\\n\\n &__canvas {\\n position: absolute;\\n }\\n\\n &.theme--dark {\\n // The percentage is inspired by\\n // https://material.io/design/color/dark-theme.html#properties, which\\n // recommends surface color of #121212, 93% yields #111111 for #FFF\\n\\n canvas {\\n filter: var(--theme-filter);\\n }\\n }\\n\\n .FixedSideContainer {\\n padding-top: var(--sat, 0);\\n padding-right: var(--sar, 0);\\n padding-bottom: var(--sab, 0);\\n padding-left: var(--sal, 0);\\n }\\n\\n .panelRow {\\n display: flex;\\n justify-content: space-between;\\n }\\n\\n .panelColumn {\\n display: flex;\\n flex-direction: column;\\n\\n h3,\\n legend,\\n .control-label {\\n margin-top: 0.333rem;\\n margin-bottom: 0.333rem;\\n font-size: 0.75rem;\\n color: var(--text-primary-color);\\n font-weight: bold;\\n display: block;\\n }\\n\\n .control-label input {\\n display: block;\\n width: 100%;\\n }\\n\\n h3:first-child,\\n legend:first-child,\\n .control-label:first-child {\\n margin-top: 0;\\n }\\n\\n legend {\\n padding: 0;\\n }\\n\\n .iconSelectList {\\n flex-wrap: wrap;\\n position: relative;\\n }\\n\\n .buttonList {\\n flex-wrap: wrap;\\n\\n label {\\n margin-right: 0.25rem;\\n font-size: 0.75rem;\\n display: inline-block;\\n }\\n\\n input[type=\\\"radio\\\"],\\n input[type=\\\"button\\\"] {\\n opacity: 0;\\n position: absolute;\\n pointer-events: none;\\n }\\n\\n .iconRow {\\n margin-top: 8px;\\n }\\n\\n .ToolIcon {\\n margin: 0;\\n margin-inline-end: 8px;\\n\\n &:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n\\n &:hover {\\n background-color: var(--button-gray-2);\\n }\\n\\n &:active {\\n background-color: var(--button-gray-3);\\n }\\n\\n &:disabled {\\n cursor: not-allowed;\\n }\\n }\\n\\n .ToolIcon__icon {\\n width: 28px;\\n height: 28px;\\n }\\n }\\n\\n fieldset {\\n margin: 0;\\n margin-top: 0.333rem;\\n padding: 0;\\n border: none;\\n }\\n }\\n\\n .divider {\\n width: 1px;\\n background-color: $oc-gray-2;\\n margin: 1px;\\n }\\n\\n .buttonList label:focus-within,\\n input:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n\\n button,\\n .buttonList label {\\n user-select: none;\\n background-color: var(--button-gray-1);\\n border: 0;\\n border-radius: 4px;\\n margin: 0.125rem 0;\\n padding: 0.25rem;\\n white-space: nowrap;\\n\\n cursor: pointer;\\n\\n &:focus {\\n outline: transparent;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n\\n &:hover {\\n background-color: var(--button-gray-2);\\n }\\n\\n &:active {\\n background-color: var(--button-gray-3);\\n }\\n\\n &:disabled {\\n cursor: not-allowed;\\n }\\n }\\n\\n .active,\\n .buttonList label.active {\\n background-color: var(--button-gray-2);\\n\\n &:hover {\\n background-color: var(--button-gray-2);\\n }\\n\\n &:active {\\n background-color: var(--button-gray-3);\\n }\\n }\\n\\n .buttonList.buttonListIcon {\\n label {\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n svg {\\n width: 36px;\\n height: 14px;\\n padding: 2px;\\n opacity: 0.6;\\n }\\n &.active svg {\\n opacity: 1;\\n }\\n }\\n }\\n\\n .App-top-bar {\\n z-index: var(--zIndex-layerUI);\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n }\\n\\n .App-bottom-bar {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n --bar-padding: calc(4 * var(--space-factor));\\n padding-top: #{\\\"max(var(--bar-padding), var(--sat,0))\\\"};\\n padding-right: var(--sar, 0);\\n padding-bottom: var(--sab, 0);\\n padding-left: var(--sal, 0);\\n z-index: 4;\\n display: flex;\\n align-items: flex-end;\\n pointer-events: none;\\n\\n > .Island {\\n width: 100%;\\n max-width: 100%;\\n min-width: 100%;\\n box-sizing: border-box;\\n max-height: 100%;\\n display: flex;\\n flex-direction: column;\\n pointer-events: initial;\\n\\n .panelColumn {\\n padding: 8px 8px 0 8px;\\n }\\n }\\n }\\n\\n .App-toolbar {\\n width: 100%;\\n\\n box-sizing: border-box;\\n }\\n\\n .App-toolbar-content {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 8px;\\n }\\n\\n .App-mobile-menu {\\n width: 100%;\\n overflow-x: visible;\\n overflow-y: auto;\\n box-sizing: border-box;\\n margin-bottom: var(--bar-padding);\\n }\\n\\n .App-menu {\\n display: grid;\\n color: var(--icon-fill-color);\\n }\\n\\n .App-menu_top {\\n grid-template-columns: auto max-content auto;\\n grid-gap: 4px;\\n align-items: flex-start;\\n cursor: default;\\n pointer-events: none !important;\\n }\\n\\n .layer-ui__wrapper:not(.disable-pointerEvents) .App-menu_top > * {\\n pointer-events: all;\\n }\\n\\n .App-menu_top > *:first-child {\\n justify-self: flex-start;\\n }\\n\\n .App-menu_top > *:last-child {\\n justify-self: flex-end;\\n }\\n\\n .App-menu_bottom {\\n position: absolute;\\n bottom: 0;\\n grid-template-columns: min-content auto min-content;\\n grid-gap: 15px;\\n align-items: flex-start;\\n cursor: default;\\n pointer-events: none !important;\\n z-index: 100;\\n\\n :root[dir=\\\"ltr\\\"] & {\\n left: 0.25rem;\\n }\\n\\n :root[dir=\\\"rtl\\\"] & {\\n right: 0.25rem;\\n }\\n\\n &--transition-left {\\n section {\\n width: 185px;\\n }\\n }\\n\\n section {\\n display: flex;\\n }\\n }\\n\\n .App-menu_bottom > *:first-child {\\n justify-self: flex-start;\\n }\\n\\n .App-menu_bottom > *:last-child {\\n justify-self: flex-end;\\n }\\n\\n .App-menu_left {\\n grid-template-rows: 1fr auto 1fr;\\n height: 100%;\\n }\\n\\n .App-menu_right {\\n grid-template-rows: 1fr;\\n height: 100%;\\n }\\n\\n .App-menu__left {\\n overflow-y: auto;\\n }\\n\\n .dropdown-select {\\n height: 1.5rem;\\n padding: 0;\\n padding-inline-start: 0.5rem;\\n padding-inline-end: 1.5rem;\\n color: var(--icon-fill-color);\\n background-color: var(--button-gray-1);\\n border-radius: var(--space-factor);\\n border: 1px solid var(--button-gray-2);\\n font-size: 0.8rem;\\n outline: none;\\n appearance: none;\\n background-image: var(--dropdown-icon);\\n background-repeat: no-repeat;\\n background-position: right 0.7rem top 50%, 0 0;\\n\\n :root[dir=\\\"rtl\\\"] & {\\n background-position: left 0.7rem top 50%, 0 0;\\n }\\n\\n background-size: 0.65em auto, 100%;\\n\\n &:focus {\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n\\n &:hover {\\n background-color: var(--button-gray-2);\\n }\\n\\n &:active {\\n background-color: var(--button-gray-2);\\n }\\n }\\n\\n .zIndexButton {\\n margin: 0;\\n margin-inline-end: 8px;\\n padding: 5px;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n\\n svg {\\n width: 18px;\\n height: 18px;\\n }\\n }\\n\\n .scroll-back-to-content {\\n color: var(--popup-text-color);\\n position: absolute;\\n left: 50%;\\n bottom: 30px;\\n transform: translateX(-50%);\\n padding: 10px 20px;\\n }\\n\\n .help-icon {\\n display: flex;\\n cursor: pointer;\\n fill: $oc-gray-6;\\n padding: 0;\\n margin: 0;\\n background: none;\\n color: var(--icon-fill-color);\\n\\n svg {\\n width: 1.5rem;\\n height: 1.5rem;\\n }\\n\\n &:hover {\\n background: none;\\n }\\n }\\n\\n .reset-zoom-button {\\n padding: 0.2em;\\n background: transparent;\\n color: var(--text-primary-color);\\n font-family: var(--ui-font);\\n }\\n\\n .undo-redo-buttons {\\n display: grid;\\n grid-auto-flow: column;\\n gap: 0.4em;\\n margin-top: auto;\\n margin-bottom: auto;\\n margin-inline-start: 0.6em;\\n }\\n\\n @include isMobile {\\n aside {\\n display: none;\\n }\\n .scroll-back-to-content {\\n bottom: calc(80px + var(--sab, 0));\\n z-index: -1;\\n }\\n }\\n\\n .rtl-mirror {\\n :root[dir=\\\"rtl\\\"] & {\\n transform: scaleX(-1);\\n }\\n }\\n\\n .zen-mode-visibility {\\n visibility: visible;\\n opacity: 1;\\n height: auto;\\n width: auto;\\n transition: opacity 0.5s;\\n\\n &.zen-mode-visibility--hidden {\\n visibility: hidden;\\n opacity: 0;\\n height: 0;\\n width: 0;\\n transition: opacity 0.5s;\\n }\\n }\\n\\n .disable-pointerEvents {\\n pointer-events: none !important;\\n }\\n\\n &.excalidraw--view-mode {\\n .App-menu {\\n display: flex;\\n justify-content: space-between;\\n }\\n }\\n\\n input[type=\\\"text\\\"],\\n textarea:not(.excalidraw-wysiwyg) {\\n color: var(--text-primary-color);\\n border: 1.5px solid var(--input-border-color);\\n padding: 0.75rem;\\n white-space: nowrap;\\n border-radius: var(--space-factor);\\n background-color: var(--input-bg-color);\\n\\n &:not(:focus) {\\n &:hover {\\n background-color: var(--input-hover-bg-color);\\n }\\n }\\n\\n &:focus {\\n outline: none;\\n box-shadow: 0 0 0 2px var(--focus-highlight-color);\\n }\\n }\\n\\n @media print {\\n .App-bottom-bar,\\n .FixedSideContainer,\\n .layer-ui__wrapper {\\n display: none;\\n }\\n }\\n\\n .HomeButton.ToolIcon.ToolIcon_type_floating {\\n display: inline-block;\\n position: absolute;\\n top: 60px;\\n left: calc(-2 * var(--space-factor));\\n border-radius: 0 20px 20px 0;\\n\\n background-color: var(--button-gray-1);\\n &:hover {\\n background-color: var(--button-gray-1);\\n }\\n &:active {\\n background-color: var(--button-gray-2);\\n }\\n\\n .ToolIcon__icon {\\n border-radius: inherit;\\n }\\n svg {\\n position: static;\\n }\\n }\\n}\\n\\n.ErrorSplash.excalidraw {\\n min-height: 100vh;\\n padding: 20px 0;\\n overflow: auto;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n user-select: text;\\n\\n .ErrorSplash-messageContainer {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n\\n padding: 40px;\\n background-color: $oc-red-1;\\n border: 3px solid $oc-red-9;\\n }\\n\\n .ErrorSplash-paragraph {\\n margin: 15px 0;\\n max-width: 600px;\\n\\n &.align-center {\\n text-align: center;\\n }\\n }\\n\\n .bigger,\\n .bigger button {\\n font-size: 1.1em;\\n }\\n\\n .smaller,\\n .smaller button {\\n font-size: 0.9em;\\n }\\n\\n .ErrorSplash-details {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n\\n textarea {\\n width: 100%;\\n margin: 10px 0;\\n font-family: \\\"Cascadia\\\";\\n font-size: 0.8em;\\n }\\n }\\n}\\n\",\"@import \\\"open-color/open-color.scss\\\";\\n@import \\\"./variables.module.scss\\\";\\n\\n.excalidraw {\\n --theme-filter: none;\\n --button-destructive-bg-color: #{$oc-red-1};\\n --button-destructive-color: #{$oc-red-9};\\n --button-gray-1: #{$oc-gray-2};\\n --button-gray-2: #{$oc-gray-4};\\n --button-gray-3: #{$oc-gray-5};\\n --button-special-active-bg-color: #{$oc-green-0};\\n --dialog-border-color: #{$oc-gray-6};\\n --dropdown-icon: url('data:image/svg+xml,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"292.4\\\" height=\\\"292.4\\\" viewBox=\\\"0 0 292 292\\\"><path d=\\\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\\\"/></svg>');\\n --focus-highlight-color: #{$oc-blue-2};\\n --icon-fill-color: #{$oc-black};\\n --icon-green-fill-color: #{$oc-green-9};\\n --default-bg-color: #{$oc-white};\\n --input-bg-color: #{$oc-white};\\n --input-border-color: #{$oc-gray-4};\\n --input-hover-bg-color: #{$oc-gray-1};\\n --input-label-color: #{$oc-gray-7};\\n --island-bg-color: rgba(255, 255, 255, 0.96);\\n --keybinding-color: #{$oc-gray-5};\\n --link-color: #{$oc-blue-7};\\n --overlay-bg-color: #{transparentize($oc-white, 0.12)};\\n --popup-bg-color: #{$oc-white};\\n --popup-secondary-bg-color: #{$oc-gray-1};\\n --popup-text-color: #{$oc-black};\\n --popup-text-inverted-color: #{$oc-white};\\n --sab: env(safe-area-inset-bottom);\\n --sal: env(safe-area-inset-left);\\n --sar: env(safe-area-inset-right);\\n --sat: env(safe-area-inset-top);\\n --select-highlight-color: #{$oc-blue-5};\\n --shadow-island: 0 1px 5px #{transparentize($oc-black, 0.85)};\\n --space-factor: 0.25rem;\\n --text-primary-color: #{$oc-gray-8};\\n\\n &.theme--dark {\\n background: $oc-black;\\n\\n &.theme--dark-background-none {\\n background: none;\\n }\\n }\\n\\n &.theme--dark {\\n --theme-filter: #{$theme-filter};\\n --button-destructive-bg-color: #5a0000;\\n --button-destructive-color: #{$oc-red-3};\\n --button-gray-1: #363636;\\n --button-gray-2: #272727;\\n --button-gray-3: #222;\\n --button-special-active-bg-color: #204624;\\n --dialog-border-color: #{$oc-gray-9};\\n --dropdown-icon: url('data:image/svg+xml,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"292.4\\\" height=\\\"292.4\\\" viewBox=\\\"0 0 292 292\\\"><path fill=\\\"%23ced4da\\\" d=\\\"M287 197L159 69c-4-3-8-5-13-5s-9 2-13 5L5 197c-3 4-5 8-5 13s2 9 5 13c4 4 8 5 13 5h256c5 0 9-1 13-5s5-8 5-13-1-9-5-13z\\\"/></svg>');\\n --focus-highlight-color: #{$oc-blue-6};\\n --icon-fill-color: #{$oc-gray-4};\\n --icon-green-fill-color: #{$oc-green-4};\\n --default-bg-color: #121212;\\n --input-bg-color: #121212;\\n --input-border-color: #2e2e2e;\\n --input-hover-bg-color: #181818;\\n --input-label-color: #{$oc-gray-2};\\n --island-bg-color: rgba(30, 30, 30, 0.98);\\n --keybinding-color: #{$oc-gray-6};\\n --link-color: #{$oc-blue-4};\\n --overlay-bg-color: #{transparentize($oc-gray-8, 0.88)};\\n --popup-bg-color: #2c2c2c;\\n --popup-secondary-bg-color: #222;\\n --popup-text-color: #{$oc-gray-4};\\n --popup-text-inverted-color: #635c5c;\\n --select-highlight-color: #{$oc-blue-4};\\n --shadow-island: 0 1px 5px #{transparentize($oc-black, 0.7)};\\n --text-primary-color: #{$oc-gray-4};\\n }\\n}\\n\",\"//\\n//\\n// 𝗖 𝗢 𝗟 𝗢 𝗥\\n// v 1.9.1\\n//\\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n\\n\\n// General\\n// ───────────────────────────────────\\n\\n$oc-white: #ffffff;\\n$oc-black: #000000;\\n\\n\\n// Gray\\n// ───────────────────────────────────\\n\\n$oc-gray-list: (\\n \\\"0\\\": #f8f9fa,\\n \\\"1\\\": #f1f3f5,\\n \\\"2\\\": #e9ecef,\\n \\\"3\\\": #dee2e6,\\n \\\"4\\\": #ced4da,\\n \\\"5\\\": #adb5bd,\\n \\\"6\\\": #868e96,\\n \\\"7\\\": #495057,\\n \\\"8\\\": #343a40,\\n \\\"9\\\": #212529\\n);\\n\\n$oc-gray-0: map-get($oc-gray-list, \\\"0\\\");\\n$oc-gray-1: map-get($oc-gray-list, \\\"1\\\");\\n$oc-gray-2: map-get($oc-gray-list, \\\"2\\\");\\n$oc-gray-3: map-get($oc-gray-list, \\\"3\\\");\\n$oc-gray-4: map-get($oc-gray-list, \\\"4\\\");\\n$oc-gray-5: map-get($oc-gray-list, \\\"5\\\");\\n$oc-gray-6: map-get($oc-gray-list, \\\"6\\\");\\n$oc-gray-7: map-get($oc-gray-list, \\\"7\\\");\\n$oc-gray-8: map-get($oc-gray-list, \\\"8\\\");\\n$oc-gray-9: map-get($oc-gray-list, \\\"9\\\");\\n\\n\\n// Red\\n// ───────────────────────────────────\\n\\n$oc-red-list: (\\n \\\"0\\\": #fff5f5,\\n \\\"1\\\": #ffe3e3,\\n \\\"2\\\": #ffc9c9,\\n \\\"3\\\": #ffa8a8,\\n \\\"4\\\": #ff8787,\\n \\\"5\\\": #ff6b6b,\\n \\\"6\\\": #fa5252,\\n \\\"7\\\": #f03e3e,\\n \\\"8\\\": #e03131,\\n \\\"9\\\": #c92a2a\\n);\\n\\n$oc-red-0: map-get($oc-red-list, \\\"0\\\");\\n$oc-red-1: map-get($oc-red-list, \\\"1\\\");\\n$oc-red-2: map-get($oc-red-list, \\\"2\\\");\\n$oc-red-3: map-get($oc-red-list, \\\"3\\\");\\n$oc-red-4: map-get($oc-red-list, \\\"4\\\");\\n$oc-red-5: map-get($oc-red-list, \\\"5\\\");\\n$oc-red-6: map-get($oc-red-list, \\\"6\\\");\\n$oc-red-7: map-get($oc-red-list, \\\"7\\\");\\n$oc-red-8: map-get($oc-red-list, \\\"8\\\");\\n$oc-red-9: map-get($oc-red-list, \\\"9\\\");\\n\\n\\n// Pink\\n// ───────────────────────────────────\\n\\n$oc-pink-list: (\\n \\\"0\\\": #fff0f6,\\n \\\"1\\\": #ffdeeb,\\n \\\"2\\\": #fcc2d7,\\n \\\"3\\\": #faa2c1,\\n \\\"4\\\": #f783ac,\\n \\\"5\\\": #f06595,\\n \\\"6\\\": #e64980,\\n \\\"7\\\": #d6336c,\\n \\\"8\\\": #c2255c,\\n \\\"9\\\": #a61e4d\\n);\\n\\n$oc-pink-0: map-get($oc-pink-list, \\\"0\\\");\\n$oc-pink-1: map-get($oc-pink-list, \\\"1\\\");\\n$oc-pink-2: map-get($oc-pink-list, \\\"2\\\");\\n$oc-pink-3: map-get($oc-pink-list, \\\"3\\\");\\n$oc-pink-4: map-get($oc-pink-list, \\\"4\\\");\\n$oc-pink-5: map-get($oc-pink-list, \\\"5\\\");\\n$oc-pink-6: map-get($oc-pink-list, \\\"6\\\");\\n$oc-pink-7: map-get($oc-pink-list, \\\"7\\\");\\n$oc-pink-8: map-get($oc-pink-list, \\\"8\\\");\\n$oc-pink-9: map-get($oc-pink-list, \\\"9\\\");\\n\\n\\n// Grape\\n// ───────────────────────────────────\\n\\n$oc-grape-list: (\\n \\\"0\\\": #f8f0fc,\\n \\\"1\\\": #f3d9fa,\\n \\\"2\\\": #eebefa,\\n \\\"3\\\": #e599f7,\\n \\\"4\\\": #da77f2,\\n \\\"5\\\": #cc5de8,\\n \\\"6\\\": #be4bdb,\\n \\\"7\\\": #ae3ec9,\\n \\\"8\\\": #9c36b5,\\n \\\"9\\\": #862e9c\\n);\\n\\n$oc-grape-0: map-get($oc-grape-list, \\\"0\\\");\\n$oc-grape-1: map-get($oc-grape-list, \\\"1\\\");\\n$oc-grape-2: map-get($oc-grape-list, \\\"2\\\");\\n$oc-grape-3: map-get($oc-grape-list, \\\"3\\\");\\n$oc-grape-4: map-get($oc-grape-list, \\\"4\\\");\\n$oc-grape-5: map-get($oc-grape-list, \\\"5\\\");\\n$oc-grape-6: map-get($oc-grape-list, \\\"6\\\");\\n$oc-grape-7: map-get($oc-grape-list, \\\"7\\\");\\n$oc-grape-8: map-get($oc-grape-list, \\\"8\\\");\\n$oc-grape-9: map-get($oc-grape-list, \\\"9\\\");\\n\\n\\n// Violet\\n// ───────────────────────────────────\\n\\n$oc-violet-list: (\\n \\\"0\\\": #f3f0ff,\\n \\\"1\\\": #e5dbff,\\n \\\"2\\\": #d0bfff,\\n \\\"3\\\": #b197fc,\\n \\\"4\\\": #9775fa,\\n \\\"5\\\": #845ef7,\\n \\\"6\\\": #7950f2,\\n \\\"7\\\": #7048e8,\\n \\\"8\\\": #6741d9,\\n \\\"9\\\": #5f3dc4\\n);\\n\\n$oc-violet-0: map-get($oc-violet-list, \\\"0\\\");\\n$oc-violet-1: map-get($oc-violet-list, \\\"1\\\");\\n$oc-violet-2: map-get($oc-violet-list, \\\"2\\\");\\n$oc-violet-3: map-get($oc-violet-list, \\\"3\\\");\\n$oc-violet-4: map-get($oc-violet-list, \\\"4\\\");\\n$oc-violet-5: map-get($oc-violet-list, \\\"5\\\");\\n$oc-violet-6: map-get($oc-violet-list, \\\"6\\\");\\n$oc-violet-7: map-get($oc-violet-list, \\\"7\\\");\\n$oc-violet-8: map-get($oc-violet-list, \\\"8\\\");\\n$oc-violet-9: map-get($oc-violet-list, \\\"9\\\");\\n\\n\\n// Indigo\\n// ───────────────────────────────────\\n\\n$oc-indigo-list: (\\n \\\"0\\\": #edf2ff,\\n \\\"1\\\": #dbe4ff,\\n \\\"2\\\": #bac8ff,\\n \\\"3\\\": #91a7ff,\\n \\\"4\\\": #748ffc,\\n \\\"5\\\": #5c7cfa,\\n \\\"6\\\": #4c6ef5,\\n \\\"7\\\": #4263eb,\\n \\\"8\\\": #3b5bdb,\\n \\\"9\\\": #364fc7\\n);\\n\\n$oc-indigo-0: map-get($oc-indigo-list, \\\"0\\\");\\n$oc-indigo-1: map-get($oc-indigo-list, \\\"1\\\");\\n$oc-indigo-2: map-get($oc-indigo-list, \\\"2\\\");\\n$oc-indigo-3: map-get($oc-indigo-list, \\\"3\\\");\\n$oc-indigo-4: map-get($oc-indigo-list, \\\"4\\\");\\n$oc-indigo-5: map-get($oc-indigo-list, \\\"5\\\");\\n$oc-indigo-6: map-get($oc-indigo-list, \\\"6\\\");\\n$oc-indigo-7: map-get($oc-indigo-list, \\\"7\\\");\\n$oc-indigo-8: map-get($oc-indigo-list, \\\"8\\\");\\n$oc-indigo-9: map-get($oc-indigo-list, \\\"9\\\");\\n\\n\\n// Blue\\n// ───────────────────────────────────\\n\\n$oc-blue-list: (\\n \\\"0\\\": #e7f5ff,\\n \\\"1\\\": #d0ebff,\\n \\\"2\\\": #a5d8ff,\\n \\\"3\\\": #74c0fc,\\n \\\"4\\\": #4dabf7,\\n \\\"5\\\": #339af0,\\n \\\"6\\\": #228be6,\\n \\\"7\\\": #1c7ed6,\\n \\\"8\\\": #1971c2,\\n \\\"9\\\": #1864ab\\n);\\n\\n$oc-blue-0: map-get($oc-blue-list, \\\"0\\\");\\n$oc-blue-1: map-get($oc-blue-list, \\\"1\\\");\\n$oc-blue-2: map-get($oc-blue-list, \\\"2\\\");\\n$oc-blue-3: map-get($oc-blue-list, \\\"3\\\");\\n$oc-blue-4: map-get($oc-blue-list, \\\"4\\\");\\n$oc-blue-5: map-get($oc-blue-list, \\\"5\\\");\\n$oc-blue-6: map-get($oc-blue-list, \\\"6\\\");\\n$oc-blue-7: map-get($oc-blue-list, \\\"7\\\");\\n$oc-blue-8: map-get($oc-blue-list, \\\"8\\\");\\n$oc-blue-9: map-get($oc-blue-list, \\\"9\\\");\\n\\n\\n// Cyan\\n// ───────────────────────────────────\\n\\n$oc-cyan-list: (\\n \\\"0\\\": #e3fafc,\\n \\\"1\\\": #c5f6fa,\\n \\\"2\\\": #99e9f2,\\n \\\"3\\\": #66d9e8,\\n \\\"4\\\": #3bc9db,\\n \\\"5\\\": #22b8cf,\\n \\\"6\\\": #15aabf,\\n \\\"7\\\": #1098ad,\\n \\\"8\\\": #0c8599,\\n \\\"9\\\": #0b7285\\n);\\n\\n$oc-cyan-0: map-get($oc-cyan-list, \\\"0\\\");\\n$oc-cyan-1: map-get($oc-cyan-list, \\\"1\\\");\\n$oc-cyan-2: map-get($oc-cyan-list, \\\"2\\\");\\n$oc-cyan-3: map-get($oc-cyan-list, \\\"3\\\");\\n$oc-cyan-4: map-get($oc-cyan-list, \\\"4\\\");\\n$oc-cyan-5: map-get($oc-cyan-list, \\\"5\\\");\\n$oc-cyan-6: map-get($oc-cyan-list, \\\"6\\\");\\n$oc-cyan-7: map-get($oc-cyan-list, \\\"7\\\");\\n$oc-cyan-8: map-get($oc-cyan-list, \\\"8\\\");\\n$oc-cyan-9: map-get($oc-cyan-list, \\\"9\\\");\\n\\n\\n// Teal\\n// ───────────────────────────────────\\n\\n$oc-teal-list: (\\n \\\"0\\\": #e6fcf5,\\n \\\"1\\\": #c3fae8,\\n \\\"2\\\": #96f2d7,\\n \\\"3\\\": #63e6be,\\n \\\"4\\\": #38d9a9,\\n \\\"5\\\": #20c997,\\n \\\"6\\\": #12b886,\\n \\\"7\\\": #0ca678,\\n \\\"8\\\": #099268,\\n \\\"9\\\": #087f5b\\n);\\n\\n$oc-teal-0: map-get($oc-teal-list, \\\"0\\\");\\n$oc-teal-1: map-get($oc-teal-list, \\\"1\\\");\\n$oc-teal-2: map-get($oc-teal-list, \\\"2\\\");\\n$oc-teal-3: map-get($oc-teal-list, \\\"3\\\");\\n$oc-teal-4: map-get($oc-teal-list, \\\"4\\\");\\n$oc-teal-5: map-get($oc-teal-list, \\\"5\\\");\\n$oc-teal-6: map-get($oc-teal-list, \\\"6\\\");\\n$oc-teal-7: map-get($oc-teal-list, \\\"7\\\");\\n$oc-teal-8: map-get($oc-teal-list, \\\"8\\\");\\n$oc-teal-9: map-get($oc-teal-list, \\\"9\\\");\\n\\n\\n// Green\\n// ───────────────────────────────────\\n\\n$oc-green-list: (\\n \\\"0\\\": #ebfbee,\\n \\\"1\\\": #d3f9d8,\\n \\\"2\\\": #b2f2bb,\\n \\\"3\\\": #8ce99a,\\n \\\"4\\\": #69db7c,\\n \\\"5\\\": #51cf66,\\n \\\"6\\\": #40c057,\\n \\\"7\\\": #37b24d,\\n \\\"8\\\": #2f9e44,\\n \\\"9\\\": #2b8a3e\\n);\\n\\n$oc-green-0: map-get($oc-green-list, \\\"0\\\");\\n$oc-green-1: map-get($oc-green-list, \\\"1\\\");\\n$oc-green-2: map-get($oc-green-list, \\\"2\\\");\\n$oc-green-3: map-get($oc-green-list, \\\"3\\\");\\n$oc-green-4: map-get($oc-green-list, \\\"4\\\");\\n$oc-green-5: map-get($oc-green-list, \\\"5\\\");\\n$oc-green-6: map-get($oc-green-list, \\\"6\\\");\\n$oc-green-7: map-get($oc-green-list, \\\"7\\\");\\n$oc-green-8: map-get($oc-green-list, \\\"8\\\");\\n$oc-green-9: map-get($oc-green-list, \\\"9\\\");\\n\\n\\n// Lime\\n// ───────────────────────────────────\\n\\n$oc-lime-list: (\\n \\\"0\\\": #f4fce3,\\n \\\"1\\\": #e9fac8,\\n \\\"2\\\": #d8f5a2,\\n \\\"3\\\": #c0eb75,\\n \\\"4\\\": #a9e34b,\\n \\\"5\\\": #94d82d,\\n \\\"6\\\": #82c91e,\\n \\\"7\\\": #74b816,\\n \\\"8\\\": #66a80f,\\n \\\"9\\\": #5c940d\\n);\\n\\n$oc-lime-0: map-get($oc-lime-list, \\\"0\\\");\\n$oc-lime-1: map-get($oc-lime-list, \\\"1\\\");\\n$oc-lime-2: map-get($oc-lime-list, \\\"2\\\");\\n$oc-lime-3: map-get($oc-lime-list, \\\"3\\\");\\n$oc-lime-4: map-get($oc-lime-list, \\\"4\\\");\\n$oc-lime-5: map-get($oc-lime-list, \\\"5\\\");\\n$oc-lime-6: map-get($oc-lime-list, \\\"6\\\");\\n$oc-lime-7: map-get($oc-lime-list, \\\"7\\\");\\n$oc-lime-8: map-get($oc-lime-list, \\\"8\\\");\\n$oc-lime-9: map-get($oc-lime-list, \\\"9\\\");\\n\\n\\n// Yellow\\n// ───────────────────────────────────\\n\\n$oc-yellow-list: (\\n \\\"0\\\": #fff9db,\\n \\\"1\\\": #fff3bf,\\n \\\"2\\\": #ffec99,\\n \\\"3\\\": #ffe066,\\n \\\"4\\\": #ffd43b,\\n \\\"5\\\": #fcc419,\\n \\\"6\\\": #fab005,\\n \\\"7\\\": #f59f00,\\n \\\"8\\\": #f08c00,\\n \\\"9\\\": #e67700\\n);\\n\\n$oc-yellow-0: map-get($oc-yellow-list, \\\"0\\\");\\n$oc-yellow-1: map-get($oc-yellow-list, \\\"1\\\");\\n$oc-yellow-2: map-get($oc-yellow-list, \\\"2\\\");\\n$oc-yellow-3: map-get($oc-yellow-list, \\\"3\\\");\\n$oc-yellow-4: map-get($oc-yellow-list, \\\"4\\\");\\n$oc-yellow-5: map-get($oc-yellow-list, \\\"5\\\");\\n$oc-yellow-6: map-get($oc-yellow-list, \\\"6\\\");\\n$oc-yellow-7: map-get($oc-yellow-list, \\\"7\\\");\\n$oc-yellow-8: map-get($oc-yellow-list, \\\"8\\\");\\n$oc-yellow-9: map-get($oc-yellow-list, \\\"9\\\");\\n\\n\\n// Orange\\n// ───────────────────────────────────\\n\\n$oc-orange-list: (\\n \\\"0\\\": #fff4e6,\\n \\\"1\\\": #ffe8cc,\\n \\\"2\\\": #ffd8a8,\\n \\\"3\\\": #ffc078,\\n \\\"4\\\": #ffa94d,\\n \\\"5\\\": #ff922b,\\n \\\"6\\\": #fd7e14,\\n \\\"7\\\": #f76707,\\n \\\"8\\\": #e8590c,\\n \\\"9\\\": #d9480f\\n);\\n\\n$oc-orange-0: map-get($oc-orange-list, \\\"0\\\");\\n$oc-orange-1: map-get($oc-orange-list, \\\"1\\\");\\n$oc-orange-2: map-get($oc-orange-list, \\\"2\\\");\\n$oc-orange-3: map-get($oc-orange-list, \\\"3\\\");\\n$oc-orange-4: map-get($oc-orange-list, \\\"4\\\");\\n$oc-orange-5: map-get($oc-orange-list, \\\"5\\\");\\n$oc-orange-6: map-get($oc-orange-list, \\\"6\\\");\\n$oc-orange-7: map-get($oc-orange-list, \\\"7\\\");\\n$oc-orange-8: map-get($oc-orange-list, \\\"8\\\");\\n$oc-orange-9: map-get($oc-orange-list, \\\"9\\\");\\n\\n\\n// Color list\\n// ───────────────────────────────────\\n\\n$oc-color-spectrum: 9;\\n\\n$oc-color-list: (\\n $oc-gray-list: \\\"gray\\\",\\n $oc-red-list: \\\"red\\\",\\n $oc-pink-list: \\\"pink\\\",\\n $oc-grape-list: \\\"grape\\\",\\n $oc-violet-list: \\\"violet\\\",\\n $oc-indigo-list: \\\"indigo\\\",\\n $oc-blue-list: \\\"blue\\\",\\n $oc-cyan-list: \\\"cyan\\\",\\n $oc-teal-list: \\\"teal\\\",\\n $oc-green-list: \\\"green\\\",\\n $oc-lime-list: \\\"lime\\\",\\n $oc-yellow-list: \\\"yellow\\\",\\n $oc-orange-list: \\\"orange\\\"\\n);\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1swXS51c2VbMl0hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vY3NzL3N0eWxlcy5zY3NzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUM4SDtBQUNqQjtBQUNPO0FBQ3BILDRDQUE0Qyw2akJBQWtSO0FBQzlULDRDQUE0QyxpbUJBQXFTO0FBQ2pWLDhCQUE4Qix1R0FBMkIsQ0FBQyxnSEFBcUM7QUFDL0YseUNBQXlDLDBHQUErQjtBQUN4RSx5Q0FBeUMsMEdBQStCO0FBQ3hFO0FBQ0EsbURBQW1ELGdEQUFnRCxHQUFHLGFBQWEsZ0RBQWdELEdBQUcsaUJBQWlCLHlCQUF5QiwyQ0FBMkMsd0NBQXdDLDZCQUE2Qiw2QkFBNkIsNkJBQTZCLDhDQUE4QyxtQ0FBbUMscUVBQXFFLHFDQUFxQywrQkFBK0IscUNBQXFDLGdDQUFnQyw4QkFBOEIsa0NBQWtDLG9DQUFvQyxpQ0FBaUMsaURBQWlELGdDQUFnQywwQkFBMEIsa0RBQWtELDhCQUE4Qix3Q0FBd0MsZ0NBQWdDLHlDQUF5Qyx1Q0FBdUMscUNBQXFDLHNDQUFzQyxvQ0FBb0Msc0NBQXNDLG1EQUFtRCw0QkFBNEIsa0NBQWtDLEdBQUcsMkJBQTJCLHdCQUF3QixHQUFHLHVEQUF1RCxxQkFBcUIsR0FBRywyQkFBMkIsbURBQW1ELDJDQUEyQyx3Q0FBd0MsNkJBQTZCLDZCQUE2QiwwQkFBMEIsOENBQThDLG1DQUFtQyxxRUFBcUUscUNBQXFDLCtCQUErQixxQ0FBcUMsZ0NBQWdDLDhCQUE4QixrQ0FBa0Msb0NBQW9DLGlDQUFpQyw4Q0FBOEMsZ0NBQWdDLDBCQUEwQiwrQ0FBK0MsOEJBQThCLHFDQUFxQyxnQ0FBZ0MseUNBQXlDLHNDQUFzQyxrREFBa0Qsa0NBQWtDLEdBQUcsV0FBVyx1QkFBdUIs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LFdBQVcsTUFBTSxNQUFNLFdBQVcsV0FBVyxXQUFXLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFdBQVcsV0FBVyxXQUFXLFdBQVcsTUFBTSxNQUFNLFVBQVUsV0FBVyxNQUFNLE1BQU0sVUFBVSxXQUFXLE1BQU0sUUFBUSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxNQUFNLE1BQU0sVUFBVSxVQUFVLE1BQU0sUUFBUSxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU0sTUFBTSxVQUFVLFdBQVcsTUFBTSxNQUFNLFVBQVUsTUFBTSxNQUFNLFdBQVcsV0FBVyxXQUFXLE1BQU0sT0FBTyxVQUFVLFdBQVcsV0FBVyxNQUFNLE1BQU0sVUFBVSxNQUFNLE1BQU0sVUFBVSxXQUFXLE1BQU0sTUFBTSxXQUFXLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLFVBQVUsVUFBVSxNQUFNLE1BQU0sVUFBVSxXQUFXLFVBQVUsVUFBVSxNQUFNLE1BQU0sVUFBVSxZQUFZLFdBQVcsTUFBTSxPQUFPLFdBQVcsV0FBVyxNQUFNLE9BQU8sV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLE1BQU0sT0FBTyxXQUFXLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsTUFBTSxNQUFNLFdBQVcsV0FBVyxXQUFXLE1BQU0sTUFBTSxVQUFVLFVBQVUsVUFBVSxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU0sTUFBTSxXQUFXLFVBQVUsV0FBVyxXQUFXLE1BQU0sTUFBTSxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFdBQVcsTUFBTSxNQUFNLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxNQUFNLE1BQU0sV0FBVyxNQUFNLE1BQU0sVUFBVSxXQUFXLE1BQU0sTUFBTSxVQUFVLFdBQVcsV0FBVyxVQUFVLE1BQU0sS0FBSyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsTUFBTSxLQUFLLFVBQVUsV0FBVyxNQUFNLEtBQUssV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFVBQVUsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFdBQVcsS0FBSyxLQUFLLFdBQVcsS0FBSyxLQUFLLFdBQVcsVUFBVSxLQUFLLEtBQUssV0FBVyxVQUFVLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsS0FBSyxLQUFLLFVBQVUsVUFBVSxLQUFLLEtBQUssV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFdBQVcsS0FBSyxLQUFLLFVBQVUsVUFBVSxXQUFXLFdBQVcsVUFBVSxXQUFXLFdBQVcsS0FBSyxLQUFLLFVBQVUsVUFBVSxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssVUFBVSxXQUFXLFdBQVcsV0FBVyxLQUFLLE1BQU0sVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsS0FBSyxNQUFNLFVBQVUsTUFBTSxNQUFNLFdBQVcsVUFBVSxPQUFPLE1BQU0sV0FBVyxNQUFNLE1BQU0sV0FBVyxVQUFVLFVBQVUsVUFBVSxXQUFXLE1BQU0sTUFBTSxXQUFXLFVBQVUsVUFBVSxVQUFV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Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsMFFBQTBRLDRDQUE0QywwQ0FBMEMsMENBQTBDLDBDQUEwQywwQ0FBMEMsMENBQTBDLDBDQUEwQywwQ0FBMEMsMENBQTBDLDBDQUEwQyw0UUFBNFEsOENBQThDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDhRQUE4USxnREFBZ0QsOENBQThDLDhDQUE4Qyw4Q0FBOEMsOENBQThDLDhDQUE4Qyw4Q0FBOEMsOENBQThDLDhDQUE4Qyw4Q0FBOEMsZ1JBQWdSLGtEQUFrRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnUkFBZ1Isa0RBQWtELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELDRRQUE0USw4Q0FBOEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNFFBQTRRLDhDQUE4Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0UUFBNFEsOENBQThDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDhRQUE4USxnREFBZ0QsOENBQThDLDhDQUE4Qyw4Q0FBOEMsOENBQThDLDhDQUE4Qyw4Q0FBOEMsOENBQThDLDhDQUE4Qyw4Q0FBOEMsNFFBQTRRLDhDQUE4Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsNENBQTRDLDRDQUE0QyxnUkFBZ1Isa0RBQWtELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdSQUFnUixrREFBa0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QsZ0RBQWdELGdEQUFnRCxnREFBZ0QseUZBQXlGLHVkQUF1ZCxxQkFBcUI7QUFDbGo2QztBQUNBLGlFQUFlLHVCQUF1QixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2Nzcy9zdHlsZXMuc2Nzcz8wZDU1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9wYWNrYWdlcy9leGNhbGlkcmF3L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9wYWNrYWdlcy9leGNhbGlkcmF3L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fIGZyb20gXCIuLi9wYWNrYWdlcy9leGNhbGlkcmF3L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyA9IG5ldyBVUkwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIyOTIuNFxcXCIgaGVpZ2h0PVxcXCIyOTIuNFxcXCIgdmlld0JveD1cXFwiMCAwIDI5MiAyOTJcXFwiPjxwYXRoIGQ9XFxcIk0yODcgMTk3TDE1OSA2OWMtNC0zLTgtNS0xMy01cy05IDItMTMgNUw1IDE5N2MtMyA0LTUgOC01IDEzczIgOSA1IDEzYzQgNCA4IDUgMTMgNWgyNTZjNSAwIDktMSAxMy01czUtOCA1LTEzLTEtOS01LTEzelxcXCIvPjwvc3ZnPlwiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fID0gbmV3IFVSTChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgd2lkdGg9XFxcIjI5Mi40XFxcIiBoZWlnaHQ9XFxcIjI5Mi40XFxcIiB2aWV3Qm94PVxcXCIwIDAgMjkyIDI5MlxcXCI+PHBhdGggZmlsbD1cXFwiJTIzY2VkNGRhXFxcIiBkPVxcXCJNMjg3IDE5N0wxNTkgNjljLTQtMy04LTUtMTMtNXMtOSAyLTEzIDVMNSAxOTdjLTMgNC01IDgtNSAxM3MyIDkgNSAxM2M0IDQgOCA1IDEzIDVoMjU2YzUgMCA5LTEgMTMtNXM1LTggNS0xMy0xLTktNS0xM3pcXFwiLz48L3N2Zz5cIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiOmV4cG9ydCB7XFxuICB0aGVtZUZpbHRlcjogaW52ZXJ0KDkzJSkgaHVlLXJvdGF0ZSgxODBkZWcpO1xcbn1cXG5cXG46ZXhwb3J0IHtcXG4gIHRoZW1lRmlsdGVyOiBpbnZlcnQoOTMlKSBodWUtcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5leGNhbGlkcmF3IHtcXG4gIC0tdGhlbWUtZmlsdGVyOiBub25lO1xcbiAgLS1idXR0b24tZGVzdHJ1Y3RpdmUtYmctY29sb3I6ICNmZmUzZTM7XFxuICAtLWJ1dHRvbi1kZXN0cnVjdGl2ZS1jb2xvcjogI2M5MmEyYTtcXG4gIC0tYnV0dG9uLWdyYXktMTogI2U5ZWNlZjtcXG4gIC0tYnV0dG9uLWdyYXktMjogI2NlZDRkYTtcXG4gIC0tYnV0dG9uLWdyYXktMzogI2FkYjViZDtcXG4gIC0tYnV0dG9uLXNwZWNpYWwtYWN0aXZlLWJnLWNvbG9yOiAjZWJmYmVlO1xcbiAgLS1kaWFsb2ctYm9yZGVyLWNvbG9yOiAjODY4ZTk2O1xcbiAgLS1kcm9wZG93bi1pY29uOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbiAgLS1mb2N1cy1oaWdobGlnaHQtY29sb3I6ICNhNWQ4ZmY7XFxuICAtLWljb24tZmlsbC1jb2xvcjogIzAwMDAwMDtcXG4gIC0taWNvbi1ncmVlbi1maWxsLWNvbG9yOiAjMmI4YTNlO1xcbiAgLS1kZWZhdWx0LWJnLWNvbG9yOiAjZmZmZmZmO1xcbiAgLS1pbnB1dC1iZy1jb2xvcjogI2ZmZmZmZjtcXG4gIC0taW5wdXQtYm9yZGVyLWNvbG9yOiAjY2VkNGRhO1xcbiAgLS1pbnB1dC1ob3Zlci1iZy1jb2xvcjogI2YxZjNmNTtcXG4gIC0taW5wdXQtbGFiZWwtY29sb3I6ICM0OTUwNTc7XFxuICAtLWlzbGFuZC1iZy1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTtcXG4gIC0ta2V5YmluZGluZy1jb2xvcjogI2FkYjViZDtcXG4gIC0tbGluay1jb2xvcjogIzFjN2VkNjtcXG4gIC0tb3ZlcmxheS1iZy1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg4KTtcXG4gIC0tcG9wdXAtYmctY29sb3I6ICNmZmZmZmY7XFxuICAtLXBvcHVwLXNlY29uZGFyeS1iZy1jb2xvcjogI2YxZjNmNTtcXG4gIC0tcG9wdXAtdGV4dC1jb2xvcjogIzAwMDAwMDtcXG4gIC0tcG9wdXAtdGV4dC1pbnZlcnRlZC1jb2xvcjogI2ZmZmZmZjtcXG4gIC0tc2FiOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XFxuICAtLXNhbDogZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcXG4gIC0tc2FyOiBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KTtcXG4gIC0tc2F0OiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7XFxuICAtLXNlbGVjdC1oaWdobGlnaHQtY29sb3I6ICMzMzlhZjA7XFxuICAtLXNoYWRvdy1pc2xhbmQ6IDAgMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcbiAgLS1zcGFjZS1mYWN0b3I6IDAuMjVyZW07XFxuICAtLXRleHQtcHJpbWFyeS1jb2xvcjogIzM0M2E0MDtcXG59XFxuLmV4Y2FsaWRyYXcudGhlbWUtLWRhcmsge1xcbiAgYmFja2dyb3VuZDogIzAwMDAwMDtcXG59XFxuLmV4Y2FsaWRyYXcudGhlbWUtLWRhcmsudGhlbWUtLWRhcmstYmFja2dyb3VuZC1ub25lIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxufVxcbi5leGNhbGlkcmF3LnRoZW1lLS1kYXJrIHtcXG4gIC0tdGhlbWUtZmlsdGVyOiBpbnZlcnQoOTMlKSBodWUtcm90YXRlKDE4MGRlZyk7XFxuICAtLWJ1dHRvbi1kZXN0cnVjdGl2ZS1iZy1jb2xvcjogIzVhMDAwMDtcXG4gIC0tYnV0dG9uLWRlc3RydWN0aXZlLWNvbG9yOiAjZmZhOGE4O1xcbiAgLS1idXR0b24tZ3JheS0xOiAjMzYzNjM2O1xcbiAgLS1idXR0b24tZ3JheS0yOiAjMjcyNzI3O1xcbiAgLS1idXR0b24tZ3JheS0zOiAjMjIyO1xcbiAgLS1idXR0b24tc3BlY2lhbC1hY3RpdmUtYmctY29sb3I6ICMyMDQ2MjQ7XFxuICAtLWRpYWxvZy1ib3JkZXItY29sb3I6ICMyMTI1Mjk7XFxuICAtLWRyb3Bkb3duLWljb246IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gKyBcIik7XFxuICAtLWZvY3VzLWhpZ2hsaWdodC1jb2xvcjogIzIyOGJlNjtcXG4gIC0taWNvbi1maWxsLWNvbG9yOiAjY2VkNGRhO1xcbiAgLS1pY29uLWdyZWVuLWZpbGwtY29sb3I6ICM2OWRiN2M7XFxuICAtLWRlZmF1bHQtYmctY29sb3I6ICMxMjEyMTI7XFxuICAtLWlucHV0LWJnLWNvbG9yOiAjMTIxMjEyO1xcbiAgLS1pbnB1dC1ib3JkZXItY29sb3I6ICMyZTJlMmU7XFxuICAtLWlucHV0LWhvdmVyLWJnLWNvbG9yOiAjMTgxODE4O1xcbiAgLS1pbnB1dC1sYWJlbC1jb2xvcjogI2U5ZWNlZjtcXG4gIC0taXNsYW5kLWJnLWNvbG9yOiByZ2JhKDMwLCAzMCwgMzAsIDAuOTgpO1xcbiAgLS1rZXliaW5kaW5nLWNvbG9yOiAjODY4ZTk2O1xcbiAgLS1saW5rLWNvbG9yOiAjNGRhYmY3O1xcbiAgLS1vdmVybGF5LWJnLWNvbG9yOiByZ2JhKDUyLCA1OCwgNjQsIDAuMTIpO1xcbiAgLS1wb3B1cC1iZy1jb2xvcjogIzJjMmMyYztcXG4gIC0tcG9wdXAtc2Vjb25kYXJ5LWJnLWNvbG9yOiAjMjIyO1xcbiAgLS1wb3B1cC10ZXh0LWNvbG9yOiAjY2VkNGRhO1xcbiAgLS1wb3B1cC10ZXh0LWludmVydGVkLWNvbG9yOiAjNjM1YzVjO1xcbiAgLS1zZWxlY3QtaGlnaGxpZ2h0LWNvbG9yOiAjNGRhYmY3O1xcbiAgLS1zaGFkb3ctaXNsYW5kOiAwIDFweCA1cHggcmdiYSgwLCAwLCAwLCAwLjMpO1xcbiAgLS10ZXh0LXByaW1hcnktY29sb3I6ICNjZWQ0ZGE7XFxufVxcblxcbjpyb290IHtcXG4gIC0tekluZGV4LWNhbnZhczogMTtcXG4gIC0tekluZGV4LXd5c2l3eWc6IDI7XFxuICAtLXpJbmRleC1sYXllclVJOiAzO1xcbn1cXG5cXG4uZXhjYWxpZHJhdyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeS1jb2xvcik7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuLmV4Y2FsaWRyYXc6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuLmV4Y2FsaWRyYXcgYSB7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xcbn1cXG4uZXhjYWxpZHJhdyBhOmhvdmVyIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG4uZXhjYWxpZHJhdyBjYW52YXMge1xcbiAgdG91Y2gtYWN0aW9uOiBub25lO1xcbiAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XFxuICBpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7XFxuICB6LWluZGV4OiB2YXIoLS16SW5kZXgtY2FudmFzKTtcXG59XFxuLmV4Y2FsaWRyYXdfX2NhbnZhcyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5leGNhbGlkcmF3LnRoZW1lLS1kYXJrIGNhbnZhcyB7XFxuICBmaWx0ZXI6IHZhcigtLXRoZW1lLWZpbHRlcik7XFxufVxcbi5leGNhbGlkcmF3IC5GaXhlZFNpZGVDb250YWluZXIge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNhdCwgMCk7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zYXIsIDApO1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNhYiwgMCk7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNhbCwgMCk7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbFJvdyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiBoMyxcXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gbGVnZW5kLFxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuY29udHJvbC1sYWJlbCB7XFxuICBtYXJnaW4tdG9wOiAwLjMzM3JlbTtcXG4gIG1hcmdpbi1ib3R0b206IDAuMzMzcmVtO1xcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xcbiAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeS1jb2xvcik7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gLmNvbnRyb2wtbGFiZWwgaW5wdXQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIGgzOmZpcnN0LWNoaWxkLFxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiBsZWdlbmQ6Zmlyc3QtY2hpbGQsXFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIC5jb250cm9sLWxhYmVsOmZpcnN0LWNoaWxkIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiBsZWdlbmQge1xcbiAgcGFkZGluZzogMDtcXG59XFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIC5pY29uU2VsZWN0TGlzdCB7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCB7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCBsYWJlbCB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW07XFxuICBmb250LXNpemU6IDAuNzVyZW07XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCBpbnB1dFt0eXBlPXJhZGlvXSxcXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gLmJ1dHRvbkxpc3QgaW5wdXRbdHlwZT1idXR0b25dIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIC5idXR0b25MaXN0IC5pY29uUm93IHtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG59XFxuLmV4Y2FsaWRyYXcgLnBhbmVsQ29sdW1uIC5idXR0b25MaXN0IC5Ub29sSWNvbiB7XFxuICBtYXJnaW46IDA7XFxuICBtYXJnaW4taW5saW5lLWVuZDogOHB4O1xcbn1cXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gLmJ1dHRvbkxpc3QgLlRvb2xJY29uOmZvY3VzIHtcXG4gIG91dGxpbmU6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZvY3VzLWhpZ2hsaWdodC1jb2xvcik7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCAuVG9vbEljb246aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCAuVG9vbEljb246YWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTMpO1xcbn1cXG4uZXhjYWxpZHJhdyAucGFuZWxDb2x1bW4gLmJ1dHRvbkxpc3QgLlRvb2xJY29uOmRpc2FibGVkIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiAuYnV0dG9uTGlzdCAuVG9vbEljb25fX2ljb24ge1xcbiAgd2lkdGg6IDI4cHg7XFxuICBoZWlnaHQ6IDI4cHg7XFxufVxcbi5leGNhbGlkcmF3IC5wYW5lbENvbHVtbiBmaWVsZHNldCB7XFxuICBtYXJnaW46IDA7XFxuICBtYXJnaW4tdG9wOiAwLjMzM3JlbTtcXG4gIHBhZGRpbmc6IDA7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcbi5leGNhbGlkcmF3IC5kaXZpZGVyIHtcXG4gIHdpZHRoOiAxcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgbWFyZ2luOiAxcHg7XFxufVxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsOmZvY3VzLXdpdGhpbixcXG4uZXhjYWxpZHJhdyBpbnB1dDpmb2N1cyB7XFxuICBvdXRsaW5lOiB0cmFuc3BhcmVudDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1mb2N1cy1oaWdobGlnaHQtY29sb3IpO1xcbn1cXG4uZXhjYWxpZHJhdyBidXR0b24sXFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QgbGFiZWwge1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0xKTtcXG4gIGJvcmRlcjogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIG1hcmdpbjogMC4xMjVyZW0gMDtcXG4gIHBhZGRpbmc6IDAuMjVyZW07XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uZXhjYWxpZHJhdyBidXR0b246Zm9jdXMsXFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QgbGFiZWw6Zm9jdXMge1xcbiAgb3V0bGluZTogdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG59XFxuLmV4Y2FsaWRyYXcgYnV0dG9uOmhvdmVyLFxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbn1cXG4uZXhjYWxpZHJhdyBidXR0b246YWN0aXZlLFxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG59XFxuLmV4Y2FsaWRyYXcgYnV0dG9uOmRpc2FibGVkLFxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsOmRpc2FibGVkIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi5leGNhbGlkcmF3IC5hY3RpdmUsXFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QgbGFiZWwuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbn1cXG4uZXhjYWxpZHJhdyAuYWN0aXZlOmhvdmVyLFxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0IGxhYmVsLmFjdGl2ZTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG59XFxuLmV4Y2FsaWRyYXcgLmFjdGl2ZTphY3RpdmUsXFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QgbGFiZWwuYWN0aXZlOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG59XFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QuYnV0dG9uTGlzdEljb24gbGFiZWwge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5leGNhbGlkcmF3IC5idXR0b25MaXN0LmJ1dHRvbkxpc3RJY29uIGxhYmVsIHN2ZyB7XFxuICB3aWR0aDogMzZweDtcXG4gIGhlaWdodDogMTRweDtcXG4gIHBhZGRpbmc6IDJweDtcXG4gIG9wYWNpdHk6IDAuNjtcXG59XFxuLmV4Y2FsaWRyYXcgLmJ1dHRvbkxpc3QuYnV0dG9uTGlzdEljb24gbGFiZWwuYWN0aXZlIHN2ZyB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLXRvcC1iYXIge1xcbiAgei1pbmRleDogdmFyKC0tekluZGV4LWxheWVyVUkpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLWJvdHRvbS1iYXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgLS1iYXItcGFkZGluZzogY2FsYyg0ICogdmFyKC0tc3BhY2UtZmFjdG9yKSk7XFxuICBwYWRkaW5nLXRvcDogbWF4KHZhcigtLWJhci1wYWRkaW5nKSwgdmFyKC0tc2F0LDApKTtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNhciwgMCk7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2FiLCAwKTtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2FsLCAwKTtcXG4gIHotaW5kZXg6IDQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtYm90dG9tLWJhciA+IC5Jc2xhbmQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBtaW4td2lkdGg6IDEwMCU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgbWF4LWhlaWdodDogMTAwJTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtYm90dG9tLWJhciA+IC5Jc2xhbmQgLnBhbmVsQ29sdW1uIHtcXG4gIHBhZGRpbmc6IDhweCA4cHggMCA4cHg7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtdG9vbGJhciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtdG9vbGJhci1jb250ZW50IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcGFkZGluZzogOHB4O1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1vYmlsZS1tZW51IHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tYmFyLXBhZGRpbmcpO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnUge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIGNvbG9yOiB2YXIoLS1pY29uLWZpbGwtY29sb3IpO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnVfdG9wIHtcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtYXgtY29udGVudCBhdXRvO1xcbiAgZ3JpZC1nYXA6IDRweDtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmV4Y2FsaWRyYXcgLmxheWVyLXVpX193cmFwcGVyOm5vdCguZGlzYWJsZS1wb2ludGVyRXZlbnRzKSAuQXBwLW1lbnVfdG9wID4gKiB7XFxuICBwb2ludGVyLWV2ZW50czogYWxsO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnVfdG9wID4gKjpmaXJzdC1jaGlsZCB7XFxuICBqdXN0aWZ5LXNlbGY6IGZsZXgtc3RhcnQ7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtbWVudV90b3AgPiAqOmxhc3QtY2hpbGQge1xcbiAganVzdGlmeS1zZWxmOiBmbGV4LWVuZDtcXG59XFxuLmV4Y2FsaWRyYXcgLkFwcC1tZW51X2JvdHRvbSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbi1jb250ZW50IGF1dG8gbWluLWNvbnRlbnQ7XFxuICBncmlkLWdhcDogMTVweDtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG4gIHotaW5kZXg6IDEwMDtcXG59XFxuOnJvb3RbZGlyPWx0cl0gLmV4Y2FsaWRyYXcgLkFwcC1tZW51X2JvdHRvbSB7XFxuICBsZWZ0OiAwLjI1cmVtO1xcbn1cXG46cm9vdFtkaXI9cnRsXSAuZXhjYWxpZHJhdyAuQXBwLW1lbnVfYm90dG9tIHtcXG4gIHJpZ2h0OiAwLjI1cmVtO1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnVfYm90dG9tLS10cmFuc2l0aW9uLWxlZnQgc2VjdGlvbiB7XFxuICB3aWR0aDogMTg1cHg7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtbWVudV9ib3R0b20gc2VjdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZXhjYWxpZHJhdyAuQXBwLW1lbnVfYm90dG9tID4gKjpmaXJzdC1jaGlsZCB7XFxuICBqdXN0aWZ5LXNlbGY6IGZsZXgtc3RhcnQ7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtbWVudV9ib3R0b20gPiAqOmxhc3QtY2hpbGQge1xcbiAganVzdGlmeS1zZWxmOiBmbGV4LWVuZDtcXG59XFxuLmV4Y2FsaWRyYXcgLkFwcC1tZW51X2xlZnQge1xcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgYXV0byAxZnI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5leGNhbGlkcmF3IC5BcHAtbWVudV9yaWdodCB7XFxuICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLmV4Y2FsaWRyYXcgLkFwcC1tZW51X19sZWZ0IHtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcbi5leGNhbGlkcmF3IC5kcm9wZG93bi1zZWxlY3Qge1xcbiAgaGVpZ2h0OiAxLjVyZW07XFxuICBwYWRkaW5nOiAwO1xcbiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDAuNXJlbTtcXG4gIHBhZGRpbmctaW5saW5lLWVuZDogMS41cmVtO1xcbiAgY29sb3I6IHZhcigtLWljb24tZmlsbC1jb2xvcik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0xKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXNwYWNlLWZhY3Rvcik7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS1kcm9wZG93bi1pY29uKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwLjdyZW0gdG9wIDUwJSwgMCAwO1xcbiAgYmFja2dyb3VuZC1zaXplOiAwLjY1ZW0gYXV0bywgMTAwJTtcXG59XFxuOnJvb3RbZGlyPXJ0bF0gLmV4Y2FsaWRyYXcgLmRyb3Bkb3duLXNlbGVjdCB7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IDAuN3JlbSB0b3AgNTAlLCAwIDA7XFxufVxcbi5leGNhbGlkcmF3IC5kcm9wZG93bi1zZWxlY3Q6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZvY3VzLWhpZ2hsaWdodC1jb2xvcik7XFxufVxcbi5leGNhbGlkcmF3IC5kcm9wZG93bi1zZWxlY3Q6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxufVxcbi5leGNhbGlkcmF3IC5kcm9wZG93bi1zZWxlY3Q6YWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbn1cXG4uZXhjYWxpZHJhdyAuekluZGV4QnV0dG9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIG1hcmdpbi1pbmxpbmUtZW5kOiA4cHg7XFxuICBwYWRkaW5nOiA1cHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLmV4Y2FsaWRyYXcgLnpJbmRleEJ1dHRvbiBzdmcge1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDE4cHg7XFxufVxcbi5leGNhbGlkcmF3IC5zY3JvbGwtYmFjay10by1jb250ZW50IHtcXG4gIGNvbG9yOiB2YXIoLS1wb3B1cC10ZXh0LWNvbG9yKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIGJvdHRvbTogMzBweDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcXG59XFxuLmV4Y2FsaWRyYXcgLmhlbHAtaWNvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZmlsbDogIzg2OGU5NjtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgY29sb3I6IHZhcigtLWljb24tZmlsbC1jb2xvcik7XFxufVxcbi5leGNhbGlkcmF3IC5oZWxwLWljb24gc3ZnIHtcXG4gIHdpZHRoOiAxLjVyZW07XFxuICBoZWlnaHQ6IDEuNXJlbTtcXG59XFxuLmV4Y2FsaWRyYXcgLmhlbHAtaWNvbjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbn1cXG4uZXhjYWxpZHJhdyAucmVzZXQtem9vbS1idXR0b24ge1xcbiAgcGFkZGluZzogMC4yZW07XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnktY29sb3IpO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLXVpLWZvbnQpO1xcbn1cXG4uZXhjYWxpZHJhdyAudW5kby1yZWRvLWJ1dHRvbnMge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XFxuICBnYXA6IDAuNGVtO1xcbiAgbWFyZ2luLXRvcDogYXV0bztcXG4gIG1hcmdpbi1ib3R0b206IGF1dG87XFxuICBtYXJnaW4taW5saW5lLXN0YXJ0OiAwLjZlbTtcXG59XFxuLmV4Y2FsaWRyYXctLW1vYmlsZS5leGNhbGlkcmF3IGFzaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5leGNhbGlkcmF3LS1tb2JpbGUuZXhjYWxpZHJhdyAuc2Nyb2xsLWJhY2stdG8tY29udGVudCB7XFxuICBib3R0b206IGNhbGMoODBweCArIHZhcigtLXNhYiwgMCkpO1xcbiAgei1pbmRleDogLTE7XFxufVxcblxcbjpyb290W2Rpcj1ydGxdIC5leGNhbGlkcmF3IC5ydGwtbWlycm9yIHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcXG59XFxuLmV4Y2FsaWRyYXcgLnplbi1tb2RlLXZpc2liaWxpdHkge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG4gIG9wYWNpdHk6IDE7XFxuICBoZWlnaHQ6IGF1dG87XFxuICB3aWR0aDogYXV0bztcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cztcXG59XFxuLmV4Y2FsaWRyYXcgLnplbi1tb2RlLXZpc2liaWxpdHkuemVuLW1vZGUtdmlzaWJpbGl0eS0taGlkZGVuIHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIG9wYWNpdHk6IDA7XFxuICBoZWlnaHQ6IDA7XFxuICB3aWR0aDogMDtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cztcXG59XFxuLmV4Y2FsaWRyYXcgLmRpc2FibGUtcG9pbnRlckV2ZW50cyB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4uZXhjYWxpZHJhdy5leGNhbGlkcmF3LS12aWV3LW1vZGUgLkFwcC1tZW51IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi5leGNhbGlkcmF3IGlucHV0W3R5cGU9dGV4dF0sXFxuLmV4Y2FsaWRyYXcgdGV4dGFyZWE6bm90KC5leGNhbGlkcmF3LXd5c2l3eWcpIHtcXG4gIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnktY29sb3IpO1xcbiAgYm9yZGVyOiAxLjVweCBzb2xpZCB2YXIoLS1pbnB1dC1ib3JkZXItY29sb3IpO1xcbiAgcGFkZGluZzogMC43NXJlbTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1zcGFjZS1mYWN0b3IpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5wdXQtYmctY29sb3IpO1xcbn1cXG4uZXhjYWxpZHJhdyBpbnB1dFt0eXBlPXRleHRdOm5vdCg6Zm9jdXMpOmhvdmVyLFxcbi5leGNhbGlkcmF3IHRleHRhcmVhOm5vdCguZXhjYWxpZHJhdy13eXNpd3lnKTpub3QoOmZvY3VzKTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pbnB1dC1ob3Zlci1iZy1jb2xvcik7XFxufVxcbi5leGNhbGlkcmF3IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsXFxuLmV4Y2FsaWRyYXcgdGV4dGFyZWE6bm90KC5leGNhbGlkcmF3LXd5c2l3eWcpOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG59XFxuQG1lZGlhIHByaW50IHtcXG4gIC5leGNhbGlkcmF3IC5BcHAtYm90dG9tLWJhcixcXG4uZXhjYWxpZHJhdyAuRml4ZWRTaWRlQ29udGFpbmVyLFxcbi5leGNhbGlkcmF3IC5sYXllci11aV9fd3JhcHBlciB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxufVxcbi5leGNhbGlkcmF3IC5Ib21lQnV0dG9uLlRvb2xJY29uLlRvb2xJY29uX3R5cGVfZmxvYXRpbmcge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA2MHB4O1xcbiAgbGVmdDogY2FsYygtMiAqIHZhcigtLXNwYWNlLWZhY3RvcikpO1xcbiAgYm9yZGVyLXJhZGl1czogMCAyMHB4IDIwcHggMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbn1cXG4uZXhjYWxpZHJhdyAuSG9tZUJ1dHRvbi5Ub29sSWNvbi5Ub29sSWNvbl90eXBlX2Zsb2F0aW5nOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbn1cXG4uZXhjYWxpZHJhdyAuSG9tZUJ1dHRvbi5Ub29sSWNvbi5Ub29sSWNvbl90eXBlX2Zsb2F0aW5nOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG59XFxuLmV4Y2FsaWRyYXcgLkhvbWVCdXR0b24uVG9vbEljb24uVG9vbEljb25fdHlwZV9mbG9hdGluZyAuVG9vbEljb25fX2ljb24ge1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG59XFxuLmV4Y2FsaWRyYXcgLkhvbWVCdXR0b24uVG9vbEljb24uVG9vbEljb25fdHlwZV9mbG9hdGluZyBzdmcge1xcbiAgcG9zaXRpb246IHN0YXRpYztcXG59XFxuXFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcge1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxuICBwYWRkaW5nOiAyMHB4IDA7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB1c2VyLXNlbGVjdDogdGV4dDtcXG59XFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcgLkVycm9yU3BsYXNoLW1lc3NhZ2VDb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBwYWRkaW5nOiA0MHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTNlMztcXG4gIGJvcmRlcjogM3B4IHNvbGlkICNjOTJhMmE7XFxufVxcbi5FcnJvclNwbGFzaC5leGNhbGlkcmF3IC5FcnJvclNwbGFzaC1wYXJhZ3JhcGgge1xcbiAgbWFyZ2luOiAxNXB4IDA7XFxuICBtYXgtd2lkdGg6IDYwMHB4O1xcbn1cXG4uRXJyb3JTcGxhc2guZXhjYWxpZHJhdyAuRXJyb3JTcGxhc2gtcGFyYWdyYXBoLmFsaWduLWNlbnRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5FcnJvclNwbGFzaC5leGNhbGlkcmF3IC5iaWdnZXIsXFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcgLmJpZ2dlciBidXR0b24ge1xcbiAgZm9udC1zaXplOiAxLjFlbTtcXG59XFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcgLnNtYWxsZXIsXFxuLkVycm9yU3BsYXNoLmV4Y2FsaWRyYXcgLnNtYWxsZXIgYnV0dG9uIHtcXG4gIGZvbnQtc2l6ZTogMC45ZW07XFxufVxcbi5FcnJvclNwbGFzaC5leGNhbGlkcmF3IC5FcnJvclNwbGFzaC1kZXRhaWxzIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxufVxcbi5FcnJvclNwbGFzaC5leGNhbGlkcmF3IC5FcnJvclNwbGFzaC1kZXRhaWxzIHRleHRhcmVhIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAxMHB4IDA7XFxuICBmb250LWZhbWlseTogXFxcIkNhc2NhZGlhXFxcIjtcXG4gIGZvbnQtc2l6ZTogMC44ZW07XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uLy4uLy4uL2Nzcy92YXJpYWJsZXMubW9kdWxlLnNjc3NcIixcIndlYnBhY2s6Ly8uLy4uLy4uL2Nzcy9zdHlsZXMuc2Nzc1wiLFwid2VicGFjazovLy4vLi4vLi4vY3NzL3RoZW1lLnNjc3NcIixcIndlYnBhY2s6Ly8uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9vcGVuLWNvbG9yL29wZW4tY29sb3Iuc2Nzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFVQTtFQUNFLDJDQUFBO0FDVEY7O0FEUUE7RUFDRSwyQ0FBQTtBQ0xGOztBQ0hBO0VBQ0Usb0JBQUE7RUFDQSxzQ0FBQTtFQUNBLG1DQUFBO0VBQ0Esd0JBQUE7RUFDQSx3QkFBQTtFQUNBLHdCQUFBO0VBQ0EseUNBQUE7RUFDQSw4QkFBQTtFQUNBLHdEQUFBO0VBQ0EsZ0NBQUE7RUFDQSwwQkFBQTtFQUNBLGdDQUFBO0VBQ0EsMkJBQUE7RUFDQSx5QkFBQTtFQUNBLDZCQUFBO0VBQ0EsK0JBQUE7RUFDQSw0QkFBQTtFQUNBLDRDQUFBO0VBQ0EsMkJBQUE7RUFDQSxxQkFBQTtFQUNBLDZDQUFBO0VBQ0EseUJBQUE7RUFDQSxtQ0FBQTtFQUNBLDJCQUFBO0VBQ0Esb0NBQUE7RUFDQSxrQ0FBQTtFQUNBLGdDQUFBO0VBQ0EsaUNBQUE7RUFDQSwrQkFBQTtFQUNBLGlDQUFBO0VBQ0EsOENBQUE7RUFDQSx1QkFBQTtFQUNBLDZCQUFBO0FETUY7QUNKRTtFQUNFLG1CQzNCZTtBRmlDbkI7QUNKSTtFQUNFLGdCQUFBO0FETU47QUNGRTtFQUNFLDhDQUFBO0VBQ0Esc0NBQUE7RUFDQSxtQ0FBQTtFQUNBLHdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxxQkFBQTtFQUNBLHlDQUFBO0VBQ0EsOEJBQUE7RUFDQSx3REFBQTtFQUNBLGdDQUFBO0VBQ0EsMEJBQUE7RUFDQSxnQ0FB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OztFQUVFLGdDQUFBO0VBQ0EsNkNBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0Esa0NBQUE7RUFDQSx1Q0FBQTtBQTFCSjtBQTZCTTs7RUFDRSw2Q0FBQTtBQTFCUjtBQThCSTs7RUFDRSxhQUFBO0VBQ0Esa0RBQUE7QUEzQk47QUErQkU7RUFDRTs7O0lBR0UsYUFBQTtFQTdCSjtBQUNGO0FBZ0NFO0VBQ0UscUJBQUE7RUFDQSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxvQ0FBQTtFQUNBLDRCQUFBO0VBRUEsc0NBQUE7QUEvQko7QUFnQ0k7RUFDRSxzQ0FBQTtBQTlCTjtBQWdDSTtFQUNFLHNDQUFBO0FBOUJOO0FBaUNJO0VBQ0Usc0JBQUE7QUEvQk47QUFpQ0k7RUFDRSxnQkFBQTtBQS9CTjs7QUFvQ0E7RUFDRSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSxpQkFBQTtBQWpDRjtBQW1DRTtFQUNFLGFBQUE7RUFDQSxzQkFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFFQSxhQUFBO0VBQ0EseUJFaGhCTztFRmloQlAseUJBQUE7QUFsQ0o7QUFxQ0U7RUFDRSxjQUFBO0VBQ0EsZ0JBQUE7QUFuQ0o7QUFxQ0k7RUFDRSxrQkFBQTtBQW5DTjtBQXVDRTs7RUFFRSxnQkFBQTtBQXJDSjtBQXdDRTs7RUFFRSxnQkFBQTtBQXRDSjtBQXlDRTtFQUNFLGFBQUE7RUFDQSxzQkFBQTtFQUNBLHVCQUFBO0FBdkNKO0FBeUNJO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0FBdkNOXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIkBpbXBvcnQgXFxcIm9wZW4tY29sb3Ivb3Blbi1jb2xvci5zY3NzXFxcIjtcXG5cXG5AbWl4aW4gaXNNb2JpbGUoKSB7XFxuICBAYXQtcm9vdCAuZXhjYWxpZHJhdy0tbW9iaWxlI3smfSB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cXG4kdGhlbWUtZmlsdGVyOiBcXFwiaW52ZXJ0KDkzJSkgaHVlLXJvdGF0ZSgxODBkZWcpXFxcIjtcXG5cXG46ZXhwb3J0IHtcXG4gIHRoZW1lRmlsdGVyOiB1bnF1b3RlKCR0aGVtZS1maWx0ZXIpO1xcbn1cXG5cIixcIkBpbXBvcnQgXFxcIi4vdmFyaWFibGVzLm1vZHVsZVxcXCI7XFxuQGltcG9ydCBcXFwiLi90aGVtZVxcXCI7XFxuXFxuOnJvb3Qge1xcbiAgLS16SW5kZXgtY2FudmFzOiAxO1xcbiAgLS16SW5kZXgtd3lzaXd5ZzogMjtcXG4gIC0tekluZGV4LWxheWVyVUk6IDM7XFxufVxcblxcbi5leGNhbGlkcmF3IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5LWNvbG9yKTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG5cXG4gICY6Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lO1xcbiAgfVxcblxcbiAgLy8gc2VydmVzIDIgcHVycG9zZXM6XFxuICAvLyAxLiBwcmV2ZW50IHNlbGVjdGluZyB0ZXh0IG91dHNpZGUgdGhlIGNvbXBvbmVudCB3aGVuIGRvdWJsZS1jbGlja2luZyBvclxcbiAgLy8gICAgZHJhZ2dpbmcgaW5zaWRlIGl0IChlLmcuIG9uIGNhbnZhcylcXG4gIC8vIDIuIHByZXZlbnQgc2VsZWN0aW5nIFVJLCBib3RoIGZyb20gdGhlIGluc2lkZSwgYW5kIGZyb20gb3V0c2lkZSB0aGVcXG4gIC8vICAgIGNvbXBvbmVudCAoZS5nLiBpZiB5b3Ugc2VsZWN0IHRleHQgaW4gYSBzaWRlYmFyKVxcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuXFxuICBhIHtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICBjb2xvcjogdmFyKC0tbGluay1jb2xvcik7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICB9XFxuICB9XFxuXFxuICBjYW52YXMge1xcbiAgICB0b3VjaC1hY3Rpb246IG5vbmU7XFxuXFxuICAgIC8vIGZvbGxvd2luZyBwcm9wcyBpbXByb3ZlIGJsdXJyaW5lc3MgYXQgY2VydGFpbiBkZXZpY2VQaXhlbFJhdGlvcy5cXG4gICAgLy8gQUZBSUsgaXQgZG9lc24ndCBhZmZlY3QgZXhwb3J0IChpbiBmYWN0LCBleHBvcnQgc2VlbXMgc2hhcnAgZWl0aGVyIHdheSkuXFxuXFxuICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkOyAvLyBjaHJvbWl1bVxcbiAgICAvLyBOT1RFOiBtdXN0IGJlIGRlY2xhcmVkICphZnRlciogdGhlIGFib3ZlXFxuICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsgLy8gRkZcXG5cXG4gICAgei1pbmRleDogdmFyKC0tekluZGV4LWNhbnZhcyk7XFxuXFxuICAgIC8vIFJlbW92ZSB0aGUgbWFpbiBjYW52YXMgZnJvbSBkb2N1bWVudCBmbG93IHRvIGF2b2lkIHJlc2l6ZU9ic2VydmVyXFxuICAgIC8vIGZlZWRiYWNrIGxvb3AgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXhjYWxpZHJhdy9leGNhbGlkcmF3L3B1bGwvMzM3OSlcXG4gIH1cXG5cXG4gICZfX2NhbnZhcyB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIH1cXG5cXG4gICYudGhlbWUtLWRhcmsge1xcbiAgICAvLyBUaGUgcGVyY2VudGFnZSBpcyBpbnNwaXJlZCBieVxcbiAgICAvLyBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb2xvci9kYXJrLXRoZW1lLmh0bWwjcHJvcGVydGllcywgd2hpY2hcXG4gICAgLy8gcmVjb21tZW5kcyBzdXJmYWNlIGNvbG9yIG9mICMxMjEyMTIsIDkzJSB5aWVsZHMgIzExMTExMSBmb3IgI0ZGRlxcblxcbiAgICBjYW52YXMge1xcbiAgICAgIGZpbHRlcjogdmFyKC0tdGhlbWUtZmlsdGVyKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLkZpeGVkU2lkZUNvbnRhaW5lciB7XFxuICAgIHBhZGRpbmctdG9wOiB2YXIoLS1zYXQsIDApO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zYXIsIDApO1xcbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2FiLCAwKTtcXG4gICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zYWwsIDApO1xcbiAgfVxcblxcbiAgLnBhbmVsUm93IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgfVxcblxcbiAgLnBhbmVsQ29sdW1uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG5cXG4gICAgaDMsXFxuICAgIGxlZ2VuZCxcXG4gICAgLmNvbnRyb2wtbGFiZWwge1xcbiAgICAgIG1hcmdpbi10b3A6IDAuMzMzcmVtO1xcbiAgICAgIG1hcmdpbi1ib3R0b206IDAuMzMzcmVtO1xcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5LWNvbG9yKTtcXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgfVxcblxcbiAgICAuY29udHJvbC1sYWJlbCBpbnB1dCB7XFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG5cXG4gICAgaDM6Zmlyc3QtY2hpbGQsXFxuICAgIGxlZ2VuZDpmaXJzdC1jaGlsZCxcXG4gICAgLmNvbnRyb2wtbGFiZWw6Zmlyc3QtY2hpbGQge1xcbiAgICAgIG1hcmdpbi10b3A6IDA7XFxuICAgIH1cXG5cXG4gICAgbGVnZW5kIHtcXG4gICAgICBwYWRkaW5nOiAwO1xcbiAgICB9XFxuXFxuICAgIC5pY29uU2VsZWN0TGlzdCB7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgfVxcblxcbiAgICAuYnV0dG9uTGlzdCB7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcblxcbiAgICAgIGxhYmVsIHtcXG4gICAgICAgIG1hcmdpbi1yaWdodDogMC4yNXJlbTtcXG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICB9XFxuXFxuICAgICAgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSxcXG4gICAgICBpbnB1dFt0eXBlPVxcXCJidXR0b25cXFwiXSB7XFxuICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgICAgfVxcblxcbiAgICAgIC5pY29uUm93IHtcXG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcXG4gICAgICB9XFxuXFxuICAgICAgLlRvb2xJY29uIHtcXG4gICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgIG1hcmdpbi1pbmxpbmUtZW5kOiA4cHg7XFxuXFxuICAgICAgICAmOmZvY3VzIHtcXG4gICAgICAgICAgb3V0bGluZTogdHJhbnNwYXJlbnQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1mb2N1cy1oaWdobGlnaHQtY29sb3IpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgJjphY3RpdmUge1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgICY6ZGlzYWJsZWQge1xcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICAuVG9vbEljb25fX2ljb24ge1xcbiAgICAgICAgd2lkdGg6IDI4cHg7XFxuICAgICAgICBoZWlnaHQ6IDI4cHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGZpZWxkc2V0IHtcXG4gICAgICBtYXJnaW46IDA7XFxuICAgICAgbWFyZ2luLXRvcDogMC4zMzNyZW07XFxuICAgICAgcGFkZGluZzogMDtcXG4gICAgICBib3JkZXI6IG5vbmU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5kaXZpZGVyIHtcXG4gICAgd2lkdGg6IDFweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG9jLWdyYXktMjtcXG4gICAgbWFyZ2luOiAxcHg7XFxuICB9XFxuXFxuICAuYnV0dG9uTGlzdCBsYWJlbDpmb2N1cy13aXRoaW4sXFxuICBpbnB1dDpmb2N1cyB7XFxuICAgIG91dGxpbmU6IHRyYW5zcGFyZW50O1xcbiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG4gIH1cXG5cXG4gIGJ1dHRvbixcXG4gIC5idXR0b25MaXN0IGxhYmVsIHtcXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbiAgICBib3JkZXI6IDA7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgbWFyZ2luOiAwLjEyNXJlbSAwO1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcblxcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIG91dGxpbmU6IHRyYW5zcGFyZW50O1xcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1mb2N1cy1oaWdobGlnaHQtY29sb3IpO1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbiAgICB9XFxuXFxuICAgICY6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG4gICAgfVxcblxcbiAgICAmOmRpc2FibGVkIHtcXG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICB9XFxuICB9XFxuXFxuICAuYWN0aXZlLFxcbiAgLmJ1dHRvbkxpc3QgbGFiZWwuYWN0aXZlIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTIpO1xcbiAgICB9XFxuXFxuICAgICY6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0zKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmJ1dHRvbkxpc3QuYnV0dG9uTGlzdEljb24ge1xcbiAgICBsYWJlbCB7XFxuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBzdmcge1xcbiAgICAgICAgd2lkdGg6IDM2cHg7XFxuICAgICAgICBoZWlnaHQ6IDE0cHg7XFxuICAgICAgICBwYWRkaW5nOiAycHg7XFxuICAgICAgICBvcGFjaXR5OiAwLjY7XFxuICAgICAgfVxcbiAgICAgICYuYWN0aXZlIHN2ZyB7XFxuICAgICAgICBvcGFjaXR5OiAxO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblxcbiAgLkFwcC10b3AtYmFyIHtcXG4gICAgei1pbmRleDogdmFyKC0tekluZGV4LWxheWVyVUkpO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgfVxcblxcbiAgLkFwcC1ib3R0b20tYmFyIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIC0tYmFyLXBhZGRpbmc6IGNhbGMoNCAqIHZhcigtLXNwYWNlLWZhY3RvcikpO1xcbiAgICBwYWRkaW5nLXRvcDogI3tcXFwibWF4KHZhcigtLWJhci1wYWRkaW5nKSwgdmFyKC0tc2F0LDApKVxcXCJ9O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zYXIsIDApO1xcbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2FiLCAwKTtcXG4gICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zYWwsIDApO1xcbiAgICB6LWluZGV4OiA0O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcblxcbiAgICA+IC5Jc2xhbmQge1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICAgIG1heC13aWR0aDogMTAwJTtcXG4gICAgICBtaW4td2lkdGg6IDEwMCU7XFxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgICBwb2ludGVyLWV2ZW50czogaW5pdGlhbDtcXG5cXG4gICAgICAucGFuZWxDb2x1bW4ge1xcbiAgICAgICAgcGFkZGluZzogOHB4IDhweCAwIDhweDtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5BcHAtdG9vbGJhciB7XFxuICAgIHdpZHRoOiAxMDAlO1xcblxcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgfVxcblxcbiAgLkFwcC10b29sYmFyLWNvbnRlbnQge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIHBhZGRpbmc6IDhweDtcXG4gIH1cXG5cXG4gIC5BcHAtbW9iaWxlLW1lbnUge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogdmlzaWJsZTtcXG4gICAgb3ZlcmZsb3cteTogYXV0bztcXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tYmFyLXBhZGRpbmcpO1xcbiAgfVxcblxcbiAgLkFwcC1tZW51IHtcXG4gICAgZGlzcGxheTogZ3JpZDtcXG4gICAgY29sb3I6IHZhcigtLWljb24tZmlsbC1jb2xvcik7XFxuICB9XFxuXFxuICAuQXBwLW1lbnVfdG9wIHtcXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1heC1jb250ZW50IGF1dG87XFxuICAgIGdyaWQtZ2FwOiA0cHg7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuXFxuICAubGF5ZXItdWlfX3dyYXBwZXI6bm90KC5kaXNhYmxlLXBvaW50ZXJFdmVudHMpIC5BcHAtbWVudV90b3AgPiAqIHtcXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG4gIH1cXG5cXG4gIC5BcHAtbWVudV90b3AgPiAqOmZpcnN0LWNoaWxkIHtcXG4gICAganVzdGlmeS1zZWxmOiBmbGV4LXN0YXJ0O1xcbiAgfVxcblxcbiAgLkFwcC1tZW51X3RvcCA+ICo6bGFzdC1jaGlsZCB7XFxuICAgIGp1c3RpZnktc2VsZjogZmxleC1lbmQ7XFxuICB9XFxuXFxuICAuQXBwLW1lbnVfYm90dG9tIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBib3R0b206IDA7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWluLWNvbnRlbnQgYXV0byBtaW4tY29udGVudDtcXG4gICAgZ3JpZC1nYXA6IDE1cHg7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuICAgIHotaW5kZXg6IDEwMDtcXG5cXG4gICAgOnJvb3RbZGlyPVxcXCJsdHJcXFwiXSAmIHtcXG4gICAgICBsZWZ0OiAwLjI1cmVtO1xcbiAgICB9XFxuXFxuICAgIDpyb290W2Rpcj1cXFwicnRsXFxcIl0gJiB7XFxuICAgICAgcmlnaHQ6IDAuMjVyZW07XFxuICAgIH1cXG5cXG4gICAgJi0tdHJhbnNpdGlvbi1sZWZ0IHtcXG4gICAgICBzZWN0aW9uIHtcXG4gICAgICAgIHdpZHRoOiAxODVweDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgc2VjdGlvbiB7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLkFwcC1tZW51X2JvdHRvbSA+ICo6Zmlyc3QtY2hpbGQge1xcbiAgICBqdXN0aWZ5LXNlbGY6IGZsZXgtc3RhcnQ7XFxuICB9XFxuXFxuICAuQXBwLW1lbnVfYm90dG9tID4gKjpsYXN0LWNoaWxkIHtcXG4gICAganVzdGlmeS1zZWxmOiBmbGV4LWVuZDtcXG4gIH1cXG5cXG4gIC5BcHAtbWVudV9sZWZ0IHtcXG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgYXV0byAxZnI7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gIH1cXG5cXG4gIC5BcHAtbWVudV9yaWdodCB7XFxuICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICB9XFxuXFxuICAuQXBwLW1lbnVfX2xlZnQge1xcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgfVxcblxcbiAgLmRyb3Bkb3duLXNlbGVjdCB7XFxuICAgIGhlaWdodDogMS41cmVtO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogMC41cmVtO1xcbiAgICBwYWRkaW5nLWlubGluZS1lbmQ6IDEuNXJlbTtcXG4gICAgY29sb3I6IHZhcigtLWljb24tZmlsbC1jb2xvcik7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zcGFjZS1mYWN0b3IpO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG4gICAgZm9udC1zaXplOiAwLjhyZW07XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIGFwcGVhcmFuY2U6IG5vbmU7XFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWRyb3Bkb3duLWljb24pO1xcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwLjdyZW0gdG9wIDUwJSwgMCAwO1xcblxcbiAgICA6cm9vdFtkaXI9XFxcInJ0bFxcXCJdICYge1xcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgMC43cmVtIHRvcCA1MCUsIDAgMDtcXG4gICAgfVxcblxcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDAuNjVlbSBhdXRvLCAxMDAlO1xcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG4gICAgfVxcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0yKTtcXG4gICAgfVxcblxcbiAgICAmOmFjdGl2ZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC56SW5kZXhCdXR0b24ge1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiA4cHg7XFxuICAgIHBhZGRpbmc6IDVweDtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiAxOHB4O1xcbiAgICAgIGhlaWdodDogMThweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnNjcm9sbC1iYWNrLXRvLWNvbnRlbnQge1xcbiAgICBjb2xvcjogdmFyKC0tcG9wdXAtdGV4dC1jb2xvcik7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBib3R0b206IDMwcHg7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xcbiAgfVxcblxcbiAgLmhlbHAtaWNvbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgZmlsbDogJG9jLWdyYXktNjtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgICBjb2xvcjogdmFyKC0taWNvbi1maWxsLWNvbG9yKTtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogMS41cmVtO1xcbiAgICAgIGhlaWdodDogMS41cmVtO1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5yZXNldC16b29tLWJ1dHRvbiB7XFxuICAgIHBhZGRpbmc6IDAuMmVtO1xcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeS1jb2xvcik7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS11aS1mb250KTtcXG4gIH1cXG5cXG4gIC51bmRvLXJlZG8tYnV0dG9ucyB7XFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XFxuICAgIGdhcDogMC40ZW07XFxuICAgIG1hcmdpbi10b3A6IGF1dG87XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG87XFxuICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDAuNmVtO1xcbiAgfVxcblxcbiAgQGluY2x1ZGUgaXNNb2JpbGUge1xcbiAgICBhc2lkZSB7XFxuICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgfVxcbiAgICAuc2Nyb2xsLWJhY2stdG8tY29udGVudCB7XFxuICAgICAgYm90dG9tOiBjYWxjKDgwcHggKyB2YXIoLS1zYWIsIDApKTtcXG4gICAgICB6LWluZGV4OiAtMTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnJ0bC1taXJyb3Ige1xcbiAgICA6cm9vdFtkaXI9XFxcInJ0bFxcXCJdICYge1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnplbi1tb2RlLXZpc2liaWxpdHkge1xcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXM7XFxuXFxuICAgICYuemVuLW1vZGUtdmlzaWJpbGl0eS0taGlkZGVuIHtcXG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgICBoZWlnaHQ6IDA7XFxuICAgICAgd2lkdGg6IDA7XFxuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGlzYWJsZS1wb2ludGVyRXZlbnRzIHtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG5cXG4gICYuZXhjYWxpZHJhdy0tdmlldy1tb2RlIHtcXG4gICAgLkFwcC1tZW51IHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgfVxcbiAgfVxcblxcbiAgaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLFxcbiAgdGV4dGFyZWE6bm90KC5leGNhbGlkcmF3LXd5c2l3eWcpIHtcXG4gICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeS1jb2xvcik7XFxuICAgIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taW5wdXQtYm9yZGVyLWNvbG9yKTtcXG4gICAgcGFkZGluZzogMC43NXJlbTtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc3BhY2UtZmFjdG9yKTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5wdXQtYmctY29sb3IpO1xcblxcbiAgICAmOm5vdCg6Zm9jdXMpIHtcXG4gICAgICAmOmhvdmVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlucHV0LWhvdmVyLWJnLWNvbG9yKTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZm9jdXMtaGlnaGxpZ2h0LWNvbG9yKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIHByaW50IHtcXG4gICAgLkFwcC1ib3R0b20tYmFyLFxcbiAgICAuRml4ZWRTaWRlQ29udGFpbmVyLFxcbiAgICAubGF5ZXItdWlfX3dyYXBwZXIge1xcbiAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5Ib21lQnV0dG9uLlRvb2xJY29uLlRvb2xJY29uX3R5cGVfZmxvYXRpbmcge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiA2MHB4O1xcbiAgICBsZWZ0OiBjYWxjKC0yICogdmFyKC0tc3BhY2UtZmFjdG9yKSk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDAgMjBweCAyMHB4IDA7XFxuXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ncmF5LTEpO1xcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tZ3JheS0xKTtcXG4gICAgfVxcbiAgICAmOmFjdGl2ZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWdyYXktMik7XFxuICAgIH1cXG5cXG4gICAgLlRvb2xJY29uX19pY29uIHtcXG4gICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbiAgICB9XFxuICAgIHN2ZyB7XFxuICAgICAgcG9zaXRpb246IHN0YXRpYztcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4uRXJyb3JTcGxhc2guZXhjYWxpZHJhdyB7XFxuICBtaW4taGVpZ2h0OiAxMDB2aDtcXG4gIHBhZGRpbmc6IDIwcHggMDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHVzZXItc2VsZWN0OiB0ZXh0O1xcblxcbiAgLkVycm9yU3BsYXNoLW1lc3NhZ2VDb250YWluZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG5cXG4gICAgcGFkZGluZzogNDBweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG9jLXJlZC0xO1xcbiAgICBib3JkZXI6IDNweCBzb2xpZCAkb2MtcmVkLTk7XFxuICB9XFxuXFxuICAuRXJyb3JTcGxhc2gtcGFyYWdyYXBoIHtcXG4gICAgbWFyZ2luOiAxNXB4IDA7XFxuICAgIG1heC13aWR0aDogNjAwcHg7XFxuXFxuICAgICYuYWxpZ24tY2VudGVyIHtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5iaWdnZXIsXFxuICAuYmlnZ2VyIGJ1dHRvbiB7XFxuICAgIGZvbnQtc2l6ZTogMS4xZW07XFxuICB9XFxuXFxuICAuc21hbGxlcixcXG4gIC5zbWFsbGVyIGJ1dHRvbiB7XFxuICAgIGZvbnQtc2l6ZTogMC45ZW07XFxuICB9XFxuXFxuICAuRXJyb3JTcGxhc2gtZGV0YWlscyB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcblxcbiAgICB0ZXh0YXJlYSB7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgbWFyZ2luOiAxMHB4IDA7XFxuICAgICAgZm9udC1mYW1pbHk6IFxcXCJDYXNjYWRpYVxcXCI7XFxuICAgICAgZm9udC1zaXplOiAwLjhlbTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIixcIkBpbXBvcnQgXFxcIm9wZW4tY29sb3Ivb3Blbi1jb2xvci5zY3NzXFxcIjtcXG5AaW1wb3J0IFxcXCIuL3ZhcmlhYmxlcy5tb2R1bGUuc2Nzc1xcXCI7XFxuXFxuLmV4Y2FsaWRyYXcge1xcbiAgLS10aGVtZS1maWx0ZXI6IG5vbmU7XFxuICAtLWJ1dHRvbi1kZXN0cnVjdGl2ZS1iZy1jb2xvcjogI3skb2MtcmVkLTF9O1xcbiAgLS1idXR0b24tZGVzdHJ1Y3RpdmUtY29sb3I6ICN7JG9jLXJlZC05fTtcXG4gIC0tYnV0dG9uLWdyYXktMTogI3skb2MtZ3JheS0yfTtcXG4gIC0tYnV0dG9uLWdyYXktMjogI3skb2MtZ3JheS00fTtcXG4gIC0tYnV0dG9uLWdyYXktMzogI3skb2MtZ3JheS01fTtcXG4gIC0tYnV0dG9uLXNwZWNpYWwtYWN0aXZlLWJnLWNvbG9yOiAjeyRvYy1ncmVlbi0wfTtcXG4gIC0tZGlhbG9nLWJvcmRlci1jb2xvcjogI3skb2MtZ3JheS02fTtcXG4gIC0tZHJvcGRvd24taWNvbjogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIyOTIuNFxcXCIgaGVpZ2h0PVxcXCIyOTIuNFxcXCIgdmlld0JveD1cXFwiMCAwIDI5MiAyOTJcXFwiPjxwYXRoIGQ9XFxcIk0yODcgMTk3TDE1OSA2OWMtNC0zLTgtNS0xMy01cy05IDItMTMgNUw1IDE5N2MtMyA0LTUgOC01IDEzczIgOSA1IDEzYzQgNCA4IDUgMTMgNWgyNTZjNSAwIDktMSAxMy01czUtOCA1LTEzLTEtOS01LTEzelxcXCIvPjwvc3ZnPicpO1xcbiAgLS1mb2N1cy1oaWdobGlnaHQtY29sb3I6ICN7JG9jLWJsdWUtMn07XFxuICAtLWljb24tZmlsbC1jb2xvcjogI3skb2MtYmxhY2t9O1xcbiAgLS1pY29uLWdyZWVuLWZpbGwtY29sb3I6ICN7JG9jLWdyZWVuLTl9O1xcbiAgLS1kZWZhdWx0LWJnLWNvbG9yOiAjeyRvYy13aGl0ZX07XFxuICAtLWlucHV0LWJnLWNvbG9yOiAjeyRvYy13aGl0ZX07XFxuICAtLWlucHV0LWJvcmRlci1jb2xvcjogI3skb2MtZ3JheS00fTtcXG4gIC0taW5wdXQtaG92ZXItYmctY29sb3I6ICN7JG9jLWdyYXktMX07XFxuICAtLWlucHV0LWxhYmVsLWNvbG9yOiAjeyRvYy1ncmF5LTd9O1xcbiAgLS1pc2xhbmQtYmctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7XFxuICAtLWtleWJpbmRpbmctY29sb3I6ICN7JG9jLWdyYXktNX07XFxuICAtLWxpbmstY29sb3I6ICN7JG9jLWJsdWUtN307XFxuICAtLW92ZXJsYXktYmctY29sb3I6ICN7dHJhbnNwYXJlbnRpemUoJG9jLXdoaXRlLCAwLjEyKX07XFxuICAtLXBvcHVwLWJnLWNvbG9yOiAjeyRvYy13aGl0ZX07XFxuICAtLXBvcHVwLXNlY29uZGFyeS1iZy1jb2xvcjogI3skb2MtZ3JheS0xfTtcXG4gIC0tcG9wdXAtdGV4dC1jb2xvcjogI3skb2MtYmxhY2t9O1xcbiAgLS1wb3B1cC10ZXh0LWludmVydGVkLWNvbG9yOiAjeyRvYy13aGl0ZX07XFxuICAtLXNhYjogZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xcbiAgLS1zYWw6IGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XFxuICAtLXNhcjogZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7XFxuICAtLXNhdDogZW52KHNhZmUtYXJlYS1pbnNldC10b3ApO1xcbiAgLS1zZWxlY3QtaGlnaGxpZ2h0LWNvbG9yOiAjeyRvYy1ibHVlLTV9O1xcbiAgLS1zaGFkb3ctaXNsYW5kOiAwIDFweCA1cHggI3t0cmFuc3BhcmVudGl6ZSgkb2MtYmxhY2ssIDAuODUpfTtcXG4gIC0tc3BhY2UtZmFjdG9yOiAwLjI1cmVtO1xcbiAgLS10ZXh0LXByaW1hcnktY29sb3I6ICN7JG9jLWdyYXktOH07XFxuXFxuICAmLnRoZW1lLS1kYXJrIHtcXG4gICAgYmFja2dyb3VuZDogJG9jLWJsYWNrO1xcblxcbiAgICAmLnRoZW1lLS1kYXJrLWJhY2tncm91bmQtbm9uZSB7XFxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi50aGVtZS0tZGFyayB7XFxuICAgIC0tdGhlbWUtZmlsdGVyOiAjeyR0aGVtZS1maWx0ZXJ9O1xcbiAgICAtLWJ1dHRvbi1kZXN0cnVjdGl2ZS1iZy1jb2xvcjogIzVhMDAwMDtcXG4gICAgLS1idXR0b24tZGVzdHJ1Y3RpdmUtY29sb3I6ICN7JG9jLXJlZC0zfTtcXG4gICAgLS1idXR0b24tZ3JheS0xOiAjMzYzNjM2O1xcbiAgICAtLWJ1dHRvbi1ncmF5LTI6ICMyNzI3Mjc7XFxuICAgIC0tYnV0dG9uLWdyYXktMzogIzIyMjtcXG4gICAgLS1idXR0b24tc3BlY2lhbC1hY3RpdmUtYmctY29sb3I6ICMyMDQ2MjQ7XFxuICAgIC0tZGlhbG9nLWJvcmRlci1jb2xvcjogI3skb2MtZ3JheS05fTtcXG4gICAgLS1kcm9wZG93bi1pY29uOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgd2lkdGg9XFxcIjI5Mi40XFxcIiBoZWlnaHQ9XFxcIjI5Mi40XFxcIiB2aWV3Qm94PVxcXCIwIDAgMjkyIDI5MlxcXCI+PHBhdGggZmlsbD1cXFwiJTIzY2VkNGRhXFxcIiBkPVxcXCJNMjg3IDE5N0wxNTkgNjljLTQtMy04LTUtMTMtNXMtOSAyLTEzIDVMNSAxOTdjLTMgNC01IDgtNSAxM3MyIDkgNSAxM2M0IDQgOCA1IDEzIDVoMjU2YzUgMCA5LTEgMTMtNXM1LTggNS0xMy0xLTktNS0xM3pcXFwiLz48L3N2Zz4nKTtcXG4gICAgLS1mb2N1cy1oaWdobGlnaHQtY29sb3I6ICN7JG9jLWJsdWUtNn07XFxuICAgIC0taWNvbi1maWxsLWNvbG9yOiAjeyRvYy1ncmF5LTR9O1xcbiAgICAtLWljb24tZ3JlZW4tZmlsbC1jb2xvcjogI3skb2MtZ3JlZW4tNH07XFxuICAgIC0tZGVmYXVsdC1iZy1jb2xvcjogIzEyMTIxMjtcXG4gICAgLS1pbnB1dC1iZy1jb2xvcjogIzEyMTIxMjtcXG4gICAgLS1pbnB1dC1ib3JkZXItY29sb3I6ICMyZTJlMmU7XFxuICAgIC0taW5wdXQtaG92ZXItYmctY29sb3I6ICMxODE4MTg7XFxuICAgIC0taW5wdXQtbGFiZWwtY29sb3I6ICN7JG9jLWdyYXktMn07XFxuICAgIC0taXNsYW5kLWJnLWNvbG9yOiByZ2JhKDMwLCAzMCwgMzAsIDAuOTgpO1xcbiAgICAtLWtleWJpbmRpbmctY29sb3I6ICN7JG9jLWdyYXktNn07XFxuICAgIC0tbGluay1jb2xvcjogI3skb2MtYmx1ZS00fTtcXG4gICAgLS1vdmVybGF5LWJnLWNvbG9yOiAje3RyYW5zcGFyZW50aXplKCRvYy1ncmF5LTgsIDAuODgpfTtcXG4gICAgLS1wb3B1cC1iZy1jb2xvcjogIzJjMmMyYztcXG4gICAgLS1wb3B1cC1zZWNvbmRhcnktYmctY29sb3I6ICMyMjI7XFxuICAgIC0tcG9wdXAtdGV4dC1jb2xvcjogI3skb2MtZ3JheS00fTtcXG4gICAgLS1wb3B1cC10ZXh0LWludmVydGVkLWNvbG9yOiAjNjM1YzVjO1xcbiAgICAtLXNlbGVjdC1oaWdobGlnaHQtY29sb3I6ICN7JG9jLWJsdWUtNH07XFxuICAgIC0tc2hhZG93LWlzbGFuZDogMCAxcHggNXB4ICN7dHJhbnNwYXJlbnRpemUoJG9jLWJsYWNrLCAwLjcpfTtcXG4gICAgLS10ZXh0LXByaW1hcnktY29sb3I6ICN7JG9jLWdyYXktNH07XFxuICB9XFxufVxcblwiLFwiLy9cXG4vL1xcbi8vICDwnZeWIPCdl6Ig8J2XnyDwnZeiIPCdl6VcXG4vLyAgdiAxLjkuMVxcbi8vXFxuLy8gIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxcblxcblxcbi8vICBHZW5lcmFsXFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy13aGl0ZTogICAgICAgICAjZmZmZmZmO1xcbiRvYy1ibGFjazogICAgICAgICAjMDAwMDAwO1xcblxcblxcbi8vICBHcmF5XFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy1ncmF5LWxpc3Q6IChcXG4gIFxcXCIwXFxcIjogI2Y4ZjlmYSxcXG4gIFxcXCIxXFxcIjogI2YxZjNmNSxcXG4gIFxcXCIyXFxcIjogI2U5ZWNlZixcXG4gIFxcXCIzXFxcIjogI2RlZTJlNixcXG4gIFxcXCI0XFxcIjogI2NlZDRkYSxcXG4gIFxcXCI1XFxcIjogI2FkYjViZCxcXG4gIFxcXCI2XFxcIjogIzg2OGU5NixcXG4gIFxcXCI3XFxcIjogIzQ5NTA1NyxcXG4gIFxcXCI4XFxcIjogIzM0M2E0MCxcXG4gIFxcXCI5XFxcIjogIzIxMjUyOVxcbik7XFxuXFxuJG9jLWdyYXktMDogbWFwLWdldCgkb2MtZ3JheS1saXN0LCBcXFwiMFxcXCIpO1xcbiRvYy1ncmF5LTE6IG1hcC1nZXQoJG9jLWdyYXktbGlzdCwgXFxcIjFcXFwiKTtcXG4kb2MtZ3JheS0yOiBtYXAtZ2V0KCRvYy1ncmF5LWxpc3QsIFxcXCIyXFxcIik7XFxuJG9jLWdyYXktMzogbWFwLWdldCgkb2MtZ3JheS1saXN0LCBcXFwiM1xcXCIpO1xcbiRvYy1ncmF5LTQ6IG1hcC1nZXQoJG9jLWdyYXktbGlzdCwgXFxcIjRcXFwiKTtcXG4kb2MtZ3JheS01OiBtYXAtZ2V0KCRvYy1ncmF5LWxpc3QsIFxcXCI1XFxcIik7XFxuJG9jLWdyYXktNjogbWFwLWdldCgkb2MtZ3JheS1saXN0LCBcXFwiNlxcXCIpO1xcbiRvYy1ncmF5LTc6IG1hcC1nZXQoJG9jLWdyYXktbGlzdCwgXFxcIjdcXFwiKTtcXG4kb2MtZ3JheS04OiBtYXAtZ2V0KCRvYy1ncmF5LWxpc3QsIFxcXCI4XFxcIik7XFxuJG9jLWdyYXktOTogbWFwLWdldCgkb2MtZ3JheS1saXN0LCBcXFwiOVxcXCIpO1xcblxcblxcbi8vICBSZWRcXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLXJlZC1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNmZmY1ZjUsXFxuICBcXFwiMVxcXCI6ICNmZmUzZTMsXFxuICBcXFwiMlxcXCI6ICNmZmM5YzksXFxuICBcXFwiM1xcXCI6ICNmZmE4YTgsXFxuICBcXFwiNFxcXCI6ICNmZjg3ODcsXFxuICBcXFwiNVxcXCI6ICNmZjZiNmIsXFxuICBcXFwiNlxcXCI6ICNmYTUyNTIsXFxuICBcXFwiN1xcXCI6ICNmMDNlM2UsXFxuICBcXFwiOFxcXCI6ICNlMDMxMzEsXFxuICBcXFwiOVxcXCI6ICNjOTJhMmFcXG4pO1xcblxcbiRvYy1yZWQtMDogbWFwLWdldCgkb2MtcmVkLWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLXJlZC0xOiBtYXAtZ2V0KCRvYy1yZWQtbGlzdCwgXFxcIjFcXFwiKTtcXG4kb2MtcmVkLTI6IG1hcC1nZXQoJG9jLXJlZC1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy1yZWQtMzogbWFwLWdldCgkb2MtcmVkLWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLXJlZC00OiBtYXAtZ2V0KCRvYy1yZWQtbGlzdCwgXFxcIjRcXFwiKTtcXG4kb2MtcmVkLTU6IG1hcC1nZXQoJG9jLXJlZC1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy1yZWQtNjogbWFwLWdldCgkb2MtcmVkLWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLXJlZC03OiBtYXAtZ2V0KCRvYy1yZWQtbGlzdCwgXFxcIjdcXFwiKTtcXG4kb2MtcmVkLTg6IG1hcC1nZXQoJG9jLXJlZC1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy1yZWQtOTogbWFwLWdldCgkb2MtcmVkLWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIFBpbmtcXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLXBpbmstbGlzdDogKFxcbiAgXFxcIjBcXFwiOiAjZmZmMGY2LFxcbiAgXFxcIjFcXFwiOiAjZmZkZWViLFxcbiAgXFxcIjJcXFwiOiAjZmNjMmQ3LFxcbiAgXFxcIjNcXFwiOiAjZmFhMmMxLFxcbiAgXFxcIjRcXFwiOiAjZjc4M2FjLFxcbiAgXFxcIjVcXFwiOiAjZjA2NTk1LFxcbiAgXFxcIjZcXFwiOiAjZTY0OTgwLFxcbiAgXFxcIjdcXFwiOiAjZDYzMzZjLFxcbiAgXFxcIjhcXFwiOiAjYzIyNTVjLFxcbiAgXFxcIjlcXFwiOiAjYTYxZTRkXFxuKTtcXG5cXG4kb2MtcGluay0wOiBtYXAtZ2V0KCRvYy1waW5rLWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLXBpbmstMTogbWFwLWdldCgkb2MtcGluay1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy1waW5rLTI6IG1hcC1nZXQoJG9jLXBpbmstbGlzdCwgXFxcIjJcXFwiKTtcXG4kb2MtcGluay0zOiBtYXAtZ2V0KCRvYy1waW5rLWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLXBpbmstNDogbWFwLWdldCgkb2MtcGluay1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy1waW5rLTU6IG1hcC1nZXQoJG9jLXBpbmstbGlzdCwgXFxcIjVcXFwiKTtcXG4kb2MtcGluay02OiBtYXAtZ2V0KCRvYy1waW5rLWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLXBpbmstNzogbWFwLWdldCgkb2MtcGluay1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy1waW5rLTg6IG1hcC1nZXQoJG9jLXBpbmstbGlzdCwgXFxcIjhcXFwiKTtcXG4kb2MtcGluay05OiBtYXAtZ2V0KCRvYy1waW5rLWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIEdyYXBlXFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy1ncmFwZS1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNmOGYwZmMsXFxuICBcXFwiMVxcXCI6ICNmM2Q5ZmEsXFxuICBcXFwiMlxcXCI6ICNlZWJlZmEsXFxuICBcXFwiM1xcXCI6ICNlNTk5ZjcsXFxuICBcXFwiNFxcXCI6ICNkYTc3ZjIsXFxuICBcXFwiNVxcXCI6ICNjYzVkZTgsXFxuICBcXFwiNlxcXCI6ICNiZTRiZGIsXFxuICBcXFwiN1xcXCI6ICNhZTNlYzksXFxuICBcXFwiOFxcXCI6ICM5YzM2YjUsXFxuICBcXFwiOVxcXCI6ICM4NjJlOWNcXG4pO1xcblxcbiRvYy1ncmFwZS0wOiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiMFxcXCIpO1xcbiRvYy1ncmFwZS0xOiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy1ncmFwZS0yOiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy1ncmFwZS0zOiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiM1xcXCIpO1xcbiRvYy1ncmFwZS00OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy1ncmFwZS01OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy1ncmFwZS02OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiNlxcXCIpO1xcbiRvYy1ncmFwZS03OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy1ncmFwZS04OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy1ncmFwZS05OiBtYXAtZ2V0KCRvYy1ncmFwZS1saXN0LCBcXFwiOVxcXCIpO1xcblxcblxcbi8vICBWaW9sZXRcXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLXZpb2xldC1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNmM2YwZmYsXFxuICBcXFwiMVxcXCI6ICNlNWRiZmYsXFxuICBcXFwiMlxcXCI6ICNkMGJmZmYsXFxuICBcXFwiM1xcXCI6ICNiMTk3ZmMsXFxuICBcXFwiNFxcXCI6ICM5Nzc1ZmEsXFxuICBcXFwiNVxcXCI6ICM4NDVlZjcsXFxuICBcXFwiNlxcXCI6ICM3OTUwZjIsXFxuICBcXFwiN1xcXCI6ICM3MDQ4ZTgsXFxuICBcXFwiOFxcXCI6ICM2NzQxZDksXFxuICBcXFwiOVxcXCI6ICM1ZjNkYzRcXG4pO1xcblxcbiRvYy12aW9sZXQtMDogbWFwLWdldCgkb2MtdmlvbGV0LWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLXZpb2xldC0xOiBtYXAtZ2V0KCRvYy12aW9sZXQtbGlzdCwgXFxcIjFcXFwiKTtcXG4kb2MtdmlvbGV0LTI6IG1hcC1nZXQoJG9jLXZpb2xldC1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy12aW9sZXQtMzogbWFwLWdldCgkb2MtdmlvbGV0LWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLXZpb2xldC00OiBtYXAtZ2V0KCRvYy12aW9sZXQtbGlzdCwgXFxcIjRcXFwiKTtcXG4kb2MtdmlvbGV0LTU6IG1hcC1nZXQoJG9jLXZpb2xldC1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy12aW9sZXQtNjogbWFwLWdldCgkb2MtdmlvbGV0LWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLXZpb2xldC03OiBtYXAtZ2V0KCRvYy12aW9sZXQtbGlzdCwgXFxcIjdcXFwiKTtcXG4kb2MtdmlvbGV0LTg6IG1hcC1nZXQoJG9jLXZpb2xldC1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy12aW9sZXQtOTogbWFwLWdldCgkb2MtdmlvbGV0LWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIEluZGlnb1xcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MtaW5kaWdvLWxpc3Q6IChcXG4gIFxcXCIwXFxcIjogI2VkZjJmZixcXG4gIFxcXCIxXFxcIjogI2RiZTRmZixcXG4gIFxcXCIyXFxcIjogI2JhYzhmZixcXG4gIFxcXCIzXFxcIjogIzkxYTdmZixcXG4gIFxcXCI0XFxcIjogIzc0OGZmYyxcXG4gIFxcXCI1XFxcIjogIzVjN2NmYSxcXG4gIFxcXCI2XFxcIjogIzRjNmVmNSxcXG4gIFxcXCI3XFxcIjogIzQyNjNlYixcXG4gIFxcXCI4XFxcIjogIzNiNWJkYixcXG4gIFxcXCI5XFxcIjogIzM2NGZjN1xcbik7XFxuXFxuJG9jLWluZGlnby0wOiBtYXAtZ2V0KCRvYy1pbmRpZ28tbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MtaW5kaWdvLTE6IG1hcC1nZXQoJG9jLWluZGlnby1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy1pbmRpZ28tMjogbWFwLWdldCgkb2MtaW5kaWdvLWxpc3QsIFxcXCIyXFxcIik7XFxuJG9jLWluZGlnby0zOiBtYXAtZ2V0KCRvYy1pbmRpZ28tbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MtaW5kaWdvLTQ6IG1hcC1nZXQoJG9jLWluZGlnby1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy1pbmRpZ28tNTogbWFwLWdldCgkb2MtaW5kaWdvLWxpc3QsIFxcXCI1XFxcIik7XFxuJG9jLWluZGlnby02OiBtYXAtZ2V0KCRvYy1pbmRpZ28tbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MtaW5kaWdvLTc6IG1hcC1nZXQoJG9jLWluZGlnby1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy1pbmRpZ28tODogbWFwLWdldCgkb2MtaW5kaWdvLWxpc3QsIFxcXCI4XFxcIik7XFxuJG9jLWluZGlnby05OiBtYXAtZ2V0KCRvYy1pbmRpZ28tbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgQmx1ZVxcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MtYmx1ZS1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNlN2Y1ZmYsXFxuICBcXFwiMVxcXCI6ICNkMGViZmYsXFxuICBcXFwiMlxcXCI6ICNhNWQ4ZmYsXFxuICBcXFwiM1xcXCI6ICM3NGMwZmMsXFxuICBcXFwiNFxcXCI6ICM0ZGFiZjcsXFxuICBcXFwiNVxcXCI6ICMzMzlhZjAsXFxuICBcXFwiNlxcXCI6ICMyMjhiZTYsXFxuICBcXFwiN1xcXCI6ICMxYzdlZDYsXFxuICBcXFwiOFxcXCI6ICMxOTcxYzIsXFxuICBcXFwiOVxcXCI6ICMxODY0YWJcXG4pO1xcblxcbiRvYy1ibHVlLTA6IG1hcC1nZXQoJG9jLWJsdWUtbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MtYmx1ZS0xOiBtYXAtZ2V0KCRvYy1ibHVlLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLWJsdWUtMjogbWFwLWdldCgkb2MtYmx1ZS1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy1ibHVlLTM6IG1hcC1nZXQoJG9jLWJsdWUtbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MtYmx1ZS00OiBtYXAtZ2V0KCRvYy1ibHVlLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLWJsdWUtNTogbWFwLWdldCgkb2MtYmx1ZS1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy1ibHVlLTY6IG1hcC1nZXQoJG9jLWJsdWUtbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MtYmx1ZS03OiBtYXAtZ2V0KCRvYy1ibHVlLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLWJsdWUtODogbWFwLWdldCgkb2MtYmx1ZS1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy1ibHVlLTk6IG1hcC1nZXQoJG9jLWJsdWUtbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgQ3lhblxcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MtY3lhbi1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNlM2ZhZmMsXFxuICBcXFwiMVxcXCI6ICNjNWY2ZmEsXFxuICBcXFwiMlxcXCI6ICM5OWU5ZjIsXFxuICBcXFwiM1xcXCI6ICM2NmQ5ZTgsXFxuICBcXFwiNFxcXCI6ICMzYmM5ZGIsXFxuICBcXFwiNVxcXCI6ICMyMmI4Y2YsXFxuICBcXFwiNlxcXCI6ICMxNWFhYmYsXFxuICBcXFwiN1xcXCI6ICMxMDk4YWQsXFxuICBcXFwiOFxcXCI6ICMwYzg1OTksXFxuICBcXFwiOVxcXCI6ICMwYjcyODVcXG4pO1xcblxcbiRvYy1jeWFuLTA6IG1hcC1nZXQoJG9jLWN5YW4tbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MtY3lhbi0xOiBtYXAtZ2V0KCRvYy1jeWFuLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLWN5YW4tMjogbWFwLWdldCgkb2MtY3lhbi1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy1jeWFuLTM6IG1hcC1nZXQoJG9jLWN5YW4tbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MtY3lhbi00OiBtYXAtZ2V0KCRvYy1jeWFuLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLWN5YW4tNTogbWFwLWdldCgkb2MtY3lhbi1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy1jeWFuLTY6IG1hcC1nZXQoJG9jLWN5YW4tbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MtY3lhbi03OiBtYXAtZ2V0KCRvYy1jeWFuLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLWN5YW4tODogbWFwLWdldCgkb2MtY3lhbi1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy1jeWFuLTk6IG1hcC1nZXQoJG9jLWN5YW4tbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgVGVhbFxcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MtdGVhbC1saXN0OiAoXFxuICBcXFwiMFxcXCI6ICNlNmZjZjUsXFxuICBcXFwiMVxcXCI6ICNjM2ZhZTgsXFxuICBcXFwiMlxcXCI6ICM5NmYyZDcsXFxuICBcXFwiM1xcXCI6ICM2M2U2YmUsXFxuICBcXFwiNFxcXCI6ICMzOGQ5YTksXFxuICBcXFwiNVxcXCI6ICMyMGM5OTcsXFxuICBcXFwiNlxcXCI6ICMxMmI4ODYsXFxuICBcXFwiN1xcXCI6ICMwY2E2NzgsXFxuICBcXFwiOFxcXCI6ICMwOTkyNjgsXFxuICBcXFwiOVxcXCI6ICMwODdmNWJcXG4pO1xcblxcbiRvYy10ZWFsLTA6IG1hcC1nZXQoJG9jLXRlYWwtbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MtdGVhbC0xOiBtYXAtZ2V0KCRvYy10ZWFsLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLXRlYWwtMjogbWFwLWdldCgkb2MtdGVhbC1saXN0LCBcXFwiMlxcXCIpO1xcbiRvYy10ZWFsLTM6IG1hcC1nZXQoJG9jLXRlYWwtbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MtdGVhbC00OiBtYXAtZ2V0KCRvYy10ZWFsLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLXRlYWwtNTogbWFwLWdldCgkb2MtdGVhbC1saXN0LCBcXFwiNVxcXCIpO1xcbiRvYy10ZWFsLTY6IG1hcC1nZXQoJG9jLXRlYWwtbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MtdGVhbC03OiBtYXAtZ2V0KCRvYy10ZWFsLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLXRlYWwtODogbWFwLWdldCgkb2MtdGVhbC1saXN0LCBcXFwiOFxcXCIpO1xcbiRvYy10ZWFsLTk6IG1hcC1nZXQoJG9jLXRlYWwtbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgR3JlZW5cXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLWdyZWVuLWxpc3Q6IChcXG4gIFxcXCIwXFxcIjogI2ViZmJlZSxcXG4gIFxcXCIxXFxcIjogI2QzZjlkOCxcXG4gIFxcXCIyXFxcIjogI2IyZjJiYixcXG4gIFxcXCIzXFxcIjogIzhjZTk5YSxcXG4gIFxcXCI0XFxcIjogIzY5ZGI3YyxcXG4gIFxcXCI1XFxcIjogIzUxY2Y2NixcXG4gIFxcXCI2XFxcIjogIzQwYzA1NyxcXG4gIFxcXCI3XFxcIjogIzM3YjI0ZCxcXG4gIFxcXCI4XFxcIjogIzJmOWU0NCxcXG4gIFxcXCI5XFxcIjogIzJiOGEzZVxcbik7XFxuXFxuJG9jLWdyZWVuLTA6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLWdyZWVuLTE6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLWdyZWVuLTI6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCIyXFxcIik7XFxuJG9jLWdyZWVuLTM6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLWdyZWVuLTQ6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLWdyZWVuLTU6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI1XFxcIik7XFxuJG9jLWdyZWVuLTY6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLWdyZWVuLTc6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLWdyZWVuLTg6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI4XFxcIik7XFxuJG9jLWdyZWVuLTk6IG1hcC1nZXQoJG9jLWdyZWVuLWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIExpbWVcXG4vLyAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXFxuXFxuJG9jLWxpbWUtbGlzdDogKFxcbiAgXFxcIjBcXFwiOiAjZjRmY2UzLFxcbiAgXFxcIjFcXFwiOiAjZTlmYWM4LFxcbiAgXFxcIjJcXFwiOiAjZDhmNWEyLFxcbiAgXFxcIjNcXFwiOiAjYzBlYjc1LFxcbiAgXFxcIjRcXFwiOiAjYTllMzRiLFxcbiAgXFxcIjVcXFwiOiAjOTRkODJkLFxcbiAgXFxcIjZcXFwiOiAjODJjOTFlLFxcbiAgXFxcIjdcXFwiOiAjNzRiODE2LFxcbiAgXFxcIjhcXFwiOiAjNjZhODBmLFxcbiAgXFxcIjlcXFwiOiAjNWM5NDBkXFxuKTtcXG5cXG4kb2MtbGltZS0wOiBtYXAtZ2V0KCRvYy1saW1lLWxpc3QsIFxcXCIwXFxcIik7XFxuJG9jLWxpbWUtMTogbWFwLWdldCgkb2MtbGltZS1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy1saW1lLTI6IG1hcC1nZXQoJG9jLWxpbWUtbGlzdCwgXFxcIjJcXFwiKTtcXG4kb2MtbGltZS0zOiBtYXAtZ2V0KCRvYy1saW1lLWxpc3QsIFxcXCIzXFxcIik7XFxuJG9jLWxpbWUtNDogbWFwLWdldCgkb2MtbGltZS1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy1saW1lLTU6IG1hcC1nZXQoJG9jLWxpbWUtbGlzdCwgXFxcIjVcXFwiKTtcXG4kb2MtbGltZS02OiBtYXAtZ2V0KCRvYy1saW1lLWxpc3QsIFxcXCI2XFxcIik7XFxuJG9jLWxpbWUtNzogbWFwLWdldCgkb2MtbGltZS1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy1saW1lLTg6IG1hcC1nZXQoJG9jLWxpbWUtbGlzdCwgXFxcIjhcXFwiKTtcXG4kb2MtbGltZS05OiBtYXAtZ2V0KCRvYy1saW1lLWxpc3QsIFxcXCI5XFxcIik7XFxuXFxuXFxuLy8gIFllbGxvd1xcbi8vICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcXG5cXG4kb2MteWVsbG93LWxpc3Q6IChcXG4gIFxcXCIwXFxcIjogI2ZmZjlkYixcXG4gIFxcXCIxXFxcIjogI2ZmZjNiZixcXG4gIFxcXCIyXFxcIjogI2ZmZWM5OSxcXG4gIFxcXCIzXFxcIjogI2ZmZTA2NixcXG4gIFxcXCI0XFxcIjogI2ZmZDQzYixcXG4gIFxcXCI1XFxcIjogI2ZjYzQxOSxcXG4gIFxcXCI2XFxcIjogI2ZhYjAwNSxcXG4gIFxcXCI3XFxcIjogI2Y1OWYwMCxcXG4gIFxcXCI4XFxcIjogI2YwOGMwMCxcXG4gIFxcXCI5XFxcIjogI2U2NzcwMFxcbik7XFxuXFxuJG9jLXllbGxvdy0wOiBtYXAtZ2V0KCRvYy15ZWxsb3ctbGlzdCwgXFxcIjBcXFwiKTtcXG4kb2MteWVsbG93LTE6IG1hcC1nZXQoJG9jLXllbGxvdy1saXN0LCBcXFwiMVxcXCIpO1xcbiRvYy15ZWxsb3ctMjogbWFwLWdldCgkb2MteWVsbG93LWxpc3QsIFxcXCIyXFxcIik7XFxuJG9jLXllbGxvdy0zOiBtYXAtZ2V0KCRvYy15ZWxsb3ctbGlzdCwgXFxcIjNcXFwiKTtcXG4kb2MteWVsbG93LTQ6IG1hcC1nZXQoJG9jLXllbGxvdy1saXN0LCBcXFwiNFxcXCIpO1xcbiRvYy15ZWxsb3ctNTogbWFwLWdldCgkb2MteWVsbG93LWxpc3QsIFxcXCI1XFxcIik7XFxuJG9jLXllbGxvdy02OiBtYXAtZ2V0KCRvYy15ZWxsb3ctbGlzdCwgXFxcIjZcXFwiKTtcXG4kb2MteWVsbG93LTc6IG1hcC1nZXQoJG9jLXllbGxvdy1saXN0LCBcXFwiN1xcXCIpO1xcbiRvYy15ZWxsb3ctODogbWFwLWdldCgkb2MteWVsbG93LWxpc3QsIFxcXCI4XFxcIik7XFxuJG9jLXllbGxvdy05OiBtYXAtZ2V0KCRvYy15ZWxsb3ctbGlzdCwgXFxcIjlcXFwiKTtcXG5cXG5cXG4vLyAgT3JhbmdlXFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy1vcmFuZ2UtbGlzdDogKFxcbiAgXFxcIjBcXFwiOiAjZmZmNGU2LFxcbiAgXFxcIjFcXFwiOiAjZmZlOGNjLFxcbiAgXFxcIjJcXFwiOiAjZmZkOGE4LFxcbiAgXFxcIjNcXFwiOiAjZmZjMDc4LFxcbiAgXFxcIjRcXFwiOiAjZmZhOTRkLFxcbiAgXFxcIjVcXFwiOiAjZmY5MjJiLFxcbiAgXFxcIjZcXFwiOiAjZmQ3ZTE0LFxcbiAgXFxcIjdcXFwiOiAjZjc2NzA3LFxcbiAgXFxcIjhcXFwiOiAjZTg1OTBjLFxcbiAgXFxcIjlcXFwiOiAjZDk0ODBmXFxuKTtcXG5cXG4kb2Mtb3JhbmdlLTA6IG1hcC1nZXQoJG9jLW9yYW5nZS1saXN0LCBcXFwiMFxcXCIpO1xcbiRvYy1vcmFuZ2UtMTogbWFwLWdldCgkb2Mtb3JhbmdlLWxpc3QsIFxcXCIxXFxcIik7XFxuJG9jLW9yYW5nZS0yOiBtYXAtZ2V0KCRvYy1vcmFuZ2UtbGlzdCwgXFxcIjJcXFwiKTtcXG4kb2Mtb3JhbmdlLTM6IG1hcC1nZXQoJG9jLW9yYW5nZS1saXN0LCBcXFwiM1xcXCIpO1xcbiRvYy1vcmFuZ2UtNDogbWFwLWdldCgkb2Mtb3JhbmdlLWxpc3QsIFxcXCI0XFxcIik7XFxuJG9jLW9yYW5nZS01OiBtYXAtZ2V0KCRvYy1vcmFuZ2UtbGlzdCwgXFxcIjVcXFwiKTtcXG4kb2Mtb3JhbmdlLTY6IG1hcC1nZXQoJG9jLW9yYW5nZS1saXN0LCBcXFwiNlxcXCIpO1xcbiRvYy1vcmFuZ2UtNzogbWFwLWdldCgkb2Mtb3JhbmdlLWxpc3QsIFxcXCI3XFxcIik7XFxuJG9jLW9yYW5nZS04OiBtYXAtZ2V0KCRvYy1vcmFuZ2UtbGlzdCwgXFxcIjhcXFwiKTtcXG4kb2Mtb3JhbmdlLTk6IG1hcC1nZXQoJG9jLW9yYW5nZS1saXN0LCBcXFwiOVxcXCIpO1xcblxcblxcbi8vICBDb2xvciBsaXN0XFxuLy8gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxcblxcbiRvYy1jb2xvci1zcGVjdHJ1bTogICA5O1xcblxcbiRvYy1jb2xvci1saXN0OiAoXFxuICAkb2MtZ3JheS1saXN0OiAgICAgIFxcXCJncmF5XFxcIixcXG4gICRvYy1yZWQtbGlzdDogICAgICBcXFwicmVkXFxcIixcXG4gICRvYy1waW5rLWxpc3Q6ICAgICAgXFxcInBpbmtcXFwiLFxcbiAgJG9jLWdyYXBlLWxpc3Q6ICAgICAgXFxcImdyYXBlXFxcIixcXG4gICRvYy12aW9sZXQtbGlzdDogICAgICBcXFwidmlvbGV0XFxcIixcXG4gICRvYy1pbmRpZ28tbGlzdDogICAgICBcXFwiaW5kaWdvXFxcIixcXG4gICRvYy1ibHVlLWxpc3Q6ICAgICAgXFxcImJsdWVcXFwiLFxcbiAgJG9jLWN5YW4tbGlzdDogICAgICBcXFwiY3lhblxcXCIsXFxuICAkb2MtdGVhbC1saXN0OiAgICAgIFxcXCJ0ZWFsXFxcIixcXG4gICRvYy1ncmVlbi1saXN0OiAgICAgIFxcXCJncmVlblxcXCIsXFxuICAkb2MtbGltZS1saXN0OiAgICAgIFxcXCJsaW1lXFxcIixcXG4gICRvYy15ZWxsb3ctbGlzdDogICAgICBcXFwieWVsbG93XFxcIixcXG4gICRvYy1vcmFuZ2UtbGlzdDogICAgICBcXFwib3JhbmdlXFxcIlxcbik7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./node_modules/sass-loader/dist/cjs.js!../../css/styles.scss\n");
|
|
1124
1124
|
|
|
1125
1125
|
/***/ }),
|
|
1126
1126
|
|
|
@@ -1175,7 +1175,7 @@ eval("\n\nmodule.exports = function (item) {\n var content = item[1];\n var cs
|
|
|
1175
1175
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1176
1176
|
|
|
1177
1177
|
"use strict";
|
|
1178
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionAddToLibrary\": () => (/* binding */ actionAddToLibrary)\n/* harmony export */ });\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./register */ \"../../actions/register.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_newElement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../element/newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\nconst actionAddToLibrary = (0,_register__WEBPACK_IMPORTED_MODULE_0__.register)({\r\n name: \"addToLibrary\",\r\n perform: (elements, appState, _, app) => {\r\n if (
|
|
1178
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionAddToLibrary\": () => (/* binding */ actionAddToLibrary)\n/* harmony export */ });\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./register */ \"../../actions/register.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_newElement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../element/newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\nconst actionAddToLibrary = (0,_register__WEBPACK_IMPORTED_MODULE_0__.register)({\r\n name: \"addToLibrary\",\r\n perform: (elements, appState, _, app) => {\r\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_1__.getSelectedElements)((0,_element__WEBPACK_IMPORTED_MODULE_2__.getNonDeletedElements)(elements), appState);\r\n if (selectedElements.some((element) => element.type === \"image\")) {\r\n return {\r\n commitToHistory: false,\r\n appState: Object.assign(Object.assign({}, appState), { errorMessage: \"Support for adding images to the library coming soon!\" }),\r\n };\r\n }\r\n return app.library\r\n .loadLibrary()\r\n .then((items) => {\r\n return app.library.saveLibrary([\r\n {\r\n id: (0,_random__WEBPACK_IMPORTED_MODULE_4__.randomId)(),\r\n status: \"unpublished\",\r\n elements: selectedElements.map(_element_newElement__WEBPACK_IMPORTED_MODULE_3__.deepCopyElement),\r\n created: Date.now(),\r\n },\r\n ...items,\r\n ]);\r\n })\r\n .then(() => {\r\n return {\r\n commitToHistory: false,\r\n appState: Object.assign(Object.assign({}, appState), { toastMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_5__.t)(\"toast.addedToLibrary\") }),\r\n };\r\n })\r\n .catch((error) => {\r\n return {\r\n commitToHistory: false,\r\n appState: Object.assign(Object.assign({}, appState), { errorMessage: error.message }),\r\n };\r\n });\r\n },\r\n contextItemLabel: \"labels.addToLibrary\",\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYWN0aW9ucy9hY3Rpb25BZGRUb0xpYnJhcnkudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFzQztBQUNTO0FBQ0k7QUFDSztBQUNuQjtBQUNUO0FBRXJCLE1BQU0sa0JBQWtCLEdBQUcsbURBQVEsQ0FBQztJQUN6QyxJQUFJLEVBQUUsY0FBYztJQUNwQixPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUN0QyxNQUFNLGdCQUFnQixHQUFHLDJEQUFtQixDQUMxQywrREFBcUIsQ0FBQyxRQUFRLENBQUMsRUFDL0IsUUFBUSxDQUNULENBQUM7UUFDRixJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsRUFBRTtZQUNoRSxPQUFPO2dCQUNMLGVBQWUsRUFBRSxLQUFLO2dCQUN0QixRQUFRLGtDQUNILFFBQVEsS0FDWCxZQUFZLEVBQUUsdURBQXVELEdBQ3RFO2FBQ0YsQ0FBQztTQUNIO1FBRUQsT0FBTyxHQUFHLENBQUMsT0FBTzthQUNmLFdBQVcsRUFBRTthQUNiLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDN0I7b0JBQ0UsRUFBRSxFQUFFLGlEQUFRLEVBQUU7b0JBQ2QsTUFBTSxFQUFFLGFBQWE7b0JBQ3JCLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZ0VBQWUsQ0FBQztvQkFDL0MsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7aUJBQ3BCO2dCQUNELEdBQUcsS0FBSzthQUNULENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxPQUFPO2dCQUNMLGVBQWUsRUFBRSxLQUFLO2dCQUN0QixRQUFRLGtDQUNILFFBQVEsS0FDWCxZQUFZLEVBQUUsd0NBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUN4QzthQUNGLENBQUM7UUFDSixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLE9BQU87Z0JBQ0wsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLFFBQVEsa0NBQ0gsUUFBUSxLQUNYLFlBQVksRUFBRSxLQUFLLENBQUMsT0FBTyxHQUM1QjthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxnQkFBZ0IsRUFBRSxxQkFBcUI7Q0FDeEMsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2FjdGlvbnMvYWN0aW9uQWRkVG9MaWJyYXJ5LnRzPzQzMmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9yZWdpc3RlclwiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzIH0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCB7IGRlZXBDb3B5RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L25ld0VsZW1lbnRcIjtcbmltcG9ydCB7IHJhbmRvbUlkIH0gZnJvbSBcIi4uL3JhbmRvbVwiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25BZGRUb0xpYnJhcnkgPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwiYWRkVG9MaWJyYXJ5XCIsXG4gIHBlcmZvcm06IChlbGVtZW50cywgYXBwU3RhdGUsIF8sIGFwcCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKFxuICAgICAgZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzKGVsZW1lbnRzKSxcbiAgICAgIGFwcFN0YXRlLFxuICAgICk7XG4gICAgaWYgKHNlbGVjdGVkRWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZWxlbWVudC50eXBlID09PSBcImltYWdlXCIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21taXRUb0hpc3Rvcnk6IGZhbHNlLFxuICAgICAgICBhcHBTdGF0ZToge1xuICAgICAgICAgIC4uLmFwcFN0YXRlLFxuICAgICAgICAgIGVycm9yTWVzc2FnZTogXCJTdXBwb3J0IGZvciBhZGRpbmcgaW1hZ2VzIHRvIHRoZSBsaWJyYXJ5IGNvbWluZyBzb29uIVwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBwLmxpYnJhcnlcbiAgICAgIC5sb2FkTGlicmFyeSgpXG4gICAgICAudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcC5saWJyYXJ5LnNhdmVMaWJyYXJ5KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgICAgIHN0YXR1czogXCJ1bnB1Ymxpc2hlZFwiLFxuICAgICAgICAgICAgZWxlbWVudHM6IHNlbGVjdGVkRWxlbWVudHMubWFwKGRlZXBDb3B5RWxlbWVudCksXG4gICAgICAgICAgICBjcmVhdGVkOiBEYXRlLm5vdygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uaXRlbXMsXG4gICAgICAgIF0pO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb21taXRUb0hpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgICAgICAuLi5hcHBTdGF0ZSxcbiAgICAgICAgICAgIHRvYXN0TWVzc2FnZTogdChcInRvYXN0LmFkZGVkVG9MaWJyYXJ5XCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbW1pdFRvSGlzdG9yeTogZmFsc2UsXG4gICAgICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgICAgIC4uLmFwcFN0YXRlLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfSxcbiAgY29udGV4dEl0ZW1MYWJlbDogXCJsYWJlbHMuYWRkVG9MaWJyYXJ5XCIsXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../actions/actionAddToLibrary.ts\n");
|
|
1179
1179
|
|
|
1180
1180
|
/***/ }),
|
|
1181
1181
|
|
|
@@ -2341,7 +2341,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2341
2341
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2342
2342
|
|
|
2343
2343
|
"use strict";
|
|
2344
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"isGenericElement\": () => (/* binding */ isGenericElement),\n/* harmony export */ \"isInitializedImageElement\": () => (/* binding */ isInitializedImageElement),\n/* harmony export */ \"isImageElement\": () => (/* binding */ isImageElement),\n/* harmony export */ \"isTextElement\": () => (/* binding */ isTextElement),\n/* harmony export */ \"isFreeDrawElement\": () => (/* binding */ isFreeDrawElement),\n/* harmony export */ \"isFreeDrawElementType\": () => (/* binding */ isFreeDrawElementType),\n/* harmony export */ \"isLinearElement\": () => (/* binding */ isLinearElement),\n/* harmony export */ \"isLinearElementType\": () => (/* binding */ isLinearElementType),\n/* harmony export */ \"isBindingElement\": () => (/* binding */ isBindingElement),\n/* harmony export */ \"isBindingElementType\": () => (/* binding */ isBindingElementType),\n/* harmony export */ \"isBindableElement\": () => (/* binding */ isBindableElement),\n/* harmony export */ \"isExcalidrawElement\": () => (/* binding */ isExcalidrawElement)\n/* harmony export */ });\nconst isGenericElement = (element) => {\r\n return (element != null &&\r\n (element.type === \"selection\" ||\r\n element.type === \"rectangle\" ||\r\n element.type === \"diamond\" ||\r\n element.type === \"ellipse\"));\r\n};\r\nconst isInitializedImageElement = (element) => {\r\n return !!element && element.type === \"image\" && !!element.fileId;\r\n};\r\nconst isImageElement = (element) => {\r\n return !!element && element.type === \"image\";\r\n};\r\nconst isTextElement = (element) => {\r\n return element != null && element.type === \"text\";\r\n};\r\nconst isFreeDrawElement = (element) => {\r\n return element != null && isFreeDrawElementType(element.type);\r\n};\r\nconst isFreeDrawElementType = (elementType) => {\r\n return elementType === \"freedraw\";\r\n};\r\nconst isLinearElement = (element) => {\r\n return element != null && isLinearElementType(element.type);\r\n};\r\nconst isLinearElementType = (elementType) => {\r\n return (elementType === \"arrow\" || elementType === \"line\" // || elementType === \"freedraw\"\r\n );\r\n};\r\nconst isBindingElement = (element) => {\r\n return element != null && isBindingElementType(element.type);\r\n};\r\nconst isBindingElementType = (elementType) => {\r\n return elementType === \"arrow\";\r\n};\r\nconst isBindableElement = (element) => {\r\n return (element != null &&\r\n (element.type === \"rectangle\" ||\r\n element.type === \"diamond\" ||\r\n element.type === \"ellipse\" ||\r\n element.type === \"text\"));\r\n};\r\nconst isExcalidrawElement = (element) => {\r\n return ((element === null || element === void 0 ? void 0 : element.type) === \"text\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"diamond\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"rectangle\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"ellipse\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"arrow\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"freedraw\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"line\");\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSxNQUFLLFdBQVc7UUFDN0IsUUFBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksTUFBSyxTQUFTO1FBQzNCLFFBQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLE1BQUssT0FBTztRQUN6QixRQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSxNQUFLLFVBQVU7UUFDNUIsUUFBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksTUFBSyxNQUFNLENBQ3pCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vZWxlbWVudC90eXBlQ2hlY2tzLnRzPzczY2MiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRXhjYWxpZHJhd0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdUZXh0RWxlbWVudCxcbiAgRXhjYWxpZHJhd0xpbmVhckVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdHZW5lcmljRWxlbWVudCxcbiAgRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudCxcbiAgSW5pdGlhbGl6ZWRFeGNhbGlkcmF3SW1hZ2VFbGVtZW50LFxuICBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50LFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgaXNHZW5lcmljRWxlbWVudCA9IChcbiAgZWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsLFxuKTogZWxlbWVudCBpcyBFeGNhbGlkcmF3R2VuZXJpY0VsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIGVsZW1lbnQgIT0gbnVsbCAmJlxuICAgIChlbGVtZW50LnR5cGUgPT09IFwic2VsZWN0aW9uXCIgfHxcbiAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJyZWN0YW5nbGVcIiB8fFxuICAgICAgZWxlbWVudC50eXBlID09PSBcImRpYW1vbmRcIiB8fFxuICAgICAgZWxlbWVudC50eXBlID09PSBcImVsbGlwc2VcIilcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0luaXRpYWxpemVkSW1hZ2VFbGVtZW50ID0gKFxuICBlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwsXG4pOiBlbGVtZW50IGlzIEluaXRpYWxpemVkRXhjYWxpZHJhd0ltYWdlRWxlbWVudCA9PiB7XG4gIHJldHVybiAhIWVsZW1lbnQgJiYgZWxlbWVudC50eXBlID09PSBcImltYWdlXCIgJiYgISFlbGVtZW50LmZpbGVJZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ltYWdlRWxlbWVudCA9IChcbiAgZWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsLFxuKTogZWxlbWVudCBpcyBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50ID0+IHtcbiAgcmV0dXJuICEhZWxlbWVudCAmJiBlbGVtZW50LnR5cGUgPT09IFwiaW1hZ2VcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1RleHRFbGVtZW50ID0gKFxuICBlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwsXG4pOiBlbGVtZW50IGlzIEV4Y2FsaWRyYXdUZXh0RWxlbWVudCA9PiB7XG4gIHJldHVybiBlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudC50eXBlID09PSBcInRleHRcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZyZWVEcmF3RWxlbWVudCA9IChcbiAgZWxlbWVudD86IEV4Y2FsaWRyYXdFbGVtZW50IHwgbnVsbCxcbik6IGVsZW1lbnQgaXMgRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudCA9PiB7XG4gIHJldHVybiBlbGVtZW50ICE9IG51bGwgJiYgaXNGcmVlRHJhd0VsZW1lbnRUeXBlKGVsZW1lbnQudHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNGcmVlRHJhd0VsZW1lbnRUeXBlID0gKFxuICBlbGVtZW50VHlwZTogRXhjYWxpZHJhd0VsZW1lbnRbXCJ0eXBlXCJdLFxuKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBlbGVtZW50VHlwZSA9PT0gXCJmcmVlZHJhd1wiO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTGluZWFyRWxlbWVudCA9IChcbiAgZWxlbWVudD86IEV4Y2FsaWRyYXdFbGVtZW50IHwgbnVsbCxcbik6IGVsZW1lbnQgaXMgRXhjYWxpZHJhd0xpbmVhckVsZW1lbnQgPT4ge1xuICByZXR1cm4gZWxlbWVudCAhPSBudWxsICYmIGlzTGluZWFyRWxlbWVudFR5cGUoZWxlbWVudC50eXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0xpbmVhckVsZW1lbnRUeXBlID0gKFxuICBlbGVtZW50VHlwZTogRXhjYWxpZHJhd0VsZW1lbnRbXCJ0eXBlXCJdLFxuKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgZWxlbWVudFR5cGUgPT09IFwiYXJyb3dcIiB8fCBlbGVtZW50VHlwZSA9PT0gXCJsaW5lXCIgLy8gfHwgZWxlbWVudFR5cGUgPT09IFwiZnJlZWRyYXdcIlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQmluZGluZ0VsZW1lbnQgPSAoXG4gIGVsZW1lbnQ/OiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwsXG4pOiBlbGVtZW50IGlzIEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50ID0+IHtcbiAgcmV0dXJuIGVsZW1lbnQgIT0gbnVsbCAmJiBpc0JpbmRpbmdFbGVtZW50VHlwZShlbGVtZW50LnR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQmluZGluZ0VsZW1lbnRUeXBlID0gKFxuICBlbGVtZW50VHlwZTogRXhjYWxpZHJhd0VsZW1lbnRbXCJ0eXBlXCJdLFxuKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBlbGVtZW50VHlwZSA9PT0gXCJhcnJvd1wiO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQmluZGFibGVFbGVtZW50ID0gKFxuICBlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwsXG4pOiBlbGVtZW50IGlzIEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIGVsZW1lbnQgIT0gbnVsbCAmJlxuICAgIChlbGVtZW50LnR5cGUgPT09IFwicmVjdGFuZ2xlXCIgfHxcbiAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJkaWFtb25kXCIgfHxcbiAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJlbGxpcHNlXCIgfHxcbiAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJ0ZXh0XCIpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFeGNhbGlkcmF3RWxlbWVudCA9IChlbGVtZW50OiBhbnkpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICBlbGVtZW50Py50eXBlID09PSBcInRleHRcIiB8fFxuICAgIGVsZW1lbnQ/LnR5cGUgPT09IFwiZGlhbW9uZFwiIHx8XG4gICAgZWxlbWVudD8udHlwZSA9PT0gXCJyZWN0YW5nbGVcIiB8fFxuICAgIGVsZW1lbnQ/LnR5cGUgPT09IFwiZWxsaXBzZVwiIHx8XG4gICAgZWxlbWVudD8udHlwZSA9PT0gXCJhcnJvd1wiIHx8XG4gICAgZWxlbWVudD8udHlwZSA9PT0gXCJmcmVlZHJhd1wiIHx8XG4gICAgZWxlbWVudD8udHlwZSA9PT0gXCJsaW5lXCJcbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../element/typeChecks.ts\n");
|
|
2344
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"isGenericElement\": () => (/* binding */ isGenericElement),\n/* harmony export */ \"isInitializedImageElement\": () => (/* binding */ isInitializedImageElement),\n/* harmony export */ \"isImageElement\": () => (/* binding */ isImageElement),\n/* harmony export */ \"isTextElement\": () => (/* binding */ isTextElement),\n/* harmony export */ \"isFreeDrawElement\": () => (/* binding */ isFreeDrawElement),\n/* harmony export */ \"isFreeDrawElementType\": () => (/* binding */ isFreeDrawElementType),\n/* harmony export */ \"isLinearElement\": () => (/* binding */ isLinearElement),\n/* harmony export */ \"isLinearElementType\": () => (/* binding */ isLinearElementType),\n/* harmony export */ \"isBindingElement\": () => (/* binding */ isBindingElement),\n/* harmony export */ \"isBindingElementType\": () => (/* binding */ isBindingElementType),\n/* harmony export */ \"isBindableElement\": () => (/* binding */ isBindableElement),\n/* harmony export */ \"isExcalidrawElement\": () => (/* binding */ isExcalidrawElement)\n/* harmony export */ });\nconst isGenericElement = (element) => {\r\n return (element != null &&\r\n (element.type === \"selection\" ||\r\n element.type === \"rectangle\" ||\r\n element.type === \"diamond\" ||\r\n element.type === \"ellipse\"));\r\n};\r\nconst isInitializedImageElement = (element) => {\r\n return !!element && element.type === \"image\" && !!element.fileId;\r\n};\r\nconst isImageElement = (element) => {\r\n return !!element && element.type === \"image\";\r\n};\r\nconst isTextElement = (element) => {\r\n return element != null && element.type === \"text\";\r\n};\r\nconst isFreeDrawElement = (element) => {\r\n return element != null && isFreeDrawElementType(element.type);\r\n};\r\nconst isFreeDrawElementType = (elementType) => {\r\n return elementType === \"freedraw\";\r\n};\r\nconst isLinearElement = (element) => {\r\n return element != null && isLinearElementType(element.type);\r\n};\r\nconst isLinearElementType = (elementType) => {\r\n return (elementType === \"arrow\" || elementType === \"line\" // || elementType === \"freedraw\"\r\n );\r\n};\r\nconst isBindingElement = (element) => {\r\n return element != null && isBindingElementType(element.type);\r\n};\r\nconst isBindingElementType = (elementType) => {\r\n return elementType === \"arrow\";\r\n};\r\nconst isBindableElement = (element) => {\r\n return (element != null &&\r\n (element.type === \"rectangle\" ||\r\n element.type === \"diamond\" ||\r\n element.type === \"ellipse\" ||\r\n element.type === \"image\" ||\r\n element.type === \"text\"));\r\n};\r\nconst isExcalidrawElement = (element) => {\r\n return ((element === null || element === void 0 ? void 0 : element.type) === \"text\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"diamond\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"rectangle\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"ellipse\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"arrow\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"freedraw\" ||\r\n (element === null || element === void 0 ? void 0 : element.type) === \"line\");\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZWxlbWVudC90eXBlQ2hlY2tzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQVdPLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDOUIsT0FBaUMsRUFDSSxFQUFFO0lBQ3ZDLE9BQU8sQ0FDTCxPQUFPLElBQUksSUFBSTtRQUNmLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVztZQUM1QixPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVM7WUFDMUIsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FDOUIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVLLE1BQU0seUJBQXlCLEdBQUcsQ0FDdkMsT0FBaUMsRUFDYSxFQUFFO0lBQ2hELE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNuRSxDQUFDLENBQUM7QUFFSyxNQUFNLGNBQWMsR0FBRyxDQUM1QixPQUFpQyxFQUNFLEVBQUU7SUFDckMsT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO0FBQy9DLENBQUMsQ0FBQztBQUVLLE1BQU0sYUFBYSxHQUFHLENBQzNCLE9BQWlDLEVBQ0MsRUFBRTtJQUNwQyxPQUFPLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUssTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixPQUFrQyxFQUNJLEVBQUU7SUFDeEMsT0FBTyxPQUFPLElBQUksSUFBSSxJQUFJLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUM7QUFFSyxNQUFNLHFCQUFxQixHQUFHLENBQ25DLFdBQXNDLEVBQzdCLEVBQUU7SUFDWCxPQUFPLFdBQVcsS0FBSyxVQUFVLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRUssTUFBTSxlQUFlLEdBQUcsQ0FDN0IsT0FBa0MsRUFDRSxFQUFFO0lBQ3RDLE9BQU8sT0FBTyxJQUFJLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDO0FBRUssTUFBTSxtQkFBbUIsR0FBRyxDQUNqQyxXQUFzQyxFQUM3QixFQUFFO0lBQ1gsT0FBTyxDQUNMLFdBQVcsS0FBSyxPQUFPLElBQUksV0FBVyxLQUFLLE1BQU0sQ0FBQyxnQ0FBZ0M7S0FDbkYsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVLLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDOUIsT0FBa0MsRUFDRSxFQUFFO0lBQ3RDLE9BQU8sT0FBTyxJQUFJLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDO0FBRUssTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxXQUFzQyxFQUM3QixFQUFFO0lBQ1gsT0FBTyxXQUFXLEtBQUssT0FBTyxDQUFDO0FBQ2pDLENBQUMsQ0FBQztBQUVLLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsT0FBaUMsRUFDSyxFQUFFO0lBQ3hDLE9BQU8sQ0FDTCxPQUFPLElBQUksSUFBSTtRQUNmLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUztZQUMxQixPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVM7WUFDMUIsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPO1lBQ3hCLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQzNCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFSyxNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBWSxFQUFXLEVBQUU7SUFDM0QsT0FBTyxDQUNMLFFBQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLE1BQUssTUFBTTtRQUN4QixRQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSxNQUFLLFNBQVM7UUFDM0IsUUFBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksTUFBSyxXQUFXO1FBQzdCLFFBQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLE1BQUssU0FBUztRQUMzQixRQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSxNQUFLLE9BQU87UUFDekIsUUFBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksTUFBSyxVQUFVO1FBQzVCLFFBQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLE1BQUssTUFBTSxDQUN6QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2VsZW1lbnQvdHlwZUNoZWNrcy50cz83M2NjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEV4Y2FsaWRyYXdFbGVtZW50LFxuICBFeGNhbGlkcmF3VGV4dEVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50LFxuICBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50LFxuICBFeGNhbGlkcmF3R2VuZXJpY0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdGcmVlRHJhd0VsZW1lbnQsXG4gIEluaXRpYWxpemVkRXhjYWxpZHJhd0ltYWdlRWxlbWVudCxcbiAgRXhjYWxpZHJhd0ltYWdlRWxlbWVudCxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IGlzR2VuZXJpY0VsZW1lbnQgPSAoXG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50IHwgbnVsbCxcbik6IGVsZW1lbnQgaXMgRXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICBlbGVtZW50ICE9IG51bGwgJiZcbiAgICAoZWxlbWVudC50eXBlID09PSBcInNlbGVjdGlvblwiIHx8XG4gICAgICBlbGVtZW50LnR5cGUgPT09IFwicmVjdGFuZ2xlXCIgfHxcbiAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJkaWFtb25kXCIgfHxcbiAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJlbGxpcHNlXCIpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJbml0aWFsaXplZEltYWdlRWxlbWVudCA9IChcbiAgZWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsLFxuKTogZWxlbWVudCBpcyBJbml0aWFsaXplZEV4Y2FsaWRyYXdJbWFnZUVsZW1lbnQgPT4ge1xuICByZXR1cm4gISFlbGVtZW50ICYmIGVsZW1lbnQudHlwZSA9PT0gXCJpbWFnZVwiICYmICEhZWxlbWVudC5maWxlSWQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJbWFnZUVsZW1lbnQgPSAoXG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50IHwgbnVsbCxcbik6IGVsZW1lbnQgaXMgRXhjYWxpZHJhd0ltYWdlRWxlbWVudCA9PiB7XG4gIHJldHVybiAhIWVsZW1lbnQgJiYgZWxlbWVudC50eXBlID09PSBcImltYWdlXCI7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZXh0RWxlbWVudCA9IChcbiAgZWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsLFxuKTogZWxlbWVudCBpcyBFeGNhbGlkcmF3VGV4dEVsZW1lbnQgPT4ge1xuICByZXR1cm4gZWxlbWVudCAhPSBudWxsICYmIGVsZW1lbnQudHlwZSA9PT0gXCJ0ZXh0XCI7XG59O1xuXG5leHBvcnQgY29uc3QgaXNGcmVlRHJhd0VsZW1lbnQgPSAoXG4gIGVsZW1lbnQ/OiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwsXG4pOiBlbGVtZW50IGlzIEV4Y2FsaWRyYXdGcmVlRHJhd0VsZW1lbnQgPT4ge1xuICByZXR1cm4gZWxlbWVudCAhPSBudWxsICYmIGlzRnJlZURyYXdFbGVtZW50VHlwZShlbGVtZW50LnR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRnJlZURyYXdFbGVtZW50VHlwZSA9IChcbiAgZWxlbWVudFR5cGU6IEV4Y2FsaWRyYXdFbGVtZW50W1widHlwZVwiXSxcbik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gZWxlbWVudFR5cGUgPT09IFwiZnJlZWRyYXdcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0xpbmVhckVsZW1lbnQgPSAoXG4gIGVsZW1lbnQ/OiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwsXG4pOiBlbGVtZW50IGlzIEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50ID0+IHtcbiAgcmV0dXJuIGVsZW1lbnQgIT0gbnVsbCAmJiBpc0xpbmVhckVsZW1lbnRUeXBlKGVsZW1lbnQudHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNMaW5lYXJFbGVtZW50VHlwZSA9IChcbiAgZWxlbWVudFR5cGU6IEV4Y2FsaWRyYXdFbGVtZW50W1widHlwZVwiXSxcbik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIGVsZW1lbnRUeXBlID09PSBcImFycm93XCIgfHwgZWxlbWVudFR5cGUgPT09IFwibGluZVwiIC8vIHx8IGVsZW1lbnRUeXBlID09PSBcImZyZWVkcmF3XCJcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0JpbmRpbmdFbGVtZW50ID0gKFxuICBlbGVtZW50PzogRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsLFxuKTogZWxlbWVudCBpcyBFeGNhbGlkcmF3TGluZWFyRWxlbWVudCA9PiB7XG4gIHJldHVybiBlbGVtZW50ICE9IG51bGwgJiYgaXNCaW5kaW5nRWxlbWVudFR5cGUoZWxlbWVudC50eXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0JpbmRpbmdFbGVtZW50VHlwZSA9IChcbiAgZWxlbWVudFR5cGU6IEV4Y2FsaWRyYXdFbGVtZW50W1widHlwZVwiXSxcbik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gZWxlbWVudFR5cGUgPT09IFwiYXJyb3dcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0JpbmRhYmxlRWxlbWVudCA9IChcbiAgZWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsLFxuKTogZWxlbWVudCBpcyBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICBlbGVtZW50ICE9IG51bGwgJiZcbiAgICAoZWxlbWVudC50eXBlID09PSBcInJlY3RhbmdsZVwiIHx8XG4gICAgICBlbGVtZW50LnR5cGUgPT09IFwiZGlhbW9uZFwiIHx8XG4gICAgICBlbGVtZW50LnR5cGUgPT09IFwiZWxsaXBzZVwiIHx8XG4gICAgICBlbGVtZW50LnR5cGUgPT09IFwiaW1hZ2VcIiB8fFxuICAgICAgZWxlbWVudC50eXBlID09PSBcInRleHRcIilcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0V4Y2FsaWRyYXdFbGVtZW50ID0gKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIGVsZW1lbnQ/LnR5cGUgPT09IFwidGV4dFwiIHx8XG4gICAgZWxlbWVudD8udHlwZSA9PT0gXCJkaWFtb25kXCIgfHxcbiAgICBlbGVtZW50Py50eXBlID09PSBcInJlY3RhbmdsZVwiIHx8XG4gICAgZWxlbWVudD8udHlwZSA9PT0gXCJlbGxpcHNlXCIgfHxcbiAgICBlbGVtZW50Py50eXBlID09PSBcImFycm93XCIgfHxcbiAgICBlbGVtZW50Py50eXBlID09PSBcImZyZWVkcmF3XCIgfHxcbiAgICBlbGVtZW50Py50eXBlID09PSBcImxpbmVcIlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../element/typeChecks.ts\n");
|
|
2345
2345
|
|
|
2346
2346
|
/***/ }),
|
|
2347
2347
|
|
|
@@ -2528,7 +2528,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _con
|
|
|
2528
2528
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2529
2529
|
|
|
2530
2530
|
"use strict";
|
|
2531
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"exportToCanvas\": () => (/* binding */ exportToCanvas),\n/* harmony export */ \"exportToBlob\": () => (/* binding */ exportToBlob),\n/* harmony export */ \"exportToSvg\": () => (/* binding */ exportToSvg),\n/* harmony export */ \"exportToClipboard\": () => (/* binding */ exportToClipboard),\n/* harmony export */ \"serializeAsJSON\": () => (/* reexport safe */ _data_json__WEBPACK_IMPORTED_MODULE_5__.serializeAsJSON),\n/* harmony export */ \"loadFromBlob\": () => (/* reexport safe */ _data_blob__WEBPACK_IMPORTED_MODULE_6__.loadFromBlob),\n/* harmony export */ \"loadLibraryFromBlob\": () => (/* reexport safe */ _data_blob__WEBPACK_IMPORTED_MODULE_6__.loadLibraryFromBlob),\n/* harmony export */ \"getFreeDrawSvgPath\": () => (/* reexport safe */ _renderer_renderElement__WEBPACK_IMPORTED_MODULE_7__.getFreeDrawSvgPath)\n/* harmony export */ });\n/* harmony import */ var _scene_export__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scene/export */ \"../../scene/export.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../data/restore */ \"../../data/restore.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _renderer_renderElement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../renderer/renderElement */ \"../../renderer/renderElement.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n\r\nconst exportToCanvas = ({ elements, appState, files, maxWidthOrHeight, getDimensions, }) => {\r\n const { elements: restoredElements, appState: restoredAppState } = (0,_data_restore__WEBPACK_IMPORTED_MODULE_3__.restore)({ elements, appState }, null, null);\r\n const { exportBackground, viewBackgroundColor } = restoredAppState;\r\n return (0,_scene_export__WEBPACK_IMPORTED_MODULE_0__.exportToCanvas)((0,_element__WEBPACK_IMPORTED_MODULE_2__.getNonDeletedElements)(restoredElements), Object.assign(Object.assign({}, restoredAppState), { offsetTop: 0, offsetLeft: 0, width: 0, height: 0 }), files || {}, { exportBackground, viewBackgroundColor }, (width, height) => {\r\n var _a;\r\n const canvas = document.createElement(\"canvas\");\r\n if (maxWidthOrHeight) {\r\n if (typeof getDimensions === \"function\") {\r\n console.warn(\"`getDimensions()` is ignored when `maxWidthOrHeight` is supplied.\");\r\n }\r\n const max = Math.max(width, height);\r\n const scale = maxWidthOrHeight / max;\r\n canvas.width = width * scale;\r\n canvas.height = height * scale;\r\n return {\r\n canvas,\r\n scale,\r\n };\r\n }\r\n const ret = (getDimensions === null || getDimensions === void 0 ? void 0 : getDimensions(width, height)) || { width, height };\r\n canvas.width = ret.width;\r\n canvas.height = ret.height;\r\n return {\r\n canvas,\r\n scale: (_a = ret.scale) !== null && _a !== void 0 ? _a : 1,\r\n };\r\n });\r\n};\r\nconst exportToBlob = (opts) => __awaiter(void 0, void 0, void 0, function* () {\r\n const canvas = yield exportToCanvas(opts);\r\n let { mimeType = _constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.png, quality } = opts;\r\n if (mimeType === _constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.png && typeof quality === \"number\") {\r\n console.warn(`\"quality\" will be ignored for \"${_constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.png}\" mimeType`);\r\n }\r\n // typo in MIME type (should be \"jpeg\")\r\n if (mimeType === \"image/jpg\") {\r\n mimeType = _constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.jpg;\r\n }\r\n quality = quality ? quality : /image\\/jpe?g/.test(mimeType) ? 0.92 : 0.8;\r\n return new Promise((resolve) => {\r\n canvas.toBlob((blob) => {\r\n resolve(blob);\r\n }, mimeType, quality);\r\n });\r\n});\r\nconst exportToSvg = ({ elements, appState = (0,_appState__WEBPACK_IMPORTED_MODULE_1__.getDefaultAppState)(), files = {}, exportPadding, }) => __awaiter(void 0, void 0, void 0, function* () {\r\n const { elements: restoredElements, appState: restoredAppState } = (0,_data_restore__WEBPACK_IMPORTED_MODULE_3__.restore)({ elements, appState }, null, null);\r\n return (0,_scene_export__WEBPACK_IMPORTED_MODULE_0__.exportToSvg)((0,_element__WEBPACK_IMPORTED_MODULE_2__.getNonDeletedElements)(restoredElements), Object.assign(Object.assign({}, restoredAppState), { exportPadding }), files);\r\n});\r\nconst exportToClipboard = (opts) => __awaiter(void 0, void 0, void 0, function* () {\r\n const blob = yield exportToBlob(opts);\r\n if (!blob) {\r\n throw new Error(\"couldn't export to blob\");\r\n }\r\n yield navigator.clipboard.write([\r\n new window.ClipboardItem({ \"image/png\": blob }),\r\n ]);\r\n});\r\n\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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cGFjazovLy8uLi91dGlscy50cz9hYzExIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGV4cG9ydFRvQ2FudmFzIGFzIF9leHBvcnRUb0NhbnZhcyxcbiAgZXhwb3J0VG9TdmcgYXMgX2V4cG9ydFRvU3ZnLFxufSBmcm9tIFwiLi4vc2NlbmUvZXhwb3J0XCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBCaW5hcnlGaWxlcyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgRXhjYWxpZHJhd0VsZW1lbnQsIE5vbkRlbGV0ZWQgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzIH0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCB7IHJlc3RvcmUgfSBmcm9tIFwiLi4vZGF0YS9yZXN0b3JlXCI7XG5pbXBvcnQgeyBNSU1FX1RZUEVTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG50eXBlIEV4cG9ydE9wdHMgPSB7XG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkPEV4Y2FsaWRyYXdFbGVtZW50PltdO1xuICBhcHBTdGF0ZT86IFBhcnRpYWw8T21pdDxBcHBTdGF0ZSwgXCJvZmZzZXRUb3BcIiB8IFwib2Zmc2V0TGVmdFwiPj47XG4gIGZpbGVzOiBCaW5hcnlGaWxlcyB8IG51bGw7XG4gIG1heFdpZHRoT3JIZWlnaHQ/OiBudW1iZXI7XG4gIGdldERpbWVuc2lvbnM/OiAoXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyBzY2FsZT86IG51bWJlciB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gKHtcbiAgZWxlbWVudHMsXG4gIGFwcFN0YXRlLFxuICBmaWxlcyxcbiAgbWF4V2lkdGhPckhlaWdodCxcbiAgZ2V0RGltZW5zaW9ucyxcbn06IEV4cG9ydE9wdHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50czogcmVzdG9yZWRFbGVtZW50cywgYXBwU3RhdGU6IHJlc3RvcmVkQXBwU3RhdGUgfSA9IHJlc3RvcmUoXG4gICAgeyBlbGVtZW50cywgYXBwU3RhdGUgfSxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICk7XG4gIGNvbnN0IHsgZXhwb3J0QmFja2dyb3VuZCwgdmlld0JhY2tncm91bmRDb2xvciB9ID0gcmVzdG9yZWRBcHBTdGF0ZTtcbiAgcmV0dXJuIF9leHBvcnRUb0NhbnZhcyhcbiAgICBnZXROb25EZWxldGVkRWxlbWVudHMocmVzdG9yZWRFbGVtZW50cyksXG4gICAgeyAuLi5yZXN0b3JlZEFwcFN0YXRlLCBvZmZzZXRUb3A6IDAsIG9mZnNldExlZnQ6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcbiAgICBmaWxlcyB8fCB7fSxcbiAgICB7IGV4cG9ydEJhY2tncm91bmQsIHZpZXdCYWNrZ3JvdW5kQ29sb3IgfSxcbiAgICAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG5cbiAgICAgIGlmIChtYXhXaWR0aE9ySGVpZ2h0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0RGltZW5zaW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJgZ2V0RGltZW5zaW9ucygpYCBpcyBpZ25vcmVkIHdoZW4gYG1heFdpZHRoT3JIZWlnaHRgIGlzIHN1cHBsaWVkLlwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXggPSBNYXRoLm1heCh3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb25zdCBzY2FsZSA9IG1heFdpZHRoT3JIZWlnaHQgLyBtYXg7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBzY2FsZTtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodCAqIHNjYWxlO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2FudmFzLFxuICAgICAgICAgIHNjYWxlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXQgPSBnZXREaW1lbnNpb25zPy4od2lkdGgsIGhlaWdodCkgfHwgeyB3aWR0aCwgaGVpZ2h0IH07XG5cbiAgICAgIGNhbnZhcy53aWR0aCA9IHJldC53aWR0aDtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSByZXQuaGVpZ2h0O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW52YXMsXG4gICAgICAgIHNjYWxlOiByZXQuc2NhbGUgPz8gMSxcbiAgICAgIH07XG4gICAgfSxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHBvcnRUb0Jsb2IgPSBhc3luYyAoXG4gIG9wdHM6IEV4cG9ydE9wdHMgJiB7XG4gICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgcXVhbGl0eT86IG51bWJlcjtcbiAgfSxcbik6IFByb21pc2U8QmxvYiB8IG51bGw+ID0+IHtcbiAgY29uc3QgY2FudmFzID0gYXdhaXQgZXhwb3J0VG9DYW52YXMob3B0cyk7XG5cbiAgbGV0IHsgbWltZVR5cGUgPSBNSU1FX1RZUEVTLnBuZywgcXVhbGl0eSB9ID0gb3B0cztcblxuICBpZiAobWltZVR5cGUgPT09IE1JTUVfVFlQRVMucG5nICYmIHR5cGVvZiBxdWFsaXR5ID09PSBcIm51bWJlclwiKSB7XG4gICAgY29uc29sZS53YXJuKGBcInF1YWxpdHlcIiB3aWxsIGJlIGlnbm9yZWQgZm9yIFwiJHtNSU1FX1RZUEVTLnBuZ31cIiBtaW1lVHlwZWApO1xuICB9XG5cbiAgLy8gdHlwbyBpbiBNSU1FIHR5cGUgKHNob3VsZCBiZSBcImpwZWdcIilcbiAgaWYgKG1pbWVUeXBlID09PSBcImltYWdlL2pwZ1wiKSB7XG4gICAgbWltZVR5cGUgPSBNSU1FX1RZUEVTLmpwZztcbiAgfVxuXG4gIHF1YWxpdHkgPSBxdWFsaXR5ID8gcXVhbGl0eSA6IC9pbWFnZVxcL2pwZT9nLy50ZXN0KG1pbWVUeXBlKSA/IDAuOTIgOiAwLjg7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY2FudmFzLnRvQmxvYihcbiAgICAgIChibG9iOiBCbG9iIHwgbnVsbCkgPT4ge1xuICAgICAgICByZXNvbHZlKGJsb2IpO1xuICAgICAgfSxcbiAgICAgIG1pbWVUeXBlLFxuICAgICAgcXVhbGl0eSxcbiAgICApO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHBvcnRUb1N2ZyA9IGFzeW5jICh7XG4gIGVsZW1lbnRzLFxuICBhcHBTdGF0ZSA9IGdldERlZmF1bHRBcHBTdGF0ZSgpLFxuICBmaWxlcyA9IHt9LFxuICBleHBvcnRQYWRkaW5nLFxufTogT21pdDxFeHBvcnRPcHRzLCBcImdldERpbWVuc2lvbnNcIj4gJiB7XG4gIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG59KTogUHJvbWlzZTxTVkdTVkdFbGVtZW50PiA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudHM6IHJlc3RvcmVkRWxlbWVudHMsIGFwcFN0YXRlOiByZXN0b3JlZEFwcFN0YXRlIH0gPSByZXN0b3JlKFxuICAgIHsgZWxlbWVudHMsIGFwcFN0YXRlIH0sXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICApO1xuICByZXR1cm4gX2V4cG9ydFRvU3ZnKFxuICAgIGdldE5vbkRlbGV0ZWRFbGVtZW50cyhyZXN0b3JlZEVsZW1lbnRzKSxcbiAgICB7XG4gICAgICAuLi5yZXN0b3JlZEFwcFN0YXRlLFxuICAgICAgZXhwb3J0UGFkZGluZyxcbiAgICB9LFxuICAgIGZpbGVzLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2xpcGJvYXJkID0gYXN5bmMgKFxuICBvcHRzOiBFeHBvcnRPcHRzICYgeyBtaW1lVHlwZT86IHN0cmluZzsgcXVhbGl0eT86IG51bWJlciB9LFxuKSA9PiB7XG4gIGNvbnN0IGJsb2IgPSBhd2FpdCBleHBvcnRUb0Jsb2Iob3B0cyk7XG4gIGlmICghYmxvYikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImNvdWxkbid0IGV4cG9ydCB0byBibG9iXCIpO1xuICB9XG4gIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGUoW1xuICAgIG5ldyB3aW5kb3cuQ2xpcGJvYXJkSXRlbSh7IFwiaW1hZ2UvcG5nXCI6IGJsb2IgfSksXG4gIF0pO1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuZXhwb3J0IHsgbG9hZEZyb21CbG9iLCBsb2FkTGlicmFyeUZyb21CbG9iIH0gZnJvbSBcIi4uL2RhdGEvYmxvYlwiO1xuZXhwb3J0IHsgZ2V0RnJlZURyYXdTdmdQYXRoIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlckVsZW1lbnRcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../utils.ts\n");
|
|
2531
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"exportToCanvas\": () => (/* binding */ exportToCanvas),\n/* harmony export */ \"exportToBlob\": () => (/* binding */ exportToBlob),\n/* harmony export */ \"exportToSvg\": () => (/* binding */ exportToSvg),\n/* harmony export */ \"exportToClipboard\": () => (/* binding */ exportToClipboard),\n/* harmony export */ \"serializeAsJSON\": () => (/* reexport safe */ _data_json__WEBPACK_IMPORTED_MODULE_5__.serializeAsJSON),\n/* harmony export */ \"loadFromBlob\": () => (/* reexport safe */ _data_blob__WEBPACK_IMPORTED_MODULE_6__.loadFromBlob),\n/* harmony export */ \"loadLibraryFromBlob\": () => (/* reexport safe */ _data_blob__WEBPACK_IMPORTED_MODULE_6__.loadLibraryFromBlob),\n/* harmony export */ \"getFreeDrawSvgPath\": () => (/* reexport safe */ _renderer_renderElement__WEBPACK_IMPORTED_MODULE_7__.getFreeDrawSvgPath)\n/* harmony export */ });\n/* harmony import */ var _scene_export__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scene/export */ \"../../scene/export.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../data/restore */ \"../../data/restore.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _renderer_renderElement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../renderer/renderElement */ \"../../renderer/renderElement.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n\r\nconst exportToCanvas = ({ elements, appState, files, maxWidthOrHeight, getDimensions, }) => {\r\n const { elements: restoredElements, appState: restoredAppState } = (0,_data_restore__WEBPACK_IMPORTED_MODULE_3__.restore)({ elements, appState }, null, null);\r\n const { exportBackground, viewBackgroundColor } = restoredAppState;\r\n return (0,_scene_export__WEBPACK_IMPORTED_MODULE_0__.exportToCanvas)((0,_element__WEBPACK_IMPORTED_MODULE_2__.getNonDeletedElements)(restoredElements), Object.assign(Object.assign({}, restoredAppState), { offsetTop: 0, offsetLeft: 0, width: 0, height: 0 }), files || {}, { exportBackground, viewBackgroundColor }, (width, height) => {\r\n var _a;\r\n const canvas = document.createElement(\"canvas\");\r\n if (maxWidthOrHeight) {\r\n if (typeof getDimensions === \"function\") {\r\n console.warn(\"`getDimensions()` is ignored when `maxWidthOrHeight` is supplied.\");\r\n }\r\n const max = Math.max(width, height);\r\n const scale = maxWidthOrHeight / max;\r\n canvas.width = width * scale;\r\n canvas.height = height * scale;\r\n return {\r\n canvas,\r\n scale,\r\n };\r\n }\r\n const ret = (getDimensions === null || getDimensions === void 0 ? void 0 : getDimensions(width, height)) || { width, height };\r\n canvas.width = ret.width;\r\n canvas.height = ret.height;\r\n return {\r\n canvas,\r\n scale: (_a = ret.scale) !== null && _a !== void 0 ? _a : 1,\r\n };\r\n });\r\n};\r\nconst exportToBlob = (opts) => __awaiter(void 0, void 0, void 0, function* () {\r\n var _a;\r\n let { mimeType = _constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.png, quality } = opts;\r\n if (mimeType === _constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.png && typeof quality === \"number\") {\r\n console.warn(`\"quality\" will be ignored for \"${_constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.png}\" mimeType`);\r\n }\r\n // typo in MIME type (should be \"jpeg\")\r\n if (mimeType === \"image/jpg\") {\r\n mimeType = _constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.jpg;\r\n }\r\n if (mimeType === _constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.jpg && !((_a = opts.appState) === null || _a === void 0 ? void 0 : _a.exportBackground)) {\r\n console.warn(`Defaulting \"exportBackground\" to \"true\" for \"${_constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.jpg}\" mimeType`);\r\n opts = Object.assign(Object.assign({}, opts), { appState: Object.assign(Object.assign({}, opts.appState), { exportBackground: true }) });\r\n }\r\n const canvas = yield exportToCanvas(opts);\r\n quality = quality ? quality : /image\\/jpe?g/.test(mimeType) ? 0.92 : 0.8;\r\n return new Promise((resolve) => {\r\n canvas.toBlob((blob) => {\r\n resolve(blob);\r\n }, mimeType, quality);\r\n });\r\n});\r\nconst exportToSvg = ({ elements, appState = (0,_appState__WEBPACK_IMPORTED_MODULE_1__.getDefaultAppState)(), files = {}, exportPadding, }) => __awaiter(void 0, void 0, void 0, function* () {\r\n const { elements: restoredElements, appState: restoredAppState } = (0,_data_restore__WEBPACK_IMPORTED_MODULE_3__.restore)({ elements, appState }, null, null);\r\n return (0,_scene_export__WEBPACK_IMPORTED_MODULE_0__.exportToSvg)((0,_element__WEBPACK_IMPORTED_MODULE_2__.getNonDeletedElements)(restoredElements), Object.assign(Object.assign({}, restoredAppState), { exportPadding }), files);\r\n});\r\nconst exportToClipboard = (opts) => __awaiter(void 0, void 0, void 0, function* () {\r\n const blob = yield exportToBlob(opts);\r\n if (!blob) {\r\n throw new Error(\"couldn't export to blob\");\r\n }\r\n yield navigator.clipboard.write([\r\n new window.ClipboardItem({ \"image/png\": blob }),\r\n ]);\r\n});\r\n\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RTtRQUNULE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQUM1QztJQUNELE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO0tBQ2hELENBQUMsQ0FBQztBQUNMLENBQUMsRUFBQztBQUU2QztBQUNrQjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3V0aWxzLnRzP2FjMTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZXhwb3J0VG9DYW52YXMgYXMgX2V4cG9ydFRvQ2FudmFzLFxuICBleHBvcnRUb1N2ZyBhcyBfZXhwb3J0VG9TdmcsXG59IGZyb20gXCIuLi9zY2VuZS9leHBvcnRcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBFeGNhbGlkcmF3RWxlbWVudCwgTm9uRGVsZXRlZCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXROb25EZWxldGVkRWxlbWVudHMgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgcmVzdG9yZSB9IGZyb20gXCIuLi9kYXRhL3Jlc3RvcmVcIjtcbmltcG9ydCB7IE1JTUVfVFlQRVMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbnR5cGUgRXhwb3J0T3B0cyA9IHtcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWQ8RXhjYWxpZHJhd0VsZW1lbnQ+W107XG4gIGFwcFN0YXRlPzogUGFydGlhbDxPbWl0PEFwcFN0YXRlLCBcIm9mZnNldFRvcFwiIHwgXCJvZmZzZXRMZWZ0XCI+PjtcbiAgZmlsZXM6IEJpbmFyeUZpbGVzIHwgbnVsbDtcbiAgbWF4V2lkdGhPckhlaWdodD86IG51bWJlcjtcbiAgZ2V0RGltZW5zaW9ucz86IChcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICApID0+IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IHNjYWxlPzogbnVtYmVyIH07XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9DYW52YXMgPSAoe1xuICBlbGVtZW50cyxcbiAgYXBwU3RhdGUsXG4gIGZpbGVzLFxuICBtYXhXaWR0aE9ySGVpZ2h0LFxuICBnZXREaW1lbnNpb25zLFxufTogRXhwb3J0T3B0cykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRzOiByZXN0b3JlZEVsZW1lbnRzLCBhcHBTdGF0ZTogcmVzdG9yZWRBcHBTdGF0ZSB9ID0gcmVzdG9yZShcbiAgICB7IGVsZW1lbnRzLCBhcHBTdGF0ZSB9LFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgKTtcbiAgY29uc3QgeyBleHBvcnRCYWNrZ3JvdW5kLCB2aWV3QmFja2dyb3VuZENvbG9yIH0gPSByZXN0b3JlZEFwcFN0YXRlO1xuICByZXR1cm4gX2V4cG9ydFRvQ2FudmFzKFxuICAgIGdldE5vbkRlbGV0ZWRFbGVtZW50cyhyZXN0b3JlZEVsZW1lbnRzKSxcbiAgICB7IC4uLnJlc3RvcmVkQXBwU3RhdGUsIG9mZnNldFRvcDogMCwgb2Zmc2V0TGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxuICAgIGZpbGVzIHx8IHt9LFxuICAgIHsgZXhwb3J0QmFja2dyb3VuZCwgdmlld0JhY2tncm91bmRDb2xvciB9LFxuICAgICh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblxuICAgICAgaWYgKG1heFdpZHRoT3JIZWlnaHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBnZXREaW1lbnNpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcImBnZXREaW1lbnNpb25zKClgIGlzIGlnbm9yZWQgd2hlbiBgbWF4V2lkdGhPckhlaWdodGAgaXMgc3VwcGxpZWQuXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnN0IHNjYWxlID0gbWF4V2lkdGhPckhlaWdodCAvIG1heDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIHNjYWxlO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogc2NhbGU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjYW52YXMsXG4gICAgICAgICAgc2NhbGUsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJldCA9IGdldERpbWVuc2lvbnM/Lih3aWR0aCwgaGVpZ2h0KSB8fCB7IHdpZHRoLCBoZWlnaHQgfTtcblxuICAgICAgY2FudmFzLndpZHRoID0gcmV0LndpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IHJldC5oZWlnaHQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgc2NhbGU6IHJldC5zY2FsZSA/PyAxLFxuICAgICAgfTtcbiAgICB9LFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQmxvYiA9IGFzeW5jIChcbiAgb3B0czogRXhwb3J0T3B0cyAmIHtcbiAgICBtaW1lVHlwZT86IHN0cmluZztcbiAgICBxdWFsaXR5PzogbnVtYmVyO1xuICB9LFxuKTogUHJvbWlzZTxCbG9iIHwgbnVsbD4gPT4ge1xuICBsZXQgeyBtaW1lVHlwZSA9IE1JTUVfVFlQRVMucG5nLCBxdWFsaXR5IH0gPSBvcHRzO1xuXG4gIGlmIChtaW1lVHlwZSA9PT0gTUlNRV9UWVBFUy5wbmcgJiYgdHlwZW9mIHF1YWxpdHkgPT09IFwibnVtYmVyXCIpIHtcbiAgICBjb25zb2xlLndhcm4oYFwicXVhbGl0eVwiIHdpbGwgYmUgaWdub3JlZCBmb3IgXCIke01JTUVfVFlQRVMucG5nfVwiIG1pbWVUeXBlYCk7XG4gIH1cblxuICAvLyB0eXBvIGluIE1JTUUgdHlwZSAoc2hvdWxkIGJlIFwianBlZ1wiKVxuICBpZiAobWltZVR5cGUgPT09IFwiaW1hZ2UvanBnXCIpIHtcbiAgICBtaW1lVHlwZSA9IE1JTUVfVFlQRVMuanBnO1xuICB9XG5cbiAgaWYgKG1pbWVUeXBlID09PSBNSU1FX1RZUEVTLmpwZyAmJiAhb3B0cy5hcHBTdGF0ZT8uZXhwb3J0QmFja2dyb3VuZCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBEZWZhdWx0aW5nIFwiZXhwb3J0QmFja2dyb3VuZFwiIHRvIFwidHJ1ZVwiIGZvciBcIiR7TUlNRV9UWVBFUy5qcGd9XCIgbWltZVR5cGVgLFxuICAgICk7XG4gICAgb3B0cyA9IHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBhcHBTdGF0ZTogeyAuLi5vcHRzLmFwcFN0YXRlLCBleHBvcnRCYWNrZ3JvdW5kOiB0cnVlIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNhbnZhcyA9IGF3YWl0IGV4cG9ydFRvQ2FudmFzKG9wdHMpO1xuXG4gIHF1YWxpdHkgPSBxdWFsaXR5ID8gcXVhbGl0eSA6IC9pbWFnZVxcL2pwZT9nLy50ZXN0KG1pbWVUeXBlKSA/IDAuOTIgOiAwLjg7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY2FudmFzLnRvQmxvYihcbiAgICAgIChibG9iOiBCbG9iIHwgbnVsbCkgPT4ge1xuICAgICAgICByZXNvbHZlKGJsb2IpO1xuICAgICAgfSxcbiAgICAgIG1pbWVUeXBlLFxuICAgICAgcXVhbGl0eSxcbiAgICApO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHBvcnRUb1N2ZyA9IGFzeW5jICh7XG4gIGVsZW1lbnRzLFxuICBhcHBTdGF0ZSA9IGdldERlZmF1bHRBcHBTdGF0ZSgpLFxuICBmaWxlcyA9IHt9LFxuICBleHBvcnRQYWRkaW5nLFxufTogT21pdDxFeHBvcnRPcHRzLCBcImdldERpbWVuc2lvbnNcIj4gJiB7XG4gIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG59KTogUHJvbWlzZTxTVkdTVkdFbGVtZW50PiA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudHM6IHJlc3RvcmVkRWxlbWVudHMsIGFwcFN0YXRlOiByZXN0b3JlZEFwcFN0YXRlIH0gPSByZXN0b3JlKFxuICAgIHsgZWxlbWVudHMsIGFwcFN0YXRlIH0sXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICApO1xuICByZXR1cm4gX2V4cG9ydFRvU3ZnKFxuICAgIGdldE5vbkRlbGV0ZWRFbGVtZW50cyhyZXN0b3JlZEVsZW1lbnRzKSxcbiAgICB7XG4gICAgICAuLi5yZXN0b3JlZEFwcFN0YXRlLFxuICAgICAgZXhwb3J0UGFkZGluZyxcbiAgICB9LFxuICAgIGZpbGVzLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2xpcGJvYXJkID0gYXN5bmMgKFxuICBvcHRzOiBFeHBvcnRPcHRzICYgeyBtaW1lVHlwZT86IHN0cmluZzsgcXVhbGl0eT86IG51bWJlciB9LFxuKSA9PiB7XG4gIGNvbnN0IGJsb2IgPSBhd2FpdCBleHBvcnRUb0Jsb2Iob3B0cyk7XG4gIGlmICghYmxvYikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImNvdWxkbid0IGV4cG9ydCB0byBibG9iXCIpO1xuICB9XG4gIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGUoW1xuICAgIG5ldyB3aW5kb3cuQ2xpcGJvYXJkSXRlbSh7IFwiaW1hZ2UvcG5nXCI6IGJsb2IgfSksXG4gIF0pO1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuZXhwb3J0IHsgbG9hZEZyb21CbG9iLCBsb2FkTGlicmFyeUZyb21CbG9iIH0gZnJvbSBcIi4uL2RhdGEvYmxvYlwiO1xuZXhwb3J0IHsgZ2V0RnJlZURyYXdTdmdQYXRoIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlckVsZW1lbnRcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../utils.ts\n");
|
|
2532
2532
|
|
|
2533
2533
|
/***/ }),
|
|
2534
2534
|
|
|
@@ -2572,7 +2572,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2572
2572
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2573
2573
|
|
|
2574
2574
|
"use strict";
|
|
2575
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getShapeForElement\": () => (/* binding */ getShapeForElement),\n/* harmony export */ \"invalidateShapeForElement\": () => (/* binding */ invalidateShapeForElement),\n/* harmony export */ \"clearRenderCache\": () => (/* binding */ clearRenderCache),\n/* harmony export */ \"generateRoughOptions\": () => (/* binding */ generateRoughOptions),\n/* harmony export */ \"renderElement\": () => (/* binding */ renderElement),\n/* harmony export */ \"renderElementToSvg\": () => (/* binding */ renderElementToSvg),\n/* harmony export */ \"pathsCache\": () => (/* binding */ pathsCache),\n/* harmony export */ \"generateFreeDrawShape\": () => (/* binding */ generateFreeDrawShape),\n/* harmony export */ \"getFreeDrawPath2D\": () => (/* binding */ getFreeDrawPath2D),\n/* harmony export */ \"getFreeDrawSvgPath\": () => (/* binding */ getFreeDrawSvgPath)\n/* harmony export */ });\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../element/typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math */ \"../../math.ts\");\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var perfect_freehand__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! perfect-freehand */ \"../../../node_modules/perfect-freehand/dist/esm/index.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// using a stronger invert (100% vs our regular 93%) and saturate\r\n// as a temp hack to make images in dark theme look closer to original\r\n// color scheme (it's still not quite there and the colors look slightly\r\n// desatured, alas...)\r\nconst IMAGE_INVERT_FILTER = \"invert(100%) hue-rotate(180deg) saturate(1.25)\";\r\nconst defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\r\nconst isPendingImageElement = (element, renderConfig) => (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isInitializedImageElement)(element) &&\r\n !renderConfig.imageCache.has(element.fileId);\r\nconst shouldResetImageFilter = (element, renderConfig) => {\r\n var _a;\r\n return (renderConfig.theme === \"dark\" &&\r\n (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isInitializedImageElement)(element) &&\r\n !isPendingImageElement(element, renderConfig) &&\r\n ((_a = renderConfig.imageCache.get(element.fileId)) === null || _a === void 0 ? void 0 : _a.mimeType) !== _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.svg);\r\n};\r\nconst getDashArrayDashed = (strokeWidth) => [8, 8 + strokeWidth];\r\nconst getDashArrayDotted = (strokeWidth) => [1.5, 6 + strokeWidth];\r\nconst getCanvasPadding = (element) => element.type === \"freedraw\" ? element.strokeWidth * 12 : 20;\r\nconst generateElementCanvas = (element, zoom, renderConfig) => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n const padding = getCanvasPadding(element);\r\n let canvasOffsetX = 0;\r\n let canvasOffsetY = 0;\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isLinearElement)(element) || (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isFreeDrawElement)(element)) {\r\n let [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n x1 = Math.floor(x1);\r\n x2 = Math.ceil(x2);\r\n y1 = Math.floor(y1);\r\n y2 = Math.ceil(y2);\r\n canvas.width =\r\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.distance)(x1, x2) * window.devicePixelRatio * zoom.value +\r\n padding * zoom.value * 2;\r\n canvas.height =\r\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.distance)(y1, y2) * window.devicePixelRatio * zoom.value +\r\n padding * zoom.value * 2;\r\n canvasOffsetX =\r\n element.x > x1\r\n ? Math.floor((0,_utils__WEBPACK_IMPORTED_MODULE_2__.distance)(element.x, x1)) *\r\n window.devicePixelRatio *\r\n zoom.value\r\n : 0;\r\n canvasOffsetY =\r\n element.y > y1\r\n ? Math.floor((0,_utils__WEBPACK_IMPORTED_MODULE_2__.distance)(element.y, y1)) *\r\n window.devicePixelRatio *\r\n zoom.value\r\n : 0;\r\n context.translate(canvasOffsetX, canvasOffsetY);\r\n }\r\n else {\r\n canvas.width =\r\n element.width * window.devicePixelRatio * zoom.value +\r\n padding * zoom.value * 2;\r\n canvas.height =\r\n element.height * window.devicePixelRatio * zoom.value +\r\n padding * zoom.value * 2;\r\n }\r\n context.save();\r\n context.translate(padding * zoom.value, padding * zoom.value);\r\n context.scale(window.devicePixelRatio * zoom.value, window.devicePixelRatio * zoom.value);\r\n const rc = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_4__[\"default\"].canvas(canvas);\r\n // in dark theme, revert the image color filter\r\n if (shouldResetImageFilter(element, renderConfig)) {\r\n context.filter = IMAGE_INVERT_FILTER;\r\n }\r\n drawElementOnCanvas(element, rc, context, renderConfig);\r\n context.restore();\r\n return {\r\n element,\r\n canvas,\r\n theme: renderConfig.theme,\r\n canvasZoom: zoom.value,\r\n canvasOffsetX,\r\n canvasOffsetY,\r\n };\r\n};\r\nconst IMAGE_PLACEHOLDER_IMG = document.createElement(\"img\");\r\nIMAGE_PLACEHOLDER_IMG.src = `data:${_constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.svg},${encodeURIComponent(`<svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"image\" class=\"svg-inline--fa fa-image fa-w-16\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"#888\" d=\"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z\"></path></svg>`)}`;\r\nconst IMAGE_ERROR_PLACEHOLDER_IMG = document.createElement(\"img\");\r\nIMAGE_ERROR_PLACEHOLDER_IMG.src = `data:${_constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.svg},${encodeURIComponent(`<svg viewBox=\"0 0 668 668\" xmlns=\"http://www.w3.org/2000/svg\" xml:space=\"preserve\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2\"><path d=\"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48ZM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56ZM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48Z\" style=\"fill:#888;fill-rule:nonzero\" transform=\"matrix(.81709 0 0 .81709 124.825 145.825)\"/><path d=\"M256 8C119.034 8 8 119.033 8 256c0 136.967 111.034 248 248 248s248-111.034 248-248S392.967 8 256 8Zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676ZM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676Z\" style=\"fill:#888;fill-rule:nonzero\" transform=\"matrix(.30366 0 0 .30366 506.822 60.065)\"/></svg>`)}`;\r\nconst drawImagePlaceholder = (element, context, zoomValue) => {\r\n context.fillStyle = \"#E7E7E7\";\r\n context.fillRect(0, 0, element.width, element.height);\r\n const imageMinWidthOrHeight = Math.min(element.width, element.height);\r\n const size = Math.min(imageMinWidthOrHeight, Math.min(imageMinWidthOrHeight * 0.4, 100));\r\n context.drawImage(element.status === \"error\"\r\n ? IMAGE_ERROR_PLACEHOLDER_IMG\r\n : IMAGE_PLACEHOLDER_IMG, element.width / 2 - size / 2, element.height / 2 - size / 2, size, size);\r\n};\r\nconst drawElementOnCanvas = (element, rc, context, renderConfig) => {\r\n var _a;\r\n context.globalAlpha = element.opacity / 100;\r\n switch (element.type) {\r\n case \"rectangle\":\r\n case \"diamond\":\r\n case \"ellipse\": {\r\n context.lineJoin = \"round\";\r\n context.lineCap = \"round\";\r\n rc.draw(getShapeForElement(element));\r\n break;\r\n }\r\n case \"arrow\":\r\n case \"line\": {\r\n context.lineJoin = \"round\";\r\n context.lineCap = \"round\";\r\n getShapeForElement(element).forEach((shape) => {\r\n rc.draw(shape);\r\n });\r\n break;\r\n }\r\n case \"freedraw\": {\r\n // Draw directly to canvas\r\n context.save();\r\n context.fillStyle = element.strokeColor;\r\n const path = getFreeDrawPath2D(element);\r\n context.fillStyle = element.strokeColor;\r\n context.fill(path);\r\n context.restore();\r\n break;\r\n }\r\n case \"image\": {\r\n const img = (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isInitializedImageElement)(element)\r\n ? (_a = renderConfig.imageCache.get(element.fileId)) === null || _a === void 0 ? void 0 : _a.image\r\n : undefined;\r\n if (img != null && !(img instanceof Promise)) {\r\n context.drawImage(img, 0 /* hardcoded for the selection box*/, 0, element.width, element.height);\r\n }\r\n else {\r\n drawImagePlaceholder(element, context, renderConfig.zoom.value);\r\n }\r\n break;\r\n }\r\n default: {\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isTextElement)(element)) {\r\n const rtl = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.isRTL)(element.text);\r\n const shouldTemporarilyAttach = rtl && !context.canvas.isConnected;\r\n if (shouldTemporarilyAttach) {\r\n // to correctly render RTL text mixed with LTR, we have to append it\r\n // to the DOM\r\n document.body.appendChild(context.canvas);\r\n }\r\n context.canvas.setAttribute(\"dir\", rtl ? \"rtl\" : \"ltr\");\r\n context.save();\r\n context.font = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getFontString)(element);\r\n context.fillStyle = element.strokeColor;\r\n context.textAlign = element.textAlign;\r\n // Canvas does not support multiline text by default\r\n const lines = element.text.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\r\n const lineHeight = element.height / lines.length;\r\n const verticalOffset = element.height - element.baseline;\r\n const horizontalOffset = element.textAlign === \"center\"\r\n ? element.width / 2\r\n : element.textAlign === \"right\"\r\n ? element.width\r\n : 0;\r\n for (let index = 0; index < lines.length; index++) {\r\n context.fillText(lines[index], horizontalOffset, (index + 1) * lineHeight - verticalOffset);\r\n }\r\n context.restore();\r\n if (shouldTemporarilyAttach) {\r\n context.canvas.remove();\r\n }\r\n }\r\n else {\r\n throw new Error(`Unimplemented type ${element.type}`);\r\n }\r\n }\r\n }\r\n context.globalAlpha = 1;\r\n};\r\nlet elementWithCanvasCache = new WeakMap();\r\nlet shapeCache = new WeakMap();\r\nconst getShapeForElement = (element) => shapeCache.get(element);\r\nconst invalidateShapeForElement = (element) => shapeCache.delete(element);\r\nconst clearRenderCache = () => {\r\n elementWithCanvasCache = new WeakMap();\r\n shapeCache = new WeakMap();\r\n pathsCache = new WeakMap();\r\n};\r\nconst generateRoughOptions = (element, continuousPath = false) => {\r\n const options = {\r\n seed: element.seed,\r\n strokeLineDash: element.strokeStyle === \"dashed\"\r\n ? getDashArrayDashed(element.strokeWidth)\r\n : element.strokeStyle === \"dotted\"\r\n ? getDashArrayDotted(element.strokeWidth)\r\n : undefined,\r\n // for non-solid strokes, disable multiStroke because it tends to make\r\n // dashes/dots overlay each other\r\n disableMultiStroke: element.strokeStyle !== \"solid\",\r\n // for non-solid strokes, increase the width a bit to make it visually\r\n // similar to solid strokes, because we're also disabling multiStroke\r\n strokeWidth: element.strokeStyle !== \"solid\"\r\n ? element.strokeWidth + 0.5\r\n : element.strokeWidth,\r\n // when increasing strokeWidth, we must explicitly set fillWeight and\r\n // hachureGap because if not specified, roughjs uses strokeWidth to\r\n // calculate them (and we don't want the fills to be modified)\r\n fillWeight: element.strokeWidth / 2,\r\n hachureGap: element.strokeWidth * 4,\r\n roughness: element.roughness,\r\n stroke: element.strokeColor,\r\n preserveVertices: continuousPath,\r\n // disable decimals to fix Skia rendering issues #4046\r\n fixedDecimalPlaceDigits: 0,\r\n };\r\n switch (element.type) {\r\n case \"rectangle\":\r\n case \"diamond\":\r\n case \"ellipse\": {\r\n options.fillStyle = element.fillStyle;\r\n options.fill =\r\n element.backgroundColor === \"transparent\"\r\n ? undefined\r\n : element.backgroundColor;\r\n if (element.type === \"ellipse\") {\r\n options.curveFitting = 1;\r\n }\r\n return options;\r\n }\r\n case \"line\": {\r\n if ((0,_math__WEBPACK_IMPORTED_MODULE_3__.isPathALoop)(element.points)) {\r\n options.fillStyle = element.fillStyle;\r\n options.fill =\r\n element.backgroundColor === \"transparent\"\r\n ? undefined\r\n : element.backgroundColor;\r\n }\r\n return options;\r\n }\r\n case \"freedraw\":\r\n case \"arrow\":\r\n return options;\r\n default: {\r\n throw new Error(`Unimplemented type ${element.type}`);\r\n }\r\n }\r\n};\r\n/**\r\n * Generates the element's shape and puts it into the cache.\r\n * @param element\r\n * @param generator\r\n */\r\nconst generateElementShape = (element, generator) => {\r\n let shape = shapeCache.get(element) || null;\r\n if (!shape) {\r\n elementWithCanvasCache.delete(element);\r\n switch (element.type) {\r\n case \"rectangle\":\r\n if (element.strokeSharpness === \"round\") {\r\n const w = element.width;\r\n const h = element.height;\r\n const r = Math.min(w, h) * 0.25;\r\n shape = generator.path(`M ${r} 0 L ${w - r} 0 Q ${w} 0, ${w} ${r} L ${w} ${h - r} Q ${w} ${h}, ${w - r} ${h} L ${r} ${h} Q 0 ${h}, 0 ${h - r} L 0 ${r} Q 0 0, ${r} 0`, generateRoughOptions(element, true));\r\n }\r\n else {\r\n shape = generator.rectangle(0, 0, element.width, element.height, generateRoughOptions(element));\r\n }\r\n break;\r\n case \"diamond\": {\r\n const [topX, topY, rightX, rightY, bottomX, bottomY, leftX, leftY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getDiamondPoints)(element);\r\n shape = generator.polygon([\r\n [topX, topY],\r\n [rightX, rightY],\r\n [bottomX, bottomY],\r\n [leftX, leftY],\r\n ], generateRoughOptions(element));\r\n break;\r\n }\r\n case \"ellipse\":\r\n shape = generator.ellipse(element.width / 2, element.height / 2, element.width, element.height, generateRoughOptions(element));\r\n break;\r\n case \"line\":\r\n case \"arrow\": {\r\n const options = generateRoughOptions(element);\r\n // points array can be empty in the beginning, so it is important to add\r\n // initial position to it\r\n const points = element.points.length ? element.points : [[0, 0]];\r\n // curve is always the first element\r\n // this simplifies finding the curve for an element\r\n if (element.strokeSharpness === \"sharp\") {\r\n if (options.fill) {\r\n shape = [generator.polygon(points, options)];\r\n }\r\n else {\r\n shape = [\r\n generator.linearPath(points, options),\r\n ];\r\n }\r\n }\r\n else {\r\n shape = [generator.curve(points, options)];\r\n }\r\n // add lines only in arrow\r\n if (element.type === \"arrow\") {\r\n const { startArrowhead = null, endArrowhead = \"arrow\" } = element;\r\n const getArrowheadShapes = (element, shape, position, arrowhead) => {\r\n const arrowheadPoints = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getArrowheadPoints)(element, shape, position, arrowhead);\r\n if (arrowheadPoints === null) {\r\n return [];\r\n }\r\n // Other arrowheads here...\r\n if (arrowhead === \"dot\") {\r\n const [x, y, r] = arrowheadPoints;\r\n return [\r\n generator.circle(x, y, r, Object.assign(Object.assign({}, options), { fill: element.strokeColor, fillStyle: \"solid\", stroke: \"none\" })),\r\n ];\r\n }\r\n if (arrowhead === \"triangle\") {\r\n const [x, y, x2, y2, x3, y3] = arrowheadPoints;\r\n // always use solid stroke for triangle arrowhead\r\n delete options.strokeLineDash;\r\n return [\r\n generator.polygon([\r\n [x, y],\r\n [x2, y2],\r\n [x3, y3],\r\n [x, y],\r\n ], Object.assign(Object.assign({}, options), { fill: element.strokeColor, fillStyle: \"solid\" })),\r\n ];\r\n }\r\n // Arrow arrowheads\r\n const [x2, y2, x3, y3, x4, y4] = arrowheadPoints;\r\n if (element.strokeStyle === \"dotted\") {\r\n // for dotted arrows caps, reduce gap to make it more legible\r\n const dash = getDashArrayDotted(element.strokeWidth - 1);\r\n options.strokeLineDash = [dash[0], dash[1] - 1];\r\n }\r\n else {\r\n // for solid/dashed, keep solid arrow cap\r\n delete options.strokeLineDash;\r\n }\r\n return [\r\n generator.line(x3, y3, x2, y2, options),\r\n generator.line(x4, y4, x2, y2, options),\r\n ];\r\n };\r\n if (startArrowhead !== null) {\r\n const shapes = getArrowheadShapes(element, shape, \"start\", startArrowhead);\r\n shape.push(...shapes);\r\n }\r\n if (endArrowhead !== null) {\r\n if (endArrowhead === undefined) {\r\n // Hey, we have an old arrow here!\r\n }\r\n const shapes = getArrowheadShapes(element, shape, \"end\", endArrowhead);\r\n shape.push(...shapes);\r\n }\r\n }\r\n break;\r\n }\r\n case \"freedraw\": {\r\n generateFreeDrawShape(element);\r\n shape = [];\r\n break;\r\n }\r\n case \"text\":\r\n case \"image\": {\r\n // just to ensure we don't regenerate element.canvas on rerenders\r\n shape = [];\r\n break;\r\n }\r\n }\r\n shapeCache.set(element, shape);\r\n }\r\n};\r\nconst generateElementWithCanvas = (element, renderConfig) => {\r\n const zoom = renderConfig ? renderConfig.zoom : defaultAppState.zoom;\r\n const prevElementWithCanvas = elementWithCanvasCache.get(element);\r\n const shouldRegenerateBecauseZoom = prevElementWithCanvas &&\r\n prevElementWithCanvas.canvasZoom !== zoom.value &&\r\n !(renderConfig === null || renderConfig === void 0 ? void 0 : renderConfig.shouldCacheIgnoreZoom);\r\n if (!prevElementWithCanvas ||\r\n shouldRegenerateBecauseZoom ||\r\n prevElementWithCanvas.theme !== renderConfig.theme) {\r\n const elementWithCanvas = generateElementCanvas(element, zoom, renderConfig);\r\n elementWithCanvasCache.set(element, elementWithCanvas);\r\n return elementWithCanvas;\r\n }\r\n return prevElementWithCanvas;\r\n};\r\nconst drawElementFromCanvas = (elementWithCanvas, rc, context, renderConfig) => {\r\n const element = elementWithCanvas.element;\r\n const padding = getCanvasPadding(element);\r\n let [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n // Free draw elements will otherwise \"shuffle\" as the min x and y change\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isFreeDrawElement)(element)) {\r\n x1 = Math.floor(x1);\r\n x2 = Math.ceil(x2);\r\n y1 = Math.floor(y1);\r\n y2 = Math.ceil(y2);\r\n }\r\n const cx = ((x1 + x2) / 2 + renderConfig.scrollX) * window.devicePixelRatio;\r\n const cy = ((y1 + y2) / 2 + renderConfig.scrollY) * window.devicePixelRatio;\r\n const _isPendingImageElement = isPendingImageElement(element, renderConfig);\r\n const scaleXFactor = \"scale\" in elementWithCanvas.element && !_isPendingImageElement\r\n ? elementWithCanvas.element.scale[0]\r\n : 1;\r\n const scaleYFactor = \"scale\" in elementWithCanvas.element && !_isPendingImageElement\r\n ? elementWithCanvas.element.scale[1]\r\n : 1;\r\n context.save();\r\n context.scale((1 / window.devicePixelRatio) * scaleXFactor, (1 / window.devicePixelRatio) * scaleYFactor);\r\n context.translate(cx * scaleXFactor, cy * scaleYFactor);\r\n context.rotate(element.angle * scaleXFactor * scaleYFactor);\r\n context.drawImage(elementWithCanvas.canvas, (-(x2 - x1) / 2) * window.devicePixelRatio -\r\n (padding * elementWithCanvas.canvasZoom) / elementWithCanvas.canvasZoom, (-(y2 - y1) / 2) * window.devicePixelRatio -\r\n (padding * elementWithCanvas.canvasZoom) / elementWithCanvas.canvasZoom, elementWithCanvas.canvas.width / elementWithCanvas.canvasZoom, elementWithCanvas.canvas.height / elementWithCanvas.canvasZoom);\r\n context.restore();\r\n // Clear the nested element we appended to the DOM\r\n};\r\nconst renderElement = (element, rc, context, renderConfig) => {\r\n const generator = rc.generator;\r\n switch (element.type) {\r\n case \"selection\": {\r\n context.save();\r\n context.translate(element.x + renderConfig.scrollX, element.y + renderConfig.scrollY);\r\n context.fillStyle = \"rgba(0, 0, 255, 0.10)\";\r\n context.fillRect(0, 0, element.width, element.height);\r\n context.restore();\r\n break;\r\n }\r\n case \"freedraw\": {\r\n generateElementShape(element, generator);\r\n if (renderConfig.isExporting) {\r\n const elementWithCanvas = generateElementWithCanvas(element, renderConfig);\r\n drawElementFromCanvas(elementWithCanvas, rc, context, renderConfig);\r\n }\r\n else {\r\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n const cx = (x1 + x2) / 2 + renderConfig.scrollX;\r\n const cy = (y1 + y2) / 2 + renderConfig.scrollY;\r\n const shiftX = (x2 - x1) / 2 - (element.x - x1);\r\n const shiftY = (y2 - y1) / 2 - (element.y - y1);\r\n context.save();\r\n context.translate(cx, cy);\r\n context.rotate(element.angle);\r\n context.translate(-shiftX, -shiftY);\r\n drawElementOnCanvas(element, rc, context, renderConfig);\r\n context.restore();\r\n }\r\n break;\r\n }\r\n case \"rectangle\":\r\n case \"diamond\":\r\n case \"ellipse\":\r\n case \"line\":\r\n case \"arrow\":\r\n case \"image\":\r\n case \"text\": {\r\n generateElementShape(element, generator);\r\n if (renderConfig.isExporting) {\r\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n const cx = (x1 + x2) / 2 + renderConfig.scrollX;\r\n const cy = (y1 + y2) / 2 + renderConfig.scrollY;\r\n const shiftX = (x2 - x1) / 2 - (element.x - x1);\r\n const shiftY = (y2 - y1) / 2 - (element.y - y1);\r\n context.save();\r\n context.translate(cx, cy);\r\n context.rotate(element.angle);\r\n context.translate(-shiftX, -shiftY);\r\n if (shouldResetImageFilter(element, renderConfig)) {\r\n context.filter = \"none\";\r\n }\r\n drawElementOnCanvas(element, rc, context, renderConfig);\r\n context.restore();\r\n // not exporting → optimized rendering (cache & render from element\r\n // canvases)\r\n }\r\n else {\r\n const elementWithCanvas = generateElementWithCanvas(element, renderConfig);\r\n drawElementFromCanvas(elementWithCanvas, rc, context, renderConfig);\r\n }\r\n break;\r\n }\r\n default: {\r\n // @ts-ignore\r\n throw new Error(`Unimplemented type ${element.type}`);\r\n }\r\n }\r\n};\r\nconst roughSVGDrawWithPrecision = (rsvg, drawable, precision) => {\r\n if (typeof precision === \"undefined\") {\r\n return rsvg.draw(drawable);\r\n }\r\n const pshape = {\r\n sets: drawable.sets,\r\n shape: drawable.shape,\r\n options: Object.assign(Object.assign({}, drawable.options), { fixedDecimalPlaceDigits: precision }),\r\n };\r\n return rsvg.draw(pshape);\r\n};\r\nconst renderElementToSvg = (element, rsvg, svgRoot, files, offsetX, offsetY, exportWithDarkMode) => {\r\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n const cx = (x2 - x1) / 2 - (element.x - x1);\r\n const cy = (y2 - y1) / 2 - (element.y - y1);\r\n const degree = (180 * element.angle) / Math.PI;\r\n const generator = rsvg.generator;\r\n switch (element.type) {\r\n case \"selection\": {\r\n // Since this is used only during editing experience, which is canvas based,\r\n // this should not happen\r\n throw new Error(\"Selection rendering is not supported for SVG\");\r\n }\r\n case \"rectangle\":\r\n case \"diamond\":\r\n case \"ellipse\": {\r\n generateElementShape(element, generator);\r\n const node = roughSVGDrawWithPrecision(rsvg, getShapeForElement(element), _constants__WEBPACK_IMPORTED_MODULE_6__.MAX_DECIMALS_FOR_SVG_EXPORT);\r\n const opacity = element.opacity / 100;\r\n if (opacity !== 1) {\r\n node.setAttribute(\"stroke-opacity\", `${opacity}`);\r\n node.setAttribute(\"fill-opacity\", `${opacity}`);\r\n }\r\n node.setAttribute(\"stroke-linecap\", \"round\");\r\n node.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n svgRoot.appendChild(node);\r\n break;\r\n }\r\n case \"line\":\r\n case \"arrow\": {\r\n generateElementShape(element, generator);\r\n const group = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"g\");\r\n const opacity = element.opacity / 100;\r\n group.setAttribute(\"stroke-linecap\", \"round\");\r\n getShapeForElement(element).forEach((shape) => {\r\n const node = roughSVGDrawWithPrecision(rsvg, shape, _constants__WEBPACK_IMPORTED_MODULE_6__.MAX_DECIMALS_FOR_SVG_EXPORT);\r\n if (opacity !== 1) {\r\n node.setAttribute(\"stroke-opacity\", `${opacity}`);\r\n node.setAttribute(\"fill-opacity\", `${opacity}`);\r\n }\r\n node.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n if (element.type === \"line\" &&\r\n (0,_math__WEBPACK_IMPORTED_MODULE_3__.isPathALoop)(element.points) &&\r\n element.backgroundColor !== \"transparent\") {\r\n node.setAttribute(\"fill-rule\", \"evenodd\");\r\n }\r\n group.appendChild(node);\r\n });\r\n svgRoot.appendChild(group);\r\n break;\r\n }\r\n case \"freedraw\": {\r\n generateFreeDrawShape(element);\r\n const opacity = element.opacity / 100;\r\n const node = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"g\");\r\n if (opacity !== 1) {\r\n node.setAttribute(\"stroke-opacity\", `${opacity}`);\r\n node.setAttribute(\"fill-opacity\", `${opacity}`);\r\n }\r\n node.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n const path = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"path\");\r\n node.setAttribute(\"stroke\", \"none\");\r\n node.setAttribute(\"fill\", element.strokeColor);\r\n path.setAttribute(\"d\", getFreeDrawSvgPath(element));\r\n node.appendChild(path);\r\n svgRoot.appendChild(node);\r\n break;\r\n }\r\n case \"image\": {\r\n const fileData = (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isInitializedImageElement)(element) && files[element.fileId];\r\n if (fileData) {\r\n const symbolId = `image-${fileData.id}`;\r\n let symbol = svgRoot.querySelector(`#${symbolId}`);\r\n if (!symbol) {\r\n symbol = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"symbol\");\r\n symbol.id = symbolId;\r\n const image = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"image\");\r\n image.setAttribute(\"width\", \"100%\");\r\n image.setAttribute(\"height\", \"100%\");\r\n image.setAttribute(\"href\", fileData.dataURL);\r\n symbol.appendChild(image);\r\n svgRoot.prepend(symbol);\r\n }\r\n const use = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"use\");\r\n use.setAttribute(\"href\", `#${symbolId}`);\r\n // in dark theme, revert the image color filter\r\n if (exportWithDarkMode && fileData.mimeType !== _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.svg) {\r\n use.setAttribute(\"filter\", IMAGE_INVERT_FILTER);\r\n }\r\n use.setAttribute(\"width\", `${Math.round(element.width)}`);\r\n use.setAttribute(\"height\", `${Math.round(element.height)}`);\r\n use.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n svgRoot.appendChild(use);\r\n }\r\n break;\r\n }\r\n default: {\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isTextElement)(element)) {\r\n const opacity = element.opacity / 100;\r\n const node = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"g\");\r\n if (opacity !== 1) {\r\n node.setAttribute(\"stroke-opacity\", `${opacity}`);\r\n node.setAttribute(\"fill-opacity\", `${opacity}`);\r\n }\r\n node.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n const lines = element.text.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\r\n const lineHeight = element.height / lines.length;\r\n const verticalOffset = element.height - element.baseline;\r\n const horizontalOffset = element.textAlign === \"center\"\r\n ? element.width / 2\r\n : element.textAlign === \"right\"\r\n ? element.width\r\n : 0;\r\n const direction = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.isRTL)(element.text) ? \"rtl\" : \"ltr\";\r\n const textAnchor = element.textAlign === \"center\"\r\n ? \"middle\"\r\n : element.textAlign === \"right\" || direction === \"rtl\"\r\n ? \"end\"\r\n : \"start\";\r\n for (let i = 0; i < lines.length; i++) {\r\n const text = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"text\");\r\n text.textContent = lines[i];\r\n text.setAttribute(\"x\", `${horizontalOffset}`);\r\n text.setAttribute(\"y\", `${(i + 1) * lineHeight - verticalOffset}`);\r\n text.setAttribute(\"font-family\", (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getFontFamilyString)(element));\r\n text.setAttribute(\"font-size\", `${element.fontSize}px`);\r\n text.setAttribute(\"fill\", element.strokeColor);\r\n text.setAttribute(\"text-anchor\", textAnchor);\r\n text.setAttribute(\"style\", \"white-space: pre;\");\r\n text.setAttribute(\"direction\", direction);\r\n node.appendChild(text);\r\n }\r\n svgRoot.appendChild(node);\r\n }\r\n else {\r\n // @ts-ignore\r\n throw new Error(`Unimplemented type ${element.type}`);\r\n }\r\n }\r\n }\r\n};\r\nlet pathsCache = new WeakMap([]);\r\nfunction generateFreeDrawShape(element) {\r\n const svgPathData = getFreeDrawSvgPath(element);\r\n const path = new Path2D(svgPathData);\r\n pathsCache.set(element, path);\r\n return path;\r\n}\r\nfunction getFreeDrawPath2D(element) {\r\n return pathsCache.get(element);\r\n}\r\nfunction getFreeDrawSvgPath(element) {\r\n // If input points are empty (should they ever be?) return a dot\r\n const inputPoints = element.simulatePressure\r\n ? element.points\r\n : element.points.length\r\n ? element.points.map(([x, y], i) => [x, y, element.pressures[i]])\r\n : [[0, 0, 0.5]];\r\n // Consider changing the options for simulated pressure vs real pressure\r\n const options = {\r\n simulatePressure: element.simulatePressure,\r\n size: element.strokeWidth * 4.25,\r\n thinning: 0.6,\r\n smoothing: 0.5,\r\n streamline: 0.5,\r\n easing: (t) => Math.sin((t * Math.PI) / 2),\r\n last: !!element.lastCommittedPoint, // LastCommittedPoint is added on pointerup\r\n };\r\n return getSvgPathFromStroke((0,perfect_freehand__WEBPACK_IMPORTED_MODULE_7__.getStroke)(inputPoints, options));\r\n}\r\nfunction med(A, B) {\r\n return [(A[0] + B[0]) / 2, (A[1] + B[1]) / 2];\r\n}\r\n// Trim SVG path data so number are each two decimal points. This\r\n// improves SVG exports, and prevents rendering errors on points\r\n// with long decimals.\r\nconst TO_FIXED_PRECISION = /(\\s?[A-Z]?,?-?[0-9]*\\.[0-9]{0,2})(([0-9]|e|-)*)/g;\r\nfunction getSvgPathFromStroke(points) {\r\n if (!points.length) {\r\n return \"\";\r\n }\r\n const max = points.length - 1;\r\n return points\r\n .reduce((acc, point, i, arr) => {\r\n if (i === max) {\r\n acc.push(point, med(point, arr[0]), \"L\", arr[0], \"Z\");\r\n }\r\n else {\r\n acc.push(point, med(point, arr[i + 1]));\r\n }\r\n return acc;\r\n }, [\"M\", points[0], \"Q\"])\r\n .join(\" \")\r\n .replace(TO_FIXED_PRECISION, \"$1\");\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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cyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3JlbmRlcmVyL3JlbmRlckVsZW1lbnQudHM/YTZkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd0xpbmVhckVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdUZXh0RWxlbWVudCxcbiAgQXJyb3doZWFkLFxuICBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdGcmVlRHJhd0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdJbWFnZUVsZW1lbnQsXG59IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQge1xuICBpc1RleHRFbGVtZW50LFxuICBpc0xpbmVhckVsZW1lbnQsXG4gIGlzRnJlZURyYXdFbGVtZW50LFxuICBpc0luaXRpYWxpemVkSW1hZ2VFbGVtZW50LFxufSBmcm9tIFwiLi4vZWxlbWVudC90eXBlQ2hlY2tzXCI7XG5pbXBvcnQge1xuICBnZXREaWFtb25kUG9pbnRzLFxuICBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMsXG4gIGdldEFycm93aGVhZFBvaW50cyxcbn0gZnJvbSBcIi4uL2VsZW1lbnQvYm91bmRzXCI7XG5pbXBvcnQgeyBSb3VnaENhbnZhcyB9IGZyb20gXCJyb3VnaGpzL2Jpbi9jYW52YXNcIjtcbmltcG9ydCB7IERyYXdhYmxlLCBPcHRpb25zIH0gZnJvbSBcInJvdWdoanMvYmluL2NvcmVcIjtcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSBcInJvdWdoanMvYmluL3N2Z1wiO1xuaW1wb3J0IHsgUm91Z2hHZW5lcmF0b3IgfSBmcm9tIFwicm91Z2hqcy9iaW4vZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBSZW5kZXJDb25maWcgfSBmcm9tIFwiLi4vc2NlbmUvdHlwZXNcIjtcbmltcG9ydCB7IGRpc3RhbmNlLCBnZXRGb250U3RyaW5nLCBnZXRGb250RmFtaWx5U3RyaW5nLCBpc1JUTCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgaXNQYXRoQUxvb3AgfSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHJvdWdoIGZyb20gXCJyb3VnaGpzL2Jpbi9yb3VnaFwiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzLCBab29tIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IE1BWF9ERUNJTUFMU19GT1JfU1ZHX0VYUE9SVCwgTUlNRV9UWVBFUywgU1ZHX05TIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlLCBTdHJva2VPcHRpb25zIH0gZnJvbSBcInBlcmZlY3QtZnJlZWhhbmRcIjtcblxuLy8gdXNpbmcgYSBzdHJvbmdlciBpbnZlcnQgKDEwMCUgdnMgb3VyIHJlZ3VsYXIgOTMlKSBhbmQgc2F0dXJhdGVcbi8vIGFzIGEgdGVtcCBoYWNrIHRvIG1ha2UgaW1hZ2VzIGluIGRhcmsgdGhlbWUgbG9vayBjbG9zZXIgdG8gb3JpZ2luYWxcbi8vIGNvbG9yIHNjaGVtZSAoaXQncyBzdGlsbCBub3QgcXVpdGUgdGhlcmUgYW5kIHRoZSBjb2xvcnMgbG9vayBzbGlnaHRseVxuLy8gZGVzYXR1cmVkLCBhbGFzLi4uKVxuY29uc3QgSU1BR0VfSU5WRVJUX0ZJTFRFUiA9IFwiaW52ZXJ0KDEwMCUpIGh1ZS1yb3RhdGUoMTgwZGVnKSBzYXR1cmF0ZSgxLjI1KVwiO1xuXG5jb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcblxuY29uc3QgaXNQZW5kaW5nSW1hZ2VFbGVtZW50ID0gKFxuICBlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCxcbiAgcmVuZGVyQ29uZmlnOiBSZW5kZXJDb25maWcsXG4pID0+XG4gIGlzSW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiZcbiAgIXJlbmRlckNvbmZpZy5pbWFnZUNhY2hlLmhhcyhlbGVtZW50LmZpbGVJZCk7XG5cbmNvbnN0IHNob3VsZFJlc2V0SW1hZ2VGaWx0ZXIgPSAoXG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50LFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbikgPT4ge1xuICByZXR1cm4gKFxuICAgIHJlbmRlckNvbmZpZy50aGVtZSA9PT0gXCJkYXJrXCIgJiZcbiAgICBpc0luaXRpYWxpemVkSW1hZ2VFbGVtZW50KGVsZW1lbnQpICYmXG4gICAgIWlzUGVuZGluZ0ltYWdlRWxlbWVudChlbGVtZW50LCByZW5kZXJDb25maWcpICYmXG4gICAgcmVuZGVyQ29uZmlnLmltYWdlQ2FjaGUuZ2V0KGVsZW1lbnQuZmlsZUlkKT8ubWltZVR5cGUgIT09IE1JTUVfVFlQRVMuc3ZnXG4gICk7XG59O1xuXG5jb25zdCBnZXREYXNoQXJyYXlEYXNoZWQgPSAoc3Ryb2tlV2lkdGg6IG51bWJlcikgPT4gWzgsIDggKyBzdHJva2VXaWR0aF07XG5cbmNvbnN0IGdldERhc2hBcnJheURvdHRlZCA9IChzdHJva2VXaWR0aDogbnVtYmVyKSA9PiBbMS41LCA2ICsgc3Ryb2tlV2lkdGhdO1xuXG5jb25zdCBnZXRDYW52YXNQYWRkaW5nID0gKGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50KSA9PlxuICBlbGVtZW50LnR5cGUgPT09IFwiZnJlZWRyYXdcIiA/IGVsZW1lbnQuc3Ryb2tlV2lkdGggKiAxMiA6IDIwO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2FsaWRyYXdFbGVtZW50V2l0aENhbnZhcyB7XG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50IHwgRXhjYWxpZHJhd1RleHRFbGVtZW50O1xuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICB0aGVtZTogUmVuZGVyQ29uZmlnW1widGhlbWVcIl07XG4gIGNhbnZhc1pvb206IFpvb21bXCJ2YWx1ZVwiXTtcbiAgY2FudmFzT2Zmc2V0WDogbnVtYmVyO1xuICBjYW52YXNPZmZzZXRZOiBudW1iZXI7XG59XG5cbmNvbnN0IGdlbmVyYXRlRWxlbWVudENhbnZhcyA9IChcbiAgZWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICB6b29tOiBab29tLFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbik6IEV4Y2FsaWRyYXdFbGVtZW50V2l0aENhbnZhcyA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpITtcbiAgY29uc3QgcGFkZGluZyA9IGdldENhbnZhc1BhZGRpbmcoZWxlbWVudCk7XG5cbiAgbGV0IGNhbnZhc09mZnNldFggPSAwO1xuICBsZXQgY2FudmFzT2Zmc2V0WSA9IDA7XG5cbiAgaWYgKGlzTGluZWFyRWxlbWVudChlbGVtZW50KSB8fCBpc0ZyZWVEcmF3RWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnQpO1xuXG4gICAgeDEgPSBNYXRoLmZsb29yKHgxKTtcbiAgICB4MiA9IE1hdGguY2VpbCh4Mik7XG4gICAgeTEgPSBNYXRoLmZsb29yKHkxKTtcbiAgICB5MiA9IE1hdGguY2VpbCh5Mik7XG5cbiAgICBjYW52YXMud2lkdGggPVxuICAgICAgZGlzdGFuY2UoeDEsIHgyKSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICogem9vbS52YWx1ZSArXG4gICAgICBwYWRkaW5nICogem9vbS52YWx1ZSAqIDI7XG4gICAgY2FudmFzLmhlaWdodCA9XG4gICAgICBkaXN0YW5jZSh5MSwgeTIpICogd2luZG93LmRldmljZVBpeGVsUmF0aW8gKiB6b29tLnZhbHVlICtcbiAgICAgIHBhZGRpbmcgKiB6b29tLnZhbHVlICogMjtcblxuICAgIGNhbnZhc09mZnNldFggPVxuICAgICAgZWxlbWVudC54ID4geDFcbiAgICAgICAgPyBNYXRoLmZsb29yKGRpc3RhbmNlKGVsZW1lbnQueCwgeDEpKSAqXG4gICAgICAgICAgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKlxuICAgICAgICAgIHpvb20udmFsdWVcbiAgICAgICAgOiAwO1xuXG4gICAgY2FudmFzT2Zmc2V0WSA9XG4gICAgICBlbGVtZW50LnkgPiB5MVxuICAgICAgICA/IE1hdGguZmxvb3IoZGlzdGFuY2UoZWxlbWVudC55LCB5MSkpICpcbiAgICAgICAgICB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyAqXG4gICAgICAgICAgem9vbS52YWx1ZVxuICAgICAgICA6IDA7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShjYW52YXNPZmZzZXRYLCBjYW52YXNPZmZzZXRZKTtcbiAgfSBlbHNlIHtcbiAgICBjYW52YXMud2lkdGggPVxuICAgICAgZWxlbWVudC53aWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICogem9vbS52YWx1ZSArXG4gICAgICBwYWRkaW5nICogem9vbS52YWx1ZSAqIDI7XG4gICAgY2FudmFzLmhlaWdodCA9XG4gICAgICBlbGVtZW50LmhlaWdodCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICogem9vbS52YWx1ZSArXG4gICAgICBwYWRkaW5nICogem9vbS52YWx1ZSAqIDI7XG4gIH1cblxuICBjb250ZXh0LnNhdmUoKTtcbiAgY29udGV4dC50cmFuc2xhdGUocGFkZGluZyAqIHpvb20udmFsdWUsIHBhZGRpbmcgKiB6b29tLnZhbHVlKTtcbiAgY29udGV4dC5zY2FsZShcbiAgICB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyAqIHpvb20udmFsdWUsXG4gICAgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKiB6b29tLnZhbHVlLFxuICApO1xuXG4gIGNvbnN0IHJjID0gcm91Z2guY2FudmFzKGNhbnZhcyk7XG5cbiAgLy8gaW4gZGFyayB0aGVtZSwgcmV2ZXJ0IHRoZSBpbWFnZSBjb2xvciBmaWx0ZXJcbiAgaWYgKHNob3VsZFJlc2V0SW1hZ2VGaWx0ZXIoZWxlbWVudCwgcmVuZGVyQ29uZmlnKSkge1xuICAgIGNvbnRleHQuZmlsdGVyID0gSU1BR0VfSU5WRVJUX0ZJTFRFUjtcbiAgfVxuXG4gIGRyYXdFbGVtZW50T25DYW52YXMoZWxlbWVudCwgcmMsIGNvbnRleHQsIHJlbmRlckNvbmZpZyk7XG4gIGNvbnRleHQucmVzdG9yZSgpO1xuXG4gIHJldHVybiB7XG4gICAgZWxlbWVudCxcbiAgICBjYW52YXMsXG4gICAgdGhlbWU6IHJlbmRlckNvbmZpZy50aGVtZSxcbiAgICBjYW52YXNab29tOiB6b29tLnZhbHVlLFxuICAgIGNhbnZhc09mZnNldFgsXG4gICAgY2FudmFzT2Zmc2V0WSxcbiAgfTtcbn07XG5cbmNvbnN0IElNQUdFX1BMQUNFSE9MREVSX0lNRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG5JTUFHRV9QTEFDRUhPTERFUl9JTUcuc3JjID0gYGRhdGE6JHtNSU1FX1RZUEVTLnN2Z30sJHtlbmNvZGVVUklDb21wb25lbnQoXG4gIGA8c3ZnIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZvY3VzYWJsZT1cImZhbHNlXCIgZGF0YS1wcmVmaXg9XCJmYXNcIiBkYXRhLWljb249XCJpbWFnZVwiIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEtaW1hZ2UgZmEtdy0xNlwiIHJvbGU9XCJpbWdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MTIgNTEyXCI+PHBhdGggZmlsbD1cIiM4ODhcIiBkPVwiTTQ2NCA0NDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWMTEyYzAtMjYuNTEgMjEuNDktNDggNDgtNDhoNDE2YzI2LjUxIDAgNDggMjEuNDkgNDggNDh2Mjg4YzAgMjYuNTEtMjEuNDkgNDgtNDggNDh6TTExMiAxMjBjLTMwLjkyOCAwLTU2IDI1LjA3Mi01NiA1NnMyNS4wNzIgNTYgNTYgNTYgNTYtMjUuMDcyIDU2LTU2LTI1LjA3Mi01Ni01Ni01NnpNNjQgMzg0aDM4NFYyNzJsLTg3LjUxNS04Ny41MTVjLTQuNjg2LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NzEgMEwyMDggMzIwbC01NS41MTUtNTUuNTE1Yy00LjY4Ni00LjY4Ni0xMi4yODQtNC42ODYtMTYuOTcxIDBMNjQgMzM2djQ4elwiPjwvcGF0aD48L3N2Zz5gLFxuKX1gO1xuXG5jb25zdCBJTUFHRV9FUlJPUl9QTEFDRUhPTERFUl9JTUcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuSU1BR0VfRVJST1JfUExBQ0VIT0xERVJfSU1HLnNyYyA9IGBkYXRhOiR7TUlNRV9UWVBFUy5zdmd9LCR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICBgPHN2ZyB2aWV3Qm94PVwiMCAwIDY2OCA2NjhcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIiBzdHlsZT1cImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoyXCI+PHBhdGggZD1cIk00NjQgNDQ4SDQ4Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjExMmMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDQxNmMyNi41MSAwIDQ4IDIxLjQ5IDQ4IDQ4djI4OGMwIDI2LjUxLTIxLjQ5IDQ4LTQ4IDQ4Wk0xMTIgMTIwYy0zMC45MjggMC01NiAyNS4wNzItNTYgNTZzMjUuMDcyIDU2IDU2IDU2IDU2LTI1LjA3MiA1Ni01Ni0yNS4wNzItNTYtNTYtNTZaTTY0IDM4NGgzODRWMjcybC04Ny41MTUtODcuNTE1Yy00LjY4Ni00LjY4Ni0xMi4yODQtNC42ODYtMTYuOTcxIDBMMjA4IDMyMGwtNTUuNTE1LTU1LjUxNWMtNC42ODYtNC42ODYtMTIuMjg0LTQuNjg2LTE2Ljk3MSAwTDY0IDMzNnY0OFpcIiBzdHlsZT1cImZpbGw6Izg4ODtmaWxsLXJ1bGU6bm9uemVyb1wiIHRyYW5zZm9ybT1cIm1hdHJpeCguODE3MDkgMCAwIC44MTcwOSAxMjQuODI1IDE0NS44MjUpXCIvPjxwYXRoIGQ9XCJNMjU2IDhDMTE5LjAzNCA4IDggMTE5LjAzMyA4IDI1NmMwIDEzNi45NjcgMTExLjAzNCAyNDggMjQ4IDI0OHMyNDgtMTExLjAzNCAyNDgtMjQ4UzM5Mi45NjcgOCAyNTYgOFptMTMwLjEwOCAxMTcuODkyYzY1LjQ0OCA2NS40NDggNzAgMTY1LjQ4MSAyMC42NzcgMjM1LjYzN0wxNTAuNDcgMTA1LjIxNmM3MC4yMDQtNDkuMzU2IDE3MC4yMjYtNDQuNzM1IDIzNS42MzggMjAuNjc2Wk0xMjUuODkyIDM4Ni4xMDhjLTY1LjQ0OC02NS40NDgtNzAtMTY1LjQ4MS0yMC42NzctMjM1LjYzN0wzNjEuNTMgNDA2Ljc4NGMtNzAuMjAzIDQ5LjM1Ni0xNzAuMjI2IDQ0LjczNi0yMzUuNjM4LTIwLjY3NlpcIiBzdHlsZT1cImZpbGw6Izg4ODtmaWxsLXJ1bGU6bm9uemVyb1wiIHRyYW5zZm9ybT1cIm1hdHJpeCguMzAzNjYgMCAwIC4zMDM2NiA1MDYuODIyIDYwLjA2NSlcIi8+PC9zdmc+YCxcbil9YDtcblxuY29uc3QgZHJhd0ltYWdlUGxhY2Vob2xkZXIgPSAoXG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdJbWFnZUVsZW1lbnQsXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgem9vbVZhbHVlOiBBcHBTdGF0ZVtcInpvb21cIl1bXCJ2YWx1ZVwiXSxcbikgPT4ge1xuICBjb250ZXh0LmZpbGxTdHlsZSA9IFwiI0U3RTdFN1wiO1xuICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0KTtcblxuICBjb25zdCBpbWFnZU1pbldpZHRoT3JIZWlnaHQgPSBNYXRoLm1pbihlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCk7XG5cbiAgY29uc3Qgc2l6ZSA9IE1hdGgubWluKFxuICAgIGltYWdlTWluV2lkdGhPckhlaWdodCxcbiAgICBNYXRoLm1pbihpbWFnZU1pbldpZHRoT3JIZWlnaHQgKiAwLjQsIDEwMCksXG4gICk7XG5cbiAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgZWxlbWVudC5zdGF0dXMgPT09IFwiZXJyb3JcIlxuICAgICAgPyBJTUFHRV9FUlJPUl9QTEFDRUhPTERFUl9JTUdcbiAgICAgIDogSU1BR0VfUExBQ0VIT0xERVJfSU1HLFxuICAgIGVsZW1lbnQud2lkdGggLyAyIC0gc2l6ZSAvIDIsXG4gICAgZWxlbWVudC5oZWlnaHQgLyAyIC0gc2l6ZSAvIDIsXG4gICAgc2l6ZSxcbiAgICBzaXplLFxuICApO1xufTtcblxuY29uc3QgZHJhd0VsZW1lbnRPbkNhbnZhcyA9IChcbiAgZWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICByYzogUm91Z2hDYW52YXMsXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgcmVuZGVyQ29uZmlnOiBSZW5kZXJDb25maWcsXG4pID0+IHtcbiAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGVsZW1lbnQub3BhY2l0eSAvIDEwMDtcbiAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIFwicmVjdGFuZ2xlXCI6XG4gICAgY2FzZSBcImRpYW1vbmRcIjpcbiAgICBjYXNlIFwiZWxsaXBzZVwiOiB7XG4gICAgICBjb250ZXh0LmxpbmVKb2luID0gXCJyb3VuZFwiO1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gXCJyb3VuZFwiO1xuICAgICAgcmMuZHJhdyhnZXRTaGFwZUZvckVsZW1lbnQoZWxlbWVudCkgYXMgRHJhd2FibGUpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJhcnJvd1wiOlxuICAgIGNhc2UgXCJsaW5lXCI6IHtcbiAgICAgIGNvbnRleHQubGluZUpvaW4gPSBcInJvdW5kXCI7XG4gICAgICBjb250ZXh0LmxpbmVDYXAgPSBcInJvdW5kXCI7XG5cbiAgICAgIChnZXRTaGFwZUZvckVsZW1lbnQoZWxlbWVudCkgYXMgRHJhd2FibGVbXSkuZm9yRWFjaCgoc2hhcGUpID0+IHtcbiAgICAgICAgcmMuZHJhdyhzaGFwZSk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZnJlZWRyYXdcIjoge1xuICAgICAgLy8gRHJhdyBkaXJlY3RseSB0byBjYW52YXNcbiAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBlbGVtZW50LnN0cm9rZUNvbG9yO1xuXG4gICAgICBjb25zdCBwYXRoID0gZ2V0RnJlZURyYXdQYXRoMkQoZWxlbWVudCkgYXMgUGF0aDJEO1xuXG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGVsZW1lbnQuc3Ryb2tlQ29sb3I7XG4gICAgICBjb250ZXh0LmZpbGwocGF0aCk7XG5cbiAgICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJpbWFnZVwiOiB7XG4gICAgICBjb25zdCBpbWcgPSBpc0luaXRpYWxpemVkSW1hZ2VFbGVtZW50KGVsZW1lbnQpXG4gICAgICAgID8gcmVuZGVyQ29uZmlnLmltYWdlQ2FjaGUuZ2V0KGVsZW1lbnQuZmlsZUlkKT8uaW1hZ2VcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoaW1nICE9IG51bGwgJiYgIShpbWcgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICBpbWcsXG4gICAgICAgICAgMCAvKiBoYXJkY29kZWQgZm9yIHRoZSBzZWxlY3Rpb24gYm94Ki8sXG4gICAgICAgICAgMCxcbiAgICAgICAgICBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhd0ltYWdlUGxhY2Vob2xkZXIoZWxlbWVudCwgY29udGV4dCwgcmVuZGVyQ29uZmlnLnpvb20udmFsdWUpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGlmIChpc1RleHRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHJ0bCA9IGlzUlRMKGVsZW1lbnQudGV4dCk7XG4gICAgICAgIGNvbnN0IHNob3VsZFRlbXBvcmFyaWx5QXR0YWNoID0gcnRsICYmICFjb250ZXh0LmNhbnZhcy5pc0Nvbm5lY3RlZDtcbiAgICAgICAgaWYgKHNob3VsZFRlbXBvcmFyaWx5QXR0YWNoKSB7XG4gICAgICAgICAgLy8gdG8gY29ycmVjdGx5IHJlbmRlciBSVEwgdGV4dCBtaXhlZCB3aXRoIExUUiwgd2UgaGF2ZSB0byBhcHBlbmQgaXRcbiAgICAgICAgICAvLyB0byB0aGUgRE9NXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250ZXh0LmNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5jYW52YXMuc2V0QXR0cmlidXRlKFwiZGlyXCIsIHJ0bCA/IFwicnRsXCIgOiBcImx0clwiKTtcbiAgICAgICAgY29udGV4dC5zYXZlKCk7XG4gICAgICAgIGNvbnRleHQuZm9udCA9IGdldEZvbnRTdHJpbmcoZWxlbWVudCk7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZWxlbWVudC5zdHJva2VDb2xvcjtcbiAgICAgICAgY29udGV4dC50ZXh0QWxpZ24gPSBlbGVtZW50LnRleHRBbGlnbiBhcyBDYW52YXNUZXh0QWxpZ247XG5cbiAgICAgICAgLy8gQ2FudmFzIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlsaW5lIHRleHQgYnkgZGVmYXVsdFxuICAgICAgICBjb25zdCBsaW5lcyA9IGVsZW1lbnQudGV4dC5yZXBsYWNlKC9cXHJcXG4/L2csIFwiXFxuXCIpLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQgLyBsaW5lcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0ID0gZWxlbWVudC5oZWlnaHQgLSBlbGVtZW50LmJhc2VsaW5lO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsT2Zmc2V0ID1cbiAgICAgICAgICBlbGVtZW50LnRleHRBbGlnbiA9PT0gXCJjZW50ZXJcIlxuICAgICAgICAgICAgPyBlbGVtZW50LndpZHRoIC8gMlxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHRBbGlnbiA9PT0gXCJyaWdodFwiXG4gICAgICAgICAgICA/IGVsZW1lbnQud2lkdGhcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQoXG4gICAgICAgICAgICBsaW5lc1tpbmRleF0sXG4gICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0LFxuICAgICAgICAgICAgKGluZGV4ICsgMSkgKiBsaW5lSGVpZ2h0IC0gdmVydGljYWxPZmZzZXQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgaWYgKHNob3VsZFRlbXBvcmFyaWx5QXR0YWNoKSB7XG4gICAgICAgICAgY29udGV4dC5jYW52YXMucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlICR7ZWxlbWVudC50eXBlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb250ZXh0Lmdsb2JhbEFscGhhID0gMTtcbn07XG5cbmxldCBlbGVtZW50V2l0aENhbnZhc0NhY2hlID0gbmV3IFdlYWtNYXA8XG4gIEV4Y2FsaWRyYXdFbGVtZW50LFxuICBFeGNhbGlkcmF3RWxlbWVudFdpdGhDYW52YXNcbj4oKTtcblxubGV0IHNoYXBlQ2FjaGUgPSBuZXcgV2Vha01hcDxFeGNhbGlkcmF3RWxlbWVudCwgRHJhd2FibGUgfCBEcmF3YWJsZVtdIHwgbnVsbD4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXBlRm9yRWxlbWVudCA9IChlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCkgPT5cbiAgc2hhcGVDYWNoZS5nZXQoZWxlbWVudCk7XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkYXRlU2hhcGVGb3JFbGVtZW50ID0gKGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50KSA9PlxuICBzaGFwZUNhY2hlLmRlbGV0ZShlbGVtZW50KTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUmVuZGVyQ2FjaGUgPSAoKSA9PiB7XG4gIGVsZW1lbnRXaXRoQ2FudmFzQ2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuICBzaGFwZUNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbiAgcGF0aHNDYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVSb3VnaE9wdGlvbnMgPSAoXG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50LFxuICBjb250aW51b3VzUGF0aCA9IGZhbHNlLFxuKTogT3B0aW9ucyA9PiB7XG4gIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgc2VlZDogZWxlbWVudC5zZWVkLFxuICAgIHN0cm9rZUxpbmVEYXNoOlxuICAgICAgZWxlbWVudC5zdHJva2VTdHlsZSA9PT0gXCJkYXNoZWRcIlxuICAgICAgICA/IGdldERhc2hBcnJheURhc2hlZChlbGVtZW50LnN0cm9rZVdpZHRoKVxuICAgICAgICA6IGVsZW1lbnQuc3Ryb2tlU3R5bGUgPT09IFwiZG90dGVkXCJcbiAgICAgICAgPyBnZXREYXNoQXJyYXlEb3R0ZWQoZWxlbWVudC5zdHJva2VXaWR0aClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgLy8gZm9yIG5vbi1zb2xpZCBzdHJva2VzLCBkaXNhYmxlIG11bHRpU3Ryb2tlIGJlY2F1c2UgaXQgdGVuZHMgdG8gbWFrZVxuICAgIC8vIGRhc2hlcy9kb3RzIG92ZXJsYXkgZWFjaCBvdGhlclxuICAgIGRpc2FibGVNdWx0aVN0cm9rZTogZWxlbWVudC5zdHJva2VTdHlsZSAhPT0gXCJzb2xpZFwiLFxuICAgIC8vIGZvciBub24tc29saWQgc3Ryb2tlcywgaW5jcmVhc2UgdGhlIHdpZHRoIGEgYml0IHRvIG1ha2UgaXQgdmlzdWFsbHlcbiAgICAvLyBzaW1pbGFyIHRvIHNvbGlkIHN0cm9rZXMsIGJlY2F1c2Ugd2UncmUgYWxzbyBkaXNhYmxpbmcgbXVsdGlTdHJva2VcbiAgICBzdHJva2VXaWR0aDpcbiAgICAgIGVsZW1lbnQuc3Ryb2tlU3R5bGUgIT09IFwic29saWRcIlxuICAgICAgICA/IGVsZW1lbnQuc3Ryb2tlV2lkdGggKyAwLjVcbiAgICAgICAgOiBlbGVtZW50LnN0cm9rZVdpZHRoLFxuICAgIC8vIHdoZW4gaW5jcmVhc2luZyBzdHJva2VXaWR0aCwgd2UgbXVzdCBleHBsaWNpdGx5IHNldCBmaWxsV2VpZ2h0IGFuZFxuICAgIC8vIGhhY2h1cmVHYXAgYmVjYXVzZSBpZiBub3Qgc3BlY2lmaWVkLCByb3VnaGpzIHVzZXMgc3Ryb2tlV2lkdGggdG9cbiAgICAvLyBjYWxjdWxhdGUgdGhlbSAoYW5kIHdlIGRvbid0IHdhbnQgdGhlIGZpbGxzIHRvIGJlIG1vZGlmaWVkKVxuICAgIGZpbGxXZWlnaHQ6IGVsZW1lbnQuc3Ryb2tlV2lkdGggLyAyLFxuICAgIGhhY2h1cmVHYXA6IGVsZW1lbnQuc3Ryb2tlV2lkdGggKiA0LFxuICAgIHJvdWdobmVzczogZWxlbWVudC5yb3VnaG5lc3MsXG4gICAgc3Ryb2tlOiBlbGVtZW50LnN0cm9rZUNvbG9yLFxuICAgIHByZXNlcnZlVmVydGljZXM6IGNvbnRpbnVvdXNQYXRoLFxuICAgIC8vIGRpc2FibGUgZGVjaW1hbHMgdG8gZml4IFNraWEgcmVuZGVyaW5nIGlzc3VlcyAjNDA0NlxuICAgIGZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzOiAwLFxuICB9O1xuXG4gIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBcInJlY3RhbmdsZVwiOlxuICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgY2FzZSBcImVsbGlwc2VcIjoge1xuICAgICAgb3B0aW9ucy5maWxsU3R5bGUgPSBlbGVtZW50LmZpbGxTdHlsZTtcbiAgICAgIG9wdGlvbnMuZmlsbCA9XG4gICAgICAgIGVsZW1lbnQuYmFja2dyb3VuZENvbG9yID09PSBcInRyYW5zcGFyZW50XCJcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogZWxlbWVudC5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcImVsbGlwc2VcIikge1xuICAgICAgICBvcHRpb25zLmN1cnZlRml0dGluZyA9IDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgY2FzZSBcImxpbmVcIjoge1xuICAgICAgaWYgKGlzUGF0aEFMb29wKGVsZW1lbnQucG9pbnRzKSkge1xuICAgICAgICBvcHRpb25zLmZpbGxTdHlsZSA9IGVsZW1lbnQuZmlsbFN0eWxlO1xuICAgICAgICBvcHRpb25zLmZpbGwgPVxuICAgICAgICAgIGVsZW1lbnQuYmFja2dyb3VuZENvbG9yID09PSBcInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IGVsZW1lbnQuYmFja2dyb3VuZENvbG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIGNhc2UgXCJmcmVlZHJhd1wiOlxuICAgIGNhc2UgXCJhcnJvd1wiOlxuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkIHR5cGUgJHtlbGVtZW50LnR5cGV9YCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgZWxlbWVudCdzIHNoYXBlIGFuZCBwdXRzIGl0IGludG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEBwYXJhbSBnZW5lcmF0b3JcbiAqL1xuY29uc3QgZ2VuZXJhdGVFbGVtZW50U2hhcGUgPSAoXG4gIGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgZ2VuZXJhdG9yOiBSb3VnaEdlbmVyYXRvcixcbikgPT4ge1xuICBsZXQgc2hhcGUgPSBzaGFwZUNhY2hlLmdldChlbGVtZW50KSB8fCBudWxsO1xuXG4gIGlmICghc2hhcGUpIHtcbiAgICBlbGVtZW50V2l0aENhbnZhc0NhY2hlLmRlbGV0ZShlbGVtZW50KTtcblxuICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgICBjYXNlIFwicmVjdGFuZ2xlXCI6XG4gICAgICAgIGlmIChlbGVtZW50LnN0cm9rZVNoYXJwbmVzcyA9PT0gXCJyb3VuZFwiKSB7XG4gICAgICAgICAgY29uc3QgdyA9IGVsZW1lbnQud2lkdGg7XG4gICAgICAgICAgY29uc3QgaCA9IGVsZW1lbnQuaGVpZ2h0O1xuICAgICAgICAgIGNvbnN0IHIgPSBNYXRoLm1pbih3LCBoKSAqIDAuMjU7XG4gICAgICAgICAgc2hhcGUgPSBnZW5lcmF0b3IucGF0aChcbiAgICAgICAgICAgIGBNICR7cn0gMCBMICR7dyAtIHJ9IDAgUSAke3d9IDAsICR7d30gJHtyfSBMICR7d30gJHtcbiAgICAgICAgICAgICAgaCAtIHJcbiAgICAgICAgICAgIH0gUSAke3d9ICR7aH0sICR7dyAtIHJ9ICR7aH0gTCAke3J9ICR7aH0gUSAwICR7aH0sIDAgJHtcbiAgICAgICAgICAgICAgaCAtIHJcbiAgICAgICAgICAgIH0gTCAwICR7cn0gUSAwIDAsICR7cn0gMGAsXG4gICAgICAgICAgICBnZW5lcmF0ZVJvdWdoT3B0aW9ucyhlbGVtZW50LCB0cnVlKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNoYXBlID0gZ2VuZXJhdG9yLnJlY3RhbmdsZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgZWxlbWVudC53aWR0aCxcbiAgICAgICAgICAgIGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICAgICAgZ2VuZXJhdGVSb3VnaE9wdGlvbnMoZWxlbWVudCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaWFtb25kXCI6IHtcbiAgICAgICAgY29uc3QgW3RvcFgsIHRvcFksIHJpZ2h0WCwgcmlnaHRZLCBib3R0b21YLCBib3R0b21ZLCBsZWZ0WCwgbGVmdFldID1cbiAgICAgICAgICBnZXREaWFtb25kUG9pbnRzKGVsZW1lbnQpO1xuICAgICAgICBzaGFwZSA9IGdlbmVyYXRvci5wb2x5Z29uKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFt0b3BYLCB0b3BZXSxcbiAgICAgICAgICAgIFtyaWdodFgsIHJpZ2h0WV0sXG4gICAgICAgICAgICBbYm90dG9tWCwgYm90dG9tWV0sXG4gICAgICAgICAgICBbbGVmdFgsIGxlZnRZXSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGdlbmVyYXRlUm91Z2hPcHRpb25zKGVsZW1lbnQpLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJlbGxpcHNlXCI6XG4gICAgICAgIHNoYXBlID0gZ2VuZXJhdG9yLmVsbGlwc2UoXG4gICAgICAgICAgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgICAgICAgZWxlbWVudC5oZWlnaHQgLyAyLFxuICAgICAgICAgIGVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgZWxlbWVudC5oZWlnaHQsXG4gICAgICAgICAgZ2VuZXJhdGVSb3VnaE9wdGlvbnMoZWxlbWVudCksXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxpbmVcIjpcbiAgICAgIGNhc2UgXCJhcnJvd1wiOiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBnZW5lcmF0ZVJvdWdoT3B0aW9ucyhlbGVtZW50KTtcblxuICAgICAgICAvLyBwb2ludHMgYXJyYXkgY2FuIGJlIGVtcHR5IGluIHRoZSBiZWdpbm5pbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0byBhZGRcbiAgICAgICAgLy8gaW5pdGlhbCBwb3NpdGlvbiB0byBpdFxuICAgICAgICBjb25zdCBwb2ludHMgPSBlbGVtZW50LnBvaW50cy5sZW5ndGggPyBlbGVtZW50LnBvaW50cyA6IFtbMCwgMF1dO1xuXG4gICAgICAgIC8vIGN1cnZlIGlzIGFsd2F5cyB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAgICAvLyB0aGlzIHNpbXBsaWZpZXMgZmluZGluZyB0aGUgY3VydmUgZm9yIGFuIGVsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQuc3Ryb2tlU2hhcnBuZXNzID09PSBcInNoYXJwXCIpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5maWxsKSB7XG4gICAgICAgICAgICBzaGFwZSA9IFtnZW5lcmF0b3IucG9seWdvbihwb2ludHMgYXMgW251bWJlciwgbnVtYmVyXVtdLCBvcHRpb25zKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNoYXBlID0gW1xuICAgICAgICAgICAgICBnZW5lcmF0b3IubGluZWFyUGF0aChwb2ludHMgYXMgW251bWJlciwgbnVtYmVyXVtdLCBvcHRpb25zKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNoYXBlID0gW2dlbmVyYXRvci5jdXJ2ZShwb2ludHMgYXMgW251bWJlciwgbnVtYmVyXVtdLCBvcHRpb25zKV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgbGluZXMgb25seSBpbiBhcnJvd1xuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcImFycm93XCIpIHtcbiAgICAgICAgICBjb25zdCB7IHN0YXJ0QXJyb3doZWFkID0gbnVsbCwgZW5kQXJyb3doZWFkID0gXCJhcnJvd1wiIH0gPSBlbGVtZW50O1xuXG4gICAgICAgICAgY29uc3QgZ2V0QXJyb3doZWFkU2hhcGVzID0gKFxuICAgICAgICAgICAgZWxlbWVudDogRXhjYWxpZHJhd0xpbmVhckVsZW1lbnQsXG4gICAgICAgICAgICBzaGFwZTogRHJhd2FibGVbXSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcInN0YXJ0XCIgfCBcImVuZFwiLFxuICAgICAgICAgICAgYXJyb3doZWFkOiBBcnJvd2hlYWQsXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcnJvd2hlYWRQb2ludHMgPSBnZXRBcnJvd2hlYWRQb2ludHMoXG4gICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgIHNoYXBlLFxuICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgYXJyb3doZWFkLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGFycm93aGVhZFBvaW50cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE90aGVyIGFycm93aGVhZHMgaGVyZS4uLlxuICAgICAgICAgICAgaWYgKGFycm93aGVhZCA9PT0gXCJkb3RcIikge1xuICAgICAgICAgICAgICBjb25zdCBbeCwgeSwgcl0gPSBhcnJvd2hlYWRQb2ludHM7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3IuY2lyY2xlKHgsIHksIHIsIHtcbiAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICBmaWxsOiBlbGVtZW50LnN0cm9rZUNvbG9yLFxuICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBcInNvbGlkXCIsXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXJyb3doZWFkID09PSBcInRyaWFuZ2xlXCIpIHtcbiAgICAgICAgICAgICAgY29uc3QgW3gsIHksIHgyLCB5MiwgeDMsIHkzXSA9IGFycm93aGVhZFBvaW50cztcblxuICAgICAgICAgICAgICAvLyBhbHdheXMgdXNlIHNvbGlkIHN0cm9rZSBmb3IgdHJpYW5nbGUgYXJyb3doZWFkXG4gICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLnN0cm9rZUxpbmVEYXNoO1xuXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLnBvbHlnb24oXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFt4LCB5XSxcbiAgICAgICAgICAgICAgICAgICAgW3gyLCB5Ml0sXG4gICAgICAgICAgICAgICAgICAgIFt4MywgeTNdLFxuICAgICAgICAgICAgICAgICAgICBbeCwgeV0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBlbGVtZW50LnN0cm9rZUNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IFwic29saWRcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQXJyb3cgYXJyb3doZWFkc1xuICAgICAgICAgICAgY29uc3QgW3gyLCB5MiwgeDMsIHkzLCB4NCwgeTRdID0gYXJyb3doZWFkUG9pbnRzO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zdHJva2VTdHlsZSA9PT0gXCJkb3R0ZWRcIikge1xuICAgICAgICAgICAgICAvLyBmb3IgZG90dGVkIGFycm93cyBjYXBzLCByZWR1Y2UgZ2FwIHRvIG1ha2UgaXQgbW9yZSBsZWdpYmxlXG4gICAgICAgICAgICAgIGNvbnN0IGRhc2ggPSBnZXREYXNoQXJyYXlEb3R0ZWQoZWxlbWVudC5zdHJva2VXaWR0aCAtIDEpO1xuICAgICAgICAgICAgICBvcHRpb25zLnN0cm9rZUxpbmVEYXNoID0gW2Rhc2hbMF0sIGRhc2hbMV0gLSAxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGZvciBzb2xpZC9kYXNoZWQsIGtlZXAgc29saWQgYXJyb3cgY2FwXG4gICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLnN0cm9rZUxpbmVEYXNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgZ2VuZXJhdG9yLmxpbmUoeDMsIHkzLCB4MiwgeTIsIG9wdGlvbnMpLFxuICAgICAgICAgICAgICBnZW5lcmF0b3IubGluZSh4NCwgeTQsIHgyLCB5Miwgb3B0aW9ucyksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoc3RhcnRBcnJvd2hlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlcyA9IGdldEFycm93aGVhZFNoYXBlcyhcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgc2hhcGUsXG4gICAgICAgICAgICAgIFwic3RhcnRcIixcbiAgICAgICAgICAgICAgc3RhcnRBcnJvd2hlYWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc2hhcGUucHVzaCguLi5zaGFwZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbmRBcnJvd2hlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChlbmRBcnJvd2hlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBIZXksIHdlIGhhdmUgYW4gb2xkIGFycm93IGhlcmUhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNoYXBlcyA9IGdldEFycm93aGVhZFNoYXBlcyhcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgc2hhcGUsXG4gICAgICAgICAgICAgIFwiZW5kXCIsXG4gICAgICAgICAgICAgIGVuZEFycm93aGVhZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzaGFwZS5wdXNoKC4uLnNoYXBlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFwiZnJlZWRyYXdcIjoge1xuICAgICAgICBnZW5lcmF0ZUZyZWVEcmF3U2hhcGUoZWxlbWVudCk7XG4gICAgICAgIHNoYXBlID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgIGNhc2UgXCJpbWFnZVwiOiB7XG4gICAgICAgIC8vIGp1c3QgdG8gZW5zdXJlIHdlIGRvbid0IHJlZ2VuZXJhdGUgZWxlbWVudC5jYW52YXMgb24gcmVyZW5kZXJzXG4gICAgICAgIHNoYXBlID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBzaGFwZUNhY2hlLnNldChlbGVtZW50LCBzaGFwZSk7XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlRWxlbWVudFdpdGhDYW52YXMgPSAoXG4gIGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgcmVuZGVyQ29uZmlnOiBSZW5kZXJDb25maWcsXG4pID0+IHtcbiAgY29uc3Qgem9vbTogWm9vbSA9IHJlbmRlckNvbmZpZyA/IHJlbmRlckNvbmZpZy56b29tIDogZGVmYXVsdEFwcFN0YXRlLnpvb207XG4gIGNvbnN0IHByZXZFbGVtZW50V2l0aENhbnZhcyA9IGVsZW1lbnRXaXRoQ2FudmFzQ2FjaGUuZ2V0KGVsZW1lbnQpO1xuICBjb25zdCBzaG91bGRSZWdlbmVyYXRlQmVjYXVzZVpvb20gPVxuICAgIHByZXZFbGVtZW50V2l0aENhbnZhcyAmJlxuICAgIHByZXZFbGVtZW50V2l0aENhbnZhcy5jYW52YXNab29tICE9PSB6b29tLnZhbHVlICYmXG4gICAgIXJlbmRlckNvbmZpZz8uc2hvdWxkQ2FjaGVJZ25vcmVab29tO1xuXG4gIGlmIChcbiAgICAhcHJldkVsZW1lbnRXaXRoQ2FudmFzIHx8XG4gICAgc2hvdWxkUmVnZW5lcmF0ZUJlY2F1c2Vab29tIHx8XG4gICAgcHJldkVsZW1lbnRXaXRoQ2FudmFzLnRoZW1lICE9PSByZW5kZXJDb25maWcudGhlbWVcbiAgKSB7XG4gICAgY29uc3QgZWxlbWVudFdpdGhDYW52YXMgPSBnZW5lcmF0ZUVsZW1lbnRDYW52YXMoXG4gICAgICBlbGVtZW50LFxuICAgICAgem9vbSxcbiAgICAgIHJlbmRlckNvbmZpZyxcbiAgICApO1xuXG4gICAgZWxlbWVudFdpdGhDYW52YXNDYWNoZS5zZXQoZWxlbWVudCwgZWxlbWVudFdpdGhDYW52YXMpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnRXaXRoQ2FudmFzO1xuICB9XG4gIHJldHVybiBwcmV2RWxlbWVudFdpdGhDYW52YXM7XG59O1xuXG5jb25zdCBkcmF3RWxlbWVudEZyb21DYW52YXMgPSAoXG4gIGVsZW1lbnRXaXRoQ2FudmFzOiBFeGNhbGlkcmF3RWxlbWVudFdpdGhDYW52YXMsXG4gIHJjOiBSb3VnaENhbnZhcyxcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbikgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudFdpdGhDYW52YXMuZWxlbWVudDtcbiAgY29uc3QgcGFkZGluZyA9IGdldENhbnZhc1BhZGRpbmcoZWxlbWVudCk7XG4gIGxldCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnQpO1xuXG4gIC8vIEZyZWUgZHJhdyBlbGVtZW50cyB3aWxsIG90aGVyd2lzZSBcInNodWZmbGVcIiBhcyB0aGUgbWluIHggYW5kIHkgY2hhbmdlXG4gIGlmIChpc0ZyZWVEcmF3RWxlbWVudChlbGVtZW50KSkge1xuICAgIHgxID0gTWF0aC5mbG9vcih4MSk7XG4gICAgeDIgPSBNYXRoLmNlaWwoeDIpO1xuICAgIHkxID0gTWF0aC5mbG9vcih5MSk7XG4gICAgeTIgPSBNYXRoLmNlaWwoeTIpO1xuICB9XG5cbiAgY29uc3QgY3ggPSAoKHgxICsgeDIpIC8gMiArIHJlbmRlckNvbmZpZy5zY3JvbGxYKSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBjb25zdCBjeSA9ICgoeTEgKyB5MikgLyAyICsgcmVuZGVyQ29uZmlnLnNjcm9sbFkpICogd2luZG93LmRldmljZVBpeGVsUmF0aW87XG5cbiAgY29uc3QgX2lzUGVuZGluZ0ltYWdlRWxlbWVudCA9IGlzUGVuZGluZ0ltYWdlRWxlbWVudChlbGVtZW50LCByZW5kZXJDb25maWcpO1xuXG4gIGNvbnN0IHNjYWxlWEZhY3RvciA9XG4gICAgXCJzY2FsZVwiIGluIGVsZW1lbnRXaXRoQ2FudmFzLmVsZW1lbnQgJiYgIV9pc1BlbmRpbmdJbWFnZUVsZW1lbnRcbiAgICAgID8gZWxlbWVudFdpdGhDYW52YXMuZWxlbWVudC5zY2FsZVswXVxuICAgICAgOiAxO1xuICBjb25zdCBzY2FsZVlGYWN0b3IgPVxuICAgIFwic2NhbGVcIiBpbiBlbGVtZW50V2l0aENhbnZhcy5lbGVtZW50ICYmICFfaXNQZW5kaW5nSW1hZ2VFbGVtZW50XG4gICAgICA/IGVsZW1lbnRXaXRoQ2FudmFzLmVsZW1lbnQuc2NhbGVbMV1cbiAgICAgIDogMTtcblxuICBjb250ZXh0LnNhdmUoKTtcbiAgY29udGV4dC5zY2FsZShcbiAgICAoMSAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSAqIHNjYWxlWEZhY3RvcixcbiAgICAoMSAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSAqIHNjYWxlWUZhY3RvcixcbiAgKTtcbiAgY29udGV4dC50cmFuc2xhdGUoY3ggKiBzY2FsZVhGYWN0b3IsIGN5ICogc2NhbGVZRmFjdG9yKTtcbiAgY29udGV4dC5yb3RhdGUoZWxlbWVudC5hbmdsZSAqIHNjYWxlWEZhY3RvciAqIHNjYWxlWUZhY3Rvcik7XG5cbiAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgZWxlbWVudFdpdGhDYW52YXMuY2FudmFzISxcbiAgICAoLSh4MiAtIHgxKSAvIDIpICogd2luZG93LmRldmljZVBpeGVsUmF0aW8gLVxuICAgICAgKHBhZGRpbmcgKiBlbGVtZW50V2l0aENhbnZhcy5jYW52YXNab29tKSAvIGVsZW1lbnRXaXRoQ2FudmFzLmNhbnZhc1pvb20sXG4gICAgKC0oeTIgLSB5MSkgLyAyKSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIC1cbiAgICAgIChwYWRkaW5nICogZWxlbWVudFdpdGhDYW52YXMuY2FudmFzWm9vbSkgLyBlbGVtZW50V2l0aENhbnZhcy5jYW52YXNab29tLFxuICAgIGVsZW1lbnRXaXRoQ2FudmFzLmNhbnZhcyEud2lkdGggLyBlbGVtZW50V2l0aENhbnZhcy5jYW52YXNab29tLFxuICAgIGVsZW1lbnRXaXRoQ2FudmFzLmNhbnZhcyEuaGVpZ2h0IC8gZWxlbWVudFdpdGhDYW52YXMuY2FudmFzWm9vbSxcbiAgKTtcbiAgY29udGV4dC5yZXN0b3JlKCk7XG5cbiAgLy8gQ2xlYXIgdGhlIG5lc3RlZCBlbGVtZW50IHdlIGFwcGVuZGVkIHRvIHRoZSBET01cbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJFbGVtZW50ID0gKFxuICBlbGVtZW50OiBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIHJjOiBSb3VnaENhbnZhcyxcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSByYy5nZW5lcmF0b3I7XG4gIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBcInNlbGVjdGlvblwiOiB7XG4gICAgICBjb250ZXh0LnNhdmUoKTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKFxuICAgICAgICBlbGVtZW50LnggKyByZW5kZXJDb25maWcuc2Nyb2xsWCxcbiAgICAgICAgZWxlbWVudC55ICsgcmVuZGVyQ29uZmlnLnNjcm9sbFksXG4gICAgICApO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBcInJnYmEoMCwgMCwgMjU1LCAwLjEwKVwiO1xuICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCk7XG4gICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZnJlZWRyYXdcIjoge1xuICAgICAgZ2VuZXJhdGVFbGVtZW50U2hhcGUoZWxlbWVudCwgZ2VuZXJhdG9yKTtcblxuICAgICAgaWYgKHJlbmRlckNvbmZpZy5pc0V4cG9ydGluZykge1xuICAgICAgICBjb25zdCBlbGVtZW50V2l0aENhbnZhcyA9IGdlbmVyYXRlRWxlbWVudFdpdGhDYW52YXMoXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICByZW5kZXJDb25maWcsXG4gICAgICAgICk7XG4gICAgICAgIGRyYXdFbGVtZW50RnJvbUNhbnZhcyhlbGVtZW50V2l0aENhbnZhcywgcmMsIGNvbnRleHQsIHJlbmRlckNvbmZpZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjeCA9ICh4MSArIHgyKSAvIDIgKyByZW5kZXJDb25maWcuc2Nyb2xsWDtcbiAgICAgICAgY29uc3QgY3kgPSAoeTEgKyB5MikgLyAyICsgcmVuZGVyQ29uZmlnLnNjcm9sbFk7XG4gICAgICAgIGNvbnN0IHNoaWZ0WCA9ICh4MiAtIHgxKSAvIDIgLSAoZWxlbWVudC54IC0geDEpO1xuICAgICAgICBjb25zdCBzaGlmdFkgPSAoeTIgLSB5MSkgLyAyIC0gKGVsZW1lbnQueSAtIHkxKTtcbiAgICAgICAgY29udGV4dC5zYXZlKCk7XG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGN4LCBjeSk7XG4gICAgICAgIGNvbnRleHQucm90YXRlKGVsZW1lbnQuYW5nbGUpO1xuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc2hpZnRYLCAtc2hpZnRZKTtcbiAgICAgICAgZHJhd0VsZW1lbnRPbkNhbnZhcyhlbGVtZW50LCByYywgY29udGV4dCwgcmVuZGVyQ29uZmlnKTtcbiAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwicmVjdGFuZ2xlXCI6XG4gICAgY2FzZSBcImRpYW1vbmRcIjpcbiAgICBjYXNlIFwiZWxsaXBzZVwiOlxuICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgY2FzZSBcImFycm93XCI6XG4gICAgY2FzZSBcImltYWdlXCI6XG4gICAgY2FzZSBcInRleHRcIjoge1xuICAgICAgZ2VuZXJhdGVFbGVtZW50U2hhcGUoZWxlbWVudCwgZ2VuZXJhdG9yKTtcbiAgICAgIGlmIChyZW5kZXJDb25maWcuaXNFeHBvcnRpbmcpIHtcbiAgICAgICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhlbGVtZW50KTtcbiAgICAgICAgY29uc3QgY3ggPSAoeDEgKyB4MikgLyAyICsgcmVuZGVyQ29uZmlnLnNjcm9sbFg7XG4gICAgICAgIGNvbnN0IGN5ID0gKHkxICsgeTIpIC8gMiArIHJlbmRlckNvbmZpZy5zY3JvbGxZO1xuICAgICAgICBjb25zdCBzaGlmdFggPSAoeDIgLSB4MSkgLyAyIC0gKGVsZW1lbnQueCAtIHgxKTtcbiAgICAgICAgY29uc3Qgc2hpZnRZID0gKHkyIC0geTEpIC8gMiAtIChlbGVtZW50LnkgLSB5MSk7XG4gICAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShjeCwgY3kpO1xuICAgICAgICBjb250ZXh0LnJvdGF0ZShlbGVtZW50LmFuZ2xlKTtcbiAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLXNoaWZ0WCwgLXNoaWZ0WSk7XG5cbiAgICAgICAgaWYgKHNob3VsZFJlc2V0SW1hZ2VGaWx0ZXIoZWxlbWVudCwgcmVuZGVyQ29uZmlnKSkge1xuICAgICAgICAgIGNvbnRleHQuZmlsdGVyID0gXCJub25lXCI7XG4gICAgICAgIH1cblxuICAgICAgICBkcmF3RWxlbWVudE9uQ2FudmFzKGVsZW1lbnQsIHJjLCBjb250ZXh0LCByZW5kZXJDb25maWcpO1xuICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgLy8gbm90IGV4cG9ydGluZyDihpIgb3B0aW1pemVkIHJlbmRlcmluZyAoY2FjaGUgJiByZW5kZXIgZnJvbSBlbGVtZW50XG4gICAgICAgIC8vIGNhbnZhc2VzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFdpdGhDYW52YXMgPSBnZW5lcmF0ZUVsZW1lbnRXaXRoQ2FudmFzKFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgcmVuZGVyQ29uZmlnLFxuICAgICAgICApO1xuICAgICAgICBkcmF3RWxlbWVudEZyb21DYW52YXMoZWxlbWVudFdpdGhDYW52YXMsIHJjLCBjb250ZXh0LCByZW5kZXJDb25maWcpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlICR7ZWxlbWVudC50eXBlfWApO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3Qgcm91Z2hTVkdEcmF3V2l0aFByZWNpc2lvbiA9IChcbiAgcnN2ZzogUm91Z2hTVkcsXG4gIGRyYXdhYmxlOiBEcmF3YWJsZSxcbiAgcHJlY2lzaW9uPzogbnVtYmVyLFxuKSA9PiB7XG4gIGlmICh0eXBlb2YgcHJlY2lzaW9uID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHJzdmcuZHJhdyhkcmF3YWJsZSk7XG4gIH1cbiAgY29uc3QgcHNoYXBlOiBEcmF3YWJsZSA9IHtcbiAgICBzZXRzOiBkcmF3YWJsZS5zZXRzLFxuICAgIHNoYXBlOiBkcmF3YWJsZS5zaGFwZSxcbiAgICBvcHRpb25zOiB7IC4uLmRyYXdhYmxlLm9wdGlvbnMsIGZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzOiBwcmVjaXNpb24gfSxcbiAgfTtcbiAgcmV0dXJuIHJzdmcuZHJhdyhwc2hhcGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlckVsZW1lbnRUb1N2ZyA9IChcbiAgZWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICByc3ZnOiBSb3VnaFNWRyxcbiAgc3ZnUm9vdDogU1ZHRWxlbWVudCxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICBvZmZzZXRYPzogbnVtYmVyLFxuICBvZmZzZXRZPzogbnVtYmVyLFxuICBleHBvcnRXaXRoRGFya01vZGU/OiBib29sZWFuLFxuKSA9PiB7XG4gIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZWxlbWVudCk7XG4gIGNvbnN0IGN4ID0gKHgyIC0geDEpIC8gMiAtIChlbGVtZW50LnggLSB4MSk7XG4gIGNvbnN0IGN5ID0gKHkyIC0geTEpIC8gMiAtIChlbGVtZW50LnkgLSB5MSk7XG4gIGNvbnN0IGRlZ3JlZSA9ICgxODAgKiBlbGVtZW50LmFuZ2xlKSAvIE1hdGguUEk7XG4gIGNvbnN0IGdlbmVyYXRvciA9IHJzdmcuZ2VuZXJhdG9yO1xuICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgXCJzZWxlY3Rpb25cIjoge1xuICAgICAgLy8gU2luY2UgdGhpcyBpcyB1c2VkIG9ubHkgZHVyaW5nIGVkaXRpbmcgZXhwZXJpZW5jZSwgd2hpY2ggaXMgY2FudmFzIGJhc2VkLFxuICAgICAgLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0aW9uIHJlbmRlcmluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBTVkdcIik7XG4gICAgfVxuICAgIGNhc2UgXCJyZWN0YW5nbGVcIjpcbiAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgIGNhc2UgXCJlbGxpcHNlXCI6IHtcbiAgICAgIGdlbmVyYXRlRWxlbWVudFNoYXBlKGVsZW1lbnQsIGdlbmVyYXRvcik7XG4gICAgICBjb25zdCBub2RlID0gcm91Z2hTVkdEcmF3V2l0aFByZWNpc2lvbihcbiAgICAgICAgcnN2ZyxcbiAgICAgICAgZ2V0U2hhcGVGb3JFbGVtZW50KGVsZW1lbnQpIGFzIERyYXdhYmxlLFxuICAgICAgICBNQVhfREVDSU1BTFNfRk9SX1NWR19FWFBPUlQsXG4gICAgICApO1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IGVsZW1lbnQub3BhY2l0eSAvIDEwMDtcbiAgICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLW9wYWNpdHlcIiwgYCR7b3BhY2l0eX1gKTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmaWxsLW9wYWNpdHlcIiwgYCR7b3BhY2l0eX1gKTtcbiAgICAgIH1cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLWxpbmVjYXBcIiwgXCJyb3VuZFwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBgdHJhbnNsYXRlKCR7b2Zmc2V0WCB8fCAwfSAke1xuICAgICAgICAgIG9mZnNldFkgfHwgMFxuICAgICAgICB9KSByb3RhdGUoJHtkZWdyZWV9ICR7Y3h9ICR7Y3l9KWAsXG4gICAgICApO1xuICAgICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwibGluZVwiOlxuICAgIGNhc2UgXCJhcnJvd1wiOiB7XG4gICAgICBnZW5lcmF0ZUVsZW1lbnRTaGFwZShlbGVtZW50LCBnZW5lcmF0b3IpO1xuICAgICAgY29uc3QgZ3JvdXAgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQhLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwiZ1wiKTtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBlbGVtZW50Lm9wYWNpdHkgLyAxMDA7XG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWNhcFwiLCBcInJvdW5kXCIpO1xuXG4gICAgICAoZ2V0U2hhcGVGb3JFbGVtZW50KGVsZW1lbnQpIGFzIERyYXdhYmxlW10pLmZvckVhY2goKHNoYXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSByb3VnaFNWR0RyYXdXaXRoUHJlY2lzaW9uKFxuICAgICAgICAgIHJzdmcsXG4gICAgICAgICAgc2hhcGUsXG4gICAgICAgICAgTUFYX0RFQ0lNQUxTX0ZPUl9TVkdfRVhQT1JULFxuICAgICAgICApO1xuICAgICAgICBpZiAob3BhY2l0eSAhPT0gMSkge1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLW9wYWNpdHlcIiwgYCR7b3BhY2l0eX1gKTtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLCBgJHtvcGFjaXR5fWApO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgYHRyYW5zbGF0ZSgke29mZnNldFggfHwgMH0gJHtcbiAgICAgICAgICAgIG9mZnNldFkgfHwgMFxuICAgICAgICAgIH0pIHJvdGF0ZSgke2RlZ3JlZX0gJHtjeH0gJHtjeX0pYCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJsaW5lXCIgJiZcbiAgICAgICAgICBpc1BhdGhBTG9vcChlbGVtZW50LnBvaW50cykgJiZcbiAgICAgICAgICBlbGVtZW50LmJhY2tncm91bmRDb2xvciAhPT0gXCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICkge1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsIFwiZXZlbm9kZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBncm91cC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIH0pO1xuICAgICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChncm91cCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImZyZWVkcmF3XCI6IHtcbiAgICAgIGdlbmVyYXRlRnJlZURyYXdTaGFwZShlbGVtZW50KTtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBlbGVtZW50Lm9wYWNpdHkgLyAxMDA7XG4gICAgICBjb25zdCBub2RlID0gc3ZnUm9vdC5vd25lckRvY3VtZW50IS5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcImdcIik7XG4gICAgICBpZiAob3BhY2l0eSAhPT0gMSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cm9rZS1vcGFjaXR5XCIsIGAke29wYWNpdHl9YCk7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1vcGFjaXR5XCIsIGAke29wYWNpdHl9YCk7XG4gICAgICB9XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgYHRyYW5zbGF0ZSgke29mZnNldFggfHwgMH0gJHtcbiAgICAgICAgICBvZmZzZXRZIHx8IDBcbiAgICAgICAgfSkgcm90YXRlKCR7ZGVncmVlfSAke2N4fSAke2N5fSlgLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBhdGggPSBzdmdSb290Lm93bmVyRG9jdW1lbnQhLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwicGF0aFwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBlbGVtZW50LnN0cm9rZUNvbG9yKTtcbiAgICAgIHBhdGguc2V0QXR0cmlidXRlKFwiZFwiLCBnZXRGcmVlRHJhd1N2Z1BhdGgoZWxlbWVudCkpO1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZChwYXRoKTtcbiAgICAgIHN2Z1Jvb3QuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImltYWdlXCI6IHtcbiAgICAgIGNvbnN0IGZpbGVEYXRhID1cbiAgICAgICAgaXNJbml0aWFsaXplZEltYWdlRWxlbWVudChlbGVtZW50KSAmJiBmaWxlc1tlbGVtZW50LmZpbGVJZF07XG4gICAgICBpZiAoZmlsZURhdGEpIHtcbiAgICAgICAgY29uc3Qgc3ltYm9sSWQgPSBgaW1hZ2UtJHtmaWxlRGF0YS5pZH1gO1xuICAgICAgICBsZXQgc3ltYm9sID0gc3ZnUm9vdC5xdWVyeVNlbGVjdG9yKGAjJHtzeW1ib2xJZH1gKTtcbiAgICAgICAgaWYgKCFzeW1ib2wpIHtcbiAgICAgICAgICBzeW1ib2wgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQhLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwic3ltYm9sXCIpO1xuICAgICAgICAgIHN5bWJvbC5pZCA9IHN5bWJvbElkO1xuXG4gICAgICAgICAgY29uc3QgaW1hZ2UgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQhLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwiaW1hZ2VcIik7XG5cbiAgICAgICAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgICAgICAgaW1hZ2Uuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFwiMTAwJVwiKTtcbiAgICAgICAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGZpbGVEYXRhLmRhdGFVUkwpO1xuXG4gICAgICAgICAgc3ltYm9sLmFwcGVuZENoaWxkKGltYWdlKTtcblxuICAgICAgICAgIHN2Z1Jvb3QucHJlcGVuZChzeW1ib2wpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXNlID0gc3ZnUm9vdC5vd25lckRvY3VtZW50IS5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcInVzZVwiKTtcbiAgICAgICAgdXNlLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgYCMke3N5bWJvbElkfWApO1xuXG4gICAgICAgIC8vIGluIGRhcmsgdGhlbWUsIHJldmVydCB0aGUgaW1hZ2UgY29sb3IgZmlsdGVyXG4gICAgICAgIGlmIChleHBvcnRXaXRoRGFya01vZGUgJiYgZmlsZURhdGEubWltZVR5cGUgIT09IE1JTUVfVFlQRVMuc3ZnKSB7XG4gICAgICAgICAgdXNlLnNldEF0dHJpYnV0ZShcImZpbHRlclwiLCBJTUFHRV9JTlZFUlRfRklMVEVSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHtNYXRoLnJvdW5kKGVsZW1lbnQud2lkdGgpfWApO1xuICAgICAgICB1c2Uuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke01hdGgucm91bmQoZWxlbWVudC5oZWlnaHQpfWApO1xuXG4gICAgICAgIHVzZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICBgdHJhbnNsYXRlKCR7b2Zmc2V0WCB8fCAwfSAke1xuICAgICAgICAgICAgb2Zmc2V0WSB8fCAwXG4gICAgICAgICAgfSkgcm90YXRlKCR7ZGVncmVlfSAke2N4fSAke2N5fSlgLFxuICAgICAgICApO1xuXG4gICAgICAgIHN2Z1Jvb3QuYXBwZW5kQ2hpbGQodXNlKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBpZiAoaXNUZXh0RWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBvcGFjaXR5ID0gZWxlbWVudC5vcGFjaXR5IC8gMTAwO1xuICAgICAgICBjb25zdCBub2RlID0gc3ZnUm9vdC5vd25lckRvY3VtZW50IS5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcImdcIik7XG4gICAgICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7XG4gICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utb3BhY2l0eVwiLCBgJHtvcGFjaXR5fWApO1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1vcGFjaXR5XCIsIGAke29wYWNpdHl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICBgdHJhbnNsYXRlKCR7b2Zmc2V0WCB8fCAwfSAke1xuICAgICAgICAgICAgb2Zmc2V0WSB8fCAwXG4gICAgICAgICAgfSkgcm90YXRlKCR7ZGVncmVlfSAke2N4fSAke2N5fSlgLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGVsZW1lbnQudGV4dC5yZXBsYWNlKC9cXHJcXG4/L2csIFwiXFxuXCIpLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQgLyBsaW5lcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0ID0gZWxlbWVudC5oZWlnaHQgLSBlbGVtZW50LmJhc2VsaW5lO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsT2Zmc2V0ID1cbiAgICAgICAgICBlbGVtZW50LnRleHRBbGlnbiA9PT0gXCJjZW50ZXJcIlxuICAgICAgICAgICAgPyBlbGVtZW50LndpZHRoIC8gMlxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHRBbGlnbiA9PT0gXCJyaWdodFwiXG4gICAgICAgICAgICA/IGVsZW1lbnQud2lkdGhcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNSVEwoZWxlbWVudC50ZXh0KSA/IFwicnRsXCIgOiBcImx0clwiO1xuICAgICAgICBjb25zdCB0ZXh0QW5jaG9yID1cbiAgICAgICAgICBlbGVtZW50LnRleHRBbGlnbiA9PT0gXCJjZW50ZXJcIlxuICAgICAgICAgICAgPyBcIm1pZGRsZVwiXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dEFsaWduID09PSBcInJpZ2h0XCIgfHwgZGlyZWN0aW9uID09PSBcInJ0bFwiXG4gICAgICAgICAgICA/IFwiZW5kXCJcbiAgICAgICAgICAgIDogXCJzdGFydFwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJ0ZXh0XCIpO1xuICAgICAgICAgIHRleHQudGV4dENvbnRlbnQgPSBsaW5lc1tpXTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcInhcIiwgYCR7aG9yaXpvbnRhbE9mZnNldH1gKTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcInlcIiwgYCR7KGkgKyAxKSAqIGxpbmVIZWlnaHQgLSB2ZXJ0aWNhbE9mZnNldH1gKTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcImZvbnQtZmFtaWx5XCIsIGdldEZvbnRGYW1pbHlTdHJpbmcoZWxlbWVudCkpO1xuICAgICAgICAgIHRleHQuc2V0QXR0cmlidXRlKFwiZm9udC1zaXplXCIsIGAke2VsZW1lbnQuZm9udFNpemV9cHhgKTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgZWxlbWVudC5zdHJva2VDb2xvcik7XG4gICAgICAgICAgdGV4dC5zZXRBdHRyaWJ1dGUoXCJ0ZXh0LWFuY2hvclwiLCB0ZXh0QW5jaG9yKTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2hpdGUtc3BhY2U6IHByZTtcIik7XG4gICAgICAgICAgdGV4dC5zZXRBdHRyaWJ1dGUoXCJkaXJlY3Rpb25cIiwgZGlyZWN0aW9uKTtcbiAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHN2Z1Jvb3QuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlICR7ZWxlbWVudC50eXBlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGxldCBwYXRoc0NhY2hlID0gbmV3IFdlYWtNYXA8RXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudCwgUGF0aDJEPihbXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUZyZWVEcmF3U2hhcGUoZWxlbWVudDogRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudCkge1xuICBjb25zdCBzdmdQYXRoRGF0YSA9IGdldEZyZWVEcmF3U3ZnUGF0aChlbGVtZW50KTtcbiAgY29uc3QgcGF0aCA9IG5ldyBQYXRoMkQoc3ZnUGF0aERhdGEpO1xuICBwYXRoc0NhY2hlLnNldChlbGVtZW50LCBwYXRoKTtcbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcmVlRHJhd1BhdGgyRChlbGVtZW50OiBFeGNhbGlkcmF3RnJlZURyYXdFbGVtZW50KSB7XG4gIHJldHVybiBwYXRoc0NhY2hlLmdldChlbGVtZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZyZWVEcmF3U3ZnUGF0aChlbGVtZW50OiBFeGNhbGlkcmF3RnJlZURyYXdFbGVtZW50KSB7XG4gIC8vIElmIGlucHV0IHBvaW50cyBhcmUgZW1wdHkgKHNob3VsZCB0aGV5IGV2ZXIgYmU/KSByZXR1cm4gYSBkb3RcbiAgY29uc3QgaW5wdXRQb2ludHMgPSBlbGVtZW50LnNpbXVsYXRlUHJlc3N1cmVcbiAgICA/IGVsZW1lbnQucG9pbnRzXG4gICAgOiBlbGVtZW50LnBvaW50cy5sZW5ndGhcbiAgICA/IGVsZW1lbnQucG9pbnRzLm1hcCgoW3gsIHldLCBpKSA9PiBbeCwgeSwgZWxlbWVudC5wcmVzc3VyZXNbaV1dKVxuICAgIDogW1swLCAwLCAwLjVdXTtcblxuICAvLyBDb25zaWRlciBjaGFuZ2luZyB0aGUgb3B0aW9ucyBmb3Igc2ltdWxhdGVkIHByZXNzdXJlIHZzIHJlYWwgcHJlc3N1cmVcbiAgY29uc3Qgb3B0aW9uczogU3Ryb2tlT3B0aW9ucyA9IHtcbiAgICBzaW11bGF0ZVByZXNzdXJlOiBlbGVtZW50LnNpbXVsYXRlUHJlc3N1cmUsXG4gICAgc2l6ZTogZWxlbWVudC5zdHJva2VXaWR0aCAqIDQuMjUsXG4gICAgdGhpbm5pbmc6IDAuNixcbiAgICBzbW9vdGhpbmc6IDAuNSxcbiAgICBzdHJlYW1saW5lOiAwLjUsXG4gICAgZWFzaW5nOiAodCkgPT4gTWF0aC5zaW4oKHQgKiBNYXRoLlBJKSAvIDIpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0U2luZVxuICAgIGxhc3Q6ICEhZWxlbWVudC5sYXN0Q29tbWl0dGVkUG9pbnQsIC8vIExhc3RDb21taXR0ZWRQb2ludCBpcyBhZGRlZCBvbiBwb2ludGVydXBcbiAgfTtcblxuICByZXR1cm4gZ2V0U3ZnUGF0aEZyb21TdHJva2UoZ2V0U3Ryb2tlKGlucHV0UG9pbnRzIGFzIG51bWJlcltdW10sIG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gbWVkKEE6IG51bWJlcltdLCBCOiBudW1iZXJbXSkge1xuICByZXR1cm4gWyhBWzBdICsgQlswXSkgLyAyLCAoQVsxXSArIEJbMV0pIC8gMl07XG59XG5cbi8vIFRyaW0gU1ZHIHBhdGggZGF0YSBzbyBudW1iZXIgYXJlIGVhY2ggdHdvIGRlY2ltYWwgcG9pbnRzLiBUaGlzXG4vLyBpbXByb3ZlcyBTVkcgZXhwb3J0cywgYW5kIHByZXZlbnRzIHJlbmRlcmluZyBlcnJvcnMgb24gcG9pbnRzXG4vLyB3aXRoIGxvbmcgZGVjaW1hbHMuXG5jb25zdCBUT19GSVhFRF9QUkVDSVNJT04gPSAvKFxccz9bQS1aXT8sPy0/WzAtOV0qXFwuWzAtOV17MCwyfSkoKFswLTldfGV8LSkqKS9nO1xuXG5mdW5jdGlvbiBnZXRTdmdQYXRoRnJvbVN0cm9rZShwb2ludHM6IG51bWJlcltdW10pOiBzdHJpbmcge1xuICBpZiAoIXBvaW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IG1heCA9IHBvaW50cy5sZW5ndGggLSAxO1xuXG4gIHJldHVybiBwb2ludHNcbiAgICAucmVkdWNlKFxuICAgICAgKGFjYywgcG9pbnQsIGksIGFycikgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gbWF4KSB7XG4gICAgICAgICAgYWNjLnB1c2gocG9pbnQsIG1lZChwb2ludCwgYXJyWzBdKSwgXCJMXCIsIGFyclswXSwgXCJaXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy5wdXNoKHBvaW50LCBtZWQocG9pbnQsIGFycltpICsgMV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFtcIk1cIiwgcG9pbnRzWzBdLCBcIlFcIl0sXG4gICAgKVxuICAgIC5qb2luKFwiIFwiKVxuICAgIC5yZXBsYWNlKFRPX0ZJWEVEX1BSRUNJU0lPTiwgXCIkMVwiKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../renderer/renderElement.ts\n");
|
|
2575
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getShapeForElement\": () => (/* binding */ getShapeForElement),\n/* harmony export */ \"invalidateShapeForElement\": () => (/* binding */ invalidateShapeForElement),\n/* harmony export */ \"clearRenderCache\": () => (/* binding */ clearRenderCache),\n/* harmony export */ \"generateRoughOptions\": () => (/* binding */ generateRoughOptions),\n/* harmony export */ \"renderElement\": () => (/* binding */ renderElement),\n/* harmony export */ \"renderElementToSvg\": () => (/* binding */ renderElementToSvg),\n/* harmony export */ \"pathsCache\": () => (/* binding */ pathsCache),\n/* harmony export */ \"generateFreeDrawShape\": () => (/* binding */ generateFreeDrawShape),\n/* harmony export */ \"getFreeDrawPath2D\": () => (/* binding */ getFreeDrawPath2D),\n/* harmony export */ \"getFreeDrawSvgPath\": () => (/* binding */ getFreeDrawSvgPath)\n/* harmony export */ });\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../element/typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math */ \"../../math.ts\");\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var perfect_freehand__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! perfect-freehand */ \"../../../node_modules/perfect-freehand/dist/esm/index.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// using a stronger invert (100% vs our regular 93%) and saturate\r\n// as a temp hack to make images in dark theme look closer to original\r\n// color scheme (it's still not quite there and the colors look slightly\r\n// desatured, alas...)\r\nconst IMAGE_INVERT_FILTER = \"invert(100%) hue-rotate(180deg) saturate(1.25)\";\r\nconst defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\r\nconst isPendingImageElement = (element, renderConfig) => (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isInitializedImageElement)(element) &&\r\n !renderConfig.imageCache.has(element.fileId);\r\nconst shouldResetImageFilter = (element, renderConfig) => {\r\n var _a;\r\n return (renderConfig.theme === \"dark\" &&\r\n (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isInitializedImageElement)(element) &&\r\n !isPendingImageElement(element, renderConfig) &&\r\n ((_a = renderConfig.imageCache.get(element.fileId)) === null || _a === void 0 ? void 0 : _a.mimeType) !== _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.svg);\r\n};\r\nconst getDashArrayDashed = (strokeWidth) => [8, 8 + strokeWidth];\r\nconst getDashArrayDotted = (strokeWidth) => [1.5, 6 + strokeWidth];\r\nconst getCanvasPadding = (element) => element.type === \"freedraw\" ? element.strokeWidth * 12 : 20;\r\nconst generateElementCanvas = (element, zoom, renderConfig) => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n const padding = getCanvasPadding(element);\r\n let canvasOffsetX = 0;\r\n let canvasOffsetY = 0;\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isLinearElement)(element) || (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isFreeDrawElement)(element)) {\r\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n canvas.width =\r\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.distance)(x1, x2) * window.devicePixelRatio * zoom.value +\r\n padding * zoom.value * 2;\r\n canvas.height =\r\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.distance)(y1, y2) * window.devicePixelRatio * zoom.value +\r\n padding * zoom.value * 2;\r\n canvasOffsetX =\r\n element.x > x1\r\n ? (0,_utils__WEBPACK_IMPORTED_MODULE_2__.distance)(element.x, x1) * window.devicePixelRatio * zoom.value\r\n : 0;\r\n canvasOffsetY =\r\n element.y > y1\r\n ? (0,_utils__WEBPACK_IMPORTED_MODULE_2__.distance)(element.y, y1) * window.devicePixelRatio * zoom.value\r\n : 0;\r\n context.translate(canvasOffsetX, canvasOffsetY);\r\n }\r\n else {\r\n canvas.width =\r\n element.width * window.devicePixelRatio * zoom.value +\r\n padding * zoom.value * 2;\r\n canvas.height =\r\n element.height * window.devicePixelRatio * zoom.value +\r\n padding * zoom.value * 2;\r\n }\r\n context.save();\r\n context.translate(padding * zoom.value, padding * zoom.value);\r\n context.scale(window.devicePixelRatio * zoom.value, window.devicePixelRatio * zoom.value);\r\n const rc = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_4__[\"default\"].canvas(canvas);\r\n // in dark theme, revert the image color filter\r\n if (shouldResetImageFilter(element, renderConfig)) {\r\n context.filter = IMAGE_INVERT_FILTER;\r\n }\r\n drawElementOnCanvas(element, rc, context, renderConfig);\r\n context.restore();\r\n return {\r\n element,\r\n canvas,\r\n theme: renderConfig.theme,\r\n canvasZoom: zoom.value,\r\n canvasOffsetX,\r\n canvasOffsetY,\r\n };\r\n};\r\nconst IMAGE_PLACEHOLDER_IMG = document.createElement(\"img\");\r\nIMAGE_PLACEHOLDER_IMG.src = `data:${_constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.svg},${encodeURIComponent(`<svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"image\" class=\"svg-inline--fa fa-image fa-w-16\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"#888\" d=\"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z\"></path></svg>`)}`;\r\nconst IMAGE_ERROR_PLACEHOLDER_IMG = document.createElement(\"img\");\r\nIMAGE_ERROR_PLACEHOLDER_IMG.src = `data:${_constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.svg},${encodeURIComponent(`<svg viewBox=\"0 0 668 668\" xmlns=\"http://www.w3.org/2000/svg\" xml:space=\"preserve\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2\"><path d=\"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48ZM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56ZM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48Z\" style=\"fill:#888;fill-rule:nonzero\" transform=\"matrix(.81709 0 0 .81709 124.825 145.825)\"/><path d=\"M256 8C119.034 8 8 119.033 8 256c0 136.967 111.034 248 248 248s248-111.034 248-248S392.967 8 256 8Zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676ZM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676Z\" style=\"fill:#888;fill-rule:nonzero\" transform=\"matrix(.30366 0 0 .30366 506.822 60.065)\"/></svg>`)}`;\r\nconst drawImagePlaceholder = (element, context, zoomValue) => {\r\n context.fillStyle = \"#E7E7E7\";\r\n context.fillRect(0, 0, element.width, element.height);\r\n const imageMinWidthOrHeight = Math.min(element.width, element.height);\r\n const size = Math.min(imageMinWidthOrHeight, Math.min(imageMinWidthOrHeight * 0.4, 100));\r\n context.drawImage(element.status === \"error\"\r\n ? IMAGE_ERROR_PLACEHOLDER_IMG\r\n : IMAGE_PLACEHOLDER_IMG, element.width / 2 - size / 2, element.height / 2 - size / 2, size, size);\r\n};\r\nconst drawElementOnCanvas = (element, rc, context, renderConfig) => {\r\n var _a;\r\n context.globalAlpha = element.opacity / 100;\r\n switch (element.type) {\r\n case \"rectangle\":\r\n case \"diamond\":\r\n case \"ellipse\": {\r\n context.lineJoin = \"round\";\r\n context.lineCap = \"round\";\r\n rc.draw(getShapeForElement(element));\r\n break;\r\n }\r\n case \"arrow\":\r\n case \"line\": {\r\n context.lineJoin = \"round\";\r\n context.lineCap = \"round\";\r\n getShapeForElement(element).forEach((shape) => {\r\n rc.draw(shape);\r\n });\r\n break;\r\n }\r\n case \"freedraw\": {\r\n // Draw directly to canvas\r\n context.save();\r\n context.fillStyle = element.strokeColor;\r\n const path = getFreeDrawPath2D(element);\r\n context.fillStyle = element.strokeColor;\r\n context.fill(path);\r\n context.restore();\r\n break;\r\n }\r\n case \"image\": {\r\n const img = (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isInitializedImageElement)(element)\r\n ? (_a = renderConfig.imageCache.get(element.fileId)) === null || _a === void 0 ? void 0 : _a.image\r\n : undefined;\r\n if (img != null && !(img instanceof Promise)) {\r\n context.drawImage(img, 0 /* hardcoded for the selection box*/, 0, element.width, element.height);\r\n }\r\n else {\r\n drawImagePlaceholder(element, context, renderConfig.zoom.value);\r\n }\r\n break;\r\n }\r\n default: {\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isTextElement)(element)) {\r\n const rtl = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.isRTL)(element.text);\r\n const shouldTemporarilyAttach = rtl && !context.canvas.isConnected;\r\n if (shouldTemporarilyAttach) {\r\n // to correctly render RTL text mixed with LTR, we have to append it\r\n // to the DOM\r\n document.body.appendChild(context.canvas);\r\n }\r\n context.canvas.setAttribute(\"dir\", rtl ? \"rtl\" : \"ltr\");\r\n context.save();\r\n context.font = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getFontString)(element);\r\n context.fillStyle = element.strokeColor;\r\n context.textAlign = element.textAlign;\r\n // Canvas does not support multiline text by default\r\n const lines = element.text.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\r\n const lineHeight = element.height / lines.length;\r\n const verticalOffset = element.height - element.baseline;\r\n const horizontalOffset = element.textAlign === \"center\"\r\n ? element.width / 2\r\n : element.textAlign === \"right\"\r\n ? element.width\r\n : 0;\r\n for (let index = 0; index < lines.length; index++) {\r\n context.fillText(lines[index], horizontalOffset, (index + 1) * lineHeight - verticalOffset);\r\n }\r\n context.restore();\r\n if (shouldTemporarilyAttach) {\r\n context.canvas.remove();\r\n }\r\n }\r\n else {\r\n throw new Error(`Unimplemented type ${element.type}`);\r\n }\r\n }\r\n }\r\n context.globalAlpha = 1;\r\n};\r\nlet elementWithCanvasCache = new WeakMap();\r\nlet shapeCache = new WeakMap();\r\nconst getShapeForElement = (element) => shapeCache.get(element);\r\nconst invalidateShapeForElement = (element) => shapeCache.delete(element);\r\nconst clearRenderCache = () => {\r\n elementWithCanvasCache = new WeakMap();\r\n shapeCache = new WeakMap();\r\n pathsCache = new WeakMap();\r\n};\r\nconst generateRoughOptions = (element, continuousPath = false) => {\r\n const options = {\r\n seed: element.seed,\r\n strokeLineDash: element.strokeStyle === \"dashed\"\r\n ? getDashArrayDashed(element.strokeWidth)\r\n : element.strokeStyle === \"dotted\"\r\n ? getDashArrayDotted(element.strokeWidth)\r\n : undefined,\r\n // for non-solid strokes, disable multiStroke because it tends to make\r\n // dashes/dots overlay each other\r\n disableMultiStroke: element.strokeStyle !== \"solid\",\r\n // for non-solid strokes, increase the width a bit to make it visually\r\n // similar to solid strokes, because we're also disabling multiStroke\r\n strokeWidth: element.strokeStyle !== \"solid\"\r\n ? element.strokeWidth + 0.5\r\n : element.strokeWidth,\r\n // when increasing strokeWidth, we must explicitly set fillWeight and\r\n // hachureGap because if not specified, roughjs uses strokeWidth to\r\n // calculate them (and we don't want the fills to be modified)\r\n fillWeight: element.strokeWidth / 2,\r\n hachureGap: element.strokeWidth * 4,\r\n roughness: element.roughness,\r\n stroke: element.strokeColor,\r\n preserveVertices: continuousPath,\r\n };\r\n switch (element.type) {\r\n case \"rectangle\":\r\n case \"diamond\":\r\n case \"ellipse\": {\r\n options.fillStyle = element.fillStyle;\r\n options.fill =\r\n element.backgroundColor === \"transparent\"\r\n ? undefined\r\n : element.backgroundColor;\r\n if (element.type === \"ellipse\") {\r\n options.curveFitting = 1;\r\n }\r\n return options;\r\n }\r\n case \"line\": {\r\n if ((0,_math__WEBPACK_IMPORTED_MODULE_3__.isPathALoop)(element.points)) {\r\n options.fillStyle = element.fillStyle;\r\n options.fill =\r\n element.backgroundColor === \"transparent\"\r\n ? undefined\r\n : element.backgroundColor;\r\n }\r\n return options;\r\n }\r\n case \"freedraw\":\r\n case \"arrow\":\r\n return options;\r\n default: {\r\n throw new Error(`Unimplemented type ${element.type}`);\r\n }\r\n }\r\n};\r\n/**\r\n * Generates the element's shape and puts it into the cache.\r\n * @param element\r\n * @param generator\r\n */\r\nconst generateElementShape = (element, generator) => {\r\n let shape = shapeCache.get(element) || null;\r\n if (!shape) {\r\n elementWithCanvasCache.delete(element);\r\n switch (element.type) {\r\n case \"rectangle\":\r\n if (element.strokeSharpness === \"round\") {\r\n const w = element.width;\r\n const h = element.height;\r\n const r = Math.min(w, h) * 0.25;\r\n shape = generator.path(`M ${r} 0 L ${w - r} 0 Q ${w} 0, ${w} ${r} L ${w} ${h - r} Q ${w} ${h}, ${w - r} ${h} L ${r} ${h} Q 0 ${h}, 0 ${h - r} L 0 ${r} Q 0 0, ${r} 0`, generateRoughOptions(element, true));\r\n }\r\n else {\r\n shape = generator.rectangle(0, 0, element.width, element.height, generateRoughOptions(element));\r\n }\r\n break;\r\n case \"diamond\": {\r\n const [topX, topY, rightX, rightY, bottomX, bottomY, leftX, leftY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getDiamondPoints)(element);\r\n if (element.strokeSharpness === \"round\") {\r\n shape = generator.path(`M ${topX + (rightX - topX) * 0.25} ${topY + (rightY - topY) * 0.25} L ${rightX - (rightX - topX) * 0.25} ${rightY - (rightY - topY) * 0.25} \n C ${rightX} ${rightY}, ${rightX} ${rightY}, ${rightX - (rightX - bottomX) * 0.25} ${rightY + (bottomY - rightY) * 0.25} \n L ${bottomX + (rightX - bottomX) * 0.25} ${bottomY - (bottomY - rightY) * 0.25} \n C ${bottomX} ${bottomY}, ${bottomX} ${bottomY}, ${bottomX - (bottomX - leftX) * 0.25} ${bottomY - (bottomY - leftY) * 0.25} \n L ${leftX + (bottomX - leftX) * 0.25} ${leftY + (bottomY - leftY) * 0.25} \n C ${leftX} ${leftY}, ${leftX} ${leftY}, ${leftX + (topX - leftX) * 0.25} ${leftY - (leftY - topY) * 0.25} \n L ${topX - (topX - leftX) * 0.25} ${topY + (leftY - topY) * 0.25} \n C ${topX} ${topY}, ${topX} ${topY}, ${topX + (rightX - topX) * 0.25} ${topY + (rightY - topY) * 0.25}`, generateRoughOptions(element, true));\r\n }\r\n else {\r\n shape = generator.polygon([\r\n [topX, topY],\r\n [rightX, rightY],\r\n [bottomX, bottomY],\r\n [leftX, leftY],\r\n ], generateRoughOptions(element));\r\n }\r\n break;\r\n }\r\n case \"ellipse\":\r\n shape = generator.ellipse(element.width / 2, element.height / 2, element.width, element.height, generateRoughOptions(element));\r\n break;\r\n case \"line\":\r\n case \"arrow\": {\r\n const options = generateRoughOptions(element);\r\n // points array can be empty in the beginning, so it is important to add\r\n // initial position to it\r\n const points = element.points.length ? element.points : [[0, 0]];\r\n // curve is always the first element\r\n // this simplifies finding the curve for an element\r\n if (element.strokeSharpness === \"sharp\") {\r\n if (options.fill) {\r\n shape = [generator.polygon(points, options)];\r\n }\r\n else {\r\n shape = [\r\n generator.linearPath(points, options),\r\n ];\r\n }\r\n }\r\n else {\r\n shape = [generator.curve(points, options)];\r\n }\r\n // add lines only in arrow\r\n if (element.type === \"arrow\") {\r\n const { startArrowhead = null, endArrowhead = \"arrow\" } = element;\r\n const getArrowheadShapes = (element, shape, position, arrowhead) => {\r\n const arrowheadPoints = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getArrowheadPoints)(element, shape, position, arrowhead);\r\n if (arrowheadPoints === null) {\r\n return [];\r\n }\r\n // Other arrowheads here...\r\n if (arrowhead === \"dot\") {\r\n const [x, y, r] = arrowheadPoints;\r\n return [\r\n generator.circle(x, y, r, Object.assign(Object.assign({}, options), { fill: element.strokeColor, fillStyle: \"solid\", stroke: \"none\" })),\r\n ];\r\n }\r\n if (arrowhead === \"triangle\") {\r\n const [x, y, x2, y2, x3, y3] = arrowheadPoints;\r\n // always use solid stroke for triangle arrowhead\r\n delete options.strokeLineDash;\r\n return [\r\n generator.polygon([\r\n [x, y],\r\n [x2, y2],\r\n [x3, y3],\r\n [x, y],\r\n ], Object.assign(Object.assign({}, options), { fill: element.strokeColor, fillStyle: \"solid\" })),\r\n ];\r\n }\r\n // Arrow arrowheads\r\n const [x2, y2, x3, y3, x4, y4] = arrowheadPoints;\r\n if (element.strokeStyle === \"dotted\") {\r\n // for dotted arrows caps, reduce gap to make it more legible\r\n const dash = getDashArrayDotted(element.strokeWidth - 1);\r\n options.strokeLineDash = [dash[0], dash[1] - 1];\r\n }\r\n else {\r\n // for solid/dashed, keep solid arrow cap\r\n delete options.strokeLineDash;\r\n }\r\n return [\r\n generator.line(x3, y3, x2, y2, options),\r\n generator.line(x4, y4, x2, y2, options),\r\n ];\r\n };\r\n if (startArrowhead !== null) {\r\n const shapes = getArrowheadShapes(element, shape, \"start\", startArrowhead);\r\n shape.push(...shapes);\r\n }\r\n if (endArrowhead !== null) {\r\n if (endArrowhead === undefined) {\r\n // Hey, we have an old arrow here!\r\n }\r\n const shapes = getArrowheadShapes(element, shape, \"end\", endArrowhead);\r\n shape.push(...shapes);\r\n }\r\n }\r\n break;\r\n }\r\n case \"freedraw\": {\r\n generateFreeDrawShape(element);\r\n shape = [];\r\n break;\r\n }\r\n case \"text\":\r\n case \"image\": {\r\n // just to ensure we don't regenerate element.canvas on rerenders\r\n shape = [];\r\n break;\r\n }\r\n }\r\n shapeCache.set(element, shape);\r\n }\r\n};\r\nconst generateElementWithCanvas = (element, renderConfig) => {\r\n const zoom = renderConfig ? renderConfig.zoom : defaultAppState.zoom;\r\n const prevElementWithCanvas = elementWithCanvasCache.get(element);\r\n const shouldRegenerateBecauseZoom = prevElementWithCanvas &&\r\n prevElementWithCanvas.canvasZoom !== zoom.value &&\r\n !(renderConfig === null || renderConfig === void 0 ? void 0 : renderConfig.shouldCacheIgnoreZoom);\r\n if (!prevElementWithCanvas ||\r\n shouldRegenerateBecauseZoom ||\r\n prevElementWithCanvas.theme !== renderConfig.theme) {\r\n const elementWithCanvas = generateElementCanvas(element, zoom, renderConfig);\r\n elementWithCanvasCache.set(element, elementWithCanvas);\r\n return elementWithCanvas;\r\n }\r\n return prevElementWithCanvas;\r\n};\r\nconst drawElementFromCanvas = (elementWithCanvas, rc, context, renderConfig) => {\r\n const element = elementWithCanvas.element;\r\n const padding = getCanvasPadding(element);\r\n let [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n // Free draw elements will otherwise \"shuffle\" as the min x and y change\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isFreeDrawElement)(element)) {\r\n x1 = Math.floor(x1);\r\n x2 = Math.ceil(x2);\r\n y1 = Math.floor(y1);\r\n y2 = Math.ceil(y2);\r\n }\r\n const cx = ((x1 + x2) / 2 + renderConfig.scrollX) * window.devicePixelRatio;\r\n const cy = ((y1 + y2) / 2 + renderConfig.scrollY) * window.devicePixelRatio;\r\n const _isPendingImageElement = isPendingImageElement(element, renderConfig);\r\n const scaleXFactor = \"scale\" in elementWithCanvas.element && !_isPendingImageElement\r\n ? elementWithCanvas.element.scale[0]\r\n : 1;\r\n const scaleYFactor = \"scale\" in elementWithCanvas.element && !_isPendingImageElement\r\n ? elementWithCanvas.element.scale[1]\r\n : 1;\r\n context.save();\r\n context.scale((1 / window.devicePixelRatio) * scaleXFactor, (1 / window.devicePixelRatio) * scaleYFactor);\r\n context.translate(cx * scaleXFactor, cy * scaleYFactor);\r\n context.rotate(element.angle * scaleXFactor * scaleYFactor);\r\n context.drawImage(elementWithCanvas.canvas, (-(x2 - x1) / 2) * window.devicePixelRatio -\r\n (padding * elementWithCanvas.canvasZoom) / elementWithCanvas.canvasZoom, (-(y2 - y1) / 2) * window.devicePixelRatio -\r\n (padding * elementWithCanvas.canvasZoom) / elementWithCanvas.canvasZoom, elementWithCanvas.canvas.width / elementWithCanvas.canvasZoom, elementWithCanvas.canvas.height / elementWithCanvas.canvasZoom);\r\n context.restore();\r\n // Clear the nested element we appended to the DOM\r\n};\r\nconst renderElement = (element, rc, context, renderConfig) => {\r\n const generator = rc.generator;\r\n switch (element.type) {\r\n case \"selection\": {\r\n context.save();\r\n context.translate(element.x + renderConfig.scrollX, element.y + renderConfig.scrollY);\r\n context.fillStyle = \"rgba(0, 0, 255, 0.10)\";\r\n context.fillRect(0, 0, element.width, element.height);\r\n context.restore();\r\n break;\r\n }\r\n case \"freedraw\": {\r\n generateElementShape(element, generator);\r\n if (renderConfig.isExporting) {\r\n const elementWithCanvas = generateElementWithCanvas(element, renderConfig);\r\n drawElementFromCanvas(elementWithCanvas, rc, context, renderConfig);\r\n }\r\n else {\r\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n const cx = (x1 + x2) / 2 + renderConfig.scrollX;\r\n const cy = (y1 + y2) / 2 + renderConfig.scrollY;\r\n const shiftX = (x2 - x1) / 2 - (element.x - x1);\r\n const shiftY = (y2 - y1) / 2 - (element.y - y1);\r\n context.save();\r\n context.translate(cx, cy);\r\n context.rotate(element.angle);\r\n context.translate(-shiftX, -shiftY);\r\n drawElementOnCanvas(element, rc, context, renderConfig);\r\n context.restore();\r\n }\r\n break;\r\n }\r\n case \"rectangle\":\r\n case \"diamond\":\r\n case \"ellipse\":\r\n case \"line\":\r\n case \"arrow\":\r\n case \"image\":\r\n case \"text\": {\r\n generateElementShape(element, generator);\r\n if (renderConfig.isExporting) {\r\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n const cx = (x1 + x2) / 2 + renderConfig.scrollX;\r\n const cy = (y1 + y2) / 2 + renderConfig.scrollY;\r\n const shiftX = (x2 - x1) / 2 - (element.x - x1);\r\n const shiftY = (y2 - y1) / 2 - (element.y - y1);\r\n context.save();\r\n context.translate(cx, cy);\r\n context.rotate(element.angle);\r\n context.translate(-shiftX, -shiftY);\r\n if (shouldResetImageFilter(element, renderConfig)) {\r\n context.filter = \"none\";\r\n }\r\n drawElementOnCanvas(element, rc, context, renderConfig);\r\n context.restore();\r\n // not exporting → optimized rendering (cache & render from element\r\n // canvases)\r\n }\r\n else {\r\n const elementWithCanvas = generateElementWithCanvas(element, renderConfig);\r\n drawElementFromCanvas(elementWithCanvas, rc, context, renderConfig);\r\n }\r\n break;\r\n }\r\n default: {\r\n // @ts-ignore\r\n throw new Error(`Unimplemented type ${element.type}`);\r\n }\r\n }\r\n};\r\nconst roughSVGDrawWithPrecision = (rsvg, drawable, precision) => {\r\n if (typeof precision === \"undefined\") {\r\n return rsvg.draw(drawable);\r\n }\r\n const pshape = {\r\n sets: drawable.sets,\r\n shape: drawable.shape,\r\n options: Object.assign(Object.assign({}, drawable.options), { fixedDecimalPlaceDigits: precision }),\r\n };\r\n return rsvg.draw(pshape);\r\n};\r\nconst renderElementToSvg = (element, rsvg, svgRoot, files, offsetX, offsetY, exportWithDarkMode) => {\r\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n const cx = (x2 - x1) / 2 - (element.x - x1);\r\n const cy = (y2 - y1) / 2 - (element.y - y1);\r\n const degree = (180 * element.angle) / Math.PI;\r\n const generator = rsvg.generator;\r\n switch (element.type) {\r\n case \"selection\": {\r\n // Since this is used only during editing experience, which is canvas based,\r\n // this should not happen\r\n throw new Error(\"Selection rendering is not supported for SVG\");\r\n }\r\n case \"rectangle\":\r\n case \"diamond\":\r\n case \"ellipse\": {\r\n generateElementShape(element, generator);\r\n const node = roughSVGDrawWithPrecision(rsvg, getShapeForElement(element), _constants__WEBPACK_IMPORTED_MODULE_6__.MAX_DECIMALS_FOR_SVG_EXPORT);\r\n const opacity = element.opacity / 100;\r\n if (opacity !== 1) {\r\n node.setAttribute(\"stroke-opacity\", `${opacity}`);\r\n node.setAttribute(\"fill-opacity\", `${opacity}`);\r\n }\r\n node.setAttribute(\"stroke-linecap\", \"round\");\r\n node.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n svgRoot.appendChild(node);\r\n break;\r\n }\r\n case \"line\":\r\n case \"arrow\": {\r\n generateElementShape(element, generator);\r\n const group = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"g\");\r\n const opacity = element.opacity / 100;\r\n group.setAttribute(\"stroke-linecap\", \"round\");\r\n getShapeForElement(element).forEach((shape) => {\r\n const node = roughSVGDrawWithPrecision(rsvg, shape, _constants__WEBPACK_IMPORTED_MODULE_6__.MAX_DECIMALS_FOR_SVG_EXPORT);\r\n if (opacity !== 1) {\r\n node.setAttribute(\"stroke-opacity\", `${opacity}`);\r\n node.setAttribute(\"fill-opacity\", `${opacity}`);\r\n }\r\n node.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n if (element.type === \"line\" &&\r\n (0,_math__WEBPACK_IMPORTED_MODULE_3__.isPathALoop)(element.points) &&\r\n element.backgroundColor !== \"transparent\") {\r\n node.setAttribute(\"fill-rule\", \"evenodd\");\r\n }\r\n group.appendChild(node);\r\n });\r\n svgRoot.appendChild(group);\r\n break;\r\n }\r\n case \"freedraw\": {\r\n generateFreeDrawShape(element);\r\n const opacity = element.opacity / 100;\r\n const node = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"g\");\r\n if (opacity !== 1) {\r\n node.setAttribute(\"stroke-opacity\", `${opacity}`);\r\n node.setAttribute(\"fill-opacity\", `${opacity}`);\r\n }\r\n node.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n const path = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"path\");\r\n node.setAttribute(\"stroke\", \"none\");\r\n node.setAttribute(\"fill\", element.strokeColor);\r\n path.setAttribute(\"d\", getFreeDrawSvgPath(element));\r\n node.appendChild(path);\r\n svgRoot.appendChild(node);\r\n break;\r\n }\r\n case \"image\": {\r\n const fileData = (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isInitializedImageElement)(element) && files[element.fileId];\r\n if (fileData) {\r\n const symbolId = `image-${fileData.id}`;\r\n let symbol = svgRoot.querySelector(`#${symbolId}`);\r\n if (!symbol) {\r\n symbol = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"symbol\");\r\n symbol.id = symbolId;\r\n const image = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"image\");\r\n image.setAttribute(\"width\", \"100%\");\r\n image.setAttribute(\"height\", \"100%\");\r\n image.setAttribute(\"href\", fileData.dataURL);\r\n symbol.appendChild(image);\r\n svgRoot.prepend(symbol);\r\n }\r\n const use = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"use\");\r\n use.setAttribute(\"href\", `#${symbolId}`);\r\n // in dark theme, revert the image color filter\r\n if (exportWithDarkMode && fileData.mimeType !== _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.svg) {\r\n use.setAttribute(\"filter\", IMAGE_INVERT_FILTER);\r\n }\r\n use.setAttribute(\"width\", `${Math.round(element.width)}`);\r\n use.setAttribute(\"height\", `${Math.round(element.height)}`);\r\n use.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n svgRoot.appendChild(use);\r\n }\r\n break;\r\n }\r\n default: {\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_0__.isTextElement)(element)) {\r\n const opacity = element.opacity / 100;\r\n const node = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"g\");\r\n if (opacity !== 1) {\r\n node.setAttribute(\"stroke-opacity\", `${opacity}`);\r\n node.setAttribute(\"fill-opacity\", `${opacity}`);\r\n }\r\n node.setAttribute(\"transform\", `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`);\r\n const lines = element.text.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\r\n const lineHeight = element.height / lines.length;\r\n const verticalOffset = element.height - element.baseline;\r\n const horizontalOffset = element.textAlign === \"center\"\r\n ? element.width / 2\r\n : element.textAlign === \"right\"\r\n ? element.width\r\n : 0;\r\n const direction = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.isRTL)(element.text) ? \"rtl\" : \"ltr\";\r\n const textAnchor = element.textAlign === \"center\"\r\n ? \"middle\"\r\n : element.textAlign === \"right\" || direction === \"rtl\"\r\n ? \"end\"\r\n : \"start\";\r\n for (let i = 0; i < lines.length; i++) {\r\n const text = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_6__.SVG_NS, \"text\");\r\n text.textContent = lines[i];\r\n text.setAttribute(\"x\", `${horizontalOffset}`);\r\n text.setAttribute(\"y\", `${(i + 1) * lineHeight - verticalOffset}`);\r\n text.setAttribute(\"font-family\", (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getFontFamilyString)(element));\r\n text.setAttribute(\"font-size\", `${element.fontSize}px`);\r\n text.setAttribute(\"fill\", element.strokeColor);\r\n text.setAttribute(\"text-anchor\", textAnchor);\r\n text.setAttribute(\"style\", \"white-space: pre;\");\r\n text.setAttribute(\"direction\", direction);\r\n node.appendChild(text);\r\n }\r\n svgRoot.appendChild(node);\r\n }\r\n else {\r\n // @ts-ignore\r\n throw new Error(`Unimplemented type ${element.type}`);\r\n }\r\n }\r\n }\r\n};\r\nlet pathsCache = new WeakMap([]);\r\nfunction generateFreeDrawShape(element) {\r\n const svgPathData = getFreeDrawSvgPath(element);\r\n const path = new Path2D(svgPathData);\r\n pathsCache.set(element, path);\r\n return path;\r\n}\r\nfunction getFreeDrawPath2D(element) {\r\n return pathsCache.get(element);\r\n}\r\nfunction getFreeDrawSvgPath(element) {\r\n // If input points are empty (should they ever be?) return a dot\r\n const inputPoints = element.simulatePressure\r\n ? element.points\r\n : element.points.length\r\n ? element.points.map(([x, y], i) => [x, y, element.pressures[i]])\r\n : [[0, 0, 0.5]];\r\n // Consider changing the options for simulated pressure vs real pressure\r\n const options = {\r\n simulatePressure: element.simulatePressure,\r\n size: element.strokeWidth * 4.25,\r\n thinning: 0.6,\r\n smoothing: 0.5,\r\n streamline: 0.5,\r\n easing: (t) => Math.sin((t * Math.PI) / 2),\r\n last: !!element.lastCommittedPoint, // LastCommittedPoint is added on pointerup\r\n };\r\n return getSvgPathFromStroke((0,perfect_freehand__WEBPACK_IMPORTED_MODULE_7__.getStroke)(inputPoints, options));\r\n}\r\nfunction med(A, B) {\r\n return [(A[0] + B[0]) / 2, (A[1] + B[1]) / 2];\r\n}\r\n// Trim SVG path data so number are each two decimal points. This\r\n// improves SVG exports, and prevents rendering errors on points\r\n// with long decimals.\r\nconst TO_FIXED_PRECISION = /(\\s?[A-Z]?,?-?[0-9]*\\.[0-9]{0,2})(([0-9]|e|-)*)/g;\r\nfunction getSvgPathFromStroke(points) {\r\n if (!points.length) {\r\n return \"\";\r\n }\r\n const max = points.length - 1;\r\n return points\r\n .reduce((acc, point, i, arr) => {\r\n if (i === max) {\r\n acc.push(point, med(point, arr[0]), \"L\", arr[0], \"Z\");\r\n }\r\n else {\r\n acc.push(point, med(point, arr[i + 1]));\r\n }\r\n return acc;\r\n }, [\"M\", points[0], \"Q\"])\r\n .join(\" \")\r\n .replace(TO_FIXED_PRECISION, \"$1\");\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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a0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3JlbmRlcmVyL3JlbmRlckVsZW1lbnQudHM/YTZkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd0xpbmVhckVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdUZXh0RWxlbWVudCxcbiAgQXJyb3doZWFkLFxuICBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdGcmVlRHJhd0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdJbWFnZUVsZW1lbnQsXG59IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQge1xuICBpc1RleHRFbGVtZW50LFxuICBpc0xpbmVhckVsZW1lbnQsXG4gIGlzRnJlZURyYXdFbGVtZW50LFxuICBpc0luaXRpYWxpemVkSW1hZ2VFbGVtZW50LFxufSBmcm9tIFwiLi4vZWxlbWVudC90eXBlQ2hlY2tzXCI7XG5pbXBvcnQge1xuICBnZXREaWFtb25kUG9pbnRzLFxuICBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMsXG4gIGdldEFycm93aGVhZFBvaW50cyxcbn0gZnJvbSBcIi4uL2VsZW1lbnQvYm91bmRzXCI7XG5pbXBvcnQgeyBSb3VnaENhbnZhcyB9IGZyb20gXCJyb3VnaGpzL2Jpbi9jYW52YXNcIjtcbmltcG9ydCB7IERyYXdhYmxlLCBPcHRpb25zIH0gZnJvbSBcInJvdWdoanMvYmluL2NvcmVcIjtcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSBcInJvdWdoanMvYmluL3N2Z1wiO1xuaW1wb3J0IHsgUm91Z2hHZW5lcmF0b3IgfSBmcm9tIFwicm91Z2hqcy9iaW4vZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBSZW5kZXJDb25maWcgfSBmcm9tIFwiLi4vc2NlbmUvdHlwZXNcIjtcbmltcG9ydCB7IGRpc3RhbmNlLCBnZXRGb250U3RyaW5nLCBnZXRGb250RmFtaWx5U3RyaW5nLCBpc1JUTCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgaXNQYXRoQUxvb3AgfSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHJvdWdoIGZyb20gXCJyb3VnaGpzL2Jpbi9yb3VnaFwiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzLCBab29tIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IE1BWF9ERUNJTUFMU19GT1JfU1ZHX0VYUE9SVCwgTUlNRV9UWVBFUywgU1ZHX05TIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlLCBTdHJva2VPcHRpb25zIH0gZnJvbSBcInBlcmZlY3QtZnJlZWhhbmRcIjtcblxuLy8gdXNpbmcgYSBzdHJvbmdlciBpbnZlcnQgKDEwMCUgdnMgb3VyIHJlZ3VsYXIgOTMlKSBhbmQgc2F0dXJhdGVcbi8vIGFzIGEgdGVtcCBoYWNrIHRvIG1ha2UgaW1hZ2VzIGluIGRhcmsgdGhlbWUgbG9vayBjbG9zZXIgdG8gb3JpZ2luYWxcbi8vIGNvbG9yIHNjaGVtZSAoaXQncyBzdGlsbCBub3QgcXVpdGUgdGhlcmUgYW5kIHRoZSBjb2xvcnMgbG9vayBzbGlnaHRseVxuLy8gZGVzYXR1cmVkLCBhbGFzLi4uKVxuY29uc3QgSU1BR0VfSU5WRVJUX0ZJTFRFUiA9IFwiaW52ZXJ0KDEwMCUpIGh1ZS1yb3RhdGUoMTgwZGVnKSBzYXR1cmF0ZSgxLjI1KVwiO1xuXG5jb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcblxuY29uc3QgaXNQZW5kaW5nSW1hZ2VFbGVtZW50ID0gKFxuICBlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCxcbiAgcmVuZGVyQ29uZmlnOiBSZW5kZXJDb25maWcsXG4pID0+XG4gIGlzSW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiZcbiAgIXJlbmRlckNvbmZpZy5pbWFnZUNhY2hlLmhhcyhlbGVtZW50LmZpbGVJZCk7XG5cbmNvbnN0IHNob3VsZFJlc2V0SW1hZ2VGaWx0ZXIgPSAoXG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50LFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbikgPT4ge1xuICByZXR1cm4gKFxuICAgIHJlbmRlckNvbmZpZy50aGVtZSA9PT0gXCJkYXJrXCIgJiZcbiAgICBpc0luaXRpYWxpemVkSW1hZ2VFbGVtZW50KGVsZW1lbnQpICYmXG4gICAgIWlzUGVuZGluZ0ltYWdlRWxlbWVudChlbGVtZW50LCByZW5kZXJDb25maWcpICYmXG4gICAgcmVuZGVyQ29uZmlnLmltYWdlQ2FjaGUuZ2V0KGVsZW1lbnQuZmlsZUlkKT8ubWltZVR5cGUgIT09IE1JTUVfVFlQRVMuc3ZnXG4gICk7XG59O1xuXG5jb25zdCBnZXREYXNoQXJyYXlEYXNoZWQgPSAoc3Ryb2tlV2lkdGg6IG51bWJlcikgPT4gWzgsIDggKyBzdHJva2VXaWR0aF07XG5cbmNvbnN0IGdldERhc2hBcnJheURvdHRlZCA9IChzdHJva2VXaWR0aDogbnVtYmVyKSA9PiBbMS41LCA2ICsgc3Ryb2tlV2lkdGhdO1xuXG5jb25zdCBnZXRDYW52YXNQYWRkaW5nID0gKGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50KSA9PlxuICBlbGVtZW50LnR5cGUgPT09IFwiZnJlZWRyYXdcIiA/IGVsZW1lbnQuc3Ryb2tlV2lkdGggKiAxMiA6IDIwO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2FsaWRyYXdFbGVtZW50V2l0aENhbnZhcyB7XG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50IHwgRXhjYWxpZHJhd1RleHRFbGVtZW50O1xuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICB0aGVtZTogUmVuZGVyQ29uZmlnW1widGhlbWVcIl07XG4gIGNhbnZhc1pvb206IFpvb21bXCJ2YWx1ZVwiXTtcbiAgY2FudmFzT2Zmc2V0WDogbnVtYmVyO1xuICBjYW52YXNPZmZzZXRZOiBudW1iZXI7XG59XG5cbmNvbnN0IGdlbmVyYXRlRWxlbWVudENhbnZhcyA9IChcbiAgZWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICB6b29tOiBab29tLFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbik6IEV4Y2FsaWRyYXdFbGVtZW50V2l0aENhbnZhcyA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpITtcbiAgY29uc3QgcGFkZGluZyA9IGdldENhbnZhc1BhZGRpbmcoZWxlbWVudCk7XG5cbiAgbGV0IGNhbnZhc09mZnNldFggPSAwO1xuICBsZXQgY2FudmFzT2Zmc2V0WSA9IDA7XG5cbiAgaWYgKGlzTGluZWFyRWxlbWVudChlbGVtZW50KSB8fCBpc0ZyZWVEcmF3RWxlbWVudChlbGVtZW50KSkge1xuICAgIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZWxlbWVudCk7XG5cbiAgICBjYW52YXMud2lkdGggPVxuICAgICAgZGlzdGFuY2UoeDEsIHgyKSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICogem9vbS52YWx1ZSArXG4gICAgICBwYWRkaW5nICogem9vbS52YWx1ZSAqIDI7XG4gICAgY2FudmFzLmhlaWdodCA9XG4gICAgICBkaXN0YW5jZSh5MSwgeTIpICogd2luZG93LmRldmljZVBpeGVsUmF0aW8gKiB6b29tLnZhbHVlICtcbiAgICAgIHBhZGRpbmcgKiB6b29tLnZhbHVlICogMjtcblxuICAgIGNhbnZhc09mZnNldFggPVxuICAgICAgZWxlbWVudC54ID4geDFcbiAgICAgICAgPyBkaXN0YW5jZShlbGVtZW50LngsIHgxKSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICogem9vbS52YWx1ZVxuICAgICAgICA6IDA7XG5cbiAgICBjYW52YXNPZmZzZXRZID1cbiAgICAgIGVsZW1lbnQueSA+IHkxXG4gICAgICAgID8gZGlzdGFuY2UoZWxlbWVudC55LCB5MSkgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyAqIHpvb20udmFsdWVcbiAgICAgICAgOiAwO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUoY2FudmFzT2Zmc2V0WCwgY2FudmFzT2Zmc2V0WSk7XG4gIH0gZWxzZSB7XG4gICAgY2FudmFzLndpZHRoID1cbiAgICAgIGVsZW1lbnQud2lkdGggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyAqIHpvb20udmFsdWUgK1xuICAgICAgcGFkZGluZyAqIHpvb20udmFsdWUgKiAyO1xuICAgIGNhbnZhcy5oZWlnaHQgPVxuICAgICAgZWxlbWVudC5oZWlnaHQgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyAqIHpvb20udmFsdWUgK1xuICAgICAgcGFkZGluZyAqIHpvb20udmFsdWUgKiAyO1xuICB9XG5cbiAgY29udGV4dC5zYXZlKCk7XG4gIGNvbnRleHQudHJhbnNsYXRlKHBhZGRpbmcgKiB6b29tLnZhbHVlLCBwYWRkaW5nICogem9vbS52YWx1ZSk7XG4gIGNvbnRleHQuc2NhbGUoXG4gICAgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKiB6b29tLnZhbHVlLFxuICAgIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICogem9vbS52YWx1ZSxcbiAgKTtcblxuICBjb25zdCByYyA9IHJvdWdoLmNhbnZhcyhjYW52YXMpO1xuXG4gIC8vIGluIGRhcmsgdGhlbWUsIHJldmVydCB0aGUgaW1hZ2UgY29sb3IgZmlsdGVyXG4gIGlmIChzaG91bGRSZXNldEltYWdlRmlsdGVyKGVsZW1lbnQsIHJlbmRlckNvbmZpZykpIHtcbiAgICBjb250ZXh0LmZpbHRlciA9IElNQUdFX0lOVkVSVF9GSUxURVI7XG4gIH1cblxuICBkcmF3RWxlbWVudE9uQ2FudmFzKGVsZW1lbnQsIHJjLCBjb250ZXh0LCByZW5kZXJDb25maWcpO1xuICBjb250ZXh0LnJlc3RvcmUoKTtcblxuICByZXR1cm4ge1xuICAgIGVsZW1lbnQsXG4gICAgY2FudmFzLFxuICAgIHRoZW1lOiByZW5kZXJDb25maWcudGhlbWUsXG4gICAgY2FudmFzWm9vbTogem9vbS52YWx1ZSxcbiAgICBjYW52YXNPZmZzZXRYLFxuICAgIGNhbnZhc09mZnNldFksXG4gIH07XG59O1xuXG5jb25zdCBJTUFHRV9QTEFDRUhPTERFUl9JTUcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuSU1BR0VfUExBQ0VIT0xERVJfSU1HLnNyYyA9IGBkYXRhOiR7TUlNRV9UWVBFUy5zdmd9LCR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICBgPHN2ZyBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiIGRhdGEtcHJlZml4PVwiZmFzXCIgZGF0YS1pY29uPVwiaW1hZ2VcIiBjbGFzcz1cInN2Zy1pbmxpbmUtLWZhIGZhLWltYWdlIGZhLXctMTZcIiByb2xlPVwiaW1nXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiPjxwYXRoIGZpbGw9XCIjODg4XCIgZD1cIk00NjQgNDQ4SDQ4Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjExMmMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDQxNmMyNi41MSAwIDQ4IDIxLjQ5IDQ4IDQ4djI4OGMwIDI2LjUxLTIxLjQ5IDQ4LTQ4IDQ4ek0xMTIgMTIwYy0zMC45MjggMC01NiAyNS4wNzItNTYgNTZzMjUuMDcyIDU2IDU2IDU2IDU2LTI1LjA3MiA1Ni01Ni0yNS4wNzItNTYtNTYtNTZ6TTY0IDM4NGgzODRWMjcybC04Ny41MTUtODcuNTE1Yy00LjY4Ni00LjY4Ni0xMi4yODQtNC42ODYtMTYuOTcxIDBMMjA4IDMyMGwtNTUuNTE1LTU1LjUxNWMtNC42ODYtNC42ODYtMTIuMjg0LTQuNjg2LTE2Ljk3MSAwTDY0IDMzNnY0OHpcIj48L3BhdGg+PC9zdmc+YCxcbil9YDtcblxuY29uc3QgSU1BR0VfRVJST1JfUExBQ0VIT0xERVJfSU1HID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbklNQUdFX0VSUk9SX1BMQUNFSE9MREVSX0lNRy5zcmMgPSBgZGF0YToke01JTUVfVFlQRVMuc3ZnfSwke2VuY29kZVVSSUNvbXBvbmVudChcbiAgYDxzdmcgdmlld0JveD1cIjAgMCA2NjggNjY4XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbDpzcGFjZT1cInByZXNlcnZlXCIgc3R5bGU9XCJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MlwiPjxwYXRoIGQ9XCJNNDY0IDQ0OEg0OGMtMjYuNTEgMC00OC0yMS40OS00OC00OFYxMTJjMC0yNi41MSAyMS40OS00OCA0OC00OGg0MTZjMjYuNTEgMCA0OCAyMS40OSA0OCA0OHYyODhjMCAyNi41MS0yMS40OSA0OC00OCA0OFpNMTEyIDEyMGMtMzAuOTI4IDAtNTYgMjUuMDcyLTU2IDU2czI1LjA3MiA1NiA1NiA1NiA1Ni0yNS4wNzIgNTYtNTYtMjUuMDcyLTU2LTU2LTU2Wk02NCAzODRoMzg0VjI3MmwtODcuNTE1LTg3LjUxNWMtNC42ODYtNC42ODYtMTIuMjg0LTQuNjg2LTE2Ljk3MSAwTDIwOCAzMjBsLTU1LjUxNS01NS41MTVjLTQuNjg2LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NzEgMEw2NCAzMzZ2NDhaXCIgc3R5bGU9XCJmaWxsOiM4ODg7ZmlsbC1ydWxlOm5vbnplcm9cIiB0cmFuc2Zvcm09XCJtYXRyaXgoLjgxNzA5IDAgMCAuODE3MDkgMTI0LjgyNSAxNDUuODI1KVwiLz48cGF0aCBkPVwiTTI1NiA4QzExOS4wMzQgOCA4IDExOS4wMzMgOCAyNTZjMCAxMzYuOTY3IDExMS4wMzQgMjQ4IDI0OCAyNDhzMjQ4LTExMS4wMzQgMjQ4LTI0OFMzOTIuOTY3IDggMjU2IDhabTEzMC4xMDggMTE3Ljg5MmM2NS40NDggNjUuNDQ4IDcwIDE2NS40ODEgMjAuNjc3IDIzNS42MzdMMTUwLjQ3IDEwNS4yMTZjNzAuMjA0LTQ5LjM1NiAxNzAuMjI2LTQ0LjczNSAyMzUuNjM4IDIwLjY3NlpNMTI1Ljg5MiAzODYuMTA4Yy02NS40NDgtNjUuNDQ4LTcwLTE2NS40ODEtMjAuNjc3LTIzNS42MzdMMzYxLjUzIDQwNi43ODRjLTcwLjIwMyA0OS4zNTYtMTcwLjIyNiA0NC43MzYtMjM1LjYzOC0yMC42NzZaXCIgc3R5bGU9XCJmaWxsOiM4ODg7ZmlsbC1ydWxlOm5vbnplcm9cIiB0cmFuc2Zvcm09XCJtYXRyaXgoLjMwMzY2IDAgMCAuMzAzNjYgNTA2LjgyMiA2MC4wNjUpXCIvPjwvc3ZnPmAsXG4pfWA7XG5cbmNvbnN0IGRyYXdJbWFnZVBsYWNlaG9sZGVyID0gKFxuICBlbGVtZW50OiBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50LFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHpvb21WYWx1ZTogQXBwU3RhdGVbXCJ6b29tXCJdW1widmFsdWVcIl0sXG4pID0+IHtcbiAgY29udGV4dC5maWxsU3R5bGUgPSBcIiNFN0U3RTdcIjtcbiAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCk7XG5cbiAgY29uc3QgaW1hZ2VNaW5XaWR0aE9ySGVpZ2h0ID0gTWF0aC5taW4oZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQpO1xuXG4gIGNvbnN0IHNpemUgPSBNYXRoLm1pbihcbiAgICBpbWFnZU1pbldpZHRoT3JIZWlnaHQsXG4gICAgTWF0aC5taW4oaW1hZ2VNaW5XaWR0aE9ySGVpZ2h0ICogMC40LCAxMDApLFxuICApO1xuXG4gIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgIGVsZW1lbnQuc3RhdHVzID09PSBcImVycm9yXCJcbiAgICAgID8gSU1BR0VfRVJST1JfUExBQ0VIT0xERVJfSU1HXG4gICAgICA6IElNQUdFX1BMQUNFSE9MREVSX0lNRyxcbiAgICBlbGVtZW50LndpZHRoIC8gMiAtIHNpemUgLyAyLFxuICAgIGVsZW1lbnQuaGVpZ2h0IC8gMiAtIHNpemUgLyAyLFxuICAgIHNpemUsXG4gICAgc2l6ZSxcbiAgKTtcbn07XG5cbmNvbnN0IGRyYXdFbGVtZW50T25DYW52YXMgPSAoXG4gIGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgcmM6IFJvdWdoQ2FudmFzLFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHJlbmRlckNvbmZpZzogUmVuZGVyQ29uZmlnLFxuKSA9PiB7XG4gIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBlbGVtZW50Lm9wYWNpdHkgLyAxMDA7XG4gIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBcInJlY3RhbmdsZVwiOlxuICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgY2FzZSBcImVsbGlwc2VcIjoge1xuICAgICAgY29udGV4dC5saW5lSm9pbiA9IFwicm91bmRcIjtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9IFwicm91bmRcIjtcbiAgICAgIHJjLmRyYXcoZ2V0U2hhcGVGb3JFbGVtZW50KGVsZW1lbnQpIGFzIERyYXdhYmxlKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiYXJyb3dcIjpcbiAgICBjYXNlIFwibGluZVwiOiB7XG4gICAgICBjb250ZXh0LmxpbmVKb2luID0gXCJyb3VuZFwiO1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gXCJyb3VuZFwiO1xuXG4gICAgICAoZ2V0U2hhcGVGb3JFbGVtZW50KGVsZW1lbnQpIGFzIERyYXdhYmxlW10pLmZvckVhY2goKHNoYXBlKSA9PiB7XG4gICAgICAgIHJjLmRyYXcoc2hhcGUpO1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImZyZWVkcmF3XCI6IHtcbiAgICAgIC8vIERyYXcgZGlyZWN0bHkgdG8gY2FudmFzXG4gICAgICBjb250ZXh0LnNhdmUoKTtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZWxlbWVudC5zdHJva2VDb2xvcjtcblxuICAgICAgY29uc3QgcGF0aCA9IGdldEZyZWVEcmF3UGF0aDJEKGVsZW1lbnQpIGFzIFBhdGgyRDtcblxuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBlbGVtZW50LnN0cm9rZUNvbG9yO1xuICAgICAgY29udGV4dC5maWxsKHBhdGgpO1xuXG4gICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiaW1hZ2VcIjoge1xuICAgICAgY29uc3QgaW1nID0gaXNJbml0aWFsaXplZEltYWdlRWxlbWVudChlbGVtZW50KVxuICAgICAgICA/IHJlbmRlckNvbmZpZy5pbWFnZUNhY2hlLmdldChlbGVtZW50LmZpbGVJZCk/LmltYWdlXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGltZyAhPSBudWxsICYmICEoaW1nIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgaW1nLFxuICAgICAgICAgIDAgLyogaGFyZGNvZGVkIGZvciB0aGUgc2VsZWN0aW9uIGJveCovLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgZWxlbWVudC53aWR0aCxcbiAgICAgICAgICBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYXdJbWFnZVBsYWNlaG9sZGVyKGVsZW1lbnQsIGNvbnRleHQsIHJlbmRlckNvbmZpZy56b29tLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBpZiAoaXNUZXh0RWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBydGwgPSBpc1JUTChlbGVtZW50LnRleHQpO1xuICAgICAgICBjb25zdCBzaG91bGRUZW1wb3JhcmlseUF0dGFjaCA9IHJ0bCAmJiAhY29udGV4dC5jYW52YXMuaXNDb25uZWN0ZWQ7XG4gICAgICAgIGlmIChzaG91bGRUZW1wb3JhcmlseUF0dGFjaCkge1xuICAgICAgICAgIC8vIHRvIGNvcnJlY3RseSByZW5kZXIgUlRMIHRleHQgbWl4ZWQgd2l0aCBMVFIsIHdlIGhhdmUgdG8gYXBwZW5kIGl0XG4gICAgICAgICAgLy8gdG8gdGhlIERPTVxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGV4dC5jYW52YXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuY2FudmFzLnNldEF0dHJpYnV0ZShcImRpclwiLCBydGwgPyBcInJ0bFwiIDogXCJsdHJcIik7XG4gICAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgICBjb250ZXh0LmZvbnQgPSBnZXRGb250U3RyaW5nKGVsZW1lbnQpO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGVsZW1lbnQuc3Ryb2tlQ29sb3I7XG4gICAgICAgIGNvbnRleHQudGV4dEFsaWduID0gZWxlbWVudC50ZXh0QWxpZ24gYXMgQ2FudmFzVGV4dEFsaWduO1xuXG4gICAgICAgIC8vIENhbnZhcyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpbGluZSB0ZXh0IGJ5IGRlZmF1bHRcbiAgICAgICAgY29uc3QgbGluZXMgPSBlbGVtZW50LnRleHQucmVwbGFjZSgvXFxyXFxuPy9nLCBcIlxcblwiKS5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0IC8gbGluZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbE9mZnNldCA9IGVsZW1lbnQuaGVpZ2h0IC0gZWxlbWVudC5iYXNlbGluZTtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldCA9XG4gICAgICAgICAgZWxlbWVudC50ZXh0QWxpZ24gPT09IFwiY2VudGVyXCJcbiAgICAgICAgICAgID8gZWxlbWVudC53aWR0aCAvIDJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0QWxpZ24gPT09IFwicmlnaHRcIlxuICAgICAgICAgICAgPyBlbGVtZW50LndpZHRoXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb250ZXh0LmZpbGxUZXh0KFxuICAgICAgICAgICAgbGluZXNbaW5kZXhdLFxuICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCxcbiAgICAgICAgICAgIChpbmRleCArIDEpICogbGluZUhlaWdodCAtIHZlcnRpY2FsT2Zmc2V0LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgIGlmIChzaG91bGRUZW1wb3JhcmlseUF0dGFjaCkge1xuICAgICAgICAgIGNvbnRleHQuY2FudmFzLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQgdHlwZSAke2VsZW1lbnQudHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG59O1xuXG5sZXQgZWxlbWVudFdpdGhDYW52YXNDYWNoZSA9IG5ldyBXZWFrTWFwPFxuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd0VsZW1lbnRXaXRoQ2FudmFzXG4+KCk7XG5cbmxldCBzaGFwZUNhY2hlID0gbmV3IFdlYWtNYXA8RXhjYWxpZHJhd0VsZW1lbnQsIERyYXdhYmxlIHwgRHJhd2FibGVbXSB8IG51bGw+KCk7XG5cbmV4cG9ydCBjb25zdCBnZXRTaGFwZUZvckVsZW1lbnQgPSAoZWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQpID0+XG4gIHNoYXBlQ2FjaGUuZ2V0KGVsZW1lbnQpO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZGF0ZVNoYXBlRm9yRWxlbWVudCA9IChlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCkgPT5cbiAgc2hhcGVDYWNoZS5kZWxldGUoZWxlbWVudCk7XG5cbmV4cG9ydCBjb25zdCBjbGVhclJlbmRlckNhY2hlID0gKCkgPT4ge1xuICBlbGVtZW50V2l0aENhbnZhc0NhY2hlID0gbmV3IFdlYWtNYXAoKTtcbiAgc2hhcGVDYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHBhdGhzQ2FjaGUgPSBuZXcgV2Vha01hcCgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUm91Z2hPcHRpb25zID0gKFxuICBlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCxcbiAgY29udGludW91c1BhdGggPSBmYWxzZSxcbik6IE9wdGlvbnMgPT4ge1xuICBjb25zdCBvcHRpb25zOiBPcHRpb25zID0ge1xuICAgIHNlZWQ6IGVsZW1lbnQuc2VlZCxcbiAgICBzdHJva2VMaW5lRGFzaDpcbiAgICAgIGVsZW1lbnQuc3Ryb2tlU3R5bGUgPT09IFwiZGFzaGVkXCJcbiAgICAgICAgPyBnZXREYXNoQXJyYXlEYXNoZWQoZWxlbWVudC5zdHJva2VXaWR0aClcbiAgICAgICAgOiBlbGVtZW50LnN0cm9rZVN0eWxlID09PSBcImRvdHRlZFwiXG4gICAgICAgID8gZ2V0RGFzaEFycmF5RG90dGVkKGVsZW1lbnQuc3Ryb2tlV2lkdGgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIC8vIGZvciBub24tc29saWQgc3Ryb2tlcywgZGlzYWJsZSBtdWx0aVN0cm9rZSBiZWNhdXNlIGl0IHRlbmRzIHRvIG1ha2VcbiAgICAvLyBkYXNoZXMvZG90cyBvdmVybGF5IGVhY2ggb3RoZXJcbiAgICBkaXNhYmxlTXVsdGlTdHJva2U6IGVsZW1lbnQuc3Ryb2tlU3R5bGUgIT09IFwic29saWRcIixcbiAgICAvLyBmb3Igbm9uLXNvbGlkIHN0cm9rZXMsIGluY3JlYXNlIHRoZSB3aWR0aCBhIGJpdCB0byBtYWtlIGl0IHZpc3VhbGx5XG4gICAgLy8gc2ltaWxhciB0byBzb2xpZCBzdHJva2VzLCBiZWNhdXNlIHdlJ3JlIGFsc28gZGlzYWJsaW5nIG11bHRpU3Ryb2tlXG4gICAgc3Ryb2tlV2lkdGg6XG4gICAgICBlbGVtZW50LnN0cm9rZVN0eWxlICE9PSBcInNvbGlkXCJcbiAgICAgICAgPyBlbGVtZW50LnN0cm9rZVdpZHRoICsgMC41XG4gICAgICAgIDogZWxlbWVudC5zdHJva2VXaWR0aCxcbiAgICAvLyB3aGVuIGluY3JlYXNpbmcgc3Ryb2tlV2lkdGgsIHdlIG11c3QgZXhwbGljaXRseSBzZXQgZmlsbFdlaWdodCBhbmRcbiAgICAvLyBoYWNodXJlR2FwIGJlY2F1c2UgaWYgbm90IHNwZWNpZmllZCwgcm91Z2hqcyB1c2VzIHN0cm9rZVdpZHRoIHRvXG4gICAgLy8gY2FsY3VsYXRlIHRoZW0gKGFuZCB3ZSBkb24ndCB3YW50IHRoZSBmaWxscyB0byBiZSBtb2RpZmllZClcbiAgICBmaWxsV2VpZ2h0OiBlbGVtZW50LnN0cm9rZVdpZHRoIC8gMixcbiAgICBoYWNodXJlR2FwOiBlbGVtZW50LnN0cm9rZVdpZHRoICogNCxcbiAgICByb3VnaG5lc3M6IGVsZW1lbnQucm91Z2huZXNzLFxuICAgIHN0cm9rZTogZWxlbWVudC5zdHJva2VDb2xvcixcbiAgICBwcmVzZXJ2ZVZlcnRpY2VzOiBjb250aW51b3VzUGF0aCxcbiAgfTtcblxuICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgXCJyZWN0YW5nbGVcIjpcbiAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgIGNhc2UgXCJlbGxpcHNlXCI6IHtcbiAgICAgIG9wdGlvbnMuZmlsbFN0eWxlID0gZWxlbWVudC5maWxsU3R5bGU7XG4gICAgICBvcHRpb25zLmZpbGwgPVxuICAgICAgICBlbGVtZW50LmJhY2tncm91bmRDb2xvciA9PT0gXCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IGVsZW1lbnQuYmFja2dyb3VuZENvbG9yO1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gXCJlbGxpcHNlXCIpIHtcbiAgICAgICAgb3B0aW9ucy5jdXJ2ZUZpdHRpbmcgPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIGNhc2UgXCJsaW5lXCI6IHtcbiAgICAgIGlmIChpc1BhdGhBTG9vcChlbGVtZW50LnBvaW50cykpIHtcbiAgICAgICAgb3B0aW9ucy5maWxsU3R5bGUgPSBlbGVtZW50LmZpbGxTdHlsZTtcbiAgICAgICAgb3B0aW9ucy5maWxsID1cbiAgICAgICAgICBlbGVtZW50LmJhY2tncm91bmRDb2xvciA9PT0gXCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBlbGVtZW50LmJhY2tncm91bmRDb2xvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICBjYXNlIFwiZnJlZWRyYXdcIjpcbiAgICBjYXNlIFwiYXJyb3dcIjpcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlICR7ZWxlbWVudC50eXBlfWApO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGVsZW1lbnQncyBzaGFwZSBhbmQgcHV0cyBpdCBpbnRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gZ2VuZXJhdG9yXG4gKi9cbmNvbnN0IGdlbmVyYXRlRWxlbWVudFNoYXBlID0gKFxuICBlbGVtZW50OiBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIGdlbmVyYXRvcjogUm91Z2hHZW5lcmF0b3IsXG4pID0+IHtcbiAgbGV0IHNoYXBlID0gc2hhcGVDYWNoZS5nZXQoZWxlbWVudCkgfHwgbnVsbDtcblxuICBpZiAoIXNoYXBlKSB7XG4gICAgZWxlbWVudFdpdGhDYW52YXNDYWNoZS5kZWxldGUoZWxlbWVudCk7XG5cbiAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgICAgY2FzZSBcInJlY3RhbmdsZVwiOlxuICAgICAgICBpZiAoZWxlbWVudC5zdHJva2VTaGFycG5lc3MgPT09IFwicm91bmRcIikge1xuICAgICAgICAgIGNvbnN0IHcgPSBlbGVtZW50LndpZHRoO1xuICAgICAgICAgIGNvbnN0IGggPSBlbGVtZW50LmhlaWdodDtcbiAgICAgICAgICBjb25zdCByID0gTWF0aC5taW4odywgaCkgKiAwLjI1O1xuICAgICAgICAgIHNoYXBlID0gZ2VuZXJhdG9yLnBhdGgoXG4gICAgICAgICAgICBgTSAke3J9IDAgTCAke3cgLSByfSAwIFEgJHt3fSAwLCAke3d9ICR7cn0gTCAke3d9ICR7XG4gICAgICAgICAgICAgIGggLSByXG4gICAgICAgICAgICB9IFEgJHt3fSAke2h9LCAke3cgLSByfSAke2h9IEwgJHtyfSAke2h9IFEgMCAke2h9LCAwICR7XG4gICAgICAgICAgICAgIGggLSByXG4gICAgICAgICAgICB9IEwgMCAke3J9IFEgMCAwLCAke3J9IDBgLFxuICAgICAgICAgICAgZ2VuZXJhdGVSb3VnaE9wdGlvbnMoZWxlbWVudCwgdHJ1ZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaGFwZSA9IGdlbmVyYXRvci5yZWN0YW5nbGUoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgICBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgICAgIGdlbmVyYXRlUm91Z2hPcHRpb25zKGVsZW1lbnQpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGlhbW9uZFwiOiB7XG4gICAgICAgIGNvbnN0IFt0b3BYLCB0b3BZLCByaWdodFgsIHJpZ2h0WSwgYm90dG9tWCwgYm90dG9tWSwgbGVmdFgsIGxlZnRZXSA9XG4gICAgICAgICAgZ2V0RGlhbW9uZFBvaW50cyhlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQuc3Ryb2tlU2hhcnBuZXNzID09PSBcInJvdW5kXCIpIHtcbiAgICAgICAgICBzaGFwZSA9IGdlbmVyYXRvci5wYXRoKFxuICAgICAgICAgICAgYE0gJHt0b3BYICsgKHJpZ2h0WCAtIHRvcFgpICogMC4yNX0gJHtcbiAgICAgICAgICAgICAgdG9wWSArIChyaWdodFkgLSB0b3BZKSAqIDAuMjVcbiAgICAgICAgICAgIH0gTCAke3JpZ2h0WCAtIChyaWdodFggLSB0b3BYKSAqIDAuMjV9ICR7XG4gICAgICAgICAgICAgIHJpZ2h0WSAtIChyaWdodFkgLSB0b3BZKSAqIDAuMjVcbiAgICAgICAgICAgIH0gXG4gICAgICAgICAgICBDICR7cmlnaHRYfSAke3JpZ2h0WX0sICR7cmlnaHRYfSAke3JpZ2h0WX0sICR7XG4gICAgICAgICAgICAgIHJpZ2h0WCAtIChyaWdodFggLSBib3R0b21YKSAqIDAuMjVcbiAgICAgICAgICAgIH0gJHtyaWdodFkgKyAoYm90dG9tWSAtIHJpZ2h0WSkgKiAwLjI1fSBcbiAgICAgICAgICAgIEwgJHtib3R0b21YICsgKHJpZ2h0WCAtIGJvdHRvbVgpICogMC4yNX0gJHtcbiAgICAgICAgICAgICAgYm90dG9tWSAtIChib3R0b21ZIC0gcmlnaHRZKSAqIDAuMjVcbiAgICAgICAgICAgIH0gIFxuICAgICAgICAgICAgQyAke2JvdHRvbVh9ICR7Ym90dG9tWX0sICR7Ym90dG9tWH0gJHtib3R0b21ZfSwgJHtcbiAgICAgICAgICAgICAgYm90dG9tWCAtIChib3R0b21YIC0gbGVmdFgpICogMC4yNVxuICAgICAgICAgICAgfSAke2JvdHRvbVkgLSAoYm90dG9tWSAtIGxlZnRZKSAqIDAuMjV9IFxuICAgICAgICAgICAgTCAke2xlZnRYICsgKGJvdHRvbVggLSBsZWZ0WCkgKiAwLjI1fSAke1xuICAgICAgICAgICAgICBsZWZ0WSArIChib3R0b21ZIC0gbGVmdFkpICogMC4yNVxuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIEMgJHtsZWZ0WH0gJHtsZWZ0WX0sICR7bGVmdFh9ICR7bGVmdFl9LCAke1xuICAgICAgICAgICAgICBsZWZ0WCArICh0b3BYIC0gbGVmdFgpICogMC4yNVxuICAgICAgICAgICAgfSAke2xlZnRZIC0gKGxlZnRZIC0gdG9wWSkgKiAwLjI1fSBcbiAgICAgICAgICAgIEwgJHt0b3BYIC0gKHRvcFggLSBsZWZ0WCkgKiAwLjI1fSAke3RvcFkgKyAobGVmdFkgLSB0b3BZKSAqIDAuMjV9IFxuICAgICAgICAgICAgQyAke3RvcFh9ICR7dG9wWX0sICR7dG9wWH0gJHt0b3BZfSwgJHtcbiAgICAgICAgICAgICAgdG9wWCArIChyaWdodFggLSB0b3BYKSAqIDAuMjVcbiAgICAgICAgICAgIH0gJHt0b3BZICsgKHJpZ2h0WSAtIHRvcFkpICogMC4yNX1gLFxuICAgICAgICAgICAgZ2VuZXJhdGVSb3VnaE9wdGlvbnMoZWxlbWVudCwgdHJ1ZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaGFwZSA9IGdlbmVyYXRvci5wb2x5Z29uKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBbdG9wWCwgdG9wWV0sXG4gICAgICAgICAgICAgIFtyaWdodFgsIHJpZ2h0WV0sXG4gICAgICAgICAgICAgIFtib3R0b21YLCBib3R0b21ZXSxcbiAgICAgICAgICAgICAgW2xlZnRYLCBsZWZ0WV0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZ2VuZXJhdGVSb3VnaE9wdGlvbnMoZWxlbWVudCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJlbGxpcHNlXCI6XG4gICAgICAgIHNoYXBlID0gZ2VuZXJhdG9yLmVsbGlwc2UoXG4gICAgICAgICAgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgICAgICAgZWxlbWVudC5oZWlnaHQgLyAyLFxuICAgICAgICAgIGVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgZWxlbWVudC5oZWlnaHQsXG4gICAgICAgICAgZ2VuZXJhdGVSb3VnaE9wdGlvbnMoZWxlbWVudCksXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxpbmVcIjpcbiAgICAgIGNhc2UgXCJhcnJvd1wiOiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBnZW5lcmF0ZVJvdWdoT3B0aW9ucyhlbGVtZW50KTtcblxuICAgICAgICAvLyBwb2ludHMgYXJyYXkgY2FuIGJlIGVtcHR5IGluIHRoZSBiZWdpbm5pbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0byBhZGRcbiAgICAgICAgLy8gaW5pdGlhbCBwb3NpdGlvbiB0byBpdFxuICAgICAgICBjb25zdCBwb2ludHMgPSBlbGVtZW50LnBvaW50cy5sZW5ndGggPyBlbGVtZW50LnBvaW50cyA6IFtbMCwgMF1dO1xuXG4gICAgICAgIC8vIGN1cnZlIGlzIGFsd2F5cyB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAgICAvLyB0aGlzIHNpbXBsaWZpZXMgZmluZGluZyB0aGUgY3VydmUgZm9yIGFuIGVsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQuc3Ryb2tlU2hhcnBuZXNzID09PSBcInNoYXJwXCIpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5maWxsKSB7XG4gICAgICAgICAgICBzaGFwZSA9IFtnZW5lcmF0b3IucG9seWdvbihwb2ludHMgYXMgW251bWJlciwgbnVtYmVyXVtdLCBvcHRpb25zKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNoYXBlID0gW1xuICAgICAgICAgICAgICBnZW5lcmF0b3IubGluZWFyUGF0aChwb2ludHMgYXMgW251bWJlciwgbnVtYmVyXVtdLCBvcHRpb25zKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNoYXBlID0gW2dlbmVyYXRvci5jdXJ2ZShwb2ludHMgYXMgW251bWJlciwgbnVtYmVyXVtdLCBvcHRpb25zKV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgbGluZXMgb25seSBpbiBhcnJvd1xuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcImFycm93XCIpIHtcbiAgICAgICAgICBjb25zdCB7IHN0YXJ0QXJyb3doZWFkID0gbnVsbCwgZW5kQXJyb3doZWFkID0gXCJhcnJvd1wiIH0gPSBlbGVtZW50O1xuXG4gICAgICAgICAgY29uc3QgZ2V0QXJyb3doZWFkU2hhcGVzID0gKFxuICAgICAgICAgICAgZWxlbWVudDogRXhjYWxpZHJhd0xpbmVhckVsZW1lbnQsXG4gICAgICAgICAgICBzaGFwZTogRHJhd2FibGVbXSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcInN0YXJ0XCIgfCBcImVuZFwiLFxuICAgICAgICAgICAgYXJyb3doZWFkOiBBcnJvd2hlYWQsXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcnJvd2hlYWRQb2ludHMgPSBnZXRBcnJvd2hlYWRQb2ludHMoXG4gICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgIHNoYXBlLFxuICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgYXJyb3doZWFkLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGFycm93aGVhZFBvaW50cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE90aGVyIGFycm93aGVhZHMgaGVyZS4uLlxuICAgICAgICAgICAgaWYgKGFycm93aGVhZCA9PT0gXCJkb3RcIikge1xuICAgICAgICAgICAgICBjb25zdCBbeCwgeSwgcl0gPSBhcnJvd2hlYWRQb2ludHM7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3IuY2lyY2xlKHgsIHksIHIsIHtcbiAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICBmaWxsOiBlbGVtZW50LnN0cm9rZUNvbG9yLFxuICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBcInNvbGlkXCIsXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXJyb3doZWFkID09PSBcInRyaWFuZ2xlXCIpIHtcbiAgICAgICAgICAgICAgY29uc3QgW3gsIHksIHgyLCB5MiwgeDMsIHkzXSA9IGFycm93aGVhZFBvaW50cztcblxuICAgICAgICAgICAgICAvLyBhbHdheXMgdXNlIHNvbGlkIHN0cm9rZSBmb3IgdHJpYW5nbGUgYXJyb3doZWFkXG4gICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLnN0cm9rZUxpbmVEYXNoO1xuXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLnBvbHlnb24oXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFt4LCB5XSxcbiAgICAgICAgICAgICAgICAgICAgW3gyLCB5Ml0sXG4gICAgICAgICAgICAgICAgICAgIFt4MywgeTNdLFxuICAgICAgICAgICAgICAgICAgICBbeCwgeV0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBlbGVtZW50LnN0cm9rZUNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IFwic29saWRcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQXJyb3cgYXJyb3doZWFkc1xuICAgICAgICAgICAgY29uc3QgW3gyLCB5MiwgeDMsIHkzLCB4NCwgeTRdID0gYXJyb3doZWFkUG9pbnRzO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zdHJva2VTdHlsZSA9PT0gXCJkb3R0ZWRcIikge1xuICAgICAgICAgICAgICAvLyBmb3IgZG90dGVkIGFycm93cyBjYXBzLCByZWR1Y2UgZ2FwIHRvIG1ha2UgaXQgbW9yZSBsZWdpYmxlXG4gICAgICAgICAgICAgIGNvbnN0IGRhc2ggPSBnZXREYXNoQXJyYXlEb3R0ZWQoZWxlbWVudC5zdHJva2VXaWR0aCAtIDEpO1xuICAgICAgICAgICAgICBvcHRpb25zLnN0cm9rZUxpbmVEYXNoID0gW2Rhc2hbMF0sIGRhc2hbMV0gLSAxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGZvciBzb2xpZC9kYXNoZWQsIGtlZXAgc29saWQgYXJyb3cgY2FwXG4gICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLnN0cm9rZUxpbmVEYXNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgZ2VuZXJhdG9yLmxpbmUoeDMsIHkzLCB4MiwgeTIsIG9wdGlvbnMpLFxuICAgICAgICAgICAgICBnZW5lcmF0b3IubGluZSh4NCwgeTQsIHgyLCB5Miwgb3B0aW9ucyksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoc3RhcnRBcnJvd2hlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlcyA9IGdldEFycm93aGVhZFNoYXBlcyhcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgc2hhcGUsXG4gICAgICAgICAgICAgIFwic3RhcnRcIixcbiAgICAgICAgICAgICAgc3RhcnRBcnJvd2hlYWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc2hhcGUucHVzaCguLi5zaGFwZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbmRBcnJvd2hlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChlbmRBcnJvd2hlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBIZXksIHdlIGhhdmUgYW4gb2xkIGFycm93IGhlcmUhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNoYXBlcyA9IGdldEFycm93aGVhZFNoYXBlcyhcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgc2hhcGUsXG4gICAgICAgICAgICAgIFwiZW5kXCIsXG4gICAgICAgICAgICAgIGVuZEFycm93aGVhZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzaGFwZS5wdXNoKC4uLnNoYXBlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFwiZnJlZWRyYXdcIjoge1xuICAgICAgICBnZW5lcmF0ZUZyZWVEcmF3U2hhcGUoZWxlbWVudCk7XG4gICAgICAgIHNoYXBlID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgIGNhc2UgXCJpbWFnZVwiOiB7XG4gICAgICAgIC8vIGp1c3QgdG8gZW5zdXJlIHdlIGRvbid0IHJlZ2VuZXJhdGUgZWxlbWVudC5jYW52YXMgb24gcmVyZW5kZXJzXG4gICAgICAgIHNoYXBlID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBzaGFwZUNhY2hlLnNldChlbGVtZW50LCBzaGFwZSk7XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlRWxlbWVudFdpdGhDYW52YXMgPSAoXG4gIGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgcmVuZGVyQ29uZmlnOiBSZW5kZXJDb25maWcsXG4pID0+IHtcbiAgY29uc3Qgem9vbTogWm9vbSA9IHJlbmRlckNvbmZpZyA/IHJlbmRlckNvbmZpZy56b29tIDogZGVmYXVsdEFwcFN0YXRlLnpvb207XG4gIGNvbnN0IHByZXZFbGVtZW50V2l0aENhbnZhcyA9IGVsZW1lbnRXaXRoQ2FudmFzQ2FjaGUuZ2V0KGVsZW1lbnQpO1xuICBjb25zdCBzaG91bGRSZWdlbmVyYXRlQmVjYXVzZVpvb20gPVxuICAgIHByZXZFbGVtZW50V2l0aENhbnZhcyAmJlxuICAgIHByZXZFbGVtZW50V2l0aENhbnZhcy5jYW52YXNab29tICE9PSB6b29tLnZhbHVlICYmXG4gICAgIXJlbmRlckNvbmZpZz8uc2hvdWxkQ2FjaGVJZ25vcmVab29tO1xuXG4gIGlmIChcbiAgICAhcHJldkVsZW1lbnRXaXRoQ2FudmFzIHx8XG4gICAgc2hvdWxkUmVnZW5lcmF0ZUJlY2F1c2Vab29tIHx8XG4gICAgcHJldkVsZW1lbnRXaXRoQ2FudmFzLnRoZW1lICE9PSByZW5kZXJDb25maWcudGhlbWVcbiAgKSB7XG4gICAgY29uc3QgZWxlbWVudFdpdGhDYW52YXMgPSBnZW5lcmF0ZUVsZW1lbnRDYW52YXMoXG4gICAgICBlbGVtZW50LFxuICAgICAgem9vbSxcbiAgICAgIHJlbmRlckNvbmZpZyxcbiAgICApO1xuXG4gICAgZWxlbWVudFdpdGhDYW52YXNDYWNoZS5zZXQoZWxlbWVudCwgZWxlbWVudFdpdGhDYW52YXMpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnRXaXRoQ2FudmFzO1xuICB9XG4gIHJldHVybiBwcmV2RWxlbWVudFdpdGhDYW52YXM7XG59O1xuXG5jb25zdCBkcmF3RWxlbWVudEZyb21DYW52YXMgPSAoXG4gIGVsZW1lbnRXaXRoQ2FudmFzOiBFeGNhbGlkcmF3RWxlbWVudFdpdGhDYW52YXMsXG4gIHJjOiBSb3VnaENhbnZhcyxcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbikgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudFdpdGhDYW52YXMuZWxlbWVudDtcbiAgY29uc3QgcGFkZGluZyA9IGdldENhbnZhc1BhZGRpbmcoZWxlbWVudCk7XG4gIGxldCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnQpO1xuXG4gIC8vIEZyZWUgZHJhdyBlbGVtZW50cyB3aWxsIG90aGVyd2lzZSBcInNodWZmbGVcIiBhcyB0aGUgbWluIHggYW5kIHkgY2hhbmdlXG4gIGlmIChpc0ZyZWVEcmF3RWxlbWVudChlbGVtZW50KSkge1xuICAgIHgxID0gTWF0aC5mbG9vcih4MSk7XG4gICAgeDIgPSBNYXRoLmNlaWwoeDIpO1xuICAgIHkxID0gTWF0aC5mbG9vcih5MSk7XG4gICAgeTIgPSBNYXRoLmNlaWwoeTIpO1xuICB9XG5cbiAgY29uc3QgY3ggPSAoKHgxICsgeDIpIC8gMiArIHJlbmRlckNvbmZpZy5zY3JvbGxYKSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBjb25zdCBjeSA9ICgoeTEgKyB5MikgLyAyICsgcmVuZGVyQ29uZmlnLnNjcm9sbFkpICogd2luZG93LmRldmljZVBpeGVsUmF0aW87XG5cbiAgY29uc3QgX2lzUGVuZGluZ0ltYWdlRWxlbWVudCA9IGlzUGVuZGluZ0ltYWdlRWxlbWVudChlbGVtZW50LCByZW5kZXJDb25maWcpO1xuXG4gIGNvbnN0IHNjYWxlWEZhY3RvciA9XG4gICAgXCJzY2FsZVwiIGluIGVsZW1lbnRXaXRoQ2FudmFzLmVsZW1lbnQgJiYgIV9pc1BlbmRpbmdJbWFnZUVsZW1lbnRcbiAgICAgID8gZWxlbWVudFdpdGhDYW52YXMuZWxlbWVudC5zY2FsZVswXVxuICAgICAgOiAxO1xuICBjb25zdCBzY2FsZVlGYWN0b3IgPVxuICAgIFwic2NhbGVcIiBpbiBlbGVtZW50V2l0aENhbnZhcy5lbGVtZW50ICYmICFfaXNQZW5kaW5nSW1hZ2VFbGVtZW50XG4gICAgICA/IGVsZW1lbnRXaXRoQ2FudmFzLmVsZW1lbnQuc2NhbGVbMV1cbiAgICAgIDogMTtcblxuICBjb250ZXh0LnNhdmUoKTtcbiAgY29udGV4dC5zY2FsZShcbiAgICAoMSAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSAqIHNjYWxlWEZhY3RvcixcbiAgICAoMSAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSAqIHNjYWxlWUZhY3RvcixcbiAgKTtcbiAgY29udGV4dC50cmFuc2xhdGUoY3ggKiBzY2FsZVhGYWN0b3IsIGN5ICogc2NhbGVZRmFjdG9yKTtcbiAgY29udGV4dC5yb3RhdGUoZWxlbWVudC5hbmdsZSAqIHNjYWxlWEZhY3RvciAqIHNjYWxlWUZhY3Rvcik7XG5cbiAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgZWxlbWVudFdpdGhDYW52YXMuY2FudmFzISxcbiAgICAoLSh4MiAtIHgxKSAvIDIpICogd2luZG93LmRldmljZVBpeGVsUmF0aW8gLVxuICAgICAgKHBhZGRpbmcgKiBlbGVtZW50V2l0aENhbnZhcy5jYW52YXNab29tKSAvIGVsZW1lbnRXaXRoQ2FudmFzLmNhbnZhc1pvb20sXG4gICAgKC0oeTIgLSB5MSkgLyAyKSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIC1cbiAgICAgIChwYWRkaW5nICogZWxlbWVudFdpdGhDYW52YXMuY2FudmFzWm9vbSkgLyBlbGVtZW50V2l0aENhbnZhcy5jYW52YXNab29tLFxuICAgIGVsZW1lbnRXaXRoQ2FudmFzLmNhbnZhcyEud2lkdGggLyBlbGVtZW50V2l0aENhbnZhcy5jYW52YXNab29tLFxuICAgIGVsZW1lbnRXaXRoQ2FudmFzLmNhbnZhcyEuaGVpZ2h0IC8gZWxlbWVudFdpdGhDYW52YXMuY2FudmFzWm9vbSxcbiAgKTtcbiAgY29udGV4dC5yZXN0b3JlKCk7XG5cbiAgLy8gQ2xlYXIgdGhlIG5lc3RlZCBlbGVtZW50IHdlIGFwcGVuZGVkIHRvIHRoZSBET01cbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJFbGVtZW50ID0gKFxuICBlbGVtZW50OiBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIHJjOiBSb3VnaENhbnZhcyxcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSByYy5nZW5lcmF0b3I7XG4gIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBcInNlbGVjdGlvblwiOiB7XG4gICAgICBjb250ZXh0LnNhdmUoKTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKFxuICAgICAgICBlbGVtZW50LnggKyByZW5kZXJDb25maWcuc2Nyb2xsWCxcbiAgICAgICAgZWxlbWVudC55ICsgcmVuZGVyQ29uZmlnLnNjcm9sbFksXG4gICAgICApO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBcInJnYmEoMCwgMCwgMjU1LCAwLjEwKVwiO1xuICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCk7XG4gICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZnJlZWRyYXdcIjoge1xuICAgICAgZ2VuZXJhdGVFbGVtZW50U2hhcGUoZWxlbWVudCwgZ2VuZXJhdG9yKTtcblxuICAgICAgaWYgKHJlbmRlckNvbmZpZy5pc0V4cG9ydGluZykge1xuICAgICAgICBjb25zdCBlbGVtZW50V2l0aENhbnZhcyA9IGdlbmVyYXRlRWxlbWVudFdpdGhDYW52YXMoXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICByZW5kZXJDb25maWcsXG4gICAgICAgICk7XG4gICAgICAgIGRyYXdFbGVtZW50RnJvbUNhbnZhcyhlbGVtZW50V2l0aENhbnZhcywgcmMsIGNvbnRleHQsIHJlbmRlckNvbmZpZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjeCA9ICh4MSArIHgyKSAvIDIgKyByZW5kZXJDb25maWcuc2Nyb2xsWDtcbiAgICAgICAgY29uc3QgY3kgPSAoeTEgKyB5MikgLyAyICsgcmVuZGVyQ29uZmlnLnNjcm9sbFk7XG4gICAgICAgIGNvbnN0IHNoaWZ0WCA9ICh4MiAtIHgxKSAvIDIgLSAoZWxlbWVudC54IC0geDEpO1xuICAgICAgICBjb25zdCBzaGlmdFkgPSAoeTIgLSB5MSkgLyAyIC0gKGVsZW1lbnQueSAtIHkxKTtcbiAgICAgICAgY29udGV4dC5zYXZlKCk7XG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGN4LCBjeSk7XG4gICAgICAgIGNvbnRleHQucm90YXRlKGVsZW1lbnQuYW5nbGUpO1xuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc2hpZnRYLCAtc2hpZnRZKTtcbiAgICAgICAgZHJhd0VsZW1lbnRPbkNhbnZhcyhlbGVtZW50LCByYywgY29udGV4dCwgcmVuZGVyQ29uZmlnKTtcbiAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwicmVjdGFuZ2xlXCI6XG4gICAgY2FzZSBcImRpYW1vbmRcIjpcbiAgICBjYXNlIFwiZWxsaXBzZVwiOlxuICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgY2FzZSBcImFycm93XCI6XG4gICAgY2FzZSBcImltYWdlXCI6XG4gICAgY2FzZSBcInRleHRcIjoge1xuICAgICAgZ2VuZXJhdGVFbGVtZW50U2hhcGUoZWxlbWVudCwgZ2VuZXJhdG9yKTtcbiAgICAgIGlmIChyZW5kZXJDb25maWcuaXNFeHBvcnRpbmcpIHtcbiAgICAgICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhlbGVtZW50KTtcbiAgICAgICAgY29uc3QgY3ggPSAoeDEgKyB4MikgLyAyICsgcmVuZGVyQ29uZmlnLnNjcm9sbFg7XG4gICAgICAgIGNvbnN0IGN5ID0gKHkxICsgeTIpIC8gMiArIHJlbmRlckNvbmZpZy5zY3JvbGxZO1xuICAgICAgICBjb25zdCBzaGlmdFggPSAoeDIgLSB4MSkgLyAyIC0gKGVsZW1lbnQueCAtIHgxKTtcbiAgICAgICAgY29uc3Qgc2hpZnRZID0gKHkyIC0geTEpIC8gMiAtIChlbGVtZW50LnkgLSB5MSk7XG4gICAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShjeCwgY3kpO1xuICAgICAgICBjb250ZXh0LnJvdGF0ZShlbGVtZW50LmFuZ2xlKTtcbiAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLXNoaWZ0WCwgLXNoaWZ0WSk7XG5cbiAgICAgICAgaWYgKHNob3VsZFJlc2V0SW1hZ2VGaWx0ZXIoZWxlbWVudCwgcmVuZGVyQ29uZmlnKSkge1xuICAgICAgICAgIGNvbnRleHQuZmlsdGVyID0gXCJub25lXCI7XG4gICAgICAgIH1cblxuICAgICAgICBkcmF3RWxlbWVudE9uQ2FudmFzKGVsZW1lbnQsIHJjLCBjb250ZXh0LCByZW5kZXJDb25maWcpO1xuICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgLy8gbm90IGV4cG9ydGluZyDihpIgb3B0aW1pemVkIHJlbmRlcmluZyAoY2FjaGUgJiByZW5kZXIgZnJvbSBlbGVtZW50XG4gICAgICAgIC8vIGNhbnZhc2VzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFdpdGhDYW52YXMgPSBnZW5lcmF0ZUVsZW1lbnRXaXRoQ2FudmFzKFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgcmVuZGVyQ29uZmlnLFxuICAgICAgICApO1xuICAgICAgICBkcmF3RWxlbWVudEZyb21DYW52YXMoZWxlbWVudFdpdGhDYW52YXMsIHJjLCBjb250ZXh0LCByZW5kZXJDb25maWcpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlICR7ZWxlbWVudC50eXBlfWApO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3Qgcm91Z2hTVkdEcmF3V2l0aFByZWNpc2lvbiA9IChcbiAgcnN2ZzogUm91Z2hTVkcsXG4gIGRyYXdhYmxlOiBEcmF3YWJsZSxcbiAgcHJlY2lzaW9uPzogbnVtYmVyLFxuKSA9PiB7XG4gIGlmICh0eXBlb2YgcHJlY2lzaW9uID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHJzdmcuZHJhdyhkcmF3YWJsZSk7XG4gIH1cbiAgY29uc3QgcHNoYXBlOiBEcmF3YWJsZSA9IHtcbiAgICBzZXRzOiBkcmF3YWJsZS5zZXRzLFxuICAgIHNoYXBlOiBkcmF3YWJsZS5zaGFwZSxcbiAgICBvcHRpb25zOiB7IC4uLmRyYXdhYmxlLm9wdGlvbnMsIGZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzOiBwcmVjaXNpb24gfSxcbiAgfTtcbiAgcmV0dXJuIHJzdmcuZHJhdyhwc2hhcGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlckVsZW1lbnRUb1N2ZyA9IChcbiAgZWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICByc3ZnOiBSb3VnaFNWRyxcbiAgc3ZnUm9vdDogU1ZHRWxlbWVudCxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICBvZmZzZXRYPzogbnVtYmVyLFxuICBvZmZzZXRZPzogbnVtYmVyLFxuICBleHBvcnRXaXRoRGFya01vZGU/OiBib29sZWFuLFxuKSA9PiB7XG4gIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZWxlbWVudCk7XG4gIGNvbnN0IGN4ID0gKHgyIC0geDEpIC8gMiAtIChlbGVtZW50LnggLSB4MSk7XG4gIGNvbnN0IGN5ID0gKHkyIC0geTEpIC8gMiAtIChlbGVtZW50LnkgLSB5MSk7XG4gIGNvbnN0IGRlZ3JlZSA9ICgxODAgKiBlbGVtZW50LmFuZ2xlKSAvIE1hdGguUEk7XG4gIGNvbnN0IGdlbmVyYXRvciA9IHJzdmcuZ2VuZXJhdG9yO1xuICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgXCJzZWxlY3Rpb25cIjoge1xuICAgICAgLy8gU2luY2UgdGhpcyBpcyB1c2VkIG9ubHkgZHVyaW5nIGVkaXRpbmcgZXhwZXJpZW5jZSwgd2hpY2ggaXMgY2FudmFzIGJhc2VkLFxuICAgICAgLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0aW9uIHJlbmRlcmluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBTVkdcIik7XG4gICAgfVxuICAgIGNhc2UgXCJyZWN0YW5nbGVcIjpcbiAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgIGNhc2UgXCJlbGxpcHNlXCI6IHtcbiAgICAgIGdlbmVyYXRlRWxlbWVudFNoYXBlKGVsZW1lbnQsIGdlbmVyYXRvcik7XG4gICAgICBjb25zdCBub2RlID0gcm91Z2hTVkdEcmF3V2l0aFByZWNpc2lvbihcbiAgICAgICAgcnN2ZyxcbiAgICAgICAgZ2V0U2hhcGVGb3JFbGVtZW50KGVsZW1lbnQpIGFzIERyYXdhYmxlLFxuICAgICAgICBNQVhfREVDSU1BTFNfRk9SX1NWR19FWFBPUlQsXG4gICAgICApO1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IGVsZW1lbnQub3BhY2l0eSAvIDEwMDtcbiAgICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLW9wYWNpdHlcIiwgYCR7b3BhY2l0eX1gKTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmaWxsLW9wYWNpdHlcIiwgYCR7b3BhY2l0eX1gKTtcbiAgICAgIH1cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLWxpbmVjYXBcIiwgXCJyb3VuZFwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBgdHJhbnNsYXRlKCR7b2Zmc2V0WCB8fCAwfSAke1xuICAgICAgICAgIG9mZnNldFkgfHwgMFxuICAgICAgICB9KSByb3RhdGUoJHtkZWdyZWV9ICR7Y3h9ICR7Y3l9KWAsXG4gICAgICApO1xuICAgICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwibGluZVwiOlxuICAgIGNhc2UgXCJhcnJvd1wiOiB7XG4gICAgICBnZW5lcmF0ZUVsZW1lbnRTaGFwZShlbGVtZW50LCBnZW5lcmF0b3IpO1xuICAgICAgY29uc3QgZ3JvdXAgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQhLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwiZ1wiKTtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBlbGVtZW50Lm9wYWNpdHkgLyAxMDA7XG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWNhcFwiLCBcInJvdW5kXCIpO1xuXG4gICAgICAoZ2V0U2hhcGVGb3JFbGVtZW50KGVsZW1lbnQpIGFzIERyYXdhYmxlW10pLmZvckVhY2goKHNoYXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSByb3VnaFNWR0RyYXdXaXRoUHJlY2lzaW9uKFxuICAgICAgICAgIHJzdmcsXG4gICAgICAgICAgc2hhcGUsXG4gICAgICAgICAgTUFYX0RFQ0lNQUxTX0ZPUl9TVkdfRVhQT1JULFxuICAgICAgICApO1xuICAgICAgICBpZiAob3BhY2l0eSAhPT0gMSkge1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLW9wYWNpdHlcIiwgYCR7b3BhY2l0eX1gKTtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLCBgJHtvcGFjaXR5fWApO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgYHRyYW5zbGF0ZSgke29mZnNldFggfHwgMH0gJHtcbiAgICAgICAgICAgIG9mZnNldFkgfHwgMFxuICAgICAgICAgIH0pIHJvdGF0ZSgke2RlZ3JlZX0gJHtjeH0gJHtjeX0pYCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJsaW5lXCIgJiZcbiAgICAgICAgICBpc1BhdGhBTG9vcChlbGVtZW50LnBvaW50cykgJiZcbiAgICAgICAgICBlbGVtZW50LmJhY2tncm91bmRDb2xvciAhPT0gXCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICkge1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsIFwiZXZlbm9kZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBncm91cC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIH0pO1xuICAgICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChncm91cCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImZyZWVkcmF3XCI6IHtcbiAgICAgIGdlbmVyYXRlRnJlZURyYXdTaGFwZShlbGVtZW50KTtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBlbGVtZW50Lm9wYWNpdHkgLyAxMDA7XG4gICAgICBjb25zdCBub2RlID0gc3ZnUm9vdC5vd25lckRvY3VtZW50IS5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcImdcIik7XG4gICAgICBpZiAob3BhY2l0eSAhPT0gMSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cm9rZS1vcGFjaXR5XCIsIGAke29wYWNpdHl9YCk7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1vcGFjaXR5XCIsIGAke29wYWNpdHl9YCk7XG4gICAgICB9XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgYHRyYW5zbGF0ZSgke29mZnNldFggfHwgMH0gJHtcbiAgICAgICAgICBvZmZzZXRZIHx8IDBcbiAgICAgICAgfSkgcm90YXRlKCR7ZGVncmVlfSAke2N4fSAke2N5fSlgLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBhdGggPSBzdmdSb290Lm93bmVyRG9jdW1lbnQhLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwicGF0aFwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBlbGVtZW50LnN0cm9rZUNvbG9yKTtcbiAgICAgIHBhdGguc2V0QXR0cmlidXRlKFwiZFwiLCBnZXRGcmVlRHJhd1N2Z1BhdGgoZWxlbWVudCkpO1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZChwYXRoKTtcbiAgICAgIHN2Z1Jvb3QuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImltYWdlXCI6IHtcbiAgICAgIGNvbnN0IGZpbGVEYXRhID1cbiAgICAgICAgaXNJbml0aWFsaXplZEltYWdlRWxlbWVudChlbGVtZW50KSAmJiBmaWxlc1tlbGVtZW50LmZpbGVJZF07XG4gICAgICBpZiAoZmlsZURhdGEpIHtcbiAgICAgICAgY29uc3Qgc3ltYm9sSWQgPSBgaW1hZ2UtJHtmaWxlRGF0YS5pZH1gO1xuICAgICAgICBsZXQgc3ltYm9sID0gc3ZnUm9vdC5xdWVyeVNlbGVjdG9yKGAjJHtzeW1ib2xJZH1gKTtcbiAgICAgICAgaWYgKCFzeW1ib2wpIHtcbiAgICAgICAgICBzeW1ib2wgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQhLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwic3ltYm9sXCIpO1xuICAgICAgICAgIHN5bWJvbC5pZCA9IHN5bWJvbElkO1xuXG4gICAgICAgICAgY29uc3QgaW1hZ2UgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQhLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwiaW1hZ2VcIik7XG5cbiAgICAgICAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgICAgICAgaW1hZ2Uuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFwiMTAwJVwiKTtcbiAgICAgICAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGZpbGVEYXRhLmRhdGFVUkwpO1xuXG4gICAgICAgICAgc3ltYm9sLmFwcGVuZENoaWxkKGltYWdlKTtcblxuICAgICAgICAgIHN2Z1Jvb3QucHJlcGVuZChzeW1ib2wpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXNlID0gc3ZnUm9vdC5vd25lckRvY3VtZW50IS5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcInVzZVwiKTtcbiAgICAgICAgdXNlLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgYCMke3N5bWJvbElkfWApO1xuXG4gICAgICAgIC8vIGluIGRhcmsgdGhlbWUsIHJldmVydCB0aGUgaW1hZ2UgY29sb3IgZmlsdGVyXG4gICAgICAgIGlmIChleHBvcnRXaXRoRGFya01vZGUgJiYgZmlsZURhdGEubWltZVR5cGUgIT09IE1JTUVfVFlQRVMuc3ZnKSB7XG4gICAgICAgICAgdXNlLnNldEF0dHJpYnV0ZShcImZpbHRlclwiLCBJTUFHRV9JTlZFUlRfRklMVEVSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHtNYXRoLnJvdW5kKGVsZW1lbnQud2lkdGgpfWApO1xuICAgICAgICB1c2Uuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke01hdGgucm91bmQoZWxlbWVudC5oZWlnaHQpfWApO1xuXG4gICAgICAgIHVzZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICBgdHJhbnNsYXRlKCR7b2Zmc2V0WCB8fCAwfSAke1xuICAgICAgICAgICAgb2Zmc2V0WSB8fCAwXG4gICAgICAgICAgfSkgcm90YXRlKCR7ZGVncmVlfSAke2N4fSAke2N5fSlgLFxuICAgICAgICApO1xuXG4gICAgICAgIHN2Z1Jvb3QuYXBwZW5kQ2hpbGQodXNlKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBpZiAoaXNUZXh0RWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBvcGFjaXR5ID0gZWxlbWVudC5vcGFjaXR5IC8gMTAwO1xuICAgICAgICBjb25zdCBub2RlID0gc3ZnUm9vdC5vd25lckRvY3VtZW50IS5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcImdcIik7XG4gICAgICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7XG4gICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utb3BhY2l0eVwiLCBgJHtvcGFjaXR5fWApO1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1vcGFjaXR5XCIsIGAke29wYWNpdHl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICBgdHJhbnNsYXRlKCR7b2Zmc2V0WCB8fCAwfSAke1xuICAgICAgICAgICAgb2Zmc2V0WSB8fCAwXG4gICAgICAgICAgfSkgcm90YXRlKCR7ZGVncmVlfSAke2N4fSAke2N5fSlgLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGVsZW1lbnQudGV4dC5yZXBsYWNlKC9cXHJcXG4/L2csIFwiXFxuXCIpLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQgLyBsaW5lcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0ID0gZWxlbWVudC5oZWlnaHQgLSBlbGVtZW50LmJhc2VsaW5lO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsT2Zmc2V0ID1cbiAgICAgICAgICBlbGVtZW50LnRleHRBbGlnbiA9PT0gXCJjZW50ZXJcIlxuICAgICAgICAgICAgPyBlbGVtZW50LndpZHRoIC8gMlxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHRBbGlnbiA9PT0gXCJyaWdodFwiXG4gICAgICAgICAgICA/IGVsZW1lbnQud2lkdGhcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNSVEwoZWxlbWVudC50ZXh0KSA/IFwicnRsXCIgOiBcImx0clwiO1xuICAgICAgICBjb25zdCB0ZXh0QW5jaG9yID1cbiAgICAgICAgICBlbGVtZW50LnRleHRBbGlnbiA9PT0gXCJjZW50ZXJcIlxuICAgICAgICAgICAgPyBcIm1pZGRsZVwiXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dEFsaWduID09PSBcInJpZ2h0XCIgfHwgZGlyZWN0aW9uID09PSBcInJ0bFwiXG4gICAgICAgICAgICA/IFwiZW5kXCJcbiAgICAgICAgICAgIDogXCJzdGFydFwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJ0ZXh0XCIpO1xuICAgICAgICAgIHRleHQudGV4dENvbnRlbnQgPSBsaW5lc1tpXTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcInhcIiwgYCR7aG9yaXpvbnRhbE9mZnNldH1gKTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcInlcIiwgYCR7KGkgKyAxKSAqIGxpbmVIZWlnaHQgLSB2ZXJ0aWNhbE9mZnNldH1gKTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcImZvbnQtZmFtaWx5XCIsIGdldEZvbnRGYW1pbHlTdHJpbmcoZWxlbWVudCkpO1xuICAgICAgICAgIHRleHQuc2V0QXR0cmlidXRlKFwiZm9udC1zaXplXCIsIGAke2VsZW1lbnQuZm9udFNpemV9cHhgKTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgZWxlbWVudC5zdHJva2VDb2xvcik7XG4gICAgICAgICAgdGV4dC5zZXRBdHRyaWJ1dGUoXCJ0ZXh0LWFuY2hvclwiLCB0ZXh0QW5jaG9yKTtcbiAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2hpdGUtc3BhY2U6IHByZTtcIik7XG4gICAgICAgICAgdGV4dC5zZXRBdHRyaWJ1dGUoXCJkaXJlY3Rpb25cIiwgZGlyZWN0aW9uKTtcbiAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHN2Z1Jvb3QuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlICR7ZWxlbWVudC50eXBlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGxldCBwYXRoc0NhY2hlID0gbmV3IFdlYWtNYXA8RXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudCwgUGF0aDJEPihbXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUZyZWVEcmF3U2hhcGUoZWxlbWVudDogRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudCkge1xuICBjb25zdCBzdmdQYXRoRGF0YSA9IGdldEZyZWVEcmF3U3ZnUGF0aChlbGVtZW50KTtcbiAgY29uc3QgcGF0aCA9IG5ldyBQYXRoMkQoc3ZnUGF0aERhdGEpO1xuICBwYXRoc0NhY2hlLnNldChlbGVtZW50LCBwYXRoKTtcbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcmVlRHJhd1BhdGgyRChlbGVtZW50OiBFeGNhbGlkcmF3RnJlZURyYXdFbGVtZW50KSB7XG4gIHJldHVybiBwYXRoc0NhY2hlLmdldChlbGVtZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZyZWVEcmF3U3ZnUGF0aChlbGVtZW50OiBFeGNhbGlkcmF3RnJlZURyYXdFbGVtZW50KSB7XG4gIC8vIElmIGlucHV0IHBvaW50cyBhcmUgZW1wdHkgKHNob3VsZCB0aGV5IGV2ZXIgYmU/KSByZXR1cm4gYSBkb3RcbiAgY29uc3QgaW5wdXRQb2ludHMgPSBlbGVtZW50LnNpbXVsYXRlUHJlc3N1cmVcbiAgICA/IGVsZW1lbnQucG9pbnRzXG4gICAgOiBlbGVtZW50LnBvaW50cy5sZW5ndGhcbiAgICA/IGVsZW1lbnQucG9pbnRzLm1hcCgoW3gsIHldLCBpKSA9PiBbeCwgeSwgZWxlbWVudC5wcmVzc3VyZXNbaV1dKVxuICAgIDogW1swLCAwLCAwLjVdXTtcblxuICAvLyBDb25zaWRlciBjaGFuZ2luZyB0aGUgb3B0aW9ucyBmb3Igc2ltdWxhdGVkIHByZXNzdXJlIHZzIHJlYWwgcHJlc3N1cmVcbiAgY29uc3Qgb3B0aW9uczogU3Ryb2tlT3B0aW9ucyA9IHtcbiAgICBzaW11bGF0ZVByZXNzdXJlOiBlbGVtZW50LnNpbXVsYXRlUHJlc3N1cmUsXG4gICAgc2l6ZTogZWxlbWVudC5zdHJva2VXaWR0aCAqIDQuMjUsXG4gICAgdGhpbm5pbmc6IDAuNixcbiAgICBzbW9vdGhpbmc6IDAuNSxcbiAgICBzdHJlYW1saW5lOiAwLjUsXG4gICAgZWFzaW5nOiAodCkgPT4gTWF0aC5zaW4oKHQgKiBNYXRoLlBJKSAvIDIpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0U2luZVxuICAgIGxhc3Q6ICEhZWxlbWVudC5sYXN0Q29tbWl0dGVkUG9pbnQsIC8vIExhc3RDb21taXR0ZWRQb2ludCBpcyBhZGRlZCBvbiBwb2ludGVydXBcbiAgfTtcblxuICByZXR1cm4gZ2V0U3ZnUGF0aEZyb21TdHJva2UoZ2V0U3Ryb2tlKGlucHV0UG9pbnRzIGFzIG51bWJlcltdW10sIG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gbWVkKEE6IG51bWJlcltdLCBCOiBudW1iZXJbXSkge1xuICByZXR1cm4gWyhBWzBdICsgQlswXSkgLyAyLCAoQVsxXSArIEJbMV0pIC8gMl07XG59XG5cbi8vIFRyaW0gU1ZHIHBhdGggZGF0YSBzbyBudW1iZXIgYXJlIGVhY2ggdHdvIGRlY2ltYWwgcG9pbnRzLiBUaGlzXG4vLyBpbXByb3ZlcyBTVkcgZXhwb3J0cywgYW5kIHByZXZlbnRzIHJlbmRlcmluZyBlcnJvcnMgb24gcG9pbnRzXG4vLyB3aXRoIGxvbmcgZGVjaW1hbHMuXG5jb25zdCBUT19GSVhFRF9QUkVDSVNJT04gPSAvKFxccz9bQS1aXT8sPy0/WzAtOV0qXFwuWzAtOV17MCwyfSkoKFswLTldfGV8LSkqKS9nO1xuXG5mdW5jdGlvbiBnZXRTdmdQYXRoRnJvbVN0cm9rZShwb2ludHM6IG51bWJlcltdW10pOiBzdHJpbmcge1xuICBpZiAoIXBvaW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IG1heCA9IHBvaW50cy5sZW5ndGggLSAxO1xuXG4gIHJldHVybiBwb2ludHNcbiAgICAucmVkdWNlKFxuICAgICAgKGFjYywgcG9pbnQsIGksIGFycikgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gbWF4KSB7XG4gICAgICAgICAgYWNjLnB1c2gocG9pbnQsIG1lZChwb2ludCwgYXJyWzBdKSwgXCJMXCIsIGFyclswXSwgXCJaXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy5wdXNoKHBvaW50LCBtZWQocG9pbnQsIGFycltpICsgMV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFtcIk1cIiwgcG9pbnRzWzBdLCBcIlFcIl0sXG4gICAgKVxuICAgIC5qb2luKFwiIFwiKVxuICAgIC5yZXBsYWNlKFRPX0ZJWEVEX1BSRUNJU0lPTiwgXCIkMVwiKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../renderer/renderElement.ts\n");
|
|
2576
2576
|
|
|
2577
2577
|
/***/ }),
|
|
2578
2578
|
|
|
@@ -2583,7 +2583,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2583
2583
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2584
2584
|
|
|
2585
2585
|
"use strict";
|
|
2586
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"renderScene\": () => (/* binding */ renderScene),\n/* harmony export */ \"renderSceneToSvg\": () => (/* binding */ renderSceneToSvg)\n/* harmony export */ });\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _roundRect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./roundRect */ \"../../renderer/roundRect.ts\");\n/* harmony import */ var _scene_scrollbars__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../scene/scrollbars */ \"../../scene/scrollbars.ts\");\n/* harmony import */ var _scene_selection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../scene/selection */ \"../../scene/selection.ts\");\n/* harmony import */ var _renderElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./renderElement */ \"../../renderer/renderElement.ts\");\n/* harmony import */ var _clients__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../clients */ \"../../clients.ts\");\n/* harmony import */ var _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/linearElementEditor */ \"../../element/linearElementEditor.ts\");\n/* harmony import */ var _groups__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../groups */ \"../../groups.ts\");\n/* harmony import */ var _element_collision__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../element/collision */ \"../../element/collision.ts\");\n/* harmony import */ var _element_binding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element/binding */ \"../../element/binding.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../types */ \"../../types.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst hasEmojiSupport = (0,_utils__WEBPACK_IMPORTED_MODULE_11__.supportsEmoji)();\r\nconst strokeRectWithRotation = (context, x, y, width, height, cx, cy, angle, fill = false) => {\r\n context.save();\r\n context.translate(cx, cy);\r\n context.rotate(angle);\r\n if (fill) {\r\n context.fillRect(x - cx, y - cy, width, height);\r\n }\r\n context.strokeRect(x - cx, y - cy, width, height);\r\n context.restore();\r\n};\r\nconst strokeDiamondWithRotation = (context, width, height, cx, cy, angle) => {\r\n context.save();\r\n context.translate(cx, cy);\r\n context.rotate(angle);\r\n context.beginPath();\r\n context.moveTo(0, height / 2);\r\n context.lineTo(width / 2, 0);\r\n context.lineTo(0, -height / 2);\r\n context.lineTo(-width / 2, 0);\r\n context.closePath();\r\n context.stroke();\r\n context.restore();\r\n};\r\nconst strokeEllipseWithRotation = (context, width, height, cx, cy, angle) => {\r\n context.beginPath();\r\n context.ellipse(cx, cy, width / 2, height / 2, angle, 0, Math.PI * 2);\r\n context.stroke();\r\n};\r\nconst fillCircle = (context, cx, cy, radius) => {\r\n context.beginPath();\r\n context.arc(cx, cy, radius, 0, Math.PI * 2);\r\n context.fill();\r\n context.stroke();\r\n};\r\nconst strokeGrid = (context, gridSize, offsetX, offsetY, width, height) => {\r\n context.save();\r\n context.strokeStyle = \"rgba(0,0,0,0.1)\";\r\n context.beginPath();\r\n for (let x = offsetX; x < offsetX + width + gridSize * 2; x += gridSize) {\r\n context.moveTo(x, offsetY - gridSize);\r\n context.lineTo(x, offsetY + height + gridSize * 2);\r\n }\r\n for (let y = offsetY; y < offsetY + height + gridSize * 2; y += gridSize) {\r\n context.moveTo(offsetX - gridSize, y);\r\n context.lineTo(offsetX + width + gridSize * 2, y);\r\n }\r\n context.stroke();\r\n context.restore();\r\n};\r\nconst renderLinearPointHandles = (context, appState, renderConfig, element) => {\r\n context.save();\r\n context.translate(renderConfig.scrollX, renderConfig.scrollY);\r\n context.lineWidth = 1 / renderConfig.zoom.value;\r\n _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getPointsGlobalCoordinates(element).forEach((point, idx) => {\r\n var _a;\r\n context.strokeStyle = \"red\";\r\n context.setLineDash([]);\r\n context.fillStyle =\r\n ((_a = appState.editingLinearElement) === null || _a === void 0 ? void 0 : _a.activePointIndex) === idx\r\n ? \"rgba(255, 127, 127, 0.9)\"\r\n : \"rgba(255, 255, 255, 0.9)\";\r\n const { POINT_HANDLE_SIZE } = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor;\r\n fillCircle(context, point[0], point[1], POINT_HANDLE_SIZE / 2 / renderConfig.zoom.value);\r\n });\r\n context.restore();\r\n};\r\nconst renderScene = (elements, appState, selectionElement, scale, rc, canvas, renderConfig) => {\r\n var _a;\r\n if (canvas === null) {\r\n return { atLeastOneVisibleElement: false };\r\n }\r\n const { renderScrollbars = true, renderSelection = true, renderGrid = true, isExporting, } = renderConfig;\r\n const context = canvas.getContext(\"2d\");\r\n context.setTransform(1, 0, 0, 1, 0, 0);\r\n context.save();\r\n context.scale(scale, scale);\r\n // When doing calculations based on canvas width we should used normalized one\r\n const normalizedCanvasWidth = canvas.width / scale;\r\n const normalizedCanvasHeight = canvas.height / scale;\r\n if (isExporting && renderConfig.theme === \"dark\") {\r\n context.filter = _constants__WEBPACK_IMPORTED_MODULE_13__.THEME_FILTER;\r\n }\r\n // Paint background\r\n if (typeof renderConfig.viewBackgroundColor === \"string\") {\r\n const hasTransparence = renderConfig.viewBackgroundColor === \"transparent\" ||\r\n renderConfig.viewBackgroundColor.length === 5 || // #RGBA\r\n renderConfig.viewBackgroundColor.length === 9 || // #RRGGBBA\r\n /(hsla|rgba)\\(/.test(renderConfig.viewBackgroundColor);\r\n if (hasTransparence) {\r\n context.clearRect(0, 0, normalizedCanvasWidth, normalizedCanvasHeight);\r\n }\r\n context.save();\r\n context.fillStyle = renderConfig.viewBackgroundColor;\r\n context.fillRect(0, 0, normalizedCanvasWidth, normalizedCanvasHeight);\r\n context.restore();\r\n }\r\n else {\r\n context.clearRect(0, 0, normalizedCanvasWidth, normalizedCanvasHeight);\r\n }\r\n // Apply zoom\r\n const zoomTranslationX = renderConfig.zoom.translation.x;\r\n const zoomTranslationY = renderConfig.zoom.translation.y;\r\n context.save();\r\n context.translate(zoomTranslationX, zoomTranslationY);\r\n context.scale(renderConfig.zoom.value, renderConfig.zoom.value);\r\n // Grid\r\n if (renderGrid && appState.gridSize) {\r\n strokeGrid(context, appState.gridSize, -Math.ceil(zoomTranslationX / renderConfig.zoom.value / appState.gridSize) *\r\n appState.gridSize +\r\n (renderConfig.scrollX % appState.gridSize), -Math.ceil(zoomTranslationY / renderConfig.zoom.value / appState.gridSize) *\r\n appState.gridSize +\r\n (renderConfig.scrollY % appState.gridSize), normalizedCanvasWidth / renderConfig.zoom.value, normalizedCanvasHeight / renderConfig.zoom.value);\r\n }\r\n // Paint visible elements\r\n const visibleElements = elements.filter((element) => isVisibleElement(element, normalizedCanvasWidth, normalizedCanvasHeight, {\r\n zoom: renderConfig.zoom,\r\n offsetLeft: appState.offsetLeft,\r\n offsetTop: appState.offsetTop,\r\n scrollX: renderConfig.scrollX,\r\n scrollY: renderConfig.scrollY,\r\n }));\r\n visibleElements.forEach((element) => {\r\n try {\r\n (0,_renderElement__WEBPACK_IMPORTED_MODULE_5__.renderElement)(element, rc, context, renderConfig);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n });\r\n if (appState.editingLinearElement) {\r\n const element = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getElement(appState.editingLinearElement.elementId);\r\n if (element) {\r\n renderLinearPointHandles(context, appState, renderConfig, element);\r\n }\r\n }\r\n // Paint selection element\r\n if (selectionElement) {\r\n try {\r\n (0,_renderElement__WEBPACK_IMPORTED_MODULE_5__.renderElement)(selectionElement, rc, context, renderConfig);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n if ((0,_element_binding__WEBPACK_IMPORTED_MODULE_10__.isBindingEnabled)(appState)) {\r\n appState.suggestedBindings\r\n .filter((binding) => binding != null)\r\n .forEach((suggestedBinding) => {\r\n renderBindingHighlight(context, renderConfig, suggestedBinding);\r\n });\r\n }\r\n // Paint selected elements\r\n if (renderSelection &&\r\n !appState.multiElement &&\r\n !appState.editingLinearElement) {\r\n const selections = elements.reduce((acc, element) => {\r\n const selectionColors = [];\r\n // local user\r\n if (appState.selectedElementIds[element.id] &&\r\n !(0,_groups__WEBPACK_IMPORTED_MODULE_8__.isSelectedViaGroup)(appState, element)) {\r\n selectionColors.push(open_color__WEBPACK_IMPORTED_MODULE_0__.black);\r\n }\r\n // remote users\r\n if (renderConfig.remoteSelectedElementIds[element.id]) {\r\n selectionColors.push(...renderConfig.remoteSelectedElementIds[element.id].map((socketId) => {\r\n var _a;\r\n const picture = (_a = appState.collaborators.get(socketId)) === null || _a === void 0 ? void 0 : _a.picture;\r\n const { background } = (0,_clients__WEBPACK_IMPORTED_MODULE_6__.getClientColors)(picture || socketId, appState);\r\n return background;\r\n }));\r\n }\r\n if (selectionColors.length) {\r\n const [elementX1, elementY1, elementX2, elementY2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n acc.push({\r\n angle: element.angle,\r\n elementX1,\r\n elementY1,\r\n elementX2,\r\n elementY2,\r\n selectionColors,\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n const addSelectionForGroupId = (groupId) => {\r\n const groupElements = (0,_groups__WEBPACK_IMPORTED_MODULE_8__.getElementsInGroup)(elements, groupId);\r\n const [elementX1, elementY1, elementX2, elementY2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(groupElements);\r\n selections.push({\r\n angle: 0,\r\n elementX1,\r\n elementX2,\r\n elementY1,\r\n elementY2,\r\n selectionColors: [open_color__WEBPACK_IMPORTED_MODULE_0__.black],\r\n });\r\n };\r\n for (const groupId of (0,_groups__WEBPACK_IMPORTED_MODULE_8__.getSelectedGroupIds)(appState)) {\r\n // TODO: support multiplayer selected group IDs\r\n addSelectionForGroupId(groupId);\r\n }\r\n if (appState.editingGroupId) {\r\n addSelectionForGroupId(appState.editingGroupId);\r\n }\r\n selections.forEach((selection) => renderSelectionBorder(context, renderConfig, selection));\r\n const locallySelectedElements = (0,_scene_selection__WEBPACK_IMPORTED_MODULE_4__.getSelectedElements)(elements, appState);\r\n // Paint resize transformHandles\r\n context.save();\r\n context.translate(renderConfig.scrollX, renderConfig.scrollY);\r\n if (locallySelectedElements.length === 1) {\r\n context.fillStyle = open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n const transformHandles = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getTransformHandles)(locallySelectedElements[0], renderConfig.zoom, \"mouse\");\r\n if (!appState.viewModeEnabled) {\r\n renderTransformHandles(context, renderConfig, transformHandles, locallySelectedElements[0].angle);\r\n }\r\n }\r\n else if (locallySelectedElements.length > 1 && !appState.isRotating) {\r\n const dashedLinePadding = 4 / renderConfig.zoom.value;\r\n context.fillStyle = open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n const [x1, y1, x2, y2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(locallySelectedElements);\r\n const initialLineDash = context.getLineDash();\r\n context.setLineDash([2 / renderConfig.zoom.value]);\r\n const lineWidth = context.lineWidth;\r\n context.lineWidth = 1 / renderConfig.zoom.value;\r\n strokeRectWithRotation(context, x1 - dashedLinePadding, y1 - dashedLinePadding, x2 - x1 + dashedLinePadding * 2, y2 - y1 + dashedLinePadding * 2, (x1 + x2) / 2, (y1 + y2) / 2, 0);\r\n context.lineWidth = lineWidth;\r\n context.setLineDash(initialLineDash);\r\n const transformHandles = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getTransformHandlesFromCoords)([x1, y1, x2, y2], 0, renderConfig.zoom, \"mouse\", _element__WEBPACK_IMPORTED_MODULE_1__.OMIT_SIDES_FOR_MULTIPLE_ELEMENTS);\r\n renderTransformHandles(context, renderConfig, transformHandles, 0);\r\n }\r\n context.restore();\r\n }\r\n // Reset zoom\r\n context.restore();\r\n // Paint remote pointers\r\n for (const clientId in renderConfig.remotePointerViewportCoords) {\r\n let { x, y } = renderConfig.remotePointerViewportCoords[clientId];\r\n x -= appState.offsetLeft;\r\n y -= appState.offsetTop;\r\n const width = 9;\r\n const height = 14;\r\n const isOutOfBounds = x < 0 ||\r\n x > normalizedCanvasWidth - width ||\r\n y < 0 ||\r\n y > normalizedCanvasHeight - height;\r\n x = Math.max(x, 0);\r\n x = Math.min(x, normalizedCanvasWidth - width);\r\n y = Math.max(y, 0);\r\n y = Math.min(y, normalizedCanvasHeight - height);\r\n const picture = (_a = appState.collaborators.get(clientId)) === null || _a === void 0 ? void 0 : _a.picture;\r\n const { background, stroke } = (0,_clients__WEBPACK_IMPORTED_MODULE_6__.getClientColors)(picture || clientId, appState);\r\n context.save();\r\n context.strokeStyle = stroke;\r\n context.fillStyle = background;\r\n const userState = renderConfig.remotePointerUserStates[clientId];\r\n if (isOutOfBounds || userState === _types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.AWAY) {\r\n context.globalAlpha = 0.48;\r\n }\r\n if (renderConfig.remotePointerButton &&\r\n renderConfig.remotePointerButton[clientId] === \"down\") {\r\n context.beginPath();\r\n context.arc(x, y, 15, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#ffffff88\";\r\n context.stroke();\r\n context.closePath();\r\n context.beginPath();\r\n context.arc(x, y, 15, 0, 2 * Math.PI, false);\r\n context.lineWidth = 1;\r\n context.strokeStyle = stroke;\r\n context.stroke();\r\n context.closePath();\r\n }\r\n context.beginPath();\r\n context.moveTo(x, y);\r\n context.lineTo(x + 1, y + 14);\r\n context.lineTo(x + 4, y + 9);\r\n context.lineTo(x + 9, y + 10);\r\n context.lineTo(x, y);\r\n context.fill();\r\n context.stroke();\r\n const username = renderConfig.remotePointerUsernames[clientId];\r\n let idleState = \"\";\r\n if (userState === _types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.AWAY) {\r\n idleState = hasEmojiSupport ? \"⚫️\" : ` (${_types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.AWAY})`;\r\n }\r\n else if (userState === _types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.IDLE) {\r\n idleState = hasEmojiSupport ? \"💤\" : ` (${_types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.IDLE})`;\r\n }\r\n else if (userState === _types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.ACTIVE) {\r\n idleState = hasEmojiSupport ? \"🟢\" : \"\";\r\n }\r\n const usernameAndIdleState = `${username ? `${username} ` : \"\"}${idleState}`;\r\n if (!isOutOfBounds && usernameAndIdleState) {\r\n const offsetX = x + width;\r\n const offsetY = y + height;\r\n const paddingHorizontal = 4;\r\n const paddingVertical = 4;\r\n const measure = context.measureText(usernameAndIdleState);\r\n const measureHeight = measure.actualBoundingBoxDescent + measure.actualBoundingBoxAscent;\r\n // Border\r\n context.fillStyle = stroke;\r\n context.fillRect(offsetX - 1, offsetY - 1, measure.width + 2 * paddingHorizontal + 2, measureHeight + 2 * paddingVertical + 2);\r\n // Background\r\n context.fillStyle = background;\r\n context.fillRect(offsetX, offsetY, measure.width + 2 * paddingHorizontal, measureHeight + 2 * paddingVertical);\r\n context.fillStyle = open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n context.fillText(usernameAndIdleState, offsetX + paddingHorizontal, offsetY + paddingVertical + measure.actualBoundingBoxAscent);\r\n }\r\n context.restore();\r\n context.closePath();\r\n }\r\n // Paint scrollbars\r\n let scrollBars;\r\n if (renderScrollbars) {\r\n scrollBars = (0,_scene_scrollbars__WEBPACK_IMPORTED_MODULE_3__.getScrollBars)(elements, normalizedCanvasWidth, normalizedCanvasHeight, renderConfig);\r\n context.save();\r\n context.fillStyle = _scene_scrollbars__WEBPACK_IMPORTED_MODULE_3__.SCROLLBAR_COLOR;\r\n context.strokeStyle = \"rgba(255,255,255,0.8)\";\r\n [scrollBars.horizontal, scrollBars.vertical].forEach((scrollBar) => {\r\n if (scrollBar) {\r\n (0,_roundRect__WEBPACK_IMPORTED_MODULE_2__.roundRect)(context, scrollBar.x, scrollBar.y, scrollBar.width, scrollBar.height, _scene_scrollbars__WEBPACK_IMPORTED_MODULE_3__.SCROLLBAR_WIDTH / 2);\r\n }\r\n });\r\n context.restore();\r\n }\r\n context.restore();\r\n return { atLeastOneVisibleElement: visibleElements.length > 0, scrollBars };\r\n};\r\nconst renderTransformHandles = (context, renderConfig, transformHandles, angle) => {\r\n Object.keys(transformHandles).forEach((key) => {\r\n const transformHandle = transformHandles[key];\r\n if (transformHandle !== undefined) {\r\n context.save();\r\n context.lineWidth = 1 / renderConfig.zoom.value;\r\n if (key === \"rotation\") {\r\n fillCircle(context, transformHandle[0] + transformHandle[2] / 2, transformHandle[1] + transformHandle[3] / 2, transformHandle[2] / 2);\r\n }\r\n else {\r\n strokeRectWithRotation(context, transformHandle[0], transformHandle[1], transformHandle[2], transformHandle[3], transformHandle[0] + transformHandle[2] / 2, transformHandle[1] + transformHandle[3] / 2, angle, true);\r\n }\r\n context.restore();\r\n }\r\n });\r\n};\r\nconst renderSelectionBorder = (context, renderConfig, elementProperties) => {\r\n const { angle, elementX1, elementY1, elementX2, elementY2, selectionColors } = elementProperties;\r\n const elementWidth = elementX2 - elementX1;\r\n const elementHeight = elementY2 - elementY1;\r\n const dashedLinePadding = 4 / renderConfig.zoom.value;\r\n const dashWidth = 8 / renderConfig.zoom.value;\r\n const spaceWidth = 4 / renderConfig.zoom.value;\r\n context.save();\r\n context.translate(renderConfig.scrollX, renderConfig.scrollY);\r\n context.lineWidth = 1 / renderConfig.zoom.value;\r\n const count = selectionColors.length;\r\n for (let index = 0; index < count; ++index) {\r\n context.strokeStyle = selectionColors[index];\r\n context.setLineDash([\r\n dashWidth,\r\n spaceWidth + (dashWidth + spaceWidth) * (count - 1),\r\n ]);\r\n context.lineDashOffset = (dashWidth + spaceWidth) * index;\r\n strokeRectWithRotation(context, elementX1 - dashedLinePadding, elementY1 - dashedLinePadding, elementWidth + dashedLinePadding * 2, elementHeight + dashedLinePadding * 2, elementX1 + elementWidth / 2, elementY1 + elementHeight / 2, angle);\r\n }\r\n context.restore();\r\n};\r\nconst renderBindingHighlight = (context, renderConfig, suggestedBinding) => {\r\n const renderHighlight = Array.isArray(suggestedBinding)\r\n ? renderBindingHighlightForSuggestedPointBinding\r\n : renderBindingHighlightForBindableElement;\r\n context.save();\r\n context.translate(renderConfig.scrollX, renderConfig.scrollY);\r\n renderHighlight(context, suggestedBinding);\r\n context.restore();\r\n};\r\nconst renderBindingHighlightForBindableElement = (context, element) => {\r\n const [x1, y1, x2, y2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n const width = x2 - x1;\r\n const height = y2 - y1;\r\n const threshold = (0,_element_collision__WEBPACK_IMPORTED_MODULE_9__.maxBindingGap)(element, width, height);\r\n // So that we don't overlap the element itself\r\n const strokeOffset = 4;\r\n context.strokeStyle = \"rgba(0,0,0,.05)\";\r\n context.lineWidth = threshold - strokeOffset;\r\n const padding = strokeOffset / 2 + threshold / 2;\r\n switch (element.type) {\r\n case \"rectangle\":\r\n case \"text\":\r\n strokeRectWithRotation(context, x1 - padding, y1 - padding, width + padding * 2, height + padding * 2, x1 + width / 2, y1 + height / 2, element.angle);\r\n break;\r\n case \"diamond\":\r\n const side = Math.hypot(width, height);\r\n const wPadding = (padding * side) / height;\r\n const hPadding = (padding * side) / width;\r\n strokeDiamondWithRotation(context, width + wPadding * 2, height + hPadding * 2, x1 + width / 2, y1 + height / 2, element.angle);\r\n break;\r\n case \"ellipse\":\r\n strokeEllipseWithRotation(context, width + padding * 2, height + padding * 2, x1 + width / 2, y1 + height / 2, element.angle);\r\n break;\r\n }\r\n};\r\nconst renderBindingHighlightForSuggestedPointBinding = (context, suggestedBinding) => {\r\n const [element, startOrEnd, bindableElement] = suggestedBinding;\r\n const threshold = (0,_element_collision__WEBPACK_IMPORTED_MODULE_9__.maxBindingGap)(bindableElement, bindableElement.width, bindableElement.height);\r\n context.strokeStyle = \"rgba(0,0,0,0)\";\r\n context.fillStyle = \"rgba(0,0,0,.05)\";\r\n const pointIndices = startOrEnd === \"both\" ? [0, -1] : startOrEnd === \"start\" ? [0] : [-1];\r\n pointIndices.forEach((index) => {\r\n const [x, y] = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getPointAtIndexGlobalCoordinates(element, index);\r\n fillCircle(context, x, y, threshold);\r\n });\r\n};\r\nconst isVisibleElement = (element, canvasWidth, canvasHeight, viewTransformations) => {\r\n const [x1, y1, x2, y2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getElementBounds)(element); // scene coordinates\r\n const topLeftSceneCoords = (0,_utils__WEBPACK_IMPORTED_MODULE_11__.viewportCoordsToSceneCoords)({\r\n clientX: viewTransformations.offsetLeft,\r\n clientY: viewTransformations.offsetTop,\r\n }, viewTransformations);\r\n const bottomRightSceneCoords = (0,_utils__WEBPACK_IMPORTED_MODULE_11__.viewportCoordsToSceneCoords)({\r\n clientX: viewTransformations.offsetLeft + canvasWidth,\r\n clientY: viewTransformations.offsetTop + canvasHeight,\r\n }, viewTransformations);\r\n return (topLeftSceneCoords.x <= x2 &&\r\n topLeftSceneCoords.y <= y2 &&\r\n bottomRightSceneCoords.x >= x1 &&\r\n bottomRightSceneCoords.y >= y1);\r\n};\r\n// This should be only called for exporting purposes\r\nconst renderSceneToSvg = (elements, rsvg, svgRoot, files, { offsetX = 0, offsetY = 0, exportWithDarkMode = false, } = {}) => {\r\n if (!svgRoot) {\r\n return;\r\n }\r\n // render elements\r\n elements.forEach((element) => {\r\n if (!element.isDeleted) {\r\n try {\r\n (0,_renderElement__WEBPACK_IMPORTED_MODULE_5__.renderElementToSvg)(element, rsvg, svgRoot, files, element.x + offsetX, element.y + offsetY, exportWithDarkMode);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n });\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RTtZQUN0QixJQUFJO2dCQUNGLGtFQUFrQixDQUNoQixPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQ25CLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUNuQixrQkFBa0IsQ0FDbkIsQ0FBQzthQUNIO1lBQUMsT0FBTyxLQUFVLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEI7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3JlbmRlcmVyL3JlbmRlclNjZW5lLnRzP2UyNmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91Z2hDYW52YXMgfSBmcm9tIFwicm91Z2hqcy9iaW4vY2FudmFzXCI7XG5pbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gXCJyb3VnaGpzL2Jpbi9zdmdcIjtcbmltcG9ydCBvYyBmcm9tIFwib3Blbi1jb2xvclwiO1xuXG5pbXBvcnQgeyBBcHBTdGF0ZSwgQmluYXJ5RmlsZXMsIFpvb20gfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIEV4Y2FsaWRyYXdFbGVtZW50LFxuICBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50LFxuICBOb25EZWxldGVkLFxuICBHcm91cElkLFxuICBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50LFxufSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzLFxuICBPTUlUX1NJREVTX0ZPUl9NVUxUSVBMRV9FTEVNRU5UUyxcbiAgZ2V0VHJhbnNmb3JtSGFuZGxlc0Zyb21Db29yZHMsXG4gIGdldFRyYW5zZm9ybUhhbmRsZXMsXG4gIGdldEVsZW1lbnRCb3VuZHMsXG4gIGdldENvbW1vbkJvdW5kcyxcbn0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuaW1wb3J0IHsgcm91bmRSZWN0IH0gZnJvbSBcIi4vcm91bmRSZWN0XCI7XG5pbXBvcnQgeyBSZW5kZXJDb25maWcgfSBmcm9tIFwiLi4vc2NlbmUvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGdldFNjcm9sbEJhcnMsXG4gIFNDUk9MTEJBUl9DT0xPUixcbiAgU0NST0xMQkFSX1dJRFRILFxufSBmcm9tIFwiLi4vc2NlbmUvc2Nyb2xsYmFyc1wiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi9zY2VuZS9zZWxlY3Rpb25cIjtcblxuaW1wb3J0IHsgcmVuZGVyRWxlbWVudCwgcmVuZGVyRWxlbWVudFRvU3ZnIH0gZnJvbSBcIi4vcmVuZGVyRWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50Q29sb3JzIH0gZnJvbSBcIi4uL2NsaWVudHNcIjtcbmltcG9ydCB7IExpbmVhckVsZW1lbnRFZGl0b3IgfSBmcm9tIFwiLi4vZWxlbWVudC9saW5lYXJFbGVtZW50RWRpdG9yXCI7XG5pbXBvcnQge1xuICBpc1NlbGVjdGVkVmlhR3JvdXAsXG4gIGdldFNlbGVjdGVkR3JvdXBJZHMsXG4gIGdldEVsZW1lbnRzSW5Hcm91cCxcbn0gZnJvbSBcIi4uL2dyb3Vwc1wiO1xuaW1wb3J0IHsgbWF4QmluZGluZ0dhcCB9IGZyb20gXCIuLi9lbGVtZW50L2NvbGxpc2lvblwiO1xuaW1wb3J0IHtcbiAgU3VnZ2VzdGVkQmluZGluZyxcbiAgU3VnZ2VzdGVkUG9pbnRCaW5kaW5nLFxuICBpc0JpbmRpbmdFbmFibGVkLFxufSBmcm9tIFwiLi4vZWxlbWVudC9iaW5kaW5nXCI7XG5pbXBvcnQge1xuICBUcmFuc2Zvcm1IYW5kbGVzLFxuICBUcmFuc2Zvcm1IYW5kbGVUeXBlLFxufSBmcm9tIFwiLi4vZWxlbWVudC90cmFuc2Zvcm1IYW5kbGVzXCI7XG5pbXBvcnQgeyB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMsIHN1cHBvcnRzRW1vamkgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFVzZXJJZGxlU3RhdGUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgaGFzRW1vamlTdXBwb3J0ID0gc3VwcG9ydHNFbW9qaSgpO1xuXG5jb25zdCBzdHJva2VSZWN0V2l0aFJvdGF0aW9uID0gKFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgY3g6IG51bWJlcixcbiAgY3k6IG51bWJlcixcbiAgYW5nbGU6IG51bWJlcixcbiAgZmlsbDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIGNvbnRleHQuc2F2ZSgpO1xuICBjb250ZXh0LnRyYW5zbGF0ZShjeCwgY3kpO1xuICBjb250ZXh0LnJvdGF0ZShhbmdsZSk7XG4gIGlmIChmaWxsKSB7XG4gICAgY29udGV4dC5maWxsUmVjdCh4IC0gY3gsIHkgLSBjeSwgd2lkdGgsIGhlaWdodCk7XG4gIH1cbiAgY29udGV4dC5zdHJva2VSZWN0KHggLSBjeCwgeSAtIGN5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5jb25zdCBzdHJva2VEaWFtb25kV2l0aFJvdGF0aW9uID0gKFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuICBjeDogbnVtYmVyLFxuICBjeTogbnVtYmVyLFxuICBhbmdsZTogbnVtYmVyLFxuKSA9PiB7XG4gIGNvbnRleHQuc2F2ZSgpO1xuICBjb250ZXh0LnRyYW5zbGF0ZShjeCwgY3kpO1xuICBjb250ZXh0LnJvdGF0ZShhbmdsZSk7XG4gIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIGNvbnRleHQubW92ZVRvKDAsIGhlaWdodCAvIDIpO1xuICBjb250ZXh0LmxpbmVUbyh3aWR0aCAvIDIsIDApO1xuICBjb250ZXh0LmxpbmVUbygwLCAtaGVpZ2h0IC8gMik7XG4gIGNvbnRleHQubGluZVRvKC13aWR0aCAvIDIsIDApO1xuICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICBjb250ZXh0LnN0cm9rZSgpO1xuICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cbmNvbnN0IHN0cm9rZUVsbGlwc2VXaXRoUm90YXRpb24gPSAoXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGN4OiBudW1iZXIsXG4gIGN5OiBudW1iZXIsXG4gIGFuZ2xlOiBudW1iZXIsXG4pID0+IHtcbiAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgY29udGV4dC5lbGxpcHNlKGN4LCBjeSwgd2lkdGggLyAyLCBoZWlnaHQgLyAyLCBhbmdsZSwgMCwgTWF0aC5QSSAqIDIpO1xuICBjb250ZXh0LnN0cm9rZSgpO1xufTtcblxuY29uc3QgZmlsbENpcmNsZSA9IChcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICBjeDogbnVtYmVyLFxuICBjeTogbnVtYmVyLFxuICByYWRpdXM6IG51bWJlcixcbikgPT4ge1xuICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjb250ZXh0LmFyYyhjeCwgY3ksIHJhZGl1cywgMCwgTWF0aC5QSSAqIDIpO1xuICBjb250ZXh0LmZpbGwoKTtcbiAgY29udGV4dC5zdHJva2UoKTtcbn07XG5cbmNvbnN0IHN0cm9rZUdyaWQgPSAoXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgZ3JpZFNpemU6IG51bWJlcixcbiAgb2Zmc2V0WDogbnVtYmVyLFxuICBvZmZzZXRZOiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuKSA9PiB7XG4gIGNvbnRleHQuc2F2ZSgpO1xuICBjb250ZXh0LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDAsMCwwLDAuMSlcIjtcbiAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgZm9yIChsZXQgeCA9IG9mZnNldFg7IHggPCBvZmZzZXRYICsgd2lkdGggKyBncmlkU2l6ZSAqIDI7IHggKz0gZ3JpZFNpemUpIHtcbiAgICBjb250ZXh0Lm1vdmVUbyh4LCBvZmZzZXRZIC0gZ3JpZFNpemUpO1xuICAgIGNvbnRleHQubGluZVRvKHgsIG9mZnNldFkgKyBoZWlnaHQgKyBncmlkU2l6ZSAqIDIpO1xuICB9XG4gIGZvciAobGV0IHkgPSBvZmZzZXRZOyB5IDwgb2Zmc2V0WSArIGhlaWdodCArIGdyaWRTaXplICogMjsgeSArPSBncmlkU2l6ZSkge1xuICAgIGNvbnRleHQubW92ZVRvKG9mZnNldFggLSBncmlkU2l6ZSwgeSk7XG4gICAgY29udGV4dC5saW5lVG8ob2Zmc2V0WCArIHdpZHRoICsgZ3JpZFNpemUgKiAyLCB5KTtcbiAgfVxuICBjb250ZXh0LnN0cm9rZSgpO1xuICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cbmNvbnN0IHJlbmRlckxpbmVhclBvaW50SGFuZGxlcyA9IChcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4gIHJlbmRlckNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICBlbGVtZW50OiBOb25EZWxldGVkPEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50PixcbikgPT4ge1xuICBjb250ZXh0LnNhdmUoKTtcbiAgY29udGV4dC50cmFuc2xhdGUocmVuZGVyQ29uZmlnLnNjcm9sbFgsIHJlbmRlckNvbmZpZy5zY3JvbGxZKTtcbiAgY29udGV4dC5saW5lV2lkdGggPSAxIC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWU7XG5cbiAgTGluZWFyRWxlbWVudEVkaXRvci5nZXRQb2ludHNHbG9iYWxDb29yZGluYXRlcyhlbGVtZW50KS5mb3JFYWNoKFxuICAgIChwb2ludCwgaWR4KSA9PiB7XG4gICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gXCJyZWRcIjtcbiAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPVxuICAgICAgICBhcHBTdGF0ZS5lZGl0aW5nTGluZWFyRWxlbWVudD8uYWN0aXZlUG9pbnRJbmRleCA9PT0gaWR4XG4gICAgICAgICAgPyBcInJnYmEoMjU1LCAxMjcsIDEyNywgMC45KVwiXG4gICAgICAgICAgOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KVwiO1xuICAgICAgY29uc3QgeyBQT0lOVF9IQU5ETEVfU0laRSB9ID0gTGluZWFyRWxlbWVudEVkaXRvcjtcbiAgICAgIGZpbGxDaXJjbGUoXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHBvaW50WzBdLFxuICAgICAgICBwb2ludFsxXSxcbiAgICAgICAgUE9JTlRfSEFORExFX1NJWkUgLyAyIC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWUsXG4gICAgICApO1xuICAgIH0sXG4gICk7XG4gIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjZW5lID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgc2VsZWN0aW9uRWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IHwgbnVsbCxcbiAgc2NhbGU6IG51bWJlcixcbiAgcmM6IFJvdWdoQ2FudmFzLFxuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbiAgLy8gZXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHJlbmRlcmVyXG4pID0+IHtcbiAgaWYgKGNhbnZhcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiB7IGF0TGVhc3RPbmVWaXNpYmxlRWxlbWVudDogZmFsc2UgfTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICByZW5kZXJTY3JvbGxiYXJzID0gdHJ1ZSxcbiAgICByZW5kZXJTZWxlY3Rpb24gPSB0cnVlLFxuICAgIHJlbmRlckdyaWQgPSB0cnVlLFxuICAgIGlzRXhwb3J0aW5nLFxuICB9ID0gcmVuZGVyQ29uZmlnO1xuXG4gIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpITtcblxuICBjb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgY29udGV4dC5zYXZlKCk7XG4gIGNvbnRleHQuc2NhbGUoc2NhbGUsIHNjYWxlKTtcblxuICAvLyBXaGVuIGRvaW5nIGNhbGN1bGF0aW9ucyBiYXNlZCBvbiBjYW52YXMgd2lkdGggd2Ugc2hvdWxkIHVzZWQgbm9ybWFsaXplZCBvbmVcbiAgY29uc3Qgbm9ybWFsaXplZENhbnZhc1dpZHRoID0gY2FudmFzLndpZHRoIC8gc2NhbGU7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDYW52YXNIZWlnaHQgPSBjYW52YXMuaGVpZ2h0IC8gc2NhbGU7XG5cbiAgaWYgKGlzRXhwb3J0aW5nICYmIHJlbmRlckNvbmZpZy50aGVtZSA9PT0gXCJkYXJrXCIpIHtcbiAgICBjb250ZXh0LmZpbHRlciA9IFRIRU1FX0ZJTFRFUjtcbiAgfVxuXG4gIC8vIFBhaW50IGJhY2tncm91bmRcbiAgaWYgKHR5cGVvZiByZW5kZXJDb25maWcudmlld0JhY2tncm91bmRDb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IGhhc1RyYW5zcGFyZW5jZSA9XG4gICAgICByZW5kZXJDb25maWcudmlld0JhY2tncm91bmRDb2xvciA9PT0gXCJ0cmFuc3BhcmVudFwiIHx8XG4gICAgICByZW5kZXJDb25maWcudmlld0JhY2tncm91bmRDb2xvci5sZW5ndGggPT09IDUgfHwgLy8gI1JHQkFcbiAgICAgIHJlbmRlckNvbmZpZy52aWV3QmFja2dyb3VuZENvbG9yLmxlbmd0aCA9PT0gOSB8fCAvLyAjUlJHR0JCQVxuICAgICAgLyhoc2xhfHJnYmEpXFwoLy50ZXN0KHJlbmRlckNvbmZpZy52aWV3QmFja2dyb3VuZENvbG9yKTtcbiAgICBpZiAoaGFzVHJhbnNwYXJlbmNlKSB7XG4gICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCBub3JtYWxpemVkQ2FudmFzV2lkdGgsIG5vcm1hbGl6ZWRDYW52YXNIZWlnaHQpO1xuICAgIH1cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHJlbmRlckNvbmZpZy52aWV3QmFja2dyb3VuZENvbG9yO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgbm9ybWFsaXplZENhbnZhc1dpZHRoLCBub3JtYWxpemVkQ2FudmFzSGVpZ2h0KTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCBub3JtYWxpemVkQ2FudmFzV2lkdGgsIG5vcm1hbGl6ZWRDYW52YXNIZWlnaHQpO1xuICB9XG5cbiAgLy8gQXBwbHkgem9vbVxuICBjb25zdCB6b29tVHJhbnNsYXRpb25YID0gcmVuZGVyQ29uZmlnLnpvb20udHJhbnNsYXRpb24ueDtcbiAgY29uc3Qgem9vbVRyYW5zbGF0aW9uWSA9IHJlbmRlckNvbmZpZy56b29tLnRyYW5zbGF0aW9uLnk7XG4gIGNvbnRleHQuc2F2ZSgpO1xuICBjb250ZXh0LnRyYW5zbGF0ZSh6b29tVHJhbnNsYXRpb25YLCB6b29tVHJhbnNsYXRpb25ZKTtcbiAgY29udGV4dC5zY2FsZShyZW5kZXJDb25maWcuem9vbS52YWx1ZSwgcmVuZGVyQ29uZmlnLnpvb20udmFsdWUpO1xuXG4gIC8vIEdyaWRcbiAgaWYgKHJlbmRlckdyaWQgJiYgYXBwU3RhdGUuZ3JpZFNpemUpIHtcbiAgICBzdHJva2VHcmlkKFxuICAgICAgY29udGV4dCxcbiAgICAgIGFwcFN0YXRlLmdyaWRTaXplLFxuICAgICAgLU1hdGguY2VpbChcbiAgICAgICAgem9vbVRyYW5zbGF0aW9uWCAvIHJlbmRlckNvbmZpZy56b29tLnZhbHVlIC8gYXBwU3RhdGUuZ3JpZFNpemUsXG4gICAgICApICpcbiAgICAgICAgYXBwU3RhdGUuZ3JpZFNpemUgK1xuICAgICAgICAocmVuZGVyQ29uZmlnLnNjcm9sbFggJSBhcHBTdGF0ZS5ncmlkU2l6ZSksXG4gICAgICAtTWF0aC5jZWlsKFxuICAgICAgICB6b29tVHJhbnNsYXRpb25ZIC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWUgLyBhcHBTdGF0ZS5ncmlkU2l6ZSxcbiAgICAgICkgKlxuICAgICAgICBhcHBTdGF0ZS5ncmlkU2l6ZSArXG4gICAgICAgIChyZW5kZXJDb25maWcuc2Nyb2xsWSAlIGFwcFN0YXRlLmdyaWRTaXplKSxcbiAgICAgIG5vcm1hbGl6ZWRDYW52YXNXaWR0aCAvIHJlbmRlckNvbmZpZy56b29tLnZhbHVlLFxuICAgICAgbm9ybWFsaXplZENhbnZhc0hlaWdodCAvIHJlbmRlckNvbmZpZy56b29tLnZhbHVlLFxuICAgICk7XG4gIH1cblxuICAvLyBQYWludCB2aXNpYmxlIGVsZW1lbnRzXG4gIGNvbnN0IHZpc2libGVFbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcigoZWxlbWVudCkgPT5cbiAgICBpc1Zpc2libGVFbGVtZW50KGVsZW1lbnQsIG5vcm1hbGl6ZWRDYW52YXNXaWR0aCwgbm9ybWFsaXplZENhbnZhc0hlaWdodCwge1xuICAgICAgem9vbTogcmVuZGVyQ29uZmlnLnpvb20sXG4gICAgICBvZmZzZXRMZWZ0OiBhcHBTdGF0ZS5vZmZzZXRMZWZ0LFxuICAgICAgb2Zmc2V0VG9wOiBhcHBTdGF0ZS5vZmZzZXRUb3AsXG4gICAgICBzY3JvbGxYOiByZW5kZXJDb25maWcuc2Nyb2xsWCxcbiAgICAgIHNjcm9sbFk6IHJlbmRlckNvbmZpZy5zY3JvbGxZLFxuICAgIH0pLFxuICApO1xuXG4gIHZpc2libGVFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlckVsZW1lbnQoZWxlbWVudCwgcmMsIGNvbnRleHQsIHJlbmRlckNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9KTtcblxuICBpZiAoYXBwU3RhdGUuZWRpdGluZ0xpbmVhckVsZW1lbnQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gTGluZWFyRWxlbWVudEVkaXRvci5nZXRFbGVtZW50KFxuICAgICAgYXBwU3RhdGUuZWRpdGluZ0xpbmVhckVsZW1lbnQuZWxlbWVudElkLFxuICAgICk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlbmRlckxpbmVhclBvaW50SGFuZGxlcyhjb250ZXh0LCBhcHBTdGF0ZSwgcmVuZGVyQ29uZmlnLCBlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBQYWludCBzZWxlY3Rpb24gZWxlbWVudFxuICBpZiAoc2VsZWN0aW9uRWxlbWVudCkge1xuICAgIHRyeSB7XG4gICAgICByZW5kZXJFbGVtZW50KHNlbGVjdGlvbkVsZW1lbnQsIHJjLCBjb250ZXh0LCByZW5kZXJDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0JpbmRpbmdFbmFibGVkKGFwcFN0YXRlKSkge1xuICAgIGFwcFN0YXRlLnN1Z2dlc3RlZEJpbmRpbmdzXG4gICAgICAuZmlsdGVyKChiaW5kaW5nKSA9PiBiaW5kaW5nICE9IG51bGwpXG4gICAgICAuZm9yRWFjaCgoc3VnZ2VzdGVkQmluZGluZykgPT4ge1xuICAgICAgICByZW5kZXJCaW5kaW5nSGlnaGxpZ2h0KGNvbnRleHQsIHJlbmRlckNvbmZpZywgc3VnZ2VzdGVkQmluZGluZyEpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBQYWludCBzZWxlY3RlZCBlbGVtZW50c1xuICBpZiAoXG4gICAgcmVuZGVyU2VsZWN0aW9uICYmXG4gICAgIWFwcFN0YXRlLm11bHRpRWxlbWVudCAmJlxuICAgICFhcHBTdGF0ZS5lZGl0aW5nTGluZWFyRWxlbWVudFxuICApIHtcbiAgICBjb25zdCBzZWxlY3Rpb25zID0gZWxlbWVudHMucmVkdWNlKChhY2MsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbG9ycyA9IFtdO1xuICAgICAgLy8gbG9jYWwgdXNlclxuICAgICAgaWYgKFxuICAgICAgICBhcHBTdGF0ZS5zZWxlY3RlZEVsZW1lbnRJZHNbZWxlbWVudC5pZF0gJiZcbiAgICAgICAgIWlzU2VsZWN0ZWRWaWFHcm91cChhcHBTdGF0ZSwgZWxlbWVudClcbiAgICAgICkge1xuICAgICAgICBzZWxlY3Rpb25Db2xvcnMucHVzaChvYy5ibGFjayk7XG4gICAgICB9XG4gICAgICAvLyByZW1vdGUgdXNlcnNcbiAgICAgIGlmIChyZW5kZXJDb25maWcucmVtb3RlU2VsZWN0ZWRFbGVtZW50SWRzW2VsZW1lbnQuaWRdKSB7XG4gICAgICAgIHNlbGVjdGlvbkNvbG9ycy5wdXNoKFxuICAgICAgICAgIC4uLnJlbmRlckNvbmZpZy5yZW1vdGVTZWxlY3RlZEVsZW1lbnRJZHNbZWxlbWVudC5pZF0ubWFwKFxuICAgICAgICAgICAgKHNvY2tldElkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBpY3R1cmUgPSBhcHBTdGF0ZS5jb2xsYWJvcmF0b3JzLmdldChzb2NrZXRJZCk/LnBpY3R1cmU7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYmFja2dyb3VuZCB9ID0gZ2V0Q2xpZW50Q29sb3JzKFxuICAgICAgICAgICAgICAgIHBpY3R1cmUgfHwgc29ja2V0SWQsXG4gICAgICAgICAgICAgICAgYXBwU3RhdGUsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiBiYWNrZ3JvdW5kO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHNlbGVjdGlvbkNvbG9ycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgW2VsZW1lbnRYMSwgZWxlbWVudFkxLCBlbGVtZW50WDIsIGVsZW1lbnRZMl0gPVxuICAgICAgICAgIGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhlbGVtZW50KTtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIGFuZ2xlOiBlbGVtZW50LmFuZ2xlLFxuICAgICAgICAgIGVsZW1lbnRYMSxcbiAgICAgICAgICBlbGVtZW50WTEsXG4gICAgICAgICAgZWxlbWVudFgyLFxuICAgICAgICAgIGVsZW1lbnRZMixcbiAgICAgICAgICBzZWxlY3Rpb25Db2xvcnMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyB7IGFuZ2xlOiBudW1iZXI7IGVsZW1lbnRYMTogbnVtYmVyOyBlbGVtZW50WTE6IG51bWJlcjsgZWxlbWVudFgyOiBudW1iZXI7IGVsZW1lbnRZMjogbnVtYmVyOyBzZWxlY3Rpb25Db2xvcnM6IHN0cmluZ1tdIH1bXSk7XG5cbiAgICBjb25zdCBhZGRTZWxlY3Rpb25Gb3JHcm91cElkID0gKGdyb3VwSWQ6IEdyb3VwSWQpID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwRWxlbWVudHMgPSBnZXRFbGVtZW50c0luR3JvdXAoZWxlbWVudHMsIGdyb3VwSWQpO1xuICAgICAgY29uc3QgW2VsZW1lbnRYMSwgZWxlbWVudFkxLCBlbGVtZW50WDIsIGVsZW1lbnRZMl0gPVxuICAgICAgICBnZXRDb21tb25Cb3VuZHMoZ3JvdXBFbGVtZW50cyk7XG4gICAgICBzZWxlY3Rpb25zLnB1c2goe1xuICAgICAgICBhbmdsZTogMCxcbiAgICAgICAgZWxlbWVudFgxLFxuICAgICAgICBlbGVtZW50WDIsXG4gICAgICAgIGVsZW1lbnRZMSxcbiAgICAgICAgZWxlbWVudFkyLFxuICAgICAgICBzZWxlY3Rpb25Db2xvcnM6IFtvYy5ibGFja10sXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBncm91cElkIG9mIGdldFNlbGVjdGVkR3JvdXBJZHMoYXBwU3RhdGUpKSB7XG4gICAgICAvLyBUT0RPOiBzdXBwb3J0IG11bHRpcGxheWVyIHNlbGVjdGVkIGdyb3VwIElEc1xuICAgICAgYWRkU2VsZWN0aW9uRm9yR3JvdXBJZChncm91cElkKTtcbiAgICB9XG5cbiAgICBpZiAoYXBwU3RhdGUuZWRpdGluZ0dyb3VwSWQpIHtcbiAgICAgIGFkZFNlbGVjdGlvbkZvckdyb3VwSWQoYXBwU3RhdGUuZWRpdGluZ0dyb3VwSWQpO1xuICAgIH1cblxuICAgIHNlbGVjdGlvbnMuZm9yRWFjaCgoc2VsZWN0aW9uKSA9PlxuICAgICAgcmVuZGVyU2VsZWN0aW9uQm9yZGVyKGNvbnRleHQsIHJlbmRlckNvbmZpZywgc2VsZWN0aW9uKSxcbiAgICApO1xuXG4gICAgY29uc3QgbG9jYWxseVNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGVsZW1lbnRzLCBhcHBTdGF0ZSk7XG5cbiAgICAvLyBQYWludCByZXNpemUgdHJhbnNmb3JtSGFuZGxlc1xuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKHJlbmRlckNvbmZpZy5zY3JvbGxYLCByZW5kZXJDb25maWcuc2Nyb2xsWSk7XG4gICAgaWYgKGxvY2FsbHlTZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBvYy53aGl0ZTtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybUhhbmRsZXMgPSBnZXRUcmFuc2Zvcm1IYW5kbGVzKFxuICAgICAgICBsb2NhbGx5U2VsZWN0ZWRFbGVtZW50c1swXSxcbiAgICAgICAgcmVuZGVyQ29uZmlnLnpvb20sXG4gICAgICAgIFwibW91c2VcIiwgLy8gd2hlbiB3ZSByZW5kZXIgd2UgZG9uJ3Qga25vdyB3aGljaCBwb2ludGVyIHR5cGUgc28gdXNlIG1vdXNlXG4gICAgICApO1xuICAgICAgaWYgKCFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQpIHtcbiAgICAgICAgcmVuZGVyVHJhbnNmb3JtSGFuZGxlcyhcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHJlbmRlckNvbmZpZyxcbiAgICAgICAgICB0cmFuc2Zvcm1IYW5kbGVzLFxuICAgICAgICAgIGxvY2FsbHlTZWxlY3RlZEVsZW1lbnRzWzBdLmFuZ2xlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG9jYWxseVNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMSAmJiAhYXBwU3RhdGUuaXNSb3RhdGluZykge1xuICAgICAgY29uc3QgZGFzaGVkTGluZVBhZGRpbmcgPSA0IC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWU7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IG9jLndoaXRlO1xuICAgICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldENvbW1vbkJvdW5kcyhsb2NhbGx5U2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgICBjb25zdCBpbml0aWFsTGluZURhc2ggPSBjb250ZXh0LmdldExpbmVEYXNoKCk7XG4gICAgICBjb250ZXh0LnNldExpbmVEYXNoKFsyIC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWVdKTtcbiAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IGNvbnRleHQubGluZVdpZHRoO1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSAxIC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWU7XG4gICAgICBzdHJva2VSZWN0V2l0aFJvdGF0aW9uKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB4MSAtIGRhc2hlZExpbmVQYWRkaW5nLFxuICAgICAgICB5MSAtIGRhc2hlZExpbmVQYWRkaW5nLFxuICAgICAgICB4MiAtIHgxICsgZGFzaGVkTGluZVBhZGRpbmcgKiAyLFxuICAgICAgICB5MiAtIHkxICsgZGFzaGVkTGluZVBhZGRpbmcgKiAyLFxuICAgICAgICAoeDEgKyB4MikgLyAyLFxuICAgICAgICAoeTEgKyB5MikgLyAyLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChpbml0aWFsTGluZURhc2gpO1xuICAgICAgY29uc3QgdHJhbnNmb3JtSGFuZGxlcyA9IGdldFRyYW5zZm9ybUhhbmRsZXNGcm9tQ29vcmRzKFxuICAgICAgICBbeDEsIHkxLCB4MiwgeTJdLFxuICAgICAgICAwLFxuICAgICAgICByZW5kZXJDb25maWcuem9vbSxcbiAgICAgICAgXCJtb3VzZVwiLFxuICAgICAgICBPTUlUX1NJREVTX0ZPUl9NVUxUSVBMRV9FTEVNRU5UUyxcbiAgICAgICk7XG4gICAgICByZW5kZXJUcmFuc2Zvcm1IYW5kbGVzKGNvbnRleHQsIHJlbmRlckNvbmZpZywgdHJhbnNmb3JtSGFuZGxlcywgMCk7XG4gICAgfVxuICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICB9XG5cbiAgLy8gUmVzZXQgem9vbVxuICBjb250ZXh0LnJlc3RvcmUoKTtcblxuICAvLyBQYWludCByZW1vdGUgcG9pbnRlcnNcbiAgZm9yIChjb25zdCBjbGllbnRJZCBpbiByZW5kZXJDb25maWcucmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzKSB7XG4gICAgbGV0IHsgeCwgeSB9ID0gcmVuZGVyQ29uZmlnLnJlbW90ZVBvaW50ZXJWaWV3cG9ydENvb3Jkc1tjbGllbnRJZF07XG4gICAgeCAtPSBhcHBTdGF0ZS5vZmZzZXRMZWZ0O1xuICAgIHkgLT0gYXBwU3RhdGUub2Zmc2V0VG9wO1xuXG4gICAgY29uc3Qgd2lkdGggPSA5O1xuICAgIGNvbnN0IGhlaWdodCA9IDE0O1xuXG4gICAgY29uc3QgaXNPdXRPZkJvdW5kcyA9XG4gICAgICB4IDwgMCB8fFxuICAgICAgeCA+IG5vcm1hbGl6ZWRDYW52YXNXaWR0aCAtIHdpZHRoIHx8XG4gICAgICB5IDwgMCB8fFxuICAgICAgeSA+IG5vcm1hbGl6ZWRDYW52YXNIZWlnaHQgLSBoZWlnaHQ7XG5cbiAgICB4ID0gTWF0aC5tYXgoeCwgMCk7XG4gICAgeCA9IE1hdGgubWluKHgsIG5vcm1hbGl6ZWRDYW52YXNXaWR0aCAtIHdpZHRoKTtcbiAgICB5ID0gTWF0aC5tYXgoeSwgMCk7XG4gICAgeSA9IE1hdGgubWluKHksIG5vcm1hbGl6ZWRDYW52YXNIZWlnaHQgLSBoZWlnaHQpO1xuXG4gICAgY29uc3QgcGljdHVyZSA9IGFwcFN0YXRlLmNvbGxhYm9yYXRvcnMuZ2V0KGNsaWVudElkKT8ucGljdHVyZTtcbiAgICBjb25zdCB7IGJhY2tncm91bmQsIHN0cm9rZSB9ID0gZ2V0Q2xpZW50Q29sb3JzKFxuICAgICAgcGljdHVyZSB8fCBjbGllbnRJZCxcbiAgICAgIGFwcFN0YXRlLFxuICAgICk7XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gc3Ryb2tlO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gYmFja2dyb3VuZDtcblxuICAgIGNvbnN0IHVzZXJTdGF0ZSA9IHJlbmRlckNvbmZpZy5yZW1vdGVQb2ludGVyVXNlclN0YXRlc1tjbGllbnRJZF07XG4gICAgaWYgKGlzT3V0T2ZCb3VuZHMgfHwgdXNlclN0YXRlID09PSBVc2VySWRsZVN0YXRlLkFXQVkpIHtcbiAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSAwLjQ4O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHJlbmRlckNvbmZpZy5yZW1vdGVQb2ludGVyQnV0dG9uICYmXG4gICAgICByZW5kZXJDb25maWcucmVtb3RlUG9pbnRlckJ1dHRvbltjbGllbnRJZF0gPT09IFwiZG93blwiXG4gICAgKSB7XG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgY29udGV4dC5hcmMoeCwgeSwgMTUsIDAsIDIgKiBNYXRoLlBJLCBmYWxzZSk7XG4gICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDM7XG4gICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gXCIjZmZmZmZmODhcIjtcbiAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgY29udGV4dC5hcmMoeCwgeSwgMTUsIDAsIDIgKiBNYXRoLlBJLCBmYWxzZSk7XG4gICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7XG4gICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gc3Ryb2tlO1xuICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBjb250ZXh0Lm1vdmVUbyh4LCB5KTtcbiAgICBjb250ZXh0LmxpbmVUbyh4ICsgMSwgeSArIDE0KTtcbiAgICBjb250ZXh0LmxpbmVUbyh4ICsgNCwgeSArIDkpO1xuICAgIGNvbnRleHQubGluZVRvKHggKyA5LCB5ICsgMTApO1xuICAgIGNvbnRleHQubGluZVRvKHgsIHkpO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuc3Ryb2tlKCk7XG5cbiAgICBjb25zdCB1c2VybmFtZSA9IHJlbmRlckNvbmZpZy5yZW1vdGVQb2ludGVyVXNlcm5hbWVzW2NsaWVudElkXTtcblxuICAgIGxldCBpZGxlU3RhdGUgPSBcIlwiO1xuICAgIGlmICh1c2VyU3RhdGUgPT09IFVzZXJJZGxlU3RhdGUuQVdBWSkge1xuICAgICAgaWRsZVN0YXRlID0gaGFzRW1vamlTdXBwb3J0ID8gXCLimqvvuI9cIiA6IGAgKCR7VXNlcklkbGVTdGF0ZS5BV0FZfSlgO1xuICAgIH0gZWxzZSBpZiAodXNlclN0YXRlID09PSBVc2VySWRsZVN0YXRlLklETEUpIHtcbiAgICAgIGlkbGVTdGF0ZSA9IGhhc0Vtb2ppU3VwcG9ydCA/IFwi8J+SpFwiIDogYCAoJHtVc2VySWRsZVN0YXRlLklETEV9KWA7XG4gICAgfSBlbHNlIGlmICh1c2VyU3RhdGUgPT09IFVzZXJJZGxlU3RhdGUuQUNUSVZFKSB7XG4gICAgICBpZGxlU3RhdGUgPSBoYXNFbW9qaVN1cHBvcnQgPyBcIvCfn6JcIiA6IFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcm5hbWVBbmRJZGxlU3RhdGUgPSBgJHtcbiAgICAgIHVzZXJuYW1lID8gYCR7dXNlcm5hbWV9IGAgOiBcIlwiXG4gICAgfSR7aWRsZVN0YXRlfWA7XG5cbiAgICBpZiAoIWlzT3V0T2ZCb3VuZHMgJiYgdXNlcm5hbWVBbmRJZGxlU3RhdGUpIHtcbiAgICAgIGNvbnN0IG9mZnNldFggPSB4ICsgd2lkdGg7XG4gICAgICBjb25zdCBvZmZzZXRZID0geSArIGhlaWdodDtcbiAgICAgIGNvbnN0IHBhZGRpbmdIb3Jpem9udGFsID0gNDtcbiAgICAgIGNvbnN0IHBhZGRpbmdWZXJ0aWNhbCA9IDQ7XG4gICAgICBjb25zdCBtZWFzdXJlID0gY29udGV4dC5tZWFzdXJlVGV4dCh1c2VybmFtZUFuZElkbGVTdGF0ZSk7XG4gICAgICBjb25zdCBtZWFzdXJlSGVpZ2h0ID1cbiAgICAgICAgbWVhc3VyZS5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQgKyBtZWFzdXJlLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50O1xuXG4gICAgICAvLyBCb3JkZXJcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gc3Ryb2tlO1xuICAgICAgY29udGV4dC5maWxsUmVjdChcbiAgICAgICAgb2Zmc2V0WCAtIDEsXG4gICAgICAgIG9mZnNldFkgLSAxLFxuICAgICAgICBtZWFzdXJlLndpZHRoICsgMiAqIHBhZGRpbmdIb3Jpem9udGFsICsgMixcbiAgICAgICAgbWVhc3VyZUhlaWdodCArIDIgKiBwYWRkaW5nVmVydGljYWwgKyAyLFxuICAgICAgKTtcbiAgICAgIC8vIEJhY2tncm91bmRcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gYmFja2dyb3VuZDtcbiAgICAgIGNvbnRleHQuZmlsbFJlY3QoXG4gICAgICAgIG9mZnNldFgsXG4gICAgICAgIG9mZnNldFksXG4gICAgICAgIG1lYXN1cmUud2lkdGggKyAyICogcGFkZGluZ0hvcml6b250YWwsXG4gICAgICAgIG1lYXN1cmVIZWlnaHQgKyAyICogcGFkZGluZ1ZlcnRpY2FsLFxuICAgICAgKTtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gb2Mud2hpdGU7XG5cbiAgICAgIGNvbnRleHQuZmlsbFRleHQoXG4gICAgICAgIHVzZXJuYW1lQW5kSWRsZVN0YXRlLFxuICAgICAgICBvZmZzZXRYICsgcGFkZGluZ0hvcml6b250YWwsXG4gICAgICAgIG9mZnNldFkgKyBwYWRkaW5nVmVydGljYWwgKyBtZWFzdXJlLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG5cbiAgLy8gUGFpbnQgc2Nyb2xsYmFyc1xuICBsZXQgc2Nyb2xsQmFycztcbiAgaWYgKHJlbmRlclNjcm9sbGJhcnMpIHtcbiAgICBzY3JvbGxCYXJzID0gZ2V0U2Nyb2xsQmFycyhcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgbm9ybWFsaXplZENhbnZhc1dpZHRoLFxuICAgICAgbm9ybWFsaXplZENhbnZhc0hlaWdodCxcbiAgICAgIHJlbmRlckNvbmZpZyxcbiAgICApO1xuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBTQ1JPTExCQVJfQ09MT1I7XG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9IFwicmdiYSgyNTUsMjU1LDI1NSwwLjgpXCI7XG4gICAgW3Njcm9sbEJhcnMuaG9yaXpvbnRhbCwgc2Nyb2xsQmFycy52ZXJ0aWNhbF0uZm9yRWFjaCgoc2Nyb2xsQmFyKSA9PiB7XG4gICAgICBpZiAoc2Nyb2xsQmFyKSB7XG4gICAgICAgIHJvdW5kUmVjdChcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHNjcm9sbEJhci54LFxuICAgICAgICAgIHNjcm9sbEJhci55LFxuICAgICAgICAgIHNjcm9sbEJhci53aWR0aCxcbiAgICAgICAgICBzY3JvbGxCYXIuaGVpZ2h0LFxuICAgICAgICAgIFNDUk9MTEJBUl9XSURUSCAvIDIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG4gIH1cblxuICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgcmV0dXJuIHsgYXRMZWFzdE9uZVZpc2libGVFbGVtZW50OiB2aXNpYmxlRWxlbWVudHMubGVuZ3RoID4gMCwgc2Nyb2xsQmFycyB9O1xufTtcblxuY29uc3QgcmVuZGVyVHJhbnNmb3JtSGFuZGxlcyA9IChcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbiAgdHJhbnNmb3JtSGFuZGxlczogVHJhbnNmb3JtSGFuZGxlcyxcbiAgYW5nbGU6IG51bWJlcixcbik6IHZvaWQgPT4ge1xuICBPYmplY3Qua2V5cyh0cmFuc2Zvcm1IYW5kbGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1IYW5kbGUgPSB0cmFuc2Zvcm1IYW5kbGVzW2tleSBhcyBUcmFuc2Zvcm1IYW5kbGVUeXBlXTtcbiAgICBpZiAodHJhbnNmb3JtSGFuZGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSAxIC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWU7XG4gICAgICBpZiAoa2V5ID09PSBcInJvdGF0aW9uXCIpIHtcbiAgICAgICAgZmlsbENpcmNsZShcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZVswXSArIHRyYW5zZm9ybUhhbmRsZVsyXSAvIDIsXG4gICAgICAgICAgdHJhbnNmb3JtSGFuZGxlWzFdICsgdHJhbnNmb3JtSGFuZGxlWzNdIC8gMixcbiAgICAgICAgICB0cmFuc2Zvcm1IYW5kbGVbMl0gLyAyLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Ryb2tlUmVjdFdpdGhSb3RhdGlvbihcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZVswXSxcbiAgICAgICAgICB0cmFuc2Zvcm1IYW5kbGVbMV0sXG4gICAgICAgICAgdHJhbnNmb3JtSGFuZGxlWzJdLFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZVszXSxcbiAgICAgICAgICB0cmFuc2Zvcm1IYW5kbGVbMF0gKyB0cmFuc2Zvcm1IYW5kbGVbMl0gLyAyLFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZVsxXSArIHRyYW5zZm9ybUhhbmRsZVszXSAvIDIsXG4gICAgICAgICAgYW5nbGUsXG4gICAgICAgICAgdHJ1ZSwgLy8gZmlsbCBiZWZvcmUgc3Ryb2tlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgcmVuZGVyU2VsZWN0aW9uQm9yZGVyID0gKFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHJlbmRlckNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICBlbGVtZW50UHJvcGVydGllczoge1xuICAgIGFuZ2xlOiBudW1iZXI7XG4gICAgZWxlbWVudFgxOiBudW1iZXI7XG4gICAgZWxlbWVudFkxOiBudW1iZXI7XG4gICAgZWxlbWVudFgyOiBudW1iZXI7XG4gICAgZWxlbWVudFkyOiBudW1iZXI7XG4gICAgc2VsZWN0aW9uQ29sb3JzOiBzdHJpbmdbXTtcbiAgfSxcbikgPT4ge1xuICBjb25zdCB7IGFuZ2xlLCBlbGVtZW50WDEsIGVsZW1lbnRZMSwgZWxlbWVudFgyLCBlbGVtZW50WTIsIHNlbGVjdGlvbkNvbG9ycyB9ID1cbiAgICBlbGVtZW50UHJvcGVydGllcztcbiAgY29uc3QgZWxlbWVudFdpZHRoID0gZWxlbWVudFgyIC0gZWxlbWVudFgxO1xuICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gZWxlbWVudFkyIC0gZWxlbWVudFkxO1xuXG4gIGNvbnN0IGRhc2hlZExpbmVQYWRkaW5nID0gNCAvIHJlbmRlckNvbmZpZy56b29tLnZhbHVlO1xuICBjb25zdCBkYXNoV2lkdGggPSA4IC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWU7XG4gIGNvbnN0IHNwYWNlV2lkdGggPSA0IC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWU7XG5cbiAgY29udGV4dC5zYXZlKCk7XG4gIGNvbnRleHQudHJhbnNsYXRlKHJlbmRlckNvbmZpZy5zY3JvbGxYLCByZW5kZXJDb25maWcuc2Nyb2xsWSk7XG4gIGNvbnRleHQubGluZVdpZHRoID0gMSAvIHJlbmRlckNvbmZpZy56b29tLnZhbHVlO1xuXG4gIGNvbnN0IGNvdW50ID0gc2VsZWN0aW9uQ29sb3JzLmxlbmd0aDtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7XG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9IHNlbGVjdGlvbkNvbG9yc1tpbmRleF07XG4gICAgY29udGV4dC5zZXRMaW5lRGFzaChbXG4gICAgICBkYXNoV2lkdGgsXG4gICAgICBzcGFjZVdpZHRoICsgKGRhc2hXaWR0aCArIHNwYWNlV2lkdGgpICogKGNvdW50IC0gMSksXG4gICAgXSk7XG4gICAgY29udGV4dC5saW5lRGFzaE9mZnNldCA9IChkYXNoV2lkdGggKyBzcGFjZVdpZHRoKSAqIGluZGV4O1xuICAgIHN0cm9rZVJlY3RXaXRoUm90YXRpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgZWxlbWVudFgxIC0gZGFzaGVkTGluZVBhZGRpbmcsXG4gICAgICBlbGVtZW50WTEgLSBkYXNoZWRMaW5lUGFkZGluZyxcbiAgICAgIGVsZW1lbnRXaWR0aCArIGRhc2hlZExpbmVQYWRkaW5nICogMixcbiAgICAgIGVsZW1lbnRIZWlnaHQgKyBkYXNoZWRMaW5lUGFkZGluZyAqIDIsXG4gICAgICBlbGVtZW50WDEgKyBlbGVtZW50V2lkdGggLyAyLFxuICAgICAgZWxlbWVudFkxICsgZWxlbWVudEhlaWdodCAvIDIsXG4gICAgICBhbmdsZSxcbiAgICApO1xuICB9XG4gIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuY29uc3QgcmVuZGVyQmluZGluZ0hpZ2hsaWdodCA9IChcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyxcbiAgc3VnZ2VzdGVkQmluZGluZzogU3VnZ2VzdGVkQmluZGluZyxcbikgPT4ge1xuICBjb25zdCByZW5kZXJIaWdobGlnaHQgPSBBcnJheS5pc0FycmF5KHN1Z2dlc3RlZEJpbmRpbmcpXG4gICAgPyByZW5kZXJCaW5kaW5nSGlnaGxpZ2h0Rm9yU3VnZ2VzdGVkUG9pbnRCaW5kaW5nXG4gICAgOiByZW5kZXJCaW5kaW5nSGlnaGxpZ2h0Rm9yQmluZGFibGVFbGVtZW50O1xuXG4gIGNvbnRleHQuc2F2ZSgpO1xuICBjb250ZXh0LnRyYW5zbGF0ZShyZW5kZXJDb25maWcuc2Nyb2xsWCwgcmVuZGVyQ29uZmlnLnNjcm9sbFkpO1xuICByZW5kZXJIaWdobGlnaHQoY29udGV4dCwgc3VnZ2VzdGVkQmluZGluZyBhcyBhbnkpO1xuXG4gIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuY29uc3QgcmVuZGVyQmluZGluZ0hpZ2hsaWdodEZvckJpbmRhYmxlRWxlbWVudCA9IChcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICBlbGVtZW50OiBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50LFxuKSA9PiB7XG4gIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZWxlbWVudCk7XG4gIGNvbnN0IHdpZHRoID0geDIgLSB4MTtcbiAgY29uc3QgaGVpZ2h0ID0geTIgLSB5MTtcbiAgY29uc3QgdGhyZXNob2xkID0gbWF4QmluZGluZ0dhcChlbGVtZW50LCB3aWR0aCwgaGVpZ2h0KTtcblxuICAvLyBTbyB0aGF0IHdlIGRvbid0IG92ZXJsYXAgdGhlIGVsZW1lbnQgaXRzZWxmXG4gIGNvbnN0IHN0cm9rZU9mZnNldCA9IDQ7XG4gIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsLjA1KVwiO1xuICBjb250ZXh0LmxpbmVXaWR0aCA9IHRocmVzaG9sZCAtIHN0cm9rZU9mZnNldDtcbiAgY29uc3QgcGFkZGluZyA9IHN0cm9rZU9mZnNldCAvIDIgKyB0aHJlc2hvbGQgLyAyO1xuXG4gIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBcInJlY3RhbmdsZVwiOlxuICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICBzdHJva2VSZWN0V2l0aFJvdGF0aW9uKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB4MSAtIHBhZGRpbmcsXG4gICAgICAgIHkxIC0gcGFkZGluZyxcbiAgICAgICAgd2lkdGggKyBwYWRkaW5nICogMixcbiAgICAgICAgaGVpZ2h0ICsgcGFkZGluZyAqIDIsXG4gICAgICAgIHgxICsgd2lkdGggLyAyLFxuICAgICAgICB5MSArIGhlaWdodCAvIDIsXG4gICAgICAgIGVsZW1lbnQuYW5nbGUsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRpYW1vbmRcIjpcbiAgICAgIGNvbnN0IHNpZGUgPSBNYXRoLmh5cG90KHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgd1BhZGRpbmcgPSAocGFkZGluZyAqIHNpZGUpIC8gaGVpZ2h0O1xuICAgICAgY29uc3QgaFBhZGRpbmcgPSAocGFkZGluZyAqIHNpZGUpIC8gd2lkdGg7XG4gICAgICBzdHJva2VEaWFtb25kV2l0aFJvdGF0aW9uKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB3aWR0aCArIHdQYWRkaW5nICogMixcbiAgICAgICAgaGVpZ2h0ICsgaFBhZGRpbmcgKiAyLFxuICAgICAgICB4MSArIHdpZHRoIC8gMixcbiAgICAgICAgeTEgKyBoZWlnaHQgLyAyLFxuICAgICAgICBlbGVtZW50LmFuZ2xlLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJlbGxpcHNlXCI6XG4gICAgICBzdHJva2VFbGxpcHNlV2l0aFJvdGF0aW9uKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB3aWR0aCArIHBhZGRpbmcgKiAyLFxuICAgICAgICBoZWlnaHQgKyBwYWRkaW5nICogMixcbiAgICAgICAgeDEgKyB3aWR0aCAvIDIsXG4gICAgICAgIHkxICsgaGVpZ2h0IC8gMixcbiAgICAgICAgZWxlbWVudC5hbmdsZSxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgfVxufTtcblxuY29uc3QgcmVuZGVyQmluZGluZ0hpZ2hsaWdodEZvclN1Z2dlc3RlZFBvaW50QmluZGluZyA9IChcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICBzdWdnZXN0ZWRCaW5kaW5nOiBTdWdnZXN0ZWRQb2ludEJpbmRpbmcsXG4pID0+IHtcbiAgY29uc3QgW2VsZW1lbnQsIHN0YXJ0T3JFbmQsIGJpbmRhYmxlRWxlbWVudF0gPSBzdWdnZXN0ZWRCaW5kaW5nO1xuXG4gIGNvbnN0IHRocmVzaG9sZCA9IG1heEJpbmRpbmdHYXAoXG4gICAgYmluZGFibGVFbGVtZW50LFxuICAgIGJpbmRhYmxlRWxlbWVudC53aWR0aCxcbiAgICBiaW5kYWJsZUVsZW1lbnQuaGVpZ2h0LFxuICApO1xuXG4gIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMClcIjtcbiAgY29udGV4dC5maWxsU3R5bGUgPSBcInJnYmEoMCwwLDAsLjA1KVwiO1xuXG4gIGNvbnN0IHBvaW50SW5kaWNlcyA9XG4gICAgc3RhcnRPckVuZCA9PT0gXCJib3RoXCIgPyBbMCwgLTFdIDogc3RhcnRPckVuZCA9PT0gXCJzdGFydFwiID8gWzBdIDogWy0xXTtcbiAgcG9pbnRJbmRpY2VzLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgY29uc3QgW3gsIHldID0gTGluZWFyRWxlbWVudEVkaXRvci5nZXRQb2ludEF0SW5kZXhHbG9iYWxDb29yZGluYXRlcyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICBpbmRleCxcbiAgICApO1xuICAgIGZpbGxDaXJjbGUoY29udGV4dCwgeCwgeSwgdGhyZXNob2xkKTtcbiAgfSk7XG59O1xuXG5jb25zdCBpc1Zpc2libGVFbGVtZW50ID0gKFxuICBlbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCxcbiAgY2FudmFzV2lkdGg6IG51bWJlcixcbiAgY2FudmFzSGVpZ2h0OiBudW1iZXIsXG4gIHZpZXdUcmFuc2Zvcm1hdGlvbnM6IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50Qm91bmRzKGVsZW1lbnQpOyAvLyBzY2VuZSBjb29yZGluYXRlc1xuICBjb25zdCB0b3BMZWZ0U2NlbmVDb29yZHMgPSB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMoXG4gICAge1xuICAgICAgY2xpZW50WDogdmlld1RyYW5zZm9ybWF0aW9ucy5vZmZzZXRMZWZ0LFxuICAgICAgY2xpZW50WTogdmlld1RyYW5zZm9ybWF0aW9ucy5vZmZzZXRUb3AsXG4gICAgfSxcbiAgICB2aWV3VHJhbnNmb3JtYXRpb25zLFxuICApO1xuICBjb25zdCBib3R0b21SaWdodFNjZW5lQ29vcmRzID0gdmlld3BvcnRDb29yZHNUb1NjZW5lQ29vcmRzKFxuICAgIHtcbiAgICAgIGNsaWVudFg6IHZpZXdUcmFuc2Zvcm1hdGlvbnMub2Zmc2V0TGVmdCArIGNhbnZhc1dpZHRoLFxuICAgICAgY2xpZW50WTogdmlld1RyYW5zZm9ybWF0aW9ucy5vZmZzZXRUb3AgKyBjYW52YXNIZWlnaHQsXG4gICAgfSxcbiAgICB2aWV3VHJhbnNmb3JtYXRpb25zLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgdG9wTGVmdFNjZW5lQ29vcmRzLnggPD0geDIgJiZcbiAgICB0b3BMZWZ0U2NlbmVDb29yZHMueSA8PSB5MiAmJlxuICAgIGJvdHRvbVJpZ2h0U2NlbmVDb29yZHMueCA+PSB4MSAmJlxuICAgIGJvdHRvbVJpZ2h0U2NlbmVDb29yZHMueSA+PSB5MVxuICApO1xufTtcblxuLy8gVGhpcyBzaG91bGQgYmUgb25seSBjYWxsZWQgZm9yIGV4cG9ydGluZyBwdXJwb3Nlc1xuZXhwb3J0IGNvbnN0IHJlbmRlclNjZW5lVG9TdmcgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgcnN2ZzogUm91Z2hTVkcsXG4gIHN2Z1Jvb3Q6IFNWR0VsZW1lbnQsXG4gIGZpbGVzOiBCaW5hcnlGaWxlcyxcbiAge1xuICAgIG9mZnNldFggPSAwLFxuICAgIG9mZnNldFkgPSAwLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZSA9IGZhbHNlLFxuICB9OiB7XG4gICAgb2Zmc2V0WD86IG51bWJlcjtcbiAgICBvZmZzZXRZPzogbnVtYmVyO1xuICAgIGV4cG9ydFdpdGhEYXJrTW9kZT86IGJvb2xlYW47XG4gIH0gPSB7fSxcbikgPT4ge1xuICBpZiAoIXN2Z1Jvb3QpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gcmVuZGVyIGVsZW1lbnRzXG4gIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQuaXNEZWxldGVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZW5kZXJFbGVtZW50VG9TdmcoXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICByc3ZnLFxuICAgICAgICAgIHN2Z1Jvb3QsXG4gICAgICAgICAgZmlsZXMsXG4gICAgICAgICAgZWxlbWVudC54ICsgb2Zmc2V0WCxcbiAgICAgICAgICBlbGVtZW50LnkgKyBvZmZzZXRZLFxuICAgICAgICAgIGV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../renderer/renderScene.ts\n");
|
|
2586
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"renderScene\": () => (/* binding */ renderScene),\n/* harmony export */ \"renderSceneToSvg\": () => (/* binding */ renderSceneToSvg)\n/* harmony export */ });\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _roundRect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./roundRect */ \"../../renderer/roundRect.ts\");\n/* harmony import */ var _scene_scrollbars__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../scene/scrollbars */ \"../../scene/scrollbars.ts\");\n/* harmony import */ var _scene_selection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../scene/selection */ \"../../scene/selection.ts\");\n/* harmony import */ var _renderElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./renderElement */ \"../../renderer/renderElement.ts\");\n/* harmony import */ var _clients__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../clients */ \"../../clients.ts\");\n/* harmony import */ var _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/linearElementEditor */ \"../../element/linearElementEditor.ts\");\n/* harmony import */ var _groups__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../groups */ \"../../groups.ts\");\n/* harmony import */ var _element_collision__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../element/collision */ \"../../element/collision.ts\");\n/* harmony import */ var _element_binding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element/binding */ \"../../element/binding.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../types */ \"../../types.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst hasEmojiSupport = (0,_utils__WEBPACK_IMPORTED_MODULE_11__.supportsEmoji)();\r\nconst strokeRectWithRotation = (context, x, y, width, height, cx, cy, angle, fill = false) => {\r\n context.save();\r\n context.translate(cx, cy);\r\n context.rotate(angle);\r\n if (fill) {\r\n context.fillRect(x - cx, y - cy, width, height);\r\n }\r\n context.strokeRect(x - cx, y - cy, width, height);\r\n context.restore();\r\n};\r\nconst strokeDiamondWithRotation = (context, width, height, cx, cy, angle) => {\r\n context.save();\r\n context.translate(cx, cy);\r\n context.rotate(angle);\r\n context.beginPath();\r\n context.moveTo(0, height / 2);\r\n context.lineTo(width / 2, 0);\r\n context.lineTo(0, -height / 2);\r\n context.lineTo(-width / 2, 0);\r\n context.closePath();\r\n context.stroke();\r\n context.restore();\r\n};\r\nconst strokeEllipseWithRotation = (context, width, height, cx, cy, angle) => {\r\n context.beginPath();\r\n context.ellipse(cx, cy, width / 2, height / 2, angle, 0, Math.PI * 2);\r\n context.stroke();\r\n};\r\nconst fillCircle = (context, cx, cy, radius) => {\r\n context.beginPath();\r\n context.arc(cx, cy, radius, 0, Math.PI * 2);\r\n context.fill();\r\n context.stroke();\r\n};\r\nconst strokeGrid = (context, gridSize, offsetX, offsetY, width, height) => {\r\n context.save();\r\n context.strokeStyle = \"rgba(0,0,0,0.1)\";\r\n context.beginPath();\r\n for (let x = offsetX; x < offsetX + width + gridSize * 2; x += gridSize) {\r\n context.moveTo(x, offsetY - gridSize);\r\n context.lineTo(x, offsetY + height + gridSize * 2);\r\n }\r\n for (let y = offsetY; y < offsetY + height + gridSize * 2; y += gridSize) {\r\n context.moveTo(offsetX - gridSize, y);\r\n context.lineTo(offsetX + width + gridSize * 2, y);\r\n }\r\n context.stroke();\r\n context.restore();\r\n};\r\nconst renderLinearPointHandles = (context, appState, renderConfig, element) => {\r\n context.save();\r\n context.translate(renderConfig.scrollX, renderConfig.scrollY);\r\n context.lineWidth = 1 / renderConfig.zoom.value;\r\n _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getPointsGlobalCoordinates(element).forEach((point, idx) => {\r\n var _a;\r\n context.strokeStyle = \"red\";\r\n context.setLineDash([]);\r\n context.fillStyle =\r\n ((_a = appState.editingLinearElement) === null || _a === void 0 ? void 0 : _a.activePointIndex) === idx\r\n ? \"rgba(255, 127, 127, 0.9)\"\r\n : \"rgba(255, 255, 255, 0.9)\";\r\n const { POINT_HANDLE_SIZE } = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor;\r\n fillCircle(context, point[0], point[1], POINT_HANDLE_SIZE / 2 / renderConfig.zoom.value);\r\n });\r\n context.restore();\r\n};\r\nconst renderScene = (elements, appState, selectionElement, scale, rc, canvas, renderConfig) => {\r\n var _a;\r\n if (canvas === null) {\r\n return { atLeastOneVisibleElement: false };\r\n }\r\n const { renderScrollbars = true, renderSelection = true, renderGrid = true, isExporting, } = renderConfig;\r\n const context = canvas.getContext(\"2d\");\r\n context.setTransform(1, 0, 0, 1, 0, 0);\r\n context.save();\r\n context.scale(scale, scale);\r\n // When doing calculations based on canvas width we should used normalized one\r\n const normalizedCanvasWidth = canvas.width / scale;\r\n const normalizedCanvasHeight = canvas.height / scale;\r\n if (isExporting && renderConfig.theme === \"dark\") {\r\n context.filter = _constants__WEBPACK_IMPORTED_MODULE_13__.THEME_FILTER;\r\n }\r\n // Paint background\r\n if (typeof renderConfig.viewBackgroundColor === \"string\") {\r\n const hasTransparence = renderConfig.viewBackgroundColor === \"transparent\" ||\r\n renderConfig.viewBackgroundColor.length === 5 || // #RGBA\r\n renderConfig.viewBackgroundColor.length === 9 || // #RRGGBBA\r\n /(hsla|rgba)\\(/.test(renderConfig.viewBackgroundColor);\r\n if (hasTransparence) {\r\n context.clearRect(0, 0, normalizedCanvasWidth, normalizedCanvasHeight);\r\n }\r\n context.save();\r\n context.fillStyle = renderConfig.viewBackgroundColor;\r\n context.fillRect(0, 0, normalizedCanvasWidth, normalizedCanvasHeight);\r\n context.restore();\r\n }\r\n else {\r\n context.clearRect(0, 0, normalizedCanvasWidth, normalizedCanvasHeight);\r\n }\r\n // Apply zoom\r\n const zoomTranslationX = renderConfig.zoom.translation.x;\r\n const zoomTranslationY = renderConfig.zoom.translation.y;\r\n context.save();\r\n context.translate(zoomTranslationX, zoomTranslationY);\r\n context.scale(renderConfig.zoom.value, renderConfig.zoom.value);\r\n // Grid\r\n if (renderGrid && appState.gridSize) {\r\n strokeGrid(context, appState.gridSize, -Math.ceil(zoomTranslationX / renderConfig.zoom.value / appState.gridSize) *\r\n appState.gridSize +\r\n (renderConfig.scrollX % appState.gridSize), -Math.ceil(zoomTranslationY / renderConfig.zoom.value / appState.gridSize) *\r\n appState.gridSize +\r\n (renderConfig.scrollY % appState.gridSize), normalizedCanvasWidth / renderConfig.zoom.value, normalizedCanvasHeight / renderConfig.zoom.value);\r\n }\r\n // Paint visible elements\r\n const visibleElements = elements.filter((element) => isVisibleElement(element, normalizedCanvasWidth, normalizedCanvasHeight, {\r\n zoom: renderConfig.zoom,\r\n offsetLeft: appState.offsetLeft,\r\n offsetTop: appState.offsetTop,\r\n scrollX: renderConfig.scrollX,\r\n scrollY: renderConfig.scrollY,\r\n }));\r\n visibleElements.forEach((element) => {\r\n try {\r\n (0,_renderElement__WEBPACK_IMPORTED_MODULE_5__.renderElement)(element, rc, context, renderConfig);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n });\r\n if (appState.editingLinearElement) {\r\n const element = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getElement(appState.editingLinearElement.elementId);\r\n if (element) {\r\n renderLinearPointHandles(context, appState, renderConfig, element);\r\n }\r\n }\r\n // Paint selection element\r\n if (selectionElement) {\r\n try {\r\n (0,_renderElement__WEBPACK_IMPORTED_MODULE_5__.renderElement)(selectionElement, rc, context, renderConfig);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n if ((0,_element_binding__WEBPACK_IMPORTED_MODULE_10__.isBindingEnabled)(appState)) {\r\n appState.suggestedBindings\r\n .filter((binding) => binding != null)\r\n .forEach((suggestedBinding) => {\r\n renderBindingHighlight(context, renderConfig, suggestedBinding);\r\n });\r\n }\r\n // Paint selected elements\r\n if (renderSelection &&\r\n !appState.multiElement &&\r\n !appState.editingLinearElement) {\r\n const selections = elements.reduce((acc, element) => {\r\n const selectionColors = [];\r\n // local user\r\n if (appState.selectedElementIds[element.id] &&\r\n !(0,_groups__WEBPACK_IMPORTED_MODULE_8__.isSelectedViaGroup)(appState, element)) {\r\n selectionColors.push(open_color__WEBPACK_IMPORTED_MODULE_0__.black);\r\n }\r\n // remote users\r\n if (renderConfig.remoteSelectedElementIds[element.id]) {\r\n selectionColors.push(...renderConfig.remoteSelectedElementIds[element.id].map((socketId) => {\r\n var _a;\r\n const picture = (_a = appState.collaborators.get(socketId)) === null || _a === void 0 ? void 0 : _a.picture;\r\n const { background } = (0,_clients__WEBPACK_IMPORTED_MODULE_6__.getClientColors)(picture || socketId, appState);\r\n return background;\r\n }));\r\n }\r\n if (selectionColors.length) {\r\n const [elementX1, elementY1, elementX2, elementY2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n acc.push({\r\n angle: element.angle,\r\n elementX1,\r\n elementY1,\r\n elementX2,\r\n elementY2,\r\n selectionColors,\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n const addSelectionForGroupId = (groupId) => {\r\n const groupElements = (0,_groups__WEBPACK_IMPORTED_MODULE_8__.getElementsInGroup)(elements, groupId);\r\n const [elementX1, elementY1, elementX2, elementY2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(groupElements);\r\n selections.push({\r\n angle: 0,\r\n elementX1,\r\n elementX2,\r\n elementY1,\r\n elementY2,\r\n selectionColors: [open_color__WEBPACK_IMPORTED_MODULE_0__.black],\r\n });\r\n };\r\n for (const groupId of (0,_groups__WEBPACK_IMPORTED_MODULE_8__.getSelectedGroupIds)(appState)) {\r\n // TODO: support multiplayer selected group IDs\r\n addSelectionForGroupId(groupId);\r\n }\r\n if (appState.editingGroupId) {\r\n addSelectionForGroupId(appState.editingGroupId);\r\n }\r\n selections.forEach((selection) => renderSelectionBorder(context, renderConfig, selection));\r\n const locallySelectedElements = (0,_scene_selection__WEBPACK_IMPORTED_MODULE_4__.getSelectedElements)(elements, appState);\r\n // Paint resize transformHandles\r\n context.save();\r\n context.translate(renderConfig.scrollX, renderConfig.scrollY);\r\n if (locallySelectedElements.length === 1) {\r\n context.fillStyle = open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n const transformHandles = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getTransformHandles)(locallySelectedElements[0], renderConfig.zoom, \"mouse\");\r\n if (!appState.viewModeEnabled) {\r\n renderTransformHandles(context, renderConfig, transformHandles, locallySelectedElements[0].angle);\r\n }\r\n }\r\n else if (locallySelectedElements.length > 1 && !appState.isRotating) {\r\n const dashedLinePadding = 4 / renderConfig.zoom.value;\r\n context.fillStyle = open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n const [x1, y1, x2, y2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(locallySelectedElements);\r\n const initialLineDash = context.getLineDash();\r\n context.setLineDash([2 / renderConfig.zoom.value]);\r\n const lineWidth = context.lineWidth;\r\n context.lineWidth = 1 / renderConfig.zoom.value;\r\n strokeRectWithRotation(context, x1 - dashedLinePadding, y1 - dashedLinePadding, x2 - x1 + dashedLinePadding * 2, y2 - y1 + dashedLinePadding * 2, (x1 + x2) / 2, (y1 + y2) / 2, 0);\r\n context.lineWidth = lineWidth;\r\n context.setLineDash(initialLineDash);\r\n const transformHandles = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getTransformHandlesFromCoords)([x1, y1, x2, y2], 0, renderConfig.zoom, \"mouse\", _element__WEBPACK_IMPORTED_MODULE_1__.OMIT_SIDES_FOR_MULTIPLE_ELEMENTS);\r\n renderTransformHandles(context, renderConfig, transformHandles, 0);\r\n }\r\n context.restore();\r\n }\r\n // Reset zoom\r\n context.restore();\r\n // Paint remote pointers\r\n for (const clientId in renderConfig.remotePointerViewportCoords) {\r\n let { x, y } = renderConfig.remotePointerViewportCoords[clientId];\r\n x -= appState.offsetLeft;\r\n y -= appState.offsetTop;\r\n const width = 9;\r\n const height = 14;\r\n const isOutOfBounds = x < 0 ||\r\n x > normalizedCanvasWidth - width ||\r\n y < 0 ||\r\n y > normalizedCanvasHeight - height;\r\n x = Math.max(x, 0);\r\n x = Math.min(x, normalizedCanvasWidth - width);\r\n y = Math.max(y, 0);\r\n y = Math.min(y, normalizedCanvasHeight - height);\r\n const picture = (_a = appState.collaborators.get(clientId)) === null || _a === void 0 ? void 0 : _a.picture;\r\n const { background, stroke } = (0,_clients__WEBPACK_IMPORTED_MODULE_6__.getClientColors)(picture || clientId, appState);\r\n context.save();\r\n context.strokeStyle = stroke;\r\n context.fillStyle = background;\r\n const userState = renderConfig.remotePointerUserStates[clientId];\r\n if (isOutOfBounds || userState === _types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.AWAY) {\r\n context.globalAlpha = 0.48;\r\n }\r\n if (renderConfig.remotePointerButton &&\r\n renderConfig.remotePointerButton[clientId] === \"down\") {\r\n context.beginPath();\r\n context.arc(x, y, 15, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#ffffff88\";\r\n context.stroke();\r\n context.closePath();\r\n context.beginPath();\r\n context.arc(x, y, 15, 0, 2 * Math.PI, false);\r\n context.lineWidth = 1;\r\n context.strokeStyle = stroke;\r\n context.stroke();\r\n context.closePath();\r\n }\r\n context.beginPath();\r\n context.moveTo(x, y);\r\n context.lineTo(x + 1, y + 14);\r\n context.lineTo(x + 4, y + 9);\r\n context.lineTo(x + 9, y + 10);\r\n context.lineTo(x, y);\r\n context.fill();\r\n context.stroke();\r\n const username = renderConfig.remotePointerUsernames[clientId];\r\n let idleState = \"\";\r\n if (userState === _types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.AWAY) {\r\n idleState = hasEmojiSupport ? \"⚫️\" : ` (${_types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.AWAY})`;\r\n }\r\n else if (userState === _types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.IDLE) {\r\n idleState = hasEmojiSupport ? \"💤\" : ` (${_types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.IDLE})`;\r\n }\r\n else if (userState === _types__WEBPACK_IMPORTED_MODULE_12__.UserIdleState.ACTIVE) {\r\n idleState = hasEmojiSupport ? \"🟢\" : \"\";\r\n }\r\n const usernameAndIdleState = `${username ? `${username} ` : \"\"}${idleState}`;\r\n if (!isOutOfBounds && usernameAndIdleState) {\r\n const offsetX = x + width;\r\n const offsetY = y + height;\r\n const paddingHorizontal = 4;\r\n const paddingVertical = 4;\r\n const measure = context.measureText(usernameAndIdleState);\r\n const measureHeight = measure.actualBoundingBoxDescent + measure.actualBoundingBoxAscent;\r\n // Border\r\n context.fillStyle = stroke;\r\n context.fillRect(offsetX - 1, offsetY - 1, measure.width + 2 * paddingHorizontal + 2, measureHeight + 2 * paddingVertical + 2);\r\n // Background\r\n context.fillStyle = background;\r\n context.fillRect(offsetX, offsetY, measure.width + 2 * paddingHorizontal, measureHeight + 2 * paddingVertical);\r\n context.fillStyle = open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n context.fillText(usernameAndIdleState, offsetX + paddingHorizontal, offsetY + paddingVertical + measure.actualBoundingBoxAscent);\r\n }\r\n context.restore();\r\n context.closePath();\r\n }\r\n // Paint scrollbars\r\n let scrollBars;\r\n if (renderScrollbars) {\r\n scrollBars = (0,_scene_scrollbars__WEBPACK_IMPORTED_MODULE_3__.getScrollBars)(elements, normalizedCanvasWidth, normalizedCanvasHeight, renderConfig);\r\n context.save();\r\n context.fillStyle = _scene_scrollbars__WEBPACK_IMPORTED_MODULE_3__.SCROLLBAR_COLOR;\r\n context.strokeStyle = \"rgba(255,255,255,0.8)\";\r\n [scrollBars.horizontal, scrollBars.vertical].forEach((scrollBar) => {\r\n if (scrollBar) {\r\n (0,_roundRect__WEBPACK_IMPORTED_MODULE_2__.roundRect)(context, scrollBar.x, scrollBar.y, scrollBar.width, scrollBar.height, _scene_scrollbars__WEBPACK_IMPORTED_MODULE_3__.SCROLLBAR_WIDTH / 2);\r\n }\r\n });\r\n context.restore();\r\n }\r\n context.restore();\r\n return { atLeastOneVisibleElement: visibleElements.length > 0, scrollBars };\r\n};\r\nconst renderTransformHandles = (context, renderConfig, transformHandles, angle) => {\r\n Object.keys(transformHandles).forEach((key) => {\r\n const transformHandle = transformHandles[key];\r\n if (transformHandle !== undefined) {\r\n context.save();\r\n context.lineWidth = 1 / renderConfig.zoom.value;\r\n if (key === \"rotation\") {\r\n fillCircle(context, transformHandle[0] + transformHandle[2] / 2, transformHandle[1] + transformHandle[3] / 2, transformHandle[2] / 2);\r\n }\r\n else {\r\n strokeRectWithRotation(context, transformHandle[0], transformHandle[1], transformHandle[2], transformHandle[3], transformHandle[0] + transformHandle[2] / 2, transformHandle[1] + transformHandle[3] / 2, angle, true);\r\n }\r\n context.restore();\r\n }\r\n });\r\n};\r\nconst renderSelectionBorder = (context, renderConfig, elementProperties) => {\r\n const { angle, elementX1, elementY1, elementX2, elementY2, selectionColors } = elementProperties;\r\n const elementWidth = elementX2 - elementX1;\r\n const elementHeight = elementY2 - elementY1;\r\n const dashedLinePadding = 4 / renderConfig.zoom.value;\r\n const dashWidth = 8 / renderConfig.zoom.value;\r\n const spaceWidth = 4 / renderConfig.zoom.value;\r\n context.save();\r\n context.translate(renderConfig.scrollX, renderConfig.scrollY);\r\n context.lineWidth = 1 / renderConfig.zoom.value;\r\n const count = selectionColors.length;\r\n for (let index = 0; index < count; ++index) {\r\n context.strokeStyle = selectionColors[index];\r\n context.setLineDash([\r\n dashWidth,\r\n spaceWidth + (dashWidth + spaceWidth) * (count - 1),\r\n ]);\r\n context.lineDashOffset = (dashWidth + spaceWidth) * index;\r\n strokeRectWithRotation(context, elementX1 - dashedLinePadding, elementY1 - dashedLinePadding, elementWidth + dashedLinePadding * 2, elementHeight + dashedLinePadding * 2, elementX1 + elementWidth / 2, elementY1 + elementHeight / 2, angle);\r\n }\r\n context.restore();\r\n};\r\nconst renderBindingHighlight = (context, renderConfig, suggestedBinding) => {\r\n const renderHighlight = Array.isArray(suggestedBinding)\r\n ? renderBindingHighlightForSuggestedPointBinding\r\n : renderBindingHighlightForBindableElement;\r\n context.save();\r\n context.translate(renderConfig.scrollX, renderConfig.scrollY);\r\n renderHighlight(context, suggestedBinding);\r\n context.restore();\r\n};\r\nconst renderBindingHighlightForBindableElement = (context, element) => {\r\n const [x1, y1, x2, y2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(element);\r\n const width = x2 - x1;\r\n const height = y2 - y1;\r\n const threshold = (0,_element_collision__WEBPACK_IMPORTED_MODULE_9__.maxBindingGap)(element, width, height);\r\n // So that we don't overlap the element itself\r\n const strokeOffset = 4;\r\n context.strokeStyle = \"rgba(0,0,0,.05)\";\r\n context.lineWidth = threshold - strokeOffset;\r\n const padding = strokeOffset / 2 + threshold / 2;\r\n switch (element.type) {\r\n case \"rectangle\":\r\n case \"text\":\r\n case \"image\":\r\n strokeRectWithRotation(context, x1 - padding, y1 - padding, width + padding * 2, height + padding * 2, x1 + width / 2, y1 + height / 2, element.angle);\r\n break;\r\n case \"diamond\":\r\n const side = Math.hypot(width, height);\r\n const wPadding = (padding * side) / height;\r\n const hPadding = (padding * side) / width;\r\n strokeDiamondWithRotation(context, width + wPadding * 2, height + hPadding * 2, x1 + width / 2, y1 + height / 2, element.angle);\r\n break;\r\n case \"ellipse\":\r\n strokeEllipseWithRotation(context, width + padding * 2, height + padding * 2, x1 + width / 2, y1 + height / 2, element.angle);\r\n break;\r\n }\r\n};\r\nconst renderBindingHighlightForSuggestedPointBinding = (context, suggestedBinding) => {\r\n const [element, startOrEnd, bindableElement] = suggestedBinding;\r\n const threshold = (0,_element_collision__WEBPACK_IMPORTED_MODULE_9__.maxBindingGap)(bindableElement, bindableElement.width, bindableElement.height);\r\n context.strokeStyle = \"rgba(0,0,0,0)\";\r\n context.fillStyle = \"rgba(0,0,0,.05)\";\r\n const pointIndices = startOrEnd === \"both\" ? [0, -1] : startOrEnd === \"start\" ? [0] : [-1];\r\n pointIndices.forEach((index) => {\r\n const [x, y] = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_7__.LinearElementEditor.getPointAtIndexGlobalCoordinates(element, index);\r\n fillCircle(context, x, y, threshold);\r\n });\r\n};\r\nconst isVisibleElement = (element, canvasWidth, canvasHeight, viewTransformations) => {\r\n const [x1, y1, x2, y2] = (0,_element__WEBPACK_IMPORTED_MODULE_1__.getElementBounds)(element); // scene coordinates\r\n const topLeftSceneCoords = (0,_utils__WEBPACK_IMPORTED_MODULE_11__.viewportCoordsToSceneCoords)({\r\n clientX: viewTransformations.offsetLeft,\r\n clientY: viewTransformations.offsetTop,\r\n }, viewTransformations);\r\n const bottomRightSceneCoords = (0,_utils__WEBPACK_IMPORTED_MODULE_11__.viewportCoordsToSceneCoords)({\r\n clientX: viewTransformations.offsetLeft + canvasWidth,\r\n clientY: viewTransformations.offsetTop + canvasHeight,\r\n }, viewTransformations);\r\n return (topLeftSceneCoords.x <= x2 &&\r\n topLeftSceneCoords.y <= y2 &&\r\n bottomRightSceneCoords.x >= x1 &&\r\n bottomRightSceneCoords.y >= y1);\r\n};\r\n// This should be only called for exporting purposes\r\nconst renderSceneToSvg = (elements, rsvg, svgRoot, files, { offsetX = 0, offsetY = 0, exportWithDarkMode = false, } = {}) => {\r\n if (!svgRoot) {\r\n return;\r\n }\r\n // render elements\r\n elements.forEach((element) => {\r\n if (!element.isDeleted) {\r\n try {\r\n (0,_renderElement__WEBPACK_IMPORTED_MODULE_5__.renderElementToSvg)(element, rsvg, svgRoot, files, element.x + offsetX, element.y + offsetY, exportWithDarkMode);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n });\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vcmVuZGVyZXIvcmVuZGVyU2NlbmUudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU0QjtBQWtCUjtBQUVvQjtBQU1YO0FBQzRCO0FBRVc7QUFDdkI7QUFDd0I7QUFLbEQ7QUFDa0M7QUFLekI7QUFLMEM7QUFDN0I7QUFDRztBQUU1QyxNQUFNLGVBQWUsR0FBRyxzREFBYSxFQUFFLENBQUM7QUFFeEMsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixPQUFpQyxFQUNqQyxDQUFTLEVBQ1QsQ0FBUyxFQUNULEtBQWEsRUFDYixNQUFjLEVBQ2QsRUFBVSxFQUNWLEVBQVUsRUFDVixLQUFhLEVBQ2IsT0FBZ0IsS0FBSyxFQUNyQixFQUFFO0lBQ0YsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixJQUFJLElBQUksRUFBRTtRQUNSLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNqRDtJQUNELE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSx5QkFBeUIsR0FBRyxDQUNoQyxPQUFpQyxFQUNqQyxLQUFhLEVBQ2IsTUFBYyxFQUNkLEVBQVUsRUFDVixFQUFVLEVBQ1YsS0FBYSxFQUNiLEVBQUU7SUFDRixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUcsQ0FDaEMsT0FBaUMsRUFDakMsS0FBYSxFQUNiLE1BQWMsRUFDZCxFQUFVLEVBQ1YsRUFBVSxFQUNWLEtBQWEsRUFDYixFQUFFO0lBQ0YsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxDQUNqQixPQUFpQyxFQUNqQyxFQUFVLEVBQ1YsRUFBVSxFQUNWLE1BQWMsRUFDZCxFQUFFO0lBQ0YsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHLENBQ2pCLE9BQWlDLEVBQ2pDLFFBQWdCLEVBQ2hCLE9BQWUsRUFDZixPQUFlLEVBQ2YsS0FBYSxFQUNiLE1BQWMsRUFDZCxFQUFFO0lBQ0YsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsT0FBTyxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztJQUN4QyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3ZFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNwRDtJQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRTtRQUN4RSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxHQUFHLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbkQ7SUFDRCxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUcsQ0FDL0IsT0FBaUMsRUFDakMsUUFBa0IsRUFDbEIsWUFBMEIsRUFDMUIsT0FBNEMsRUFDNUMsRUFBRTtJQUNGLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFFaEQsd0dBQThDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUM3RCxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTs7UUFDYixPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUM1QixPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxTQUFTO1lBQ2YsZUFBUSxDQUFDLG9CQUFvQiwwQ0FBRSxnQkFBZ0IsTUFBSyxHQUFHO2dCQUNyRCxDQUFDLENBQUMsMEJBQTBCO2dCQUM1QixDQUFDLENBQUMsMEJBQTBCLENBQUM7UUFDakMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsNkVBQW1CLENBQUM7UUFDbEQsVUFBVSxDQUNSLE9BQU8sRUFDUCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLGlCQUFpQixHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDaEQsQ0FBQztJQUNKLENBQUMsQ0FDRixDQUFDO0lBQ0YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVLLE1BQU0sV0FBVyxHQUFHLENBQ3pCLFFBQWdELEVBQ2hELFFBQWtCLEVBQ2xCLGdCQUFvRCxFQUNwRCxLQUFhLEVBQ2IsRUFBZSxFQUNmLE1BQXlCLEVBQ3pCLFlBQTBCLEVBRTFCLEVBQUU7O0lBQ0YsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1FBQ25CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUM1QztJQUVELE1BQU0sRUFDSixnQkFBZ0IsR0FBRyxJQUFJLEVBQ3ZCLGVBQWUsR0FBRyxJQUFJLEVBQ3RCLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFdBQVcsR0FDWixHQUFHLFlBQVksQ0FBQztJQUVqQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBRSxDQUFDO0lBRXpDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU1Qiw4RUFBOEU7SUFDOUUsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNuRCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRXJELElBQUksV0FBVyxJQUFJLFlBQVksQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ2hELE9BQU8sQ0FBQyxNQUFNLEdBQUcscURBQVksQ0FBQztLQUMvQjtJQUVELG1CQUFtQjtJQUNuQixJQUFJLE9BQU8sWUFBWSxDQUFDLG1CQUFtQixLQUFLLFFBQVEsRUFBRTtRQUN4RCxNQUFNLGVBQWUsR0FDbkIsWUFBWSxDQUFDLG1CQUFtQixLQUFLLGFBQWE7WUFDbEQsWUFBWSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUTtZQUN6RCxZQUFZLENBQUMsbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxXQUFXO1lBQzVELGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsSUFBSSxlQUFlLEVBQUU7WUFDbkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixDQUFDLENBQUM7U0FDeEU7UUFDRCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztRQUNyRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUN0RSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbkI7U0FBTTtRQUNMLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0tBQ3hFO0lBRUQsYUFBYTtJQUNiLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEUsT0FBTztJQUNQLElBQUksVUFBVSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7UUFDbkMsVUFBVSxDQUNSLE9BQU8sRUFDUCxRQUFRLENBQUMsUUFBUSxFQUNqQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1IsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FDL0Q7WUFDQyxRQUFRLENBQUMsUUFBUTtZQUNqQixDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUM1QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1IsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FDL0Q7WUFDQyxRQUFRLENBQUMsUUFBUTtZQUNqQixDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUM1QyxxQkFBcUIsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFDL0Msc0JBQXNCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQ2pELENBQUM7S0FDSDtJQUVELHlCQUF5QjtJQUN6QixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDbEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFO1FBQ3ZFLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSTtRQUN2QixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7UUFDL0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO1FBQzdCLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTztRQUM3QixPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU87S0FDOUIsQ0FBQyxDQUNILENBQUM7SUFFRixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEMsSUFBSTtZQUNGLDZEQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDbkQ7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUNqQyxNQUFNLE9BQU8sR0FBRyx3RkFBOEIsQ0FDNUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FDeEMsQ0FBQztRQUNGLElBQUksT0FBTyxFQUFFO1lBQ1gsd0JBQXdCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDcEU7S0FDRjtJQUVELDBCQUEwQjtJQUMxQixJQUFJLGdCQUFnQixFQUFFO1FBQ3BCLElBQUk7WUFDRiw2REFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDNUQ7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCO0tBQ0Y7SUFFRCxJQUFJLG1FQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzlCLFFBQVEsQ0FBQyxpQkFBaUI7YUFDdkIsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO2FBQ3BDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDNUIsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBaUIsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO0tBQ047SUFFRCwwQkFBMEI7SUFDMUIsSUFDRSxlQUFlO1FBQ2YsQ0FBQyxRQUFRLENBQUMsWUFBWTtRQUN0QixDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFDOUI7UUFDQSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2xELE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMzQixhQUFhO1lBQ2IsSUFDRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsQ0FBQywyREFBa0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQ3RDO2dCQUNBLGVBQWUsQ0FBQyxJQUFJLENBQUMsNkNBQVEsQ0FBQyxDQUFDO2FBQ2hDO1lBQ0QsZUFBZTtZQUNmLElBQUksWUFBWSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDckQsZUFBZSxDQUFDLElBQUksQ0FDbEIsR0FBRyxZQUFZLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDdEQsQ0FBQyxRQUFRLEVBQUUsRUFBRTs7b0JBQ1gsTUFBTSxPQUFPLEdBQUcsY0FBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLDBDQUFFLE9BQU8sQ0FBQztvQkFDOUQsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLHlEQUFlLENBQ3BDLE9BQU8sSUFBSSxRQUFRLEVBQ25CLFFBQVEsQ0FDVCxDQUFDO29CQUNGLE9BQU8sVUFBVSxDQUFDO2dCQUNwQixDQUFDLENBQ0YsQ0FDRixDQUFDO2FBQ0g7WUFDRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0JBQzFCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FDaEQsa0VBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BDLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ1AsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO29CQUNwQixTQUFTO29CQUNULFNBQVM7b0JBQ1QsU0FBUztvQkFDVCxTQUFTO29CQUNULGVBQWU7aUJBQ2hCLENBQUMsQ0FBQzthQUNKO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBZ0ksQ0FBQyxDQUFDO1FBRXJJLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDbEQsTUFBTSxhQUFhLEdBQUcsMkRBQWtCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FDaEQseURBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNkLEtBQUssRUFBRSxDQUFDO2dCQUNSLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsZUFBZSxFQUFFLENBQUMsNkNBQVEsQ0FBQzthQUM1QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLDREQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25ELCtDQUErQztZQUMvQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNqQztRQUVELElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRTtZQUMzQixzQkFBc0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDakQ7UUFFRCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDL0IscUJBQXFCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FDeEQsQ0FBQztRQUVGLE1BQU0sdUJBQXVCLEdBQUcscUVBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXhFLGdDQUFnQztRQUNoQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELElBQUksdUJBQXVCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QyxPQUFPLENBQUMsU0FBUyxHQUFHLDZDQUFRLENBQUM7WUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyw2REFBbUIsQ0FDMUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQzFCLFlBQVksQ0FBQyxJQUFJLEVBQ2pCLE9BQU8sQ0FDUixDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUU7Z0JBQzdCLHNCQUFzQixDQUNwQixPQUFPLEVBQ1AsWUFBWSxFQUNaLGdCQUFnQixFQUNoQix1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQ2pDLENBQUM7YUFDSDtTQUNGO2FBQU0sSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNyRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN0RCxPQUFPLENBQUMsU0FBUyxHQUFHLDZDQUFRLENBQUM7WUFDN0IsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLHlEQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNsRSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNwQyxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNoRCxzQkFBc0IsQ0FDcEIsT0FBTyxFQUNQLEVBQUUsR0FBRyxpQkFBaUIsRUFDdEIsRUFBRSxHQUFHLGlCQUFpQixFQUN0QixFQUFFLEdBQUcsRUFBRSxHQUFHLGlCQUFpQixHQUFHLENBQUMsRUFDL0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEVBQy9CLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDYixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ2IsQ0FBQyxDQUNGLENBQUM7WUFDRixPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUM5QixPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsdUVBQTZCLENBQ3BELENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQ2hCLENBQUMsRUFDRCxZQUFZLENBQUMsSUFBSSxFQUNqQixPQUFPLEVBQ1Asc0VBQWdDLENBQ2pDLENBQUM7WUFDRixzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0lBRUQsYUFBYTtJQUNiLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUVsQix3QkFBd0I7SUFDeEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxZQUFZLENBQUMsMkJBQTJCLEVBQUU7UUFDL0QsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFFeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVsQixNQUFNLGFBQWEsR0FDakIsQ0FBQyxHQUFHLENBQUM7WUFDTCxDQUFDLEdBQUcscUJBQXFCLEdBQUcsS0FBSztZQUNqQyxDQUFDLEdBQUcsQ0FBQztZQUNMLENBQUMsR0FBRyxzQkFBc0IsR0FBRyxNQUFNLENBQUM7UUFFdEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25CLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBRWpELE1BQU0sT0FBTyxHQUFHLGNBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQywwQ0FBRSxPQUFPLENBQUM7UUFDOUQsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyx5REFBZSxDQUM1QyxPQUFPLElBQUksUUFBUSxFQUNuQixRQUFRLENBQ1QsQ0FBQztRQUVGLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBRS9CLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRSxJQUFJLGFBQWEsSUFBSSxTQUFTLEtBQUssdURBQWtCLEVBQUU7WUFDckQsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDNUI7UUFFRCxJQUNFLFlBQVksQ0FBQyxtQkFBbUI7WUFDaEMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sRUFDckQ7WUFDQSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDbEMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUVwQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7WUFDN0IsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNyQjtRQUVELE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFakIsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9ELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLFNBQVMsS0FBSyx1REFBa0IsRUFBRTtZQUNwQyxTQUFTLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssdURBQWtCLEdBQUcsQ0FBQztTQUNqRTthQUFNLElBQUksU0FBUyxLQUFLLHVEQUFrQixFQUFFO1lBQzNDLFNBQVMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyx1REFBa0IsR0FBRyxDQUFDO1NBQ2pFO2FBQU0sSUFBSSxTQUFTLEtBQUsseURBQW9CLEVBQUU7WUFDN0MsU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDekM7UUFFRCxNQUFNLG9CQUFvQixHQUFHLEdBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDOUIsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxhQUFhLElBQUksb0JBQW9CLEVBQUU7WUFDMUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMxQixNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzNCLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztZQUMxQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDMUQsTUFBTSxhQUFhLEdBQ2pCLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFFckUsU0FBUztZQUNULE9BQU8sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQ2QsT0FBTyxHQUFHLENBQUMsRUFDWCxPQUFPLEdBQUcsQ0FBQyxFQUNYLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLENBQUMsRUFDekMsYUFBYSxHQUFHLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUN4QyxDQUFDO1lBQ0YsYUFBYTtZQUNiLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxRQUFRLENBQ2QsT0FBTyxFQUNQLE9BQU8sRUFDUCxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsRUFDckMsYUFBYSxHQUFHLENBQUMsR0FBRyxlQUFlLENBQ3BDLENBQUM7WUFDRixPQUFPLENBQUMsU0FBUyxHQUFHLDZDQUFRLENBQUM7WUFFN0IsT0FBTyxDQUFDLFFBQVEsQ0FDZCxvQkFBb0IsRUFDcEIsT0FBTyxHQUFHLGlCQUFpQixFQUMzQixPQUFPLEdBQUcsZUFBZSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FDNUQsQ0FBQztTQUNIO1FBRUQsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUNyQjtJQUVELG1CQUFtQjtJQUNuQixJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksZ0JBQWdCLEVBQUU7UUFDcEIsVUFBVSxHQUFHLGdFQUFhLENBQ3hCLFFBQVEsRUFDUixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLFlBQVksQ0FDYixDQUFDO1FBRUYsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLFNBQVMsR0FBRyw4REFBZSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsdUJBQXVCLENBQUM7UUFDOUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNqRSxJQUFJLFNBQVMsRUFBRTtnQkFDYixxREFBUyxDQUNQLE9BQU8sRUFDUCxTQUFTLENBQUMsQ0FBQyxFQUNYLFNBQVMsQ0FBQyxDQUFDLEVBQ1gsU0FBUyxDQUFDLEtBQUssRUFDZixTQUFTLENBQUMsTUFBTSxFQUNoQiw4REFBZSxHQUFHLENBQUMsQ0FDcEIsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbkI7SUFFRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQzlFLENBQUMsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUcsQ0FDN0IsT0FBaUMsRUFDakMsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLEtBQWEsRUFDUCxFQUFFO0lBQ1IsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzVDLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLEdBQTBCLENBQUMsQ0FBQztRQUNyRSxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDakMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDaEQsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO2dCQUN0QixVQUFVLENBQ1IsT0FBTyxFQUNQLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMzQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDM0MsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkIsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLHNCQUFzQixDQUNwQixPQUFPLEVBQ1AsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUNsQixlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQ2xCLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFDbEIsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUNsQixlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDM0MsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQzNDLEtBQUssRUFDTCxJQUFJLENBQ0wsQ0FBQzthQUNIO1lBQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLHFCQUFxQixHQUFHLENBQzVCLE9BQWlDLEVBQ2pDLFlBQTBCLEVBQzFCLGlCQU9DLEVBQ0QsRUFBRTtJQUNGLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxHQUMxRSxpQkFBaUIsQ0FBQztJQUNwQixNQUFNLFlBQVksR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzNDLE1BQU0sYUFBYSxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFFNUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzlDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUUvQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlELE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBRWhELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7SUFDckMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRTtRQUMxQyxPQUFPLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ2xCLFNBQVM7WUFDVCxVQUFVLEdBQUcsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ3BELENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFELHNCQUFzQixDQUNwQixPQUFPLEVBQ1AsU0FBUyxHQUFHLGlCQUFpQixFQUM3QixTQUFTLEdBQUcsaUJBQWlCLEVBQzdCLFlBQVksR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEVBQ3BDLGFBQWEsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEVBQ3JDLFNBQVMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxFQUM1QixTQUFTLEdBQUcsYUFBYSxHQUFHLENBQUMsRUFDN0IsS0FBSyxDQUNOLENBQUM7S0FDSDtJQUNELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFHLENBQzdCLE9BQWlDLEVBQ2pDLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxFQUFFO0lBQ0YsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNyRCxDQUFDLENBQUMsOENBQThDO1FBQ2hELENBQUMsQ0FBQyx3Q0FBd0MsQ0FBQztJQUU3QyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlELGVBQWUsQ0FBQyxPQUFPLEVBQUUsZ0JBQXVCLENBQUMsQ0FBQztJQUVsRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSx3Q0FBd0MsR0FBRyxDQUMvQyxPQUFpQyxFQUNqQyxPQUFrQyxFQUNsQyxFQUFFO0lBQ0YsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGtFQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNELE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN2QixNQUFNLFNBQVMsR0FBRyxpRUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFeEQsOENBQThDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztJQUN2QixPQUFPLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLFlBQVksQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxZQUFZLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFakQsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFO1FBQ3BCLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxPQUFPO1lBQ1Ysc0JBQXNCLENBQ3BCLE9BQU8sRUFDUCxFQUFFLEdBQUcsT0FBTyxFQUNaLEVBQUUsR0FBRyxPQUFPLEVBQ1osS0FBSyxHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQ25CLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUNwQixFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFDZCxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFDZixPQUFPLENBQUMsS0FBSyxDQUNkLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxTQUFTO1lBQ1osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzNDLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMxQyx5QkFBeUIsQ0FDdkIsT0FBTyxFQUNQLEtBQUssR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUNwQixNQUFNLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFDckIsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQ2QsRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQ2YsT0FBTyxDQUFDLEtBQUssQ0FDZCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssU0FBUztZQUNaLHlCQUF5QixDQUN2QixPQUFPLEVBQ1AsS0FBSyxHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQ25CLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUNwQixFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFDZCxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFDZixPQUFPLENBQUMsS0FBSyxDQUNkLENBQUM7WUFDRixNQUFNO0tBQ1Q7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLDhDQUE4QyxHQUFHLENBQ3JELE9BQWlDLEVBQ2pDLGdCQUF1QyxFQUN2QyxFQUFFO0lBQ0YsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7SUFFaEUsTUFBTSxTQUFTLEdBQUcsaUVBQWEsQ0FDN0IsZUFBZSxFQUNmLGVBQWUsQ0FBQyxLQUFLLEVBQ3JCLGVBQWUsQ0FBQyxNQUFNLENBQ3ZCLENBQUM7SUFFRixPQUFPLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQztJQUN0QyxPQUFPLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO0lBRXRDLE1BQU0sWUFBWSxHQUNoQixVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsOEdBQW9ELENBQ2pFLE9BQU8sRUFDUCxLQUFLLENBQ04sQ0FBQztRQUNGLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsT0FBMEIsRUFDMUIsV0FBbUIsRUFDbkIsWUFBb0IsRUFDcEIsbUJBTUMsRUFDRCxFQUFFO0lBQ0YsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLDBEQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsb0JBQW9CO0lBQ3hFLE1BQU0sa0JBQWtCLEdBQUcsb0VBQTJCLENBQ3BEO1FBQ0UsT0FBTyxFQUFFLG1CQUFtQixDQUFDLFVBQVU7UUFDdkMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7S0FDdkMsRUFDRCxtQkFBbUIsQ0FDcEIsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLEdBQUcsb0VBQTJCLENBQ3hEO1FBQ0UsT0FBTyxFQUFFLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxXQUFXO1FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsWUFBWTtLQUN0RCxFQUNELG1CQUFtQixDQUNwQixDQUFDO0lBRUYsT0FBTyxDQUNMLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFO1FBQzFCLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFO1FBQzFCLHNCQUFzQixDQUFDLENBQUMsSUFBSSxFQUFFO1FBQzlCLHNCQUFzQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQy9CLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixvREFBb0Q7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxDQUM5QixRQUFnRCxFQUNoRCxJQUFjLEVBQ2QsT0FBbUIsRUFDbkIsS0FBa0IsRUFDbEIsRUFDRSxPQUFPLEdBQUcsQ0FBQyxFQUNYLE9BQU8sR0FBRyxDQUFDLEVBQ1gsa0JBQWtCLEdBQUcsS0FBSyxNQUt4QixFQUFFLEVBQ04sRUFBRTtJQUNGLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDWixPQUFPO0tBQ1I7SUFDRCxrQkFBa0I7SUFDbEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLElBQUk7Z0JBQ0Ysa0VBQWtCLENBQ2hCLE9BQU8sRUFDUCxJQUFJLEVBQ0osT0FBTyxFQUNQLEtBQUssRUFDTCxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFDbkIsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQ25CLGtCQUFrQixDQUNuQixDQUFDO2FBQ0g7WUFBQyxPQUFPLEtBQVUsRUFBRTtnQkFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QjtTQUNGO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vcmVuZGVyZXIvcmVuZGVyU2NlbmUudHM/ZTI2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3VnaENhbnZhcyB9IGZyb20gXCJyb3VnaGpzL2Jpbi9jYW52YXNcIjtcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSBcInJvdWdoanMvYmluL3N2Z1wiO1xuaW1wb3J0IG9jIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5cbmltcG9ydCB7IEFwcFN0YXRlLCBCaW5hcnlGaWxlcywgWm9vbSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgRXhjYWxpZHJhd0VsZW1lbnQsXG4gIE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd0xpbmVhckVsZW1lbnQsXG4gIE5vbkRlbGV0ZWQsXG4gIEdyb3VwSWQsXG4gIEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnQsXG59IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMsXG4gIE9NSVRfU0lERVNfRk9SX01VTFRJUExFX0VMRU1FTlRTLFxuICBnZXRUcmFuc2Zvcm1IYW5kbGVzRnJvbUNvb3JkcyxcbiAgZ2V0VHJhbnNmb3JtSGFuZGxlcyxcbiAgZ2V0RWxlbWVudEJvdW5kcyxcbiAgZ2V0Q29tbW9uQm91bmRzLFxufSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyByb3VuZFJlY3QgfSBmcm9tIFwiLi9yb3VuZFJlY3RcIjtcbmltcG9ydCB7IFJlbmRlckNvbmZpZyB9IGZyb20gXCIuLi9zY2VuZS90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0U2Nyb2xsQmFycyxcbiAgU0NST0xMQkFSX0NPTE9SLFxuICBTQ1JPTExCQVJfV0lEVEgsXG59IGZyb20gXCIuLi9zY2VuZS9zY3JvbGxiYXJzXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSBcIi4uL3NjZW5lL3NlbGVjdGlvblwiO1xuXG5pbXBvcnQgeyByZW5kZXJFbGVtZW50LCByZW5kZXJFbGVtZW50VG9TdmcgfSBmcm9tIFwiLi9yZW5kZXJFbGVtZW50XCI7XG5pbXBvcnQgeyBnZXRDbGllbnRDb2xvcnMgfSBmcm9tIFwiLi4vY2xpZW50c1wiO1xuaW1wb3J0IHsgTGluZWFyRWxlbWVudEVkaXRvciB9IGZyb20gXCIuLi9lbGVtZW50L2xpbmVhckVsZW1lbnRFZGl0b3JcIjtcbmltcG9ydCB7XG4gIGlzU2VsZWN0ZWRWaWFHcm91cCxcbiAgZ2V0U2VsZWN0ZWRHcm91cElkcyxcbiAgZ2V0RWxlbWVudHNJbkdyb3VwLFxufSBmcm9tIFwiLi4vZ3JvdXBzXCI7XG5pbXBvcnQgeyBtYXhCaW5kaW5nR2FwIH0gZnJvbSBcIi4uL2VsZW1lbnQvY29sbGlzaW9uXCI7XG5pbXBvcnQge1xuICBTdWdnZXN0ZWRCaW5kaW5nLFxuICBTdWdnZXN0ZWRQb2ludEJpbmRpbmcsXG4gIGlzQmluZGluZ0VuYWJsZWQsXG59IGZyb20gXCIuLi9lbGVtZW50L2JpbmRpbmdcIjtcbmltcG9ydCB7XG4gIFRyYW5zZm9ybUhhbmRsZXMsXG4gIFRyYW5zZm9ybUhhbmRsZVR5cGUsXG59IGZyb20gXCIuLi9lbGVtZW50L3RyYW5zZm9ybUhhbmRsZXNcIjtcbmltcG9ydCB7IHZpZXdwb3J0Q29vcmRzVG9TY2VuZUNvb3Jkcywgc3VwcG9ydHNFbW9qaSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgVXNlcklkbGVTdGF0ZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgVEhFTUVfRklMVEVSIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBoYXNFbW9qaVN1cHBvcnQgPSBzdXBwb3J0c0Vtb2ppKCk7XG5cbmNvbnN0IHN0cm9rZVJlY3RXaXRoUm90YXRpb24gPSAoXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuICBjeDogbnVtYmVyLFxuICBjeTogbnVtYmVyLFxuICBhbmdsZTogbnVtYmVyLFxuICBmaWxsOiBib29sZWFuID0gZmFsc2UsXG4pID0+IHtcbiAgY29udGV4dC5zYXZlKCk7XG4gIGNvbnRleHQudHJhbnNsYXRlKGN4LCBjeSk7XG4gIGNvbnRleHQucm90YXRlKGFuZ2xlKTtcbiAgaWYgKGZpbGwpIHtcbiAgICBjb250ZXh0LmZpbGxSZWN0KHggLSBjeCwgeSAtIGN5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgfVxuICBjb250ZXh0LnN0cm9rZVJlY3QoeCAtIGN4LCB5IC0gY3ksIHdpZHRoLCBoZWlnaHQpO1xuICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cbmNvbnN0IHN0cm9rZURpYW1vbmRXaXRoUm90YXRpb24gPSAoXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGN4OiBudW1iZXIsXG4gIGN5OiBudW1iZXIsXG4gIGFuZ2xlOiBudW1iZXIsXG4pID0+IHtcbiAgY29udGV4dC5zYXZlKCk7XG4gIGNvbnRleHQudHJhbnNsYXRlKGN4LCBjeSk7XG4gIGNvbnRleHQucm90YXRlKGFuZ2xlKTtcbiAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgY29udGV4dC5tb3ZlVG8oMCwgaGVpZ2h0IC8gMik7XG4gIGNvbnRleHQubGluZVRvKHdpZHRoIC8gMiwgMCk7XG4gIGNvbnRleHQubGluZVRvKDAsIC1oZWlnaHQgLyAyKTtcbiAgY29udGV4dC5saW5lVG8oLXdpZHRoIC8gMiwgMCk7XG4gIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIGNvbnRleHQuc3Ryb2tlKCk7XG4gIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuY29uc3Qgc3Ryb2tlRWxsaXBzZVdpdGhSb3RhdGlvbiA9IChcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgY3g6IG51bWJlcixcbiAgY3k6IG51bWJlcixcbiAgYW5nbGU6IG51bWJlcixcbikgPT4ge1xuICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjb250ZXh0LmVsbGlwc2UoY3gsIGN5LCB3aWR0aCAvIDIsIGhlaWdodCAvIDIsIGFuZ2xlLCAwLCBNYXRoLlBJICogMik7XG4gIGNvbnRleHQuc3Ryb2tlKCk7XG59O1xuXG5jb25zdCBmaWxsQ2lyY2xlID0gKFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIGN4OiBudW1iZXIsXG4gIGN5OiBudW1iZXIsXG4gIHJhZGl1czogbnVtYmVyLFxuKSA9PiB7XG4gIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIGNvbnRleHQuYXJjKGN4LCBjeSwgcmFkaXVzLCAwLCBNYXRoLlBJICogMik7XG4gIGNvbnRleHQuZmlsbCgpO1xuICBjb250ZXh0LnN0cm9rZSgpO1xufTtcblxuY29uc3Qgc3Ryb2tlR3JpZCA9IChcbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICBncmlkU2l6ZTogbnVtYmVyLFxuICBvZmZzZXRYOiBudW1iZXIsXG4gIG9mZnNldFk6IG51bWJlcixcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4pID0+IHtcbiAgY29udGV4dC5zYXZlKCk7XG4gIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMC4xKVwiO1xuICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICBmb3IgKGxldCB4ID0gb2Zmc2V0WDsgeCA8IG9mZnNldFggKyB3aWR0aCArIGdyaWRTaXplICogMjsgeCArPSBncmlkU2l6ZSkge1xuICAgIGNvbnRleHQubW92ZVRvKHgsIG9mZnNldFkgLSBncmlkU2l6ZSk7XG4gICAgY29udGV4dC5saW5lVG8oeCwgb2Zmc2V0WSArIGhlaWdodCArIGdyaWRTaXplICogMik7XG4gIH1cbiAgZm9yIChsZXQgeSA9IG9mZnNldFk7IHkgPCBvZmZzZXRZICsgaGVpZ2h0ICsgZ3JpZFNpemUgKiAyOyB5ICs9IGdyaWRTaXplKSB7XG4gICAgY29udGV4dC5tb3ZlVG8ob2Zmc2V0WCAtIGdyaWRTaXplLCB5KTtcbiAgICBjb250ZXh0LmxpbmVUbyhvZmZzZXRYICsgd2lkdGggKyBncmlkU2l6ZSAqIDIsIHkpO1xuICB9XG4gIGNvbnRleHQuc3Ryb2tlKCk7XG4gIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuY29uc3QgcmVuZGVyTGluZWFyUG9pbnRIYW5kbGVzID0gKFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgcmVuZGVyQ29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGVsZW1lbnQ6IE5vbkRlbGV0ZWQ8RXhjYWxpZHJhd0xpbmVhckVsZW1lbnQ+LFxuKSA9PiB7XG4gIGNvbnRleHQuc2F2ZSgpO1xuICBjb250ZXh0LnRyYW5zbGF0ZShyZW5kZXJDb25maWcuc2Nyb2xsWCwgcmVuZGVyQ29uZmlnLnNjcm9sbFkpO1xuICBjb250ZXh0LmxpbmVXaWR0aCA9IDEgLyByZW5kZXJDb25maWcuem9vbS52YWx1ZTtcblxuICBMaW5lYXJFbGVtZW50RWRpdG9yLmdldFBvaW50c0dsb2JhbENvb3JkaW5hdGVzKGVsZW1lbnQpLmZvckVhY2goXG4gICAgKHBvaW50LCBpZHgpID0+IHtcbiAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBcInJlZFwiO1xuICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9XG4gICAgICAgIGFwcFN0YXRlLmVkaXRpbmdMaW5lYXJFbGVtZW50Py5hY3RpdmVQb2ludEluZGV4ID09PSBpZHhcbiAgICAgICAgICA/IFwicmdiYSgyNTUsIDEyNywgMTI3LCAwLjkpXCJcbiAgICAgICAgICA6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpXCI7XG4gICAgICBjb25zdCB7IFBPSU5UX0hBTkRMRV9TSVpFIH0gPSBMaW5lYXJFbGVtZW50RWRpdG9yO1xuICAgICAgZmlsbENpcmNsZShcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgcG9pbnRbMF0sXG4gICAgICAgIHBvaW50WzFdLFxuICAgICAgICBQT0lOVF9IQU5ETEVfU0laRSAvIDIgLyByZW5kZXJDb25maWcuem9vbS52YWx1ZSxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcbiAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVuZGVyU2NlbmUgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuICBzZWxlY3Rpb25FbGVtZW50OiBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsLFxuICBzY2FsZTogbnVtYmVyLFxuICByYzogUm91Z2hDYW52YXMsXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXG4gIHJlbmRlckNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICAvLyBleHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgcmVuZGVyZXJcbikgPT4ge1xuICBpZiAoY2FudmFzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHsgYXRMZWFzdE9uZVZpc2libGVFbGVtZW50OiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3Qge1xuICAgIHJlbmRlclNjcm9sbGJhcnMgPSB0cnVlLFxuICAgIHJlbmRlclNlbGVjdGlvbiA9IHRydWUsXG4gICAgcmVuZGVyR3JpZCA9IHRydWUsXG4gICAgaXNFeHBvcnRpbmcsXG4gIH0gPSByZW5kZXJDb25maWc7XG5cbiAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikhO1xuXG4gIGNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICBjb250ZXh0LnNhdmUoKTtcbiAgY29udGV4dC5zY2FsZShzY2FsZSwgc2NhbGUpO1xuXG4gIC8vIFdoZW4gZG9pbmcgY2FsY3VsYXRpb25zIGJhc2VkIG9uIGNhbnZhcyB3aWR0aCB3ZSBzaG91bGQgdXNlZCBub3JtYWxpemVkIG9uZVxuICBjb25zdCBub3JtYWxpemVkQ2FudmFzV2lkdGggPSBjYW52YXMud2lkdGggLyBzY2FsZTtcbiAgY29uc3Qgbm9ybWFsaXplZENhbnZhc0hlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBzY2FsZTtcblxuICBpZiAoaXNFeHBvcnRpbmcgJiYgcmVuZGVyQ29uZmlnLnRoZW1lID09PSBcImRhcmtcIikge1xuICAgIGNvbnRleHQuZmlsdGVyID0gVEhFTUVfRklMVEVSO1xuICB9XG5cbiAgLy8gUGFpbnQgYmFja2dyb3VuZFxuICBpZiAodHlwZW9mIHJlbmRlckNvbmZpZy52aWV3QmFja2dyb3VuZENvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgaGFzVHJhbnNwYXJlbmNlID1cbiAgICAgIHJlbmRlckNvbmZpZy52aWV3QmFja2dyb3VuZENvbG9yID09PSBcInRyYW5zcGFyZW50XCIgfHxcbiAgICAgIHJlbmRlckNvbmZpZy52aWV3QmFja2dyb3VuZENvbG9yLmxlbmd0aCA9PT0gNSB8fCAvLyAjUkdCQVxuICAgICAgcmVuZGVyQ29uZmlnLnZpZXdCYWNrZ3JvdW5kQ29sb3IubGVuZ3RoID09PSA5IHx8IC8vICNSUkdHQkJBXG4gICAgICAvKGhzbGF8cmdiYSlcXCgvLnRlc3QocmVuZGVyQ29uZmlnLnZpZXdCYWNrZ3JvdW5kQ29sb3IpO1xuICAgIGlmIChoYXNUcmFuc3BhcmVuY2UpIHtcbiAgICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIG5vcm1hbGl6ZWRDYW52YXNXaWR0aCwgbm9ybWFsaXplZENhbnZhc0hlaWdodCk7XG4gICAgfVxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gcmVuZGVyQ29uZmlnLnZpZXdCYWNrZ3JvdW5kQ29sb3I7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBub3JtYWxpemVkQ2FudmFzV2lkdGgsIG5vcm1hbGl6ZWRDYW52YXNIZWlnaHQpO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIG5vcm1hbGl6ZWRDYW52YXNXaWR0aCwgbm9ybWFsaXplZENhbnZhc0hlaWdodCk7XG4gIH1cblxuICAvLyBBcHBseSB6b29tXG4gIGNvbnN0IHpvb21UcmFuc2xhdGlvblggPSByZW5kZXJDb25maWcuem9vbS50cmFuc2xhdGlvbi54O1xuICBjb25zdCB6b29tVHJhbnNsYXRpb25ZID0gcmVuZGVyQ29uZmlnLnpvb20udHJhbnNsYXRpb24ueTtcbiAgY29udGV4dC5zYXZlKCk7XG4gIGNvbnRleHQudHJhbnNsYXRlKHpvb21UcmFuc2xhdGlvblgsIHpvb21UcmFuc2xhdGlvblkpO1xuICBjb250ZXh0LnNjYWxlKHJlbmRlckNvbmZpZy56b29tLnZhbHVlLCByZW5kZXJDb25maWcuem9vbS52YWx1ZSk7XG5cbiAgLy8gR3JpZFxuICBpZiAocmVuZGVyR3JpZCAmJiBhcHBTdGF0ZS5ncmlkU2l6ZSkge1xuICAgIHN0cm9rZUdyaWQoXG4gICAgICBjb250ZXh0LFxuICAgICAgYXBwU3RhdGUuZ3JpZFNpemUsXG4gICAgICAtTWF0aC5jZWlsKFxuICAgICAgICB6b29tVHJhbnNsYXRpb25YIC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWUgLyBhcHBTdGF0ZS5ncmlkU2l6ZSxcbiAgICAgICkgKlxuICAgICAgICBhcHBTdGF0ZS5ncmlkU2l6ZSArXG4gICAgICAgIChyZW5kZXJDb25maWcuc2Nyb2xsWCAlIGFwcFN0YXRlLmdyaWRTaXplKSxcbiAgICAgIC1NYXRoLmNlaWwoXG4gICAgICAgIHpvb21UcmFuc2xhdGlvblkgLyByZW5kZXJDb25maWcuem9vbS52YWx1ZSAvIGFwcFN0YXRlLmdyaWRTaXplLFxuICAgICAgKSAqXG4gICAgICAgIGFwcFN0YXRlLmdyaWRTaXplICtcbiAgICAgICAgKHJlbmRlckNvbmZpZy5zY3JvbGxZICUgYXBwU3RhdGUuZ3JpZFNpemUpLFxuICAgICAgbm9ybWFsaXplZENhbnZhc1dpZHRoIC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWUsXG4gICAgICBub3JtYWxpemVkQ2FudmFzSGVpZ2h0IC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWUsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBhaW50IHZpc2libGUgZWxlbWVudHNcbiAgY29uc3QgdmlzaWJsZUVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKChlbGVtZW50KSA9PlxuICAgIGlzVmlzaWJsZUVsZW1lbnQoZWxlbWVudCwgbm9ybWFsaXplZENhbnZhc1dpZHRoLCBub3JtYWxpemVkQ2FudmFzSGVpZ2h0LCB7XG4gICAgICB6b29tOiByZW5kZXJDb25maWcuem9vbSxcbiAgICAgIG9mZnNldExlZnQ6IGFwcFN0YXRlLm9mZnNldExlZnQsXG4gICAgICBvZmZzZXRUb3A6IGFwcFN0YXRlLm9mZnNldFRvcCxcbiAgICAgIHNjcm9sbFg6IHJlbmRlckNvbmZpZy5zY3JvbGxYLFxuICAgICAgc2Nyb2xsWTogcmVuZGVyQ29uZmlnLnNjcm9sbFksXG4gICAgfSksXG4gICk7XG5cbiAgdmlzaWJsZUVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyRWxlbWVudChlbGVtZW50LCByYywgY29udGV4dCwgcmVuZGVyQ29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChhcHBTdGF0ZS5lZGl0aW5nTGluZWFyRWxlbWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBMaW5lYXJFbGVtZW50RWRpdG9yLmdldEVsZW1lbnQoXG4gICAgICBhcHBTdGF0ZS5lZGl0aW5nTGluZWFyRWxlbWVudC5lbGVtZW50SWQsXG4gICAgKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVuZGVyTGluZWFyUG9pbnRIYW5kbGVzKGNvbnRleHQsIGFwcFN0YXRlLCByZW5kZXJDb25maWcsIGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBhaW50IHNlbGVjdGlvbiBlbGVtZW50XG4gIGlmIChzZWxlY3Rpb25FbGVtZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlckVsZW1lbnQoc2VsZWN0aW9uRWxlbWVudCwgcmMsIGNvbnRleHQsIHJlbmRlckNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQmluZGluZ0VuYWJsZWQoYXBwU3RhdGUpKSB7XG4gICAgYXBwU3RhdGUuc3VnZ2VzdGVkQmluZGluZ3NcbiAgICAgIC5maWx0ZXIoKGJpbmRpbmcpID0+IGJpbmRpbmcgIT0gbnVsbClcbiAgICAgIC5mb3JFYWNoKChzdWdnZXN0ZWRCaW5kaW5nKSA9PiB7XG4gICAgICAgIHJlbmRlckJpbmRpbmdIaWdobGlnaHQoY29udGV4dCwgcmVuZGVyQ29uZmlnLCBzdWdnZXN0ZWRCaW5kaW5nISk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFBhaW50IHNlbGVjdGVkIGVsZW1lbnRzXG4gIGlmIChcbiAgICByZW5kZXJTZWxlY3Rpb24gJiZcbiAgICAhYXBwU3RhdGUubXVsdGlFbGVtZW50ICYmXG4gICAgIWFwcFN0YXRlLmVkaXRpbmdMaW5lYXJFbGVtZW50XG4gICkge1xuICAgIGNvbnN0IHNlbGVjdGlvbnMgPSBlbGVtZW50cy5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uQ29sb3JzID0gW107XG4gICAgICAvLyBsb2NhbCB1c2VyXG4gICAgICBpZiAoXG4gICAgICAgIGFwcFN0YXRlLnNlbGVjdGVkRWxlbWVudElkc1tlbGVtZW50LmlkXSAmJlxuICAgICAgICAhaXNTZWxlY3RlZFZpYUdyb3VwKGFwcFN0YXRlLCBlbGVtZW50KVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGlvbkNvbG9ycy5wdXNoKG9jLmJsYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlbW90ZSB1c2Vyc1xuICAgICAgaWYgKHJlbmRlckNvbmZpZy5yZW1vdGVTZWxlY3RlZEVsZW1lbnRJZHNbZWxlbWVudC5pZF0pIHtcbiAgICAgICAgc2VsZWN0aW9uQ29sb3JzLnB1c2goXG4gICAgICAgICAgLi4ucmVuZGVyQ29uZmlnLnJlbW90ZVNlbGVjdGVkRWxlbWVudElkc1tlbGVtZW50LmlkXS5tYXAoXG4gICAgICAgICAgICAoc29ja2V0SWQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGljdHVyZSA9IGFwcFN0YXRlLmNvbGxhYm9yYXRvcnMuZ2V0KHNvY2tldElkKT8ucGljdHVyZTtcbiAgICAgICAgICAgICAgY29uc3QgeyBiYWNrZ3JvdW5kIH0gPSBnZXRDbGllbnRDb2xvcnMoXG4gICAgICAgICAgICAgICAgcGljdHVyZSB8fCBzb2NrZXRJZCxcbiAgICAgICAgICAgICAgICBhcHBTdGF0ZSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGJhY2tncm91bmQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc2VsZWN0aW9uQ29sb3JzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBbZWxlbWVudFgxLCBlbGVtZW50WTEsIGVsZW1lbnRYMiwgZWxlbWVudFkyXSA9XG4gICAgICAgICAgZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnQpO1xuICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgYW5nbGU6IGVsZW1lbnQuYW5nbGUsXG4gICAgICAgICAgZWxlbWVudFgxLFxuICAgICAgICAgIGVsZW1lbnRZMSxcbiAgICAgICAgICBlbGVtZW50WDIsXG4gICAgICAgICAgZWxlbWVudFkyLFxuICAgICAgICAgIHNlbGVjdGlvbkNvbG9ycyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdIGFzIHsgYW5nbGU6IG51bWJlcjsgZWxlbWVudFgxOiBudW1iZXI7IGVsZW1lbnRZMTogbnVtYmVyOyBlbGVtZW50WDI6IG51bWJlcjsgZWxlbWVudFkyOiBudW1iZXI7IHNlbGVjdGlvbkNvbG9yczogc3RyaW5nW10gfVtdKTtcblxuICAgIGNvbnN0IGFkZFNlbGVjdGlvbkZvckdyb3VwSWQgPSAoZ3JvdXBJZDogR3JvdXBJZCkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBFbGVtZW50cyA9IGdldEVsZW1lbnRzSW5Hcm91cChlbGVtZW50cywgZ3JvdXBJZCk7XG4gICAgICBjb25zdCBbZWxlbWVudFgxLCBlbGVtZW50WTEsIGVsZW1lbnRYMiwgZWxlbWVudFkyXSA9XG4gICAgICAgIGdldENvbW1vbkJvdW5kcyhncm91cEVsZW1lbnRzKTtcbiAgICAgIHNlbGVjdGlvbnMucHVzaCh7XG4gICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICBlbGVtZW50WDEsXG4gICAgICAgIGVsZW1lbnRYMixcbiAgICAgICAgZWxlbWVudFkxLFxuICAgICAgICBlbGVtZW50WTIsXG4gICAgICAgIHNlbGVjdGlvbkNvbG9yczogW29jLmJsYWNrXSxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwSWQgb2YgZ2V0U2VsZWN0ZWRHcm91cElkcyhhcHBTdGF0ZSkpIHtcbiAgICAgIC8vIFRPRE86IHN1cHBvcnQgbXVsdGlwbGF5ZXIgc2VsZWN0ZWQgZ3JvdXAgSURzXG4gICAgICBhZGRTZWxlY3Rpb25Gb3JHcm91cElkKGdyb3VwSWQpO1xuICAgIH1cblxuICAgIGlmIChhcHBTdGF0ZS5lZGl0aW5nR3JvdXBJZCkge1xuICAgICAgYWRkU2VsZWN0aW9uRm9yR3JvdXBJZChhcHBTdGF0ZS5lZGl0aW5nR3JvdXBJZCk7XG4gICAgfVxuXG4gICAgc2VsZWN0aW9ucy5mb3JFYWNoKChzZWxlY3Rpb24pID0+XG4gICAgICByZW5kZXJTZWxlY3Rpb25Cb3JkZXIoY29udGV4dCwgcmVuZGVyQ29uZmlnLCBzZWxlY3Rpb24pLFxuICAgICk7XG5cbiAgICBjb25zdCBsb2NhbGx5U2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoZWxlbWVudHMsIGFwcFN0YXRlKTtcblxuICAgIC8vIFBhaW50IHJlc2l6ZSB0cmFuc2Zvcm1IYW5kbGVzXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC50cmFuc2xhdGUocmVuZGVyQ29uZmlnLnNjcm9sbFgsIHJlbmRlckNvbmZpZy5zY3JvbGxZKTtcbiAgICBpZiAobG9jYWxseVNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IG9jLndoaXRlO1xuICAgICAgY29uc3QgdHJhbnNmb3JtSGFuZGxlcyA9IGdldFRyYW5zZm9ybUhhbmRsZXMoXG4gICAgICAgIGxvY2FsbHlTZWxlY3RlZEVsZW1lbnRzWzBdLFxuICAgICAgICByZW5kZXJDb25maWcuem9vbSxcbiAgICAgICAgXCJtb3VzZVwiLCAvLyB3aGVuIHdlIHJlbmRlciB3ZSBkb24ndCBrbm93IHdoaWNoIHBvaW50ZXIgdHlwZSBzbyB1c2UgbW91c2VcbiAgICAgICk7XG4gICAgICBpZiAoIWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCkge1xuICAgICAgICByZW5kZXJUcmFuc2Zvcm1IYW5kbGVzKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgcmVuZGVyQ29uZmlnLFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZXMsXG4gICAgICAgICAgbG9jYWxseVNlbGVjdGVkRWxlbWVudHNbMF0uYW5nbGUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsb2NhbGx5U2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAxICYmICFhcHBTdGF0ZS5pc1JvdGF0aW5nKSB7XG4gICAgICBjb25zdCBkYXNoZWRMaW5lUGFkZGluZyA9IDQgLyByZW5kZXJDb25maWcuem9vbS52YWx1ZTtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gb2Mud2hpdGU7XG4gICAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0Q29tbW9uQm91bmRzKGxvY2FsbHlTZWxlY3RlZEVsZW1lbnRzKTtcbiAgICAgIGNvbnN0IGluaXRpYWxMaW5lRGFzaCA9IGNvbnRleHQuZ2V0TGluZURhc2goKTtcbiAgICAgIGNvbnRleHQuc2V0TGluZURhc2goWzIgLyByZW5kZXJDb25maWcuem9vbS52YWx1ZV0pO1xuICAgICAgY29uc3QgbGluZVdpZHRoID0gY29udGV4dC5saW5lV2lkdGg7XG4gICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDEgLyByZW5kZXJDb25maWcuem9vbS52YWx1ZTtcbiAgICAgIHN0cm9rZVJlY3RXaXRoUm90YXRpb24oXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHgxIC0gZGFzaGVkTGluZVBhZGRpbmcsXG4gICAgICAgIHkxIC0gZGFzaGVkTGluZVBhZGRpbmcsXG4gICAgICAgIHgyIC0geDEgKyBkYXNoZWRMaW5lUGFkZGluZyAqIDIsXG4gICAgICAgIHkyIC0geTEgKyBkYXNoZWRMaW5lUGFkZGluZyAqIDIsXG4gICAgICAgICh4MSArIHgyKSAvIDIsXG4gICAgICAgICh5MSArIHkyKSAvIDIsXG4gICAgICAgIDAsXG4gICAgICApO1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgICBjb250ZXh0LnNldExpbmVEYXNoKGluaXRpYWxMaW5lRGFzaCk7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1IYW5kbGVzID0gZ2V0VHJhbnNmb3JtSGFuZGxlc0Zyb21Db29yZHMoXG4gICAgICAgIFt4MSwgeTEsIHgyLCB5Ml0sXG4gICAgICAgIDAsXG4gICAgICAgIHJlbmRlckNvbmZpZy56b29tLFxuICAgICAgICBcIm1vdXNlXCIsXG4gICAgICAgIE9NSVRfU0lERVNfRk9SX01VTFRJUExFX0VMRU1FTlRTLFxuICAgICAgKTtcbiAgICAgIHJlbmRlclRyYW5zZm9ybUhhbmRsZXMoY29udGV4dCwgcmVuZGVyQ29uZmlnLCB0cmFuc2Zvcm1IYW5kbGVzLCAwKTtcbiAgICB9XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG4gIH1cblxuICAvLyBSZXNldCB6b29tXG4gIGNvbnRleHQucmVzdG9yZSgpO1xuXG4gIC8vIFBhaW50IHJlbW90ZSBwb2ludGVyc1xuICBmb3IgKGNvbnN0IGNsaWVudElkIGluIHJlbmRlckNvbmZpZy5yZW1vdGVQb2ludGVyVmlld3BvcnRDb29yZHMpIHtcbiAgICBsZXQgeyB4LCB5IH0gPSByZW5kZXJDb25maWcucmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzW2NsaWVudElkXTtcbiAgICB4IC09IGFwcFN0YXRlLm9mZnNldExlZnQ7XG4gICAgeSAtPSBhcHBTdGF0ZS5vZmZzZXRUb3A7XG5cbiAgICBjb25zdCB3aWR0aCA9IDk7XG4gICAgY29uc3QgaGVpZ2h0ID0gMTQ7XG5cbiAgICBjb25zdCBpc091dE9mQm91bmRzID1cbiAgICAgIHggPCAwIHx8XG4gICAgICB4ID4gbm9ybWFsaXplZENhbnZhc1dpZHRoIC0gd2lkdGggfHxcbiAgICAgIHkgPCAwIHx8XG4gICAgICB5ID4gbm9ybWFsaXplZENhbnZhc0hlaWdodCAtIGhlaWdodDtcblxuICAgIHggPSBNYXRoLm1heCh4LCAwKTtcbiAgICB4ID0gTWF0aC5taW4oeCwgbm9ybWFsaXplZENhbnZhc1dpZHRoIC0gd2lkdGgpO1xuICAgIHkgPSBNYXRoLm1heCh5LCAwKTtcbiAgICB5ID0gTWF0aC5taW4oeSwgbm9ybWFsaXplZENhbnZhc0hlaWdodCAtIGhlaWdodCk7XG5cbiAgICBjb25zdCBwaWN0dXJlID0gYXBwU3RhdGUuY29sbGFib3JhdG9ycy5nZXQoY2xpZW50SWQpPy5waWN0dXJlO1xuICAgIGNvbnN0IHsgYmFja2dyb3VuZCwgc3Ryb2tlIH0gPSBnZXRDbGllbnRDb2xvcnMoXG4gICAgICBwaWN0dXJlIHx8IGNsaWVudElkLFxuICAgICAgYXBwU3RhdGUsXG4gICAgKTtcblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHJva2U7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kO1xuXG4gICAgY29uc3QgdXNlclN0YXRlID0gcmVuZGVyQ29uZmlnLnJlbW90ZVBvaW50ZXJVc2VyU3RhdGVzW2NsaWVudElkXTtcbiAgICBpZiAoaXNPdXRPZkJvdW5kcyB8fCB1c2VyU3RhdGUgPT09IFVzZXJJZGxlU3RhdGUuQVdBWSkge1xuICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IDAuNDg7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVuZGVyQ29uZmlnLnJlbW90ZVBvaW50ZXJCdXR0b24gJiZcbiAgICAgIHJlbmRlckNvbmZpZy5yZW1vdGVQb2ludGVyQnV0dG9uW2NsaWVudElkXSA9PT0gXCJkb3duXCJcbiAgICApIHtcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICBjb250ZXh0LmFyYyh4LCB5LCAxNSwgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMztcbiAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBcIiNmZmZmZmY4OFwiO1xuICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICBjb250ZXh0LmFyYyh4LCB5LCAxNSwgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMTtcbiAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHJva2U7XG4gICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGNvbnRleHQubW92ZVRvKHgsIHkpO1xuICAgIGNvbnRleHQubGluZVRvKHggKyAxLCB5ICsgMTQpO1xuICAgIGNvbnRleHQubGluZVRvKHggKyA0LCB5ICsgOSk7XG4gICAgY29udGV4dC5saW5lVG8oeCArIDksIHkgKyAxMCk7XG4gICAgY29udGV4dC5saW5lVG8oeCwgeSk7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5zdHJva2UoKTtcblxuICAgIGNvbnN0IHVzZXJuYW1lID0gcmVuZGVyQ29uZmlnLnJlbW90ZVBvaW50ZXJVc2VybmFtZXNbY2xpZW50SWRdO1xuXG4gICAgbGV0IGlkbGVTdGF0ZSA9IFwiXCI7XG4gICAgaWYgKHVzZXJTdGF0ZSA9PT0gVXNlcklkbGVTdGF0ZS5BV0FZKSB7XG4gICAgICBpZGxlU3RhdGUgPSBoYXNFbW9qaVN1cHBvcnQgPyBcIuKaq++4j1wiIDogYCAoJHtVc2VySWRsZVN0YXRlLkFXQVl9KWA7XG4gICAgfSBlbHNlIGlmICh1c2VyU3RhdGUgPT09IFVzZXJJZGxlU3RhdGUuSURMRSkge1xuICAgICAgaWRsZVN0YXRlID0gaGFzRW1vamlTdXBwb3J0ID8gXCLwn5KkXCIgOiBgICgke1VzZXJJZGxlU3RhdGUuSURMRX0pYDtcbiAgICB9IGVsc2UgaWYgKHVzZXJTdGF0ZSA9PT0gVXNlcklkbGVTdGF0ZS5BQ1RJVkUpIHtcbiAgICAgIGlkbGVTdGF0ZSA9IGhhc0Vtb2ppU3VwcG9ydCA/IFwi8J+folwiIDogXCJcIjtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VybmFtZUFuZElkbGVTdGF0ZSA9IGAke1xuICAgICAgdXNlcm5hbWUgPyBgJHt1c2VybmFtZX0gYCA6IFwiXCJcbiAgICB9JHtpZGxlU3RhdGV9YDtcblxuICAgIGlmICghaXNPdXRPZkJvdW5kcyAmJiB1c2VybmFtZUFuZElkbGVTdGF0ZSkge1xuICAgICAgY29uc3Qgb2Zmc2V0WCA9IHggKyB3aWR0aDtcbiAgICAgIGNvbnN0IG9mZnNldFkgPSB5ICsgaGVpZ2h0O1xuICAgICAgY29uc3QgcGFkZGluZ0hvcml6b250YWwgPSA0O1xuICAgICAgY29uc3QgcGFkZGluZ1ZlcnRpY2FsID0gNDtcbiAgICAgIGNvbnN0IG1lYXN1cmUgPSBjb250ZXh0Lm1lYXN1cmVUZXh0KHVzZXJuYW1lQW5kSWRsZVN0YXRlKTtcbiAgICAgIGNvbnN0IG1lYXN1cmVIZWlnaHQgPVxuICAgICAgICBtZWFzdXJlLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCArIG1lYXN1cmUuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQ7XG5cbiAgICAgIC8vIEJvcmRlclxuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBzdHJva2U7XG4gICAgICBjb250ZXh0LmZpbGxSZWN0KFxuICAgICAgICBvZmZzZXRYIC0gMSxcbiAgICAgICAgb2Zmc2V0WSAtIDEsXG4gICAgICAgIG1lYXN1cmUud2lkdGggKyAyICogcGFkZGluZ0hvcml6b250YWwgKyAyLFxuICAgICAgICBtZWFzdXJlSGVpZ2h0ICsgMiAqIHBhZGRpbmdWZXJ0aWNhbCArIDIsXG4gICAgICApO1xuICAgICAgLy8gQmFja2dyb3VuZFxuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kO1xuICAgICAgY29udGV4dC5maWxsUmVjdChcbiAgICAgICAgb2Zmc2V0WCxcbiAgICAgICAgb2Zmc2V0WSxcbiAgICAgICAgbWVhc3VyZS53aWR0aCArIDIgKiBwYWRkaW5nSG9yaXpvbnRhbCxcbiAgICAgICAgbWVhc3VyZUhlaWdodCArIDIgKiBwYWRkaW5nVmVydGljYWwsXG4gICAgICApO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBvYy53aGl0ZTtcblxuICAgICAgY29udGV4dC5maWxsVGV4dChcbiAgICAgICAgdXNlcm5hbWVBbmRJZGxlU3RhdGUsXG4gICAgICAgIG9mZnNldFggKyBwYWRkaW5nSG9yaXpvbnRhbCxcbiAgICAgICAgb2Zmc2V0WSArIHBhZGRpbmdWZXJ0aWNhbCArIG1lYXN1cmUuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cblxuICAvLyBQYWludCBzY3JvbGxiYXJzXG4gIGxldCBzY3JvbGxCYXJzO1xuICBpZiAocmVuZGVyU2Nyb2xsYmFycykge1xuICAgIHNjcm9sbEJhcnMgPSBnZXRTY3JvbGxCYXJzKFxuICAgICAgZWxlbWVudHMsXG4gICAgICBub3JtYWxpemVkQ2FudmFzV2lkdGgsXG4gICAgICBub3JtYWxpemVkQ2FudmFzSGVpZ2h0LFxuICAgICAgcmVuZGVyQ29uZmlnLFxuICAgICk7XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFNDUk9MTEJBUl9DT0xPUjtcbiAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDI1NSwyNTUsMjU1LDAuOClcIjtcbiAgICBbc2Nyb2xsQmFycy5ob3Jpem9udGFsLCBzY3JvbGxCYXJzLnZlcnRpY2FsXS5mb3JFYWNoKChzY3JvbGxCYXIpID0+IHtcbiAgICAgIGlmIChzY3JvbGxCYXIpIHtcbiAgICAgICAgcm91bmRSZWN0KFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgc2Nyb2xsQmFyLngsXG4gICAgICAgICAgc2Nyb2xsQmFyLnksXG4gICAgICAgICAgc2Nyb2xsQmFyLndpZHRoLFxuICAgICAgICAgIHNjcm9sbEJhci5oZWlnaHQsXG4gICAgICAgICAgU0NST0xMQkFSX1dJRFRIIC8gMixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgfVxuXG4gIGNvbnRleHQucmVzdG9yZSgpO1xuICByZXR1cm4geyBhdExlYXN0T25lVmlzaWJsZUVsZW1lbnQ6IHZpc2libGVFbGVtZW50cy5sZW5ndGggPiAwLCBzY3JvbGxCYXJzIH07XG59O1xuXG5jb25zdCByZW5kZXJUcmFuc2Zvcm1IYW5kbGVzID0gKFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHJlbmRlckNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICB0cmFuc2Zvcm1IYW5kbGVzOiBUcmFuc2Zvcm1IYW5kbGVzLFxuICBhbmdsZTogbnVtYmVyLFxuKTogdm9pZCA9PiB7XG4gIE9iamVjdC5rZXlzKHRyYW5zZm9ybUhhbmRsZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybUhhbmRsZSA9IHRyYW5zZm9ybUhhbmRsZXNba2V5IGFzIFRyYW5zZm9ybUhhbmRsZVR5cGVdO1xuICAgIGlmICh0cmFuc2Zvcm1IYW5kbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGV4dC5zYXZlKCk7XG4gICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDEgLyByZW5kZXJDb25maWcuem9vbS52YWx1ZTtcbiAgICAgIGlmIChrZXkgPT09IFwicm90YXRpb25cIikge1xuICAgICAgICBmaWxsQ2lyY2xlKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgdHJhbnNmb3JtSGFuZGxlWzBdICsgdHJhbnNmb3JtSGFuZGxlWzJdIC8gMixcbiAgICAgICAgICB0cmFuc2Zvcm1IYW5kbGVbMV0gKyB0cmFuc2Zvcm1IYW5kbGVbM10gLyAyLFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZVsyXSAvIDIsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJva2VSZWN0V2l0aFJvdGF0aW9uKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgdHJhbnNmb3JtSGFuZGxlWzBdLFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZVsxXSxcbiAgICAgICAgICB0cmFuc2Zvcm1IYW5kbGVbMl0sXG4gICAgICAgICAgdHJhbnNmb3JtSGFuZGxlWzNdLFxuICAgICAgICAgIHRyYW5zZm9ybUhhbmRsZVswXSArIHRyYW5zZm9ybUhhbmRsZVsyXSAvIDIsXG4gICAgICAgICAgdHJhbnNmb3JtSGFuZGxlWzFdICsgdHJhbnNmb3JtSGFuZGxlWzNdIC8gMixcbiAgICAgICAgICBhbmdsZSxcbiAgICAgICAgICB0cnVlLCAvLyBmaWxsIGJlZm9yZSBzdHJva2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCByZW5kZXJTZWxlY3Rpb25Cb3JkZXIgPSAoXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgcmVuZGVyQ29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGVsZW1lbnRQcm9wZXJ0aWVzOiB7XG4gICAgYW5nbGU6IG51bWJlcjtcbiAgICBlbGVtZW50WDE6IG51bWJlcjtcbiAgICBlbGVtZW50WTE6IG51bWJlcjtcbiAgICBlbGVtZW50WDI6IG51bWJlcjtcbiAgICBlbGVtZW50WTI6IG51bWJlcjtcbiAgICBzZWxlY3Rpb25Db2xvcnM6IHN0cmluZ1tdO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHsgYW5nbGUsIGVsZW1lbnRYMSwgZWxlbWVudFkxLCBlbGVtZW50WDIsIGVsZW1lbnRZMiwgc2VsZWN0aW9uQ29sb3JzIH0gPVxuICAgIGVsZW1lbnRQcm9wZXJ0aWVzO1xuICBjb25zdCBlbGVtZW50V2lkdGggPSBlbGVtZW50WDIgLSBlbGVtZW50WDE7XG4gIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSBlbGVtZW50WTIgLSBlbGVtZW50WTE7XG5cbiAgY29uc3QgZGFzaGVkTGluZVBhZGRpbmcgPSA0IC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWU7XG4gIGNvbnN0IGRhc2hXaWR0aCA9IDggLyByZW5kZXJDb25maWcuem9vbS52YWx1ZTtcbiAgY29uc3Qgc3BhY2VXaWR0aCA9IDQgLyByZW5kZXJDb25maWcuem9vbS52YWx1ZTtcblxuICBjb250ZXh0LnNhdmUoKTtcbiAgY29udGV4dC50cmFuc2xhdGUocmVuZGVyQ29uZmlnLnNjcm9sbFgsIHJlbmRlckNvbmZpZy5zY3JvbGxZKTtcbiAgY29udGV4dC5saW5lV2lkdGggPSAxIC8gcmVuZGVyQ29uZmlnLnpvb20udmFsdWU7XG5cbiAgY29uc3QgY291bnQgPSBzZWxlY3Rpb25Db2xvcnMubGVuZ3RoO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHtcbiAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gc2VsZWN0aW9uQ29sb3JzW2luZGV4XTtcbiAgICBjb250ZXh0LnNldExpbmVEYXNoKFtcbiAgICAgIGRhc2hXaWR0aCxcbiAgICAgIHNwYWNlV2lkdGggKyAoZGFzaFdpZHRoICsgc3BhY2VXaWR0aCkgKiAoY291bnQgLSAxKSxcbiAgICBdKTtcbiAgICBjb250ZXh0LmxpbmVEYXNoT2Zmc2V0ID0gKGRhc2hXaWR0aCArIHNwYWNlV2lkdGgpICogaW5kZXg7XG4gICAgc3Ryb2tlUmVjdFdpdGhSb3RhdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBlbGVtZW50WDEgLSBkYXNoZWRMaW5lUGFkZGluZyxcbiAgICAgIGVsZW1lbnRZMSAtIGRhc2hlZExpbmVQYWRkaW5nLFxuICAgICAgZWxlbWVudFdpZHRoICsgZGFzaGVkTGluZVBhZGRpbmcgKiAyLFxuICAgICAgZWxlbWVudEhlaWdodCArIGRhc2hlZExpbmVQYWRkaW5nICogMixcbiAgICAgIGVsZW1lbnRYMSArIGVsZW1lbnRXaWR0aCAvIDIsXG4gICAgICBlbGVtZW50WTEgKyBlbGVtZW50SGVpZ2h0IC8gMixcbiAgICAgIGFuZ2xlLFxuICAgICk7XG4gIH1cbiAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5jb25zdCByZW5kZXJCaW5kaW5nSGlnaGxpZ2h0ID0gKFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHJlbmRlckNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICBzdWdnZXN0ZWRCaW5kaW5nOiBTdWdnZXN0ZWRCaW5kaW5nLFxuKSA9PiB7XG4gIGNvbnN0IHJlbmRlckhpZ2hsaWdodCA9IEFycmF5LmlzQXJyYXkoc3VnZ2VzdGVkQmluZGluZylcbiAgICA/IHJlbmRlckJpbmRpbmdIaWdobGlnaHRGb3JTdWdnZXN0ZWRQb2ludEJpbmRpbmdcbiAgICA6IHJlbmRlckJpbmRpbmdIaWdobGlnaHRGb3JCaW5kYWJsZUVsZW1lbnQ7XG5cbiAgY29udGV4dC5zYXZlKCk7XG4gIGNvbnRleHQudHJhbnNsYXRlKHJlbmRlckNvbmZpZy5zY3JvbGxYLCByZW5kZXJDb25maWcuc2Nyb2xsWSk7XG4gIHJlbmRlckhpZ2hsaWdodChjb250ZXh0LCBzdWdnZXN0ZWRCaW5kaW5nIGFzIGFueSk7XG5cbiAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5jb25zdCByZW5kZXJCaW5kaW5nSGlnaGxpZ2h0Rm9yQmluZGFibGVFbGVtZW50ID0gKFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnQsXG4pID0+IHtcbiAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhlbGVtZW50KTtcbiAgY29uc3Qgd2lkdGggPSB4MiAtIHgxO1xuICBjb25zdCBoZWlnaHQgPSB5MiAtIHkxO1xuICBjb25zdCB0aHJlc2hvbGQgPSBtYXhCaW5kaW5nR2FwKGVsZW1lbnQsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIC8vIFNvIHRoYXQgd2UgZG9uJ3Qgb3ZlcmxhcCB0aGUgZWxlbWVudCBpdHNlbGZcbiAgY29uc3Qgc3Ryb2tlT2Zmc2V0ID0gNDtcbiAgY29udGV4dC5zdHJva2VTdHlsZSA9IFwicmdiYSgwLDAsMCwuMDUpXCI7XG4gIGNvbnRleHQubGluZVdpZHRoID0gdGhyZXNob2xkIC0gc3Ryb2tlT2Zmc2V0O1xuICBjb25zdCBwYWRkaW5nID0gc3Ryb2tlT2Zmc2V0IC8gMiArIHRocmVzaG9sZCAvIDI7XG5cbiAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIFwicmVjdGFuZ2xlXCI6XG4gICAgY2FzZSBcInRleHRcIjpcbiAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgIHN0cm9rZVJlY3RXaXRoUm90YXRpb24oXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHgxIC0gcGFkZGluZyxcbiAgICAgICAgeTEgLSBwYWRkaW5nLFxuICAgICAgICB3aWR0aCArIHBhZGRpbmcgKiAyLFxuICAgICAgICBoZWlnaHQgKyBwYWRkaW5nICogMixcbiAgICAgICAgeDEgKyB3aWR0aCAvIDIsXG4gICAgICAgIHkxICsgaGVpZ2h0IC8gMixcbiAgICAgICAgZWxlbWVudC5hbmdsZSxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgY29uc3Qgc2lkZSA9IE1hdGguaHlwb3Qod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCB3UGFkZGluZyA9IChwYWRkaW5nICogc2lkZSkgLyBoZWlnaHQ7XG4gICAgICBjb25zdCBoUGFkZGluZyA9IChwYWRkaW5nICogc2lkZSkgLyB3aWR0aDtcbiAgICAgIHN0cm9rZURpYW1vbmRXaXRoUm90YXRpb24oXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHdpZHRoICsgd1BhZGRpbmcgKiAyLFxuICAgICAgICBoZWlnaHQgKyBoUGFkZGluZyAqIDIsXG4gICAgICAgIHgxICsgd2lkdGggLyAyLFxuICAgICAgICB5MSArIGhlaWdodCAvIDIsXG4gICAgICAgIGVsZW1lbnQuYW5nbGUsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImVsbGlwc2VcIjpcbiAgICAgIHN0cm9rZUVsbGlwc2VXaXRoUm90YXRpb24oXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHdpZHRoICsgcGFkZGluZyAqIDIsXG4gICAgICAgIGhlaWdodCArIHBhZGRpbmcgKiAyLFxuICAgICAgICB4MSArIHdpZHRoIC8gMixcbiAgICAgICAgeTEgKyBoZWlnaHQgLyAyLFxuICAgICAgICBlbGVtZW50LmFuZ2xlLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICB9XG59O1xuXG5jb25zdCByZW5kZXJCaW5kaW5nSGlnaGxpZ2h0Rm9yU3VnZ2VzdGVkUG9pbnRCaW5kaW5nID0gKFxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHN1Z2dlc3RlZEJpbmRpbmc6IFN1Z2dlc3RlZFBvaW50QmluZGluZyxcbikgPT4ge1xuICBjb25zdCBbZWxlbWVudCwgc3RhcnRPckVuZCwgYmluZGFibGVFbGVtZW50XSA9IHN1Z2dlc3RlZEJpbmRpbmc7XG5cbiAgY29uc3QgdGhyZXNob2xkID0gbWF4QmluZGluZ0dhcChcbiAgICBiaW5kYWJsZUVsZW1lbnQsXG4gICAgYmluZGFibGVFbGVtZW50LndpZHRoLFxuICAgIGJpbmRhYmxlRWxlbWVudC5oZWlnaHQsXG4gICk7XG5cbiAgY29udGV4dC5zdHJva2VTdHlsZSA9IFwicmdiYSgwLDAsMCwwKVwiO1xuICBjb250ZXh0LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCwuMDUpXCI7XG5cbiAgY29uc3QgcG9pbnRJbmRpY2VzID1cbiAgICBzdGFydE9yRW5kID09PSBcImJvdGhcIiA/IFswLCAtMV0gOiBzdGFydE9yRW5kID09PSBcInN0YXJ0XCIgPyBbMF0gOiBbLTFdO1xuICBwb2ludEluZGljZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICBjb25zdCBbeCwgeV0gPSBMaW5lYXJFbGVtZW50RWRpdG9yLmdldFBvaW50QXRJbmRleEdsb2JhbENvb3JkaW5hdGVzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIGluZGV4LFxuICAgICk7XG4gICAgZmlsbENpcmNsZShjb250ZXh0LCB4LCB5LCB0aHJlc2hvbGQpO1xuICB9KTtcbn07XG5cbmNvbnN0IGlzVmlzaWJsZUVsZW1lbnQgPSAoXG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50LFxuICBjYW52YXNXaWR0aDogbnVtYmVyLFxuICBjYW52YXNIZWlnaHQ6IG51bWJlcixcbiAgdmlld1RyYW5zZm9ybWF0aW9uczoge1xuICAgIHpvb206IFpvb207XG4gICAgb2Zmc2V0TGVmdDogbnVtYmVyO1xuICAgIG9mZnNldFRvcDogbnVtYmVyO1xuICAgIHNjcm9sbFg6IG51bWJlcjtcbiAgICBzY3JvbGxZOiBudW1iZXI7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRCb3VuZHMoZWxlbWVudCk7IC8vIHNjZW5lIGNvb3JkaW5hdGVzXG4gIGNvbnN0IHRvcExlZnRTY2VuZUNvb3JkcyA9IHZpZXdwb3J0Q29vcmRzVG9TY2VuZUNvb3JkcyhcbiAgICB7XG4gICAgICBjbGllbnRYOiB2aWV3VHJhbnNmb3JtYXRpb25zLm9mZnNldExlZnQsXG4gICAgICBjbGllbnRZOiB2aWV3VHJhbnNmb3JtYXRpb25zLm9mZnNldFRvcCxcbiAgICB9LFxuICAgIHZpZXdUcmFuc2Zvcm1hdGlvbnMsXG4gICk7XG4gIGNvbnN0IGJvdHRvbVJpZ2h0U2NlbmVDb29yZHMgPSB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMoXG4gICAge1xuICAgICAgY2xpZW50WDogdmlld1RyYW5zZm9ybWF0aW9ucy5vZmZzZXRMZWZ0ICsgY2FudmFzV2lkdGgsXG4gICAgICBjbGllbnRZOiB2aWV3VHJhbnNmb3JtYXRpb25zLm9mZnNldFRvcCArIGNhbnZhc0hlaWdodCxcbiAgICB9LFxuICAgIHZpZXdUcmFuc2Zvcm1hdGlvbnMsXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICB0b3BMZWZ0U2NlbmVDb29yZHMueCA8PSB4MiAmJlxuICAgIHRvcExlZnRTY2VuZUNvb3Jkcy55IDw9IHkyICYmXG4gICAgYm90dG9tUmlnaHRTY2VuZUNvb3Jkcy54ID49IHgxICYmXG4gICAgYm90dG9tUmlnaHRTY2VuZUNvb3Jkcy55ID49IHkxXG4gICk7XG59O1xuXG4vLyBUaGlzIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBmb3IgZXhwb3J0aW5nIHB1cnBvc2VzXG5leHBvcnQgY29uc3QgcmVuZGVyU2NlbmVUb1N2ZyA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICByc3ZnOiBSb3VnaFNWRyxcbiAgc3ZnUm9vdDogU1ZHRWxlbWVudCxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICB7XG4gICAgb2Zmc2V0WCA9IDAsXG4gICAgb2Zmc2V0WSA9IDAsXG4gICAgZXhwb3J0V2l0aERhcmtNb2RlID0gZmFsc2UsXG4gIH06IHtcbiAgICBvZmZzZXRYPzogbnVtYmVyO1xuICAgIG9mZnNldFk/OiBudW1iZXI7XG4gICAgZXhwb3J0V2l0aERhcmtNb2RlPzogYm9vbGVhbjtcbiAgfSA9IHt9LFxuKSA9PiB7XG4gIGlmICghc3ZnUm9vdCkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyByZW5kZXIgZWxlbWVudHNcbiAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudC5pc0RlbGV0ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlbmRlckVsZW1lbnRUb1N2ZyhcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIHJzdmcsXG4gICAgICAgICAgc3ZnUm9vdCxcbiAgICAgICAgICBmaWxlcyxcbiAgICAgICAgICBlbGVtZW50LnggKyBvZmZzZXRYLFxuICAgICAgICAgIGVsZW1lbnQueSArIG9mZnNldFksXG4gICAgICAgICAgZXhwb3J0V2l0aERhcmtNb2RlLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../renderer/renderScene.ts\n");
|
|
2587
2587
|
|
|
2588
2588
|
/***/ }),
|
|
2589
2589
|
|
|
@@ -2616,7 +2616,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2616
2616
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2617
2617
|
|
|
2618
2618
|
"use strict";
|
|
2619
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"hasBackground\": () => (/* binding */ hasBackground),\n/* harmony export */ \"hasStrokeColor\": () => (/* binding */ hasStrokeColor),\n/* harmony export */ \"hasStrokeWidth\": () => (/* binding */ hasStrokeWidth),\n/* harmony export */ \"hasStrokeStyle\": () => (/* binding */ hasStrokeStyle),\n/* harmony export */ \"canChangeSharpness\": () => (/* binding */ canChangeSharpness),\n/* harmony export */ \"hasText\": () => (/* binding */ hasText),\n/* harmony export */ \"canHaveArrowheads\": () => (/* binding */ canHaveArrowheads),\n/* harmony export */ \"getElementAtPosition\": () => (/* binding */ getElementAtPosition),\n/* harmony export */ \"getElementsAtPosition\": () => (/* binding */ getElementsAtPosition),\n/* harmony export */ \"getElementContainingPosition\": () => (/* binding */ getElementContainingPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n\r\nconst hasBackground = (type) => type === \"rectangle\" ||\r\n type === \"ellipse\" ||\r\n type === \"diamond\" ||\r\n type === \"line\";\r\nconst hasStrokeColor = (type) => type !== \"image\";\r\nconst hasStrokeWidth = (type) => type === \"rectangle\" ||\r\n type === \"ellipse\" ||\r\n type === \"diamond\" ||\r\n type === \"freedraw\" ||\r\n type === \"arrow\" ||\r\n type === \"line\";\r\nconst hasStrokeStyle = (type) => type === \"rectangle\" ||\r\n type === \"ellipse\" ||\r\n type === \"diamond\" ||\r\n type === \"arrow\" ||\r\n type === \"line\";\r\nconst canChangeSharpness = (type) => type === \"rectangle\" || type === \"arrow\" || type === \"line\";\r\nconst hasText = (type) => type === \"text\";\r\nconst canHaveArrowheads = (type) => type === \"arrow\";\r\nconst getElementAtPosition = (elements, isAtPositionFn) => {\r\n let hitElement = null;\r\n // We need to to hit testing from front (end of the array) to back (beginning of the array)\r\n // because array is ordered from lower z-index to highest and we want element z-index\r\n // with higher z-index\r\n for (let index = elements.length - 1; index >= 0; --index) {\r\n const element = elements[index];\r\n if (element.isDeleted) {\r\n continue;\r\n }\r\n if (isAtPositionFn(element)) {\r\n hitElement = element;\r\n break;\r\n }\r\n }\r\n return hitElement;\r\n};\r\nconst getElementsAtPosition = (elements, isAtPositionFn) => {\r\n // The parameter elements comes ordered from lower z-index to higher.\r\n // We want to preserve that order on the returned array.\r\n return elements.filter((element) => !element.isDeleted && isAtPositionFn(element));\r\n};\r\nconst getElementContainingPosition = (elements, x, y) => {\r\n let hitElement = null;\r\n // We need to to hit testing from front (end of the array) to back (beginning of the array)\r\n for (let index = elements.length - 1; index >= 0; --index) {\r\n if (elements[index].isDeleted) {\r\n continue;\r\n }\r\n const [x1, y1, x2, y2] = (0,_element__WEBPACK_IMPORTED_MODULE_0__.getElementAbsoluteCoords)(elements[index]);\r\n if (x1 < x && x < x2 && y1 < y && y < y2) {\r\n hitElement = elements[index];\r\n break;\r\n }\r\n }\r\n return hitElement;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vc2NlbmUvY29tcGFyaXNvbnMudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFLc0Q7QUFFL0MsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUM1QyxJQUFJLEtBQUssV0FBVztJQUNwQixJQUFJLEtBQUssU0FBUztJQUNsQixJQUFJLEtBQUssU0FBUztJQUNsQixJQUFJLEtBQUssTUFBTSxDQUFDO0FBRVgsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7QUFFMUQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUM3QyxJQUFJLEtBQUssV0FBVztJQUNwQixJQUFJLEtBQUssU0FBUztJQUNsQixJQUFJLEtBQUssU0FBUztJQUNsQixJQUFJLEtBQUssVUFBVTtJQUNuQixJQUFJLEtBQUssT0FBTztJQUNoQixJQUFJLEtBQUssTUFBTSxDQUFDO0FBRVgsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUM3QyxJQUFJLEtBQUssV0FBVztJQUNwQixJQUFJLEtBQUssU0FBUztJQUNsQixJQUFJLEtBQUssU0FBUztJQUNsQixJQUFJLEtBQUssT0FBTztJQUNoQixJQUFJLEtBQUssTUFBTSxDQUFDO0FBRVgsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQ2pELElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDO0FBRXZELE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO0FBRWxELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7QUFFN0QsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxRQUFnRCxFQUNoRCxjQUFpRSxFQUNqRSxFQUFFO0lBQ0YsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLDJGQUEyRjtJQUMzRixxRkFBcUY7SUFDckYsc0JBQXNCO0lBQ3RCLEtBQUssSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRTtRQUN6RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3JCLFNBQVM7U0FDVjtRQUNELElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNCLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDckIsTUFBTTtTQUNQO0tBQ0Y7SUFFRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFSyxNQUFNLHFCQUFxQixHQUFHLENBQ25DLFFBQWdELEVBQ2hELGNBQWlFLEVBQ2pFLEVBQUU7SUFDRixxRUFBcUU7SUFDckUsd0RBQXdEO0lBQ3hELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FDcEIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQzNELENBQUM7QUFDSixDQUFDLENBQUM7QUFFSyxNQUFNLDRCQUE0QixHQUFHLENBQzFDLFFBQXNDLEVBQ3RDLENBQVMsRUFDVCxDQUFTLEVBQ1QsRUFBRTtJQUNGLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztJQUN0QiwyRkFBMkY7SUFDM0YsS0FBSyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFO1FBQ3pELElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUM3QixTQUFTO1NBQ1Y7UUFDRCxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsa0VBQXdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3hDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsTUFBTTtTQUNQO0tBQ0Y7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc2NlbmUvY29tcGFyaXNvbnMudHM/MDU0MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxufSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuXG5pbXBvcnQgeyBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5leHBvcnQgY29uc3QgaGFzQmFja2dyb3VuZCA9ICh0eXBlOiBzdHJpbmcpID0+XG4gIHR5cGUgPT09IFwicmVjdGFuZ2xlXCIgfHxcbiAgdHlwZSA9PT0gXCJlbGxpcHNlXCIgfHxcbiAgdHlwZSA9PT0gXCJkaWFtb25kXCIgfHxcbiAgdHlwZSA9PT0gXCJsaW5lXCI7XG5cbmV4cG9ydCBjb25zdCBoYXNTdHJva2VDb2xvciA9ICh0eXBlOiBzdHJpbmcpID0+IHR5cGUgIT09IFwiaW1hZ2VcIjtcblxuZXhwb3J0IGNvbnN0IGhhc1N0cm9rZVdpZHRoID0gKHR5cGU6IHN0cmluZykgPT5cbiAgdHlwZSA9PT0gXCJyZWN0YW5nbGVcIiB8fFxuICB0eXBlID09PSBcImVsbGlwc2VcIiB8fFxuICB0eXBlID09PSBcImRpYW1vbmRcIiB8fFxuICB0eXBlID09PSBcImZyZWVkcmF3XCIgfHxcbiAgdHlwZSA9PT0gXCJhcnJvd1wiIHx8XG4gIHR5cGUgPT09IFwibGluZVwiO1xuXG5leHBvcnQgY29uc3QgaGFzU3Ryb2tlU3R5bGUgPSAodHlwZTogc3RyaW5nKSA9PlxuICB0eXBlID09PSBcInJlY3RhbmdsZVwiIHx8XG4gIHR5cGUgPT09IFwiZWxsaXBzZVwiIHx8XG4gIHR5cGUgPT09IFwiZGlhbW9uZFwiIHx8XG4gIHR5cGUgPT09IFwiYXJyb3dcIiB8fFxuICB0eXBlID09PSBcImxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IGNhbkNoYW5nZVNoYXJwbmVzcyA9ICh0eXBlOiBzdHJpbmcpID0+XG4gIHR5cGUgPT09IFwicmVjdGFuZ2xlXCIgfHwgdHlwZSA9PT0gXCJhcnJvd1wiIHx8IHR5cGUgPT09IFwibGluZVwiO1xuXG5leHBvcnQgY29uc3QgaGFzVGV4dCA9ICh0eXBlOiBzdHJpbmcpID0+IHR5cGUgPT09IFwidGV4dFwiO1xuXG5leHBvcnQgY29uc3QgY2FuSGF2ZUFycm93aGVhZHMgPSAodHlwZTogc3RyaW5nKSA9PiB0eXBlID09PSBcImFycm93XCI7XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50QXRQb3NpdGlvbiA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBpc0F0UG9zaXRpb25GbjogKGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCkgPT4gYm9vbGVhbixcbikgPT4ge1xuICBsZXQgaGl0RWxlbWVudCA9IG51bGw7XG4gIC8vIFdlIG5lZWQgdG8gdG8gaGl0IHRlc3RpbmcgZnJvbSBmcm9udCAoZW5kIG9mIHRoZSBhcnJheSkgdG8gYmFjayAoYmVnaW5uaW5nIG9mIHRoZSBhcnJheSlcbiAgLy8gYmVjYXVzZSBhcnJheSBpcyBvcmRlcmVkIGZyb20gbG93ZXIgei1pbmRleCB0byBoaWdoZXN0IGFuZCB3ZSB3YW50IGVsZW1lbnQgei1pbmRleFxuICAvLyB3aXRoIGhpZ2hlciB6LWluZGV4XG4gIGZvciAobGV0IGluZGV4ID0gZWxlbWVudHMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgLS1pbmRleCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpbmRleF07XG4gICAgaWYgKGVsZW1lbnQuaXNEZWxldGVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzQXRQb3NpdGlvbkZuKGVsZW1lbnQpKSB7XG4gICAgICBoaXRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoaXRFbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRzQXRQb3NpdGlvbiA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBpc0F0UG9zaXRpb25GbjogKGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCkgPT4gYm9vbGVhbixcbikgPT4ge1xuICAvLyBUaGUgcGFyYW1ldGVyIGVsZW1lbnRzIGNvbWVzIG9yZGVyZWQgZnJvbSBsb3dlciB6LWluZGV4IHRvIGhpZ2hlci5cbiAgLy8gV2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG9yZGVyIG9uIHRoZSByZXR1cm5lZCBhcnJheS5cbiAgcmV0dXJuIGVsZW1lbnRzLmZpbHRlcihcbiAgICAoZWxlbWVudCkgPT4gIWVsZW1lbnQuaXNEZWxldGVkICYmIGlzQXRQb3NpdGlvbkZuKGVsZW1lbnQpLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRDb250YWluaW5nUG9zaXRpb24gPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdLFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbikgPT4ge1xuICBsZXQgaGl0RWxlbWVudCA9IG51bGw7XG4gIC8vIFdlIG5lZWQgdG8gdG8gaGl0IHRlc3RpbmcgZnJvbSBmcm9udCAoZW5kIG9mIHRoZSBhcnJheSkgdG8gYmFjayAoYmVnaW5uaW5nIG9mIHRoZSBhcnJheSlcbiAgZm9yIChsZXQgaW5kZXggPSBlbGVtZW50cy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7XG4gICAgaWYgKGVsZW1lbnRzW2luZGV4XS5pc0RlbGV0ZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnRzW2luZGV4XSk7XG4gICAgaWYgKHgxIDwgeCAmJiB4IDwgeDIgJiYgeTEgPCB5ICYmIHkgPCB5Mikge1xuICAgICAgaGl0RWxlbWVudCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGl0RWxlbWVudDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../scene/comparisons.ts\n");
|
|
2619
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"hasBackground\": () => (/* binding */ hasBackground),\n/* harmony export */ \"hasStrokeColor\": () => (/* binding */ hasStrokeColor),\n/* harmony export */ \"hasStrokeWidth\": () => (/* binding */ hasStrokeWidth),\n/* harmony export */ \"hasStrokeStyle\": () => (/* binding */ hasStrokeStyle),\n/* harmony export */ \"canChangeSharpness\": () => (/* binding */ canChangeSharpness),\n/* harmony export */ \"hasText\": () => (/* binding */ hasText),\n/* harmony export */ \"canHaveArrowheads\": () => (/* binding */ canHaveArrowheads),\n/* harmony export */ \"getElementAtPosition\": () => (/* binding */ getElementAtPosition),\n/* harmony export */ \"getElementsAtPosition\": () => (/* binding */ getElementsAtPosition),\n/* harmony export */ \"getElementContainingPosition\": () => (/* binding */ getElementContainingPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n\r\nconst hasBackground = (type) => type === \"rectangle\" ||\r\n type === \"ellipse\" ||\r\n type === \"diamond\" ||\r\n type === \"line\";\r\nconst hasStrokeColor = (type) => type !== \"image\";\r\nconst hasStrokeWidth = (type) => type === \"rectangle\" ||\r\n type === \"ellipse\" ||\r\n type === \"diamond\" ||\r\n type === \"freedraw\" ||\r\n type === \"arrow\" ||\r\n type === \"line\";\r\nconst hasStrokeStyle = (type) => type === \"rectangle\" ||\r\n type === \"ellipse\" ||\r\n type === \"diamond\" ||\r\n type === \"arrow\" ||\r\n type === \"line\";\r\nconst canChangeSharpness = (type) => type === \"rectangle\" ||\r\n type === \"arrow\" ||\r\n type === \"line\" ||\r\n type === \"diamond\";\r\nconst hasText = (type) => type === \"text\";\r\nconst canHaveArrowheads = (type) => type === \"arrow\";\r\nconst getElementAtPosition = (elements, isAtPositionFn) => {\r\n let hitElement = null;\r\n // We need to to hit testing from front (end of the array) to back (beginning of the array)\r\n // because array is ordered from lower z-index to highest and we want element z-index\r\n // with higher z-index\r\n for (let index = elements.length - 1; index >= 0; --index) {\r\n const element = elements[index];\r\n if (element.isDeleted) {\r\n continue;\r\n }\r\n if (isAtPositionFn(element)) {\r\n hitElement = element;\r\n break;\r\n }\r\n }\r\n return hitElement;\r\n};\r\nconst getElementsAtPosition = (elements, isAtPositionFn) => {\r\n // The parameter elements comes ordered from lower z-index to higher.\r\n // We want to preserve that order on the returned array.\r\n return elements.filter((element) => !element.isDeleted && isAtPositionFn(element));\r\n};\r\nconst getElementContainingPosition = (elements, x, y) => {\r\n let hitElement = null;\r\n // We need to to hit testing from front (end of the array) to back (beginning of the array)\r\n for (let index = elements.length - 1; index >= 0; --index) {\r\n if (elements[index].isDeleted) {\r\n continue;\r\n }\r\n const [x1, y1, x2, y2] = (0,_element__WEBPACK_IMPORTED_MODULE_0__.getElementAbsoluteCoords)(elements[index]);\r\n if (x1 < x && x < x2 && y1 < y && y < y2) {\r\n hitElement = elements[index];\r\n break;\r\n }\r\n }\r\n return hitElement;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsa0VBQXdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3hDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsTUFBTTtTQUNQO0tBQ0Y7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc2NlbmUvY29tcGFyaXNvbnMudHM/MDU0MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxufSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuXG5pbXBvcnQgeyBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5leHBvcnQgY29uc3QgaGFzQmFja2dyb3VuZCA9ICh0eXBlOiBzdHJpbmcpID0+XG4gIHR5cGUgPT09IFwicmVjdGFuZ2xlXCIgfHxcbiAgdHlwZSA9PT0gXCJlbGxpcHNlXCIgfHxcbiAgdHlwZSA9PT0gXCJkaWFtb25kXCIgfHxcbiAgdHlwZSA9PT0gXCJsaW5lXCI7XG5cbmV4cG9ydCBjb25zdCBoYXNTdHJva2VDb2xvciA9ICh0eXBlOiBzdHJpbmcpID0+IHR5cGUgIT09IFwiaW1hZ2VcIjtcblxuZXhwb3J0IGNvbnN0IGhhc1N0cm9rZVdpZHRoID0gKHR5cGU6IHN0cmluZykgPT5cbiAgdHlwZSA9PT0gXCJyZWN0YW5nbGVcIiB8fFxuICB0eXBlID09PSBcImVsbGlwc2VcIiB8fFxuICB0eXBlID09PSBcImRpYW1vbmRcIiB8fFxuICB0eXBlID09PSBcImZyZWVkcmF3XCIgfHxcbiAgdHlwZSA9PT0gXCJhcnJvd1wiIHx8XG4gIHR5cGUgPT09IFwibGluZVwiO1xuXG5leHBvcnQgY29uc3QgaGFzU3Ryb2tlU3R5bGUgPSAodHlwZTogc3RyaW5nKSA9PlxuICB0eXBlID09PSBcInJlY3RhbmdsZVwiIHx8XG4gIHR5cGUgPT09IFwiZWxsaXBzZVwiIHx8XG4gIHR5cGUgPT09IFwiZGlhbW9uZFwiIHx8XG4gIHR5cGUgPT09IFwiYXJyb3dcIiB8fFxuICB0eXBlID09PSBcImxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IGNhbkNoYW5nZVNoYXJwbmVzcyA9ICh0eXBlOiBzdHJpbmcpID0+XG4gIHR5cGUgPT09IFwicmVjdGFuZ2xlXCIgfHxcbiAgdHlwZSA9PT0gXCJhcnJvd1wiIHx8XG4gIHR5cGUgPT09IFwibGluZVwiIHx8XG4gIHR5cGUgPT09IFwiZGlhbW9uZFwiO1xuXG5leHBvcnQgY29uc3QgaGFzVGV4dCA9ICh0eXBlOiBzdHJpbmcpID0+IHR5cGUgPT09IFwidGV4dFwiO1xuXG5leHBvcnQgY29uc3QgY2FuSGF2ZUFycm93aGVhZHMgPSAodHlwZTogc3RyaW5nKSA9PiB0eXBlID09PSBcImFycm93XCI7XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50QXRQb3NpdGlvbiA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBpc0F0UG9zaXRpb25GbjogKGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCkgPT4gYm9vbGVhbixcbikgPT4ge1xuICBsZXQgaGl0RWxlbWVudCA9IG51bGw7XG4gIC8vIFdlIG5lZWQgdG8gdG8gaGl0IHRlc3RpbmcgZnJvbSBmcm9udCAoZW5kIG9mIHRoZSBhcnJheSkgdG8gYmFjayAoYmVnaW5uaW5nIG9mIHRoZSBhcnJheSlcbiAgLy8gYmVjYXVzZSBhcnJheSBpcyBvcmRlcmVkIGZyb20gbG93ZXIgei1pbmRleCB0byBoaWdoZXN0IGFuZCB3ZSB3YW50IGVsZW1lbnQgei1pbmRleFxuICAvLyB3aXRoIGhpZ2hlciB6LWluZGV4XG4gIGZvciAobGV0IGluZGV4ID0gZWxlbWVudHMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgLS1pbmRleCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpbmRleF07XG4gICAgaWYgKGVsZW1lbnQuaXNEZWxldGVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzQXRQb3NpdGlvbkZuKGVsZW1lbnQpKSB7XG4gICAgICBoaXRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoaXRFbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRzQXRQb3NpdGlvbiA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBpc0F0UG9zaXRpb25GbjogKGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCkgPT4gYm9vbGVhbixcbikgPT4ge1xuICAvLyBUaGUgcGFyYW1ldGVyIGVsZW1lbnRzIGNvbWVzIG9yZGVyZWQgZnJvbSBsb3dlciB6LWluZGV4IHRvIGhpZ2hlci5cbiAgLy8gV2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG9yZGVyIG9uIHRoZSByZXR1cm5lZCBhcnJheS5cbiAgcmV0dXJuIGVsZW1lbnRzLmZpbHRlcihcbiAgICAoZWxlbWVudCkgPT4gIWVsZW1lbnQuaXNEZWxldGVkICYmIGlzQXRQb3NpdGlvbkZuKGVsZW1lbnQpLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRDb250YWluaW5nUG9zaXRpb24gPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdLFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbikgPT4ge1xuICBsZXQgaGl0RWxlbWVudCA9IG51bGw7XG4gIC8vIFdlIG5lZWQgdG8gdG8gaGl0IHRlc3RpbmcgZnJvbSBmcm9udCAoZW5kIG9mIHRoZSBhcnJheSkgdG8gYmFjayAoYmVnaW5uaW5nIG9mIHRoZSBhcnJheSlcbiAgZm9yIChsZXQgaW5kZXggPSBlbGVtZW50cy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7XG4gICAgaWYgKGVsZW1lbnRzW2luZGV4XS5pc0RlbGV0ZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnRzW2luZGV4XSk7XG4gICAgaWYgKHgxIDwgeCAmJiB4IDwgeDIgJiYgeTEgPCB5ICYmIHkgPCB5Mikge1xuICAgICAgaGl0RWxlbWVudCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGl0RWxlbWVudDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../scene/comparisons.ts\n");
|
|
2620
2620
|
|
|
2621
2621
|
/***/ }),
|
|
2622
2622
|
|
|
@@ -2682,7 +2682,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2682
2682
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2683
2683
|
|
|
2684
2684
|
"use strict";
|
|
2685
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getNewZoom\": () => (/* binding */ getNewZoom),\n/* harmony export */ \"getNormalizedZoom\": () => (/* binding */ getNormalizedZoom)\n/* harmony export */ });\nconst getNewZoom = (newZoomValue, prevZoom, canvasOffset, zoomOnViewportPoint = { x: 0, y: 0 }) => {\r\n return {\r\n value: newZoomValue,\r\n translation: {\r\n x: zoomOnViewportPoint.x -\r\n canvasOffset.left -\r\n (zoomOnViewportPoint.x - canvasOffset.left - prevZoom.translation.x) *\r\n (newZoomValue / prevZoom.value),\r\n y: zoomOnViewportPoint.y -\r\n canvasOffset.top -\r\n (zoomOnViewportPoint.y - canvasOffset.top - prevZoom.translation.y) *\r\n (newZoomValue / prevZoom.value),\r\n },\r\n };\r\n};\r\nconst getNormalizedZoom = (zoom) => {\r\n const normalizedZoom = parseFloat(zoom.toFixed(2));\r\n const clampedZoom = Math.max(0.1, Math.min(normalizedZoom,
|
|
2685
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getNewZoom\": () => (/* binding */ getNewZoom),\n/* harmony export */ \"getNormalizedZoom\": () => (/* binding */ getNormalizedZoom)\n/* harmony export */ });\nconst getNewZoom = (newZoomValue, prevZoom, canvasOffset, zoomOnViewportPoint = { x: 0, y: 0 }) => {\r\n return {\r\n value: newZoomValue,\r\n translation: {\r\n x: zoomOnViewportPoint.x -\r\n canvasOffset.left -\r\n (zoomOnViewportPoint.x - canvasOffset.left - prevZoom.translation.x) *\r\n (newZoomValue / prevZoom.value),\r\n y: zoomOnViewportPoint.y -\r\n canvasOffset.top -\r\n (zoomOnViewportPoint.y - canvasOffset.top - prevZoom.translation.y) *\r\n (newZoomValue / prevZoom.value),\r\n },\r\n };\r\n};\r\nconst getNormalizedZoom = (zoom) => {\r\n const normalizedZoom = parseFloat(zoom.toFixed(2));\r\n const clampedZoom = Math.max(0.1, Math.min(normalizedZoom, 30));\r\n return clampedZoom;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vc2NlbmUvem9vbS50cy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUVPLE1BQU0sVUFBVSxHQUFHLENBQ3hCLFlBQWlDLEVBQ2pDLFFBQWMsRUFDZCxZQUEyQyxFQUMzQyxzQkFBcUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDN0MsRUFBRTtJQUNSLE9BQU87UUFDTCxLQUFLLEVBQUUsWUFBWTtRQUNuQixXQUFXLEVBQUU7WUFDWCxDQUFDLEVBQ0MsbUJBQW1CLENBQUMsQ0FBQztnQkFDckIsWUFBWSxDQUFDLElBQUk7Z0JBQ2pCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDbkMsQ0FBQyxFQUNDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3JCLFlBQVksQ0FBQyxHQUFHO2dCQUNoQixDQUFDLG1CQUFtQixDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNqRSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQ3BDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVLLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFZLEVBQXVCLEVBQUU7SUFDckUsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sV0FBa0MsQ0FBQztBQUM1QyxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc2NlbmUvem9vbS50cz9iOWNmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vcm1hbGl6ZWRab29tVmFsdWUsIFBvaW50ZXJDb29yZHMsIFpvb20gfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IGdldE5ld1pvb20gPSAoXG4gIG5ld1pvb21WYWx1ZTogTm9ybWFsaXplZFpvb21WYWx1ZSxcbiAgcHJldlpvb206IFpvb20sXG4gIGNhbnZhc09mZnNldDogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyIH0sXG4gIHpvb21PblZpZXdwb3J0UG9pbnQ6IFBvaW50ZXJDb29yZHMgPSB7IHg6IDAsIHk6IDAgfSxcbik6IFpvb20gPT4ge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBuZXdab29tVmFsdWUsXG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIHg6XG4gICAgICAgIHpvb21PblZpZXdwb3J0UG9pbnQueCAtXG4gICAgICAgIGNhbnZhc09mZnNldC5sZWZ0IC1cbiAgICAgICAgKHpvb21PblZpZXdwb3J0UG9pbnQueCAtIGNhbnZhc09mZnNldC5sZWZ0IC0gcHJldlpvb20udHJhbnNsYXRpb24ueCkgKlxuICAgICAgICAgIChuZXdab29tVmFsdWUgLyBwcmV2Wm9vbS52YWx1ZSksXG4gICAgICB5OlxuICAgICAgICB6b29tT25WaWV3cG9ydFBvaW50LnkgLVxuICAgICAgICBjYW52YXNPZmZzZXQudG9wIC1cbiAgICAgICAgKHpvb21PblZpZXdwb3J0UG9pbnQueSAtIGNhbnZhc09mZnNldC50b3AgLSBwcmV2Wm9vbS50cmFuc2xhdGlvbi55KSAqXG4gICAgICAgICAgKG5ld1pvb21WYWx1ZSAvIHByZXZab29tLnZhbHVlKSxcbiAgICB9LFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5vcm1hbGl6ZWRab29tID0gKHpvb206IG51bWJlcik6IE5vcm1hbGl6ZWRab29tVmFsdWUgPT4ge1xuICBjb25zdCBub3JtYWxpemVkWm9vbSA9IHBhcnNlRmxvYXQoem9vbS50b0ZpeGVkKDIpKTtcbiAgY29uc3QgY2xhbXBlZFpvb20gPSBNYXRoLm1heCgwLjEsIE1hdGgubWluKG5vcm1hbGl6ZWRab29tLCAzMCkpO1xuICByZXR1cm4gY2xhbXBlZFpvb20gYXMgTm9ybWFsaXplZFpvb21WYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../scene/zoom.ts\n");
|
|
2686
2686
|
|
|
2687
2687
|
/***/ }),
|
|
2688
2688
|
|
|
@@ -2924,7 +2924,7 @@ module.exports = JSON.parse('{"ar-SA":86,"bg-BG":59,"bn-BD":0,"ca-ES":78,"cs-CZ"
|
|
|
2924
2924
|
/***/ ((module) => {
|
|
2925
2925
|
|
|
2926
2926
|
"use strict";
|
|
2927
|
-
module.exports = JSON.parse('{"name":"@dwelle/excalidraw","version":"0.3.
|
|
2927
|
+
module.exports = JSON.parse('{"name":"@dwelle/excalidraw","version":"0.3.25","main":"main.js","types":"types/packages/excalidraw/index.d.ts","files":["dist/*","types/*"],"publishConfig":{"access":"public"},"description":"Excalidraw as a React component","license":"MIT","keywords":[],"browserslist":{"production":[">0.2%","not dead","not ie <= 11","not op_mini all","not safari < 12","not kaios <= 2.5","not edge < 79","not chrome < 70","not and_uc < 13","not samsung < 10"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"peerDependencies":{"react":"^17.0.2","react-dom":"^17.0.2"},"devDependencies":{"@babel/core":"7.16.0","@babel/plugin-transform-arrow-functions":"7.16.0","@babel/plugin-transform-async-to-generator":"7.16.0","@babel/plugin-transform-runtime":"7.16.4","@babel/plugin-transform-typescript":"7.16.1","@babel/preset-env":"7.16.4","@babel/preset-react":"7.16.0","@babel/preset-typescript":"7.16.0","autoprefixer":"10.4.0","babel-loader":"8.2.3","babel-plugin-transform-class-properties":"6.24.1","cross-env":"7.0.3","css-loader":"6.5.1","file-loader":"6.2.0","mini-css-extract-plugin":"2.4.5","postcss-loader":"6.2.1","sass-loader":"12.3.0","terser-webpack-plugin":"5.2.5","ts-loader":"9.2.6","typescript":"4.5.2","webpack":"5.64.4","webpack-bundle-analyzer":"4.5.0","webpack-cli":"4.9.1"},"repository":"https://github.com/dwelle/excalidraw","homepage":"https://github.com/excalidraw/excalidraw/tree/master/src/packages/excalidraw","scripts":{"gen:types":"tsc --project ../../../tsconfig-types.json","build:umd":"rm -rf dist && cross-env NODE_ENV=production webpack --config webpack.prod.config.js && cross-env NODE_ENV=development webpack --config webpack.dev.config.js && yarn gen:types","build:umd:withAnalyzer":"cross-env NODE_ENV=production ANALYZER=true webpack --config webpack.prod.config.js","pack":"yarn build:umd && yarn pack"},"dependencies":{"dotenv":"10.0.0"}}');
|
|
2928
2928
|
|
|
2929
2929
|
/***/ })
|
|
2930
2930
|
|