@dwelle/excalidraw 0.3.77-debug2 → 0.3.77-debug3

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.
Files changed (47) hide show
  1. package/dist/excalidraw.development.js +24 -13
  2. package/dist/excalidraw.production.min.js +1 -1
  3. package/dist/excalidraw.production.min.js.LICENSE.txt +7 -2
  4. package/package.json +1 -1
  5. package/types/actions/actionAlign.d.ts +6 -6
  6. package/types/actions/actionCanvas.d.ts +7 -7
  7. package/types/actions/actionDeleteSelected.d.ts +1 -1
  8. package/types/actions/actionDistribute.d.ts +2 -2
  9. package/types/actions/actionDuplicateSelection.d.ts +1 -1
  10. package/types/actions/actionExport.d.ts +8 -8
  11. package/types/actions/actionFinalize.d.ts +1 -1
  12. package/types/actions/actionGroup.d.ts +2 -2
  13. package/types/actions/actionMenu.d.ts +3 -3
  14. package/types/actions/actionNavigate.d.ts +2 -1
  15. package/types/actions/actionProperties.d.ts +13 -13
  16. package/types/actions/actionZindex.d.ts +4 -4
  17. package/types/components/ActiveFile.d.ts +1 -0
  18. package/types/components/ButtonIconSelect.d.ts +1 -0
  19. package/types/components/Card.d.ts +0 -1
  20. package/types/components/CheckboxItem.d.ts +0 -1
  21. package/types/components/ClearCanvas.d.ts +1 -0
  22. package/types/components/CollabButton.d.ts +1 -0
  23. package/types/components/ColorPicker.d.ts +1 -0
  24. package/types/components/ConfirmDialog.d.ts +1 -0
  25. package/types/components/DarkModeToggle.d.ts +1 -0
  26. package/types/components/ErrorDialog.d.ts +1 -0
  27. package/types/components/HelpDialog.d.ts +1 -0
  28. package/types/components/HelpIcon.d.ts +1 -0
  29. package/types/components/HintViewer.d.ts +1 -0
  30. package/types/components/IconPicker.d.ts +1 -0
  31. package/types/components/ImageExportDialog.d.ts +1 -0
  32. package/types/components/JSONExportDialog.d.ts +1 -0
  33. package/types/components/LibraryMenu.d.ts +1 -0
  34. package/types/components/LibraryUnit.d.ts +1 -0
  35. package/types/components/LockButton.d.ts +1 -0
  36. package/types/components/Modal.d.ts +2 -2
  37. package/types/components/PenModeButton.d.ts +1 -0
  38. package/types/components/ProjectName.d.ts +1 -0
  39. package/types/components/PublishLibrary.d.ts +1 -0
  40. package/types/components/Section.d.ts +5 -4
  41. package/types/components/SidebarLockButton.d.ts +1 -0
  42. package/types/components/SingleLibraryItem.d.ts +1 -0
  43. package/types/components/Spinner.d.ts +1 -0
  44. package/types/components/Toast.d.ts +1 -0
  45. package/types/element/Hyperlink.d.ts +1 -1
  46. package/types/packages/excalidraw/example/App.d.ts +1 -0
  47. package/types/shapes.d.ts +1 -0
@@ -922,6 +922,17 @@ eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WE
922
922
 
923
923
  /***/ }),
924
924
 
925
+ /***/ "../../../node_modules/object-assign/index.js":
926
+ /*!****************************************************!*\
927
+ !*** ../../../node_modules/object-assign/index.js ***!
928
+ \****************************************************/
929
+ /***/ ((module) => {
930
+
931
+ "use strict";
932
+ eval("/*\r\nobject-assign\r\n(c) Sindre Sorhus\r\n@license MIT\r\n*/\r\n\r\n/* eslint-disable no-unused-vars */\r\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\r\nfunction toObject(val) {\r\n if (val === null || val === undefined) {\r\n throw new TypeError('Object.assign cannot be called with null or undefined');\r\n }\r\n return Object(val);\r\n}\r\nfunction shouldUseNative() {\r\n try {\r\n if (!Object.assign) {\r\n return false;\r\n }\r\n // Detect buggy property enumeration order in older V8 versions.\r\n // https://bugs.chromium.org/p/v8/issues/detail?id=4118\r\n var test1 = new String('abc'); // eslint-disable-line no-new-wrappers\r\n test1[5] = 'de';\r\n if (Object.getOwnPropertyNames(test1)[0] === '5') {\r\n return false;\r\n }\r\n // https://bugs.chromium.org/p/v8/issues/detail?id=3056\r\n var test2 = {};\r\n for (var i = 0; i < 10; i++) {\r\n test2['_' + String.fromCharCode(i)] = i;\r\n }\r\n var order2 = Object.getOwnPropertyNames(test2).map(function (n) {\r\n return test2[n];\r\n });\r\n if (order2.join('') !== '0123456789') {\r\n return false;\r\n }\r\n // https://bugs.chromium.org/p/v8/issues/detail?id=3056\r\n var test3 = {};\r\n 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\r\n test3[letter] = letter;\r\n });\r\n if (Object.keys(Object.assign({}, test3)).join('') !==\r\n 'abcdefghijklmnopqrst') {\r\n return false;\r\n }\r\n return true;\r\n }\r\n catch (err) {\r\n // We don't expect any of the above to throw, but better to be safe.\r\n return false;\r\n }\r\n}\r\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\r\n var from;\r\n var to = toObject(target);\r\n var symbols;\r\n for (var s = 1; s < arguments.length; s++) {\r\n from = Object(arguments[s]);\r\n for (var key in from) {\r\n if (hasOwnProperty.call(from, key)) {\r\n to[key] = from[key];\r\n }\r\n }\r\n if (getOwnPropertySymbols) {\r\n symbols = getOwnPropertySymbols(from);\r\n for (var i = 0; i < symbols.length; i++) {\r\n if (propIsEnumerable.call(from, symbols[i])) {\r\n to[symbols[i]] = from[symbols[i]];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMuanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7RUFJRTtBQUVXO0FBQ2IsbUNBQW1DO0FBQ25DLElBQUkscUJBQXFCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0FBQ3pELElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBQ3JELElBQUksZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztBQUU3RCxTQUFTLFFBQVEsQ0FBQyxHQUFHO0lBQ3BCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQ3RDLE1BQU0sSUFBSSxTQUFTLENBQUMsdURBQXVELENBQUMsQ0FBQztLQUM3RTtJQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFDdkIsSUFBSTtRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFFRCxnRUFBZ0U7UUFFaEUsdURBQXVEO1FBQ3ZELElBQUksS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsc0NBQXNDO1FBQ3RFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1lBQ2pELE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFFRCx1REFBdUQ7UUFDdkQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUM3RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDYjtRQUVELHVEQUF1RDtRQUN2RCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTTtZQUN4RCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxzQkFBc0IsRUFBRTtZQUN6QixPQUFPLEtBQUssQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUM7S0FDWjtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ2Isb0VBQW9FO1FBQ3BFLE9BQU8sS0FBSyxDQUFDO0tBQ2I7QUFDRixDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxNQUFNLEVBQUUsTUFBTTtJQUM1RSxJQUFJLElBQUksQ0FBQztJQUNULElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixJQUFJLE9BQU8sQ0FBQztJQUVaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUIsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDckIsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDbkMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQjtTQUNEO1FBRUQsSUFBSSxxQkFBcUIsRUFBRTtZQUMxQixPQUFPLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDNUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbEM7YUFDRDtTQUNEO0tBQ0Q7SUFFRCxPQUFPLEVBQUUsQ0FBQztBQUNYLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcz8zZTEzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/object-assign/index.js\n");
933
+
934
+ /***/ }),
935
+
925
936
  /***/ "../../../node_modules/pako/index.js":
926
937
  /*!*******************************************!*\
927
938
  !*** ../../../node_modules/pako/index.js ***!
@@ -1243,7 +1254,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1243
1254
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1244
1255
 
1245
1256
  "use strict";
1246
- eval("/**\r\n * @license React\r\n * react-jsx-runtime.development.js\r\n *\r\n * Copyright (c) Facebook, Inc. and its affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nif (true) {\r\n (function () {\r\n 'use strict';\r\n var React = __webpack_require__(/*! react */ \"react\");\r\n // ATTENTION\r\n // When adding new symbols to this file,\r\n // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\r\n // The Symbol used to tag the ReactElement-like types.\r\n var REACT_ELEMENT_TYPE = Symbol.for('react.element');\r\n var REACT_PORTAL_TYPE = Symbol.for('react.portal');\r\n var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\r\n var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\r\n var REACT_PROFILER_TYPE = Symbol.for('react.profiler');\r\n var REACT_PROVIDER_TYPE = Symbol.for('react.provider');\r\n var REACT_CONTEXT_TYPE = Symbol.for('react.context');\r\n var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\r\n var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\r\n var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\r\n var REACT_MEMO_TYPE = Symbol.for('react.memo');\r\n var REACT_LAZY_TYPE = Symbol.for('react.lazy');\r\n var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\r\n var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\r\n var FAUX_ITERATOR_SYMBOL = '@@iterator';\r\n function getIteratorFn(maybeIterable) {\r\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\r\n return null;\r\n }\r\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\r\n if (typeof maybeIterator === 'function') {\r\n return maybeIterator;\r\n }\r\n return null;\r\n }\r\n var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\r\n function error(format) {\r\n {\r\n {\r\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\r\n args[_key2 - 1] = arguments[_key2];\r\n }\r\n printWarning('error', format, args);\r\n }\r\n }\r\n }\r\n function printWarning(level, format, args) {\r\n // When changing this logic, you might want to also\r\n // update consoleWithStackDev.www.js as well.\r\n {\r\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\n var stack = ReactDebugCurrentFrame.getStackAddendum();\r\n if (stack !== '') {\r\n format += '%s';\r\n args = args.concat([stack]);\r\n } // eslint-disable-next-line react-internal/safe-string-coercion\r\n var argsWithFormat = args.map(function (item) {\r\n return String(item);\r\n }); // Careful: RN currently depends on this prefix\r\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\r\n // breaks IE9: https://github.com/facebook/react/issues/13610\r\n // eslint-disable-next-line react-internal/no-production-logging\r\n Function.prototype.apply.call(console[level], console, argsWithFormat);\r\n }\r\n }\r\n // -----------------------------------------------------------------------------\r\n var enableScopeAPI = false; // Experimental Create Event Handle API.\r\n var enableCacheElement = false;\r\n var enableTransitionTracing = false; // No known bugs, but needs performance testing\r\n var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\r\n // stuff. Intended to enable React core members to more easily debug scheduling\r\n // issues in DEV builds.\r\n var enableDebugTracing = false; // Track which Fiber(s) schedule render work.\r\n var REACT_MODULE_REFERENCE;\r\n {\r\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\r\n }\r\n function isValidElementType(type) {\r\n if (typeof type === 'string' || typeof type === 'function') {\r\n return true;\r\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\r\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing) {\r\n return true;\r\n }\r\n if (typeof type === 'object' && type !== null) {\r\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\r\n // types supported by any Flight configuration anywhere since\r\n // we don't know which Flight build this will end up being used\r\n // with.\r\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n function getWrappedName(outerType, innerType, wrapperName) {\r\n var displayName = outerType.displayName;\r\n if (displayName) {\r\n return displayName;\r\n }\r\n var functionName = innerType.displayName || innerType.name || '';\r\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\r\n } // Keep in sync with react-reconciler/getComponentNameFromFiber\r\n function getContextName(type) {\r\n return type.displayName || 'Context';\r\n } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\r\n function getComponentNameFromType(type) {\r\n if (type == null) {\r\n // Host root, text node or just invalid type.\r\n return null;\r\n }\r\n {\r\n if (typeof type.tag === 'number') {\r\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\r\n }\r\n }\r\n if (typeof type === 'function') {\r\n return type.displayName || type.name || null;\r\n }\r\n if (typeof type === 'string') {\r\n return type;\r\n }\r\n switch (type) {\r\n case REACT_FRAGMENT_TYPE:\r\n return 'Fragment';\r\n case REACT_PORTAL_TYPE:\r\n return 'Portal';\r\n case REACT_PROFILER_TYPE:\r\n return 'Profiler';\r\n case REACT_STRICT_MODE_TYPE:\r\n return 'StrictMode';\r\n case REACT_SUSPENSE_TYPE:\r\n return 'Suspense';\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return 'SuspenseList';\r\n }\r\n if (typeof type === 'object') {\r\n switch (type.$$typeof) {\r\n case REACT_CONTEXT_TYPE:\r\n var context = type;\r\n return getContextName(context) + '.Consumer';\r\n case REACT_PROVIDER_TYPE:\r\n var provider = type;\r\n return getContextName(provider._context) + '.Provider';\r\n case REACT_FORWARD_REF_TYPE:\r\n return getWrappedName(type, type.render, 'ForwardRef');\r\n case REACT_MEMO_TYPE:\r\n var outerName = type.displayName || null;\r\n if (outerName !== null) {\r\n return outerName;\r\n }\r\n return getComponentNameFromType(type.type) || 'Memo';\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n try {\r\n return getComponentNameFromType(init(payload));\r\n }\r\n catch (x) {\r\n return null;\r\n }\r\n }\r\n // eslint-disable-next-line no-fallthrough\r\n }\r\n }\r\n return null;\r\n }\r\n var assign = Object.assign;\r\n // Helpers to patch console.logs to avoid logging during side-effect free\r\n // replaying on render function. This currently only patches the object\r\n // lazily which won't cover if the log function was extracted eagerly.\r\n // We could also eagerly patch the method.\r\n var disabledDepth = 0;\r\n var prevLog;\r\n var prevInfo;\r\n var prevWarn;\r\n var prevError;\r\n var prevGroup;\r\n var prevGroupCollapsed;\r\n var prevGroupEnd;\r\n function disabledLog() { }\r\n disabledLog.__reactDisabledLog = true;\r\n function disableLogs() {\r\n {\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n prevLog = console.log;\r\n prevInfo = console.info;\r\n prevWarn = console.warn;\r\n prevError = console.error;\r\n prevGroup = console.group;\r\n prevGroupCollapsed = console.groupCollapsed;\r\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n value: disabledLog,\r\n writable: true\r\n }; // $FlowFixMe Flow thinks console is immutable.\r\n Object.defineProperties(console, {\r\n info: props,\r\n log: props,\r\n warn: props,\r\n error: props,\r\n group: props,\r\n groupCollapsed: props,\r\n groupEnd: props\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n disabledDepth++;\r\n }\r\n }\r\n function reenableLogs() {\r\n {\r\n disabledDepth--;\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true\r\n }; // $FlowFixMe Flow thinks console is immutable.\r\n Object.defineProperties(console, {\r\n log: assign({}, props, {\r\n value: prevLog\r\n }),\r\n info: assign({}, props, {\r\n value: prevInfo\r\n }),\r\n warn: assign({}, props, {\r\n value: prevWarn\r\n }),\r\n error: assign({}, props, {\r\n value: prevError\r\n }),\r\n group: assign({}, props, {\r\n value: prevGroup\r\n }),\r\n groupCollapsed: assign({}, props, {\r\n value: prevGroupCollapsed\r\n }),\r\n groupEnd: assign({}, props, {\r\n value: prevGroupEnd\r\n })\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n if (disabledDepth < 0) {\r\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\r\n }\r\n }\r\n }\r\n var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\r\n var prefix;\r\n function describeBuiltInComponentFrame(name, source, ownerFn) {\r\n {\r\n if (prefix === undefined) {\r\n // Extract the VM specific prefix used by each line.\r\n try {\r\n throw Error();\r\n }\r\n catch (x) {\r\n var match = x.stack.trim().match(/\\n( *(at )?)/);\r\n prefix = match && match[1] || '';\r\n }\r\n } // We use the prefix to ensure our stacks line up with native stack frames.\r\n return '\\n' + prefix + name;\r\n }\r\n }\r\n var reentry = false;\r\n var componentFrameCache;\r\n {\r\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\r\n componentFrameCache = new PossiblyWeakMap();\r\n }\r\n function describeNativeComponentFrame(fn, construct) {\r\n // If something asked for a stack inside a fake render, it should get ignored.\r\n if (!fn || reentry) {\r\n return '';\r\n }\r\n {\r\n var frame = componentFrameCache.get(fn);\r\n if (frame !== undefined) {\r\n return frame;\r\n }\r\n }\r\n var control;\r\n reentry = true;\r\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\r\n Error.prepareStackTrace = undefined;\r\n var previousDispatcher;\r\n {\r\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\r\n // for warnings.\r\n ReactCurrentDispatcher.current = null;\r\n disableLogs();\r\n }\r\n try {\r\n // This should throw.\r\n if (construct) {\r\n // Something should be setting the props in the constructor.\r\n var Fake = function () {\r\n throw Error();\r\n }; // $FlowFixMe\r\n Object.defineProperty(Fake.prototype, 'props', {\r\n set: function () {\r\n // We use a throwing setter instead of frozen or non-writable props\r\n // because that won't throw in a non-strict mode function.\r\n throw Error();\r\n }\r\n });\r\n if (typeof Reflect === 'object' && Reflect.construct) {\r\n // We construct a different control for this case to include any extra\r\n // frames added by the construct call.\r\n try {\r\n Reflect.construct(Fake, []);\r\n }\r\n catch (x) {\r\n control = x;\r\n }\r\n Reflect.construct(fn, [], Fake);\r\n }\r\n else {\r\n try {\r\n Fake.call();\r\n }\r\n catch (x) {\r\n control = x;\r\n }\r\n fn.call(Fake.prototype);\r\n }\r\n }\r\n else {\r\n try {\r\n throw Error();\r\n }\r\n catch (x) {\r\n control = x;\r\n }\r\n fn();\r\n }\r\n }\r\n catch (sample) {\r\n // This is inlined manually because closure doesn't do it for us.\r\n if (sample && control && typeof sample.stack === 'string') {\r\n // This extracts the first frame from the sample that isn't also in the control.\r\n // Skipping one frame that we assume is the frame that calls the two.\r\n var sampleLines = sample.stack.split('\\n');\r\n var controlLines = control.stack.split('\\n');\r\n var s = sampleLines.length - 1;\r\n var c = controlLines.length - 1;\r\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\r\n // We expect at least one stack frame to be shared.\r\n // Typically this will be the root most one. However, stack frames may be\r\n // cut off due to maximum stack limits. In this case, one maybe cut off\r\n // earlier than the other. We assume that the sample is longer or the same\r\n // and there for cut off earlier. So we should find the root most frame in\r\n // the sample somewhere in the control.\r\n c--;\r\n }\r\n for (; s >= 1 && c >= 0; s--, c--) {\r\n // Next we find the first one that isn't the same which should be the\r\n // frame that called our sample function and the control.\r\n if (sampleLines[s] !== controlLines[c]) {\r\n // In V8, the first line is describing the message but other VMs don't.\r\n // If we're about to return the first line, and the control is also on the same\r\n // line, that's a pretty good indicator that our sample threw at same line as\r\n // the control. I.e. before we entered the sample frame. So we ignore this result.\r\n // This can happen if you passed a class to function component, or non-function.\r\n if (s !== 1 || c !== 1) {\r\n do {\r\n s--;\r\n c--; // We may still have similar intermediate frames from the construct call.\r\n // The next one that isn't the same should be our match though.\r\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\r\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\r\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\r\n // but we have a user-provided \"displayName\"\r\n // splice it in to make the stack more readable.\r\n if (fn.displayName && _frame.includes('<anonymous>')) {\r\n _frame = _frame.replace('<anonymous>', fn.displayName);\r\n }\r\n {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, _frame);\r\n }\r\n } // Return the line we found.\r\n return _frame;\r\n }\r\n } while (s >= 1 && c >= 0);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n reentry = false;\r\n {\r\n ReactCurrentDispatcher.current = previousDispatcher;\r\n reenableLogs();\r\n }\r\n Error.prepareStackTrace = previousPrepareStackTrace;\r\n } // Fallback to just using the name if we couldn't make it throw.\r\n var name = fn ? fn.displayName || fn.name : '';\r\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\r\n {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, syntheticFrame);\r\n }\r\n }\r\n return syntheticFrame;\r\n }\r\n function describeFunctionComponentFrame(fn, source, ownerFn) {\r\n {\r\n return describeNativeComponentFrame(fn, false);\r\n }\r\n }\r\n function shouldConstruct(Component) {\r\n var prototype = Component.prototype;\r\n return !!(prototype && prototype.isReactComponent);\r\n }\r\n function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\r\n if (type == null) {\r\n return '';\r\n }\r\n if (typeof type === 'function') {\r\n {\r\n return describeNativeComponentFrame(type, shouldConstruct(type));\r\n }\r\n }\r\n if (typeof type === 'string') {\r\n return describeBuiltInComponentFrame(type);\r\n }\r\n switch (type) {\r\n case REACT_SUSPENSE_TYPE:\r\n return describeBuiltInComponentFrame('Suspense');\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return describeBuiltInComponentFrame('SuspenseList');\r\n }\r\n if (typeof type === 'object') {\r\n switch (type.$$typeof) {\r\n case REACT_FORWARD_REF_TYPE:\r\n return describeFunctionComponentFrame(type.render);\r\n case REACT_MEMO_TYPE:\r\n // Memo may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n try {\r\n // Lazy may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\r\n }\r\n catch (x) { }\r\n }\r\n }\r\n }\r\n return '';\r\n }\r\n var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n var loggedTypeFailures = {};\r\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\n function setCurrentlyValidatingElement(element) {\r\n {\r\n if (element) {\r\n var owner = element._owner;\r\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\r\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\r\n }\r\n else {\r\n ReactDebugCurrentFrame.setExtraStackFrame(null);\r\n }\r\n }\r\n }\r\n function checkPropTypes(typeSpecs, values, location, componentName, element) {\r\n {\r\n // $FlowFixMe This is okay but Flow doesn't know it.\r\n var has = Function.call.bind(hasOwnProperty);\r\n for (var typeSpecName in typeSpecs) {\r\n if (has(typeSpecs, typeSpecName)) {\r\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\r\n // fail the render phase where it didn't fail before. So we log it.\r\n // After these have been cleaned up, we'll let them throw.\r\n try {\r\n // This is intentionally an invariant that gets caught. It's the same\r\n // behavior as without this statement except with a better message.\r\n if (typeof typeSpecs[typeSpecName] !== 'function') {\r\n // eslint-disable-next-line react-internal/prod-error-codes\r\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\r\n err.name = 'Invariant Violation';\r\n throw err;\r\n }\r\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\r\n }\r\n catch (ex) {\r\n error$1 = ex;\r\n }\r\n if (error$1 && !(error$1 instanceof Error)) {\r\n setCurrentlyValidatingElement(element);\r\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\r\n setCurrentlyValidatingElement(null);\r\n }\r\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\r\n // Only monitor this failure once because there tends to be a lot of the\r\n // same error.\r\n loggedTypeFailures[error$1.message] = true;\r\n setCurrentlyValidatingElement(element);\r\n error('Failed %s type: %s', location, error$1.message);\r\n setCurrentlyValidatingElement(null);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\r\n function isArray(a) {\r\n return isArrayImpl(a);\r\n }\r\n /*\r\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\r\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\r\n *\r\n * The functions in this module will throw an easier-to-understand,\r\n * easier-to-debug exception with a clear errors message message explaining the\r\n * problem. (Instead of a confusing exception thrown inside the implementation\r\n * of the `value` object).\r\n */\r\n // $FlowFixMe only called in DEV, so void return is not possible.\r\n function typeName(value) {\r\n {\r\n // toStringTag is needed for namespaced types like Temporal.Instant\r\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\r\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\r\n return type;\r\n }\r\n } // $FlowFixMe only called in DEV, so void return is not possible.\r\n function willCoercionThrow(value) {\r\n {\r\n try {\r\n testStringCoercion(value);\r\n return false;\r\n }\r\n catch (e) {\r\n return true;\r\n }\r\n }\r\n }\r\n function testStringCoercion(value) {\r\n // If you ended up here by following an exception call stack, here's what's\r\n // happened: you supplied an object or symbol value to React (as a prop, key,\r\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\r\n // coerce it to a string using `'' + value`, an exception was thrown.\r\n //\r\n // The most common types that will cause this exception are `Symbol` instances\r\n // and Temporal objects like `Temporal.Instant`. But any object that has a\r\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\r\n // exception. (Library authors do this to prevent users from using built-in\r\n // numeric operators like `+` or comparison operators like `>=` because custom\r\n // methods are needed to perform accurate arithmetic or comparison.)\r\n //\r\n // To fix the problem, coerce this object or symbol value to a string before\r\n // passing it to React. The most reliable way is usually `String(value)`.\r\n //\r\n // To find which value is throwing, check the browser or debugger console.\r\n // Before this exception was thrown, there should be `console.error` output\r\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\r\n // problem and how that type was used: key, atrribute, input value prop, etc.\r\n // In most cases, this console output also shows the component and its\r\n // ancestor components where the exception happened.\r\n //\r\n // eslint-disable-next-line react-internal/safe-string-coercion\r\n return '' + value;\r\n }\r\n function checkKeyStringCoercion(value) {\r\n {\r\n if (willCoercionThrow(value)) {\r\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\r\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\r\n }\r\n }\r\n }\r\n var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\r\n var RESERVED_PROPS = {\r\n key: true,\r\n ref: true,\r\n __self: true,\r\n __source: true\r\n };\r\n var specialPropKeyWarningShown;\r\n var specialPropRefWarningShown;\r\n var didWarnAboutStringRefs;\r\n {\r\n didWarnAboutStringRefs = {};\r\n }\r\n function hasValidRef(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'ref')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n return config.ref !== undefined;\r\n }\r\n function hasValidKey(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'key')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n return config.key !== undefined;\r\n }\r\n function warnIfStringRefCannotBeAutoConverted(config, self) {\r\n {\r\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\r\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\r\n if (!didWarnAboutStringRefs[componentName]) {\r\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\r\n didWarnAboutStringRefs[componentName] = true;\r\n }\r\n }\r\n }\r\n }\r\n function defineKeyPropWarningGetter(props, displayName) {\r\n {\r\n var warnAboutAccessingKey = function () {\r\n if (!specialPropKeyWarningShown) {\r\n specialPropKeyWarningShown = true;\r\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n warnAboutAccessingKey.isReactWarning = true;\r\n Object.defineProperty(props, 'key', {\r\n get: warnAboutAccessingKey,\r\n configurable: true\r\n });\r\n }\r\n }\r\n function defineRefPropWarningGetter(props, displayName) {\r\n {\r\n var warnAboutAccessingRef = function () {\r\n if (!specialPropRefWarningShown) {\r\n specialPropRefWarningShown = true;\r\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n warnAboutAccessingRef.isReactWarning = true;\r\n Object.defineProperty(props, 'ref', {\r\n get: warnAboutAccessingRef,\r\n configurable: true\r\n });\r\n }\r\n }\r\n /**\r\n * Factory method to create a new React element. This no longer adheres to\r\n * the class pattern, so do not use new to call it. Also, instanceof check\r\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\r\n * if something is a React Element.\r\n *\r\n * @param {*} type\r\n * @param {*} props\r\n * @param {*} key\r\n * @param {string|object} ref\r\n * @param {*} owner\r\n * @param {*} self A *temporary* helper to detect places where `this` is\r\n * different from the `owner` when React.createElement is called, so that we\r\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\r\n * functions, and as long as `this` and owner are the same, there will be no\r\n * change in behavior.\r\n * @param {*} source An annotation object (added by a transpiler or otherwise)\r\n * indicating filename, line number, and/or other information.\r\n * @internal\r\n */\r\n var ReactElement = function (type, key, ref, self, source, owner, props) {\r\n var element = {\r\n // This tag allows us to uniquely identify this as a React Element\r\n $$typeof: REACT_ELEMENT_TYPE,\r\n // Built-in properties that belong on the element\r\n type: type,\r\n key: key,\r\n ref: ref,\r\n props: props,\r\n // Record the component responsible for creating this element.\r\n _owner: owner\r\n };\r\n {\r\n // The validation flag is currently mutative. We put it on\r\n // an external backing store so that we can freeze the whole object.\r\n // This can be replaced with a WeakMap once they are implemented in\r\n // commonly used development environments.\r\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\r\n // the validation flag non-enumerable (where possible, which should\r\n // include every environment we run tests in), so the test framework\r\n // ignores it.\r\n Object.defineProperty(element._store, 'validated', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: true,\r\n value: false\r\n }); // self and source are DEV only properties.\r\n Object.defineProperty(element, '_self', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: self\r\n }); // Two elements created in two different places should be considered\r\n // equal for testing purposes and therefore we hide it from enumeration.\r\n Object.defineProperty(element, '_source', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: source\r\n });\r\n if (Object.freeze) {\r\n Object.freeze(element.props);\r\n Object.freeze(element);\r\n }\r\n }\r\n return element;\r\n };\r\n /**\r\n * https://github.com/reactjs/rfcs/pull/107\r\n * @param {*} type\r\n * @param {object} props\r\n * @param {string} key\r\n */\r\n function jsxDEV(type, config, maybeKey, source, self) {\r\n {\r\n var propName; // Reserved names are extracted\r\n var props = {};\r\n var key = null;\r\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\r\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\r\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\r\n // but as an intermediary step, we will use jsxDEV for everything except\r\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\r\n // key is explicitly declared to be undefined or not.\r\n if (maybeKey !== undefined) {\r\n {\r\n checkKeyStringCoercion(maybeKey);\r\n }\r\n key = '' + maybeKey;\r\n }\r\n if (hasValidKey(config)) {\r\n {\r\n checkKeyStringCoercion(config.key);\r\n }\r\n key = '' + config.key;\r\n }\r\n if (hasValidRef(config)) {\r\n ref = config.ref;\r\n warnIfStringRefCannotBeAutoConverted(config, self);\r\n } // Remaining properties are added to a new props object\r\n for (propName in config) {\r\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\r\n props[propName] = config[propName];\r\n }\r\n } // Resolve default props\r\n if (type && type.defaultProps) {\r\n var defaultProps = type.defaultProps;\r\n for (propName in defaultProps) {\r\n if (props[propName] === undefined) {\r\n props[propName] = defaultProps[propName];\r\n }\r\n }\r\n }\r\n if (key || ref) {\r\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\r\n if (key) {\r\n defineKeyPropWarningGetter(props, displayName);\r\n }\r\n if (ref) {\r\n defineRefPropWarningGetter(props, displayName);\r\n }\r\n }\r\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\r\n }\r\n }\r\n var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\r\n var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\r\n function setCurrentlyValidatingElement$1(element) {\r\n {\r\n if (element) {\r\n var owner = element._owner;\r\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\r\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\r\n }\r\n else {\r\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\r\n }\r\n }\r\n }\r\n var propTypesMisspellWarningShown;\r\n {\r\n propTypesMisspellWarningShown = false;\r\n }\r\n /**\r\n * Verifies the object is a ReactElement.\r\n * See https://reactjs.org/docs/react-api.html#isvalidelement\r\n * @param {?object} object\r\n * @return {boolean} True if `object` is a ReactElement.\r\n * @final\r\n */\r\n function isValidElement(object) {\r\n {\r\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\r\n }\r\n }\r\n function getDeclarationErrorAddendum() {\r\n {\r\n if (ReactCurrentOwner$1.current) {\r\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\r\n if (name) {\r\n return '\\n\\nCheck the render method of `' + name + '`.';\r\n }\r\n }\r\n return '';\r\n }\r\n }\r\n function getSourceInfoErrorAddendum(source) {\r\n {\r\n if (source !== undefined) {\r\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\r\n var lineNumber = source.lineNumber;\r\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\r\n }\r\n return '';\r\n }\r\n }\r\n /**\r\n * Warn if there's no key explicitly set on dynamic arrays of children or\r\n * object keys are not valid. This allows us to keep track of children between\r\n * updates.\r\n */\r\n var ownerHasKeyUseWarning = {};\r\n function getCurrentComponentErrorInfo(parentType) {\r\n {\r\n var info = getDeclarationErrorAddendum();\r\n if (!info) {\r\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\r\n if (parentName) {\r\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\r\n }\r\n }\r\n return info;\r\n }\r\n }\r\n /**\r\n * Warn if the element doesn't have an explicit key assigned to it.\r\n * This element is in an array. The array could grow and shrink or be\r\n * reordered. All children that haven't already been validated are required to\r\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\r\n * will only be shown once.\r\n *\r\n * @internal\r\n * @param {ReactElement} element Element that requires a key.\r\n * @param {*} parentType element's parent's type.\r\n */\r\n function validateExplicitKey(element, parentType) {\r\n {\r\n if (!element._store || element._store.validated || element.key != null) {\r\n return;\r\n }\r\n element._store.validated = true;\r\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\r\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\r\n return;\r\n }\r\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\r\n // property, it may be the creator of the child that's responsible for\r\n // assigning it a key.\r\n var childOwner = '';\r\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\r\n // Give the component that originally created this child.\r\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\r\n }\r\n setCurrentlyValidatingElement$1(element);\r\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\r\n setCurrentlyValidatingElement$1(null);\r\n }\r\n }\r\n /**\r\n * Ensure that every element either is passed in a static location, in an\r\n * array with an explicit keys property defined, or in an object literal\r\n * with valid key property.\r\n *\r\n * @internal\r\n * @param {ReactNode} node Statically passed child of any type.\r\n * @param {*} parentType node's parent's type.\r\n */\r\n function validateChildKeys(node, parentType) {\r\n {\r\n if (typeof node !== 'object') {\r\n return;\r\n }\r\n if (isArray(node)) {\r\n for (var i = 0; i < node.length; i++) {\r\n var child = node[i];\r\n if (isValidElement(child)) {\r\n validateExplicitKey(child, parentType);\r\n }\r\n }\r\n }\r\n else if (isValidElement(node)) {\r\n // This element was passed in a valid location.\r\n if (node._store) {\r\n node._store.validated = true;\r\n }\r\n }\r\n else if (node) {\r\n var iteratorFn = getIteratorFn(node);\r\n if (typeof iteratorFn === 'function') {\r\n // Entry iterators used to provide implicit keys,\r\n // but now we print a separate warning for them later.\r\n if (iteratorFn !== node.entries) {\r\n var iterator = iteratorFn.call(node);\r\n var step;\r\n while (!(step = iterator.next()).done) {\r\n if (isValidElement(step.value)) {\r\n validateExplicitKey(step.value, parentType);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Given an element, validate that its props follow the propTypes definition,\r\n * provided by the type.\r\n *\r\n * @param {ReactElement} element\r\n */\r\n function validatePropTypes(element) {\r\n {\r\n var type = element.type;\r\n if (type === null || type === undefined || typeof type === 'string') {\r\n return;\r\n }\r\n var propTypes;\r\n if (typeof type === 'function') {\r\n propTypes = type.propTypes;\r\n }\r\n else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\r\n // Inner props are checked in the reconciler.\r\n type.$$typeof === REACT_MEMO_TYPE)) {\r\n propTypes = type.propTypes;\r\n }\r\n else {\r\n return;\r\n }\r\n if (propTypes) {\r\n // Intentionally inside to avoid triggering lazy initializers:\r\n var name = getComponentNameFromType(type);\r\n checkPropTypes(propTypes, element.props, 'prop', name, element);\r\n }\r\n else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\r\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\r\n var _name = getComponentNameFromType(type);\r\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\r\n }\r\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\r\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\r\n }\r\n }\r\n }\r\n /**\r\n * Given a fragment, validate that it can only be provided with fragment props\r\n * @param {ReactElement} fragment\r\n */\r\n function validateFragmentProps(fragment) {\r\n {\r\n var keys = Object.keys(fragment.props);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n if (key !== 'children' && key !== 'key') {\r\n setCurrentlyValidatingElement$1(fragment);\r\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\r\n setCurrentlyValidatingElement$1(null);\r\n break;\r\n }\r\n }\r\n if (fragment.ref !== null) {\r\n setCurrentlyValidatingElement$1(fragment);\r\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\r\n setCurrentlyValidatingElement$1(null);\r\n }\r\n }\r\n }\r\n function jsxWithValidation(type, props, key, isStaticChildren, source, self) {\r\n {\r\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\r\n // succeed and there will likely be errors in render.\r\n if (!validType) {\r\n var info = '';\r\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\r\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\r\n }\r\n var sourceInfo = getSourceInfoErrorAddendum(source);\r\n if (sourceInfo) {\r\n info += sourceInfo;\r\n }\r\n else {\r\n info += getDeclarationErrorAddendum();\r\n }\r\n var typeString;\r\n if (type === null) {\r\n typeString = 'null';\r\n }\r\n else if (isArray(type)) {\r\n typeString = 'array';\r\n }\r\n else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\r\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\r\n info = ' Did you accidentally export a JSX literal instead of a component?';\r\n }\r\n else {\r\n typeString = typeof type;\r\n }\r\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\r\n }\r\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\r\n // TODO: Drop this when these are no longer allowed as the type argument.\r\n if (element == null) {\r\n return element;\r\n } // Skip key warning if the type isn't valid since our key validation logic\r\n // doesn't expect a non-string/function type and can throw confusing errors.\r\n // We don't want exception behavior to differ between dev and prod.\r\n // (Rendering will throw with a helpful message and as soon as the type is\r\n // fixed, the key warnings will appear.)\r\n if (validType) {\r\n var children = props.children;\r\n if (children !== undefined) {\r\n if (isStaticChildren) {\r\n if (isArray(children)) {\r\n for (var i = 0; i < children.length; i++) {\r\n validateChildKeys(children[i], type);\r\n }\r\n if (Object.freeze) {\r\n Object.freeze(children);\r\n }\r\n }\r\n else {\r\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\r\n }\r\n }\r\n else {\r\n validateChildKeys(children, type);\r\n }\r\n }\r\n }\r\n if (type === REACT_FRAGMENT_TYPE) {\r\n validateFragmentProps(element);\r\n }\r\n else {\r\n validatePropTypes(element);\r\n }\r\n return element;\r\n }\r\n } // These two functions exist to still get child warnings in dev\r\n // even with the prod transform. This means that jsxDEV is purely\r\n // opt-in behavior for better messages but that we won't stop\r\n // giving you warnings if you use production apis.\r\n function jsxWithValidationStatic(type, props, key) {\r\n {\r\n return jsxWithValidation(type, props, key, true);\r\n }\r\n }\r\n function jsxWithValidationDynamic(type, props, key) {\r\n {\r\n return jsxWithValidation(type, props, key, false);\r\n }\r\n }\r\n var jsx = jsxWithValidationDynamic; // we may want to special case jsxs internally to take advantage of static children.\r\n // for now we can ship identical prod functions\r\n var jsxs = jsxWithValidationStatic;\r\n exports.Fragment = REACT_FRAGMENT_TYPE;\r\n exports.jsx = jsx;\r\n exports.jsxs = jsxs;\r\n })();\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVVO0FBRWIsSUFBSSxJQUFxQyxFQUFFO0lBQ3pDLENBQUM7UUFDSCxZQUFZLENBQUM7UUFFYixJQUFJLEtBQUssR0FBRyxtQkFBTyxDQUFDLG9CQUFPLENBQUMsQ0FBQztRQUU3QixZQUFZO1FBQ1osd0NBQXdDO1FBQ3hDLGtGQUFrRjtRQUNsRixzREFBc0Q7UUFDdEQsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELElBQUksaUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RCxJQUFJLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3RCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RCxJQUFJLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckQsSUFBSSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0QsSUFBSSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsSUFBSSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDakUsSUFBSSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FB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QUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbEQ7UUFDSCxDQUFDO1FBQ0QsU0FBUyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUc7WUFDaEQ7Z0JBQ0UsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNuRDtRQUNILENBQUM7UUFFRCxJQUFJLEdBQUcsR0FBSSx3QkFBd0IsQ0FBRSxDQUFDLG9GQUFvRjtRQUMxSCwrQ0FBK0M7UUFFL0MsSUFBSSxJQUFJLEdBQUksdUJBQXVCLENBQUU7UUFFckMsZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7UUFDdkMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUNsQixZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDTiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzP2ZjNWMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG4vLyBzdHVmZi4gSW50ZW5kZWQgdG8gZW5hYmxlIFJlYWN0IGNvcmUgbWVtYmVycyB0byBtb3JlIGVhc2lseSBkZWJ1ZyBzY2hlZHVsaW5nXG4vLyBpc3N1ZXMgaW4gREVWIGJ1aWxkcy5cblxudmFyIGVuYWJsZURlYnVnVHJhY2luZyA9IGZhbHNlOyAvLyBUcmFjayB3aGljaCBGaWJlcihzKSBzY2hlZHVsZSByZW5kZXIgd29yay5cblxudmFyIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0U7XG5cbntcbiAgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1vZHVsZS5yZWZlcmVuY2UnKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBUaGlzIG5lZWRzIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG1vZHVsZSByZWZlcmVuY2Ugb2JqZWN0XG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxuICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggRmxpZ2h0IGJ1aWxkIHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdXNlZFxuICAgIC8vIHdpdGguXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcblxuICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XG4gIH1cblxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lO1xufSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn0gLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxuXG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoICFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTsgLy8gSWYgb3VyIGNvbXBvbmVudCBmcmFtZSBpcyBsYWJlbGVkIFwiPGFub255bW91cz5cIlxuICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIGEgdXNlci1wcm92aWRlZCBcImRpc3BsYXlOYW1lXCJcbiAgICAgICAgICAgICAgICAvLyBzcGxpY2UgaXQgaW4gdG8gbWFrZSB0aGUgc3RhY2sgbW9yZSByZWFkYWJsZS5cblxuXG4gICAgICAgICAgICAgICAgaWYgKGZuLmRpc3BsYXlOYW1lICYmIF9mcmFtZS5pbmNsdWRlcygnPGFub255bW91cz4nKSkge1xuICAgICAgICAgICAgICAgICAgX2ZyYW1lID0gX2ZyYW1lLnJlcGxhY2UoJzxhbm9ueW1vdXM+JywgZm4uZGlzcGxheU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKGhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuZnVuY3Rpb24gaXNBcnJheShhKSB7XG4gIHJldHVybiBpc0FycmF5SW1wbChhKTtcbn1cblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG59IC8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5cblxuZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcbiAge1xuICAgIHRyeSB7XG4gICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgLy8gSWYgeW91IGVuZGVkIHVwIGhlcmUgYnkgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiBjYWxsIHN0YWNrLCBoZXJlJ3Mgd2hhdCdzXG4gIC8vIGhhcHBlbmVkOiB5b3Ugc3VwcGxpZWQgYW4gb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBSZWFjdCAoYXMgYSBwcm9wLCBrZXksXG4gIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cbiAgLy8gY29lcmNlIGl0IHRvIGEgc3RyaW5nIHVzaW5nIGAnJyArIHZhbHVlYCwgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXG4gIC8vXG4gIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xuICAvLyBhbmQgVGVtcG9yYWwgb2JqZWN0cyBsaWtlIGBUZW1wb3JhbC5JbnN0YW50YC4gQnV0IGFueSBvYmplY3QgdGhhdCBoYXMgYVxuICAvLyBgdmFsdWVPZmAgb3IgYFtTeW1ib2wudG9QcmltaXRpdmVdYCBtZXRob2QgdGhhdCB0aHJvd3Mgd2lsbCBhbHNvIGNhdXNlIHRoaXNcbiAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXG4gIC8vIG51bWVyaWMgb3BlcmF0b3JzIGxpa2UgYCtgIG9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGxpa2UgYD49YCBiZWNhdXNlIGN1c3RvbVxuICAvLyBtZXRob2RzIGFyZSBuZWVkZWQgdG8gcGVyZm9ybSBhY2N1cmF0ZSBhcml0aG1ldGljIG9yIGNvbXBhcmlzb24uKVxuICAvL1xuICAvLyBUbyBmaXggdGhlIHByb2JsZW0sIGNvZXJjZSB0aGlzIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG4gIC8vIHBhc3NpbmcgaXQgdG8gUmVhY3QuIFRoZSBtb3N0IHJlbGlhYmxlIHdheSBpcyB1c3VhbGx5IGBTdHJpbmcodmFsdWUpYC5cbiAgLy9cbiAgLy8gVG8gZmluZCB3aGljaCB2YWx1ZSBpcyB0aHJvd2luZywgY2hlY2sgdGhlIGJyb3dzZXIgb3IgZGVidWdnZXIgY29uc29sZS5cbiAgLy8gQmVmb3JlIHRoaXMgZXhjZXB0aW9uIHdhcyB0aHJvd24sIHRoZXJlIHNob3VsZCBiZSBgY29uc29sZS5lcnJvcmAgb3V0cHV0XG4gIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcbiAgLy8gcHJvYmxlbSBhbmQgaG93IHRoYXQgdHlwZSB3YXMgdXNlZDoga2V5LCBhdHJyaWJ1dGUsIGlucHV0IHZhbHVlIHByb3AsIGV0Yy5cbiAgLy8gSW4gbW9zdCBjYXNlcywgdGhpcyBjb25zb2xlIG91dHB1dCBhbHNvIHNob3dzIHRoZSBjb21wb25lbnQgYW5kIGl0c1xuICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXG4gIC8vXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAge1xuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XG52YXIgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd247XG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcsIHNlbGYpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZiA9PT0gJ3N0cmluZycgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCAmJiBzZWxmICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBzZWxmKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSksIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYodHlwZSwgY29uZmlnLCBtYXliZUtleSwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBrZXkgPSBudWxsO1xuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cbiAgICAvLyBvciA8ZGl2IGtleT1cIkhpXCIgey4uLnByb3BzfSAvPiApLiBXZSB3YW50IHRvIGRlcHJlY2F0ZSBrZXkgc3ByZWFkLFxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXG4gICAgLy8ga2V5IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgdW5kZWZpbmVkIG9yIG5vdC5cblxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcsIHNlbGYpO1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH0gLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG5cblxuICAgIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB7XG4gICAgaWYgKFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICB7XG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gICAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gICAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQpIHtcbiAgICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGVsZW1lbnQuX293bmVyLnR5cGUpICsgXCIuXCI7XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkobm9kZSkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG5cbiAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIHZhciB2YWxpZFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSk7IC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICAgIGlmICghdmFsaWRUeXBlKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSk7XG5cbiAgICAgIGlmIChzb3VyY2VJbmZvKSB7XG4gICAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHR5cGUpKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgXCIgLz5cIjtcbiAgICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVvZiB0eXBlO1xuICAgICAgfVxuXG4gICAgICBlcnJvcignUmVhY3QuanN4OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xuICAgIH1cblxuICAgIHZhciBlbGVtZW50ID0ganN4REVWKHR5cGUsIHByb3BzLCBrZXksIHNvdXJjZSwgc2VsZik7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gICAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG5cblxuICAgIGlmICh2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuXG4gICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaXNTdGF0aWNDaGlsZHJlbikge1xuICAgICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpXSwgdHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignUmVhY3QuanN4OiBTdGF0aWMgY2hpbGRyZW4gc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheS4gJyArICdZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuICcgKyAnVXNlIHRoZSBCYWJlbCB0cmFuc2Zvcm0gaW5zdGVhZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4sIHR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn0gLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBleGlzdCB0byBzdGlsbCBnZXQgY2hpbGQgd2FybmluZ3MgaW4gZGV2XG4vLyBldmVuIHdpdGggdGhlIHByb2QgdHJhbnNmb3JtLiBUaGlzIG1lYW5zIHRoYXQganN4REVWIGlzIHB1cmVseVxuLy8gb3B0LWluIGJlaGF2aW9yIGZvciBiZXR0ZXIgbWVzc2FnZXMgYnV0IHRoYXQgd2Ugd29uJ3Qgc3RvcFxuLy8gZ2l2aW5nIHlvdSB3YXJuaW5ncyBpZiB5b3UgdXNlIHByb2R1Y3Rpb24gYXBpcy5cblxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25TdGF0aWModHlwZSwgcHJvcHMsIGtleSkge1xuICB7XG4gICAgcmV0dXJuIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvbkR5bmFtaWModHlwZSwgcHJvcHMsIGtleSkge1xuICB7XG4gICAgcmV0dXJuIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIGZhbHNlKTtcbiAgfVxufVxuXG52YXIganN4ID0gIGpzeFdpdGhWYWxpZGF0aW9uRHluYW1pYyA7IC8vIHdlIG1heSB3YW50IHRvIHNwZWNpYWwgY2FzZSBqc3hzIGludGVybmFsbHkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RhdGljIGNoaWxkcmVuLlxuLy8gZm9yIG5vdyB3ZSBjYW4gc2hpcCBpZGVudGljYWwgcHJvZCBmdW5jdGlvbnNcblxudmFyIGpzeHMgPSAganN4V2l0aFZhbGlkYXRpb25TdGF0aWMgO1xuXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuanN4ID0ganN4O1xuZXhwb3J0cy5qc3hzID0ganN4cztcbiAgfSkoKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/react/cjs/react-jsx-runtime.development.js\n");
1257
+ eval("/** @license React v17.0.2\r\n * react-jsx-runtime.development.js\r\n *\r\n * Copyright (c) Facebook, Inc. and its affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nif (true) {\r\n (function () {\r\n 'use strict';\r\n var React = __webpack_require__(/*! react */ \"react\");\r\n var _assign = __webpack_require__(/*! object-assign */ \"../../../node_modules/object-assign/index.js\");\r\n // ATTENTION\r\n // When adding new symbols to this file,\r\n // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\r\n // The Symbol used to tag the ReactElement-like types. If there is no native Symbol\r\n // nor polyfill, then a plain number is used for performance.\r\n var REACT_ELEMENT_TYPE = 0xeac7;\r\n var REACT_PORTAL_TYPE = 0xeaca;\r\n exports.Fragment = 0xeacb;\r\n var REACT_STRICT_MODE_TYPE = 0xeacc;\r\n var REACT_PROFILER_TYPE = 0xead2;\r\n var REACT_PROVIDER_TYPE = 0xeacd;\r\n var REACT_CONTEXT_TYPE = 0xeace;\r\n var REACT_FORWARD_REF_TYPE = 0xead0;\r\n var REACT_SUSPENSE_TYPE = 0xead1;\r\n var REACT_SUSPENSE_LIST_TYPE = 0xead8;\r\n var REACT_MEMO_TYPE = 0xead3;\r\n var REACT_LAZY_TYPE = 0xead4;\r\n var REACT_BLOCK_TYPE = 0xead9;\r\n var REACT_SERVER_BLOCK_TYPE = 0xeada;\r\n var REACT_FUNDAMENTAL_TYPE = 0xead5;\r\n var REACT_SCOPE_TYPE = 0xead7;\r\n var REACT_OPAQUE_ID_TYPE = 0xeae0;\r\n var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;\r\n var REACT_OFFSCREEN_TYPE = 0xeae2;\r\n var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;\r\n if (typeof Symbol === 'function' && Symbol.for) {\r\n var symbolFor = Symbol.for;\r\n REACT_ELEMENT_TYPE = symbolFor('react.element');\r\n REACT_PORTAL_TYPE = symbolFor('react.portal');\r\n exports.Fragment = symbolFor('react.fragment');\r\n REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');\r\n REACT_PROFILER_TYPE = symbolFor('react.profiler');\r\n REACT_PROVIDER_TYPE = symbolFor('react.provider');\r\n REACT_CONTEXT_TYPE = symbolFor('react.context');\r\n REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');\r\n REACT_SUSPENSE_TYPE = symbolFor('react.suspense');\r\n REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');\r\n REACT_MEMO_TYPE = symbolFor('react.memo');\r\n REACT_LAZY_TYPE = symbolFor('react.lazy');\r\n REACT_BLOCK_TYPE = symbolFor('react.block');\r\n REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');\r\n REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');\r\n REACT_SCOPE_TYPE = symbolFor('react.scope');\r\n REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');\r\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');\r\n REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');\r\n REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');\r\n }\r\n var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\r\n var FAUX_ITERATOR_SYMBOL = '@@iterator';\r\n function getIteratorFn(maybeIterable) {\r\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\r\n return null;\r\n }\r\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\r\n if (typeof maybeIterator === 'function') {\r\n return maybeIterator;\r\n }\r\n return null;\r\n }\r\n var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\r\n function error(format) {\r\n {\r\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\r\n args[_key2 - 1] = arguments[_key2];\r\n }\r\n printWarning('error', format, args);\r\n }\r\n }\r\n function printWarning(level, format, args) {\r\n // When changing this logic, you might want to also\r\n // update consoleWithStackDev.www.js as well.\r\n {\r\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\n var stack = ReactDebugCurrentFrame.getStackAddendum();\r\n if (stack !== '') {\r\n format += '%s';\r\n args = args.concat([stack]);\r\n }\r\n var argsWithFormat = args.map(function (item) {\r\n return '' + item;\r\n }); // Careful: RN currently depends on this prefix\r\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\r\n // breaks IE9: https://github.com/facebook/react/issues/13610\r\n // eslint-disable-next-line react-internal/no-production-logging\r\n Function.prototype.apply.call(console[level], console, argsWithFormat);\r\n }\r\n }\r\n // Filter certain DOM attributes (e.g. src, href) if their values are empty strings.\r\n var enableScopeAPI = false; // Experimental Create Event Handle API.\r\n function isValidElementType(type) {\r\n if (typeof type === 'string' || typeof type === 'function') {\r\n return true;\r\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\r\n if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI) {\r\n return true;\r\n }\r\n if (typeof type === 'object' && type !== null) {\r\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n function getWrappedName(outerType, innerType, wrapperName) {\r\n var functionName = innerType.displayName || innerType.name || '';\r\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\r\n }\r\n function getContextName(type) {\r\n return type.displayName || 'Context';\r\n }\r\n function getComponentName(type) {\r\n if (type == null) {\r\n // Host root, text node or just invalid type.\r\n return null;\r\n }\r\n {\r\n if (typeof type.tag === 'number') {\r\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\r\n }\r\n }\r\n if (typeof type === 'function') {\r\n return type.displayName || type.name || null;\r\n }\r\n if (typeof type === 'string') {\r\n return type;\r\n }\r\n switch (type) {\r\n case exports.Fragment:\r\n return 'Fragment';\r\n case REACT_PORTAL_TYPE:\r\n return 'Portal';\r\n case REACT_PROFILER_TYPE:\r\n return 'Profiler';\r\n case REACT_STRICT_MODE_TYPE:\r\n return 'StrictMode';\r\n case REACT_SUSPENSE_TYPE:\r\n return 'Suspense';\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return 'SuspenseList';\r\n }\r\n if (typeof type === 'object') {\r\n switch (type.$$typeof) {\r\n case REACT_CONTEXT_TYPE:\r\n var context = type;\r\n return getContextName(context) + '.Consumer';\r\n case REACT_PROVIDER_TYPE:\r\n var provider = type;\r\n return getContextName(provider._context) + '.Provider';\r\n case REACT_FORWARD_REF_TYPE:\r\n return getWrappedName(type, type.render, 'ForwardRef');\r\n case REACT_MEMO_TYPE:\r\n return getComponentName(type.type);\r\n case REACT_BLOCK_TYPE:\r\n return getComponentName(type._render);\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n try {\r\n return getComponentName(init(payload));\r\n }\r\n catch (x) {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n // Helpers to patch console.logs to avoid logging during side-effect free\r\n // replaying on render function. This currently only patches the object\r\n // lazily which won't cover if the log function was extracted eagerly.\r\n // We could also eagerly patch the method.\r\n var disabledDepth = 0;\r\n var prevLog;\r\n var prevInfo;\r\n var prevWarn;\r\n var prevError;\r\n var prevGroup;\r\n var prevGroupCollapsed;\r\n var prevGroupEnd;\r\n function disabledLog() { }\r\n disabledLog.__reactDisabledLog = true;\r\n function disableLogs() {\r\n {\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n prevLog = console.log;\r\n prevInfo = console.info;\r\n prevWarn = console.warn;\r\n prevError = console.error;\r\n prevGroup = console.group;\r\n prevGroupCollapsed = console.groupCollapsed;\r\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n value: disabledLog,\r\n writable: true\r\n }; // $FlowFixMe Flow thinks console is immutable.\r\n Object.defineProperties(console, {\r\n info: props,\r\n log: props,\r\n warn: props,\r\n error: props,\r\n group: props,\r\n groupCollapsed: props,\r\n groupEnd: props\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n disabledDepth++;\r\n }\r\n }\r\n function reenableLogs() {\r\n {\r\n disabledDepth--;\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true\r\n }; // $FlowFixMe Flow thinks console is immutable.\r\n Object.defineProperties(console, {\r\n log: _assign({}, props, {\r\n value: prevLog\r\n }),\r\n info: _assign({}, props, {\r\n value: prevInfo\r\n }),\r\n warn: _assign({}, props, {\r\n value: prevWarn\r\n }),\r\n error: _assign({}, props, {\r\n value: prevError\r\n }),\r\n group: _assign({}, props, {\r\n value: prevGroup\r\n }),\r\n groupCollapsed: _assign({}, props, {\r\n value: prevGroupCollapsed\r\n }),\r\n groupEnd: _assign({}, props, {\r\n value: prevGroupEnd\r\n })\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n if (disabledDepth < 0) {\r\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\r\n }\r\n }\r\n }\r\n var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\r\n var prefix;\r\n function describeBuiltInComponentFrame(name, source, ownerFn) {\r\n {\r\n if (prefix === undefined) {\r\n // Extract the VM specific prefix used by each line.\r\n try {\r\n throw Error();\r\n }\r\n catch (x) {\r\n var match = x.stack.trim().match(/\\n( *(at )?)/);\r\n prefix = match && match[1] || '';\r\n }\r\n } // We use the prefix to ensure our stacks line up with native stack frames.\r\n return '\\n' + prefix + name;\r\n }\r\n }\r\n var reentry = false;\r\n var componentFrameCache;\r\n {\r\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\r\n componentFrameCache = new PossiblyWeakMap();\r\n }\r\n function describeNativeComponentFrame(fn, construct) {\r\n // If something asked for a stack inside a fake render, it should get ignored.\r\n if (!fn || reentry) {\r\n return '';\r\n }\r\n {\r\n var frame = componentFrameCache.get(fn);\r\n if (frame !== undefined) {\r\n return frame;\r\n }\r\n }\r\n var control;\r\n reentry = true;\r\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\r\n Error.prepareStackTrace = undefined;\r\n var previousDispatcher;\r\n {\r\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\r\n // for warnings.\r\n ReactCurrentDispatcher.current = null;\r\n disableLogs();\r\n }\r\n try {\r\n // This should throw.\r\n if (construct) {\r\n // Something should be setting the props in the constructor.\r\n var Fake = function () {\r\n throw Error();\r\n }; // $FlowFixMe\r\n Object.defineProperty(Fake.prototype, 'props', {\r\n set: function () {\r\n // We use a throwing setter instead of frozen or non-writable props\r\n // because that won't throw in a non-strict mode function.\r\n throw Error();\r\n }\r\n });\r\n if (typeof Reflect === 'object' && Reflect.construct) {\r\n // We construct a different control for this case to include any extra\r\n // frames added by the construct call.\r\n try {\r\n Reflect.construct(Fake, []);\r\n }\r\n catch (x) {\r\n control = x;\r\n }\r\n Reflect.construct(fn, [], Fake);\r\n }\r\n else {\r\n try {\r\n Fake.call();\r\n }\r\n catch (x) {\r\n control = x;\r\n }\r\n fn.call(Fake.prototype);\r\n }\r\n }\r\n else {\r\n try {\r\n throw Error();\r\n }\r\n catch (x) {\r\n control = x;\r\n }\r\n fn();\r\n }\r\n }\r\n catch (sample) {\r\n // This is inlined manually because closure doesn't do it for us.\r\n if (sample && control && typeof sample.stack === 'string') {\r\n // This extracts the first frame from the sample that isn't also in the control.\r\n // Skipping one frame that we assume is the frame that calls the two.\r\n var sampleLines = sample.stack.split('\\n');\r\n var controlLines = control.stack.split('\\n');\r\n var s = sampleLines.length - 1;\r\n var c = controlLines.length - 1;\r\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\r\n // We expect at least one stack frame to be shared.\r\n // Typically this will be the root most one. However, stack frames may be\r\n // cut off due to maximum stack limits. In this case, one maybe cut off\r\n // earlier than the other. We assume that the sample is longer or the same\r\n // and there for cut off earlier. So we should find the root most frame in\r\n // the sample somewhere in the control.\r\n c--;\r\n }\r\n for (; s >= 1 && c >= 0; s--, c--) {\r\n // Next we find the first one that isn't the same which should be the\r\n // frame that called our sample function and the control.\r\n if (sampleLines[s] !== controlLines[c]) {\r\n // In V8, the first line is describing the message but other VMs don't.\r\n // If we're about to return the first line, and the control is also on the same\r\n // line, that's a pretty good indicator that our sample threw at same line as\r\n // the control. I.e. before we entered the sample frame. So we ignore this result.\r\n // This can happen if you passed a class to function component, or non-function.\r\n if (s !== 1 || c !== 1) {\r\n do {\r\n s--;\r\n c--; // We may still have similar intermediate frames from the construct call.\r\n // The next one that isn't the same should be our match though.\r\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\r\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\r\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at ');\r\n {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, _frame);\r\n }\r\n } // Return the line we found.\r\n return _frame;\r\n }\r\n } while (s >= 1 && c >= 0);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n reentry = false;\r\n {\r\n ReactCurrentDispatcher.current = previousDispatcher;\r\n reenableLogs();\r\n }\r\n Error.prepareStackTrace = previousPrepareStackTrace;\r\n } // Fallback to just using the name if we couldn't make it throw.\r\n var name = fn ? fn.displayName || fn.name : '';\r\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\r\n {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, syntheticFrame);\r\n }\r\n }\r\n return syntheticFrame;\r\n }\r\n function describeFunctionComponentFrame(fn, source, ownerFn) {\r\n {\r\n return describeNativeComponentFrame(fn, false);\r\n }\r\n }\r\n function shouldConstruct(Component) {\r\n var prototype = Component.prototype;\r\n return !!(prototype && prototype.isReactComponent);\r\n }\r\n function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\r\n if (type == null) {\r\n return '';\r\n }\r\n if (typeof type === 'function') {\r\n {\r\n return describeNativeComponentFrame(type, shouldConstruct(type));\r\n }\r\n }\r\n if (typeof type === 'string') {\r\n return describeBuiltInComponentFrame(type);\r\n }\r\n switch (type) {\r\n case REACT_SUSPENSE_TYPE:\r\n return describeBuiltInComponentFrame('Suspense');\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return describeBuiltInComponentFrame('SuspenseList');\r\n }\r\n if (typeof type === 'object') {\r\n switch (type.$$typeof) {\r\n case REACT_FORWARD_REF_TYPE:\r\n return describeFunctionComponentFrame(type.render);\r\n case REACT_MEMO_TYPE:\r\n // Memo may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\r\n case REACT_BLOCK_TYPE:\r\n return describeFunctionComponentFrame(type._render);\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n try {\r\n // Lazy may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\r\n }\r\n catch (x) { }\r\n }\r\n }\r\n }\r\n return '';\r\n }\r\n var loggedTypeFailures = {};\r\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\n function setCurrentlyValidatingElement(element) {\r\n {\r\n if (element) {\r\n var owner = element._owner;\r\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\r\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\r\n }\r\n else {\r\n ReactDebugCurrentFrame.setExtraStackFrame(null);\r\n }\r\n }\r\n }\r\n function checkPropTypes(typeSpecs, values, location, componentName, element) {\r\n {\r\n // $FlowFixMe This is okay but Flow doesn't know it.\r\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\r\n for (var typeSpecName in typeSpecs) {\r\n if (has(typeSpecs, typeSpecName)) {\r\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\r\n // fail the render phase where it didn't fail before. So we log it.\r\n // After these have been cleaned up, we'll let them throw.\r\n try {\r\n // This is intentionally an invariant that gets caught. It's the same\r\n // behavior as without this statement except with a better message.\r\n if (typeof typeSpecs[typeSpecName] !== 'function') {\r\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\r\n err.name = 'Invariant Violation';\r\n throw err;\r\n }\r\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\r\n }\r\n catch (ex) {\r\n error$1 = ex;\r\n }\r\n if (error$1 && !(error$1 instanceof Error)) {\r\n setCurrentlyValidatingElement(element);\r\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\r\n setCurrentlyValidatingElement(null);\r\n }\r\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\r\n // Only monitor this failure once because there tends to be a lot of the\r\n // same error.\r\n loggedTypeFailures[error$1.message] = true;\r\n setCurrentlyValidatingElement(element);\r\n error('Failed %s type: %s', location, error$1.message);\r\n setCurrentlyValidatingElement(null);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\r\n var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n var RESERVED_PROPS = {\r\n key: true,\r\n ref: true,\r\n __self: true,\r\n __source: true\r\n };\r\n var specialPropKeyWarningShown;\r\n var specialPropRefWarningShown;\r\n var didWarnAboutStringRefs;\r\n {\r\n didWarnAboutStringRefs = {};\r\n }\r\n function hasValidRef(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'ref')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n return config.ref !== undefined;\r\n }\r\n function hasValidKey(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'key')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n return config.key !== undefined;\r\n }\r\n function warnIfStringRefCannotBeAutoConverted(config, self) {\r\n {\r\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\r\n var componentName = getComponentName(ReactCurrentOwner.current.type);\r\n if (!didWarnAboutStringRefs[componentName]) {\r\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\r\n didWarnAboutStringRefs[componentName] = true;\r\n }\r\n }\r\n }\r\n }\r\n function defineKeyPropWarningGetter(props, displayName) {\r\n {\r\n var warnAboutAccessingKey = function () {\r\n if (!specialPropKeyWarningShown) {\r\n specialPropKeyWarningShown = true;\r\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n warnAboutAccessingKey.isReactWarning = true;\r\n Object.defineProperty(props, 'key', {\r\n get: warnAboutAccessingKey,\r\n configurable: true\r\n });\r\n }\r\n }\r\n function defineRefPropWarningGetter(props, displayName) {\r\n {\r\n var warnAboutAccessingRef = function () {\r\n if (!specialPropRefWarningShown) {\r\n specialPropRefWarningShown = true;\r\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n warnAboutAccessingRef.isReactWarning = true;\r\n Object.defineProperty(props, 'ref', {\r\n get: warnAboutAccessingRef,\r\n configurable: true\r\n });\r\n }\r\n }\r\n /**\r\n * Factory method to create a new React element. This no longer adheres to\r\n * the class pattern, so do not use new to call it. Also, instanceof check\r\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\r\n * if something is a React Element.\r\n *\r\n * @param {*} type\r\n * @param {*} props\r\n * @param {*} key\r\n * @param {string|object} ref\r\n * @param {*} owner\r\n * @param {*} self A *temporary* helper to detect places where `this` is\r\n * different from the `owner` when React.createElement is called, so that we\r\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\r\n * functions, and as long as `this` and owner are the same, there will be no\r\n * change in behavior.\r\n * @param {*} source An annotation object (added by a transpiler or otherwise)\r\n * indicating filename, line number, and/or other information.\r\n * @internal\r\n */\r\n var ReactElement = function (type, key, ref, self, source, owner, props) {\r\n var element = {\r\n // This tag allows us to uniquely identify this as a React Element\r\n $$typeof: REACT_ELEMENT_TYPE,\r\n // Built-in properties that belong on the element\r\n type: type,\r\n key: key,\r\n ref: ref,\r\n props: props,\r\n // Record the component responsible for creating this element.\r\n _owner: owner\r\n };\r\n {\r\n // The validation flag is currently mutative. We put it on\r\n // an external backing store so that we can freeze the whole object.\r\n // This can be replaced with a WeakMap once they are implemented in\r\n // commonly used development environments.\r\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\r\n // the validation flag non-enumerable (where possible, which should\r\n // include every environment we run tests in), so the test framework\r\n // ignores it.\r\n Object.defineProperty(element._store, 'validated', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: true,\r\n value: false\r\n }); // self and source are DEV only properties.\r\n Object.defineProperty(element, '_self', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: self\r\n }); // Two elements created in two different places should be considered\r\n // equal for testing purposes and therefore we hide it from enumeration.\r\n Object.defineProperty(element, '_source', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: source\r\n });\r\n if (Object.freeze) {\r\n Object.freeze(element.props);\r\n Object.freeze(element);\r\n }\r\n }\r\n return element;\r\n };\r\n /**\r\n * https://github.com/reactjs/rfcs/pull/107\r\n * @param {*} type\r\n * @param {object} props\r\n * @param {string} key\r\n */\r\n function jsxDEV(type, config, maybeKey, source, self) {\r\n {\r\n var propName; // Reserved names are extracted\r\n var props = {};\r\n var key = null;\r\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\r\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\r\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\r\n // but as an intermediary step, we will use jsxDEV for everything except\r\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\r\n // key is explicitly declared to be undefined or not.\r\n if (maybeKey !== undefined) {\r\n key = '' + maybeKey;\r\n }\r\n if (hasValidKey(config)) {\r\n key = '' + config.key;\r\n }\r\n if (hasValidRef(config)) {\r\n ref = config.ref;\r\n warnIfStringRefCannotBeAutoConverted(config, self);\r\n } // Remaining properties are added to a new props object\r\n for (propName in config) {\r\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\r\n props[propName] = config[propName];\r\n }\r\n } // Resolve default props\r\n if (type && type.defaultProps) {\r\n var defaultProps = type.defaultProps;\r\n for (propName in defaultProps) {\r\n if (props[propName] === undefined) {\r\n props[propName] = defaultProps[propName];\r\n }\r\n }\r\n }\r\n if (key || ref) {\r\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\r\n if (key) {\r\n defineKeyPropWarningGetter(props, displayName);\r\n }\r\n if (ref) {\r\n defineRefPropWarningGetter(props, displayName);\r\n }\r\n }\r\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\r\n }\r\n }\r\n var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\r\n var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\r\n function setCurrentlyValidatingElement$1(element) {\r\n {\r\n if (element) {\r\n var owner = element._owner;\r\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\r\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\r\n }\r\n else {\r\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\r\n }\r\n }\r\n }\r\n var propTypesMisspellWarningShown;\r\n {\r\n propTypesMisspellWarningShown = false;\r\n }\r\n /**\r\n * Verifies the object is a ReactElement.\r\n * See https://reactjs.org/docs/react-api.html#isvalidelement\r\n * @param {?object} object\r\n * @return {boolean} True if `object` is a ReactElement.\r\n * @final\r\n */\r\n function isValidElement(object) {\r\n {\r\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\r\n }\r\n }\r\n function getDeclarationErrorAddendum() {\r\n {\r\n if (ReactCurrentOwner$1.current) {\r\n var name = getComponentName(ReactCurrentOwner$1.current.type);\r\n if (name) {\r\n return '\\n\\nCheck the render method of `' + name + '`.';\r\n }\r\n }\r\n return '';\r\n }\r\n }\r\n function getSourceInfoErrorAddendum(source) {\r\n {\r\n if (source !== undefined) {\r\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\r\n var lineNumber = source.lineNumber;\r\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\r\n }\r\n return '';\r\n }\r\n }\r\n /**\r\n * Warn if there's no key explicitly set on dynamic arrays of children or\r\n * object keys are not valid. This allows us to keep track of children between\r\n * updates.\r\n */\r\n var ownerHasKeyUseWarning = {};\r\n function getCurrentComponentErrorInfo(parentType) {\r\n {\r\n var info = getDeclarationErrorAddendum();\r\n if (!info) {\r\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\r\n if (parentName) {\r\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\r\n }\r\n }\r\n return info;\r\n }\r\n }\r\n /**\r\n * Warn if the element doesn't have an explicit key assigned to it.\r\n * This element is in an array. The array could grow and shrink or be\r\n * reordered. All children that haven't already been validated are required to\r\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\r\n * will only be shown once.\r\n *\r\n * @internal\r\n * @param {ReactElement} element Element that requires a key.\r\n * @param {*} parentType element's parent's type.\r\n */\r\n function validateExplicitKey(element, parentType) {\r\n {\r\n if (!element._store || element._store.validated || element.key != null) {\r\n return;\r\n }\r\n element._store.validated = true;\r\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\r\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\r\n return;\r\n }\r\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\r\n // property, it may be the creator of the child that's responsible for\r\n // assigning it a key.\r\n var childOwner = '';\r\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\r\n // Give the component that originally created this child.\r\n childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\r\n }\r\n setCurrentlyValidatingElement$1(element);\r\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\r\n setCurrentlyValidatingElement$1(null);\r\n }\r\n }\r\n /**\r\n * Ensure that every element either is passed in a static location, in an\r\n * array with an explicit keys property defined, or in an object literal\r\n * with valid key property.\r\n *\r\n * @internal\r\n * @param {ReactNode} node Statically passed child of any type.\r\n * @param {*} parentType node's parent's type.\r\n */\r\n function validateChildKeys(node, parentType) {\r\n {\r\n if (typeof node !== 'object') {\r\n return;\r\n }\r\n if (Array.isArray(node)) {\r\n for (var i = 0; i < node.length; i++) {\r\n var child = node[i];\r\n if (isValidElement(child)) {\r\n validateExplicitKey(child, parentType);\r\n }\r\n }\r\n }\r\n else if (isValidElement(node)) {\r\n // This element was passed in a valid location.\r\n if (node._store) {\r\n node._store.validated = true;\r\n }\r\n }\r\n else if (node) {\r\n var iteratorFn = getIteratorFn(node);\r\n if (typeof iteratorFn === 'function') {\r\n // Entry iterators used to provide implicit keys,\r\n // but now we print a separate warning for them later.\r\n if (iteratorFn !== node.entries) {\r\n var iterator = iteratorFn.call(node);\r\n var step;\r\n while (!(step = iterator.next()).done) {\r\n if (isValidElement(step.value)) {\r\n validateExplicitKey(step.value, parentType);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Given an element, validate that its props follow the propTypes definition,\r\n * provided by the type.\r\n *\r\n * @param {ReactElement} element\r\n */\r\n function validatePropTypes(element) {\r\n {\r\n var type = element.type;\r\n if (type === null || type === undefined || typeof type === 'string') {\r\n return;\r\n }\r\n var propTypes;\r\n if (typeof type === 'function') {\r\n propTypes = type.propTypes;\r\n }\r\n else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\r\n // Inner props are checked in the reconciler.\r\n type.$$typeof === REACT_MEMO_TYPE)) {\r\n propTypes = type.propTypes;\r\n }\r\n else {\r\n return;\r\n }\r\n if (propTypes) {\r\n // Intentionally inside to avoid triggering lazy initializers:\r\n var name = getComponentName(type);\r\n checkPropTypes(propTypes, element.props, 'prop', name, element);\r\n }\r\n else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\r\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\r\n var _name = getComponentName(type);\r\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\r\n }\r\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\r\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\r\n }\r\n }\r\n }\r\n /**\r\n * Given a fragment, validate that it can only be provided with fragment props\r\n * @param {ReactElement} fragment\r\n */\r\n function validateFragmentProps(fragment) {\r\n {\r\n var keys = Object.keys(fragment.props);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n if (key !== 'children' && key !== 'key') {\r\n setCurrentlyValidatingElement$1(fragment);\r\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\r\n setCurrentlyValidatingElement$1(null);\r\n break;\r\n }\r\n }\r\n if (fragment.ref !== null) {\r\n setCurrentlyValidatingElement$1(fragment);\r\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\r\n setCurrentlyValidatingElement$1(null);\r\n }\r\n }\r\n }\r\n function jsxWithValidation(type, props, key, isStaticChildren, source, self) {\r\n {\r\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\r\n // succeed and there will likely be errors in render.\r\n if (!validType) {\r\n var info = '';\r\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\r\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\r\n }\r\n var sourceInfo = getSourceInfoErrorAddendum(source);\r\n if (sourceInfo) {\r\n info += sourceInfo;\r\n }\r\n else {\r\n info += getDeclarationErrorAddendum();\r\n }\r\n var typeString;\r\n if (type === null) {\r\n typeString = 'null';\r\n }\r\n else if (Array.isArray(type)) {\r\n typeString = 'array';\r\n }\r\n else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\r\n typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\r\n info = ' Did you accidentally export a JSX literal instead of a component?';\r\n }\r\n else {\r\n typeString = typeof type;\r\n }\r\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\r\n }\r\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\r\n // TODO: Drop this when these are no longer allowed as the type argument.\r\n if (element == null) {\r\n return element;\r\n } // Skip key warning if the type isn't valid since our key validation logic\r\n // doesn't expect a non-string/function type and can throw confusing errors.\r\n // We don't want exception behavior to differ between dev and prod.\r\n // (Rendering will throw with a helpful message and as soon as the type is\r\n // fixed, the key warnings will appear.)\r\n if (validType) {\r\n var children = props.children;\r\n if (children !== undefined) {\r\n if (isStaticChildren) {\r\n if (Array.isArray(children)) {\r\n for (var i = 0; i < children.length; i++) {\r\n validateChildKeys(children[i], type);\r\n }\r\n if (Object.freeze) {\r\n Object.freeze(children);\r\n }\r\n }\r\n else {\r\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\r\n }\r\n }\r\n else {\r\n validateChildKeys(children, type);\r\n }\r\n }\r\n }\r\n if (type === exports.Fragment) {\r\n validateFragmentProps(element);\r\n }\r\n else {\r\n validatePropTypes(element);\r\n }\r\n return element;\r\n }\r\n } // These two functions exist to still get child warnings in dev\r\n // even with the prod transform. This means that jsxDEV is purely\r\n // opt-in behavior for better messages but that we won't stop\r\n // giving you warnings if you use production apis.\r\n function jsxWithValidationStatic(type, props, key) {\r\n {\r\n return jsxWithValidation(type, props, key, true);\r\n }\r\n }\r\n function jsxWithValidationDynamic(type, props, key) {\r\n {\r\n return jsxWithValidation(type, props, key, false);\r\n }\r\n }\r\n var jsx = jsxWithValidationDynamic; // we may want to special case jsxs internally to take advantage of static children.\r\n // for now we can ship identical prod functions\r\n var jsxs = jsxWithValidationStatic;\r\n exports.jsx = jsx;\r\n exports.jsxs = jsxs;\r\n })();\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRVU7QUFFYixJQUFJLElBQXFDLEVBQUU7SUFDekMsQ0FBQztRQUNILFlBQVksQ0FBQztRQUViLElBQUksS0FBSyxHQUFHLG1CQUFPLENBQUMsb0JBQU8sQ0FBQyxDQUFDO1FBQzdCLElBQUksT0FBTyxHQUFHLG1CQUFPLENBQUMsbUVBQWUsQ0FBQyxDQUFDO1FBRXZDLFlBQVk7UUFDWix3Q0FBd0M7UUFDeEMsa0ZBQWtGO1FBQ2xGLG1GQUFtRjtRQUNuRiw2REFBNkQ7UUFDN0QsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7UUFDaEMsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7UUFDL0IsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO1FBQzFCLElBQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDO1FBQ3BDLElBQUksbUJBQW1CLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLElBQUksbUJBQW1CLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLElBQUksa0JBQWtCLEdBQUcsTUFBTSxDQUFDO1FBQ2hDLElBQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDO1FBQ3BDLElBQUksbUJBQW1CLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLElBQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDO1FBQ3RDLElBQUksZUFBZSxHQUFHLE1BQU0sQ0FBQztRQUM3QixJQUFJLGVBQWUsR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7UUFDOUIsSUFBSSx1QkFBdUIsR0FBRyxNQUFNLENBQUM7UUFDckMsSUFBSSxzQkFBc0IsR0FBRyxNQUFNLENBQUM7UUFDcEMsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7UUFDOUIsSUFBSSxvQkFBb0IsR0FBRyxNQUFNLENBQUM7UUFDbEMsSUFBSSw2QkFBNkIsR0FB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LEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbEQ7UUFDSCxDQUFDO1FBQ0QsU0FBUyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUc7WUFDaEQ7Z0JBQ0UsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNuRDtRQUNILENBQUM7UUFFRCxJQUFJLEdBQUcsR0FBSSx3QkFBd0IsQ0FBRSxDQUFDLG9GQUFvRjtRQUMxSCwrQ0FBK0M7UUFFL0MsSUFBSSxJQUFJLEdBQUksdUJBQXVCLENBQUU7UUFFckMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUNsQixZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDTiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzP2ZjNWMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgZXhwb3J0cy5GcmFnbWVudCA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfVxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAnJyArIGl0ZW07XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gZXhwb3J0cy5GcmFnbWVudCB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XG52YXIgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd247XG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcsIHNlbGYpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZiA9PT0gJ3N0cmluZycgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCAmJiBzZWxmICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBzZWxmKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB7XG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB7XG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMTA3XG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5cbmZ1bmN0aW9uIGpzeERFVih0eXBlLCBjb25maWcsIG1heWJlS2V5LCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gICAgdmFyIHByb3BzID0ge307XG4gICAgdmFyIGtleSA9IG51bGw7XG4gICAgdmFyIHJlZiA9IG51bGw7IC8vIEN1cnJlbnRseSwga2V5IGNhbiBiZSBzcHJlYWQgaW4gYXMgYSBwcm9wLiBUaGlzIGNhdXNlcyBhIHBvdGVudGlhbFxuICAgIC8vIGlzc3VlIGlmIGtleSBpcyBhbHNvIGV4cGxpY2l0bHkgZGVjbGFyZWQgKGllLiA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPlxuICAgIC8vIG9yIDxkaXYga2V5PVwiSGlcIiB7Li4ucHJvcHN9IC8+ICkuIFdlIHdhbnQgdG8gZGVwcmVjYXRlIGtleSBzcHJlYWQsXG4gICAgLy8gYnV0IGFzIGFuIGludGVybWVkaWFyeSBzdGVwLCB3ZSB3aWxsIHVzZSBqc3hERVYgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0XG4gICAgLy8gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz4sIGJlY2F1c2Ugd2UgYXJlbid0IGN1cnJlbnRseSBhYmxlIHRvIHRlbGwgaWZcbiAgICAvLyBrZXkgaXMgZXhwbGljaXRseSBkZWNsYXJlZCB0byBiZSB1bmRlZmluZWQgb3Igbm90LlxuXG4gICAgaWYgKG1heWJlS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGtleSA9ICcnICsgbWF5YmVLZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcsIHNlbGYpO1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH0gLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG5cblxuICAgIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAge1xuICAgIGlmIChSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQpIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIHtcbiAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgICB2YXIgbGluZU51bWJlciA9IHNvdXJjZS5saW5lTnVtYmVyO1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG5cblxudmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAge1xuICAgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgICBpZiAoIWluZm8pIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cbi8qKlxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxuICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xuICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAge1xuICAgIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTtcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAgIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXG5cbiAgICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCkge1xuICAgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lKGVsZW1lbnQuX293bmVyLnR5cGUpICsgXCIuXCI7XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG5cbiAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICAgIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gdHJ1ZTsgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcblxuICAgICAgdmFyIF9uYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcblxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIF9uYW1lIHx8ICdVbmtub3duJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJyk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGEgZnJhZ21lbnQsIHZhbGlkYXRlIHRoYXQgaXQgY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2l0aCBmcmFnbWVudCBwcm9wc1xuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGZyYWdtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcblxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIGlzU3RhdGljQ2hpbGRyZW4sIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gICAgaWYgKCF2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKTtcblxuICAgICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgXCIgLz5cIjtcbiAgICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVvZiB0eXBlO1xuICAgICAgfVxuXG4gICAgICBlcnJvcignUmVhY3QuanN4OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xuICAgIH1cblxuICAgIHZhciBlbGVtZW50ID0ganN4REVWKHR5cGUsIHByb3BzLCBrZXksIHNvdXJjZSwgc2VsZik7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gICAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG5cblxuICAgIGlmICh2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuXG4gICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaXNTdGF0aWNDaGlsZHJlbikge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpXSwgdHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignUmVhY3QuanN4OiBTdGF0aWMgY2hpbGRyZW4gc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheS4gJyArICdZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuICcgKyAnVXNlIHRoZSBCYWJlbCB0cmFuc2Zvcm0gaW5zdGVhZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4sIHR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn0gLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBleGlzdCB0byBzdGlsbCBnZXQgY2hpbGQgd2FybmluZ3MgaW4gZGV2XG4vLyBldmVuIHdpdGggdGhlIHByb2QgdHJhbnNmb3JtLiBUaGlzIG1lYW5zIHRoYXQganN4REVWIGlzIHB1cmVseVxuLy8gb3B0LWluIGJlaGF2aW9yIGZvciBiZXR0ZXIgbWVzc2FnZXMgYnV0IHRoYXQgd2Ugd29uJ3Qgc3RvcFxuLy8gZ2l2aW5nIHlvdSB3YXJuaW5ncyBpZiB5b3UgdXNlIHByb2R1Y3Rpb24gYXBpcy5cblxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25TdGF0aWModHlwZSwgcHJvcHMsIGtleSkge1xuICB7XG4gICAgcmV0dXJuIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvbkR5bmFtaWModHlwZSwgcHJvcHMsIGtleSkge1xuICB7XG4gICAgcmV0dXJuIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIGZhbHNlKTtcbiAgfVxufVxuXG52YXIganN4ID0gIGpzeFdpdGhWYWxpZGF0aW9uRHluYW1pYyA7IC8vIHdlIG1heSB3YW50IHRvIHNwZWNpYWwgY2FzZSBqc3hzIGludGVybmFsbHkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RhdGljIGNoaWxkcmVuLlxuLy8gZm9yIG5vdyB3ZSBjYW4gc2hpcCBpZGVudGljYWwgcHJvZCBmdW5jdGlvbnNcblxudmFyIGpzeHMgPSAganN4V2l0aFZhbGlkYXRpb25TdGF0aWMgO1xuXG5leHBvcnRzLmpzeCA9IGpzeDtcbmV4cG9ydHMuanN4cyA9IGpzeHM7XG4gIH0pKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/react/cjs/react-jsx-runtime.development.js\n");
1247
1258
 
1248
1259
  /***/ }),
1249
1260
 
@@ -1770,7 +1781,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1770
1781
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1771
1782
 
1772
1783
  "use strict";
1773
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nvar _a, _b;\r\nconst trackEvent = typeof process !== \"undefined\" &&\r\n ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.77\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) &&\r\n typeof window !== \"undefined\" &&\r\n window.gtag\r\n ? (category, action, label, value) => {\r\n try {\r\n window.gtag(\"event\", action, {\r\n event_category: category,\r\n event_label: label,\r\n value,\r\n });\r\n }\r\n catch (error) {\r\n console.error(\"error logging to ga\", error);\r\n }\r\n }\r\n : typeof process !== \"undefined\" && ((_b = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.77\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID)\r\n ? (category, action, label, value) => { }\r\n : (category, action, label, value) => {\r\n // Uncomment the next line to track locally\r\n // console.log(\"Track Event\", { category, action, label, value });\r\n };\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQ3JCLE9BQU8sT0FBTyxLQUFLLFdBQVc7S0FDOUIscTNCQUFXLDBDQUFFLDZCQUE2QjtJQUMxQyxPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzdCLE1BQU0sQ0FBQyxJQUFJO0lBQ1QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ25FLElBQUk7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUkscTNCQUFXLDBDQUFFLGNBQWM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQUUsS0FBYyxFQUFFLEVBQUU7WUFDbkUsMkNBQTJDO1lBQzNDLGtFQUFrRTtRQUNwRSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vYW5hbHl0aWNzLnRzPzVmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRyYWNrRXZlbnQgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBwcm9jZXNzLmVudj8uUkVBQ1RfQVBQX0dPT0dMRV9BTkFMWVRJQ1NfSUQgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICB3aW5kb3cuZ3RhZ1xuICAgID8gKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aW5kb3cuZ3RhZyhcImV2ZW50XCIsIGFjdGlvbiwge1xuICAgICAgICAgICAgZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgZXZlbnRfbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxvZ2dpbmcgdG8gZ2FcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgOiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uSkVTVF9XT1JLRVJfSURcbiAgICA/IChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSA9PiB7fVxuICAgIDogKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gdHJhY2sgbG9jYWxseVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuICAgICAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
1784
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nvar _a, _b;\r\nconst trackEvent = typeof process !== \"undefined\" &&\r\n ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.77-debug2\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) &&\r\n typeof window !== \"undefined\" &&\r\n window.gtag\r\n ? (category, action, label, value) => {\r\n try {\r\n window.gtag(\"event\", action, {\r\n event_category: category,\r\n event_label: label,\r\n value,\r\n });\r\n }\r\n catch (error) {\r\n console.error(\"error logging to ga\", error);\r\n }\r\n }\r\n : typeof process !== \"undefined\" && ((_b = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.77-debug2\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID)\r\n ? (category, action, label, value) => { }\r\n : (category, action, label, value) => {\r\n // Uncomment the next line to track locally\r\n // console.log(\"Track Event\", { category, action, label, value });\r\n };\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQ3JCLE9BQU8sT0FBTyxLQUFLLFdBQVc7S0FDOUIsNDNCQUFXLDBDQUFFLDZCQUE2QjtJQUMxQyxPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzdCLE1BQU0sQ0FBQyxJQUFJO0lBQ1QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ25FLElBQUk7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksNDNCQUFXLDBDQUFFLGNBQWM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQUUsS0FBYyxFQUFFLEVBQUU7WUFDbkUsMkNBQTJDO1lBQzNDLGtFQUFrRTtRQUNwRSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vYW5hbHl0aWNzLnRzPzVmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRyYWNrRXZlbnQgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBwcm9jZXNzLmVudj8uUkVBQ1RfQVBQX0dPT0dMRV9BTkFMWVRJQ1NfSUQgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICB3aW5kb3cuZ3RhZ1xuICAgID8gKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aW5kb3cuZ3RhZyhcImV2ZW50XCIsIGFjdGlvbiwge1xuICAgICAgICAgICAgZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgZXZlbnRfbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxvZ2dpbmcgdG8gZ2FcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgOiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uSkVTVF9XT1JLRVJfSURcbiAgICA/IChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSA9PiB7fVxuICAgIDogKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gdHJhY2sgbG9jYWxseVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuICAgICAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
1774
1785
 
1775
1786
  /***/ }),
1776
1787
 
@@ -1902,7 +1913,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1902
1913
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1903
1914
 
1904
1915
  "use strict";
1905
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Card\": () => (/* binding */ Card)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _Card_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Card.scss */ \"../../components/Card.scss\");\n/* harmony import */ var _Card_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Card_scss__WEBPACK_IMPORTED_MODULE_2__);\n\r\n\r\n\r\nconst Card = ({ children, color }) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Card\", style: {\r\n [\"--card-color\"]: color === \"primary\" ? \"var(--color-primary)\" : open_color__WEBPACK_IMPORTED_MODULE_1__[color][7],\r\n [\"--card-color-darker\"]: color === \"primary\"\r\n ? \"var(--color-primary-darker)\"\r\n : open_color__WEBPACK_IMPORTED_MODULE_1__[color][8],\r\n [\"--card-color-darkest\"]: color === \"primary\"\r\n ? \"var(--color-primary-darkest)\"\r\n : open_color__WEBPACK_IMPORTED_MODULE_1__[color][9],\r\n } }, { children: children })));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9DYXJkLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBbUM7QUFFZDtBQUVkLE1BQU0sSUFBSSxHQUdaLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUMzQixPQUFPLENBQ0wsOEVBQ0UsU0FBUyxFQUFDLE1BQU0sRUFDaEIsS0FBSyxFQUFFO1lBQ0wsQ0FBQyxjQUFxQixDQUFDLEVBQ3JCLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyx1Q0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDLHFCQUE0QixDQUFDLEVBQzVCLEtBQUssS0FBSyxTQUFTO2dCQUNqQixDQUFDLENBQUMsNkJBQTZCO2dCQUMvQixDQUFDLENBQUMsdUNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsQ0FBQyxzQkFBNkIsQ0FBQyxFQUM3QixLQUFLLEtBQUssU0FBUztnQkFDakIsQ0FBQyxDQUFDLDhCQUE4QjtnQkFDaEMsQ0FBQyxDQUFDLHVDQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCLGdCQUVBLFFBQVEsSUFDTCxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9DYXJkLnRzeD9lMGVjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPcGVuQ29sb3IgZnJvbSBcIm9wZW4tY29sb3JcIjtcblxuaW1wb3J0IFwiLi9DYXJkLnNjc3NcIjtcblxuZXhwb3J0IGNvbnN0IENhcmQ6IFJlYWN0LkZDPHtcbiAgY29sb3I6IGtleW9mIE9wZW5Db2xvciB8IFwicHJpbWFyeVwiO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbn0+ID0gKHsgY2hpbGRyZW4sIGNvbG9yIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJDYXJkXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIFtcIi0tY2FyZC1jb2xvclwiIGFzIGFueV06XG4gICAgICAgICAgY29sb3IgPT09IFwicHJpbWFyeVwiID8gXCJ2YXIoLS1jb2xvci1wcmltYXJ5KVwiIDogT3BlbkNvbG9yW2NvbG9yXVs3XSxcbiAgICAgICAgW1wiLS1jYXJkLWNvbG9yLWRhcmtlclwiIGFzIGFueV06XG4gICAgICAgICAgY29sb3IgPT09IFwicHJpbWFyeVwiXG4gICAgICAgICAgICA/IFwidmFyKC0tY29sb3ItcHJpbWFyeS1kYXJrZXIpXCJcbiAgICAgICAgICAgIDogT3BlbkNvbG9yW2NvbG9yXVs4XSxcbiAgICAgICAgW1wiLS1jYXJkLWNvbG9yLWRhcmtlc3RcIiBhcyBhbnldOlxuICAgICAgICAgIGNvbG9yID09PSBcInByaW1hcnlcIlxuICAgICAgICAgICAgPyBcInZhcigtLWNvbG9yLXByaW1hcnktZGFya2VzdClcIlxuICAgICAgICAgICAgOiBPcGVuQ29sb3JbY29sb3JdWzldLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/Card.tsx\n");
1916
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Card\": () => (/* binding */ Card)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _Card_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Card.scss */ \"../../components/Card.scss\");\n/* harmony import */ var _Card_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Card_scss__WEBPACK_IMPORTED_MODULE_2__);\n\r\n\r\n\r\nconst Card = ({ children, color }) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Card\", style: {\r\n [\"--card-color\"]: color === \"primary\" ? \"var(--color-primary)\" : open_color__WEBPACK_IMPORTED_MODULE_1__[color][7],\r\n [\"--card-color-darker\"]: color === \"primary\"\r\n ? \"var(--color-primary-darker)\"\r\n : open_color__WEBPACK_IMPORTED_MODULE_1__[color][8],\r\n [\"--card-color-darkest\"]: color === \"primary\"\r\n ? \"var(--color-primary-darkest)\"\r\n : open_color__WEBPACK_IMPORTED_MODULE_1__[color][9],\r\n } }, { children: children })));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9DYXJkLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBbUM7QUFFZDtBQUVkLE1BQU0sSUFBSSxHQUVaLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUMzQixPQUFPLENBQ0wsOEVBQ0UsU0FBUyxFQUFDLE1BQU0sRUFDaEIsS0FBSyxFQUFFO1lBQ0wsQ0FBQyxjQUFxQixDQUFDLEVBQ3JCLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyx1Q0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDLHFCQUE0QixDQUFDLEVBQzVCLEtBQUssS0FBSyxTQUFTO2dCQUNqQixDQUFDLENBQUMsNkJBQTZCO2dCQUMvQixDQUFDLENBQUMsdUNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsQ0FBQyxzQkFBNkIsQ0FBQyxFQUM3QixLQUFLLEtBQUssU0FBUztnQkFDakIsQ0FBQyxDQUFDLDhCQUE4QjtnQkFDaEMsQ0FBQyxDQUFDLHVDQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCLGdCQUVBLFFBQVEsSUFDTCxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9DYXJkLnRzeD9lMGVjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPcGVuQ29sb3IgZnJvbSBcIm9wZW4tY29sb3JcIjtcblxuaW1wb3J0IFwiLi9DYXJkLnNjc3NcIjtcblxuZXhwb3J0IGNvbnN0IENhcmQ6IFJlYWN0LkZDPHtcbiAgY29sb3I6IGtleW9mIE9wZW5Db2xvciB8IFwicHJpbWFyeVwiO1xufT4gPSAoeyBjaGlsZHJlbiwgY29sb3IgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cIkNhcmRcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgW1wiLS1jYXJkLWNvbG9yXCIgYXMgYW55XTpcbiAgICAgICAgICBjb2xvciA9PT0gXCJwcmltYXJ5XCIgPyBcInZhcigtLWNvbG9yLXByaW1hcnkpXCIgOiBPcGVuQ29sb3JbY29sb3JdWzddLFxuICAgICAgICBbXCItLWNhcmQtY29sb3ItZGFya2VyXCIgYXMgYW55XTpcbiAgICAgICAgICBjb2xvciA9PT0gXCJwcmltYXJ5XCJcbiAgICAgICAgICAgID8gXCJ2YXIoLS1jb2xvci1wcmltYXJ5LWRhcmtlcilcIlxuICAgICAgICAgICAgOiBPcGVuQ29sb3JbY29sb3JdWzhdLFxuICAgICAgICBbXCItLWNhcmQtY29sb3ItZGFya2VzdFwiIGFzIGFueV06XG4gICAgICAgICAgY29sb3IgPT09IFwicHJpbWFyeVwiXG4gICAgICAgICAgICA/IFwidmFyKC0tY29sb3ItcHJpbWFyeS1kYXJrZXN0KVwiXG4gICAgICAgICAgICA6IE9wZW5Db2xvcltjb2xvcl1bOV0sXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/Card.tsx\n");
1906
1917
 
1907
1918
  /***/ }),
1908
1919
 
@@ -1913,7 +1924,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1913
1924
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1914
1925
 
1915
1926
  "use strict";
1916
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CheckboxItem\": () => (/* binding */ CheckboxItem)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CheckboxItem.scss */ \"../../components/CheckboxItem.scss\");\n/* harmony import */ var _CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4__);\n\r\n\r\n\r\n\r\n\r\nconst CheckboxItem = ({ children, checked, onChange, className }) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\"Checkbox\", className, { \"is-checked\": checked }), onClick: (event) => {\r\n onChange(!checked, event);\r\n event.currentTarget.querySelector(\".Checkbox-box\").focus();\r\n } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"Checkbox-box\", role: \"checkbox\", \"aria-checked\": checked }, { children: _icons__WEBPACK_IMPORTED_MODULE_3__.checkIcon })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Checkbox-label\" }, { children: children }))] })));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9DaGVja2JveEl0ZW0udHN4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUEwQjtBQUNGO0FBQ1k7QUFFUDtBQUV0QixNQUFNLFlBQVksR0FLcEIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDbEQsT0FBTyxDQUNMLCtFQUNFLFNBQVMsRUFBRSxnREFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFDakUsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXZCLEtBQUssQ0FBQyxhQUFnQyxDQUFDLGFBQWEsQ0FDbkQsZUFBZSxDQUVsQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1osQ0FBQyxpQkFFRCxpRkFBUSxTQUFTLEVBQUMsY0FBYyxFQUFDLElBQUksRUFBQyxVQUFVLGtCQUFlLE9BQU8sZ0JBQ25FLDZDQUFTLElBQ0gsRUFDVCw4RUFBSyxTQUFTLEVBQUMsZ0JBQWdCLGdCQUFFLFFBQVEsSUFBTyxLQUM1QyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9DaGVja2JveEl0ZW0udHN4PzgyNGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCB7IGNoZWNrSWNvbiB9IGZyb20gXCIuL2ljb25zXCI7XG5cbmltcG9ydCBcIi4vQ2hlY2tib3hJdGVtLnNjc3NcIjtcblxuZXhwb3J0IGNvbnN0IENoZWNrYm94SXRlbTogUmVhY3QuRkM8e1xuICBjaGVja2VkOiBib29sZWFuO1xuICBvbkNoYW5nZTogKGNoZWNrZWQ6IGJvb2xlYW4sIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufT4gPSAoeyBjaGlsZHJlbiwgY2hlY2tlZCwgb25DaGFuZ2UsIGNsYXNzTmFtZSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiQ2hlY2tib3hcIiwgY2xhc3NOYW1lLCB7IFwiaXMtY2hlY2tlZFwiOiBjaGVja2VkIH0pfVxuICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlKCFjaGVja2VkLCBldmVudCk7XG4gICAgICAgIChcbiAgICAgICAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIFwiLkNoZWNrYm94LWJveFwiLFxuICAgICAgICAgICkgYXMgSFRNTEJ1dHRvbkVsZW1lbnRcbiAgICAgICAgKS5mb2N1cygpO1xuICAgICAgfX1cbiAgICA+XG4gICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIkNoZWNrYm94LWJveFwiIHJvbGU9XCJjaGVja2JveFwiIGFyaWEtY2hlY2tlZD17Y2hlY2tlZH0+XG4gICAgICAgIHtjaGVja0ljb259XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQ2hlY2tib3gtbGFiZWxcIj57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/CheckboxItem.tsx\n");
1927
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CheckboxItem\": () => (/* binding */ CheckboxItem)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CheckboxItem.scss */ \"../../components/CheckboxItem.scss\");\n/* harmony import */ var _CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4__);\n\r\n\r\n\r\n\r\n\r\nconst CheckboxItem = ({ children, checked, onChange, className }) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\"Checkbox\", className, { \"is-checked\": checked }), onClick: (event) => {\r\n onChange(!checked, event);\r\n event.currentTarget.querySelector(\".Checkbox-box\").focus();\r\n } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"Checkbox-box\", role: \"checkbox\", \"aria-checked\": checked }, { children: _icons__WEBPACK_IMPORTED_MODULE_3__.checkIcon })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Checkbox-label\" }, { children: children }))] })));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9DaGVja2JveEl0ZW0udHN4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUEwQjtBQUNGO0FBQ1k7QUFFUDtBQUV0QixNQUFNLFlBQVksR0FJcEIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDbEQsT0FBTyxDQUNMLCtFQUNFLFNBQVMsRUFBRSxnREFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFDakUsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXZCLEtBQUssQ0FBQyxhQUFnQyxDQUFDLGFBQWEsQ0FDbkQsZUFBZSxDQUVsQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1osQ0FBQyxpQkFFRCxpRkFBUSxTQUFTLEVBQUMsY0FBYyxFQUFDLElBQUksRUFBQyxVQUFVLGtCQUFlLE9BQU8sZ0JBQ25FLDZDQUFTLElBQ0gsRUFDVCw4RUFBSyxTQUFTLEVBQUMsZ0JBQWdCLGdCQUFFLFFBQVEsSUFBTyxLQUM1QyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9DaGVja2JveEl0ZW0udHN4PzgyNGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCB7IGNoZWNrSWNvbiB9IGZyb20gXCIuL2ljb25zXCI7XG5cbmltcG9ydCBcIi4vQ2hlY2tib3hJdGVtLnNjc3NcIjtcblxuZXhwb3J0IGNvbnN0IENoZWNrYm94SXRlbTogUmVhY3QuRkM8e1xuICBjaGVja2VkOiBib29sZWFuO1xuICBvbkNoYW5nZTogKGNoZWNrZWQ6IGJvb2xlYW4sIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59PiA9ICh7IGNoaWxkcmVuLCBjaGVja2VkLCBvbkNoYW5nZSwgY2xhc3NOYW1lIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2Nsc3goXCJDaGVja2JveFwiLCBjbGFzc05hbWUsIHsgXCJpcy1jaGVja2VkXCI6IGNoZWNrZWQgfSl9XG4gICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgb25DaGFuZ2UoIWNoZWNrZWQsIGV2ZW50KTtcbiAgICAgICAgKFxuICAgICAgICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgXCIuQ2hlY2tib3gtYm94XCIsXG4gICAgICAgICAgKSBhcyBIVE1MQnV0dG9uRWxlbWVudFxuICAgICAgICApLmZvY3VzKCk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiQ2hlY2tib3gtYm94XCIgcm9sZT1cImNoZWNrYm94XCIgYXJpYS1jaGVja2VkPXtjaGVja2VkfT5cbiAgICAgICAge2NoZWNrSWNvbn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJDaGVja2JveC1sYWJlbFwiPntjaGlsZHJlbn08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/CheckboxItem.tsx\n");
1917
1928
 
1918
1929
  /***/ }),
1919
1930
 
@@ -2067,7 +2078,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2067
2078
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2068
2079
 
2069
2080
  "use strict";
2070
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ErrorCanvasPreview\": () => (/* binding */ ErrorCanvasPreview),\n/* harmony export */ \"ImageExportDialog\": () => (/* binding */ ImageExportDialog)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _clipboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../clipboard */ \"../../clipboard.ts\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../errors */ \"../../errors.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _scene_export__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../scene/export */ \"../../scene/export.ts\");\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Dialog */ \"../../components/Dialog.tsx\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ExportDialog.scss */ \"../../components/ExportDialog.scss\");\n/* harmony import */ var _ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _CheckboxItem__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./CheckboxItem */ \"../../components/CheckboxItem.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data_filesystem__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../data/filesystem */ \"../../data/filesystem.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\n\r\n\r\n\r\n\r\n\r\nconst supportsContextFilters = \"filter\" in document.createElement(\"canvas\").getContext(\"2d\");\r\nconst ErrorCanvasPreview = () => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h3\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.cannotShowPreview\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.canvasTooBig\") }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"em\", { children: [\"(\", (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.canvasTooBigTip\"), \")\"] })] }));\r\n};\r\nconst renderPreview = (content, previewNode) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.unmountComponentAtNode)(previewNode);\r\n previewNode.innerHTML = \"\";\r\n if (content instanceof HTMLCanvasElement) {\r\n previewNode.appendChild(content);\r\n }\r\n else {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.render)((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ErrorCanvasPreview, {}), previewNode);\r\n }\r\n};\r\nconst ExportButton = ({ children, title, onClick, color, shade = 6 }) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"ExportDialog-imageExportButton\", style: {\r\n [\"--button-color\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade],\r\n [\"--button-color-darker\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade + 1],\r\n [\"--button-color-darkest\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade + 2],\r\n }, title: title, \"aria-label\": title, onClick: onClick }, { children: children })));\r\n};\r\nconst ImageExportModal = ({ elements, appState, files, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_17__.DEFAULT_EXPORT_PADDING, actionManager, onExportToPng, onExportToSvg, onExportToClipboard, }) => {\r\n const someElementIsSelected = (0,_scene__WEBPACK_IMPORTED_MODULE_8__.isSomeElementSelected)(elements, appState);\r\n const [exportSelected, setExportSelected] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(someElementIsSelected);\r\n const previewRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\r\n const { exportBackground, viewBackgroundColor } = appState;\r\n const exportedElements = exportSelected\r\n ? (0,_scene__WEBPACK_IMPORTED_MODULE_8__.getSelectedElements)(elements, appState, true)\r\n : elements;\r\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\r\n setExportSelected(someElementIsSelected);\r\n }, [someElementIsSelected]);\r\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\r\n const previewNode = previewRef.current;\r\n if (!previewNode) {\r\n return;\r\n }\r\n (0,_scene_export__WEBPACK_IMPORTED_MODULE_9__.exportToCanvas)(exportedElements, appState, files, {\r\n exportBackground,\r\n viewBackgroundColor,\r\n exportPadding,\r\n })\r\n .then((canvas) => {\r\n // if converting to blob fails, there's some problem that will\r\n // likely prevent preview and export (e.g. canvas too big)\r\n return (0,_data_blob__WEBPACK_IMPORTED_MODULE_4__.canvasToBlob)(canvas).then(() => {\r\n renderPreview(canvas, previewNode);\r\n });\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n renderPreview(new _errors__WEBPACK_IMPORTED_MODULE_5__.CanvasError(), previewNode);\r\n });\r\n }, [\r\n appState,\r\n files,\r\n exportedElements,\r\n exportBackground,\r\n exportPadding,\r\n viewBackgroundColor,\r\n ]);\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"ExportDialog\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"ExportDialog__preview\", ref: previewRef }), supportsContextFilters &&\r\n actionManager.renderAction(\"exportWithDarkMode\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { display: \"grid\", gridTemplateColumns: \"1fr\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: {\r\n display: \"grid\",\r\n gridTemplateColumns: \"repeat(auto-fit, minmax(190px, 1fr))\",\r\n // dunno why this is needed, but when the items wrap it creates\r\n // an overflow\r\n overflow: \"hidden\",\r\n } }, { children: [actionManager.renderAction(\"changeExportBackground\"), someElementIsSelected && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CheckboxItem__WEBPACK_IMPORTED_MODULE_16__.CheckboxItem, Object.assign({ checked: exportSelected, onChange: (checked) => setExportSelected(checked) }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"labels.onlySelected\") }))), actionManager.renderAction(\"changeExportEmbedScene\")] })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { display: \"flex\", alignItems: \"center\", marginTop: \".6em\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_12__[\"default\"].Row, Object.assign({ gap: 2 }, { children: actionManager.renderAction(\"changeExportScale\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", Object.assign({ style: { marginLeft: \"1em\", userSelect: \"none\" } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scale\") }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n margin: \".6em 0\",\r\n } }, { children: !_data_filesystem__WEBPACK_IMPORTED_MODULE_18__.nativeFileSystemSupported &&\r\n actionManager.renderAction(\"changeProjectName\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_12__[\"default\"].Row, Object.assign({ gap: 2, justifyContent: \"center\", style: { margin: \"2em 0\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ color: \"indigo\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToPng\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToPng\"), onClick: () => onExportToPng(exportedElements) }, { children: \"PNG\" })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ color: \"red\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToSvg\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToSvg\"), onClick: () => onExportToSvg(exportedElements) }, { children: \"SVG\" })), _clipboard__WEBPACK_IMPORTED_MODULE_3__.probablySupportsClipboardBlob && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.copyPngToClipboard\"), onClick: () => onExportToClipboard(exportedElements), color: \"gray\", shade: 7 }, { children: _icons__WEBPACK_IMPORTED_MODULE_11__.clipboard })))] }))] })));\r\n};\r\nconst ImageExportDialog = ({ elements, appState, files, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_17__.DEFAULT_EXPORT_PADDING, actionManager, onExportToPng, onExportToSvg, onExportToClipboard, }) => {\r\n const [modalIsShown, setModalIsShown] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\r\n const handleClose = react__WEBPACK_IMPORTED_MODULE_1___default().useCallback(() => {\r\n setModalIsShown(false);\r\n }, []);\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_13__.ToolButton, { onClick: () => {\r\n setModalIsShown(true);\r\n }, \"data-testid\": \"image-export-button\", icon: _icons__WEBPACK_IMPORTED_MODULE_11__.exportImage, type: \"button\", \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\"), showAriaLabel: (0,_App__WEBPACK_IMPORTED_MODULE_7__.useDevice)().isMobile, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\") }), modalIsShown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Dialog__WEBPACK_IMPORTED_MODULE_10__.Dialog, Object.assign({ onCloseRequest: handleClose, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\") }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ImageExportModal, { elements: elements, appState: appState, files: files, exportPadding: exportPadding, actionManager: actionManager, onExportToPng: onExportToPng, onExportToSvg: onExportToSvg, onExportToClipboard: onExportToClipboard, onCloseRequest: handleClose }) })))] }));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9JbWFnZUV4cG9ydERpYWxvZy50c3guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEyRDtBQUNBO0FBQ0U7QUFDakI7QUFFSjtBQUNaO0FBQ007QUFDb0M7QUFDckI7QUFFZjtBQUNlO0FBQ3JCO0FBQ2M7QUFDYjtBQUNNO0FBQ1c7QUFDUTtBQUNTO0FBRy9ELE1BQU0sc0JBQXNCLEdBQzFCLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUUsQ0FBQztBQUUxRCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNyQyxPQUFPLENBQ0wsNEVBQ0UseUVBQUssd0NBQUMsQ0FBQywrQkFBK0IsQ0FBQyxHQUFNLEVBQzdDLHdFQUNFLDJFQUFPLHdDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBUSxHQUMxQyxFQUNKLGdGQUFNLHdDQUFDLENBQUMsNkJBQTZCLENBQUMsU0FBTyxJQUN6QyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUNwQixPQUFrQyxFQUNsQyxXQUEyQixFQUMzQixFQUFFO0lBQ0YsaUVBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDM0IsSUFBSSxPQUFPLFlBQVksaUJBQWlCLEVBQUU7UUFDeEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNsQztTQUFNO1FBQ0wsaURBQU0sQ0FBQyx1REFBQyxrQkFBa0IsS0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzdDO0FBQ0gsQ0FBQyxDQUFDO0FBT0YsTUFBTSxZQUFZLEdBTWIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUN0RCxPQUFPLENB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LDhIQUNFLHVEQUFDLG9EQUFVLElBQ1QsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDWixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsaUJBQ1cscUJBQXFCLEVBQ2pDLElBQUksRUFBRSxnREFBVyxFQUNqQixJQUFJLEVBQUMsUUFBUSxnQkFDRCx3Q0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQ3BDLGFBQWEsRUFBRSwrQ0FBUyxFQUFFLENBQUMsUUFBUSxFQUNuQyxLQUFLLEVBQUUsd0NBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUMvQixFQUNELFlBQVksSUFBSSxDQUNmLHVEQUFDLDRDQUFNLGtCQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLHdDQUFDLENBQUMscUJBQXFCLENBQUMsZ0JBQ2xFLHVEQUFDLGdCQUFnQixJQUNmLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLEtBQUssRUFBRSxLQUFLLEVBQ1osYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQ3hDLGNBQWMsRUFBRSxXQUFXLEdBQzNCLElBQ0ssQ0FDVixJQUNBLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL0ltYWdlRXhwb3J0RGlhbG9nLnRzeD8yMGUxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHJlbmRlciwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IHByb2JhYmx5U3VwcG9ydHNDbGlwYm9hcmRCbG9iIH0gZnJvbSBcIi4uL2NsaXBib2FyZFwiO1xuaW1wb3J0IHsgY2FudmFzVG9CbG9iIH0gZnJvbSBcIi4uL2RhdGEvYmxvYlwiO1xuaW1wb3J0IHsgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IENhbnZhc0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgeyB1c2VEZXZpY2UgfSBmcm9tIFwiLi9BcHBcIjtcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMsIGlzU29tZUVsZW1lbnRTZWxlY3RlZCB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgZXhwb3J0VG9DYW52YXMgfSBmcm9tIFwiLi4vc2NlbmUvZXhwb3J0XCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSwgQmluYXJ5RmlsZXMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL0RpYWxvZ1wiO1xuaW1wb3J0IHsgY2xpcGJvYXJkLCBleHBvcnRJbWFnZSB9IGZyb20gXCIuL2ljb25zXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IFRvb2xCdXR0b24gfSBmcm9tIFwiLi9Ub29sQnV0dG9uXCI7XG5pbXBvcnQgXCIuL0V4cG9ydERpYWxvZy5zY3NzXCI7XG5pbXBvcnQgT3BlbkNvbG9yIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5pbXBvcnQgeyBDaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9DaGVja2JveEl0ZW1cIjtcbmltcG9ydCB7IERFRkFVTFRfRVhQT1JUX1BBRERJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBuYXRpdmVGaWxlU3lzdGVtU3VwcG9ydGVkIH0gZnJvbSBcIi4uL2RhdGEvZmlsZXN5c3RlbVwiO1xuaW1wb3J0IHsgQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuLi9hY3Rpb25zL21hbmFnZXJcIjtcblxuY29uc3Qgc3VwcG9ydHNDb250ZXh0RmlsdGVycyA9XG4gIFwiZmlsdGVyXCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0KFwiMmRcIikhO1xuXG5leHBvcnQgY29uc3QgRXJyb3JDYW52YXNQcmV2aWV3ID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8aDM+e3QoXCJjYW52YXNFcnJvci5jYW5ub3RTaG93UHJldmlld1wiKX08L2gzPlxuICAgICAgPHA+XG4gICAgICAgIDxzcGFuPnt0KFwiY2FudmFzRXJyb3IuY2FudmFzVG9vQmlnXCIpfTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxlbT4oe3QoXCJjYW52YXNFcnJvci5jYW52YXNUb29CaWdUaXBcIil9KTwvZW0+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5jb25zdCByZW5kZXJQcmV2aWV3ID0gKFxuICBjb250ZW50OiBIVE1MQ2FudmFzRWxlbWVudCB8IEVycm9yLFxuICBwcmV2aWV3Tm9kZTogSFRNTERpdkVsZW1lbnQsXG4pID0+IHtcbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZShwcmV2aWV3Tm9kZSk7XG4gIHByZXZpZXdOb2RlLmlubmVySFRNTCA9IFwiXCI7XG4gIGlmIChjb250ZW50IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICBwcmV2aWV3Tm9kZS5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICByZW5kZXIoPEVycm9yQ2FudmFzUHJldmlldyAvPiwgcHJldmlld05vZGUpO1xuICB9XG59O1xuXG5leHBvcnQgdHlwZSBFeHBvcnRDQiA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBzY2FsZT86IG51bWJlcixcbikgPT4gdm9pZDtcblxuY29uc3QgRXhwb3J0QnV0dG9uOiBSZWFjdC5GQzx7XG4gIGNvbG9yOiBrZXlvZiBPcGVuQ29sb3I7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHNoYWRlPzogbnVtYmVyO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbn0+ID0gKHsgY2hpbGRyZW4sIHRpdGxlLCBvbkNsaWNrLCBjb2xvciwgc2hhZGUgPSA2IH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBjbGFzc05hbWU9XCJFeHBvcnREaWFsb2ctaW1hZ2VFeHBvcnRCdXR0b25cIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgW1wiLS1idXR0b24tY29sb3JcIiBhcyBhbnldOiBPcGVuQ29sb3JbY29sb3JdW3NoYWRlXSxcbiAgICAgICAgW1wiLS1idXR0b24tY29sb3ItZGFya2VyXCIgYXMgYW55XTogT3BlbkNvbG9yW2NvbG9yXVtzaGFkZSArIDFdLFxuICAgICAgICBbXCItLWJ1dHRvbi1jb2xvci1kYXJrZXN0XCIgYXMgYW55XTogT3BlbkNvbG9yW2NvbG9yXVtzaGFkZSArIDJdLFxuICAgICAgfX1cbiAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgIGFyaWEtbGFiZWw9e3RpdGxlfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuXG5jb25zdCBJbWFnZUV4cG9ydE1vZGFsID0gKHtcbiAgZWxlbWVudHMsXG4gIGFwcFN0YXRlLFxuICBmaWxlcyxcbiAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gIGFjdGlvbk1hbmFnZXIsXG4gIG9uRXhwb3J0VG9QbmcsXG4gIG9uRXhwb3J0VG9TdmcsXG4gIG9uRXhwb3J0VG9DbGlwYm9hcmQsXG59OiB7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG4gIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gIGFjdGlvbk1hbmFnZXI6IEFjdGlvbk1hbmFnZXI7XG4gIG9uRXhwb3J0VG9Qbmc6IEV4cG9ydENCO1xuICBvbkV4cG9ydFRvU3ZnOiBFeHBvcnRDQjtcbiAgb25FeHBvcnRUb0NsaXBib2FyZDogRXhwb3J0Q0I7XG4gIG9uQ2xvc2VSZXF1ZXN0OiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICBjb25zdCBzb21lRWxlbWVudElzU2VsZWN0ZWQgPSBpc1NvbWVFbGVtZW50U2VsZWN0ZWQoZWxlbWVudHMsIGFwcFN0YXRlKTtcbiAgY29uc3QgW2V4cG9ydFNlbGVjdGVkLCBzZXRFeHBvcnRTZWxlY3RlZF0gPSB1c2VTdGF0ZShzb21lRWxlbWVudElzU2VsZWN0ZWQpO1xuICBjb25zdCBwcmV2aWV3UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgeyBleHBvcnRCYWNrZ3JvdW5kLCB2aWV3QmFja2dyb3VuZENvbG9yIH0gPSBhcHBTdGF0ZTtcblxuICBjb25zdCBleHBvcnRlZEVsZW1lbnRzID0gZXhwb3J0U2VsZWN0ZWRcbiAgICA/IGdldFNlbGVjdGVkRWxlbWVudHMoZWxlbWVudHMsIGFwcFN0YXRlLCB0cnVlKVxuICAgIDogZWxlbWVudHM7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRFeHBvcnRTZWxlY3RlZChzb21lRWxlbWVudElzU2VsZWN0ZWQpO1xuICB9LCBbc29tZUVsZW1lbnRJc1NlbGVjdGVkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2aWV3Tm9kZSA9IHByZXZpZXdSZWYuY3VycmVudDtcbiAgICBpZiAoIXByZXZpZXdOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4cG9ydFRvQ2FudmFzKGV4cG9ydGVkRWxlbWVudHMsIGFwcFN0YXRlLCBmaWxlcywge1xuICAgICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBleHBvcnRQYWRkaW5nLFxuICAgIH0pXG4gICAgICAudGhlbigoY2FudmFzKSA9PiB7XG4gICAgICAgIC8vIGlmIGNvbnZlcnRpbmcgdG8gYmxvYiBmYWlscywgdGhlcmUncyBzb21lIHByb2JsZW0gdGhhdCB3aWxsXG4gICAgICAgIC8vIGxpa2VseSBwcmV2ZW50IHByZXZpZXcgYW5kIGV4cG9ydCAoZS5nLiBjYW52YXMgdG9vIGJpZylcbiAgICAgICAgcmV0dXJuIGNhbnZhc1RvQmxvYihjYW52YXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlbmRlclByZXZpZXcoY2FudmFzLCBwcmV2aWV3Tm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHJlbmRlclByZXZpZXcobmV3IENhbnZhc0Vycm9yKCksIHByZXZpZXdOb2RlKTtcbiAgICAgIH0pO1xuICB9LCBbXG4gICAgYXBwU3RhdGUsXG4gICAgZmlsZXMsXG4gICAgZXhwb3J0ZWRFbGVtZW50cyxcbiAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgIGV4cG9ydFBhZGRpbmcsXG4gICAgdmlld0JhY2tncm91bmRDb2xvcixcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIkV4cG9ydERpYWxvZ1wiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJFeHBvcnREaWFsb2dfX3ByZXZpZXdcIiByZWY9e3ByZXZpZXdSZWZ9IC8+XG4gICAgICB7c3VwcG9ydHNDb250ZXh0RmlsdGVycyAmJlxuICAgICAgICBhY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImV4cG9ydFdpdGhEYXJrTW9kZVwiKX1cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJncmlkXCIsIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwiMWZyXCIgfX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZGlzcGxheTogXCJncmlkXCIsXG4gICAgICAgICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE5MHB4LCAxZnIpKVwiLFxuICAgICAgICAgICAgLy8gZHVubm8gd2h5IHRoaXMgaXMgbmVlZGVkLCBidXQgd2hlbiB0aGUgaXRlbXMgd3JhcCBpdCBjcmVhdGVzXG4gICAgICAgICAgICAvLyBhbiBvdmVyZmxvd1xuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImNoYW5nZUV4cG9ydEJhY2tncm91bmRcIil9XG4gICAgICAgICAge3NvbWVFbGVtZW50SXNTZWxlY3RlZCAmJiAoXG4gICAgICAgICAgICA8Q2hlY2tib3hJdGVtXG4gICAgICAgICAgICAgIGNoZWNrZWQ9e2V4cG9ydFNlbGVjdGVkfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGNoZWNrZWQpID0+IHNldEV4cG9ydFNlbGVjdGVkKGNoZWNrZWQpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dChcImxhYmVscy5vbmx5U2VsZWN0ZWRcIil9XG4gICAgICAgICAgICA8L0NoZWNrYm94SXRlbT5cbiAgICAgICAgICApfVxuICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImNoYW5nZUV4cG9ydEVtYmVkU2NlbmVcIil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBtYXJnaW5Ub3A6IFwiLjZlbVwiIH19PlxuICAgICAgICA8U3RhY2suUm93IGdhcD17Mn0+XG4gICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2hhbmdlRXhwb3J0U2NhbGVcIil9XG4gICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5MZWZ0OiBcIjFlbVwiLCB1c2VyU2VsZWN0OiBcIm5vbmVcIiB9fT5cbiAgICAgICAgICB7dChcImJ1dHRvbnMuc2NhbGVcIil9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgbWFyZ2luOiBcIi42ZW0gMFwiLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7IW5hdGl2ZUZpbGVTeXN0ZW1TdXBwb3J0ZWQgJiZcbiAgICAgICAgICBhY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImNoYW5nZVByb2plY3ROYW1lXCIpfVxuICAgICAgPC9kaXY+XG4gICAgICA8U3RhY2suUm93IGdhcD17Mn0ganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIiBzdHlsZT17eyBtYXJnaW46IFwiMmVtIDBcIiB9fT5cbiAgICAgICAgPEV4cG9ydEJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwiaW5kaWdvXCJcbiAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMuZXhwb3J0VG9QbmdcIil9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuZXhwb3J0VG9QbmdcIil9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25FeHBvcnRUb1BuZyhleHBvcnRlZEVsZW1lbnRzKX1cbiAgICAgICAgPlxuICAgICAgICAgIFBOR1xuICAgICAgICA8L0V4cG9ydEJ1dHRvbj5cbiAgICAgICAgPEV4cG9ydEJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwicmVkXCJcbiAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMuZXhwb3J0VG9TdmdcIil9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuZXhwb3J0VG9TdmdcIil9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25FeHBvcnRUb1N2ZyhleHBvcnRlZEVsZW1lbnRzKX1cbiAgICAgICAgPlxuICAgICAgICAgIFNWR1xuICAgICAgICA8L0V4cG9ydEJ1dHRvbj5cbiAgICAgICAge3Byb2JhYmx5U3VwcG9ydHNDbGlwYm9hcmRCbG9iICYmIChcbiAgICAgICAgICA8RXhwb3J0QnV0dG9uXG4gICAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMuY29weVBuZ1RvQ2xpcGJvYXJkXCIpfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25FeHBvcnRUb0NsaXBib2FyZChleHBvcnRlZEVsZW1lbnRzKX1cbiAgICAgICAgICAgIGNvbG9yPVwiZ3JheVwiXG4gICAgICAgICAgICBzaGFkZT17N31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2xpcGJvYXJkfVxuICAgICAgICAgIDwvRXhwb3J0QnV0dG9uPlxuICAgICAgICApfVxuICAgICAgPC9TdGFjay5Sb3c+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VFeHBvcnREaWFsb2cgPSAoe1xuICBlbGVtZW50cyxcbiAgYXBwU3RhdGUsXG4gIGZpbGVzLFxuICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgYWN0aW9uTWFuYWdlcixcbiAgb25FeHBvcnRUb1BuZyxcbiAgb25FeHBvcnRUb1N2ZyxcbiAgb25FeHBvcnRUb0NsaXBib2FyZCxcbn06IHtcbiAgYXBwU3RhdGU6IEFwcFN0YXRlO1xuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIGZpbGVzOiBCaW5hcnlGaWxlcztcbiAgZXhwb3J0UGFkZGluZz86IG51bWJlcjtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgb25FeHBvcnRUb1BuZzogRXhwb3J0Q0I7XG4gIG9uRXhwb3J0VG9Tdmc6IEV4cG9ydENCO1xuICBvbkV4cG9ydFRvQ2xpcGJvYXJkOiBFeHBvcnRDQjtcbn0pID0+IHtcbiAgY29uc3QgW21vZGFsSXNTaG93biwgc2V0TW9kYWxJc1Nob3duXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRNb2RhbElzU2hvd24oZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHNldE1vZGFsSXNTaG93bih0cnVlKTtcbiAgICAgICAgfX1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZS1leHBvcnQtYnV0dG9uXCJcbiAgICAgICAgaWNvbj17ZXhwb3J0SW1hZ2V9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5leHBvcnRJbWFnZVwiKX1cbiAgICAgICAgc2hvd0FyaWFMYWJlbD17dXNlRGV2aWNlKCkuaXNNb2JpbGV9XG4gICAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5leHBvcnRJbWFnZVwiKX1cbiAgICAgIC8+XG4gICAgICB7bW9kYWxJc1Nob3duICYmIChcbiAgICAgICAgPERpYWxvZyBvbkNsb3NlUmVxdWVzdD17aGFuZGxlQ2xvc2V9IHRpdGxlPXt0KFwiYnV0dG9ucy5leHBvcnRJbWFnZVwiKX0+XG4gICAgICAgICAgPEltYWdlRXhwb3J0TW9kYWxcbiAgICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgICAgICAgIGV4cG9ydFBhZGRpbmc9e2V4cG9ydFBhZGRpbmd9XG4gICAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgICAgb25FeHBvcnRUb1BuZz17b25FeHBvcnRUb1BuZ31cbiAgICAgICAgICAgIG9uRXhwb3J0VG9Tdmc9e29uRXhwb3J0VG9Tdmd9XG4gICAgICAgICAgICBvbkV4cG9ydFRvQ2xpcGJvYXJkPXtvbkV4cG9ydFRvQ2xpcGJvYXJkfVxuICAgICAgICAgICAgb25DbG9zZVJlcXVlc3Q9e2hhbmRsZUNsb3NlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRGlhbG9nPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/ImageExportDialog.tsx\n");
2081
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ErrorCanvasPreview\": () => (/* binding */ ErrorCanvasPreview),\n/* harmony export */ \"ImageExportDialog\": () => (/* binding */ ImageExportDialog)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _clipboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../clipboard */ \"../../clipboard.ts\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../errors */ \"../../errors.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _scene_export__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../scene/export */ \"../../scene/export.ts\");\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Dialog */ \"../../components/Dialog.tsx\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ExportDialog.scss */ \"../../components/ExportDialog.scss\");\n/* harmony import */ var _ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _CheckboxItem__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./CheckboxItem */ \"../../components/CheckboxItem.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data_filesystem__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../data/filesystem */ \"../../data/filesystem.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\n\r\n\r\n\r\n\r\n\r\nconst supportsContextFilters = \"filter\" in document.createElement(\"canvas\").getContext(\"2d\");\r\nconst ErrorCanvasPreview = () => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h3\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.cannotShowPreview\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.canvasTooBig\") }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"em\", { children: [\"(\", (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.canvasTooBigTip\"), \")\"] })] }));\r\n};\r\nconst renderPreview = (content, previewNode) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.unmountComponentAtNode)(previewNode);\r\n previewNode.innerHTML = \"\";\r\n if (content instanceof HTMLCanvasElement) {\r\n previewNode.appendChild(content);\r\n }\r\n else {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.render)((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ErrorCanvasPreview, {}), previewNode);\r\n }\r\n};\r\nconst ExportButton = ({ children, title, onClick, color, shade = 6 }) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"ExportDialog-imageExportButton\", style: {\r\n [\"--button-color\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade],\r\n [\"--button-color-darker\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade + 1],\r\n [\"--button-color-darkest\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade + 2],\r\n }, title: title, \"aria-label\": title, onClick: onClick }, { children: children })));\r\n};\r\nconst ImageExportModal = ({ elements, appState, files, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_17__.DEFAULT_EXPORT_PADDING, actionManager, onExportToPng, onExportToSvg, onExportToClipboard, }) => {\r\n const someElementIsSelected = (0,_scene__WEBPACK_IMPORTED_MODULE_8__.isSomeElementSelected)(elements, appState);\r\n const [exportSelected, setExportSelected] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(someElementIsSelected);\r\n const previewRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\r\n const { exportBackground, viewBackgroundColor } = appState;\r\n const exportedElements = exportSelected\r\n ? (0,_scene__WEBPACK_IMPORTED_MODULE_8__.getSelectedElements)(elements, appState, true)\r\n : elements;\r\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\r\n setExportSelected(someElementIsSelected);\r\n }, [someElementIsSelected]);\r\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\r\n const previewNode = previewRef.current;\r\n if (!previewNode) {\r\n return;\r\n }\r\n (0,_scene_export__WEBPACK_IMPORTED_MODULE_9__.exportToCanvas)(exportedElements, appState, files, {\r\n exportBackground,\r\n viewBackgroundColor,\r\n exportPadding,\r\n })\r\n .then((canvas) => {\r\n // if converting to blob fails, there's some problem that will\r\n // likely prevent preview and export (e.g. canvas too big)\r\n return (0,_data_blob__WEBPACK_IMPORTED_MODULE_4__.canvasToBlob)(canvas).then(() => {\r\n renderPreview(canvas, previewNode);\r\n });\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n renderPreview(new _errors__WEBPACK_IMPORTED_MODULE_5__.CanvasError(), previewNode);\r\n });\r\n }, [\r\n appState,\r\n files,\r\n exportedElements,\r\n exportBackground,\r\n exportPadding,\r\n viewBackgroundColor,\r\n ]);\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"ExportDialog\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"ExportDialog__preview\", ref: previewRef }), supportsContextFilters &&\r\n actionManager.renderAction(\"exportWithDarkMode\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { display: \"grid\", gridTemplateColumns: \"1fr\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: {\r\n display: \"grid\",\r\n gridTemplateColumns: \"repeat(auto-fit, minmax(190px, 1fr))\",\r\n // dunno why this is needed, but when the items wrap it creates\r\n // an overflow\r\n overflow: \"hidden\",\r\n } }, { children: [actionManager.renderAction(\"changeExportBackground\"), someElementIsSelected && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CheckboxItem__WEBPACK_IMPORTED_MODULE_16__.CheckboxItem, Object.assign({ checked: exportSelected, onChange: (checked) => setExportSelected(checked) }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"labels.onlySelected\") }))), actionManager.renderAction(\"changeExportEmbedScene\")] })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { display: \"flex\", alignItems: \"center\", marginTop: \".6em\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_12__[\"default\"].Row, Object.assign({ gap: 2 }, { children: actionManager.renderAction(\"changeExportScale\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", Object.assign({ style: { marginLeft: \"1em\", userSelect: \"none\" } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scale\") }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n margin: \".6em 0\",\r\n } }, { children: !_data_filesystem__WEBPACK_IMPORTED_MODULE_18__.nativeFileSystemSupported &&\r\n actionManager.renderAction(\"changeProjectName\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_12__[\"default\"].Row, Object.assign({ gap: 2, justifyContent: \"center\", style: { margin: \"2em 0\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ color: \"indigo\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToPng\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToPng\"), onClick: () => onExportToPng(exportedElements) }, { children: \"PNG\" })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ color: \"red\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToSvg\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToSvg\"), onClick: () => onExportToSvg(exportedElements) }, { children: \"SVG\" })), _clipboard__WEBPACK_IMPORTED_MODULE_3__.probablySupportsClipboardBlob && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.copyPngToClipboard\"), onClick: () => onExportToClipboard(exportedElements), color: \"gray\", shade: 7 }, { children: _icons__WEBPACK_IMPORTED_MODULE_11__.clipboard })))] }))] })));\r\n};\r\nconst ImageExportDialog = ({ elements, appState, files, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_17__.DEFAULT_EXPORT_PADDING, actionManager, onExportToPng, onExportToSvg, onExportToClipboard, }) => {\r\n const [modalIsShown, setModalIsShown] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\r\n const handleClose = react__WEBPACK_IMPORTED_MODULE_1___default().useCallback(() => {\r\n setModalIsShown(false);\r\n }, []);\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_13__.ToolButton, { onClick: () => {\r\n setModalIsShown(true);\r\n }, \"data-testid\": \"image-export-button\", icon: _icons__WEBPACK_IMPORTED_MODULE_11__.exportImage, type: \"button\", \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\"), showAriaLabel: (0,_App__WEBPACK_IMPORTED_MODULE_7__.useDevice)().isMobile, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\") }), modalIsShown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Dialog__WEBPACK_IMPORTED_MODULE_10__.Dialog, Object.assign({ onCloseRequest: handleClose, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\") }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ImageExportModal, { elements: elements, appState: appState, files: files, exportPadding: exportPadding, actionManager: actionManager, onExportToPng: onExportToPng, onExportToSvg: onExportToSvg, onExportToClipboard: onExportToClipboard, onCloseRequest: handleClose }) })))] }));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9JbWFnZUV4cG9ydERpYWxvZy50c3guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEyRDtBQUNBO0FBQ0U7QUFDakI7QUFFSjtBQUNaO0FBQ007QUFDb0M7QUFDckI7QUFFZjtBQUNlO0FBQ3JCO0FBQ2M7QUFDYjtBQUNNO0FBQ1c7QUFDUTtBQUNTO0FBRy9ELE1BQU0sc0JBQXNCLEdBQzFCLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUUsQ0FBQztBQUUxRCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNyQyxPQUFPLENBQ0wsNEVBQ0UseUVBQUssd0NBQUMsQ0FBQywrQkFBK0IsQ0FBQyxHQUFNLEVBQzdDLHdFQUNFLDJFQUFPLHdDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBUSxHQUMxQyxFQUNKLGdGQUFNLHdDQUFDLENBQUMsNkJBQTZCLENBQUMsU0FBTyxJQUN6QyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUNwQixPQUFrQyxFQUNsQyxXQUEyQixFQUMzQixFQUFFO0lBQ0YsaUVBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDM0IsSUFBSSxPQUFPLFlBQVksaUJBQWlCLEVBQUU7UUFDeEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNsQztTQUFNO1FBQ0wsaURBQU0sQ0FBQyx1REFBQyxrQkFBa0IsS0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzdDO0FBQ0gsQ0FBQyxDQUFDO0FBT0YsTUFBTSxZQUFZLEdBS2IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUN0RCxPQUFPLENB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LDhIQUNFLHVEQUFDLG9EQUFVLElBQ1QsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDWixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsaUJBQ1cscUJBQXFCLEVBQ2pDLElBQUksRUFBRSxnREFBVyxFQUNqQixJQUFJLEVBQUMsUUFBUSxnQkFDRCx3Q0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQ3BDLGFBQWEsRUFBRSwrQ0FBUyxFQUFFLENBQUMsUUFBUSxFQUNuQyxLQUFLLEVBQUUsd0NBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUMvQixFQUNELFlBQVksSUFBSSxDQUNmLHVEQUFDLDRDQUFNLGtCQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLHdDQUFDLENBQUMscUJBQXFCLENBQUMsZ0JBQ2xFLHVEQUFDLGdCQUFnQixJQUNmLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLEtBQUssRUFBRSxLQUFLLEVBQ1osYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQ3hDLGNBQWMsRUFBRSxXQUFXLEdBQzNCLElBQ0ssQ0FDVixJQUNBLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL0ltYWdlRXhwb3J0RGlhbG9nLnRzeD8yMGUxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHJlbmRlciwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IHByb2JhYmx5U3VwcG9ydHNDbGlwYm9hcmRCbG9iIH0gZnJvbSBcIi4uL2NsaXBib2FyZFwiO1xuaW1wb3J0IHsgY2FudmFzVG9CbG9iIH0gZnJvbSBcIi4uL2RhdGEvYmxvYlwiO1xuaW1wb3J0IHsgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IENhbnZhc0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgeyB1c2VEZXZpY2UgfSBmcm9tIFwiLi9BcHBcIjtcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMsIGlzU29tZUVsZW1lbnRTZWxlY3RlZCB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgZXhwb3J0VG9DYW52YXMgfSBmcm9tIFwiLi4vc2NlbmUvZXhwb3J0XCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSwgQmluYXJ5RmlsZXMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL0RpYWxvZ1wiO1xuaW1wb3J0IHsgY2xpcGJvYXJkLCBleHBvcnRJbWFnZSB9IGZyb20gXCIuL2ljb25zXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IFRvb2xCdXR0b24gfSBmcm9tIFwiLi9Ub29sQnV0dG9uXCI7XG5pbXBvcnQgXCIuL0V4cG9ydERpYWxvZy5zY3NzXCI7XG5pbXBvcnQgT3BlbkNvbG9yIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5pbXBvcnQgeyBDaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9DaGVja2JveEl0ZW1cIjtcbmltcG9ydCB7IERFRkFVTFRfRVhQT1JUX1BBRERJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBuYXRpdmVGaWxlU3lzdGVtU3VwcG9ydGVkIH0gZnJvbSBcIi4uL2RhdGEvZmlsZXN5c3RlbVwiO1xuaW1wb3J0IHsgQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuLi9hY3Rpb25zL21hbmFnZXJcIjtcblxuY29uc3Qgc3VwcG9ydHNDb250ZXh0RmlsdGVycyA9XG4gIFwiZmlsdGVyXCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0KFwiMmRcIikhO1xuXG5leHBvcnQgY29uc3QgRXJyb3JDYW52YXNQcmV2aWV3ID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8aDM+e3QoXCJjYW52YXNFcnJvci5jYW5ub3RTaG93UHJldmlld1wiKX08L2gzPlxuICAgICAgPHA+XG4gICAgICAgIDxzcGFuPnt0KFwiY2FudmFzRXJyb3IuY2FudmFzVG9vQmlnXCIpfTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxlbT4oe3QoXCJjYW52YXNFcnJvci5jYW52YXNUb29CaWdUaXBcIil9KTwvZW0+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5jb25zdCByZW5kZXJQcmV2aWV3ID0gKFxuICBjb250ZW50OiBIVE1MQ2FudmFzRWxlbWVudCB8IEVycm9yLFxuICBwcmV2aWV3Tm9kZTogSFRNTERpdkVsZW1lbnQsXG4pID0+IHtcbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZShwcmV2aWV3Tm9kZSk7XG4gIHByZXZpZXdOb2RlLmlubmVySFRNTCA9IFwiXCI7XG4gIGlmIChjb250ZW50IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICBwcmV2aWV3Tm9kZS5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICByZW5kZXIoPEVycm9yQ2FudmFzUHJldmlldyAvPiwgcHJldmlld05vZGUpO1xuICB9XG59O1xuXG5leHBvcnQgdHlwZSBFeHBvcnRDQiA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBzY2FsZT86IG51bWJlcixcbikgPT4gdm9pZDtcblxuY29uc3QgRXhwb3J0QnV0dG9uOiBSZWFjdC5GQzx7XG4gIGNvbG9yOiBrZXlvZiBPcGVuQ29sb3I7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHNoYWRlPzogbnVtYmVyO1xufT4gPSAoeyBjaGlsZHJlbiwgdGl0bGUsIG9uQ2xpY2ssIGNvbG9yLCBzaGFkZSA9IDYgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT1cIkV4cG9ydERpYWxvZy1pbWFnZUV4cG9ydEJ1dHRvblwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBbXCItLWJ1dHRvbi1jb2xvclwiIGFzIGFueV06IE9wZW5Db2xvcltjb2xvcl1bc2hhZGVdLFxuICAgICAgICBbXCItLWJ1dHRvbi1jb2xvci1kYXJrZXJcIiBhcyBhbnldOiBPcGVuQ29sb3JbY29sb3JdW3NoYWRlICsgMV0sXG4gICAgICAgIFtcIi0tYnV0dG9uLWNvbG9yLWRhcmtlc3RcIiBhcyBhbnldOiBPcGVuQ29sb3JbY29sb3JdW3NoYWRlICsgMl0sXG4gICAgICB9fVxuICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgYXJpYS1sYWJlbD17dGl0bGV9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn07XG5cbmNvbnN0IEltYWdlRXhwb3J0TW9kYWwgPSAoe1xuICBlbGVtZW50cyxcbiAgYXBwU3RhdGUsXG4gIGZpbGVzLFxuICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgYWN0aW9uTWFuYWdlcixcbiAgb25FeHBvcnRUb1BuZyxcbiAgb25FeHBvcnRUb1N2ZyxcbiAgb25FeHBvcnRUb0NsaXBib2FyZCxcbn06IHtcbiAgYXBwU3RhdGU6IEFwcFN0YXRlO1xuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIGZpbGVzOiBCaW5hcnlGaWxlcztcbiAgZXhwb3J0UGFkZGluZz86IG51bWJlcjtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgb25FeHBvcnRUb1BuZzogRXhwb3J0Q0I7XG4gIG9uRXhwb3J0VG9Tdmc6IEV4cG9ydENCO1xuICBvbkV4cG9ydFRvQ2xpcGJvYXJkOiBFeHBvcnRDQjtcbiAgb25DbG9zZVJlcXVlc3Q6ICgpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNvbWVFbGVtZW50SXNTZWxlY3RlZCA9IGlzU29tZUVsZW1lbnRTZWxlY3RlZChlbGVtZW50cywgYXBwU3RhdGUpO1xuICBjb25zdCBbZXhwb3J0U2VsZWN0ZWQsIHNldEV4cG9ydFNlbGVjdGVkXSA9IHVzZVN0YXRlKHNvbWVFbGVtZW50SXNTZWxlY3RlZCk7XG4gIGNvbnN0IHByZXZpZXdSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB7IGV4cG9ydEJhY2tncm91bmQsIHZpZXdCYWNrZ3JvdW5kQ29sb3IgfSA9IGFwcFN0YXRlO1xuXG4gIGNvbnN0IGV4cG9ydGVkRWxlbWVudHMgPSBleHBvcnRTZWxlY3RlZFxuICAgID8gZ2V0U2VsZWN0ZWRFbGVtZW50cyhlbGVtZW50cywgYXBwU3RhdGUsIHRydWUpXG4gICAgOiBlbGVtZW50cztcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEV4cG9ydFNlbGVjdGVkKHNvbWVFbGVtZW50SXNTZWxlY3RlZCk7XG4gIH0sIFtzb21lRWxlbWVudElzU2VsZWN0ZWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpZXdOb2RlID0gcHJldmlld1JlZi5jdXJyZW50O1xuICAgIGlmICghcHJldmlld05vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhwb3J0VG9DYW52YXMoZXhwb3J0ZWRFbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzLCB7XG4gICAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgICAgdmlld0JhY2tncm91bmRDb2xvcixcbiAgICAgIGV4cG9ydFBhZGRpbmcsXG4gICAgfSlcbiAgICAgIC50aGVuKChjYW52YXMpID0+IHtcbiAgICAgICAgLy8gaWYgY29udmVydGluZyB0byBibG9iIGZhaWxzLCB0aGVyZSdzIHNvbWUgcHJvYmxlbSB0aGF0IHdpbGxcbiAgICAgICAgLy8gbGlrZWx5IHByZXZlbnQgcHJldmlldyBhbmQgZXhwb3J0IChlLmcuIGNhbnZhcyB0b28gYmlnKVxuICAgICAgICByZXR1cm4gY2FudmFzVG9CbG9iKGNhbnZhcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVuZGVyUHJldmlldyhjYW52YXMsIHByZXZpZXdOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmVuZGVyUHJldmlldyhuZXcgQ2FudmFzRXJyb3IoKSwgcHJldmlld05vZGUpO1xuICAgICAgfSk7XG4gIH0sIFtcbiAgICBhcHBTdGF0ZSxcbiAgICBmaWxlcyxcbiAgICBleHBvcnRlZEVsZW1lbnRzLFxuICAgIGV4cG9ydEJhY2tncm91bmQsXG4gICAgZXhwb3J0UGFkZGluZyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICBdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiRXhwb3J0RGlhbG9nXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIkV4cG9ydERpYWxvZ19fcHJldmlld1wiIHJlZj17cHJldmlld1JlZn0gLz5cbiAgICAgIHtzdXBwb3J0c0NvbnRleHRGaWx0ZXJzICYmXG4gICAgICAgIGFjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiZXhwb3J0V2l0aERhcmtNb2RlXCIpfVxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImdyaWRcIiwgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCIxZnJcIiB9fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBkaXNwbGF5OiBcImdyaWRcIixcbiAgICAgICAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMTkwcHgsIDFmcikpXCIsXG4gICAgICAgICAgICAvLyBkdW5ubyB3aHkgdGhpcyBpcyBuZWVkZWQsIGJ1dCB3aGVuIHRoZSBpdGVtcyB3cmFwIGl0IGNyZWF0ZXNcbiAgICAgICAgICAgIC8vIGFuIG92ZXJmbG93XG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2hhbmdlRXhwb3J0QmFja2dyb3VuZFwiKX1cbiAgICAgICAgICB7c29tZUVsZW1lbnRJc1NlbGVjdGVkICYmIChcbiAgICAgICAgICAgIDxDaGVja2JveEl0ZW1cbiAgICAgICAgICAgICAgY2hlY2tlZD17ZXhwb3J0U2VsZWN0ZWR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY2hlY2tlZCkgPT4gc2V0RXhwb3J0U2VsZWN0ZWQoY2hlY2tlZCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KFwibGFiZWxzLm9ubHlTZWxlY3RlZFwiKX1cbiAgICAgICAgICAgIDwvQ2hlY2tib3hJdGVtPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2hhbmdlRXhwb3J0RW1iZWRTY2VuZVwiKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIG1hcmdpblRvcDogXCIuNmVtXCIgfX0+XG4gICAgICAgIDxTdGFjay5Sb3cgZ2FwPXsyfT5cbiAgICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJjaGFuZ2VFeHBvcnRTY2FsZVwiKX1cbiAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IFwiMWVtXCIsIHVzZXJTZWxlY3Q6IFwibm9uZVwiIH19PlxuICAgICAgICAgIHt0KFwiYnV0dG9ucy5zY2FsZVwiKX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICBtYXJnaW46IFwiLjZlbSAwXCIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHshbmF0aXZlRmlsZVN5c3RlbVN1cHBvcnRlZCAmJlxuICAgICAgICAgIGFjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2hhbmdlUHJvamVjdE5hbWVcIil9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTdGFjay5Sb3cgZ2FwPXsyfSBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiIHN0eWxlPXt7IG1hcmdpbjogXCIyZW0gMFwiIH19PlxuICAgICAgICA8RXhwb3J0QnV0dG9uXG4gICAgICAgICAgY29sb3I9XCJpbmRpZ29cIlxuICAgICAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5leHBvcnRUb1BuZ1wiKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5leHBvcnRUb1BuZ1wiKX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydFRvUG5nKGV4cG9ydGVkRWxlbWVudHMpfVxuICAgICAgICA+XG4gICAgICAgICAgUE5HXG4gICAgICAgIDwvRXhwb3J0QnV0dG9uPlxuICAgICAgICA8RXhwb3J0QnV0dG9uXG4gICAgICAgICAgY29sb3I9XCJyZWRcIlxuICAgICAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5leHBvcnRUb1N2Z1wiKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5leHBvcnRUb1N2Z1wiKX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydFRvU3ZnKGV4cG9ydGVkRWxlbWVudHMpfVxuICAgICAgICA+XG4gICAgICAgICAgU1ZHXG4gICAgICAgIDwvRXhwb3J0QnV0dG9uPlxuICAgICAgICB7cHJvYmFibHlTdXBwb3J0c0NsaXBib2FyZEJsb2IgJiYgKFxuICAgICAgICAgIDxFeHBvcnRCdXR0b25cbiAgICAgICAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5jb3B5UG5nVG9DbGlwYm9hcmRcIil9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydFRvQ2xpcGJvYXJkKGV4cG9ydGVkRWxlbWVudHMpfVxuICAgICAgICAgICAgY29sb3I9XCJncmF5XCJcbiAgICAgICAgICAgIHNoYWRlPXs3fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjbGlwYm9hcmR9XG4gICAgICAgICAgPC9FeHBvcnRCdXR0b24+XG4gICAgICAgICl9XG4gICAgICA8L1N0YWNrLlJvdz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBJbWFnZUV4cG9ydERpYWxvZyA9ICh7XG4gIGVsZW1lbnRzLFxuICBhcHBTdGF0ZSxcbiAgZmlsZXMsXG4gIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICBhY3Rpb25NYW5hZ2VyLFxuICBvbkV4cG9ydFRvUG5nLFxuICBvbkV4cG9ydFRvU3ZnLFxuICBvbkV4cG9ydFRvQ2xpcGJvYXJkLFxufToge1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXTtcbiAgZmlsZXM6IEJpbmFyeUZpbGVzO1xuICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICBhY3Rpb25NYW5hZ2VyOiBBY3Rpb25NYW5hZ2VyO1xuICBvbkV4cG9ydFRvUG5nOiBFeHBvcnRDQjtcbiAgb25FeHBvcnRUb1N2ZzogRXhwb3J0Q0I7XG4gIG9uRXhwb3J0VG9DbGlwYm9hcmQ6IEV4cG9ydENCO1xufSkgPT4ge1xuICBjb25zdCBbbW9kYWxJc1Nob3duLCBzZXRNb2RhbElzU2hvd25dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE1vZGFsSXNTaG93bihmYWxzZSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VG9vbEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgc2V0TW9kYWxJc1Nob3duKHRydWUpO1xuICAgICAgICB9fVxuICAgICAgICBkYXRhLXRlc3RpZD1cImltYWdlLWV4cG9ydC1idXR0b25cIlxuICAgICAgICBpY29uPXtleHBvcnRJbWFnZX1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e3QoXCJidXR0b25zLmV4cG9ydEltYWdlXCIpfVxuICAgICAgICBzaG93QXJpYUxhYmVsPXt1c2VEZXZpY2UoKS5pc01vYmlsZX1cbiAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLmV4cG9ydEltYWdlXCIpfVxuICAgICAgLz5cbiAgICAgIHttb2RhbElzU2hvd24gJiYgKFxuICAgICAgICA8RGlhbG9nIG9uQ2xvc2VSZXF1ZXN0PXtoYW5kbGVDbG9zZX0gdGl0bGU9e3QoXCJidXR0b25zLmV4cG9ydEltYWdlXCIpfT5cbiAgICAgICAgICA8SW1hZ2VFeHBvcnRNb2RhbFxuICAgICAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgZmlsZXM9e2ZpbGVzfVxuICAgICAgICAgICAgZXhwb3J0UGFkZGluZz17ZXhwb3J0UGFkZGluZ31cbiAgICAgICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgICAgICBvbkV4cG9ydFRvUG5nPXtvbkV4cG9ydFRvUG5nfVxuICAgICAgICAgICAgb25FeHBvcnRUb1N2Zz17b25FeHBvcnRUb1N2Z31cbiAgICAgICAgICAgIG9uRXhwb3J0VG9DbGlwYm9hcmQ9e29uRXhwb3J0VG9DbGlwYm9hcmR9XG4gICAgICAgICAgICBvbkNsb3NlUmVxdWVzdD17aGFuZGxlQ2xvc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9EaWFsb2c+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/ImageExportDialog.tsx\n");
2071
2082
 
2072
2083
  /***/ }),
2073
2084
 
@@ -2111,7 +2122,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2111
2122
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2112
2123
 
2113
2124
  "use strict";
2114
- 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 react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data */ \"../../data/index.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./BackgroundPickerAndDarkModeToggle */ \"../../components/BackgroundPickerAndDarkModeToggle.tsx\");\n/* harmony import */ var _CollabButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./CollabButton */ \"../../components/CollabButton.tsx\");\n/* harmony import */ var _ErrorDialog__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ErrorDialog */ \"../../components/ErrorDialog.tsx\");\n/* harmony import */ var _ImageExportDialog__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ImageExportDialog */ \"../../components/ImageExportDialog.tsx\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _LoadingMessage__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./LoadingMessage */ \"../../components/LoadingMessage.tsx\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _MobileMenu__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./MobileMenu */ \"../../components/MobileMenu.tsx\");\n/* harmony import */ var _PasteChartDialog__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./PasteChartDialog */ \"../../components/PasteChartDialog.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _HelpDialog__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./HelpDialog */ \"../../components/HelpDialog.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _data_library__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../data/library */ \"../../data/library.ts\");\n/* harmony import */ var _JSONExportDialog__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./JSONExportDialog */ \"../../components/JSONExportDialog.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _LibraryMenu__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./LibraryMenu */ \"../../components/LibraryMenu.tsx\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./LayerUI.scss */ \"../../components/LayerUI.scss\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(_LayerUI_scss__WEBPACK_IMPORTED_MODULE_30__);\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./Toolbar.scss */ \"../../components/Toolbar.scss\");\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(_Toolbar_scss__WEBPACK_IMPORTED_MODULE_31__);\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../components/App */ \"../../components/App.tsx\");\n/* harmony import */ var _Stats__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./Stats */ \"../../components/Stats.tsx\");\n/* harmony import */ var _actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../actions/actionToggleStats */ \"../../actions/actionToggleStats.tsx\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../actions */ \"../../actions/index.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\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\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\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\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 LayerUI = ({ onHomeButtonClick, actionManager, appState, files, setAppState, canvas, elements, onCollabButtonClick, onLockToggle, onPenModeToggle, onInsertElements, showExitZenModeBtn, showThemeBtn, isCollaborating, renderTopRightUI, renderCustomFooter, renderCustomStats, libraryReturnUrl, UIOptions, focusContainer, library, id, onImageAction, }) => {\r\n const device = (0,_components_App__WEBPACK_IMPORTED_MODULE_34__.useDevice)();\r\n const renderJSONExportDialog = () => {\r\n if (!UIOptions.canvasActions || !UIOptions.canvasActions.export) {\r\n return null;\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_JSONExportDialog__WEBPACK_IMPORTED_MODULE_26__.JSONExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, exportOpts: UIOptions.canvasActions.export, canvas: canvas }));\r\n };\r\n const renderImageExportDialog = () => {\r\n if (!UIOptions.canvasActions || !UIOptions.canvasActions.saveAsImage) {\r\n return null;\r\n }\r\n const createExporter = (type) => (exportedElements) => __awaiter(void 0, void 0, void 0, function* () {\r\n (0,_analytics__WEBPACK_IMPORTED_MODULE_33__.trackEvent)(\"export\", type, \"ui\");\r\n const fileHandle = yield (0,_data__WEBPACK_IMPORTED_MODULE_4__.exportCanvas)(type, exportedElements, appState, files, {\r\n exportBackground: appState.exportBackground,\r\n name: appState.name,\r\n viewBackgroundColor: appState.viewBackgroundColor,\r\n })\r\n .catch(_utils__WEBPACK_IMPORTED_MODULE_8__.muteFSAbortError)\r\n .catch((error) => {\r\n console.error(error);\r\n setAppState({ errorMessage: error.message });\r\n });\r\n if (appState.exportEmbedScene &&\r\n fileHandle &&\r\n (0,_data_blob__WEBPACK_IMPORTED_MODULE_28__.isImageFileHandle)(fileHandle)) {\r\n setAppState({ fileHandle });\r\n }\r\n });\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ImageExportDialog__WEBPACK_IMPORTED_MODULE_13__.ImageExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, onExportToPng: createExporter(\"png\"), onExportToSvg: createExporter(\"svg\"), onExportToClipboard: createExporter(\"clipboard\") }));\r\n };\r\n const renderViewModeCanvasActions = () => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\r\n \"transition-left\": appState.zenModeEnabled,\r\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 2, style: { zIndex: 1 } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, justifyContent: \"space-between\" }, { children: [renderJSONExportDialog(), renderImageExportDialog()] })) })) })) })));\r\n };\r\n const renderCanvasActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\r\n \"transition-left\": appState.zenModeEnabled,\r\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 2, style: { zIndex: 1 } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4 }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 3, justifyContent: \"space-between\" }, { children: [actionManager.renderAction(\"clearCanvas\"), actionManager.renderAction(\"loadScene\"), renderJSONExportDialog(), renderImageExportDialog(), onCollabButtonClick && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CollabButton__WEBPACK_IMPORTED_MODULE_11__[\"default\"], { isCollaborating: isCollaborating, collaboratorCount: appState.collaborators.size, onClick: onCollabButtonClick }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_10__.BackgroundPickerAndDarkModeToggle, { actionManager: actionManager, appState: appState, setAppState: setAppState, showThemeBtn: showThemeBtn }), appState.fileHandle && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: actionManager.renderAction(\"saveToActiveFile\") }))] })) })) })));\r\n const renderSelectedShapeActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"selectedShapeActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\r\n \"transition-left\": appState.zenModeEnabled,\r\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ className: _constants__WEBPACK_IMPORTED_MODULE_3__.CLASSES.SHAPE_ACTIONS_MENU, padding: 2, style: {\r\n // we want to make sure this doesn't overflow so subtracting 200\r\n // which is approximately height of zoom footer and top left menu items with some buffer\r\n // if active file name is displayed, subtracting 248 to account for its height\r\n maxHeight: `${appState.height - (appState.fileHandle ? 248 : 200)}px`,\r\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction, activeTool: appState.activeTool.type }) })) })));\r\n const closeLibrary = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\r\n const isDialogOpen = !!document.querySelector(\".Dialog\");\r\n // Prevent closing if any dialog is open\r\n if (isDialogOpen) {\r\n return;\r\n }\r\n setAppState({ isLibraryOpen: false });\r\n }, [setAppState]);\r\n const deselectItems = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\r\n setAppState({\r\n selectedElementIds: {},\r\n selectedGroupIds: {},\r\n });\r\n }, [setAppState]);\r\n const libraryMenu = appState.isLibraryOpen ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenu__WEBPACK_IMPORTED_MODULE_29__.LibraryMenu, { pendingElements: (0,_scene__WEBPACK_IMPORTED_MODULE_7__.getSelectedElements)(elements, appState, true), onClose: closeLibrary, onInsertLibraryItems: (libraryItems) => {\r\n onInsertElements((0,_data_library__WEBPACK_IMPORTED_MODULE_25__.distributeLibraryItemsOnSquareGrid)(libraryItems));\r\n }, onAddToLibrary: deselectItems, setAppState: setAppState, libraryReturnUrl: libraryReturnUrl, focusContainer: focusContainer, library: library, theme: appState.theme, files: files, id: id, appState: appState })) : null;\r\n const renderFixedSideContainer = () => {\r\n const shouldRenderSelectedShapeActions = (0,_element__WEBPACK_IMPORTED_MODULE_5__.showSelectedShapeActions)(appState, elements);\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_14__.FixedSideContainer, Object.assign({ side: \"top\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-menu App-menu_top\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\r\n \"disable-pointerEvents\": appState.zenModeEnabled,\r\n }) }, { children: [UIOptions.canvasActions &&\r\n (appState.viewModeEnabled\r\n ? renderViewModeCanvasActions()\r\n : renderCanvasActions()), shouldRenderSelectedShapeActions && renderSelectedShapeActions()] })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4, align: \"start\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar-container\", {\r\n \"zen-mode\": appState.zenModeEnabled,\r\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_32__.PenModeButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.penMode\"), penDetected: appState.penDetected }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_18__.LockButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.activeTool.locked, onChange: () => onLockToggle(), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.lock\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar\", {\r\n \"zen-mode\": appState.zenModeEnabled,\r\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_15__.HintViewer, { appState: appState, elements: elements, isMobile: device.isMobile }), heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\r\n onImageAction({\r\n insertOnCanvasDirectly: pointerType !== \"mouse\",\r\n });\r\n } }) }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_27__.LibraryButton, { appState: appState, setAppState: setAppState })] })) }))) }))), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__top-right zen-mode-transition\", {\r\n \"transition-right\": appState.zenModeEnabled,\r\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_24__.UserList, { collaborators: appState.collaborators, actionManager: actionManager, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\r\n \"transition-right\": appState.zenModeEnabled,\r\n }), layout: \"vertical\" }), renderTopRightUI === null || renderTopRightUI === void 0 ? void 0 : renderTopRightUI(device.isMobile, appState, canvas)] }))] })) })));\r\n };\r\n const renderBottomAppMenu = () => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ role: \"contentinfo\", className: \"layer-ui__wrapper__footer App-menu App-menu_bottom\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-left zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\r\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 2 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ZoomActions, { renderAction: actionManager.renderAction, zoom: appState.zoom }) })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"undo-redo-buttons zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\r\n }) }, { children: [actionManager.renderAction(\"undo\", { size: \"small\" }), actionManager.renderAction(\"redo\", { size: \"small\" })] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"eraser-buttons zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\r\n }) }, { children: actionManager.renderAction(\"eraser\", { size: \"small\" }) }))] })), !appState.viewModeEnabled &&\r\n appState.multiElement &&\r\n device.isTouchScreen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"finalize-button zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\r\n }) }, { children: actionManager.renderAction(\"finalize\", { size: \"small\" }) })))] })) })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-center zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\r\n }) }, { children: renderCustomFooter === null || renderCustomFooter === void 0 ? void 0 : renderCustomFooter(false, appState) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-right zen-mode-transition\", {\r\n \"transition-right disable-pointerEvents\": appState.zenModeEnabled,\r\n }) }, { children: actionManager.renderAction(\"toggleShortcuts\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"disable-zen-mode\", {\r\n \"disable-zen-mode--visible\": showExitZenModeBtn,\r\n }), onClick: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_37__.actionToggleZenMode) }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exitZenMode\") }))] })));\r\n };\r\n const dialogs = ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [appState.isLoading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LoadingMessage__WEBPACK_IMPORTED_MODULE_17__.LoadingMessage, { delay: 250 }), appState.errorMessage && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ErrorDialog__WEBPACK_IMPORTED_MODULE_12__.ErrorDialog, { message: appState.errorMessage, onClose: () => setAppState({ errorMessage: null }) })), appState.showHelpDialog && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HelpDialog__WEBPACK_IMPORTED_MODULE_22__.HelpDialog, { onClose: () => {\r\n setAppState({ showHelpDialog: false });\r\n } })), appState.pasteDialog.shown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PasteChartDialog__WEBPACK_IMPORTED_MODULE_20__.PasteChartDialog, { setAppState: setAppState, appState: appState, onInsertChart: onInsertElements, onClose: () => setAppState({\r\n pasteDialog: { shown: false, data: null },\r\n }) }))] }));\r\n const renderStats = () => {\r\n if (!appState.showStats) {\r\n return null;\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stats__WEBPACK_IMPORTED_MODULE_35__.Stats, { appState: appState, setAppState: setAppState, elements: elements, onClose: () => {\r\n actionManager.executeAction(_actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_36__.actionToggleStats);\r\n }, renderCustomStats: renderCustomStats }));\r\n };\r\n return device.isMobile ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [dialogs, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MobileMenu__WEBPACK_IMPORTED_MODULE_19__.MobileMenu, { onHomeButtonClick: onHomeButtonClick, appState: appState, elements: elements, actionManager: actionManager, libraryMenu: libraryMenu, renderJSONExportDialog: renderJSONExportDialog, renderImageExportDialog: renderImageExportDialog, setAppState: setAppState, onCollabButtonClick: onCollabButtonClick, onLockToggle: () => onLockToggle(), onPenModeToggle: onPenModeToggle, canvas: canvas, isCollaborating: isCollaborating, renderCustomFooter: renderCustomFooter, showThemeBtn: showThemeBtn, onImageAction: onImageAction, renderTopRightUI: renderTopRightUI, renderStats: renderStats, UIOptions: UIOptions })] })) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper\", {\r\n \"disable-pointerEvents\": appState.draggingElement ||\r\n appState.resizingElement ||\r\n (appState.editingElement &&\r\n !(0,_element__WEBPACK_IMPORTED_MODULE_5__.isTextElement)(appState.editingElement)),\r\n }), style: appState.isLibraryOpen &&\r\n appState.isLibraryMenuDocked &&\r\n device.canDeviceFitSidebar\r\n ? { width: `calc(100% - ${_constants__WEBPACK_IMPORTED_MODULE_3__.LIBRARY_SIDEBAR_WIDTH}px)` }\r\n : {} }, { children: [dialogs, renderFixedSideContainer(), renderBottomAppMenu(), renderStats(), appState.scrolledOutside && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\r\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_7__.calculateScrollCenter)(elements, appState, canvas)));\r\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scrollBackToContent\") })))] })), appState.isLibraryOpen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"layer-ui__sidebar\" }, { children: libraryMenu })))] }));\r\n};\r\nconst areEqual = (prev, next) => {\r\n const getNecessaryObj = (appState) => {\r\n const { suggestedBindings, startBoundElement: boundElement } = appState, ret = __rest(appState, [\"suggestedBindings\", \"startBoundElement\"]);\r\n return ret;\r\n };\r\n const prevAppState = getNecessaryObj(prev.appState);\r\n const nextAppState = getNecessaryObj(next.appState);\r\n const keys = Object.keys(prevAppState);\r\n return (prev.renderTopRightUI === next.renderTopRightUI &&\r\n prev.renderCustomFooter === next.renderCustomFooter &&\r\n prev.langCode === next.langCode &&\r\n prev.elements === next.elements &&\r\n prev.files === next.files &&\r\n keys.every((key) => prevAppState[key] === nextAppState[key]));\r\n};\r\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (react__WEBPACK_IMPORTED_MODULE_2___default().memo(LayerUI, areEqual));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFDRixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQWdDLENBQUM7SUFDdEUsT0FBTyxDQUNMLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsZ0JBQWdCO1FBQy9DLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLENBQUMsa0JBQWtCO1FBQ25ELElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVE7UUFDL0IsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUTtRQUMvQixJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDN0QsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGlFQUFlLGlEQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvTGF5ZXJVSS50c3g/MDg3OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL2FjdGlvbnMvbWFuYWdlclwiO1xuaW1wb3J0IHsgQ0xBU1NFUywgTElCUkFSWV9TSURFQkFSX1dJRFRIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZXhwb3J0Q2FudmFzIH0gZnJvbSBcIi4uL2RhdGFcIjtcbmltcG9ydCB7IGlzVGV4dEVsZW1lbnQsIHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyB9IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgeyBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgTGFuZ3VhZ2UsIHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgY2FsY3VsYXRlU2Nyb2xsQ2VudGVyLCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSBcIi4uL3NjZW5lXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlIH0gZnJvbSBcIi4uL3NjZW5lL3R5cGVzXCI7XG5pbXBvcnQgeyBBcHBQcm9wcywgQXBwU3RhdGUsIEV4Y2FsaWRyYXdQcm9wcywgQmluYXJ5RmlsZXMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IG11dGVGU0Fib3J0RXJyb3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFNlbGVjdGVkU2hhcGVBY3Rpb25zLCBTaGFwZXNTd2l0Y2hlciwgWm9vbUFjdGlvbnMgfSBmcm9tIFwiLi9BY3Rpb25zXCI7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kUGlja2VyQW5kRGFya01vZGVUb2dnbGUgfSBmcm9tIFwiLi9CYWNrZ3JvdW5kUGlja2VyQW5kRGFya01vZGVUb2dnbGVcIjtcbmltcG9ydCBDb2xsYWJCdXR0b24gZnJvbSBcIi4vQ29sbGFiQnV0dG9uXCI7XG5pbXBvcnQgeyBFcnJvckRpYWxvZyB9IGZyb20gXCIuL0Vycm9yRGlhbG9nXCI7XG5pbXBvcnQgeyBFeHBvcnRDQiwgSW1hZ2VFeHBvcnREaWFsb2cgfSBmcm9tIFwiLi9JbWFnZUV4cG9ydERpYWxvZ1wiO1xuaW1wb3J0IHsgRml4ZWRTaWRlQ29udGFpbmVyIH0gZnJvbSBcIi4vRml4ZWRTaWRlQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBIaW50Vmlld2VyIH0gZnJvbSBcIi4vSGludFZpZXdlclwiO1xuaW1wb3J0IHsgSXNsYW5kIH0gZnJvbSBcIi4vSXNsYW5kXCI7XG5pbXBvcnQgeyBMb2FkaW5nTWVzc2FnZSB9IGZyb20gXCIuL0xvYWRpbmdNZXNzYWdlXCI7XG5pbXBvcnQgeyBMb2NrQnV0dG9uIH0gZnJvbSBcIi4vTG9ja0J1dHRvblwiO1xuaW1wb3J0IHsgTW9iaWxlTWVudSB9IGZyb20gXCIuL01vYmlsZU1lbnVcIjtcbmltcG9ydCB7IFBhc3RlQ2hhcnREaWFsb2cgfSBmcm9tIFwiLi9QYXN0ZUNoYXJ0RGlhbG9nXCI7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSBcIi4vU2VjdGlvblwiO1xuaW1wb3J0IHsgSGVscERpYWxvZyB9IGZyb20gXCIuL0hlbHBEaWFsb2dcIjtcbmltcG9ydCBTdGFjayBmcm9tIFwiLi9TdGFja1wiO1xuaW1wb3J0IHsgVXNlckxpc3QgfSBmcm9tIFwiLi9Vc2VyTGlzdFwiO1xuaW1wb3J0IExpYnJhcnksIHsgZGlzdHJpYnV0ZUxpYnJhcnlJdGVtc09uU3F1YXJlR3JpZCB9IGZyb20gXCIuLi9kYXRhL2xpYnJhcnlcIjtcbmltcG9ydCB7IEpTT05FeHBvcnREaWFsb2cgfSBmcm9tIFwiLi9KU09ORXhwb3J0RGlhbG9nXCI7XG5pbXBvcnQgeyBMaWJyYXJ5QnV0dG9uIH0gZnJvbSBcIi4vTGlicmFyeUJ1dHRvblwiO1xuaW1wb3J0IHsgaXNJbWFnZUZpbGVIYW5kbGUgfSBmcm9tIFwiLi4vZGF0YS9ibG9iXCI7XG5pbXBvcnQgeyBMaWJyYXJ5TWVudSB9IGZyb20gXCIuL0xpYnJhcnlNZW51XCI7XG5cbmltcG9ydCBcIi4vTGF5ZXJVSS5zY3NzXCI7XG5pbXBvcnQgXCIuL1Rvb2xiYXIuc2Nzc1wiO1xuaW1wb3J0IHsgUGVuTW9kZUJ1dHRvbiB9IGZyb20gXCIuL1Blbk1vZGVCdXR0b25cIjtcbmltcG9ydCB7IHRyYWNrRXZlbnQgfSBmcm9tIFwiLi4vYW5hbHl0aWNzXCI7XG5pbXBvcnQgeyB1c2VEZXZpY2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9BcHBcIjtcbmltcG9ydCB7IFN0YXRzIH0gZnJvbSBcIi4vU3RhdHNcIjtcbmltcG9ydCB7IGFjdGlvblRvZ2dsZVN0YXRzIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uVG9nZ2xlU3RhdHNcIjtcbmltcG9ydCB7IGFjdGlvblRvZ2dsZVplbk1vZGUgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuXG5pbnRlcmZhY2UgTGF5ZXJVSVByb3BzIHtcbiAgb25Ib21lQnV0dG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICBhY3Rpb25NYW5hZ2VyOiBBY3Rpb25NYW5hZ2VyO1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG4gIGZpbGVzOiBCaW5hcnlGaWxlcztcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw7XG4gIHNldEFwcFN0YXRlOiBSZWFjdC5Db21wb25lbnQ8YW55LCBBcHBTdGF0ZT5bXCJzZXRTdGF0ZVwiXTtcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdO1xuICBvbkNvbGxhYkJ1dHRvbkNsaWNrPzogKCkgPT4gdm9pZDtcbiAgb25Mb2NrVG9nZ2xlOiAoKSA9PiB2b2lkO1xuICBvblBlbk1vZGVUb2dnbGU6ICgpID0+IHZvaWQ7XG4gIG9uSW5zZXJ0RWxlbWVudHM6IChlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10pID0+IHZvaWQ7XG4gIHNob3dFeGl0WmVuTW9kZUJ0bjogYm9vbGVhbjtcbiAgc2hvd1RoZW1lQnRuOiBib29sZWFuO1xuICBsYW5nQ29kZTogTGFuZ3VhZ2VbXCJjb2RlXCJdO1xuICBpc0NvbGxhYm9yYXRpbmc6IGJvb2xlYW47XG4gIHJlbmRlclRvcFJpZ2h0VUk/OiBFeGNhbGlkcmF3UHJvcHNbXCJyZW5kZXJUb3BSaWdodFVJXCJdO1xuICByZW5kZXJDdXN0b21Gb290ZXI/OiBFeGNhbGlkcmF3UHJvcHNbXCJyZW5kZXJGb290ZXJcIl07XG4gIHJlbmRlckN1c3RvbVN0YXRzPzogRXhjYWxpZHJhd1Byb3BzW1wicmVuZGVyQ3VzdG9tU3RhdHNcIl07XG4gIGxpYnJhcnlSZXR1cm5Vcmw6IEV4Y2FsaWRyYXdQcm9wc1tcImxpYnJhcnlSZXR1cm5VcmxcIl07XG4gIFVJT3B0aW9uczogQXBwUHJvcHNbXCJVSU9wdGlvbnNcIl07XG4gIGZvY3VzQ29udGFpbmVyOiAoKSA9PiB2b2lkO1xuICBsaWJyYXJ5OiBMaWJyYXJ5O1xuICBpZDogc3RyaW5nO1xuICBvbkltYWdlQWN0aW9uOiAoZGF0YTogeyBpbnNlcnRPbkNhbnZhc0RpcmVjdGx5OiBib29sZWFuIH0pID0+IHZvaWQ7XG59XG5jb25zdCBMYXllclVJID0gKHtcbiAgb25Ib21lQnV0dG9uQ2xpY2ssXG4gIGFjdGlvbk1hbmFnZXIsXG4gIGFwcFN0YXRlLFxuICBmaWxlcyxcbiAgc2V0QXBwU3RhdGUsXG4gIGNhbnZhcyxcbiAgZWxlbWVudHMsXG4gIG9uQ29sbGFiQnV0dG9uQ2xpY2ssXG4gIG9uTG9ja1RvZ2dsZSxcbiAgb25QZW5Nb2RlVG9nZ2xlLFxuICBvbkluc2VydEVsZW1lbnRzLFxuICBzaG93RXhpdFplbk1vZGVCdG4sXG4gIHNob3dUaGVtZUJ0bixcbiAgaXNDb2xsYWJvcmF0aW5nLFxuICByZW5kZXJUb3BSaWdodFVJLFxuICByZW5kZXJDdXN0b21Gb290ZXIsXG4gIHJlbmRlckN1c3RvbVN0YXRzLFxuICBsaWJyYXJ5UmV0dXJuVXJsLFxuICBVSU9wdGlvbnMsXG4gIGZvY3VzQ29udGFpbmVyLFxuICBsaWJyYXJ5LFxuICBpZCxcbiAgb25JbWFnZUFjdGlvbixcbn06IExheWVyVUlQcm9wcykgPT4ge1xuICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcblxuICBjb25zdCByZW5kZXJKU09ORXhwb3J0RGlhbG9nID0gKCkgPT4ge1xuICAgIGlmICghVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMgfHwgIVVJT3B0aW9ucy5jYW52YXNBY3Rpb25zLmV4cG9ydCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxKU09ORXhwb3J0RGlhbG9nXG4gICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBmaWxlcz17ZmlsZXN9XG4gICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgIGV4cG9ydE9wdHM9e1VJT3B0aW9ucy5jYW52YXNBY3Rpb25zLmV4cG9ydH1cbiAgICAgICAgY2FudmFzPXtjYW52YXN9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVySW1hZ2VFeHBvcnREaWFsb2cgPSAoKSA9PiB7XG4gICAgaWYgKCFVSU9wdGlvbnMuY2FudmFzQWN0aW9ucyB8fCAhVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuc2F2ZUFzSW1hZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZUV4cG9ydGVyID1cbiAgICAgICh0eXBlOiBFeHBvcnRUeXBlKTogRXhwb3J0Q0IgPT5cbiAgICAgIGFzeW5jIChleHBvcnRlZEVsZW1lbnRzKSA9PiB7XG4gICAgICAgIHRyYWNrRXZlbnQoXCJleHBvcnRcIiwgdHlwZSwgXCJ1aVwiKTtcbiAgICAgICAgY29uc3QgZmlsZUhhbmRsZSA9IGF3YWl0IGV4cG9ydENhbnZhcyhcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGV4cG9ydGVkRWxlbWVudHMsXG4gICAgICAgICAgYXBwU3RhdGUsXG4gICAgICAgICAgZmlsZXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhwb3J0QmFja2dyb3VuZDogYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCxcbiAgICAgICAgICAgIG5hbWU6IGFwcFN0YXRlLm5hbWUsXG4gICAgICAgICAgICB2aWV3QmFja2dyb3VuZENvbG9yOiBhcHBTdGF0ZS52aWV3QmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgICAuY2F0Y2gobXV0ZUZTQWJvcnRFcnJvcilcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHNldEFwcFN0YXRlKHsgZXJyb3JNZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBhcHBTdGF0ZS5leHBvcnRFbWJlZFNjZW5lICYmXG4gICAgICAgICAgZmlsZUhhbmRsZSAmJlxuICAgICAgICAgIGlzSW1hZ2VGaWxlSGFuZGxlKGZpbGVIYW5kbGUpXG4gICAgICAgICkge1xuICAgICAgICAgIHNldEFwcFN0YXRlKHsgZmlsZUhhbmRsZSB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8SW1hZ2VFeHBvcnREaWFsb2dcbiAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgb25FeHBvcnRUb1BuZz17Y3JlYXRlRXhwb3J0ZXIoXCJwbmdcIil9XG4gICAgICAgIG9uRXhwb3J0VG9Tdmc9e2NyZWF0ZUV4cG9ydGVyKFwic3ZnXCIpfVxuICAgICAgICBvbkV4cG9ydFRvQ2xpcGJvYXJkPXtjcmVhdGVFeHBvcnRlcihcImNsaXBib2FyZFwiKX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJWaWV3TW9kZUNhbnZhc0FjdGlvbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTZWN0aW9uXG4gICAgICAgIGhlYWRpbmc9XCJjYW52YXNBY3Rpb25zXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgXCJ0cmFuc2l0aW9uLWxlZnRcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICB7LyogdGhlIHpJbmRleCBlbnN1cmVzIHRoaXMgbWVudSBoYXMgaGlnaGVyIHN0YWNraW5nIG9yZGVyLFxuICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNDQ1ICovfVxuICAgICAgICA8SXNsYW5kIHBhZGRpbmc9ezJ9IHN0eWxlPXt7IHpJbmRleDogMSB9fT5cbiAgICAgICAgICA8U3RhY2suQ29sIGdhcD17NH0+XG4gICAgICAgICAgICA8U3RhY2suUm93IGdhcD17MX0ganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIHtyZW5kZXJKU09ORXhwb3J0RGlhbG9nKCl9XG4gICAgICAgICAgICAgIHtyZW5kZXJJbWFnZUV4cG9ydERpYWxvZygpfVxuICAgICAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICAgIDwvSXNsYW5kPlxuICAgICAgPC9TZWN0aW9uPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ2FudmFzQWN0aW9ucyA9ICgpID0+IChcbiAgICA8U2VjdGlvblxuICAgICAgaGVhZGluZz1cImNhbnZhc0FjdGlvbnNcIlxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgIFwidHJhbnNpdGlvbi1sZWZ0XCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgfSl9XG4gICAgPlxuICAgICAgey8qIHRoZSB6SW5kZXggZW5zdXJlcyB0aGlzIG1lbnUgaGFzIGhpZ2hlciBzdGFja2luZyBvcmRlcixcbiAgICAgICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXhjYWxpZHJhdy9leGNhbGlkcmF3L3B1bGwvMTQ0NSAqL31cbiAgICAgIDxJc2xhbmQgcGFkZGluZz17Mn0gc3R5bGU9e3sgekluZGV4OiAxIH19PlxuICAgICAgICA8U3RhY2suQ29sIGdhcD17NH0+XG4gICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezN9IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2xlYXJDYW52YXNcIil9XG4gICAgICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJsb2FkU2NlbmVcIil9XG4gICAgICAgICAgICB7cmVuZGVySlNPTkV4cG9ydERpYWxvZygpfVxuICAgICAgICAgICAge3JlbmRlckltYWdlRXhwb3J0RGlhbG9nKCl9XG4gICAgICAgICAgICB7b25Db2xsYWJCdXR0b25DbGljayAmJiAoXG4gICAgICAgICAgICAgIDxDb2xsYWJCdXR0b25cbiAgICAgICAgICAgICAgICBpc0NvbGxhYm9yYXRpbmc9e2lzQ29sbGFib3JhdGluZ31cbiAgICAgICAgICAgICAgICBjb2xsYWJvcmF0b3JDb3VudD17YXBwU3RhdGUuY29sbGFib3JhdG9ycy5zaXplfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uQ29sbGFiQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICAgIDxCYWNrZ3JvdW5kUGlja2VyQW5kRGFya01vZGVUb2dnbGVcbiAgICAgICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICBzaG93VGhlbWVCdG49e3Nob3dUaGVtZUJ0bn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHthcHBTdGF0ZS5maWxlSGFuZGxlICYmIChcbiAgICAgICAgICAgIDw+e2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwic2F2ZVRvQWN0aXZlRmlsZVwiKX08Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1N0YWNrLkNvbD5cbiAgICAgIDwvSXNsYW5kPlxuICAgIDwvU2VjdGlvbj5cbiAgKTtcblxuICBjb25zdCByZW5kZXJTZWxlY3RlZFNoYXBlQWN0aW9ucyA9ICgpID0+IChcbiAgICA8U2VjdGlvblxuICAgICAgaGVhZGluZz1cInNlbGVjdGVkU2hhcGVBY3Rpb25zXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xzeChcInplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICBcInRyYW5zaXRpb24tbGVmdFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIDxJc2xhbmRcbiAgICAgICAgY2xhc3NOYW1lPXtDTEFTU0VTLlNIQVBFX0FDVElPTlNfTUVOVX1cbiAgICAgICAgcGFkZGluZz17Mn1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcmZsb3cgc28gc3VidHJhY3RpbmcgMjAwXG4gICAgICAgICAgLy8gd2hpY2ggaXMgYXBwcm94aW1hdGVseSBoZWlnaHQgb2Ygem9vbSBmb290ZXIgYW5kIHRvcCBsZWZ0IG1lbnUgaXRlbXMgd2l0aCBzb21lIGJ1ZmZlclxuICAgICAgICAgIC8vIGlmIGFjdGl2ZSBmaWxlIG5hbWUgaXMgZGlzcGxheWVkLCBzdWJ0cmFjdGluZyAyNDggdG8gYWNjb3VudCBmb3IgaXRzIGhlaWdodFxuICAgICAgICAgIG1heEhlaWdodDogYCR7YXBwU3RhdGUuaGVpZ2h0IC0gKGFwcFN0YXRlLmZpbGVIYW5kbGUgPyAyNDggOiAyMDApfXB4YCxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFNlbGVjdGVkU2hhcGVBY3Rpb25zXG4gICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICByZW5kZXJBY3Rpb249e2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9ufVxuICAgICAgICAgIGFjdGl2ZVRvb2w9e2FwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZX1cbiAgICAgICAgLz5cbiAgICAgIDwvSXNsYW5kPlxuICAgIDwvU2VjdGlvbj5cbiAgKTtcblxuICBjb25zdCBjbG9zZUxpYnJhcnkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgaXNEaWFsb2dPcGVuID0gISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLkRpYWxvZ1wiKTtcblxuICAgIC8vIFByZXZlbnQgY2xvc2luZyBpZiBhbnkgZGlhbG9nIGlzIG9wZW5cbiAgICBpZiAoaXNEaWFsb2dPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldEFwcFN0YXRlKHsgaXNMaWJyYXJ5T3BlbjogZmFsc2UgfSk7XG4gIH0sIFtzZXRBcHBTdGF0ZV0pO1xuXG4gIGNvbnN0IGRlc2VsZWN0SXRlbXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0QXBwU3RhdGUoe1xuICAgICAgc2VsZWN0ZWRFbGVtZW50SWRzOiB7fSxcbiAgICAgIHNlbGVjdGVkR3JvdXBJZHM6IHt9LFxuICAgIH0pO1xuICB9LCBbc2V0QXBwU3RhdGVdKTtcblxuICBjb25zdCBsaWJyYXJ5TWVudSA9IGFwcFN0YXRlLmlzTGlicmFyeU9wZW4gPyAoXG4gICAgPExpYnJhcnlNZW51XG4gICAgICBwZW5kaW5nRWxlbWVudHM9e2dldFNlbGVjdGVkRWxlbWVudHMoZWxlbWVudHMsIGFwcFN0YXRlLCB0cnVlKX1cbiAgICAgIG9uQ2xvc2U9e2Nsb3NlTGlicmFyeX1cbiAgICAgIG9uSW5zZXJ0TGlicmFyeUl0ZW1zPXsobGlicmFyeUl0ZW1zKSA9PiB7XG4gICAgICAgIG9uSW5zZXJ0RWxlbWVudHMoZGlzdHJpYnV0ZUxpYnJhcnlJdGVtc09uU3F1YXJlR3JpZChsaWJyYXJ5SXRlbXMpKTtcbiAgICAgIH19XG4gICAgICBvbkFkZFRvTGlicmFyeT17ZGVzZWxlY3RJdGVtc31cbiAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgIGxpYnJhcnlSZXR1cm5Vcmw9e2xpYnJhcnlSZXR1cm5Vcmx9XG4gICAgICBmb2N1c0NvbnRhaW5lcj17Zm9jdXNDb250YWluZXJ9XG4gICAgICBsaWJyYXJ5PXtsaWJyYXJ5fVxuICAgICAgdGhlbWU9e2FwcFN0YXRlLnRoZW1lfVxuICAgICAgZmlsZXM9e2ZpbGVzfVxuICAgICAgaWQ9e2lkfVxuICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgIC8+XG4gICkgOiBudWxsO1xuXG4gIGNvbnN0IHJlbmRlckZpeGVkU2lkZUNvbnRhaW5lciA9ICgpID0+IHtcbiAgICBjb25zdCBzaG91bGRSZW5kZXJTZWxlY3RlZFNoYXBlQWN0aW9ucyA9IHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyhcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgZWxlbWVudHMsXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Rml4ZWRTaWRlQ29udGFpbmVyIHNpZGU9XCJ0b3BcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJBcHAtbWVudSBBcHAtbWVudV90b3BcIj5cbiAgICAgICAgICA8U3RhY2suQ29sXG4gICAgICAgICAgICBnYXA9ezR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goe1xuICAgICAgICAgICAgICBcImRpc2FibGUtcG9pbnRlckV2ZW50c1wiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtVSU9wdGlvbnMuY2FudmFzQWN0aW9ucyAmJlxuICAgICAgICAgICAgICAoYXBwU3RhdGUudmlld01vZGVFbmFibGVkXG4gICAgICAgICAgICAgICAgPyByZW5kZXJWaWV3TW9kZUNhbnZhc0FjdGlvbnMoKVxuICAgICAgICAgICAgICAgIDogcmVuZGVyQ2FudmFzQWN0aW9ucygpKX1cbiAgICAgICAgICAgIHtzaG91bGRSZW5kZXJTZWxlY3RlZFNoYXBlQWN0aW9ucyAmJiByZW5kZXJTZWxlY3RlZFNoYXBlQWN0aW9ucygpfVxuICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICAgIHshYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmIChcbiAgICAgICAgICAgIDxTZWN0aW9uIGhlYWRpbmc9XCJzaGFwZXNcIj5cbiAgICAgICAgICAgICAgeyhoZWFkaW5nOiBSZWFjdC5SZWFjdE5vZGUpID0+IChcbiAgICAgICAgICAgICAgICA8U3RhY2suQ29sIGdhcD17NH0gYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgICAgICAgPFN0YWNrLlJvd1xuICAgICAgICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcIkFwcC10b29sYmFyLWNvbnRhaW5lclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJ6ZW4tbW9kZVwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxQZW5Nb2RlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgemVuTW9kZUVuYWJsZWQ9e2FwcFN0YXRlLnplbk1vZGVFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLnBlbk1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uUGVuTW9kZVRvZ2dsZX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIucGVuTW9kZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICBwZW5EZXRlY3RlZD17YXBwU3RhdGUucGVuRGV0ZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxMb2NrQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgemVuTW9kZUVuYWJsZWQ9e2FwcFN0YXRlLnplbk1vZGVFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLmFjdGl2ZVRvb2wubG9ja2VkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBvbkxvY2tUb2dnbGUoKX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIubG9ja1wiKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPElzbGFuZFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiQXBwLXRvb2xiYXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ6ZW4tbW9kZVwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxIaW50Vmlld2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBpc01vYmlsZT17ZGV2aWNlLmlzTW9iaWxlfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAge2hlYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNoYXBlc1N3aXRjaGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzPXtjYW52YXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2w9e2FwcFN0YXRlLmFjdGl2ZVRvb2x9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25JbWFnZUFjdGlvbj17KHsgcG9pbnRlclR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1hZ2VBY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogcG9pbnRlclR5cGUgIT09IFwibW91c2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgICAgICAgICAgICAgIDwvSXNsYW5kPlxuICAgICAgICAgICAgICAgICAgICA8TGlicmFyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgICAgICA8L1N0YWNrLkNvbD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fdG9wLXJpZ2h0IHplbi1tb2RlLXRyYW5zaXRpb25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwidHJhbnNpdGlvbi1yaWdodFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFVzZXJMaXN0XG4gICAgICAgICAgICAgIGNvbGxhYm9yYXRvcnM9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnN9XG4gICAgICAgICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcInplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgICAgICAgIFwidHJhbnNpdGlvbi1yaWdodFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIGxheW91dD1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7cmVuZGVyVG9wUmlnaHRVST8uKGRldmljZS5pc01vYmlsZSwgYXBwU3RhdGUsIGNhbnZhcyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9GaXhlZFNpZGVDb250YWluZXI+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJCb3R0b21BcHBNZW51ID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8Zm9vdGVyXG4gICAgICAgIHJvbGU9XCJjb250ZW50aW5mb1wiXG4gICAgICAgIGNsYXNzTmFtZT1cImxheWVyLXVpX193cmFwcGVyX19mb290ZXIgQXBwLW1lbnUgQXBwLW1lbnVfYm90dG9tXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0IHplbi1tb2RlLXRyYW5zaXRpb25cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQtLXRyYW5zaXRpb24tbGVmdFwiOlxuICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezJ9PlxuICAgICAgICAgICAgPFNlY3Rpb24gaGVhZGluZz1cImNhbnZhc0FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPElzbGFuZCBwYWRkaW5nPXsxfT5cbiAgICAgICAgICAgICAgICA8Wm9vbUFjdGlvbnNcbiAgICAgICAgICAgICAgICAgIHJlbmRlckFjdGlvbj17YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb259XG4gICAgICAgICAgICAgICAgICB6b29tPXthcHBTdGF0ZS56b29tfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvSXNsYW5kPlxuICAgICAgICAgICAgICB7IWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwidW5kby1yZWRvLWJ1dHRvbnMgemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQtLXRyYW5zaXRpb24tYm90dG9tXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInVuZG9cIiwgeyBzaXplOiBcInNtYWxsXCIgfSl9XG4gICAgICAgICAgICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInJlZG9cIiwgeyBzaXplOiBcInNtYWxsXCIgfSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJlcmFzZXItYnV0dG9ucyB6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1sZWZ0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImVyYXNlclwiLCB7IHNpemU6IFwic21hbGxcIiB9KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7IWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJlxuICAgICAgICAgICAgICAgIGFwcFN0YXRlLm11bHRpRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIGRldmljZS5pc1RvdWNoU2NyZWVuICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiZmluYWxpemUtYnV0dG9uIHplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWxlZnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiZmluYWxpemVcIiwgeyBzaXplOiBcInNtYWxsXCIgfSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1jZW50ZXIgemVuLW1vZGUtdHJhbnNpdGlvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1ib3R0b21cIjpcbiAgICAgICAgICAgICAgICBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtyZW5kZXJDdXN0b21Gb290ZXI/LihmYWxzZSwgYXBwU3RhdGUpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1yaWdodCB6ZW4tbW9kZS10cmFuc2l0aW9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwidHJhbnNpdGlvbi1yaWdodCBkaXNhYmxlLXBvaW50ZXJFdmVudHNcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJ0b2dnbGVTaG9ydGN1dHNcIil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiZGlzYWJsZS16ZW4tbW9kZVwiLCB7XG4gICAgICAgICAgICBcImRpc2FibGUtemVuLW1vZGUtLXZpc2libGVcIjogc2hvd0V4aXRaZW5Nb2RlQnRuLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGFjdGlvbk1hbmFnZXIuZXhlY3V0ZUFjdGlvbihhY3Rpb25Ub2dnbGVaZW5Nb2RlKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwiYnV0dG9ucy5leGl0WmVuTW9kZVwiKX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Zvb3Rlcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGRpYWxvZ3MgPSAoXG4gICAgPD5cbiAgICAgIHthcHBTdGF0ZS5pc0xvYWRpbmcgJiYgPExvYWRpbmdNZXNzYWdlIGRlbGF5PXsyNTB9IC8+fVxuICAgICAge2FwcFN0YXRlLmVycm9yTWVzc2FnZSAmJiAoXG4gICAgICAgIDxFcnJvckRpYWxvZ1xuICAgICAgICAgIG1lc3NhZ2U9e2FwcFN0YXRlLmVycm9yTWVzc2FnZX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRBcHBTdGF0ZSh7IGVycm9yTWVzc2FnZTogbnVsbCB9KX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7YXBwU3RhdGUuc2hvd0hlbHBEaWFsb2cgJiYgKFxuICAgICAgICA8SGVscERpYWxvZ1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldEFwcFN0YXRlKHsgc2hvd0hlbHBEaWFsb2c6IGZhbHNlIH0pO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge2FwcFN0YXRlLnBhc3RlRGlhbG9nLnNob3duICYmIChcbiAgICAgICAgPFBhc3RlQ2hhcnREaWFsb2dcbiAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgIG9uSW5zZXJ0Q2hhcnQ9e29uSW5zZXJ0RWxlbWVudHN9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT5cbiAgICAgICAgICAgIHNldEFwcFN0YXRlKHtcbiAgICAgICAgICAgICAgcGFzdGVEaWFsb2c6IHsgc2hvd246IGZhbHNlLCBkYXRhOiBudWxsIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG5cbiAgY29uc3QgcmVuZGVyU3RhdHMgPSAoKSA9PiB7XG4gICAgaWYgKCFhcHBTdGF0ZS5zaG93U3RhdHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPFN0YXRzXG4gICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICBhY3Rpb25NYW5hZ2VyLmV4ZWN1dGVBY3Rpb24oYWN0aW9uVG9nZ2xlU3RhdHMpO1xuICAgICAgICB9fVxuICAgICAgICByZW5kZXJDdXN0b21TdGF0cz17cmVuZGVyQ3VzdG9tU3RhdHN9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIGRldmljZS5pc01vYmlsZSA/IChcbiAgICA8PlxuICAgICAge2RpYWxvZ3N9XG4gICAgICA8TW9iaWxlTWVudVxuICAgICAgICBvbkhvbWVCdXR0b25DbGljaz17b25Ib21lQnV0dG9uQ2xpY2t9XG4gICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICBsaWJyYXJ5TWVudT17bGlicmFyeU1lbnV9XG4gICAgICAgIHJlbmRlckpTT05FeHBvcnREaWFsb2c9e3JlbmRlckpTT05FeHBvcnREaWFsb2d9XG4gICAgICAgIHJlbmRlckltYWdlRXhwb3J0RGlhbG9nPXtyZW5kZXJJbWFnZUV4cG9ydERpYWxvZ31cbiAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICBvbkNvbGxhYkJ1dHRvbkNsaWNrPXtvbkNvbGxhYkJ1dHRvbkNsaWNrfVxuICAgICAgICBvbkxvY2tUb2dnbGU9eygpID0+IG9uTG9ja1RvZ2dsZSgpfVxuICAgICAgICBvblBlbk1vZGVUb2dnbGU9e29uUGVuTW9kZVRvZ2dsZX1cbiAgICAgICAgY2FudmFzPXtjYW52YXN9XG4gICAgICAgIGlzQ29sbGFib3JhdGluZz17aXNDb2xsYWJvcmF0aW5nfVxuICAgICAgICByZW5kZXJDdXN0b21Gb290ZXI9e3JlbmRlckN1c3RvbUZvb3Rlcn1cbiAgICAgICAgc2hvd1RoZW1lQnRuPXtzaG93VGhlbWVCdG59XG4gICAgICAgIG9uSW1hZ2VBY3Rpb249e29uSW1hZ2VBY3Rpb259XG4gICAgICAgIHJlbmRlclRvcFJpZ2h0VUk9e3JlbmRlclRvcFJpZ2h0VUl9XG4gICAgICAgIHJlbmRlclN0YXRzPXtyZW5kZXJTdGF0c31cbiAgICAgICAgVUlPcHRpb25zPXtVSU9wdGlvbnN9XG4gICAgICAvPlxuICAgIDwvPlxuICApIDogKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xzeChcImxheWVyLXVpX193cmFwcGVyXCIsIHtcbiAgICAgICAgICBcImRpc2FibGUtcG9pbnRlckV2ZW50c1wiOlxuICAgICAgICAgICAgYXBwU3RhdGUuZHJhZ2dpbmdFbGVtZW50IHx8XG4gICAgICAgICAgICBhcHBTdGF0ZS5yZXNpemluZ0VsZW1lbnQgfHxcbiAgICAgICAgICAgIChhcHBTdGF0ZS5lZGl0aW5nRWxlbWVudCAmJlxuICAgICAgICAgICAgICAhaXNUZXh0RWxlbWVudChhcHBTdGF0ZS5lZGl0aW5nRWxlbWVudCkpLFxuICAgICAgICB9KX1cbiAgICAgICAgc3R5bGU9e1xuICAgICAgICAgIGFwcFN0YXRlLmlzTGlicmFyeU9wZW4gJiZcbiAgICAgICAgICBhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkICYmXG4gICAgICAgICAgZGV2aWNlLmNhbkRldmljZUZpdFNpZGViYXJcbiAgICAgICAgICAgID8geyB3aWR0aDogYGNhbGMoMTAwJSAtICR7TElCUkFSWV9TSURFQkFSX1dJRFRIfXB4KWAgfVxuICAgICAgICAgICAgOiB7fVxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIHtkaWFsb2dzfVxuICAgICAgICB7cmVuZGVyRml4ZWRTaWRlQ29udGFpbmVyKCl9XG4gICAgICAgIHtyZW5kZXJCb3R0b21BcHBNZW51KCl9XG4gICAgICAgIHtyZW5kZXJTdGF0cygpfVxuICAgICAgICB7YXBwU3RhdGUuc2Nyb2xsZWRPdXRzaWRlICYmIChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzY3JvbGwtYmFjay10by1jb250ZW50XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoe1xuICAgICAgICAgICAgICAgIC4uLmNhbGN1bGF0ZVNjcm9sbENlbnRlcihlbGVtZW50cywgYXBwU3RhdGUsIGNhbnZhcyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dChcImJ1dHRvbnMuc2Nyb2xsQmFja1RvQ29udGVudFwiKX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAge2FwcFN0YXRlLmlzTGlicmFyeU9wZW4gJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxheWVyLXVpX19zaWRlYmFyXCI+e2xpYnJhcnlNZW51fTwvZGl2PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmNvbnN0IGFyZUVxdWFsID0gKHByZXY6IExheWVyVUlQcm9wcywgbmV4dDogTGF5ZXJVSVByb3BzKSA9PiB7XG4gIGNvbnN0IGdldE5lY2Vzc2FyeU9iaiA9IChhcHBTdGF0ZTogQXBwU3RhdGUpOiBQYXJ0aWFsPEFwcFN0YXRlPiA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3VnZ2VzdGVkQmluZGluZ3MsXG4gICAgICBzdGFydEJvdW5kRWxlbWVudDogYm91bmRFbGVtZW50LFxuICAgICAgLi4ucmV0XG4gICAgfSA9IGFwcFN0YXRlO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIGNvbnN0IHByZXZBcHBTdGF0ZSA9IGdldE5lY2Vzc2FyeU9iaihwcmV2LmFwcFN0YXRlKTtcbiAgY29uc3QgbmV4dEFwcFN0YXRlID0gZ2V0TmVjZXNzYXJ5T2JqKG5leHQuYXBwU3RhdGUpO1xuXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcmV2QXBwU3RhdGUpIGFzIChrZXlvZiBQYXJ0aWFsPEFwcFN0YXRlPilbXTtcbiAgcmV0dXJuIChcbiAgICBwcmV2LnJlbmRlclRvcFJpZ2h0VUkgPT09IG5leHQucmVuZGVyVG9wUmlnaHRVSSAmJlxuICAgIHByZXYucmVuZGVyQ3VzdG9tRm9vdGVyID09PSBuZXh0LnJlbmRlckN1c3RvbUZvb3RlciAmJlxuICAgIHByZXYubGFuZ0NvZGUgPT09IG5leHQubGFuZ0NvZGUgJiZcbiAgICBwcmV2LmVsZW1lbnRzID09PSBuZXh0LmVsZW1lbnRzICYmXG4gICAgcHJldi5maWxlcyA9PT0gbmV4dC5maWxlcyAmJlxuICAgIGtleXMuZXZlcnkoKGtleSkgPT4gcHJldkFwcFN0YXRlW2tleV0gPT09IG5leHRBcHBTdGF0ZVtrZXldKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3QubWVtbyhMYXllclVJLCBhcmVFcXVhbCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/LayerUI.tsx\n");
2125
+ 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 react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data */ \"../../data/index.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./BackgroundPickerAndDarkModeToggle */ \"../../components/BackgroundPickerAndDarkModeToggle.tsx\");\n/* harmony import */ var _CollabButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./CollabButton */ \"../../components/CollabButton.tsx\");\n/* harmony import */ var _ErrorDialog__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ErrorDialog */ \"../../components/ErrorDialog.tsx\");\n/* harmony import */ var _ImageExportDialog__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ImageExportDialog */ \"../../components/ImageExportDialog.tsx\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _LoadingMessage__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./LoadingMessage */ \"../../components/LoadingMessage.tsx\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _MobileMenu__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./MobileMenu */ \"../../components/MobileMenu.tsx\");\n/* harmony import */ var _PasteChartDialog__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./PasteChartDialog */ \"../../components/PasteChartDialog.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _HelpDialog__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./HelpDialog */ \"../../components/HelpDialog.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _data_library__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../data/library */ \"../../data/library.ts\");\n/* harmony import */ var _JSONExportDialog__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./JSONExportDialog */ \"../../components/JSONExportDialog.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _LibraryMenu__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./LibraryMenu */ \"../../components/LibraryMenu.tsx\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./LayerUI.scss */ \"../../components/LayerUI.scss\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(_LayerUI_scss__WEBPACK_IMPORTED_MODULE_30__);\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./Toolbar.scss */ \"../../components/Toolbar.scss\");\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(_Toolbar_scss__WEBPACK_IMPORTED_MODULE_31__);\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../components/App */ \"../../components/App.tsx\");\n/* harmony import */ var _Stats__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./Stats */ \"../../components/Stats.tsx\");\n/* harmony import */ var _actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../actions/actionToggleStats */ \"../../actions/actionToggleStats.tsx\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../actions */ \"../../actions/index.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\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\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\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\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 LayerUI = ({ onHomeButtonClick, actionManager, appState, files, setAppState, canvas, elements, onCollabButtonClick, onLockToggle, onPenModeToggle, onInsertElements, showExitZenModeBtn, showThemeBtn, isCollaborating, renderTopRightUI, renderCustomFooter, renderCustomStats, libraryReturnUrl, UIOptions, focusContainer, library, id, onImageAction, }) => {\r\n const device = (0,_components_App__WEBPACK_IMPORTED_MODULE_34__.useDevice)();\r\n const renderJSONExportDialog = () => {\r\n if (!UIOptions.canvasActions || !UIOptions.canvasActions.export) {\r\n return null;\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_JSONExportDialog__WEBPACK_IMPORTED_MODULE_26__.JSONExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, exportOpts: UIOptions.canvasActions.export, canvas: canvas }));\r\n };\r\n const renderImageExportDialog = () => {\r\n if (!UIOptions.canvasActions || !UIOptions.canvasActions.saveAsImage) {\r\n return null;\r\n }\r\n const createExporter = (type) => (exportedElements) => __awaiter(void 0, void 0, void 0, function* () {\r\n (0,_analytics__WEBPACK_IMPORTED_MODULE_33__.trackEvent)(\"export\", type, \"ui\");\r\n const fileHandle = yield (0,_data__WEBPACK_IMPORTED_MODULE_4__.exportCanvas)(type, exportedElements, appState, files, {\r\n exportBackground: appState.exportBackground,\r\n name: appState.name,\r\n viewBackgroundColor: appState.viewBackgroundColor,\r\n })\r\n .catch(_utils__WEBPACK_IMPORTED_MODULE_8__.muteFSAbortError)\r\n .catch((error) => {\r\n console.error(error);\r\n setAppState({ errorMessage: error.message });\r\n });\r\n if (appState.exportEmbedScene &&\r\n fileHandle &&\r\n (0,_data_blob__WEBPACK_IMPORTED_MODULE_28__.isImageFileHandle)(fileHandle)) {\r\n setAppState({ fileHandle });\r\n }\r\n });\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ImageExportDialog__WEBPACK_IMPORTED_MODULE_13__.ImageExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, onExportToPng: createExporter(\"png\"), onExportToSvg: createExporter(\"svg\"), onExportToClipboard: createExporter(\"clipboard\") }));\r\n };\r\n const renderViewModeCanvasActions = () => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\r\n \"transition-left\": appState.zenModeEnabled,\r\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 2, style: { zIndex: 1 } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, justifyContent: \"space-between\" }, { children: [renderJSONExportDialog(), renderImageExportDialog()] })) })) })) })));\r\n };\r\n const renderCanvasActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\r\n \"transition-left\": appState.zenModeEnabled,\r\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 2, style: { zIndex: 1 } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4 }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 3, justifyContent: \"space-between\" }, { children: [actionManager.renderAction(\"clearCanvas\"), actionManager.renderAction(\"loadScene\"), renderJSONExportDialog(), renderImageExportDialog(), onCollabButtonClick && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CollabButton__WEBPACK_IMPORTED_MODULE_11__[\"default\"], { isCollaborating: isCollaborating, collaboratorCount: appState.collaborators.size, onClick: onCollabButtonClick }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_10__.BackgroundPickerAndDarkModeToggle, { actionManager: actionManager, appState: appState, setAppState: setAppState, showThemeBtn: showThemeBtn }), appState.fileHandle && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: actionManager.renderAction(\"saveToActiveFile\") }))] })) })) })));\r\n const renderSelectedShapeActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"selectedShapeActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\r\n \"transition-left\": appState.zenModeEnabled,\r\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ className: _constants__WEBPACK_IMPORTED_MODULE_3__.CLASSES.SHAPE_ACTIONS_MENU, padding: 2, style: {\r\n // we want to make sure this doesn't overflow so subtracting 200\r\n // which is approximately height of zoom footer and top left menu items with some buffer\r\n // if active file name is displayed, subtracting 248 to account for its height\r\n maxHeight: `${appState.height - (appState.fileHandle ? 248 : 200)}px`,\r\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction, activeTool: appState.activeTool.type }) })) })));\r\n const closeLibrary = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\r\n const isDialogOpen = !!document.querySelector(\".Dialog\");\r\n // Prevent closing if any dialog is open\r\n if (isDialogOpen) {\r\n return;\r\n }\r\n setAppState({ isLibraryOpen: false });\r\n }, [setAppState]);\r\n const deselectItems = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\r\n setAppState({\r\n selectedElementIds: {},\r\n selectedGroupIds: {},\r\n });\r\n }, [setAppState]);\r\n const libraryMenu = appState.isLibraryOpen ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenu__WEBPACK_IMPORTED_MODULE_29__.LibraryMenu, { pendingElements: (0,_scene__WEBPACK_IMPORTED_MODULE_7__.getSelectedElements)(elements, appState, true), onClose: closeLibrary, onInsertLibraryItems: (libraryItems) => {\r\n onInsertElements((0,_data_library__WEBPACK_IMPORTED_MODULE_25__.distributeLibraryItemsOnSquareGrid)(libraryItems));\r\n }, onAddToLibrary: deselectItems, setAppState: setAppState, libraryReturnUrl: libraryReturnUrl, focusContainer: focusContainer, library: library, theme: appState.theme, files: files, id: id, appState: appState })) : null;\r\n const renderFixedSideContainer = () => {\r\n const shouldRenderSelectedShapeActions = (0,_element__WEBPACK_IMPORTED_MODULE_5__.showSelectedShapeActions)(appState, elements);\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_14__.FixedSideContainer, Object.assign({ side: \"top\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-menu App-menu_top\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\r\n \"disable-pointerEvents\": appState.zenModeEnabled,\r\n }) }, { children: [UIOptions.canvasActions &&\r\n (appState.viewModeEnabled\r\n ? renderViewModeCanvasActions()\r\n : renderCanvasActions()), shouldRenderSelectedShapeActions && renderSelectedShapeActions()] })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4, align: \"start\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar-container\", {\r\n \"zen-mode\": appState.zenModeEnabled,\r\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_32__.PenModeButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.penMode\"), penDetected: appState.penDetected }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_18__.LockButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.activeTool.locked, onChange: () => onLockToggle(), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.lock\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar\", {\r\n \"zen-mode\": appState.zenModeEnabled,\r\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_15__.HintViewer, { appState: appState, elements: elements, isMobile: device.isMobile }), heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\r\n onImageAction({\r\n insertOnCanvasDirectly: pointerType !== \"mouse\",\r\n });\r\n } }) }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_27__.LibraryButton, { appState: appState, setAppState: setAppState })] })) }))) }))), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__top-right zen-mode-transition\", {\r\n \"transition-right\": appState.zenModeEnabled,\r\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_24__.UserList, { collaborators: appState.collaborators, actionManager: actionManager, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\r\n \"transition-right\": appState.zenModeEnabled,\r\n }), layout: \"vertical\" }), renderTopRightUI === null || renderTopRightUI === void 0 ? void 0 : renderTopRightUI(device.isMobile, appState, canvas)] }))] })) })));\r\n };\r\n const renderBottomAppMenu = () => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ role: \"contentinfo\", className: \"layer-ui__wrapper__footer App-menu App-menu_bottom\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-left zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\r\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 2 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ZoomActions, { renderAction: actionManager.renderAction, zoom: appState.zoom }) })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"undo-redo-buttons zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\r\n }) }, { children: [actionManager.renderAction(\"undo\", { size: \"small\" }), actionManager.renderAction(\"redo\", { size: \"small\" })] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"eraser-buttons zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\r\n }) }, { children: actionManager.renderAction(\"eraser\", { size: \"small\" }) }))] })), !appState.viewModeEnabled &&\r\n appState.multiElement &&\r\n device.isTouchScreen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"finalize-button zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\r\n }) }, { children: actionManager.renderAction(\"finalize\", { size: \"small\" }) })))] })) })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-center zen-mode-transition\", {\r\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\r\n }) }, { children: renderCustomFooter === null || renderCustomFooter === void 0 ? void 0 : renderCustomFooter(false, appState) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-right zen-mode-transition\", {\r\n \"transition-right disable-pointerEvents\": appState.zenModeEnabled,\r\n }) }, { children: actionManager.renderAction(\"toggleShortcuts\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"disable-zen-mode\", {\r\n \"disable-zen-mode--visible\": showExitZenModeBtn,\r\n }), onClick: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_37__.actionToggleZenMode) }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exitZenMode\") }))] })));\r\n };\r\n const dialogs = ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [appState.isLoading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LoadingMessage__WEBPACK_IMPORTED_MODULE_17__.LoadingMessage, { delay: 250 }), appState.errorMessage && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ErrorDialog__WEBPACK_IMPORTED_MODULE_12__.ErrorDialog, { message: appState.errorMessage, onClose: () => setAppState({ errorMessage: null }) })), appState.showHelpDialog && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HelpDialog__WEBPACK_IMPORTED_MODULE_22__.HelpDialog, { onClose: () => {\r\n setAppState({ showHelpDialog: false });\r\n } })), appState.pasteDialog.shown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PasteChartDialog__WEBPACK_IMPORTED_MODULE_20__.PasteChartDialog, { setAppState: setAppState, appState: appState, onInsertChart: onInsertElements, onClose: () => setAppState({\r\n pasteDialog: { shown: false, data: null },\r\n }) }))] }));\r\n const renderStats = () => {\r\n if (!appState.showStats) {\r\n return null;\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stats__WEBPACK_IMPORTED_MODULE_35__.Stats, { appState: appState, setAppState: setAppState, elements: elements, onClose: () => {\r\n actionManager.executeAction(_actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_36__.actionToggleStats);\r\n }, renderCustomStats: renderCustomStats }));\r\n };\r\n return device.isMobile ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [dialogs, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MobileMenu__WEBPACK_IMPORTED_MODULE_19__.MobileMenu, { onHomeButtonClick: onHomeButtonClick, appState: appState, elements: elements, actionManager: actionManager, libraryMenu: libraryMenu, renderJSONExportDialog: renderJSONExportDialog, renderImageExportDialog: renderImageExportDialog, setAppState: setAppState, onCollabButtonClick: onCollabButtonClick, onLockToggle: () => onLockToggle(), onPenModeToggle: onPenModeToggle, canvas: canvas, isCollaborating: isCollaborating, renderCustomFooter: renderCustomFooter, showThemeBtn: showThemeBtn, onImageAction: onImageAction, renderTopRightUI: renderTopRightUI, renderStats: renderStats, UIOptions: UIOptions })] })) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper\", {\r\n \"disable-pointerEvents\": appState.draggingElement ||\r\n appState.resizingElement ||\r\n (appState.editingElement &&\r\n !(0,_element__WEBPACK_IMPORTED_MODULE_5__.isTextElement)(appState.editingElement)),\r\n }), style: appState.isLibraryOpen &&\r\n appState.isLibraryMenuDocked &&\r\n device.canDeviceFitSidebar\r\n ? { width: `calc(100% - ${_constants__WEBPACK_IMPORTED_MODULE_3__.LIBRARY_SIDEBAR_WIDTH}px)` }\r\n : {} }, { children: [dialogs, renderFixedSideContainer(), renderBottomAppMenu(), renderStats(), appState.scrolledOutside && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\r\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_7__.calculateScrollCenter)(elements, appState, canvas)));\r\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scrollBackToContent\") })))] })), appState.isLibraryOpen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"layer-ui__sidebar\" }, { children: libraryMenu })))] }));\r\n};\r\nconst areEqual = (prev, next) => {\r\n const getNecessaryObj = (appState) => {\r\n const { suggestedBindings, startBoundElement: boundElement } = appState, ret = __rest(appState, [\"suggestedBindings\", \"startBoundElement\"]);\r\n return ret;\r\n };\r\n const prevAppState = getNecessaryObj(prev.appState);\r\n const nextAppState = getNecessaryObj(next.appState);\r\n const keys = Object.keys(prevAppState);\r\n return (prev.renderTopRightUI === next.renderTopRightUI &&\r\n prev.renderCustomFooter === next.renderCustomFooter &&\r\n prev.langCode === next.langCode &&\r\n prev.elements === next.elements &&\r\n prev.files === next.files &&\r\n keys.every((key) => prevAppState[key] === nextAppState[key]));\r\n};\r\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (react__WEBPACK_IMPORTED_MODULE_2___default().memo(LayerUI, areEqual));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0YsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXBELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFnQyxDQUFDO0lBQ3RFLE9BQU8sQ0FDTCxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLGdCQUFnQjtRQUMvQyxJQUFJLENBQUMsa0JBQWtCLEtBQUssSUFBSSxDQUFDLGtCQUFrQjtRQUNuRCxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRO1FBQy9CLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVE7UUFDL0IsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzdELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixpRUFBZSxpREFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL0xheWVyVUkudHN4PzA4NzgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuLi9hY3Rpb25zL21hbmFnZXJcIjtcbmltcG9ydCB7IENMQVNTRVMsIExJQlJBUllfU0lERUJBUl9XSURUSCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGV4cG9ydENhbnZhcyB9IGZyb20gXCIuLi9kYXRhXCI7XG5pbXBvcnQgeyBpc1RleHRFbGVtZW50LCBzaG93U2VsZWN0ZWRTaGFwZUFjdGlvbnMgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IExhbmd1YWdlLCB0IH0gZnJvbSBcIi4uL2kxOG5cIjtcbmltcG9ydCB7IGNhbGN1bGF0ZVNjcm9sbENlbnRlciwgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgRXhwb3J0VHlwZSB9IGZyb20gXCIuLi9zY2VuZS90eXBlc1wiO1xuaW1wb3J0IHsgQXBwUHJvcHMsIEFwcFN0YXRlLCBFeGNhbGlkcmF3UHJvcHMsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBtdXRlRlNBYm9ydEVycm9yIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBTZWxlY3RlZFNoYXBlQWN0aW9ucywgU2hhcGVzU3dpdGNoZXIsIFpvb21BY3Rpb25zIH0gZnJvbSBcIi4vQWN0aW9uc1wiO1xuaW1wb3J0IHsgQmFja2dyb3VuZFBpY2tlckFuZERhcmtNb2RlVG9nZ2xlIH0gZnJvbSBcIi4vQmFja2dyb3VuZFBpY2tlckFuZERhcmtNb2RlVG9nZ2xlXCI7XG5pbXBvcnQgQ29sbGFiQnV0dG9uIGZyb20gXCIuL0NvbGxhYkJ1dHRvblwiO1xuaW1wb3J0IHsgRXJyb3JEaWFsb2cgfSBmcm9tIFwiLi9FcnJvckRpYWxvZ1wiO1xuaW1wb3J0IHsgRXhwb3J0Q0IsIEltYWdlRXhwb3J0RGlhbG9nIH0gZnJvbSBcIi4vSW1hZ2VFeHBvcnREaWFsb2dcIjtcbmltcG9ydCB7IEZpeGVkU2lkZUNvbnRhaW5lciB9IGZyb20gXCIuL0ZpeGVkU2lkZUNvbnRhaW5lclwiO1xuaW1wb3J0IHsgSGludFZpZXdlciB9IGZyb20gXCIuL0hpbnRWaWV3ZXJcIjtcbmltcG9ydCB7IElzbGFuZCB9IGZyb20gXCIuL0lzbGFuZFwiO1xuaW1wb3J0IHsgTG9hZGluZ01lc3NhZ2UgfSBmcm9tIFwiLi9Mb2FkaW5nTWVzc2FnZVwiO1xuaW1wb3J0IHsgTG9ja0J1dHRvbiB9IGZyb20gXCIuL0xvY2tCdXR0b25cIjtcbmltcG9ydCB7IE1vYmlsZU1lbnUgfSBmcm9tIFwiLi9Nb2JpbGVNZW51XCI7XG5pbXBvcnQgeyBQYXN0ZUNoYXJ0RGlhbG9nIH0gZnJvbSBcIi4vUGFzdGVDaGFydERpYWxvZ1wiO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gXCIuL1NlY3Rpb25cIjtcbmltcG9ydCB7IEhlbHBEaWFsb2cgfSBmcm9tIFwiLi9IZWxwRGlhbG9nXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IFVzZXJMaXN0IH0gZnJvbSBcIi4vVXNlckxpc3RcIjtcbmltcG9ydCBMaWJyYXJ5LCB7IGRpc3RyaWJ1dGVMaWJyYXJ5SXRlbXNPblNxdWFyZUdyaWQgfSBmcm9tIFwiLi4vZGF0YS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBKU09ORXhwb3J0RGlhbG9nIH0gZnJvbSBcIi4vSlNPTkV4cG9ydERpYWxvZ1wiO1xuaW1wb3J0IHsgTGlicmFyeUJ1dHRvbiB9IGZyb20gXCIuL0xpYnJhcnlCdXR0b25cIjtcbmltcG9ydCB7IGlzSW1hZ2VGaWxlSGFuZGxlIH0gZnJvbSBcIi4uL2RhdGEvYmxvYlwiO1xuaW1wb3J0IHsgTGlicmFyeU1lbnUgfSBmcm9tIFwiLi9MaWJyYXJ5TWVudVwiO1xuXG5pbXBvcnQgXCIuL0xheWVyVUkuc2Nzc1wiO1xuaW1wb3J0IFwiLi9Ub29sYmFyLnNjc3NcIjtcbmltcG9ydCB7IFBlbk1vZGVCdXR0b24gfSBmcm9tIFwiLi9QZW5Nb2RlQnV0dG9uXCI7XG5pbXBvcnQgeyB0cmFja0V2ZW50IH0gZnJvbSBcIi4uL2FuYWx5dGljc1wiO1xuaW1wb3J0IHsgdXNlRGV2aWNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvQXBwXCI7XG5pbXBvcnQgeyBTdGF0cyB9IGZyb20gXCIuL1N0YXRzXCI7XG5pbXBvcnQgeyBhY3Rpb25Ub2dnbGVTdGF0cyB9IGZyb20gXCIuLi9hY3Rpb25zL2FjdGlvblRvZ2dsZVN0YXRzXCI7XG5pbXBvcnQgeyBhY3Rpb25Ub2dnbGVaZW5Nb2RlIH0gZnJvbSBcIi4uL2FjdGlvbnNcIjtcblxuaW50ZXJmYWNlIExheWVyVUlQcm9wcyB7XG4gIG9uSG9tZUJ1dHRvbkNsaWNrPzogKCkgPT4gdm9pZDtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgYXBwU3RhdGU6IEFwcFN0YXRlO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsO1xuICBzZXRBcHBTdGF0ZTogUmVhY3QuQ29tcG9uZW50PGFueSwgQXBwU3RhdGU+W1wic2V0U3RhdGVcIl07XG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXTtcbiAgb25Db2xsYWJCdXR0b25DbGljaz86ICgpID0+IHZvaWQ7XG4gIG9uTG9ja1RvZ2dsZTogKCkgPT4gdm9pZDtcbiAgb25QZW5Nb2RlVG9nZ2xlOiAoKSA9PiB2b2lkO1xuICBvbkluc2VydEVsZW1lbnRzOiAoZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdKSA9PiB2b2lkO1xuICBzaG93RXhpdFplbk1vZGVCdG46IGJvb2xlYW47XG4gIHNob3dUaGVtZUJ0bjogYm9vbGVhbjtcbiAgbGFuZ0NvZGU6IExhbmd1YWdlW1wiY29kZVwiXTtcbiAgaXNDb2xsYWJvcmF0aW5nOiBib29sZWFuO1xuICByZW5kZXJUb3BSaWdodFVJPzogRXhjYWxpZHJhd1Byb3BzW1wicmVuZGVyVG9wUmlnaHRVSVwiXTtcbiAgcmVuZGVyQ3VzdG9tRm9vdGVyPzogRXhjYWxpZHJhd1Byb3BzW1wicmVuZGVyRm9vdGVyXCJdO1xuICByZW5kZXJDdXN0b21TdGF0cz86IEV4Y2FsaWRyYXdQcm9wc1tcInJlbmRlckN1c3RvbVN0YXRzXCJdO1xuICBsaWJyYXJ5UmV0dXJuVXJsOiBFeGNhbGlkcmF3UHJvcHNbXCJsaWJyYXJ5UmV0dXJuVXJsXCJdO1xuICBVSU9wdGlvbnM6IEFwcFByb3BzW1wiVUlPcHRpb25zXCJdO1xuICBmb2N1c0NvbnRhaW5lcjogKCkgPT4gdm9pZDtcbiAgbGlicmFyeTogTGlicmFyeTtcbiAgaWQ6IHN0cmluZztcbiAgb25JbWFnZUFjdGlvbjogKGRhdGE6IHsgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogYm9vbGVhbiB9KSA9PiB2b2lkO1xufVxuY29uc3QgTGF5ZXJVSSA9ICh7XG4gIG9uSG9tZUJ1dHRvbkNsaWNrLFxuICBhY3Rpb25NYW5hZ2VyLFxuICBhcHBTdGF0ZSxcbiAgZmlsZXMsXG4gIHNldEFwcFN0YXRlLFxuICBjYW52YXMsXG4gIGVsZW1lbnRzLFxuICBvbkNvbGxhYkJ1dHRvbkNsaWNrLFxuICBvbkxvY2tUb2dnbGUsXG4gIG9uUGVuTW9kZVRvZ2dsZSxcbiAgb25JbnNlcnRFbGVtZW50cyxcbiAgc2hvd0V4aXRaZW5Nb2RlQnRuLFxuICBzaG93VGhlbWVCdG4sXG4gIGlzQ29sbGFib3JhdGluZyxcbiAgcmVuZGVyVG9wUmlnaHRVSSxcbiAgcmVuZGVyQ3VzdG9tRm9vdGVyLFxuICByZW5kZXJDdXN0b21TdGF0cyxcbiAgbGlicmFyeVJldHVyblVybCxcbiAgVUlPcHRpb25zLFxuICBmb2N1c0NvbnRhaW5lcixcbiAgbGlicmFyeSxcbiAgaWQsXG4gIG9uSW1hZ2VBY3Rpb24sXG59OiBMYXllclVJUHJvcHMpID0+IHtcbiAgY29uc3QgZGV2aWNlID0gdXNlRGV2aWNlKCk7XG5cbiAgY29uc3QgcmVuZGVySlNPTkV4cG9ydERpYWxvZyA9ICgpID0+IHtcbiAgICBpZiAoIVVJT3B0aW9ucy5jYW52YXNBY3Rpb25zIHx8ICFVSU9wdGlvbnMuY2FudmFzQWN0aW9ucy5leHBvcnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8SlNPTkV4cG9ydERpYWxvZ1xuICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgZmlsZXM9e2ZpbGVzfVxuICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICBleHBvcnRPcHRzPXtVSU9wdGlvbnMuY2FudmFzQWN0aW9ucy5leHBvcnR9XG4gICAgICAgIGNhbnZhcz17Y2FudmFzfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckltYWdlRXhwb3J0RGlhbG9nID0gKCkgPT4ge1xuICAgIGlmICghVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMgfHwgIVVJT3B0aW9ucy5jYW52YXNBY3Rpb25zLnNhdmVBc0ltYWdlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVFeHBvcnRlciA9XG4gICAgICAodHlwZTogRXhwb3J0VHlwZSk6IEV4cG9ydENCID0+XG4gICAgICBhc3luYyAoZXhwb3J0ZWRFbGVtZW50cykgPT4ge1xuICAgICAgICB0cmFja0V2ZW50KFwiZXhwb3J0XCIsIHR5cGUsIFwidWlcIik7XG4gICAgICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCBleHBvcnRDYW52YXMoXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBleHBvcnRlZEVsZW1lbnRzLFxuICAgICAgICAgIGFwcFN0YXRlLFxuICAgICAgICAgIGZpbGVzLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4cG9ydEJhY2tncm91bmQ6IGFwcFN0YXRlLmV4cG9ydEJhY2tncm91bmQsXG4gICAgICAgICAgICBuYW1lOiBhcHBTdGF0ZS5uYW1lLFxuICAgICAgICAgICAgdmlld0JhY2tncm91bmRDb2xvcjogYXBwU3RhdGUudmlld0JhY2tncm91bmRDb2xvcixcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgICAgLmNhdGNoKG11dGVGU0Fib3J0RXJyb3IpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBzZXRBcHBTdGF0ZSh7IGVycm9yTWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgYXBwU3RhdGUuZXhwb3J0RW1iZWRTY2VuZSAmJlxuICAgICAgICAgIGZpbGVIYW5kbGUgJiZcbiAgICAgICAgICBpc0ltYWdlRmlsZUhhbmRsZShmaWxlSGFuZGxlKVxuICAgICAgICApIHtcbiAgICAgICAgICBzZXRBcHBTdGF0ZSh7IGZpbGVIYW5kbGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEltYWdlRXhwb3J0RGlhbG9nXG4gICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBmaWxlcz17ZmlsZXN9XG4gICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgIG9uRXhwb3J0VG9Qbmc9e2NyZWF0ZUV4cG9ydGVyKFwicG5nXCIpfVxuICAgICAgICBvbkV4cG9ydFRvU3ZnPXtjcmVhdGVFeHBvcnRlcihcInN2Z1wiKX1cbiAgICAgICAgb25FeHBvcnRUb0NsaXBib2FyZD17Y3JlYXRlRXhwb3J0ZXIoXCJjbGlwYm9hcmRcIil9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyVmlld01vZGVDYW52YXNBY3Rpb25zID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8U2VjdGlvblxuICAgICAgICBoZWFkaW5nPVwiY2FudmFzQWN0aW9uc1wiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzeChcInplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgIFwidHJhbnNpdGlvbi1sZWZ0XCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICB9KX1cbiAgICAgID5cbiAgICAgICAgey8qIHRoZSB6SW5kZXggZW5zdXJlcyB0aGlzIG1lbnUgaGFzIGhpZ2hlciBzdGFja2luZyBvcmRlcixcbiAgICAgICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXhjYWxpZHJhdy9leGNhbGlkcmF3L3B1bGwvMTQ0NSAqL31cbiAgICAgICAgPElzbGFuZCBwYWRkaW5nPXsyfSBzdHlsZT17eyB6SW5kZXg6IDEgfX0+XG4gICAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezR9PlxuICAgICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezF9IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgICB7cmVuZGVySlNPTkV4cG9ydERpYWxvZygpfVxuICAgICAgICAgICAgICB7cmVuZGVySW1hZ2VFeHBvcnREaWFsb2coKX1cbiAgICAgICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICA8L0lzbGFuZD5cbiAgICAgIDwvU2VjdGlvbj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNhbnZhc0FjdGlvbnMgPSAoKSA9PiAoXG4gICAgPFNlY3Rpb25cbiAgICAgIGhlYWRpbmc9XCJjYW52YXNBY3Rpb25zXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xzeChcInplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICBcInRyYW5zaXRpb24tbGVmdFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIHsvKiB0aGUgekluZGV4IGVuc3VyZXMgdGhpcyBtZW51IGhhcyBoaWdoZXIgc3RhY2tpbmcgb3JkZXIsXG4gICAgICAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2V4Y2FsaWRyYXcvZXhjYWxpZHJhdy9wdWxsLzE0NDUgKi99XG4gICAgICA8SXNsYW5kIHBhZGRpbmc9ezJ9IHN0eWxlPXt7IHpJbmRleDogMSB9fT5cbiAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezR9PlxuICAgICAgICAgIDxTdGFjay5Sb3cgZ2FwPXszfSBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImNsZWFyQ2FudmFzXCIpfVxuICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwibG9hZFNjZW5lXCIpfVxuICAgICAgICAgICAge3JlbmRlckpTT05FeHBvcnREaWFsb2coKX1cbiAgICAgICAgICAgIHtyZW5kZXJJbWFnZUV4cG9ydERpYWxvZygpfVxuICAgICAgICAgICAge29uQ29sbGFiQnV0dG9uQ2xpY2sgJiYgKFxuICAgICAgICAgICAgICA8Q29sbGFiQnV0dG9uXG4gICAgICAgICAgICAgICAgaXNDb2xsYWJvcmF0aW5nPXtpc0NvbGxhYm9yYXRpbmd9XG4gICAgICAgICAgICAgICAgY29sbGFib3JhdG9yQ291bnQ9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnMuc2l6ZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkNvbGxhYkJ1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICA8QmFja2dyb3VuZFBpY2tlckFuZERhcmtNb2RlVG9nZ2xlXG4gICAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgICAgc2hvd1RoZW1lQnRuPXtzaG93VGhlbWVCdG59XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7YXBwU3RhdGUuZmlsZUhhbmRsZSAmJiAoXG4gICAgICAgICAgICA8PnthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInNhdmVUb0FjdGl2ZUZpbGVcIil9PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICA8L0lzbGFuZD5cbiAgICA8L1NlY3Rpb24+XG4gICk7XG5cbiAgY29uc3QgcmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgPSAoKSA9PiAoXG4gICAgPFNlY3Rpb25cbiAgICAgIGhlYWRpbmc9XCJzZWxlY3RlZFNoYXBlQWN0aW9uc1wiXG4gICAgICBjbGFzc05hbWU9e2Nsc3goXCJ6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgXCJ0cmFuc2l0aW9uLWxlZnRcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICB9KX1cbiAgICA+XG4gICAgICA8SXNsYW5kXG4gICAgICAgIGNsYXNzTmFtZT17Q0xBU1NFUy5TSEFQRV9BQ1RJT05TX01FTlV9XG4gICAgICAgIHBhZGRpbmc9ezJ9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG92ZXJmbG93IHNvIHN1YnRyYWN0aW5nIDIwMFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGFwcHJveGltYXRlbHkgaGVpZ2h0IG9mIHpvb20gZm9vdGVyIGFuZCB0b3AgbGVmdCBtZW51IGl0ZW1zIHdpdGggc29tZSBidWZmZXJcbiAgICAgICAgICAvLyBpZiBhY3RpdmUgZmlsZSBuYW1lIGlzIGRpc3BsYXllZCwgc3VidHJhY3RpbmcgMjQ4IHRvIGFjY291bnQgZm9yIGl0cyBoZWlnaHRcbiAgICAgICAgICBtYXhIZWlnaHQ6IGAke2FwcFN0YXRlLmhlaWdodCAtIChhcHBTdGF0ZS5maWxlSGFuZGxlID8gMjQ4IDogMjAwKX1weGAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTZWxlY3RlZFNoYXBlQWN0aW9uc1xuICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICBhY3RpdmVUb29sPXthcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGV9XG4gICAgICAgIC8+XG4gICAgICA8L0lzbGFuZD5cbiAgICA8L1NlY3Rpb24+XG4gICk7XG5cbiAgY29uc3QgY2xvc2VMaWJyYXJ5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGlzRGlhbG9nT3BlbiA9ICEhZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5EaWFsb2dcIik7XG5cbiAgICAvLyBQcmV2ZW50IGNsb3NpbmcgaWYgYW55IGRpYWxvZyBpcyBvcGVuXG4gICAgaWYgKGlzRGlhbG9nT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRBcHBTdGF0ZSh7IGlzTGlicmFyeU9wZW46IGZhbHNlIH0pO1xuICB9LCBbc2V0QXBwU3RhdGVdKTtcblxuICBjb25zdCBkZXNlbGVjdEl0ZW1zID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEFwcFN0YXRlKHtcbiAgICAgIHNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICBzZWxlY3RlZEdyb3VwSWRzOiB7fSxcbiAgICB9KTtcbiAgfSwgW3NldEFwcFN0YXRlXSk7XG5cbiAgY29uc3QgbGlicmFyeU1lbnUgPSBhcHBTdGF0ZS5pc0xpYnJhcnlPcGVuID8gKFxuICAgIDxMaWJyYXJ5TWVudVxuICAgICAgcGVuZGluZ0VsZW1lbnRzPXtnZXRTZWxlY3RlZEVsZW1lbnRzKGVsZW1lbnRzLCBhcHBTdGF0ZSwgdHJ1ZSl9XG4gICAgICBvbkNsb3NlPXtjbG9zZUxpYnJhcnl9XG4gICAgICBvbkluc2VydExpYnJhcnlJdGVtcz17KGxpYnJhcnlJdGVtcykgPT4ge1xuICAgICAgICBvbkluc2VydEVsZW1lbnRzKGRpc3RyaWJ1dGVMaWJyYXJ5SXRlbXNPblNxdWFyZUdyaWQobGlicmFyeUl0ZW1zKSk7XG4gICAgICB9fVxuICAgICAgb25BZGRUb0xpYnJhcnk9e2Rlc2VsZWN0SXRlbXN9XG4gICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICBsaWJyYXJ5UmV0dXJuVXJsPXtsaWJyYXJ5UmV0dXJuVXJsfVxuICAgICAgZm9jdXNDb250YWluZXI9e2ZvY3VzQ29udGFpbmVyfVxuICAgICAgbGlicmFyeT17bGlicmFyeX1cbiAgICAgIHRoZW1lPXthcHBTdGF0ZS50aGVtZX1cbiAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgIGlkPXtpZH1cbiAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAvPlxuICApIDogbnVsbDtcblxuICBjb25zdCByZW5kZXJGaXhlZFNpZGVDb250YWluZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2hvdWxkUmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgPSBzaG93U2VsZWN0ZWRTaGFwZUFjdGlvbnMoXG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZpeGVkU2lkZUNvbnRhaW5lciBzaWRlPVwidG9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQXBwLW1lbnUgQXBwLW1lbnVfdG9wXCI+XG4gICAgICAgICAgPFN0YWNrLkNvbFxuICAgICAgICAgICAgZ2FwPXs0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KHtcbiAgICAgICAgICAgICAgXCJkaXNhYmxlLXBvaW50ZXJFdmVudHNcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMgJiZcbiAgICAgICAgICAgICAgKGFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZFxuICAgICAgICAgICAgICAgID8gcmVuZGVyVmlld01vZGVDYW52YXNBY3Rpb25zKClcbiAgICAgICAgICAgICAgICA6IHJlbmRlckNhbnZhc0FjdGlvbnMoKSl9XG4gICAgICAgICAgICB7c2hvdWxkUmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgJiYgcmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMoKX1cbiAgICAgICAgICA8L1N0YWNrLkNvbD5cbiAgICAgICAgICB7IWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICA8U2VjdGlvbiBoZWFkaW5nPVwic2hhcGVzXCI+XG4gICAgICAgICAgICAgIHsoaGVhZGluZykgPT4gKFxuICAgICAgICAgICAgICAgIDxTdGFjay5Db2wgZ2FwPXs0fSBhbGlnbj1cInN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICA8U3RhY2suUm93XG4gICAgICAgICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiQXBwLXRvb2xiYXItY29udGFpbmVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBcInplbi1tb2RlXCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBlbk1vZGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB6ZW5Nb2RlRW5hYmxlZD17YXBwU3RhdGUuemVuTW9kZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YXBwU3RhdGUucGVuTW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25QZW5Nb2RlVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0KFwidG9vbEJhci5wZW5Nb2RlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIHBlbkRldGVjdGVkPXthcHBTdGF0ZS5wZW5EZXRlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPExvY2tCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB6ZW5Nb2RlRW5hYmxlZD17YXBwU3RhdGUuemVuTW9kZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YXBwU3RhdGUuYWN0aXZlVG9vbC5sb2NrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IG9uTG9ja1RvZ2dsZSgpfVxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0KFwidG9vbEJhci5sb2NrXCIpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8SXNsYW5kXG4gICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz17MX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJBcHAtdG9vbGJhclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInplbi1tb2RlXCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEhpbnRWaWV3ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTW9iaWxlPXtkZXZpY2UuaXNNb2JpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICB7aGVhZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICA8U3RhY2suUm93IGdhcD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2hhcGVzU3dpdGNoZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXM9e2NhbnZhc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlVG9vbD17YXBwU3RhdGUuYWN0aXZlVG9vbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uPXsoeyBwb2ludGVyVHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25JbWFnZUFjdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPbkNhbnZhc0RpcmVjdGx5OiBwb2ludGVyVHlwZSAhPT0gXCJtb3VzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPC9Jc2xhbmQ+XG4gICAgICAgICAgICAgICAgICAgIDxMaWJyYXJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX190b3AtcmlnaHQgemVuLW1vZGUtdHJhbnNpdGlvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJ0cmFuc2l0aW9uLXJpZ2h0XCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VXNlckxpc3RcbiAgICAgICAgICAgICAgY29sbGFib3JhdG9ycz17YXBwU3RhdGUuY29sbGFib3JhdG9yc31cbiAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgXCJ0cmFuc2l0aW9uLXJpZ2h0XCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgbGF5b3V0PVwidmVydGljYWxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtyZW5kZXJUb3BSaWdodFVJPy4oZGV2aWNlLmlzTW9iaWxlLCBhcHBTdGF0ZSwgY2FudmFzKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0ZpeGVkU2lkZUNvbnRhaW5lcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckJvdHRvbUFwcE1lbnUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxmb290ZXJcbiAgICAgICAgcm9sZT1cImNvbnRlbnRpbmZvXCJcbiAgICAgICAgY2xhc3NOYW1lPVwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3RlciBBcHAtbWVudSBBcHAtbWVudV9ib3R0b21cIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQgemVuLW1vZGUtdHJhbnNpdGlvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1sZWZ0XCI6XG4gICAgICAgICAgICAgICAgYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3RhY2suQ29sIGdhcD17Mn0+XG4gICAgICAgICAgICA8U2VjdGlvbiBoZWFkaW5nPVwiY2FudmFzQWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8SXNsYW5kIHBhZGRpbmc9ezF9PlxuICAgICAgICAgICAgICAgIDxab29tQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICAgICAgICAgIHpvb209e2FwcFN0YXRlLnpvb219XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Jc2xhbmQ+XG4gICAgICAgICAgICAgIHshYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJ1bmRvLXJlZG8tYnV0dG9ucyB6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1ib3R0b21cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidW5kb1wiLCB7IHNpemU6IFwic21hbGxcIiB9KX1cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwicmVkb1wiLCB7IHNpemU6IFwic21hbGxcIiB9KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcImVyYXNlci1idXR0b25zIHplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWxlZnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiZXJhc2VyXCIsIHsgc2l6ZTogXCJzbWFsbFwiIH0pfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHshYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgYXBwU3RhdGUubXVsdGlFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgZGV2aWNlLmlzVG91Y2hTY3JlZW4gJiYgKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJmaW5hbGl6ZS1idXR0b24gemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQtLXRyYW5zaXRpb24tbGVmdFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJmaW5hbGl6ZVwiLCB7IHNpemU6IFwic21hbGxcIiB9KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWNlbnRlciB6ZW4tbW9kZS10cmFuc2l0aW9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWJvdHRvbVwiOlxuICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge3JlbmRlckN1c3RvbUZvb3Rlcj8uKGZhbHNlLCBhcHBTdGF0ZSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLXJpZ2h0IHplbi1tb2RlLXRyYW5zaXRpb25cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0cmFuc2l0aW9uLXJpZ2h0IGRpc2FibGUtcG9pbnRlckV2ZW50c1wiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInRvZ2dsZVNob3J0Y3V0c1wiKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJkaXNhYmxlLXplbi1tb2RlXCIsIHtcbiAgICAgICAgICAgIFwiZGlzYWJsZS16ZW4tbW9kZS0tdmlzaWJsZVwiOiBzaG93RXhpdFplbk1vZGVCdG4sXG4gICAgICAgICAgfSl9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gYWN0aW9uTWFuYWdlci5leGVjdXRlQWN0aW9uKGFjdGlvblRvZ2dsZVplbk1vZGUpfVxuICAgICAgICA+XG4gICAgICAgICAge3QoXCJidXR0b25zLmV4aXRaZW5Nb2RlXCIpfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZm9vdGVyPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgZGlhbG9ncyA9IChcbiAgICA8PlxuICAgICAge2FwcFN0YXRlLmlzTG9hZGluZyAmJiA8TG9hZGluZ01lc3NhZ2UgZGVsYXk9ezI1MH0gLz59XG4gICAgICB7YXBwU3RhdGUuZXJyb3JNZXNzYWdlICYmIChcbiAgICAgICAgPEVycm9yRGlhbG9nXG4gICAgICAgICAgbWVzc2FnZT17YXBwU3RhdGUuZXJyb3JNZXNzYWdlfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldEFwcFN0YXRlKHsgZXJyb3JNZXNzYWdlOiBudWxsIH0pfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHthcHBTdGF0ZS5zaG93SGVscERpYWxvZyAmJiAoXG4gICAgICAgIDxIZWxwRGlhbG9nXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0QXBwU3RhdGUoeyBzaG93SGVscERpYWxvZzogZmFsc2UgfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7YXBwU3RhdGUucGFzdGVEaWFsb2cuc2hvd24gJiYgKFxuICAgICAgICA8UGFzdGVDaGFydERpYWxvZ1xuICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgb25JbnNlcnRDaGFydD17b25JbnNlcnRFbGVtZW50c31cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PlxuICAgICAgICAgICAgc2V0QXBwU3RhdGUoe1xuICAgICAgICAgICAgICBwYXN0ZURpYWxvZzogeyBzaG93bjogZmFsc2UsIGRhdGE6IG51bGwgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcblxuICBjb25zdCByZW5kZXJTdGF0cyA9ICgpID0+IHtcbiAgICBpZiAoIWFwcFN0YXRlLnNob3dTdGF0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U3RhdHNcbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgIGFjdGlvbk1hbmFnZXIuZXhlY3V0ZUFjdGlvbihhY3Rpb25Ub2dnbGVTdGF0cyk7XG4gICAgICAgIH19XG4gICAgICAgIHJlbmRlckN1c3RvbVN0YXRzPXtyZW5kZXJDdXN0b21TdGF0c31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gZGV2aWNlLmlzTW9iaWxlID8gKFxuICAgIDw+XG4gICAgICB7ZGlhbG9nc31cbiAgICAgIDxNb2JpbGVNZW51XG4gICAgICAgIG9uSG9tZUJ1dHRvbkNsaWNrPXtvbkhvbWVCdXR0b25DbGlja31cbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgIGxpYnJhcnlNZW51PXtsaWJyYXJ5TWVudX1cbiAgICAgICAgcmVuZGVySlNPTkV4cG9ydERpYWxvZz17cmVuZGVySlNPTkV4cG9ydERpYWxvZ31cbiAgICAgICAgcmVuZGVySW1hZ2VFeHBvcnREaWFsb2c9e3JlbmRlckltYWdlRXhwb3J0RGlhbG9nfVxuICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgIG9uQ29sbGFiQnV0dG9uQ2xpY2s9e29uQ29sbGFiQnV0dG9uQ2xpY2t9XG4gICAgICAgIG9uTG9ja1RvZ2dsZT17KCkgPT4gb25Mb2NrVG9nZ2xlKCl9XG4gICAgICAgIG9uUGVuTW9kZVRvZ2dsZT17b25QZW5Nb2RlVG9nZ2xlfVxuICAgICAgICBjYW52YXM9e2NhbnZhc31cbiAgICAgICAgaXNDb2xsYWJvcmF0aW5nPXtpc0NvbGxhYm9yYXRpbmd9XG4gICAgICAgIHJlbmRlckN1c3RvbUZvb3Rlcj17cmVuZGVyQ3VzdG9tRm9vdGVyfVxuICAgICAgICBzaG93VGhlbWVCdG49e3Nob3dUaGVtZUJ0bn1cbiAgICAgICAgb25JbWFnZUFjdGlvbj17b25JbWFnZUFjdGlvbn1cbiAgICAgICAgcmVuZGVyVG9wUmlnaHRVST17cmVuZGVyVG9wUmlnaHRVSX1cbiAgICAgICAgcmVuZGVyU3RhdHM9e3JlbmRlclN0YXRzfVxuICAgICAgICBVSU9wdGlvbnM9e1VJT3B0aW9uc31cbiAgICAgIC8+XG4gICAgPC8+XG4gICkgOiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwibGF5ZXItdWlfX3dyYXBwZXJcIiwge1xuICAgICAgICAgIFwiZGlzYWJsZS1wb2ludGVyRXZlbnRzXCI6XG4gICAgICAgICAgICBhcHBTdGF0ZS5kcmFnZ2luZ0VsZW1lbnQgfHxcbiAgICAgICAgICAgIGFwcFN0YXRlLnJlc2l6aW5nRWxlbWVudCB8fFxuICAgICAgICAgICAgKGFwcFN0YXRlLmVkaXRpbmdFbGVtZW50ICYmXG4gICAgICAgICAgICAgICFpc1RleHRFbGVtZW50KGFwcFN0YXRlLmVkaXRpbmdFbGVtZW50KSksXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17XG4gICAgICAgICAgYXBwU3RhdGUuaXNMaWJyYXJ5T3BlbiAmJlxuICAgICAgICAgIGFwcFN0YXRlLmlzTGlicmFyeU1lbnVEb2NrZWQgJiZcbiAgICAgICAgICBkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhclxuICAgICAgICAgICAgPyB7IHdpZHRoOiBgY2FsYygxMDAlIC0gJHtMSUJSQVJZX1NJREVCQVJfV0lEVEh9cHgpYCB9XG4gICAgICAgICAgICA6IHt9XG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAge2RpYWxvZ3N9XG4gICAgICAgIHtyZW5kZXJGaXhlZFNpZGVDb250YWluZXIoKX1cbiAgICAgICAge3JlbmRlckJvdHRvbUFwcE1lbnUoKX1cbiAgICAgICAge3JlbmRlclN0YXRzKCl9XG4gICAgICAgIHthcHBTdGF0ZS5zY3JvbGxlZE91dHNpZGUgJiYgKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInNjcm9sbC1iYWNrLXRvLWNvbnRlbnRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRBcHBTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4uY2FsY3VsYXRlU2Nyb2xsQ2VudGVyKGVsZW1lbnRzLCBhcHBTdGF0ZSwgY2FudmFzKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KFwiYnV0dG9ucy5zY3JvbGxCYWNrVG9Db250ZW50XCIpfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7YXBwU3RhdGUuaXNMaWJyYXJ5T3BlbiAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGF5ZXItdWlfX3NpZGViYXJcIj57bGlicmFyeU1lbnV9PC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcblxuY29uc3QgYXJlRXF1YWwgPSAocHJldjogTGF5ZXJVSVByb3BzLCBuZXh0OiBMYXllclVJUHJvcHMpID0+IHtcbiAgY29uc3QgZ2V0TmVjZXNzYXJ5T2JqID0gKGFwcFN0YXRlOiBBcHBTdGF0ZSk6IFBhcnRpYWw8QXBwU3RhdGU+ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzdWdnZXN0ZWRCaW5kaW5ncyxcbiAgICAgIHN0YXJ0Qm91bmRFbGVtZW50OiBib3VuZEVsZW1lbnQsXG4gICAgICAuLi5yZXRcbiAgICB9ID0gYXBwU3RhdGU7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbiAgY29uc3QgcHJldkFwcFN0YXRlID0gZ2V0TmVjZXNzYXJ5T2JqKHByZXYuYXBwU3RhdGUpO1xuICBjb25zdCBuZXh0QXBwU3RhdGUgPSBnZXROZWNlc3NhcnlPYmoobmV4dC5hcHBTdGF0ZSk7XG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByZXZBcHBTdGF0ZSkgYXMgKGtleW9mIFBhcnRpYWw8QXBwU3RhdGU+KVtdO1xuICByZXR1cm4gKFxuICAgIHByZXYucmVuZGVyVG9wUmlnaHRVSSA9PT0gbmV4dC5yZW5kZXJUb3BSaWdodFVJICYmXG4gICAgcHJldi5yZW5kZXJDdXN0b21Gb290ZXIgPT09IG5leHQucmVuZGVyQ3VzdG9tRm9vdGVyICYmXG4gICAgcHJldi5sYW5nQ29kZSA9PT0gbmV4dC5sYW5nQ29kZSAmJlxuICAgIHByZXYuZWxlbWVudHMgPT09IG5leHQuZWxlbWVudHMgJiZcbiAgICBwcmV2LmZpbGVzID09PSBuZXh0LmZpbGVzICYmXG4gICAga2V5cy5ldmVyeSgoa2V5KSA9PiBwcmV2QXBwU3RhdGVba2V5XSA9PT0gbmV4dEFwcFN0YXRlW2tleV0pXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKExheWVyVUksIGFyZUVxdWFsKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/LayerUI.tsx\n");
2115
2126
 
2116
2127
  /***/ }),
2117
2128
 
@@ -2133,7 +2144,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2133
2144
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2134
2145
 
2135
2146
  "use strict";
2136
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LibraryMenu\": () => (/* binding */ LibraryMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _data_library__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../data/library */ \"../../data/library.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Dialog */ \"../../components/Dialog.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _PublishLibrary__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./PublishLibrary */ \"../../components/PublishLibrary.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./LibraryMenu.scss */ \"../../components/LibraryMenu.scss\");\n/* harmony import */ var _LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _LibraryMenuItems__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./LibraryMenuItems */ \"../../components/LibraryMenuItems.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! jotai */ \"../../../node_modules/jotai/esm/index.js\");\n/* harmony import */ var _jotai__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../jotai */ \"../../jotai.ts\");\n/* harmony import */ var _Spinner__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Spinner */ \"../../components/Spinner.tsx\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\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\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 useOnClickOutside = (ref, cb) => {\r\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\r\n const listener = (event) => {\r\n if (!ref.current) {\r\n return;\r\n }\r\n if (event.target instanceof Element &&\r\n (ref.current.contains(event.target) ||\r\n !document.body.contains(event.target))) {\r\n return;\r\n }\r\n cb(event);\r\n };\r\n document.addEventListener(\"pointerdown\", listener, false);\r\n return () => {\r\n document.removeEventListener(\"pointerdown\", listener);\r\n };\r\n }, [ref, cb]);\r\n};\r\nconst getSelectedItems = (libraryItems, selectedItems) => libraryItems.filter((item) => selectedItems.includes(item.id));\r\nconst LibraryMenuWrapper = (0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(({ children }, ref) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, ref: ref, className: \"layer-ui__library\" }, { children: children })));\r\n});\r\nconst LibraryMenu = ({ onClose, onInsertLibraryItems, pendingElements, onAddToLibrary, theme, setAppState, files, libraryReturnUrl, focusContainer, library, id, appState, }) => {\r\n const ref = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\r\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_16__.useDevice)();\r\n useOnClickOutside(ref, (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((event) => {\r\n // If click on the library icon, do nothing.\r\n if (event.target.closest(\".ToolIcon__library\")) {\r\n return;\r\n }\r\n if (!appState.isLibraryMenuDocked || !device.canDeviceFitSidebar) {\r\n onClose();\r\n }\r\n }, [onClose, appState.isLibraryMenuDocked, device.canDeviceFitSidebar]));\r\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\r\n const handleKeyDown = (event) => {\r\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_12__.KEYS.ESCAPE &&\r\n (!appState.isLibraryMenuDocked || !device.canDeviceFitSidebar)) {\r\n onClose();\r\n }\r\n };\r\n document.addEventListener(_constants__WEBPACK_IMPORTED_MODULE_11__.EVENT.KEYDOWN, handleKeyDown);\r\n return () => {\r\n document.removeEventListener(_constants__WEBPACK_IMPORTED_MODULE_11__.EVENT.KEYDOWN, handleKeyDown);\r\n };\r\n }, [onClose, appState.isLibraryMenuDocked, device.canDeviceFitSidebar]);\r\n const [selectedItems, setSelectedItems] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\r\n const [showPublishLibraryDialog, setShowPublishLibraryDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\r\n const [publishLibSuccess, setPublishLibSuccess] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\r\n const [libraryItemsData] = (0,jotai__WEBPACK_IMPORTED_MODULE_17__.useAtom)(_data_library__WEBPACK_IMPORTED_MODULE_2__.libraryItemsAtom, _jotai__WEBPACK_IMPORTED_MODULE_14__.jotaiScope);\r\n const removeFromLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((libraryItems) => __awaiter(void 0, void 0, void 0, function* () {\r\n const nextItems = libraryItems.filter((item) => !selectedItems.includes(item.id));\r\n library.setLibrary(nextItems).catch(() => {\r\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"alerts.errorRemovingFromLibrary\") });\r\n });\r\n setSelectedItems([]);\r\n }), [library, setAppState, selectedItems, setSelectedItems]);\r\n const resetLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {\r\n library.resetLibrary();\r\n focusContainer();\r\n }, [library, focusContainer]);\r\n const addToLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((elements, libraryItems) => __awaiter(void 0, void 0, void 0, function* () {\r\n (0,_analytics__WEBPACK_IMPORTED_MODULE_13__.trackEvent)(\"element\", \"addToLibrary\", \"ui\");\r\n if (elements.some((element) => element.type === \"image\")) {\r\n return setAppState({\r\n errorMessage: \"Support for adding images to the library coming soon!\",\r\n });\r\n }\r\n const nextItems = [\r\n {\r\n status: \"unpublished\",\r\n elements,\r\n id: (0,_random__WEBPACK_IMPORTED_MODULE_4__.randomId)(),\r\n created: Date.now(),\r\n },\r\n ...libraryItems,\r\n ];\r\n onAddToLibrary();\r\n library.setLibrary(nextItems).catch(() => {\r\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"alerts.errorAddingToLibrary\") });\r\n });\r\n }), [onAddToLibrary, library, setAppState]);\r\n const renderPublishSuccess = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Dialog__WEBPACK_IMPORTED_MODULE_5__.Dialog, Object.assign({ onCloseRequest: () => setPublishLibSuccess(null), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.title\"), className: \"publish-library-success\", small: true }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"p\", { children: [(0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.content\", {\r\n authorName: publishLibSuccess.authorName,\r\n }), \" \", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({ href: publishLibSuccess === null || publishLibSuccess === void 0 ? void 0 : publishLibSuccess.url, target: \"_blank\", rel: \"noopener noreferrer\" }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.link\") }))] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_8__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), onClick: () => setPublishLibSuccess(null), \"data-testid\": \"publish-library-success-close\", className: \"publish-library-success-close\" })] })));\r\n }, [setPublishLibSuccess, publishLibSuccess]);\r\n const onPublishLibSuccess = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((data, libraryItems) => {\r\n setShowPublishLibraryDialog(false);\r\n setPublishLibSuccess({ url: data.url, authorName: data.authorName });\r\n const nextLibItems = libraryItems.slice();\r\n nextLibItems.forEach((libItem) => {\r\n if (selectedItems.includes(libItem.id)) {\r\n libItem.status = \"published\";\r\n }\r\n });\r\n library.setLibrary(nextLibItems);\r\n }, [setShowPublishLibraryDialog, setPublishLibSuccess, selectedItems, library]);\r\n if (libraryItemsData.status === \"loading\" &&\r\n !libraryItemsData.isInitialized) {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LibraryMenuWrapper, Object.assign({ ref: ref }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"layer-ui__library-message\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Spinner__WEBPACK_IMPORTED_MODULE_15__[\"default\"], { size: \"2em\" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"labels.libraryLoadingMessage\") })] })) })));\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(LibraryMenuWrapper, Object.assign({ ref: ref }, { children: [showPublishLibraryDialog && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PublishLibrary__WEBPACK_IMPORTED_MODULE_7__[\"default\"], { onClose: () => setShowPublishLibraryDialog(false), libraryItems: getSelectedItems(libraryItemsData.libraryItems, selectedItems), appState: appState, onSuccess: (data) => onPublishLibSuccess(data, libraryItemsData.libraryItems), onError: (error) => window.alert(error), updateItemsInStorage: () => library.setLibrary(libraryItemsData.libraryItems), onRemove: (id) => setSelectedItems(selectedItems.filter((_id) => _id !== id)) })), publishLibSuccess && renderPublishSuccess(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenuItems__WEBPACK_IMPORTED_MODULE_10__[\"default\"], { isLoading: libraryItemsData.status === \"loading\", libraryItems: libraryItemsData.libraryItems, onRemoveFromLibrary: () => removeFromLibrary(libraryItemsData.libraryItems), onAddToLibrary: (elements) => addToLibrary(elements, libraryItemsData.libraryItems), onInsertLibraryItems: onInsertLibraryItems, pendingElements: pendingElements, setAppState: setAppState, appState: appState, libraryReturnUrl: libraryReturnUrl, library: library, theme: theme, files: files, id: id, selectedItems: selectedItems, onSelectItems: (ids) => setSelectedItems(ids), onPublish: () => setShowPublishLibraryDialog(true), resetLibrary: resetLibrary })] })));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxFQUNaLEVBQUUsRUFBRSxFQUFFLEVBQ04sYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFDN0MsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUNsRCxZQUFZLEVBQUUsWUFBWSxHQUMxQixLQUNpQixDQUN0QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvTGlicmFyeU1lbnUudHN4P2FjNDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgUmVmT2JqZWN0LFxuICBmb3J3YXJkUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaWJyYXJ5LCB7IGxpYnJhcnlJdGVtc0F0b20gfSBmcm9tIFwiLi4vZGF0YS9saWJyYXJ5XCI7XG5pbXBvcnQgeyB0IH0gZnJvbSBcIi4uL2kxOG5cIjtcbmltcG9ydCB7IHJhbmRvbUlkIH0gZnJvbSBcIi4uL3JhbmRvbVwiO1xuaW1wb3J0IHtcbiAgTGlicmFyeUl0ZW1zLFxuICBMaWJyYXJ5SXRlbSxcbiAgQXBwU3RhdGUsXG4gIEJpbmFyeUZpbGVzLFxuICBFeGNhbGlkcmF3UHJvcHMsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSBcIi4vRGlhbG9nXCI7XG5pbXBvcnQgeyBJc2xhbmQgfSBmcm9tIFwiLi9Jc2xhbmRcIjtcbmltcG9ydCBQdWJsaXNoTGlicmFyeSBmcm9tIFwiLi9QdWJsaXNoTGlicmFyeVwiO1xuaW1wb3J0IHsgVG9vbEJ1dHRvbiB9IGZyb20gXCIuL1Rvb2xCdXR0b25cIjtcblxuaW1wb3J0IFwiLi9MaWJyYXJ5TWVudS5zY3NzXCI7XG5pbXBvcnQgTGlicmFyeU1lbnVJdGVtcyBmcm9tIFwiLi9MaWJyYXJ5TWVudUl0ZW1zXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEtFWVMgfSBmcm9tIFwiLi4va2V5c1wiO1xuaW1wb3J0IHsgdHJhY2tFdmVudCB9IGZyb20gXCIuLi9hbmFseXRpY3NcIjtcbmltcG9ydCB7IHVzZUF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IGpvdGFpU2NvcGUgfSBmcm9tIFwiLi4vam90YWlcIjtcbmltcG9ydCBTcGlubmVyIGZyb20gXCIuL1NwaW5uZXJcIjtcbmltcG9ydCB7IHVzZURldmljZSB9IGZyb20gXCIuL0FwcFwiO1xuXG5jb25zdCB1c2VPbkNsaWNrT3V0c2lkZSA9IChcbiAgcmVmOiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+LFxuICBjYjogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkLFxuKSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcbiAgICAgICAgKHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgfHxcbiAgICAgICAgICAhZG9jdW1lbnQuYm9keS5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2IoZXZlbnQpO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGxpc3RlbmVyLCBmYWxzZSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGxpc3RlbmVyKTtcbiAgICB9O1xuICB9LCBbcmVmLCBjYl0pO1xufTtcblxuY29uc3QgZ2V0U2VsZWN0ZWRJdGVtcyA9IChcbiAgbGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMsXG4gIHNlbGVjdGVkSXRlbXM6IExpYnJhcnlJdGVtW1wiaWRcIl1bXSxcbikgPT4gbGlicmFyeUl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gc2VsZWN0ZWRJdGVtcy5pbmNsdWRlcyhpdGVtLmlkKSk7XG5cbmNvbnN0IExpYnJhcnlNZW51V3JhcHBlciA9IGZvcndhcmRSZWY8XG4gIEhUTUxEaXZFbGVtZW50LFxuICB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfVxuPigoeyBjaGlsZHJlbiB9LCByZWYpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8SXNsYW5kIHBhZGRpbmc9ezF9IHJlZj17cmVmfSBjbGFzc05hbWU9XCJsYXllci11aV9fbGlicmFyeVwiPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvSXNsYW5kPlxuICApO1xufSk7XG5cbmV4cG9ydCBjb25zdCBMaWJyYXJ5TWVudSA9ICh7XG4gIG9uQ2xvc2UsXG4gIG9uSW5zZXJ0TGlicmFyeUl0ZW1zLFxuICBwZW5kaW5nRWxlbWVudHMsXG4gIG9uQWRkVG9MaWJyYXJ5LFxuICB0aGVtZSxcbiAgc2V0QXBwU3RhdGUsXG4gIGZpbGVzLFxuICBsaWJyYXJ5UmV0dXJuVXJsLFxuICBmb2N1c0NvbnRhaW5lcixcbiAgbGlicmFyeSxcbiAgaWQsXG4gIGFwcFN0YXRlLFxufToge1xuICBwZW5kaW5nRWxlbWVudHM6IExpYnJhcnlJdGVtW1wiZWxlbWVudHNcIl07XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIG9uSW5zZXJ0TGlicmFyeUl0ZW1zOiAobGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMpID0+IHZvaWQ7XG4gIG9uQWRkVG9MaWJyYXJ5OiAoKSA9PiB2b2lkO1xuICB0aGVtZTogQXBwU3RhdGVbXCJ0aGVtZVwiXTtcbiAgZmlsZXM6IEJpbmFyeUZpbGVzO1xuICBzZXRBcHBTdGF0ZTogUmVhY3QuQ29tcG9uZW50PGFueSwgQXBwU3RhdGU+W1wic2V0U3RhdGVcIl07XG4gIGxpYnJhcnlSZXR1cm5Vcmw6IEV4Y2FsaWRyYXdQcm9wc1tcImxpYnJhcnlSZXR1cm5VcmxcIl07XG4gIGZvY3VzQ29udGFpbmVyOiAoKSA9PiB2b2lkO1xuICBsaWJyYXJ5OiBMaWJyYXJ5O1xuICBpZDogc3RyaW5nO1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG59KSA9PiB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGRldmljZSA9IHVzZURldmljZSgpO1xuXG4gIHVzZU9uQ2xpY2tPdXRzaWRlKFxuICAgIHJlZixcbiAgICB1c2VDYWxsYmFjayhcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICAvLyBJZiBjbGljayBvbiB0aGUgbGlicmFyeSBpY29uLCBkbyBub3RoaW5nLlxuICAgICAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KFwiLlRvb2xJY29uX19saWJyYXJ5XCIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXBwU3RhdGUuaXNMaWJyYXJ5TWVudURvY2tlZCB8fCAhZGV2aWNlLmNhbkRldmljZUZpdFNpZGViYXIpIHtcbiAgICAgICAgICBvbkNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbb25DbG9zZSwgYXBwU3RhdGUuaXNMaWJyYXJ5TWVudURvY2tlZCwgZGV2aWNlLmNhbkRldmljZUZpdFNpZGViYXJdLFxuICAgICksXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LmtleSA9PT0gS0VZUy5FU0NBUEUgJiZcbiAgICAgICAgKCFhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkIHx8ICFkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhcilcbiAgICAgICkge1xuICAgICAgICBvbkNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKEVWRU5ULktFWURPV04sIGhhbmRsZUtleURvd24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEVWRU5ULktFWURPV04sIGhhbmRsZUtleURvd24pO1xuICAgIH07XG4gIH0sIFtvbkNsb3NlLCBhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkLCBkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhcl0pO1xuXG4gIGNvbnN0IFtzZWxlY3RlZEl0ZW1zLCBzZXRTZWxlY3RlZEl0ZW1zXSA9IHVzZVN0YXRlPExpYnJhcnlJdGVtW1wiaWRcIl1bXT4oW10pO1xuICBjb25zdCBbc2hvd1B1Ymxpc2hMaWJyYXJ5RGlhbG9nLCBzZXRTaG93UHVibGlzaExpYnJhcnlEaWFsb2ddID1cbiAgICB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtwdWJsaXNoTGliU3VjY2Vzcywgc2V0UHVibGlzaExpYlN1Y2Nlc3NdID0gdXNlU3RhdGU8bnVsbCB8IHtcbiAgICB1cmw6IHN0cmluZztcbiAgICBhdXRob3JOYW1lOiBzdHJpbmc7XG4gIH0+KG51bGwpO1xuXG4gIGNvbnN0IFtsaWJyYXJ5SXRlbXNEYXRhXSA9IHVzZUF0b20obGlicmFyeUl0ZW1zQXRvbSwgam90YWlTY29wZSk7XG5cbiAgY29uc3QgcmVtb3ZlRnJvbUxpYnJhcnkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMpID0+IHtcbiAgICAgIGNvbnN0IG5leHRJdGVtcyA9IGxpYnJhcnlJdGVtcy5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PiAhc2VsZWN0ZWRJdGVtcy5pbmNsdWRlcyhpdGVtLmlkKSxcbiAgICAgICk7XG4gICAgICBsaWJyYXJ5LnNldExpYnJhcnkobmV4dEl0ZW1zKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHNldEFwcFN0YXRlKHsgZXJyb3JNZXNzYWdlOiB0KFwiYWxlcnRzLmVycm9yUmVtb3ZpbmdGcm9tTGlicmFyeVwiKSB9KTtcbiAgICAgIH0pO1xuICAgICAgc2V0U2VsZWN0ZWRJdGVtcyhbXSk7XG4gICAgfSxcbiAgICBbbGlicmFyeSwgc2V0QXBwU3RhdGUsIHNlbGVjdGVkSXRlbXMsIHNldFNlbGVjdGVkSXRlbXNdLFxuICApO1xuXG4gIGNvbnN0IHJlc2V0TGlicmFyeSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBsaWJyYXJ5LnJlc2V0TGlicmFyeSgpO1xuICAgIGZvY3VzQ29udGFpbmVyKCk7XG4gIH0sIFtsaWJyYXJ5LCBmb2N1c0NvbnRhaW5lcl0pO1xuXG4gIGNvbnN0IGFkZFRvTGlicmFyeSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChlbGVtZW50czogTGlicmFyeUl0ZW1bXCJlbGVtZW50c1wiXSwgbGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMpID0+IHtcbiAgICAgIHRyYWNrRXZlbnQoXCJlbGVtZW50XCIsIFwiYWRkVG9MaWJyYXJ5XCIsIFwidWlcIik7XG4gICAgICBpZiAoZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZWxlbWVudC50eXBlID09PSBcImltYWdlXCIpKSB7XG4gICAgICAgIHJldHVybiBzZXRBcHBTdGF0ZSh7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiBcIlN1cHBvcnQgZm9yIGFkZGluZyBpbWFnZXMgdG8gdGhlIGxpYnJhcnkgY29taW5nIHNvb24hXCIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV4dEl0ZW1zOiBMaWJyYXJ5SXRlbXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0dXM6IFwidW5wdWJsaXNoZWRcIixcbiAgICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgICBjcmVhdGVkOiBEYXRlLm5vdygpLFxuICAgICAgICB9LFxuICAgICAgICAuLi5saWJyYXJ5SXRlbXMsXG4gICAgICBdO1xuICAgICAgb25BZGRUb0xpYnJhcnkoKTtcbiAgICAgIGxpYnJhcnkuc2V0TGlicmFyeShuZXh0SXRlbXMpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgc2V0QXBwU3RhdGUoeyBlcnJvck1lc3NhZ2U6IHQoXCJhbGVydHMuZXJyb3JBZGRpbmdUb0xpYnJhcnlcIikgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtvbkFkZFRvTGlicmFyeSwgbGlicmFyeSwgc2V0QXBwU3RhdGVdLFxuICApO1xuXG4gIGNvbnN0IHJlbmRlclB1Ymxpc2hTdWNjZXNzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nXG4gICAgICAgIG9uQ2xvc2VSZXF1ZXN0PXsoKSA9PiBzZXRQdWJsaXNoTGliU3VjY2VzcyhudWxsKX1cbiAgICAgICAgdGl0bGU9e3QoXCJwdWJsaXNoU3VjY2Vzc0RpYWxvZy50aXRsZVwiKX1cbiAgICAgICAgY2xhc3NOYW1lPVwicHVibGlzaC1saWJyYXJ5LXN1Y2Nlc3NcIlxuICAgICAgICBzbWFsbD17dHJ1ZX1cbiAgICAgID5cbiAgICAgICAgPHA+XG4gICAgICAgICAge3QoXCJwdWJsaXNoU3VjY2Vzc0RpYWxvZy5jb250ZW50XCIsIHtcbiAgICAgICAgICAgIGF1dGhvck5hbWU6IHB1Ymxpc2hMaWJTdWNjZXNzIS5hdXRob3JOYW1lLFxuICAgICAgICAgIH0pfXtcIiBcIn1cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj17cHVibGlzaExpYlN1Y2Nlc3M/LnVybH1cbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dChcInB1Ymxpc2hTdWNjZXNzRGlhbG9nLmxpbmtcIil9XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxUb29sQnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLmNsb3NlXCIpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoXCJidXR0b25zLmNsb3NlXCIpfVxuICAgICAgICAgIGxhYmVsPXt0KFwiYnV0dG9ucy5jbG9zZVwiKX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRQdWJsaXNoTGliU3VjY2VzcyhudWxsKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInB1Ymxpc2gtbGlicmFyeS1zdWNjZXNzLWNsb3NlXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJwdWJsaXNoLWxpYnJhcnktc3VjY2Vzcy1jbG9zZVwiXG4gICAgICAgIC8+XG4gICAgICA8L0RpYWxvZz5cbiAgICApO1xuICB9LCBbc2V0UHVibGlzaExpYlN1Y2Nlc3MsIHB1Ymxpc2hMaWJTdWNjZXNzXSk7XG5cbiAgY29uc3Qgb25QdWJsaXNoTGliU3VjY2VzcyA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRhOiB7IHVybDogc3RyaW5nOyBhdXRob3JOYW1lOiBzdHJpbmcgfSwgbGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMpID0+IHtcbiAgICAgIHNldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZyhmYWxzZSk7XG4gICAgICBzZXRQdWJsaXNoTGliU3VjY2Vzcyh7IHVybDogZGF0YS51cmwsIGF1dGhvck5hbWU6IGRhdGEuYXV0aG9yTmFtZSB9KTtcbiAgICAgIGNvbnN0IG5leHRMaWJJdGVtcyA9IGxpYnJhcnlJdGVtcy5zbGljZSgpO1xuICAgICAgbmV4dExpYkl0ZW1zLmZvckVhY2goKGxpYkl0ZW0pID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXMuaW5jbHVkZXMobGliSXRlbS5pZCkpIHtcbiAgICAgICAgICBsaWJJdGVtLnN0YXR1cyA9IFwicHVibGlzaGVkXCI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGlicmFyeS5zZXRMaWJyYXJ5KG5leHRMaWJJdGVtcyk7XG4gICAgfSxcbiAgICBbc2V0U2hvd1B1Ymxpc2hMaWJyYXJ5RGlhbG9nLCBzZXRQdWJsaXNoTGliU3VjY2Vzcywgc2VsZWN0ZWRJdGVtcywgbGlicmFyeV0sXG4gICk7XG5cbiAgaWYgKFxuICAgIGxpYnJhcnlJdGVtc0RhdGEuc3RhdHVzID09PSBcImxvYWRpbmdcIiAmJlxuICAgICFsaWJyYXJ5SXRlbXNEYXRhLmlzSW5pdGlhbGl6ZWRcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMaWJyYXJ5TWVudVdyYXBwZXIgcmVmPXtyZWZ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxheWVyLXVpX19saWJyYXJ5LW1lc3NhZ2VcIj5cbiAgICAgICAgICA8U3Bpbm5lciBzaXplPVwiMmVtXCIgLz5cbiAgICAgICAgICA8c3Bhbj57dChcImxhYmVscy5saWJyYXJ5TG9hZGluZ01lc3NhZ2VcIil9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvTGlicmFyeU1lbnVXcmFwcGVyPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxMaWJyYXJ5TWVudVdyYXBwZXIgcmVmPXtyZWZ9PlxuICAgICAge3Nob3dQdWJsaXNoTGlicmFyeURpYWxvZyAmJiAoXG4gICAgICAgIDxQdWJsaXNoTGlicmFyeVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZyhmYWxzZSl9XG4gICAgICAgICAgbGlicmFyeUl0ZW1zPXtnZXRTZWxlY3RlZEl0ZW1zKFxuICAgICAgICAgICAgbGlicmFyeUl0ZW1zRGF0YS5saWJyYXJ5SXRlbXMsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICl9XG4gICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgIG9uU3VjY2Vzcz17KGRhdGEpID0+XG4gICAgICAgICAgICBvblB1Ymxpc2hMaWJTdWNjZXNzKGRhdGEsIGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zKVxuICAgICAgICAgIH1cbiAgICAgICAgICBvbkVycm9yPXsoZXJyb3IpID0+IHdpbmRvdy5hbGVydChlcnJvcil9XG4gICAgICAgICAgdXBkYXRlSXRlbXNJblN0b3JhZ2U9eygpID0+XG4gICAgICAgICAgICBsaWJyYXJ5LnNldExpYnJhcnkobGlicmFyeUl0ZW1zRGF0YS5saWJyYXJ5SXRlbXMpXG4gICAgICAgICAgfVxuICAgICAgICAgIG9uUmVtb3ZlPXsoaWQ6IHN0cmluZykgPT5cbiAgICAgICAgICAgIHNldFNlbGVjdGVkSXRlbXMoc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKF9pZCkgPT4gX2lkICE9PSBpZCkpXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtwdWJsaXNoTGliU3VjY2VzcyAmJiByZW5kZXJQdWJsaXNoU3VjY2VzcygpfVxuICAgICAgPExpYnJhcnlNZW51SXRlbXNcbiAgICAgICAgaXNMb2FkaW5nPXtsaWJyYXJ5SXRlbXNEYXRhLnN0YXR1cyA9PT0gXCJsb2FkaW5nXCJ9XG4gICAgICAgIGxpYnJhcnlJdGVtcz17bGlicmFyeUl0ZW1zRGF0YS5saWJyYXJ5SXRlbXN9XG4gICAgICAgIG9uUmVtb3ZlRnJvbUxpYnJhcnk9eygpID0+XG4gICAgICAgICAgcmVtb3ZlRnJvbUxpYnJhcnkobGlicmFyeUl0ZW1zRGF0YS5saWJyYXJ5SXRlbXMpXG4gICAgICAgIH1cbiAgICAgICAgb25BZGRUb0xpYnJhcnk9eyhlbGVtZW50cykgPT5cbiAgICAgICAgICBhZGRUb0xpYnJhcnkoZWxlbWVudHMsIGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zKVxuICAgICAgICB9XG4gICAgICAgIG9uSW5zZXJ0TGlicmFyeUl0ZW1zPXtvbkluc2VydExpYnJhcnlJdGVtc31cbiAgICAgICAgcGVuZGluZ0VsZW1lbnRzPXtwZW5kaW5nRWxlbWVudHN9XG4gICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBsaWJyYXJ5UmV0dXJuVXJsPXtsaWJyYXJ5UmV0dXJuVXJsfVxuICAgICAgICBsaWJyYXJ5PXtsaWJyYXJ5fVxuICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBzZWxlY3RlZEl0ZW1zPXtzZWxlY3RlZEl0ZW1zfVxuICAgICAgICBvblNlbGVjdEl0ZW1zPXsoaWRzKSA9PiBzZXRTZWxlY3RlZEl0ZW1zKGlkcyl9XG4gICAgICAgIG9uUHVibGlzaD17KCkgPT4gc2V0U2hvd1B1Ymxpc2hMaWJyYXJ5RGlhbG9nKHRydWUpfVxuICAgICAgICByZXNldExpYnJhcnk9e3Jlc2V0TGlicmFyeX1cbiAgICAgIC8+XG4gICAgPC9MaWJyYXJ5TWVudVdyYXBwZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/LibraryMenu.tsx\n");
2147
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LibraryMenu\": () => (/* binding */ LibraryMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _data_library__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../data/library */ \"../../data/library.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Dialog */ \"../../components/Dialog.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _PublishLibrary__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./PublishLibrary */ \"../../components/PublishLibrary.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./LibraryMenu.scss */ \"../../components/LibraryMenu.scss\");\n/* harmony import */ var _LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _LibraryMenuItems__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./LibraryMenuItems */ \"../../components/LibraryMenuItems.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! jotai */ \"../../../node_modules/jotai/esm/index.js\");\n/* harmony import */ var _jotai__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../jotai */ \"../../jotai.ts\");\n/* harmony import */ var _Spinner__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Spinner */ \"../../components/Spinner.tsx\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\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\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 useOnClickOutside = (ref, cb) => {\r\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\r\n const listener = (event) => {\r\n if (!ref.current) {\r\n return;\r\n }\r\n if (event.target instanceof Element &&\r\n (ref.current.contains(event.target) ||\r\n !document.body.contains(event.target))) {\r\n return;\r\n }\r\n cb(event);\r\n };\r\n document.addEventListener(\"pointerdown\", listener, false);\r\n return () => {\r\n document.removeEventListener(\"pointerdown\", listener);\r\n };\r\n }, [ref, cb]);\r\n};\r\nconst getSelectedItems = (libraryItems, selectedItems) => libraryItems.filter((item) => selectedItems.includes(item.id));\r\nconst LibraryMenuWrapper = (0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(({ children }, ref) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, ref: ref, className: \"layer-ui__library\" }, { children: children })));\r\n});\r\nconst LibraryMenu = ({ onClose, onInsertLibraryItems, pendingElements, onAddToLibrary, theme, setAppState, files, libraryReturnUrl, focusContainer, library, id, appState, }) => {\r\n const ref = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\r\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_16__.useDevice)();\r\n useOnClickOutside(ref, (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((event) => {\r\n // If click on the library icon, do nothing.\r\n if (event.target.closest(\".ToolIcon__library\")) {\r\n return;\r\n }\r\n if (!appState.isLibraryMenuDocked || !device.canDeviceFitSidebar) {\r\n onClose();\r\n }\r\n }, [onClose, appState.isLibraryMenuDocked, device.canDeviceFitSidebar]));\r\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\r\n const handleKeyDown = (event) => {\r\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_12__.KEYS.ESCAPE &&\r\n (!appState.isLibraryMenuDocked || !device.canDeviceFitSidebar)) {\r\n onClose();\r\n }\r\n };\r\n document.addEventListener(_constants__WEBPACK_IMPORTED_MODULE_11__.EVENT.KEYDOWN, handleKeyDown);\r\n return () => {\r\n document.removeEventListener(_constants__WEBPACK_IMPORTED_MODULE_11__.EVENT.KEYDOWN, handleKeyDown);\r\n };\r\n }, [onClose, appState.isLibraryMenuDocked, device.canDeviceFitSidebar]);\r\n const [selectedItems, setSelectedItems] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\r\n const [showPublishLibraryDialog, setShowPublishLibraryDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\r\n const [publishLibSuccess, setPublishLibSuccess] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\r\n const [libraryItemsData] = (0,jotai__WEBPACK_IMPORTED_MODULE_17__.useAtom)(_data_library__WEBPACK_IMPORTED_MODULE_2__.libraryItemsAtom, _jotai__WEBPACK_IMPORTED_MODULE_14__.jotaiScope);\r\n const removeFromLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((libraryItems) => __awaiter(void 0, void 0, void 0, function* () {\r\n const nextItems = libraryItems.filter((item) => !selectedItems.includes(item.id));\r\n library.setLibrary(nextItems).catch(() => {\r\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"alerts.errorRemovingFromLibrary\") });\r\n });\r\n setSelectedItems([]);\r\n }), [library, setAppState, selectedItems, setSelectedItems]);\r\n const resetLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {\r\n library.resetLibrary();\r\n focusContainer();\r\n }, [library, focusContainer]);\r\n const addToLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((elements, libraryItems) => __awaiter(void 0, void 0, void 0, function* () {\r\n (0,_analytics__WEBPACK_IMPORTED_MODULE_13__.trackEvent)(\"element\", \"addToLibrary\", \"ui\");\r\n if (elements.some((element) => element.type === \"image\")) {\r\n return setAppState({\r\n errorMessage: \"Support for adding images to the library coming soon!\",\r\n });\r\n }\r\n const nextItems = [\r\n {\r\n status: \"unpublished\",\r\n elements,\r\n id: (0,_random__WEBPACK_IMPORTED_MODULE_4__.randomId)(),\r\n created: Date.now(),\r\n },\r\n ...libraryItems,\r\n ];\r\n onAddToLibrary();\r\n library.setLibrary(nextItems).catch(() => {\r\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"alerts.errorAddingToLibrary\") });\r\n });\r\n }), [onAddToLibrary, library, setAppState]);\r\n const renderPublishSuccess = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Dialog__WEBPACK_IMPORTED_MODULE_5__.Dialog, Object.assign({ onCloseRequest: () => setPublishLibSuccess(null), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.title\"), className: \"publish-library-success\", small: true }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"p\", { children: [(0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.content\", {\r\n authorName: publishLibSuccess.authorName,\r\n }), \" \", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({ href: publishLibSuccess === null || publishLibSuccess === void 0 ? void 0 : publishLibSuccess.url, target: \"_blank\", rel: \"noopener noreferrer\" }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.link\") }))] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_8__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), onClick: () => setPublishLibSuccess(null), \"data-testid\": \"publish-library-success-close\", className: \"publish-library-success-close\" })] })));\r\n }, [setPublishLibSuccess, publishLibSuccess]);\r\n const onPublishLibSuccess = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((data, libraryItems) => {\r\n setShowPublishLibraryDialog(false);\r\n setPublishLibSuccess({ url: data.url, authorName: data.authorName });\r\n const nextLibItems = libraryItems.slice();\r\n nextLibItems.forEach((libItem) => {\r\n if (selectedItems.includes(libItem.id)) {\r\n libItem.status = \"published\";\r\n }\r\n });\r\n library.setLibrary(nextLibItems);\r\n }, [setShowPublishLibraryDialog, setPublishLibSuccess, selectedItems, library]);\r\n if (libraryItemsData.status === \"loading\" &&\r\n !libraryItemsData.isInitialized) {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LibraryMenuWrapper, Object.assign({ ref: ref }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"layer-ui__library-message\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Spinner__WEBPACK_IMPORTED_MODULE_15__[\"default\"], { size: \"2em\" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"labels.libraryLoadingMessage\") })] })) })));\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(LibraryMenuWrapper, Object.assign({ ref: ref }, { children: [showPublishLibraryDialog && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PublishLibrary__WEBPACK_IMPORTED_MODULE_7__[\"default\"], { onClose: () => setShowPublishLibraryDialog(false), libraryItems: getSelectedItems(libraryItemsData.libraryItems, selectedItems), appState: appState, onSuccess: (data) => onPublishLibSuccess(data, libraryItemsData.libraryItems), onError: (error) => window.alert(error), updateItemsInStorage: () => library.setLibrary(libraryItemsData.libraryItems), onRemove: (id) => setSelectedItems(selectedItems.filter((_id) => _id !== id)) })), publishLibSuccess && renderPublishSuccess(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenuItems__WEBPACK_IMPORTED_MODULE_10__[\"default\"], { isLoading: libraryItemsData.status === \"loading\", libraryItems: libraryItemsData.libraryItems, onRemoveFromLibrary: () => removeFromLibrary(libraryItemsData.libraryItems), onAddToLibrary: (elements) => addToLibrary(elements, libraryItemsData.libraryItems), onInsertLibraryItems: onInsertLibraryItems, pendingElements: pendingElements, setAppState: setAppState, appState: appState, libraryReturnUrl: libraryReturnUrl, library: library, theme: theme, files: files, id: id, selectedItems: selectedItems, onSelectItems: (ids) => setSelectedItems(ids), onPublish: () => setShowPublishLibraryDialog(true), resetLibrary: resetLibrary })] })));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQ1osRUFBRSxFQUFFLEVBQUUsRUFDTixhQUFhLEVBQUUsYUFBYSxFQUM1QixhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUM3QyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEVBQ2xELFlBQVksRUFBRSxZQUFZLEdBQzFCLEtBQ2lCLENBQ3RCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9MaWJyYXJ5TWVudS50c3g/YWM0NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZUNhbGxiYWNrLFxuICBSZWZPYmplY3QsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpYnJhcnksIHsgbGlicmFyeUl0ZW1zQXRvbSB9IGZyb20gXCIuLi9kYXRhL2xpYnJhcnlcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgcmFuZG9tSWQgfSBmcm9tIFwiLi4vcmFuZG9tXCI7XG5pbXBvcnQge1xuICBMaWJyYXJ5SXRlbXMsXG4gIExpYnJhcnlJdGVtLFxuICBBcHBTdGF0ZSxcbiAgQmluYXJ5RmlsZXMsXG4gIEV4Y2FsaWRyYXdQcm9wcyxcbn0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9EaWFsb2dcIjtcbmltcG9ydCB7IElzbGFuZCB9IGZyb20gXCIuL0lzbGFuZFwiO1xuaW1wb3J0IFB1Ymxpc2hMaWJyYXJ5IGZyb20gXCIuL1B1Ymxpc2hMaWJyYXJ5XCI7XG5pbXBvcnQgeyBUb29sQnV0dG9uIH0gZnJvbSBcIi4vVG9vbEJ1dHRvblwiO1xuXG5pbXBvcnQgXCIuL0xpYnJhcnlNZW51LnNjc3NcIjtcbmltcG9ydCBMaWJyYXJ5TWVudUl0ZW1zIGZyb20gXCIuL0xpYnJhcnlNZW51SXRlbXNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gXCIuLi9rZXlzXCI7XG5pbXBvcnQgeyB0cmFja0V2ZW50IH0gZnJvbSBcIi4uL2FuYWx5dGljc1wiO1xuaW1wb3J0IHsgdXNlQXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IHsgam90YWlTY29wZSB9IGZyb20gXCIuLi9qb3RhaVwiO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSBcIi4vU3Bpbm5lclwiO1xuaW1wb3J0IHsgdXNlRGV2aWNlIH0gZnJvbSBcIi4vQXBwXCI7XG5cbmNvbnN0IHVzZU9uQ2xpY2tPdXRzaWRlID0gKFxuICByZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4sXG4gIGNiOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQsXG4pID0+IHtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKCFyZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJlxuICAgICAgICAocmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSB8fFxuICAgICAgICAgICFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjYihldmVudCk7XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgbGlzdGVuZXIsIGZhbHNlKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgbGlzdGVuZXIpO1xuICAgIH07XG4gIH0sIFtyZWYsIGNiXSk7XG59O1xuXG5jb25zdCBnZXRTZWxlY3RlZEl0ZW1zID0gKFxuICBsaWJyYXJ5SXRlbXM6IExpYnJhcnlJdGVtcyxcbiAgc2VsZWN0ZWRJdGVtczogTGlicmFyeUl0ZW1bXCJpZFwiXVtdLFxuKSA9PiBsaWJyYXJ5SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGl0ZW0uaWQpKTtcblxuY29uc3QgTGlicmFyeU1lbnVXcmFwcGVyID0gZm9yd2FyZFJlZjxcbiAgSFRNTERpdkVsZW1lbnQsXG4gIHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9XG4+KCh7IGNoaWxkcmVuIH0sIHJlZikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxJc2xhbmQgcGFkZGluZz17MX0gcmVmPXtyZWZ9IGNsYXNzTmFtZT1cImxheWVyLXVpX19saWJyYXJ5XCI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Jc2xhbmQ+XG4gICk7XG59KTtcblxuZXhwb3J0IGNvbnN0IExpYnJhcnlNZW51ID0gKHtcbiAgb25DbG9zZSxcbiAgb25JbnNlcnRMaWJyYXJ5SXRlbXMsXG4gIHBlbmRpbmdFbGVtZW50cyxcbiAgb25BZGRUb0xpYnJhcnksXG4gIHRoZW1lLFxuICBzZXRBcHBTdGF0ZSxcbiAgZmlsZXMsXG4gIGxpYnJhcnlSZXR1cm5VcmwsXG4gIGZvY3VzQ29udGFpbmVyLFxuICBsaWJyYXJ5LFxuICBpZCxcbiAgYXBwU3RhdGUsXG59OiB7XG4gIHBlbmRpbmdFbGVtZW50czogTGlicmFyeUl0ZW1bXCJlbGVtZW50c1wiXTtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgb25JbnNlcnRMaWJyYXJ5SXRlbXM6IChsaWJyYXJ5SXRlbXM6IExpYnJhcnlJdGVtcykgPT4gdm9pZDtcbiAgb25BZGRUb0xpYnJhcnk6ICgpID0+IHZvaWQ7XG4gIHRoZW1lOiBBcHBTdGF0ZVtcInRoZW1lXCJdO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG4gIHNldEFwcFN0YXRlOiBSZWFjdC5Db21wb25lbnQ8YW55LCBBcHBTdGF0ZT5bXCJzZXRTdGF0ZVwiXTtcbiAgbGlicmFyeVJldHVyblVybDogRXhjYWxpZHJhd1Byb3BzW1wibGlicmFyeVJldHVyblVybFwiXTtcbiAgZm9jdXNDb250YWluZXI6ICgpID0+IHZvaWQ7XG4gIGxpYnJhcnk6IExpYnJhcnk7XG4gIGlkOiBzdHJpbmc7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbn0pID0+IHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgZGV2aWNlID0gdXNlRGV2aWNlKCk7XG5cbiAgdXNlT25DbGlja091dHNpZGUoXG4gICAgcmVmLFxuICAgIHVzZUNhbGxiYWNrKFxuICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIElmIGNsaWNrIG9uIHRoZSBsaWJyYXJ5IGljb24sIGRvIG5vdGhpbmcuXG4gICAgICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmNsb3Nlc3QoXCIuVG9vbEljb25fX2xpYnJhcnlcIikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkIHx8ICFkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhcikge1xuICAgICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtvbkNsb3NlLCBhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkLCBkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhcl0sXG4gICAgKSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnQua2V5ID09PSBLRVlTLkVTQ0FQRSAmJlxuICAgICAgICAoIWFwcFN0YXRlLmlzTGlicmFyeU1lbnVEb2NrZWQgfHwgIWRldmljZS5jYW5EZXZpY2VGaXRTaWRlYmFyKVxuICAgICAgKSB7XG4gICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoRVZFTlQuS0VZRE9XTiwgaGFuZGxlS2V5RG93bik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoRVZFTlQuS0VZRE9XTiwgaGFuZGxlS2V5RG93bik7XG4gICAgfTtcbiAgfSwgW29uQ2xvc2UsIGFwcFN0YXRlLmlzTGlicmFyeU1lbnVEb2NrZWQsIGRldmljZS5jYW5EZXZpY2VGaXRTaWRlYmFyXSk7XG5cbiAgY29uc3QgW3NlbGVjdGVkSXRlbXMsIHNldFNlbGVjdGVkSXRlbXNdID0gdXNlU3RhdGU8TGlicmFyeUl0ZW1bXCJpZFwiXVtdPihbXSk7XG4gIGNvbnN0IFtzaG93UHVibGlzaExpYnJhcnlEaWFsb2csIHNldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZ10gPVxuICAgIHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3B1Ymxpc2hMaWJTdWNjZXNzLCBzZXRQdWJsaXNoTGliU3VjY2Vzc10gPSB1c2VTdGF0ZTxudWxsIHwge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGF1dGhvck5hbWU6IHN0cmluZztcbiAgfT4obnVsbCk7XG5cbiAgY29uc3QgW2xpYnJhcnlJdGVtc0RhdGFdID0gdXNlQXRvbShsaWJyYXJ5SXRlbXNBdG9tLCBqb3RhaVNjb3BlKTtcblxuICBjb25zdCByZW1vdmVGcm9tTGlicmFyeSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChsaWJyYXJ5SXRlbXM6IExpYnJhcnlJdGVtcykgPT4ge1xuICAgICAgY29uc3QgbmV4dEl0ZW1zID0gbGlicmFyeUl0ZW1zLmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+ICFzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGl0ZW0uaWQpLFxuICAgICAgKTtcbiAgICAgIGxpYnJhcnkuc2V0TGlicmFyeShuZXh0SXRlbXMpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgc2V0QXBwU3RhdGUoeyBlcnJvck1lc3NhZ2U6IHQoXCJhbGVydHMuZXJyb3JSZW1vdmluZ0Zyb21MaWJyYXJ5XCIpIH0pO1xuICAgICAgfSk7XG4gICAgICBzZXRTZWxlY3RlZEl0ZW1zKFtdKTtcbiAgICB9LFxuICAgIFtsaWJyYXJ5LCBzZXRBcHBTdGF0ZSwgc2VsZWN0ZWRJdGVtcywgc2V0U2VsZWN0ZWRJdGVtc10sXG4gICk7XG5cbiAgY29uc3QgcmVzZXRMaWJyYXJ5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxpYnJhcnkucmVzZXRMaWJyYXJ5KCk7XG4gICAgZm9jdXNDb250YWluZXIoKTtcbiAgfSwgW2xpYnJhcnksIGZvY3VzQ29udGFpbmVyXSk7XG5cbiAgY29uc3QgYWRkVG9MaWJyYXJ5ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGVsZW1lbnRzOiBMaWJyYXJ5SXRlbVtcImVsZW1lbnRzXCJdLCBsaWJyYXJ5SXRlbXM6IExpYnJhcnlJdGVtcykgPT4ge1xuICAgICAgdHJhY2tFdmVudChcImVsZW1lbnRcIiwgXCJhZGRUb0xpYnJhcnlcIiwgXCJ1aVwiKTtcbiAgICAgIGlmIChlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBlbGVtZW50LnR5cGUgPT09IFwiaW1hZ2VcIikpIHtcbiAgICAgICAgcmV0dXJuIHNldEFwcFN0YXRlKHtcbiAgICAgICAgICBlcnJvck1lc3NhZ2U6IFwiU3VwcG9ydCBmb3IgYWRkaW5nIGltYWdlcyB0byB0aGUgbGlicmFyeSBjb21pbmcgc29vbiFcIixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0SXRlbXM6IExpYnJhcnlJdGVtcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YXR1czogXCJ1bnB1Ymxpc2hlZFwiLFxuICAgICAgICAgIGVsZW1lbnRzLFxuICAgICAgICAgIGlkOiByYW5kb21JZCgpLFxuICAgICAgICAgIGNyZWF0ZWQ6IERhdGUubm93KCksXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmxpYnJhcnlJdGVtcyxcbiAgICAgIF07XG4gICAgICBvbkFkZFRvTGlicmFyeSgpO1xuICAgICAgbGlicmFyeS5zZXRMaWJyYXJ5KG5leHRJdGVtcykuY2F0Y2goKCkgPT4ge1xuICAgICAgICBzZXRBcHBTdGF0ZSh7IGVycm9yTWVzc2FnZTogdChcImFsZXJ0cy5lcnJvckFkZGluZ1RvTGlicmFyeVwiKSB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW29uQWRkVG9MaWJyYXJ5LCBsaWJyYXJ5LCBzZXRBcHBTdGF0ZV0sXG4gICk7XG5cbiAgY29uc3QgcmVuZGVyUHVibGlzaFN1Y2Nlc3MgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dcbiAgICAgICAgb25DbG9zZVJlcXVlc3Q9eygpID0+IHNldFB1Ymxpc2hMaWJTdWNjZXNzKG51bGwpfVxuICAgICAgICB0aXRsZT17dChcInB1Ymxpc2hTdWNjZXNzRGlhbG9nLnRpdGxlXCIpfVxuICAgICAgICBjbGFzc05hbWU9XCJwdWJsaXNoLWxpYnJhcnktc3VjY2Vzc1wiXG4gICAgICAgIHNtYWxsPXt0cnVlfVxuICAgICAgPlxuICAgICAgICA8cD5cbiAgICAgICAgICB7dChcInB1Ymxpc2hTdWNjZXNzRGlhbG9nLmNvbnRlbnRcIiwge1xuICAgICAgICAgICAgYXV0aG9yTmFtZTogcHVibGlzaExpYlN1Y2Nlc3MhLmF1dGhvck5hbWUsXG4gICAgICAgICAgfSl9e1wiIFwifVxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBocmVmPXtwdWJsaXNoTGliU3VjY2Vzcz8udXJsfVxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KFwicHVibGlzaFN1Y2Nlc3NEaWFsb2cubGlua1wiKX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMuY2xvc2VcIil9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuY2xvc2VcIil9XG4gICAgICAgICAgbGFiZWw9e3QoXCJidXR0b25zLmNsb3NlXCIpfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFB1Ymxpc2hMaWJTdWNjZXNzKG51bGwpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwicHVibGlzaC1saWJyYXJ5LXN1Y2Nlc3MtY2xvc2VcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInB1Ymxpc2gtbGlicmFyeS1zdWNjZXNzLWNsb3NlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvRGlhbG9nPlxuICAgICk7XG4gIH0sIFtzZXRQdWJsaXNoTGliU3VjY2VzcywgcHVibGlzaExpYlN1Y2Nlc3NdKTtcblxuICBjb25zdCBvblB1Ymxpc2hMaWJTdWNjZXNzID0gdXNlQ2FsbGJhY2soXG4gICAgKGRhdGEsIGxpYnJhcnlJdGVtczogTGlicmFyeUl0ZW1zKSA9PiB7XG4gICAgICBzZXRTaG93UHVibGlzaExpYnJhcnlEaWFsb2coZmFsc2UpO1xuICAgICAgc2V0UHVibGlzaExpYlN1Y2Nlc3MoeyB1cmw6IGRhdGEudXJsLCBhdXRob3JOYW1lOiBkYXRhLmF1dGhvck5hbWUgfSk7XG4gICAgICBjb25zdCBuZXh0TGliSXRlbXMgPSBsaWJyYXJ5SXRlbXMuc2xpY2UoKTtcbiAgICAgIG5leHRMaWJJdGVtcy5mb3JFYWNoKChsaWJJdGVtKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGxpYkl0ZW0uaWQpKSB7XG4gICAgICAgICAgbGliSXRlbS5zdGF0dXMgPSBcInB1Ymxpc2hlZFwiO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxpYnJhcnkuc2V0TGlicmFyeShuZXh0TGliSXRlbXMpO1xuICAgIH0sXG4gICAgW3NldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZywgc2V0UHVibGlzaExpYlN1Y2Nlc3MsIHNlbGVjdGVkSXRlbXMsIGxpYnJhcnldLFxuICApO1xuXG4gIGlmIChcbiAgICBsaWJyYXJ5SXRlbXNEYXRhLnN0YXR1cyA9PT0gXCJsb2FkaW5nXCIgJiZcbiAgICAhbGlicmFyeUl0ZW1zRGF0YS5pc0luaXRpYWxpemVkXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGlicmFyeU1lbnVXcmFwcGVyIHJlZj17cmVmfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYXllci11aV9fbGlicmFyeS1tZXNzYWdlXCI+XG4gICAgICAgICAgPFNwaW5uZXIgc2l6ZT1cIjJlbVwiIC8+XG4gICAgICAgICAgPHNwYW4+e3QoXCJsYWJlbHMubGlicmFyeUxvYWRpbmdNZXNzYWdlXCIpfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0xpYnJhcnlNZW51V3JhcHBlcj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8TGlicmFyeU1lbnVXcmFwcGVyIHJlZj17cmVmfT5cbiAgICAgIHtzaG93UHVibGlzaExpYnJhcnlEaWFsb2cgJiYgKFxuICAgICAgICA8UHVibGlzaExpYnJhcnlcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UHVibGlzaExpYnJhcnlEaWFsb2coZmFsc2UpfVxuICAgICAgICAgIGxpYnJhcnlJdGVtcz17Z2V0U2VsZWN0ZWRJdGVtcyhcbiAgICAgICAgICAgIGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICApfVxuICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICBvblN1Y2Nlc3M9eyhkYXRhKSA9PlxuICAgICAgICAgICAgb25QdWJsaXNoTGliU3VjY2VzcyhkYXRhLCBsaWJyYXJ5SXRlbXNEYXRhLmxpYnJhcnlJdGVtcylcbiAgICAgICAgICB9XG4gICAgICAgICAgb25FcnJvcj17KGVycm9yKSA9PiB3aW5kb3cuYWxlcnQoZXJyb3IpfVxuICAgICAgICAgIHVwZGF0ZUl0ZW1zSW5TdG9yYWdlPXsoKSA9PlxuICAgICAgICAgICAgbGlicmFyeS5zZXRMaWJyYXJ5KGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zKVxuICAgICAgICAgIH1cbiAgICAgICAgICBvblJlbW92ZT17KGlkOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEl0ZW1zKHNlbGVjdGVkSXRlbXMuZmlsdGVyKChfaWQpID0+IF9pZCAhPT0gaWQpKVxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7cHVibGlzaExpYlN1Y2Nlc3MgJiYgcmVuZGVyUHVibGlzaFN1Y2Nlc3MoKX1cbiAgICAgIDxMaWJyYXJ5TWVudUl0ZW1zXG4gICAgICAgIGlzTG9hZGluZz17bGlicmFyeUl0ZW1zRGF0YS5zdGF0dXMgPT09IFwibG9hZGluZ1wifVxuICAgICAgICBsaWJyYXJ5SXRlbXM9e2xpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zfVxuICAgICAgICBvblJlbW92ZUZyb21MaWJyYXJ5PXsoKSA9PlxuICAgICAgICAgIHJlbW92ZUZyb21MaWJyYXJ5KGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zKVxuICAgICAgICB9XG4gICAgICAgIG9uQWRkVG9MaWJyYXJ5PXsoZWxlbWVudHMpID0+XG4gICAgICAgICAgYWRkVG9MaWJyYXJ5KGVsZW1lbnRzLCBsaWJyYXJ5SXRlbXNEYXRhLmxpYnJhcnlJdGVtcylcbiAgICAgICAgfVxuICAgICAgICBvbkluc2VydExpYnJhcnlJdGVtcz17b25JbnNlcnRMaWJyYXJ5SXRlbXN9XG4gICAgICAgIHBlbmRpbmdFbGVtZW50cz17cGVuZGluZ0VsZW1lbnRzfVxuICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgbGlicmFyeVJldHVyblVybD17bGlicmFyeVJldHVyblVybH1cbiAgICAgICAgbGlicmFyeT17bGlicmFyeX1cbiAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICBmaWxlcz17ZmlsZXN9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgc2VsZWN0ZWRJdGVtcz17c2VsZWN0ZWRJdGVtc31cbiAgICAgICAgb25TZWxlY3RJdGVtcz17KGlkcykgPT4gc2V0U2VsZWN0ZWRJdGVtcyhpZHMpfVxuICAgICAgICBvblB1Ymxpc2g9eygpID0+IHNldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZyh0cnVlKX1cbiAgICAgICAgcmVzZXRMaWJyYXJ5PXtyZXNldExpYnJhcnl9XG4gICAgICAvPlxuICAgIDwvTGlicmFyeU1lbnVXcmFwcGVyPlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/LibraryMenu.tsx\n");
2137
2148
 
2138
2149
  /***/ }),
2139
2150
 
@@ -2188,7 +2199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2188
2199
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2189
2200
 
2190
2201
  "use strict";
2191
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MobileMenu\": () => (/* binding */ MobileMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _CollabButton__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./CollabButton */ \"../../components/CollabButton.tsx\");\n/* harmony import */ var _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../scene/scrollbars */ \"../../scene/scrollbars.ts\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./BackgroundPickerAndDarkModeToggle */ \"../../components/BackgroundPickerAndDarkModeToggle.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\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\n\r\n\r\n\r\n\r\n\r\nconst MobileMenu = ({ onHomeButtonClick, appState, elements, libraryMenu, actionManager, renderJSONExportDialog, renderImageExportDialog, setAppState, onCollabButtonClick, onLockToggle, onPenModeToggle, canvas, isCollaborating, renderCustomFooter, showThemeBtn, onImageAction, renderTopRightUI, renderStats, UIOptions, }) => {\r\n const renderToolbar = () => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__.FixedSideContainer, Object.assign({ side: \"top\", className: \"App-top-bar\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_9__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4, align: \"center\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1, className: \"App-toolbar-container\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, className: \"App-toolbar\" }, { children: [heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_8__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\r\n onImageAction({\r\n insertOnCanvasDirectly: pointerType !== \"mouse\",\r\n });\r\n } }) }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_17__.ToolButton, { type: \"button\", className: \"HomeButton ToolIcon_type_floating\", title: \"Home\", \"aria-label\": \"Home\", icon: _icons__WEBPACK_IMPORTED_MODULE_18__.home, onClick: onHomeButtonClick }, \"home\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_12__.LockButton, { checked: appState.activeTool.locked, onChange: onLockToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.lock\"), isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_15__.LibraryButton, { appState: appState, setAppState: setAppState, isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_16__.PenModeButton, { checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.penMode\"), isMobile: true, penDetected: appState.penDetected })] })), libraryMenu] }))) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { display: \"flex\" } }, { children: renderTopRightUI === null || renderTopRightUI === void 0 ? void 0 : renderTopRightUI(true, appState, canvas) }))] })));\r\n };\r\n const renderAppToolbar = () => {\r\n // Render eraser conditionally in mobile\r\n const showEraser = !appState.viewModeEnabled &&\r\n !appState.editingElement &&\r\n (0,_scene__WEBPACK_IMPORTED_MODULE_7__.getSelectedElements)(elements, appState).length === 0;\r\n if (appState.viewModeEnabled) {\r\n return UIOptions.canvasActions ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: actionManager.renderAction(\"toggleCanvasMenu\") }))) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { children: \"Excalidraw\" }));\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: [UIOptions.canvasActions &&\r\n actionManager.renderAction(\"toggleCanvasMenu\"), actionManager.renderAction(\"toggleEditMenu\"), actionManager.renderAction(\"undo\"), actionManager.renderAction(\"redo\"), showEraser && actionManager.renderAction(\"eraser\"), actionManager.renderAction(appState.multiElement ? \"finalize\" : \"duplicateSelection\"), actionManager.renderAction(\"deleteSelectedElements\")] })));\r\n };\r\n const renderCanvasActions = () => {\r\n if (appState.viewModeEnabled) {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [renderJSONExportDialog(), renderImageExportDialog()] }));\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [actionManager.renderAction(\"clearCanvas\"), actionManager.renderAction(\"loadScene\"), renderJSONExportDialog(), renderImageExportDialog(), onCollabButtonClick && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CollabButton__WEBPACK_IMPORTED_MODULE_10__[\"default\"], { isCollaborating: isCollaborating, collaboratorCount: appState.collaborators.size, onClick: onCollabButtonClick })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_14__.BackgroundPickerAndDarkModeToggle, { actionManager: actionManager, appState: appState, setAppState: setAppState, showThemeBtn: showThemeBtn })] }));\r\n };\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [!appState.viewModeEnabled && renderToolbar(), renderStats(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-bottom-bar\", style: {\r\n marginBottom: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\r\n marginLeft: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\r\n marginRight: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\r\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 0 }, { children: [UIOptions.canvasActions && appState.openMenu === \"canvas\" ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_9__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"canvasActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"panelColumn\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4 }, { children: [renderCanvasActions(), renderCustomFooter === null || renderCustomFooter === void 0 ? void 0 : renderCustomFooter(true, appState), appState.collaborators.size > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"labels.collaborators\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_13__.UserList, { mobile: true, layout: \"horizontal\", collaborators: appState.collaborators, actionManager: actionManager })] }))] })) })) }))) : appState.openMenu === \"shape\" &&\r\n !appState.viewModeEnabled &&\r\n (0,_element__WEBPACK_IMPORTED_MODULE_4__.showSelectedShapeActions)(appState, elements) ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_9__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"selectedShapeActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_8__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction, activeTool: appState.activeTool.type }) }))) : null, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ className: \"App-toolbar\" }, { children: [renderAppToolbar(), appState.scrolledOutside &&\r\n !appState.openMenu &&\r\n !appState.isLibraryOpen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\r\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_7__.calculateScrollCenter)(elements, appState, canvas)));\r\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"buttons.scrollBackToContent\") })))] }))] })) }))] }));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBRSxNQUFNLENBQUMsRUFDcEQsQ0FBQztvQ0FDTCxDQUFDLGdCQUVBLHdDQUFDLENBQUMsNkJBQTZCLENBQUMsSUFDMUIsQ0FDVixLQUNJLEtBQ0YsSUFDTCxJQUNMLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL01vYmlsZU1lbnUudHN4PzA4YzQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQXBwUHJvcHMsIEFwcFN0YXRlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBBY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL2FjdGlvbnMvbWFuYWdlclwiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyB9IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgeyBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgRml4ZWRTaWRlQ29udGFpbmVyIH0gZnJvbSBcIi4vRml4ZWRTaWRlQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBJc2xhbmQgfSBmcm9tIFwiLi9Jc2xhbmRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZVNjcm9sbENlbnRlciwgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgU2VsZWN0ZWRTaGFwZUFjdGlvbnMsIFNoYXBlc1N3aXRjaGVyIH0gZnJvbSBcIi4vQWN0aW9uc1wiO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gXCIuL1NlY3Rpb25cIjtcbmltcG9ydCBDb2xsYWJCdXR0b24gZnJvbSBcIi4vQ29sbGFiQnV0dG9uXCI7XG5pbXBvcnQgeyBTQ1JPTExCQVJfV0lEVEgsIFNDUk9MTEJBUl9NQVJHSU4gfSBmcm9tIFwiLi4vc2NlbmUvc2Nyb2xsYmFyc1wiO1xuaW1wb3J0IHsgTG9ja0J1dHRvbiB9IGZyb20gXCIuL0xvY2tCdXR0b25cIjtcbmltcG9ydCB7IFVzZXJMaXN0IH0gZnJvbSBcIi4vVXNlckxpc3RcIjtcbmltcG9ydCB7IEJhY2tncm91bmRQaWNrZXJBbmREYXJrTW9kZVRvZ2dsZSB9IGZyb20gXCIuL0JhY2tncm91bmRQaWNrZXJBbmREYXJrTW9kZVRvZ2dsZVwiO1xuaW1wb3J0IHsgTGlicmFyeUJ1dHRvbiB9IGZyb20gXCIuL0xpYnJhcnlCdXR0b25cIjtcbmltcG9ydCB7IFBlbk1vZGVCdXR0b24gfSBmcm9tIFwiLi9QZW5Nb2RlQnV0dG9uXCI7XG5pbXBvcnQgeyBUb29sQnV0dG9uIH0gZnJvbSBcIi4vVG9vbEJ1dHRvblwiO1xuaW1wb3J0IHsgaG9tZSB9IGZyb20gXCIuL2ljb25zXCI7XG5cbnR5cGUgTW9iaWxlTWVudVByb3BzID0ge1xuICBvbkhvbWVCdXR0b25DbGljaz86ICgpID0+IHZvaWQ7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgcmVuZGVySlNPTkV4cG9ydERpYWxvZzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICByZW5kZXJJbWFnZUV4cG9ydERpYWxvZzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBzZXRBcHBTdGF0ZTogUmVhY3QuQ29tcG9uZW50PGFueSwgQXBwU3RhdGU+W1wic2V0U3RhdGVcIl07XG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXTtcbiAgbGlicmFyeU1lbnU6IEpTWC5FbGVtZW50IHwgbnVsbDtcbiAgb25Db2xsYWJCdXR0b25DbGljaz86ICgpID0+IHZvaWQ7XG4gIG9uTG9ja1RvZ2dsZTogKCkgPT4gdm9pZDtcbiAgb25QZW5Nb2RlVG9nZ2xlOiAoKSA9PiB2b2lkO1xuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbDtcbiAgaXNDb2xsYWJvcmF0aW5nOiBib29sZWFuO1xuICByZW5kZXJDdXN0b21Gb290ZXI/OiAoXG4gICAgaXNNb2JpbGU6IGJvb2xlYW4sXG4gICAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuICApID0+IEpTWC5FbGVtZW50IHwgbnVsbDtcbiAgc2hvd1RoZW1lQnRuOiBib29sZWFuO1xuICBvbkltYWdlQWN0aW9uOiAoZGF0YTogeyBpbnNlcnRPbkNhbnZhc0RpcmVjdGx5OiBib29sZWFuIH0pID0+IHZvaWQ7XG4gIHJlbmRlclRvcFJpZ2h0VUk/OiAoXG4gICAgaXNNb2JpbGU6IGJvb2xlYW4sXG4gICAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLFxuICApID0+IEpTWC5FbGVtZW50IHwgbnVsbDtcbiAgcmVuZGVyU3RhdHM6ICgpID0+IEpTWC5FbGVtZW50IHwgbnVsbDtcbiAgVUlPcHRpb25zOiBBcHBQcm9wc1tcIlVJT3B0aW9uc1wiXTtcbn07XG5cbmV4cG9ydCBjb25zdCBNb2JpbGVNZW51ID0gKHtcbiAgb25Ib21lQnV0dG9uQ2xpY2ssXG4gIGFwcFN0YXRlLFxuICBlbGVtZW50cyxcbiAgbGlicmFyeU1lbnUsXG4gIGFjdGlvbk1hbmFnZXIsXG4gIHJlbmRlckpTT05FeHBvcnREaWFsb2csXG4gIHJlbmRlckltYWdlRXhwb3J0RGlhbG9nLFxuICBzZXRBcHBTdGF0ZSxcbiAgb25Db2xsYWJCdXR0b25DbGljayxcbiAgb25Mb2NrVG9nZ2xlLFxuICBvblBlbk1vZGVUb2dnbGUsXG4gIGNhbnZhcyxcbiAgaXNDb2xsYWJvcmF0aW5nLFxuICByZW5kZXJDdXN0b21Gb290ZXIsXG4gIHNob3dUaGVtZUJ0bixcbiAgb25JbWFnZUFjdGlvbixcbiAgcmVuZGVyVG9wUmlnaHRVSSxcbiAgcmVuZGVyU3RhdHMsXG4gIFVJT3B0aW9ucyxcbn06IE1vYmlsZU1lbnVQcm9wcykgPT4ge1xuICBjb25zdCByZW5kZXJUb29sYmFyID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8Rml4ZWRTaWRlQ29udGFpbmVyIHNpZGU9XCJ0b3BcIiBjbGFzc05hbWU9XCJBcHAtdG9wLWJhclwiPlxuICAgICAgICB7LyogcGxhY2Vob2xkZXIgZm9yIGdyaWQgMy1jb2x1bW4gdGVtcGxhdGUgKi99XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgIDxTZWN0aW9uIGhlYWRpbmc9XCJzaGFwZXNcIj5cbiAgICAgICAgICB7KGhlYWRpbmc6IFJlYWN0LlJlYWN0Tm9kZSkgPT4gKFxuICAgICAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezR9IGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxTdGFjay5Sb3cgZ2FwPXsxfSBjbGFzc05hbWU9XCJBcHAtdG9vbGJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8SXNsYW5kIHBhZGRpbmc9ezF9IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgICB7aGVhZGluZ31cbiAgICAgICAgICAgICAgICAgIDxTdGFjay5Sb3cgZ2FwPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgPFNoYXBlc1N3aXRjaGVyXG4gICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcz17Y2FudmFzfVxuICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2w9e2FwcFN0YXRlLmFjdGl2ZVRvb2x9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgIG9uSW1hZ2VBY3Rpb249eyh7IHBvaW50ZXJUeXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1hZ2VBY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPbkNhbnZhc0RpcmVjdGx5OiBwb2ludGVyVHlwZSAhPT0gXCJtb3VzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICAgICAgICAgIDwvSXNsYW5kPlxuICAgICAgICAgICAgICAgIDxUb29sQnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9XCJob21lXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiSG9tZUJ1dHRvbiBUb29sSWNvbl90eXBlX2Zsb2F0aW5nXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtcIkhvbWVcIn1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e1wiSG9tZVwifVxuICAgICAgICAgICAgICAgICAgaWNvbj17aG9tZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uSG9tZUJ1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPExvY2tCdXR0b25cbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLmFjdGl2ZVRvb2wubG9ja2VkfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uTG9ja1RvZ2dsZX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXt0KFwidG9vbEJhci5sb2NrXCIpfVxuICAgICAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxMaWJyYXJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICBpc01vYmlsZVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFBlbk1vZGVCdXR0b25cbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLnBlbk1vZGV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25QZW5Nb2RlVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoXCJ0b29sQmFyLnBlbk1vZGVcIil9XG4gICAgICAgICAgICAgICAgICBpc01vYmlsZVxuICAgICAgICAgICAgICAgICAgcGVuRGV0ZWN0ZWQ9e2FwcFN0YXRlLnBlbkRldGVjdGVkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICAgICAgICB7bGlicmFyeU1lbnV9XG4gICAgICAgICAgICA8L1N0YWNrLkNvbD5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIgfX0+XG4gICAgICAgICAge3JlbmRlclRvcFJpZ2h0VUk/Lih0cnVlLCBhcHBTdGF0ZSwgY2FudmFzKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0ZpeGVkU2lkZUNvbnRhaW5lcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckFwcFRvb2xiYXIgPSAoKSA9PiB7XG4gICAgLy8gUmVuZGVyIGVyYXNlciBjb25kaXRpb25hbGx5IGluIG1vYmlsZVxuICAgIGNvbnN0IHNob3dFcmFzZXIgPVxuICAgICAgIWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJlxuICAgICAgIWFwcFN0YXRlLmVkaXRpbmdFbGVtZW50ICYmXG4gICAgICBnZXRTZWxlY3RlZEVsZW1lbnRzKGVsZW1lbnRzLCBhcHBTdGF0ZSkubGVuZ3RoID09PSAwO1xuXG4gICAgaWYgKGFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIFVJT3B0aW9ucy5jYW52YXNBY3Rpb25zID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyLWNvbnRlbnRcIj5cbiAgICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJ0b2dnbGVDYW52YXNNZW51XCIpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXY+RXhjYWxpZHJhdzwvZGl2PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJBcHAtdG9vbGJhci1jb250ZW50XCI+XG4gICAgICAgIHtVSU9wdGlvbnMuY2FudmFzQWN0aW9ucyAmJlxuICAgICAgICAgIGFjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidG9nZ2xlQ2FudmFzTWVudVwiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidG9nZ2xlRWRpdE1lbnVcIil9XG5cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidW5kb1wiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwicmVkb1wiKX1cbiAgICAgICAge3Nob3dFcmFzZXIgJiYgYWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJlcmFzZXJcIil9XG5cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFxuICAgICAgICAgIGFwcFN0YXRlLm11bHRpRWxlbWVudCA/IFwiZmluYWxpemVcIiA6IFwiZHVwbGljYXRlU2VsZWN0aW9uXCIsXG4gICAgICAgICl9XG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImRlbGV0ZVNlbGVjdGVkRWxlbWVudHNcIil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNhbnZhc0FjdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKGFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7cmVuZGVySlNPTkV4cG9ydERpYWxvZygpfVxuICAgICAgICAgIHtyZW5kZXJJbWFnZUV4cG9ydERpYWxvZygpfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJjbGVhckNhbnZhc1wiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwibG9hZFNjZW5lXCIpfVxuICAgICAgICB7cmVuZGVySlNPTkV4cG9ydERpYWxvZygpfVxuICAgICAgICB7cmVuZGVySW1hZ2VFeHBvcnREaWFsb2coKX1cbiAgICAgICAge29uQ29sbGFiQnV0dG9uQ2xpY2sgJiYgKFxuICAgICAgICAgIDxDb2xsYWJCdXR0b25cbiAgICAgICAgICAgIGlzQ29sbGFib3JhdGluZz17aXNDb2xsYWJvcmF0aW5nfVxuICAgICAgICAgICAgY29sbGFib3JhdG9yQ291bnQ9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnMuc2l6ZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ29sbGFiQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge1xuICAgICAgICAgIDxCYWNrZ3JvdW5kUGlja2VyQW5kRGFya01vZGVUb2dnbGVcbiAgICAgICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICBzaG93VGhlbWVCdG49e3Nob3dUaGVtZUJ0bn1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8Lz5cbiAgICApO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7IWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJiByZW5kZXJUb29sYmFyKCl9XG4gICAgICB7cmVuZGVyU3RhdHMoKX1cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiQXBwLWJvdHRvbS1iYXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIG1hcmdpbkJvdHRvbTogU0NST0xMQkFSX1dJRFRIICsgU0NST0xMQkFSX01BUkdJTiAqIDIsXG4gICAgICAgICAgbWFyZ2luTGVmdDogU0NST0xMQkFSX1dJRFRIICsgU0NST0xMQkFSX01BUkdJTiAqIDIsXG4gICAgICAgICAgbWFyZ2luUmlnaHQ6IFNDUk9MTEJBUl9XSURUSCArIFNDUk9MTEJBUl9NQVJHSU4gKiAyLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8SXNsYW5kIHBhZGRpbmc9ezB9PlxuICAgICAgICAgIHtVSU9wdGlvbnMuY2FudmFzQWN0aW9ucyAmJiBhcHBTdGF0ZS5vcGVuTWVudSA9PT0gXCJjYW52YXNcIiA/IChcbiAgICAgICAgICAgIDxTZWN0aW9uIGNsYXNzTmFtZT1cIkFwcC1tb2JpbGUtbWVudVwiIGhlYWRpbmc9XCJjYW52YXNBY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWxDb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8U3RhY2suQ29sIGdhcD17NH0+XG4gICAgICAgICAgICAgICAgICB7cmVuZGVyQ2FudmFzQWN0aW9ucygpfVxuICAgICAgICAgICAgICAgICAge3JlbmRlckN1c3RvbUZvb3Rlcj8uKHRydWUsIGFwcFN0YXRlKX1cbiAgICAgICAgICAgICAgICAgIHthcHBTdGF0ZS5jb2xsYWJvcmF0b3JzLnNpemUgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQ+e3QoXCJsYWJlbHMuY29sbGFib3JhdG9yc1wiKX08L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgICAgICA8VXNlckxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vYmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYWJvcmF0b3JzPXthcHBTdGF0ZS5jb2xsYWJvcmF0b3JzfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1N0YWNrLkNvbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgKSA6IGFwcFN0YXRlLm9wZW5NZW51ID09PSBcInNoYXBlXCIgJiZcbiAgICAgICAgICAgICFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyhhcHBTdGF0ZSwgZWxlbWVudHMpID8gKFxuICAgICAgICAgICAgPFNlY3Rpb24gY2xhc3NOYW1lPVwiQXBwLW1vYmlsZS1tZW51XCIgaGVhZGluZz1cInNlbGVjdGVkU2hhcGVBY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxTZWxlY3RlZFNoYXBlQWN0aW9uc1xuICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICAgICAgICBhY3RpdmVUb29sPXthcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPGZvb3RlciBjbGFzc05hbWU9XCJBcHAtdG9vbGJhclwiPlxuICAgICAgICAgICAge3JlbmRlckFwcFRvb2xiYXIoKX1cbiAgICAgICAgICAgIHthcHBTdGF0ZS5zY3JvbGxlZE91dHNpZGUgJiZcbiAgICAgICAgICAgICAgIWFwcFN0YXRlLm9wZW5NZW51ICYmXG4gICAgICAgICAgICAgICFhcHBTdGF0ZS5pc0xpYnJhcnlPcGVuICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzY3JvbGwtYmFjay10by1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgIC4uLmNhbGN1bGF0ZVNjcm9sbENlbnRlcihlbGVtZW50cywgYXBwU3RhdGUsIGNhbnZhcyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dChcImJ1dHRvbnMuc2Nyb2xsQmFja1RvQ29udGVudFwiKX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgPC9Jc2xhbmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/MobileMenu.tsx\n");
2202
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MobileMenu\": () => (/* binding */ MobileMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _CollabButton__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./CollabButton */ \"../../components/CollabButton.tsx\");\n/* harmony import */ var _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../scene/scrollbars */ \"../../scene/scrollbars.ts\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./BackgroundPickerAndDarkModeToggle */ \"../../components/BackgroundPickerAndDarkModeToggle.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\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\n\r\n\r\n\r\n\r\n\r\nconst MobileMenu = ({ onHomeButtonClick, appState, elements, libraryMenu, actionManager, renderJSONExportDialog, renderImageExportDialog, setAppState, onCollabButtonClick, onLockToggle, onPenModeToggle, canvas, isCollaborating, renderCustomFooter, showThemeBtn, onImageAction, renderTopRightUI, renderStats, UIOptions, }) => {\r\n const renderToolbar = () => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__.FixedSideContainer, Object.assign({ side: \"top\", className: \"App-top-bar\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_9__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4, align: \"center\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1, className: \"App-toolbar-container\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, className: \"App-toolbar\" }, { children: [heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_8__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\r\n onImageAction({\r\n insertOnCanvasDirectly: pointerType !== \"mouse\",\r\n });\r\n } }) }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_17__.ToolButton, { type: \"button\", className: \"HomeButton ToolIcon_type_floating\", title: \"Home\", \"aria-label\": \"Home\", icon: _icons__WEBPACK_IMPORTED_MODULE_18__.home, onClick: onHomeButtonClick }, \"home\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_12__.LockButton, { checked: appState.activeTool.locked, onChange: onLockToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.lock\"), isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_15__.LibraryButton, { appState: appState, setAppState: setAppState, isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_16__.PenModeButton, { checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.penMode\"), isMobile: true, penDetected: appState.penDetected })] })), libraryMenu] }))) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { display: \"flex\" } }, { children: renderTopRightUI === null || renderTopRightUI === void 0 ? void 0 : renderTopRightUI(true, appState, canvas) }))] })));\r\n };\r\n const renderAppToolbar = () => {\r\n // Render eraser conditionally in mobile\r\n const showEraser = !appState.viewModeEnabled &&\r\n !appState.editingElement &&\r\n (0,_scene__WEBPACK_IMPORTED_MODULE_7__.getSelectedElements)(elements, appState).length === 0;\r\n if (appState.viewModeEnabled) {\r\n return UIOptions.canvasActions ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: actionManager.renderAction(\"toggleCanvasMenu\") }))) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { children: \"Excalidraw\" }));\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: [UIOptions.canvasActions &&\r\n actionManager.renderAction(\"toggleCanvasMenu\"), actionManager.renderAction(\"toggleEditMenu\"), actionManager.renderAction(\"undo\"), actionManager.renderAction(\"redo\"), showEraser && actionManager.renderAction(\"eraser\"), actionManager.renderAction(appState.multiElement ? \"finalize\" : \"duplicateSelection\"), actionManager.renderAction(\"deleteSelectedElements\")] })));\r\n };\r\n const renderCanvasActions = () => {\r\n if (appState.viewModeEnabled) {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [renderJSONExportDialog(), renderImageExportDialog()] }));\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [actionManager.renderAction(\"clearCanvas\"), actionManager.renderAction(\"loadScene\"), renderJSONExportDialog(), renderImageExportDialog(), onCollabButtonClick && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CollabButton__WEBPACK_IMPORTED_MODULE_10__[\"default\"], { isCollaborating: isCollaborating, collaboratorCount: appState.collaborators.size, onClick: onCollabButtonClick })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_14__.BackgroundPickerAndDarkModeToggle, { actionManager: actionManager, appState: appState, setAppState: setAppState, showThemeBtn: showThemeBtn })] }));\r\n };\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [!appState.viewModeEnabled && renderToolbar(), renderStats(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-bottom-bar\", style: {\r\n marginBottom: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\r\n marginLeft: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\r\n marginRight: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_11__.SCROLLBAR_MARGIN * 2,\r\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 0 }, { children: [UIOptions.canvasActions && appState.openMenu === \"canvas\" ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_9__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"canvasActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"panelColumn\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4 }, { children: [renderCanvasActions(), renderCustomFooter === null || renderCustomFooter === void 0 ? void 0 : renderCustomFooter(true, appState), appState.collaborators.size > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"labels.collaborators\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_13__.UserList, { mobile: true, layout: \"horizontal\", collaborators: appState.collaborators, actionManager: actionManager })] }))] })) })) }))) : appState.openMenu === \"shape\" &&\r\n !appState.viewModeEnabled &&\r\n (0,_element__WEBPACK_IMPORTED_MODULE_4__.showSelectedShapeActions)(appState, elements) ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_9__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"selectedShapeActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_8__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction, activeTool: appState.activeTool.type }) }))) : null, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ className: \"App-toolbar\" }, { children: [renderAppToolbar(), appState.scrolledOutside &&\r\n !appState.openMenu &&\r\n !appState.isLibraryOpen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\r\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_7__.calculateScrollCenter)(elements, appState, canvas)));\r\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"buttons.scrollBackToContent\") })))] }))] })) }))] }));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUUsTUFBTSxDQUFDLEVBQ3BELENBQUM7b0NBQ0wsQ0FBQyxnQkFFQSx3Q0FBQyxDQUFDLDZCQUE2QixDQUFDLElBQzFCLENBQ1YsS0FDSSxLQUNGLElBQ0wsSUFDTCxDQUNKLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9Nb2JpbGVNZW51LnRzeD8wOGM0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFwcFByb3BzLCBBcHBTdGF0ZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuLi9hY3Rpb25zL21hbmFnZXJcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IFN0YWNrIGZyb20gXCIuL1N0YWNrXCI7XG5pbXBvcnQgeyBzaG93U2VsZWN0ZWRTaGFwZUFjdGlvbnMgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IEZpeGVkU2lkZUNvbnRhaW5lciB9IGZyb20gXCIuL0ZpeGVkU2lkZUNvbnRhaW5lclwiO1xuaW1wb3J0IHsgSXNsYW5kIH0gZnJvbSBcIi4vSXNsYW5kXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVTY3JvbGxDZW50ZXIsIGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tIFwiLi4vc2NlbmVcIjtcbmltcG9ydCB7IFNlbGVjdGVkU2hhcGVBY3Rpb25zLCBTaGFwZXNTd2l0Y2hlciB9IGZyb20gXCIuL0FjdGlvbnNcIjtcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tIFwiLi9TZWN0aW9uXCI7XG5pbXBvcnQgQ29sbGFiQnV0dG9uIGZyb20gXCIuL0NvbGxhYkJ1dHRvblwiO1xuaW1wb3J0IHsgU0NST0xMQkFSX1dJRFRILCBTQ1JPTExCQVJfTUFSR0lOIH0gZnJvbSBcIi4uL3NjZW5lL3Njcm9sbGJhcnNcIjtcbmltcG9ydCB7IExvY2tCdXR0b24gfSBmcm9tIFwiLi9Mb2NrQnV0dG9uXCI7XG5pbXBvcnQgeyBVc2VyTGlzdCB9IGZyb20gXCIuL1VzZXJMaXN0XCI7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kUGlja2VyQW5kRGFya01vZGVUb2dnbGUgfSBmcm9tIFwiLi9CYWNrZ3JvdW5kUGlja2VyQW5kRGFya01vZGVUb2dnbGVcIjtcbmltcG9ydCB7IExpYnJhcnlCdXR0b24gfSBmcm9tIFwiLi9MaWJyYXJ5QnV0dG9uXCI7XG5pbXBvcnQgeyBQZW5Nb2RlQnV0dG9uIH0gZnJvbSBcIi4vUGVuTW9kZUJ1dHRvblwiO1xuaW1wb3J0IHsgVG9vbEJ1dHRvbiB9IGZyb20gXCIuL1Rvb2xCdXR0b25cIjtcbmltcG9ydCB7IGhvbWUgfSBmcm9tIFwiLi9pY29uc1wiO1xuXG50eXBlIE1vYmlsZU1lbnVQcm9wcyA9IHtcbiAgb25Ib21lQnV0dG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG4gIGFjdGlvbk1hbmFnZXI6IEFjdGlvbk1hbmFnZXI7XG4gIHJlbmRlckpTT05FeHBvcnREaWFsb2c6ICgpID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgcmVuZGVySW1hZ2VFeHBvcnREaWFsb2c6ICgpID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgc2V0QXBwU3RhdGU6IFJlYWN0LkNvbXBvbmVudDxhbnksIEFwcFN0YXRlPltcInNldFN0YXRlXCJdO1xuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIGxpYnJhcnlNZW51OiBKU1guRWxlbWVudCB8IG51bGw7XG4gIG9uQ29sbGFiQnV0dG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICBvbkxvY2tUb2dnbGU6ICgpID0+IHZvaWQ7XG4gIG9uUGVuTW9kZVRvZ2dsZTogKCkgPT4gdm9pZDtcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw7XG4gIGlzQ29sbGFib3JhdGluZzogYm9vbGVhbjtcbiAgcmVuZGVyQ3VzdG9tRm9vdGVyPzogKFxuICAgIGlzTW9iaWxlOiBib29sZWFuLFxuICAgIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgKSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG4gIHNob3dUaGVtZUJ0bjogYm9vbGVhbjtcbiAgb25JbWFnZUFjdGlvbjogKGRhdGE6IHsgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICByZW5kZXJUb3BSaWdodFVJPzogKFxuICAgIGlzTW9iaWxlOiBib29sZWFuLFxuICAgIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCxcbiAgKSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG4gIHJlbmRlclN0YXRzOiAoKSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG4gIFVJT3B0aW9uczogQXBwUHJvcHNbXCJVSU9wdGlvbnNcIl07XG59O1xuXG5leHBvcnQgY29uc3QgTW9iaWxlTWVudSA9ICh7XG4gIG9uSG9tZUJ1dHRvbkNsaWNrLFxuICBhcHBTdGF0ZSxcbiAgZWxlbWVudHMsXG4gIGxpYnJhcnlNZW51LFxuICBhY3Rpb25NYW5hZ2VyLFxuICByZW5kZXJKU09ORXhwb3J0RGlhbG9nLFxuICByZW5kZXJJbWFnZUV4cG9ydERpYWxvZyxcbiAgc2V0QXBwU3RhdGUsXG4gIG9uQ29sbGFiQnV0dG9uQ2xpY2ssXG4gIG9uTG9ja1RvZ2dsZSxcbiAgb25QZW5Nb2RlVG9nZ2xlLFxuICBjYW52YXMsXG4gIGlzQ29sbGFib3JhdGluZyxcbiAgcmVuZGVyQ3VzdG9tRm9vdGVyLFxuICBzaG93VGhlbWVCdG4sXG4gIG9uSW1hZ2VBY3Rpb24sXG4gIHJlbmRlclRvcFJpZ2h0VUksXG4gIHJlbmRlclN0YXRzLFxuICBVSU9wdGlvbnMsXG59OiBNb2JpbGVNZW51UHJvcHMpID0+IHtcbiAgY29uc3QgcmVuZGVyVG9vbGJhciA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZpeGVkU2lkZUNvbnRhaW5lciBzaWRlPVwidG9wXCIgY2xhc3NOYW1lPVwiQXBwLXRvcC1iYXJcIj5cbiAgICAgICAgey8qIHBsYWNlaG9sZGVyIGZvciBncmlkIDMtY29sdW1uIHRlbXBsYXRlICovfVxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICA8U2VjdGlvbiBoZWFkaW5nPVwic2hhcGVzXCI+XG4gICAgICAgICAgeyhoZWFkaW5nKSA9PiAoXG4gICAgICAgICAgICA8U3RhY2suQ29sIGdhcD17NH0gYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezF9IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxJc2xhbmQgcGFkZGluZz17MX0gY2xhc3NOYW1lPVwiQXBwLXRvb2xiYXJcIj5cbiAgICAgICAgICAgICAgICAgIHtoZWFkaW5nfVxuICAgICAgICAgICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezF9PlxuICAgICAgICAgICAgICAgICAgICA8U2hhcGVzU3dpdGNoZXJcbiAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgY2FudmFzPXtjYW52YXN9XG4gICAgICAgICAgICAgICAgICAgICAgYWN0aXZlVG9vbD17YXBwU3RhdGUuYWN0aXZlVG9vbH1cbiAgICAgICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgb25JbWFnZUFjdGlvbj17KHsgcG9pbnRlclR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25JbWFnZUFjdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9uQ2FudmFzRGlyZWN0bHk6IHBvaW50ZXJUeXBlICE9PSBcIm1vdXNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgICAgICAgICAgPC9Jc2xhbmQ+XG4gICAgICAgICAgICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT1cImhvbWVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJIb21lQnV0dG9uIFRvb2xJY29uX3R5cGVfZmxvYXRpbmdcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9e1wiSG9tZVwifVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17XCJIb21lXCJ9XG4gICAgICAgICAgICAgICAgICBpY29uPXtob21lfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17b25Ib21lQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8TG9ja0J1dHRvblxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YXBwU3RhdGUuYWN0aXZlVG9vbC5sb2NrZWR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25Mb2NrVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoXCJ0b29sQmFyLmxvY2tcIil9XG4gICAgICAgICAgICAgICAgICBpc01vYmlsZVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPExpYnJhcnlCdXR0b25cbiAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8UGVuTW9kZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YXBwU3RhdGUucGVuTW9kZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvblBlbk1vZGVUb2dnbGV9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIucGVuTW9kZVwiKX1cbiAgICAgICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAgICAgICBwZW5EZXRlY3RlZD17YXBwU3RhdGUucGVuRGV0ZWN0ZWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgICAgICAgIHtsaWJyYXJ5TWVudX1cbiAgICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiB9fT5cbiAgICAgICAgICB7cmVuZGVyVG9wUmlnaHRVST8uKHRydWUsIGFwcFN0YXRlLCBjYW52YXMpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRml4ZWRTaWRlQ29udGFpbmVyPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQXBwVG9vbGJhciA9ICgpID0+IHtcbiAgICAvLyBSZW5kZXIgZXJhc2VyIGNvbmRpdGlvbmFsbHkgaW4gbW9iaWxlXG4gICAgY29uc3Qgc2hvd0VyYXNlciA9XG4gICAgICAhYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmXG4gICAgICAhYXBwU3RhdGUuZWRpdGluZ0VsZW1lbnQgJiZcbiAgICAgIGdldFNlbGVjdGVkRWxlbWVudHMoZWxlbWVudHMsIGFwcFN0YXRlKS5sZW5ndGggPT09IDA7XG5cbiAgICBpZiAoYXBwU3RhdGUudmlld01vZGVFbmFibGVkKSB7XG4gICAgICByZXR1cm4gVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQXBwLXRvb2xiYXItY29udGVudFwiPlxuICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInRvZ2dsZUNhbnZhc01lbnVcIil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdj5FeGNhbGlkcmF3PC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyLWNvbnRlbnRcIj5cbiAgICAgICAge1VJT3B0aW9ucy5jYW52YXNBY3Rpb25zICYmXG4gICAgICAgICAgYWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJ0b2dnbGVDYW52YXNNZW51XCIpfVxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJ0b2dnbGVFZGl0TWVudVwiKX1cblxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJ1bmRvXCIpfVxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJyZWRvXCIpfVxuICAgICAgICB7c2hvd0VyYXNlciAmJiBhY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImVyYXNlclwiKX1cblxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXG4gICAgICAgICAgYXBwU3RhdGUubXVsdGlFbGVtZW50ID8gXCJmaW5hbGl6ZVwiIDogXCJkdXBsaWNhdGVTZWxlY3Rpb25cIixcbiAgICAgICAgKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiZGVsZXRlU2VsZWN0ZWRFbGVtZW50c1wiKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ2FudmFzQWN0aW9ucyA9ICgpID0+IHtcbiAgICBpZiAoYXBwU3RhdGUudmlld01vZGVFbmFibGVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtyZW5kZXJKU09ORXhwb3J0RGlhbG9nKCl9XG4gICAgICAgICAge3JlbmRlckltYWdlRXhwb3J0RGlhbG9nKCl9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImNsZWFyQ2FudmFzXCIpfVxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJsb2FkU2NlbmVcIil9XG4gICAgICAgIHtyZW5kZXJKU09ORXhwb3J0RGlhbG9nKCl9XG4gICAgICAgIHtyZW5kZXJJbWFnZUV4cG9ydERpYWxvZygpfVxuICAgICAgICB7b25Db2xsYWJCdXR0b25DbGljayAmJiAoXG4gICAgICAgICAgPENvbGxhYkJ1dHRvblxuICAgICAgICAgICAgaXNDb2xsYWJvcmF0aW5nPXtpc0NvbGxhYm9yYXRpbmd9XG4gICAgICAgICAgICBjb2xsYWJvcmF0b3JDb3VudD17YXBwU3RhdGUuY29sbGFib3JhdG9ycy5zaXplfVxuICAgICAgICAgICAgb25DbGljaz17b25Db2xsYWJCdXR0b25DbGlja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7XG4gICAgICAgICAgPEJhY2tncm91bmRQaWNrZXJBbmREYXJrTW9kZVRvZ2dsZVxuICAgICAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgIHNob3dUaGVtZUJ0bj17c2hvd1RoZW1lQnRufVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIDwvPlxuICAgICk7XG4gIH07XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHshYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmIHJlbmRlclRvb2xiYXIoKX1cbiAgICAgIHtyZW5kZXJTdGF0cygpfVxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJBcHAtYm90dG9tLWJhclwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgbWFyZ2luQm90dG9tOiBTQ1JPTExCQVJfV0lEVEggKyBTQ1JPTExCQVJfTUFSR0lOICogMixcbiAgICAgICAgICBtYXJnaW5MZWZ0OiBTQ1JPTExCQVJfV0lEVEggKyBTQ1JPTExCQVJfTUFSR0lOICogMixcbiAgICAgICAgICBtYXJnaW5SaWdodDogU0NST0xMQkFSX1dJRFRIICsgU0NST0xMQkFSX01BUkdJTiAqIDIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxJc2xhbmQgcGFkZGluZz17MH0+XG4gICAgICAgICAge1VJT3B0aW9ucy5jYW52YXNBY3Rpb25zICYmIGFwcFN0YXRlLm9wZW5NZW51ID09PSBcImNhbnZhc1wiID8gKFxuICAgICAgICAgICAgPFNlY3Rpb24gY2xhc3NOYW1lPVwiQXBwLW1vYmlsZS1tZW51XCIgaGVhZGluZz1cImNhbnZhc0FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbENvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxTdGFjay5Db2wgZ2FwPXs0fT5cbiAgICAgICAgICAgICAgICAgIHtyZW5kZXJDYW52YXNBY3Rpb25zKCl9XG4gICAgICAgICAgICAgICAgICB7cmVuZGVyQ3VzdG9tRm9vdGVyPy4odHJ1ZSwgYXBwU3RhdGUpfVxuICAgICAgICAgICAgICAgICAge2FwcFN0YXRlLmNvbGxhYm9yYXRvcnMuc2l6ZSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZD57dChcImxhYmVscy5jb2xsYWJvcmF0b3JzXCIpfTwvbGVnZW5kPlxuICAgICAgICAgICAgICAgICAgICAgIDxVc2VyTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhYm9yYXRvcnM9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICApIDogYXBwU3RhdGUub3Blbk1lbnUgPT09IFwic2hhcGVcIiAmJlxuICAgICAgICAgICAgIWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJlxuICAgICAgICAgICAgc2hvd1NlbGVjdGVkU2hhcGVBY3Rpb25zKGFwcFN0YXRlLCBlbGVtZW50cykgPyAoXG4gICAgICAgICAgICA8U2VjdGlvbiBjbGFzc05hbWU9XCJBcHAtbW9iaWxlLW1lbnVcIiBoZWFkaW5nPVwic2VsZWN0ZWRTaGFwZUFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPFNlbGVjdGVkU2hhcGVBY3Rpb25zXG4gICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICAgICAgICByZW5kZXJBY3Rpb249e2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9ufVxuICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2w9e2FwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8Zm9vdGVyIGNsYXNzTmFtZT1cIkFwcC10b29sYmFyXCI+XG4gICAgICAgICAgICB7cmVuZGVyQXBwVG9vbGJhcigpfVxuICAgICAgICAgICAge2FwcFN0YXRlLnNjcm9sbGVkT3V0c2lkZSAmJlxuICAgICAgICAgICAgICAhYXBwU3RhdGUub3Blbk1lbnUgJiZcbiAgICAgICAgICAgICAgIWFwcFN0YXRlLmlzTGlicmFyeU9wZW4gJiYgKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNjcm9sbC1iYWNrLXRvLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uY2FsY3VsYXRlU2Nyb2xsQ2VudGVyKGVsZW1lbnRzLCBhcHBTdGF0ZSwgY2FudmFzKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0KFwiYnV0dG9ucy5zY3JvbGxCYWNrVG9Db250ZW50XCIpfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICA8L0lzbGFuZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/MobileMenu.tsx\n");
2192
2203
 
2193
2204
  /***/ }),
2194
2205
 
@@ -2199,7 +2210,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2199
2210
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2200
2211
 
2201
2212
  "use strict";
2202
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Modal\": () => (/* binding */ Modal)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _Modal_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Modal.scss */ \"../../components/Modal.scss\");\n/* harmony import */ var _Modal_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Modal_scss__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst Modal = (props) => {\r\n const { theme = _constants__WEBPACK_IMPORTED_MODULE_7__.THEME.LIGHT, closeOnClickOutside = true } = props;\r\n const modalRoot = useBodyRoot(theme);\r\n if (!modalRoot) {\r\n return null;\r\n }\r\n const handleKeydown = (event) => {\r\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_5__.KEYS.ESCAPE) {\r\n event.nativeEvent.stopImmediatePropagation();\r\n event.stopPropagation();\r\n props.onCloseRequest();\r\n }\r\n };\r\n return (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.createPortal)((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(\"Modal\", props.className), role: \"dialog\", \"aria-modal\": \"true\", onKeyDown: handleKeydown, \"aria-labelledby\": props.labelledBy }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"Modal__background\", onClick: closeOnClickOutside ? props.onCloseRequest : undefined }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Modal__content\", style: { \"--max-width\": `${props.maxWidth}px` }, tabIndex: 0 }, { children: props.children }))] })), modalRoot);\r\n};\r\nconst useBodyRoot = (theme) => {\r\n const [div, setDiv] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);\r\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useDevice)();\r\n const isMobileRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(device.isMobile);\r\n isMobileRef.current = device.isMobile;\r\n const { container: excalidrawContainer } = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useExcalidrawContainer)();\r\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => {\r\n if (div) {\r\n div.classList.toggle(\"excalidraw--mobile\", device.isMobile);\r\n }\r\n }, [div, device.isMobile]);\r\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => {\r\n const isDarkTheme = !!(excalidrawContainer === null || excalidrawContainer === void 0 ? void 0 : excalidrawContainer.classList.contains(\"theme--dark\")) ||\r\n theme === \"dark\";\r\n const div = document.createElement(\"div\");\r\n div.classList.add(\"excalidraw\", \"excalidraw-modal-container\");\r\n div.classList.toggle(\"excalidraw--mobile\", isMobileRef.current);\r\n if (isDarkTheme) {\r\n div.classList.add(\"theme--dark\");\r\n div.classList.add(\"theme--dark-background-none\");\r\n }\r\n document.body.appendChild(div);\r\n setDiv(div);\r\n return () => {\r\n document.body.removeChild(div);\r\n };\r\n }, [excalidrawContainer, theme]);\r\n return div;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9Nb2RhbC50c3guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFzQjtBQUUyQztBQUN4QjtBQUNqQjtBQUNPO0FBQzJCO0FBRXJCO0FBRTlCLE1BQU0sS0FBSyxHQVFiLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDYixNQUFNLEVBQUUsS0FBSyxHQUFHLG1EQUFXLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyQyxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBMEIsRUFBRSxFQUFFO1FBQ25ELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyw4Q0FBVyxFQUFFO1lBQzdCLEtBQUssQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUM3QyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsT0FBTyx1REFBWSxDQUNqQiwrRUFDRSxTQUFTLEVBQUUsZ0RBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUN6QyxJQUFJLEVBQUMsUUFBUSxnQkFDRixNQUFNLEVBQ2pCLFNBQVMsRUFBRSxhQUFhLHFCQUNQLEtBQUssQ0FBQyxVQUFVLGlCQUVqQyxnRUFDRSxTQUFTLEVBQUMsbUJBQW1CLEVBQzdCLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUMxRCxFQUNQLDhFQUNFLFNBQVMsRUFBQyxnQkFBZ0IsRUFDMUIsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQy9DLFFBQVEsRUFBRSxDQUFDLGdCQUVWLEtBQUssQ0FBQyxRQUFRLElBQ1gsS0FDRixFQUNOLFNBQVMsQ0FDVixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUF3QixFQUFFLEVBQUU7SUFDL0MsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRywrQ0FBUSxDQUF3QixJQUFJLENBQUMsQ0FBQztJQUU1RCxNQUFNLE1BQU0sR0FBRywrQ0FBUyxFQUFFLENBQUM7SUFDM0IsTUFBTSxXQUFXLEdBQUcsNkNBQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBRXRDLE1BQU0sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyw0REFBc0IsRUFBRSxDQUFDO0lBRXBFLHNEQUFlLENBQUMsR0FBRyxFQUFFO1FBQ25CLElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRTNCLHNEQUFlLENBQUMsR0FBRyxFQUFFO1FBQ25CLE1BQU0sV0FBVyxHQUNmLENBQUMsQ0FBQyxvQkFBbUIsYUFBbkIsbUJBQW1CLHVCQUFuQixtQkFBbUIsQ0FBRSxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUN4RCxLQUFLLEtBQUssTUFBTSxDQUFDO1FBQ25CLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFDOUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhFLElBQUksV0FBVyxFQUFFO1lBQ2YsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNsRDtRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVaLE9BQU8sR0FBRyxFQUFFO1lBQ1YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUVqQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL01vZGFsLnRzeD9kNWNmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vTW9kYWwuc2Nzc1wiO1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gXCIuLi9rZXlzXCI7XG5pbXBvcnQgeyB1c2VFeGNhbGlkcmF3Q29udGFpbmVyLCB1c2VEZXZpY2UgfSBmcm9tIFwiLi9BcHBcIjtcbmltcG9ydCB7IEFwcFN0YXRlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBUSEVNRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IE1vZGFsOiBSZWFjdC5GQzx7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgbWF4V2lkdGg/OiBudW1iZXI7XG4gIG9uQ2xvc2VSZXF1ZXN0KCk6IHZvaWQ7XG4gIGxhYmVsbGVkQnk6IHN0cmluZztcbiAgdGhlbWU/OiBBcHBTdGF0ZVtcInRoZW1lXCJdO1xuICBjbG9zZU9uQ2xpY2tPdXRzaWRlPzogYm9vbGVhbjtcbn0+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdGhlbWUgPSBUSEVNRS5MSUdIVCwgY2xvc2VPbkNsaWNrT3V0c2lkZSA9IHRydWUgfSA9IHByb3BzO1xuICBjb25zdCBtb2RhbFJvb3QgPSB1c2VCb2R5Um9vdCh0aGVtZSk7XG5cbiAgaWYgKCFtb2RhbFJvb3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLkVTQ0FQRSkge1xuICAgICAgZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHByb3BzLm9uQ2xvc2VSZXF1ZXN0KCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiTW9kYWxcIiwgcHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlkb3dufVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtwcm9wcy5sYWJlbGxlZEJ5fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiTW9kYWxfX2JhY2tncm91bmRcIlxuICAgICAgICBvbkNsaWNrPXtjbG9zZU9uQ2xpY2tPdXRzaWRlID8gcHJvcHMub25DbG9zZVJlcXVlc3QgOiB1bmRlZmluZWR9XG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIk1vZGFsX19jb250ZW50XCJcbiAgICAgICAgc3R5bGU9e3sgXCItLW1heC13aWR0aFwiOiBgJHtwcm9wcy5tYXhXaWR0aH1weGAgfX1cbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICA+XG4gICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PixcbiAgICBtb2RhbFJvb3QsXG4gICk7XG59O1xuXG5jb25zdCB1c2VCb2R5Um9vdCA9ICh0aGVtZTogQXBwU3RhdGVbXCJ0aGVtZVwiXSkgPT4ge1xuICBjb25zdCBbZGl2LCBzZXREaXZdID0gdXNlU3RhdGU8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcbiAgY29uc3QgaXNNb2JpbGVSZWYgPSB1c2VSZWYoZGV2aWNlLmlzTW9iaWxlKTtcbiAgaXNNb2JpbGVSZWYuY3VycmVudCA9IGRldmljZS5pc01vYmlsZTtcblxuICBjb25zdCB7IGNvbnRhaW5lcjogZXhjYWxpZHJhd0NvbnRhaW5lciB9ID0gdXNlRXhjYWxpZHJhd0NvbnRhaW5lcigpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpdikge1xuICAgICAgZGl2LmNsYXNzTGlzdC50b2dnbGUoXCJleGNhbGlkcmF3LS1tb2JpbGVcIiwgZGV2aWNlLmlzTW9iaWxlKTtcbiAgICB9XG4gIH0sIFtkaXYsIGRldmljZS5pc01vYmlsZV0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXNEYXJrVGhlbWUgPVxuICAgICAgISFleGNhbGlkcmF3Q29udGFpbmVyPy5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS0tZGFya1wiKSB8fFxuICAgICAgdGhlbWUgPT09IFwiZGFya1wiO1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICBkaXYuY2xhc3NMaXN0LmFkZChcImV4Y2FsaWRyYXdcIiwgXCJleGNhbGlkcmF3LW1vZGFsLWNvbnRhaW5lclwiKTtcbiAgICBkaXYuY2xhc3NMaXN0LnRvZ2dsZShcImV4Y2FsaWRyYXctLW1vYmlsZVwiLCBpc01vYmlsZVJlZi5jdXJyZW50KTtcblxuICAgIGlmIChpc0RhcmtUaGVtZSkge1xuICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoXCJ0aGVtZS0tZGFya1wiKTtcbiAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKFwidGhlbWUtLWRhcmstYmFja2dyb3VuZC1ub25lXCIpO1xuICAgIH1cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG5cbiAgICBzZXREaXYoZGl2KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgfTtcbiAgfSwgW2V4Y2FsaWRyYXdDb250YWluZXIsIHRoZW1lXSk7XG5cbiAgcmV0dXJuIGRpdjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/Modal.tsx\n");
2213
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Modal\": () => (/* binding */ Modal)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _Modal_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Modal.scss */ \"../../components/Modal.scss\");\n/* harmony import */ var _Modal_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Modal_scss__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst Modal = (props) => {\r\n const { theme = _constants__WEBPACK_IMPORTED_MODULE_7__.THEME.LIGHT, closeOnClickOutside = true } = props;\r\n const modalRoot = useBodyRoot(theme);\r\n if (!modalRoot) {\r\n return null;\r\n }\r\n const handleKeydown = (event) => {\r\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_5__.KEYS.ESCAPE) {\r\n event.nativeEvent.stopImmediatePropagation();\r\n event.stopPropagation();\r\n props.onCloseRequest();\r\n }\r\n };\r\n return (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.createPortal)((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(\"Modal\", props.className), role: \"dialog\", \"aria-modal\": \"true\", onKeyDown: handleKeydown, \"aria-labelledby\": props.labelledBy }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"Modal__background\", onClick: closeOnClickOutside ? props.onCloseRequest : undefined }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Modal__content\", style: { \"--max-width\": `${props.maxWidth}px` }, tabIndex: 0 }, { children: props.children }))] })), modalRoot);\r\n};\r\nconst useBodyRoot = (theme) => {\r\n const [div, setDiv] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);\r\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useDevice)();\r\n const isMobileRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(device.isMobile);\r\n isMobileRef.current = device.isMobile;\r\n const { container: excalidrawContainer } = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useExcalidrawContainer)();\r\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => {\r\n if (div) {\r\n div.classList.toggle(\"excalidraw--mobile\", device.isMobile);\r\n }\r\n }, [div, device.isMobile]);\r\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => {\r\n const isDarkTheme = !!(excalidrawContainer === null || excalidrawContainer === void 0 ? void 0 : excalidrawContainer.classList.contains(\"theme--dark\")) ||\r\n theme === \"dark\";\r\n const div = document.createElement(\"div\");\r\n div.classList.add(\"excalidraw\", \"excalidraw-modal-container\");\r\n div.classList.toggle(\"excalidraw--mobile\", isMobileRef.current);\r\n if (isDarkTheme) {\r\n div.classList.add(\"theme--dark\");\r\n div.classList.add(\"theme--dark-background-none\");\r\n }\r\n document.body.appendChild(div);\r\n setDiv(div);\r\n return () => {\r\n document.body.removeChild(div);\r\n };\r\n }, [excalidrawContainer, theme]);\r\n return div;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoRSxJQUFJLFdBQVcsRUFBRTtZQUNmLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDbEQ7UUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFWixPQUFPLEdBQUcsRUFBRTtZQUNWLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFakMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9Nb2RhbC50c3g/ZDVjZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCIuL01vZGFsLnNjc3NcIjtcblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCB7IEtFWVMgfSBmcm9tIFwiLi4va2V5c1wiO1xuaW1wb3J0IHsgdXNlRXhjYWxpZHJhd0NvbnRhaW5lciwgdXNlRGV2aWNlIH0gZnJvbSBcIi4vQXBwXCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgVEhFTUUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBNb2RhbCA9IChwcm9wczoge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIG1heFdpZHRoPzogbnVtYmVyO1xuICBvbkNsb3NlUmVxdWVzdCgpOiB2b2lkO1xuICBsYWJlbGxlZEJ5OiBzdHJpbmc7XG4gIHRoZW1lPzogQXBwU3RhdGVbXCJ0aGVtZVwiXTtcbiAgY2xvc2VPbkNsaWNrT3V0c2lkZT86IGJvb2xlYW47XG59KSA9PiB7XG4gIGNvbnN0IHsgdGhlbWUgPSBUSEVNRS5MSUdIVCwgY2xvc2VPbkNsaWNrT3V0c2lkZSA9IHRydWUgfSA9IHByb3BzO1xuICBjb25zdCBtb2RhbFJvb3QgPSB1c2VCb2R5Um9vdCh0aGVtZSk7XG5cbiAgaWYgKCFtb2RhbFJvb3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLkVTQ0FQRSkge1xuICAgICAgZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHByb3BzLm9uQ2xvc2VSZXF1ZXN0KCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiTW9kYWxcIiwgcHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlkb3dufVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtwcm9wcy5sYWJlbGxlZEJ5fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiTW9kYWxfX2JhY2tncm91bmRcIlxuICAgICAgICBvbkNsaWNrPXtjbG9zZU9uQ2xpY2tPdXRzaWRlID8gcHJvcHMub25DbG9zZVJlcXVlc3QgOiB1bmRlZmluZWR9XG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIk1vZGFsX19jb250ZW50XCJcbiAgICAgICAgc3R5bGU9e3sgXCItLW1heC13aWR0aFwiOiBgJHtwcm9wcy5tYXhXaWR0aH1weGAgfX1cbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICA+XG4gICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PixcbiAgICBtb2RhbFJvb3QsXG4gICk7XG59O1xuXG5jb25zdCB1c2VCb2R5Um9vdCA9ICh0aGVtZTogQXBwU3RhdGVbXCJ0aGVtZVwiXSkgPT4ge1xuICBjb25zdCBbZGl2LCBzZXREaXZdID0gdXNlU3RhdGU8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcbiAgY29uc3QgaXNNb2JpbGVSZWYgPSB1c2VSZWYoZGV2aWNlLmlzTW9iaWxlKTtcbiAgaXNNb2JpbGVSZWYuY3VycmVudCA9IGRldmljZS5pc01vYmlsZTtcblxuICBjb25zdCB7IGNvbnRhaW5lcjogZXhjYWxpZHJhd0NvbnRhaW5lciB9ID0gdXNlRXhjYWxpZHJhd0NvbnRhaW5lcigpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpdikge1xuICAgICAgZGl2LmNsYXNzTGlzdC50b2dnbGUoXCJleGNhbGlkcmF3LS1tb2JpbGVcIiwgZGV2aWNlLmlzTW9iaWxlKTtcbiAgICB9XG4gIH0sIFtkaXYsIGRldmljZS5pc01vYmlsZV0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXNEYXJrVGhlbWUgPVxuICAgICAgISFleGNhbGlkcmF3Q29udGFpbmVyPy5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS0tZGFya1wiKSB8fFxuICAgICAgdGhlbWUgPT09IFwiZGFya1wiO1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICBkaXYuY2xhc3NMaXN0LmFkZChcImV4Y2FsaWRyYXdcIiwgXCJleGNhbGlkcmF3LW1vZGFsLWNvbnRhaW5lclwiKTtcbiAgICBkaXYuY2xhc3NMaXN0LnRvZ2dsZShcImV4Y2FsaWRyYXctLW1vYmlsZVwiLCBpc01vYmlsZVJlZi5jdXJyZW50KTtcblxuICAgIGlmIChpc0RhcmtUaGVtZSkge1xuICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoXCJ0aGVtZS0tZGFya1wiKTtcbiAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKFwidGhlbWUtLWRhcmstYmFja2dyb3VuZC1ub25lXCIpO1xuICAgIH1cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG5cbiAgICBzZXREaXYoZGl2KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgfTtcbiAgfSwgW2V4Y2FsaWRyYXdDb250YWluZXIsIHRoZW1lXSk7XG5cbiAgcmV0dXJuIGRpdjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/Modal.tsx\n");
2203
2214
 
2204
2215
  /***/ }),
2205
2216
 
@@ -2265,7 +2276,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2265
2276
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2266
2277
 
2267
2278
  "use strict";
2268
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Section\": () => (/* binding */ Section)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\n\r\n\r\n\r\n\r\nconst Section = (_a) => {\r\n var { heading, children } = _a, props = __rest(_a, [\"heading\", \"children\"]);\r\n const { id } = (0,_App__WEBPACK_IMPORTED_MODULE_3__.useExcalidrawContainer)();\r\n const header = ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h2\", Object.assign({ className: \"visually-hidden\", id: `${id}-${heading}-title` }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(`headings.${heading}`) })));\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"section\", Object.assign({}, props, { \"aria-labelledby\": `${id}-${heading}-title` }, { children: typeof children === \"function\" ? (children(header)) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [header, children] })) })));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9TZWN0aW9uLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEI7QUFDRTtBQUNtQjtBQUV4QyxNQUFNLE9BQU8sR0FJZixDQUFDLEVBQStCLEVBQUUsRUFBRTtRQUFuQyxFQUFFLE9BQU8sRUFBRSxRQUFRLE9BQVksRUFBUCxLQUFLLGNBQTdCLHVCQUErQixDQUFGO0lBQ2pDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyw0REFBc0IsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLENBQ2IsNkVBQUksU0FBUyxFQUFDLGlCQUFpQixFQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxPQUFPLFFBQVEsZ0JBQ3pELHdDQUFDLENBQUMsWUFBWSxPQUFPLEVBQUUsQ0FBQyxJQUN0QixDQUNOLENBQUM7SUFDRixPQUFPLENBQ0wsb0ZBQWEsS0FBSyx1QkFBbUIsR0FBRyxFQUFFLElBQUksT0FBTyxRQUFRLGdCQUMxRCxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ2hDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDakIsQ0FBQyxDQUFDLENBQUMsQ0FDRiw4SEFDRyxNQUFNLEVBQ04sUUFBUSxJQUNSLENBQ0osSUFDTyxDQUNYLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9TZWN0aW9uLnRzeD8zMzcyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgdXNlRXhjYWxpZHJhd0NvbnRhaW5lciB9IGZyb20gXCIuL0FwcFwiO1xuXG5leHBvcnQgY29uc3QgU2VjdGlvbjogUmVhY3QuRkM8e1xuICBoZWFkaW5nOiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIHwgKChoZWFkaW5nOiBSZWFjdC5SZWFjdE5vZGUpID0+IFJlYWN0LlJlYWN0Tm9kZSk7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn0+ID0gKHsgaGVhZGluZywgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgeyBpZCB9ID0gdXNlRXhjYWxpZHJhd0NvbnRhaW5lcigpO1xuICBjb25zdCBoZWFkZXIgPSAoXG4gICAgPGgyIGNsYXNzTmFtZT1cInZpc3VhbGx5LWhpZGRlblwiIGlkPXtgJHtpZH0tJHtoZWFkaW5nfS10aXRsZWB9PlxuICAgICAge3QoYGhlYWRpbmdzLiR7aGVhZGluZ31gKX1cbiAgICA8L2gyPlxuICApO1xuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIHsuLi5wcm9wc30gYXJpYS1sYWJlbGxlZGJ5PXtgJHtpZH0tJHtoZWFkaW5nfS10aXRsZWB9PlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiA9PT0gXCJmdW5jdGlvblwiID8gKFxuICAgICAgICBjaGlsZHJlbihoZWFkZXIpXG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgPC9zZWN0aW9uPlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/Section.tsx\n");
2279
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Section\": () => (/* binding */ Section)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\n\r\n\r\n\r\n\r\nconst Section = (_a) => {\r\n var { heading, children } = _a, props = __rest(_a, [\"heading\", \"children\"]);\r\n const { id } = (0,_App__WEBPACK_IMPORTED_MODULE_3__.useExcalidrawContainer)();\r\n const header = ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h2\", Object.assign({ className: \"visually-hidden\", id: `${id}-${heading}-title` }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(`headings.${heading}`) })));\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"section\", Object.assign({}, props, { \"aria-labelledby\": `${id}-${heading}-title` }, { children: typeof children === \"function\" ? (children(header)) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [header, children] })) })));\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9TZWN0aW9uLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEI7QUFDRTtBQUNtQjtBQU94QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQTZDLEVBQUUsRUFBRTtRQUFqRCxFQUFFLE9BQU8sRUFBRSxRQUFRLE9BQTBCLEVBQXJCLEtBQUssY0FBN0IsdUJBQStCLENBQUY7SUFDbkQsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLDREQUFzQixFQUFFLENBQUM7SUFDeEMsTUFBTSxNQUFNLEdBQUcsQ0FDYiw2RUFBSSxTQUFTLEVBQUMsaUJBQWlCLEVBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLE9BQU8sUUFBUSxnQkFDekQsd0NBQUMsQ0FBQyxZQUFZLE9BQU8sRUFBRSxDQUFDLElBQ3RCLENBQ04sQ0FBQztJQUNGLE9BQU8sQ0FDTCxvRkFBYSxLQUFLLHVCQUFtQixHQUFHLEVBQUUsSUFBSSxPQUFPLFFBQVEsZ0JBQzFELE9BQU8sUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUNqQixDQUFDLENBQUMsQ0FBQyxDQUNGLDhIQUNHLE1BQU0sRUFDTixRQUFRLElBQ1IsQ0FDSixJQUNPLENBQ1gsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL1NlY3Rpb24udHN4PzMzNzIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgeyB1c2VFeGNhbGlkcmF3Q29udGFpbmVyIH0gZnJvbSBcIi4vQXBwXCI7XG5cbmludGVyZmFjZSBTZWN0aW9uUHJvcHMgZXh0ZW5kcyBSZWFjdC5IVE1MUHJvcHM8SFRNTEVsZW1lbnQ+IHtcbiAgaGVhZGluZzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIHwgKChoZWFkZXI6IFJlYWN0LlJlYWN0Tm9kZSkgPT4gUmVhY3QuUmVhY3ROb2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IFNlY3Rpb24gPSAoeyBoZWFkaW5nLCBjaGlsZHJlbiwgLi4ucHJvcHMgfTogU2VjdGlvblByb3BzKSA9PiB7XG4gIGNvbnN0IHsgaWQgfSA9IHVzZUV4Y2FsaWRyYXdDb250YWluZXIoKTtcbiAgY29uc3QgaGVhZGVyID0gKFxuICAgIDxoMiBjbGFzc05hbWU9XCJ2aXN1YWxseS1oaWRkZW5cIiBpZD17YCR7aWR9LSR7aGVhZGluZ30tdGl0bGVgfT5cbiAgICAgIHt0KGBoZWFkaW5ncy4ke2hlYWRpbmd9YCl9XG4gICAgPC9oMj5cbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8c2VjdGlvbiB7Li4ucHJvcHN9IGFyaWEtbGFiZWxsZWRieT17YCR7aWR9LSR7aGVhZGluZ30tdGl0bGVgfT5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IChcbiAgICAgICAgY2hpbGRyZW4oaGVhZGVyKVxuICAgICAgKSA6IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/Section.tsx\n");
2269
2280
 
2270
2281
  /***/ }),
2271
2282
 
@@ -2936,7 +2947,7 @@ eval("\r\nmodule.exports = function (item) {\r\n var content = item[1];\r\n
2936
2947
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2937
2948
 
2938
2949
  "use strict";
2939
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\r\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\r\n /* eslint-disable */\r\n /* global __webpack_public_path__:writable */\r\n __webpack_require__.p =\r\n window.EXCALIDRAW_ASSET_PATH ||\r\n `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.3.77\"}/dist/`;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLG9CQUFvQixJQUFJLFFBQXVCLFFBQVEsQ0FBQztDQUNoRiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3B1YmxpY1BhdGguanM/YTg3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTlYgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IEVOVi5URVNUKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8qIGdsb2JhbCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzp3cml0YWJsZSAqL1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9XG4gICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfS9kaXN0L2A7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./publicPath.js\n");
2950
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\r\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\r\n /* eslint-disable */\r\n /* global __webpack_public_path__:writable */\r\n __webpack_require__.p =\r\n window.EXCALIDRAW_ASSET_PATH ||\r\n `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.3.77-debug2\"}/dist/`;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLG9CQUFvQixJQUFJLGVBQXVCLFFBQVEsQ0FBQztDQUNoRiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3B1YmxpY1BhdGguanM/YTg3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTlYgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IEVOVi5URVNUKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8qIGdsb2JhbCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzp3cml0YWJsZSAqL1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9XG4gICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfS9kaXN0L2A7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./publicPath.js\n");
2940
2951
 
2941
2952
  /***/ }),
2942
2953
 
@@ -3035,7 +3046,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3035
3046
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3036
3047
 
3037
3048
  "use strict";
3038
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SVG_EXPORT_TAG\": () => (/* binding */ SVG_EXPORT_TAG),\n/* harmony export */ \"exportToCanvas\": () => (/* binding */ exportToCanvas),\n/* harmony export */ \"exportToSvg\": () => (/* binding */ exportToSvg),\n/* harmony export */ \"getExportSize\": () => (/* binding */ getExportSize)\n/* harmony export */ });\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../renderer/renderScene */ \"../../renderer/renderScene.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/image */ \"../../element/image.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\n\r\n\r\n\r\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\r\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = width * appState.exportScale;\r\n canvas.height = height * appState.exportScale;\r\n return { canvas, scale: appState.exportScale };\r\n}) => __awaiter(void 0, void 0, void 0, function* () {\r\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\r\n const { canvas, scale = 1 } = createCanvas(width, height);\r\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\r\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\r\n imageCache: new Map(),\r\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\r\n files,\r\n });\r\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)(elements, appState, null, scale, roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas), canvas, {\r\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\r\n scrollX: -minX + exportPadding,\r\n scrollY: -minY + exportPadding,\r\n zoom: defaultAppState.zoom,\r\n remotePointerViewportCoords: {},\r\n remoteSelectedElementIds: {},\r\n shouldCacheIgnoreZoom: false,\r\n remotePointerUsernames: {},\r\n remotePointerUserStates: {},\r\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\r\n imageCache,\r\n renderScrollbars: false,\r\n renderSelection: false,\r\n renderGrid: false,\r\n isExporting: true,\r\n });\r\n return canvas;\r\n});\r\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\r\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\r\n let metadata = \"\";\r\n if (exportEmbedScene) {\r\n try {\r\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\r\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\r\n });\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\r\n // initialize SVG root\r\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\r\n svgRoot.setAttribute(\"version\", \"1.1\");\r\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\r\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\r\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\r\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\r\n if (appState.exportWithDarkMode) {\r\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\r\n }\r\n let assetPath = \"https://excalidraw.com/\";\r\n // Asset path needs to be determined only when using package\r\n if (true) {\r\n assetPath =\r\n window.EXCALIDRAW_ASSET_PATH ||\r\n `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.3.77\"}`;\r\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\r\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\r\n }\r\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\r\n }\r\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style>\n @font-face {\n font-family: \"Virgil\";\n src: url(\"https://excalidraw.com/Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"https://excalidraw.com/Cascadia.woff2\");\n }\n </style>\n </defs>\n `;\r\n // render background rect\r\n if (appState.exportBackground && viewBackgroundColor) {\r\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\r\n rect.setAttribute(\"x\", \"0\");\r\n rect.setAttribute(\"y\", \"0\");\r\n rect.setAttribute(\"width\", `${width}`);\r\n rect.setAttribute(\"height\", `${height}`);\r\n rect.setAttribute(\"fill\", viewBackgroundColor);\r\n svgRoot.appendChild(rect);\r\n }\r\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\r\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\r\n offsetX: -minX + exportPadding,\r\n offsetY: -minY + exportPadding,\r\n exportWithDarkMode: appState.exportWithDarkMode,\r\n });\r\n return svgRoot;\r\n});\r\n// calculate smallest area to fit the contents in\r\nconst getCanvasSize = (elements, exportPadding) => {\r\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\r\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + exportPadding * 2;\r\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\r\n return [minX, minY, width, height];\r\n};\r\nconst getExportSize = (elements, exportPadding, scale) => {\r\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\r\n return [width, height];\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dC50cz85YmY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lLCByZW5kZXJTY2VuZVRvU3ZnIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBkaXN0YW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBTVkdfTlMsIFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzLFxuICB1cGRhdGVJbWFnZUNhY2hlLFxufSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuXG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICB7XG4gICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICB9OiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgfSxcbiAgY3JlYXRlQ2FudmFzOiAoXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7IHNjYWxlOiBudW1iZXIgfSA9ICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICByZXR1cm4geyBjYW52YXMsIHNjYWxlOiBhcHBTdGF0ZS5leHBvcnRTY2FsZSB9O1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIGNvbnN0IHsgY2FudmFzLCBzY2FsZSA9IDEgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblxuICBjb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcblxuICBjb25zdCB7IGltYWdlQ2FjaGUgfSA9IGF3YWl0IHVwZGF0ZUltYWdlQ2FjaGUoe1xuICAgIGltYWdlQ2FjaGU6IG5ldyBNYXAoKSxcbiAgICBmaWxlSWRzOiBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMoZWxlbWVudHMpLm1hcChcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LmZpbGVJZCxcbiAgICApLFxuICAgIGZpbGVzLFxuICB9KTtcblxuICByZW5kZXJTY2VuZShlbGVtZW50cywgYXBwU3RhdGUsIG51bGwsIHNjYWxlLCByb3VnaC5jYW52YXMoY2FudmFzKSwgY2FudmFzLCB7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogZXhwb3J0QmFja2dyb3VuZCA/IHZpZXdCYWNrZ3JvdW5kQ29sb3IgOiBudWxsLFxuICAgIHNjcm9sbFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICBzY3JvbGxZOiAtbWluWSArIGV4cG9ydFBhZGRpbmcsXG4gICAgem9vbTogZGVmYXVsdEFwcFN0YXRlLnpvb20sXG4gICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICByZW1vdGVTZWxlY3RlZEVsZW1lbnRJZHM6IHt9LFxuICAgIHNob3VsZENhY2hlSWdub3JlWm9vbTogZmFsc2UsXG4gICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgcmVtb3RlUG9pbnRlclVzZXJTdGF0ZXM6IHt9LFxuICAgIHRoZW1lOiBhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUgPyBcImRhcmtcIiA6IFwibGlnaHRcIixcbiAgICBpbWFnZUNhY2hlLFxuICAgIHJlbmRlclNjcm9sbGJhcnM6IGZhbHNlLFxuICAgIHJlbmRlclNlbGVjdGlvbjogZmFsc2UsXG4gICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgaXNFeHBvcnRpbmc6IHRydWUsXG4gIH0pO1xuXG4gIHJldHVybiBjYW52YXM7XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9TdmcgPSBhc3luYyAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kOiBib29sZWFuO1xuICAgIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gICAgZXhwb3J0U2NhbGU/OiBudW1iZXI7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGV4cG9ydFdpdGhEYXJrTW9kZT86IGJvb2xlYW47XG4gICAgZXhwb3J0RW1iZWRTY2VuZT86IGJvb2xlYW47XG4gIH0sXG4gIGZpbGVzOiBCaW5hcnlGaWxlcyB8IG51bGwsXG4pOiBQcm9taXNlPFNWR1NWR0VsZW1lbnQ+ID0+IHtcbiAgY29uc3Qge1xuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgZXhwb3J0U2NhbGUgPSAxLFxuICAgIGV4cG9ydEVtYmVkU2NlbmUsXG4gIH0gPSBhcHBTdGF0ZTtcbiAgbGV0IG1ldGFkYXRhID0gXCJcIjtcbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydCgvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImltYWdlXCIgKi8gXCIuLi8uLi9zcmMvZGF0YS9pbWFnZVwiKVxuICAgICAgKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIHRleHQ6IHNlcmlhbGl6ZUFzSlNPTihlbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzIHx8IHt9LCBcImxvY2FsXCIpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcbiAgY29uc3Qgc3ZnUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwic3ZnXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgXCIxLjFcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgU1ZHX05TKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYCR7d2lkdGggKiBleHBvcnRTY2FsZX1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgYCR7aGVpZ2h0ICogZXhwb3J0U2NhbGV9YCk7XG4gIGlmIChhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUpIHtcbiAgICBzdmdSb290LnNldEF0dHJpYnV0ZShcImZpbHRlclwiLCBUSEVNRV9GSUxURVIpO1xuICB9XG5cbiAgbGV0IGFzc2V0UGF0aCA9IFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9cIjtcblxuICAvLyBBc3NldCBwYXRoIG5lZWRzIHRvIGJlIGRldGVybWluZWQgb25seSB3aGVuIHVzaW5nIHBhY2thZ2VcbiAgaWYgKHByb2Nlc3MuZW52LklTX0VYQ0FMSURSQVdfTlBNX1BBQ0tBR0UpIHtcbiAgICBhc3NldFBhdGggPVxuICAgICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgICAgYGh0dHBzOi8vdW5wa2cuY29tLyR7cHJvY2Vzcy5lbnYuUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059YDtcblxuICAgIGlmIChhc3NldFBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICBhc3NldFBhdGggPSBhc3NldFBhdGgucmVwbGFjZShcIi9cIiwgYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYCk7XG4gICAgfVxuICAgIGFzc2V0UGF0aCA9IGAke2Fzc2V0UGF0aH0vZGlzdC9leGNhbGlkcmF3LWFzc2V0cy9gO1xuICB9XG4gIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGU+XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiVmlyZ2lsXCI7XG4gICAgICAgIHNyYzogdXJsKFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9WaXJnaWwud29mZjJcIik7XG4gICAgICB9XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiQ2FzY2FkaWFcIjtcbiAgICAgICAgc3JjOiB1cmwoXCJodHRwczovL2V4Y2FsaWRyYXcuY29tL0Nhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvZGVmcz5cbiAgYDtcbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgIG9mZnNldFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICBleHBvcnRXaXRoRGFya01vZGU6IGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59O1xuXG4vLyBjYWxjdWxhdGUgc21hbGxlc3QgYXJlYSB0byBmaXQgdGhlIGNvbnRlbnRzIGluXG5jb25zdCBnZXRDYW52YXNTaXplID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGV4cG9ydFBhZGRpbmc6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gZ2V0Q29tbW9uQm91bmRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgd2lkdGggPSBkaXN0YW5jZShtaW5YLCBtYXhYKSArIGV4cG9ydFBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIGV4cG9ydFBhZGRpbmcgKyBleHBvcnRQYWRkaW5nO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
3049
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SVG_EXPORT_TAG\": () => (/* binding */ SVG_EXPORT_TAG),\n/* harmony export */ \"exportToCanvas\": () => (/* binding */ exportToCanvas),\n/* harmony export */ \"exportToSvg\": () => (/* binding */ exportToSvg),\n/* harmony export */ \"getExportSize\": () => (/* binding */ getExportSize)\n/* harmony export */ });\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../renderer/renderScene */ \"../../renderer/renderScene.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/image */ \"../../element/image.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\n\r\n\r\n\r\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\r\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = width * appState.exportScale;\r\n canvas.height = height * appState.exportScale;\r\n return { canvas, scale: appState.exportScale };\r\n}) => __awaiter(void 0, void 0, void 0, function* () {\r\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\r\n const { canvas, scale = 1 } = createCanvas(width, height);\r\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\r\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\r\n imageCache: new Map(),\r\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\r\n files,\r\n });\r\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)(elements, appState, null, scale, roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas), canvas, {\r\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\r\n scrollX: -minX + exportPadding,\r\n scrollY: -minY + exportPadding,\r\n zoom: defaultAppState.zoom,\r\n remotePointerViewportCoords: {},\r\n remoteSelectedElementIds: {},\r\n shouldCacheIgnoreZoom: false,\r\n remotePointerUsernames: {},\r\n remotePointerUserStates: {},\r\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\r\n imageCache,\r\n renderScrollbars: false,\r\n renderSelection: false,\r\n renderGrid: false,\r\n isExporting: true,\r\n });\r\n return canvas;\r\n});\r\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\r\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\r\n let metadata = \"\";\r\n if (exportEmbedScene) {\r\n try {\r\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\r\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\r\n });\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\r\n // initialize SVG root\r\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\r\n svgRoot.setAttribute(\"version\", \"1.1\");\r\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\r\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\r\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\r\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\r\n if (appState.exportWithDarkMode) {\r\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\r\n }\r\n let assetPath = \"https://excalidraw.com/\";\r\n // Asset path needs to be determined only when using package\r\n if (true) {\r\n assetPath =\r\n window.EXCALIDRAW_ASSET_PATH ||\r\n `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.3.77-debug2\"}`;\r\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\r\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\r\n }\r\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\r\n }\r\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style>\n @font-face {\n font-family: \"Virgil\";\n src: url(\"https://excalidraw.com/Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"https://excalidraw.com/Cascadia.woff2\");\n }\n </style>\n </defs>\n `;\r\n // render background rect\r\n if (appState.exportBackground && viewBackgroundColor) {\r\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\r\n rect.setAttribute(\"x\", \"0\");\r\n rect.setAttribute(\"y\", \"0\");\r\n rect.setAttribute(\"width\", `${width}`);\r\n rect.setAttribute(\"height\", `${height}`);\r\n rect.setAttribute(\"fill\", viewBackgroundColor);\r\n svgRoot.appendChild(rect);\r\n }\r\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\r\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\r\n offsetX: -minX + exportPadding,\r\n offsetY: -minY + exportPadding,\r\n exportWithDarkMode: appState.exportWithDarkMode,\r\n });\r\n return svgRoot;\r\n});\r\n// calculate smallest area to fit the contents in\r\nconst getCanvasSize = (elements, exportPadding) => {\r\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\r\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + exportPadding * 2;\r\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\r\n return [minX, minY, width, height];\r\n};\r\nconst getExportSize = (elements, exportPadding, scale) => {\r\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\r\n return [width, height];\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dC50cz85YmY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lLCByZW5kZXJTY2VuZVRvU3ZnIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBkaXN0YW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBTVkdfTlMsIFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzLFxuICB1cGRhdGVJbWFnZUNhY2hlLFxufSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuXG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICB7XG4gICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICB9OiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgfSxcbiAgY3JlYXRlQ2FudmFzOiAoXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7IHNjYWxlOiBudW1iZXIgfSA9ICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICByZXR1cm4geyBjYW52YXMsIHNjYWxlOiBhcHBTdGF0ZS5leHBvcnRTY2FsZSB9O1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIGNvbnN0IHsgY2FudmFzLCBzY2FsZSA9IDEgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblxuICBjb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcblxuICBjb25zdCB7IGltYWdlQ2FjaGUgfSA9IGF3YWl0IHVwZGF0ZUltYWdlQ2FjaGUoe1xuICAgIGltYWdlQ2FjaGU6IG5ldyBNYXAoKSxcbiAgICBmaWxlSWRzOiBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMoZWxlbWVudHMpLm1hcChcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LmZpbGVJZCxcbiAgICApLFxuICAgIGZpbGVzLFxuICB9KTtcblxuICByZW5kZXJTY2VuZShlbGVtZW50cywgYXBwU3RhdGUsIG51bGwsIHNjYWxlLCByb3VnaC5jYW52YXMoY2FudmFzKSwgY2FudmFzLCB7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogZXhwb3J0QmFja2dyb3VuZCA/IHZpZXdCYWNrZ3JvdW5kQ29sb3IgOiBudWxsLFxuICAgIHNjcm9sbFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICBzY3JvbGxZOiAtbWluWSArIGV4cG9ydFBhZGRpbmcsXG4gICAgem9vbTogZGVmYXVsdEFwcFN0YXRlLnpvb20sXG4gICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICByZW1vdGVTZWxlY3RlZEVsZW1lbnRJZHM6IHt9LFxuICAgIHNob3VsZENhY2hlSWdub3JlWm9vbTogZmFsc2UsXG4gICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgcmVtb3RlUG9pbnRlclVzZXJTdGF0ZXM6IHt9LFxuICAgIHRoZW1lOiBhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUgPyBcImRhcmtcIiA6IFwibGlnaHRcIixcbiAgICBpbWFnZUNhY2hlLFxuICAgIHJlbmRlclNjcm9sbGJhcnM6IGZhbHNlLFxuICAgIHJlbmRlclNlbGVjdGlvbjogZmFsc2UsXG4gICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgaXNFeHBvcnRpbmc6IHRydWUsXG4gIH0pO1xuXG4gIHJldHVybiBjYW52YXM7XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9TdmcgPSBhc3luYyAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kOiBib29sZWFuO1xuICAgIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gICAgZXhwb3J0U2NhbGU/OiBudW1iZXI7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGV4cG9ydFdpdGhEYXJrTW9kZT86IGJvb2xlYW47XG4gICAgZXhwb3J0RW1iZWRTY2VuZT86IGJvb2xlYW47XG4gIH0sXG4gIGZpbGVzOiBCaW5hcnlGaWxlcyB8IG51bGwsXG4pOiBQcm9taXNlPFNWR1NWR0VsZW1lbnQ+ID0+IHtcbiAgY29uc3Qge1xuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgZXhwb3J0U2NhbGUgPSAxLFxuICAgIGV4cG9ydEVtYmVkU2NlbmUsXG4gIH0gPSBhcHBTdGF0ZTtcbiAgbGV0IG1ldGFkYXRhID0gXCJcIjtcbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydCgvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImltYWdlXCIgKi8gXCIuLi8uLi9zcmMvZGF0YS9pbWFnZVwiKVxuICAgICAgKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIHRleHQ6IHNlcmlhbGl6ZUFzSlNPTihlbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzIHx8IHt9LCBcImxvY2FsXCIpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcbiAgY29uc3Qgc3ZnUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwic3ZnXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgXCIxLjFcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgU1ZHX05TKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYCR7d2lkdGggKiBleHBvcnRTY2FsZX1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgYCR7aGVpZ2h0ICogZXhwb3J0U2NhbGV9YCk7XG4gIGlmIChhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUpIHtcbiAgICBzdmdSb290LnNldEF0dHJpYnV0ZShcImZpbHRlclwiLCBUSEVNRV9GSUxURVIpO1xuICB9XG5cbiAgbGV0IGFzc2V0UGF0aCA9IFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9cIjtcblxuICAvLyBBc3NldCBwYXRoIG5lZWRzIHRvIGJlIGRldGVybWluZWQgb25seSB3aGVuIHVzaW5nIHBhY2thZ2VcbiAgaWYgKHByb2Nlc3MuZW52LklTX0VYQ0FMSURSQVdfTlBNX1BBQ0tBR0UpIHtcbiAgICBhc3NldFBhdGggPVxuICAgICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgICAgYGh0dHBzOi8vdW5wa2cuY29tLyR7cHJvY2Vzcy5lbnYuUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059YDtcblxuICAgIGlmIChhc3NldFBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICBhc3NldFBhdGggPSBhc3NldFBhdGgucmVwbGFjZShcIi9cIiwgYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYCk7XG4gICAgfVxuICAgIGFzc2V0UGF0aCA9IGAke2Fzc2V0UGF0aH0vZGlzdC9leGNhbGlkcmF3LWFzc2V0cy9gO1xuICB9XG4gIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGU+XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiVmlyZ2lsXCI7XG4gICAgICAgIHNyYzogdXJsKFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9WaXJnaWwud29mZjJcIik7XG4gICAgICB9XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiQ2FzY2FkaWFcIjtcbiAgICAgICAgc3JjOiB1cmwoXCJodHRwczovL2V4Y2FsaWRyYXcuY29tL0Nhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvZGVmcz5cbiAgYDtcbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgIG9mZnNldFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICBleHBvcnRXaXRoRGFya01vZGU6IGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59O1xuXG4vLyBjYWxjdWxhdGUgc21hbGxlc3QgYXJlYSB0byBmaXQgdGhlIGNvbnRlbnRzIGluXG5jb25zdCBnZXRDYW52YXNTaXplID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGV4cG9ydFBhZGRpbmc6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gZ2V0Q29tbW9uQm91bmRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgd2lkdGggPSBkaXN0YW5jZShtaW5YLCBtYXhYKSArIGV4cG9ydFBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIGV4cG9ydFBhZGRpbmcgKyBleHBvcnRQYWRkaW5nO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
3039
3050
 
3040
3051
  /***/ }),
3041
3052
 
@@ -3123,7 +3134,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3123
3134
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3124
3135
 
3125
3136
  "use strict";
3126
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"allowFullScreen\": () => (/* binding */ allowFullScreen),\n/* harmony export */ \"arrayToMap\": () => (/* binding */ arrayToMap),\n/* harmony export */ \"bytesToHexString\": () => (/* binding */ bytesToHexString),\n/* harmony export */ \"capitalizeString\": () => (/* binding */ capitalizeString),\n/* harmony export */ \"chunk\": () => (/* binding */ chunk),\n/* harmony export */ \"debounce\": () => (/* binding */ debounce),\n/* harmony export */ \"distance\": () => (/* binding */ distance),\n/* harmony export */ \"exitFullScreen\": () => (/* binding */ exitFullScreen),\n/* harmony export */ \"findIndex\": () => (/* binding */ findIndex),\n/* harmony export */ \"findLastIndex\": () => (/* binding */ findLastIndex),\n/* harmony export */ \"focusNearestParent\": () => (/* binding */ focusNearestParent),\n/* harmony export */ \"getDateTime\": () => (/* binding */ getDateTime),\n/* harmony export */ \"getFontFamilyString\": () => (/* binding */ getFontFamilyString),\n/* harmony export */ \"getFontString\": () => (/* binding */ getFontString),\n/* harmony export */ \"getFrame\": () => (/* binding */ getFrame),\n/* harmony export */ \"getGlobalCSSVariable\": () => (/* binding */ getGlobalCSSVariable),\n/* harmony export */ \"getNearestScrollableContainer\": () => (/* binding */ getNearestScrollableContainer),\n/* harmony export */ \"getShortcutKey\": () => (/* binding */ getShortcutKey),\n/* harmony export */ \"getUpdatedTimestamp\": () => (/* binding */ getUpdatedTimestamp),\n/* harmony export */ \"getVersion\": () => (/* binding */ getVersion),\n/* harmony export */ \"isFullScreen\": () => (/* binding */ isFullScreen),\n/* harmony export */ \"isInputLike\": () => (/* binding */ isInputLike),\n/* harmony export */ \"isPrimitive\": () => (/* binding */ isPrimitive),\n/* harmony export */ \"isProdEnv\": () => (/* binding */ isProdEnv),\n/* harmony export */ \"isPromiseLike\": () => (/* binding */ isPromiseLike),\n/* harmony export */ \"isRTL\": () => (/* binding */ isRTL),\n/* harmony export */ \"isTestEnv\": () => (/* binding */ isTestEnv),\n/* harmony export */ \"isToolIcon\": () => (/* binding */ isToolIcon),\n/* harmony export */ \"isTransparent\": () => (/* binding */ isTransparent),\n/* harmony export */ \"isWritableElement\": () => (/* binding */ isWritableElement),\n/* harmony export */ \"muteFSAbortError\": () => (/* binding */ muteFSAbortError),\n/* harmony export */ \"nFormatter\": () => (/* binding */ nFormatter),\n/* harmony export */ \"preventUnload\": () => (/* binding */ preventUnload),\n/* harmony export */ \"queryFocusableElements\": () => (/* binding */ queryFocusableElements),\n/* harmony export */ \"removeSelection\": () => (/* binding */ removeSelection),\n/* harmony export */ \"resetCursor\": () => (/* binding */ resetCursor),\n/* harmony export */ \"resolvablePromise\": () => (/* binding */ resolvablePromise),\n/* harmony export */ \"sceneCoordsToViewportCoords\": () => (/* binding */ sceneCoordsToViewportCoords),\n/* harmony export */ \"selectNode\": () => (/* binding */ selectNode),\n/* harmony export */ \"setCursor\": () => (/* binding */ setCursor),\n/* harmony export */ \"setCursorForShape\": () => (/* binding */ setCursorForShape),\n/* harmony export */ \"setDateTimeForTests\": () => (/* binding */ setDateTimeForTests),\n/* harmony export */ \"setEraserCursor\": () => (/* binding */ setEraserCursor),\n/* harmony export */ \"supportsEmoji\": () => (/* binding */ supportsEmoji),\n/* harmony export */ \"throttleRAF\": () => (/* binding */ throttleRAF),\n/* harmony export */ \"tupleToCoors\": () => (/* binding */ tupleToCoors),\n/* harmony export */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\n/* harmony export */ \"updateObject\": () => (/* binding */ updateObject),\n/* harmony export */ \"viewportCoordsToSceneCoords\": () => (/* binding */ viewportCoordsToSceneCoords),\n/* harmony export */ \"withBatchedUpdates\": () => (/* binding */ withBatchedUpdates),\n/* harmony export */ \"withBatchedUpdatesThrottled\": () => (/* binding */ withBatchedUpdatesThrottled),\n/* harmony export */ \"wrapEvent\": () => (/* binding */ wrapEvent)\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 _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.ts\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keys */ \"../../keys.ts\");\n\r\n\r\n\r\n\r\n\r\nlet mockDateTime = null;\r\nconst setDateTimeForTests = (dateTime) => {\r\n mockDateTime = dateTime;\r\n};\r\nconst getDateTime = () => {\r\n if (mockDateTime) {\r\n return mockDateTime;\r\n }\r\n const date = new Date();\r\n const year = date.getFullYear();\r\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\r\n const day = `${date.getDate()}`.padStart(2, \"0\");\r\n const hr = `${date.getHours()}`.padStart(2, \"0\");\r\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\r\n return `${year}-${month}-${day}-${hr}${min}`;\r\n};\r\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\r\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\r\n target instanceof HTMLBRElement || // newline in wysiwyg\r\n target instanceof HTMLInputElement ||\r\n target instanceof HTMLTextAreaElement ||\r\n target instanceof HTMLSelectElement;\r\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\r\n target instanceof HTMLBRElement || // newline in wysiwyg\r\n target instanceof HTMLTextAreaElement ||\r\n (target instanceof HTMLInputElement &&\r\n (target.type === \"text\" || target.type === \"number\"));\r\nconst getFontFamilyString = ({ fontFamily, }) => {\r\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\r\n if (id === fontFamily) {\r\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\r\n }\r\n }\r\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\r\n};\r\n/** returns fontSize+fontFamily string for assignment to DOM elements */\r\nconst getFontString = ({ fontSize, fontFamily, }) => {\r\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\r\n};\r\nconst debounce = (fn, timeout) => {\r\n let handle = 0;\r\n let lastArgs = null;\r\n const ret = (...args) => {\r\n lastArgs = args;\r\n clearTimeout(handle);\r\n handle = window.setTimeout(() => {\r\n lastArgs = null;\r\n fn(...args);\r\n }, timeout);\r\n };\r\n ret.flush = () => {\r\n clearTimeout(handle);\r\n if (lastArgs) {\r\n const _lastArgs = lastArgs;\r\n lastArgs = null;\r\n fn(..._lastArgs);\r\n }\r\n };\r\n ret.cancel = () => {\r\n lastArgs = null;\r\n clearTimeout(handle);\r\n };\r\n return ret;\r\n};\r\n// throttle callback to execute once per animation frame\r\nconst throttleRAF = (fn, opts) => {\r\n let timerId = null;\r\n let lastArgs = null;\r\n let lastArgsTrailing = null;\r\n const scheduleFunc = (args) => {\r\n timerId = window.requestAnimationFrame(() => {\r\n timerId = null;\r\n fn(...args);\r\n lastArgs = null;\r\n if (lastArgsTrailing) {\r\n lastArgs = lastArgsTrailing;\r\n lastArgsTrailing = null;\r\n scheduleFunc(lastArgs);\r\n }\r\n });\r\n };\r\n const ret = (...args) => {\r\n if (false) {}\r\n lastArgs = args;\r\n if (timerId === null) {\r\n scheduleFunc(lastArgs);\r\n }\r\n else if (opts === null || opts === void 0 ? void 0 : opts.trailing) {\r\n lastArgsTrailing = args;\r\n }\r\n };\r\n ret.flush = () => {\r\n if (timerId !== null) {\r\n cancelAnimationFrame(timerId);\r\n timerId = null;\r\n }\r\n if (lastArgs) {\r\n fn(...(lastArgsTrailing || lastArgs));\r\n lastArgs = lastArgsTrailing = null;\r\n }\r\n };\r\n ret.cancel = () => {\r\n lastArgs = lastArgsTrailing = null;\r\n if (timerId !== null) {\r\n cancelAnimationFrame(timerId);\r\n timerId = null;\r\n }\r\n };\r\n return ret;\r\n};\r\n// https://github.com/lodash/lodash/blob/es/chunk.js\r\nconst chunk = (array, size) => {\r\n if (!array.length || size < 1) {\r\n return [];\r\n }\r\n let index = 0;\r\n let resIndex = 0;\r\n const result = Array(Math.ceil(array.length / size));\r\n while (index < array.length) {\r\n result[resIndex++] = array.slice(index, (index += size));\r\n }\r\n return result;\r\n};\r\nconst selectNode = (node) => {\r\n const selection = window.getSelection();\r\n if (selection) {\r\n const range = document.createRange();\r\n range.selectNodeContents(node);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n};\r\nconst removeSelection = () => {\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n }\r\n};\r\nconst distance = (x, y) => Math.abs(x - y);\r\nconst updateActiveTool = (appState, data) => {\r\n if (data.type === \"custom\") {\r\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\r\n }\r\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveToolBeforeEraser: data.lastActiveToolBeforeEraser === undefined\r\n ? appState.activeTool.lastActiveToolBeforeEraser\r\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\r\n};\r\nconst resetCursor = (canvas) => {\r\n if (canvas) {\r\n canvas.style.cursor = \"\";\r\n }\r\n};\r\nconst setCursor = (canvas, cursor) => {\r\n if (canvas) {\r\n canvas.style.cursor = cursor;\r\n }\r\n};\r\nlet eraserCanvasCache;\r\nlet previewDataURL;\r\nconst setEraserCursor = (canvas, theme) => {\r\n const cursorImageSizePx = 20;\r\n const drawCanvas = () => {\r\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\r\n eraserCanvasCache = document.createElement(\"canvas\");\r\n eraserCanvasCache.theme = theme;\r\n eraserCanvasCache.height = cursorImageSizePx;\r\n eraserCanvasCache.width = cursorImageSizePx;\r\n const context = eraserCanvasCache.getContext(\"2d\");\r\n context.lineWidth = 1;\r\n context.beginPath();\r\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\r\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n context.fill();\r\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\r\n context.stroke();\r\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\r\n };\r\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\r\n drawCanvas();\r\n }\r\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\r\n};\r\nconst setCursorForShape = (canvas, appState) => {\r\n if (!canvas) {\r\n return;\r\n }\r\n if (appState.activeTool.type === \"selection\") {\r\n resetCursor(canvas);\r\n }\r\n else if (appState.activeTool.type === \"eraser\") {\r\n setEraserCursor(canvas, appState.theme);\r\n // do nothing if image tool is selected which suggests there's\r\n // a image-preview set as the cursor\r\n // Ignore custom type as well and let host decide\r\n }\r\n else if (![\"image\", \"custom\"].includes(appState.activeTool.type)) {\r\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\r\n }\r\n};\r\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\r\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\r\nconst exitFullScreen = () => document.exitFullscreen();\r\nconst getShortcutKey = (shortcut) => {\r\n shortcut = shortcut\r\n .replace(/\\bAlt\\b/i, \"Alt\")\r\n .replace(/\\bShift\\b/i, \"Shift\")\r\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\")\r\n .replace(/\\bDel\\b/i, \"Delete\");\r\n if (_keys__WEBPACK_IMPORTED_MODULE_4__.isDarwin) {\r\n return shortcut\r\n .replace(/\\bCtrlOrCmd\\b/i, \"Cmd\")\r\n .replace(/\\bAlt\\b/i, \"Option\");\r\n }\r\n return shortcut.replace(/\\bCtrlOrCmd\\b/i, \"Ctrl\");\r\n};\r\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\r\n const invScale = 1 / zoom.value;\r\n const x = (clientX - offsetLeft) * invScale - scrollX;\r\n const y = (clientY - offsetTop) * invScale - scrollY;\r\n return { x, y };\r\n};\r\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\r\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\r\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\r\n return { x, y };\r\n};\r\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\r\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\r\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\r\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\r\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\r\n/**\r\n * Checks whether first directional character is RTL. Meaning whether it starts\r\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\r\n * RTL.\r\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\r\n */\r\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\r\nconst tupleToCoors = (xyTuple) => {\r\n const [x, y] = xyTuple;\r\n return { x, y };\r\n};\r\n/** use as a rejectionHandler to mute filesystem Abort errors */\r\nconst muteFSAbortError = (error) => {\r\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\r\n console.warn(error);\r\n return;\r\n }\r\n throw error;\r\n};\r\nconst findIndex = (array, cb, fromIndex = 0) => {\r\n if (fromIndex < 0) {\r\n fromIndex = array.length + fromIndex;\r\n }\r\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\r\n let index = fromIndex - 1;\r\n while (++index < array.length) {\r\n if (cb(array[index], index, array)) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n};\r\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\r\n if (fromIndex < 0) {\r\n fromIndex = array.length + fromIndex;\r\n }\r\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\r\n let index = fromIndex + 1;\r\n while (--index > -1) {\r\n if (cb(array[index], index, array)) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n};\r\nconst isTransparent = (color) => {\r\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\r\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\r\n return (isRGBTransparent ||\r\n isRRGGBBTransparent ||\r\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\r\n};\r\nconst resolvablePromise = () => {\r\n let resolve;\r\n let reject;\r\n const promise = new Promise((_resolve, _reject) => {\r\n resolve = _resolve;\r\n reject = _reject;\r\n });\r\n promise.resolve = resolve;\r\n promise.reject = reject;\r\n return promise;\r\n};\r\n/**\r\n * @param func handler taking at most single parameter (event).\r\n */\r\nconst withBatchedUpdates = (func) => ((event) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\r\n});\r\n/**\r\n * barches React state updates and throttles the calls to a single call per\r\n * animation frame\r\n */\r\nconst withBatchedUpdatesThrottled = (func) => {\r\n // @ts-ignore\r\n return throttleRAF(((event) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\r\n }));\r\n};\r\n//https://stackoverflow.com/a/9462382/8418\r\nconst nFormatter = (num, digits) => {\r\n const si = [\r\n { value: 1, symbol: \"b\" },\r\n { value: 1e3, symbol: \"k\" },\r\n { value: 1e6, symbol: \"M\" },\r\n { value: 1e9, symbol: \"G\" },\r\n ];\r\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\r\n let index;\r\n for (index = si.length - 1; index > 0; index--) {\r\n if (num >= si[index].value) {\r\n break;\r\n }\r\n }\r\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\r\n};\r\nconst getVersion = () => {\r\n var _a;\r\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\r\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\r\n};\r\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\r\nconst supportsEmoji = () => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) {\r\n return false;\r\n }\r\n const offset = 12;\r\n ctx.fillStyle = \"#f00\";\r\n ctx.textBaseline = \"top\";\r\n ctx.font = \"32px Arial\";\r\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\r\n // Luckily 😀 isn't supported.\r\n ctx.fillText(\"😀\", 0, 0);\r\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\r\n};\r\nconst getNearestScrollableContainer = (element) => {\r\n let parent = element.parentElement;\r\n while (parent) {\r\n if (parent === document.body) {\r\n return document;\r\n }\r\n const { overflowY } = window.getComputedStyle(parent);\r\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\r\n if (hasScrollableContent &&\r\n (overflowY === \"auto\" ||\r\n overflowY === \"scroll\" ||\r\n overflowY === \"overlay\")) {\r\n return parent;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n return document;\r\n};\r\nconst focusNearestParent = (element) => {\r\n let parent = element.parentElement;\r\n while (parent) {\r\n if (parent.tabIndex > -1) {\r\n parent.focus();\r\n return;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n};\r\nconst preventUnload = (event) => {\r\n event.preventDefault();\r\n // NOTE: modern browsers no longer allow showing a custom message here\r\n event.returnValue = \"\";\r\n};\r\nconst bytesToHexString = (bytes) => {\r\n return Array.from(bytes)\r\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\r\n .join(\"\");\r\n};\r\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\r\n/**\r\n * Transforms array of objects containing `id` attribute,\r\n * or array of ids (strings), into a Map, keyd by `id`.\r\n */\r\nconst arrayToMap = (items) => {\r\n return items.reduce((acc, element) => {\r\n acc.set(typeof element === \"string\" ? element : element.id, element);\r\n return acc;\r\n }, new Map());\r\n};\r\nconst isTestEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.77\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\r\nconst isProdEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.77\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\r\nconst wrapEvent = (name, nativeEvent) => {\r\n return new CustomEvent(name, {\r\n detail: {\r\n nativeEvent,\r\n },\r\n cancelable: true,\r\n });\r\n};\r\nconst updateObject = (obj, updates) => {\r\n let didChange = false;\r\n for (const key in updates) {\r\n const value = updates[key];\r\n if (typeof value !== \"undefined\") {\r\n if (obj[key] === value &&\r\n // if object, always update because its attrs could have changed\r\n (typeof value !== \"object\" || value === null)) {\r\n continue;\r\n }\r\n didChange = true;\r\n }\r\n }\r\n if (!didChange) {\r\n return obj;\r\n }\r\n return Object.assign(Object.assign({}, obj), updates);\r\n};\r\nconst isPrimitive = (val) => {\r\n const type = typeof val;\r\n return val == null || (type !== \"object\" && type !== \"function\");\r\n};\r\nconst getFrame = () => {\r\n try {\r\n return window.self === window.top ? \"top\" : \"iframe\";\r\n }\r\n catch (error) {\r\n return \"iframe\";\r\n }\r\n};\r\nconst isPromiseLike = (value) => {\r\n return (!!value &&\r\n typeof value === \"object\" &&\r\n \"then\" in value &&\r\n \"catch\" in value &&\r\n \"finally\" in value);\r\n};\r\nconst queryFocusableElements = (container) => {\r\n const focusableElements = container === null || container === void 0 ? void 0 : container.querySelectorAll(\"button, a, input, select, textarea, div[tabindex], label[tabindex]\");\r\n return focusableElements\r\n ? Array.from(focusableElements).filter((element) => element.tabIndex > -1 && !element.disabled)\r\n : [];\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0FBRUssTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO0lBQzNCLElBQUk7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDdEQ7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyxDQUFDO0FBRUssTUFBTSxhQUFhLEdBQUcsQ0FDM0IsS0FBVSxFQUNzQyxFQUFFO0lBQ2xELE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSztRQUNQLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFPLElBQUksS0FBSztRQUNoQixTQUFTLElBQUksS0FBSyxDQUNuQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUssTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFNBQTZCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxnQkFBZ0IsQ0FDbkQsb0VBQW9FLENBQ3JFLENBQUM7SUFFRixPQUFPLGlCQUFpQjtRQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBRSxPQUE0QixDQUFDLFFBQVEsQ0FDbkU7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ1QsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzPzc2M2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9jIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5cbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQge1xuICBDVVJTT1JfVFlQRSxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBFVkVOVCxcbiAgRk9OVF9GQU1JTFksXG4gIE1JTUVfVFlQRVMsXG4gIFRIRU1FLFxuICBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRm9udEZhbWlseVZhbHVlcywgRm9udFN0cmluZyB9IGZyb20gXCIuL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBEYXRhVVJMLCBMYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlciwgWm9vbSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IGlzRGFyd2luIH0gZnJvbSBcIi4va2V5c1wiO1xuaW1wb3J0IHsgU0hBUEVTIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbmxldCBtb2NrRGF0ZVRpbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgY29uc3Qgc2V0RGF0ZVRpbWVGb3JUZXN0cyA9IChkYXRlVGltZTogc3RyaW5nKSA9PiB7XG4gIG1vY2tEYXRlVGltZSA9IGRhdGVUaW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGVUaW1lID0gKCkgPT4ge1xuICBpZiAobW9ja0RhdGVUaW1lKSB7XG4gICAgcmV0dXJuIG1vY2tEYXRlVGltZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IGAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGRheSA9IGAke2RhdGUuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBociA9IGAke2RhdGUuZ2V0SG91cnMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgbWluID0gYCR7ZGF0ZS5nZXRNaW51dGVzKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG5cbiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fS0ke2hyfSR7bWlufWA7XG59O1xuXG5leHBvcnQgY29uc3QgY2FwaXRhbGl6ZVN0cmluZyA9IChzdHI6IHN0cmluZykgPT5cbiAgc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuXG5leHBvcnQgY29uc3QgaXNUb29sSWNvbiA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzIEhUTUxFbGVtZW50ID0+XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoXCJUb29sSWNvblwiKTtcblxuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXNcbiAgfCBIVE1MSW5wdXRFbGVtZW50XG4gIHwgSFRNTFRleHRBcmVhRWxlbWVudFxuICB8IEhUTUxTZWxlY3RFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50O1xuXG5leHBvcnQgY29uc3QgaXNXcml0YWJsZUVsZW1lbnQgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fFxuICAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICh0YXJnZXQudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgdGFyZ2V0LnR5cGUgPT09IFwibnVtYmVyXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldEZvbnRGYW1pbHlTdHJpbmcgPSAoe1xuICBmb250RmFtaWx5LFxufToge1xuICBmb250RmFtaWx5OiBGb250RmFtaWx5VmFsdWVzO1xufSkgPT4ge1xuICBmb3IgKGNvbnN0IFtmb250RmFtaWx5U3RyaW5nLCBpZF0gb2YgT2JqZWN0LmVudHJpZXMoRk9OVF9GQU1JTFkpKSB7XG4gICAgaWYgKGlkID09PSBmb250RmFtaWx5KSB7XG4gICAgICByZXR1cm4gYCR7Zm9udEZhbWlseVN0cmluZ30sICR7V0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05UfWA7XG4gICAgfVxuICB9XG4gIHJldHVybiBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQ7XG59O1xuXG4vKiogcmV0dXJucyBmb250U2l6ZStmb250RmFtaWx5IHN0cmluZyBmb3IgYXNzaWdubWVudCB0byBET00gZWxlbWVudHMgKi9cbmV4cG9ydCBjb25zdCBnZXRGb250U3RyaW5nID0gKHtcbiAgZm9udFNpemUsXG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRTaXplOiBudW1iZXI7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIHJldHVybiBgJHtmb250U2l6ZX1weCAke2dldEZvbnRGYW1pbHlTdHJpbmcoeyBmb250RmFtaWx5IH0pfWAgYXMgRm9udFN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBkZWJvdW5jZSA9IDxUIGV4dGVuZHMgYW55W10+KFxuICBmbjogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG4gIHRpbWVvdXQ6IG51bWJlcixcbikgPT4ge1xuICBsZXQgaGFuZGxlID0gMDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHJldCA9ICguLi5hcmdzOiBUKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICAgIGhhbmRsZSA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLl9sYXN0QXJncyk7XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIHRocm90dGxlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lXG5leHBvcnQgY29uc3QgdGhyb3R0bGVSQUYgPSA8VCBleHRlbmRzIGFueVtdPihcbiAgZm46ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuICBvcHRzPzogeyB0cmFpbGluZz86IGJvb2xlYW4gfSxcbikgPT4ge1xuICBsZXQgdGltZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGxldCBsYXN0QXJnczogVCB8IG51bGwgPSBudWxsO1xuICBsZXQgbGFzdEFyZ3NUcmFpbGluZzogVCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVkdWxlRnVuYyA9IChhcmdzOiBUKSA9PiB7XG4gICAgdGltZXJJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGlmIChsYXN0QXJnc1RyYWlsaW5nKSB7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZztcbiAgICAgICAgbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgICAgIHNjaGVkdWxlRnVuYyhsYXN0QXJncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGlmICh0aW1lcklkID09PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZ1bmMobGFzdEFyZ3MpO1xuICAgIH0gZWxzZSBpZiAob3B0cz8udHJhaWxpbmcpIHtcbiAgICAgIGxhc3RBcmdzVHJhaWxpbmcgPSBhcmdzO1xuICAgIH1cbiAgfTtcbiAgcmV0LmZsdXNoID0gKCkgPT4ge1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGZuKC4uLihsYXN0QXJnc1RyYWlsaW5nIHx8IGxhc3RBcmdzKSk7XG4gICAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0LmNhbmNlbCA9ICgpID0+IHtcbiAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvY2h1bmsuanNcbmV4cG9ydCBjb25zdCBjaHVuayA9IDxUIGV4dGVuZHMgYW55PihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgc2l6ZTogbnVtYmVyLFxuKTogVFtdW10gPT4ge1xuICBpZiAoIWFycmF5Lmxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgcmVzSW5kZXggPSAwO1xuICBjb25zdCByZXN1bHQgPSBBcnJheShNYXRoLmNlaWwoYXJyYXkubGVuZ3RoIC8gc2l6ZSkpO1xuICB3aGlsZSAoaW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBhcnJheS5zbGljZShpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdE5vZGUgPSAobm9kZTogRWxlbWVudCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0aW9uID0gKCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkaXN0YW5jZSA9ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gTWF0aC5hYnMoeCAtIHkpO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQWN0aXZlVG9vbCA9IChcbiAgYXBwU3RhdGU6IFBpY2s8QXBwU3RhdGUsIFwiYWN0aXZlVG9vbFwiPixcbiAgZGF0YTogKFxuICAgIHwgeyB0eXBlOiB0eXBlb2YgU0hBUEVTW251bWJlcl1bXCJ2YWx1ZVwiXSB8IFwiZXJhc2VyXCIgfVxuICAgIHwgeyB0eXBlOiBcImN1c3RvbVwiOyBjdXN0b21UeXBlOiBzdHJpbmcgfVxuICApICYgeyBsYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcj86IExhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyIH0sXG4pOiBBcHBTdGF0ZVtcImFjdGl2ZVRvb2xcIl0gPT4ge1xuICBpZiAoZGF0YS50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgY3VzdG9tVHlwZTogZGF0YS5jdXN0b21UeXBlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI6XG4gICAgICBkYXRhLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBTdGF0ZS5hY3RpdmVUb29sLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyXG4gICAgICAgIDogZGF0YS5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcixcbiAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgY3VzdG9tVHlwZTogbnVsbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldEN1cnNvciA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJzb3IgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsIGN1cnNvcjogc3RyaW5nKSA9PiB7XG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xuICB9XG59O1xuXG5sZXQgZXJhc2VyQ2FudmFzQ2FjaGU6IGFueTtcbmxldCBwcmV2aWV3RGF0YVVSTDogc3RyaW5nO1xuZXhwb3J0IGNvbnN0IHNldEVyYXNlckN1cnNvciA9IChcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsXG4gIHRoZW1lOiBBcHBTdGF0ZVtcInRoZW1lXCJdLFxuKSA9PiB7XG4gIGNvbnN0IGN1cnNvckltYWdlU2l6ZVB4ID0gMjA7XG5cbiAgY29uc3QgZHJhd0NhbnZhcyA9ICgpID0+IHtcbiAgICBjb25zdCBpc0RhcmtUaGVtZSA9IHRoZW1lID09PSBUSEVNRS5EQVJLO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSA9IHRoZW1lO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLmhlaWdodCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLndpZHRoID0gY3Vyc29ySW1hZ2VTaXplUHg7XG4gICAgY29uc3QgY29udGV4dCA9IGVyYXNlckNhbnZhc0NhY2hlLmdldENvbnRleHQoXCIyZFwiKSE7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5hcmMoXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCAvIDIsXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgLyAyLFxuICAgICAgNSxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSSxcbiAgICApO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gaXNEYXJrVGhlbWUgPyBvYy5ibGFjayA6IG9jLndoaXRlO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLndoaXRlIDogb2MuYmxhY2s7XG4gICAgY29udGV4dC5zdHJva2UoKTtcbiAgICBwcmV2aWV3RGF0YVVSTCA9IGVyYXNlckNhbnZhc0NhY2hlLnRvRGF0YVVSTChNSU1FX1RZUEVTLnN2ZykgYXMgRGF0YVVSTDtcbiAgfTtcbiAgaWYgKCFlcmFzZXJDYW52YXNDYWNoZSB8fCBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICBkcmF3Q2FudmFzKCk7XG4gIH1cblxuICBzZXRDdXJzb3IoXG4gICAgY2FudmFzLFxuICAgIGB1cmwoJHtwcmV2aWV3RGF0YVVSTH0pICR7Y3Vyc29ySW1hZ2VTaXplUHggLyAyfSAke1xuICAgICAgY3Vyc29ySW1hZ2VTaXplUHggLyAyXG4gICAgfSwgYXV0b2AsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yRm9yU2hhcGUgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pID0+IHtcbiAgaWYgKCFjYW52YXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJzZWxlY3Rpb25cIikge1xuICAgIHJlc2V0Q3Vyc29yKGNhbnZhcyk7XG4gIH0gZWxzZSBpZiAoYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcImVyYXNlclwiKSB7XG4gICAgc2V0RXJhc2VyQ3Vyc29yKGNhbnZhcywgYXBwU3RhdGUudGhlbWUpO1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgaW1hZ2UgdG9vbCBpcyBzZWxlY3RlZCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzXG4gICAgLy8gYSBpbWFnZS1wcmV2aWV3IHNldCBhcyB0aGUgY3Vyc29yXG4gICAgLy8gSWdub3JlIGN1c3RvbSB0eXBlIGFzIHdlbGwgYW5kIGxldCBob3N0IGRlY2lkZVxuICB9IGVsc2UgaWYgKCFbXCJpbWFnZVwiLCBcImN1c3RvbVwiXS5pbmNsdWRlcyhhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkNST1NTSEFJUjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVsbFNjcmVlbiA9ICgpID0+XG4gIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50Py5ub2RlTmFtZSA9PT0gXCJIVE1MXCI7XG5cbmV4cG9ydCBjb25zdCBhbGxvd0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gKCkgPT4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNob3J0Y3V0S2V5ID0gKHNob3J0Y3V0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBzaG9ydGN1dCA9IHNob3J0Y3V0XG4gICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIkFsdFwiKVxuICAgIC5yZXBsYWNlKC9cXGJTaGlmdFxcYi9pLCBcIlNoaWZ0XCIpXG4gICAgLnJlcGxhY2UoL1xcYihFbnRlcnxSZXR1cm4pXFxiL2ksIFwiRW50ZXJcIilcbiAgICAucmVwbGFjZSgvXFxiRGVsXFxiL2ksIFwiRGVsZXRlXCIpO1xuXG4gIGlmIChpc0Rhcndpbikge1xuICAgIHJldHVybiBzaG9ydGN1dFxuICAgICAgLnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9pLCBcIkNtZFwiKVxuICAgICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIk9wdGlvblwiKTtcbiAgfVxuICByZXR1cm4gc2hvcnRjdXQucmVwbGFjZSgvXFxiQ3RybE9yQ21kXFxiL2ksIFwiQ3RybFwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMgPSAoXG4gIHsgY2xpZW50WCwgY2xpZW50WSB9OiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0sXG4gIHtcbiAgICB6b29tLFxuICAgIG9mZnNldExlZnQsXG4gICAgb2Zmc2V0VG9wLFxuICAgIHNjcm9sbFgsXG4gICAgc2Nyb2xsWSxcbiAgfToge1xuICAgIHpvb206IFpvb207XG4gICAgb2Zmc2V0TGVmdDogbnVtYmVyO1xuICAgIG9mZnNldFRvcDogbnVtYmVyO1xuICAgIHNjcm9sbFg6IG51bWJlcjtcbiAgICBzY3JvbGxZOiBudW1iZXI7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgaW52U2NhbGUgPSAxIC8gem9vbS52YWx1ZTtcbiAgY29uc3QgeCA9IChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgKiBpbnZTY2FsZSAtIHNjcm9sbFg7XG4gIGNvbnN0IHkgPSAoY2xpZW50WSAtIG9mZnNldFRvcCkgKiBpbnZTY2FsZSAtIHNjcm9sbFk7XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyA9IChcbiAgeyBzY2VuZVgsIHNjZW5lWSB9OiB7IHNjZW5lWDogbnVtYmVyOyBzY2VuZVk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHggPSAoc2NlbmVYICsgc2Nyb2xsWCkgKiB6b29tLnZhbHVlICsgb2Zmc2V0TGVmdDtcbiAgY29uc3QgeSA9IChzY2VuZVkgKyBzY3JvbGxZKSAqIHpvb20udmFsdWUgKyBvZmZzZXRUb3A7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IChuYW1lOiBzdHJpbmcpID0+XG4gIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7bmFtZX1gKTtcblxuY29uc3QgUlNfTFRSX0NIQVJTID1cbiAgXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArXG4gIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5leHBvcnQgY29uc3QgaXNSVEwgPSAodGV4dDogc3RyaW5nKSA9PiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcblxuZXhwb3J0IGNvbnN0IHR1cGxlVG9Db29ycyA9IChcbiAgeHlUdXBsZTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IFt4LCB5XSA9IHh5VHVwbGU7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbi8qKiB1c2UgYXMgYSByZWplY3Rpb25IYW5kbGVyIHRvIG11dGUgZmlsZXN5c3RlbSBBYm9ydCBlcnJvcnMgKi9cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gKGVycm9yPzogRXJyb3IpID0+IHtcbiAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IDAsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdEluZGV4ID0gPFQ+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBjYjogKGVsZW1lbnQ6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiByZWFkb25seSBUW10pID0+IGJvb2xlYW4sXG4gIGZyb21JbmRleDogbnVtYmVyID0gYXJyYXkubGVuZ3RoIC0gMSxcbikgPT4ge1xuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKC0taW5kZXggPiAtMSkge1xuICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVHJhbnNwYXJlbnQgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc1JHQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA1ICYmIGNvbG9yLnN1YnN0cig0LCAxKSA9PT0gXCIwXCI7XG4gIGNvbnN0IGlzUlJHR0JCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDkgJiYgY29sb3Iuc3Vic3RyKDcsIDIpID09PSBcIjAwXCI7XG4gIHJldHVybiAoXG4gICAgaXNSR0JUcmFuc3BhcmVudCB8fFxuICAgIGlzUlJHR0JCVHJhbnNwYXJlbnQgfHxcbiAgICBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZhYmxlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gJiB7XG4gIHJlc29sdmU6IFtUXSBleHRlbmRzIFt1bmRlZmluZWRdID8gKHZhbHVlPzogVCkgPT4gdm9pZCA6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IDxUPigpID0+IHtcbiAgbGV0IHJlc29sdmUhOiBhbnk7XG4gIGxldCByZWplY3QhOiBhbnk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIChwcm9taXNlIGFzIGFueSkucmVzb2x2ZSA9IHJlc29sdmU7XG4gIChwcm9taXNlIGFzIGFueSkucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZSBhcyBSZXNvbHZhYmxlUHJvbWlzZTxUPjtcbn07XG5cbi8qKlxuICogQHBhcmFtIGZ1bmMgaGFuZGxlciB0YWtpbmcgYXQgbW9zdCBzaW5nbGUgcGFyYW1ldGVyIChldmVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PlxuICAoKGV2ZW50KSA9PiB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYyBhcyBURnVuY3Rpb24sIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uO1xuXG4vKipcbiAqIGJhcmNoZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBhbmQgdGhyb3R0bGVzIHRoZSBjYWxscyB0byBhIHNpbmdsZSBjYWxsIHBlclxuICogYW5pbWF0aW9uIGZyYW1lXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXNUaHJvdHRsZWQgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PiB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHRocm90dGxlUkFGPFBhcmFtZXRlcnM8VEZ1bmN0aW9uPj4oKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMsIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uKTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuZXhwb3J0IGNvbnN0IG5Gb3JtYXR0ZXIgPSAobnVtOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2kgPSBbXG4gICAgeyB2YWx1ZTogMSwgc3ltYm9sOiBcImJcIiB9LFxuICAgIHsgdmFsdWU6IDFlMywgc3ltYm9sOiBcImtcIiB9LFxuICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIk1cIiB9LFxuICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIkdcIiB9LFxuICBdO1xuICBjb25zdCByeCA9IC9cXC4wKyR8KFxcLlswLTldKlsxLTldKTArJC87XG4gIGxldCBpbmRleDtcbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICAobnVtIC8gc2lbaW5kZXhdLnZhbHVlKS50b0ZpeGVkKGRpZ2l0cykucmVwbGFjZShyeCwgXCIkMVwiKSArIHNpW2luZGV4XS5zeW1ib2xcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTE1ldGFFbGVtZW50PignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8XG4gICAgREVGQVVMVF9WRVJTSU9OXG4gICk7XG59O1xuXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2Vtb2ppLmpzXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNFbW9qaSA9ICgpID0+IHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gIGN0eC5maWxsU3R5bGUgPSBcIiNmMDBcIjtcbiAgY3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG4gIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gIC8vIE1vZGVybml6ciB1c2VkIPCfkKgsIGJ1dCBpdCBpcyBzb3J0IG9mIHN1cHBvcnRlZCBvbiBXaW5kb3dzIDcuXG4gIC8vIEx1Y2tpbHkg8J+YgCBpc24ndCBzdXBwb3J0ZWQuXG4gIGN0eC5maWxsVGV4dChcIvCfmIBcIiwgMCwgMCk7XG4gIHJldHVybiBjdHguZ2V0SW1hZ2VEYXRhKG9mZnNldCwgb2Zmc2V0LCAxLCAxKS5kYXRhWzBdICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RTY3JvbGxhYmxlQ29udGFpbmVyID0gKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbik6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIH1cbiAgICBjb25zdCB7IG92ZXJmbG93WSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBjb25zdCBoYXNTY3JvbGxhYmxlQ29udGVudCA9IHBhcmVudC5zY3JvbGxIZWlnaHQgPiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChcbiAgICAgIGhhc1Njcm9sbGFibGVDb250ZW50ICYmXG4gICAgICAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fFxuICAgICAgICBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb2N1c05lYXJlc3RQYXJlbnQgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC50YWJJbmRleCA+IC0xKSB7XG4gICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2ZW50VW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG4gIGV2ZW50LnJldHVyblZhbHVlID0gXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gKGJ5dGVzOiBVaW50OEFycmF5KSA9PiB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKVxuICAgIC5tYXAoKGJ5dGUpID0+IGAwJHtieXRlLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSlcbiAgICAuam9pbihcIlwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gKCkgPT4gKGlzVGVzdEVudigpID8gMSA6IERhdGUubm93KCkpO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5leHBvcnQgY29uc3QgYXJyYXlUb01hcCA9IDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmc+KFxuICBpdGVtczogcmVhZG9ubHkgVFtdLFxuKSA9PiB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYzogTWFwPHN0cmluZywgVD4sIGVsZW1lbnQpID0+IHtcbiAgICBhY2Muc2V0KHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiID8gZWxlbWVudCA6IGVsZW1lbnQuaWQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIG5ldyBNYXAoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gKCkgPT5cbiAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcblxuZXhwb3J0IGNvbnN0IGlzUHJvZEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCB3cmFwRXZlbnQgPSA8VCBleHRlbmRzIEV2ZW50PihuYW1lOiBFVkVOVCwgbmF0aXZlRXZlbnQ6IFQpID0+IHtcbiAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICBuYXRpdmVFdmVudCxcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9iajogVCxcbiAgdXBkYXRlczogUGFydGlhbDxUPixcbik6IFQgPT4ge1xuICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh1cGRhdGVzIGFzIGFueSlba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChvYmogYXMgYW55KVtrZXldID09PSB2YWx1ZSAmJlxuICAgICAgICAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIC4uLnVwZGF0ZXMsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsOiBhbnkpID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyYW1lID0gKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCA/IFwidG9wXCIgOiBcImlmcmFtZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcImlmcmFtZVwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IChcbiAgdmFsdWU6IGFueSxcbik6IHZhbHVlIGlzIFByb21pc2U8UmVzb2x1dGlvblR5cGU8dHlwZW9mIHZhbHVlPj4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInRoZW5cIiBpbiB2YWx1ZSAmJlxuICAgIFwiY2F0Y2hcIiBpbiB2YWx1ZSAmJlxuICAgIFwiZmluYWxseVwiIGluIHZhbHVlXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlGb2N1c2FibGVFbGVtZW50cyA9IChjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgXCJidXR0b24sIGEsIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBkaXZbdGFiaW5kZXhdLCBsYWJlbFt0YWJpbmRleF1cIixcbiAgKTtcblxuICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudHNcbiAgICA/IEFycmF5LmZyb20oZm9jdXNhYmxlRWxlbWVudHMpLmZpbHRlcihcbiAgICAgICAgKGVsZW1lbnQpID0+XG4gICAgICAgICAgZWxlbWVudC50YWJJbmRleCA+IC0xICYmICEoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZCxcbiAgICAgIClcbiAgICA6IFtdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../utils.ts\n");
3137
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"allowFullScreen\": () => (/* binding */ allowFullScreen),\n/* harmony export */ \"arrayToMap\": () => (/* binding */ arrayToMap),\n/* harmony export */ \"bytesToHexString\": () => (/* binding */ bytesToHexString),\n/* harmony export */ \"capitalizeString\": () => (/* binding */ capitalizeString),\n/* harmony export */ \"chunk\": () => (/* binding */ chunk),\n/* harmony export */ \"debounce\": () => (/* binding */ debounce),\n/* harmony export */ \"distance\": () => (/* binding */ distance),\n/* harmony export */ \"exitFullScreen\": () => (/* binding */ exitFullScreen),\n/* harmony export */ \"findIndex\": () => (/* binding */ findIndex),\n/* harmony export */ \"findLastIndex\": () => (/* binding */ findLastIndex),\n/* harmony export */ \"focusNearestParent\": () => (/* binding */ focusNearestParent),\n/* harmony export */ \"getDateTime\": () => (/* binding */ getDateTime),\n/* harmony export */ \"getFontFamilyString\": () => (/* binding */ getFontFamilyString),\n/* harmony export */ \"getFontString\": () => (/* binding */ getFontString),\n/* harmony export */ \"getFrame\": () => (/* binding */ getFrame),\n/* harmony export */ \"getGlobalCSSVariable\": () => (/* binding */ getGlobalCSSVariable),\n/* harmony export */ \"getNearestScrollableContainer\": () => (/* binding */ getNearestScrollableContainer),\n/* harmony export */ \"getShortcutKey\": () => (/* binding */ getShortcutKey),\n/* harmony export */ \"getUpdatedTimestamp\": () => (/* binding */ getUpdatedTimestamp),\n/* harmony export */ \"getVersion\": () => (/* binding */ getVersion),\n/* harmony export */ \"isFullScreen\": () => (/* binding */ isFullScreen),\n/* harmony export */ \"isInputLike\": () => (/* binding */ isInputLike),\n/* harmony export */ \"isPrimitive\": () => (/* binding */ isPrimitive),\n/* harmony export */ \"isProdEnv\": () => (/* binding */ isProdEnv),\n/* harmony export */ \"isPromiseLike\": () => (/* binding */ isPromiseLike),\n/* harmony export */ \"isRTL\": () => (/* binding */ isRTL),\n/* harmony export */ \"isTestEnv\": () => (/* binding */ isTestEnv),\n/* harmony export */ \"isToolIcon\": () => (/* binding */ isToolIcon),\n/* harmony export */ \"isTransparent\": () => (/* binding */ isTransparent),\n/* harmony export */ \"isWritableElement\": () => (/* binding */ isWritableElement),\n/* harmony export */ \"muteFSAbortError\": () => (/* binding */ muteFSAbortError),\n/* harmony export */ \"nFormatter\": () => (/* binding */ nFormatter),\n/* harmony export */ \"preventUnload\": () => (/* binding */ preventUnload),\n/* harmony export */ \"queryFocusableElements\": () => (/* binding */ queryFocusableElements),\n/* harmony export */ \"removeSelection\": () => (/* binding */ removeSelection),\n/* harmony export */ \"resetCursor\": () => (/* binding */ resetCursor),\n/* harmony export */ \"resolvablePromise\": () => (/* binding */ resolvablePromise),\n/* harmony export */ \"sceneCoordsToViewportCoords\": () => (/* binding */ sceneCoordsToViewportCoords),\n/* harmony export */ \"selectNode\": () => (/* binding */ selectNode),\n/* harmony export */ \"setCursor\": () => (/* binding */ setCursor),\n/* harmony export */ \"setCursorForShape\": () => (/* binding */ setCursorForShape),\n/* harmony export */ \"setDateTimeForTests\": () => (/* binding */ setDateTimeForTests),\n/* harmony export */ \"setEraserCursor\": () => (/* binding */ setEraserCursor),\n/* harmony export */ \"supportsEmoji\": () => (/* binding */ supportsEmoji),\n/* harmony export */ \"throttleRAF\": () => (/* binding */ throttleRAF),\n/* harmony export */ \"tupleToCoors\": () => (/* binding */ tupleToCoors),\n/* harmony export */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\n/* harmony export */ \"updateObject\": () => (/* binding */ updateObject),\n/* harmony export */ \"viewportCoordsToSceneCoords\": () => (/* binding */ viewportCoordsToSceneCoords),\n/* harmony export */ \"withBatchedUpdates\": () => (/* binding */ withBatchedUpdates),\n/* harmony export */ \"withBatchedUpdatesThrottled\": () => (/* binding */ withBatchedUpdatesThrottled),\n/* harmony export */ \"wrapEvent\": () => (/* binding */ wrapEvent)\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 _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.ts\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keys */ \"../../keys.ts\");\n\r\n\r\n\r\n\r\n\r\nlet mockDateTime = null;\r\nconst setDateTimeForTests = (dateTime) => {\r\n mockDateTime = dateTime;\r\n};\r\nconst getDateTime = () => {\r\n if (mockDateTime) {\r\n return mockDateTime;\r\n }\r\n const date = new Date();\r\n const year = date.getFullYear();\r\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\r\n const day = `${date.getDate()}`.padStart(2, \"0\");\r\n const hr = `${date.getHours()}`.padStart(2, \"0\");\r\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\r\n return `${year}-${month}-${day}-${hr}${min}`;\r\n};\r\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\r\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\r\n target instanceof HTMLBRElement || // newline in wysiwyg\r\n target instanceof HTMLInputElement ||\r\n target instanceof HTMLTextAreaElement ||\r\n target instanceof HTMLSelectElement;\r\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\r\n target instanceof HTMLBRElement || // newline in wysiwyg\r\n target instanceof HTMLTextAreaElement ||\r\n (target instanceof HTMLInputElement &&\r\n (target.type === \"text\" || target.type === \"number\"));\r\nconst getFontFamilyString = ({ fontFamily, }) => {\r\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\r\n if (id === fontFamily) {\r\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\r\n }\r\n }\r\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\r\n};\r\n/** returns fontSize+fontFamily string for assignment to DOM elements */\r\nconst getFontString = ({ fontSize, fontFamily, }) => {\r\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\r\n};\r\nconst debounce = (fn, timeout) => {\r\n let handle = 0;\r\n let lastArgs = null;\r\n const ret = (...args) => {\r\n lastArgs = args;\r\n clearTimeout(handle);\r\n handle = window.setTimeout(() => {\r\n lastArgs = null;\r\n fn(...args);\r\n }, timeout);\r\n };\r\n ret.flush = () => {\r\n clearTimeout(handle);\r\n if (lastArgs) {\r\n const _lastArgs = lastArgs;\r\n lastArgs = null;\r\n fn(..._lastArgs);\r\n }\r\n };\r\n ret.cancel = () => {\r\n lastArgs = null;\r\n clearTimeout(handle);\r\n };\r\n return ret;\r\n};\r\n// throttle callback to execute once per animation frame\r\nconst throttleRAF = (fn, opts) => {\r\n let timerId = null;\r\n let lastArgs = null;\r\n let lastArgsTrailing = null;\r\n const scheduleFunc = (args) => {\r\n timerId = window.requestAnimationFrame(() => {\r\n timerId = null;\r\n fn(...args);\r\n lastArgs = null;\r\n if (lastArgsTrailing) {\r\n lastArgs = lastArgsTrailing;\r\n lastArgsTrailing = null;\r\n scheduleFunc(lastArgs);\r\n }\r\n });\r\n };\r\n const ret = (...args) => {\r\n if (false) {}\r\n lastArgs = args;\r\n if (timerId === null) {\r\n scheduleFunc(lastArgs);\r\n }\r\n else if (opts === null || opts === void 0 ? void 0 : opts.trailing) {\r\n lastArgsTrailing = args;\r\n }\r\n };\r\n ret.flush = () => {\r\n if (timerId !== null) {\r\n cancelAnimationFrame(timerId);\r\n timerId = null;\r\n }\r\n if (lastArgs) {\r\n fn(...(lastArgsTrailing || lastArgs));\r\n lastArgs = lastArgsTrailing = null;\r\n }\r\n };\r\n ret.cancel = () => {\r\n lastArgs = lastArgsTrailing = null;\r\n if (timerId !== null) {\r\n cancelAnimationFrame(timerId);\r\n timerId = null;\r\n }\r\n };\r\n return ret;\r\n};\r\n// https://github.com/lodash/lodash/blob/es/chunk.js\r\nconst chunk = (array, size) => {\r\n if (!array.length || size < 1) {\r\n return [];\r\n }\r\n let index = 0;\r\n let resIndex = 0;\r\n const result = Array(Math.ceil(array.length / size));\r\n while (index < array.length) {\r\n result[resIndex++] = array.slice(index, (index += size));\r\n }\r\n return result;\r\n};\r\nconst selectNode = (node) => {\r\n const selection = window.getSelection();\r\n if (selection) {\r\n const range = document.createRange();\r\n range.selectNodeContents(node);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n};\r\nconst removeSelection = () => {\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n }\r\n};\r\nconst distance = (x, y) => Math.abs(x - y);\r\nconst updateActiveTool = (appState, data) => {\r\n if (data.type === \"custom\") {\r\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\r\n }\r\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveToolBeforeEraser: data.lastActiveToolBeforeEraser === undefined\r\n ? appState.activeTool.lastActiveToolBeforeEraser\r\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\r\n};\r\nconst resetCursor = (canvas) => {\r\n if (canvas) {\r\n canvas.style.cursor = \"\";\r\n }\r\n};\r\nconst setCursor = (canvas, cursor) => {\r\n if (canvas) {\r\n canvas.style.cursor = cursor;\r\n }\r\n};\r\nlet eraserCanvasCache;\r\nlet previewDataURL;\r\nconst setEraserCursor = (canvas, theme) => {\r\n const cursorImageSizePx = 20;\r\n const drawCanvas = () => {\r\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\r\n eraserCanvasCache = document.createElement(\"canvas\");\r\n eraserCanvasCache.theme = theme;\r\n eraserCanvasCache.height = cursorImageSizePx;\r\n eraserCanvasCache.width = cursorImageSizePx;\r\n const context = eraserCanvasCache.getContext(\"2d\");\r\n context.lineWidth = 1;\r\n context.beginPath();\r\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\r\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n context.fill();\r\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\r\n context.stroke();\r\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\r\n };\r\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\r\n drawCanvas();\r\n }\r\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\r\n};\r\nconst setCursorForShape = (canvas, appState) => {\r\n if (!canvas) {\r\n return;\r\n }\r\n if (appState.activeTool.type === \"selection\") {\r\n resetCursor(canvas);\r\n }\r\n else if (appState.activeTool.type === \"eraser\") {\r\n setEraserCursor(canvas, appState.theme);\r\n // do nothing if image tool is selected which suggests there's\r\n // a image-preview set as the cursor\r\n // Ignore custom type as well and let host decide\r\n }\r\n else if (![\"image\", \"custom\"].includes(appState.activeTool.type)) {\r\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\r\n }\r\n};\r\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\r\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\r\nconst exitFullScreen = () => document.exitFullscreen();\r\nconst getShortcutKey = (shortcut) => {\r\n shortcut = shortcut\r\n .replace(/\\bAlt\\b/i, \"Alt\")\r\n .replace(/\\bShift\\b/i, \"Shift\")\r\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\")\r\n .replace(/\\bDel\\b/i, \"Delete\");\r\n if (_keys__WEBPACK_IMPORTED_MODULE_4__.isDarwin) {\r\n return shortcut\r\n .replace(/\\bCtrlOrCmd\\b/i, \"Cmd\")\r\n .replace(/\\bAlt\\b/i, \"Option\");\r\n }\r\n return shortcut.replace(/\\bCtrlOrCmd\\b/i, \"Ctrl\");\r\n};\r\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\r\n const invScale = 1 / zoom.value;\r\n const x = (clientX - offsetLeft) * invScale - scrollX;\r\n const y = (clientY - offsetTop) * invScale - scrollY;\r\n return { x, y };\r\n};\r\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\r\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\r\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\r\n return { x, y };\r\n};\r\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\r\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\r\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\r\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\r\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\r\n/**\r\n * Checks whether first directional character is RTL. Meaning whether it starts\r\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\r\n * RTL.\r\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\r\n */\r\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\r\nconst tupleToCoors = (xyTuple) => {\r\n const [x, y] = xyTuple;\r\n return { x, y };\r\n};\r\n/** use as a rejectionHandler to mute filesystem Abort errors */\r\nconst muteFSAbortError = (error) => {\r\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\r\n console.warn(error);\r\n return;\r\n }\r\n throw error;\r\n};\r\nconst findIndex = (array, cb, fromIndex = 0) => {\r\n if (fromIndex < 0) {\r\n fromIndex = array.length + fromIndex;\r\n }\r\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\r\n let index = fromIndex - 1;\r\n while (++index < array.length) {\r\n if (cb(array[index], index, array)) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n};\r\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\r\n if (fromIndex < 0) {\r\n fromIndex = array.length + fromIndex;\r\n }\r\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\r\n let index = fromIndex + 1;\r\n while (--index > -1) {\r\n if (cb(array[index], index, array)) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n};\r\nconst isTransparent = (color) => {\r\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\r\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\r\n return (isRGBTransparent ||\r\n isRRGGBBTransparent ||\r\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\r\n};\r\nconst resolvablePromise = () => {\r\n let resolve;\r\n let reject;\r\n const promise = new Promise((_resolve, _reject) => {\r\n resolve = _resolve;\r\n reject = _reject;\r\n });\r\n promise.resolve = resolve;\r\n promise.reject = reject;\r\n return promise;\r\n};\r\n/**\r\n * @param func handler taking at most single parameter (event).\r\n */\r\nconst withBatchedUpdates = (func) => ((event) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\r\n});\r\n/**\r\n * barches React state updates and throttles the calls to a single call per\r\n * animation frame\r\n */\r\nconst withBatchedUpdatesThrottled = (func) => {\r\n // @ts-ignore\r\n return throttleRAF(((event) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\r\n }));\r\n};\r\n//https://stackoverflow.com/a/9462382/8418\r\nconst nFormatter = (num, digits) => {\r\n const si = [\r\n { value: 1, symbol: \"b\" },\r\n { value: 1e3, symbol: \"k\" },\r\n { value: 1e6, symbol: \"M\" },\r\n { value: 1e9, symbol: \"G\" },\r\n ];\r\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\r\n let index;\r\n for (index = si.length - 1; index > 0; index--) {\r\n if (num >= si[index].value) {\r\n break;\r\n }\r\n }\r\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\r\n};\r\nconst getVersion = () => {\r\n var _a;\r\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\r\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\r\n};\r\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\r\nconst supportsEmoji = () => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) {\r\n return false;\r\n }\r\n const offset = 12;\r\n ctx.fillStyle = \"#f00\";\r\n ctx.textBaseline = \"top\";\r\n ctx.font = \"32px Arial\";\r\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\r\n // Luckily 😀 isn't supported.\r\n ctx.fillText(\"😀\", 0, 0);\r\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\r\n};\r\nconst getNearestScrollableContainer = (element) => {\r\n let parent = element.parentElement;\r\n while (parent) {\r\n if (parent === document.body) {\r\n return document;\r\n }\r\n const { overflowY } = window.getComputedStyle(parent);\r\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\r\n if (hasScrollableContent &&\r\n (overflowY === \"auto\" ||\r\n overflowY === \"scroll\" ||\r\n overflowY === \"overlay\")) {\r\n return parent;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n return document;\r\n};\r\nconst focusNearestParent = (element) => {\r\n let parent = element.parentElement;\r\n while (parent) {\r\n if (parent.tabIndex > -1) {\r\n parent.focus();\r\n return;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n};\r\nconst preventUnload = (event) => {\r\n event.preventDefault();\r\n // NOTE: modern browsers no longer allow showing a custom message here\r\n event.returnValue = \"\";\r\n};\r\nconst bytesToHexString = (bytes) => {\r\n return Array.from(bytes)\r\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\r\n .join(\"\");\r\n};\r\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\r\n/**\r\n * Transforms array of objects containing `id` attribute,\r\n * or array of ids (strings), into a Map, keyd by `id`.\r\n */\r\nconst arrayToMap = (items) => {\r\n return items.reduce((acc, element) => {\r\n acc.set(typeof element === \"string\" ? element : element.id, element);\r\n return acc;\r\n }, new Map());\r\n};\r\nconst isTestEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.77-debug2\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\r\nconst isProdEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.77-debug2\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\r\nconst wrapEvent = (name, nativeEvent) => {\r\n return new CustomEvent(name, {\r\n detail: {\r\n nativeEvent,\r\n },\r\n cancelable: true,\r\n });\r\n};\r\nconst updateObject = (obj, updates) => {\r\n let didChange = false;\r\n for (const key in updates) {\r\n const value = updates[key];\r\n if (typeof value !== \"undefined\") {\r\n if (obj[key] === value &&\r\n // if object, always update because its attrs could have changed\r\n (typeof value !== \"object\" || value === null)) {\r\n continue;\r\n }\r\n didChange = true;\r\n }\r\n }\r\n if (!didChange) {\r\n return obj;\r\n }\r\n return Object.assign(Object.assign({}, obj), updates);\r\n};\r\nconst isPrimitive = (val) => {\r\n const type = typeof val;\r\n return val == null || (type !== \"object\" && type !== \"function\");\r\n};\r\nconst getFrame = () => {\r\n try {\r\n return window.self === window.top ? \"top\" : \"iframe\";\r\n }\r\n catch (error) {\r\n return \"iframe\";\r\n }\r\n};\r\nconst isPromiseLike = (value) => {\r\n return (!!value &&\r\n typeof value === \"object\" &&\r\n \"then\" in value &&\r\n \"catch\" in value &&\r\n \"finally\" in value);\r\n};\r\nconst queryFocusableElements = (container) => {\r\n const focusableElements = container === null || container === void 0 ? void 0 : container.querySelectorAll(\"button, a, input, select, textarea, div[tabindex], label[tabindex]\");\r\n return focusableElements\r\n ? Array.from(focusableElements).filter((element) => element.tabIndex > -1 && !element.disabled)\r\n : [];\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0FBRUssTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO0lBQzNCLElBQUk7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDdEQ7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyxDQUFDO0FBRUssTUFBTSxhQUFhLEdBQUcsQ0FDM0IsS0FBVSxFQUNzQyxFQUFFO0lBQ2xELE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSztRQUNQLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFPLElBQUksS0FBSztRQUNoQixTQUFTLElBQUksS0FBSyxDQUNuQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUssTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFNBQTZCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxnQkFBZ0IsQ0FDbkQsb0VBQW9FLENBQ3JFLENBQUM7SUFFRixPQUFPLGlCQUFpQjtRQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBRSxPQUE0QixDQUFDLFFBQVEsQ0FDbkU7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ1QsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzPzc2M2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9jIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5cbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQge1xuICBDVVJTT1JfVFlQRSxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBFVkVOVCxcbiAgRk9OVF9GQU1JTFksXG4gIE1JTUVfVFlQRVMsXG4gIFRIRU1FLFxuICBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRm9udEZhbWlseVZhbHVlcywgRm9udFN0cmluZyB9IGZyb20gXCIuL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBEYXRhVVJMLCBMYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlciwgWm9vbSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IGlzRGFyd2luIH0gZnJvbSBcIi4va2V5c1wiO1xuaW1wb3J0IHsgU0hBUEVTIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbmxldCBtb2NrRGF0ZVRpbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgY29uc3Qgc2V0RGF0ZVRpbWVGb3JUZXN0cyA9IChkYXRlVGltZTogc3RyaW5nKSA9PiB7XG4gIG1vY2tEYXRlVGltZSA9IGRhdGVUaW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGVUaW1lID0gKCkgPT4ge1xuICBpZiAobW9ja0RhdGVUaW1lKSB7XG4gICAgcmV0dXJuIG1vY2tEYXRlVGltZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IGAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGRheSA9IGAke2RhdGUuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBociA9IGAke2RhdGUuZ2V0SG91cnMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgbWluID0gYCR7ZGF0ZS5nZXRNaW51dGVzKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG5cbiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fS0ke2hyfSR7bWlufWA7XG59O1xuXG5leHBvcnQgY29uc3QgY2FwaXRhbGl6ZVN0cmluZyA9IChzdHI6IHN0cmluZykgPT5cbiAgc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuXG5leHBvcnQgY29uc3QgaXNUb29sSWNvbiA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzIEhUTUxFbGVtZW50ID0+XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoXCJUb29sSWNvblwiKTtcblxuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXNcbiAgfCBIVE1MSW5wdXRFbGVtZW50XG4gIHwgSFRNTFRleHRBcmVhRWxlbWVudFxuICB8IEhUTUxTZWxlY3RFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50O1xuXG5leHBvcnQgY29uc3QgaXNXcml0YWJsZUVsZW1lbnQgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fFxuICAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICh0YXJnZXQudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgdGFyZ2V0LnR5cGUgPT09IFwibnVtYmVyXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldEZvbnRGYW1pbHlTdHJpbmcgPSAoe1xuICBmb250RmFtaWx5LFxufToge1xuICBmb250RmFtaWx5OiBGb250RmFtaWx5VmFsdWVzO1xufSkgPT4ge1xuICBmb3IgKGNvbnN0IFtmb250RmFtaWx5U3RyaW5nLCBpZF0gb2YgT2JqZWN0LmVudHJpZXMoRk9OVF9GQU1JTFkpKSB7XG4gICAgaWYgKGlkID09PSBmb250RmFtaWx5KSB7XG4gICAgICByZXR1cm4gYCR7Zm9udEZhbWlseVN0cmluZ30sICR7V0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05UfWA7XG4gICAgfVxuICB9XG4gIHJldHVybiBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQ7XG59O1xuXG4vKiogcmV0dXJucyBmb250U2l6ZStmb250RmFtaWx5IHN0cmluZyBmb3IgYXNzaWdubWVudCB0byBET00gZWxlbWVudHMgKi9cbmV4cG9ydCBjb25zdCBnZXRGb250U3RyaW5nID0gKHtcbiAgZm9udFNpemUsXG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRTaXplOiBudW1iZXI7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIHJldHVybiBgJHtmb250U2l6ZX1weCAke2dldEZvbnRGYW1pbHlTdHJpbmcoeyBmb250RmFtaWx5IH0pfWAgYXMgRm9udFN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBkZWJvdW5jZSA9IDxUIGV4dGVuZHMgYW55W10+KFxuICBmbjogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG4gIHRpbWVvdXQ6IG51bWJlcixcbikgPT4ge1xuICBsZXQgaGFuZGxlID0gMDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHJldCA9ICguLi5hcmdzOiBUKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICAgIGhhbmRsZSA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLl9sYXN0QXJncyk7XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIHRocm90dGxlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lXG5leHBvcnQgY29uc3QgdGhyb3R0bGVSQUYgPSA8VCBleHRlbmRzIGFueVtdPihcbiAgZm46ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuICBvcHRzPzogeyB0cmFpbGluZz86IGJvb2xlYW4gfSxcbikgPT4ge1xuICBsZXQgdGltZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGxldCBsYXN0QXJnczogVCB8IG51bGwgPSBudWxsO1xuICBsZXQgbGFzdEFyZ3NUcmFpbGluZzogVCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVkdWxlRnVuYyA9IChhcmdzOiBUKSA9PiB7XG4gICAgdGltZXJJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGlmIChsYXN0QXJnc1RyYWlsaW5nKSB7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZztcbiAgICAgICAgbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgICAgIHNjaGVkdWxlRnVuYyhsYXN0QXJncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGlmICh0aW1lcklkID09PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZ1bmMobGFzdEFyZ3MpO1xuICAgIH0gZWxzZSBpZiAob3B0cz8udHJhaWxpbmcpIHtcbiAgICAgIGxhc3RBcmdzVHJhaWxpbmcgPSBhcmdzO1xuICAgIH1cbiAgfTtcbiAgcmV0LmZsdXNoID0gKCkgPT4ge1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGZuKC4uLihsYXN0QXJnc1RyYWlsaW5nIHx8IGxhc3RBcmdzKSk7XG4gICAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0LmNhbmNlbCA9ICgpID0+IHtcbiAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvY2h1bmsuanNcbmV4cG9ydCBjb25zdCBjaHVuayA9IDxUIGV4dGVuZHMgYW55PihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgc2l6ZTogbnVtYmVyLFxuKTogVFtdW10gPT4ge1xuICBpZiAoIWFycmF5Lmxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgcmVzSW5kZXggPSAwO1xuICBjb25zdCByZXN1bHQgPSBBcnJheShNYXRoLmNlaWwoYXJyYXkubGVuZ3RoIC8gc2l6ZSkpO1xuICB3aGlsZSAoaW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBhcnJheS5zbGljZShpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdE5vZGUgPSAobm9kZTogRWxlbWVudCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0aW9uID0gKCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkaXN0YW5jZSA9ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gTWF0aC5hYnMoeCAtIHkpO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQWN0aXZlVG9vbCA9IChcbiAgYXBwU3RhdGU6IFBpY2s8QXBwU3RhdGUsIFwiYWN0aXZlVG9vbFwiPixcbiAgZGF0YTogKFxuICAgIHwgeyB0eXBlOiB0eXBlb2YgU0hBUEVTW251bWJlcl1bXCJ2YWx1ZVwiXSB8IFwiZXJhc2VyXCIgfVxuICAgIHwgeyB0eXBlOiBcImN1c3RvbVwiOyBjdXN0b21UeXBlOiBzdHJpbmcgfVxuICApICYgeyBsYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcj86IExhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyIH0sXG4pOiBBcHBTdGF0ZVtcImFjdGl2ZVRvb2xcIl0gPT4ge1xuICBpZiAoZGF0YS50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgY3VzdG9tVHlwZTogZGF0YS5jdXN0b21UeXBlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI6XG4gICAgICBkYXRhLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBTdGF0ZS5hY3RpdmVUb29sLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyXG4gICAgICAgIDogZGF0YS5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcixcbiAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgY3VzdG9tVHlwZTogbnVsbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldEN1cnNvciA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJzb3IgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsIGN1cnNvcjogc3RyaW5nKSA9PiB7XG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xuICB9XG59O1xuXG5sZXQgZXJhc2VyQ2FudmFzQ2FjaGU6IGFueTtcbmxldCBwcmV2aWV3RGF0YVVSTDogc3RyaW5nO1xuZXhwb3J0IGNvbnN0IHNldEVyYXNlckN1cnNvciA9IChcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsXG4gIHRoZW1lOiBBcHBTdGF0ZVtcInRoZW1lXCJdLFxuKSA9PiB7XG4gIGNvbnN0IGN1cnNvckltYWdlU2l6ZVB4ID0gMjA7XG5cbiAgY29uc3QgZHJhd0NhbnZhcyA9ICgpID0+IHtcbiAgICBjb25zdCBpc0RhcmtUaGVtZSA9IHRoZW1lID09PSBUSEVNRS5EQVJLO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSA9IHRoZW1lO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLmhlaWdodCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLndpZHRoID0gY3Vyc29ySW1hZ2VTaXplUHg7XG4gICAgY29uc3QgY29udGV4dCA9IGVyYXNlckNhbnZhc0NhY2hlLmdldENvbnRleHQoXCIyZFwiKSE7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5hcmMoXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCAvIDIsXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgLyAyLFxuICAgICAgNSxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSSxcbiAgICApO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gaXNEYXJrVGhlbWUgPyBvYy5ibGFjayA6IG9jLndoaXRlO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLndoaXRlIDogb2MuYmxhY2s7XG4gICAgY29udGV4dC5zdHJva2UoKTtcbiAgICBwcmV2aWV3RGF0YVVSTCA9IGVyYXNlckNhbnZhc0NhY2hlLnRvRGF0YVVSTChNSU1FX1RZUEVTLnN2ZykgYXMgRGF0YVVSTDtcbiAgfTtcbiAgaWYgKCFlcmFzZXJDYW52YXNDYWNoZSB8fCBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICBkcmF3Q2FudmFzKCk7XG4gIH1cblxuICBzZXRDdXJzb3IoXG4gICAgY2FudmFzLFxuICAgIGB1cmwoJHtwcmV2aWV3RGF0YVVSTH0pICR7Y3Vyc29ySW1hZ2VTaXplUHggLyAyfSAke1xuICAgICAgY3Vyc29ySW1hZ2VTaXplUHggLyAyXG4gICAgfSwgYXV0b2AsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yRm9yU2hhcGUgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pID0+IHtcbiAgaWYgKCFjYW52YXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJzZWxlY3Rpb25cIikge1xuICAgIHJlc2V0Q3Vyc29yKGNhbnZhcyk7XG4gIH0gZWxzZSBpZiAoYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcImVyYXNlclwiKSB7XG4gICAgc2V0RXJhc2VyQ3Vyc29yKGNhbnZhcywgYXBwU3RhdGUudGhlbWUpO1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgaW1hZ2UgdG9vbCBpcyBzZWxlY3RlZCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzXG4gICAgLy8gYSBpbWFnZS1wcmV2aWV3IHNldCBhcyB0aGUgY3Vyc29yXG4gICAgLy8gSWdub3JlIGN1c3RvbSB0eXBlIGFzIHdlbGwgYW5kIGxldCBob3N0IGRlY2lkZVxuICB9IGVsc2UgaWYgKCFbXCJpbWFnZVwiLCBcImN1c3RvbVwiXS5pbmNsdWRlcyhhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkNST1NTSEFJUjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVsbFNjcmVlbiA9ICgpID0+XG4gIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50Py5ub2RlTmFtZSA9PT0gXCJIVE1MXCI7XG5cbmV4cG9ydCBjb25zdCBhbGxvd0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gKCkgPT4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNob3J0Y3V0S2V5ID0gKHNob3J0Y3V0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBzaG9ydGN1dCA9IHNob3J0Y3V0XG4gICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIkFsdFwiKVxuICAgIC5yZXBsYWNlKC9cXGJTaGlmdFxcYi9pLCBcIlNoaWZ0XCIpXG4gICAgLnJlcGxhY2UoL1xcYihFbnRlcnxSZXR1cm4pXFxiL2ksIFwiRW50ZXJcIilcbiAgICAucmVwbGFjZSgvXFxiRGVsXFxiL2ksIFwiRGVsZXRlXCIpO1xuXG4gIGlmIChpc0Rhcndpbikge1xuICAgIHJldHVybiBzaG9ydGN1dFxuICAgICAgLnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9pLCBcIkNtZFwiKVxuICAgICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIk9wdGlvblwiKTtcbiAgfVxuICByZXR1cm4gc2hvcnRjdXQucmVwbGFjZSgvXFxiQ3RybE9yQ21kXFxiL2ksIFwiQ3RybFwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMgPSAoXG4gIHsgY2xpZW50WCwgY2xpZW50WSB9OiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0sXG4gIHtcbiAgICB6b29tLFxuICAgIG9mZnNldExlZnQsXG4gICAgb2Zmc2V0VG9wLFxuICAgIHNjcm9sbFgsXG4gICAgc2Nyb2xsWSxcbiAgfToge1xuICAgIHpvb206IFpvb207XG4gICAgb2Zmc2V0TGVmdDogbnVtYmVyO1xuICAgIG9mZnNldFRvcDogbnVtYmVyO1xuICAgIHNjcm9sbFg6IG51bWJlcjtcbiAgICBzY3JvbGxZOiBudW1iZXI7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgaW52U2NhbGUgPSAxIC8gem9vbS52YWx1ZTtcbiAgY29uc3QgeCA9IChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgKiBpbnZTY2FsZSAtIHNjcm9sbFg7XG4gIGNvbnN0IHkgPSAoY2xpZW50WSAtIG9mZnNldFRvcCkgKiBpbnZTY2FsZSAtIHNjcm9sbFk7XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyA9IChcbiAgeyBzY2VuZVgsIHNjZW5lWSB9OiB7IHNjZW5lWDogbnVtYmVyOyBzY2VuZVk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHggPSAoc2NlbmVYICsgc2Nyb2xsWCkgKiB6b29tLnZhbHVlICsgb2Zmc2V0TGVmdDtcbiAgY29uc3QgeSA9IChzY2VuZVkgKyBzY3JvbGxZKSAqIHpvb20udmFsdWUgKyBvZmZzZXRUb3A7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IChuYW1lOiBzdHJpbmcpID0+XG4gIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7bmFtZX1gKTtcblxuY29uc3QgUlNfTFRSX0NIQVJTID1cbiAgXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArXG4gIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5leHBvcnQgY29uc3QgaXNSVEwgPSAodGV4dDogc3RyaW5nKSA9PiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcblxuZXhwb3J0IGNvbnN0IHR1cGxlVG9Db29ycyA9IChcbiAgeHlUdXBsZTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IFt4LCB5XSA9IHh5VHVwbGU7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbi8qKiB1c2UgYXMgYSByZWplY3Rpb25IYW5kbGVyIHRvIG11dGUgZmlsZXN5c3RlbSBBYm9ydCBlcnJvcnMgKi9cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gKGVycm9yPzogRXJyb3IpID0+IHtcbiAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IDAsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdEluZGV4ID0gPFQ+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBjYjogKGVsZW1lbnQ6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiByZWFkb25seSBUW10pID0+IGJvb2xlYW4sXG4gIGZyb21JbmRleDogbnVtYmVyID0gYXJyYXkubGVuZ3RoIC0gMSxcbikgPT4ge1xuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKC0taW5kZXggPiAtMSkge1xuICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVHJhbnNwYXJlbnQgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc1JHQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA1ICYmIGNvbG9yLnN1YnN0cig0LCAxKSA9PT0gXCIwXCI7XG4gIGNvbnN0IGlzUlJHR0JCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDkgJiYgY29sb3Iuc3Vic3RyKDcsIDIpID09PSBcIjAwXCI7XG4gIHJldHVybiAoXG4gICAgaXNSR0JUcmFuc3BhcmVudCB8fFxuICAgIGlzUlJHR0JCVHJhbnNwYXJlbnQgfHxcbiAgICBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZhYmxlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gJiB7XG4gIHJlc29sdmU6IFtUXSBleHRlbmRzIFt1bmRlZmluZWRdID8gKHZhbHVlPzogVCkgPT4gdm9pZCA6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IDxUPigpID0+IHtcbiAgbGV0IHJlc29sdmUhOiBhbnk7XG4gIGxldCByZWplY3QhOiBhbnk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIChwcm9taXNlIGFzIGFueSkucmVzb2x2ZSA9IHJlc29sdmU7XG4gIChwcm9taXNlIGFzIGFueSkucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZSBhcyBSZXNvbHZhYmxlUHJvbWlzZTxUPjtcbn07XG5cbi8qKlxuICogQHBhcmFtIGZ1bmMgaGFuZGxlciB0YWtpbmcgYXQgbW9zdCBzaW5nbGUgcGFyYW1ldGVyIChldmVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PlxuICAoKGV2ZW50KSA9PiB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYyBhcyBURnVuY3Rpb24sIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uO1xuXG4vKipcbiAqIGJhcmNoZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBhbmQgdGhyb3R0bGVzIHRoZSBjYWxscyB0byBhIHNpbmdsZSBjYWxsIHBlclxuICogYW5pbWF0aW9uIGZyYW1lXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXNUaHJvdHRsZWQgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PiB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHRocm90dGxlUkFGPFBhcmFtZXRlcnM8VEZ1bmN0aW9uPj4oKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMsIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uKTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuZXhwb3J0IGNvbnN0IG5Gb3JtYXR0ZXIgPSAobnVtOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2kgPSBbXG4gICAgeyB2YWx1ZTogMSwgc3ltYm9sOiBcImJcIiB9LFxuICAgIHsgdmFsdWU6IDFlMywgc3ltYm9sOiBcImtcIiB9LFxuICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIk1cIiB9LFxuICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIkdcIiB9LFxuICBdO1xuICBjb25zdCByeCA9IC9cXC4wKyR8KFxcLlswLTldKlsxLTldKTArJC87XG4gIGxldCBpbmRleDtcbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICAobnVtIC8gc2lbaW5kZXhdLnZhbHVlKS50b0ZpeGVkKGRpZ2l0cykucmVwbGFjZShyeCwgXCIkMVwiKSArIHNpW2luZGV4XS5zeW1ib2xcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTE1ldGFFbGVtZW50PignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8XG4gICAgREVGQVVMVF9WRVJTSU9OXG4gICk7XG59O1xuXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2Vtb2ppLmpzXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNFbW9qaSA9ICgpID0+IHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gIGN0eC5maWxsU3R5bGUgPSBcIiNmMDBcIjtcbiAgY3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG4gIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gIC8vIE1vZGVybml6ciB1c2VkIPCfkKgsIGJ1dCBpdCBpcyBzb3J0IG9mIHN1cHBvcnRlZCBvbiBXaW5kb3dzIDcuXG4gIC8vIEx1Y2tpbHkg8J+YgCBpc24ndCBzdXBwb3J0ZWQuXG4gIGN0eC5maWxsVGV4dChcIvCfmIBcIiwgMCwgMCk7XG4gIHJldHVybiBjdHguZ2V0SW1hZ2VEYXRhKG9mZnNldCwgb2Zmc2V0LCAxLCAxKS5kYXRhWzBdICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RTY3JvbGxhYmxlQ29udGFpbmVyID0gKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbik6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIH1cbiAgICBjb25zdCB7IG92ZXJmbG93WSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBjb25zdCBoYXNTY3JvbGxhYmxlQ29udGVudCA9IHBhcmVudC5zY3JvbGxIZWlnaHQgPiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChcbiAgICAgIGhhc1Njcm9sbGFibGVDb250ZW50ICYmXG4gICAgICAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fFxuICAgICAgICBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb2N1c05lYXJlc3RQYXJlbnQgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC50YWJJbmRleCA+IC0xKSB7XG4gICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2ZW50VW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG4gIGV2ZW50LnJldHVyblZhbHVlID0gXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gKGJ5dGVzOiBVaW50OEFycmF5KSA9PiB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKVxuICAgIC5tYXAoKGJ5dGUpID0+IGAwJHtieXRlLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSlcbiAgICAuam9pbihcIlwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gKCkgPT4gKGlzVGVzdEVudigpID8gMSA6IERhdGUubm93KCkpO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5leHBvcnQgY29uc3QgYXJyYXlUb01hcCA9IDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmc+KFxuICBpdGVtczogcmVhZG9ubHkgVFtdLFxuKSA9PiB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYzogTWFwPHN0cmluZywgVD4sIGVsZW1lbnQpID0+IHtcbiAgICBhY2Muc2V0KHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiID8gZWxlbWVudCA6IGVsZW1lbnQuaWQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIG5ldyBNYXAoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gKCkgPT5cbiAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcblxuZXhwb3J0IGNvbnN0IGlzUHJvZEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCB3cmFwRXZlbnQgPSA8VCBleHRlbmRzIEV2ZW50PihuYW1lOiBFVkVOVCwgbmF0aXZlRXZlbnQ6IFQpID0+IHtcbiAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICBuYXRpdmVFdmVudCxcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9iajogVCxcbiAgdXBkYXRlczogUGFydGlhbDxUPixcbik6IFQgPT4ge1xuICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh1cGRhdGVzIGFzIGFueSlba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChvYmogYXMgYW55KVtrZXldID09PSB2YWx1ZSAmJlxuICAgICAgICAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIC4uLnVwZGF0ZXMsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsOiBhbnkpID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyYW1lID0gKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCA/IFwidG9wXCIgOiBcImlmcmFtZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcImlmcmFtZVwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IChcbiAgdmFsdWU6IGFueSxcbik6IHZhbHVlIGlzIFByb21pc2U8UmVzb2x1dGlvblR5cGU8dHlwZW9mIHZhbHVlPj4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInRoZW5cIiBpbiB2YWx1ZSAmJlxuICAgIFwiY2F0Y2hcIiBpbiB2YWx1ZSAmJlxuICAgIFwiZmluYWxseVwiIGluIHZhbHVlXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlGb2N1c2FibGVFbGVtZW50cyA9IChjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgXCJidXR0b24sIGEsIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBkaXZbdGFiaW5kZXhdLCBsYWJlbFt0YWJpbmRleF1cIixcbiAgKTtcblxuICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudHNcbiAgICA/IEFycmF5LmZyb20oZm9jdXNhYmxlRWxlbWVudHMpLmZpbHRlcihcbiAgICAgICAgKGVsZW1lbnQpID0+XG4gICAgICAgICAgZWxlbWVudC50YWJJbmRleCA+IC0xICYmICEoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZCxcbiAgICAgIClcbiAgICA6IFtdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../utils.ts\n");
3127
3138
 
3128
3139
  /***/ }),
3129
3140