@excalidraw/excalidraw 0.17.5 → 0.17.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/excalidraw-assets-dev/{vendor-7857feed4fca7dd67386.js → vendor-39727f4653a274cf18f6.js} +2 -2
- package/dist/excalidraw-with-preact.development.js +5 -5
- package/dist/excalidraw-with-preact.production.min.js +1 -1
- package/dist/excalidraw.development.js +5 -5
- package/dist/excalidraw.production.min.js +1 -1
- package/package.json +1 -1
- package/types/element/embeddable.d.ts +1 -1
- package/types/packages/excalidraw/dist/excalidraw-assets-dev/vendor-39727f4653a274cf18f6.d.ts +0 -0
package/dist/excalidraw-assets-dev/{vendor-7857feed4fca7dd67386.js → vendor-39727f4653a274cf18f6.js}
RENAMED
|
@@ -95,7 +95,7 @@ eval("!function(e,t){ true?module.exports=t():0}(this,(function(){\"use strict\"
|
|
|
95
95
|
\**************************************************/
|
|
96
96
|
/***/ ((module, exports, __webpack_require__) => {
|
|
97
97
|
|
|
98
|
-
eval("/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = ({\"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\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.5\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"../../../node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIsWUFBWTtBQUNaLFlBQVk7QUFDWixpQkFBaUI7QUFDakIsZUFBZTtBQUNmLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNENBQTRDOztBQUV2RDtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sc3FDQUFXO0FBQ2pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFVOztBQUVuQyxPQUFPLFlBQVk7O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcz9mOGUyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/debug/src/browser.js\n");
|
|
98
|
+
eval("/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = ({\"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\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.6\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"../../../node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIsWUFBWTtBQUNaLFlBQVk7QUFDWixpQkFBaUI7QUFDakIsZUFBZTtBQUNmLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNENBQTRDOztBQUV2RDtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sc3FDQUFXO0FBQ2pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFVOztBQUVuQyxPQUFPLFlBQVk7O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcz9mOGUyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/debug/src/browser.js\n");
|
|
99
99
|
|
|
100
100
|
/***/ }),
|
|
101
101
|
|
|
@@ -7624,7 +7624,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
7624
7624
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
7625
7625
|
|
|
7626
7626
|
"use strict";
|
|
7627
|
-
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\n\nlet FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = ({\"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\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.
|
|
7627
|
+
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\n\nlet FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = ({\"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\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.6\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}) || 0);\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t),\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (!!~str.indexOf(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\t!!~this.has.indexOf(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ($);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tsZXVyL2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRWI7QUFDQTtBQUNBLElBQUksbURBQW1ELEVBQUUsc3FDQUFXLElBQUksQ0FBRTtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLGdCQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQixpQkFBaUIsTUFBTTtBQUN2Qiw2QkFBNkIsTUFBTTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9rbGV1ci9pbmRleC5tanM/MTcxMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmxldCBGT1JDRV9DT0xPUiwgTk9ERV9ESVNBQkxFX0NPTE9SUywgTk9fQ09MT1IsIFRFUk0sIGlzVFRZPXRydWU7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG5cdCh7IEZPUkNFX0NPTE9SLCBOT0RFX0RJU0FCTEVfQ09MT1JTLCBOT19DT0xPUiwgVEVSTSB9ID0gcHJvY2Vzcy5lbnYgfHwge30pO1xuXHRpc1RUWSA9IHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmlzVFRZO1xufVxuXG5jb25zdCAkID0ge1xuXHRlbmFibGVkOiAhTk9ERV9ESVNBQkxFX0NPTE9SUyAmJiBOT19DT0xPUiA9PSBudWxsICYmIFRFUk0gIT09ICdkdW1iJyAmJiAoXG5cdFx0Rk9SQ0VfQ09MT1IgIT0gbnVsbCAmJiBGT1JDRV9DT0xPUiAhPT0gJzAnIHx8IGlzVFRZXG5cdCksXG5cblx0Ly8gbW9kaWZpZXJzXG5cdHJlc2V0OiBpbml0KDAsIDApLFxuXHRib2xkOiBpbml0KDEsIDIyKSxcblx0ZGltOiBpbml0KDIsIDIyKSxcblx0aXRhbGljOiBpbml0KDMsIDIzKSxcblx0dW5kZXJsaW5lOiBpbml0KDQsIDI0KSxcblx0aW52ZXJzZTogaW5pdCg3LCAyNyksXG5cdGhpZGRlbjogaW5pdCg4LCAyOCksXG5cdHN0cmlrZXRocm91Z2g6IGluaXQoOSwgMjkpLFxuXG5cdC8vIGNvbG9yc1xuXHRibGFjazogaW5pdCgzMCwgMzkpLFxuXHRyZWQ6IGluaXQoMzEsIDM5KSxcblx0Z3JlZW46IGluaXQoMzIsIDM5KSxcblx0eWVsbG93OiBpbml0KDMzLCAzOSksXG5cdGJsdWU6IGluaXQoMzQsIDM5KSxcblx0bWFnZW50YTogaW5pdCgzNSwgMzkpLFxuXHRjeWFuOiBpbml0KDM2LCAzOSksXG5cdHdoaXRlOiBpbml0KDM3LCAzOSksXG5cdGdyYXk6IGluaXQoOTAsIDM5KSxcblx0Z3JleTogaW5pdCg5MCwgMzkpLFxuXG5cdC8vIGJhY2tncm91bmQgY29sb3JzXG5cdGJnQmxhY2s6IGluaXQoNDAsIDQ5KSxcblx0YmdSZWQ6IGluaXQoNDEsIDQ5KSxcblx0YmdHcmVlbjogaW5pdCg0MiwgNDkpLFxuXHRiZ1llbGxvdzogaW5pdCg0MywgNDkpLFxuXHRiZ0JsdWU6IGluaXQoNDQsIDQ5KSxcblx0YmdNYWdlbnRhOiBpbml0KDQ1LCA0OSksXG5cdGJnQ3lhbjogaW5pdCg0NiwgNDkpLFxuXHRiZ1doaXRlOiBpbml0KDQ3LCA0OSlcbn07XG5cbmZ1bmN0aW9uIHJ1bihhcnIsIHN0cikge1xuXHRsZXQgaT0wLCB0bXAsIGJlZz0nJywgZW5kPScnO1xuXHRmb3IgKDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdHRtcCA9IGFycltpXTtcblx0XHRiZWcgKz0gdG1wLm9wZW47XG5cdFx0ZW5kICs9IHRtcC5jbG9zZTtcblx0XHRpZiAoISF+c3RyLmluZGV4T2YodG1wLmNsb3NlKSkge1xuXHRcdFx0c3RyID0gc3RyLnJlcGxhY2UodG1wLnJneCwgdG1wLmNsb3NlICsgdG1wLm9wZW4pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYmVnICsgc3RyICsgZW5kO1xufVxuXG5mdW5jdGlvbiBjaGFpbihoYXMsIGtleXMpIHtcblx0bGV0IGN0eCA9IHsgaGFzLCBrZXlzIH07XG5cblx0Y3R4LnJlc2V0ID0gJC5yZXNldC5iaW5kKGN0eCk7XG5cdGN0eC5ib2xkID0gJC5ib2xkLmJpbmQoY3R4KTtcblx0Y3R4LmRpbSA9ICQuZGltLmJpbmQoY3R4KTtcblx0Y3R4Lml0YWxpYyA9ICQuaXRhbGljLmJpbmQoY3R4KTtcblx0Y3R4LnVuZGVybGluZSA9ICQudW5kZXJsaW5lLmJpbmQoY3R4KTtcblx0Y3R4LmludmVyc2UgPSAkLmludmVyc2UuYmluZChjdHgpO1xuXHRjdHguaGlkZGVuID0gJC5oaWRkZW4uYmluZChjdHgpO1xuXHRjdHguc3RyaWtldGhyb3VnaCA9ICQuc3RyaWtldGhyb3VnaC5iaW5kKGN0eCk7XG5cblx0Y3R4LmJsYWNrID0gJC5ibGFjay5iaW5kKGN0eCk7XG5cdGN0eC5yZWQgPSAkLnJlZC5iaW5kKGN0eCk7XG5cdGN0eC5ncmVlbiA9ICQuZ3JlZW4uYmluZChjdHgpO1xuXHRjdHgueWVsbG93ID0gJC55ZWxsb3cuYmluZChjdHgpO1xuXHRjdHguYmx1ZSA9ICQuYmx1ZS5iaW5kKGN0eCk7XG5cdGN0eC5tYWdlbnRhID0gJC5tYWdlbnRhLmJpbmQoY3R4KTtcblx0Y3R4LmN5YW4gPSAkLmN5YW4uYmluZChjdHgpO1xuXHRjdHgud2hpdGUgPSAkLndoaXRlLmJpbmQoY3R4KTtcblx0Y3R4LmdyYXkgPSAkLmdyYXkuYmluZChjdHgpO1xuXHRjdHguZ3JleSA9ICQuZ3JleS5iaW5kKGN0eCk7XG5cblx0Y3R4LmJnQmxhY2sgPSAkLmJnQmxhY2suYmluZChjdHgpO1xuXHRjdHguYmdSZWQgPSAkLmJnUmVkLmJpbmQoY3R4KTtcblx0Y3R4LmJnR3JlZW4gPSAkLmJnR3JlZW4uYmluZChjdHgpO1xuXHRjdHguYmdZZWxsb3cgPSAkLmJnWWVsbG93LmJpbmQoY3R4KTtcblx0Y3R4LmJnQmx1ZSA9ICQuYmdCbHVlLmJpbmQoY3R4KTtcblx0Y3R4LmJnTWFnZW50YSA9ICQuYmdNYWdlbnRhLmJpbmQoY3R4KTtcblx0Y3R4LmJnQ3lhbiA9ICQuYmdDeWFuLmJpbmQoY3R4KTtcblx0Y3R4LmJnV2hpdGUgPSAkLmJnV2hpdGUuYmluZChjdHgpO1xuXG5cdHJldHVybiBjdHg7XG59XG5cbmZ1bmN0aW9uIGluaXQob3BlbiwgY2xvc2UpIHtcblx0bGV0IGJsayA9IHtcblx0XHRvcGVuOiBgXFx4MWJbJHtvcGVufW1gLFxuXHRcdGNsb3NlOiBgXFx4MWJbJHtjbG9zZX1tYCxcblx0XHRyZ3g6IG5ldyBSZWdFeHAoYFxcXFx4MWJcXFxcWyR7Y2xvc2V9bWAsICdnJylcblx0fTtcblx0cmV0dXJuIGZ1bmN0aW9uICh0eHQpIHtcblx0XHRpZiAodGhpcyAhPT0gdm9pZCAwICYmIHRoaXMuaGFzICE9PSB2b2lkIDApIHtcblx0XHRcdCEhfnRoaXMuaGFzLmluZGV4T2Yob3BlbikgfHwgKHRoaXMuaGFzLnB1c2gob3BlbiksdGhpcy5rZXlzLnB1c2goYmxrKSk7XG5cdFx0XHRyZXR1cm4gdHh0ID09PSB2b2lkIDAgPyB0aGlzIDogJC5lbmFibGVkID8gcnVuKHRoaXMua2V5cywgdHh0KycnKSA6IHR4dCsnJztcblx0XHR9XG5cdFx0cmV0dXJuIHR4dCA9PT0gdm9pZCAwID8gY2hhaW4oW29wZW5dLCBbYmxrXSkgOiAkLmVuYWJsZWQgPyBydW4oW2Jsa10sIHR4dCsnJykgOiB0eHQrJyc7XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0ICQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/kleur/index.mjs\n");
|
|
7628
7628
|
|
|
7629
7629
|
/***/ }),
|
|
7630
7630
|
|
|
@@ -2419,7 +2419,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2419
2419
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2420
2420
|
|
|
2421
2421
|
"use strict";
|
|
2422
|
-
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\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.
|
|
2422
|
+
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\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.6\",\"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QyxvQ0FBb0MsZ0NBQWdDOztBQUVwRSx5Q0FBeUMsc3FDQUFXO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2FuYWx5dGljcy50cz81NDIxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB0cmFja0V2ZW50ID0gKGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSkgPT4ge1xuICB0cnkge1xuICAgIC8vIHBsYWNlIGhlcmUgY2F0ZWdvcmllcyB0aGF0IHlvdSB3YW50IHRvIHRyYWNrIGFzIGV2ZW50c1xuICAgIC8vIEtFRVAgSU4gTUlORCBUSEUgUFJJQ0lOR1xuICAgIGNvbnN0IEFMTE9XRURfQ0FURUdPUklFU19UT19UUkFDSyA9IFtdOyAvLyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byB0cmFjayBsb2NhbGx5XG4gICAgLy8gY29uc29sZS5sb2coXCJUcmFjayBFdmVudFwiLCB7IGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSB9KTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8IHByb2Nlc3MuZW52LlZJVEVfV09SS0VSX0lEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFBTExPV0VEX0NBVEVHT1JJRVNfVE9fVFJBQ0suaW5jbHVkZXMoY2F0ZWdvcnkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5zYV9ldmVudCkge1xuICAgICAgd2luZG93LnNhX2V2ZW50KGFjdGlvbiwge1xuICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcImVycm9yIGR1cmluZyBhbmFseXRpY3NcIiwgZXJyb3IpO1xuICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
|
|
2423
2423
|
|
|
2424
2424
|
/***/ }),
|
|
2425
2425
|
|
|
@@ -3904,7 +3904,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
3904
3904
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
3905
3905
|
|
|
3906
3906
|
"use strict";
|
|
3907
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionSetEmbeddableAsActiveTool\": () => (/* binding */ actionSetEmbeddableAsActiveTool),\n/* harmony export */ \"createPlaceholderEmbeddableLabel\": () => (/* binding */ createPlaceholderEmbeddableLabel),\n/* harmony export */ \"embeddableURLValidator\": () => (/* binding */ embeddableURLValidator),\n/* harmony export */ \"extractSrc\": () => (/* binding */ extractSrc),\n/* harmony export */ \"getEmbedLink\": () => (/* binding */ getEmbedLink),\n/* harmony export */ \"isEmbeddableOrLabel\": () => (/* binding */ isEmbeddableOrLabel)\n/* harmony export */ });\n/* harmony import */ var _actions_register__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../actions/register */ \"../../actions/register.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _cursor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../cursor */ \"../../cursor.ts\");\n/* harmony import */ var _newElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _textElement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _typeChecks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _data_url__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../data/url */ \"../../data/url.ts\");\n\n\n\n\n\n\n\n\n\nconst embeddedLinkCache = new Map();\nconst RE_YOUTUBE = /^(?:http(?:s)?:\\/\\/)?(?:www\\.)?youtu(?:be\\.com|\\.be)\\/(embed\\/|watch\\?v=|shorts\\/|playlist\\?list=|embed\\/videoseries\\?list=)?([a-zA-Z0-9_-]+)(?:\\?t=|&t=|\\?start=|&start=)?([a-zA-Z0-9_-]+)?[^\\s]*$/;\nconst RE_VIMEO = /^(?:http(?:s)?:\\/\\/)?(?:(?:w){3}\\.)?(?:player\\.)?vimeo\\.com\\/(?:video\\/)?([^?\\s]+)(?:\\?.*)?$/;\nconst RE_FIGMA = /^https:\\/\\/(?:www\\.)?figma\\.com/;\nconst RE_GH_GIST = /^https:\\/\\/gist\\.github\\.com\\/([\\w_-]+)\\/([\\w_-]+)/;\nconst RE_GH_GIST_EMBED = /^<script[\\s\\S]*?\\ssrc=[\"'](https:\\/\\/gist\\.github\\.com\\/.*?)\\.js[\"']/i; // not anchored to start to allow <blockquote> twitter embeds\n\nconst RE_TWITTER = /(?:https?:\\/\\/)?(?:(?:w){3}\\.)?(?:twitter|x)\\.com\\/[^/]+\\/status\\/(\\d+)/;\nconst RE_TWITTER_EMBED = /^<blockquote[\\s\\S]*?\\shref=[\"'](https?:\\/\\/(?:twitter|x)\\.com\\/[^\"']*)/i;\nconst RE_VALTOWN = /^https:\\/\\/(?:www\\.)?val\\.town\\/(v|embed)\\/[a-zA-Z_$][0-9a-zA-Z_$]+\\.[a-zA-Z_$][0-9a-zA-Z_$]+/;\nconst RE_GENERIC_EMBED = /^<(?:iframe|blockquote)[\\s\\S]*?\\s(?:src|href)=[\"']([^\"']*)[\"'][\\s\\S]*?>$/i;\nconst RE_GIPHY = /giphy.com\\/(?:clips|embed|gifs)\\/[a-zA-Z0-9]*?-?([a-zA-Z0-9]+)(?:[^a-zA-Z0-9]|$)/;\nconst ALLOWED_DOMAINS = new Set([\"youtube.com\", \"youtu.be\", \"vimeo.com\", \"player.vimeo.com\", \"figma.com\", \"link.excalidraw.com\", \"gist.github.com\", \"twitter.com\", \"*.simplepdf.eu\", \"stackblitz.com\", \"val.town\", \"giphy.com\", \"dddice.com\"]);\n\nconst createSrcDoc = body => {\n return `<html><body>${body}</body></html>`;\n};\n\nconst getEmbedLink = link => {\n if (!link) {\n return null;\n }\n\n if (embeddedLinkCache.has(link)) {\n return embeddedLinkCache.get(link);\n }\n\n const originalLink = link;\n let type = \"generic\";\n let aspectRatio = {\n w: 560,\n h: 840\n };\n const ytLink = link.match(RE_YOUTUBE);\n\n if (ytLink === null || ytLink === void 0 ? void 0 : ytLink[2]) {\n const time = ytLink[3] ? `&start=${ytLink[3]}` : ``;\n const isPortrait = link.includes(\"shorts\");\n type = \"video\";\n\n switch (ytLink[1]) {\n case \"embed/\":\n case \"watch?v=\":\n case \"shorts/\":\n link = `https://www.youtube.com/embed/${ytLink[2]}?enablejsapi=1${time}`;\n break;\n\n case \"playlist?list=\":\n case \"embed/videoseries?list=\":\n link = `https://www.youtube.com/embed/videoseries?list=${ytLink[2]}&enablejsapi=1${time}`;\n break;\n\n default:\n link = `https://www.youtube.com/embed/${ytLink[2]}?enablejsapi=1${time}`;\n break;\n }\n\n aspectRatio = isPortrait ? {\n w: 315,\n h: 560\n } : {\n w: 560,\n h: 315\n };\n embeddedLinkCache.set(originalLink, {\n link,\n aspectRatio,\n type\n });\n return {\n link,\n aspectRatio,\n type\n };\n }\n\n const vimeoLink = link.match(RE_VIMEO);\n\n if (vimeoLink === null || vimeoLink === void 0 ? void 0 : vimeoLink[1]) {\n const target = vimeoLink === null || vimeoLink === void 0 ? void 0 : vimeoLink[1];\n const warning = !/^\\d+$/.test(target) ? (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toast.unrecognizedLinkFormat\") : undefined;\n type = \"video\";\n link = `https://player.vimeo.com/video/${target}?api=1`;\n aspectRatio = {\n w: 560,\n h: 315\n }; //warning deliberately ommited so it is displayed only once per link\n //same link next time will be served from cache\n\n embeddedLinkCache.set(originalLink, {\n link,\n aspectRatio,\n type\n });\n return {\n link,\n aspectRatio,\n type,\n warning\n };\n }\n\n const figmaLink = link.match(RE_FIGMA);\n\n if (figmaLink) {\n type = \"generic\";\n link = `https://www.figma.com/embed?embed_host=share&url=${encodeURIComponent(link)}`;\n aspectRatio = {\n w: 550,\n h: 550\n };\n embeddedLinkCache.set(originalLink, {\n link,\n aspectRatio,\n type\n });\n return {\n link,\n aspectRatio,\n type\n };\n }\n\n const valLink = link.match(RE_VALTOWN);\n\n if (valLink) {\n link = valLink[1] === \"embed\" ? valLink[0] : valLink[0].replace(\"/v\", \"/embed\");\n embeddedLinkCache.set(originalLink, {\n link,\n aspectRatio,\n type\n });\n return {\n link,\n aspectRatio,\n type\n };\n }\n\n if (RE_TWITTER.test(link)) {\n const postId = link.match(RE_TWITTER)[1]; // the embed srcdoc still supports twitter.com domain only.\n // Note that we don't attempt to parse the username as it can consist of\n // non-latin1 characters, and the username in the url can be set to anything\n // without affecting the embed.\n\n const safeURL = (0,_data_url__WEBPACK_IMPORTED_MODULE_8__.sanitizeHTMLAttribute)(`https://twitter.com/x/status/${postId}`);\n const ret = {\n type: \"document\",\n srcdoc: theme => createSrcDoc(`<blockquote class=\"twitter-tweet\" data-dnt=\"true\" data-theme=\"${theme}\"><a href=\"${safeURL}\"></a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>`),\n aspectRatio: {\n w: 480,\n h: 480\n },\n sandbox: {\n allowSameOrigin: true\n }\n };\n embeddedLinkCache.set(originalLink, ret);\n return ret;\n }\n\n if (RE_GH_GIST.test(link)) {\n const [, user, gistId] = link.match(RE_GH_GIST);\n const safeURL = (0,_data_url__WEBPACK_IMPORTED_MODULE_8__.sanitizeHTMLAttribute)(`https://gist.github.com/${user}/${gistId}`);\n const ret = {\n type: \"document\",\n srcdoc: () => createSrcDoc(`\n <script src=\"${safeURL}.js\"></script>\n <style type=\"text/css\">\n * { margin: 0px; }\n table, .gist { height: 100%; }\n .gist .gist-file { height: calc(100vh - 2px); padding: 0px; display: grid; grid-template-rows: 1fr auto; }\n </style>\n `),\n aspectRatio: {\n w: 550,\n h: 720\n }\n };\n embeddedLinkCache.set(link, ret);\n return ret;\n }\n\n embeddedLinkCache.set(link, {\n link,\n aspectRatio,\n type\n });\n return {\n link,\n aspectRatio,\n type\n };\n};\nconst isEmbeddableOrLabel = element => {\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_7__.isEmbeddableElement)(element)) {\n return true;\n }\n\n if (element.type === \"text\") {\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getContainerElement)(element);\n\n if (container && (0,_typeChecks__WEBPACK_IMPORTED_MODULE_7__.isEmbeddableElement)(container)) {\n return true;\n }\n }\n\n return false;\n};\nconst createPlaceholderEmbeddableLabel = element => {\n var _a;\n\n const text = !element.link || (element === null || element === void 0 ? void 0 : element.link) === \"\" ? \"Empty Web-Embed\" : element.link;\n const fontSize = Math.max(Math.min(element.width / 2, element.width / text.length), element.width / 30);\n const fontFamily = _constants__WEBPACK_IMPORTED_MODULE_1__.FONT_FAMILY.Helvetica;\n const fontString = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getFontString)({\n fontSize,\n fontFamily\n });\n return (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.newTextElement)({\n x: element.x + element.width / 2,\n y: element.y + element.height / 2,\n strokeColor: element.strokeColor !== \"transparent\" ? element.strokeColor : \"black\",\n backgroundColor: \"transparent\",\n fontFamily,\n fontSize,\n text: (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.wrapText)(text, fontString, element.width - 20),\n textAlign: \"center\",\n verticalAlign: _constants__WEBPACK_IMPORTED_MODULE_1__.VERTICAL_ALIGN.MIDDLE,\n angle: (_a = element.angle) !== null && _a !== void 0 ? _a : 0\n });\n};\nconst actionSetEmbeddableAsActiveTool = (0,_actions_register__WEBPACK_IMPORTED_MODULE_0__.register)({\n name: \"setEmbeddableAsActiveTool\",\n trackEvent: {\n category: \"toolbar\"\n },\n perform: (elements, appState, _, app) => {\n const nextActiveTool = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.updateActiveTool)(appState, {\n type: \"embeddable\"\n });\n (0,_cursor__WEBPACK_IMPORTED_MODULE_4__.setCursorForShape)(app.canvas, Object.assign(Object.assign({}, appState), {\n activeTool: nextActiveTool\n }));\n return {\n elements,\n appState: Object.assign(Object.assign({}, appState), {\n activeTool: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.updateActiveTool)(appState, {\n type: \"embeddable\"\n })\n }),\n commitToHistory: false\n };\n }\n});\n\nconst validateHostname = (url,\n/** using a Set assumes it already contains normalized bare domains */\nallowedHostnames) => {\n try {\n const {\n hostname\n } = new URL(url);\n const bareDomain = hostname.replace(/^www\\./, \"\");\n const bareDomainWithFirstSubdomainWildcarded = bareDomain.replace(/^([^.]+)/, \"*\");\n\n if (allowedHostnames instanceof Set) {\n return ALLOWED_DOMAINS.has(bareDomain) || ALLOWED_DOMAINS.has(bareDomainWithFirstSubdomainWildcarded);\n }\n\n if (bareDomain === allowedHostnames.replace(/^www\\./, \"\")) {\n return true;\n }\n } catch (error) {// ignore\n }\n\n return false;\n};\n\nconst extractSrc = htmlString => {\n const twitterMatch = htmlString.match(RE_TWITTER_EMBED);\n\n if (twitterMatch && twitterMatch.length === 2) {\n return twitterMatch[1];\n }\n\n const gistMatch = htmlString.match(RE_GH_GIST_EMBED);\n\n if (gistMatch && gistMatch.length === 2) {\n return gistMatch[1];\n }\n\n if (RE_GIPHY.test(htmlString)) {\n return `https://giphy.com/embed/${RE_GIPHY.exec(htmlString)[1]}`;\n }\n\n const match = htmlString.match(RE_GENERIC_EMBED);\n\n if (match && match.length === 2) {\n return match[1];\n }\n\n return htmlString;\n};\nconst embeddableURLValidator = (url, validateEmbeddable) => {\n if (!url) {\n return false;\n }\n\n if (validateEmbeddable != null) {\n if (typeof validateEmbeddable === \"function\") {\n const ret = validateEmbeddable(url); // if return value is undefined, leave validation to default\n\n if (typeof ret === \"boolean\") {\n return ret;\n }\n } else if (typeof validateEmbeddable === \"boolean\") {\n return validateEmbeddable;\n } else if (validateEmbeddable instanceof RegExp) {\n return validateEmbeddable.test(url);\n } else if (Array.isArray(validateEmbeddable)) {\n for (const domain of validateEmbeddable) {\n if (domain instanceof RegExp) {\n if (url.match(domain)) {\n return true;\n }\n } else if (validateHostname(url, domain)) {\n return true;\n }\n }\n\n return false;\n }\n }\n\n return validateHostname(url, ALLOWED_DOMAINS);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFLO0FBQ0w7QUFDQTtBQUNBLDhDQUE4QztBQUM5QyxvQkFBb0Isd0RBQWdCO0FBQ3BDO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7O0FBRUE7QUFDQTs7QUFFTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0MsNkJBQTZCO0FBQ25FOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2VsZW1lbnQvZW1iZWRkYWJsZS50cz9iZjkzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvcmVnaXN0ZXJcIjtcbmltcG9ydCB7IEZPTlRfRkFNSUxZLCBWRVJUSUNBTF9BTElHTiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgZ2V0Rm9udFN0cmluZywgdXBkYXRlQWN0aXZlVG9vbCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgc2V0Q3Vyc29yRm9yU2hhcGUgfSBmcm9tIFwiLi4vY3Vyc29yXCI7XG5pbXBvcnQgeyBuZXdUZXh0RWxlbWVudCB9IGZyb20gXCIuL25ld0VsZW1lbnRcIjtcbmltcG9ydCB7IGdldENvbnRhaW5lckVsZW1lbnQsIHdyYXBUZXh0IH0gZnJvbSBcIi4vdGV4dEVsZW1lbnRcIjtcbmltcG9ydCB7IGlzRW1iZWRkYWJsZUVsZW1lbnQgfSBmcm9tIFwiLi90eXBlQ2hlY2tzXCI7XG5pbXBvcnQgeyBzYW5pdGl6ZUhUTUxBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vZGF0YS91cmxcIjtcbmNvbnN0IGVtYmVkZGVkTGlua0NhY2hlID0gbmV3IE1hcCgpO1xuY29uc3QgUkVfWU9VVFVCRSA9IC9eKD86aHR0cCg/OnMpPzpcXC9cXC8pPyg/Ond3d1xcLik/eW91dHUoPzpiZVxcLmNvbXxcXC5iZSlcXC8oZW1iZWRcXC98d2F0Y2hcXD92PXxzaG9ydHNcXC98cGxheWxpc3RcXD9saXN0PXxlbWJlZFxcL3ZpZGVvc2VyaWVzXFw/bGlzdD0pPyhbYS16QS1aMC05Xy1dKykoPzpcXD90PXwmdD18XFw/c3RhcnQ9fCZzdGFydD0pPyhbYS16QS1aMC05Xy1dKyk/W15cXHNdKiQvO1xuY29uc3QgUkVfVklNRU8gPSAvXig/Omh0dHAoPzpzKT86XFwvXFwvKT8oPzooPzp3KXszfVxcLik/KD86cGxheWVyXFwuKT92aW1lb1xcLmNvbVxcLyg/OnZpZGVvXFwvKT8oW14/XFxzXSspKD86XFw/LiopPyQvO1xuY29uc3QgUkVfRklHTUEgPSAvXmh0dHBzOlxcL1xcLyg/Ond3d1xcLik/ZmlnbWFcXC5jb20vO1xuY29uc3QgUkVfR0hfR0lTVCA9IC9eaHR0cHM6XFwvXFwvZ2lzdFxcLmdpdGh1YlxcLmNvbVxcLyhbXFx3Xy1dKylcXC8oW1xcd18tXSspLztcbmNvbnN0IFJFX0dIX0dJU1RfRU1CRUQgPSAvXjxzY3JpcHRbXFxzXFxTXSo/XFxzc3JjPVtcIiddKGh0dHBzOlxcL1xcL2dpc3RcXC5naXRodWJcXC5jb21cXC8uKj8pXFwuanNbXCInXS9pOyAvLyBub3QgYW5jaG9yZWQgdG8gc3RhcnQgdG8gYWxsb3cgPGJsb2NrcXVvdGU+IHR3aXR0ZXIgZW1iZWRzXG5cbmNvbnN0IFJFX1RXSVRURVIgPSAvKD86aHR0cHM/OlxcL1xcLyk/KD86KD86dyl7M31cXC4pPyg/OnR3aXR0ZXJ8eClcXC5jb21cXC9bXi9dK1xcL3N0YXR1c1xcLyhcXGQrKS87XG5jb25zdCBSRV9UV0lUVEVSX0VNQkVEID0gL148YmxvY2txdW90ZVtcXHNcXFNdKj9cXHNocmVmPVtcIiddKGh0dHBzPzpcXC9cXC8oPzp0d2l0dGVyfHgpXFwuY29tXFwvW15cIiddKikvaTtcbmNvbnN0IFJFX1ZBTFRPV04gPSAvXmh0dHBzOlxcL1xcLyg/Ond3d1xcLik/dmFsXFwudG93blxcLyh2fGVtYmVkKVxcL1thLXpBLVpfJF1bMC05YS16QS1aXyRdK1xcLlthLXpBLVpfJF1bMC05YS16QS1aXyRdKy87XG5jb25zdCBSRV9HRU5FUklDX0VNQkVEID0gL148KD86aWZyYW1lfGJsb2NrcXVvdGUpW1xcc1xcU10qP1xccyg/OnNyY3xocmVmKT1bXCInXShbXlwiJ10qKVtcIiddW1xcc1xcU10qPz4kL2k7XG5jb25zdCBSRV9HSVBIWSA9IC9naXBoeS5jb21cXC8oPzpjbGlwc3xlbWJlZHxnaWZzKVxcL1thLXpBLVowLTldKj8tPyhbYS16QS1aMC05XSspKD86W15hLXpBLVowLTldfCQpLztcbmNvbnN0IEFMTE9XRURfRE9NQUlOUyA9IG5ldyBTZXQoW1wieW91dHViZS5jb21cIiwgXCJ5b3V0dS5iZVwiLCBcInZpbWVvLmNvbVwiLCBcInBsYXllci52aW1lby5jb21cIiwgXCJmaWdtYS5jb21cIiwgXCJsaW5rLmV4Y2FsaWRyYXcuY29tXCIsIFwiZ2lzdC5naXRodWIuY29tXCIsIFwidHdpdHRlci5jb21cIiwgXCIqLnNpbXBsZXBkZi5ldVwiLCBcInN0YWNrYmxpdHouY29tXCIsIFwidmFsLnRvd25cIiwgXCJnaXBoeS5jb21cIiwgXCJkZGRpY2UuY29tXCJdKTtcblxuY29uc3QgY3JlYXRlU3JjRG9jID0gYm9keSA9PiB7XG4gIHJldHVybiBgPGh0bWw+PGJvZHk+JHtib2R5fTwvYm9keT48L2h0bWw+YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbWJlZExpbmsgPSBsaW5rID0+IHtcbiAgaWYgKCFsaW5rKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoZW1iZWRkZWRMaW5rQ2FjaGUuaGFzKGxpbmspKSB7XG4gICAgcmV0dXJuIGVtYmVkZGVkTGlua0NhY2hlLmdldChsaW5rKTtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsTGluayA9IGxpbms7XG4gIGxldCB0eXBlID0gXCJnZW5lcmljXCI7XG4gIGxldCBhc3BlY3RSYXRpbyA9IHtcbiAgICB3OiA1NjAsXG4gICAgaDogODQwXG4gIH07XG4gIGNvbnN0IHl0TGluayA9IGxpbmsubWF0Y2goUkVfWU9VVFVCRSk7XG5cbiAgaWYgKHl0TGluayA9PT0gbnVsbCB8fCB5dExpbmsgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHl0TGlua1syXSkge1xuICAgIGNvbnN0IHRpbWUgPSB5dExpbmtbM10gPyBgJnN0YXJ0PSR7eXRMaW5rWzNdfWAgOiBgYDtcbiAgICBjb25zdCBpc1BvcnRyYWl0ID0gbGluay5pbmNsdWRlcyhcInNob3J0c1wiKTtcbiAgICB0eXBlID0gXCJ2aWRlb1wiO1xuXG4gICAgc3dpdGNoICh5dExpbmtbMV0pIHtcbiAgICAgIGNhc2UgXCJlbWJlZC9cIjpcbiAgICAgIGNhc2UgXCJ3YXRjaD92PVwiOlxuICAgICAgY2FzZSBcInNob3J0cy9cIjpcbiAgICAgICAgbGluayA9IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke3l0TGlua1syXX0/ZW5hYmxlanNhcGk9MSR7dGltZX1gO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInBsYXlsaXN0P2xpc3Q9XCI6XG4gICAgICBjYXNlIFwiZW1iZWQvdmlkZW9zZXJpZXM/bGlzdD1cIjpcbiAgICAgICAgbGluayA9IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC92aWRlb3Nlcmllcz9saXN0PSR7eXRMaW5rWzJdfSZlbmFibGVqc2FwaT0xJHt0aW1lfWA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsaW5rID0gYGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7eXRMaW5rWzJdfT9lbmFibGVqc2FwaT0xJHt0aW1lfWA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGFzcGVjdFJhdGlvID0gaXNQb3J0cmFpdCA/IHtcbiAgICAgIHc6IDMxNSxcbiAgICAgIGg6IDU2MFxuICAgIH0gOiB7XG4gICAgICB3OiA1NjAsXG4gICAgICBoOiAzMTVcbiAgICB9O1xuICAgIGVtYmVkZGVkTGlua0NhY2hlLnNldChvcmlnaW5hbExpbmssIHtcbiAgICAgIGxpbmssXG4gICAgICBhc3BlY3RSYXRpbyxcbiAgICAgIHR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgbGluayxcbiAgICAgIGFzcGVjdFJhdGlvLFxuICAgICAgdHlwZVxuICAgIH07XG4gIH1cblxuICBjb25zdCB2aW1lb0xpbmsgPSBsaW5rLm1hdGNoKFJFX1ZJTUVPKTtcblxuICBpZiAodmltZW9MaW5rID09PSBudWxsIHx8IHZpbWVvTGluayA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmltZW9MaW5rWzFdKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdmltZW9MaW5rID09PSBudWxsIHx8IHZpbWVvTGluayA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmltZW9MaW5rWzFdO1xuICAgIGNvbnN0IHdhcm5pbmcgPSAhL15cXGQrJC8udGVzdCh0YXJnZXQpID8gdChcInRvYXN0LnVucmVjb2duaXplZExpbmtGb3JtYXRcIikgOiB1bmRlZmluZWQ7XG4gICAgdHlwZSA9IFwidmlkZW9cIjtcbiAgICBsaW5rID0gYGh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8ke3RhcmdldH0/YXBpPTFgO1xuICAgIGFzcGVjdFJhdGlvID0ge1xuICAgICAgdzogNTYwLFxuICAgICAgaDogMzE1XG4gICAgfTsgLy93YXJuaW5nIGRlbGliZXJhdGVseSBvbW1pdGVkIHNvIGl0IGlzIGRpc3BsYXllZCBvbmx5IG9uY2UgcGVyIGxpbmtcbiAgICAvL3NhbWUgbGluayBuZXh0IHRpbWUgd2lsbCBiZSBzZXJ2ZWQgZnJvbSBjYWNoZVxuXG4gICAgZW1iZWRkZWRMaW5rQ2FjaGUuc2V0KG9yaWdpbmFsTGluaywge1xuICAgICAgbGluayxcbiAgICAgIGFzcGVjdFJhdGlvLFxuICAgICAgdHlwZVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBsaW5rLFxuICAgICAgYXNwZWN0UmF0aW8sXG4gICAgICB0eXBlLFxuICAgICAgd2FybmluZ1xuICAgIH07XG4gIH1cblxuICBjb25zdCBmaWdtYUxpbmsgPSBsaW5rLm1hdGNoKFJFX0ZJR01BKTtcblxuICBpZiAoZmlnbWFMaW5rKSB7XG4gICAgdHlwZSA9IFwiZ2VuZXJpY1wiO1xuICAgIGxpbmsgPSBgaHR0cHM6Ly93d3cuZmlnbWEuY29tL2VtYmVkP2VtYmVkX2hvc3Q9c2hhcmUmdXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGxpbmspfWA7XG4gICAgYXNwZWN0UmF0aW8gPSB7XG4gICAgICB3OiA1NTAsXG4gICAgICBoOiA1NTBcbiAgICB9O1xuICAgIGVtYmVkZGVkTGlua0NhY2hlLnNldChvcmlnaW5hbExpbmssIHtcbiAgICAgIGxpbmssXG4gICAgICBhc3BlY3RSYXRpbyxcbiAgICAgIHR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgbGluayxcbiAgICAgIGFzcGVjdFJhdGlvLFxuICAgICAgdHlwZVxuICAgIH07XG4gIH1cblxuICBjb25zdCB2YWxMaW5rID0gbGluay5tYXRjaChSRV9WQUxUT1dOKTtcblxuICBpZiAodmFsTGluaykge1xuICAgIGxpbmsgPSB2YWxMaW5rWzFdID09PSBcImVtYmVkXCIgPyB2YWxMaW5rWzBdIDogdmFsTGlua1swXS5yZXBsYWNlKFwiL3ZcIiwgXCIvZW1iZWRcIik7XG4gICAgZW1iZWRkZWRMaW5rQ2FjaGUuc2V0KG9yaWdpbmFsTGluaywge1xuICAgICAgbGluayxcbiAgICAgIGFzcGVjdFJhdGlvLFxuICAgICAgdHlwZVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBsaW5rLFxuICAgICAgYXNwZWN0UmF0aW8sXG4gICAgICB0eXBlXG4gICAgfTtcbiAgfVxuXG4gIGlmIChSRV9UV0lUVEVSLnRlc3QobGluaykpIHtcbiAgICBjb25zdCBwb3N0SWQgPSBsaW5rLm1hdGNoKFJFX1RXSVRURVIpWzFdOyAvLyB0aGUgZW1iZWQgc3JjZG9jIHN0aWxsIHN1cHBvcnRzIHR3aXR0ZXIuY29tIGRvbWFpbiBvbmx5LlxuICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBhdHRlbXB0IHRvIHBhcnNlIHRoZSB1c2VybmFtZSBhcyBpdCBjYW4gY29uc2lzdCBvZlxuICAgIC8vIG5vbi1sYXRpbjEgY2hhcmFjdGVycywgYW5kIHRoZSB1c2VybmFtZSBpbiB0aGUgdXJsIGNhbiBiZSBzZXQgdG8gYW55dGhpbmdcbiAgICAvLyB3aXRob3V0IGFmZmVjdGluZyB0aGUgZW1iZWQuXG5cbiAgICBjb25zdCBzYWZlVVJMID0gc2FuaXRpemVIVE1MQXR0cmlidXRlKGBodHRwczovL3R3aXR0ZXIuY29tL3gvc3RhdHVzLyR7cG9zdElkfWApO1xuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgIHR5cGU6IFwiZG9jdW1lbnRcIixcbiAgICAgIHNyY2RvYzogdGhlbWUgPT4gY3JlYXRlU3JjRG9jKGA8YmxvY2txdW90ZSBjbGFzcz1cInR3aXR0ZXItdHdlZXRcIiBkYXRhLWRudD1cInRydWVcIiBkYXRhLXRoZW1lPVwiJHt0aGVtZX1cIj48YSBocmVmPVwiJHtzYWZlVVJMfVwiPjwvYT48L2Jsb2NrcXVvdGU+IDxzY3JpcHQgYXN5bmMgc3JjPVwiaHR0cHM6Ly9wbGF0Zm9ybS50d2l0dGVyLmNvbS93aWRnZXRzLmpzXCIgY2hhcnNldD1cInV0Zi04XCI+PC9zY3JpcHQ+YCksXG4gICAgICBhc3BlY3RSYXRpbzoge1xuICAgICAgICB3OiA0ODAsXG4gICAgICAgIGg6IDQ4MFxuICAgICAgfSxcbiAgICAgIHNhbmRib3g6IHtcbiAgICAgICAgYWxsb3dTYW1lT3JpZ2luOiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgICBlbWJlZGRlZExpbmtDYWNoZS5zZXQob3JpZ2luYWxMaW5rLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBpZiAoUkVfR0hfR0lTVC50ZXN0KGxpbmspKSB7XG4gICAgY29uc3QgWywgdXNlciwgZ2lzdElkXSA9IGxpbmsubWF0Y2goUkVfR0hfR0lTVCk7XG4gICAgY29uc3Qgc2FmZVVSTCA9IHNhbml0aXplSFRNTEF0dHJpYnV0ZShgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vJHt1c2VyfS8ke2dpc3RJZH1gKTtcbiAgICBjb25zdCByZXQgPSB7XG4gICAgICB0eXBlOiBcImRvY3VtZW50XCIsXG4gICAgICBzcmNkb2M6ICgpID0+IGNyZWF0ZVNyY0RvYyhgXG4gICAgICAgICAgPHNjcmlwdCBzcmM9XCIke3NhZmVVUkx9LmpzXCI+PC9zY3JpcHQ+XG4gICAgICAgICAgPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuICAgICAgICAgICAgKiB7IG1hcmdpbjogMHB4OyB9XG4gICAgICAgICAgICB0YWJsZSwgLmdpc3QgeyBoZWlnaHQ6IDEwMCU7IH1cbiAgICAgICAgICAgIC5naXN0IC5naXN0LWZpbGUgeyBoZWlnaHQ6IGNhbGMoMTAwdmggLSAycHgpOyBwYWRkaW5nOiAwcHg7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtcm93czogMWZyIGF1dG87IH1cbiAgICAgICAgICA8L3N0eWxlPlxuICAgICAgICBgKSxcbiAgICAgIGFzcGVjdFJhdGlvOiB7XG4gICAgICAgIHc6IDU1MCxcbiAgICAgICAgaDogNzIwXG4gICAgICB9XG4gICAgfTtcbiAgICBlbWJlZGRlZExpbmtDYWNoZS5zZXQobGluaywgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZW1iZWRkZWRMaW5rQ2FjaGUuc2V0KGxpbmssIHtcbiAgICBsaW5rLFxuICAgIGFzcGVjdFJhdGlvLFxuICAgIHR5cGVcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbGluayxcbiAgICBhc3BlY3RSYXRpbyxcbiAgICB0eXBlXG4gIH07XG59O1xuZXhwb3J0IGNvbnN0IGlzRW1iZWRkYWJsZU9yTGFiZWwgPSBlbGVtZW50ID0+IHtcbiAgaWYgKGlzRW1iZWRkYWJsZUVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyRWxlbWVudChlbGVtZW50KTtcblxuICAgIGlmIChjb250YWluZXIgJiYgaXNFbWJlZGRhYmxlRWxlbWVudChjb250YWluZXIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsYWNlaG9sZGVyRW1iZWRkYWJsZUxhYmVsID0gZWxlbWVudCA9PiB7XG4gIHZhciBfYTtcblxuICBjb25zdCB0ZXh0ID0gIWVsZW1lbnQubGluayB8fCAoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbGVtZW50LmxpbmspID09PSBcIlwiID8gXCJFbXB0eSBXZWItRW1iZWRcIiA6IGVsZW1lbnQubGluaztcbiAgY29uc3QgZm9udFNpemUgPSBNYXRoLm1heChNYXRoLm1pbihlbGVtZW50LndpZHRoIC8gMiwgZWxlbWVudC53aWR0aCAvIHRleHQubGVuZ3RoKSwgZWxlbWVudC53aWR0aCAvIDMwKTtcbiAgY29uc3QgZm9udEZhbWlseSA9IEZPTlRfRkFNSUxZLkhlbHZldGljYTtcbiAgY29uc3QgZm9udFN0cmluZyA9IGdldEZvbnRTdHJpbmcoe1xuICAgIGZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHlcbiAgfSk7XG4gIHJldHVybiBuZXdUZXh0RWxlbWVudCh7XG4gICAgeDogZWxlbWVudC54ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQgLyAyLFxuICAgIHN0cm9rZUNvbG9yOiBlbGVtZW50LnN0cm9rZUNvbG9yICE9PSBcInRyYW5zcGFyZW50XCIgPyBlbGVtZW50LnN0cm9rZUNvbG9yIDogXCJibGFja1wiLFxuICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFNpemUsXG4gICAgdGV4dDogd3JhcFRleHQodGV4dCwgZm9udFN0cmluZywgZWxlbWVudC53aWR0aCAtIDIwKSxcbiAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgdmVydGljYWxBbGlnbjogVkVSVElDQUxfQUxJR04uTUlERExFLFxuICAgIGFuZ2xlOiAoX2EgPSBlbGVtZW50LmFuZ2xlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwXG4gIH0pO1xufTtcbmV4cG9ydCBjb25zdCBhY3Rpb25TZXRFbWJlZGRhYmxlQXNBY3RpdmVUb29sID0gcmVnaXN0ZXIoe1xuICBuYW1lOiBcInNldEVtYmVkZGFibGVBc0FjdGl2ZVRvb2xcIixcbiAgdHJhY2tFdmVudDoge1xuICAgIGNhdGVnb3J5OiBcInRvb2xiYXJcIlxuICB9LFxuICBwZXJmb3JtOiAoZWxlbWVudHMsIGFwcFN0YXRlLCBfLCBhcHApID0+IHtcbiAgICBjb25zdCBuZXh0QWN0aXZlVG9vbCA9IHVwZGF0ZUFjdGl2ZVRvb2woYXBwU3RhdGUsIHtcbiAgICAgIHR5cGU6IFwiZW1iZWRkYWJsZVwiXG4gICAgfSk7XG4gICAgc2V0Q3Vyc29yRm9yU2hhcGUoYXBwLmNhbnZhcywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhcHBTdGF0ZSksIHtcbiAgICAgIGFjdGl2ZVRvb2w6IG5leHRBY3RpdmVUb29sXG4gICAgfSkpO1xuICAgIHJldHVybiB7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIGFwcFN0YXRlOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGFwcFN0YXRlKSwge1xuICAgICAgICBhY3RpdmVUb29sOiB1cGRhdGVBY3RpdmVUb29sKGFwcFN0YXRlLCB7XG4gICAgICAgICAgdHlwZTogXCJlbWJlZGRhYmxlXCJcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgY29tbWl0VG9IaXN0b3J5OiBmYWxzZVxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCB2YWxpZGF0ZUhvc3RuYW1lID0gKHVybCxcbi8qKiB1c2luZyBhIFNldCBhc3N1bWVzIGl0IGFscmVhZHkgY29udGFpbnMgbm9ybWFsaXplZCBiYXJlIGRvbWFpbnMgKi9cbmFsbG93ZWRIb3N0bmFtZXMpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7XG4gICAgICBob3N0bmFtZVxuICAgIH0gPSBuZXcgVVJMKHVybCk7XG4gICAgY29uc3QgYmFyZURvbWFpbiA9IGhvc3RuYW1lLnJlcGxhY2UoL153d3dcXC4vLCBcIlwiKTtcbiAgICBjb25zdCBiYXJlRG9tYWluV2l0aEZpcnN0U3ViZG9tYWluV2lsZGNhcmRlZCA9IGJhcmVEb21haW4ucmVwbGFjZSgvXihbXi5dKykvLCBcIipcIik7XG5cbiAgICBpZiAoYWxsb3dlZEhvc3RuYW1lcyBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgcmV0dXJuIEFMTE9XRURfRE9NQUlOUy5oYXMoYmFyZURvbWFpbikgfHwgQUxMT1dFRF9ET01BSU5TLmhhcyhiYXJlRG9tYWluV2l0aEZpcnN0U3ViZG9tYWluV2lsZGNhcmRlZCk7XG4gICAgfVxuXG4gICAgaWYgKGJhcmVEb21haW4gPT09IGFsbG93ZWRIb3N0bmFtZXMucmVwbGFjZSgvXnd3d1xcLi8sIFwiXCIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7Ly8gaWdub3JlXG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdFNyYyA9IGh0bWxTdHJpbmcgPT4ge1xuICBjb25zdCB0d2l0dGVyTWF0Y2ggPSBodG1sU3RyaW5nLm1hdGNoKFJFX1RXSVRURVJfRU1CRUQpO1xuXG4gIGlmICh0d2l0dGVyTWF0Y2ggJiYgdHdpdHRlck1hdGNoLmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiB0d2l0dGVyTWF0Y2hbMV07XG4gIH1cblxuICBjb25zdCBnaXN0TWF0Y2ggPSBodG1sU3RyaW5nLm1hdGNoKFJFX0dIX0dJU1RfRU1CRUQpO1xuXG4gIGlmIChnaXN0TWF0Y2ggJiYgZ2lzdE1hdGNoLmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiBnaXN0TWF0Y2hbMV07XG4gIH1cblxuICBpZiAoUkVfR0lQSFkudGVzdChodG1sU3RyaW5nKSkge1xuICAgIHJldHVybiBgaHR0cHM6Ly9naXBoeS5jb20vZW1iZWQvJHtSRV9HSVBIWS5leGVjKGh0bWxTdHJpbmcpWzFdfWA7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IGh0bWxTdHJpbmcubWF0Y2goUkVfR0VORVJJQ19FTUJFRCk7XG5cbiAgaWYgKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiBtYXRjaFsxXTtcbiAgfVxuXG4gIHJldHVybiBodG1sU3RyaW5nO1xufTtcbmV4cG9ydCBjb25zdCBlbWJlZGRhYmxlVVJMVmFsaWRhdG9yID0gKHVybCwgdmFsaWRhdGVFbWJlZGRhYmxlKSA9PiB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHZhbGlkYXRlRW1iZWRkYWJsZSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiB2YWxpZGF0ZUVtYmVkZGFibGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgcmV0ID0gdmFsaWRhdGVFbWJlZGRhYmxlKHVybCk7IC8vIGlmIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQsIGxlYXZlIHZhbGlkYXRpb24gdG8gZGVmYXVsdFxuXG4gICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWxpZGF0ZUVtYmVkZGFibGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFbWJlZGRhYmxlO1xuICAgIH0gZWxzZSBpZiAodmFsaWRhdGVFbWJlZGRhYmxlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFbWJlZGRhYmxlLnRlc3QodXJsKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRhdGVFbWJlZGRhYmxlKSkge1xuICAgICAgZm9yIChjb25zdCBkb21haW4gb2YgdmFsaWRhdGVFbWJlZGRhYmxlKSB7XG4gICAgICAgIGlmIChkb21haW4gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICBpZiAodXJsLm1hdGNoKGRvbWFpbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0ZUhvc3RuYW1lKHVybCwgZG9tYWluKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVIb3N0bmFtZSh1cmwsIEFMTE9XRURfRE9NQUlOUyk7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../element/embeddable.ts\n");
|
|
3907
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionSetEmbeddableAsActiveTool\": () => (/* binding */ actionSetEmbeddableAsActiveTool),\n/* harmony export */ \"createPlaceholderEmbeddableLabel\": () => (/* binding */ createPlaceholderEmbeddableLabel),\n/* harmony export */ \"embeddableURLValidator\": () => (/* binding */ embeddableURLValidator),\n/* harmony export */ \"extractSrc\": () => (/* binding */ extractSrc),\n/* harmony export */ \"getEmbedLink\": () => (/* binding */ getEmbedLink),\n/* harmony export */ \"isEmbeddableOrLabel\": () => (/* binding */ isEmbeddableOrLabel)\n/* harmony export */ });\n/* harmony import */ var _actions_register__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../actions/register */ \"../../actions/register.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _cursor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../cursor */ \"../../cursor.ts\");\n/* harmony import */ var _newElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _textElement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _typeChecks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _data_url__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../data/url */ \"../../data/url.ts\");\n\n\n\n\n\n\n\n\n\nconst embeddedLinkCache = new Map();\nconst RE_YOUTUBE = /^(?:http(?:s)?:\\/\\/)?(?:www\\.)?youtu(?:be\\.com|\\.be)\\/(embed\\/|watch\\?v=|shorts\\/|playlist\\?list=|embed\\/videoseries\\?list=)?([a-zA-Z0-9_-]+)(?:\\?t=|&t=|\\?start=|&start=)?([a-zA-Z0-9_-]+)?[^\\s]*$/;\nconst RE_VIMEO = /^(?:http(?:s)?:\\/\\/)?(?:(?:w){3}\\.)?(?:player\\.)?vimeo\\.com\\/(?:video\\/)?([^?\\s]+)(?:\\?.*)?$/;\nconst RE_FIGMA = /^https:\\/\\/(?:www\\.)?figma\\.com/;\nconst RE_GH_GIST = /^https:\\/\\/gist\\.github\\.com\\/([\\w_-]+)\\/([\\w_-]+)/;\nconst RE_GH_GIST_EMBED = /^<script[\\s\\S]*?\\ssrc=[\"'](https:\\/\\/gist\\.github\\.com\\/.*?)\\.js[\"']/i; // not anchored to start to allow <blockquote> twitter embeds\n\nconst RE_TWITTER = /(?:https?:\\/\\/)?(?:(?:w){3}\\.)?(?:twitter|x)\\.com\\/[^/]+\\/status\\/(\\d+)/;\nconst RE_TWITTER_EMBED = /^<blockquote[\\s\\S]*?\\shref=[\"'](https?:\\/\\/(?:twitter|x)\\.com\\/[^\"']*)/i;\nconst RE_VALTOWN = /^https:\\/\\/(?:www\\.)?val\\.town\\/(v|embed)\\/[a-zA-Z_$][0-9a-zA-Z_$]+\\.[a-zA-Z_$][0-9a-zA-Z_$]+/;\nconst RE_GENERIC_EMBED = /^<(?:iframe|blockquote)[\\s\\S]*?\\s(?:src|href)=[\"']([^\"']*)[\"'][\\s\\S]*?>$/i;\nconst RE_GIPHY = /giphy.com\\/(?:clips|embed|gifs)\\/[a-zA-Z0-9]*?-?([a-zA-Z0-9]+)(?:[^a-zA-Z0-9]|$)/;\nconst ALLOWED_DOMAINS = new Set([\"youtube.com\", \"youtu.be\", \"vimeo.com\", \"player.vimeo.com\", \"figma.com\", \"link.excalidraw.com\", \"gist.github.com\", \"twitter.com\", \"*.simplepdf.eu\", \"stackblitz.com\", \"val.town\", \"giphy.com\"]);\nconst ALLOW_SAME_ORIGIN = new Set([\"youtube.com\", \"youtu.be\", \"vimeo.com\", \"player.vimeo.com\", \"figma.com\", \"twitter.com\", \"x.com\", \"*.simplepdf.eu\", \"stackblitz.com\"]);\n\nconst createSrcDoc = body => {\n return `<html><body>${body}</body></html>`;\n};\n\nconst getEmbedLink = link => {\n if (!link) {\n return null;\n }\n\n if (embeddedLinkCache.has(link)) {\n return embeddedLinkCache.get(link);\n }\n\n const originalLink = link;\n const allowSameOrigin = ALLOW_SAME_ORIGIN.has(matchHostname(link, ALLOW_SAME_ORIGIN) || \"\");\n let type = \"generic\";\n let aspectRatio = {\n w: 560,\n h: 840\n };\n const ytLink = link.match(RE_YOUTUBE);\n\n if (ytLink === null || ytLink === void 0 ? void 0 : ytLink[2]) {\n const time = ytLink[3] ? `&start=${ytLink[3]}` : ``;\n const isPortrait = link.includes(\"shorts\");\n type = \"video\";\n\n switch (ytLink[1]) {\n case \"embed/\":\n case \"watch?v=\":\n case \"shorts/\":\n link = `https://www.youtube.com/embed/${ytLink[2]}?enablejsapi=1${time}`;\n break;\n\n case \"playlist?list=\":\n case \"embed/videoseries?list=\":\n link = `https://www.youtube.com/embed/videoseries?list=${ytLink[2]}&enablejsapi=1${time}`;\n break;\n\n default:\n link = `https://www.youtube.com/embed/${ytLink[2]}?enablejsapi=1${time}`;\n break;\n }\n\n aspectRatio = isPortrait ? {\n w: 315,\n h: 560\n } : {\n w: 560,\n h: 315\n };\n embeddedLinkCache.set(originalLink, {\n link,\n aspectRatio,\n type,\n sandbox: {\n allowSameOrigin\n }\n });\n return {\n link,\n aspectRatio,\n type,\n sandbox: {\n allowSameOrigin\n }\n };\n }\n\n const vimeoLink = link.match(RE_VIMEO);\n\n if (vimeoLink === null || vimeoLink === void 0 ? void 0 : vimeoLink[1]) {\n const target = vimeoLink === null || vimeoLink === void 0 ? void 0 : vimeoLink[1];\n const warning = !/^\\d+$/.test(target) ? (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toast.unrecognizedLinkFormat\") : undefined;\n type = \"video\";\n link = `https://player.vimeo.com/video/${target}?api=1`;\n aspectRatio = {\n w: 560,\n h: 315\n }; //warning deliberately ommited so it is displayed only once per link\n //same link next time will be served from cache\n\n embeddedLinkCache.set(originalLink, {\n link,\n aspectRatio,\n type,\n sandbox: {\n allowSameOrigin\n }\n });\n return {\n link,\n aspectRatio,\n type,\n warning,\n sandbox: {\n allowSameOrigin\n }\n };\n }\n\n const figmaLink = link.match(RE_FIGMA);\n\n if (figmaLink) {\n type = \"generic\";\n link = `https://www.figma.com/embed?embed_host=share&url=${encodeURIComponent(link)}`;\n aspectRatio = {\n w: 550,\n h: 550\n };\n embeddedLinkCache.set(originalLink, {\n link,\n aspectRatio,\n type,\n sandbox: {\n allowSameOrigin\n }\n });\n return {\n link,\n aspectRatio,\n type,\n sandbox: {\n allowSameOrigin\n }\n };\n }\n\n const valLink = link.match(RE_VALTOWN);\n\n if (valLink) {\n link = valLink[1] === \"embed\" ? valLink[0] : valLink[0].replace(\"/v\", \"/embed\");\n embeddedLinkCache.set(originalLink, {\n link,\n aspectRatio,\n type,\n sandbox: {\n allowSameOrigin\n }\n });\n return {\n link,\n aspectRatio,\n type,\n sandbox: {\n allowSameOrigin\n }\n };\n }\n\n if (RE_TWITTER.test(link)) {\n const postId = link.match(RE_TWITTER)[1]; // the embed srcdoc still supports twitter.com domain only.\n // Note that we don't attempt to parse the username as it can consist of\n // non-latin1 characters, and the username in the url can be set to anything\n // without affecting the embed.\n\n const safeURL = (0,_data_url__WEBPACK_IMPORTED_MODULE_8__.sanitizeHTMLAttribute)(`https://twitter.com/x/status/${postId}`);\n const ret = {\n type: \"document\",\n srcdoc: theme => createSrcDoc(`<blockquote class=\"twitter-tweet\" data-dnt=\"true\" data-theme=\"${theme}\"><a href=\"${safeURL}\"></a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>`),\n aspectRatio: {\n w: 480,\n h: 480\n },\n sandbox: {\n allowSameOrigin\n }\n };\n embeddedLinkCache.set(originalLink, ret);\n return ret;\n }\n\n if (RE_GH_GIST.test(link)) {\n const [, user, gistId] = link.match(RE_GH_GIST);\n const safeURL = (0,_data_url__WEBPACK_IMPORTED_MODULE_8__.sanitizeHTMLAttribute)(`https://gist.github.com/${user}/${gistId}`);\n const ret = {\n type: \"document\",\n srcdoc: () => createSrcDoc(`\n <script src=\"${safeURL}.js\"></script>\n <style type=\"text/css\">\n * { margin: 0px; }\n table, .gist { height: 100%; }\n .gist .gist-file { height: calc(100vh - 2px); padding: 0px; display: grid; grid-template-rows: 1fr auto; }\n </style>\n `),\n aspectRatio: {\n w: 550,\n h: 720\n },\n sandbox: {\n allowSameOrigin\n }\n };\n embeddedLinkCache.set(link, ret);\n return ret;\n }\n\n embeddedLinkCache.set(link, {\n link,\n aspectRatio,\n type,\n sandbox: {\n allowSameOrigin\n }\n });\n return {\n link,\n aspectRatio,\n type,\n sandbox: {\n allowSameOrigin\n }\n };\n};\nconst isEmbeddableOrLabel = element => {\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_7__.isEmbeddableElement)(element)) {\n return true;\n }\n\n if (element.type === \"text\") {\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getContainerElement)(element);\n\n if (container && (0,_typeChecks__WEBPACK_IMPORTED_MODULE_7__.isEmbeddableElement)(container)) {\n return true;\n }\n }\n\n return false;\n};\nconst createPlaceholderEmbeddableLabel = element => {\n var _a;\n\n const text = !element.link || (element === null || element === void 0 ? void 0 : element.link) === \"\" ? \"Empty Web-Embed\" : element.link;\n const fontSize = Math.max(Math.min(element.width / 2, element.width / text.length), element.width / 30);\n const fontFamily = _constants__WEBPACK_IMPORTED_MODULE_1__.FONT_FAMILY.Helvetica;\n const fontString = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getFontString)({\n fontSize,\n fontFamily\n });\n return (0,_newElement__WEBPACK_IMPORTED_MODULE_5__.newTextElement)({\n x: element.x + element.width / 2,\n y: element.y + element.height / 2,\n strokeColor: element.strokeColor !== \"transparent\" ? element.strokeColor : \"black\",\n backgroundColor: \"transparent\",\n fontFamily,\n fontSize,\n text: (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.wrapText)(text, fontString, element.width - 20),\n textAlign: \"center\",\n verticalAlign: _constants__WEBPACK_IMPORTED_MODULE_1__.VERTICAL_ALIGN.MIDDLE,\n angle: (_a = element.angle) !== null && _a !== void 0 ? _a : 0\n });\n};\nconst actionSetEmbeddableAsActiveTool = (0,_actions_register__WEBPACK_IMPORTED_MODULE_0__.register)({\n name: \"setEmbeddableAsActiveTool\",\n trackEvent: {\n category: \"toolbar\"\n },\n perform: (elements, appState, _, app) => {\n const nextActiveTool = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.updateActiveTool)(appState, {\n type: \"embeddable\"\n });\n (0,_cursor__WEBPACK_IMPORTED_MODULE_4__.setCursorForShape)(app.canvas, Object.assign(Object.assign({}, appState), {\n activeTool: nextActiveTool\n }));\n return {\n elements,\n appState: Object.assign(Object.assign({}, appState), {\n activeTool: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.updateActiveTool)(appState, {\n type: \"embeddable\"\n })\n }),\n commitToHistory: false\n };\n }\n});\n\nconst matchHostname = (url,\n/** using a Set assumes it already contains normalized bare domains */\nallowedHostnames) => {\n try {\n const {\n hostname\n } = new URL(url);\n const bareDomain = hostname.replace(/^www\\./, \"\");\n\n if (allowedHostnames instanceof Set) {\n if (ALLOWED_DOMAINS.has(bareDomain)) {\n return bareDomain;\n }\n\n const bareDomainWithFirstSubdomainWildcarded = bareDomain.replace(/^([^.]+)/, \"*\");\n\n if (ALLOWED_DOMAINS.has(bareDomainWithFirstSubdomainWildcarded)) {\n return bareDomainWithFirstSubdomainWildcarded;\n }\n\n return null;\n }\n\n const bareAllowedHostname = allowedHostnames.replace(/^www\\./, \"\");\n\n if (bareDomain === bareAllowedHostname) {\n return bareAllowedHostname;\n }\n } catch (error) {// ignore\n }\n\n return null;\n};\n\nconst extractSrc = htmlString => {\n const twitterMatch = htmlString.match(RE_TWITTER_EMBED);\n\n if (twitterMatch && twitterMatch.length === 2) {\n return twitterMatch[1];\n }\n\n const gistMatch = htmlString.match(RE_GH_GIST_EMBED);\n\n if (gistMatch && gistMatch.length === 2) {\n return gistMatch[1];\n }\n\n if (RE_GIPHY.test(htmlString)) {\n return `https://giphy.com/embed/${RE_GIPHY.exec(htmlString)[1]}`;\n }\n\n const match = htmlString.match(RE_GENERIC_EMBED);\n\n if (match && match.length === 2) {\n return match[1];\n }\n\n return htmlString;\n};\nconst embeddableURLValidator = (url, validateEmbeddable) => {\n if (!url) {\n return false;\n }\n\n if (validateEmbeddable != null) {\n if (typeof validateEmbeddable === \"function\") {\n const ret = validateEmbeddable(url); // if return value is undefined, leave validation to default\n\n if (typeof ret === \"boolean\") {\n return ret;\n }\n } else if (typeof validateEmbeddable === \"boolean\") {\n return validateEmbeddable;\n } else if (validateEmbeddable instanceof RegExp) {\n return validateEmbeddable.test(url);\n } else if (Array.isArray(validateEmbeddable)) {\n for (const domain of validateEmbeddable) {\n if (domain instanceof RegExp) {\n if (url.match(domain)) {\n return true;\n }\n } else if (matchHostname(url, domain)) {\n return true;\n }\n }\n\n return false;\n }\n }\n\n return !!matchHostname(url, ALLOWED_DOMAINS);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0EsVUFBVSxzREFBUTtBQUNsQjtBQUNBLG1CQUFtQiw2REFBcUI7QUFDeEM7QUFDQSxHQUFHO0FBQ0g7QUFDTyx3Q0FBd0MsMkRBQVE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsMkJBQTJCLHdEQUFnQjtBQUMzQztBQUNBLEtBQUs7QUFDTCxJQUFJLDBEQUFpQiwyQ0FBMkM7QUFDaEU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDhDQUE4QztBQUM5QyxvQkFBb0Isd0RBQWdCO0FBQ3BDO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7O0FBRUE7QUFDQTs7QUFFTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0MsNkJBQTZCO0FBQ25FOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2VsZW1lbnQvZW1iZWRkYWJsZS50cz9iZjkzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvcmVnaXN0ZXJcIjtcbmltcG9ydCB7IEZPTlRfRkFNSUxZLCBWRVJUSUNBTF9BTElHTiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgZ2V0Rm9udFN0cmluZywgdXBkYXRlQWN0aXZlVG9vbCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgc2V0Q3Vyc29yRm9yU2hhcGUgfSBmcm9tIFwiLi4vY3Vyc29yXCI7XG5pbXBvcnQgeyBuZXdUZXh0RWxlbWVudCB9IGZyb20gXCIuL25ld0VsZW1lbnRcIjtcbmltcG9ydCB7IGdldENvbnRhaW5lckVsZW1lbnQsIHdyYXBUZXh0IH0gZnJvbSBcIi4vdGV4dEVsZW1lbnRcIjtcbmltcG9ydCB7IGlzRW1iZWRkYWJsZUVsZW1lbnQgfSBmcm9tIFwiLi90eXBlQ2hlY2tzXCI7XG5pbXBvcnQgeyBzYW5pdGl6ZUhUTUxBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vZGF0YS91cmxcIjtcbmNvbnN0IGVtYmVkZGVkTGlua0NhY2hlID0gbmV3IE1hcCgpO1xuY29uc3QgUkVfWU9VVFVCRSA9IC9eKD86aHR0cCg/OnMpPzpcXC9cXC8pPyg/Ond3d1xcLik/eW91dHUoPzpiZVxcLmNvbXxcXC5iZSlcXC8oZW1iZWRcXC98d2F0Y2hcXD92PXxzaG9ydHNcXC98cGxheWxpc3RcXD9saXN0PXxlbWJlZFxcL3ZpZGVvc2VyaWVzXFw/bGlzdD0pPyhbYS16QS1aMC05Xy1dKykoPzpcXD90PXwmdD18XFw/c3RhcnQ9fCZzdGFydD0pPyhbYS16QS1aMC05Xy1dKyk/W15cXHNdKiQvO1xuY29uc3QgUkVfVklNRU8gPSAvXig/Omh0dHAoPzpzKT86XFwvXFwvKT8oPzooPzp3KXszfVxcLik/KD86cGxheWVyXFwuKT92aW1lb1xcLmNvbVxcLyg/OnZpZGVvXFwvKT8oW14/XFxzXSspKD86XFw/LiopPyQvO1xuY29uc3QgUkVfRklHTUEgPSAvXmh0dHBzOlxcL1xcLyg/Ond3d1xcLik/ZmlnbWFcXC5jb20vO1xuY29uc3QgUkVfR0hfR0lTVCA9IC9eaHR0cHM6XFwvXFwvZ2lzdFxcLmdpdGh1YlxcLmNvbVxcLyhbXFx3Xy1dKylcXC8oW1xcd18tXSspLztcbmNvbnN0IFJFX0dIX0dJU1RfRU1CRUQgPSAvXjxzY3JpcHRbXFxzXFxTXSo/XFxzc3JjPVtcIiddKGh0dHBzOlxcL1xcL2dpc3RcXC5naXRodWJcXC5jb21cXC8uKj8pXFwuanNbXCInXS9pOyAvLyBub3QgYW5jaG9yZWQgdG8gc3RhcnQgdG8gYWxsb3cgPGJsb2NrcXVvdGU+IHR3aXR0ZXIgZW1iZWRzXG5cbmNvbnN0IFJFX1RXSVRURVIgPSAvKD86aHR0cHM/OlxcL1xcLyk/KD86KD86dyl7M31cXC4pPyg/OnR3aXR0ZXJ8eClcXC5jb21cXC9bXi9dK1xcL3N0YXR1c1xcLyhcXGQrKS87XG5jb25zdCBSRV9UV0lUVEVSX0VNQkVEID0gL148YmxvY2txdW90ZVtcXHNcXFNdKj9cXHNocmVmPVtcIiddKGh0dHBzPzpcXC9cXC8oPzp0d2l0dGVyfHgpXFwuY29tXFwvW15cIiddKikvaTtcbmNvbnN0IFJFX1ZBTFRPV04gPSAvXmh0dHBzOlxcL1xcLyg/Ond3d1xcLik/dmFsXFwudG93blxcLyh2fGVtYmVkKVxcL1thLXpBLVpfJF1bMC05YS16QS1aXyRdK1xcLlthLXpBLVpfJF1bMC05YS16QS1aXyRdKy87XG5jb25zdCBSRV9HRU5FUklDX0VNQkVEID0gL148KD86aWZyYW1lfGJsb2NrcXVvdGUpW1xcc1xcU10qP1xccyg/OnNyY3xocmVmKT1bXCInXShbXlwiJ10qKVtcIiddW1xcc1xcU10qPz4kL2k7XG5jb25zdCBSRV9HSVBIWSA9IC9naXBoeS5jb21cXC8oPzpjbGlwc3xlbWJlZHxnaWZzKVxcL1thLXpBLVowLTldKj8tPyhbYS16QS1aMC05XSspKD86W15hLXpBLVowLTldfCQpLztcbmNvbnN0IEFMTE9XRURfRE9NQUlOUyA9IG5ldyBTZXQoW1wieW91dHViZS5jb21cIiwgXCJ5b3V0dS5iZVwiLCBcInZpbWVvLmNvbVwiLCBcInBsYXllci52aW1lby5jb21cIiwgXCJmaWdtYS5jb21cIiwgXCJsaW5rLmV4Y2FsaWRyYXcuY29tXCIsIFwiZ2lzdC5naXRodWIuY29tXCIsIFwidHdpdHRlci5jb21cIiwgXCIqLnNpbXBsZXBkZi5ldVwiLCBcInN0YWNrYmxpdHouY29tXCIsIFwidmFsLnRvd25cIiwgXCJnaXBoeS5jb21cIl0pO1xuY29uc3QgQUxMT1dfU0FNRV9PUklHSU4gPSBuZXcgU2V0KFtcInlvdXR1YmUuY29tXCIsIFwieW91dHUuYmVcIiwgXCJ2aW1lby5jb21cIiwgXCJwbGF5ZXIudmltZW8uY29tXCIsIFwiZmlnbWEuY29tXCIsIFwidHdpdHRlci5jb21cIiwgXCJ4LmNvbVwiLCBcIiouc2ltcGxlcGRmLmV1XCIsIFwic3RhY2tibGl0ei5jb21cIl0pO1xuXG5jb25zdCBjcmVhdGVTcmNEb2MgPSBib2R5ID0+IHtcbiAgcmV0dXJuIGA8aHRtbD48Ym9keT4ke2JvZHl9PC9ib2R5PjwvaHRtbD5gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVtYmVkTGluayA9IGxpbmsgPT4ge1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChlbWJlZGRlZExpbmtDYWNoZS5oYXMobGluaykpIHtcbiAgICByZXR1cm4gZW1iZWRkZWRMaW5rQ2FjaGUuZ2V0KGxpbmspO1xuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxMaW5rID0gbGluaztcbiAgY29uc3QgYWxsb3dTYW1lT3JpZ2luID0gQUxMT1dfU0FNRV9PUklHSU4uaGFzKG1hdGNoSG9zdG5hbWUobGluaywgQUxMT1dfU0FNRV9PUklHSU4pIHx8IFwiXCIpO1xuICBsZXQgdHlwZSA9IFwiZ2VuZXJpY1wiO1xuICBsZXQgYXNwZWN0UmF0aW8gPSB7XG4gICAgdzogNTYwLFxuICAgIGg6IDg0MFxuICB9O1xuICBjb25zdCB5dExpbmsgPSBsaW5rLm1hdGNoKFJFX1lPVVRVQkUpO1xuXG4gIGlmICh5dExpbmsgPT09IG51bGwgfHwgeXRMaW5rID09PSB2b2lkIDAgPyB2b2lkIDAgOiB5dExpbmtbMl0pIHtcbiAgICBjb25zdCB0aW1lID0geXRMaW5rWzNdID8gYCZzdGFydD0ke3l0TGlua1szXX1gIDogYGA7XG4gICAgY29uc3QgaXNQb3J0cmFpdCA9IGxpbmsuaW5jbHVkZXMoXCJzaG9ydHNcIik7XG4gICAgdHlwZSA9IFwidmlkZW9cIjtcblxuICAgIHN3aXRjaCAoeXRMaW5rWzFdKSB7XG4gICAgICBjYXNlIFwiZW1iZWQvXCI6XG4gICAgICBjYXNlIFwid2F0Y2g/dj1cIjpcbiAgICAgIGNhc2UgXCJzaG9ydHMvXCI6XG4gICAgICAgIGxpbmsgPSBgaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHt5dExpbmtbMl19P2VuYWJsZWpzYXBpPTEke3RpbWV9YDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJwbGF5bGlzdD9saXN0PVwiOlxuICAgICAgY2FzZSBcImVtYmVkL3ZpZGVvc2VyaWVzP2xpc3Q9XCI6XG4gICAgICAgIGxpbmsgPSBgaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvdmlkZW9zZXJpZXM/bGlzdD0ke3l0TGlua1syXX0mZW5hYmxlanNhcGk9MSR7dGltZX1gO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGluayA9IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke3l0TGlua1syXX0/ZW5hYmxlanNhcGk9MSR7dGltZX1gO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhc3BlY3RSYXRpbyA9IGlzUG9ydHJhaXQgPyB7XG4gICAgICB3OiAzMTUsXG4gICAgICBoOiA1NjBcbiAgICB9IDoge1xuICAgICAgdzogNTYwLFxuICAgICAgaDogMzE1XG4gICAgfTtcbiAgICBlbWJlZGRlZExpbmtDYWNoZS5zZXQob3JpZ2luYWxMaW5rLCB7XG4gICAgICBsaW5rLFxuICAgICAgYXNwZWN0UmF0aW8sXG4gICAgICB0eXBlLFxuICAgICAgc2FuZGJveDoge1xuICAgICAgICBhbGxvd1NhbWVPcmlnaW5cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgbGluayxcbiAgICAgIGFzcGVjdFJhdGlvLFxuICAgICAgdHlwZSxcbiAgICAgIHNhbmRib3g6IHtcbiAgICAgICAgYWxsb3dTYW1lT3JpZ2luXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHZpbWVvTGluayA9IGxpbmsubWF0Y2goUkVfVklNRU8pO1xuXG4gIGlmICh2aW1lb0xpbmsgPT09IG51bGwgfHwgdmltZW9MaW5rID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aW1lb0xpbmtbMV0pIHtcbiAgICBjb25zdCB0YXJnZXQgPSB2aW1lb0xpbmsgPT09IG51bGwgfHwgdmltZW9MaW5rID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aW1lb0xpbmtbMV07XG4gICAgY29uc3Qgd2FybmluZyA9ICEvXlxcZCskLy50ZXN0KHRhcmdldCkgPyB0KFwidG9hc3QudW5yZWNvZ25pemVkTGlua0Zvcm1hdFwiKSA6IHVuZGVmaW5lZDtcbiAgICB0eXBlID0gXCJ2aWRlb1wiO1xuICAgIGxpbmsgPSBgaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLyR7dGFyZ2V0fT9hcGk9MWA7XG4gICAgYXNwZWN0UmF0aW8gPSB7XG4gICAgICB3OiA1NjAsXG4gICAgICBoOiAzMTVcbiAgICB9OyAvL3dhcm5pbmcgZGVsaWJlcmF0ZWx5IG9tbWl0ZWQgc28gaXQgaXMgZGlzcGxheWVkIG9ubHkgb25jZSBwZXIgbGlua1xuICAgIC8vc2FtZSBsaW5rIG5leHQgdGltZSB3aWxsIGJlIHNlcnZlZCBmcm9tIGNhY2hlXG5cbiAgICBlbWJlZGRlZExpbmtDYWNoZS5zZXQob3JpZ2luYWxMaW5rLCB7XG4gICAgICBsaW5rLFxuICAgICAgYXNwZWN0UmF0aW8sXG4gICAgICB0eXBlLFxuICAgICAgc2FuZGJveDoge1xuICAgICAgICBhbGxvd1NhbWVPcmlnaW5cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgbGluayxcbiAgICAgIGFzcGVjdFJhdGlvLFxuICAgICAgdHlwZSxcbiAgICAgIHdhcm5pbmcsXG4gICAgICBzYW5kYm94OiB7XG4gICAgICAgIGFsbG93U2FtZU9yaWdpblxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBmaWdtYUxpbmsgPSBsaW5rLm1hdGNoKFJFX0ZJR01BKTtcblxuICBpZiAoZmlnbWFMaW5rKSB7XG4gICAgdHlwZSA9IFwiZ2VuZXJpY1wiO1xuICAgIGxpbmsgPSBgaHR0cHM6Ly93d3cuZmlnbWEuY29tL2VtYmVkP2VtYmVkX2hvc3Q9c2hhcmUmdXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGxpbmspfWA7XG4gICAgYXNwZWN0UmF0aW8gPSB7XG4gICAgICB3OiA1NTAsXG4gICAgICBoOiA1NTBcbiAgICB9O1xuICAgIGVtYmVkZGVkTGlua0NhY2hlLnNldChvcmlnaW5hbExpbmssIHtcbiAgICAgIGxpbmssXG4gICAgICBhc3BlY3RSYXRpbyxcbiAgICAgIHR5cGUsXG4gICAgICBzYW5kYm94OiB7XG4gICAgICAgIGFsbG93U2FtZU9yaWdpblxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBsaW5rLFxuICAgICAgYXNwZWN0UmF0aW8sXG4gICAgICB0eXBlLFxuICAgICAgc2FuZGJveDoge1xuICAgICAgICBhbGxvd1NhbWVPcmlnaW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgdmFsTGluayA9IGxpbmsubWF0Y2goUkVfVkFMVE9XTik7XG5cbiAgaWYgKHZhbExpbmspIHtcbiAgICBsaW5rID0gdmFsTGlua1sxXSA9PT0gXCJlbWJlZFwiID8gdmFsTGlua1swXSA6IHZhbExpbmtbMF0ucmVwbGFjZShcIi92XCIsIFwiL2VtYmVkXCIpO1xuICAgIGVtYmVkZGVkTGlua0NhY2hlLnNldChvcmlnaW5hbExpbmssIHtcbiAgICAgIGxpbmssXG4gICAgICBhc3BlY3RSYXRpbyxcbiAgICAgIHR5cGUsXG4gICAgICBzYW5kYm94OiB7XG4gICAgICAgIGFsbG93U2FtZU9yaWdpblxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBsaW5rLFxuICAgICAgYXNwZWN0UmF0aW8sXG4gICAgICB0eXBlLFxuICAgICAgc2FuZGJveDoge1xuICAgICAgICBhbGxvd1NhbWVPcmlnaW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaWYgKFJFX1RXSVRURVIudGVzdChsaW5rKSkge1xuICAgIGNvbnN0IHBvc3RJZCA9IGxpbmsubWF0Y2goUkVfVFdJVFRFUilbMV07IC8vIHRoZSBlbWJlZCBzcmNkb2Mgc3RpbGwgc3VwcG9ydHMgdHdpdHRlci5jb20gZG9tYWluIG9ubHkuXG4gICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGF0dGVtcHQgdG8gcGFyc2UgdGhlIHVzZXJuYW1lIGFzIGl0IGNhbiBjb25zaXN0IG9mXG4gICAgLy8gbm9uLWxhdGluMSBjaGFyYWN0ZXJzLCBhbmQgdGhlIHVzZXJuYW1lIGluIHRoZSB1cmwgY2FuIGJlIHNldCB0byBhbnl0aGluZ1xuICAgIC8vIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBlbWJlZC5cblxuICAgIGNvbnN0IHNhZmVVUkwgPSBzYW5pdGl6ZUhUTUxBdHRyaWJ1dGUoYGh0dHBzOi8vdHdpdHRlci5jb20veC9zdGF0dXMvJHtwb3N0SWR9YCk7XG4gICAgY29uc3QgcmV0ID0ge1xuICAgICAgdHlwZTogXCJkb2N1bWVudFwiLFxuICAgICAgc3JjZG9jOiB0aGVtZSA9PiBjcmVhdGVTcmNEb2MoYDxibG9ja3F1b3RlIGNsYXNzPVwidHdpdHRlci10d2VldFwiIGRhdGEtZG50PVwidHJ1ZVwiIGRhdGEtdGhlbWU9XCIke3RoZW1lfVwiPjxhIGhyZWY9XCIke3NhZmVVUkx9XCI+PC9hPjwvYmxvY2txdW90ZT4gPHNjcmlwdCBhc3luYyBzcmM9XCJodHRwczovL3BsYXRmb3JtLnR3aXR0ZXIuY29tL3dpZGdldHMuanNcIiBjaGFyc2V0PVwidXRmLThcIj48L3NjcmlwdD5gKSxcbiAgICAgIGFzcGVjdFJhdGlvOiB7XG4gICAgICAgIHc6IDQ4MCxcbiAgICAgICAgaDogNDgwXG4gICAgICB9LFxuICAgICAgc2FuZGJveDoge1xuICAgICAgICBhbGxvd1NhbWVPcmlnaW5cbiAgICAgIH1cbiAgICB9O1xuICAgIGVtYmVkZGVkTGlua0NhY2hlLnNldChvcmlnaW5hbExpbmssIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGlmIChSRV9HSF9HSVNULnRlc3QobGluaykpIHtcbiAgICBjb25zdCBbLCB1c2VyLCBnaXN0SWRdID0gbGluay5tYXRjaChSRV9HSF9HSVNUKTtcbiAgICBjb25zdCBzYWZlVVJMID0gc2FuaXRpemVIVE1MQXR0cmlidXRlKGBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8ke3VzZXJ9LyR7Z2lzdElkfWApO1xuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgIHR5cGU6IFwiZG9jdW1lbnRcIixcbiAgICAgIHNyY2RvYzogKCkgPT4gY3JlYXRlU3JjRG9jKGBcbiAgICAgICAgICA8c2NyaXB0IHNyYz1cIiR7c2FmZVVSTH0uanNcIj48L3NjcmlwdD5cbiAgICAgICAgICA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4gICAgICAgICAgICAqIHsgbWFyZ2luOiAwcHg7IH1cbiAgICAgICAgICAgIHRhYmxlLCAuZ2lzdCB7IGhlaWdodDogMTAwJTsgfVxuICAgICAgICAgICAgLmdpc3QgLmdpc3QtZmlsZSB7IGhlaWdodDogY2FsYygxMDB2aCAtIDJweCk7IHBhZGRpbmc6IDBweDsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgYXV0bzsgfVxuICAgICAgICAgIDwvc3R5bGU+XG4gICAgICAgIGApLFxuICAgICAgYXNwZWN0UmF0aW86IHtcbiAgICAgICAgdzogNTUwLFxuICAgICAgICBoOiA3MjBcbiAgICAgIH0sXG4gICAgICBzYW5kYm94OiB7XG4gICAgICAgIGFsbG93U2FtZU9yaWdpblxuICAgICAgfVxuICAgIH07XG4gICAgZW1iZWRkZWRMaW5rQ2FjaGUuc2V0KGxpbmssIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGVtYmVkZGVkTGlua0NhY2hlLnNldChsaW5rLCB7XG4gICAgbGluayxcbiAgICBhc3BlY3RSYXRpbyxcbiAgICB0eXBlLFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGFsbG93U2FtZU9yaWdpblxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbGluayxcbiAgICBhc3BlY3RSYXRpbyxcbiAgICB0eXBlLFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGFsbG93U2FtZU9yaWdpblxuICAgIH1cbiAgfTtcbn07XG5leHBvcnQgY29uc3QgaXNFbWJlZGRhYmxlT3JMYWJlbCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoaXNFbWJlZGRhYmxlRWxlbWVudChlbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXJFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgaWYgKGNvbnRhaW5lciAmJiBpc0VtYmVkZGFibGVFbGVtZW50KGNvbnRhaW5lcikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlUGxhY2Vob2xkZXJFbWJlZGRhYmxlTGFiZWwgPSBlbGVtZW50ID0+IHtcbiAgdmFyIF9hO1xuXG4gIGNvbnN0IHRleHQgPSAhZWxlbWVudC5saW5rIHx8IChlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVsZW1lbnQubGluaykgPT09IFwiXCIgPyBcIkVtcHR5IFdlYi1FbWJlZFwiIDogZWxlbWVudC5saW5rO1xuICBjb25zdCBmb250U2l6ZSA9IE1hdGgubWF4KE1hdGgubWluKGVsZW1lbnQud2lkdGggLyAyLCBlbGVtZW50LndpZHRoIC8gdGV4dC5sZW5ndGgpLCBlbGVtZW50LndpZHRoIC8gMzApO1xuICBjb25zdCBmb250RmFtaWx5ID0gRk9OVF9GQU1JTFkuSGVsdmV0aWNhO1xuICBjb25zdCBmb250U3RyaW5nID0gZ2V0Rm9udFN0cmluZyh7XG4gICAgZm9udFNpemUsXG4gICAgZm9udEZhbWlseVxuICB9KTtcbiAgcmV0dXJuIG5ld1RleHRFbGVtZW50KHtcbiAgICB4OiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICB5OiBlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodCAvIDIsXG4gICAgc3Ryb2tlQ29sb3I6IGVsZW1lbnQuc3Ryb2tlQ29sb3IgIT09IFwidHJhbnNwYXJlbnRcIiA/IGVsZW1lbnQuc3Ryb2tlQ29sb3IgOiBcImJsYWNrXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICB0ZXh0OiB3cmFwVGV4dCh0ZXh0LCBmb250U3RyaW5nLCBlbGVtZW50LndpZHRoIC0gMjApLFxuICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICB2ZXJ0aWNhbEFsaWduOiBWRVJUSUNBTF9BTElHTi5NSURETEUsXG4gICAgYW5nbGU6IChfYSA9IGVsZW1lbnQuYW5nbGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDBcbiAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IGFjdGlvblNldEVtYmVkZGFibGVBc0FjdGl2ZVRvb2wgPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwic2V0RW1iZWRkYWJsZUFzQWN0aXZlVG9vbFwiLFxuICB0cmFja0V2ZW50OiB7XG4gICAgY2F0ZWdvcnk6IFwidG9vbGJhclwiXG4gIH0sXG4gIHBlcmZvcm06IChlbGVtZW50cywgYXBwU3RhdGUsIF8sIGFwcCkgPT4ge1xuICAgIGNvbnN0IG5leHRBY3RpdmVUb29sID0gdXBkYXRlQWN0aXZlVG9vbChhcHBTdGF0ZSwge1xuICAgICAgdHlwZTogXCJlbWJlZGRhYmxlXCJcbiAgICB9KTtcbiAgICBzZXRDdXJzb3JGb3JTaGFwZShhcHAuY2FudmFzLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGFwcFN0YXRlKSwge1xuICAgICAgYWN0aXZlVG9vbDogbmV4dEFjdGl2ZVRvb2xcbiAgICB9KSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgYXBwU3RhdGU6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYXBwU3RhdGUpLCB7XG4gICAgICAgIGFjdGl2ZVRvb2w6IHVwZGF0ZUFjdGl2ZVRvb2woYXBwU3RhdGUsIHtcbiAgICAgICAgICB0eXBlOiBcImVtYmVkZGFibGVcIlxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICBjb21taXRUb0hpc3Rvcnk6IGZhbHNlXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IG1hdGNoSG9zdG5hbWUgPSAodXJsLFxuLyoqIHVzaW5nIGEgU2V0IGFzc3VtZXMgaXQgYWxyZWFkeSBjb250YWlucyBub3JtYWxpemVkIGJhcmUgZG9tYWlucyAqL1xuYWxsb3dlZEhvc3RuYW1lcykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHtcbiAgICAgIGhvc3RuYW1lXG4gICAgfSA9IG5ldyBVUkwodXJsKTtcbiAgICBjb25zdCBiYXJlRG9tYWluID0gaG9zdG5hbWUucmVwbGFjZSgvXnd3d1xcLi8sIFwiXCIpO1xuXG4gICAgaWYgKGFsbG93ZWRIb3N0bmFtZXMgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgIGlmIChBTExPV0VEX0RPTUFJTlMuaGFzKGJhcmVEb21haW4pKSB7XG4gICAgICAgIHJldHVybiBiYXJlRG9tYWluO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiYXJlRG9tYWluV2l0aEZpcnN0U3ViZG9tYWluV2lsZGNhcmRlZCA9IGJhcmVEb21haW4ucmVwbGFjZSgvXihbXi5dKykvLCBcIipcIik7XG5cbiAgICAgIGlmIChBTExPV0VEX0RPTUFJTlMuaGFzKGJhcmVEb21haW5XaXRoRmlyc3RTdWJkb21haW5XaWxkY2FyZGVkKSkge1xuICAgICAgICByZXR1cm4gYmFyZURvbWFpbldpdGhGaXJzdFN1YmRvbWFpbldpbGRjYXJkZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGJhcmVBbGxvd2VkSG9zdG5hbWUgPSBhbGxvd2VkSG9zdG5hbWVzLnJlcGxhY2UoL153d3dcXC4vLCBcIlwiKTtcblxuICAgIGlmIChiYXJlRG9tYWluID09PSBiYXJlQWxsb3dlZEhvc3RuYW1lKSB7XG4gICAgICByZXR1cm4gYmFyZUFsbG93ZWRIb3N0bmFtZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7Ly8gaWdub3JlXG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0U3JjID0gaHRtbFN0cmluZyA9PiB7XG4gIGNvbnN0IHR3aXR0ZXJNYXRjaCA9IGh0bWxTdHJpbmcubWF0Y2goUkVfVFdJVFRFUl9FTUJFRCk7XG5cbiAgaWYgKHR3aXR0ZXJNYXRjaCAmJiB0d2l0dGVyTWF0Y2gubGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIHR3aXR0ZXJNYXRjaFsxXTtcbiAgfVxuXG4gIGNvbnN0IGdpc3RNYXRjaCA9IGh0bWxTdHJpbmcubWF0Y2goUkVfR0hfR0lTVF9FTUJFRCk7XG5cbiAgaWYgKGdpc3RNYXRjaCAmJiBnaXN0TWF0Y2gubGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIGdpc3RNYXRjaFsxXTtcbiAgfVxuXG4gIGlmIChSRV9HSVBIWS50ZXN0KGh0bWxTdHJpbmcpKSB7XG4gICAgcmV0dXJuIGBodHRwczovL2dpcGh5LmNvbS9lbWJlZC8ke1JFX0dJUEhZLmV4ZWMoaHRtbFN0cmluZylbMV19YDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gaHRtbFN0cmluZy5tYXRjaChSRV9HRU5FUklDX0VNQkVEKTtcblxuICBpZiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG5cbiAgcmV0dXJuIGh0bWxTdHJpbmc7XG59O1xuZXhwb3J0IGNvbnN0IGVtYmVkZGFibGVVUkxWYWxpZGF0b3IgPSAodXJsLCB2YWxpZGF0ZUVtYmVkZGFibGUpID0+IHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodmFsaWRhdGVFbWJlZGRhYmxlICE9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHZhbGlkYXRlRW1iZWRkYWJsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjb25zdCByZXQgPSB2YWxpZGF0ZUVtYmVkZGFibGUodXJsKTsgLy8gaWYgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZCwgbGVhdmUgdmFsaWRhdGlvbiB0byBkZWZhdWx0XG5cbiAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbGlkYXRlRW1iZWRkYWJsZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0ZUVtYmVkZGFibGU7XG4gICAgfSBlbHNlIGlmICh2YWxpZGF0ZUVtYmVkZGFibGUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiB2YWxpZGF0ZUVtYmVkZGFibGUudGVzdCh1cmwpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZGF0ZUVtYmVkZGFibGUpKSB7XG4gICAgICBmb3IgKGNvbnN0IGRvbWFpbiBvZiB2YWxpZGF0ZUVtYmVkZGFibGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgIGlmICh1cmwubWF0Y2goZG9tYWluKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoSG9zdG5hbWUodXJsLCBkb21haW4pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAhIW1hdGNoSG9zdG5hbWUodXJsLCBBTExPV0VEX0RPTUFJTlMpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../element/embeddable.ts\n");
|
|
3908
3908
|
|
|
3909
3909
|
/***/ }),
|
|
3910
3910
|
|
|
@@ -4344,7 +4344,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
4344
4344
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
4345
4345
|
|
|
4346
4346
|
"use strict";
|
|
4347
|
-
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/${\"@excalidraw/excalidraw\"}@${\"0.17.
|
|
4347
|
+
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/${\"@excalidraw/excalidraw\"}@${\"0.17.6\"}/dist/`;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDOztBQUV0QyxJQUFJLGFBQW9CLEtBQUssZ0RBQVE7QUFDckM7O0FBRUE7QUFDQSxFQUFFLHFCQUF1Qix3REFBd0Qsd0JBQXlCLENBQUMsR0FBRyxRQUE0QixDQUFDO0FBQzNJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcHVibGljUGF0aC5qcz82N2Y5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOViB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4gIC8qIGdsb2JhbCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzp3cml0YWJsZSAqL1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHwgYGh0dHBzOi8vdW5wa2cuY29tLyR7cHJvY2Vzcy5lbnYuVklURV9QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5WSVRFX1BLR19WRVJTSU9OfS9kaXN0L2A7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./publicPath.js\n");
|
|
4348
4348
|
|
|
4349
4349
|
/***/ }),
|
|
4350
4350
|
|
|
@@ -4520,7 +4520,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
4520
4520
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
4521
4521
|
|
|
4522
4522
|
"use strict";
|
|
4523
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\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\");\n/* harmony import */ var _packages_withinBounds__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../packages/withinBounds */ \"../withinBounds.ts\");\n/* harmony import */ var _frame__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../frame */ \"../../frame.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _Scene__WEBPACK_IMPORTED_MODULE_12__ = __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\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`; // getContainerElement and getBoundTextElement and potentially other helpers\n// depend on `Scene` which will not be available when these pure utils are\n// called outside initialized Excalidraw editor instance or even if called\n// from inside Excalidraw if the elements were never cached by Scene (e.g.\n// for library elements).\n//\n// As such, before passing the elements down, we need to initialize a custom\n// Scene instance and assign them to it.\n//\n// FIXME This is a super hacky workaround and we'll need to rewrite this soon.\n\nconst __createSceneForElementsHack__ = elements => {\n const scene = new _Scene__WEBPACK_IMPORTED_MODULE_12__[\"default\"](); // we can't duplicate elements to regenerate ids because we need the\n // orig ids when embedding. So we do another hack of not mapping element\n // ids to Scene instances so that we don't override the editor elements\n // mapping.\n // We still need to clone the objects themselves to regen references.\n\n scene.replaceAllElements((0,_utils__WEBPACK_IMPORTED_MODULE_3__.cloneJSON)(elements), false);\n return scene;\n};\n\nconst truncateText = (element, maxWidth) => {\n if (element.width <= maxWidth) {\n return element;\n }\n\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n ctx.font = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getFontString)({\n fontFamily: element.fontFamily,\n fontSize: element.fontSize\n });\n let text = element.text;\n const metrics = ctx.measureText(text);\n\n if (metrics.width > maxWidth) {\n // we iterate from the right, removing characters one by one instead\n // of bulding the string up. This assumes that it's more likely\n // your frame names will overflow by not that many characters\n // (if ever), so it sohuld be faster this way.\n for (let i = text.length; i > 0; i--) {\n const newText = `${text.slice(0, i)}...`;\n\n if (ctx.measureText(newText).width <= maxWidth) {\n text = newText;\n break;\n }\n }\n }\n\n return (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_11__.newElementWith)(element, {\n text,\n width: maxWidth\n });\n};\n/**\n * When exporting frames, we need to render frame labels which are currently\n * being rendered in DOM when editing. Adding the labels as regular text\n * elements seems like a simple hack. In the future we'll want to move to\n * proper canvas rendering, even within editor (instead of DOM).\n */\n\n\nconst addFrameLabelsAsTextElements = (elements, opts) => {\n const nextElements = [];\n let frameIdx = 0;\n\n for (const element of elements) {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_10__.isFrameElement)(element)) {\n frameIdx++;\n let textElement = (0,_element__WEBPACK_IMPORTED_MODULE_10__.newTextElement)({\n x: element.x,\n y: element.y - _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameOffsetY,\n fontFamily: _constants__WEBPACK_IMPORTED_MODULE_4__.FONT_FAMILY.Assistant,\n fontSize: _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameFontSize,\n lineHeight: _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameLineHeight,\n strokeColor: opts.exportWithDarkMode ? _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameColorDarkTheme : _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameColorLightTheme,\n text: element.name || `Frame ${frameIdx}`\n });\n textElement.y -= textElement.height;\n textElement = truncateText(textElement, element.width);\n nextElements.push(textElement);\n }\n\n nextElements.push(element);\n }\n\n return nextElements;\n};\n\nconst getFrameRenderingConfig = (exportingFrame, frameRendering) => {\n frameRendering = frameRendering || (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)().frameRendering;\n return {\n enabled: exportingFrame ? true : frameRendering.enabled,\n outline: exportingFrame ? false : frameRendering.outline,\n name: exportingFrame ? false : frameRendering.name,\n clip: exportingFrame ? true : frameRendering.clip\n };\n};\n\nconst prepareElementsForRender = ({\n elements,\n exportingFrame,\n frameRendering,\n exportWithDarkMode\n}) => {\n let nextElements;\n\n if (exportingFrame) {\n nextElements = (0,_packages_withinBounds__WEBPACK_IMPORTED_MODULE_8__.elementsOverlappingBBox)({\n elements,\n bounds: exportingFrame,\n type: \"overlap\"\n });\n } else if (frameRendering.enabled && frameRendering.name) {\n nextElements = addFrameLabelsAsTextElements(elements, {\n exportWithDarkMode\n });\n } else {\n nextElements = elements;\n }\n\n return nextElements;\n};\n\nconst exportToCanvas = (elements, appState, files, {\n exportBackground,\n exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING,\n viewBackgroundColor,\n exportingFrame\n}, createCanvas = (width, height) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * appState.exportScale;\n canvas.height = height * appState.exportScale;\n return {\n canvas,\n scale: appState.exportScale\n };\n}) => __awaiter(void 0, void 0, void 0, function* () {\n var _a;\n\n const tempScene = __createSceneForElementsHack__(elements);\n\n elements = tempScene.getNonDeletedElements();\n const frameRendering = getFrameRenderingConfig(exportingFrame !== null && exportingFrame !== void 0 ? exportingFrame : null, (_a = appState.frameRendering) !== null && _a !== void 0 ? _a : null);\n const elementsForRender = prepareElementsForRender({\n elements,\n exportingFrame,\n exportWithDarkMode: appState.exportWithDarkMode,\n frameRendering\n });\n\n if (exportingFrame) {\n exportPadding = 0;\n }\n\n const [minX, minY, width, height] = getCanvasSize(exportingFrame ? [exportingFrame] : (0,_frame__WEBPACK_IMPORTED_MODULE_9__.getRootElements)(elementsForRender), exportPadding);\n const {\n canvas,\n scale = 1\n } = createCanvas(width, height);\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\n const {\n imageCache\n } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elementsForRender).map(element => element.fileId),\n files\n });\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderStaticScene)({\n canvas,\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n elements: elementsForRender,\n visibleElements: elementsForRender,\n scale,\n appState: Object.assign(Object.assign({}, appState), {\n frameRendering,\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + exportPadding,\n scrollY: -minY + exportPadding,\n zoom: defaultAppState.zoom,\n shouldCacheIgnoreZoom: false,\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\"\n }),\n renderConfig: {\n imageCache,\n renderGrid: false,\n isExporting: true\n }\n });\n tempScene.destroy();\n return canvas;\n});\nconst exportToSvg = (elements, appState, files, opts) => __awaiter(void 0, void 0, void 0, function* () {\n var _b, _c, _d;\n\n const tempScene = __createSceneForElementsHack__(elements);\n\n elements = tempScene.getNonDeletedElements();\n const frameRendering = getFrameRenderingConfig((_b = opts === null || opts === void 0 ? void 0 : opts.exportingFrame) !== null && _b !== void 0 ? _b : null, (_c = appState.frameRendering) !== null && _c !== void 0 ? _c : null);\n let {\n exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING,\n exportWithDarkMode = false,\n viewBackgroundColor,\n exportScale = 1,\n exportEmbedScene\n } = appState;\n const {\n exportingFrame = null\n } = opts || {};\n const elementsForRender = prepareElementsForRender({\n elements,\n exportingFrame,\n exportWithDarkMode,\n frameRendering\n });\n\n if (exportingFrame) {\n exportPadding = 0;\n }\n\n let metadata = \"\"; // we need to serialize the \"original\" elements before we put them through\n // the tempScene hack which duplicates and regenerates ids\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 // when embedding scene, we want to embed the origionally supplied\n // elements which don't contain the temp frame labels.\n // But it also requires that the exportToSvg is being supplied with\n // only the elements that we're exporting, and no extra.\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\")\n });\n } catch (error) {\n console.error(error);\n }\n }\n\n const [minX, minY, width, height] = getCanvasSize(exportingFrame ? [exportingFrame] : (0,_frame__WEBPACK_IMPORTED_MODULE_9__.getRootElements)(elementsForRender), exportPadding); // 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 (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/${\"@excalidraw/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\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.5\",\"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 }\n\n const offsetX = -minX + exportPadding;\n const offsetY = -minY + exportPadding;\n const frameElements = (0,_frame__WEBPACK_IMPORTED_MODULE_9__.getFrameElements)(elements);\n let exportingFrameClipPath = \"\";\n\n for (const frame of frameElements) {\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(frame);\n const cx = (x2 - x1) / 2 - (frame.x - x1);\n const cy = (y2 - y1) / 2 - (frame.y - y1);\n exportingFrameClipPath += `<clipPath id=${frame.id}>\n <rect transform=\"translate(${frame.x + offsetX} ${frame.y + offsetY}) rotate(${frame.angle} ${cx} ${cy})\"\n width=\"${frame.width}\"\n height=\"${frame.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(\"${assetPath}Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"${assetPath}Cascadia.woff2\");\n }\n @font-face {\n font-family: \"Assistant\";\n src: url(\"${assetPath}Assistant-Regular.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)(elementsForRender, rsvg, svgRoot, files || {}, {\n offsetX,\n offsetY,\n exportWithDarkMode,\n renderEmbeddables: (_d = opts === null || opts === void 0 ? void 0 : opts.renderEmbeddables) !== null && _d !== void 0 ? _d : false,\n frameRendering\n });\n tempScene.destroy();\n return svgRoot;\n}); // calculate smallest area to fit the contents in\n\nconst getCanvasSize = (elements, exportPadding) => {\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) + exportPadding * 2;\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding * 2;\n return [minX, minY, width, height];\n};\n\nconst getExportSize = (elements, exportPadding, scale) => {\n const [,, width, height] = getCanvasSize(elements, exportPadding).map(dimension => Math.trunc(dimension * scale));\n return [width, height];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGVBQWUsNkRBQVM7QUFDeEIsRUFBRSx1RUFBZ0IsOENBQThDO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUMsR0FBRzs7QUFFSjtBQUNBLG1DQUFtQyxnRUFBZTtBQUNsRCxnQkFBZ0IsZ0RBQVE7QUFDeEIsaUJBQWlCLGdEQUFRO0FBQ3pCO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc2NlbmUvZXhwb3J0LnRzP2MzNzMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9IHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcbiAgICB9XG5cbiAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufTtcblxuaW1wb3J0IHJvdWdoIGZyb20gXCJyb3VnaGpzL2Jpbi9yb3VnaFwiO1xuaW1wb3J0IHsgZ2V0Q29tbW9uQm91bmRzLCBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lVG9TdmcsIHJlbmRlclN0YXRpY1NjZW5lIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBjbG9uZUpTT04sIGRpc3RhbmNlLCBnZXRGb250U3RyaW5nIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBGT05UX0ZBTUlMWSwgRlJBTUVfU1RZTEUsIFNWR19OUywgVEhFTUVfRklMVEVSIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEFwcFN0YXRlIH0gZnJvbSBcIi4uL2FwcFN0YXRlXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVBc0pTT04gfSBmcm9tIFwiLi4vZGF0YS9qc29uXCI7XG5pbXBvcnQgeyBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMsIHVwZGF0ZUltYWdlQ2FjaGUgfSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuaW1wb3J0IHsgZWxlbWVudHNPdmVybGFwcGluZ0JCb3ggfSBmcm9tIFwiLi4vcGFja2FnZXMvd2l0aGluQm91bmRzXCI7XG5pbXBvcnQgeyBnZXRGcmFtZUVsZW1lbnRzLCBnZXRSb290RWxlbWVudHMgfSBmcm9tIFwiLi4vZnJhbWVcIjtcbmltcG9ydCB7IGlzRnJhbWVFbGVtZW50LCBuZXdUZXh0RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgeyBuZXdFbGVtZW50V2l0aCB9IGZyb20gXCIuLi9lbGVtZW50L211dGF0ZUVsZW1lbnRcIjtcbmltcG9ydCBTY2VuZSBmcm9tIFwiLi9TY2VuZVwiO1xuY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDsgLy8gZ2V0Q29udGFpbmVyRWxlbWVudCBhbmQgZ2V0Qm91bmRUZXh0RWxlbWVudCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgaGVscGVyc1xuLy8gZGVwZW5kIG9uIGBTY2VuZWAgd2hpY2ggd2lsbCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gdGhlc2UgcHVyZSB1dGlscyBhcmVcbi8vIGNhbGxlZCBvdXRzaWRlIGluaXRpYWxpemVkIEV4Y2FsaWRyYXcgZWRpdG9yIGluc3RhbmNlIG9yIGV2ZW4gaWYgY2FsbGVkXG4vLyBmcm9tIGluc2lkZSBFeGNhbGlkcmF3IGlmIHRoZSBlbGVtZW50cyB3ZXJlIG5ldmVyIGNhY2hlZCBieSBTY2VuZSAoZS5nLlxuLy8gZm9yIGxpYnJhcnkgZWxlbWVudHMpLlxuLy9cbi8vIEFzIHN1Y2gsIGJlZm9yZSBwYXNzaW5nIHRoZSBlbGVtZW50cyBkb3duLCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgYSBjdXN0b21cbi8vIFNjZW5lIGluc3RhbmNlIGFuZCBhc3NpZ24gdGhlbSB0byBpdC5cbi8vXG4vLyBGSVhNRSBUaGlzIGlzIGEgc3VwZXIgaGFja3kgd29ya2Fyb3VuZCBhbmQgd2UnbGwgbmVlZCB0byByZXdyaXRlIHRoaXMgc29vbi5cblxuY29uc3QgX19jcmVhdGVTY2VuZUZvckVsZW1lbnRzSGFja19fID0gZWxlbWVudHMgPT4ge1xuICBjb25zdCBzY2VuZSA9IG5ldyBTY2VuZSgpOyAvLyB3ZSBjYW4ndCBkdXBsaWNhdGUgZWxlbWVudHMgdG8gcmVnZW5lcmF0ZSBpZHMgYmVjYXVzZSB3ZSBuZWVkIHRoZVxuICAvLyBvcmlnIGlkcyB3aGVuIGVtYmVkZGluZy4gU28gd2UgZG8gYW5vdGhlciBoYWNrIG9mIG5vdCBtYXBwaW5nIGVsZW1lbnRcbiAgLy8gaWRzIHRvIFNjZW5lIGluc3RhbmNlcyBzbyB0aGF0IHdlIGRvbid0IG92ZXJyaWRlIHRoZSBlZGl0b3IgZWxlbWVudHNcbiAgLy8gbWFwcGluZy5cbiAgLy8gV2Ugc3RpbGwgbmVlZCB0byBjbG9uZSB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzIHRvIHJlZ2VuIHJlZmVyZW5jZXMuXG5cbiAgc2NlbmUucmVwbGFjZUFsbEVsZW1lbnRzKGNsb25lSlNPTihlbGVtZW50cyksIGZhbHNlKTtcbiAgcmV0dXJuIHNjZW5lO1xufTtcblxuY29uc3QgdHJ1bmNhdGVUZXh0ID0gKGVsZW1lbnQsIG1heFdpZHRoKSA9PiB7XG4gIGlmIChlbGVtZW50LndpZHRoIDw9IG1heFdpZHRoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICBjdHguZm9udCA9IGdldEZvbnRTdHJpbmcoe1xuICAgIGZvbnRGYW1pbHk6IGVsZW1lbnQuZm9udEZhbWlseSxcbiAgICBmb250U2l6ZTogZWxlbWVudC5mb250U2l6ZVxuICB9KTtcbiAgbGV0IHRleHQgPSBlbGVtZW50LnRleHQ7XG4gIGNvbnN0IG1ldHJpY3MgPSBjdHgubWVhc3VyZVRleHQodGV4dCk7XG5cbiAgaWYgKG1ldHJpY3Mud2lkdGggPiBtYXhXaWR0aCkge1xuICAgIC8vIHdlIGl0ZXJhdGUgZnJvbSB0aGUgcmlnaHQsIHJlbW92aW5nIGNoYXJhY3RlcnMgb25lIGJ5IG9uZSBpbnN0ZWFkXG4gICAgLy8gb2YgYnVsZGluZyB0aGUgc3RyaW5nIHVwLiBUaGlzIGFzc3VtZXMgdGhhdCBpdCdzIG1vcmUgbGlrZWx5XG4gICAgLy8geW91ciBmcmFtZSBuYW1lcyB3aWxsIG92ZXJmbG93IGJ5IG5vdCB0aGF0IG1hbnkgY2hhcmFjdGVyc1xuICAgIC8vIChpZiBldmVyKSwgc28gaXQgc29odWxkIGJlIGZhc3RlciB0aGlzIHdheS5cbiAgICBmb3IgKGxldCBpID0gdGV4dC5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IG5ld1RleHQgPSBgJHt0ZXh0LnNsaWNlKDAsIGkpfS4uLmA7XG5cbiAgICAgIGlmIChjdHgubWVhc3VyZVRleHQobmV3VGV4dCkud2lkdGggPD0gbWF4V2lkdGgpIHtcbiAgICAgICAgdGV4dCA9IG5ld1RleHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdFbGVtZW50V2l0aChlbGVtZW50LCB7XG4gICAgdGV4dCxcbiAgICB3aWR0aDogbWF4V2lkdGhcbiAgfSk7XG59O1xuLyoqXG4gKiBXaGVuIGV4cG9ydGluZyBmcmFtZXMsIHdlIG5lZWQgdG8gcmVuZGVyIGZyYW1lIGxhYmVscyB3aGljaCBhcmUgY3VycmVudGx5XG4gKiBiZWluZyByZW5kZXJlZCBpbiBET00gd2hlbiBlZGl0aW5nLiBBZGRpbmcgdGhlIGxhYmVscyBhcyByZWd1bGFyIHRleHRcbiAqIGVsZW1lbnRzIHNlZW1zIGxpa2UgYSBzaW1wbGUgaGFjay4gSW4gdGhlIGZ1dHVyZSB3ZSdsbCB3YW50IHRvIG1vdmUgdG9cbiAqIHByb3BlciBjYW52YXMgcmVuZGVyaW5nLCBldmVuIHdpdGhpbiBlZGl0b3IgKGluc3RlYWQgb2YgRE9NKS5cbiAqL1xuXG5cbmNvbnN0IGFkZEZyYW1lTGFiZWxzQXNUZXh0RWxlbWVudHMgPSAoZWxlbWVudHMsIG9wdHMpID0+IHtcbiAgY29uc3QgbmV4dEVsZW1lbnRzID0gW107XG4gIGxldCBmcmFtZUlkeCA9IDA7XG5cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgaWYgKGlzRnJhbWVFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICBmcmFtZUlkeCsrO1xuICAgICAgbGV0IHRleHRFbGVtZW50ID0gbmV3VGV4dEVsZW1lbnQoe1xuICAgICAgICB4OiBlbGVtZW50LngsXG4gICAgICAgIHk6IGVsZW1lbnQueSAtIEZSQU1FX1NUWUxFLm5hbWVPZmZzZXRZLFxuICAgICAgICBmb250RmFtaWx5OiBGT05UX0ZBTUlMWS5Bc3Npc3RhbnQsXG4gICAgICAgIGZvbnRTaXplOiBGUkFNRV9TVFlMRS5uYW1lRm9udFNpemUsXG4gICAgICAgIGxpbmVIZWlnaHQ6IEZSQU1FX1NUWUxFLm5hbWVMaW5lSGVpZ2h0LFxuICAgICAgICBzdHJva2VDb2xvcjogb3B0cy5leHBvcnRXaXRoRGFya01vZGUgPyBGUkFNRV9TVFlMRS5uYW1lQ29sb3JEYXJrVGhlbWUgOiBGUkFNRV9TVFlMRS5uYW1lQ29sb3JMaWdodFRoZW1lLFxuICAgICAgICB0ZXh0OiBlbGVtZW50Lm5hbWUgfHwgYEZyYW1lICR7ZnJhbWVJZHh9YFxuICAgICAgfSk7XG4gICAgICB0ZXh0RWxlbWVudC55IC09IHRleHRFbGVtZW50LmhlaWdodDtcbiAgICAgIHRleHRFbGVtZW50ID0gdHJ1bmNhdGVUZXh0KHRleHRFbGVtZW50LCBlbGVtZW50LndpZHRoKTtcbiAgICAgIG5leHRFbGVtZW50cy5wdXNoKHRleHRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBuZXh0RWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0RWxlbWVudHM7XG59O1xuXG5jb25zdCBnZXRGcmFtZVJlbmRlcmluZ0NvbmZpZyA9IChleHBvcnRpbmdGcmFtZSwgZnJhbWVSZW5kZXJpbmcpID0+IHtcbiAgZnJhbWVSZW5kZXJpbmcgPSBmcmFtZVJlbmRlcmluZyB8fCBnZXREZWZhdWx0QXBwU3RhdGUoKS5mcmFtZVJlbmRlcmluZztcbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkOiBleHBvcnRpbmdGcmFtZSA/IHRydWUgOiBmcmFtZVJlbmRlcmluZy5lbmFibGVkLFxuICAgIG91dGxpbmU6IGV4cG9ydGluZ0ZyYW1lID8gZmFsc2UgOiBmcmFtZVJlbmRlcmluZy5vdXRsaW5lLFxuICAgIG5hbWU6IGV4cG9ydGluZ0ZyYW1lID8gZmFsc2UgOiBmcmFtZVJlbmRlcmluZy5uYW1lLFxuICAgIGNsaXA6IGV4cG9ydGluZ0ZyYW1lID8gdHJ1ZSA6IGZyYW1lUmVuZGVyaW5nLmNsaXBcbiAgfTtcbn07XG5cbmNvbnN0IHByZXBhcmVFbGVtZW50c0ZvclJlbmRlciA9ICh7XG4gIGVsZW1lbnRzLFxuICBleHBvcnRpbmdGcmFtZSxcbiAgZnJhbWVSZW5kZXJpbmcsXG4gIGV4cG9ydFdpdGhEYXJrTW9kZVxufSkgPT4ge1xuICBsZXQgbmV4dEVsZW1lbnRzO1xuXG4gIGlmIChleHBvcnRpbmdGcmFtZSkge1xuICAgIG5leHRFbGVtZW50cyA9IGVsZW1lbnRzT3ZlcmxhcHBpbmdCQm94KHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgYm91bmRzOiBleHBvcnRpbmdGcmFtZSxcbiAgICAgIHR5cGU6IFwib3ZlcmxhcFwiXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoZnJhbWVSZW5kZXJpbmcuZW5hYmxlZCAmJiBmcmFtZVJlbmRlcmluZy5uYW1lKSB7XG4gICAgbmV4dEVsZW1lbnRzID0gYWRkRnJhbWVMYWJlbHNBc1RleHRFbGVtZW50cyhlbGVtZW50cywge1xuICAgICAgZXhwb3J0V2l0aERhcmtNb2RlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEVsZW1lbnRzID0gZWxlbWVudHM7XG4gIH1cblxuICByZXR1cm4gbmV4dEVsZW1lbnRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMsIHtcbiAgZXhwb3J0QmFja2dyb3VuZCxcbiAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gIGV4cG9ydGluZ0ZyYW1lXG59LCBjcmVhdGVDYW52YXMgPSAod2lkdGgsIGhlaWdodCkgPT4ge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogYXBwU3RhdGUuZXhwb3J0U2NhbGU7XG4gIHJldHVybiB7XG4gICAgY2FudmFzLFxuICAgIHNjYWxlOiBhcHBTdGF0ZS5leHBvcnRTY2FsZVxuICB9O1xufSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gIHZhciBfYTtcblxuICBjb25zdCB0ZW1wU2NlbmUgPSBfX2NyZWF0ZVNjZW5lRm9yRWxlbWVudHNIYWNrX18oZWxlbWVudHMpO1xuXG4gIGVsZW1lbnRzID0gdGVtcFNjZW5lLmdldE5vbkRlbGV0ZWRFbGVtZW50cygpO1xuICBjb25zdCBmcmFtZVJlbmRlcmluZyA9IGdldEZyYW1lUmVuZGVyaW5nQ29uZmlnKGV4cG9ydGluZ0ZyYW1lICE9PSBudWxsICYmIGV4cG9ydGluZ0ZyYW1lICE9PSB2b2lkIDAgPyBleHBvcnRpbmdGcmFtZSA6IG51bGwsIChfYSA9IGFwcFN0YXRlLmZyYW1lUmVuZGVyaW5nKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsKTtcbiAgY29uc3QgZWxlbWVudHNGb3JSZW5kZXIgPSBwcmVwYXJlRWxlbWVudHNGb3JSZW5kZXIoe1xuICAgIGVsZW1lbnRzLFxuICAgIGV4cG9ydGluZ0ZyYW1lLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlLFxuICAgIGZyYW1lUmVuZGVyaW5nXG4gIH0pO1xuXG4gIGlmIChleHBvcnRpbmdGcmFtZSkge1xuICAgIGV4cG9ydFBhZGRpbmcgPSAwO1xuICB9XG5cbiAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShleHBvcnRpbmdGcmFtZSA/IFtleHBvcnRpbmdGcmFtZV0gOiBnZXRSb290RWxlbWVudHMoZWxlbWVudHNGb3JSZW5kZXIpLCBleHBvcnRQYWRkaW5nKTtcbiAgY29uc3Qge1xuICAgIGNhbnZhcyxcbiAgICBzY2FsZSA9IDFcbiAgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZGVmYXVsdEFwcFN0YXRlID0gZ2V0RGVmYXVsdEFwcFN0YXRlKCk7XG4gIGNvbnN0IHtcbiAgICBpbWFnZUNhY2hlXG4gIH0gPSB5aWVsZCB1cGRhdGVJbWFnZUNhY2hlKHtcbiAgICBpbWFnZUNhY2hlOiBuZXcgTWFwKCksXG4gICAgZmlsZUlkczogZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzKGVsZW1lbnRzRm9yUmVuZGVyKS5tYXAoZWxlbWVudCA9PiBlbGVtZW50LmZpbGVJZCksXG4gICAgZmlsZXNcbiAgfSk7XG4gIHJlbmRlclN0YXRpY1NjZW5lKHtcbiAgICBjYW52YXMsXG4gICAgcmM6IHJvdWdoLmNhbnZhcyhjYW52YXMpLFxuICAgIGVsZW1lbnRzOiBlbGVtZW50c0ZvclJlbmRlcixcbiAgICB2aXNpYmxlRWxlbWVudHM6IGVsZW1lbnRzRm9yUmVuZGVyLFxuICAgIHNjYWxlLFxuICAgIGFwcFN0YXRlOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGFwcFN0YXRlKSwge1xuICAgICAgZnJhbWVSZW5kZXJpbmcsXG4gICAgICB2aWV3QmFja2dyb3VuZENvbG9yOiBleHBvcnRCYWNrZ3JvdW5kID8gdmlld0JhY2tncm91bmRDb2xvciA6IG51bGwsXG4gICAgICBzY3JvbGxYOiAtbWluWCArIGV4cG9ydFBhZGRpbmcsXG4gICAgICBzY3JvbGxZOiAtbWluWSArIGV4cG9ydFBhZGRpbmcsXG4gICAgICB6b29tOiBkZWZhdWx0QXBwU3RhdGUuem9vbSxcbiAgICAgIHNob3VsZENhY2hlSWdub3JlWm9vbTogZmFsc2UsXG4gICAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCJcbiAgICB9KSxcbiAgICByZW5kZXJDb25maWc6IHtcbiAgICAgIGltYWdlQ2FjaGUsXG4gICAgICByZW5kZXJHcmlkOiBmYWxzZSxcbiAgICAgIGlzRXhwb3J0aW5nOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgdGVtcFNjZW5lLmRlc3Ryb3koKTtcbiAgcmV0dXJuIGNhbnZhcztcbn0pO1xuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMsIG9wdHMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICB2YXIgX2IsIF9jLCBfZDtcblxuICBjb25zdCB0ZW1wU2NlbmUgPSBfX2NyZWF0ZVNjZW5lRm9yRWxlbWVudHNIYWNrX18oZWxlbWVudHMpO1xuXG4gIGVsZW1lbnRzID0gdGVtcFNjZW5lLmdldE5vbkRlbGV0ZWRFbGVtZW50cygpO1xuICBjb25zdCBmcmFtZVJlbmRlcmluZyA9IGdldEZyYW1lUmVuZGVyaW5nQ29uZmlnKChfYiA9IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5leHBvcnRpbmdGcmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbCwgKF9jID0gYXBwU3RhdGUuZnJhbWVSZW5kZXJpbmcpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IG51bGwpO1xuICBsZXQge1xuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZSA9IGZhbHNlLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgZXhwb3J0U2NhbGUgPSAxLFxuICAgIGV4cG9ydEVtYmVkU2NlbmVcbiAgfSA9IGFwcFN0YXRlO1xuICBjb25zdCB7XG4gICAgZXhwb3J0aW5nRnJhbWUgPSBudWxsXG4gIH0gPSBvcHRzIHx8IHt9O1xuICBjb25zdCBlbGVtZW50c0ZvclJlbmRlciA9IHByZXBhcmVFbGVtZW50c0ZvclJlbmRlcih7XG4gICAgZWxlbWVudHMsXG4gICAgZXhwb3J0aW5nRnJhbWUsXG4gICAgZXhwb3J0V2l0aERhcmtNb2RlLFxuICAgIGZyYW1lUmVuZGVyaW5nXG4gIH0pO1xuXG4gIGlmIChleHBvcnRpbmdGcmFtZSkge1xuICAgIGV4cG9ydFBhZGRpbmcgPSAwO1xuICB9XG5cbiAgbGV0IG1ldGFkYXRhID0gXCJcIjsgLy8gd2UgbmVlZCB0byBzZXJpYWxpemUgdGhlIFwib3JpZ2luYWxcIiBlbGVtZW50cyBiZWZvcmUgd2UgcHV0IHRoZW0gdGhyb3VnaFxuICAvLyB0aGUgdGVtcFNjZW5lIGhhY2sgd2hpY2ggZHVwbGljYXRlcyBhbmQgcmVnZW5lcmF0ZXMgaWRzXG5cbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSB5aWVsZCAoeWllbGQgaW1wb3J0KFxuICAgICAgLyogd2VicGFja0NodW5rTmFtZTogXCJpbWFnZVwiICovXG4gICAgICBcIi4uLy4uL3NyYy9kYXRhL2ltYWdlXCIpKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIC8vIHdoZW4gZW1iZWRkaW5nIHNjZW5lLCB3ZSB3YW50IHRvIGVtYmVkIHRoZSBvcmlnaW9uYWxseSBzdXBwbGllZFxuICAgICAgICAvLyBlbGVtZW50cyB3aGljaCBkb24ndCBjb250YWluIHRoZSB0ZW1wIGZyYW1lIGxhYmVscy5cbiAgICAgICAgLy8gQnV0IGl0IGFsc28gcmVxdWlyZXMgdGhhdCB0aGUgZXhwb3J0VG9TdmcgaXMgYmVpbmcgc3VwcGxpZWQgd2l0aFxuICAgICAgICAvLyBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IHdlJ3JlIGV4cG9ydGluZywgYW5kIG5vIGV4dHJhLlxuICAgICAgICB0ZXh0OiBzZXJpYWxpemVBc0pTT04oZWxlbWVudHMsIGFwcFN0YXRlLCBmaWxlcyB8fCB7fSwgXCJsb2NhbFwiKVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZXhwb3J0aW5nRnJhbWUgPyBbZXhwb3J0aW5nRnJhbWVdIDogZ2V0Um9vdEVsZW1lbnRzKGVsZW1lbnRzRm9yUmVuZGVyKSwgZXhwb3J0UGFkZGluZyk7IC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcblxuICBjb25zdCBzdmdSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJzdmdcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmVyc2lvblwiLCBcIjEuMVwiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBTVkdfTlMpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aCAqIGV4cG9ydFNjYWxlfWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHQgKiBleHBvcnRTY2FsZX1gKTtcblxuICBpZiAoZXhwb3J0V2l0aERhcmtNb2RlKSB7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJcIiwgVEhFTUVfRklMVEVSKTtcbiAgfVxuXG4gIGxldCBhc3NldFBhdGggPSBcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vXCI7IC8vIEFzc2V0IHBhdGggbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBvbmx5IHdoZW4gdXNpbmcgcGFja2FnZVxuXG4gIGlmIChwcm9jZXNzLmVudi5WSVRFX0lTX0VYQ0FMSURSQVdfTlBNX1BBQ0tBR0UpIHtcbiAgICBhc3NldFBhdGggPSB3aW5kb3cuRVhDQUxJRFJBV19BU1NFVF9QQVRIIHx8IGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlZJVEVfUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059YDtcblxuICAgIGlmIChhc3NldFBhdGggPT09IG51bGwgfHwgYXNzZXRQYXRoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhc3NldFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIGFzc2V0UGF0aCA9IGFzc2V0UGF0aC5yZXBsYWNlKFwiL1wiLCBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9gKTtcbiAgICB9XG5cbiAgICBhc3NldFBhdGggPSBgJHthc3NldFBhdGh9L2Rpc3QvZXhjYWxpZHJhdy1hc3NldHMvYDtcbiAgfVxuXG4gIGNvbnN0IG9mZnNldFggPSAtbWluWCArIGV4cG9ydFBhZGRpbmc7XG4gIGNvbnN0IG9mZnNldFkgPSAtbWluWSArIGV4cG9ydFBhZGRpbmc7XG4gIGNvbnN0IGZyYW1lRWxlbWVudHMgPSBnZXRGcmFtZUVsZW1lbnRzKGVsZW1lbnRzKTtcbiAgbGV0IGV4cG9ydGluZ0ZyYW1lQ2xpcFBhdGggPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgZnJhbWUgb2YgZnJhbWVFbGVtZW50cykge1xuICAgIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZnJhbWUpO1xuICAgIGNvbnN0IGN4ID0gKHgyIC0geDEpIC8gMiAtIChmcmFtZS54IC0geDEpO1xuICAgIGNvbnN0IGN5ID0gKHkyIC0geTEpIC8gMiAtIChmcmFtZS55IC0geTEpO1xuICAgIGV4cG9ydGluZ0ZyYW1lQ2xpcFBhdGggKz0gYDxjbGlwUGF0aCBpZD0ke2ZyYW1lLmlkfT5cbiAgICAgICAgICAgIDxyZWN0IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgke2ZyYW1lLnggKyBvZmZzZXRYfSAke2ZyYW1lLnkgKyBvZmZzZXRZfSkgcm90YXRlKCR7ZnJhbWUuYW5nbGV9ICR7Y3h9ICR7Y3l9KVwiXG4gICAgICAgICAgd2lkdGg9XCIke2ZyYW1lLndpZHRofVwiXG4gICAgICAgICAgaGVpZ2h0PVwiJHtmcmFtZS5oZWlnaHR9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9yZWN0PlxuICAgICAgICA8L2NsaXBQYXRoPmA7XG4gIH1cblxuICBzdmdSb290LmlubmVySFRNTCA9IGBcbiAgJHtTVkdfRVhQT1JUX1RBR31cbiAgJHttZXRhZGF0YX1cbiAgPGRlZnM+XG4gICAgPHN0eWxlIGNsYXNzPVwic3R5bGUtZm9udHNcIj5cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJWaXJnaWxcIjtcbiAgICAgICAgc3JjOiB1cmwoXCIke2Fzc2V0UGF0aH1WaXJnaWwud29mZjJcIik7XG4gICAgICB9XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiQ2FzY2FkaWFcIjtcbiAgICAgICAgc3JjOiB1cmwoXCIke2Fzc2V0UGF0aH1DYXNjYWRpYS53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJBc3Npc3RhbnRcIjtcbiAgICAgICAgc3JjOiB1cmwoXCIke2Fzc2V0UGF0aH1Bc3Npc3RhbnQtUmVndWxhci53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICAgICR7ZXhwb3J0aW5nRnJhbWVDbGlwUGF0aH1cbiAgPC9kZWZzPlxuICBgOyAvLyByZW5kZXIgYmFja2dyb3VuZCByZWN0XG5cbiAgaWYgKGFwcFN0YXRlLmV4cG9ydEJhY2tncm91bmQgJiYgdmlld0JhY2tncm91bmRDb2xvcikge1xuICAgIGNvbnN0IHJlY3QgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHNGb3JSZW5kZXIsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WCxcbiAgICBvZmZzZXRZLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgICByZW5kZXJFbWJlZGRhYmxlczogKF9kID0gb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLnJlbmRlckVtYmVkZGFibGVzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBmYWxzZSxcbiAgICBmcmFtZVJlbmRlcmluZ1xuICB9KTtcbiAgdGVtcFNjZW5lLmRlc3Ryb3koKTtcbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59KTsgLy8gY2FsY3VsYXRlIHNtYWxsZXN0IGFyZWEgdG8gZml0IHRoZSBjb250ZW50cyBpblxuXG5jb25zdCBnZXRDYW52YXNTaXplID0gKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IGdldENvbW1vbkJvdW5kcyhlbGVtZW50cyk7XG4gIGNvbnN0IHdpZHRoID0gZGlzdGFuY2UobWluWCwgbWF4WCkgKyBleHBvcnRQYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gZGlzdGFuY2UobWluWSwgbWF4WSkgKyBleHBvcnRQYWRkaW5nICogMjtcbiAgcmV0dXJuIFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHBvcnRTaXplID0gKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nLCBzY2FsZSkgPT4ge1xuICBjb25zdCBbLCwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKS5tYXAoZGltZW5zaW9uID0+IE1hdGgudHJ1bmMoZGltZW5zaW9uICogc2NhbGUpKTtcbiAgcmV0dXJuIFt3aWR0aCwgaGVpZ2h0XTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
|
|
4523
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\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\");\n/* harmony import */ var _packages_withinBounds__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../packages/withinBounds */ \"../withinBounds.ts\");\n/* harmony import */ var _frame__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../frame */ \"../../frame.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _Scene__WEBPACK_IMPORTED_MODULE_12__ = __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\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`; // getContainerElement and getBoundTextElement and potentially other helpers\n// depend on `Scene` which will not be available when these pure utils are\n// called outside initialized Excalidraw editor instance or even if called\n// from inside Excalidraw if the elements were never cached by Scene (e.g.\n// for library elements).\n//\n// As such, before passing the elements down, we need to initialize a custom\n// Scene instance and assign them to it.\n//\n// FIXME This is a super hacky workaround and we'll need to rewrite this soon.\n\nconst __createSceneForElementsHack__ = elements => {\n const scene = new _Scene__WEBPACK_IMPORTED_MODULE_12__[\"default\"](); // we can't duplicate elements to regenerate ids because we need the\n // orig ids when embedding. So we do another hack of not mapping element\n // ids to Scene instances so that we don't override the editor elements\n // mapping.\n // We still need to clone the objects themselves to regen references.\n\n scene.replaceAllElements((0,_utils__WEBPACK_IMPORTED_MODULE_3__.cloneJSON)(elements), false);\n return scene;\n};\n\nconst truncateText = (element, maxWidth) => {\n if (element.width <= maxWidth) {\n return element;\n }\n\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n ctx.font = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getFontString)({\n fontFamily: element.fontFamily,\n fontSize: element.fontSize\n });\n let text = element.text;\n const metrics = ctx.measureText(text);\n\n if (metrics.width > maxWidth) {\n // we iterate from the right, removing characters one by one instead\n // of bulding the string up. This assumes that it's more likely\n // your frame names will overflow by not that many characters\n // (if ever), so it sohuld be faster this way.\n for (let i = text.length; i > 0; i--) {\n const newText = `${text.slice(0, i)}...`;\n\n if (ctx.measureText(newText).width <= maxWidth) {\n text = newText;\n break;\n }\n }\n }\n\n return (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_11__.newElementWith)(element, {\n text,\n width: maxWidth\n });\n};\n/**\n * When exporting frames, we need to render frame labels which are currently\n * being rendered in DOM when editing. Adding the labels as regular text\n * elements seems like a simple hack. In the future we'll want to move to\n * proper canvas rendering, even within editor (instead of DOM).\n */\n\n\nconst addFrameLabelsAsTextElements = (elements, opts) => {\n const nextElements = [];\n let frameIdx = 0;\n\n for (const element of elements) {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_10__.isFrameElement)(element)) {\n frameIdx++;\n let textElement = (0,_element__WEBPACK_IMPORTED_MODULE_10__.newTextElement)({\n x: element.x,\n y: element.y - _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameOffsetY,\n fontFamily: _constants__WEBPACK_IMPORTED_MODULE_4__.FONT_FAMILY.Assistant,\n fontSize: _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameFontSize,\n lineHeight: _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameLineHeight,\n strokeColor: opts.exportWithDarkMode ? _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameColorDarkTheme : _constants__WEBPACK_IMPORTED_MODULE_4__.FRAME_STYLE.nameColorLightTheme,\n text: element.name || `Frame ${frameIdx}`\n });\n textElement.y -= textElement.height;\n textElement = truncateText(textElement, element.width);\n nextElements.push(textElement);\n }\n\n nextElements.push(element);\n }\n\n return nextElements;\n};\n\nconst getFrameRenderingConfig = (exportingFrame, frameRendering) => {\n frameRendering = frameRendering || (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)().frameRendering;\n return {\n enabled: exportingFrame ? true : frameRendering.enabled,\n outline: exportingFrame ? false : frameRendering.outline,\n name: exportingFrame ? false : frameRendering.name,\n clip: exportingFrame ? true : frameRendering.clip\n };\n};\n\nconst prepareElementsForRender = ({\n elements,\n exportingFrame,\n frameRendering,\n exportWithDarkMode\n}) => {\n let nextElements;\n\n if (exportingFrame) {\n nextElements = (0,_packages_withinBounds__WEBPACK_IMPORTED_MODULE_8__.elementsOverlappingBBox)({\n elements,\n bounds: exportingFrame,\n type: \"overlap\"\n });\n } else if (frameRendering.enabled && frameRendering.name) {\n nextElements = addFrameLabelsAsTextElements(elements, {\n exportWithDarkMode\n });\n } else {\n nextElements = elements;\n }\n\n return nextElements;\n};\n\nconst exportToCanvas = (elements, appState, files, {\n exportBackground,\n exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING,\n viewBackgroundColor,\n exportingFrame\n}, createCanvas = (width, height) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * appState.exportScale;\n canvas.height = height * appState.exportScale;\n return {\n canvas,\n scale: appState.exportScale\n };\n}) => __awaiter(void 0, void 0, void 0, function* () {\n var _a;\n\n const tempScene = __createSceneForElementsHack__(elements);\n\n elements = tempScene.getNonDeletedElements();\n const frameRendering = getFrameRenderingConfig(exportingFrame !== null && exportingFrame !== void 0 ? exportingFrame : null, (_a = appState.frameRendering) !== null && _a !== void 0 ? _a : null);\n const elementsForRender = prepareElementsForRender({\n elements,\n exportingFrame,\n exportWithDarkMode: appState.exportWithDarkMode,\n frameRendering\n });\n\n if (exportingFrame) {\n exportPadding = 0;\n }\n\n const [minX, minY, width, height] = getCanvasSize(exportingFrame ? [exportingFrame] : (0,_frame__WEBPACK_IMPORTED_MODULE_9__.getRootElements)(elementsForRender), exportPadding);\n const {\n canvas,\n scale = 1\n } = createCanvas(width, height);\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\n const {\n imageCache\n } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elementsForRender).map(element => element.fileId),\n files\n });\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderStaticScene)({\n canvas,\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n elements: elementsForRender,\n visibleElements: elementsForRender,\n scale,\n appState: Object.assign(Object.assign({}, appState), {\n frameRendering,\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + exportPadding,\n scrollY: -minY + exportPadding,\n zoom: defaultAppState.zoom,\n shouldCacheIgnoreZoom: false,\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\"\n }),\n renderConfig: {\n imageCache,\n renderGrid: false,\n isExporting: true\n }\n });\n tempScene.destroy();\n return canvas;\n});\nconst exportToSvg = (elements, appState, files, opts) => __awaiter(void 0, void 0, void 0, function* () {\n var _b, _c, _d;\n\n const tempScene = __createSceneForElementsHack__(elements);\n\n elements = tempScene.getNonDeletedElements();\n const frameRendering = getFrameRenderingConfig((_b = opts === null || opts === void 0 ? void 0 : opts.exportingFrame) !== null && _b !== void 0 ? _b : null, (_c = appState.frameRendering) !== null && _c !== void 0 ? _c : null);\n let {\n exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING,\n exportWithDarkMode = false,\n viewBackgroundColor,\n exportScale = 1,\n exportEmbedScene\n } = appState;\n const {\n exportingFrame = null\n } = opts || {};\n const elementsForRender = prepareElementsForRender({\n elements,\n exportingFrame,\n exportWithDarkMode,\n frameRendering\n });\n\n if (exportingFrame) {\n exportPadding = 0;\n }\n\n let metadata = \"\"; // we need to serialize the \"original\" elements before we put them through\n // the tempScene hack which duplicates and regenerates ids\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 // when embedding scene, we want to embed the origionally supplied\n // elements which don't contain the temp frame labels.\n // But it also requires that the exportToSvg is being supplied with\n // only the elements that we're exporting, and no extra.\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\")\n });\n } catch (error) {\n console.error(error);\n }\n }\n\n const [minX, minY, width, height] = getCanvasSize(exportingFrame ? [exportingFrame] : (0,_frame__WEBPACK_IMPORTED_MODULE_9__.getRootElements)(elementsForRender), exportPadding); // 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 (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/${\"@excalidraw/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\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.6\",\"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 }\n\n const offsetX = -minX + exportPadding;\n const offsetY = -minY + exportPadding;\n const frameElements = (0,_frame__WEBPACK_IMPORTED_MODULE_9__.getFrameElements)(elements);\n let exportingFrameClipPath = \"\";\n\n for (const frame of frameElements) {\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(frame);\n const cx = (x2 - x1) / 2 - (frame.x - x1);\n const cy = (y2 - y1) / 2 - (frame.y - y1);\n exportingFrameClipPath += `<clipPath id=${frame.id}>\n <rect transform=\"translate(${frame.x + offsetX} ${frame.y + offsetY}) rotate(${frame.angle} ${cx} ${cy})\"\n width=\"${frame.width}\"\n height=\"${frame.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(\"${assetPath}Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"${assetPath}Cascadia.woff2\");\n }\n @font-face {\n font-family: \"Assistant\";\n src: url(\"${assetPath}Assistant-Regular.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)(elementsForRender, rsvg, svgRoot, files || {}, {\n offsetX,\n offsetY,\n exportWithDarkMode,\n renderEmbeddables: (_d = opts === null || opts === void 0 ? void 0 : opts.renderEmbeddables) !== null && _d !== void 0 ? _d : false,\n frameRendering\n });\n tempScene.destroy();\n return svgRoot;\n}); // calculate smallest area to fit the contents in\n\nconst getCanvasSize = (elements, exportPadding) => {\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) + exportPadding * 2;\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding * 2;\n return [minX, minY, width, height];\n};\n\nconst getExportSize = (elements, exportPadding, scale) => {\n const [,, width, height] = getCanvasSize(elements, exportPadding).map(dimension => Math.trunc(dimension * scale));\n return [width, height];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGVBQWUsNkRBQVM7QUFDeEIsRUFBRSx1RUFBZ0IsOENBQThDO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUMsR0FBRzs7QUFFSjtBQUNBLG1DQUFtQyxnRUFBZTtBQUNsRCxnQkFBZ0IsZ0RBQVE7QUFDeEIsaUJBQWlCLGdEQUFRO0FBQ3pCO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc2NlbmUvZXhwb3J0LnRzP2MzNzMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9IHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcbiAgICB9XG5cbiAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufTtcblxuaW1wb3J0IHJvdWdoIGZyb20gXCJyb3VnaGpzL2Jpbi9yb3VnaFwiO1xuaW1wb3J0IHsgZ2V0Q29tbW9uQm91bmRzLCBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lVG9TdmcsIHJlbmRlclN0YXRpY1NjZW5lIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBjbG9uZUpTT04sIGRpc3RhbmNlLCBnZXRGb250U3RyaW5nIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBGT05UX0ZBTUlMWSwgRlJBTUVfU1RZTEUsIFNWR19OUywgVEhFTUVfRklMVEVSIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEFwcFN0YXRlIH0gZnJvbSBcIi4uL2FwcFN0YXRlXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVBc0pTT04gfSBmcm9tIFwiLi4vZGF0YS9qc29uXCI7XG5pbXBvcnQgeyBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMsIHVwZGF0ZUltYWdlQ2FjaGUgfSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuaW1wb3J0IHsgZWxlbWVudHNPdmVybGFwcGluZ0JCb3ggfSBmcm9tIFwiLi4vcGFja2FnZXMvd2l0aGluQm91bmRzXCI7XG5pbXBvcnQgeyBnZXRGcmFtZUVsZW1lbnRzLCBnZXRSb290RWxlbWVudHMgfSBmcm9tIFwiLi4vZnJhbWVcIjtcbmltcG9ydCB7IGlzRnJhbWVFbGVtZW50LCBuZXdUZXh0RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgeyBuZXdFbGVtZW50V2l0aCB9IGZyb20gXCIuLi9lbGVtZW50L211dGF0ZUVsZW1lbnRcIjtcbmltcG9ydCBTY2VuZSBmcm9tIFwiLi9TY2VuZVwiO1xuY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDsgLy8gZ2V0Q29udGFpbmVyRWxlbWVudCBhbmQgZ2V0Qm91bmRUZXh0RWxlbWVudCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgaGVscGVyc1xuLy8gZGVwZW5kIG9uIGBTY2VuZWAgd2hpY2ggd2lsbCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gdGhlc2UgcHVyZSB1dGlscyBhcmVcbi8vIGNhbGxlZCBvdXRzaWRlIGluaXRpYWxpemVkIEV4Y2FsaWRyYXcgZWRpdG9yIGluc3RhbmNlIG9yIGV2ZW4gaWYgY2FsbGVkXG4vLyBmcm9tIGluc2lkZSBFeGNhbGlkcmF3IGlmIHRoZSBlbGVtZW50cyB3ZXJlIG5ldmVyIGNhY2hlZCBieSBTY2VuZSAoZS5nLlxuLy8gZm9yIGxpYnJhcnkgZWxlbWVudHMpLlxuLy9cbi8vIEFzIHN1Y2gsIGJlZm9yZSBwYXNzaW5nIHRoZSBlbGVtZW50cyBkb3duLCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgYSBjdXN0b21cbi8vIFNjZW5lIGluc3RhbmNlIGFuZCBhc3NpZ24gdGhlbSB0byBpdC5cbi8vXG4vLyBGSVhNRSBUaGlzIGlzIGEgc3VwZXIgaGFja3kgd29ya2Fyb3VuZCBhbmQgd2UnbGwgbmVlZCB0byByZXdyaXRlIHRoaXMgc29vbi5cblxuY29uc3QgX19jcmVhdGVTY2VuZUZvckVsZW1lbnRzSGFja19fID0gZWxlbWVudHMgPT4ge1xuICBjb25zdCBzY2VuZSA9IG5ldyBTY2VuZSgpOyAvLyB3ZSBjYW4ndCBkdXBsaWNhdGUgZWxlbWVudHMgdG8gcmVnZW5lcmF0ZSBpZHMgYmVjYXVzZSB3ZSBuZWVkIHRoZVxuICAvLyBvcmlnIGlkcyB3aGVuIGVtYmVkZGluZy4gU28gd2UgZG8gYW5vdGhlciBoYWNrIG9mIG5vdCBtYXBwaW5nIGVsZW1lbnRcbiAgLy8gaWRzIHRvIFNjZW5lIGluc3RhbmNlcyBzbyB0aGF0IHdlIGRvbid0IG92ZXJyaWRlIHRoZSBlZGl0b3IgZWxlbWVudHNcbiAgLy8gbWFwcGluZy5cbiAgLy8gV2Ugc3RpbGwgbmVlZCB0byBjbG9uZSB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzIHRvIHJlZ2VuIHJlZmVyZW5jZXMuXG5cbiAgc2NlbmUucmVwbGFjZUFsbEVsZW1lbnRzKGNsb25lSlNPTihlbGVtZW50cyksIGZhbHNlKTtcbiAgcmV0dXJuIHNjZW5lO1xufTtcblxuY29uc3QgdHJ1bmNhdGVUZXh0ID0gKGVsZW1lbnQsIG1heFdpZHRoKSA9PiB7XG4gIGlmIChlbGVtZW50LndpZHRoIDw9IG1heFdpZHRoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICBjdHguZm9udCA9IGdldEZvbnRTdHJpbmcoe1xuICAgIGZvbnRGYW1pbHk6IGVsZW1lbnQuZm9udEZhbWlseSxcbiAgICBmb250U2l6ZTogZWxlbWVudC5mb250U2l6ZVxuICB9KTtcbiAgbGV0IHRleHQgPSBlbGVtZW50LnRleHQ7XG4gIGNvbnN0IG1ldHJpY3MgPSBjdHgubWVhc3VyZVRleHQodGV4dCk7XG5cbiAgaWYgKG1ldHJpY3Mud2lkdGggPiBtYXhXaWR0aCkge1xuICAgIC8vIHdlIGl0ZXJhdGUgZnJvbSB0aGUgcmlnaHQsIHJlbW92aW5nIGNoYXJhY3RlcnMgb25lIGJ5IG9uZSBpbnN0ZWFkXG4gICAgLy8gb2YgYnVsZGluZyB0aGUgc3RyaW5nIHVwLiBUaGlzIGFzc3VtZXMgdGhhdCBpdCdzIG1vcmUgbGlrZWx5XG4gICAgLy8geW91ciBmcmFtZSBuYW1lcyB3aWxsIG92ZXJmbG93IGJ5IG5vdCB0aGF0IG1hbnkgY2hhcmFjdGVyc1xuICAgIC8vIChpZiBldmVyKSwgc28gaXQgc29odWxkIGJlIGZhc3RlciB0aGlzIHdheS5cbiAgICBmb3IgKGxldCBpID0gdGV4dC5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IG5ld1RleHQgPSBgJHt0ZXh0LnNsaWNlKDAsIGkpfS4uLmA7XG5cbiAgICAgIGlmIChjdHgubWVhc3VyZVRleHQobmV3VGV4dCkud2lkdGggPD0gbWF4V2lkdGgpIHtcbiAgICAgICAgdGV4dCA9IG5ld1RleHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdFbGVtZW50V2l0aChlbGVtZW50LCB7XG4gICAgdGV4dCxcbiAgICB3aWR0aDogbWF4V2lkdGhcbiAgfSk7XG59O1xuLyoqXG4gKiBXaGVuIGV4cG9ydGluZyBmcmFtZXMsIHdlIG5lZWQgdG8gcmVuZGVyIGZyYW1lIGxhYmVscyB3aGljaCBhcmUgY3VycmVudGx5XG4gKiBiZWluZyByZW5kZXJlZCBpbiBET00gd2hlbiBlZGl0aW5nLiBBZGRpbmcgdGhlIGxhYmVscyBhcyByZWd1bGFyIHRleHRcbiAqIGVsZW1lbnRzIHNlZW1zIGxpa2UgYSBzaW1wbGUgaGFjay4gSW4gdGhlIGZ1dHVyZSB3ZSdsbCB3YW50IHRvIG1vdmUgdG9cbiAqIHByb3BlciBjYW52YXMgcmVuZGVyaW5nLCBldmVuIHdpdGhpbiBlZGl0b3IgKGluc3RlYWQgb2YgRE9NKS5cbiAqL1xuXG5cbmNvbnN0IGFkZEZyYW1lTGFiZWxzQXNUZXh0RWxlbWVudHMgPSAoZWxlbWVudHMsIG9wdHMpID0+IHtcbiAgY29uc3QgbmV4dEVsZW1lbnRzID0gW107XG4gIGxldCBmcmFtZUlkeCA9IDA7XG5cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgaWYgKGlzRnJhbWVFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICBmcmFtZUlkeCsrO1xuICAgICAgbGV0IHRleHRFbGVtZW50ID0gbmV3VGV4dEVsZW1lbnQoe1xuICAgICAgICB4OiBlbGVtZW50LngsXG4gICAgICAgIHk6IGVsZW1lbnQueSAtIEZSQU1FX1NUWUxFLm5hbWVPZmZzZXRZLFxuICAgICAgICBmb250RmFtaWx5OiBGT05UX0ZBTUlMWS5Bc3Npc3RhbnQsXG4gICAgICAgIGZvbnRTaXplOiBGUkFNRV9TVFlMRS5uYW1lRm9udFNpemUsXG4gICAgICAgIGxpbmVIZWlnaHQ6IEZSQU1FX1NUWUxFLm5hbWVMaW5lSGVpZ2h0LFxuICAgICAgICBzdHJva2VDb2xvcjogb3B0cy5leHBvcnRXaXRoRGFya01vZGUgPyBGUkFNRV9TVFlMRS5uYW1lQ29sb3JEYXJrVGhlbWUgOiBGUkFNRV9TVFlMRS5uYW1lQ29sb3JMaWdodFRoZW1lLFxuICAgICAgICB0ZXh0OiBlbGVtZW50Lm5hbWUgfHwgYEZyYW1lICR7ZnJhbWVJZHh9YFxuICAgICAgfSk7XG4gICAgICB0ZXh0RWxlbWVudC55IC09IHRleHRFbGVtZW50LmhlaWdodDtcbiAgICAgIHRleHRFbGVtZW50ID0gdHJ1bmNhdGVUZXh0KHRleHRFbGVtZW50LCBlbGVtZW50LndpZHRoKTtcbiAgICAgIG5leHRFbGVtZW50cy5wdXNoKHRleHRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBuZXh0RWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0RWxlbWVudHM7XG59O1xuXG5jb25zdCBnZXRGcmFtZVJlbmRlcmluZ0NvbmZpZyA9IChleHBvcnRpbmdGcmFtZSwgZnJhbWVSZW5kZXJpbmcpID0+IHtcbiAgZnJhbWVSZW5kZXJpbmcgPSBmcmFtZVJlbmRlcmluZyB8fCBnZXREZWZhdWx0QXBwU3RhdGUoKS5mcmFtZVJlbmRlcmluZztcbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkOiBleHBvcnRpbmdGcmFtZSA/IHRydWUgOiBmcmFtZVJlbmRlcmluZy5lbmFibGVkLFxuICAgIG91dGxpbmU6IGV4cG9ydGluZ0ZyYW1lID8gZmFsc2UgOiBmcmFtZVJlbmRlcmluZy5vdXRsaW5lLFxuICAgIG5hbWU6IGV4cG9ydGluZ0ZyYW1lID8gZmFsc2UgOiBmcmFtZVJlbmRlcmluZy5uYW1lLFxuICAgIGNsaXA6IGV4cG9ydGluZ0ZyYW1lID8gdHJ1ZSA6IGZyYW1lUmVuZGVyaW5nLmNsaXBcbiAgfTtcbn07XG5cbmNvbnN0IHByZXBhcmVFbGVtZW50c0ZvclJlbmRlciA9ICh7XG4gIGVsZW1lbnRzLFxuICBleHBvcnRpbmdGcmFtZSxcbiAgZnJhbWVSZW5kZXJpbmcsXG4gIGV4cG9ydFdpdGhEYXJrTW9kZVxufSkgPT4ge1xuICBsZXQgbmV4dEVsZW1lbnRzO1xuXG4gIGlmIChleHBvcnRpbmdGcmFtZSkge1xuICAgIG5leHRFbGVtZW50cyA9IGVsZW1lbnRzT3ZlcmxhcHBpbmdCQm94KHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgYm91bmRzOiBleHBvcnRpbmdGcmFtZSxcbiAgICAgIHR5cGU6IFwib3ZlcmxhcFwiXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoZnJhbWVSZW5kZXJpbmcuZW5hYmxlZCAmJiBmcmFtZVJlbmRlcmluZy5uYW1lKSB7XG4gICAgbmV4dEVsZW1lbnRzID0gYWRkRnJhbWVMYWJlbHNBc1RleHRFbGVtZW50cyhlbGVtZW50cywge1xuICAgICAgZXhwb3J0V2l0aERhcmtNb2RlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEVsZW1lbnRzID0gZWxlbWVudHM7XG4gIH1cblxuICByZXR1cm4gbmV4dEVsZW1lbnRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMsIHtcbiAgZXhwb3J0QmFja2dyb3VuZCxcbiAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gIGV4cG9ydGluZ0ZyYW1lXG59LCBjcmVhdGVDYW52YXMgPSAod2lkdGgsIGhlaWdodCkgPT4ge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogYXBwU3RhdGUuZXhwb3J0U2NhbGU7XG4gIHJldHVybiB7XG4gICAgY2FudmFzLFxuICAgIHNjYWxlOiBhcHBTdGF0ZS5leHBvcnRTY2FsZVxuICB9O1xufSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gIHZhciBfYTtcblxuICBjb25zdCB0ZW1wU2NlbmUgPSBfX2NyZWF0ZVNjZW5lRm9yRWxlbWVudHNIYWNrX18oZWxlbWVudHMpO1xuXG4gIGVsZW1lbnRzID0gdGVtcFNjZW5lLmdldE5vbkRlbGV0ZWRFbGVtZW50cygpO1xuICBjb25zdCBmcmFtZVJlbmRlcmluZyA9IGdldEZyYW1lUmVuZGVyaW5nQ29uZmlnKGV4cG9ydGluZ0ZyYW1lICE9PSBudWxsICYmIGV4cG9ydGluZ0ZyYW1lICE9PSB2b2lkIDAgPyBleHBvcnRpbmdGcmFtZSA6IG51bGwsIChfYSA9IGFwcFN0YXRlLmZyYW1lUmVuZGVyaW5nKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsKTtcbiAgY29uc3QgZWxlbWVudHNGb3JSZW5kZXIgPSBwcmVwYXJlRWxlbWVudHNGb3JSZW5kZXIoe1xuICAgIGVsZW1lbnRzLFxuICAgIGV4cG9ydGluZ0ZyYW1lLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlLFxuICAgIGZyYW1lUmVuZGVyaW5nXG4gIH0pO1xuXG4gIGlmIChleHBvcnRpbmdGcmFtZSkge1xuICAgIGV4cG9ydFBhZGRpbmcgPSAwO1xuICB9XG5cbiAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShleHBvcnRpbmdGcmFtZSA/IFtleHBvcnRpbmdGcmFtZV0gOiBnZXRSb290RWxlbWVudHMoZWxlbWVudHNGb3JSZW5kZXIpLCBleHBvcnRQYWRkaW5nKTtcbiAgY29uc3Qge1xuICAgIGNhbnZhcyxcbiAgICBzY2FsZSA9IDFcbiAgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZGVmYXVsdEFwcFN0YXRlID0gZ2V0RGVmYXVsdEFwcFN0YXRlKCk7XG4gIGNvbnN0IHtcbiAgICBpbWFnZUNhY2hlXG4gIH0gPSB5aWVsZCB1cGRhdGVJbWFnZUNhY2hlKHtcbiAgICBpbWFnZUNhY2hlOiBuZXcgTWFwKCksXG4gICAgZmlsZUlkczogZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzKGVsZW1lbnRzRm9yUmVuZGVyKS5tYXAoZWxlbWVudCA9PiBlbGVtZW50LmZpbGVJZCksXG4gICAgZmlsZXNcbiAgfSk7XG4gIHJlbmRlclN0YXRpY1NjZW5lKHtcbiAgICBjYW52YXMsXG4gICAgcmM6IHJvdWdoLmNhbnZhcyhjYW52YXMpLFxuICAgIGVsZW1lbnRzOiBlbGVtZW50c0ZvclJlbmRlcixcbiAgICB2aXNpYmxlRWxlbWVudHM6IGVsZW1lbnRzRm9yUmVuZGVyLFxuICAgIHNjYWxlLFxuICAgIGFwcFN0YXRlOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGFwcFN0YXRlKSwge1xuICAgICAgZnJhbWVSZW5kZXJpbmcsXG4gICAgICB2aWV3QmFja2dyb3VuZENvbG9yOiBleHBvcnRCYWNrZ3JvdW5kID8gdmlld0JhY2tncm91bmRDb2xvciA6IG51bGwsXG4gICAgICBzY3JvbGxYOiAtbWluWCArIGV4cG9ydFBhZGRpbmcsXG4gICAgICBzY3JvbGxZOiAtbWluWSArIGV4cG9ydFBhZGRpbmcsXG4gICAgICB6b29tOiBkZWZhdWx0QXBwU3RhdGUuem9vbSxcbiAgICAgIHNob3VsZENhY2hlSWdub3JlWm9vbTogZmFsc2UsXG4gICAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCJcbiAgICB9KSxcbiAgICByZW5kZXJDb25maWc6IHtcbiAgICAgIGltYWdlQ2FjaGUsXG4gICAgICByZW5kZXJHcmlkOiBmYWxzZSxcbiAgICAgIGlzRXhwb3J0aW5nOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgdGVtcFNjZW5lLmRlc3Ryb3koKTtcbiAgcmV0dXJuIGNhbnZhcztcbn0pO1xuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMsIG9wdHMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICB2YXIgX2IsIF9jLCBfZDtcblxuICBjb25zdCB0ZW1wU2NlbmUgPSBfX2NyZWF0ZVNjZW5lRm9yRWxlbWVudHNIYWNrX18oZWxlbWVudHMpO1xuXG4gIGVsZW1lbnRzID0gdGVtcFNjZW5lLmdldE5vbkRlbGV0ZWRFbGVtZW50cygpO1xuICBjb25zdCBmcmFtZVJlbmRlcmluZyA9IGdldEZyYW1lUmVuZGVyaW5nQ29uZmlnKChfYiA9IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5leHBvcnRpbmdGcmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbCwgKF9jID0gYXBwU3RhdGUuZnJhbWVSZW5kZXJpbmcpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IG51bGwpO1xuICBsZXQge1xuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZSA9IGZhbHNlLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgZXhwb3J0U2NhbGUgPSAxLFxuICAgIGV4cG9ydEVtYmVkU2NlbmVcbiAgfSA9IGFwcFN0YXRlO1xuICBjb25zdCB7XG4gICAgZXhwb3J0aW5nRnJhbWUgPSBudWxsXG4gIH0gPSBvcHRzIHx8IHt9O1xuICBjb25zdCBlbGVtZW50c0ZvclJlbmRlciA9IHByZXBhcmVFbGVtZW50c0ZvclJlbmRlcih7XG4gICAgZWxlbWVudHMsXG4gICAgZXhwb3J0aW5nRnJhbWUsXG4gICAgZXhwb3J0V2l0aERhcmtNb2RlLFxuICAgIGZyYW1lUmVuZGVyaW5nXG4gIH0pO1xuXG4gIGlmIChleHBvcnRpbmdGcmFtZSkge1xuICAgIGV4cG9ydFBhZGRpbmcgPSAwO1xuICB9XG5cbiAgbGV0IG1ldGFkYXRhID0gXCJcIjsgLy8gd2UgbmVlZCB0byBzZXJpYWxpemUgdGhlIFwib3JpZ2luYWxcIiBlbGVtZW50cyBiZWZvcmUgd2UgcHV0IHRoZW0gdGhyb3VnaFxuICAvLyB0aGUgdGVtcFNjZW5lIGhhY2sgd2hpY2ggZHVwbGljYXRlcyBhbmQgcmVnZW5lcmF0ZXMgaWRzXG5cbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSB5aWVsZCAoeWllbGQgaW1wb3J0KFxuICAgICAgLyogd2VicGFja0NodW5rTmFtZTogXCJpbWFnZVwiICovXG4gICAgICBcIi4uLy4uL3NyYy9kYXRhL2ltYWdlXCIpKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIC8vIHdoZW4gZW1iZWRkaW5nIHNjZW5lLCB3ZSB3YW50IHRvIGVtYmVkIHRoZSBvcmlnaW9uYWxseSBzdXBwbGllZFxuICAgICAgICAvLyBlbGVtZW50cyB3aGljaCBkb24ndCBjb250YWluIHRoZSB0ZW1wIGZyYW1lIGxhYmVscy5cbiAgICAgICAgLy8gQnV0IGl0IGFsc28gcmVxdWlyZXMgdGhhdCB0aGUgZXhwb3J0VG9TdmcgaXMgYmVpbmcgc3VwcGxpZWQgd2l0aFxuICAgICAgICAvLyBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IHdlJ3JlIGV4cG9ydGluZywgYW5kIG5vIGV4dHJhLlxuICAgICAgICB0ZXh0OiBzZXJpYWxpemVBc0pTT04oZWxlbWVudHMsIGFwcFN0YXRlLCBmaWxlcyB8fCB7fSwgXCJsb2NhbFwiKVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZXhwb3J0aW5nRnJhbWUgPyBbZXhwb3J0aW5nRnJhbWVdIDogZ2V0Um9vdEVsZW1lbnRzKGVsZW1lbnRzRm9yUmVuZGVyKSwgZXhwb3J0UGFkZGluZyk7IC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcblxuICBjb25zdCBzdmdSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJzdmdcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmVyc2lvblwiLCBcIjEuMVwiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBTVkdfTlMpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aCAqIGV4cG9ydFNjYWxlfWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHQgKiBleHBvcnRTY2FsZX1gKTtcblxuICBpZiAoZXhwb3J0V2l0aERhcmtNb2RlKSB7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJcIiwgVEhFTUVfRklMVEVSKTtcbiAgfVxuXG4gIGxldCBhc3NldFBhdGggPSBcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vXCI7IC8vIEFzc2V0IHBhdGggbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBvbmx5IHdoZW4gdXNpbmcgcGFja2FnZVxuXG4gIGlmIChwcm9jZXNzLmVudi5WSVRFX0lTX0VYQ0FMSURSQVdfTlBNX1BBQ0tBR0UpIHtcbiAgICBhc3NldFBhdGggPSB3aW5kb3cuRVhDQUxJRFJBV19BU1NFVF9QQVRIIHx8IGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlZJVEVfUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059YDtcblxuICAgIGlmIChhc3NldFBhdGggPT09IG51bGwgfHwgYXNzZXRQYXRoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhc3NldFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIGFzc2V0UGF0aCA9IGFzc2V0UGF0aC5yZXBsYWNlKFwiL1wiLCBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9gKTtcbiAgICB9XG5cbiAgICBhc3NldFBhdGggPSBgJHthc3NldFBhdGh9L2Rpc3QvZXhjYWxpZHJhdy1hc3NldHMvYDtcbiAgfVxuXG4gIGNvbnN0IG9mZnNldFggPSAtbWluWCArIGV4cG9ydFBhZGRpbmc7XG4gIGNvbnN0IG9mZnNldFkgPSAtbWluWSArIGV4cG9ydFBhZGRpbmc7XG4gIGNvbnN0IGZyYW1lRWxlbWVudHMgPSBnZXRGcmFtZUVsZW1lbnRzKGVsZW1lbnRzKTtcbiAgbGV0IGV4cG9ydGluZ0ZyYW1lQ2xpcFBhdGggPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgZnJhbWUgb2YgZnJhbWVFbGVtZW50cykge1xuICAgIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZnJhbWUpO1xuICAgIGNvbnN0IGN4ID0gKHgyIC0geDEpIC8gMiAtIChmcmFtZS54IC0geDEpO1xuICAgIGNvbnN0IGN5ID0gKHkyIC0geTEpIC8gMiAtIChmcmFtZS55IC0geTEpO1xuICAgIGV4cG9ydGluZ0ZyYW1lQ2xpcFBhdGggKz0gYDxjbGlwUGF0aCBpZD0ke2ZyYW1lLmlkfT5cbiAgICAgICAgICAgIDxyZWN0IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgke2ZyYW1lLnggKyBvZmZzZXRYfSAke2ZyYW1lLnkgKyBvZmZzZXRZfSkgcm90YXRlKCR7ZnJhbWUuYW5nbGV9ICR7Y3h9ICR7Y3l9KVwiXG4gICAgICAgICAgd2lkdGg9XCIke2ZyYW1lLndpZHRofVwiXG4gICAgICAgICAgaGVpZ2h0PVwiJHtmcmFtZS5oZWlnaHR9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9yZWN0PlxuICAgICAgICA8L2NsaXBQYXRoPmA7XG4gIH1cblxuICBzdmdSb290LmlubmVySFRNTCA9IGBcbiAgJHtTVkdfRVhQT1JUX1RBR31cbiAgJHttZXRhZGF0YX1cbiAgPGRlZnM+XG4gICAgPHN0eWxlIGNsYXNzPVwic3R5bGUtZm9udHNcIj5cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJWaXJnaWxcIjtcbiAgICAgICAgc3JjOiB1cmwoXCIke2Fzc2V0UGF0aH1WaXJnaWwud29mZjJcIik7XG4gICAgICB9XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiQ2FzY2FkaWFcIjtcbiAgICAgICAgc3JjOiB1cmwoXCIke2Fzc2V0UGF0aH1DYXNjYWRpYS53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJBc3Npc3RhbnRcIjtcbiAgICAgICAgc3JjOiB1cmwoXCIke2Fzc2V0UGF0aH1Bc3Npc3RhbnQtUmVndWxhci53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICAgICR7ZXhwb3J0aW5nRnJhbWVDbGlwUGF0aH1cbiAgPC9kZWZzPlxuICBgOyAvLyByZW5kZXIgYmFja2dyb3VuZCByZWN0XG5cbiAgaWYgKGFwcFN0YXRlLmV4cG9ydEJhY2tncm91bmQgJiYgdmlld0JhY2tncm91bmRDb2xvcikge1xuICAgIGNvbnN0IHJlY3QgPSBzdmdSb290Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHNGb3JSZW5kZXIsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WCxcbiAgICBvZmZzZXRZLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgICByZW5kZXJFbWJlZGRhYmxlczogKF9kID0gb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLnJlbmRlckVtYmVkZGFibGVzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBmYWxzZSxcbiAgICBmcmFtZVJlbmRlcmluZ1xuICB9KTtcbiAgdGVtcFNjZW5lLmRlc3Ryb3koKTtcbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59KTsgLy8gY2FsY3VsYXRlIHNtYWxsZXN0IGFyZWEgdG8gZml0IHRoZSBjb250ZW50cyBpblxuXG5jb25zdCBnZXRDYW52YXNTaXplID0gKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IGdldENvbW1vbkJvdW5kcyhlbGVtZW50cyk7XG4gIGNvbnN0IHdpZHRoID0gZGlzdGFuY2UobWluWCwgbWF4WCkgKyBleHBvcnRQYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gZGlzdGFuY2UobWluWSwgbWF4WSkgKyBleHBvcnRQYWRkaW5nICogMjtcbiAgcmV0dXJuIFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHBvcnRTaXplID0gKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nLCBzY2FsZSkgPT4ge1xuICBjb25zdCBbLCwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKS5tYXAoZGltZW5zaW9uID0+IE1hdGgudHJ1bmMoZGltZW5zaW9uICogc2NhbGUpKTtcbiAgcmV0dXJuIFt3aWR0aCwgaGVpZ2h0XTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
|
|
4524
4524
|
|
|
4525
4525
|
/***/ }),
|
|
4526
4526
|
|
|
@@ -5693,7 +5693,7 @@ module.exports = JSON.parse('{"ar-SA":99,"az-AZ":18,"bg-BG":75,"bn-BD":55,"ca-ES
|
|
|
5693
5693
|
/******/ // This function allow to reference async chunks
|
|
5694
5694
|
/******/ __webpack_require__.u = (chunkId) => {
|
|
5695
5695
|
/******/ // return url for filenames based on template
|
|
5696
|
-
/******/ return "excalidraw-assets-dev/" + chunkId + "-" + {"locales/ar-SA-json":"f35c4f87e6e2dcf7c20a","locales/az-AZ-json":"5d70eb8bf3f20abc3bac","locales/bg-BG-json":"88cced5fd8a6d8298501","locales/bn-BD-json":"a06588c61947851c8579","locales/ca-ES-json":"9b25933a25836cc0be23","locales/cs-CZ-json":"1d6c97ea271d017058c9","locales/da-DK-json":"34a60c9843cecd71376f","locales/de-DE-json":"d13450595b795867412b","locales/el-GR-json":"c854b199f3ac07d40294","locales/es-ES-json":"6a667bfbf4ff3d0181a7","locales/eu-ES-json":"3ec11367a80491b09056","locales/fa-IR-json":"e459964936177074abe7","locales/fi-FI-json":"f7839bb6f5ad0a3c7e0d","locales/fr-FR-json":"20e8535e2675a6736c81","locales/gl-ES-json":"861f534b46c0db1fa8db","locales/he-IL-json":"504d78736487793ffccd","locales/hi-IN-json":"82d988431011c330242a","locales/hu-HU-json":"d4150250980011726fd9","locales/id-ID-json":"82e300d4fe1e87adba9b","locales/it-IT-json":"6ecc9aec005faab90f41","locales/ja-JP-json":"3c6a065f0f1303b297fa","locales/kaa-json":"983a9ccc652aa01980f3","locales/kab-KAB-json":"cac3cf66f1db5c1a6e19","locales/kk-KZ-json":"e9dd81c22419efd44478","locales/km-KH-json":"be77acee611d96d88dda","locales/ko-KR-json":"ad8e9d31d52b26f3fbc2","locales/ku-TR-json":"ed67af91ae1920f114a8","locales/lt-LT-json":"2c3d35d6fb5dbf95a27e","locales/lv-LV-json":"fa8973c231afb2ddafe9","locales/mr-IN-json":"2949146743072eb11b40","locales/my-MM-json":"4c04ffe415641f69ed75","locales/nb-NO-json":"b8d7a5b70562dacdad45","locales/nl-NL-json":"a65f82a25fe038c45d35","locales/nn-NO-json":"858fbccbc5be386977db","locales/oc-FR-json":"a68ea08272c8da3c0e3f","locales/pa-IN-json":"90a2b3775bd7d8983def","locales/pl-PL-json":"9bb55330d5aaf336646e","locales/pt-BR-json":"3635e753c1b6e5b681fa","locales/pt-PT-json":"0d3694a92e0134549086","locales/ro-RO-json":"e83fda16c860c6d0b383","locales/ru-RU-json":"ddc13261ce5d864d36a9","locales/si-LK-json":"16eb66dbfc6c55fc85b1","locales/sk-SK-json":"782ead8707f2ad0e8e4e","locales/sl-SI-json":"82e55cf7cdbdc7d7f959","locales/sv-SE-json":"2f362899d3ac4089534f","locales/ta-IN-json":"07623a485202da63a84b","locales/th-TH-json":"4e4b97f5f6e905191383","locales/tr-TR-json":"003be1cf6ebf0b787dec","locales/uk-UA-json":"ca6ea1156db2649d3e27","locales/vi-VN-json":"9a5e5fab41a1a120a916","locales/zh-CN-json":"670c28a6ae1e3ddecaa4","locales/zh-HK-json":"93b9b676d4f4b5702797","locales/zh-TW-json":"805d10b0eed9ca51b318","vendor":"
|
|
5696
|
+
/******/ return "excalidraw-assets-dev/" + chunkId + "-" + {"locales/ar-SA-json":"f35c4f87e6e2dcf7c20a","locales/az-AZ-json":"5d70eb8bf3f20abc3bac","locales/bg-BG-json":"88cced5fd8a6d8298501","locales/bn-BD-json":"a06588c61947851c8579","locales/ca-ES-json":"9b25933a25836cc0be23","locales/cs-CZ-json":"1d6c97ea271d017058c9","locales/da-DK-json":"34a60c9843cecd71376f","locales/de-DE-json":"d13450595b795867412b","locales/el-GR-json":"c854b199f3ac07d40294","locales/es-ES-json":"6a667bfbf4ff3d0181a7","locales/eu-ES-json":"3ec11367a80491b09056","locales/fa-IR-json":"e459964936177074abe7","locales/fi-FI-json":"f7839bb6f5ad0a3c7e0d","locales/fr-FR-json":"20e8535e2675a6736c81","locales/gl-ES-json":"861f534b46c0db1fa8db","locales/he-IL-json":"504d78736487793ffccd","locales/hi-IN-json":"82d988431011c330242a","locales/hu-HU-json":"d4150250980011726fd9","locales/id-ID-json":"82e300d4fe1e87adba9b","locales/it-IT-json":"6ecc9aec005faab90f41","locales/ja-JP-json":"3c6a065f0f1303b297fa","locales/kaa-json":"983a9ccc652aa01980f3","locales/kab-KAB-json":"cac3cf66f1db5c1a6e19","locales/kk-KZ-json":"e9dd81c22419efd44478","locales/km-KH-json":"be77acee611d96d88dda","locales/ko-KR-json":"ad8e9d31d52b26f3fbc2","locales/ku-TR-json":"ed67af91ae1920f114a8","locales/lt-LT-json":"2c3d35d6fb5dbf95a27e","locales/lv-LV-json":"fa8973c231afb2ddafe9","locales/mr-IN-json":"2949146743072eb11b40","locales/my-MM-json":"4c04ffe415641f69ed75","locales/nb-NO-json":"b8d7a5b70562dacdad45","locales/nl-NL-json":"a65f82a25fe038c45d35","locales/nn-NO-json":"858fbccbc5be386977db","locales/oc-FR-json":"a68ea08272c8da3c0e3f","locales/pa-IN-json":"90a2b3775bd7d8983def","locales/pl-PL-json":"9bb55330d5aaf336646e","locales/pt-BR-json":"3635e753c1b6e5b681fa","locales/pt-PT-json":"0d3694a92e0134549086","locales/ro-RO-json":"e83fda16c860c6d0b383","locales/ru-RU-json":"ddc13261ce5d864d36a9","locales/si-LK-json":"16eb66dbfc6c55fc85b1","locales/sk-SK-json":"782ead8707f2ad0e8e4e","locales/sl-SI-json":"82e55cf7cdbdc7d7f959","locales/sv-SE-json":"2f362899d3ac4089534f","locales/ta-IN-json":"07623a485202da63a84b","locales/th-TH-json":"4e4b97f5f6e905191383","locales/tr-TR-json":"003be1cf6ebf0b787dec","locales/uk-UA-json":"ca6ea1156db2649d3e27","locales/vi-VN-json":"9a5e5fab41a1a120a916","locales/zh-CN-json":"670c28a6ae1e3ddecaa4","locales/zh-HK-json":"93b9b676d4f4b5702797","locales/zh-TW-json":"805d10b0eed9ca51b318","vendor":"39727f4653a274cf18f6"}[chunkId] + ".js";
|
|
5697
5697
|
/******/ };
|
|
5698
5698
|
/******/ })();
|
|
5699
5699
|
/******/
|