@dwelle/excalidraw 0.4.0-2a0e59a → 0.4.0-2e0b920
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.
|
@@ -2151,7 +2151,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2151
2151
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2152
2152
|
|
|
2153
2153
|
"use strict";
|
|
2154
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nconst trackEvent = (category, action, label, value) => {\n try {\n // place here categories that you want to track as events\n // KEEP IN MIND THE PRICING\n const ALLOWED_CATEGORIES_TO_TRACK = []; // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n\n if (typeof window === \"undefined\" || ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_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\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@dwelle/excalidraw\",\"VITE_PKG_VERSION\":\"0.4.0-
|
|
2154
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nconst trackEvent = (category, action, label, value) => {\n try {\n // place here categories that you want to track as events\n // KEEP IN MIND THE PRICING\n const ALLOWED_CATEGORIES_TO_TRACK = []; // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n\n if (typeof window === \"undefined\" || ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_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\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@dwelle/excalidraw\",\"VITE_PKG_VERSION\":\"0.4.0-2e0b920\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).VITE_WORKER_ID) {\n return;\n }\n\n if (!ALLOWED_CATEGORIES_TO_TRACK.includes(category)) {\n return;\n }\n\n if (window.sa_event) {\n window.sa_event(action, {\n category,\n label,\n value\n });\n }\n } catch (error) {\n console.error(\"error during analytics\", error);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QyxvQ0FBb0MsZ0NBQWdDOztBQUVwRSx5Q0FBeUMseXFDQUFXO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2FuYWx5dGljcy50cz81NjYxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB0cmFja0V2ZW50ID0gKGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSkgPT4ge1xuICB0cnkge1xuICAgIC8vIHBsYWNlIGhlcmUgY2F0ZWdvcmllcyB0aGF0IHlvdSB3YW50IHRvIHRyYWNrIGFzIGV2ZW50c1xuICAgIC8vIEtFRVAgSU4gTUlORCBUSEUgUFJJQ0lOR1xuICAgIGNvbnN0IEFMTE9XRURfQ0FURUdPUklFU19UT19UUkFDSyA9IFtdOyAvLyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byB0cmFjayBsb2NhbGx5XG4gICAgLy8gY29uc29sZS5sb2coXCJUcmFjayBFdmVudFwiLCB7IGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSB9KTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8IHByb2Nlc3MuZW52LlZJVEVfV09SS0VSX0lEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFBTExPV0VEX0NBVEVHT1JJRVNfVE9fVFJBQ0suaW5jbHVkZXMoY2F0ZWdvcnkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5zYV9ldmVudCkge1xuICAgICAgd2luZG93LnNhX2V2ZW50KGFjdGlvbiwge1xuICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcImVycm9yIGR1cmluZyBhbmFseXRpY3NcIiwgZXJyb3IpO1xuICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
|
|
2155
2155
|
|
|
2156
2156
|
/***/ }),
|
|
2157
2157
|
|
|
@@ -4021,7 +4021,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
4021
4021
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
4022
4022
|
|
|
4023
4023
|
"use strict";
|
|
4024
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n\n /* global __webpack_public_path__:writable */\n __webpack_require__.p = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.4.0-
|
|
4024
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n\n /* global __webpack_public_path__:writable */\n __webpack_require__.p = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.4.0-2e0b920\"}/dist/`;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDOztBQUV0QyxJQUFJLGFBQW9CLEtBQUssZ0RBQVE7QUFDckM7O0FBRUE7QUFDQSxFQUFFLHFCQUF1Qix3REFBd0Qsb0JBQXlCLENBQUMsR0FBRyxlQUE0QixDQUFDO0FBQzNJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcHVibGljUGF0aC5qcz8wZTMxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOViB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4gIC8qIGdsb2JhbCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzp3cml0YWJsZSAqL1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHwgYGh0dHBzOi8vdW5wa2cuY29tLyR7cHJvY2Vzcy5lbnYuVklURV9QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5WSVRFX1BLR19WRVJTSU9OfS9kaXN0L2A7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./publicPath.js\n");
|
|
4025
4025
|
|
|
4026
4026
|
/***/ }),
|
|
4027
4027
|
|
|
@@ -4186,7 +4186,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
4186
4186
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
4187
4187
|
|
|
4188
4188
|
"use strict";
|
|
4189
|
-
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 */ \"getCanvasSize\": () => (/* binding */ getCanvasSize)\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 _data_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../element/image */ \"../../element/image.ts\");\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/restore */ \"../../data/restore.ts\");\n/* harmony import */ var _Scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Scene */ \"../../scene/Scene.ts\");\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\n/**\n * This API is usually used as a precursor to searializing to Blob or PNG,\n * but can also be used to create a canvas for other purposes.\n */\n\nconst exportToCanvas = ({\n data,\n config\n}) => __awaiter(void 0, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h; // initialize defaults\n // ---------------------------------------------------------------------------\n\n\n const {\n elements,\n files\n } = data;\n const appState = (0,_data_restore__WEBPACK_IMPORTED_MODULE_7__.restoreAppState)(data.appState, null); // clone\n\n const cfg = Object.assign({}, config);\n cfg.fit = (_a = cfg.fit) !== null && _a !== void 0 ? _a : cfg.width != null || cfg.height != null || cfg.maxWidthOrHeight != null || cfg.widthOrHeight != null ? \"contain\" : \"none\";\n const containPadding = cfg.fit === \"contain\";\n\n if (cfg.x != null || cfg.x != null) {\n cfg.fit = \"none\";\n }\n\n if (cfg.fit === \"cover\") {\n if (cfg.padding && \"development\" !== _constants__WEBPACK_IMPORTED_MODULE_4__.ENV.PRODUCTION) {\n console.warn(\"`padding` is ignored when `fit` is set to `cover`\");\n }\n\n cfg.padding = 0;\n }\n\n cfg.padding = (_b = cfg.padding) !== null && _b !== void 0 ? _b : 0;\n cfg.scale = (_c = cfg.scale) !== null && _c !== void 0 ? _c : 1;\n cfg.origin = (_d = cfg.origin) !== null && _d !== void 0 ? _d : \"canvas\";\n cfg.position = (_e = cfg.position) !== null && _e !== void 0 ? _e : \"center\";\n\n if (cfg.maxWidthOrHeight != null && cfg.widthOrHeight != null) {\n if (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_4__.ENV.PRODUCTION) {\n console.warn(\"`maxWidthOrHeight` is ignored when `widthOrHeight` is set\");\n }\n\n cfg.maxWidthOrHeight = undefined;\n }\n\n if ((cfg.maxWidthOrHeight != null || cfg.width != null || cfg.height != null) && cfg.getDimensions) {\n if (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_4__.ENV.PRODUCTION) {\n console.warn(\"`getDimensions` is ignored when `width`, `height`, or `maxWidthOrHeight` is set\");\n }\n\n cfg.getDimensions = undefined;\n } // ---------------------------------------------------------------------------\n // value used to scale the canvas context. By default, we use this to\n // make the canvas fit into the frame (e.g. for `cfg.fit` set to `contain`).\n // If `cfg.scale` is set, we multiply the resulting canvasScale by it to\n // scale the output further.\n\n\n let canvasScale = 1;\n const origCanvasSize = getCanvasSize(elements); // cfg.x = undefined;\n // cfg.y = undefined;\n // variables for original content bounding box\n\n const [origX, origY, origWidth, origHeight] = origCanvasSize; // variables for target bounding box\n\n let [x, y, width, height] = origCanvasSize;\n\n if (cfg.width != null) {\n width = cfg.width;\n\n if (cfg.padding && containPadding) {\n width -= cfg.padding * 2;\n }\n\n if (cfg.height) {\n height = cfg.height;\n\n if (cfg.padding && containPadding) {\n height -= cfg.padding * 2;\n }\n } else {\n // if height not specified, scale the original height to match the new\n // width while maintaining aspect ratio\n height *= width / origWidth;\n }\n } else if (cfg.height != null) {\n height = cfg.height;\n\n if (cfg.padding && containPadding) {\n height -= cfg.padding * 2;\n } // width not specified, so scale the original width to match the new\n // height while maintaining aspect ratio\n\n\n width *= height / origHeight;\n }\n\n if (cfg.maxWidthOrHeight != null || cfg.widthOrHeight != null) {\n if (containPadding && cfg.padding) {\n if (cfg.maxWidthOrHeight != null) {\n cfg.maxWidthOrHeight -= cfg.padding * 2;\n } else if (cfg.widthOrHeight != null) {\n cfg.widthOrHeight -= cfg.padding * 2;\n }\n }\n\n const max = Math.max(width, height);\n\n if (cfg.widthOrHeight != null) {\n // calculate by how much do we need to scale the canvas to fit into the\n // target dimension (e.g. target: max 50px, actual: 70x100px => scale: 0.5)\n canvasScale = cfg.widthOrHeight / max;\n } else if (cfg.maxWidthOrHeight != null) {\n canvasScale = cfg.maxWidthOrHeight < max ? cfg.maxWidthOrHeight / max : 1;\n }\n\n width *= canvasScale;\n height *= canvasScale;\n } else if (cfg.getDimensions) {\n const ret = cfg.getDimensions(width, height);\n width = ret.width;\n height = ret.height;\n cfg.scale = (_f = ret.scale) !== null && _f !== void 0 ? _f : cfg.scale;\n } else if (containPadding && cfg.padding && cfg.width == null && cfg.height == null) {\n const whRatio = width / height;\n width -= cfg.padding * 2;\n height -= cfg.padding * 2 / whRatio;\n }\n\n if (cfg.fit === \"contain\" && !cfg.maxWidthOrHeight || containPadding && cfg.padding) {\n if (cfg.fit === \"contain\") {\n const wRatio = width / origWidth;\n const hRatio = height / origHeight; // scale the orig canvas to fit in the target frame\n\n canvasScale = Math.min(wRatio, hRatio);\n } else {\n const wRatio = (width - cfg.padding * 2) / width;\n const hRatio = (height - cfg.padding * 2) / height;\n canvasScale = Math.min(wRatio, hRatio);\n }\n } else if (cfg.fit === \"cover\") {\n const wRatio = width / origWidth;\n const hRatio = height / origHeight; // scale the orig canvas to fill the the target frame\n // (opposite of \"contain\")\n\n canvasScale = Math.max(wRatio, hRatio);\n }\n\n x = (_g = cfg.x) !== null && _g !== void 0 ? _g : origX;\n y = (_h = cfg.y) !== null && _h !== void 0 ? _h : origY; // if we switch to \"content\" coords, we need to offset cfg-supplied\n // coords by the x/y of content bounding box\n\n if (cfg.origin === \"content\") {\n if (cfg.x != null) {\n x += origX;\n }\n\n if (cfg.y != null) {\n y += origY;\n }\n } // Centering the content to the frame.\n // We divide width/height by canvasScale so that we calculate in the original\n // aspect ratio dimensions.\n\n\n if (cfg.position === \"center\") {\n x -= width / canvasScale / 2 - (cfg.x == null ? origWidth : width + cfg.padding * 2) / 2;\n y -= height / canvasScale / 2 - (cfg.y == null ? origHeight : height + cfg.padding * 2) / 2;\n }\n\n const canvas = cfg.createCanvas ? cfg.createCanvas() : document.createElement(\"canvas\");\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements); // hack fix until we decide whose responsibility this should be\n\n if (onlyExportingSingleFrame) {\n cfg.padding = 0;\n } // rescale padding based on current canvasScale factor so that the resulting\n // padding is kept the same as supplied by user (with the exception of\n // `cfg.scale` being set, which also scales the padding)\n\n\n const normalizedPadding = cfg.padding / canvasScale; // scale the whole frame by cfg.scale (on top of whatever canvasScale we\n // calculated above)\n\n canvasScale *= cfg.scale;\n width *= cfg.scale;\n height *= cfg.scale;\n canvas.width = width + cfg.padding * 2 * cfg.scale;\n canvas.height = height + cfg.padding * 2 * cfg.scale;\n const {\n imageCache\n } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_6__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_6__.getInitializedImageElements)(elements).map(element => element.fileId),\n files: files || {}\n }); // console.log(elements, width, height, cfg, canvasScale);\n // console.log(elements, width, height, cfg, canvasScale);\n\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderStaticScene)({\n elements,\n visibleElements: elements,\n appState: Object.assign(Object.assign({}, appState), {\n width,\n height,\n offsetLeft: 0,\n offsetTop: 0,\n scrollX: -x + normalizedPadding,\n scrollY: -y + normalizedPadding,\n zoom: {\n value: _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_ZOOM_VALUE\n },\n shouldCacheIgnoreZoom: false,\n theme: cfg.theme || _constants__WEBPACK_IMPORTED_MODULE_4__.THEME.LIGHT\n }),\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n canvas,\n scale: canvasScale,\n renderConfig: {\n canvasBackgroundColor: cfg.canvasBackgroundColor === false ? // null indicates transparent background\n null : cfg.canvasBackgroundColor || appState.viewBackgroundColor || _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_BACKGROUND_COLOR,\n imageCache,\n renderGrid: false,\n isExporting: true\n }\n });\n return canvas;\n});\nconst exportToSvg = (elements, appState, files, opts) => __awaiter(void 0, void 0, void 0, function* () {\n var _j, _k, _l;\n\n const {\n exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING,\n viewBackgroundColor,\n exportScale = 1,\n exportEmbedScene\n } = appState;\n let metadata = \"\";\n\n if (exportEmbedScene) {\n try {\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\n text: (opts === null || opts === void 0 ? void 0 : opts.serializeAsJSON) ? (_j = opts === null || opts === void 0 ? void 0 : opts.serializeAsJSON) === null || _j === void 0 ? void 0 : _j.call(opts) : (0,_data_json__WEBPACK_IMPORTED_MODULE_5__.serializeAsJSON)(elements, appState, files || {}, \"local\")\n });\n } catch (error) {\n console.error(error);\n }\n }\n\n let [minX, minY, width, height] = getCanvasSize(elements);\n width += exportPadding * 2;\n height += exportPadding * 2; // initialize SVG root\n\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\n svgRoot.setAttribute(\"version\", \"1.1\");\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\n\n if (appState.exportWithDarkMode) {\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\n }\n\n let assetPath = \"https://excalidraw.com/\"; // Asset path needs to be determined only when using package\n\n if (true) {\n assetPath = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\"@dwelle/excalidraw\"}@${({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_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\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@dwelle/excalidraw\",\"VITE_PKG_VERSION\":\"0.4.0-2a0e59a\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).PKG_VERSION}`;\n\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\n }\n\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\n } // do not apply clipping when we're exporting the whole scene\n\n\n const isExportingWholeCanvas = ((_l = (_k = _Scene__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getScene(elements[0])) === null || _k === void 0 ? void 0 : _k.getNonDeletedElements()) === null || _l === void 0 ? void 0 : _l.length) === elements.length;\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n const offsetX = -minX + (onlyExportingSingleFrame ? 0 : exportPadding);\n const offsetY = -minY + (onlyExportingSingleFrame ? 0 : exportPadding);\n const exportingFrame = isExportingWholeCanvas || !onlyExportingSingleFrame ? undefined : elements.find(element => element.type === \"frame\");\n let exportingFrameClipPath = \"\";\n\n if (exportingFrame) {\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(exportingFrame);\n const cx = (x2 - x1) / 2 - (exportingFrame.x - x1);\n const cy = (y2 - y1) / 2 - (exportingFrame.y - y1);\n exportingFrameClipPath = `<clipPath id=${exportingFrame.id}>\n <rect transform=\"translate(${exportingFrame.x + offsetX} ${exportingFrame.y + offsetY}) rotate(${exportingFrame.angle} ${cx} ${cy})\"\n width=\"${exportingFrame.width}\"\n height=\"${exportingFrame.height}\"\n >\n </rect>\n </clipPath>`;\n }\n\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style class=\"style-fonts\">\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 ${exportingFrameClipPath}\n </defs>\n `; // render background rect\n\n if (appState.exportBackground && viewBackgroundColor) {\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n rect.setAttribute(\"width\", `${width}`);\n rect.setAttribute(\"height\", `${height}`);\n rect.setAttribute(\"fill\", viewBackgroundColor);\n svgRoot.appendChild(rect);\n }\n\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\n offsetX,\n offsetY,\n exportWithDarkMode: appState.exportWithDarkMode,\n exportingFrameId: (exportingFrame === null || exportingFrame === void 0 ? void 0 : exportingFrame.id) || null,\n renderEmbeddables: opts === null || opts === void 0 ? void 0 : opts.renderEmbeddables\n });\n return svgRoot;\n}); // calculate smallest area to fit the contents in\n\nconst getCanvasSize = elements => {\n // we should decide if we are exporting the whole canvas\n // if so, we are not clipping elements in the frame\n // and therefore, we should not do anything special\n var _a, _b;\n\n const isExportingWholeCanvas = ((_b = (_a = _Scene__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getScene(elements[0])) === null || _a === void 0 ? void 0 : _a.getNonDeletedElements()) === null || _b === void 0 ? void 0 : _b.length) === elements.length;\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n\n if (!isExportingWholeCanvas || onlyExportingSingleFrame) {\n const frames = elements.filter(element => element.type === \"frame\");\n const exportedFrameIds = frames.reduce((acc, frame) => {\n acc[frame.id] = true;\n return acc;\n }, {}); // elements in a frame do not affect the canvas size if we're not exporting\n // the whole canvas\n\n elements = elements.filter(element => {\n var _a;\n\n return !exportedFrameIds[(_a = element.frameId) !== null && _a !== void 0 ? _a : \"\"];\n });\n }\n\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX);\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY);\n return [minX, minY, width, height];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBOEMsdURBQWM7QUFDNUQsbUNBQW1DLGtFQUEwQjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxHQUFHO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSxtQ0FBbUMsZ0VBQWU7QUFDbEQsZ0JBQWdCLGdEQUFRO0FBQ3hCLGlCQUFpQixnREFBUTtBQUN6QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NjZW5lL2V4cG9ydC50cz8zZjRlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSB0aGlzICYmIHRoaXMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG4gICAgfVxuXG4gICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn07XG5cbmltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IGdldENvbW1vbkJvdW5kcywgZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzIH0gZnJvbSBcIi4uL2VsZW1lbnQvYm91bmRzXCI7XG5pbXBvcnQgeyByZW5kZXJTdGF0aWNTY2VuZSwgcmVuZGVyU2NlbmVUb1N2ZyB9IGZyb20gXCIuLi9yZW5kZXJlci9yZW5kZXJTY2VuZVwiO1xuaW1wb3J0IHsgZGlzdGFuY2UsIGlzT25seUV4cG9ydGluZ1NpbmdsZUZyYW1lIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsIERFRkFVTFRfRVhQT1JUX1BBRERJTkcsIERFRkFVTFRfWk9PTV9WQUxVRSwgRU5WLCBTVkdfTlMsIFRIRU1FLCBUSEVNRV9GSUxURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVBc0pTT04gfSBmcm9tIFwiLi4vZGF0YS9qc29uXCI7XG5pbXBvcnQgeyBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMsIHVwZGF0ZUltYWdlQ2FjaGUgfSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuaW1wb3J0IHsgcmVzdG9yZUFwcFN0YXRlIH0gZnJvbSBcIi4uL2RhdGEvcmVzdG9yZVwiO1xuaW1wb3J0IFNjZW5lIGZyb20gXCIuL1NjZW5lXCI7XG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcbi8qKlxuICogVGhpcyBBUEkgaXMgdXN1YWxseSB1c2VkIGFzIGEgcHJlY3Vyc29yIHRvIHNlYXJpYWxpemluZyB0byBCbG9iIG9yIFBORyxcbiAqIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBhIGNhbnZhcyBmb3Igb3RoZXIgcHVycG9zZXMuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gKHtcbiAgZGF0YSxcbiAgY29uZmlnXG59KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaDsgLy8gaW5pdGlhbGl6ZSBkZWZhdWx0c1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gIGNvbnN0IHtcbiAgICBlbGVtZW50cyxcbiAgICBmaWxlc1xuICB9ID0gZGF0YTtcbiAgY29uc3QgYXBwU3RhdGUgPSByZXN0b3JlQXBwU3RhdGUoZGF0YS5hcHBTdGF0ZSwgbnVsbCk7IC8vIGNsb25lXG5cbiAgY29uc3QgY2ZnID0gT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKTtcbiAgY2ZnLmZpdCA9IChfYSA9IGNmZy5maXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNmZy53aWR0aCAhPSBudWxsIHx8IGNmZy5oZWlnaHQgIT0gbnVsbCB8fCBjZmcubWF4V2lkdGhPckhlaWdodCAhPSBudWxsIHx8IGNmZy53aWR0aE9ySGVpZ2h0ICE9IG51bGwgPyBcImNvbnRhaW5cIiA6IFwibm9uZVwiO1xuICBjb25zdCBjb250YWluUGFkZGluZyA9IGNmZy5maXQgPT09IFwiY29udGFpblwiO1xuXG4gIGlmIChjZmcueCAhPSBudWxsIHx8IGNmZy54ICE9IG51bGwpIHtcbiAgICBjZmcuZml0ID0gXCJub25lXCI7XG4gIH1cblxuICBpZiAoY2ZnLmZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgaWYgKGNmZy5wYWRkaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuUFJPRFVDVElPTikge1xuICAgICAgY29uc29sZS53YXJuKFwiYHBhZGRpbmdgIGlzIGlnbm9yZWQgd2hlbiBgZml0YCBpcyBzZXQgdG8gYGNvdmVyYFwiKTtcbiAgICB9XG5cbiAgICBjZmcucGFkZGluZyA9IDA7XG4gIH1cblxuICBjZmcucGFkZGluZyA9IChfYiA9IGNmZy5wYWRkaW5nKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwO1xuICBjZmcuc2NhbGUgPSAoX2MgPSBjZmcuc2NhbGUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDE7XG4gIGNmZy5vcmlnaW4gPSAoX2QgPSBjZmcub3JpZ2luKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBcImNhbnZhc1wiO1xuICBjZmcucG9zaXRpb24gPSAoX2UgPSBjZmcucG9zaXRpb24pICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFwiY2VudGVyXCI7XG5cbiAgaWYgKGNmZy5tYXhXaWR0aE9ySGVpZ2h0ICE9IG51bGwgJiYgY2ZnLndpZHRoT3JIZWlnaHQgIT0gbnVsbCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gRU5WLlBST0RVQ1RJT04pIHtcbiAgICAgIGNvbnNvbGUud2FybihcImBtYXhXaWR0aE9ySGVpZ2h0YCBpcyBpZ25vcmVkIHdoZW4gYHdpZHRoT3JIZWlnaHRgIGlzIHNldFwiKTtcbiAgICB9XG5cbiAgICBjZmcubWF4V2lkdGhPckhlaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICgoY2ZnLm1heFdpZHRoT3JIZWlnaHQgIT0gbnVsbCB8fCBjZmcud2lkdGggIT0gbnVsbCB8fCBjZmcuaGVpZ2h0ICE9IG51bGwpICYmIGNmZy5nZXREaW1lbnNpb25zKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuUFJPRFVDVElPTikge1xuICAgICAgY29uc29sZS53YXJuKFwiYGdldERpbWVuc2lvbnNgIGlzIGlnbm9yZWQgd2hlbiBgd2lkdGhgLCBgaGVpZ2h0YCwgb3IgYG1heFdpZHRoT3JIZWlnaHRgIGlzIHNldFwiKTtcbiAgICB9XG5cbiAgICBjZmcuZ2V0RGltZW5zaW9ucyA9IHVuZGVmaW5lZDtcbiAgfSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gdmFsdWUgdXNlZCB0byBzY2FsZSB0aGUgY2FudmFzIGNvbnRleHQuIEJ5IGRlZmF1bHQsIHdlIHVzZSB0aGlzIHRvXG4gIC8vIG1ha2UgdGhlIGNhbnZhcyBmaXQgaW50byB0aGUgZnJhbWUgKGUuZy4gZm9yIGBjZmcuZml0YCBzZXQgdG8gYGNvbnRhaW5gKS5cbiAgLy8gSWYgYGNmZy5zY2FsZWAgaXMgc2V0LCB3ZSBtdWx0aXBseSB0aGUgcmVzdWx0aW5nIGNhbnZhc1NjYWxlIGJ5IGl0IHRvXG4gIC8vIHNjYWxlIHRoZSBvdXRwdXQgZnVydGhlci5cblxuXG4gIGxldCBjYW52YXNTY2FsZSA9IDE7XG4gIGNvbnN0IG9yaWdDYW52YXNTaXplID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cyk7IC8vIGNmZy54ID0gdW5kZWZpbmVkO1xuICAvLyBjZmcueSA9IHVuZGVmaW5lZDtcbiAgLy8gdmFyaWFibGVzIGZvciBvcmlnaW5hbCBjb250ZW50IGJvdW5kaW5nIGJveFxuXG4gIGNvbnN0IFtvcmlnWCwgb3JpZ1ksIG9yaWdXaWR0aCwgb3JpZ0hlaWdodF0gPSBvcmlnQ2FudmFzU2l6ZTsgLy8gdmFyaWFibGVzIGZvciB0YXJnZXQgYm91bmRpbmcgYm94XG5cbiAgbGV0IFt4LCB5LCB3aWR0aCwgaGVpZ2h0XSA9IG9yaWdDYW52YXNTaXplO1xuXG4gIGlmIChjZmcud2lkdGggIT0gbnVsbCkge1xuICAgIHdpZHRoID0gY2ZnLndpZHRoO1xuXG4gICAgaWYgKGNmZy5wYWRkaW5nICYmIGNvbnRhaW5QYWRkaW5nKSB7XG4gICAgICB3aWR0aCAtPSBjZmcucGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgaWYgKGNmZy5oZWlnaHQpIHtcbiAgICAgIGhlaWdodCA9IGNmZy5oZWlnaHQ7XG5cbiAgICAgIGlmIChjZmcucGFkZGluZyAmJiBjb250YWluUGFkZGluZykge1xuICAgICAgICBoZWlnaHQgLT0gY2ZnLnBhZGRpbmcgKiAyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBoZWlnaHQgbm90IHNwZWNpZmllZCwgc2NhbGUgdGhlIG9yaWdpbmFsIGhlaWdodCB0byBtYXRjaCB0aGUgbmV3XG4gICAgICAvLyB3aWR0aCB3aGlsZSBtYWludGFpbmluZyBhc3BlY3QgcmF0aW9cbiAgICAgIGhlaWdodCAqPSB3aWR0aCAvIG9yaWdXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2ZnLmhlaWdodCAhPSBudWxsKSB7XG4gICAgaGVpZ2h0ID0gY2ZnLmhlaWdodDtcblxuICAgIGlmIChjZmcucGFkZGluZyAmJiBjb250YWluUGFkZGluZykge1xuICAgICAgaGVpZ2h0IC09IGNmZy5wYWRkaW5nICogMjtcbiAgICB9IC8vIHdpZHRoIG5vdCBzcGVjaWZpZWQsIHNvIHNjYWxlIHRoZSBvcmlnaW5hbCB3aWR0aCB0byBtYXRjaCB0aGUgbmV3XG4gICAgLy8gaGVpZ2h0IHdoaWxlIG1haW50YWluaW5nIGFzcGVjdCByYXRpb1xuXG5cbiAgICB3aWR0aCAqPSBoZWlnaHQgLyBvcmlnSGVpZ2h0O1xuICB9XG5cbiAgaWYgKGNmZy5tYXhXaWR0aE9ySGVpZ2h0ICE9IG51bGwgfHwgY2ZnLndpZHRoT3JIZWlnaHQgIT0gbnVsbCkge1xuICAgIGlmIChjb250YWluUGFkZGluZyAmJiBjZmcucGFkZGluZykge1xuICAgICAgaWYgKGNmZy5tYXhXaWR0aE9ySGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgY2ZnLm1heFdpZHRoT3JIZWlnaHQgLT0gY2ZnLnBhZGRpbmcgKiAyO1xuICAgICAgfSBlbHNlIGlmIChjZmcud2lkdGhPckhlaWdodCAhPSBudWxsKSB7XG4gICAgICAgIGNmZy53aWR0aE9ySGVpZ2h0IC09IGNmZy5wYWRkaW5nICogMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtYXggPSBNYXRoLm1heCh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmIChjZmcud2lkdGhPckhlaWdodCAhPSBudWxsKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgYnkgaG93IG11Y2ggZG8gd2UgbmVlZCB0byBzY2FsZSB0aGUgY2FudmFzIHRvIGZpdCBpbnRvIHRoZVxuICAgICAgLy8gdGFyZ2V0IGRpbWVuc2lvbiAoZS5nLiB0YXJnZXQ6IG1heCA1MHB4LCBhY3R1YWw6IDcweDEwMHB4ID0+IHNjYWxlOiAwLjUpXG4gICAgICBjYW52YXNTY2FsZSA9IGNmZy53aWR0aE9ySGVpZ2h0IC8gbWF4O1xuICAgIH0gZWxzZSBpZiAoY2ZnLm1heFdpZHRoT3JIZWlnaHQgIT0gbnVsbCkge1xuICAgICAgY2FudmFzU2NhbGUgPSBjZmcubWF4V2lkdGhPckhlaWdodCA8IG1heCA/IGNmZy5tYXhXaWR0aE9ySGVpZ2h0IC8gbWF4IDogMTtcbiAgICB9XG5cbiAgICB3aWR0aCAqPSBjYW52YXNTY2FsZTtcbiAgICBoZWlnaHQgKj0gY2FudmFzU2NhbGU7XG4gIH0gZWxzZSBpZiAoY2ZnLmdldERpbWVuc2lvbnMpIHtcbiAgICBjb25zdCByZXQgPSBjZmcuZ2V0RGltZW5zaW9ucyh3aWR0aCwgaGVpZ2h0KTtcbiAgICB3aWR0aCA9IHJldC53aWR0aDtcbiAgICBoZWlnaHQgPSByZXQuaGVpZ2h0O1xuICAgIGNmZy5zY2FsZSA9IChfZiA9IHJldC5zY2FsZSkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogY2ZnLnNjYWxlO1xuICB9IGVsc2UgaWYgKGNvbnRhaW5QYWRkaW5nICYmIGNmZy5wYWRkaW5nICYmIGNmZy53aWR0aCA9PSBudWxsICYmIGNmZy5oZWlnaHQgPT0gbnVsbCkge1xuICAgIGNvbnN0IHdoUmF0aW8gPSB3aWR0aCAvIGhlaWdodDtcbiAgICB3aWR0aCAtPSBjZmcucGFkZGluZyAqIDI7XG4gICAgaGVpZ2h0IC09IGNmZy5wYWRkaW5nICogMiAvIHdoUmF0aW87XG4gIH1cblxuICBpZiAoY2ZnLmZpdCA9PT0gXCJjb250YWluXCIgJiYgIWNmZy5tYXhXaWR0aE9ySGVpZ2h0IHx8IGNvbnRhaW5QYWRkaW5nICYmIGNmZy5wYWRkaW5nKSB7XG4gICAgaWYgKGNmZy5maXQgPT09IFwiY29udGFpblwiKSB7XG4gICAgICBjb25zdCB3UmF0aW8gPSB3aWR0aCAvIG9yaWdXaWR0aDtcbiAgICAgIGNvbnN0IGhSYXRpbyA9IGhlaWdodCAvIG9yaWdIZWlnaHQ7IC8vIHNjYWxlIHRoZSBvcmlnIGNhbnZhcyB0byBmaXQgaW4gdGhlIHRhcmdldCBmcmFtZVxuXG4gICAgICBjYW52YXNTY2FsZSA9IE1hdGgubWluKHdSYXRpbywgaFJhdGlvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgd1JhdGlvID0gKHdpZHRoIC0gY2ZnLnBhZGRpbmcgKiAyKSAvIHdpZHRoO1xuICAgICAgY29uc3QgaFJhdGlvID0gKGhlaWdodCAtIGNmZy5wYWRkaW5nICogMikgLyBoZWlnaHQ7XG4gICAgICBjYW52YXNTY2FsZSA9IE1hdGgubWluKHdSYXRpbywgaFJhdGlvKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2ZnLmZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgY29uc3Qgd1JhdGlvID0gd2lkdGggLyBvcmlnV2lkdGg7XG4gICAgY29uc3QgaFJhdGlvID0gaGVpZ2h0IC8gb3JpZ0hlaWdodDsgLy8gc2NhbGUgdGhlIG9yaWcgY2FudmFzIHRvIGZpbGwgdGhlIHRoZSB0YXJnZXQgZnJhbWVcbiAgICAvLyAob3Bwb3NpdGUgb2YgXCJjb250YWluXCIpXG5cbiAgICBjYW52YXNTY2FsZSA9IE1hdGgubWF4KHdSYXRpbywgaFJhdGlvKTtcbiAgfVxuXG4gIHggPSAoX2cgPSBjZmcueCkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogb3JpZ1g7XG4gIHkgPSAoX2ggPSBjZmcueSkgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogb3JpZ1k7IC8vIGlmIHdlIHN3aXRjaCB0byBcImNvbnRlbnRcIiBjb29yZHMsIHdlIG5lZWQgdG8gb2Zmc2V0IGNmZy1zdXBwbGllZFxuICAvLyBjb29yZHMgYnkgdGhlIHgveSBvZiBjb250ZW50IGJvdW5kaW5nIGJveFxuXG4gIGlmIChjZmcub3JpZ2luID09PSBcImNvbnRlbnRcIikge1xuICAgIGlmIChjZmcueCAhPSBudWxsKSB7XG4gICAgICB4ICs9IG9yaWdYO1xuICAgIH1cblxuICAgIGlmIChjZmcueSAhPSBudWxsKSB7XG4gICAgICB5ICs9IG9yaWdZO1xuICAgIH1cbiAgfSAvLyBDZW50ZXJpbmcgdGhlIGNvbnRlbnQgdG8gdGhlIGZyYW1lLlxuICAvLyBXZSBkaXZpZGUgd2lkdGgvaGVpZ2h0IGJ5IGNhbnZhc1NjYWxlIHNvIHRoYXQgd2UgY2FsY3VsYXRlIGluIHRoZSBvcmlnaW5hbFxuICAvLyBhc3BlY3QgcmF0aW8gZGltZW5zaW9ucy5cblxuXG4gIGlmIChjZmcucG9zaXRpb24gPT09IFwiY2VudGVyXCIpIHtcbiAgICB4IC09IHdpZHRoIC8gY2FudmFzU2NhbGUgLyAyIC0gKGNmZy54ID09IG51bGwgPyBvcmlnV2lkdGggOiB3aWR0aCArIGNmZy5wYWRkaW5nICogMikgLyAyO1xuICAgIHkgLT0gaGVpZ2h0IC8gY2FudmFzU2NhbGUgLyAyIC0gKGNmZy55ID09IG51bGwgPyBvcmlnSGVpZ2h0IDogaGVpZ2h0ICsgY2ZnLnBhZGRpbmcgKiAyKSAvIDI7XG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBjZmcuY3JlYXRlQ2FudmFzID8gY2ZnLmNyZWF0ZUNhbnZhcygpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3Qgb25seUV4cG9ydGluZ1NpbmdsZUZyYW1lID0gaXNPbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUoZWxlbWVudHMpOyAvLyBoYWNrIGZpeCB1bnRpbCB3ZSBkZWNpZGUgd2hvc2UgcmVzcG9uc2liaWxpdHkgdGhpcyBzaG91bGQgYmVcblxuICBpZiAob25seUV4cG9ydGluZ1NpbmdsZUZyYW1lKSB7XG4gICAgY2ZnLnBhZGRpbmcgPSAwO1xuICB9IC8vIHJlc2NhbGUgcGFkZGluZyBiYXNlZCBvbiBjdXJyZW50IGNhbnZhc1NjYWxlIGZhY3RvciBzbyB0aGF0IHRoZSByZXN1bHRpbmdcbiAgLy8gcGFkZGluZyBpcyBrZXB0IHRoZSBzYW1lIGFzIHN1cHBsaWVkIGJ5IHVzZXIgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuICAvLyBgY2ZnLnNjYWxlYCBiZWluZyBzZXQsIHdoaWNoIGFsc28gc2NhbGVzIHRoZSBwYWRkaW5nKVxuXG5cbiAgY29uc3Qgbm9ybWFsaXplZFBhZGRpbmcgPSBjZmcucGFkZGluZyAvIGNhbnZhc1NjYWxlOyAvLyBzY2FsZSB0aGUgd2hvbGUgZnJhbWUgYnkgY2ZnLnNjYWxlIChvbiB0b3Agb2Ygd2hhdGV2ZXIgY2FudmFzU2NhbGUgd2VcbiAgLy8gY2FsY3VsYXRlZCBhYm92ZSlcblxuICBjYW52YXNTY2FsZSAqPSBjZmcuc2NhbGU7XG4gIHdpZHRoICo9IGNmZy5zY2FsZTtcbiAgaGVpZ2h0ICo9IGNmZy5zY2FsZTtcbiAgY2FudmFzLndpZHRoID0gd2lkdGggKyBjZmcucGFkZGluZyAqIDIgKiBjZmcuc2NhbGU7XG4gIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKyBjZmcucGFkZGluZyAqIDIgKiBjZmcuc2NhbGU7XG4gIGNvbnN0IHtcbiAgICBpbWFnZUNhY2hlXG4gIH0gPSB5aWVsZCB1cGRhdGVJbWFnZUNhY2hlKHtcbiAgICBpbWFnZUNhY2hlOiBuZXcgTWFwKCksXG4gICAgZmlsZUlkczogZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzKGVsZW1lbnRzKS5tYXAoZWxlbWVudCA9PiBlbGVtZW50LmZpbGVJZCksXG4gICAgZmlsZXM6IGZpbGVzIHx8IHt9XG4gIH0pOyAvLyBjb25zb2xlLmxvZyhlbGVtZW50cywgd2lkdGgsIGhlaWdodCwgY2ZnLCBjYW52YXNTY2FsZSk7XG4gIC8vIGNvbnNvbGUubG9nKGVsZW1lbnRzLCB3aWR0aCwgaGVpZ2h0LCBjZmcsIGNhbnZhc1NjYWxlKTtcblxuICByZW5kZXJTdGF0aWNTY2VuZSh7XG4gICAgZWxlbWVudHMsXG4gICAgdmlzaWJsZUVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBhcHBTdGF0ZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhcHBTdGF0ZSksIHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgb2Zmc2V0TGVmdDogMCxcbiAgICAgIG9mZnNldFRvcDogMCxcbiAgICAgIHNjcm9sbFg6IC14ICsgbm9ybWFsaXplZFBhZGRpbmcsXG4gICAgICBzY3JvbGxZOiAteSArIG5vcm1hbGl6ZWRQYWRkaW5nLFxuICAgICAgem9vbToge1xuICAgICAgICB2YWx1ZTogREVGQVVMVF9aT09NX1ZBTFVFXG4gICAgICB9LFxuICAgICAgc2hvdWxkQ2FjaGVJZ25vcmVab29tOiBmYWxzZSxcbiAgICAgIHRoZW1lOiBjZmcudGhlbWUgfHwgVEhFTUUuTElHSFRcbiAgICB9KSxcbiAgICByYzogcm91Z2guY2FudmFzKGNhbnZhcyksXG4gICAgY2FudmFzLFxuICAgIHNjYWxlOiBjYW52YXNTY2FsZSxcbiAgICByZW5kZXJDb25maWc6IHtcbiAgICAgIGNhbnZhc0JhY2tncm91bmRDb2xvcjogY2ZnLmNhbnZhc0JhY2tncm91bmRDb2xvciA9PT0gZmFsc2UgPyAvLyBudWxsIGluZGljYXRlcyB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kXG4gICAgICBudWxsIDogY2ZnLmNhbnZhc0JhY2tncm91bmRDb2xvciB8fCBhcHBTdGF0ZS52aWV3QmFja2dyb3VuZENvbG9yIHx8IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICAgIGltYWdlQ2FjaGUsXG4gICAgICByZW5kZXJHcmlkOiBmYWxzZSxcbiAgICAgIGlzRXhwb3J0aW5nOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNhbnZhcztcbn0pO1xuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMsIG9wdHMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICB2YXIgX2osIF9rLCBfbDtcblxuICBjb25zdCB7XG4gICAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gICAgdmlld0JhY2tncm91bmRDb2xvcixcbiAgICBleHBvcnRTY2FsZSA9IDEsXG4gICAgZXhwb3J0RW1iZWRTY2VuZVxuICB9ID0gYXBwU3RhdGU7XG4gIGxldCBtZXRhZGF0YSA9IFwiXCI7XG5cbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSB5aWVsZCAoeWllbGQgaW1wb3J0KFxuICAgICAgLyogd2VicGFja0NodW5rTmFtZTogXCJpbWFnZVwiICovXG4gICAgICBcIi4uLy4uL3NyYy9kYXRhL2ltYWdlXCIpKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIHRleHQ6IChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdHMuc2VyaWFsaXplQXNKU09OKSA/IChfaiA9IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5zZXJpYWxpemVBc0pTT04pID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5jYWxsKG9wdHMpIDogc2VyaWFsaXplQXNKU09OKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMgfHwge30sIFwibG9jYWxcIilcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBsZXQgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cyk7XG4gIHdpZHRoICs9IGV4cG9ydFBhZGRpbmcgKiAyO1xuICBoZWlnaHQgKz0gZXhwb3J0UGFkZGluZyAqIDI7IC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcblxuICBjb25zdCBzdmdSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJzdmdcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmVyc2lvblwiLCBcIjEuMVwiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBTVkdfTlMpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aCAqIGV4cG9ydFNjYWxlfWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHQgKiBleHBvcnRTY2FsZX1gKTtcblxuICBpZiAoYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlKSB7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJcIiwgVEhFTUVfRklMVEVSKTtcbiAgfVxuXG4gIGxldCBhc3NldFBhdGggPSBcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vXCI7IC8vIEFzc2V0IHBhdGggbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBvbmx5IHdoZW4gdXNpbmcgcGFja2FnZVxuXG4gIGlmIChwcm9jZXNzLmVudi5WSVRFX0lTX0VYQ0FMSURSQVdfTlBNX1BBQ0tBR0UpIHtcbiAgICBhc3NldFBhdGggPSB3aW5kb3cuRVhDQUxJRFJBV19BU1NFVF9QQVRIIHx8IGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlZJVEVfUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059YDtcblxuICAgIGlmIChhc3NldFBhdGggPT09IG51bGwgfHwgYXNzZXRQYXRoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhc3NldFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIGFzc2V0UGF0aCA9IGFzc2V0UGF0aC5yZXBsYWNlKFwiL1wiLCBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9gKTtcbiAgICB9XG5cbiAgICBhc3NldFBhdGggPSBgJHthc3NldFBhdGh9L2Rpc3QvZXhjYWxpZHJhdy1hc3NldHMvYDtcbiAgfSAvLyBkbyBub3QgYXBwbHkgY2xpcHBpbmcgd2hlbiB3ZSdyZSBleHBvcnRpbmcgdGhlIHdob2xlIHNjZW5lXG5cblxuICBjb25zdCBpc0V4cG9ydGluZ1dob2xlQ2FudmFzID0gKChfbCA9IChfayA9IFNjZW5lLmdldFNjZW5lKGVsZW1lbnRzWzBdKSkgPT09IG51bGwgfHwgX2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rLmdldE5vbkRlbGV0ZWRFbGVtZW50cygpKSA9PT0gbnVsbCB8fCBfbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2wubGVuZ3RoKSA9PT0gZWxlbWVudHMubGVuZ3RoO1xuICBjb25zdCBvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPSBpc09ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZShlbGVtZW50cyk7XG4gIGNvbnN0IG9mZnNldFggPSAtbWluWCArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyk7XG4gIGNvbnN0IG9mZnNldFkgPSAtbWluWSArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyk7XG4gIGNvbnN0IGV4cG9ydGluZ0ZyYW1lID0gaXNFeHBvcnRpbmdXaG9sZUNhbnZhcyB8fCAhb25seUV4cG9ydGluZ1NpbmdsZUZyYW1lID8gdW5kZWZpbmVkIDogZWxlbWVudHMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQudHlwZSA9PT0gXCJmcmFtZVwiKTtcbiAgbGV0IGV4cG9ydGluZ0ZyYW1lQ2xpcFBhdGggPSBcIlwiO1xuXG4gIGlmIChleHBvcnRpbmdGcmFtZSkge1xuICAgIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZXhwb3J0aW5nRnJhbWUpO1xuICAgIGNvbnN0IGN4ID0gKHgyIC0geDEpIC8gMiAtIChleHBvcnRpbmdGcmFtZS54IC0geDEpO1xuICAgIGNvbnN0IGN5ID0gKHkyIC0geTEpIC8gMiAtIChleHBvcnRpbmdGcmFtZS55IC0geTEpO1xuICAgIGV4cG9ydGluZ0ZyYW1lQ2xpcFBhdGggPSBgPGNsaXBQYXRoIGlkPSR7ZXhwb3J0aW5nRnJhbWUuaWR9PlxuICAgICAgICAgICAgPHJlY3QgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCR7ZXhwb3J0aW5nRnJhbWUueCArIG9mZnNldFh9ICR7ZXhwb3J0aW5nRnJhbWUueSArIG9mZnNldFl9KSByb3RhdGUoJHtleHBvcnRpbmdGcmFtZS5hbmdsZX0gJHtjeH0gJHtjeX0pXCJcbiAgICAgICAgICB3aWR0aD1cIiR7ZXhwb3J0aW5nRnJhbWUud2lkdGh9XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2V4cG9ydGluZ0ZyYW1lLmhlaWdodH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3JlY3Q+XG4gICAgICAgIDwvY2xpcFBhdGg+YDtcbiAgfVxuXG4gIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGUgY2xhc3M9XCJzdHlsZS1mb250c1wiPlxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlZpcmdpbFwiO1xuICAgICAgICBzcmM6IHVybChcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vVmlyZ2lsLndvZmYyXCIpO1xuICAgICAgfVxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkNhc2NhZGlhXCI7XG4gICAgICAgIHNyYzogdXJsKFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9DYXNjYWRpYS53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICAgICR7ZXhwb3J0aW5nRnJhbWVDbGlwUGF0aH1cbiAgPC9kZWZzPlxuICBgOyAvLyByZW5kZXIgYmFja2dyb3VuZCByZWN0XG5cbiAgaWYgKGFwcFN0YXRlLmV4cG9ydEJhY2tncm91bmQgJiYgdmlld0JhY2tncm91bmRDb2xvcikge1xuICAgIGNvbnN0IHJlY3QgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WCxcbiAgICBvZmZzZXRZLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlLFxuICAgIGV4cG9ydGluZ0ZyYW1lSWQ6IChleHBvcnRpbmdGcmFtZSA9PT0gbnVsbCB8fCBleHBvcnRpbmdGcmFtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhwb3J0aW5nRnJhbWUuaWQpIHx8IG51bGwsXG4gICAgcmVuZGVyRW1iZWRkYWJsZXM6IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5yZW5kZXJFbWJlZGRhYmxlc1xuICB9KTtcbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59KTsgLy8gY2FsY3VsYXRlIHNtYWxsZXN0IGFyZWEgdG8gZml0IHRoZSBjb250ZW50cyBpblxuXG5leHBvcnQgY29uc3QgZ2V0Q2FudmFzU2l6ZSA9IGVsZW1lbnRzID0+IHtcbiAgLy8gd2Ugc2hvdWxkIGRlY2lkZSBpZiB3ZSBhcmUgZXhwb3J0aW5nIHRoZSB3aG9sZSBjYW52YXNcbiAgLy8gaWYgc28sIHdlIGFyZSBub3QgY2xpcHBpbmcgZWxlbWVudHMgaW4gdGhlIGZyYW1lXG4gIC8vIGFuZCB0aGVyZWZvcmUsIHdlIHNob3VsZCBub3QgZG8gYW55dGhpbmcgc3BlY2lhbFxuICB2YXIgX2EsIF9iO1xuXG4gIGNvbnN0IGlzRXhwb3J0aW5nV2hvbGVDYW52YXMgPSAoKF9iID0gKF9hID0gU2NlbmUuZ2V0U2NlbmUoZWxlbWVudHNbMF0pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpID09PSBlbGVtZW50cy5sZW5ndGg7XG4gIGNvbnN0IG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSA9IGlzT25seUV4cG9ydGluZ1NpbmdsZUZyYW1lKGVsZW1lbnRzKTtcblxuICBpZiAoIWlzRXhwb3J0aW5nV2hvbGVDYW52YXMgfHwgb25seUV4cG9ydGluZ1NpbmdsZUZyYW1lKSB7XG4gICAgY29uc3QgZnJhbWVzID0gZWxlbWVudHMuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC50eXBlID09PSBcImZyYW1lXCIpO1xuICAgIGNvbnN0IGV4cG9ydGVkRnJhbWVJZHMgPSBmcmFtZXMucmVkdWNlKChhY2MsIGZyYW1lKSA9PiB7XG4gICAgICBhY2NbZnJhbWUuaWRdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pOyAvLyBlbGVtZW50cyBpbiBhIGZyYW1lIGRvIG5vdCBhZmZlY3QgdGhlIGNhbnZhcyBzaXplIGlmIHdlJ3JlIG5vdCBleHBvcnRpbmdcbiAgICAvLyB0aGUgd2hvbGUgY2FudmFzXG5cbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcihlbGVtZW50ID0+IHtcbiAgICAgIHZhciBfYTtcblxuICAgICAgcmV0dXJuICFleHBvcnRlZEZyYW1lSWRzWyhfYSA9IGVsZW1lbnQuZnJhbWVJZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJcIl07XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV0gPSBnZXRDb21tb25Cb3VuZHMoZWxlbWVudHMpO1xuICBjb25zdCB3aWR0aCA9IGRpc3RhbmNlKG1pblgsIG1heFgpO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKTtcbiAgcmV0dXJuIFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
|
|
4189
|
+
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 */ \"getCanvasSize\": () => (/* binding */ getCanvasSize)\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 _data_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../element/image */ \"../../element/image.ts\");\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/restore */ \"../../data/restore.ts\");\n/* harmony import */ var _Scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Scene */ \"../../scene/Scene.ts\");\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\n/**\n * This API is usually used as a precursor to searializing to Blob or PNG,\n * but can also be used to create a canvas for other purposes.\n */\n\nconst exportToCanvas = ({\n data,\n config\n}) => __awaiter(void 0, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h; // initialize defaults\n // ---------------------------------------------------------------------------\n\n\n const {\n elements,\n files\n } = data;\n const appState = (0,_data_restore__WEBPACK_IMPORTED_MODULE_7__.restoreAppState)(data.appState, null); // clone\n\n const cfg = Object.assign({}, config);\n cfg.fit = (_a = cfg.fit) !== null && _a !== void 0 ? _a : cfg.width != null || cfg.height != null || cfg.maxWidthOrHeight != null || cfg.widthOrHeight != null ? \"contain\" : \"none\";\n const containPadding = cfg.fit === \"contain\";\n\n if (cfg.x != null || cfg.x != null) {\n cfg.fit = \"none\";\n }\n\n if (cfg.fit === \"cover\") {\n if (cfg.padding && \"development\" !== _constants__WEBPACK_IMPORTED_MODULE_4__.ENV.PRODUCTION) {\n console.warn(\"`padding` is ignored when `fit` is set to `cover`\");\n }\n\n cfg.padding = 0;\n }\n\n cfg.padding = (_b = cfg.padding) !== null && _b !== void 0 ? _b : 0;\n cfg.scale = (_c = cfg.scale) !== null && _c !== void 0 ? _c : 1;\n cfg.origin = (_d = cfg.origin) !== null && _d !== void 0 ? _d : \"canvas\";\n cfg.position = (_e = cfg.position) !== null && _e !== void 0 ? _e : \"center\";\n\n if (cfg.maxWidthOrHeight != null && cfg.widthOrHeight != null) {\n if (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_4__.ENV.PRODUCTION) {\n console.warn(\"`maxWidthOrHeight` is ignored when `widthOrHeight` is set\");\n }\n\n cfg.maxWidthOrHeight = undefined;\n }\n\n if ((cfg.maxWidthOrHeight != null || cfg.width != null || cfg.height != null) && cfg.getDimensions) {\n if (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_4__.ENV.PRODUCTION) {\n console.warn(\"`getDimensions` is ignored when `width`, `height`, or `maxWidthOrHeight` is set\");\n }\n\n cfg.getDimensions = undefined;\n } // ---------------------------------------------------------------------------\n // value used to scale the canvas context. By default, we use this to\n // make the canvas fit into the frame (e.g. for `cfg.fit` set to `contain`).\n // If `cfg.scale` is set, we multiply the resulting canvasScale by it to\n // scale the output further.\n\n\n let canvasScale = 1;\n const origCanvasSize = getCanvasSize(elements); // cfg.x = undefined;\n // cfg.y = undefined;\n // variables for original content bounding box\n\n const [origX, origY, origWidth, origHeight] = origCanvasSize; // variables for target bounding box\n\n let [x, y, width, height] = origCanvasSize;\n\n if (cfg.width != null) {\n width = cfg.width;\n\n if (cfg.padding && containPadding) {\n width -= cfg.padding * 2;\n }\n\n if (cfg.height) {\n height = cfg.height;\n\n if (cfg.padding && containPadding) {\n height -= cfg.padding * 2;\n }\n } else {\n // if height not specified, scale the original height to match the new\n // width while maintaining aspect ratio\n height *= width / origWidth;\n }\n } else if (cfg.height != null) {\n height = cfg.height;\n\n if (cfg.padding && containPadding) {\n height -= cfg.padding * 2;\n } // width not specified, so scale the original width to match the new\n // height while maintaining aspect ratio\n\n\n width *= height / origHeight;\n }\n\n if (cfg.maxWidthOrHeight != null || cfg.widthOrHeight != null) {\n if (containPadding && cfg.padding) {\n if (cfg.maxWidthOrHeight != null) {\n cfg.maxWidthOrHeight -= cfg.padding * 2;\n } else if (cfg.widthOrHeight != null) {\n cfg.widthOrHeight -= cfg.padding * 2;\n }\n }\n\n const max = Math.max(width, height);\n\n if (cfg.widthOrHeight != null) {\n // calculate by how much do we need to scale the canvas to fit into the\n // target dimension (e.g. target: max 50px, actual: 70x100px => scale: 0.5)\n canvasScale = cfg.widthOrHeight / max;\n } else if (cfg.maxWidthOrHeight != null) {\n canvasScale = cfg.maxWidthOrHeight < max ? cfg.maxWidthOrHeight / max : 1;\n }\n\n width *= canvasScale;\n height *= canvasScale;\n } else if (cfg.getDimensions) {\n const ret = cfg.getDimensions(width, height);\n width = ret.width;\n height = ret.height;\n cfg.scale = (_f = ret.scale) !== null && _f !== void 0 ? _f : cfg.scale;\n } else if (containPadding && cfg.padding && cfg.width == null && cfg.height == null) {\n const whRatio = width / height;\n width -= cfg.padding * 2;\n height -= cfg.padding * 2 / whRatio;\n }\n\n if (cfg.fit === \"contain\" && !cfg.maxWidthOrHeight || containPadding && cfg.padding) {\n if (cfg.fit === \"contain\") {\n const wRatio = width / origWidth;\n const hRatio = height / origHeight; // scale the orig canvas to fit in the target frame\n\n canvasScale = Math.min(wRatio, hRatio);\n } else {\n const wRatio = (width - cfg.padding * 2) / width;\n const hRatio = (height - cfg.padding * 2) / height;\n canvasScale = Math.min(wRatio, hRatio);\n }\n } else if (cfg.fit === \"cover\") {\n const wRatio = width / origWidth;\n const hRatio = height / origHeight; // scale the orig canvas to fill the the target frame\n // (opposite of \"contain\")\n\n canvasScale = Math.max(wRatio, hRatio);\n }\n\n x = (_g = cfg.x) !== null && _g !== void 0 ? _g : origX;\n y = (_h = cfg.y) !== null && _h !== void 0 ? _h : origY; // if we switch to \"content\" coords, we need to offset cfg-supplied\n // coords by the x/y of content bounding box\n\n if (cfg.origin === \"content\") {\n if (cfg.x != null) {\n x += origX;\n }\n\n if (cfg.y != null) {\n y += origY;\n }\n } // Centering the content to the frame.\n // We divide width/height by canvasScale so that we calculate in the original\n // aspect ratio dimensions.\n\n\n if (cfg.position === \"center\") {\n x -= width / canvasScale / 2 - (cfg.x == null ? origWidth : width + cfg.padding * 2) / 2;\n y -= height / canvasScale / 2 - (cfg.y == null ? origHeight : height + cfg.padding * 2) / 2;\n }\n\n const canvas = cfg.createCanvas ? cfg.createCanvas() : document.createElement(\"canvas\");\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements); // hack fix until we decide whose responsibility this should be\n\n if (onlyExportingSingleFrame) {\n cfg.padding = 0;\n } // rescale padding based on current canvasScale factor so that the resulting\n // padding is kept the same as supplied by user (with the exception of\n // `cfg.scale` being set, which also scales the padding)\n\n\n const normalizedPadding = cfg.padding / canvasScale; // scale the whole frame by cfg.scale (on top of whatever canvasScale we\n // calculated above)\n\n canvasScale *= cfg.scale;\n width *= cfg.scale;\n height *= cfg.scale;\n canvas.width = width + cfg.padding * 2 * cfg.scale;\n canvas.height = height + cfg.padding * 2 * cfg.scale;\n const {\n imageCache\n } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_6__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_6__.getInitializedImageElements)(elements).map(element => element.fileId),\n files: files || {}\n }); // console.log(elements, width, height, cfg, canvasScale);\n // console.log(elements, width, height, cfg, canvasScale);\n\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderStaticScene)({\n elements,\n visibleElements: elements,\n appState: Object.assign(Object.assign({}, appState), {\n width,\n height,\n offsetLeft: 0,\n offsetTop: 0,\n scrollX: -x + normalizedPadding,\n scrollY: -y + normalizedPadding,\n zoom: {\n value: _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_ZOOM_VALUE\n },\n shouldCacheIgnoreZoom: false,\n theme: cfg.theme || _constants__WEBPACK_IMPORTED_MODULE_4__.THEME.LIGHT\n }),\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n canvas,\n scale: canvasScale,\n renderConfig: {\n canvasBackgroundColor: cfg.canvasBackgroundColor === false ? // null indicates transparent background\n null : cfg.canvasBackgroundColor || appState.viewBackgroundColor || _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_BACKGROUND_COLOR,\n imageCache,\n renderGrid: false,\n isExporting: true\n }\n });\n return canvas;\n});\nconst exportToSvg = (elements, appState, files, opts) => __awaiter(void 0, void 0, void 0, function* () {\n var _j, _k, _l;\n\n const {\n exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING,\n viewBackgroundColor,\n exportScale = 1,\n exportEmbedScene\n } = appState;\n let metadata = \"\";\n\n if (exportEmbedScene) {\n try {\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\n text: (opts === null || opts === void 0 ? void 0 : opts.serializeAsJSON) ? (_j = opts === null || opts === void 0 ? void 0 : opts.serializeAsJSON) === null || _j === void 0 ? void 0 : _j.call(opts) : (0,_data_json__WEBPACK_IMPORTED_MODULE_5__.serializeAsJSON)(elements, appState, files || {}, \"local\")\n });\n } catch (error) {\n console.error(error);\n }\n }\n\n let [minX, minY, width, height] = getCanvasSize(elements);\n width += exportPadding * 2;\n height += exportPadding * 2; // initialize SVG root\n\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\n svgRoot.setAttribute(\"version\", \"1.1\");\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\n\n if (appState.exportWithDarkMode) {\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\n }\n\n let assetPath = \"https://excalidraw.com/\"; // Asset path needs to be determined only when using package\n\n if (true) {\n assetPath = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\"@dwelle/excalidraw\"}@${({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_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\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@dwelle/excalidraw\",\"VITE_PKG_VERSION\":\"0.4.0-2e0b920\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).PKG_VERSION}`;\n\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\n }\n\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\n } // do not apply clipping when we're exporting the whole scene\n\n\n const isExportingWholeCanvas = ((_l = (_k = _Scene__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getScene(elements[0])) === null || _k === void 0 ? void 0 : _k.getNonDeletedElements()) === null || _l === void 0 ? void 0 : _l.length) === elements.length;\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n const offsetX = -minX + (onlyExportingSingleFrame ? 0 : exportPadding);\n const offsetY = -minY + (onlyExportingSingleFrame ? 0 : exportPadding);\n const exportingFrame = isExportingWholeCanvas || !onlyExportingSingleFrame ? undefined : elements.find(element => element.type === \"frame\");\n let exportingFrameClipPath = \"\";\n\n if (exportingFrame) {\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(exportingFrame);\n const cx = (x2 - x1) / 2 - (exportingFrame.x - x1);\n const cy = (y2 - y1) / 2 - (exportingFrame.y - y1);\n exportingFrameClipPath = `<clipPath id=${exportingFrame.id}>\n <rect transform=\"translate(${exportingFrame.x + offsetX} ${exportingFrame.y + offsetY}) rotate(${exportingFrame.angle} ${cx} ${cy})\"\n width=\"${exportingFrame.width}\"\n height=\"${exportingFrame.height}\"\n >\n </rect>\n </clipPath>`;\n }\n\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style class=\"style-fonts\">\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 ${exportingFrameClipPath}\n </defs>\n `; // render background rect\n\n if (appState.exportBackground && viewBackgroundColor) {\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n rect.setAttribute(\"width\", `${width}`);\n rect.setAttribute(\"height\", `${height}`);\n rect.setAttribute(\"fill\", viewBackgroundColor);\n svgRoot.appendChild(rect);\n }\n\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\n offsetX,\n offsetY,\n exportWithDarkMode: appState.exportWithDarkMode,\n exportingFrameId: (exportingFrame === null || exportingFrame === void 0 ? void 0 : exportingFrame.id) || null,\n renderEmbeddables: opts === null || opts === void 0 ? void 0 : opts.renderEmbeddables\n });\n return svgRoot;\n}); // calculate smallest area to fit the contents in\n\nconst getCanvasSize = elements => {\n // we should decide if we are exporting the whole canvas\n // if so, we are not clipping elements in the frame\n // and therefore, we should not do anything special\n var _a, _b;\n\n const isExportingWholeCanvas = ((_b = (_a = _Scene__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getScene(elements[0])) === null || _a === void 0 ? void 0 : _a.getNonDeletedElements()) === null || _b === void 0 ? void 0 : _b.length) === elements.length;\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n\n if (!isExportingWholeCanvas || onlyExportingSingleFrame) {\n const frames = elements.filter(element => element.type === \"frame\");\n const exportedFrameIds = frames.reduce((acc, frame) => {\n acc[frame.id] = true;\n return acc;\n }, {}); // elements in a frame do not affect the canvas size if we're not exporting\n // the whole canvas\n\n elements = elements.filter(element => {\n var _a;\n\n return !exportedFrameIds[(_a = element.frameId) !== null && _a !== void 0 ? _a : \"\"];\n });\n }\n\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX);\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY);\n return [minX, minY, width, height];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBOEMsdURBQWM7QUFDNUQsbUNBQW1DLGtFQUEwQjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxHQUFHO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSxtQ0FBbUMsZ0VBQWU7QUFDbEQsZ0JBQWdCLGdEQUFRO0FBQ3hCLGlCQUFpQixnREFBUTtBQUN6QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NjZW5lL2V4cG9ydC50cz8zZjRlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSB0aGlzICYmIHRoaXMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG4gICAgfVxuXG4gICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn07XG5cbmltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IGdldENvbW1vbkJvdW5kcywgZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzIH0gZnJvbSBcIi4uL2VsZW1lbnQvYm91bmRzXCI7XG5pbXBvcnQgeyByZW5kZXJTdGF0aWNTY2VuZSwgcmVuZGVyU2NlbmVUb1N2ZyB9IGZyb20gXCIuLi9yZW5kZXJlci9yZW5kZXJTY2VuZVwiO1xuaW1wb3J0IHsgZGlzdGFuY2UsIGlzT25seUV4cG9ydGluZ1NpbmdsZUZyYW1lIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsIERFRkFVTFRfRVhQT1JUX1BBRERJTkcsIERFRkFVTFRfWk9PTV9WQUxVRSwgRU5WLCBTVkdfTlMsIFRIRU1FLCBUSEVNRV9GSUxURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVBc0pTT04gfSBmcm9tIFwiLi4vZGF0YS9qc29uXCI7XG5pbXBvcnQgeyBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMsIHVwZGF0ZUltYWdlQ2FjaGUgfSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuaW1wb3J0IHsgcmVzdG9yZUFwcFN0YXRlIH0gZnJvbSBcIi4uL2RhdGEvcmVzdG9yZVwiO1xuaW1wb3J0IFNjZW5lIGZyb20gXCIuL1NjZW5lXCI7XG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcbi8qKlxuICogVGhpcyBBUEkgaXMgdXN1YWxseSB1c2VkIGFzIGEgcHJlY3Vyc29yIHRvIHNlYXJpYWxpemluZyB0byBCbG9iIG9yIFBORyxcbiAqIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBhIGNhbnZhcyBmb3Igb3RoZXIgcHVycG9zZXMuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gKHtcbiAgZGF0YSxcbiAgY29uZmlnXG59KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaDsgLy8gaW5pdGlhbGl6ZSBkZWZhdWx0c1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gIGNvbnN0IHtcbiAgICBlbGVtZW50cyxcbiAgICBmaWxlc1xuICB9ID0gZGF0YTtcbiAgY29uc3QgYXBwU3RhdGUgPSByZXN0b3JlQXBwU3RhdGUoZGF0YS5hcHBTdGF0ZSwgbnVsbCk7IC8vIGNsb25lXG5cbiAgY29uc3QgY2ZnID0gT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKTtcbiAgY2ZnLmZpdCA9IChfYSA9IGNmZy5maXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNmZy53aWR0aCAhPSBudWxsIHx8IGNmZy5oZWlnaHQgIT0gbnVsbCB8fCBjZmcubWF4V2lkdGhPckhlaWdodCAhPSBudWxsIHx8IGNmZy53aWR0aE9ySGVpZ2h0ICE9IG51bGwgPyBcImNvbnRhaW5cIiA6IFwibm9uZVwiO1xuICBjb25zdCBjb250YWluUGFkZGluZyA9IGNmZy5maXQgPT09IFwiY29udGFpblwiO1xuXG4gIGlmIChjZmcueCAhPSBudWxsIHx8IGNmZy54ICE9IG51bGwpIHtcbiAgICBjZmcuZml0ID0gXCJub25lXCI7XG4gIH1cblxuICBpZiAoY2ZnLmZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgaWYgKGNmZy5wYWRkaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuUFJPRFVDVElPTikge1xuICAgICAgY29uc29sZS53YXJuKFwiYHBhZGRpbmdgIGlzIGlnbm9yZWQgd2hlbiBgZml0YCBpcyBzZXQgdG8gYGNvdmVyYFwiKTtcbiAgICB9XG5cbiAgICBjZmcucGFkZGluZyA9IDA7XG4gIH1cblxuICBjZmcucGFkZGluZyA9IChfYiA9IGNmZy5wYWRkaW5nKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwO1xuICBjZmcuc2NhbGUgPSAoX2MgPSBjZmcuc2NhbGUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDE7XG4gIGNmZy5vcmlnaW4gPSAoX2QgPSBjZmcub3JpZ2luKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBcImNhbnZhc1wiO1xuICBjZmcucG9zaXRpb24gPSAoX2UgPSBjZmcucG9zaXRpb24pICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFwiY2VudGVyXCI7XG5cbiAgaWYgKGNmZy5tYXhXaWR0aE9ySGVpZ2h0ICE9IG51bGwgJiYgY2ZnLndpZHRoT3JIZWlnaHQgIT0gbnVsbCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gRU5WLlBST0RVQ1RJT04pIHtcbiAgICAgIGNvbnNvbGUud2FybihcImBtYXhXaWR0aE9ySGVpZ2h0YCBpcyBpZ25vcmVkIHdoZW4gYHdpZHRoT3JIZWlnaHRgIGlzIHNldFwiKTtcbiAgICB9XG5cbiAgICBjZmcubWF4V2lkdGhPckhlaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICgoY2ZnLm1heFdpZHRoT3JIZWlnaHQgIT0gbnVsbCB8fCBjZmcud2lkdGggIT0gbnVsbCB8fCBjZmcuaGVpZ2h0ICE9IG51bGwpICYmIGNmZy5nZXREaW1lbnNpb25zKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuUFJPRFVDVElPTikge1xuICAgICAgY29uc29sZS53YXJuKFwiYGdldERpbWVuc2lvbnNgIGlzIGlnbm9yZWQgd2hlbiBgd2lkdGhgLCBgaGVpZ2h0YCwgb3IgYG1heFdpZHRoT3JIZWlnaHRgIGlzIHNldFwiKTtcbiAgICB9XG5cbiAgICBjZmcuZ2V0RGltZW5zaW9ucyA9IHVuZGVmaW5lZDtcbiAgfSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gdmFsdWUgdXNlZCB0byBzY2FsZSB0aGUgY2FudmFzIGNvbnRleHQuIEJ5IGRlZmF1bHQsIHdlIHVzZSB0aGlzIHRvXG4gIC8vIG1ha2UgdGhlIGNhbnZhcyBmaXQgaW50byB0aGUgZnJhbWUgKGUuZy4gZm9yIGBjZmcuZml0YCBzZXQgdG8gYGNvbnRhaW5gKS5cbiAgLy8gSWYgYGNmZy5zY2FsZWAgaXMgc2V0LCB3ZSBtdWx0aXBseSB0aGUgcmVzdWx0aW5nIGNhbnZhc1NjYWxlIGJ5IGl0IHRvXG4gIC8vIHNjYWxlIHRoZSBvdXRwdXQgZnVydGhlci5cblxuXG4gIGxldCBjYW52YXNTY2FsZSA9IDE7XG4gIGNvbnN0IG9yaWdDYW52YXNTaXplID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cyk7IC8vIGNmZy54ID0gdW5kZWZpbmVkO1xuICAvLyBjZmcueSA9IHVuZGVmaW5lZDtcbiAgLy8gdmFyaWFibGVzIGZvciBvcmlnaW5hbCBjb250ZW50IGJvdW5kaW5nIGJveFxuXG4gIGNvbnN0IFtvcmlnWCwgb3JpZ1ksIG9yaWdXaWR0aCwgb3JpZ0hlaWdodF0gPSBvcmlnQ2FudmFzU2l6ZTsgLy8gdmFyaWFibGVzIGZvciB0YXJnZXQgYm91bmRpbmcgYm94XG5cbiAgbGV0IFt4LCB5LCB3aWR0aCwgaGVpZ2h0XSA9IG9yaWdDYW52YXNTaXplO1xuXG4gIGlmIChjZmcud2lkdGggIT0gbnVsbCkge1xuICAgIHdpZHRoID0gY2ZnLndpZHRoO1xuXG4gICAgaWYgKGNmZy5wYWRkaW5nICYmIGNvbnRhaW5QYWRkaW5nKSB7XG4gICAgICB3aWR0aCAtPSBjZmcucGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgaWYgKGNmZy5oZWlnaHQpIHtcbiAgICAgIGhlaWdodCA9IGNmZy5oZWlnaHQ7XG5cbiAgICAgIGlmIChjZmcucGFkZGluZyAmJiBjb250YWluUGFkZGluZykge1xuICAgICAgICBoZWlnaHQgLT0gY2ZnLnBhZGRpbmcgKiAyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBoZWlnaHQgbm90IHNwZWNpZmllZCwgc2NhbGUgdGhlIG9yaWdpbmFsIGhlaWdodCB0byBtYXRjaCB0aGUgbmV3XG4gICAgICAvLyB3aWR0aCB3aGlsZSBtYWludGFpbmluZyBhc3BlY3QgcmF0aW9cbiAgICAgIGhlaWdodCAqPSB3aWR0aCAvIG9yaWdXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2ZnLmhlaWdodCAhPSBudWxsKSB7XG4gICAgaGVpZ2h0ID0gY2ZnLmhlaWdodDtcblxuICAgIGlmIChjZmcucGFkZGluZyAmJiBjb250YWluUGFkZGluZykge1xuICAgICAgaGVpZ2h0IC09IGNmZy5wYWRkaW5nICogMjtcbiAgICB9IC8vIHdpZHRoIG5vdCBzcGVjaWZpZWQsIHNvIHNjYWxlIHRoZSBvcmlnaW5hbCB3aWR0aCB0byBtYXRjaCB0aGUgbmV3XG4gICAgLy8gaGVpZ2h0IHdoaWxlIG1haW50YWluaW5nIGFzcGVjdCByYXRpb1xuXG5cbiAgICB3aWR0aCAqPSBoZWlnaHQgLyBvcmlnSGVpZ2h0O1xuICB9XG5cbiAgaWYgKGNmZy5tYXhXaWR0aE9ySGVpZ2h0ICE9IG51bGwgfHwgY2ZnLndpZHRoT3JIZWlnaHQgIT0gbnVsbCkge1xuICAgIGlmIChjb250YWluUGFkZGluZyAmJiBjZmcucGFkZGluZykge1xuICAgICAgaWYgKGNmZy5tYXhXaWR0aE9ySGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgY2ZnLm1heFdpZHRoT3JIZWlnaHQgLT0gY2ZnLnBhZGRpbmcgKiAyO1xuICAgICAgfSBlbHNlIGlmIChjZmcud2lkdGhPckhlaWdodCAhPSBudWxsKSB7XG4gICAgICAgIGNmZy53aWR0aE9ySGVpZ2h0IC09IGNmZy5wYWRkaW5nICogMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtYXggPSBNYXRoLm1heCh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmIChjZmcud2lkdGhPckhlaWdodCAhPSBudWxsKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgYnkgaG93IG11Y2ggZG8gd2UgbmVlZCB0byBzY2FsZSB0aGUgY2FudmFzIHRvIGZpdCBpbnRvIHRoZVxuICAgICAgLy8gdGFyZ2V0IGRpbWVuc2lvbiAoZS5nLiB0YXJnZXQ6IG1heCA1MHB4LCBhY3R1YWw6IDcweDEwMHB4ID0+IHNjYWxlOiAwLjUpXG4gICAgICBjYW52YXNTY2FsZSA9IGNmZy53aWR0aE9ySGVpZ2h0IC8gbWF4O1xuICAgIH0gZWxzZSBpZiAoY2ZnLm1heFdpZHRoT3JIZWlnaHQgIT0gbnVsbCkge1xuICAgICAgY2FudmFzU2NhbGUgPSBjZmcubWF4V2lkdGhPckhlaWdodCA8IG1heCA/IGNmZy5tYXhXaWR0aE9ySGVpZ2h0IC8gbWF4IDogMTtcbiAgICB9XG5cbiAgICB3aWR0aCAqPSBjYW52YXNTY2FsZTtcbiAgICBoZWlnaHQgKj0gY2FudmFzU2NhbGU7XG4gIH0gZWxzZSBpZiAoY2ZnLmdldERpbWVuc2lvbnMpIHtcbiAgICBjb25zdCByZXQgPSBjZmcuZ2V0RGltZW5zaW9ucyh3aWR0aCwgaGVpZ2h0KTtcbiAgICB3aWR0aCA9IHJldC53aWR0aDtcbiAgICBoZWlnaHQgPSByZXQuaGVpZ2h0O1xuICAgIGNmZy5zY2FsZSA9IChfZiA9IHJldC5zY2FsZSkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogY2ZnLnNjYWxlO1xuICB9IGVsc2UgaWYgKGNvbnRhaW5QYWRkaW5nICYmIGNmZy5wYWRkaW5nICYmIGNmZy53aWR0aCA9PSBudWxsICYmIGNmZy5oZWlnaHQgPT0gbnVsbCkge1xuICAgIGNvbnN0IHdoUmF0aW8gPSB3aWR0aCAvIGhlaWdodDtcbiAgICB3aWR0aCAtPSBjZmcucGFkZGluZyAqIDI7XG4gICAgaGVpZ2h0IC09IGNmZy5wYWRkaW5nICogMiAvIHdoUmF0aW87XG4gIH1cblxuICBpZiAoY2ZnLmZpdCA9PT0gXCJjb250YWluXCIgJiYgIWNmZy5tYXhXaWR0aE9ySGVpZ2h0IHx8IGNvbnRhaW5QYWRkaW5nICYmIGNmZy5wYWRkaW5nKSB7XG4gICAgaWYgKGNmZy5maXQgPT09IFwiY29udGFpblwiKSB7XG4gICAgICBjb25zdCB3UmF0aW8gPSB3aWR0aCAvIG9yaWdXaWR0aDtcbiAgICAgIGNvbnN0IGhSYXRpbyA9IGhlaWdodCAvIG9yaWdIZWlnaHQ7IC8vIHNjYWxlIHRoZSBvcmlnIGNhbnZhcyB0byBmaXQgaW4gdGhlIHRhcmdldCBmcmFtZVxuXG4gICAgICBjYW52YXNTY2FsZSA9IE1hdGgubWluKHdSYXRpbywgaFJhdGlvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgd1JhdGlvID0gKHdpZHRoIC0gY2ZnLnBhZGRpbmcgKiAyKSAvIHdpZHRoO1xuICAgICAgY29uc3QgaFJhdGlvID0gKGhlaWdodCAtIGNmZy5wYWRkaW5nICogMikgLyBoZWlnaHQ7XG4gICAgICBjYW52YXNTY2FsZSA9IE1hdGgubWluKHdSYXRpbywgaFJhdGlvKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2ZnLmZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgY29uc3Qgd1JhdGlvID0gd2lkdGggLyBvcmlnV2lkdGg7XG4gICAgY29uc3QgaFJhdGlvID0gaGVpZ2h0IC8gb3JpZ0hlaWdodDsgLy8gc2NhbGUgdGhlIG9yaWcgY2FudmFzIHRvIGZpbGwgdGhlIHRoZSB0YXJnZXQgZnJhbWVcbiAgICAvLyAob3Bwb3NpdGUgb2YgXCJjb250YWluXCIpXG5cbiAgICBjYW52YXNTY2FsZSA9IE1hdGgubWF4KHdSYXRpbywgaFJhdGlvKTtcbiAgfVxuXG4gIHggPSAoX2cgPSBjZmcueCkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogb3JpZ1g7XG4gIHkgPSAoX2ggPSBjZmcueSkgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogb3JpZ1k7IC8vIGlmIHdlIHN3aXRjaCB0byBcImNvbnRlbnRcIiBjb29yZHMsIHdlIG5lZWQgdG8gb2Zmc2V0IGNmZy1zdXBwbGllZFxuICAvLyBjb29yZHMgYnkgdGhlIHgveSBvZiBjb250ZW50IGJvdW5kaW5nIGJveFxuXG4gIGlmIChjZmcub3JpZ2luID09PSBcImNvbnRlbnRcIikge1xuICAgIGlmIChjZmcueCAhPSBudWxsKSB7XG4gICAgICB4ICs9IG9yaWdYO1xuICAgIH1cblxuICAgIGlmIChjZmcueSAhPSBudWxsKSB7XG4gICAgICB5ICs9IG9yaWdZO1xuICAgIH1cbiAgfSAvLyBDZW50ZXJpbmcgdGhlIGNvbnRlbnQgdG8gdGhlIGZyYW1lLlxuICAvLyBXZSBkaXZpZGUgd2lkdGgvaGVpZ2h0IGJ5IGNhbnZhc1NjYWxlIHNvIHRoYXQgd2UgY2FsY3VsYXRlIGluIHRoZSBvcmlnaW5hbFxuICAvLyBhc3BlY3QgcmF0aW8gZGltZW5zaW9ucy5cblxuXG4gIGlmIChjZmcucG9zaXRpb24gPT09IFwiY2VudGVyXCIpIHtcbiAgICB4IC09IHdpZHRoIC8gY2FudmFzU2NhbGUgLyAyIC0gKGNmZy54ID09IG51bGwgPyBvcmlnV2lkdGggOiB3aWR0aCArIGNmZy5wYWRkaW5nICogMikgLyAyO1xuICAgIHkgLT0gaGVpZ2h0IC8gY2FudmFzU2NhbGUgLyAyIC0gKGNmZy55ID09IG51bGwgPyBvcmlnSGVpZ2h0IDogaGVpZ2h0ICsgY2ZnLnBhZGRpbmcgKiAyKSAvIDI7XG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBjZmcuY3JlYXRlQ2FudmFzID8gY2ZnLmNyZWF0ZUNhbnZhcygpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3Qgb25seUV4cG9ydGluZ1NpbmdsZUZyYW1lID0gaXNPbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUoZWxlbWVudHMpOyAvLyBoYWNrIGZpeCB1bnRpbCB3ZSBkZWNpZGUgd2hvc2UgcmVzcG9uc2liaWxpdHkgdGhpcyBzaG91bGQgYmVcblxuICBpZiAob25seUV4cG9ydGluZ1NpbmdsZUZyYW1lKSB7XG4gICAgY2ZnLnBhZGRpbmcgPSAwO1xuICB9IC8vIHJlc2NhbGUgcGFkZGluZyBiYXNlZCBvbiBjdXJyZW50IGNhbnZhc1NjYWxlIGZhY3RvciBzbyB0aGF0IHRoZSByZXN1bHRpbmdcbiAgLy8gcGFkZGluZyBpcyBrZXB0IHRoZSBzYW1lIGFzIHN1cHBsaWVkIGJ5IHVzZXIgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuICAvLyBgY2ZnLnNjYWxlYCBiZWluZyBzZXQsIHdoaWNoIGFsc28gc2NhbGVzIHRoZSBwYWRkaW5nKVxuXG5cbiAgY29uc3Qgbm9ybWFsaXplZFBhZGRpbmcgPSBjZmcucGFkZGluZyAvIGNhbnZhc1NjYWxlOyAvLyBzY2FsZSB0aGUgd2hvbGUgZnJhbWUgYnkgY2ZnLnNjYWxlIChvbiB0b3Agb2Ygd2hhdGV2ZXIgY2FudmFzU2NhbGUgd2VcbiAgLy8gY2FsY3VsYXRlZCBhYm92ZSlcblxuICBjYW52YXNTY2FsZSAqPSBjZmcuc2NhbGU7XG4gIHdpZHRoICo9IGNmZy5zY2FsZTtcbiAgaGVpZ2h0ICo9IGNmZy5zY2FsZTtcbiAgY2FudmFzLndpZHRoID0gd2lkdGggKyBjZmcucGFkZGluZyAqIDIgKiBjZmcuc2NhbGU7XG4gIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKyBjZmcucGFkZGluZyAqIDIgKiBjZmcuc2NhbGU7XG4gIGNvbnN0IHtcbiAgICBpbWFnZUNhY2hlXG4gIH0gPSB5aWVsZCB1cGRhdGVJbWFnZUNhY2hlKHtcbiAgICBpbWFnZUNhY2hlOiBuZXcgTWFwKCksXG4gICAgZmlsZUlkczogZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzKGVsZW1lbnRzKS5tYXAoZWxlbWVudCA9PiBlbGVtZW50LmZpbGVJZCksXG4gICAgZmlsZXM6IGZpbGVzIHx8IHt9XG4gIH0pOyAvLyBjb25zb2xlLmxvZyhlbGVtZW50cywgd2lkdGgsIGhlaWdodCwgY2ZnLCBjYW52YXNTY2FsZSk7XG4gIC8vIGNvbnNvbGUubG9nKGVsZW1lbnRzLCB3aWR0aCwgaGVpZ2h0LCBjZmcsIGNhbnZhc1NjYWxlKTtcblxuICByZW5kZXJTdGF0aWNTY2VuZSh7XG4gICAgZWxlbWVudHMsXG4gICAgdmlzaWJsZUVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBhcHBTdGF0ZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhcHBTdGF0ZSksIHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgb2Zmc2V0TGVmdDogMCxcbiAgICAgIG9mZnNldFRvcDogMCxcbiAgICAgIHNjcm9sbFg6IC14ICsgbm9ybWFsaXplZFBhZGRpbmcsXG4gICAgICBzY3JvbGxZOiAteSArIG5vcm1hbGl6ZWRQYWRkaW5nLFxuICAgICAgem9vbToge1xuICAgICAgICB2YWx1ZTogREVGQVVMVF9aT09NX1ZBTFVFXG4gICAgICB9LFxuICAgICAgc2hvdWxkQ2FjaGVJZ25vcmVab29tOiBmYWxzZSxcbiAgICAgIHRoZW1lOiBjZmcudGhlbWUgfHwgVEhFTUUuTElHSFRcbiAgICB9KSxcbiAgICByYzogcm91Z2guY2FudmFzKGNhbnZhcyksXG4gICAgY2FudmFzLFxuICAgIHNjYWxlOiBjYW52YXNTY2FsZSxcbiAgICByZW5kZXJDb25maWc6IHtcbiAgICAgIGNhbnZhc0JhY2tncm91bmRDb2xvcjogY2ZnLmNhbnZhc0JhY2tncm91bmRDb2xvciA9PT0gZmFsc2UgPyAvLyBudWxsIGluZGljYXRlcyB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kXG4gICAgICBudWxsIDogY2ZnLmNhbnZhc0JhY2tncm91bmRDb2xvciB8fCBhcHBTdGF0ZS52aWV3QmFja2dyb3VuZENvbG9yIHx8IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICAgIGltYWdlQ2FjaGUsXG4gICAgICByZW5kZXJHcmlkOiBmYWxzZSxcbiAgICAgIGlzRXhwb3J0aW5nOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNhbnZhcztcbn0pO1xuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMsIG9wdHMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICB2YXIgX2osIF9rLCBfbDtcblxuICBjb25zdCB7XG4gICAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gICAgdmlld0JhY2tncm91bmRDb2xvcixcbiAgICBleHBvcnRTY2FsZSA9IDEsXG4gICAgZXhwb3J0RW1iZWRTY2VuZVxuICB9ID0gYXBwU3RhdGU7XG4gIGxldCBtZXRhZGF0YSA9IFwiXCI7XG5cbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSB5aWVsZCAoeWllbGQgaW1wb3J0KFxuICAgICAgLyogd2VicGFja0NodW5rTmFtZTogXCJpbWFnZVwiICovXG4gICAgICBcIi4uLy4uL3NyYy9kYXRhL2ltYWdlXCIpKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIHRleHQ6IChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdHMuc2VyaWFsaXplQXNKU09OKSA/IChfaiA9IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5zZXJpYWxpemVBc0pTT04pID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5jYWxsKG9wdHMpIDogc2VyaWFsaXplQXNKU09OKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMgfHwge30sIFwibG9jYWxcIilcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBsZXQgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cyk7XG4gIHdpZHRoICs9IGV4cG9ydFBhZGRpbmcgKiAyO1xuICBoZWlnaHQgKz0gZXhwb3J0UGFkZGluZyAqIDI7IC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcblxuICBjb25zdCBzdmdSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJzdmdcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmVyc2lvblwiLCBcIjEuMVwiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBTVkdfTlMpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aCAqIGV4cG9ydFNjYWxlfWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHQgKiBleHBvcnRTY2FsZX1gKTtcblxuICBpZiAoYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlKSB7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJcIiwgVEhFTUVfRklMVEVSKTtcbiAgfVxuXG4gIGxldCBhc3NldFBhdGggPSBcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vXCI7IC8vIEFzc2V0IHBhdGggbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBvbmx5IHdoZW4gdXNpbmcgcGFja2FnZVxuXG4gIGlmIChwcm9jZXNzLmVudi5WSVRFX0lTX0VYQ0FMSURSQVdfTlBNX1BBQ0tBR0UpIHtcbiAgICBhc3NldFBhdGggPSB3aW5kb3cuRVhDQUxJRFJBV19BU1NFVF9QQVRIIHx8IGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlZJVEVfUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059YDtcblxuICAgIGlmIChhc3NldFBhdGggPT09IG51bGwgfHwgYXNzZXRQYXRoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhc3NldFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIGFzc2V0UGF0aCA9IGFzc2V0UGF0aC5yZXBsYWNlKFwiL1wiLCBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9gKTtcbiAgICB9XG5cbiAgICBhc3NldFBhdGggPSBgJHthc3NldFBhdGh9L2Rpc3QvZXhjYWxpZHJhdy1hc3NldHMvYDtcbiAgfSAvLyBkbyBub3QgYXBwbHkgY2xpcHBpbmcgd2hlbiB3ZSdyZSBleHBvcnRpbmcgdGhlIHdob2xlIHNjZW5lXG5cblxuICBjb25zdCBpc0V4cG9ydGluZ1dob2xlQ2FudmFzID0gKChfbCA9IChfayA9IFNjZW5lLmdldFNjZW5lKGVsZW1lbnRzWzBdKSkgPT09IG51bGwgfHwgX2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rLmdldE5vbkRlbGV0ZWRFbGVtZW50cygpKSA9PT0gbnVsbCB8fCBfbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2wubGVuZ3RoKSA9PT0gZWxlbWVudHMubGVuZ3RoO1xuICBjb25zdCBvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPSBpc09ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZShlbGVtZW50cyk7XG4gIGNvbnN0IG9mZnNldFggPSAtbWluWCArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyk7XG4gIGNvbnN0IG9mZnNldFkgPSAtbWluWSArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyk7XG4gIGNvbnN0IGV4cG9ydGluZ0ZyYW1lID0gaXNFeHBvcnRpbmdXaG9sZUNhbnZhcyB8fCAhb25seUV4cG9ydGluZ1NpbmdsZUZyYW1lID8gdW5kZWZpbmVkIDogZWxlbWVudHMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQudHlwZSA9PT0gXCJmcmFtZVwiKTtcbiAgbGV0IGV4cG9ydGluZ0ZyYW1lQ2xpcFBhdGggPSBcIlwiO1xuXG4gIGlmIChleHBvcnRpbmdGcmFtZSkge1xuICAgIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZXhwb3J0aW5nRnJhbWUpO1xuICAgIGNvbnN0IGN4ID0gKHgyIC0geDEpIC8gMiAtIChleHBvcnRpbmdGcmFtZS54IC0geDEpO1xuICAgIGNvbnN0IGN5ID0gKHkyIC0geTEpIC8gMiAtIChleHBvcnRpbmdGcmFtZS55IC0geTEpO1xuICAgIGV4cG9ydGluZ0ZyYW1lQ2xpcFBhdGggPSBgPGNsaXBQYXRoIGlkPSR7ZXhwb3J0aW5nRnJhbWUuaWR9PlxuICAgICAgICAgICAgPHJlY3QgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCR7ZXhwb3J0aW5nRnJhbWUueCArIG9mZnNldFh9ICR7ZXhwb3J0aW5nRnJhbWUueSArIG9mZnNldFl9KSByb3RhdGUoJHtleHBvcnRpbmdGcmFtZS5hbmdsZX0gJHtjeH0gJHtjeX0pXCJcbiAgICAgICAgICB3aWR0aD1cIiR7ZXhwb3J0aW5nRnJhbWUud2lkdGh9XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2V4cG9ydGluZ0ZyYW1lLmhlaWdodH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3JlY3Q+XG4gICAgICAgIDwvY2xpcFBhdGg+YDtcbiAgfVxuXG4gIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGUgY2xhc3M9XCJzdHlsZS1mb250c1wiPlxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlZpcmdpbFwiO1xuICAgICAgICBzcmM6IHVybChcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vVmlyZ2lsLndvZmYyXCIpO1xuICAgICAgfVxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkNhc2NhZGlhXCI7XG4gICAgICAgIHNyYzogdXJsKFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9DYXNjYWRpYS53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICAgICR7ZXhwb3J0aW5nRnJhbWVDbGlwUGF0aH1cbiAgPC9kZWZzPlxuICBgOyAvLyByZW5kZXIgYmFja2dyb3VuZCByZWN0XG5cbiAgaWYgKGFwcFN0YXRlLmV4cG9ydEJhY2tncm91bmQgJiYgdmlld0JhY2tncm91bmRDb2xvcikge1xuICAgIGNvbnN0IHJlY3QgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WCxcbiAgICBvZmZzZXRZLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlLFxuICAgIGV4cG9ydGluZ0ZyYW1lSWQ6IChleHBvcnRpbmdGcmFtZSA9PT0gbnVsbCB8fCBleHBvcnRpbmdGcmFtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhwb3J0aW5nRnJhbWUuaWQpIHx8IG51bGwsXG4gICAgcmVuZGVyRW1iZWRkYWJsZXM6IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5yZW5kZXJFbWJlZGRhYmxlc1xuICB9KTtcbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59KTsgLy8gY2FsY3VsYXRlIHNtYWxsZXN0IGFyZWEgdG8gZml0IHRoZSBjb250ZW50cyBpblxuXG5leHBvcnQgY29uc3QgZ2V0Q2FudmFzU2l6ZSA9IGVsZW1lbnRzID0+IHtcbiAgLy8gd2Ugc2hvdWxkIGRlY2lkZSBpZiB3ZSBhcmUgZXhwb3J0aW5nIHRoZSB3aG9sZSBjYW52YXNcbiAgLy8gaWYgc28sIHdlIGFyZSBub3QgY2xpcHBpbmcgZWxlbWVudHMgaW4gdGhlIGZyYW1lXG4gIC8vIGFuZCB0aGVyZWZvcmUsIHdlIHNob3VsZCBub3QgZG8gYW55dGhpbmcgc3BlY2lhbFxuICB2YXIgX2EsIF9iO1xuXG4gIGNvbnN0IGlzRXhwb3J0aW5nV2hvbGVDYW52YXMgPSAoKF9iID0gKF9hID0gU2NlbmUuZ2V0U2NlbmUoZWxlbWVudHNbMF0pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpID09PSBlbGVtZW50cy5sZW5ndGg7XG4gIGNvbnN0IG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSA9IGlzT25seUV4cG9ydGluZ1NpbmdsZUZyYW1lKGVsZW1lbnRzKTtcblxuICBpZiAoIWlzRXhwb3J0aW5nV2hvbGVDYW52YXMgfHwgb25seUV4cG9ydGluZ1NpbmdsZUZyYW1lKSB7XG4gICAgY29uc3QgZnJhbWVzID0gZWxlbWVudHMuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC50eXBlID09PSBcImZyYW1lXCIpO1xuICAgIGNvbnN0IGV4cG9ydGVkRnJhbWVJZHMgPSBmcmFtZXMucmVkdWNlKChhY2MsIGZyYW1lKSA9PiB7XG4gICAgICBhY2NbZnJhbWUuaWRdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pOyAvLyBlbGVtZW50cyBpbiBhIGZyYW1lIGRvIG5vdCBhZmZlY3QgdGhlIGNhbnZhcyBzaXplIGlmIHdlJ3JlIG5vdCBleHBvcnRpbmdcbiAgICAvLyB0aGUgd2hvbGUgY2FudmFzXG5cbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcihlbGVtZW50ID0+IHtcbiAgICAgIHZhciBfYTtcblxuICAgICAgcmV0dXJuICFleHBvcnRlZEZyYW1lSWRzWyhfYSA9IGVsZW1lbnQuZnJhbWVJZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJcIl07XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV0gPSBnZXRDb21tb25Cb3VuZHMoZWxlbWVudHMpO1xuICBjb25zdCB3aWR0aCA9IGRpc3RhbmNlKG1pblgsIG1heFgpO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKTtcbiAgcmV0dXJuIFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
|
|
4190
4190
|
|
|
4191
4191
|
/***/ }),
|
|
4192
4192
|
|