{
  "version": 3,
  "sources": ["../../../../../node_modules/prismjs/prism.js", "../../../../../node_modules/seedrandom/lib/alea.js", "../../../../../node_modules/seedrandom/lib/xor128.js", "../../../../../node_modules/seedrandom/lib/xorwow.js", "../../../../../node_modules/seedrandom/lib/xorshift7.js", "../../../../../node_modules/seedrandom/lib/xor4096.js", "../../../../../node_modules/seedrandom/lib/tychei.js", "../../../../../node_modules/seedrandom/seedrandom.js", "../../../../../node_modules/seedrandom/index.js", "../../src/document/components/chrome/debugbar/DebugBar.tsx", "../../src/document/components/chrome/debugbar/DebugBar.styles.ts", "../../src/document/components/chrome/debugbar/Errors.tsx", "../../src/document/components/chrome/debugbar/Graphs.tsx", "../../../../../node_modules/uplot/dist/uPlot.esm.js", "../../src/document/components/chrome/debugbar/Icons.tsx", "../../src/document/components/chrome/debugbar/Icons.styles.ts", "../../src/document/components/chrome/debugbar/Logs.tsx", "../../src/document/components/chrome/debugbar/Modules.tsx", "../../../../../node_modules/prismjs/components/prism-jsx.js", "../../../../../node_modules/prismjs/components/prism-tsx.js", "../../src/document/components/chrome/debugbar/Modules.styles.ts", "../../src/document/components/chrome/debugbar/ScrollableOverflowStack.tsx", "../../src/document/components/chrome/debugbar/Sections.tsx", "../../src/document/components/chrome/debugbar/Sections.styles.ts", "../../src/document/components/chrome/debugbar/github.ts", "../../src/document/components/chrome/debugbar/ServerAPI.tsx", "../../src/document/components/chrome/debugbar/ServerAPI.styles.ts", "../../src/document/components/chrome/debugbar/Tools.styles.ts", "../../src/document/components/chrome/debugbar/tapMethods.ts", "../../src/document/components/chrome/debugbar/Tools.tsx", "../../src/document/components/chrome/debugbar/BranchesTools.tsx", "../../../../../node_modules/@ngneat/falso/index.js", "../../src/document/components/chrome/debugbar/CollectionTools.tsx", "../../src/document/components/chrome/debugbar/CouldCollapseTool.tsx", "../../src/document/generated-tree-library/src/fuzzer/random.ts", "../../src/document/generated-tree-library/src/fuzzer.ts", "../../src/debug-utils/generatedTreeFuzzer.ts", "../../src/document/components/chrome/debugbar/Fuzzer.tsx", "../../src/document/components/chrome/debugbar/LoaderControls.tsx", "../../src/document/components/chrome/debugbar/RecoverableErrorsTool.tsx", "../../src/document/components/chrome/debugbar/SelfServeTools.tsx", "../../src/document/components/chrome/debugbar/SimulatedDOMTools.tsx", "../../src/document/components/chrome/debugbar/VersionHistoryTools.tsx", "../../src/document/components/chrome/debugbar/VersionHistoryTools.styles.ts", "../../src/document/components/chrome/debugbar/createSampleBatchTranslationCollection.ts", "../../src/document/components/chrome/debugbar/Wireframer.tsx", "../../src/document/components/chrome/debugbar/Wireframer.styles.ts", "../../src/document/components/chrome/debugbar/mockWireframer.ts", "../../src/document/components/chrome/debugbar/agents/ActiveAgent.tsx", "../../src/document/components/chrome/debugbar/agents/ActiveAgent.styles.ts", "../../src/document/components/chrome/debugbar/agents/serializeDSL.ts", "../../src/document/components/chrome/debugbar/agents/Agents.styles.ts", "../../src/document/components/chrome/debugbar/agents/AiDSL.tsx", "../../src/document/components/chrome/debugbar/agents/Chat.tsx", "../../src/document/components/chrome/debugbar/agents/Chat.styles.ts", "../../src/document/components/chrome/debugbar/agents/Events.tsx", "../../src/document/components/chrome/debugbar/agents/Events.styles.ts", "../../src/document/components/chrome/debugbar/agents/HoverTooltip.tsx", "../../src/document/components/chrome/debugbar/agents/HoverTooltip.styles.ts", "../../src/document/agentSnapshotMigration/sortObjectKeysForJson.ts", "../../src/document/components/chrome/debugbar/agents/ChatPanel.tsx", "../../src/document/components/chrome/debugbar/agents/ChatPanel.styles.ts", "../../src/document/components/chrome/debugbar/agents/Contour.tsx", "../../src/document/components/chrome/debugbar/agents/CostSection.tsx", "../../src/document/components/chrome/debugbar/agents/CostSection.styles.ts", "../../src/app/ai/agents/preprocessCommands.ts", "../../src/document/components/chrome/debugbar/agents/DSL.tsx", "../../src/document/components/chrome/debugbar/agents/DSL.styles.ts", "../../src/document/components/chrome/debugbar/agents/Linter.tsx", "../../src/document/components/chrome/debugbar/agents/Linter.styles.ts", "../../src/document/components/chrome/debugbar/agents/Script.tsx", "../../src/document/components/chrome/debugbar/agents/Script.styles.ts", "../../src/document/components/chrome/debugbar/agents/TokenizerPlayground.tsx", "../../src/app/ai/agents/examples/createImplementationGuide.ts", "../../src/app/ai/agents/examples/extraction.ts", "../../src/document/components/chrome/debugbar/agents/examples/AgentExamples.tsx", "../../src/document/components/chrome/debugbar/agents/examples/AgentExamples.styles.ts", "../../src/document/components/chrome/debugbar/agents/examples/ExamplesRow.tsx", "../../src/document/components/chrome/debugbar/agents/examples/exampleProcessing.ts", "../../src/document/components/chrome/debugbar/agents/examples/exampleVisibility.ts", "../../src/document/components/chrome/debugbar/agents/examples/icons.tsx", "../../src/document/components/chrome/debugbar/agents/Agents.tsx", "../../src/document/components/chrome/debugbar/crdt/CrdtDebugPanel.tsx", "../../src/document/components/chrome/debugbar/crdt/CrdtDebugPanel.styles.ts", "../../src/document/components/chrome/debugbar/crdt/CrdtFileSaver.tsx", "../../src/document/components/chrome/debugbar/crdt/CrdtRecordingControls.tsx", "../../src/document/components/chrome/debugbar/crdt/CrdtRowTableBody.tsx", "../../src/document/components/chrome/debugbar/crdt/CrdtRowTableHeader.tsx", "../../src/document/components/chrome/debugbar/crdt/FilterIcon.tsx", "../../src/document/components/chrome/debugbar/crdt/CrdtRowTable.tsx"],
  "sourcesContent": ["\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism\u2019s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you\u2019re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading\u2026';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '\u2716 Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '\u2716 Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n", "// A port of an algorithm by Johannes Baag\u00F8e <baagoe@baagoe.com>, 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baag\u00F8e <baagoe@baagoe.org>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n  var me = this, mash = Mash();\n\n  me.next = function() {\n    var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n    me.s0 = me.s1;\n    me.s1 = me.s2;\n    return me.s2 = t - (me.c = t | 0);\n  };\n\n  // Apply the seeding algorithm from Baagoe.\n  me.c = 1;\n  me.s0 = mash(' ');\n  me.s1 = mash(' ');\n  me.s2 = mash(' ');\n  me.s0 -= mash(seed);\n  if (me.s0 < 0) { me.s0 += 1; }\n  me.s1 -= mash(seed);\n  if (me.s1 < 0) { me.s1 += 1; }\n  me.s2 -= mash(seed);\n  if (me.s2 < 0) { me.s2 += 1; }\n  mash = null;\n}\n\nfunction copy(f, t) {\n  t.c = f.c;\n  t.s0 = f.s0;\n  t.s1 = f.s1;\n  t.s2 = f.s2;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  var xg = new Alea(seed),\n      state = opts && opts.state,\n      prng = xg.next;\n  prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n  prng.double = function() {\n    return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n  };\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nfunction Mash() {\n  var n = 0xefc8249d;\n\n  var mash = function(data) {\n    data = String(data);\n    for (var i = 0; i < data.length; i++) {\n      n += data.charCodeAt(i);\n      var h = 0.02519603282416938 * n;\n      n = h >>> 0;\n      h -= n;\n      h *= n;\n      n = h >>> 0;\n      h -= n;\n      n += h * 0x100000000; // 2^32\n    }\n    return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n  };\n\n  return mash;\n}\n\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.alea = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia.  See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this, strseed = '';\n\n  me.x = 0;\n  me.y = 0;\n  me.z = 0;\n  me.w = 0;\n\n  // Set up generator function.\n  me.next = function() {\n    var t = me.x ^ (me.x << 11);\n    me.x = me.y;\n    me.y = me.z;\n    me.z = me.w;\n    return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n  };\n\n  if (seed === (seed | 0)) {\n    // Integer seed.\n    me.x = seed;\n  } else {\n    // String seed.\n    strseed += seed;\n  }\n\n  // Mix in string seed, then discard an initial batch of 64 values.\n  for (var k = 0; k < strseed.length + 64; k++) {\n    me.x ^= strseed.charCodeAt(k) | 0;\n    me.next();\n  }\n}\n\nfunction copy(f, t) {\n  t.x = f.x;\n  t.y = f.y;\n  t.z = f.z;\n  t.w = f.w;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xor128 = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia.  See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this, strseed = '';\n\n  // Set up generator function.\n  me.next = function() {\n    var t = (me.x ^ (me.x >>> 2));\n    me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n    return (me.d = (me.d + 362437 | 0)) +\n       (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n  };\n\n  me.x = 0;\n  me.y = 0;\n  me.z = 0;\n  me.w = 0;\n  me.v = 0;\n\n  if (seed === (seed | 0)) {\n    // Integer seed.\n    me.x = seed;\n  } else {\n    // String seed.\n    strseed += seed;\n  }\n\n  // Mix in string seed, then discard an initial batch of 64 values.\n  for (var k = 0; k < strseed.length + 64; k++) {\n    me.x ^= strseed.charCodeAt(k) | 0;\n    if (k == strseed.length) {\n      me.d = me.x << 10 ^ me.x >>> 4;\n    }\n    me.next();\n  }\n}\n\nfunction copy(f, t) {\n  t.x = f.x;\n  t.y = f.y;\n  t.z = f.z;\n  t.w = f.w;\n  t.v = f.v;\n  t.d = f.d;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xorwow = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorshift7\" algorithm by\n// Fran\u00E7ois Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this;\n\n  // Set up generator function.\n  me.next = function() {\n    // Update xor generator.\n    var X = me.x, i = me.i, t, v, w;\n    t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n    t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n    t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n    t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n    t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n    X[i] = v;\n    me.i = (i + 1) & 7;\n    return v;\n  };\n\n  function init(me, seed) {\n    var j, w, X = [];\n\n    if (seed === (seed | 0)) {\n      // Seed state array using a 32-bit integer.\n      w = X[0] = seed;\n    } else {\n      // Seed state using a string.\n      seed = '' + seed;\n      for (j = 0; j < seed.length; ++j) {\n        X[j & 7] = (X[j & 7] << 15) ^\n            (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n      }\n    }\n    // Enforce an array length of 8, not all zeroes.\n    while (X.length < 8) X.push(0);\n    for (j = 0; j < 8 && X[j] === 0; ++j);\n    if (j == 8) w = X[7] = -1; else w = X[j];\n\n    me.x = X;\n    me.i = 0;\n\n    // Discard an initial 256 values.\n    for (j = 256; j > 0; --j) {\n      me.next();\n    }\n  }\n\n  init(me, seed);\n}\n\nfunction copy(f, t) {\n  t.x = f.x.slice();\n  t.i = f.i;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  if (seed == null) seed = +(new Date);\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (state.x) copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xorshift7 = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n", "// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated.  For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1);                        // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897);   // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C.  This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this;\n\n  // Set up generator function.\n  me.next = function() {\n    var w = me.w,\n        X = me.X, i = me.i, t, v;\n    // Update Weyl generator.\n    me.w = w = (w + 0x61c88647) | 0;\n    // Update xor generator.\n    v = X[(i + 34) & 127];\n    t = X[i = ((i + 1) & 127)];\n    v ^= v << 13;\n    t ^= t << 17;\n    v ^= v >>> 15;\n    t ^= t >>> 12;\n    // Update Xor generator array state.\n    v = X[i] = v ^ t;\n    me.i = i;\n    // Result is the combination.\n    return (v + (w ^ (w >>> 16))) | 0;\n  };\n\n  function init(me, seed) {\n    var t, v, i, j, w, X = [], limit = 128;\n    if (seed === (seed | 0)) {\n      // Numeric seeds initialize v, which is used to generates X.\n      v = seed;\n      seed = null;\n    } else {\n      // String seeds are mixed into v and X one character at a time.\n      seed = seed + '\\0';\n      v = 0;\n      limit = Math.max(limit, seed.length);\n    }\n    // Initialize circular array and weyl value.\n    for (i = 0, j = -32; j < limit; ++j) {\n      // Put the unicode characters into the array, and shuffle them.\n      if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n      // After 32 shuffles, take v as the starting w value.\n      if (j === 0) w = v;\n      v ^= v << 10;\n      v ^= v >>> 15;\n      v ^= v << 4;\n      v ^= v >>> 13;\n      if (j >= 0) {\n        w = (w + 0x61c88647) | 0;     // Weyl.\n        t = (X[j & 127] ^= (v + w));  // Combine xor and weyl to init array.\n        i = (0 == t) ? i + 1 : 0;     // Count zeroes.\n      }\n    }\n    // We have detected all zeroes; make the key nonzero.\n    if (i >= 128) {\n      X[(seed && seed.length || 0) & 127] = -1;\n    }\n    // Run the generator 512 times to further mix the state before using it.\n    // Factoring this as a function slows the main generator, so it is just\n    // unrolled here.  The weyl generator is not advanced while warming up.\n    i = 127;\n    for (j = 4 * 128; j > 0; --j) {\n      v = X[(i + 34) & 127];\n      t = X[i = ((i + 1) & 127)];\n      v ^= v << 13;\n      t ^= t << 17;\n      v ^= v >>> 15;\n      t ^= t >>> 12;\n      X[i] = v ^ t;\n    }\n    // Storing state as object members is faster than using closure variables.\n    me.w = w;\n    me.X = X;\n    me.i = i;\n  }\n\n  init(me, seed);\n}\n\nfunction copy(f, t) {\n  t.i = f.i;\n  t.w = f.w;\n  t.X = f.X.slice();\n  return t;\n};\n\nfunction impl(seed, opts) {\n  if (seed == null) seed = +(new Date);\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (state.X) copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xor4096 = impl;\n}\n\n})(\n  this,                                     // window object or global\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n", "// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this, strseed = '';\n\n  // Set up generator function.\n  me.next = function() {\n    var b = me.b, c = me.c, d = me.d, a = me.a;\n    b = (b << 25) ^ (b >>> 7) ^ c;\n    c = (c - d) | 0;\n    d = (d << 24) ^ (d >>> 8) ^ a;\n    a = (a - b) | 0;\n    me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n    me.c = c = (c - d) | 0;\n    me.d = (d << 16) ^ (c >>> 16) ^ a;\n    return me.a = (a - b) | 0;\n  };\n\n  /* The following is non-inverted tyche, which has better internal\n   * bit diffusion, but which is about 25% slower than tyche-i in JS.\n  me.next = function() {\n    var a = me.a, b = me.b, c = me.c, d = me.d;\n    a = (me.a + me.b | 0) >>> 0;\n    d = me.d ^ a; d = d << 16 ^ d >>> 16;\n    c = me.c + d | 0;\n    b = me.b ^ c; b = b << 12 ^ d >>> 20;\n    me.a = a = a + b | 0;\n    d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n    me.c = c = c + d | 0;\n    b = b ^ c;\n    return me.b = (b << 7 ^ b >>> 25);\n  }\n  */\n\n  me.a = 0;\n  me.b = 0;\n  me.c = 2654435769 | 0;\n  me.d = 1367130551;\n\n  if (seed === Math.floor(seed)) {\n    // Integer seed.\n    me.a = (seed / 0x100000000) | 0;\n    me.b = seed | 0;\n  } else {\n    // String seed.\n    strseed += seed;\n  }\n\n  // Mix in string seed, then discard an initial batch of 64 values.\n  for (var k = 0; k < strseed.length + 20; k++) {\n    me.b ^= strseed.charCodeAt(k) | 0;\n    me.next();\n  }\n}\n\nfunction copy(f, t) {\n  t.a = f.a;\n  t.b = f.b;\n  t.c = f.c;\n  t.d = f.d;\n  return t;\n};\n\nfunction impl(seed, opts) {\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.tychei = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n", "/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256,        // each RC4 output is 0 <= x < 256\n    chunks = 6,         // at least six RC4 outputs for each double\n    digits = 52,        // there are 52 significant digits in a double\n    rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n    significance = math.pow(2, digits),\n    overflow = significance * 2,\n    mask = width - 1,\n    nodecrypto;         // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n  var key = [];\n  options = (options == true) ? { entropy: true } : (options || {});\n\n  // Flatten the seed string or build one from local entropy if needed.\n  var shortseed = mixkey(flatten(\n    options.entropy ? [seed, tostring(pool)] :\n    (seed == null) ? autoseed() : seed, 3), key);\n\n  // Use the seed to initialize an ARC4 generator.\n  var arc4 = new ARC4(key);\n\n  // This function returns a random double in [0, 1) that contains\n  // randomness in every bit of the mantissa of the IEEE 754 value.\n  var prng = function() {\n    var n = arc4.g(chunks),             // Start with a numerator n < 2 ^ 48\n        d = startdenom,                 //   and denominator d = 2 ^ 48.\n        x = 0;                          //   and no 'extra last byte'.\n    while (n < significance) {          // Fill up all significant digits by\n      n = (n + x) * width;              //   shifting numerator and\n      d *= width;                       //   denominator and generating a\n      x = arc4.g(1);                    //   new least-significant-byte.\n    }\n    while (n >= overflow) {             // To avoid rounding up, before adding\n      n /= 2;                           //   last byte, shift everything\n      d /= 2;                           //   right using integer math until\n      x >>>= 1;                         //   we have exactly the desired bits.\n    }\n    return (n + x) / d;                 // Form the number within [0, 1).\n  };\n\n  prng.int32 = function() { return arc4.g(4) | 0; }\n  prng.quick = function() { return arc4.g(4) / 0x100000000; }\n  prng.double = prng;\n\n  // Mix the randomness into accumulated entropy.\n  mixkey(tostring(arc4.S), pool);\n\n  // Calling convention: what to return as a function of prng, seed, is_math.\n  return (options.pass || callback ||\n      function(prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) { copy(state, arc4); }\n          // Only provide the .state method if requested via options.state.\n          prng.state = function() { return copy(arc4, {}); }\n        }\n\n        // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n        if (is_math_call) { math[rngname] = prng; return seed; }\n\n        // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(\n  prng,\n  shortseed,\n  'global' in options ? options.global : (this == math),\n  options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation.  The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4.  Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n  var t, keylen = key.length,\n      me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n  // The empty key [] is treated as [0].\n  if (!keylen) { key = [keylen++]; }\n\n  // Set up S using the standard key scheduling algorithm.\n  while (i < width) {\n    s[i] = i++;\n  }\n  for (i = 0; i < width; i++) {\n    s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n    s[j] = t;\n  }\n\n  // The \"g\" method returns the next (count) outputs as one number.\n  (me.g = function(count) {\n    // Using instance members instead of closure state nearly doubles speed.\n    var t, r = 0,\n        i = me.i, j = me.j, s = me.S;\n    while (count--) {\n      t = s[i = mask & (i + 1)];\n      r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n    }\n    me.i = i; me.j = j;\n    return r;\n    // For robust unpredictability, the function call below automatically\n    // discards an initial batch of values.  This is called RC4-drop[256].\n    // See http://google.com/search?q=rsa+fluhrer+response&btnI\n  })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n  t.i = f.i;\n  t.j = f.j;\n  t.S = f.S.slice();\n  return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n  var result = [], typ = (typeof obj), prop;\n  if (depth && typ == 'object') {\n    for (prop in obj) {\n      try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n    }\n  }\n  return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n  var stringseed = seed + '', smear, j = 0;\n  while (j < stringseed.length) {\n    key[mask & j] =\n      mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n  }\n  return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n  try {\n    var out;\n    if (nodecrypto && (out = nodecrypto.randomBytes)) {\n      // The use of 'out' to remember randomBytes makes tight minified code.\n      out = out(width);\n    } else {\n      out = new Uint8Array(width);\n      (global.crypto || global.msCrypto).getRandomValues(out);\n    }\n    return tostring(out);\n  } catch (e) {\n    var browser = global.navigator,\n        plugins = browser && browser.plugins;\n    return [+new Date, global, plugins, global.screen, tostring(pool)];\n  }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n  return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool.  Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n  module.exports = seedrandom;\n  // When in node.js, try using crypto package for autoseeding.\n  try {\n    nodecrypto = require('crypto');\n  } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n  define(function() { return seedrandom; });\n} else {\n  // When included as a plain script, set up Math.seedrandom global.\n  math['seed' + rngname] = seedrandom;\n}\n\n\n// End anonymous scope, and pass initial values.\n})(\n  // global: `self` in browsers (including strict mode and web workers),\n  // otherwise `this` in Node and other environments\n  (typeof self !== 'undefined') ? self : this,\n  [],     // pool: entropy pool starts empty\n  Math    // math: package containing random, pow, and seedrandom\n);\n", "// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random();       // 0 <= x < 1.  Every bit is random.\n// var x = random.quick(); // 0 <= x < 1.  32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baag\u00F8e.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by Fran\u00E7ois Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three.  It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures.  Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n", "import { Button, IconInputSearch, Spacer, Stack, Tabs, TabsItem } from \"@framerjs/fresco\"\nimport { colors, dimensions } from \"@framerjs/fresco/tokens\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { debugBarClassName } from \"document/components/ProjectGlobal.styles.ts\"\nimport engine from \"document/engine.ts\"\nimport { getContentManagementNode } from \"document/models/CanvasTree/nodes/ContentManagementNode.utils.ts\"\nimport { EXTERNAL_MODULES_LIST_ID } from \"document/models/CanvasTree/nodes/ExternalModuleNode.ts\"\nimport type { FrameStats } from \"document/stores/DebugStore.ts\"\nimport { objectKeys } from \"library/utils/objectKeys.ts\"\nimport React, { useLayoutEffect } from \"react\"\nimport * as styles from \"./DebugBar.styles.ts\"\nimport { Errors } from \"./Errors.tsx\"\nimport { Graphs } from \"./Graphs.tsx\"\nimport { Icons } from \"./Icons.tsx\"\nimport { Logs } from \"./Logs.tsx\"\nimport { Modules } from \"./Modules.tsx\"\nimport { ScrollableOverflowStack } from \"./ScrollableOverflowStack.tsx\"\nimport { Sections } from \"./Sections.tsx\"\nimport { ServerAPI } from \"./ServerAPI.tsx\"\nimport { Tools } from \"./Tools.tsx\"\nimport { Wireframer } from \"./Wireframer.tsx\"\nimport { Agents } from \"./agents/Agents.tsx\"\nimport { CrdtDebugPanel } from \"./crdt/CrdtDebugPanel.tsx\"\nimport { setDebugBarSection, useDebugBarSection } from \"./debugBarNavigationStore.ts\"\nimport { TreeView } from \"./treeView/TreeView.tsx\"\nimport { useFindNodeById } from \"./useFindNodeById.ts\"\nimport { useLocalStorageState } from \"./useLocalStorageState.tsx\"\n\nconst MIN_HEIGHT = 150\nconst MAX_HEIGHT = 800\n\nconst DEFAULT_HEIGHT = 450\n\nfunction computeFPS(frames: FrameStats[]): number {\n\tif (frames.length === 0) return 0\n\tconst totalTime = frames.reduce((total, frame) => total + frame.totalTime / 1000, 0)\n\tif (totalTime <= 0) return 0\n\treturn frames.length / totalTime\n}\n\nfunction formatMB(bytes: number): React.ReactElement {\n\tif (bytes === 0) return <>0</>\n\tif (bytes < 1_000_000) return <>{(bytes / 1_000_000).toFixed(1)}&nbsp;MB</>\n\tif (bytes < 1_000_000_000) return <>{(bytes / 1_000_000).toFixed(0)}&nbsp;MB</>\n\treturn <>{(bytes / 1_000_000_000).toFixed(2)}&nbsp;GB</>\n}\n\nconst sections = {\n\tTools,\n\tLogs,\n\tTree: TreeView,\n\tModules,\n\tWireframer,\n\tSections,\n\tGraphs,\n\tErrors,\n\tIcons,\n\tCRDT: CrdtDebugPanel,\n\tAgents,\n\tServerAPI,\n} as const\n\nconst sectionBackgrounds: Partial<Record<keyof typeof sections, string>> = {\n\tTools: colors.debugBarSecondaryBackground,\n}\n\ntype SectionTitle = keyof typeof sections\n\nconst defaultSectionKey: SectionTitle = \"Logs\"\n\nfunction isSectionTitle(value: string): value is SectionTitle {\n\treturn value in sections\n}\n\n// We are using a default export because this component is imported lazily.\n// biome-ignore lint/style/noDefaultExport: needed here\nexport default function DebugBarInner() {\n\tconst isAgentExperimentOn = useExperimentIsOn(\"agent\")\n\tconst enabledSections = React.useMemo(\n\t\t() => objectKeys(sections).filter(section => isAgentExperimentOn || section !== \"Agents\"),\n\t\t[isAgentExperimentOn],\n\t)\n\n\tconst [height, setHeight] = useLocalStorageState(\"debugBarHeight\", DEFAULT_HEIGHT)\n\tconst { layoutState, debugStore } = engine.stores\n\n\tconst update = debugStore.useState(state => state.update)\n\n\tconst isReady = engine.stores.loadingStore.useState(state => state.isReady)\n\n\t// Only reserve debug bar height after the project is fully loaded,\n\t// so the loading screen can use the full viewport without being clipped.\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: layoutState is a stable singleton\n\tReact.useEffect(() => {\n\t\tif (!isReady) return\n\t\tlayoutState.setDebugBarHeight(height)\n\t\treturn () => layoutState.setDebugBarHeight(0)\n\t}, [height, isReady])\n\n\tconst activeSection = useDebugBarSection()\n\tconst effectiveActiveSection =\n\t\tactiveSection && isSectionTitle(activeSection) && enabledSections.includes(activeSection)\n\t\t\t? activeSection\n\t\t\t: defaultSectionKey\n\tconst ActiveSection = sections[effectiveActiveSection]\n\n\tfunction startResize(downEvent: React.MouseEvent) {\n\t\tconst startPosition = downEvent.clientY\n\t\tconst startHeight = height\n\n\t\tfunction handleMouseMove(moveEvent: MouseEvent) {\n\t\t\tconst delta = moveEvent.clientY - startPosition\n\n\t\t\tlet newHeight = startHeight - delta\n\n\t\t\tif (newHeight < MIN_HEIGHT) {\n\t\t\t\tnewHeight = MIN_HEIGHT\n\t\t\t}\n\n\t\t\tif (newHeight > MAX_HEIGHT) {\n\t\t\t\tnewHeight = MAX_HEIGHT\n\t\t\t}\n\n\t\t\tif (Math.abs(DEFAULT_HEIGHT - newHeight) < 10) {\n\t\t\t\tnewHeight = DEFAULT_HEIGHT\n\t\t\t}\n\n\t\t\tsetHeight(newHeight)\n\t\t}\n\n\t\tfunction handleMouseUp() {\n\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove)\n\t\t\tdocument.removeEventListener(\"mouseup\", handleMouseUp)\n\t\t}\n\n\t\tdocument.addEventListener(\"mousemove\", handleMouseMove)\n\t\tdocument.addEventListener(\"mouseup\", handleMouseUp)\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cx(\"wantsNativeTextAction\", debugBarClassName, \"wantsNativeTextAction\", styles.debugBarNodeTypeVars)}\n\t\t\tstyle={{\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight,\n\t\t\t\tbackground: colors.panelBackground,\n\t\t\t\tcolor: colors.panelText,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tright: 0,\n\t\t\t\tbottom: layoutState.currentTutorialBottom,\n\t\t\t\tleft: 0,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\tflexDirection: \"column\",\n\t\t\t\tborderTop: \"3px solid \" + colors.panelDivider,\n\t\t\t\toutline: \"none\",\n\t\t\t}}\n\t\t\tonWheel={event => event.stopPropagation()}\n\t\t>\n\t\t\t{/* biome-ignore lint/nursery/noStaticElementInteractions: <explanation> */}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttop: -9,\n\t\t\t\t\theight: 15,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\tcursor: getResizeCursor(height),\n\t\t\t\t}}\n\t\t\t\tonMouseDown={startResize}\n\t\t\t/>\n\n\t\t\t<Stack direction=\"row\" alignItems=\"center\" className={styles.debugBarStack}>\n\t\t\t\t<Tabs value={effectiveActiveSection} onChange={setDebugBarSection} className={styles.scrollableTabsList}>\n\t\t\t\t\t{enabledSections.map((title: SectionTitle) => (\n\t\t\t\t\t\t<TabsItem key={title} value={title}>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</TabsItem>\n\t\t\t\t\t))}\n\t\t\t\t</Tabs>\n\t\t\t\t<FindNodeByIdButton />\n\t\t\t\t<Spacer flex minWidth={50} />\n\t\t\t\t<RightSideControls />\n\t\t\t</Stack>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\tpadding: dimensions.css.panelPadding,\n\t\t\t\t\toverflow: \"auto\",\n\t\t\t\t\tbackground: sectionBackgrounds[effectiveActiveSection] ?? colors.debugBarBackground,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ActiveSection update={update} setActiveSection={setDebugBarSection} />\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction FindNodeByIdButton() {\n\tconst { isLoading, findNodeById } = useFindNodeById()\n\treturn (\n\t\t<Button\n\t\t\tonClick={async () => {\n\t\t\t\tconst id = prompt(\"Enter node ID (like \u201CiBGe_vP70\u201D):\")\n\t\t\t\tif (!id) return\n\t\t\t\tawait findNodeById(id)\n\t\t\t}}\n\t\t\tclassName={styles.buttonWithIcon}\n\t\t\tenabled={!isLoading}\n\t\t>\n\t\t\t{isLoading ? (\n\t\t\t\t<>Loading the full project\u2026</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<IconInputSearch />\n\t\t\t\t\t<span>Node by ID</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Button>\n\t)\n}\n\nfunction RightSideControls() {\n\tconst { debugStore, modulesStore, scopeStore, selectionStore } = engine.stores\n\tconst lastFrame = debugStore.frames.at(-1)\n\tconst lastFrametTimestamp = lastFrame?.timestamp ?? 0\n\tconst lastTenSeconds = debugStore.frames.filter(f => lastFrametTimestamp - f.timestamp < 10_000)\n\tconst fps = computeFPS(lastTenSeconds)\n\tconst bytesSent = lastTenSeconds.reduce((bytes, f) => bytes + f.bytesSent, 0) / 10\n\tconst bytesRecv = lastTenSeconds.reduce((bytes, f) => bytes + f.bytesReceived, 0) / 10\n\n\treturn (\n\t\t<ScrollableOverflowStack direction=\"row\" alignItems=\"center\" gap={10} shrink={1}>\n\t\t\t<Stat title={Dictionary.Frame}>\n\t\t\t\tNumber:&nbsp;{engine.scheduler.update}\n\t\t\t\t<br />\n\t\t\t\tFPS:&nbsp;{fps.toFixed(0)}\n\t\t\t</Stat>\n\t\t\t<Stat title=\"Tree\">\n\t\t\t\tSize:&nbsp;{engine.tree.size()}\n\t\t\t\t<br />\n\t\t\t\tPages:&nbsp;{engine.tree.root.children.length}\n\t\t\t\t<br />\n\t\t\t\tCollections:&nbsp;{getContentManagementNode(engine.tree)?.loaded?.children.length ?? 0}\n\t\t\t</Stat>\n\t\t\t<Stat title=\"Modules\">\n\t\t\t\tLocal:&nbsp;{modulesStore.localModules.size}\n\t\t\t\t<br />\n\t\t\t\tExternal:&nbsp;{engine.tree.get(EXTERNAL_MODULES_LIST_ID)?.children?.length ?? 0}\n\t\t\t</Stat>\n\t\t\t<Stat title=\"Current Page\">\n\t\t\t\tGroundNodes:&nbsp;{scopeStore.active.children.length}\n\t\t\t\t<br />\n\t\t\t\tSelection:&nbsp;{selectionStore.ids.length}\n\t\t\t</Stat>\n\t\t\t<Stat title=\"Memory\">\n\t\t\t\tMain:&nbsp;{formatMB(lastFrame?.mainMemory ?? 0)}\n\t\t\t\t<br />\n\t\t\t\tSandbox:&nbsp;{formatMB(lastFrame?.sandboxMemory ?? 0)}\n\t\t\t</Stat>\n\t\t\t<Stat title=\"DOM Nodes\">\n\t\t\t\tMain:&nbsp;{document.querySelectorAll(\"*\").length}\n\t\t\t\t<br />\n\t\t\t\tSandbox:&nbsp;{debugStore.getSandboxDomNodes()}\n\t\t\t</Stat>\n\t\t\t<Stat title=\"Network\">\n\t\t\t\tPing:&nbsp;{(lastFrame?.rtt ?? -1).toFixed(0)}\n\t\t\t\t<br />\n\t\t\t\tUp/Down:&nbsp;{bytesSent.toFixed(0)}/{bytesRecv.toFixed(0)}&nbsp;bps\n\t\t\t</Stat>\n\t\t</ScrollableOverflowStack>\n\t)\n}\n\nfunction Stat({ title, children }: { title: string; children: React.ReactNode }) {\n\tconst ref = React.createRef<HTMLDivElement>()\n\tconst [minWidth, setMinWidth] = React.useState(60)\n\tconst [changed, setChanged] = React.useState(performance.now())\n\n\tuseLayoutEffect(() => {\n\t\tif (!ref.current) return\n\t\tconst now = performance.now()\n\n\t\t// We want to grow, but not shrink. We do that by setting min width to\n\t\t// the largest width we see. Then reset to the current width after 10\n\t\t// seconds.\n\t\tconst width = ref.current.offsetWidth\n\t\tif (width > minWidth || now - changed > 10_000) {\n\t\t\tsetMinWidth(width)\n\t\t\tsetChanged(now)\n\t\t}\n\t})\n\n\treturn (\n\t\t<div style={{ minWidth, flex: \"none\" }} ref={ref}>\n\t\t\t<b>{title}</b>\n\t\t\t<br />\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nfunction getResizeCursor(height: number) {\n\tif (height <= MIN_HEIGHT) return \"n-resize\"\n\tif (height >= MAX_HEIGHT) return \"s-resize\"\n\treturn \"ns-resize\"\n}\n", "import \"DebugBar.styles_ergoby.wyw.css\"; export const buttonWithIcon = \"buttonWithIcon_b19gv4mo\";\nexport const scrollShadowLeft = \"scrollShadowLeft_s1rara60\";\nexport const scrollShadowRight = \"scrollShadowRight_sybsfsh\";\nexport const scrollableTabsList = \"scrollableTabsList_sc7x9rg\";\nexport const debugBarStack = \"debugBarStack_dq13nd\";\nexport const debugBarNodeTypeVars = \"debugBarNodeTypeVars_d1xe3tjo\";", "import { Button, Stack } from \"@framerjs/fresco\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport engine from \"document/engine.ts\"\nimport { CONTENT_MANAGEMENT_ID } from \"document/models/CanvasTree/nodes/ContentManagementNode.ts\"\nimport { ERROR_LIST_NODE_ID } from \"document/models/CanvasTree/nodes/ErrorListNode.ts\"\nimport type { ErrorNode } from \"document/models/CanvasTree/nodes/ErrorNode.ts\"\nimport { isErrorNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { getCanvasBoundingRectCached } from \"document/models/CanvasTree/utils/geometry.ts\"\nimport { useDeprecatedEngineState } from \"document/useDeprecatedEngineState.ts\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\n\nexport function Errors() {\n\tconst errors = useDeprecatedEngineState([EngineChange.Tree, EngineChange.ActiveBundle], () => {\n\t\treturn engine.tree.get(ERROR_LIST_NODE_ID)?.children\n\t})\n\n\treturn (\n\t\t<div>\n\t\t\t{errors?.map(error => {\n\t\t\t\tif (!isErrorNode(error)) return null\n\t\t\t\tif (!engine.tree.has(error.nodeId)) return null\n\t\t\t\tif (error.scopeId === engine.tree.root.id) return null\n\t\t\t\t// Ignore errors for nodes that are no longer in the original source node.\n\t\t\t\tif (engine.stores.treeStore.treeIndex.getScopeIdFor(error.nodeId) !== error.scopeId) return null\n\t\t\t\tconst scope = engine.tree.get(error.scopeId)\n\t\t\t\tif (!scope) return null\n\t\t\t\t// It's not possible to show errors when we don't know the\n\t\t\t\t// collection. This filters out errors that were incorrectly\n\t\t\t\t// recorded in the past. We could choose to migrate these out in\n\t\t\t\t// the future.\n\t\t\t\tif (error.scopeId === CONTENT_MANAGEMENT_ID && isUndefined(error.sourceNodeId)) return\n\n\t\t\t\treturn (\n\t\t\t\t\t<Stack direction=\"row\" key={error.id}>\n\t\t\t\t\t\t<p>{error.reason}</p>\n\t\t\t\t\t\t{error.moduleIdentifier && <p>Identifier: {error.moduleIdentifier}</p>}\n\t\t\t\t\t\t<Button onClick={() => goToNode(error)}>Go To Node</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t)\n\t\t\t})}\n\t\t</div>\n\t)\n}\n\nfunction goToNode(error: ErrorNode) {\n\tif (!error.scopeId || !error.nodeId) return\n\n\tengine.stores.scopeStore.select(error.scopeId, { keepHistory: false })\n\tengine.stores.selectionStore.set(error.nodeId)\n\tconst node = engine.tree.get(error.nodeId)\n\tif (!node) return\n\tconst rect = getCanvasBoundingRectCached(engine.tree, node)\n\tengine.stores.canvasStore.scrollToVisible(rect)\n}\n", "import { rgba } from \"@framerjs/fresco/src/tokens/utils/rgba\"\nimport { palette } from \"@framerjs/fresco/tokens\"\nimport engine from \"document/engine.ts\"\nimport type { FrameStats } from \"document/stores/DebugStore.ts\"\nimport { Tools } from \"document/stores/ToolEnum.ts\"\nimport React from \"react\"\nimport uPlot from \"uplot\"\n\ntype FrameData = (FrameStats | undefined)[]\n\ninterface Plot extends uPlot {\n\t__frames?: FrameData\n}\n\n// Helper functions for uPlot\n\nfunction unstackLabel(graph: Plot, value: number, dataIndex: number, valueIndex: number) {\n\tif (typeof value !== \"number\") return \"\"\n\tconst previousValue = graph.data[dataIndex + 1]?.[valueIndex]\n\tif (typeof previousValue !== \"number\") return \"\"\n\treturn (value - previousValue).toFixed(1)\n}\n\nfunction unstackLabelBytes(graph: Plot, value: number, dataIndex: number, valueIndex: number) {\n\tif (typeof value !== \"number\") return \"\"\n\tconst previousValue = graph.data[dataIndex + 1]?.[valueIndex]\n\tif (typeof previousValue !== \"number\") return \"\"\n\treturn labelBytes(graph, value - previousValue)\n}\n\nfunction labelBytes(_graph: Plot, value: number) {\n\tconst kb = value / 1024\n\tconst mb = kb / 1024\n\tif (mb > 0.9) {\n\t\treturn mb.toFixed(1) + \"Mb\"\n\t}\n\tif (kb > 0.9) {\n\t\treturn kb.toFixed(1) + \"Kb\"\n\t}\n\treturn value.toFixed(0)\n}\n\nfunction axesLabelBytes(_graph: Plot, values: number[], _space: any) {\n\treturn values.map(v => labelBytes(_graph, v))\n}\n\n// Create data array for the frame data plot.\nfunction getFrameData(frames: FrameData): uPlot.AlignedData {\n\tconst timestamps: number[] = []\n\tconst totalTimes: number[] = []\n\tconst browserPaint: number[] = []\n\tconst reactUpdate: number[] = []\n\tconst sandboxRendering: number[] = []\n\tconst sandboxUpdating: number[] = []\n\tconst postProcessing: number[] = []\n\tconst toolUpdate: number[] = []\n\tconst eventProcessing: number[] = []\n\tconst remoteDocument: number[] = []\n\tconst data: uPlot.AlignedData = [\n\t\ttimestamps,\n\t\ttotalTimes,\n\t\tbrowserPaint,\n\t\treactUpdate,\n\t\tsandboxRendering,\n\t\tsandboxUpdating,\n\t\tpostProcessing,\n\t\ttoolUpdate,\n\t\teventProcessing,\n\t\tremoteDocument,\n\t]\n\n\tlet missing = frames.findIndex(frame => !!frame)\n\tfor (const frame of frames) {\n\t\tif (!frame) {\n\t\t\ttimestamps.push(-missing)\n\t\t\ttotalTimes.push(0)\n\t\t\tbrowserPaint.push(0)\n\t\t\treactUpdate.push(0)\n\t\t\tsandboxRendering.push(0)\n\t\t\tsandboxUpdating.push(0)\n\t\t\tpostProcessing.push(0)\n\t\t\ttoolUpdate.push(0)\n\t\t\teventProcessing.push(0)\n\t\t\tremoteDocument.push(0)\n\t\t\tmissing -= 1\n\t\t\tcontinue\n\t\t}\n\n\t\t// Turn down the times of the first frame, otherwise we get an unhelpful peak, make other frames hard to read.\n\t\tconst m = frame.update <= 1 ? 0.1 : 1\n\n\t\ttimestamps.push(frame.update)\n\t\ttotalTimes.push(frame.totalTime * m)\n\t\tlet stacked = 0\n\t\tremoteDocument.push((stacked += frame.remoteDocument * m))\n\t\teventProcessing.push((stacked += frame.eventProcessing * m))\n\t\ttoolUpdate.push((stacked += frame.toolUpdate * m))\n\t\tpostProcessing.push((stacked += frame.postProcessing * m))\n\t\tsandboxUpdating.push((stacked += frame.sandboxUpdating * m))\n\t\tsandboxRendering.push((stacked += frame.sandboxRendering * m))\n\t\treactUpdate.push((stacked += frame.reactUpdate * m))\n\t\tbrowserPaint.push((stacked += frame.browserPaint * m))\n\t}\n\treturn data\n}\n\n// Create data array for the memory data plot.\nfunction getMemoryData(frames: FrameData): uPlot.AlignedData {\n\tconst timestamps: number[] = []\n\tconst totalMemory: number[] = []\n\tconst mainMemory: number[] = []\n\tconst sandboxMemory: number[] = []\n\n\tlet missing = frames.findIndex(frame => !!frame)\n\tfor (const frame of frames) {\n\t\tif (!frame) {\n\t\t\tmissing -= 1\n\t\t\ttimestamps.push(-missing)\n\t\t\ttotalMemory.push(0)\n\t\t\tmainMemory.push(0)\n\t\t\tsandboxMemory.push(0)\n\t\t\tcontinue\n\t\t}\n\n\t\ttimestamps.push(frame.update)\n\t\ttotalMemory.push(frame.mainMemory + frame.sandboxMemory)\n\t\tmainMemory.push(frame.mainMemory)\n\t\tsandboxMemory.push(frame.mainMemory + frame.sandboxMemory)\n\t}\n\treturn [timestamps, totalMemory, sandboxMemory, mainMemory]\n}\n\nfunction getNetworkData(frames: FrameData): uPlot.AlignedData {\n\tconst timestamps: number[] = []\n\tconst bytesSent: number[] = []\n\tconst bytesReceived: number[] = []\n\tconst rtt: number[] = []\n\n\tlet missing = frames.findIndex(frame => !!frame)\n\tfor (const frame of frames) {\n\t\tif (!frame) {\n\t\t\tmissing -= 1\n\t\t\ttimestamps.push(-missing)\n\t\t\tbytesSent.push(0)\n\t\t\tbytesReceived.push(0)\n\t\t\trtt.push(0)\n\t\t\tcontinue\n\t\t}\n\n\t\ttimestamps.push(frame.update)\n\t\tbytesSent.push(frame.bytesSent)\n\t\tbytesReceived.push(frame.bytesReceived)\n\t\trtt.push(frame.rtt)\n\t}\n\treturn [timestamps, bytesSent, bytesReceived, rtt]\n}\n\n// Renders the frame + logs as json if the graph is hovered.\nfunction tooltipPlugin(): uPlot.Plugin {\n\tconst overlay = document.createElement(\"pre\")\n\toverlay.style.display = \"none\"\n\toverlay.style.position = \"absolute\"\n\toverlay.style.pointerEvents = \"none\"\n\toverlay.style.opacity = \"0.7\"\n\toverlay.style.background = \"white\"\n\toverlay.style.whiteSpace = \"break-spaces\"\n\toverlay.style.wordWrap = \"break-word\"\n\toverlay.style.zIndex = \"100\"\n\tlet previousLeft = -1\n\n\tfunction frameToString(frame: FrameStats): string {\n\t\tconst lines = Object.entries(frame).map(([key, value]) => {\n\t\t\tif (Number.isFinite(value) && !Number.isInteger(value)) {\n\t\t\t\tif (key === \"zoom\") {\n\t\t\t\t\treturn `${key}: ${value.toFixed(2)}`\n\t\t\t\t}\n\t\t\t\treturn `${key}: ${value.toFixed(1)}`\n\t\t\t}\n\t\t\tif (typeof value !== \"object\") {\n\t\t\t\treturn `${key}: ${value}`\n\t\t\t}\n\t\t\tif (key === \"logs\") {\n\t\t\t\tif (value.length === 0) return `${key}:`\n\t\t\t\treturn `${key}:\\n ${value.join(\"\\n \")}`\n\t\t\t}\n\t\t\treturn `${key}: ${JSON.stringify(value, null, 4)}`\n\t\t})\n\t\treturn lines.join(\"\\n\")\n\t}\n\n\treturn {\n\t\thooks: {\n\t\t\tinit: (plot: Plot) => {\n\t\t\t\tplot.over.onmouseenter = () => (overlay.style.display = \"block\")\n\t\t\t\tplot.over.onmouseleave = () => (overlay.style.display = \"none\")\n\t\t\t\tplot.over.appendChild(overlay)\n\t\t\t},\n\t\t\tsetCursor: (plot: Plot) => {\n\t\t\t\tconst { left, top, idx } = plot.cursor\n\t\t\t\tif (left === undefined || top === undefined || idx === undefined || idx === null) return\n\n\t\t\t\tif (left === previousLeft) return\n\t\t\t\tpreviousLeft = left\n\n\t\t\t\tconst frame = plot.__frames?.[idx]\n\t\t\t\tif (!frame) return\n\n\t\t\t\tconst containerWidth = plot.over.offsetWidth\n\t\t\t\toverlay.style.maxWidth = containerWidth + \"px\"\n\n\t\t\t\toverlay.textContent = frameToString(frame)\n\t\t\t\tconst width = overlay.offsetWidth\n\t\t\t\tconst height = overlay.offsetHeight\n\t\t\t\toverlay.style.top = 350 - height + \"px\"\n\n\t\t\t\tconst margin = 25\n\t\t\t\tconst spaceRight = containerWidth - (left + width + margin * 2)\n\t\t\t\tif (spaceRight < 0) {\n\t\t\t\t\tconst spaceLeft = left - (width + margin * 2)\n\t\t\t\t\tif (spaceLeft > 0) {\n\t\t\t\t\t\toverlay.style.left = left - width - margin + \"px\"\n\t\t\t\t\t} else {\n\t\t\t\t\t\toverlay.style.left = Math.max(0, containerWidth - (left + width + margin)) + \"px\"\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toverlay.style.left = left + margin + \"px\"\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t}\n}\n\n// This renders a background that shows a 50ms and 350ms (the long frame limit) borders.\nfunction backgroundPlugin(): uPlot.Plugin {\n\tfunction drawClear(plot: Plot) {\n\t\tconst { left, top, width, height } = plot.bbox\n\t\tconst { ctx } = plot\n\t\tconst max = plot.scales.y?.max ?? 500\n\n\t\t// Frame times above 350ms we render in red to indicate badness. Between 350ms to 50ms we\n\t\t// render in orange because that is still not very good. Below 50ms we don't render\n\t\t// anything, giving us the default background.\n\t\tconst p350 = (height / max) * 350\n\t\tconst p50 = (height / max) * 50\n\n\t\tctx.save()\n\t\tctx.fillStyle = rgba(palette.red100, 0.15)\n\t\tctx.fillRect(left, top, width, height - p350)\n\t\tctx.fillStyle = rgba(palette.orange100, 0.09)\n\t\tctx.fillRect(left, top + height - p350, width, p350 - p50)\n\t\tctx.restore()\n\t}\n\n\treturn { hooks: { drawClear } }\n}\n\n// This plots vertical bars when the socket changes.\nfunction socketPlugin(): uPlot.Plugin {\n\tfunction drawSeries(plot: Plot, seriesIndex: number) {\n\t\tif (seriesIndex !== 1) return\n\n\t\tconst frames = plot.__frames\n\t\tif (!frames) return\n\n\t\tconst { top, height } = plot.bbox\n\t\tconst { ctx } = plot\n\n\t\tctx.save()\n\t\tctx.globalAlpha = 0.4\n\n\t\tconst first = frames[0]\n\t\tconst last = frames[frames.length - 1]\n\t\tlet lastSocketId = first?.socketId || 0\n\t\tlet startNoSocket: FrameStats | null = first && first.socketId === 0 ? first : null\n\n\t\tfor (const frame of frames) {\n\t\t\tif (!frame) continue\n\n\t\t\tconst cx = Math.floor(plot.valToPos(frame.update, \"x\", true))\n\n\t\t\tif (startNoSocket && (frame.socketId !== 0 || frame === last)) {\n\t\t\t\tctx.fillStyle = \"orange\"\n\t\t\t\tconst start = Math.floor(plot.valToPos(startNoSocket.update, \"x\", true))\n\t\t\t\tctx.fillRect(start, top, cx - start, height)\n\t\t\t\tstartNoSocket = null\n\t\t\t}\n\n\t\t\tif (!startNoSocket && frame.socketId === 0) {\n\t\t\t\tstartNoSocket = frame\n\t\t\t}\n\n\t\t\tif (frame.socketId !== lastSocketId) {\n\t\t\t\tlastSocketId = frame.socketId\n\t\t\t\tctx.fillStyle = \"red\"\n\t\t\t\tctx.fillRect(cx, top, 6, height)\n\t\t\t}\n\n\t\t\t// Mark when a verify happened. We find that by digging into the logs.\n\t\t\tif (frame.logs.find(l => l.indexOf(\"[remote:sync] verify: passed\") >= 0)) {\n\t\t\t\tctx.globalAlpha = 0.9\n\t\t\t\tctx.fillStyle = \"#3c3\"\n\t\t\t\tctx.beginPath()\n\t\t\t\tctx.arc(cx, top + 20, 10, 0, Math.PI * 2)\n\t\t\t\tctx.fill()\n\t\t\t\tctx.globalAlpha = 0.4\n\t\t\t}\n\t\t}\n\n\t\tctx.restore()\n\t}\n\n\treturn { hooks: { drawSeries } }\n}\n\nconst toolMap: Record<Tools | string, number> = (() => {\n\tconst result: Record<string, number> = {}\n\tfor (const tool of Tools.allNames()) {\n\t\tconst enumValue = Tools[tool as keyof typeof Tools] as number\n\t\tresult[tool] = enumValue\n\t\tresult[tool + \"Tool\"] = enumValue\n\t}\n\treturn result as Record<Tools | string, number>\n})()\n\n// This plots vertical bars into the graph based on certain frame events or states.\nfunction eventPlugin(): uPlot.Plugin {\n\tfunction drawSeries(plot: Plot, seriesIndex: number) {\n\t\tif (seriesIndex !== 1) return\n\n\t\tconst frames = plot.__frames\n\t\tif (!frames) return\n\n\t\tconst { top, height } = plot.bbox\n\t\tconst { ctx } = plot\n\n\t\tctx.save()\n\t\tctx.globalAlpha = 0.8\n\n\t\tconst first = frames[0]\n\t\tconst last = frames[frames.length - 1]\n\t\tlet startDeferredFrame: FrameStats | null = first && first.renderingPhase !== \"Normal\" ? first : null\n\t\tfor (const frame of frames) {\n\t\t\tif (!frame) continue\n\n\t\t\tconst cx = Math.floor(plot.valToPos(frame.update, \"x\", true))\n\t\t\tconst cx2 = Math.floor(plot.valToPos(frame.update + 1, \"x\", true))\n\t\t\tconst span = cx2 - cx\n\t\t\tif (frame.didScopeChange) {\n\t\t\t\tctx.lineWidth = 3\n\t\t\t\tctx.strokeStyle = \"black\"\n\t\t\t\tctx.strokeRect(cx - 3, top, 1, height + 25)\n\t\t\t}\n\t\t\tif (frame.atomicFrame) {\n\t\t\t\tctx.lineWidth = 3\n\t\t\t\tctx.strokeStyle = \"green\"\n\t\t\t\tctx.strokeRect(cx - 1, top, 1, height + 25)\n\t\t\t}\n\t\t\tif (frame.longFrame) {\n\t\t\t\tctx.lineWidth = 6\n\t\t\t\tctx.strokeStyle = \"red\"\n\t\t\t\tctx.strokeRect(cx + 1, top, 1, height + 25)\n\t\t\t}\n\t\t\tif (frame.forcedRendering) {\n\t\t\t\tctx.lineWidth = 3\n\t\t\t\tctx.strokeStyle = \"blue\"\n\t\t\t\tctx.strokeRect(cx + 3, top, 1, height + 25)\n\t\t\t}\n\n\t\t\tif (frame.documentWasHidden || !frame.documentWasFocused) {\n\t\t\t\tctx.globalAlpha = 0.3\n\t\t\t\tctx.fillStyle = frame.documentWasHidden ? \"lightblue\" : \"lightgreen\"\n\t\t\t\tctx.fillRect(cx - Math.ceil(span / 2), top, span, height)\n\t\t\t\tctx.globalAlpha = 0.8\n\t\t\t}\n\n\t\t\tif (startDeferredFrame && (frame.renderingPhase === \"Normal\" || frame === last)) {\n\t\t\t\tctx.fillStyle = \"blue\"\n\t\t\t\tconst start = Math.floor(plot.valToPos(startDeferredFrame.update, \"x\", true))\n\t\t\t\tctx.fillRect(start - span / 2, top + height + 21, cx - start, 10)\n\t\t\t\tstartDeferredFrame = null\n\t\t\t}\n\n\t\t\tif (!startDeferredFrame && frame.renderingPhase !== \"Normal\") {\n\t\t\t\tstartDeferredFrame = frame\n\t\t\t}\n\t\t\tconst enumValue = toolMap[frame.toolName]\n\t\t\tif (enumValue === undefined) {\n\t\t\t\tctx.fillStyle = \"red\"\n\t\t\t} else {\n\t\t\t\tctx.fillStyle = toolColors[enumValue] || \"red\"\n\t\t\t}\n\t\t\tctx.fillRect(cx - Math.round(span / 2), top + height + 7, span, 15)\n\t\t}\n\t\tctx.restore()\n\t}\n\n\treturn { hooks: { drawSeries } }\n}\n\nexport function Graphs({ update }: { update: number }) {\n\tconst debug = engine.stores.debugStore\n\tconst display = 100\n\n\t// We backfill the data, so the first frames look the same as all others.\n\tconst frames: (FrameStats | undefined)[] = debug.frames.slice(-display)\n\tif (frames.length < display) {\n\t\tframes.splice(0, 0, ...Array(display - frames.length))\n\t}\n\n\t// Normally we re-render based on the engine rendering cycle. But doReport and the data this\n\t// component uses, gets updated afterwards. This ensures we trigger a last render after that.\n\tconst [rerenderUpdate, setRerenderUpdate] = React.useState(0)\n\tif (rerenderUpdate !== update) {\n\t\tsetTimeout(() => {\n\t\t\tif (update < engine.scheduler.update) return\n\t\t\tsetRerenderUpdate(update)\n\t\t}, 50)\n\t}\n\n\t// Setup the two uPlot graphs.\n\tconst syncRef = React.useRef(uPlot.sync(\"update\"))\n\tconst frameGraphRef = React.useRef<Plot>()\n\tconst initFrameGraph = (node: HTMLDivElement) => {\n\t\tif (!node) return\n\t\tif (frameGraphRef.current) return\n\n\t\tconst opts: uPlot.Options = {\n\t\t\twidth: node.offsetWidth,\n\t\t\theight: node.offsetHeight - 24,\n\t\t\tplugins: [tooltipPlugin(), backgroundPlugin(), eventPlugin()],\n\t\t\tcursor: { sync: { key: syncRef.current.key } },\n\t\t\tscales: {\n\t\t\t\tx: { time: false },\n\t\t\t\ty: { range: (_plot, _min, max) => [0, Math.max(100, max * 1.05)] },\n\t\t\t},\n\t\t\tpadding: [0, 0, -25, 0],\n\t\t\tseries: [\n\t\t\t\t{ label: \"update\" },\n\t\t\t\t{ stroke: palette.black100, width: 2, label: \"total\" },\n\t\t\t\t{ fill: palette.green100, label: \"browser\", value: unstackLabel },\n\t\t\t\t{ fill: palette.blue100, label: \"render\", value: unstackLabel },\n\t\t\t\t{ fill: palette.purple100, label: \"sandbox render\", value: unstackLabel },\n\t\t\t\t{ fill: palette.pink60, label: \"sandbox update\", value: unstackLabel },\n\t\t\t\t{ fill: palette.orange100, label: \"post\", value: unstackLabel },\n\t\t\t\t{ fill: palette.yellow100, label: \"tool\", value: unstackLabel },\n\t\t\t\t{ fill: palette.red100, label: \"event\", value: unstackLabel },\n\t\t\t\t{ fill: palette.purple30, label: \"remote\" },\n\t\t\t],\n\t\t}\n\t\tframeGraphRef.current = new uPlot(opts, getFrameData(frames), node)\n\t\tframeGraphRef.current.__frames = frames\n\t}\n\n\tconst memoryGraphRef = React.useRef<Plot>()\n\tconst initMemoryGraph = (node: HTMLDivElement) => {\n\t\tif (!node) return\n\t\tif (memoryGraphRef.current) return\n\n\t\tconst opts: uPlot.Options = {\n\t\t\twidth: node.offsetWidth / 2,\n\t\t\theight: node.offsetHeight,\n\t\t\tcursor: { sync: { key: syncRef.current.key } },\n\t\t\tscales: { x: { time: false } },\n\t\t\tpadding: [0, 5, -50, 0],\n\t\t\tseries: [\n\t\t\t\t{ label: \"update\" },\n\t\t\t\t{ stroke: \"black\", width: 2, label: \"total memory\", value: labelBytes },\n\t\t\t\t{ fill: \"#e99\", label: \"sandbox memory\", value: unstackLabelBytes },\n\t\t\t\t{ fill: \"#faa\", label: \"main memory\", value: labelBytes },\n\t\t\t],\n\t\t\taxes: [{}, { values: axesLabelBytes }],\n\t\t}\n\t\tmemoryGraphRef.current = new uPlot(opts, getMemoryData(frames), node)\n\t}\n\n\tconst networkGraphRef = React.useRef<Plot>()\n\tconst initNetworkGraph = (node: HTMLDivElement) => {\n\t\tif (!node) return\n\t\tif (networkGraphRef.current) return\n\n\t\tconst opts: uPlot.Options = {\n\t\t\twidth: node.offsetWidth / 2,\n\t\t\theight: node.offsetHeight,\n\t\t\tplugins: [socketPlugin()],\n\t\t\tcursor: { sync: { key: syncRef.current.key } },\n\t\t\tscales: { x: { time: false } },\n\t\t\tpadding: [0, 5, -50, 0],\n\t\t\tseries: [\n\t\t\t\t{ label: \"update\" },\n\t\t\t\t{ stroke: \"red\", width: 2, label: \"bytes sent\", value: labelBytes, scale: \"b\" },\n\t\t\t\t{ stroke: \"green\", width: 2, label: \"bytes received\", value: labelBytes, scale: \"b\" },\n\t\t\t\t{ stroke: \"black\", width: 2, label: \"round trip time\", scale: \"t\" },\n\t\t\t],\n\t\t\taxes: [{}, { scale: \"b\", values: axesLabelBytes }, { side: 1, scale: \"t\", grid: { show: false } }],\n\t\t}\n\t\tnetworkGraphRef.current = new uPlot(opts, getNetworkData(frames), node)\n\t\tnetworkGraphRef.current.__frames = frames\n\t}\n\n\t// Set the data via an effect.\n\tReact.useEffect(() => {\n\t\tconst frameGraph = frameGraphRef.current\n\t\tconst memoryGraph = memoryGraphRef.current\n\t\tconst networkGraph = networkGraphRef.current\n\t\tif (!frameGraph || !memoryGraph || !networkGraph) return\n\n\t\tframeGraph.setData(getFrameData(frames))\n\t\tframeGraph.setSize({ width: window.innerWidth, height: frameGraph.height })\n\t\tframeGraph.__frames = frames\n\t\tmemoryGraph.setData(getMemoryData(frames))\n\t\tmemoryGraph.setSize({ width: window.innerWidth / 2, height: memoryGraph.height })\n\t\tnetworkGraph.setData(getNetworkData(frames))\n\t\tnetworkGraph.setSize({ width: window.innerWidth / 2, height: networkGraph.height })\n\t\tnetworkGraph.__frames = frames\n\t}, [frames])\n\n\treturn (\n\t\t<div style={{ position: \"relative\", left: -15 }}>\n\t\t\t<div style={{ width: \"100%\", height: \"265px\" }} ref={initFrameGraph} />\n\t\t\t<div style={{ width: \"50%\", height: \"95px\", position: \"absolute\", left: 0 }} ref={initNetworkGraph} />\n\t\t\t<div style={{ width: \"50%\", height: \"95px\", position: \"absolute\", right: 0 }} ref={initMemoryGraph} />\n\t\t\t<style>{style}</style>\n\t\t</div>\n\t)\n}\n\nconst style = `\n.uplot, .uplot *, .uplot *::before, .uplot *::after {box-sizing: border-box;}\n.uplot {font-family: system-ui, -apple-system, sans-serif;line-height: 1.5;width: min-content;}\n.u-title {text-align: center;font-size: 18px;font-weight: bold;}\n.u-wrap {position: relative;user-select: none;}\n.u-over, .u-under {position: absolute;}\n.u-under {overflow: hidden;}\n.uplot canvas {display: block;position: relative;width: 100%;height: 100%;}\n.u-legend {font-size: 14px;margin: auto;text-align: center;}\n.u-inline {display: block;}\n.u-inline * {display: inline-block;}\n.u-inline tr {margin-right: 16px;}\n.u-legend th {font-weight: 600;}\n.u-legend th > * {vertical-align: middle;display: inline-block;}\n.u-legend .u-marker {width: 1em;height: 1em;margin-right: 4px;background-clip: content-box !important;}\n.u-inline.u-live th::after {content: \":\";vertical-align: middle;}\n.u-inline:not(.u-live) .u-value {display: none;}\n.u-series > * {padding: 4px;}\n.u-series th {cursor: pointer;}\n.u-legend .u-off > * {opacity: 0.3;}\n.u-select {background: rgba(0,0,0,0.07);position: absolute;pointer-events: none;}\n.u-cursor-x, .u-cursor-y {position: absolute;left: 0;top: 0;pointer-events: none;will-change: transform;z-index: 100;}\n.u-hz .u-cursor-x, .u-vt .u-cursor-y {height: 100%;border-right: 1px dashed #607D8B;}\n.u-hz .u-cursor-y, .u-vt .u-cursor-x {width: 100%;border-bottom: 1px dashed #607D8B;}\n.u-cursor-pt {position: absolute;top: 0;left: 0;border-radius: 50%;pointer-events: none;will-change: transform;z-index: 100;background-clip: content-box !important;}\n.u-select.u-off, .u-cursor-x.u-off, .u-cursor-y.u-off, .u-cursor-pt.u-off {display: none;}`\n\n// Visually distinct colors used to render the active tool.\nconst toolColors = [\n\t\"white\", // highlight\n\t\"rgb(50, 180, 255)\", // direct select\n\t\"rgb(0, 153, 255)\", // select\n\t\"#a9a9a9\",\n\t\"#2f4f4f\",\n\t\"#556b2f\",\n\t\"#8b4513\",\n\t\"#228b22\",\n\t\"#808000\",\n\t\"#483d8b\",\n\t\"#4682b4\",\n\t\"#000080\",\n\t\"#9acd32\",\n\t\"#20b2aa\",\n\t\"#32cd32\",\n\t\"#7f007f\",\n\t\"#8fbc8f\",\n\t\"#b03060\",\n\t\"#ff8c00\",\n\t\"#7cfc00\",\n\t\"#8a2be2\",\n\t\"#4169e1\",\n\t\"#00ffff\",\n\t\"#f4a460\",\n\t\"#0000ff\",\n\t\"#ff00ff\",\n\t\"#f0e68c\",\n\t\"#fa8072\",\n\t\"#ffff54\",\n\t\"#dda0dd\",\n\t\"#90ee90\",\n\t\"#ff1493\",\n\t\"#ee82ee\",\n\t\"#87cefa\",\n\t\"#ffe4c4\",\n\t\"#ffb6c1\",\n]\n", "/**\n* Copyright (c) 2025, Leon Sorokin\n* All rights reserved. (MIT Licensed)\n*\n* uPlot.js (\u03BCPlot)\n* A small, fast chart for time series, lines, areas, ohlc & bars\n* https://github.com/leeoniya/uPlot (v1.6.32)\n*/\n\nconst FEAT_TIME          = true;\n\nconst pre = \"u-\";\n\nconst UPLOT          =       \"uplot\";\nconst ORI_HZ         = pre + \"hz\";\nconst ORI_VT         = pre + \"vt\";\nconst TITLE          = pre + \"title\";\nconst WRAP           = pre + \"wrap\";\nconst UNDER          = pre + \"under\";\nconst OVER           = pre + \"over\";\nconst AXIS           = pre + \"axis\";\nconst OFF            = pre + \"off\";\nconst SELECT         = pre + \"select\";\nconst CURSOR_X       = pre + \"cursor-x\";\nconst CURSOR_Y       = pre + \"cursor-y\";\nconst CURSOR_PT      = pre + \"cursor-pt\";\nconst LEGEND         = pre + \"legend\";\nconst LEGEND_LIVE    = pre + \"live\";\nconst LEGEND_INLINE  = pre + \"inline\";\nconst LEGEND_SERIES  = pre + \"series\";\nconst LEGEND_MARKER  = pre + \"marker\";\nconst LEGEND_LABEL   = pre + \"label\";\nconst LEGEND_VALUE   = pre + \"value\";\n\nconst WIDTH       = \"width\";\nconst HEIGHT      = \"height\";\nconst TOP         = \"top\";\nconst BOTTOM      = \"bottom\";\nconst LEFT        = \"left\";\nconst RIGHT       = \"right\";\nconst hexBlack    = \"#000\";\nconst transparent = hexBlack + \"0\";\n\nconst mousemove   = \"mousemove\";\nconst mousedown   = \"mousedown\";\nconst mouseup     = \"mouseup\";\nconst mouseenter  = \"mouseenter\";\nconst mouseleave  = \"mouseleave\";\nconst dblclick    = \"dblclick\";\nconst resize      = \"resize\";\nconst scroll      = \"scroll\";\n\nconst change      = \"change\";\nconst dppxchange  = \"dppxchange\";\n\nconst LEGEND_DISP = \"--\";\n\nconst domEnv = typeof window != 'undefined';\n\nconst doc = domEnv ? document  : null;\nconst win = domEnv ? window    : null;\nconst nav = domEnv ? navigator : null;\n\nlet pxRatio;\n\n//export const canHover = domEnv && !win.matchMedia('(hover: none)').matches;\n\nlet query;\n\nfunction setPxRatio() {\n\tlet _pxRatio = devicePixelRatio;\n\n\t// during print preview, Chrome fires off these dppx queries even without changes\n\tif (pxRatio != _pxRatio) {\n\t\tpxRatio = _pxRatio;\n\n\t\tquery && off(change, query, setPxRatio);\n\t\tquery = matchMedia(`(min-resolution: ${pxRatio - 0.001}dppx) and (max-resolution: ${pxRatio + 0.001}dppx)`);\n\t\ton(change, query, setPxRatio);\n\n\t\twin.dispatchEvent(new CustomEvent(dppxchange));\n\t}\n}\n\nfunction addClass(el, c) {\n\tif (c != null) {\n\t\tlet cl = el.classList;\n\t\t!cl.contains(c) && cl.add(c);\n\t}\n}\n\nfunction remClass(el, c) {\n\tlet cl = el.classList;\n\tcl.contains(c) && cl.remove(c);\n}\n\nfunction setStylePx(el, name, value) {\n\tel.style[name] = value + \"px\";\n}\n\nfunction placeTag(tag, cls, targ, refEl) {\n\tlet el = doc.createElement(tag);\n\n\tif (cls != null)\n\t\taddClass(el, cls);\n\n\tif (targ != null)\n\t\ttarg.insertBefore(el, refEl);\n\n\treturn el;\n}\n\nfunction placeDiv(cls, targ) {\n\treturn placeTag(\"div\", cls, targ);\n}\n\nconst xformCache = new WeakMap();\n\nfunction elTrans(el, xPos, yPos, xMax, yMax) {\n\tlet xform = \"translate(\" + xPos + \"px,\" + yPos + \"px)\";\n\tlet xformOld = xformCache.get(el);\n\n\tif (xform != xformOld) {\n\t\tel.style.transform = xform;\n\t\txformCache.set(el, xform);\n\n\t\tif (xPos < 0 || yPos < 0 || xPos > xMax || yPos > yMax)\n\t\t\taddClass(el, OFF);\n\t\telse\n\t\t\tremClass(el, OFF);\n\t}\n}\n\nconst colorCache = new WeakMap();\n\nfunction elColor(el, background, borderColor) {\n\tlet newColor = background + borderColor;\n\tlet oldColor = colorCache.get(el);\n\n\tif (newColor != oldColor) {\n\t\tcolorCache.set(el, newColor);\n\t\tel.style.background = background;\n\t\tel.style.borderColor = borderColor;\n\t}\n}\n\nconst sizeCache = new WeakMap();\n\nfunction elSize(el, newWid, newHgt, centered) {\n\tlet newSize = newWid + \"\" + newHgt;\n\tlet oldSize = sizeCache.get(el);\n\n\tif (newSize != oldSize) {\n\t\tsizeCache.set(el, newSize);\n\t\tel.style.height = newHgt + \"px\";\n\t\tel.style.width = newWid + \"px\";\n\t\tel.style.marginLeft = centered ? -newWid/2 + \"px\" : 0;\n\t\tel.style.marginTop = centered ? -newHgt/2 + \"px\" : 0;\n\t}\n}\n\nconst evOpts = {passive: true};\nconst evOpts2 = {...evOpts, capture: true};\n\nfunction on(ev, el, cb, capt) {\n\tel.addEventListener(ev, cb, capt ? evOpts2 : evOpts);\n}\n\nfunction off(ev, el, cb, capt) {\n\tel.removeEventListener(ev, cb, evOpts);\n}\n\ndomEnv && setPxRatio();\n\n// binary search for index of closest value\nfunction closestIdx(num, arr, lo, hi) {\n\tlet mid;\n\tlo = lo || 0;\n\thi = hi || arr.length - 1;\n\tlet bitwise = hi <= 2147483647;\n\n\twhile (hi - lo > 1) {\n\t\tmid = bitwise ? (lo + hi) >> 1 : floor((lo + hi) / 2);\n\n\t\tif (arr[mid] < num)\n\t\t\tlo = mid;\n\t\telse\n\t\t\thi = mid;\n\t}\n\n\tif (num - arr[lo] <= arr[hi] - num)\n\t\treturn lo;\n\n\treturn hi;\n}\n\nfunction makeIndexOfs(predicate) {\n\t let indexOfs = (data, _i0, _i1) => {\n\t\tlet i0 = -1;\n\t\tlet i1 = -1;\n\n\t\tfor (let i = _i0; i <= _i1; i++) {\n\t\t\tif (predicate(data[i])) {\n\t\t\t\ti0 = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = _i1; i >= _i0; i--) {\n\t\t\tif (predicate(data[i])) {\n\t\t\t\ti1 = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn [i0, i1];\n\t };\n\n\t return indexOfs;\n}\n\nconst notNullish = v => v != null;\nconst isPositive = v => v != null && v > 0;\n\nconst nonNullIdxs = makeIndexOfs(notNullish);\nconst positiveIdxs = makeIndexOfs(isPositive);\n\nfunction getMinMax(data, _i0, _i1, sorted = 0, log = false) {\n//\tconsole.log(\"getMinMax()\");\n\n\tlet getEdgeIdxs = log ? positiveIdxs : nonNullIdxs;\n\tlet predicate = log ? isPositive : notNullish;\n\n\t[_i0, _i1] = getEdgeIdxs(data, _i0, _i1);\n\n\tlet _min = data[_i0];\n\tlet _max = data[_i0];\n\n\tif (_i0 > -1) {\n\t\tif (sorted == 1) {\n\t\t\t_min = data[_i0];\n\t\t\t_max = data[_i1];\n\t\t}\n\t\telse if (sorted == -1) {\n\t\t\t_min = data[_i1];\n\t\t\t_max = data[_i0];\n\t\t}\n\t\telse {\n\t\t\tfor (let i = _i0; i <= _i1; i++) {\n\t\t\t\tlet v = data[i];\n\n\t\t\t\tif (predicate(v)) {\n\t\t\t\t\tif (v < _min)\n\t\t\t\t\t\t_min = v;\n\t\t\t\t\telse if (v > _max)\n\t\t\t\t\t\t_max = v;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn [_min ?? inf, _max ?? -inf]; // todo: fix to return nulls\n}\n\nfunction rangeLog(min, max, base, fullMags) {\n\tlet minSign = sign(min);\n\tlet maxSign = sign(max);\n\n\tif (min == max) {\n\t\tif (minSign == -1) {\n\t\t\tmin *= base;\n\t\t\tmax /= base;\n\t\t}\n\t\telse {\n\t\t\tmin /= base;\n\t\t\tmax *= base;\n\t\t}\n\t}\n\n\tlet logFn = base == 10 ? log10 : log2;\n\n\tlet growMinAbs = minSign == 1 ? floor : ceil;\n\tlet growMaxAbs = maxSign == 1 ? ceil : floor;\n\n\tlet minExp = growMinAbs(logFn(abs(min)));\n\tlet maxExp = growMaxAbs(logFn(abs(max)));\n\n\tlet minIncr = pow(base, minExp);\n\tlet maxIncr = pow(base, maxExp);\n\n\t// fix values like Math.pow(10, -5) === 0.000009999999999999999\n\tif (base == 10) {\n\t\tif (minExp < 0)\n\t\t\tminIncr = roundDec(minIncr, -minExp);\n\t\tif (maxExp < 0)\n\t\t\tmaxIncr = roundDec(maxIncr, -maxExp);\n\t}\n\n\tif (fullMags || base == 2) {\n\t\tmin = minIncr * minSign;\n\t\tmax = maxIncr * maxSign;\n\t}\n\telse {\n\t\tmin = incrRoundDn(min, minIncr);\n\t\tmax = incrRoundUp(max, maxIncr);\n\t}\n\n\treturn [min, max];\n}\n\nfunction rangeAsinh(min, max, base, fullMags) {\n\tlet minMax = rangeLog(min, max, base, fullMags);\n\n\tif (min == 0)\n\t\tminMax[0] = 0;\n\n\tif (max == 0)\n\t\tminMax[1] = 0;\n\n\treturn minMax;\n}\n\nconst rangePad = 0.1;\n\nconst autoRangePart = {\n\tmode: 3,\n\tpad: rangePad,\n};\n\nconst _eqRangePart = {\n\tpad:  0,\n\tsoft: null,\n\tmode: 0,\n};\n\nconst _eqRange = {\n\tmin: _eqRangePart,\n\tmax: _eqRangePart,\n};\n\n// this ensures that non-temporal/numeric y-axes get multiple-snapped padding added above/below\n// TODO: also account for incrs when snapping to ensure top of axis gets a tick & value\nfunction rangeNum(_min, _max, mult, extra) {\n\tif (isObj(mult))\n\t\treturn _rangeNum(_min, _max, mult);\n\n\t_eqRangePart.pad  = mult;\n\t_eqRangePart.soft = extra ? 0 : null;\n\t_eqRangePart.mode = extra ? 3 : 0;\n\n\treturn _rangeNum(_min, _max, _eqRange);\n}\n\n// nullish coalesce\nfunction ifNull(lh, rh) {\n\treturn lh == null ? rh : lh;\n}\n\n// checks if given index range in an array contains a non-null value\n// aka a range-bounded Array.some()\nfunction hasData(data, idx0, idx1) {\n\tidx0 = ifNull(idx0, 0);\n\tidx1 = ifNull(idx1, data.length - 1);\n\n\twhile (idx0 <= idx1) {\n\t\tif (data[idx0] != null)\n\t\t\treturn true;\n\t\tidx0++;\n\t}\n\n\treturn false;\n}\n\nfunction _rangeNum(_min, _max, cfg) {\n\tlet cmin = cfg.min;\n\tlet cmax = cfg.max;\n\n\tlet padMin = ifNull(cmin.pad, 0);\n\tlet padMax = ifNull(cmax.pad, 0);\n\n\tlet hardMin = ifNull(cmin.hard, -inf);\n\tlet hardMax = ifNull(cmax.hard,  inf);\n\n\tlet softMin = ifNull(cmin.soft,  inf);\n\tlet softMax = ifNull(cmax.soft, -inf);\n\n\tlet softMinMode = ifNull(cmin.mode, 0);\n\tlet softMaxMode = ifNull(cmax.mode, 0);\n\n\tlet delta = _max - _min;\n\tlet deltaMag = log10(delta);\n\n\tlet scalarMax = max(abs(_min), abs(_max));\n\tlet scalarMag = log10(scalarMax);\n\n\tlet scalarMagDelta = abs(scalarMag - deltaMag);\n\n\t// this handles situations like 89.7, 89.69999999999999\n\t// by assuming 0.001x deltas are precision errors\n//\tif (delta > 0 && delta < abs(_max) / 1e3)\n//\t\tdelta = 0;\n\n\t// treat data as flat if delta is less than 1e-24\n\t// or range is 11+ orders of magnitude below raw values, e.g. 99999999.99999996 - 100000000.00000004\n\tif (delta < 1e-24 || scalarMagDelta > 10) {\n\t\tdelta = 0;\n\n\t\t// if soft mode is 2 and all vals are flat at 0, avoid the 0.1 * 1e3 fallback\n\t\t// this prevents 0,0,0 from ranging to -100,100 when softMin/softMax are -1,1\n\t\tif (_min == 0 || _max == 0) {\n\t\t\tdelta = 1e-24;\n\n\t\t\tif (softMinMode == 2 && softMin != inf)\n\t\t\t\tpadMin = 0;\n\n\t\t\tif (softMaxMode == 2 && softMax != -inf)\n\t\t\t\tpadMax = 0;\n\t\t}\n\t}\n\n\tlet nonZeroDelta = delta || scalarMax || 1e3;\n\tlet mag          = log10(nonZeroDelta);\n\tlet base         = pow(10, floor(mag));\n\n\tlet _padMin  = nonZeroDelta * (delta == 0 ? (_min == 0 ? .1 : 1) : padMin);\n\tlet _newMin  = roundDec(incrRoundDn(_min - _padMin, base/10), 24);\n\tlet _softMin = _min >= softMin && (softMinMode == 1 || softMinMode == 3 && _newMin <= softMin || softMinMode == 2 && _newMin >= softMin) ? softMin : inf;\n\tlet minLim   = max(hardMin, _newMin < _softMin && _min >= _softMin ? _softMin : min(_softMin, _newMin));\n\n\tlet _padMax  = nonZeroDelta * (delta == 0 ? (_max == 0 ? .1 : 1) : padMax);\n\tlet _newMax  = roundDec(incrRoundUp(_max + _padMax, base/10), 24);\n\tlet _softMax = _max <= softMax && (softMaxMode == 1 || softMaxMode == 3 && _newMax >= softMax || softMaxMode == 2 && _newMax <= softMax) ? softMax : -inf;\n\tlet maxLim   = min(hardMax, _newMax > _softMax && _max <= _softMax ? _softMax : max(_softMax, _newMax));\n\n\tif (minLim == maxLim && minLim == 0)\n\t\tmaxLim = 100;\n\n\treturn [minLim, maxLim];\n}\n\n// alternative: https://stackoverflow.com/a/2254896\nconst numFormatter = new Intl.NumberFormat(domEnv ? nav.language : 'en-US');\nconst fmtNum = val => numFormatter.format(val);\n\nconst M = Math;\n\nconst PI = M.PI;\nconst abs = M.abs;\nconst floor = M.floor;\nconst round = M.round;\nconst ceil = M.ceil;\nconst min = M.min;\nconst max = M.max;\nconst pow = M.pow;\nconst sign = M.sign;\nconst log10 = M.log10;\nconst log2 = M.log2;\n// TODO: seems like this needs to match asinh impl if the passed v is tweaked?\nconst sinh =  (v, linthresh = 1) => M.sinh(v) * linthresh;\nconst asinh = (v, linthresh = 1) => M.asinh(v / linthresh);\n\nconst inf = Infinity;\n\nfunction numIntDigits(x) {\n\treturn (log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;\n}\n\nfunction clamp(num, _min, _max) {\n\treturn min(max(num, _min), _max);\n}\n\nfunction isFn(v) {\n\treturn typeof v == \"function\";\n}\n\nfunction fnOrSelf(v) {\n\treturn isFn(v) ? v : () => v;\n}\n\nconst noop = () => {};\n\n// note: these identity fns may get deoptimized if reused for different arg types\n// a TS version would enforce they stay monotyped and require making variants\nconst retArg0 = _0 => _0;\n\nconst retArg1 = (_0, _1) => _1;\n\nconst retNull = _ => null;\n\nconst retTrue = _ => true;\n\nconst retEq = (a, b) => a == b;\n\nconst regex6 = /\\.\\d*?(?=9{6,}|0{6,})/gm;\n\n// e.g. 17999.204999999998 -> 17999.205\nconst fixFloat = val => {\n\tif (isInt(val) || fixedDec.has(val))\n\t\treturn val;\n\n\tconst str = `${val}`;\n\n\tconst match = str.match(regex6);\n\n\tif (match == null)\n\t\treturn val;\n\n\tlet len = match[0].length - 1;\n\n\t// e.g. 1.0000000000000001e-24\n\tif (str.indexOf('e-') != -1) {\n\t\tlet [num, exp] = str.split('e');\n\t\treturn +`${fixFloat(num)}e${exp}`;\n\t}\n\n\treturn roundDec(val, len);\n};\n\nfunction incrRound(num, incr) {\n\treturn fixFloat(roundDec(fixFloat(num/incr))*incr);\n}\n\nfunction incrRoundUp(num, incr) {\n\treturn fixFloat(ceil(fixFloat(num/incr))*incr);\n}\n\nfunction incrRoundDn(num, incr) {\n\treturn fixFloat(floor(fixFloat(num/incr))*incr);\n}\n\n// https://stackoverflow.com/a/48764436\n// rounds half away from zero\nfunction roundDec(val, dec = 0) {\n\tif (isInt(val))\n\t\treturn val;\n//\telse if (dec == 0)\n//\t\treturn round(val);\n\n\tlet p = 10 ** dec;\n\tlet n = (val * p) * (1 + Number.EPSILON);\n\treturn round(n) / p;\n}\n\nconst fixedDec = new Map();\n\nfunction guessDec(num) {\n\treturn ((\"\"+num).split(\".\")[1] || \"\").length;\n}\n\nfunction genIncrs(base, minExp, maxExp, mults) {\n\tlet incrs = [];\n\n\tlet multDec = mults.map(guessDec);\n\n\tfor (let exp = minExp; exp < maxExp; exp++) {\n\t\tlet expa = abs(exp);\n\t\tlet mag = roundDec(pow(base, exp), expa);\n\n\t\tfor (let i = 0; i < mults.length; i++) {\n\t\t\tlet _incr = base == 10 ? +`${mults[i]}e${exp}` : mults[i] * mag;\n\t\t\tlet dec = (exp >= 0 ? 0 : expa) + (exp >= multDec[i] ? 0 : multDec[i]);\n\t\t\tlet incr = base == 10 ? _incr : roundDec(_incr, dec);\n\t\t\tincrs.push(incr);\n\t\t\tfixedDec.set(incr, dec);\n\t\t}\n\t}\n\n\treturn incrs;\n}\n\n//export const assign = Object.assign;\n\nconst EMPTY_OBJ = {};\nconst EMPTY_ARR = [];\n\nconst nullNullTuple = [null, null];\n\nconst isArr = Array.isArray;\nconst isInt = Number.isInteger;\nconst isUndef = v => v === void 0;\n\nfunction isStr(v) {\n\treturn typeof v == 'string';\n}\n\nfunction isObj(v) {\n\tlet is = false;\n\n\tif (v != null) {\n\t\tlet c = v.constructor;\n\t\tis = c == null || c == Object;\n\t}\n\n\treturn is;\n}\n\nfunction fastIsObj(v) {\n\treturn v != null && typeof v == 'object';\n}\n\nconst TypedArray = Object.getPrototypeOf(Uint8Array);\n\nconst __proto__ = \"__proto__\";\n\nfunction copy(o, _isObj = isObj) {\n\tlet out;\n\n\tif (isArr(o)) {\n\t\tlet val = o.find(v => v != null);\n\n\t\tif (isArr(val) || _isObj(val)) {\n\t\t\tout = Array(o.length);\n\t\t\tfor (let i = 0; i < o.length; i++)\n\t\t\t\tout[i] = copy(o[i], _isObj);\n\t\t}\n\t\telse\n\t\t\tout = o.slice();\n\t}\n\telse if (o instanceof TypedArray) // also (ArrayBuffer.isView(o) && !(o instanceof DataView))\n\t\tout = o.slice();\n\telse if (_isObj(o)) {\n\t\tout = {};\n\t\tfor (let k in o) {\n\t\t\tif (k != __proto__)\n\t\t\t\tout[k] = copy(o[k], _isObj);\n\t\t}\n\t}\n\telse\n\t\tout = o;\n\n\treturn out;\n}\n\nfunction assign(targ) {\n\tlet args = arguments;\n\n\tfor (let i = 1; i < args.length; i++) {\n\t\tlet src = args[i];\n\n\t\tfor (let key in src) {\n\t\t\tif (key != __proto__) {\n\t\t\t\tif (isObj(targ[key]))\n\t\t\t\t\tassign(targ[key], copy(src[key]));\n\t\t\t\telse\n\t\t\t\t\ttarg[key] = copy(src[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn targ;\n}\n\n// nullModes\nconst NULL_REMOVE = 0;  // nulls are converted to undefined (e.g. for spanGaps: true)\nconst NULL_RETAIN = 1;  // nulls are retained, with alignment artifacts set to undefined (default)\nconst NULL_EXPAND = 2;  // nulls are expanded to include any adjacent alignment artifacts\n\n// sets undefined values to nulls when adjacent to existing nulls (minesweeper)\nfunction nullExpand(yVals, nullIdxs, alignedLen) {\n\tfor (let i = 0, xi, lastNullIdx = -1; i < nullIdxs.length; i++) {\n\t\tlet nullIdx = nullIdxs[i];\n\n\t\tif (nullIdx > lastNullIdx) {\n\t\t\txi = nullIdx - 1;\n\t\t\twhile (xi >= 0 && yVals[xi] == null)\n\t\t\t\tyVals[xi--] = null;\n\n\t\t\txi = nullIdx + 1;\n\t\t\twhile (xi < alignedLen && yVals[xi] == null)\n\t\t\t\tyVals[lastNullIdx = xi++] = null;\n\t\t}\n\t}\n}\n\n// nullModes is a tables-matched array indicating how to treat nulls in each series\n// output is sorted ASC on the joined field (table[0]) and duplicate join values are collapsed\nfunction join(tables, nullModes) {\n\tif (allHeadersSame(tables)) {\n\t//\tconsole.log('cheap join!');\n\n\t\tlet table = tables[0].slice();\n\n\t\tfor (let i = 1; i < tables.length; i++)\n\t\t\ttable.push(...tables[i].slice(1));\n\n\t\tif (!isAsc(table[0]))\n\t\t\ttable = sortCols(table);\n\n\t\treturn table;\n\t}\n\n\tlet xVals = new Set();\n\n\tfor (let ti = 0; ti < tables.length; ti++) {\n\t\tlet t = tables[ti];\n\t\tlet xs = t[0];\n\t\tlet len = xs.length;\n\n\t\tfor (let i = 0; i < len; i++)\n\t\t\txVals.add(xs[i]);\n\t}\n\n\tlet data = [Array.from(xVals).sort((a, b) => a - b)];\n\n\tlet alignedLen = data[0].length;\n\n\tlet xIdxs = new Map();\n\n\tfor (let i = 0; i < alignedLen; i++)\n\t\txIdxs.set(data[0][i], i);\n\n\tfor (let ti = 0; ti < tables.length; ti++) {\n\t\tlet t = tables[ti];\n\t\tlet xs = t[0];\n\n\t\tfor (let si = 1; si < t.length; si++) {\n\t\t\tlet ys = t[si];\n\n\t\t\tlet yVals = Array(alignedLen).fill(undefined);\n\n\t\t\tlet nullMode = nullModes ? nullModes[ti][si] : NULL_RETAIN;\n\n\t\t\tlet nullIdxs = [];\n\n\t\t\tfor (let i = 0; i < ys.length; i++) {\n\t\t\t\tlet yVal = ys[i];\n\t\t\t\tlet alignedIdx = xIdxs.get(xs[i]);\n\n\t\t\t\tif (yVal === null) {\n\t\t\t\t\tif (nullMode != NULL_REMOVE) {\n\t\t\t\t\t\tyVals[alignedIdx] = yVal;\n\n\t\t\t\t\t\tif (nullMode == NULL_EXPAND)\n\t\t\t\t\t\t\tnullIdxs.push(alignedIdx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tyVals[alignedIdx] = yVal;\n\t\t\t}\n\n\t\t\tnullExpand(yVals, nullIdxs, alignedLen);\n\n\t\t\tdata.push(yVals);\n\t\t}\n\t}\n\n\treturn data;\n}\n\nconst microTask = typeof queueMicrotask == \"undefined\" ? fn => Promise.resolve().then(fn) : queueMicrotask;\n\n// TODO: https://github.com/dy/sort-ids (~2x faster for 1e5+ arrays)\nfunction sortCols(table) {\n\tlet head = table[0];\n\tlet rlen = head.length;\n\n\tlet idxs = Array(rlen);\n\tfor (let i = 0; i < idxs.length; i++)\n\t\tidxs[i] = i;\n\n\tidxs.sort((i0, i1) => head[i0] - head[i1]);\n\n\tlet table2 = [];\n\tfor (let i = 0; i < table.length; i++) {\n\t\tlet row = table[i];\n\t\tlet row2 = Array(rlen);\n\n\t\tfor (let j = 0; j < rlen; j++)\n\t\t\trow2[j] = row[idxs[j]];\n\n\t\ttable2.push(row2);\n\t}\n\n\treturn table2;\n}\n\n// test if we can do cheap join (all join fields same)\nfunction allHeadersSame(tables) {\n\tlet vals0 = tables[0][0];\n\tlet len0 = vals0.length;\n\n\tfor (let i = 1; i < tables.length; i++) {\n\t\tlet vals1 = tables[i][0];\n\n\t\tif (vals1.length != len0)\n\t\t\treturn false;\n\n\t\tif (vals1 != vals0) {\n\t\t\tfor (let j = 0; j < len0; j++) {\n\t\t\t\tif (vals1[j] != vals0[j])\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction isAsc(vals, samples = 100) {\n\tconst len = vals.length;\n\n\t// empty or single value\n\tif (len <= 1)\n\t\treturn true;\n\n\t// skip leading & trailing nullish\n\tlet firstIdx = 0;\n\tlet lastIdx = len - 1;\n\n\twhile (firstIdx <= lastIdx && vals[firstIdx] == null)\n\t\tfirstIdx++;\n\n\twhile (lastIdx >= firstIdx && vals[lastIdx] == null)\n\t\tlastIdx--;\n\n\t// all nullish or one value surrounded by nullish\n\tif (lastIdx <= firstIdx)\n\t\treturn true;\n\n\tconst stride = max(1, floor((lastIdx - firstIdx + 1) / samples));\n\n\tfor (let prevVal = vals[firstIdx], i = firstIdx + stride; i <= lastIdx; i += stride) {\n\t\tconst v = vals[i];\n\n\t\tif (v != null) {\n\t\t\tif (v <= prevVal)\n\t\t\t\treturn false;\n\n\t\t\tprevVal = v;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nconst months = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\",\n];\n\nconst days = [\n\t\"Sunday\",\n\t\"Monday\",\n\t\"Tuesday\",\n\t\"Wednesday\",\n\t\"Thursday\",\n\t\"Friday\",\n\t\"Saturday\",\n];\n\nfunction slice3(str) {\n\treturn str.slice(0, 3);\n}\n\nconst days3 = days.map(slice3);\n\nconst months3 = months.map(slice3);\n\nconst engNames = {\n\tMMMM: months,\n\tMMM:  months3,\n\tWWWW: days,\n\tWWW:  days3,\n};\n\nfunction zeroPad2(int) {\n\treturn (int < 10 ? '0' : '') + int;\n}\n\nfunction zeroPad3(int) {\n\treturn (int < 10 ? '00' : int < 100 ? '0' : '') + int;\n}\n\n/*\nfunction suffix(int) {\n\tlet mod10 = int % 10;\n\n\treturn int + (\n\t\tmod10 == 1 && int != 11 ? \"st\" :\n\t\tmod10 == 2 && int != 12 ? \"nd\" :\n\t\tmod10 == 3 && int != 13 ? \"rd\" : \"th\"\n\t);\n}\n*/\n\nconst subs = {\n\t// 2019\n\tYYYY:\td => d.getFullYear(),\n\t// 19\n\tYY:\t\td => (d.getFullYear()+'').slice(2),\n\t// July\n\tMMMM:\t(d, names) => names.MMMM[d.getMonth()],\n\t// Jul\n\tMMM:\t(d, names) => names.MMM[d.getMonth()],\n\t// 07\n\tMM:\t\td => zeroPad2(d.getMonth()+1),\n\t// 7\n\tM:\t\td => d.getMonth()+1,\n\t// 09\n\tDD:\t\td => zeroPad2(d.getDate()),\n\t// 9\n\tD:\t\td => d.getDate(),\n\t// Monday\n\tWWWW:\t(d, names) => names.WWWW[d.getDay()],\n\t// Mon\n\tWWW:\t(d, names) => names.WWW[d.getDay()],\n\t// 03\n\tHH:\t\td => zeroPad2(d.getHours()),\n\t// 3\n\tH:\t\td => d.getHours(),\n\t// 9 (12hr, unpadded)\n\th:\t\td => {let h = d.getHours(); return h == 0 ? 12 : h > 12 ? h - 12 : h;},\n\t// AM\n\tAA:\t\td => d.getHours() >= 12 ? 'PM' : 'AM',\n\t// am\n\taa:\t\td => d.getHours() >= 12 ? 'pm' : 'am',\n\t// a\n\ta:\t\td => d.getHours() >= 12 ? 'p' : 'a',\n\t// 09\n\tmm:\t\td => zeroPad2(d.getMinutes()),\n\t// 9\n\tm:\t\td => d.getMinutes(),\n\t// 09\n\tss:\t\td => zeroPad2(d.getSeconds()),\n\t// 9\n\ts:\t\td => d.getSeconds(),\n\t// 374\n\tfff:\td => zeroPad3(d.getMilliseconds()),\n};\n\nfunction fmtDate(tpl, names) {\n\tnames = names || engNames;\n\tlet parts = [];\n\n\tlet R = /\\{([a-z]+)\\}|[^{]+/gi, m;\n\n\twhile (m = R.exec(tpl))\n\t\tparts.push(m[0][0] == '{' ? subs[m[1]] : m[0]);\n\n\treturn d => {\n\t\tlet out = '';\n\n\t\tfor (let i = 0; i < parts.length; i++)\n\t\t\tout += typeof parts[i] == \"string\" ? parts[i] : parts[i](d, names);\n\n\t\treturn out;\n\t}\n}\n\nconst localTz = new Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n// https://stackoverflow.com/questions/15141762/how-to-initialize-a-javascript-date-to-a-particular-time-zone/53652131#53652131\nfunction tzDate(date, tz) {\n\tlet date2;\n\n\t// perf optimization\n\tif (tz == 'UTC' || tz == 'Etc/UTC')\n\t\tdate2 = new Date(+date + date.getTimezoneOffset() * 6e4);\n\telse if (tz == localTz)\n\t\tdate2 = date;\n\telse {\n\t\tdate2 = new Date(date.toLocaleString('en-US', {timeZone: tz}));\n\t\tdate2.setMilliseconds(date.getMilliseconds());\n\t}\n\n\treturn date2;\n}\n\n//export const series = [];\n\n// default formatters:\n\nconst onlyWhole = v => v % 1 == 0;\n\nconst allMults = [1,2,2.5,5];\n\n// ...0.01, 0.02, 0.025, 0.05, 0.1, 0.2, 0.25, 0.5\nconst decIncrs = genIncrs(10, -32, 0, allMults);\n\n// 1, 2, 2.5, 5, 10, 20, 25, 50...\nconst oneIncrs = genIncrs(10, 0, 32, allMults);\n\n// 1, 2,      5, 10, 20, 25, 50...\nconst wholeIncrs = oneIncrs.filter(onlyWhole);\n\nconst numIncrs = decIncrs.concat(oneIncrs);\n\nconst NL = \"\\n\";\n\nconst yyyy    = \"{YYYY}\";\nconst NLyyyy  = NL + yyyy;\nconst md      = \"{M}/{D}\";\nconst NLmd    = NL + md;\nconst NLmdyy  = NLmd + \"/{YY}\";\n\nconst aa      = \"{aa}\";\nconst hmm     = \"{h}:{mm}\";\nconst hmmaa   = hmm + aa;\nconst NLhmmaa = NL + hmmaa;\nconst ss      = \":{ss}\";\n\nconst _ = null;\n\nfunction genTimeStuffs(ms) {\n\tlet\ts  = ms * 1e3,\n\t\tm  = s  * 60,\n\t\th  = m  * 60,\n\t\td  = h  * 24,\n\t\tmo = d  * 30,\n\t\ty  = d  * 365;\n\n\t// min of 1e-3 prevents setting a temporal x ticks too small since Date objects cannot advance ticks smaller than 1ms\n\tlet subSecIncrs = ms == 1 ? genIncrs(10, 0, 3, allMults).filter(onlyWhole) : genIncrs(10, -3, 0, allMults);\n\n\tlet timeIncrs = subSecIncrs.concat([\n\t\t// minute divisors (# of secs)\n\t\ts,\n\t\ts * 5,\n\t\ts * 10,\n\t\ts * 15,\n\t\ts * 30,\n\t\t// hour divisors (# of mins)\n\t\tm,\n\t\tm * 5,\n\t\tm * 10,\n\t\tm * 15,\n\t\tm * 30,\n\t\t// day divisors (# of hrs)\n\t\th,\n\t\th * 2,\n\t\th * 3,\n\t\th * 4,\n\t\th * 6,\n\t\th * 8,\n\t\th * 12,\n\t\t// month divisors TODO: need more?\n\t\td,\n\t\td * 2,\n\t\td * 3,\n\t\td * 4,\n\t\td * 5,\n\t\td * 6,\n\t\td * 7,\n\t\td * 8,\n\t\td * 9,\n\t\td * 10,\n\t\td * 15,\n\t\t// year divisors (# months, approx)\n\t\tmo,\n\t\tmo * 2,\n\t\tmo * 3,\n\t\tmo * 4,\n\t\tmo * 6,\n\t\t// century divisors\n\t\ty,\n\t\ty * 2,\n\t\ty * 5,\n\t\ty * 10,\n\t\ty * 25,\n\t\ty * 50,\n\t\ty * 100,\n\t]);\n\n\t// [0]:   minimum num secs in the tick incr\n\t// [1]:   default tick format\n\t// [2-7]: rollover tick formats\n\t// [8]:   mode: 0: replace [1] -> [2-7], 1: concat [1] + [2-7]\n\tconst _timeAxisStamps = [\n\t//   tick incr    default          year                    month   day                   hour    min       sec   mode\n\t\t[y,           yyyy,            _,                      _,      _,                    _,      _,        _,       1],\n\t\t[d * 28,      \"{MMM}\",         NLyyyy,                 _,      _,                    _,      _,        _,       1],\n\t\t[d,           md,              NLyyyy,                 _,      _,                    _,      _,        _,       1],\n\t\t[h,           \"{h}\" + aa,      NLmdyy,                 _,      NLmd,                 _,      _,        _,       1],\n\t\t[m,           hmmaa,           NLmdyy,                 _,      NLmd,                 _,      _,        _,       1],\n\t\t[s,           ss,              NLmdyy + \" \" + hmmaa,   _,      NLmd + \" \" + hmmaa,   _,      NLhmmaa,  _,       1],\n\t\t[ms,          ss + \".{fff}\",   NLmdyy + \" \" + hmmaa,   _,      NLmd + \" \" + hmmaa,   _,      NLhmmaa,  _,       1],\n\t];\n\n\t// the ensures that axis ticks, values & grid are aligned to logical temporal breakpoints and not an arbitrary timestamp\n\t// https://www.timeanddate.com/time/dst/\n\t// https://www.timeanddate.com/time/dst/2019.html\n\t// https://www.epochconverter.com/timezones\n\tfunction timeAxisSplits(tzDate) {\n\t\treturn (self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace) => {\n\t\t\tlet splits = [];\n\t\t\tlet isYr = foundIncr >= y;\n\t\t\tlet isMo = foundIncr >= mo && foundIncr < y;\n\n\t\t\t// get the timezone-adjusted date\n\t\t\tlet minDate = tzDate(scaleMin);\n\t\t\tlet minDateTs = roundDec(minDate * ms, 3);\n\n\t\t\t// get ts of 12am (this lands us at or before the original scaleMin)\n\t\t\tlet minMin = mkDate(minDate.getFullYear(), isYr ? 0 : minDate.getMonth(), isMo || isYr ? 1 : minDate.getDate());\n\t\t\tlet minMinTs = roundDec(minMin * ms, 3);\n\n\t\t\tif (isMo || isYr) {\n\t\t\t\tlet moIncr = isMo ? foundIncr / mo : 0;\n\t\t\t\tlet yrIncr = isYr ? foundIncr / y  : 0;\n\t\t\t//\tlet tzOffset = scaleMin - minDateTs;\t\t// needed?\n\t\t\t\tlet split = minDateTs == minMinTs ? minDateTs : roundDec(mkDate(minMin.getFullYear() + yrIncr, minMin.getMonth() + moIncr, 1) * ms, 3);\n\t\t\t\tlet splitDate = new Date(round(split / ms));\n\t\t\t\tlet baseYear = splitDate.getFullYear();\n\t\t\t\tlet baseMonth = splitDate.getMonth();\n\n\t\t\t\tfor (let i = 0; split <= scaleMax; i++) {\n\t\t\t\t\tlet next = mkDate(baseYear + yrIncr * i, baseMonth + moIncr * i, 1);\n\t\t\t\t\tlet offs = next - tzDate(roundDec(next * ms, 3));\n\n\t\t\t\t\tsplit = roundDec((+next + offs) * ms, 3);\n\n\t\t\t\t\tif (split <= scaleMax)\n\t\t\t\t\t\tsplits.push(split);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet incr0 = foundIncr >= d ? d : foundIncr;\n\t\t\t\tlet tzOffset = floor(scaleMin) - floor(minDateTs);\n\t\t\t\tlet split = minMinTs + tzOffset + incrRoundUp(minDateTs - minMinTs, incr0);\n\t\t\t\tsplits.push(split);\n\n\t\t\t\tlet date0 = tzDate(split);\n\n\t\t\t\tlet prevHour = date0.getHours() + (date0.getMinutes() / m) + (date0.getSeconds() / h);\n\t\t\t\tlet incrHours = foundIncr / h;\n\n\t\t\t\tlet minSpace = self.axes[axisIdx]._space;\n\t\t\t\tlet pctSpace = foundSpace / minSpace;\n\n\t\t\t\twhile (1) {\n\t\t\t\t\tsplit = roundDec(split + foundIncr, ms == 1 ? 0 : 3);\n\n\t\t\t\t\tif (split > scaleMax)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tif (incrHours > 1) {\n\t\t\t\t\t\tlet expectedHour = floor(roundDec(prevHour + incrHours, 6)) % 24;\n\t\t\t\t\t\tlet splitDate = tzDate(split);\n\t\t\t\t\t\tlet actualHour = splitDate.getHours();\n\n\t\t\t\t\t\tlet dstShift = actualHour - expectedHour;\n\n\t\t\t\t\t\tif (dstShift > 1)\n\t\t\t\t\t\t\tdstShift = -1;\n\n\t\t\t\t\t\tsplit -= dstShift * h;\n\n\t\t\t\t\t\tprevHour = (prevHour + incrHours) % 24;\n\n\t\t\t\t\t\t// add a tick only if it's further than 70% of the min allowed label spacing\n\t\t\t\t\t\tlet prevSplit = splits[splits.length - 1];\n\t\t\t\t\t\tlet pctIncr = roundDec((split - prevSplit) / foundIncr, 3);\n\n\t\t\t\t\t\tif (pctIncr * pctSpace >= .7)\n\t\t\t\t\t\t\tsplits.push(split);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsplits.push(split);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn splits;\n\t\t}\n\t}\n\n\treturn [\n\t\ttimeIncrs,\n\t\t_timeAxisStamps,\n\t\ttimeAxisSplits,\n\t];\n}\n\nconst [ timeIncrsMs, _timeAxisStampsMs, timeAxisSplitsMs ] = genTimeStuffs(1);\nconst [ timeIncrsS,  _timeAxisStampsS,  timeAxisSplitsS  ] = genTimeStuffs(1e-3);\n\n// base 2\ngenIncrs(2, -53, 53, [1]);\n\n/*\nconsole.log({\n\tdecIncrs,\n\toneIncrs,\n\twholeIncrs,\n\tnumIncrs,\n\ttimeIncrs,\n\tfixedDec,\n});\n*/\n\nfunction timeAxisStamps(stampCfg, fmtDate) {\n\treturn stampCfg.map(s => s.map((v, i) =>\n\t\ti == 0 || i == 8 || v == null ? v : fmtDate(i == 1 || s[8] == 0 ? v : s[1] + v)\n\t));\n}\n\n// TODO: will need to accept spaces[] and pull incr into the loop when grid will be non-uniform, eg for log scales.\n// currently we ignore this for months since they're *nearly* uniform and the added complexity is not worth it\nfunction timeAxisVals(tzDate, stamps) {\n\treturn (self, splits, axisIdx, foundSpace, foundIncr) => {\n\t\tlet s = stamps.find(s => foundIncr >= s[0]) || stamps[stamps.length - 1];\n\n\t\t// these track boundaries when a full label is needed again\n\t\tlet prevYear;\n\t\tlet prevMnth;\n\t\tlet prevDate;\n\t\tlet prevHour;\n\t\tlet prevMins;\n\t\tlet prevSecs;\n\n\t\treturn splits.map(split => {\n\t\t\tlet date = tzDate(split);\n\n\t\t\tlet newYear = date.getFullYear();\n\t\t\tlet newMnth = date.getMonth();\n\t\t\tlet newDate = date.getDate();\n\t\t\tlet newHour = date.getHours();\n\t\t\tlet newMins = date.getMinutes();\n\t\t\tlet newSecs = date.getSeconds();\n\n\t\t\tlet stamp = (\n\t\t\t\tnewYear != prevYear && s[2] ||\n\t\t\t\tnewMnth != prevMnth && s[3] ||\n\t\t\t\tnewDate != prevDate && s[4] ||\n\t\t\t\tnewHour != prevHour && s[5] ||\n\t\t\t\tnewMins != prevMins && s[6] ||\n\t\t\t\tnewSecs != prevSecs && s[7] ||\n\t\t\t\t                       s[1]\n\t\t\t);\n\n\t\t\tprevYear = newYear;\n\t\t\tprevMnth = newMnth;\n\t\t\tprevDate = newDate;\n\t\t\tprevHour = newHour;\n\t\t\tprevMins = newMins;\n\t\t\tprevSecs = newSecs;\n\n\t\t\treturn stamp(date);\n\t\t});\n\t}\n}\n\n// for when axis.values is defined as a static fmtDate template string\nfunction timeAxisVal(tzDate, dateTpl) {\n\tlet stamp = fmtDate(dateTpl);\n\treturn (self, splits, axisIdx, foundSpace, foundIncr) => splits.map(split => stamp(tzDate(split)));\n}\n\nfunction mkDate(y, m, d) {\n\treturn new Date(y, m, d);\n}\n\nfunction timeSeriesStamp(stampCfg, fmtDate) {\n\treturn fmtDate(stampCfg);\n}\nconst _timeSeriesStamp = '{YYYY}-{MM}-{DD} {h}:{mm}{aa}';\n\nfunction timeSeriesVal(tzDate, stamp) {\n\treturn (self, val, seriesIdx, dataIdx) => dataIdx == null ? LEGEND_DISP : stamp(tzDate(val));\n}\n\nfunction legendStroke(self, seriesIdx) {\n\tlet s = self.series[seriesIdx];\n\treturn s.width ? s.stroke(self, seriesIdx) : s.points.width ? s.points.stroke(self, seriesIdx) : null;\n}\n\nfunction legendFill(self, seriesIdx) {\n\treturn self.series[seriesIdx].fill(self, seriesIdx);\n}\n\nconst legendOpts = {\n\tshow: true,\n\tlive: true,\n\tisolate: false,\n\tmount: noop,\n\tmarkers: {\n\t\tshow: true,\n\t\twidth: 2,\n\t\tstroke: legendStroke,\n\t\tfill: legendFill,\n\t\tdash: \"solid\",\n\t},\n\tidx: null,\n\tidxs: null,\n\tvalues: [],\n};\n\nfunction cursorPointShow(self, si) {\n\tlet o = self.cursor.points;\n\n\tlet pt = placeDiv();\n\n\tlet size = o.size(self, si);\n\tsetStylePx(pt, WIDTH, size);\n\tsetStylePx(pt, HEIGHT, size);\n\n\tlet mar = size / -2;\n\tsetStylePx(pt, \"marginLeft\", mar);\n\tsetStylePx(pt, \"marginTop\", mar);\n\n\tlet width = o.width(self, si, size);\n\twidth && setStylePx(pt, \"borderWidth\", width);\n\n\treturn pt;\n}\n\nfunction cursorPointFill(self, si) {\n\tlet sp = self.series[si].points;\n\treturn sp._fill || sp._stroke;\n}\n\nfunction cursorPointStroke(self, si) {\n\tlet sp = self.series[si].points;\n\treturn sp._stroke || sp._fill;\n}\n\nfunction cursorPointSize(self, si) {\n\tlet sp = self.series[si].points;\n\treturn sp.size;\n}\n\nconst moveTuple = [0,0];\n\nfunction cursorMove(self, mouseLeft1, mouseTop1) {\n\tmoveTuple[0] = mouseLeft1;\n\tmoveTuple[1] = mouseTop1;\n\treturn moveTuple;\n}\n\nfunction filtBtn0(self, targ, handle, onlyTarg = true) {\n\treturn e => {\n\t\te.button == 0 && (!onlyTarg || e.target == targ) && handle(e);\n\t};\n}\n\nfunction filtTarg(self, targ, handle, onlyTarg = true) {\n\treturn e => {\n\t\t(!onlyTarg || e.target == targ) && handle(e);\n\t};\n}\n\nconst cursorOpts = {\n\tshow: true,\n\tx: true,\n\ty: true,\n\tlock: false,\n\tmove: cursorMove,\n\tpoints: {\n\t\tone:    false,\n\t\tshow:   cursorPointShow,\n\t\tsize:   cursorPointSize,\n\t\twidth:  0,\n\t\tstroke: cursorPointStroke,\n\t\tfill:   cursorPointFill,\n\t},\n\n\tbind: {\n\t\tmousedown:   filtBtn0,\n\t\tmouseup:     filtBtn0,\n\t\tclick:       filtBtn0, // legend clicks, not .u-over clicks\n\t\tdblclick:    filtBtn0,\n\n\t\tmousemove:   filtTarg,\n\t\tmouseleave:  filtTarg,\n\t\tmouseenter:  filtTarg,\n\t},\n\n\tdrag: {\n\t\tsetScale: true,\n\t\tx: true,\n\t\ty: false,\n\t\tdist: 0,\n\t\tuni: null,\n\t\tclick: (self, e) => {\n\t\t//\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\t_x: false,\n\t\t_y: false,\n\t},\n\n\tfocus: {\n\t\tdist: (self, seriesIdx, dataIdx, valPos, curPos) => valPos - curPos,\n\t\tprox: -1,\n\t\tbias: 0,\n\t},\n\n\thover: {\n\t\tskip: [void 0],\n\t\tprox: null,\n\t\tbias: 0,\n\t},\n\n\tleft: -10,\n\ttop: -10,\n\tidx: null,\n\tdataIdx: null,\n\tidxs: null,\n\n\tevent: null,\n};\n\nconst axisLines = {\n\tshow: true,\n\tstroke: \"rgba(0,0,0,0.07)\",\n\twidth: 2,\n//\tdash: [],\n};\n\nconst grid = assign({}, axisLines, {\n\tfilter: retArg1,\n});\n\nconst ticks = assign({}, grid, {\n\tsize: 10,\n});\n\nconst border = assign({}, axisLines, {\n\tshow: false,\n});\n\nconst font      = '12px system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"';\nconst labelFont = \"bold \" + font;\nconst lineGap = 1.5;\t// font-size multiplier\n\nconst xAxisOpts = {\n\tshow: true,\n\tscale: \"x\",\n\tstroke: hexBlack,\n\tspace: 50,\n\tgap: 5,\n\talignTo: 1,\n\tsize: 50,\n\tlabelGap: 0,\n\tlabelSize: 30,\n\tlabelFont,\n\tside: 2,\n//\tclass: \"x-vals\",\n//\tincrs: timeIncrs,\n//\tvalues: timeVals,\n//\tfilter: retArg1,\n\tgrid,\n\tticks,\n\tborder,\n\tfont,\n\tlineGap,\n\trotate: 0,\n};\n\nconst numSeriesLabel = \"Value\";\nconst timeSeriesLabel = \"Time\";\n\nconst xSeriesOpts = {\n\tshow: true,\n\tscale: \"x\",\n\tauto: false,\n\tsorted: 1,\n//\tlabel: \"Time\",\n//\tvalue: v => stamp(new Date(v * 1e3)),\n\n\t// internal caches\n\tmin: inf,\n\tmax: -inf,\n\tidxs: [],\n};\n\nfunction numAxisVals(self, splits, axisIdx, foundSpace, foundIncr) {\n\treturn splits.map(v => v == null ? \"\" : fmtNum(v));\n}\n\nfunction numAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {\n\tlet splits = [];\n\n\tlet numDec = fixedDec.get(foundIncr) || 0;\n\n\tscaleMin = forceMin ? scaleMin : roundDec(incrRoundUp(scaleMin, foundIncr), numDec);\n\n\tfor (let val = scaleMin; val <= scaleMax; val = roundDec(val + foundIncr, numDec))\n\t\tsplits.push(Object.is(val, -0) ? 0 : val);\t\t// coalesces -0\n\n\treturn splits;\n}\n\n// this doesnt work for sin, which needs to come off from 0 independently in pos and neg dirs\nfunction logAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {\n\tconst splits = [];\n\n\tconst logBase = self.scales[self.axes[axisIdx].scale].log;\n\n\tconst logFn = logBase == 10 ? log10 : log2;\n\n\tconst exp = floor(logFn(scaleMin));\n\n\tfoundIncr = pow(logBase, exp);\n\n\t// boo: 10 ** -24 === 1.0000000000000001e-24\n\t// this grabs the proper 1e-24 one\n\tif (logBase == 10)\n\t\tfoundIncr = numIncrs[closestIdx(foundIncr, numIncrs)];\n\n\tlet split = scaleMin;\n\tlet nextMagIncr = foundIncr * logBase;\n\n\tif (logBase == 10)\n\t\tnextMagIncr = numIncrs[closestIdx(nextMagIncr, numIncrs)];\n\n\tdo {\n\t\tsplits.push(split);\n\t\tsplit = split + foundIncr;\n\n\t\tif (logBase == 10 && !fixedDec.has(split))\n\t\t\tsplit = roundDec(split, fixedDec.get(foundIncr));\n\n\t\tif (split >= nextMagIncr) {\n\t\t\tfoundIncr = split;\n\t\t\tnextMagIncr = foundIncr * logBase;\n\n\t\t\tif (logBase == 10)\n\t\t\t\tnextMagIncr = numIncrs[closestIdx(nextMagIncr, numIncrs)];\n\t\t}\n\t} while (split <= scaleMax);\n\n\treturn splits;\n}\n\nfunction asinhAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {\n\tlet sc = self.scales[self.axes[axisIdx].scale];\n\n\tlet linthresh = sc.asinh;\n\n\tlet posSplits = scaleMax > linthresh ? logAxisSplits(self, axisIdx, max(linthresh, scaleMin), scaleMax, foundIncr) : [linthresh];\n\tlet zero = scaleMax >= 0 && scaleMin <= 0 ? [0] : [];\n\tlet negSplits = scaleMin < -linthresh ? logAxisSplits(self, axisIdx, max(linthresh, -scaleMax), -scaleMin, foundIncr): [linthresh];\n\n\treturn negSplits.reverse().map(v => -v).concat(zero, posSplits);\n}\n\nconst RE_ALL   = /./;\nconst RE_12357 = /[12357]/;\nconst RE_125   = /[125]/;\nconst RE_1     = /1/;\n\nconst _filt = (splits, distr, re, keepMod) => splits.map((v, i) => ((distr == 4 && v == 0) || i % keepMod == 0 && re.test(v.toExponential()[v < 0 ? 1 : 0])) ? v : null);\n\nfunction log10AxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {\n\tlet axis = self.axes[axisIdx];\n\tlet scaleKey = axis.scale;\n\tlet sc = self.scales[scaleKey];\n\n//\tif (sc.distr == 3 && sc.log == 2)\n//\t\treturn splits;\n\n\tlet valToPos = self.valToPos;\n\n\tlet minSpace = axis._space;\n\n\tlet _10 = valToPos(10, scaleKey);\n\n\tlet re = (\n\t\tvalToPos(9, scaleKey) - _10 >= minSpace ? RE_ALL :\n\t\tvalToPos(7, scaleKey) - _10 >= minSpace ? RE_12357 :\n\t\tvalToPos(5, scaleKey) - _10 >= minSpace ? RE_125 :\n\t\tRE_1\n\t);\n\n\tif (re == RE_1) {\n\t\tlet magSpace = abs(valToPos(1, scaleKey) - _10);\n\n\t\tif (magSpace < minSpace)\n\t\t\treturn _filt(splits.slice().reverse(), sc.distr, re, ceil(minSpace / magSpace)).reverse(); // max->min skip\n\t}\n\n\treturn _filt(splits, sc.distr, re, 1);\n}\n\nfunction log2AxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {\n\tlet axis = self.axes[axisIdx];\n\tlet scaleKey = axis.scale;\n\tlet minSpace = axis._space;\n\tlet valToPos = self.valToPos;\n\n\tlet magSpace = abs(valToPos(1, scaleKey) - valToPos(2, scaleKey));\n\n\tif (magSpace < minSpace)\n\t\treturn _filt(splits.slice().reverse(), 3, RE_ALL, ceil(minSpace / magSpace)).reverse(); // max->min skip\n\n\treturn splits;\n}\n\nfunction numSeriesVal(self, val, seriesIdx, dataIdx) {\n\treturn dataIdx == null ? LEGEND_DISP : val == null ? \"\" : fmtNum(val);\n}\n\nconst yAxisOpts = {\n\tshow: true,\n\tscale: \"y\",\n\tstroke: hexBlack,\n\tspace: 30,\n\tgap: 5,\n\talignTo: 1,\n\tsize: 50,\n\tlabelGap: 0,\n\tlabelSize: 30,\n\tlabelFont,\n\tside: 3,\n//\tclass: \"y-vals\",\n//\tincrs: numIncrs,\n//\tvalues: (vals, space) => vals,\n//\tfilter: retArg1,\n\tgrid,\n\tticks,\n\tborder,\n\tfont,\n\tlineGap,\n\trotate: 0,\n};\n\n// takes stroke width\nfunction ptDia(width, mult) {\n\tlet dia = 3 + (width || 1) * 2;\n\treturn roundDec(dia * mult, 3);\n}\n\nfunction seriesPointsShow(self, si) {\n\tlet { scale, idxs } = self.series[0];\n\tlet xData = self._data[0];\n\tlet p0 = self.valToPos(xData[idxs[0]], scale, true);\n\tlet p1 = self.valToPos(xData[idxs[1]], scale, true);\n\tlet dim = abs(p1 - p0);\n\n\tlet s = self.series[si];\n//\tconst dia = ptDia(s.width, pxRatio);\n\tlet maxPts = dim / (s.points.space * pxRatio);\n\treturn idxs[1] - idxs[0] <= maxPts;\n}\n\nconst facet = {\n\tscale: null,\n\tauto: true,\n\tsorted: 0,\n\n\t// internal caches\n\tmin: inf,\n\tmax: -inf,\n};\n\nconst gaps = (self, seriesIdx, idx0, idx1, nullGaps) => nullGaps;\n\nconst xySeriesOpts = {\n\tshow: true,\n\tauto: true,\n\tsorted: 0,\n\tgaps,\n\talpha: 1,\n\tfacets: [\n\t\tassign({}, facet, {scale: 'x'}),\n\t\tassign({}, facet, {scale: 'y'}),\n\t],\n};\n\nconst ySeriesOpts = {\n\tscale: \"y\",\n\tauto: true,\n\tsorted: 0,\n\tshow: true,\n\tspanGaps: false,\n\tgaps,\n\talpha: 1,\n\tpoints: {\n\t\tshow: seriesPointsShow,\n\t\tfilter: null,\n\t//  paths:\n\t//\tstroke: \"#000\",\n\t//\tfill: \"#fff\",\n\t//\twidth: 1,\n\t//\tsize: 10,\n\t},\n//\tlabel: \"Value\",\n//\tvalue: v => v,\n\tvalues: null,\n\n\t// internal caches\n\tmin: inf,\n\tmax: -inf,\n\tidxs: [],\n\n\tpath: null,\n\tclip: null,\n};\n\nfunction clampScale(self, val, scaleMin, scaleMax, scaleKey) {\n/*\n\tif (val < 0) {\n\t\tlet cssHgt = self.bbox.height / pxRatio;\n\t\tlet absPos = self.valToPos(abs(val), scaleKey);\n\t\tlet fromBtm = cssHgt - absPos;\n\t\treturn self.posToVal(cssHgt + fromBtm, scaleKey);\n\t}\n*/\n\treturn scaleMin / 10;\n}\n\nconst xScaleOpts = {\n\ttime: FEAT_TIME,\n\tauto: true,\n\tdistr: 1,\n\tlog: 10,\n\tasinh: 1,\n\tmin: null,\n\tmax: null,\n\tdir: 1,\n\tori: 0,\n};\n\nconst yScaleOpts = assign({}, xScaleOpts, {\n\ttime: false,\n\tori: 1,\n});\n\nconst syncs = {};\n\nfunction _sync(key, opts) {\n\tlet s = syncs[key];\n\n\tif (!s) {\n\t\ts = {\n\t\t\tkey,\n\t\t\tplots: [],\n\t\t\tsub(plot) {\n\t\t\t\ts.plots.push(plot);\n\t\t\t},\n\t\t\tunsub(plot) {\n\t\t\t\ts.plots = s.plots.filter(c => c != plot);\n\t\t\t},\n\t\t\tpub(type, self, x, y, w, h, i) {\n\t\t\t\tfor (let j = 0; j < s.plots.length; j++)\n\t\t\t\t\ts.plots[j] != self && s.plots[j].pub(type, self, x, y, w, h, i);\n\t\t\t},\n\t\t};\n\n\t\tif (key != null)\n\t\t\tsyncs[key] = s;\n\t}\n\n\treturn s;\n}\n\nconst BAND_CLIP_FILL   = 1 << 0;\nconst BAND_CLIP_STROKE = 1 << 1;\n\nfunction orient(u, seriesIdx, cb) {\n\tconst mode = u.mode;\n\tconst series = u.series[seriesIdx];\n\tconst data = mode == 2 ? u._data[seriesIdx] : u._data;\n\tconst scales = u.scales;\n\tconst bbox   = u.bbox;\n\n\tlet dx = data[0],\n\t\tdy = mode == 2 ? data[1] : data[seriesIdx],\n\t\tsx = mode == 2 ? scales[series.facets[0].scale] : scales[u.series[0].scale],\n\t\tsy = mode == 2 ? scales[series.facets[1].scale] : scales[series.scale],\n\t\tl = bbox.left,\n\t\tt = bbox.top,\n\t\tw = bbox.width,\n\t\th = bbox.height,\n\t\tH = u.valToPosH,\n\t\tV = u.valToPosV;\n\n\treturn (sx.ori == 0\n\t\t? cb(\n\t\t\tseries,\n\t\t\tdx,\n\t\t\tdy,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tH,\n\t\t\tV,\n\t\t\tl,\n\t\t\tt,\n\t\t\tw,\n\t\t\th,\n\t\t\tmoveToH,\n\t\t\tlineToH,\n\t\t\trectH,\n\t\t\tarcH,\n\t\t\tbezierCurveToH,\n\t\t)\n\t\t: cb(\n\t\t\tseries,\n\t\t\tdx,\n\t\t\tdy,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tV,\n\t\t\tH,\n\t\t\tt,\n\t\t\tl,\n\t\t\th,\n\t\t\tw,\n\t\t\tmoveToV,\n\t\t\tlineToV,\n\t\t\trectV,\n\t\t\tarcV,\n\t\t\tbezierCurveToV,\n\t\t)\n\t);\n}\n\nfunction bandFillClipDirs(self, seriesIdx) {\n\tlet fillDir = 0;\n\n\t// 2 bits, -1 | 1\n\tlet clipDirs = 0;\n\n\tlet bands = ifNull(self.bands, EMPTY_ARR);\n\n\tfor (let i = 0; i < bands.length; i++) {\n\t\tlet b = bands[i];\n\n\t\t// is a \"from\" band edge\n\t\tif (b.series[0] == seriesIdx)\n\t\t\tfillDir = b.dir;\n\t\t// is a \"to\" band edge\n\t\telse if (b.series[1] == seriesIdx) {\n\t\t\tif (b.dir == 1)\n\t\t\t\tclipDirs |= 1;\n\t\t\telse\n\t\t\t\tclipDirs |= 2;\n\t\t}\n\t}\n\n\treturn [\n\t\tfillDir,\n\t\t(\n\t\t\tclipDirs == 1 ? -1 : // neg only\n\t\t\tclipDirs == 2 ?  1 : // pos only\n\t\t\tclipDirs == 3 ?  2 : // both\n\t\t\t                 0   // neither\n\t\t)\n\t];\n}\n\nfunction seriesFillTo(self, seriesIdx, dataMin, dataMax, bandFillDir) {\n\tlet mode = self.mode;\n\tlet series = self.series[seriesIdx];\n\tlet scaleKey = mode == 2 ? series.facets[1].scale : series.scale;\n\tlet scale = self.scales[scaleKey];\n\n\treturn (\n\t\tbandFillDir == -1 ? scale.min :\n\t\tbandFillDir ==  1 ? scale.max :\n\t\tscale.distr ==  3 ? (\n\t\t\tscale.dir == 1 ? scale.min :\n\t\t\tscale.max\n\t\t) : 0\n\t);\n}\n\n// creates inverted band clip path (from stroke path -> yMax || yMin)\n// clipDir is always inverse of fillDir\n// default clip dir is upwards (1), since default band fill is downwards/fillBelowTo (-1) (highIdx -> lowIdx)\nfunction clipBandLine(self, seriesIdx, idx0, idx1, strokePath, clipDir) {\n\treturn orient(self, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\tlet pxRound = series.pxRound;\n\n\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\t\tconst lineTo = scaleX.ori == 0 ? lineToH : lineToV;\n\n\t\tlet frIdx, toIdx;\n\n\t\tif (dir == 1) {\n\t\t\tfrIdx = idx0;\n\t\t\ttoIdx = idx1;\n\t\t}\n\t\telse {\n\t\t\tfrIdx = idx1;\n\t\t\ttoIdx = idx0;\n\t\t}\n\n\t\t// path start\n\t\tlet x0 = pxRound(valToPosX(dataX[frIdx], scaleX, xDim, xOff));\n\t\tlet y0 = pxRound(valToPosY(dataY[frIdx], scaleY, yDim, yOff));\n\t\t// path end x\n\t\tlet x1 = pxRound(valToPosX(dataX[toIdx], scaleX, xDim, xOff));\n\t\t// upper or lower y limit\n\t\tlet yLimit = pxRound(valToPosY(clipDir == 1 ? scaleY.max : scaleY.min, scaleY, yDim, yOff));\n\n\t\tlet clip = new Path2D(strokePath);\n\n\t\tlineTo(clip, x1, yLimit);\n\t\tlineTo(clip, x0, yLimit);\n\t\tlineTo(clip, x0, y0);\n\n\t\treturn clip;\n\t});\n}\n\nfunction clipGaps(gaps, ori, plotLft, plotTop, plotWid, plotHgt) {\n\tlet clip = null;\n\n\t// create clip path (invert gaps and non-gaps)\n\tif (gaps.length > 0) {\n\t\tclip = new Path2D();\n\n\t\tconst rect = ori == 0 ? rectH : rectV;\n\n\t\tlet prevGapEnd = plotLft;\n\n\t\tfor (let i = 0; i < gaps.length; i++) {\n\t\t\tlet g = gaps[i];\n\n\t\t\tif (g[1] > g[0]) {\n\t\t\t\tlet w = g[0] - prevGapEnd;\n\n\t\t\t\tw > 0 && rect(clip, prevGapEnd, plotTop, w, plotTop + plotHgt);\n\n\t\t\t\tprevGapEnd = g[1];\n\t\t\t}\n\t\t}\n\n\t\tlet w = plotLft + plotWid - prevGapEnd;\n\n\t\t// hack to ensure we expand the clip enough to avoid cutting off strokes at edges\n\t\tlet maxStrokeWidth = 10;\n\n\t\tw > 0 && rect(clip, prevGapEnd, plotTop - maxStrokeWidth / 2, w, plotTop + plotHgt + maxStrokeWidth);\n\t}\n\n\treturn clip;\n}\n\nfunction addGap(gaps, fromX, toX) {\n\tlet prevGap = gaps[gaps.length - 1];\n\n\tif (prevGap && prevGap[0] == fromX)\t\t\t// TODO: gaps must be encoded at stroke widths?\n\t\tprevGap[1] = toX;\n\telse\n\t\tgaps.push([fromX, toX]);\n}\n\nfunction findGaps(xs, ys, idx0, idx1, dir, pixelForX, align) {\n\tlet gaps = [];\n\tlet len = xs.length;\n\n\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\tlet yVal = ys[i];\n\n\t\tif (yVal === null) {\n\t\t\tlet fr = i, to = i;\n\n\t\t\tif (dir == 1) {\n\t\t\t\twhile (++i <= idx1 && ys[i] === null)\n\t\t\t\t\tto = i;\n\t\t\t}\n\t\t\telse {\n\t\t\t\twhile (--i >= idx0 && ys[i] === null)\n\t\t\t\t\tto = i;\n\t\t\t}\n\n\t\t\tlet frPx = pixelForX(xs[fr]);\n\t\t\tlet toPx = to == fr ? frPx : pixelForX(xs[to]);\n\n\t\t\t// if value adjacent to edge null is same pixel, then it's partially\n\t\t\t// filled and gap should start at next pixel\n\t\t\tlet fri2 = fr - dir;\n\t\t\tlet frPx2 = align <= 0 && fri2 >= 0 && fri2 < len ? pixelForX(xs[fri2]) : frPx;\n\t\t//\tif (frPx2 == frPx)\n\t\t//\t\tfrPx++;\n\t\t//\telse\n\t\t\t\tfrPx = frPx2;\n\n\t\t\tlet toi2 = to + dir;\n\t\t\tlet toPx2 = align >= 0 && toi2 >= 0 && toi2 < len ? pixelForX(xs[toi2]) : toPx;\n\t\t//\tif (toPx2 == toPx)\n\t\t//\t\ttoPx--;\n\t\t//\telse\n\t\t\t\ttoPx = toPx2;\n\n\t\t\tif (toPx >= frPx)\n\t\t\t\tgaps.push([frPx, toPx]); // addGap\n\t\t}\n\t}\n\n\treturn gaps;\n}\n\nfunction pxRoundGen(pxAlign) {\n\treturn pxAlign == 0 ? retArg0 : pxAlign == 1 ? round : v => incrRound(v, pxAlign);\n}\n\n/*\n// inefficient linear interpolation that does bi-directinal scans on each call\nexport function costlyLerp(i, idx0, idx1, _dirX, dataY) {\n\tlet prevNonNull = nonNullIdx(dataY, _dirX == 1 ? idx0 : idx1, i, -_dirX);\n\tlet nextNonNull = nonNullIdx(dataY, i, _dirX == 1 ? idx1 : idx0,  _dirX);\n\n\tlet prevVal = dataY[prevNonNull];\n\tlet nextVal = dataY[nextNonNull];\n\n\treturn prevVal + (i - prevNonNull) / (nextNonNull - prevNonNull) * (nextVal - prevVal);\n}\n*/\n\nfunction rect(ori) {\n\tlet moveTo = ori == 0 ?\n\t\tmoveToH :\n\t\tmoveToV;\n\n\tlet arcTo = ori == 0 ?\n\t\t(p, x1, y1, x2, y2, r) => { p.arcTo(x1, y1, x2, y2, r); } :\n\t\t(p, y1, x1, y2, x2, r) => { p.arcTo(x1, y1, x2, y2, r); };\n\n\tlet rect = ori == 0 ?\n\t\t(p, x, y, w, h) => { p.rect(x, y, w, h); } :\n\t\t(p, y, x, h, w) => { p.rect(x, y, w, h); };\n\n\t// TODO (pending better browser support): https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/roundRect\n\treturn (p, x, y, w, h, endRad = 0, baseRad = 0) => {\n\t\tif (endRad == 0 && baseRad == 0)\n\t\t\trect(p, x, y, w, h);\n\t\telse {\n\t\t\tendRad  = min(endRad,  w / 2, h / 2);\n\t\t\tbaseRad = min(baseRad, w / 2, h / 2);\n\n\t\t\t// adapted from https://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-using-html-canvas/7838871#7838871\n\t\t\tmoveTo(p, x + endRad, y);\n\t\t\tarcTo(p, x + w, y, x + w, y + h, endRad);\n\t\t\tarcTo(p, x + w, y + h, x, y + h, baseRad);\n\t\t\tarcTo(p, x, y + h, x, y, baseRad);\n\t\t\tarcTo(p, x, y, x + w, y, endRad);\n\t\t\tp.closePath();\n\t\t}\n\t};\n}\n\n// orientation-inverting canvas functions\nconst moveToH = (p, x, y) => { p.moveTo(x, y); };\nconst moveToV = (p, y, x) => { p.moveTo(x, y); };\nconst lineToH = (p, x, y) => { p.lineTo(x, y); };\nconst lineToV = (p, y, x) => { p.lineTo(x, y); };\nconst rectH = rect(0);\nconst rectV = rect(1);\nconst arcH = (p, x, y, r, startAngle, endAngle) => { p.arc(x, y, r, startAngle, endAngle); };\nconst arcV = (p, y, x, r, startAngle, endAngle) => { p.arc(x, y, r, startAngle, endAngle); };\nconst bezierCurveToH = (p, bp1x, bp1y, bp2x, bp2y, p2x, p2y) => { p.bezierCurveTo(bp1x, bp1y, bp2x, bp2y, p2x, p2y); };\nconst bezierCurveToV = (p, bp1y, bp1x, bp2y, bp2x, p2y, p2x) => { p.bezierCurveTo(bp1x, bp1y, bp2x, bp2y, p2x, p2y); };\n\n// TODO: drawWrap(seriesIdx, drawPoints) (save, restore, translate, clip)\nfunction points(opts) {\n\treturn (u, seriesIdx, idx0, idx1, filtIdxs) => {\n\t//\tlog(\"drawPoints()\", arguments);\n\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\tlet { pxRound, points } = series;\n\n\t\t\tlet moveTo, arc;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tmoveTo = moveToH;\n\t\t\t\tarc = arcH;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmoveTo = moveToV;\n\t\t\t\tarc = arcV;\n\t\t\t}\n\n\t\t\tconst width = roundDec(points.width * pxRatio, 3);\n\n\t\t\tlet rad = (points.size - points.width) / 2 * pxRatio;\n\t\t\tlet dia = roundDec(rad * 2, 3);\n\n\t\t\tlet fill = new Path2D();\n\t\t\tlet clip = new Path2D();\n\n\t\t\tlet { left: lft, top: top, width: wid, height: hgt } = u.bbox;\n\n\t\t\trectH(clip,\n\t\t\t\tlft - dia,\n\t\t\t\ttop - dia,\n\t\t\t\twid + dia * 2,\n\t\t\t\thgt + dia * 2,\n\t\t\t);\n\n\t\t\tconst drawPoint = pi => {\n\t\t\t\tif (dataY[pi] != null) {\n\t\t\t\t\tlet x = pxRound(valToPosX(dataX[pi], scaleX, xDim, xOff));\n\t\t\t\t\tlet y = pxRound(valToPosY(dataY[pi], scaleY, yDim, yOff));\n\n\t\t\t\t\tmoveTo(fill, x + rad, y);\n\t\t\t\t\tarc(fill, x, y, rad, 0, PI * 2);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (filtIdxs)\n\t\t\t\tfiltIdxs.forEach(drawPoint);\n\t\t\telse {\n\t\t\t\tfor (let pi = idx0; pi <= idx1; pi++)\n\t\t\t\t\tdrawPoint(pi);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tstroke: width > 0 ? fill : null,\n\t\t\t\tfill,\n\t\t\t\tclip,\n\t\t\t\tflags: BAND_CLIP_FILL | BAND_CLIP_STROKE,\n\t\t\t};\n\t\t});\n\t};\n}\n\nfunction _drawAcc(lineTo) {\n\treturn (stroke, accX, minY, maxY, inY, outY) => {\n\t\tif (minY != maxY) {\n\t\t\tif (inY != minY && outY != minY)\n\t\t\t\tlineTo(stroke, accX, minY);\n\t\t\tif (inY != maxY && outY != maxY)\n\t\t\t\tlineTo(stroke, accX, maxY);\n\n\t\t\tlineTo(stroke, accX, outY);\n\t\t}\n\t};\n}\n\nconst drawAccH = _drawAcc(lineToH);\nconst drawAccV = _drawAcc(lineToV);\n\nfunction linear(opts) {\n\tconst alignGaps = ifNull(opts?.alignGaps, 0);\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\t[idx0, idx1] = nonNullIdxs(dataY, idx0, idx1);\n\n\t\t\tlet pxRound = series.pxRound;\n\n\t\t\tlet pixelForX = val => pxRound(valToPosX(val, scaleX, xDim, xOff));\n\t\t\tlet pixelForY = val => pxRound(valToPosY(val, scaleY, yDim, yOff));\n\n\t\t\tlet lineTo, drawAcc;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tlineTo = lineToH;\n\t\t\t\tdrawAcc = drawAccH;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlineTo = lineToV;\n\t\t\t\tdrawAcc = drawAccV;\n\t\t\t}\n\n\t\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\n\t\t\tconst _paths = {stroke: new Path2D(), fill: null, clip: null, band: null, gaps: null, flags: BAND_CLIP_FILL};\n\t\t\tconst stroke = _paths.stroke;\n\n\t\t\tlet hasGap = false;\n\n\t\t\t// decimate when number of points >= 4x available pixels\n\t\t\tconst decimate = idx1 - idx0 >= xDim * 4;\n\n\t\t\tif (decimate) {\n\t\t\t\tlet xForPixel = pos => u.posToVal(pos, scaleX.key, true);\n\n\t\t\t\tlet minY = null,\n\t\t\t\t\tmaxY = null,\n\t\t\t\t\tinY, outY, drawnAtX;\n\n\t\t\t\tlet accX = pixelForX(dataX[dir == 1 ? idx0 : idx1]);\n\n\t\t\t\tlet idx0px = pixelForX(dataX[idx0]);\n\t\t\t\tlet idx1px = pixelForX(dataX[idx1]);\n\n\t\t\t\t// tracks limit of current x bucket to avoid having to get x pixel for every x value\n\t\t\t\tlet nextAccXVal = xForPixel(dir == 1 ? idx0px + 1 : idx1px - 1);\n\n\t\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\t\tlet xVal = dataX[i];\n\t\t\t\t\tlet reuseAccX = dir == 1 ? (xVal < nextAccXVal) : (xVal > nextAccXVal);\n\t\t\t\t\tlet x = reuseAccX ? accX :  pixelForX(xVal);\n\n\t\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\t\tif (x == accX) {\n\t\t\t\t\t\tif (yVal != null) {\n\t\t\t\t\t\t\toutY = yVal;\n\n\t\t\t\t\t\t\tif (minY == null) {\n\t\t\t\t\t\t\t\tlineTo(stroke, x, pixelForY(outY));\n\t\t\t\t\t\t\t\tinY = minY = maxY = outY;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (outY < minY)\n\t\t\t\t\t\t\t\t\tminY = outY;\n\t\t\t\t\t\t\t\telse if (outY > maxY)\n\t\t\t\t\t\t\t\t\tmaxY = outY;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (yVal === null)\n\t\t\t\t\t\t\t\thasGap = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (minY != null)\n\t\t\t\t\t\t\tdrawAcc(stroke, accX, pixelForY(minY), pixelForY(maxY), pixelForY(inY), pixelForY(outY));\n\n\t\t\t\t\t\tif (yVal != null) {\n\t\t\t\t\t\t\toutY = yVal;\n\t\t\t\t\t\t\tlineTo(stroke, x, pixelForY(outY));\n\t\t\t\t\t\t\tminY = maxY = inY = outY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tminY = maxY = null;\n\n\t\t\t\t\t\t\tif (yVal === null)\n\t\t\t\t\t\t\t\thasGap = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taccX = x;\n\t\t\t\t\t\tnextAccXVal = xForPixel(accX + dir);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (minY != null && minY != maxY && drawnAtX != accX)\n\t\t\t\t\tdrawAcc(stroke, accX, pixelForY(minY), pixelForY(maxY), pixelForY(inY), pixelForY(outY));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\t\tif (yVal === null)\n\t\t\t\t\t\thasGap = true;\n\t\t\t\t\telse if (yVal != null)\n\t\t\t\t\t\tlineTo(stroke, pixelForX(dataX[i]), pixelForY(yVal));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet [ bandFillDir, bandClipDir ] = bandFillClipDirs(u, seriesIdx);\n\n\t\t\tif (series.fill != null || bandFillDir != 0) {\n\t\t\t\tlet fill = _paths.fill = new Path2D(stroke);\n\n\t\t\t\tlet fillToVal = series.fillTo(u, seriesIdx, series.min, series.max, bandFillDir);\n\t\t\t\tlet fillToY = pixelForY(fillToVal);\n\n\t\t\t\tlet frX = pixelForX(dataX[idx0]);\n\t\t\t\tlet toX = pixelForX(dataX[idx1]);\n\n\t\t\t\tif (dir == -1)\n\t\t\t\t\t[toX, frX] = [frX, toX];\n\n\t\t\t\tlineTo(fill, toX, fillToY);\n\t\t\t\tlineTo(fill, frX, fillToY);\n\t\t\t}\n\n\t\t\tif (!series.spanGaps) { // skip in mode: 2?\n\t\t\t//\tconsole.time('gaps');\n\t\t\t\tlet gaps = [];\n\n\t\t\t\thasGap && gaps.push(...findGaps(dataX, dataY, idx0, idx1, dir, pixelForX, alignGaps));\n\n\t\t\t//\tconsole.timeEnd('gaps');\n\n\t\t\t//\tconsole.log('gaps', JSON.stringify(gaps));\n\n\t\t\t\t_paths.gaps = gaps = series.gaps(u, seriesIdx, idx0, idx1, gaps);\n\n\t\t\t\t_paths.clip = clipGaps(gaps, scaleX.ori, xOff, yOff, xDim, yDim);\n\t\t\t}\n\n\t\t\tif (bandClipDir != 0) {\n\t\t\t\t_paths.band = bandClipDir == 2 ? [\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, -1),\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke,  1),\n\t\t\t\t] : clipBandLine(u, seriesIdx, idx0, idx1, stroke, bandClipDir);\n\t\t\t}\n\n\t\t\treturn _paths;\n\t\t});\n\t};\n}\n\n// BUG: align: -1 behaves like align: 1 when scale.dir: -1\nfunction stepped(opts) {\n\tconst align = ifNull(opts.align, 1);\n\t// whether to draw ascenders/descenders at null/gap bondaries\n\tconst ascDesc = ifNull(opts.ascDesc, false);\n\tconst alignGaps = ifNull(opts.alignGaps, 0);\n\tconst extend = ifNull(opts.extend, false);\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\t[idx0, idx1] = nonNullIdxs(dataY, idx0, idx1);\n\n\t\t\tlet pxRound = series.pxRound;\n\n\t\t\tlet { left, width } = u.bbox;\n\n\t\t\tlet pixelForX = val => pxRound(valToPosX(val, scaleX, xDim, xOff));\n\t\t\tlet pixelForY = val => pxRound(valToPosY(val, scaleY, yDim, yOff));\n\n\t\t\tlet lineTo = scaleX.ori == 0 ? lineToH : lineToV;\n\n\t\t\tconst _paths = {stroke: new Path2D(), fill: null, clip: null, band: null, gaps: null, flags: BAND_CLIP_FILL};\n\t\t\tconst stroke = _paths.stroke;\n\n\t\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\n\t\t\tlet prevYPos  = pixelForY(dataY[dir == 1 ? idx0 : idx1]);\n\t\t\tlet firstXPos = pixelForX(dataX[dir == 1 ? idx0 : idx1]);\n\t\t\tlet prevXPos = firstXPos;\n\n\t\t\tlet firstXPosExt = firstXPos;\n\n\t\t\tif (extend && align == -1) {\n\t\t\t\tfirstXPosExt = left;\n\t\t\t\tlineTo(stroke, firstXPosExt, prevYPos);\n\t\t\t}\n\n\t\t\tlineTo(stroke, firstXPos, prevYPos);\n\n\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\tlet yVal1 = dataY[i];\n\n\t\t\t\tif (yVal1 == null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tlet x1 = pixelForX(dataX[i]);\n\t\t\t\tlet y1 = pixelForY(yVal1);\n\n\t\t\t\tif (align == 1)\n\t\t\t\t\tlineTo(stroke, x1, prevYPos);\n\t\t\t\telse\n\t\t\t\t\tlineTo(stroke, prevXPos, y1);\n\n\t\t\t\tlineTo(stroke, x1, y1);\n\n\t\t\t\tprevYPos = y1;\n\t\t\t\tprevXPos = x1;\n\t\t\t}\n\n\t\t\tlet prevXPosExt = prevXPos;\n\n\t\t\tif (extend && align == 1) {\n\t\t\t\tprevXPosExt = left + width;\n\t\t\t\tlineTo(stroke, prevXPosExt, prevYPos);\n\t\t\t}\n\n\t\t\tlet [ bandFillDir, bandClipDir ] = bandFillClipDirs(u, seriesIdx);\n\n\t\t\tif (series.fill != null || bandFillDir != 0) {\n\t\t\t\tlet fill = _paths.fill = new Path2D(stroke);\n\n\t\t\t\tlet fillTo = series.fillTo(u, seriesIdx, series.min, series.max, bandFillDir);\n\t\t\t\tlet fillToY = pixelForY(fillTo);\n\n\t\t\t\tlineTo(fill, prevXPosExt, fillToY);\n\t\t\t\tlineTo(fill, firstXPosExt, fillToY);\n\t\t\t}\n\n\t\t\tif (!series.spanGaps) {\n\t\t\t//\tconsole.time('gaps');\n\t\t\t\tlet gaps = [];\n\n\t\t\t\tgaps.push(...findGaps(dataX, dataY, idx0, idx1, dir, pixelForX, alignGaps));\n\n\t\t\t//\tconsole.timeEnd('gaps');\n\n\t\t\t//\tconsole.log('gaps', JSON.stringify(gaps));\n\n\t\t\t\t// expand/contract clips for ascenders/descenders\n\t\t\t\tlet halfStroke = (series.width * pxRatio) / 2;\n\t\t\t\tlet startsOffset = (ascDesc || align ==  1) ?  halfStroke : -halfStroke;\n\t\t\t\tlet endsOffset   = (ascDesc || align == -1) ? -halfStroke :  halfStroke;\n\n\t\t\t\tgaps.forEach(g => {\n\t\t\t\t\tg[0] += startsOffset;\n\t\t\t\t\tg[1] += endsOffset;\n\t\t\t\t});\n\n\t\t\t\t_paths.gaps = gaps = series.gaps(u, seriesIdx, idx0, idx1, gaps);\n\n\t\t\t\t_paths.clip = clipGaps(gaps, scaleX.ori, xOff, yOff, xDim, yDim);\n\t\t\t}\n\n\t\t\tif (bandClipDir != 0) {\n\t\t\t\t_paths.band = bandClipDir == 2 ? [\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, -1),\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke,  1),\n\t\t\t\t] : clipBandLine(u, seriesIdx, idx0, idx1, stroke, bandClipDir);\n\t\t\t}\n\n\t\t\treturn _paths;\n\t\t});\n\t};\n}\n\nfunction findColWidth(dataX, dataY, valToPosX, scaleX, xDim, xOff, colWid = inf) {\n\tif (dataX.length > 1) {\n\t\t// prior index with non-undefined y data\n\t\tlet prevIdx = null;\n\n\t\t// scan full dataset for smallest adjacent delta\n\t\t// will not work properly for non-linear x scales, since does not do expensive valToPosX calcs till end\n\t\tfor (let i = 0, minDelta = Infinity; i < dataX.length; i++) {\n\t\t\tif (dataY[i] !== undefined) {\n\t\t\t\tif (prevIdx != null) {\n\t\t\t\t\tlet delta = abs(dataX[i] - dataX[prevIdx]);\n\n\t\t\t\t\tif (delta < minDelta) {\n\t\t\t\t\t\tminDelta = delta;\n\t\t\t\t\t\tcolWid = abs(valToPosX(dataX[i], scaleX, xDim, xOff) - valToPosX(dataX[prevIdx], scaleX, xDim, xOff));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprevIdx = i;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn colWid;\n}\n\nfunction bars(opts) {\n\topts = opts || EMPTY_OBJ;\n\tconst size = ifNull(opts.size, [0.6, inf, 1]);\n\tconst align = opts.align || 0;\n\tconst _extraGap = (opts.gap || 0);\n\n\tlet ro = opts.radius;\n\n\tro =\n\t\t// [valueRadius, baselineRadius]\n\t\tro == null ? [0, 0] :\n\t\ttypeof ro == 'number' ? [ro, 0] : ro;\n\n\tconst radiusFn = fnOrSelf(ro);\n\n\tconst gapFactor = 1 - size[0];\n\tconst _maxWidth  = ifNull(size[1], inf);\n\tconst _minWidth  = ifNull(size[2], 1);\n\n\tconst disp = ifNull(opts.disp, EMPTY_OBJ);\n\tconst _each = ifNull(opts.each, _ => {});\n\n\tconst { fill: dispFills, stroke: dispStrokes } = disp;\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\tlet pxRound = series.pxRound;\n\t\t\tlet _align = align;\n\n\t\t\tlet extraGap = _extraGap * pxRatio;\n\t\t\tlet maxWidth = _maxWidth * pxRatio;\n\t\t\tlet minWidth = _minWidth * pxRatio;\n\n\t\t\tlet valRadius, baseRadius;\n\n\t\t\tif (scaleX.ori == 0)\n\t\t\t\t[valRadius, baseRadius] = radiusFn(u, seriesIdx);\n\t\t\telse\n\t\t\t\t[baseRadius, valRadius] = radiusFn(u, seriesIdx);\n\n\t\t\tconst _dirX = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\t\t//\tconst _dirY = scaleY.dir * (scaleY.ori == 1 ? 1 : -1);\n\n\t\t\tlet rect = scaleX.ori == 0 ? rectH : rectV;\n\n\t\t\tlet each = scaleX.ori == 0 ? _each : (u, seriesIdx, i, top, lft, hgt, wid) => {\n\t\t\t\t_each(u, seriesIdx, i, lft, top, wid, hgt);\n\t\t\t};\n\n\t\t\t// band where this series is the \"from\" edge\n\t\t\tlet band = ifNull(u.bands, EMPTY_ARR).find(b => b.series[0] == seriesIdx);\n\n\t\t\tlet fillDir = band != null ? band.dir : 0;\n\t\t\tlet fillTo = series.fillTo(u, seriesIdx, series.min, series.max, fillDir);\n\t\t\tlet fillToY = pxRound(valToPosY(fillTo, scaleY, yDim, yOff));\n\n\t\t\t// barWid is to center of stroke\n\t\t\tlet xShift, barWid, fullGap, colWid = xDim;\n\n\t\t\tlet strokeWidth = pxRound(series.width * pxRatio);\n\n\t\t\tlet multiPath = false;\n\n\t\t\tlet fillColors = null;\n\t\t\tlet fillPaths = null;\n\t\t\tlet strokeColors = null;\n\t\t\tlet strokePaths = null;\n\n\t\t\tif (dispFills != null && (strokeWidth == 0 || dispStrokes != null)) {\n\t\t\t\tmultiPath = true;\n\n\t\t\t\tfillColors = dispFills.values(u, seriesIdx, idx0, idx1);\n\t\t\t\tfillPaths = new Map();\n\t\t\t\t(new Set(fillColors)).forEach(color => {\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tfillPaths.set(color, new Path2D());\n\t\t\t\t});\n\n\t\t\t\tif (strokeWidth > 0) {\n\t\t\t\t\tstrokeColors = dispStrokes.values(u, seriesIdx, idx0, idx1);\n\t\t\t\t\tstrokePaths = new Map();\n\t\t\t\t\t(new Set(strokeColors)).forEach(color => {\n\t\t\t\t\t\tif (color != null)\n\t\t\t\t\t\t\tstrokePaths.set(color, new Path2D());\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet { x0, size } = disp;\n\n\t\t\tif (x0 != null && size != null) {\n\t\t\t\t_align = 1;\n\t\t\t\tdataX = x0.values(u, seriesIdx, idx0, idx1);\n\n\t\t\t\tif (x0.unit == 2)\n\t\t\t\t\tdataX = dataX.map(pct => u.posToVal(xOff + pct * xDim, scaleX.key, true));\n\n\t\t\t\t// assumes uniform sizes, for now\n\t\t\t\tlet sizes = size.values(u, seriesIdx, idx0, idx1);\n\n\t\t\t\tif (size.unit == 2)\n\t\t\t\t\tbarWid = sizes[0] * xDim;\n\t\t\t\telse\n\t\t\t\t\tbarWid = valToPosX(sizes[0], scaleX, xDim, xOff) - valToPosX(0, scaleX, xDim, xOff); // assumes linear scale (delta from 0)\n\n\t\t\t\tcolWid = findColWidth(dataX, dataY, valToPosX, scaleX, xDim, xOff, colWid);\n\n\t\t\t\tlet gapWid = colWid - barWid;\n\t\t\t\tfullGap = gapWid + extraGap;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcolWid = findColWidth(dataX, dataY, valToPosX, scaleX, xDim, xOff, colWid);\n\n\t\t\t\tlet gapWid = colWid * gapFactor;\n\n\t\t\t\tfullGap = gapWid + extraGap;\n\t\t\t\tbarWid = colWid - fullGap;\n\t\t\t}\n\n\t\t\tif (fullGap < 1)\n\t\t\t\tfullGap = 0;\n\n\t\t\tif (strokeWidth >= barWid / 2)\n\t\t\t\tstrokeWidth = 0;\n\n\t\t\t// for small gaps, disable pixel snapping since gap inconsistencies become noticible and annoying\n\t\t\tif (fullGap < 5)\n\t\t\t\tpxRound = retArg0;\n\n\t\t\tlet insetStroke = fullGap > 0;\n\n\t\t\tlet rawBarWid = colWid - fullGap - (insetStroke ? strokeWidth : 0);\n\n\t\t\tbarWid = pxRound(clamp(rawBarWid, minWidth, maxWidth));\n\n\t\t\txShift = (_align == 0 ? barWid / 2 : _align == _dirX ? 0 : barWid) - _align * _dirX * ((_align == 0 ? extraGap / 2 : 0) + (insetStroke ? strokeWidth / 2 : 0));\n\n\n\t\t\tconst _paths = {stroke: null, fill: null, clip: null, band: null, gaps: null, flags: 0};  // disp, geom\n\n\t\t\tconst stroke = multiPath ? null : new Path2D();\n\n\t\t\tlet dataY0 = null;\n\n\t\t\tif (band != null)\n\t\t\t\tdataY0 = u.data[band.series[1]];\n\t\t\telse {\n\t\t\t\tlet { y0, y1 } = disp;\n\n\t\t\t\tif (y0 != null && y1 != null) {\n\t\t\t\t\tdataY = y1.values(u, seriesIdx, idx0, idx1);\n\t\t\t\t\tdataY0 = y0.values(u, seriesIdx, idx0, idx1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet radVal = valRadius * barWid;\n\t\t\tlet radBase = baseRadius * barWid;\n\n\t\t\tfor (let i = _dirX == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += _dirX) {\n\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\tif (yVal == null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (dataY0 != null) {\n\t\t\t\t\tlet yVal0 = dataY0[i] ?? 0;\n\n\t\t\t\t\tif (yVal - yVal0 == 0)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tfillToY = valToPosY(yVal0, scaleY, yDim, yOff);\n\t\t\t\t}\n\n\t\t\t\tlet xVal = scaleX.distr != 2 || disp != null ? dataX[i] : i;\n\n\t\t\t\t// TODO: all xPos can be pre-computed once for all series in aligned set\n\t\t\t\tlet xPos = valToPosX(xVal, scaleX, xDim, xOff);\n\t\t\t\tlet yPos = valToPosY(ifNull(yVal, fillTo), scaleY, yDim, yOff);\n\n\t\t\t\tlet lft = pxRound(xPos - xShift);\n\t\t\t\tlet btm = pxRound(max(yPos, fillToY));\n\t\t\t\tlet top = pxRound(min(yPos, fillToY));\n\t\t\t\t// this includes the stroke\n\t\t\t\tlet barHgt = btm - top;\n\n\t\t\t\tif (yVal != null) {  // && yVal != fillTo (0 height bar)\n\t\t\t\t\tlet rv = yVal < 0 ? radBase : radVal;\n\t\t\t\t\tlet rb = yVal < 0 ? radVal : radBase;\n\n\t\t\t\t\tif (multiPath) {\n\t\t\t\t\t\tif (strokeWidth > 0 && strokeColors[i] != null)\n\t\t\t\t\t\t\trect(strokePaths.get(strokeColors[i]), lft, top + floor(strokeWidth / 2), barWid, max(0, barHgt - strokeWidth), rv, rb);\n\n\t\t\t\t\t\tif (fillColors[i] != null)\n\t\t\t\t\t\t\trect(fillPaths.get(fillColors[i]), lft, top + floor(strokeWidth / 2), barWid, max(0, barHgt - strokeWidth), rv, rb);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\trect(stroke, lft, top + floor(strokeWidth / 2), barWid, max(0, barHgt - strokeWidth), rv, rb);\n\n\t\t\t\t\teach(u, seriesIdx, i,\n\t\t\t\t\t\tlft    - strokeWidth / 2,\n\t\t\t\t\t\ttop,\n\t\t\t\t\t\tbarWid + strokeWidth,\n\t\t\t\t\t\tbarHgt,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (strokeWidth > 0)\n\t\t\t\t_paths.stroke = multiPath ? strokePaths : stroke;\n\t\t\telse if (!multiPath) {\n\t\t\t\t_paths._fill = series.width == 0 ? series._fill : series._stroke ?? series._fill;\n\t\t\t\t_paths.width = 0;\n\t\t\t}\n\n\t\t\t_paths.fill = multiPath ? fillPaths : stroke;\n\n\t\t\treturn _paths;\n\t\t});\n\t};\n}\n\nfunction splineInterp(interp, opts) {\n\tconst alignGaps = ifNull(opts?.alignGaps, 0);\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\t[idx0, idx1] = nonNullIdxs(dataY, idx0, idx1);\n\n\t\t\tlet pxRound = series.pxRound;\n\n\t\t\tlet pixelForX = val => pxRound(valToPosX(val, scaleX, xDim, xOff));\n\t\t\tlet pixelForY = val => pxRound(valToPosY(val, scaleY, yDim, yOff));\n\n\t\t\tlet moveTo, bezierCurveTo, lineTo;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tmoveTo = moveToH;\n\t\t\t\tlineTo = lineToH;\n\t\t\t\tbezierCurveTo = bezierCurveToH;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmoveTo = moveToV;\n\t\t\t\tlineTo = lineToV;\n\t\t\t\tbezierCurveTo = bezierCurveToV;\n\t\t\t}\n\n\t\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\n\t\t\tlet firstXPos = pixelForX(dataX[dir == 1 ? idx0 : idx1]);\n\t\t\tlet prevXPos = firstXPos;\n\n\t\t\tlet xCoords = [];\n\t\t\tlet yCoords = [];\n\n\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\tif (yVal != null) {\n\t\t\t\t\tlet xVal = dataX[i];\n\t\t\t\t\tlet xPos = pixelForX(xVal);\n\n\t\t\t\t\txCoords.push(prevXPos = xPos);\n\t\t\t\t\tyCoords.push(pixelForY(dataY[i]));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst _paths = {stroke: interp(xCoords, yCoords, moveTo, lineTo, bezierCurveTo, pxRound), fill: null, clip: null, band: null, gaps: null, flags: BAND_CLIP_FILL};\n\t\t\tconst stroke = _paths.stroke;\n\n\t\t\tlet [ bandFillDir, bandClipDir ] = bandFillClipDirs(u, seriesIdx);\n\n\t\t\tif (series.fill != null || bandFillDir != 0) {\n\t\t\t\tlet fill = _paths.fill = new Path2D(stroke);\n\n\t\t\t\tlet fillTo = series.fillTo(u, seriesIdx, series.min, series.max, bandFillDir);\n\t\t\t\tlet fillToY = pixelForY(fillTo);\n\n\t\t\t\tlineTo(fill, prevXPos, fillToY);\n\t\t\t\tlineTo(fill, firstXPos, fillToY);\n\t\t\t}\n\n\t\t\tif (!series.spanGaps) {\n\t\t\t//\tconsole.time('gaps');\n\t\t\t\tlet gaps = [];\n\n\t\t\t\tgaps.push(...findGaps(dataX, dataY, idx0, idx1, dir, pixelForX, alignGaps));\n\n\t\t\t//\tconsole.timeEnd('gaps');\n\n\t\t\t//\tconsole.log('gaps', JSON.stringify(gaps));\n\n\t\t\t\t_paths.gaps = gaps = series.gaps(u, seriesIdx, idx0, idx1, gaps);\n\n\t\t\t\t_paths.clip = clipGaps(gaps, scaleX.ori, xOff, yOff, xDim, yDim);\n\t\t\t}\n\n\t\t\tif (bandClipDir != 0) {\n\t\t\t\t_paths.band = bandClipDir == 2 ? [\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, -1),\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke,  1),\n\t\t\t\t] : clipBandLine(u, seriesIdx, idx0, idx1, stroke, bandClipDir);\n\t\t\t}\n\n\t\t\treturn _paths;\n\n\t\t\t//  if FEAT_PATHS: false in rollup.config.js\n\t\t\t//\tu.ctx.save();\n\t\t\t//\tu.ctx.beginPath();\n\t\t\t//\tu.ctx.rect(u.bbox.left, u.bbox.top, u.bbox.width, u.bbox.height);\n\t\t\t//\tu.ctx.clip();\n\t\t\t//\tu.ctx.strokeStyle = u.series[sidx].stroke;\n\t\t\t//\tu.ctx.stroke(stroke);\n\t\t\t//\tu.ctx.fillStyle = u.series[sidx].fill;\n\t\t\t//\tu.ctx.fill(fill);\n\t\t\t//\tu.ctx.restore();\n\t\t\t//\treturn null;\n\t\t});\n\t};\n}\n\nfunction monotoneCubic(opts) {\n\treturn splineInterp(_monotoneCubic, opts);\n}\n\n// Monotone Cubic Spline interpolation, adapted from the Chartist.js implementation:\n// https://github.com/gionkunz/chartist-js/blob/e7e78201bffe9609915e5e53cfafa29a5d6c49f9/src/scripts/interpolation.js#L240-L369\nfunction _monotoneCubic(xs, ys, moveTo, lineTo, bezierCurveTo, pxRound) {\n\tconst n = xs.length;\n\n\tif (n < 2)\n\t\treturn null;\n\n\tconst path = new Path2D();\n\n\tmoveTo(path, xs[0], ys[0]);\n\n\tif (n == 2)\n\t\tlineTo(path, xs[1], ys[1]);\n\telse {\n\t\tlet ms  = Array(n),\n\t\t\tds  = Array(n - 1),\n\t\t\tdys = Array(n - 1),\n\t\t\tdxs = Array(n - 1);\n\n\t\t// calc deltas and derivative\n\t\tfor (let i = 0; i < n - 1; i++) {\n\t\t\tdys[i] = ys[i + 1] - ys[i];\n\t\t\tdxs[i] = xs[i + 1] - xs[i];\n\t\t\tds[i]  = dys[i] / dxs[i];\n\t\t}\n\n\t\t// determine desired slope (m) at each point using Fritsch-Carlson method\n\t\t// http://math.stackexchange.com/questions/45218/implementation-of-monotone-cubic-interpolation\n\t\tms[0] = ds[0];\n\n\t\tfor (let i = 1; i < n - 1; i++) {\n\t\t\tif (ds[i] === 0 || ds[i - 1] === 0 || (ds[i - 1] > 0) !== (ds[i] > 0))\n\t\t\t\tms[i] = 0;\n\t\t\telse {\n\t\t\t\tms[i] = 3 * (dxs[i - 1] + dxs[i]) / (\n\t\t\t\t\t(2 * dxs[i] + dxs[i - 1]) / ds[i - 1] +\n\t\t\t\t\t(dxs[i] + 2 * dxs[i - 1]) / ds[i]\n\t\t\t\t);\n\n\t\t\t\tif (!isFinite(ms[i]))\n\t\t\t\t\tms[i] = 0;\n\t\t\t}\n\t\t}\n\n\t\tms[n - 1] = ds[n - 2];\n\n\t\tfor (let i = 0; i < n - 1; i++) {\n\t\t\tbezierCurveTo(\n\t\t\t\tpath,\n\t\t\t\txs[i] + dxs[i] / 3,\n\t\t\t\tys[i] + ms[i] * dxs[i] / 3,\n\t\t\t\txs[i + 1] - dxs[i] / 3,\n\t\t\t\tys[i + 1] - ms[i + 1] * dxs[i] / 3,\n\t\t\t\txs[i + 1],\n\t\t\t\tys[i + 1],\n\t\t\t);\n\t\t}\n\t}\n\n\treturn path;\n}\n\nconst cursorPlots = new Set();\n\nfunction invalidateRects() {\n\tfor (let u of cursorPlots)\n\t\tu.syncRect(true);\n}\n\nif (domEnv) {\n\ton(resize, win, invalidateRects);\n\ton(scroll, win, invalidateRects, true);\n\ton(dppxchange, win, () => { uPlot.pxRatio = pxRatio; });\n}\n\nconst linearPath = linear() ;\nconst pointsPath = points() ;\n\nfunction setDefaults(d, xo, yo, initY) {\n\tlet d2 = initY ? [d[0], d[1]].concat(d.slice(2)) : [d[0]].concat(d.slice(1));\n\treturn d2.map((o, i) => setDefault(o, i, xo, yo));\n}\n\nfunction setDefaults2(d, xyo) {\n\treturn d.map((o, i) => i == 0 ? {} : assign({}, xyo, o));  // todo: assign() will not merge facet arrays\n}\n\nfunction setDefault(o, i, xo, yo) {\n\treturn assign({}, (i == 0 ? xo : yo), o);\n}\n\nfunction snapNumX(self, dataMin, dataMax) {\n\treturn dataMin == null ? nullNullTuple : [dataMin, dataMax];\n}\n\nconst snapTimeX = snapNumX;\n\n// this ensures that non-temporal/numeric y-axes get multiple-snapped padding added above/below\n// TODO: also account for incrs when snapping to ensure top of axis gets a tick & value\nfunction snapNumY(self, dataMin, dataMax) {\n\treturn dataMin == null ? nullNullTuple : rangeNum(dataMin, dataMax, rangePad, true);\n}\n\nfunction snapLogY(self, dataMin, dataMax, scale) {\n\treturn dataMin == null ? nullNullTuple : rangeLog(dataMin, dataMax, self.scales[scale].log, false);\n}\n\nconst snapLogX = snapLogY;\n\nfunction snapAsinhY(self, dataMin, dataMax, scale) {\n\treturn dataMin == null ? nullNullTuple : rangeAsinh(dataMin, dataMax, self.scales[scale].log, false);\n}\n\nconst snapAsinhX = snapAsinhY;\n\n// dim is logical (getClientBoundingRect) pixels, not canvas pixels\nfunction findIncr(minVal, maxVal, incrs, dim, minSpace) {\n\tlet intDigits = max(numIntDigits(minVal), numIntDigits(maxVal));\n\n\tlet delta = maxVal - minVal;\n\n\tlet incrIdx = closestIdx((minSpace / dim) * delta, incrs);\n\n\tdo {\n\t\tlet foundIncr = incrs[incrIdx];\n\t\tlet foundSpace = dim * foundIncr / delta;\n\n\t\tif (foundSpace >= minSpace && intDigits + (foundIncr < 5 ? fixedDec.get(foundIncr) : 0) <= 17)\n\t\t\treturn [foundIncr, foundSpace];\n\t} while (++incrIdx < incrs.length);\n\n\treturn [0, 0];\n}\n\nfunction pxRatioFont(font) {\n\tlet fontSize, fontSizeCss;\n\tfont = font.replace(/(\\d+)px/, (m, p1) => (fontSize = round((fontSizeCss = +p1) * pxRatio)) + 'px');\n\treturn [font, fontSize, fontSizeCss];\n}\n\nfunction syncFontSize(axis) {\n\tif (axis.show) {\n\t\t[axis.font, axis.labelFont].forEach(f => {\n\t\t\tlet size = roundDec(f[2] * pxRatio, 1);\n\t\t\tf[0] = f[0].replace(/[0-9.]+px/, size + 'px');\n\t\t\tf[1] = size;\n\t\t});\n\t}\n}\n\nfunction uPlot(opts, data, then) {\n\tconst self = {\n\t\tmode: ifNull(opts.mode, 1),\n\t};\n\n\tconst mode = self.mode;\n\n\tfunction getHPos(val, scale, dim, off) {\n\t\tlet pct = scale.valToPct(val);\n\t\treturn off + dim * (scale.dir == -1 ? (1 - pct) : pct);\n\t}\n\n\tfunction getVPos(val, scale, dim, off) {\n\t\tlet pct = scale.valToPct(val);\n\t\treturn off + dim * (scale.dir == -1 ? pct : (1 - pct));\n\t}\n\n\tfunction getPos(val, scale, dim, off) {\n\t\treturn scale.ori == 0 ? getHPos(val, scale, dim, off) : getVPos(val, scale, dim, off);\n\t}\n\n\tself.valToPosH = getHPos;\n\tself.valToPosV = getVPos;\n\n\tlet ready = false;\n\tself.status = 0;\n\n\tconst root = self.root = placeDiv(UPLOT);\n\n\tif (opts.id != null)\n\t\troot.id = opts.id;\n\n\taddClass(root, opts.class);\n\n\tif (opts.title) {\n\t\tlet title = placeDiv(TITLE, root);\n\t\ttitle.textContent = opts.title;\n\t}\n\n\tconst can = placeTag(\"canvas\");\n\tconst ctx = self.ctx = can.getContext(\"2d\");\n\n\tconst wrap = placeDiv(WRAP, root);\n\n\ton(\"click\", wrap, e => {\n\t\tif (e.target === over) {\n\t\t\tlet didDrag = mouseLeft1 != mouseLeft0 || mouseTop1 != mouseTop0;\n\t\t\tdidDrag && drag.click(self, e);\n\t\t}\n\t}, true);\n\n\tconst under = self.under = placeDiv(UNDER, wrap);\n\twrap.appendChild(can);\n\tconst over = self.over = placeDiv(OVER, wrap);\n\n\topts = copy(opts);\n\n\tconst pxAlign = +ifNull(opts.pxAlign, 1);\n\n\tconst pxRound = pxRoundGen(pxAlign);\n\n\t(opts.plugins || []).forEach(p => {\n\t\tif (p.opts)\n\t\t\topts = p.opts(self, opts) || opts;\n\t});\n\n\tconst ms = opts.ms || 1e-3;\n\n\tconst series  = self.series = mode == 1 ?\n\t\tsetDefaults(opts.series || [], xSeriesOpts, ySeriesOpts, false) :\n\t\tsetDefaults2(opts.series || [null], xySeriesOpts);\n\tconst axes    = self.axes   = setDefaults(opts.axes   || [], xAxisOpts,   yAxisOpts,    true);\n\tconst scales  = self.scales = {};\n\tconst bands   = self.bands  = opts.bands || [];\n\n\tbands.forEach(b => {\n\t\tb.fill = fnOrSelf(b.fill || null);\n\t\tb.dir = ifNull(b.dir, -1);\n\t});\n\n\tconst xScaleKey = mode == 2 ? series[1].facets[0].scale : series[0].scale;\n\n\tconst drawOrderMap = {\n\t\taxes: drawAxesGrid,\n\t\tseries: drawSeries,\n\t};\n\n\tconst drawOrder = (opts.drawOrder || [\"axes\", \"series\"]).map(key => drawOrderMap[key]);\n\n\tfunction initValToPct(sc) {\n\t\tconst getVal = (\n\t\t\tsc.distr == 3   ? val => log10(val > 0 ? val : sc.clamp(self, val, sc.min, sc.max, sc.key)) :\n\t\t\tsc.distr == 4   ? val => asinh(val, sc.asinh) :\n\t\t\tsc.distr == 100 ? val => sc.fwd(val) :\n\t\t\tval => val\n\t\t);\n\n\t\treturn val => {\n\t\t\tlet _val = getVal(val);\n\t\t\tlet { _min, _max } = sc;\n\t\t\tlet delta = _max - _min;\n\t\t\treturn (_val - _min) / delta;\n\t\t};\n\t}\n\n\tfunction initScale(scaleKey) {\n\t\tlet sc = scales[scaleKey];\n\n\t\tif (sc == null) {\n\t\t\tlet scaleOpts = (opts.scales || EMPTY_OBJ)[scaleKey] || EMPTY_OBJ;\n\n\t\t\tif (scaleOpts.from != null) {\n\t\t\t\t// ensure parent is initialized\n\t\t\t\tinitScale(scaleOpts.from);\n\t\t\t\t// dependent scales inherit\n\t\t\t\tlet sc = assign({}, scales[scaleOpts.from], scaleOpts, {key: scaleKey});\n\t\t\t\tsc.valToPct = initValToPct(sc);\n\t\t\t\tscales[scaleKey] = sc;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsc = scales[scaleKey] = assign({}, (scaleKey == xScaleKey ? xScaleOpts : yScaleOpts), scaleOpts);\n\n\t\t\t\tsc.key = scaleKey;\n\n\t\t\t\tlet isTime = sc.time;\n\n\t\t\t\tlet rn = sc.range;\n\n\t\t\t\tlet rangeIsArr = isArr(rn);\n\n\t\t\t\tif (scaleKey != xScaleKey || (mode == 2 && !isTime)) {\n\t\t\t\t\t// if range array has null limits, it should be auto\n\t\t\t\t\tif (rangeIsArr && (rn[0] == null || rn[1] == null)) {\n\t\t\t\t\t\trn = {\n\t\t\t\t\t\t\tmin: rn[0] == null ? autoRangePart : {\n\t\t\t\t\t\t\t\tmode: 1,\n\t\t\t\t\t\t\t\thard: rn[0],\n\t\t\t\t\t\t\t\tsoft: rn[0],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmax: rn[1] == null ? autoRangePart : {\n\t\t\t\t\t\t\t\tmode: 1,\n\t\t\t\t\t\t\t\thard: rn[1],\n\t\t\t\t\t\t\t\tsoft: rn[1],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\trangeIsArr = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!rangeIsArr && isObj(rn)) {\n\t\t\t\t\t\tlet cfg = rn;\n\t\t\t\t\t\t// this is similar to snapNumY\n\t\t\t\t\t\trn = (self, dataMin, dataMax) => dataMin == null ? nullNullTuple : rangeNum(dataMin, dataMax, cfg);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsc.range = fnOrSelf(rn || (isTime ? snapTimeX : scaleKey == xScaleKey ?\n\t\t\t\t\t(sc.distr == 3 ? snapLogX : sc.distr == 4 ? snapAsinhX : snapNumX) :\n\t\t\t\t\t(sc.distr == 3 ? snapLogY : sc.distr == 4 ? snapAsinhY : snapNumY)\n\t\t\t\t));\n\n\t\t\t\tsc.auto = fnOrSelf(rangeIsArr ? false : sc.auto);\n\n\t\t\t\tsc.clamp = fnOrSelf(sc.clamp || clampScale);\n\n\t\t\t\t// caches for expensive ops like asinh() & log()\n\t\t\t\tsc._min = sc._max = null;\n\n\t\t\t\tsc.valToPct = initValToPct(sc);\n\t\t\t}\n\t\t}\n\t}\n\n\tinitScale(\"x\");\n\tinitScale(\"y\");\n\n\t// TODO: init scales from facets in mode: 2\n\tif (mode == 1) {\n\t\tseries.forEach(s => {\n\t\t\tinitScale(s.scale);\n\t\t});\n\t}\n\n\taxes.forEach(a => {\n\t\tinitScale(a.scale);\n\t});\n\n\tfor (let k in opts.scales)\n\t\tinitScale(k);\n\n\tconst scaleX = scales[xScaleKey];\n\n\tconst xScaleDistr = scaleX.distr;\n\n\tlet valToPosX, valToPosY;\n\n\tif (scaleX.ori == 0) {\n\t\taddClass(root, ORI_HZ);\n\t\tvalToPosX = getHPos;\n\t\tvalToPosY = getVPos;\n\t\t/*\n\t\tupdOriDims = () => {\n\t\t\txDimCan = plotWid;\n\t\t\txOffCan = plotLft;\n\t\t\tyDimCan = plotHgt;\n\t\t\tyOffCan = plotTop;\n\n\t\t\txDimCss = plotWidCss;\n\t\t\txOffCss = plotLftCss;\n\t\t\tyDimCss = plotHgtCss;\n\t\t\tyOffCss = plotTopCss;\n\t\t};\n\t\t*/\n\t}\n\telse {\n\t\taddClass(root, ORI_VT);\n\t\tvalToPosX = getVPos;\n\t\tvalToPosY = getHPos;\n\t\t/*\n\t\tupdOriDims = () => {\n\t\t\txDimCan = plotHgt;\n\t\t\txOffCan = plotTop;\n\t\t\tyDimCan = plotWid;\n\t\t\tyOffCan = plotLft;\n\n\t\t\txDimCss = plotHgtCss;\n\t\t\txOffCss = plotTopCss;\n\t\t\tyDimCss = plotWidCss;\n\t\t\tyOffCss = plotLftCss;\n\t\t};\n\t\t*/\n\t}\n\n\tconst pendScales = {};\n\n\t// explicitly-set initial scales\n\tfor (let k in scales) {\n\t\tlet sc = scales[k];\n\n\t\tif (sc.min != null || sc.max != null) {\n\t\t\tpendScales[k] = {min: sc.min, max: sc.max};\n\t\t\tsc.min = sc.max = null;\n\t\t}\n\t}\n\n//\tself.tz = opts.tz || Intl.DateTimeFormat().resolvedOptions().timeZone;\n\tconst _tzDate  = (opts.tzDate || (ts => new Date(round(ts / ms))));\n\tconst _fmtDate = (opts.fmtDate || fmtDate);\n\n\tconst _timeAxisSplits = (ms == 1 ? timeAxisSplitsMs(_tzDate) : timeAxisSplitsS(_tzDate));\n\tconst _timeAxisVals   = timeAxisVals(_tzDate, timeAxisStamps((ms == 1 ? _timeAxisStampsMs : _timeAxisStampsS), _fmtDate));\n\tconst _timeSeriesVal  = timeSeriesVal(_tzDate, timeSeriesStamp(_timeSeriesStamp, _fmtDate));\n\n\tconst activeIdxs = [];\n\n\tconst legend     = (self.legend = assign({}, legendOpts, opts.legend));\n\tconst cursor     =                (self.cursor = assign({}, cursorOpts, {drag: {y: mode == 2}}, opts.cursor));\n\tconst showLegend = legend.show;\n\tconst showCursor =                cursor.show;\n\tconst markers    = legend.markers;\n\n\t{\n\t\tlegend.idxs = activeIdxs;\n\n\t\tmarkers.width  = fnOrSelf(markers.width);\n\t\tmarkers.dash   = fnOrSelf(markers.dash);\n\t\tmarkers.stroke = fnOrSelf(markers.stroke);\n\t\tmarkers.fill   = fnOrSelf(markers.fill);\n\t}\n\n\tlet legendTable;\n\tlet legendHead;\n\tlet legendBody;\n\tlet legendRows = [];\n\tlet legendCells = [];\n\tlet legendCols;\n\tlet multiValLegend = false;\n\tlet NULL_LEGEND_VALUES = {};\n\n\tif (legend.live) {\n\t\tconst getMultiVals = series[1] ? series[1].values : null;\n\t\tmultiValLegend = getMultiVals != null;\n\t\tlegendCols = multiValLegend ? getMultiVals(self, 1, 0) : {_: 0};\n\n\t\tfor (let k in legendCols)\n\t\t\tNULL_LEGEND_VALUES[k] = LEGEND_DISP;\n\t}\n\n\tif (showLegend) {\n\t\tlegendTable = placeTag(\"table\", LEGEND, root);\n\t\tlegendBody = placeTag(\"tbody\", null, legendTable);\n\n\t\t// allows legend to be moved out of root\n\t\tlegend.mount(self, legendTable);\n\n\t\tif (multiValLegend) {\n\t\t\tlegendHead = placeTag(\"thead\", null, legendTable, legendBody);\n\n\t\t\tlet head = placeTag(\"tr\", null, legendHead);\n\t\t\tplaceTag(\"th\", null, head);\n\n\t\t\tfor (var key in legendCols)\n\t\t\t\tplaceTag(\"th\", LEGEND_LABEL, head).textContent = key;\n\t\t}\n\t\telse {\n\t\t\taddClass(legendTable, LEGEND_INLINE);\n\t\t\tlegend.live && addClass(legendTable, LEGEND_LIVE);\n\t\t}\n\t}\n\n\tconst son  = {show: true};\n\tconst soff = {show: false};\n\n\tfunction initLegendRow(s, i) {\n\t\tif (i == 0 && (multiValLegend || !legend.live || mode == 2))\n\t\t\treturn nullNullTuple;\n\n\t\tlet cells = [];\n\n\t\tlet row = placeTag(\"tr\", LEGEND_SERIES, legendBody, legendBody.childNodes[i]);\n\n\t\taddClass(row, s.class);\n\n\t\tif (!s.show)\n\t\t\taddClass(row, OFF);\n\n\t\tlet label = placeTag(\"th\", null, row);\n\n\t\tif (markers.show) {\n\t\t\tlet indic = placeDiv(LEGEND_MARKER, label);\n\n\t\t\tif (i > 0) {\n\t\t\t\tlet width  = markers.width(self, i);\n\n\t\t\t\tif (width)\n\t\t\t\t\tindic.style.border = width + \"px \" + markers.dash(self, i) + \" \" + markers.stroke(self, i);\n\n\t\t\t\tindic.style.background = markers.fill(self, i);\n\t\t\t}\n\t\t}\n\n\t\tlet text = placeDiv(LEGEND_LABEL, label);\n\n\t\tif (s.label instanceof HTMLElement)\n\t\t\ttext.appendChild(s.label);\n\t\telse\n\t\t\ttext.textContent = s.label;\n\n\t\tif (i > 0) {\n\t\t\tif (!markers.show)\n\t\t\t\ttext.style.color = s.width > 0 ? markers.stroke(self, i) : markers.fill(self, i);\n\n\t\t\tonMouse(\"click\", label, e => {\n\t\t\t\tif (cursor._lock)\n\t\t\t\t\treturn;\n\n\t\t\t\tsetCursorEvent(e);\n\n\t\t\t\tlet seriesIdx = series.indexOf(s);\n\n\t\t\t\tif ((e.ctrlKey || e.metaKey) != legend.isolate) {\n\t\t\t\t\t// if any other series is shown, isolate this one. else show all\n\t\t\t\t\tlet isolate = series.some((s, i) => i > 0 && i != seriesIdx && s.show);\n\n\t\t\t\t\tseries.forEach((s, i) => {\n\t\t\t\t\t\ti > 0 && setSeries(i, isolate ? (i == seriesIdx ? son : soff) : son, true, syncOpts.setSeries);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tsetSeries(seriesIdx, {show: !s.show}, true, syncOpts.setSeries);\n\t\t\t}, false);\n\n\t\t\tif (cursorFocus) {\n\t\t\t\tonMouse(mouseenter, label, e => {\n\t\t\t\t\tif (cursor._lock)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tsetCursorEvent(e);\n\n\t\t\t\t\tsetSeries(series.indexOf(s), FOCUS_TRUE, true, syncOpts.setSeries);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\n\t\tfor (var key in legendCols) {\n\t\t\tlet v = placeTag(\"td\", LEGEND_VALUE, row);\n\t\t\tv.textContent = \"--\";\n\t\t\tcells.push(v);\n\t\t}\n\n\t\treturn [row, cells];\n\t}\n\n\tconst mouseListeners = new Map();\n\n\tfunction onMouse(ev, targ, fn, onlyTarg = true) {\n\t\tconst targListeners = mouseListeners.get(targ) || {};\n\t\tconst listener = cursor.bind[ev](self, targ, fn, onlyTarg);\n\n\t\tif (listener) {\n\t\t\ton(ev, targ, targListeners[ev] = listener);\n\t\t\tmouseListeners.set(targ, targListeners);\n\t\t}\n\t}\n\n\tfunction offMouse(ev, targ, fn) {\n\t\tconst targListeners = mouseListeners.get(targ) || {};\n\n\t\tfor (let k in targListeners) {\n\t\t\tif (ev == null || k == ev) {\n\t\t\t\toff(k, targ, targListeners[k]);\n\t\t\t\tdelete targListeners[k];\n\t\t\t}\n\t\t}\n\n\t\tif (ev == null)\n\t\t\tmouseListeners.delete(targ);\n\t}\n\n\tlet fullWidCss = 0;\n\tlet fullHgtCss = 0;\n\n\tlet plotWidCss = 0;\n\tlet plotHgtCss = 0;\n\n\t// plot margins to account for axes\n\tlet plotLftCss = 0;\n\tlet plotTopCss = 0;\n\n\t// previous values for diffing\n\tlet _plotLftCss = plotLftCss;\n\tlet _plotTopCss = plotTopCss;\n\tlet _plotWidCss = plotWidCss;\n\tlet _plotHgtCss = plotHgtCss;\n\n\n\tlet plotLft = 0;\n\tlet plotTop = 0;\n\tlet plotWid = 0;\n\tlet plotHgt = 0;\n\n\tself.bbox = {};\n\n\tlet shouldSetScales = false;\n\tlet shouldSetSize = false;\n\tlet shouldConvergeSize = false;\n\tlet shouldSetCursor = false;\n\tlet shouldSetSelect = false;\n\tlet shouldSetLegend = false;\n\n\tfunction _setSize(width, height, force) {\n\t\tif (force || (width != self.width || height != self.height))\n\t\t\tcalcSize(width, height);\n\n\t\tresetYSeries(false);\n\n\t\tshouldConvergeSize = true;\n\t\tshouldSetSize = true;\n\n\t\tcommit();\n\t}\n\n\tfunction calcSize(width, height) {\n\t//\tlog(\"calcSize()\", arguments);\n\n\t\tself.width  = fullWidCss = plotWidCss = width;\n\t\tself.height = fullHgtCss = plotHgtCss = height;\n\t\tplotLftCss  = plotTopCss = 0;\n\n\t\tcalcPlotRect();\n\t\tcalcAxesRects();\n\n\t\tlet bb = self.bbox;\n\n\t\tplotLft = bb.left   = incrRound(plotLftCss * pxRatio, 0.5);\n\t\tplotTop = bb.top    = incrRound(plotTopCss * pxRatio, 0.5);\n\t\tplotWid = bb.width  = incrRound(plotWidCss * pxRatio, 0.5);\n\t\tplotHgt = bb.height = incrRound(plotHgtCss * pxRatio, 0.5);\n\n\t//\tupdOriDims();\n\t}\n\n\t// ensures size calc convergence\n\tconst CYCLE_LIMIT = 3;\n\n\tfunction convergeSize() {\n\t\tlet converged = false;\n\n\t\tlet cycleNum = 0;\n\n\t\twhile (!converged) {\n\t\t\tcycleNum++;\n\n\t\t\tlet axesConverged = axesCalc(cycleNum);\n\t\t\tlet paddingConverged = paddingCalc(cycleNum);\n\n\t\t\tconverged = cycleNum == CYCLE_LIMIT || (axesConverged && paddingConverged);\n\n\t\t\tif (!converged) {\n\t\t\t\tcalcSize(self.width, self.height);\n\t\t\t\tshouldSetSize = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setSize({width, height}) {\n\t\t_setSize(width, height);\n\t}\n\n\tself.setSize = setSize;\n\n\t// accumulate axis offsets, reduce canvas width\n\tfunction calcPlotRect() {\n\t\t// easements for edge labels\n\t\tlet hasTopAxis = false;\n\t\tlet hasBtmAxis = false;\n\t\tlet hasRgtAxis = false;\n\t\tlet hasLftAxis = false;\n\n\t\taxes.forEach((axis, i) => {\n\t\t\tif (axis.show && axis._show) {\n\t\t\t\tlet {side, _size} = axis;\n\t\t\t\tlet isVt = side % 2;\n\t\t\t\tlet labelSize = axis.label != null ? axis.labelSize : 0;\n\n\t\t\t\tlet fullSize = _size + labelSize;\n\n\t\t\t\tif (fullSize > 0) {\n\t\t\t\t\tif (isVt) {\n\t\t\t\t\t\tplotWidCss -= fullSize;\n\n\t\t\t\t\t\tif (side == 3) {\n\t\t\t\t\t\t\tplotLftCss += fullSize;\n\t\t\t\t\t\t\thasLftAxis = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\thasRgtAxis = true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplotHgtCss -= fullSize;\n\n\t\t\t\t\t\tif (side == 0) {\n\t\t\t\t\t\t\tplotTopCss += fullSize;\n\t\t\t\t\t\t\thasTopAxis = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\thasBtmAxis = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tsidesWithAxes[0] = hasTopAxis;\n\t\tsidesWithAxes[1] = hasRgtAxis;\n\t\tsidesWithAxes[2] = hasBtmAxis;\n\t\tsidesWithAxes[3] = hasLftAxis;\n\n\t\t// hz padding\n\t\tplotWidCss -= _padding[1] + _padding[3];\n\t\tplotLftCss += _padding[3];\n\n\t\t// vt padding\n\t\tplotHgtCss -= _padding[2] + _padding[0];\n\t\tplotTopCss += _padding[0];\n\t}\n\n\tfunction calcAxesRects() {\n\t\t// will accum +\n\t\tlet off1 = plotLftCss + plotWidCss;\n\t\tlet off2 = plotTopCss + plotHgtCss;\n\t\t// will accum -\n\t\tlet off3 = plotLftCss;\n\t\tlet off0 = plotTopCss;\n\n\t\tfunction incrOffset(side, size) {\n\t\t\tswitch (side) {\n\t\t\t\tcase 1: off1 += size; return off1 - size;\n\t\t\t\tcase 2: off2 += size; return off2 - size;\n\t\t\t\tcase 3: off3 -= size; return off3 + size;\n\t\t\t\tcase 0: off0 -= size; return off0 + size;\n\t\t\t}\n\t\t}\n\n\t\taxes.forEach((axis, i) => {\n\t\t\tif (axis.show && axis._show) {\n\t\t\t\tlet side = axis.side;\n\n\t\t\t\taxis._pos = incrOffset(side, axis._size);\n\n\t\t\t\tif (axis.label != null)\n\t\t\t\t\taxis._lpos = incrOffset(side, axis.labelSize);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cursor.dataIdx == null) {\n\t\tlet hov = cursor.hover;\n\n\t\tlet skip = hov.skip = new Set(hov.skip ?? []);\n\t\tskip.add(void 0); // alignment artifacts\n\t\tlet prox = hov.prox = fnOrSelf(hov.prox);\n\t\tlet bias = hov.bias ??= 0;\n\n\t\t// TODO: only scan between in-view idxs (i0, i1)\n\t\tcursor.dataIdx = (self, seriesIdx, cursorIdx, valAtPosX) => {\n\t\t\tif (seriesIdx == 0)\n\t\t\t\treturn cursorIdx;\n\n\t\t\tlet idx2 = cursorIdx;\n\n\t\t\tlet _prox = prox(self, seriesIdx, cursorIdx, valAtPosX) ?? inf;\n\t\t\tlet withProx = _prox >= 0 && _prox < inf;\n\t\t\tlet xDim = scaleX.ori == 0 ? plotWidCss : plotHgtCss;\n\t\t\tlet cursorLft = cursor.left;\n\n\t\t\tlet xValues = data[0];\n\t\t\tlet yValues = data[seriesIdx];\n\n\t\t\tif (skip.has(yValues[cursorIdx])) {\n\t\t\t\tidx2 = null;\n\n\t\t\t\tlet nonNullLft = null,\n\t\t\t\t\tnonNullRgt = null,\n\t\t\t\t\tj;\n\n\t\t\t\tif (bias == 0 || bias == -1) {\n\t\t\t\t\tj = cursorIdx;\n\t\t\t\t\twhile (nonNullLft == null && j-- > 0) {\n\t\t\t\t\t\tif (!skip.has(yValues[j]))\n\t\t\t\t\t\t\tnonNullLft = j;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (bias == 0 || bias == 1) {\n\t\t\t\t\tj = cursorIdx;\n\t\t\t\t\twhile (nonNullRgt == null && j++ < yValues.length) {\n\t\t\t\t\t\tif (!skip.has(yValues[j]))\n\t\t\t\t\t\t\tnonNullRgt = j;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (nonNullLft != null || nonNullRgt != null) {\n\t\t\t\t\tif (withProx) {\n\t\t\t\t\t\tlet lftPos = nonNullLft == null ? -Infinity : valToPosX(xValues[nonNullLft], scaleX, xDim, 0);\n\t\t\t\t\t\tlet rgtPos = nonNullRgt == null ?  Infinity : valToPosX(xValues[nonNullRgt], scaleX, xDim, 0);\n\n\t\t\t\t\t\tlet lftDelta = cursorLft - lftPos;\n\t\t\t\t\t\tlet rgtDelta = rgtPos - cursorLft;\n\n\t\t\t\t\t\tif (lftDelta <= rgtDelta) {\n\t\t\t\t\t\t\tif (lftDelta <= _prox)\n\t\t\t\t\t\t\t\tidx2 = nonNullLft;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (rgtDelta <= _prox)\n\t\t\t\t\t\t\t\tidx2 = nonNullRgt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tidx2 =\n\t\t\t\t\t\t\tnonNullRgt == null ? nonNullLft :\n\t\t\t\t\t\t\tnonNullLft == null ? nonNullRgt :\n\t\t\t\t\t\t\tcursorIdx - nonNullLft <= nonNullRgt - cursorIdx ? nonNullLft : nonNullRgt;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (withProx) {\n\t\t\t\tlet dist = abs(cursorLft - valToPosX(xValues[cursorIdx], scaleX, xDim, 0));\n\n\t\t\t\tif (dist > _prox)\n\t\t\t\t\tidx2 = null;\n\t\t\t}\n\n\t\t\treturn idx2;\n\t\t};\n\t}\n\n\tconst setCursorEvent = e => { cursor.event = e; };\n\n\tcursor.idxs = activeIdxs;\n\n\tcursor._lock = false;\n\n\tlet points = cursor.points;\n\n\tpoints.show   = fnOrSelf(points.show);\n\tpoints.size   = fnOrSelf(points.size);\n\tpoints.stroke = fnOrSelf(points.stroke);\n\tpoints.width  = fnOrSelf(points.width);\n\tpoints.fill   = fnOrSelf(points.fill);\n\n\tconst focus = self.focus = assign({}, opts.focus || {alpha: 0.3}, cursor.focus);\n\n\tconst cursorFocus = focus.prox >= 0;\n\tconst cursorOnePt = cursorFocus && points.one;\n\n\t// series-intersection markers\n\tlet cursorPts = [];\n\t// position caches in CSS pixels\n\tlet cursorPtsLft = [];\n\tlet cursorPtsTop = [];\n\n\tfunction initCursorPt(s, si) {\n\t\tlet pt = points.show(self, si);\n\n\t\tif (pt instanceof HTMLElement) {\n\t\t\taddClass(pt, CURSOR_PT);\n\t\t\taddClass(pt, s.class);\n\t\t\telTrans(pt, -10, -10, plotWidCss, plotHgtCss);\n\t\t\tover.insertBefore(pt, cursorPts[si]);\n\n\t\t\treturn pt;\n\t\t}\n\t}\n\n\tfunction initSeries(s, i) {\n\t\tif (mode == 1 || i > 0) {\n\t\t\tlet isTime = mode == 1 && scales[s.scale].time;\n\n\t\t\tlet sv = s.value;\n\t\t\ts.value = isTime ? (isStr(sv) ? timeSeriesVal(_tzDate, timeSeriesStamp(sv, _fmtDate)) : sv || _timeSeriesVal) : sv || numSeriesVal;\n\t\t\ts.label = s.label || (isTime ? timeSeriesLabel : numSeriesLabel);\n\t\t}\n\n\t\tif (cursorOnePt || i > 0) {\n\t\t\ts.width  = s.width == null ? 1 : s.width;\n\t\t\ts.paths  = s.paths || linearPath || retNull;\n\t\t\ts.fillTo = fnOrSelf(s.fillTo || seriesFillTo);\n\t\t\ts.pxAlign = +ifNull(s.pxAlign, pxAlign);\n\t\t\ts.pxRound = pxRoundGen(s.pxAlign);\n\n\t\t\ts.stroke = fnOrSelf(s.stroke || null);\n\t\t\ts.fill   = fnOrSelf(s.fill || null);\n\t\t\ts._stroke = s._fill = s._paths = s._focus = null;\n\n\t\t\tlet _ptDia = ptDia(max(1, s.width), 1);\n\t\t\tlet points = s.points = assign({}, {\n\t\t\t\tsize: _ptDia,\n\t\t\t\twidth: max(1, _ptDia * .2),\n\t\t\t\tstroke: s.stroke,\n\t\t\t\tspace: _ptDia * 2,\n\t\t\t\tpaths: pointsPath,\n\t\t\t\t_stroke: null,\n\t\t\t\t_fill: null,\n\t\t\t}, s.points);\n\t\t\tpoints.show   = fnOrSelf(points.show);\n\t\t\tpoints.filter = fnOrSelf(points.filter);\n\t\t\tpoints.fill   = fnOrSelf(points.fill);\n\t\t\tpoints.stroke = fnOrSelf(points.stroke);\n\t\t\tpoints.paths  = fnOrSelf(points.paths);\n\t\t\tpoints.pxAlign = s.pxAlign;\n\t\t}\n\n\t\tif (showLegend) {\n\t\t\tlet rowCells = initLegendRow(s, i);\n\t\t\tlegendRows.splice(i, 0, rowCells[0]);\n\t\t\tlegendCells.splice(i, 0, rowCells[1]);\n\t\t\tlegend.values.push(null);\t// NULL_LEGEND_VALS not yet avil here :(\n\t\t}\n\n\t\tif (showCursor) {\n\t\t\tactiveIdxs.splice(i, 0, null);\n\n\t\t\tlet pt = null;\n\n\t\t\tif (cursorOnePt) {\n\t\t\t\tif (i == 0)\n\t\t\t\t\tpt = initCursorPt(s, i);\n\t\t\t}\n\t\t\telse if (i > 0)\n\t\t\t\tpt = initCursorPt(s, i);\n\n\t\t\tcursorPts.splice(i, 0, pt);\n\t\t\tcursorPtsLft.splice(i, 0, 0);\n\t\t\tcursorPtsTop.splice(i, 0, 0);\n\t\t}\n\n\t\tfire(\"addSeries\", i);\n\t}\n\n\tfunction addSeries(opts, si) {\n\t\tsi = si == null ? series.length : si;\n\n\t\topts = mode == 1 ? setDefault(opts, si, xSeriesOpts, ySeriesOpts) : setDefault(opts, si, {}, xySeriesOpts);\n\n\t\tseries.splice(si, 0, opts);\n\t\tinitSeries(series[si], si);\n\t}\n\n\tself.addSeries = addSeries;\n\n\tfunction delSeries(i) {\n\t\tseries.splice(i, 1);\n\n\t\tif (showLegend) {\n\t\t\tlegend.values.splice(i, 1);\n\n\t\t\tlegendCells.splice(i, 1);\n\t\t\tlet tr = legendRows.splice(i, 1)[0];\n\t\t\toffMouse(null, tr.firstChild);\n\t\t\ttr.remove();\n\t\t}\n\n\t\tif (showCursor) {\n\t\t\tactiveIdxs.splice(i, 1);\n\t\t\tcursorPts.splice(i, 1)[0].remove();\n\t\t\tcursorPtsLft.splice(i, 1);\n\t\t\tcursorPtsTop.splice(i, 1);\n\t\t}\n\n\t\t// TODO: de-init no-longer-needed scales?\n\n\t\tfire(\"delSeries\", i);\n\t}\n\n\tself.delSeries = delSeries;\n\n\tconst sidesWithAxes = [false, false, false, false];\n\n\tfunction initAxis(axis, i) {\n\t\taxis._show = axis.show;\n\n\t\tif (axis.show) {\n\t\t\tlet isVt = axis.side % 2;\n\n\t\t\tlet sc = scales[axis.scale];\n\n\t\t\t// this can occur if all series specify non-default scales\n\t\t\tif (sc == null) {\n\t\t\t\taxis.scale = isVt ? series[1].scale : xScaleKey;\n\t\t\t\tsc = scales[axis.scale];\n\t\t\t}\n\n\t\t\t// also set defaults for incrs & values based on axis distr\n\t\t\tlet isTime = sc.time;\n\n\t\t\taxis.size   = fnOrSelf(axis.size);\n\t\t\taxis.space  = fnOrSelf(axis.space);\n\t\t\taxis.rotate = fnOrSelf(axis.rotate);\n\n\t\t\tif (isArr(axis.incrs)) {\n\t\t\t\taxis.incrs.forEach(incr => {\n\t\t\t\t\t!fixedDec.has(incr) && fixedDec.set(incr, guessDec(incr));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\taxis.incrs  = fnOrSelf(axis.incrs  || (          sc.distr == 2 ? wholeIncrs : (isTime ? (ms == 1 ? timeIncrsMs : timeIncrsS) : numIncrs)));\n\t\t\taxis.splits = fnOrSelf(axis.splits || (isTime && sc.distr == 1 ? _timeAxisSplits : sc.distr == 3 ? logAxisSplits : sc.distr == 4 ? asinhAxisSplits : numAxisSplits));\n\n\t\t\taxis.stroke        = fnOrSelf(axis.stroke);\n\t\t\taxis.grid.stroke   = fnOrSelf(axis.grid.stroke);\n\t\t\taxis.ticks.stroke  = fnOrSelf(axis.ticks.stroke);\n\t\t\taxis.border.stroke = fnOrSelf(axis.border.stroke);\n\n\t\t\tlet av = axis.values;\n\n\t\t\taxis.values = (\n\t\t\t\t// static array of tick values\n\t\t\t\tisArr(av) && !isArr(av[0]) ? fnOrSelf(av) :\n\t\t\t\t// temporal\n\t\t\t\tisTime ? (\n\t\t\t\t\t// config array of fmtDate string tpls\n\t\t\t\t\tisArr(av) ?\n\t\t\t\t\t\ttimeAxisVals(_tzDate, timeAxisStamps(av, _fmtDate)) :\n\t\t\t\t\t// fmtDate string tpl\n\t\t\t\t\tisStr(av) ?\n\t\t\t\t\t\ttimeAxisVal(_tzDate, av) :\n\t\t\t\t\tav || _timeAxisVals\n\t\t\t\t) : av || numAxisVals\n\t\t\t);\n\n\t\t\taxis.filter = fnOrSelf(axis.filter || (          sc.distr >= 3 && sc.log == 10 ? log10AxisValsFilt : sc.distr == 3 && sc.log == 2 ? log2AxisValsFilt : retArg1));\n\n\t\t\taxis.font      = pxRatioFont(axis.font);\n\t\t\taxis.labelFont = pxRatioFont(axis.labelFont);\n\n\t\t\taxis._size   = axis.size(self, null, i, 0);\n\n\t\t\taxis._space  =\n\t\t\taxis._rotate =\n\t\t\taxis._incrs  =\n\t\t\taxis._found  =\t// foundIncrSpace\n\t\t\taxis._splits =\n\t\t\taxis._values = null;\n\n\t\t\tif (axis._size > 0) {\n\t\t\t\tsidesWithAxes[i] = true;\n\t\t\t\taxis._el = placeDiv(AXIS, wrap);\n\t\t\t}\n\n\t\t\t// debug\n\t\t//\taxis._el.style.background = \"#\"  + Math.floor(Math.random()*16777215).toString(16) + '80';\n\t\t}\n\t}\n\n\tfunction autoPadSide(self, side, sidesWithAxes, cycleNum) {\n\t\tlet [hasTopAxis, hasRgtAxis, hasBtmAxis, hasLftAxis] = sidesWithAxes;\n\n\t\tlet ori = side % 2;\n\t\tlet size = 0;\n\n\t\tif (ori == 0 && (hasLftAxis || hasRgtAxis))\n\t\t\tsize = (side == 0 && !hasTopAxis || side == 2 && !hasBtmAxis ? round(xAxisOpts.size / 3) : 0);\n\t\tif (ori == 1 && (hasTopAxis || hasBtmAxis))\n\t\t\tsize = (side == 1 && !hasRgtAxis || side == 3 && !hasLftAxis ? round(yAxisOpts.size / 2) : 0);\n\n\t\treturn size;\n\t}\n\n\tconst padding = self.padding = (opts.padding || [autoPadSide,autoPadSide,autoPadSide,autoPadSide]).map(p => fnOrSelf(ifNull(p, autoPadSide)));\n\tconst _padding = self._padding = padding.map((p, i) => p(self, i, sidesWithAxes, 0));\n\n\tlet dataLen;\n\n\t// rendered data window\n\tlet i0 = null;\n\tlet i1 = null;\n\tconst idxs = mode == 1 ? series[0].idxs : null;\n\n\tlet data0 = null;\n\n\tlet viaAutoScaleX = false;\n\n\tfunction setData(_data, _resetScales) {\n\t\tdata = _data == null ? [] : _data;\n\n\t\tself.data = self._data = data;\n\n\t\tif (mode == 2) {\n\t\t\tdataLen = 0;\n\t\t\tfor (let i = 1; i < series.length; i++)\n\t\t\t\tdataLen += data[i][0].length;\n\t\t}\n\t\telse {\n\t\t\tif (data.length == 0)\n\t\t\t\tself.data = self._data = data = [[]];\n\n\t\t\tdata0 = data[0];\n\t\t\tdataLen = data0.length;\n\n\t\t\tlet scaleData = data;\n\n\t\t\tif (xScaleDistr == 2) {\n\t\t\t\tscaleData = data.slice();\n\n\t\t\t\tlet _data0 = scaleData[0] = Array(dataLen);\n\t\t\t\tfor (let i = 0; i < dataLen; i++)\n\t\t\t\t\t_data0[i] = i;\n\t\t\t}\n\n\t\t\tself._data = data = scaleData;\n\t\t}\n\n\t\tresetYSeries(true);\n\n\t\tfire(\"setData\");\n\n\t\t// forces x axis tick values to re-generate when neither x scale nor y scale changes\n\t\t// in ordinal mode, scale range is by index, so will not change if new data has same length, but tick values are from data\n\t\tif (xScaleDistr == 2) {\n\t\t\tshouldConvergeSize = true;\n\n\t\t\t/* or somewhat cheaper, and uglier:\n\t\t\tif (ready) {\n\t\t\t\t// logic extracted from axesCalc()\n\t\t\t\tlet i = 0;\n\t\t\t\tlet axis = axes[i];\n\t\t\t\tlet _splits = axis._splits.map(i => data0[i]);\n\t\t\t\tlet [_incr, _space] = axis._found;\n\t\t\t\tlet incr = data0[_splits[1]] - data0[_splits[0]];\n\t\t\t\taxis._values = axis.values(self, axis.filter(self, _splits, i, _space, incr), i, _space, incr);\n\t\t\t}\n\t\t\t*/\n\t\t}\n\n\t\tif (_resetScales !== false) {\n\t\t\tlet xsc = scaleX;\n\n\t\t\tif (xsc.auto(self, viaAutoScaleX))\n\t\t\t\tautoScaleX();\n\t\t\telse\n\t\t\t\t_setScale(xScaleKey, xsc.min, xsc.max);\n\n\t\t\tshouldSetCursor = shouldSetCursor || cursor.left >= 0;\n\t\t\tshouldSetLegend = true;\n\t\t\tcommit();\n\t\t}\n\t}\n\n\tself.setData = setData;\n\n\tfunction autoScaleX() {\n\t\tviaAutoScaleX = true;\n\n\t\tlet _min, _max;\n\n\t\tif (mode == 1) {\n\t\t\tif (dataLen > 0) {\n\t\t\t\ti0 = idxs[0] = 0;\n\t\t\t\ti1 = idxs[1] = dataLen - 1;\n\n\t\t\t\t_min = data[0][i0];\n\t\t\t\t_max = data[0][i1];\n\n\t\t\t\tif (xScaleDistr == 2) {\n\t\t\t\t\t_min = i0;\n\t\t\t\t\t_max = i1;\n\t\t\t\t}\n\t\t\t\telse if (_min == _max) {\n\t\t\t\t\tif (xScaleDistr == 3)\n\t\t\t\t\t\t[_min, _max] = rangeLog(_min, _min, scaleX.log, false);\n\t\t\t\t\telse if (xScaleDistr == 4)\n\t\t\t\t\t\t[_min, _max] = rangeAsinh(_min, _min, scaleX.log, false);\n\t\t\t\t\telse if (scaleX.time)\n\t\t\t\t\t\t_max = _min + round(86400 / ms);\n\t\t\t\t\telse\n\t\t\t\t\t\t[_min, _max] = rangeNum(_min, _max, rangePad, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ti0 = idxs[0] = _min = null;\n\t\t\t\ti1 = idxs[1] = _max = null;\n\t\t\t}\n\t\t}\n\n\t\t_setScale(xScaleKey, _min, _max);\n\t}\n\n\tlet ctxStroke, ctxFill, ctxWidth, ctxDash, ctxJoin, ctxCap, ctxFont, ctxAlign, ctxBaseline;\n\tlet ctxAlpha;\n\n\tfunction setCtxStyle(stroke, width, dash, cap, fill, join) {\n\t\tstroke ??= transparent;\n\t\tdash   ??= EMPTY_ARR;\n\t\tcap    ??= \"butt\"; // (\u203F|\u203F)\n\t\tfill   ??= transparent;\n\t\tjoin   ??= \"round\";\n\n\t\tif (stroke != ctxStroke)\n\t\t\tctx.strokeStyle = ctxStroke = stroke;\n\t\tif (fill != ctxFill)\n\t\t\tctx.fillStyle = ctxFill = fill;\n\t\tif (width != ctxWidth)\n\t\t\tctx.lineWidth = ctxWidth = width;\n\t\tif (join != ctxJoin)\n\t\t\tctx.lineJoin = ctxJoin = join;\n\t\tif (cap != ctxCap)\n\t\t\tctx.lineCap = ctxCap = cap;\n\t\tif (dash != ctxDash)\n\t\t\tctx.setLineDash(ctxDash = dash);\n\t}\n\n\tfunction setFontStyle(font, fill, align, baseline) {\n\t\tif (fill != ctxFill)\n\t\t\tctx.fillStyle = ctxFill = fill;\n\t\tif (font != ctxFont)\n\t\t\tctx.font = ctxFont = font;\n\t\tif (align != ctxAlign)\n\t\t\tctx.textAlign = ctxAlign = align;\n\t\tif (baseline != ctxBaseline)\n\t\t\tctx.textBaseline = ctxBaseline = baseline;\n\t}\n\n\tfunction accScale(wsc, psc, facet, data, sorted = 0) {\n\t\tif (data.length > 0 && wsc.auto(self, viaAutoScaleX) && (psc == null || psc.min == null)) {\n\t\t\tlet _i0 = ifNull(i0, 0);\n\t\t\tlet _i1 = ifNull(i1, data.length - 1);\n\n\t\t\t// only run getMinMax() for invalidated series data, else reuse\n\t\t\tlet minMax = facet.min == null ? getMinMax(data, _i0, _i1, sorted, wsc.distr == 3) : [facet.min, facet.max];\n\n\t\t\t// initial min/max\n\t\t\twsc.min = min(wsc.min, facet.min = minMax[0]);\n\t\t\twsc.max = max(wsc.max, facet.max = minMax[1]);\n\t\t}\n\t}\n\n\tconst AUTOSCALE = {min: null, max: null};\n\n\tfunction setScales() {\n\t//\tlog(\"setScales()\", arguments);\n\n\t\t// implicitly add auto scales, and unranged scales\n\t\tfor (let k in scales) {\n\t\t\tlet sc = scales[k];\n\n\t\t\tif (pendScales[k] == null &&\n\t\t\t\t(\n\t\t\t\t\t// scales that have never been set (on init)\n\t\t\t\t\tsc.min == null ||\n\t\t\t\t\t// or auto scales when the x scale was explicitly set\n\t\t\t\t\tpendScales[xScaleKey] != null && sc.auto(self, viaAutoScaleX)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tpendScales[k] = AUTOSCALE;\n\t\t\t}\n\t\t}\n\n\t\t// implicitly add dependent scales\n\t\tfor (let k in scales) {\n\t\t\tlet sc = scales[k];\n\n\t\t\tif (pendScales[k] == null && sc.from != null && pendScales[sc.from] != null)\n\t\t\t\tpendScales[k] = AUTOSCALE;\n\t\t}\n\n\t\t// explicitly setting the x-scale invalidates everything (acts as redraw)\n\t\tif (pendScales[xScaleKey] != null)\n\t\t\tresetYSeries(true); // TODO: only reset series on auto scales?\n\n\t\tlet wipScales = {};\n\n\t\tfor (let k in pendScales) {\n\t\t\tlet psc = pendScales[k];\n\n\t\t\tif (psc != null) {\n\t\t\t\tlet wsc = wipScales[k] = copy(scales[k], fastIsObj);\n\n\t\t\t\tif (psc.min != null)\n\t\t\t\t\tassign(wsc, psc);\n\t\t\t\telse if (k != xScaleKey || mode == 2) {\n\t\t\t\t\tif (dataLen == 0 && wsc.from == null) {\n\t\t\t\t\t\tlet minMax = wsc.range(self, null, null, k);\n\t\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\t\twsc.max = minMax[1];\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\twsc.min = inf;\n\t\t\t\t\t\twsc.max = -inf;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dataLen > 0) {\n\t\t\t// pre-range y-scales from y series' data values\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (mode == 1) {\n\t\t\t\t\tlet k = s.scale;\n\t\t\t\t\tlet psc = pendScales[k];\n\n\t\t\t\t\tif (psc == null)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tlet wsc = wipScales[k];\n\n\t\t\t\t\tif (i == 0) {\n\t\t\t\t\t\tlet minMax = wsc.range(self, wsc.min, wsc.max, k);\n\n\t\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\t\twsc.max = minMax[1];\n\n\t\t\t\t\t\ti0 = closestIdx(wsc.min, data[0]);\n\t\t\t\t\t\ti1 = closestIdx(wsc.max, data[0]);\n\n\t\t\t\t\t\t// don't try to contract same or adjacent idxs\n\t\t\t\t\t\tif (i1 - i0 > 1) {\n\t\t\t\t\t\t\t// closest indices can be outside of view\n\t\t\t\t\t\t\tif (data[0][i0] < wsc.min)\n\t\t\t\t\t\t\t\ti0++;\n\t\t\t\t\t\t\tif (data[0][i1] > wsc.max)\n\t\t\t\t\t\t\t\ti1--;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ts.min = data0[i0];\n\t\t\t\t\t\ts.max = data0[i1];\n\t\t\t\t\t}\n\t\t\t\t\telse if (s.show && s.auto)\n\t\t\t\t\t\taccScale(wsc, psc, s, data[i], s.sorted);\n\n\t\t\t\t\ts.idxs[0] = i0;\n\t\t\t\t\ts.idxs[1] = i1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\tif (s.show && s.auto) {\n\t\t\t\t\t\t\t// TODO: only handles, assumes and requires facets[0] / 'x' scale, and facets[1] / 'y' scale\n\t\t\t\t\t\t\tlet [ xFacet, yFacet ] = s.facets;\n\t\t\t\t\t\t\tlet xScaleKey = xFacet.scale;\n\t\t\t\t\t\t\tlet yScaleKey = yFacet.scale;\n\t\t\t\t\t\t\tlet [ xData, yData ] = data[i];\n\n\t\t\t\t\t\t\tlet wscx = wipScales[xScaleKey];\n\t\t\t\t\t\t\tlet wscy = wipScales[yScaleKey];\n\n\t\t\t\t\t\t\t// null can happen when only x is zoomed, but y has static range and doesnt get auto-added to pending\n\t\t\t\t\t\t\twscx != null && accScale(wscx, pendScales[xScaleKey], xFacet, xData, xFacet.sorted);\n\t\t\t\t\t\t\twscy != null && accScale(wscy, pendScales[yScaleKey], yFacet, yData, yFacet.sorted);\n\n\t\t\t\t\t\t\t// temp\n\t\t\t\t\t\t\ts.min = yFacet.min;\n\t\t\t\t\t\t\ts.max = yFacet.max;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// range independent scales\n\t\t\tfor (let k in wipScales) {\n\t\t\t\tlet wsc = wipScales[k];\n\t\t\t\tlet psc = pendScales[k];\n\n\t\t\t\tif (wsc.from == null && (psc == null || psc.min == null)) {\n\t\t\t\t\tlet minMax = wsc.range(\n\t\t\t\t\t\tself,\n\t\t\t\t\t\twsc.min ==  inf ? null : wsc.min,\n\t\t\t\t\t\twsc.max == -inf ? null : wsc.max,\n\t\t\t\t\t\tk\n\t\t\t\t\t);\n\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\twsc.max = minMax[1];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// range dependent scales\n\t\tfor (let k in wipScales) {\n\t\t\tlet wsc = wipScales[k];\n\n\t\t\tif (wsc.from != null) {\n\t\t\t\tlet base = wipScales[wsc.from];\n\n\t\t\t\tif (base.min == null)\n\t\t\t\t\twsc.min = wsc.max = null;\n\t\t\t\telse {\n\t\t\t\t\tlet minMax = wsc.range(self, base.min, base.max, k);\n\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\twsc.max = minMax[1];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet changed = {};\n\t\tlet anyChanged = false;\n\n\t\tfor (let k in wipScales) {\n\t\t\tlet wsc = wipScales[k];\n\t\t\tlet sc = scales[k];\n\n\t\t\tif (sc.min != wsc.min || sc.max != wsc.max) {\n\t\t\t\tsc.min = wsc.min;\n\t\t\t\tsc.max = wsc.max;\n\n\t\t\t\tlet distr = sc.distr;\n\n\t\t\t\tsc._min = distr == 3 ? log10(sc.min) : distr == 4 ? asinh(sc.min, sc.asinh) : distr == 100 ? sc.fwd(sc.min) : sc.min;\n\t\t\t\tsc._max = distr == 3 ? log10(sc.max) : distr == 4 ? asinh(sc.max, sc.asinh) : distr == 100 ? sc.fwd(sc.max) : sc.max;\n\n\t\t\t\tchanged[k] = anyChanged = true;\n\t\t\t}\n\t\t}\n\n\t\tif (anyChanged) {\n\t\t\t// invalidate paths of all series on changed scales\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (mode == 2) {\n\t\t\t\t\tif (i > 0 && changed.y)\n\t\t\t\t\t\ts._paths = null;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (changed[s.scale])\n\t\t\t\t\t\ts._paths = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfor (let k in changed) {\n\t\t\t\tshouldConvergeSize = true;\n\t\t\t\tfire(\"setScale\", k);\n\t\t\t}\n\n\t\t\tif (showCursor && cursor.left >= 0)\n\t\t\t\tshouldSetCursor = shouldSetLegend = true;\n\t\t}\n\n\t\tfor (let k in pendScales)\n\t\t\tpendScales[k] = null;\n\t}\n\n\t// grabs the nearest indices with y data outside of x-scale limits\n\tfunction getOuterIdxs(ydata) {\n\t\tlet _i0 = clamp(i0 - 1, 0, dataLen - 1);\n\t\tlet _i1 = clamp(i1 + 1, 0, dataLen - 1);\n\n\t\twhile (ydata[_i0] == null && _i0 > 0)\n\t\t\t_i0--;\n\n\t\twhile (ydata[_i1] == null && _i1 < dataLen - 1)\n\t\t\t_i1++;\n\n\t\treturn [_i0, _i1];\n\t}\n\n\tfunction drawSeries() {\n\t\tif (dataLen > 0) {\n\t\t\tlet shouldAlpha = series.some(s => s._focus) && ctxAlpha != focus.alpha;\n\n\t\t\tif (shouldAlpha)\n\t\t\t\tctx.globalAlpha = ctxAlpha = focus.alpha;\n\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (i > 0 && s.show) {\n\t\t\t\t\tcacheStrokeFill(i, false);\n\t\t\t\t\tcacheStrokeFill(i, true);\n\n\t\t\t\t\tif (s._paths == null) {\n\t\t\t\t\t\tlet _ctxAlpha = ctxAlpha;\n\n\t\t\t\t\t\tif (ctxAlpha != s.alpha)\n\t\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = s.alpha;\n\n\t\t\t\t\t\tlet _idxs = mode == 2 ? [0, data[i][0].length - 1] : getOuterIdxs(data[i]);\n\t\t\t\t\t\ts._paths = s.paths(self, i, _idxs[0], _idxs[1]);\n\n\t\t\t\t\t\tif (ctxAlpha != _ctxAlpha)\n\t\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = _ctxAlpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (i > 0 && s.show) {\n\t\t\t\t\tlet _ctxAlpha = ctxAlpha;\n\n\t\t\t\t\tif (ctxAlpha != s.alpha)\n\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = s.alpha;\n\n\t\t\t\t\ts._paths != null && drawPath(i, false);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tlet _gaps = s._paths != null ? s._paths.gaps : null;\n\n\t\t\t\t\t\tlet show = s.points.show(self, i, i0, i1, _gaps);\n\t\t\t\t\t\tlet idxs = s.points.filter(self, i, show, _gaps);\n\n\t\t\t\t\t\tif (show || idxs) {\n\t\t\t\t\t\t\ts.points._paths = s.points.paths(self, i, i0, i1, idxs);\n\t\t\t\t\t\t\tdrawPath(i, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ctxAlpha != _ctxAlpha)\n\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = _ctxAlpha;\n\n\t\t\t\t\tfire(\"drawSeries\", i);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (shouldAlpha)\n\t\t\t\tctx.globalAlpha = ctxAlpha = 1;\n\t\t}\n\t}\n\n\tfunction cacheStrokeFill(si, _points) {\n\t\tlet s = _points ? series[si].points : series[si];\n\n\t\ts._stroke = s.stroke(self, si);\n\t\ts._fill   = s.fill(self, si);\n\t}\n\n\tfunction drawPath(si, _points) {\n\t\tlet s = _points ? series[si].points : series[si];\n\n\t\tlet {\n\t\t\tstroke,\n\t\t\tfill,\n\t\t\tclip: gapsClip,\n\t\t\tflags,\n\n\t\t\t_stroke: strokeStyle = s._stroke,\n\t\t\t_fill:   fillStyle   = s._fill,\n\t\t\t_width:  width       = s.width,\n\t\t} = s._paths;\n\n\t\twidth = roundDec(width * pxRatio, 3);\n\n\t\tlet boundsClip = null;\n\t\tlet offset = (width % 2) / 2;\n\n\t\tif (_points && fillStyle == null)\n\t\t\tfillStyle = width > 0 ? \"#fff\" : strokeStyle;\n\n\t\tlet _pxAlign = s.pxAlign == 1 && offset > 0;\n\n\t\t_pxAlign && ctx.translate(offset, offset);\n\n\t\tif (!_points) {\n\t\t\tlet lft = plotLft - width / 2,\n\t\t\t\ttop = plotTop - width / 2,\n\t\t\t\twid = plotWid + width,\n\t\t\t\thgt = plotHgt + width;\n\n\t\t\tboundsClip = new Path2D();\n\t\t\tboundsClip.rect(lft, top, wid, hgt);\n\t\t}\n\n\t\t// the points pathbuilder's gapsClip is its boundsClip, since points dont need gaps clipping, and bounds depend on point size\n\t\tif (_points)\n\t\t\tstrokeFill(strokeStyle, width, s.dash, s.cap, fillStyle, stroke, fill, flags, gapsClip);\n\t\telse\n\t\t\tfillStroke(si, strokeStyle, width, s.dash, s.cap, fillStyle, stroke, fill, flags, boundsClip, gapsClip);\n\n\t\t_pxAlign && ctx.translate(-offset, -offset);\n\t}\n\n\tfunction fillStroke(si, strokeStyle, lineWidth, lineDash, lineCap, fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip) {\n\t\tlet didStrokeFill = false;\n\n\t\t// for all bands where this series is the top edge, create upwards clips using the bottom edges\n\t\t// and apply clips + fill with band fill or dfltFill\n\t\tflags != 0 && bands.forEach((b, bi) => {\n\t\t\t// isUpperEdge?\n\t\t\tif (b.series[0] == si) {\n\t\t\t\tlet lowerEdge = series[b.series[1]];\n\t\t\t\tlet lowerData = data[b.series[1]];\n\n\t\t\t\tlet bandClip = (lowerEdge._paths || EMPTY_OBJ).band;\n\n\t\t\t\tif (isArr(bandClip))\n\t\t\t\t\tbandClip = b.dir == 1 ? bandClip[0] : bandClip[1];\n\n\t\t\t\tlet gapsClip2;\n\n\t\t\t\tlet _fillStyle = null;\n\n\t\t\t\t// hasLowerEdge?\n\t\t\t\tif (lowerEdge.show && bandClip && hasData(lowerData, i0, i1)) {\n\t\t\t\t\t_fillStyle = b.fill(self, bi) || fillStyle;\n\t\t\t\t\tgapsClip2 = lowerEdge._paths.clip;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tbandClip = null;\n\n\t\t\t\tstrokeFill(strokeStyle, lineWidth, lineDash, lineCap, _fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip, gapsClip2, bandClip);\n\n\t\t\t\tdidStrokeFill = true;\n\t\t\t}\n\t\t});\n\n\t\tif (!didStrokeFill)\n\t\t\tstrokeFill(strokeStyle, lineWidth, lineDash, lineCap, fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip);\n\t}\n\n\tconst CLIP_FILL_STROKE = BAND_CLIP_FILL | BAND_CLIP_STROKE;\n\n\tfunction strokeFill(strokeStyle, lineWidth, lineDash, lineCap, fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip, gapsClip2, bandClip) {\n\t\tsetCtxStyle(strokeStyle, lineWidth, lineDash, lineCap, fillStyle);\n\n\t\tif (boundsClip || gapsClip || bandClip) {\n\t\t\tctx.save();\n\t\t\tboundsClip && ctx.clip(boundsClip);\n\t\t\tgapsClip && ctx.clip(gapsClip);\n\t\t}\n\n\t\tif (bandClip) {\n\t\t\tif ((flags & CLIP_FILL_STROKE) == CLIP_FILL_STROKE) {\n\t\t\t\tctx.clip(bandClip);\n\t\t\t\tgapsClip2 && ctx.clip(gapsClip2);\n\t\t\t\tdoFill(fillStyle, fillPath);\n\t\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t\t}\n\t\t\telse if (flags & BAND_CLIP_STROKE) {\n\t\t\t\tdoFill(fillStyle, fillPath);\n\t\t\t\tctx.clip(bandClip);\n\t\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t\t}\n\t\t\telse if (flags & BAND_CLIP_FILL) {\n\t\t\t\tctx.save();\n\t\t\t\tctx.clip(bandClip);\n\t\t\t\tgapsClip2 && ctx.clip(gapsClip2);\n\t\t\t\tdoFill(fillStyle, fillPath);\n\t\t\t\tctx.restore();\n\t\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdoFill(fillStyle, fillPath);\n\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t}\n\n\t\tif (boundsClip || gapsClip || bandClip)\n\t\t\tctx.restore();\n\t}\n\n\tfunction doStroke(strokeStyle, strokePath, lineWidth) {\n\t\tif (lineWidth > 0) {\n\t\t\tif (strokePath instanceof Map) {\n\t\t\t\tstrokePath.forEach((strokePath, strokeStyle) => {\n\t\t\t\t\tctx.strokeStyle = ctxStroke = strokeStyle;\n\t\t\t\t\tctx.stroke(strokePath);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t\tstrokePath != null && strokeStyle && ctx.stroke(strokePath);\n\t\t}\n\t}\n\n\tfunction doFill(fillStyle, fillPath) {\n\t\tif (fillPath instanceof Map) {\n\t\t\tfillPath.forEach((fillPath, fillStyle) => {\n\t\t\t\tctx.fillStyle = ctxFill = fillStyle;\n\t\t\t\tctx.fill(fillPath);\n\t\t\t});\n\t\t}\n\t\telse\n\t\t\tfillPath != null && fillStyle && ctx.fill(fillPath);\n\t}\n\n\tfunction getIncrSpace(axisIdx, min, max, fullDim) {\n\t\tlet axis = axes[axisIdx];\n\n\t\tlet incrSpace;\n\n\t\tif (fullDim <= 0)\n\t\t\tincrSpace = [0, 0];\n\t\telse {\n\t\t\tlet minSpace = axis._space = axis.space(self, axisIdx, min, max, fullDim);\n\t\t\tlet incrs    = axis._incrs = axis.incrs(self, axisIdx, min, max, fullDim, minSpace);\n\t\t\tincrSpace    = findIncr(min, max, incrs, fullDim, minSpace);\n\t\t}\n\n\t\treturn (axis._found = incrSpace);\n\t}\n\n\tfunction drawOrthoLines(offs, filts, ori, side, pos0, len, width, stroke, dash, cap) {\n\t\tlet offset = (width % 2) / 2;\n\n\t\tpxAlign == 1 && ctx.translate(offset, offset);\n\n\t\tsetCtxStyle(stroke, width, dash, cap, stroke);\n\n\t\tctx.beginPath();\n\n\t\tlet x0, y0, x1, y1, pos1 = pos0 + (side == 0 || side == 3 ? -len : len);\n\n\t\tif (ori == 0) {\n\t\t\ty0 = pos0;\n\t\t\ty1 = pos1;\n\t\t}\n\t\telse {\n\t\t\tx0 = pos0;\n\t\t\tx1 = pos1;\n\t\t}\n\n\t\tfor (let i = 0; i < offs.length; i++) {\n\t\t\tif (filts[i] != null) {\n\t\t\t\tif (ori == 0)\n\t\t\t\t\tx0 = x1 = offs[i];\n\t\t\t\telse\n\t\t\t\t\ty0 = y1 = offs[i];\n\n\t\t\t\tctx.moveTo(x0, y0);\n\t\t\t\tctx.lineTo(x1, y1);\n\t\t\t}\n\t\t}\n\n\t\tctx.stroke();\n\n\t\tpxAlign == 1 && ctx.translate(-offset, -offset);\n\t}\n\n\tfunction axesCalc(cycleNum) {\n\t//\tlog(\"axesCalc()\", arguments);\n\n\t\tlet converged = true;\n\n\t\taxes.forEach((axis, i) => {\n\t\t\tif (!axis.show)\n\t\t\t\treturn;\n\n\t\t\tlet scale = scales[axis.scale];\n\n\t\t\tif (scale.min == null) {\n\t\t\t\tif (axis._show) {\n\t\t\t\t\tconverged = false;\n\t\t\t\t\taxis._show = false;\n\t\t\t\t\tresetYSeries(false);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!axis._show) {\n\t\t\t\t\tconverged = false;\n\t\t\t\t\taxis._show = true;\n\t\t\t\t\tresetYSeries(false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet side = axis.side;\n\t\t\tlet ori = side % 2;\n\n\t\t\tlet {min, max} = scale;\t\t// \t\t// should this toggle them ._show = false\n\n\t\t\tlet [_incr, _space] = getIncrSpace(i, min, max, ori == 0 ? plotWidCss : plotHgtCss);\n\n\t\t\tif (_space == 0)\n\t\t\t\treturn;\n\n\t\t\t// if we're using index positions, force first tick to match passed index\n\t\t\tlet forceMin = scale.distr == 2;\n\n\t\t\tlet _splits = axis._splits = axis.splits(self, i, min, max, _incr, _space, forceMin);\n\n\t\t\t// tick labels\n\t\t\t// BOO this assumes a specific data/series\n\t\t\tlet splits = scale.distr == 2 ? _splits.map(i => data0[i]) : _splits;\n\t\t\tlet incr   = scale.distr == 2 ? data0[_splits[1]] - data0[_splits[0]] : _incr;\n\n\t\t\tlet values = axis._values = axis.values(self, axis.filter(self, splits, i, _space, incr), i, _space, incr);\n\n\t\t\t// rotating of labels only supported on bottom x axis\n\t\t\taxis._rotate = side == 2 ? axis.rotate(self, values, i, _space) : 0;\n\n\t\t\tlet oldSize = axis._size;\n\n\t\t\taxis._size = ceil(axis.size(self, values, i, cycleNum));\n\n\t\t\tif (oldSize != null && axis._size != oldSize)\t\t\t// ready && ?\n\t\t\t\tconverged = false;\n\t\t});\n\n\t\treturn converged;\n\t}\n\n\tfunction paddingCalc(cycleNum) {\n\t\tlet converged = true;\n\n\t\tpadding.forEach((p, i) => {\n\t\t\tlet _p = p(self, i, sidesWithAxes, cycleNum);\n\n\t\t\tif (_p != _padding[i])\n\t\t\t\tconverged = false;\n\n\t\t\t_padding[i] = _p;\n\t\t});\n\n\t\treturn converged;\n\t}\n\n\tfunction drawAxesGrid() {\n\t\tfor (let i = 0; i < axes.length; i++) {\n\t\t\tlet axis = axes[i];\n\n\t\t\tif (!axis.show || !axis._show)\n\t\t\t\tcontinue;\n\n\t\t\tlet side = axis.side;\n\t\t\tlet ori = side % 2;\n\n\t\t\tlet x, y;\n\n\t\t\tlet fillStyle = axis.stroke(self, i);\n\n\t\t\tlet shiftDir = side == 0 || side == 3 ? -1 : 1;\n\n\t\t\tlet [_incr, _space] = axis._found;\n\n\t\t\t// axis label\n\t\t\tif (axis.label != null) {\n\t\t\t\tlet shiftAmt = axis.labelGap * shiftDir;\n\t\t\t\tlet baseLpos = round((axis._lpos + shiftAmt) * pxRatio);\n\n\t\t\t\tsetFontStyle(axis.labelFont[0], fillStyle, \"center\", side == 2 ? TOP : BOTTOM);\n\n\t\t\t\tctx.save();\n\n\t\t\t\tif (ori == 1) {\n\t\t\t\t\tx = y = 0;\n\n\t\t\t\t\tctx.translate(\n\t\t\t\t\t\tbaseLpos,\n\t\t\t\t\t\tround(plotTop + plotHgt / 2),\n\t\t\t\t\t);\n\t\t\t\t\tctx.rotate((side == 3 ? -PI : PI) / 2);\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tx = round(plotLft + plotWid / 2);\n\t\t\t\t\ty = baseLpos;\n\t\t\t\t}\n\n\t\t\t\tlet _label = isFn(axis.label) ? axis.label(self, i, _incr, _space) : axis.label;\n\n\t\t\t\tctx.fillText(_label, x, y);\n\n\t\t\t\tctx.restore();\n\t\t\t}\n\n\t\t\tif (_space == 0)\n\t\t\t\tcontinue;\n\n\t\t\tlet scale = scales[axis.scale];\n\n\t\t\tlet plotDim = ori == 0 ? plotWid : plotHgt;\n\t\t\tlet plotOff = ori == 0 ? plotLft : plotTop;\n\n\t\t\tlet _splits = axis._splits;\n\n\t\t\t// tick labels\n\t\t\t// BOO this assumes a specific data/series\n\t\t\tlet splits = scale.distr == 2 ? _splits.map(i => data0[i]) : _splits;\n\t\t\tlet incr   = scale.distr == 2 ? data0[_splits[1]] - data0[_splits[0]] : _incr;\n\n\t\t\tlet ticks = axis.ticks;\n\t\t\tlet border = axis.border;\n\t\t\tlet _tickSize = ticks.show ? ticks.size : 0;\n\t\t\tlet tickSize = round(_tickSize * pxRatio);\n\t\t\tlet axisGap = round((axis.alignTo == 2 ? axis._size - _tickSize - axis.gap : axis.gap) * pxRatio);\n\n\t\t\t// rotating of labels only supported on bottom x axis\n\t\t\tlet angle = axis._rotate * -PI/180;\n\n\t\t\tlet basePos  = pxRound(axis._pos * pxRatio);\n\t\t\tlet shiftAmt = (tickSize + axisGap) * shiftDir;\n\t\t\tlet finalPos = basePos + shiftAmt;\n\t\t\t    y        = ori == 0 ? finalPos : 0;\n\t\t\t    x        = ori == 1 ? finalPos : 0;\n\n\t\t\tlet font         = axis.font[0];\n\t\t\tlet textAlign    = axis.align == 1 ? LEFT :\n\t\t\t                   axis.align == 2 ? RIGHT :\n\t\t\t                   angle > 0 ? LEFT :\n\t\t\t                   angle < 0 ? RIGHT :\n\t\t\t                   ori == 0 ? \"center\" : side == 3 ? RIGHT : LEFT;\n\t\t\tlet textBaseline = angle ||\n\t\t\t                   ori == 1 ? \"middle\" : side == 2 ? TOP   : BOTTOM;\n\n\t\t\tsetFontStyle(font, fillStyle, textAlign, textBaseline);\n\n\t\t\tlet lineHeight = axis.font[1] * axis.lineGap;\n\n\t\t\tlet canOffs = _splits.map(val => pxRound(getPos(val, scale, plotDim, plotOff)));\n\n\t\t\tlet _values = axis._values;\n\n\t\t\tfor (let i = 0; i < _values.length; i++) {\n\t\t\t\tlet val = _values[i];\n\n\t\t\t\tif (val != null) {\n\t\t\t\t\tif (ori == 0)\n\t\t\t\t\t\tx = canOffs[i];\n\t\t\t\t\telse\n\t\t\t\t\t\ty = canOffs[i];\n\n\t\t\t\t\tval = \"\" + val;\n\n\t\t\t\t\tlet _parts = val.indexOf(\"\\n\") == -1 ? [val] : val.split(/\\n/gm);\n\n\t\t\t\t\tfor (let j = 0; j < _parts.length; j++) {\n\t\t\t\t\t\tlet text = _parts[j];\n\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tctx.save();\n\t\t\t\t\t\t\tctx.translate(x, y + j * lineHeight); // can this be replaced with position math?\n\t\t\t\t\t\t\tctx.rotate(angle); // can this be done once?\n\t\t\t\t\t\t\tctx.fillText(text, 0, 0);\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tctx.fillText(text, x, y + j * lineHeight);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ticks\n\t\t\tif (ticks.show) {\n\t\t\t\tdrawOrthoLines(\n\t\t\t\t\tcanOffs,\n\t\t\t\t\tticks.filter(self, splits, i, _space, incr),\n\t\t\t\t\tori,\n\t\t\t\t\tside,\n\t\t\t\t\tbasePos,\n\t\t\t\t\ttickSize,\n\t\t\t\t\troundDec(ticks.width * pxRatio, 3),\n\t\t\t\t\tticks.stroke(self, i),\n\t\t\t\t\tticks.dash,\n\t\t\t\t\tticks.cap,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// grid\n\t\t\tlet grid = axis.grid;\n\n\t\t\tif (grid.show) {\n\t\t\t\tdrawOrthoLines(\n\t\t\t\t\tcanOffs,\n\t\t\t\t\tgrid.filter(self, splits, i, _space, incr),\n\t\t\t\t\tori,\n\t\t\t\t\tori == 0 ? 2 : 1,\n\t\t\t\t\tori == 0 ? plotTop : plotLft,\n\t\t\t\t\tori == 0 ? plotHgt : plotWid,\n\t\t\t\t\troundDec(grid.width * pxRatio, 3),\n\t\t\t\t\tgrid.stroke(self, i),\n\t\t\t\t\tgrid.dash,\n\t\t\t\t\tgrid.cap,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (border.show) {\n\t\t\t\tdrawOrthoLines(\n\t\t\t\t\t[basePos],\n\t\t\t\t\t[1],\n\t\t\t\t\tori == 0 ? 1 : 0,\n\t\t\t\t\tori == 0 ? 1 : 2,\n\t\t\t\t\tori == 1 ? plotTop : plotLft,\n\t\t\t\t\tori == 1 ? plotHgt : plotWid,\n\t\t\t\t\troundDec(border.width * pxRatio, 3),\n\t\t\t\t\tborder.stroke(self, i),\n\t\t\t\t\tborder.dash,\n\t\t\t\t\tborder.cap,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfire(\"drawAxes\");\n\t}\n\n\tfunction resetYSeries(minMax) {\n\t//\tlog(\"resetYSeries()\", arguments);\n\n\t\tseries.forEach((s, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\ts._paths = null;\n\n\t\t\t\tif (minMax) {\n\t\t\t\t\tif (mode == 1) {\n\t\t\t\t\t\ts.min = null;\n\t\t\t\t\t\ts.max = null;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ts.facets.forEach(f => {\n\t\t\t\t\t\t\tf.min = null;\n\t\t\t\t\t\t\tf.max = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tlet queuedCommit = false;\n\tlet deferHooks = false;\n\tlet hooksQueue = [];\n\n\tfunction flushHooks() {\n\t\tdeferHooks = false;\n\n\t\tfor (let i = 0; i < hooksQueue.length; i++)\n\t\t\tfire(...hooksQueue[i]);\n\n\t\thooksQueue.length = 0;\n\t}\n\n\tfunction commit() {\n\t\tif (!queuedCommit) {\n\t\t\tmicroTask(_commit);\n\t\t\tqueuedCommit = true;\n\t\t}\n\t}\n\n\t// manual batching (aka immediate mode), skips microtask queue\n\tfunction batch(fn, _deferHooks = false) {\n\t\tqueuedCommit = true;\n\t\tdeferHooks = _deferHooks;\n\n\t\tfn(self);\n\t\t_commit();\n\n\t\tif (_deferHooks && hooksQueue.length > 0)\n\t\t\tqueueMicrotask(flushHooks);\n\t}\n\n\tself.batch = batch;\n\n\tfunction _commit() {\n\t//\tlog(\"_commit()\", arguments);\n\n\t\tif (shouldSetScales) {\n\t\t\tsetScales();\n\t\t\tshouldSetScales = false;\n\t\t}\n\n\t\tif (shouldConvergeSize) {\n\t\t\tconvergeSize();\n\t\t\tshouldConvergeSize = false;\n\t\t}\n\n\t\tif (shouldSetSize) {\n\t\t\tsetStylePx(under, LEFT,   plotLftCss);\n\t\t\tsetStylePx(under, TOP,    plotTopCss);\n\t\t\tsetStylePx(under, WIDTH,  plotWidCss);\n\t\t\tsetStylePx(under, HEIGHT, plotHgtCss);\n\n\t\t\tsetStylePx(over, LEFT,    plotLftCss);\n\t\t\tsetStylePx(over, TOP,     plotTopCss);\n\t\t\tsetStylePx(over, WIDTH,   plotWidCss);\n\t\t\tsetStylePx(over, HEIGHT,  plotHgtCss);\n\n\t\t\tsetStylePx(wrap, WIDTH,   fullWidCss);\n\t\t\tsetStylePx(wrap, HEIGHT,  fullHgtCss);\n\n\t\t\t// NOTE: mutating this during print preview in Chrome forces transparent\n\t\t\t// canvas pixels to white, even when followed up with clearRect() below\n\t\t\tcan.width  = round(fullWidCss * pxRatio);\n\t\t\tcan.height = round(fullHgtCss * pxRatio);\n\n\t\t\taxes.forEach(({ _el, _show, _size, _pos, side }) => {\n\t\t\t\tif (_el != null) {\n\t\t\t\t\tif (_show) {\n\t\t\t\t\t\tlet posOffset = (side === 3 || side === 0 ? _size : 0);\n\t\t\t\t\t\tlet isVt = side % 2 == 1;\n\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"left\"   : \"top\",    _pos - posOffset);\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"width\"  : \"height\", _size);\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"top\"    : \"left\",   isVt ? plotTopCss : plotLftCss);\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"height\" : \"width\",  isVt ? plotHgtCss : plotWidCss);\n\n\t\t\t\t\t\tremClass(_el, OFF);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\taddClass(_el, OFF);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// invalidate ctx style cache\n\t\t\tctxStroke = ctxFill = ctxWidth = ctxJoin = ctxCap = ctxFont = ctxAlign = ctxBaseline = ctxDash = null;\n\t\t\tctxAlpha = 1;\n\n\t\t\tsyncRect(true);\n\n\t\t\tif (\n\t\t\t\tplotLftCss != _plotLftCss ||\n\t\t\t\tplotTopCss != _plotTopCss ||\n\t\t\t\tplotWidCss != _plotWidCss ||\n\t\t\t\tplotHgtCss != _plotHgtCss\n\t\t\t) {\n\t\t\t\tresetYSeries(false);\n\n\t\t\t\tlet pctWid = plotWidCss / _plotWidCss;\n\t\t\t\tlet pctHgt = plotHgtCss / _plotHgtCss;\n\n\t\t\t\tif (showCursor && !shouldSetCursor && cursor.left >= 0) {\n\t\t\t\t\tcursor.left *= pctWid;\n\t\t\t\t\tcursor.top  *= pctHgt;\n\n\t\t\t\t\tvCursor && elTrans(vCursor, round(cursor.left), 0, plotWidCss, plotHgtCss);\n\t\t\t\t\thCursor && elTrans(hCursor, 0, round(cursor.top), plotWidCss, plotHgtCss);\n\n\t\t\t\t\tfor (let i = 0; i < cursorPts.length; i++) {\n\t\t\t\t\t\tlet pt = cursorPts[i];\n\n\t\t\t\t\t\tif (pt != null) {\n\t\t\t\t\t\t\tcursorPtsLft[i] *= pctWid;\n\t\t\t\t\t\t\tcursorPtsTop[i] *= pctHgt;\n\t\t\t\t\t\t\telTrans(pt, ceil(cursorPtsLft[i]), ceil(cursorPtsTop[i]), plotWidCss, plotHgtCss);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (select.show && !shouldSetSelect && select.left >= 0 && select.width > 0) {\n\t\t\t\t\tselect.left   *= pctWid;\n\t\t\t\t\tselect.width  *= pctWid;\n\t\t\t\t\tselect.top    *= pctHgt;\n\t\t\t\t\tselect.height *= pctHgt;\n\n\t\t\t\t\tfor (let prop in _hideProps)\n\t\t\t\t\t\tsetStylePx(selectDiv, prop, select[prop]);\n\t\t\t\t}\n\n\t\t\t\t_plotLftCss = plotLftCss;\n\t\t\t\t_plotTopCss = plotTopCss;\n\t\t\t\t_plotWidCss = plotWidCss;\n\t\t\t\t_plotHgtCss = plotHgtCss;\n\t\t\t}\n\n\t\t\tfire(\"setSize\");\n\n\t\t\tshouldSetSize = false;\n\t\t}\n\n\t\tif (fullWidCss > 0 && fullHgtCss > 0) {\n\t\t\tctx.clearRect(0, 0, can.width, can.height);\n\t\t\tfire(\"drawClear\");\n\t\t\tdrawOrder.forEach(fn => fn());\n\t\t\tfire(\"draw\");\n\t\t}\n\n\t\tif (select.show && shouldSetSelect) {\n\t\t\tsetSelect(select);\n\t\t\tshouldSetSelect = false;\n\t\t}\n\n\t\tif (showCursor && shouldSetCursor) {\n\t\t\tupdateCursor(null, true, false);\n\t\t\tshouldSetCursor = false;\n\t\t}\n\n\t\tif (legend.show && legend.live && shouldSetLegend) {\n\t\t\tsetLegend();\n\t\t\tshouldSetLegend = false; // redundant currently\n\t\t}\n\n\t\tif (!ready) {\n\t\t\tready = true;\n\t\t\tself.status = 1;\n\n\t\t\tfire(\"ready\");\n\t\t}\n\n\t\tviaAutoScaleX = false;\n\n\t\tqueuedCommit = false;\n\t}\n\n\tself.redraw = (rebuildPaths, recalcAxes) => {\n\t\tshouldConvergeSize = recalcAxes || false;\n\n\t\tif (rebuildPaths !== false)\n\t\t\t_setScale(xScaleKey, scaleX.min, scaleX.max);\n\t\telse\n\t\t\tcommit();\n\t};\n\n\t// redraw() => setScale('x', scales.x.min, scales.x.max);\n\n\t// explicit, never re-ranged (is this actually true? for x and y)\n\tfunction setScale(key, opts) {\n\t\tlet sc = scales[key];\n\n\t\tif (sc.from == null) {\n\t\t\tif (dataLen == 0) {\n\t\t\t\tlet minMax = sc.range(self, opts.min, opts.max, key);\n\t\t\t\topts.min = minMax[0];\n\t\t\t\topts.max = minMax[1];\n\t\t\t}\n\n\t\t\tif (opts.min > opts.max) {\n\t\t\t\tlet _min = opts.min;\n\t\t\t\topts.min = opts.max;\n\t\t\t\topts.max = _min;\n\t\t\t}\n\n\t\t\tif (dataLen > 1 && opts.min != null && opts.max != null && opts.max - opts.min < 1e-16)\n\t\t\t\treturn;\n\n\t\t\tif (key == xScaleKey) {\n\t\t\t\tif (sc.distr == 2 && dataLen > 0) {\n\t\t\t\t\topts.min = closestIdx(opts.min, data[0]);\n\t\t\t\t\topts.max = closestIdx(opts.max, data[0]);\n\n\t\t\t\t\tif (opts.min == opts.max)\n\t\t\t\t\t\topts.max++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t//\tlog(\"setScale()\", arguments);\n\n\t\t\tpendScales[key] = opts;\n\n\t\t\tshouldSetScales = true;\n\t\t\tcommit();\n\t\t}\n\t}\n\n\tself.setScale = setScale;\n\n//\tINTERACTION\n\n\tlet xCursor;\n\tlet yCursor;\n\tlet vCursor;\n\tlet hCursor;\n\n\t// starting position before cursor.move\n\tlet rawMouseLeft0;\n\tlet rawMouseTop0;\n\n\t// starting position\n\tlet mouseLeft0;\n\tlet mouseTop0;\n\n\t// current position before cursor.move\n\tlet rawMouseLeft1;\n\tlet rawMouseTop1;\n\n\t// current position\n\tlet mouseLeft1;\n\tlet mouseTop1;\n\n\tlet dragging = false;\n\n\tconst drag = cursor.drag;\n\n\tlet dragX = drag.x;\n\tlet dragY = drag.y;\n\n\tif (showCursor) {\n\t\tif (cursor.x)\n\t\t\txCursor = placeDiv(CURSOR_X, over);\n\t\tif (cursor.y)\n\t\t\tyCursor = placeDiv(CURSOR_Y, over);\n\n\t\tif (scaleX.ori == 0) {\n\t\t\tvCursor = xCursor;\n\t\t\thCursor = yCursor;\n\t\t}\n\t\telse {\n\t\t\tvCursor = yCursor;\n\t\t\thCursor = xCursor;\n\t\t}\n\n\t\tmouseLeft1 = cursor.left;\n\t\tmouseTop1 = cursor.top;\n\t}\n\n\tconst select = self.select = assign({\n\t\tshow:   true,\n\t\tover:   true,\n\t\tleft:   0,\n\t\twidth:  0,\n\t\ttop:    0,\n\t\theight: 0,\n\t}, opts.select);\n\n\tconst selectDiv = select.show ? placeDiv(SELECT, select.over ? over : under) : null;\n\n\tfunction setSelect(opts, _fire) {\n\t\tif (select.show) {\n\t\t\tfor (let prop in opts) {\n\t\t\t\tselect[prop] = opts[prop];\n\n\t\t\t\tif (prop in _hideProps)\n\t\t\t\t\tsetStylePx(selectDiv, prop, opts[prop]);\n\t\t\t}\n\n\t\t\t_fire !== false && fire(\"setSelect\");\n\t\t}\n\t}\n\n\tself.setSelect = setSelect;\n\n\tfunction toggleDOM(i) {\n\t\tlet s = series[i];\n\n\t\tif (s.show)\n\t\t\tshowLegend && remClass(legendRows[i], OFF);\n\t\telse {\n\t\t\tshowLegend && addClass(legendRows[i], OFF);\n\n\t\t\tif (showCursor) {\n\t\t\t\tlet pt = cursorOnePt ? cursorPts[0] : cursorPts[i];\n\t\t\t\tpt != null && elTrans(pt, -10, -10, plotWidCss, plotHgtCss);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction _setScale(key, min, max) {\n\t\tsetScale(key, {min, max});\n\t}\n\n\tfunction setSeries(i, opts, _fire, _pub) {\n\t//\tlog(\"setSeries()\", arguments);\n\n\t\tif (opts.focus != null)\n\t\t\tsetFocus(i);\n\n\t\tif (opts.show != null) {\n\t\t\tseries.forEach((s, si) => {\n\t\t\t\tif (si > 0 && (i == si || i == null)) {\n\t\t\t\t\ts.show = opts.show;\n\t\t\t\t\ttoggleDOM(si);\n\n\t\t\t\t\tif (mode == 2) {\n\t\t\t\t\t\t_setScale(s.facets[0].scale, null, null);\n\t\t\t\t\t\t_setScale(s.facets[1].scale, null, null);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\t_setScale(s.scale, null, null);\n\n\t\t\t\t\tcommit();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_fire !== false && fire(\"setSeries\", i, opts);\n\n\t\t_pub && pubSync(\"setSeries\", self, i, opts);\n\t}\n\n\tself.setSeries = setSeries;\n\n\tfunction setBand(bi, opts) {\n\t\tassign(bands[bi], opts);\n\t}\n\n\tfunction addBand(opts, bi) {\n\t\topts.fill = fnOrSelf(opts.fill || null);\n\t\topts.dir = ifNull(opts.dir, -1);\n\t\tbi = bi == null ? bands.length : bi;\n\t\tbands.splice(bi, 0, opts);\n\t}\n\n\tfunction delBand(bi) {\n\t\tif (bi == null)\n\t\t\tbands.length = 0;\n\t\telse\n\t\t\tbands.splice(bi, 1);\n\t}\n\n\tself.addBand = addBand;\n\tself.setBand = setBand;\n\tself.delBand = delBand;\n\n\tfunction setAlpha(i, value) {\n\t\tseries[i].alpha = value;\n\n\t\tif (showCursor && cursorPts[i] != null)\n\t\t\tcursorPts[i].style.opacity = value;\n\n\t\tif (showLegend && legendRows[i])\n\t\t\tlegendRows[i].style.opacity = value;\n\t}\n\n\t// y-distance\n\tlet closestDist;\n\tlet closestSeries;\n\tlet focusedSeries;\n\tconst FOCUS_TRUE  = {focus: true};\n\n\tfunction setFocus(i) {\n\t\tif (i != focusedSeries) {\n\t\t//\tlog(\"setFocus()\", arguments);\n\n\t\t\tlet allFocused = i == null;\n\n\t\t\tlet _setAlpha = focus.alpha != 1;\n\n\t\t\tseries.forEach((s, i2) => {\n\t\t\t\tif (mode == 1 || i2 > 0) {\n\t\t\t\t\tlet isFocused = allFocused || i2 == 0 || i2 == i;\n\t\t\t\t\ts._focus = allFocused ? null : isFocused;\n\t\t\t\t\t_setAlpha && setAlpha(i2, isFocused ? 1 : focus.alpha);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfocusedSeries = i;\n\t\t\t_setAlpha && commit();\n\t\t}\n\t}\n\n\tif (showLegend && cursorFocus) {\n\t\tonMouse(mouseleave, legendTable, e => {\n\t\t\tif (cursor._lock)\n\t\t\t\treturn;\n\n\t\t\tsetCursorEvent(e);\n\n\t\t\tif (focusedSeries != null)\n\t\t\t\tsetSeries(null, FOCUS_TRUE, true, syncOpts.setSeries);\n\t\t});\n\t}\n\n\tfunction posToVal(pos, scale, can) {\n\t\tlet sc = scales[scale];\n\n\t\tif (can)\n\t\t\tpos = pos / pxRatio - (sc.ori == 1 ? plotTopCss : plotLftCss);\n\n\t\tlet dim = plotWidCss;\n\n\t\tif (sc.ori == 1) {\n\t\t\tdim = plotHgtCss;\n\t\t\tpos = dim - pos;\n\t\t}\n\n\t\tif (sc.dir == -1)\n\t\t\tpos = dim - pos;\n\n\t\tlet _min = sc._min,\n\t\t\t_max = sc._max,\n\t\t\tpct = pos / dim;\n\n\t\tlet sv = _min + (_max - _min) * pct;\n\n\t\tlet distr = sc.distr;\n\n\t\treturn (\n\t\t\tdistr == 3 ? pow(10, sv) :\n\t\t\tdistr == 4 ? sinh(sv, sc.asinh) :\n\t\t\tdistr == 100 ? sc.bwd(sv) :\n\t\t\tsv\n\t\t);\n\t}\n\n\tfunction closestIdxFromXpos(pos, can) {\n\t\tlet v = posToVal(pos, xScaleKey, can);\n\t\treturn closestIdx(v, data[0], i0, i1);\n\t}\n\n\tself.valToIdx = val => closestIdx(val, data[0]);\n\tself.posToIdx = closestIdxFromXpos;\n\tself.posToVal = posToVal;\n\tself.valToPos = (val, scale, can) => (\n\t\tscales[scale].ori == 0 ?\n\t\tgetHPos(val, scales[scale],\n\t\t\tcan ? plotWid : plotWidCss,\n\t\t\tcan ? plotLft : 0,\n\t\t) :\n\t\tgetVPos(val, scales[scale],\n\t\t\tcan ? plotHgt : plotHgtCss,\n\t\t\tcan ? plotTop : 0,\n\t\t)\n\t);\n\n\tself.setCursor = (opts, _fire, _pub) => {\n\t\tmouseLeft1 = opts.left;\n\t\tmouseTop1 = opts.top;\n\t//\tassign(cursor, opts);\n\t\tupdateCursor(null, _fire, _pub);\n\t};\n\n\tfunction setSelH(off, dim) {\n\t\tsetStylePx(selectDiv, LEFT,  select.left = off);\n\t\tsetStylePx(selectDiv, WIDTH, select.width = dim);\n\t}\n\n\tfunction setSelV(off, dim) {\n\t\tsetStylePx(selectDiv, TOP,    select.top = off);\n\t\tsetStylePx(selectDiv, HEIGHT, select.height = dim);\n\t}\n\n\tlet setSelX = scaleX.ori == 0 ? setSelH : setSelV;\n\tlet setSelY = scaleX.ori == 1 ? setSelH : setSelV;\n\n\tfunction syncLegend() {\n\t\tif (showLegend && legend.live) {\n\t\t\tfor (let i = mode == 2 ? 1 : 0; i < series.length; i++) {\n\t\t\t\tif (i == 0 && multiValLegend)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tlet vals = legend.values[i];\n\n\t\t\t\tlet j = 0;\n\n\t\t\t\tfor (let k in vals)\n\t\t\t\t\tlegendCells[i][j++].firstChild.nodeValue = vals[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setLegend(opts, _fire) {\n\t\tif (opts != null) {\n\t\t\tif (opts.idxs) {\n\t\t\t\topts.idxs.forEach((didx, sidx) => {\n\t\t\t\t\tactiveIdxs[sidx] = didx;\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (!isUndef(opts.idx))\n\t\t\t\tactiveIdxs.fill(opts.idx);\n\n\t\t\tlegend.idx = activeIdxs[0];\n\t\t}\n\n\t\tif (showLegend && legend.live) {\n\t\t\tfor (let sidx = 0; sidx < series.length; sidx++) {\n\t\t\t\tif (sidx > 0 || mode == 1 && !multiValLegend)\n\t\t\t\t\tsetLegendValues(sidx, activeIdxs[sidx]);\n\t\t\t}\n\n\t\t\tsyncLegend();\n\t\t}\n\n\t\tshouldSetLegend = false;\n\n\t\t_fire !== false && fire(\"setLegend\");\n\t}\n\n\tself.setLegend = setLegend;\n\n\tfunction setLegendValues(sidx, idx) {\n\t\tlet s = series[sidx];\n\t\tlet src = sidx == 0 && xScaleDistr == 2 ? data0 : data[sidx];\n\t\tlet val;\n\n\t\tif (multiValLegend)\n\t\t\tval = s.values(self, sidx, idx) ?? NULL_LEGEND_VALUES;\n\t\telse {\n\t\t\tval = s.value(self, idx == null ? null : src[idx], sidx, idx);\n\t\t\tval = val == null ? NULL_LEGEND_VALUES : {_: val};\n\t\t}\n\n\t\tlegend.values[sidx] = val;\n\t}\n\n\tfunction updateCursor(src, _fire, _pub) {\n\t//\tts == null && log(\"updateCursor()\", arguments);\n\n\t\trawMouseLeft1 = mouseLeft1;\n\t\trawMouseTop1 = mouseTop1;\n\n\t\t[mouseLeft1, mouseTop1] = cursor.move(self, mouseLeft1, mouseTop1);\n\n\t\tcursor.left = mouseLeft1;\n\t\tcursor.top = mouseTop1;\n\n\t\tif (showCursor) {\n\t\t\tvCursor && elTrans(vCursor, round(mouseLeft1), 0, plotWidCss, plotHgtCss);\n\t\t\thCursor && elTrans(hCursor, 0, round(mouseTop1), plotWidCss, plotHgtCss);\n\t\t}\n\n\t\tlet idx;\n\n\t\t// when zooming to an x scale range between datapoints the binary search\n\t\t// for nearest min/max indices results in this condition. cheap hack :D\n\t\tlet noDataInRange = i0 > i1; // works for mode 1 only\n\n\t\tclosestDist = inf;\n\t\tclosestSeries = null;\n\n\t\t// TODO: extract\n\t\tlet xDim = scaleX.ori == 0 ? plotWidCss : plotHgtCss;\n\t\tlet yDim = scaleX.ori == 1 ? plotWidCss : plotHgtCss;\n\n\t\t// if cursor hidden, hide points & clear legend vals\n\t\tif (mouseLeft1 < 0 || dataLen == 0 || noDataInRange) {\n\t\t\tidx = cursor.idx = null;\n\n\t\t\tfor (let i = 0; i < series.length; i++) {\n\t\t\t\tlet pt = cursorPts[i];\n\t\t\t\tpt != null && elTrans(pt, -10, -10, plotWidCss, plotHgtCss);\n\t\t\t}\n\n\t\t\tif (cursorFocus)\n\t\t\t\tsetSeries(null, FOCUS_TRUE, true, src == null && syncOpts.setSeries);\n\n\t\t\tif (legend.live) {\n\t\t\t\tactiveIdxs.fill(idx);\n\t\t\t\tshouldSetLegend = true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t//\tlet pctY = 1 - (y / rect.height);\n\n\t\t\tlet mouseXPos, valAtPosX, xPos;\n\n\t\t\tif (mode == 1) {\n\t\t\t\tmouseXPos = scaleX.ori == 0 ? mouseLeft1 : mouseTop1;\n\t\t\t\tvalAtPosX = posToVal(mouseXPos, xScaleKey);\n\t\t\t\tidx = cursor.idx = closestIdx(valAtPosX, data[0], i0, i1);\n\t\t\t\txPos = valToPosX(data[0][idx], scaleX, xDim, 0);\n\t\t\t}\n\n\t\t\t// closest pt values\n\t\t\tlet _ptLft = -10;\n\t\t\tlet _ptTop = -10;\n\t\t\tlet _ptWid = 0;\n\t\t\tlet _ptHgt = 0;\n\t\t\tlet _centered = true;\n\t\t\tlet _ptFill = '';\n\t\t\tlet _ptStroke = '';\n\n\t\t\tfor (let i = mode == 2 ? 1 : 0; i < series.length; i++) {\n\t\t\t\tlet s = series[i];\n\n\t\t\t\tlet idx1  = activeIdxs[i];\n\t\t\t\tlet yVal1 = idx1 == null ? null : (mode == 1 ? data[i][idx1] : data[i][1][idx1]);\n\n\t\t\t\tlet idx2  = cursor.dataIdx(self, i, idx, valAtPosX);\n\t\t\t\tlet yVal2 = idx2 == null ? null : (mode == 1 ? data[i][idx2] : data[i][1][idx2]);\n\n\t\t\t\tshouldSetLegend = shouldSetLegend || yVal2 != yVal1 || idx2 != idx1;\n\n\t\t\t\tactiveIdxs[i] = idx2;\n\n\t\t\t\tif (i > 0 && s.show) {\n\t\t\t\t\tlet xPos2 = idx2 == null ? -10 : idx2 == idx ? xPos : valToPosX(mode == 1 ? data[0][idx2] : data[i][0][idx2], scaleX, xDim, 0);\n\n\t\t\t\t\t// this doesnt really work for state timeline, heatmap, status history (where the value maps to color, not y coords)\n\t\t\t\t\tlet yPos = yVal2 == null ? -10 : valToPosY(yVal2, mode == 1 ? scales[s.scale] : scales[s.facets[1].scale], yDim, 0);\n\n\t\t\t\t\tif (cursorFocus && yVal2 != null) {\n\t\t\t\t\t\tlet mouseYPos = scaleX.ori == 1 ? mouseLeft1 : mouseTop1;\n\t\t\t\t\t\tlet dist = abs(focus.dist(self, i, idx2, yPos, mouseYPos));\n\n\t\t\t\t\t\tif (dist < closestDist) {\n\t\t\t\t\t\t\tlet bias = focus.bias;\n\n\t\t\t\t\t\t\tif (bias != 0) {\n\t\t\t\t\t\t\t\tlet mouseYVal = posToVal(mouseYPos, s.scale);\n\n\t\t\t\t\t\t\t\tlet seriesYValSign = yVal2     >= 0 ? 1 : -1;\n\t\t\t\t\t\t\t\tlet mouseYValSign  = mouseYVal >= 0 ? 1 : -1;\n\n\t\t\t\t\t\t\t\t// with a focus bias, we will never cross zero when prox testing\n\t\t\t\t\t\t\t\t// it's either closest towards zero, or closest away from zero\n\t\t\t\t\t\t\t\tif (mouseYValSign == seriesYValSign && (\n\t\t\t\t\t\t\t\t\tmouseYValSign == 1 ?\n\t\t\t\t\t\t\t\t\t\t(bias == 1 ? yVal2 >= mouseYVal : yVal2 <= mouseYVal) :  // >= 0\n\t\t\t\t\t\t\t\t\t\t(bias == 1 ? yVal2 <= mouseYVal : yVal2 >= mouseYVal)    //  < 0\n\t\t\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t\t\tclosestDist = dist;\n\t\t\t\t\t\t\t\t\tclosestSeries = i;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tclosestDist = dist;\n\t\t\t\t\t\t\t\tclosestSeries = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (shouldSetLegend || cursorOnePt) {\n\t\t\t\t\t\tlet hPos, vPos;\n\n\t\t\t\t\t\tif (scaleX.ori == 0) {\n\t\t\t\t\t\t\thPos = xPos2;\n\t\t\t\t\t\t\tvPos = yPos;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\thPos = yPos;\n\t\t\t\t\t\t\tvPos = xPos2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet ptWid, ptHgt, ptLft, ptTop,\n\t\t\t\t\t\t\tptStroke, ptFill,\n\t\t\t\t\t\t\tcentered = true,\n\t\t\t\t\t\t\tgetBBox = points.bbox;\n\n\t\t\t\t\t\tif (getBBox != null) {\n\t\t\t\t\t\t\tcentered = false;\n\n\t\t\t\t\t\t\tlet bbox = getBBox(self, i);\n\n\t\t\t\t\t\t\tptLft = bbox.left;\n\t\t\t\t\t\t\tptTop = bbox.top;\n\t\t\t\t\t\t\tptWid = bbox.width;\n\t\t\t\t\t\t\tptHgt = bbox.height;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tptLft = hPos;\n\t\t\t\t\t\t\tptTop = vPos;\n\t\t\t\t\t\t\tptWid = ptHgt = points.size(self, i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tptFill = points.fill(self, i);\n\t\t\t\t\t\tptStroke = points.stroke(self, i);\n\n\t\t\t\t\t\tif (cursorOnePt) {\n\t\t\t\t\t\t\tif (i == closestSeries && closestDist <= focus.prox) {\n\t\t\t\t\t\t\t\t_ptLft = ptLft;\n\t\t\t\t\t\t\t\t_ptTop = ptTop;\n\t\t\t\t\t\t\t\t_ptWid = ptWid;\n\t\t\t\t\t\t\t\t_ptHgt = ptHgt;\n\t\t\t\t\t\t\t\t_centered = centered;\n\t\t\t\t\t\t\t\t_ptFill = ptFill;\n\t\t\t\t\t\t\t\t_ptStroke = ptStroke;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet pt = cursorPts[i];\n\n\t\t\t\t\t\t\tif (pt != null) {\n\t\t\t\t\t\t\t\tcursorPtsLft[i] = ptLft;\n\t\t\t\t\t\t\t\tcursorPtsTop[i] = ptTop;\n\n\t\t\t\t\t\t\t\telSize(pt, ptWid, ptHgt, centered);\n\t\t\t\t\t\t\t\telColor(pt, ptFill, ptStroke);\n\t\t\t\t\t\t\t\telTrans(pt, ceil(ptLft), ceil(ptTop), plotWidCss, plotHgtCss);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if only using single hover point (at cursorPts[0])\n\t\t\t// we have trigger styling at last visible series (once closestSeries is settled)\n\t\t\tif (cursorOnePt) {\n\t\t\t\t// some of this logic is similar to series focus below, since it matches the behavior by design\n\n\t\t\t\tlet p = focus.prox;\n\n\t\t\t\tlet focusChanged = focusedSeries == null ? closestDist <= p : (closestDist > p || closestSeries != focusedSeries);\n\n\t\t\t\tif (shouldSetLegend || focusChanged) {\n\t\t\t\t\tlet pt = cursorPts[0];\n\n\t\t\t\t\tif (pt != null) {\n\t\t\t\t\t\tcursorPtsLft[0] = _ptLft;\n\t\t\t\t\t\tcursorPtsTop[0] = _ptTop;\n\n\t\t\t\t\t\telSize(pt, _ptWid, _ptHgt, _centered);\n\t\t\t\t\t\telColor(pt, _ptFill, _ptStroke);\n\t\t\t\t\t\telTrans(pt, ceil(_ptLft), ceil(_ptTop), plotWidCss, plotHgtCss);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// nit: cursor.drag.setSelect is assumed always true\n\t\tif (select.show && dragging) {\n\t\t\tif (src != null) {\n\t\t\t\tlet [xKey, yKey] = syncOpts.scales;\n\t\t\t\tlet [matchXKeys, matchYKeys] = syncOpts.match;\n\t\t\t\tlet [xKeySrc, yKeySrc] = src.cursor.sync.scales;\n\n\t\t\t\t// match the dragX/dragY implicitness/explicitness of src\n\t\t\t\tlet sdrag = src.cursor.drag;\n\t\t\t\tdragX = sdrag._x;\n\t\t\t\tdragY = sdrag._y;\n\n\t\t\t\tif (dragX || dragY) {\n\t\t\t\t\tlet { left, top, width, height } = src.select;\n\n\t\t\t\t\tlet sori = src.scales[xKeySrc].ori;\n\t\t\t\t\tlet sPosToVal = src.posToVal;\n\n\t\t\t\t\tlet sOff, sDim, sc, a, b;\n\n\t\t\t\t\tlet matchingX = xKey != null && matchXKeys(xKey, xKeySrc);\n\t\t\t\t\tlet matchingY = yKey != null && matchYKeys(yKey, yKeySrc);\n\n\t\t\t\t\tif (matchingX && dragX) {\n\t\t\t\t\t\tif (sori == 0) {\n\t\t\t\t\t\t\tsOff = left;\n\t\t\t\t\t\t\tsDim = width;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsOff = top;\n\t\t\t\t\t\t\tsDim = height;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsc = scales[xKey];\n\n\t\t\t\t\t\ta = valToPosX(sPosToVal(sOff, xKeySrc),        sc, xDim, 0);\n\t\t\t\t\t\tb = valToPosX(sPosToVal(sOff + sDim, xKeySrc), sc, xDim, 0);\n\n\t\t\t\t\t\tsetSelX(min(a,b), abs(b-a));\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsetSelX(0, xDim);\n\n\t\t\t\t\tif (matchingY && dragY) {\n\t\t\t\t\t\tif (sori == 1) {\n\t\t\t\t\t\t\tsOff = left;\n\t\t\t\t\t\t\tsDim = width;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsOff = top;\n\t\t\t\t\t\t\tsDim = height;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsc = scales[yKey];\n\n\t\t\t\t\t\ta = valToPosY(sPosToVal(sOff, yKeySrc),        sc, yDim, 0);\n\t\t\t\t\t\tb = valToPosY(sPosToVal(sOff + sDim, yKeySrc), sc, yDim, 0);\n\n\t\t\t\t\t\tsetSelY(min(a,b), abs(b-a));\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsetSelY(0, yDim);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\thideSelect();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet rawDX = abs(rawMouseLeft1 - rawMouseLeft0);\n\t\t\t\tlet rawDY = abs(rawMouseTop1 - rawMouseTop0);\n\n\t\t\t\tif (scaleX.ori == 1) {\n\t\t\t\t\tlet _rawDX = rawDX;\n\t\t\t\t\trawDX = rawDY;\n\t\t\t\t\trawDY = _rawDX;\n\t\t\t\t}\n\n\t\t\t\tdragX = drag.x && rawDX >= drag.dist;\n\t\t\t\tdragY = drag.y && rawDY >= drag.dist;\n\n\t\t\t\tlet uni = drag.uni;\n\n\t\t\t\tif (uni != null) {\n\t\t\t\t\t// only calc drag status if they pass the dist thresh\n\t\t\t\t\tif (dragX && dragY) {\n\t\t\t\t\t\tdragX = rawDX >= uni;\n\t\t\t\t\t\tdragY = rawDY >= uni;\n\n\t\t\t\t\t\t// force unidirectionality when both are under uni limit\n\t\t\t\t\t\tif (!dragX && !dragY) {\n\t\t\t\t\t\t\tif (rawDY > rawDX)\n\t\t\t\t\t\t\t\tdragY = true;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tdragX = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (drag.x && drag.y && (dragX || dragY))\n\t\t\t\t\t// if omni with no uni then both dragX / dragY should be true if either is true\n\t\t\t\t\tdragX = dragY = true;\n\n\t\t\t\tlet p0, p1;\n\n\t\t\t\tif (dragX) {\n\t\t\t\t\tif (scaleX.ori == 0) {\n\t\t\t\t\t\tp0 = mouseLeft0;\n\t\t\t\t\t\tp1 = mouseLeft1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp0 = mouseTop0;\n\t\t\t\t\t\tp1 = mouseTop1;\n\t\t\t\t\t}\n\n\t\t\t\t\tsetSelX(min(p0, p1), abs(p1 - p0));\n\n\t\t\t\t\tif (!dragY)\n\t\t\t\t\t\tsetSelY(0, yDim);\n\t\t\t\t}\n\n\t\t\t\tif (dragY) {\n\t\t\t\t\tif (scaleX.ori == 1) {\n\t\t\t\t\t\tp0 = mouseLeft0;\n\t\t\t\t\t\tp1 = mouseLeft1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp0 = mouseTop0;\n\t\t\t\t\t\tp1 = mouseTop1;\n\t\t\t\t\t}\n\n\t\t\t\t\tsetSelY(min(p0, p1), abs(p1 - p0));\n\n\t\t\t\t\tif (!dragX)\n\t\t\t\t\t\tsetSelX(0, xDim);\n\t\t\t\t}\n\n\t\t\t\t// the drag didn't pass the dist requirement\n\t\t\t\tif (!dragX && !dragY) {\n\t\t\t\t\tsetSelX(0, 0);\n\t\t\t\t\tsetSelY(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdrag._x = dragX;\n\t\tdrag._y = dragY;\n\n\t\tif (src == null) {\n\t\t\tif (_pub) {\n\t\t\t\tif (syncKey != null) {\n\t\t\t\t\tlet [xSyncKey, ySyncKey] = syncOpts.scales;\n\n\t\t\t\t\tsyncOpts.values[0] = xSyncKey != null ? posToVal(scaleX.ori == 0 ? mouseLeft1 : mouseTop1, xSyncKey) : null;\n\t\t\t\t\tsyncOpts.values[1] = ySyncKey != null ? posToVal(scaleX.ori == 1 ? mouseLeft1 : mouseTop1, ySyncKey) : null;\n\t\t\t\t}\n\n\t\t\t\tpubSync(mousemove, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, idx);\n\t\t\t}\n\n\t\t\tif (cursorFocus) {\n\t\t\t\tlet shouldPub = _pub && syncOpts.setSeries;\n\t\t\t\tlet p = focus.prox;\n\n\t\t\t\tif (focusedSeries == null) {\n\t\t\t\t\tif (closestDist <= p)\n\t\t\t\t\t\tsetSeries(closestSeries, FOCUS_TRUE, true, shouldPub);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (closestDist > p)\n\t\t\t\t\t\tsetSeries(null, FOCUS_TRUE, true, shouldPub);\n\t\t\t\t\telse if (closestSeries != focusedSeries)\n\t\t\t\t\t\tsetSeries(closestSeries, FOCUS_TRUE, true, shouldPub);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (shouldSetLegend) {\n\t\t\tlegend.idx = idx;\n\t\t\tsetLegend();\n\t\t}\n\n\t\t_fire !== false && fire(\"setCursor\");\n\t}\n\n\tlet rect = null;\n\n\tObject.defineProperty(self, 'rect', {\n\t\tget() {\n\t\t\tif (rect == null)\n\t\t\t\tsyncRect(false);\n\n\t\t\treturn rect;\n\t\t},\n\t});\n\n\tfunction syncRect(defer = false) {\n\t\tif (defer)\n\t\t\trect = null;\n\t\telse {\n\t\t\trect = over.getBoundingClientRect();\n\t\t\tfire(\"syncRect\", rect);\n\t\t}\n\t}\n\n\tfunction mouseMove(e, src, _l, _t, _w, _h, _i) {\n\t\tif (cursor._lock)\n\t\t\treturn;\n\n\t\t// Chrome on Windows has a bug which triggers a stray mousemove event after an initial mousedown event\n\t\t// when clicking into a plot as part of re-focusing the browser window.\n\t\t// we gotta ignore it to avoid triggering a phantom drag / setSelect\n\t\t// However, on touch-only devices Chrome-based browsers trigger a 0-distance mousemove before mousedown\n\t\t// so we don't ignore it when mousedown has set the dragging flag\n\t\tif (dragging && e != null && e.movementX == 0 && e.movementY == 0)\n\t\t\treturn;\n\n\t\tcacheMouse(e, src, _l, _t, _w, _h, _i, false, e != null);\n\n\t\tif (e != null)\n\t\t\tupdateCursor(null, true, true);\n\t\telse\n\t\t\tupdateCursor(src, true, false);\n\t}\n\n\tfunction cacheMouse(e, src, _l, _t, _w, _h, _i, initial, snap) {\n\t\tif (rect == null)\n\t\t\tsyncRect(false);\n\n\t\tsetCursorEvent(e);\n\n\t\tif (e != null) {\n\t\t\t_l = e.clientX - rect.left;\n\t\t\t_t = e.clientY - rect.top;\n\t\t}\n\t\telse {\n\t\t\tif (_l < 0 || _t < 0) {\n\t\t\t\tmouseLeft1 = -10;\n\t\t\t\tmouseTop1 = -10;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet [xKey, yKey] = syncOpts.scales;\n\n\t\t\tlet syncOptsSrc = src.cursor.sync;\n\t\t\tlet [xValSrc, yValSrc] = syncOptsSrc.values;\n\t\t\tlet [xKeySrc, yKeySrc] = syncOptsSrc.scales;\n\t\t\tlet [matchXKeys, matchYKeys] = syncOpts.match;\n\n\t\t\tlet rotSrc = src.axes[0].side % 2 == 1;\n\n\t\t\tlet xDim = scaleX.ori == 0 ? plotWidCss : plotHgtCss,\n\t\t\t\tyDim = scaleX.ori == 1 ? plotWidCss : plotHgtCss,\n\t\t\t\t_xDim = rotSrc ? _h : _w,\n\t\t\t\t_yDim = rotSrc ? _w : _h,\n\t\t\t\t_xPos = rotSrc ? _t : _l,\n\t\t\t\t_yPos = rotSrc ? _l : _t;\n\n\t\t\tif (xKeySrc != null)\n\t\t\t\t_l = matchXKeys(xKey, xKeySrc) ? getPos(xValSrc, scales[xKey], xDim, 0) : -10;\n\t\t\telse\n\t\t\t\t_l = xDim * (_xPos/_xDim);\n\n\t\t\tif (yKeySrc != null)\n\t\t\t\t_t = matchYKeys(yKey, yKeySrc) ? getPos(yValSrc, scales[yKey], yDim, 0) : -10;\n\t\t\telse\n\t\t\t\t_t = yDim * (_yPos/_yDim);\n\n\t\t\tif (scaleX.ori == 1) {\n\t\t\t\tlet __l = _l;\n\t\t\t\t_l = _t;\n\t\t\t\t_t = __l;\n\t\t\t}\n\t\t}\n\n\t\tif (snap && (src == null || src.cursor.event.type == mousemove)) {\n\t\t\tif (_l <= 1 || _l >= plotWidCss - 1)\n\t\t\t\t_l = incrRound(_l, plotWidCss);\n\n\t\t\tif (_t <= 1 || _t >= plotHgtCss - 1)\n\t\t\t\t_t = incrRound(_t, plotHgtCss);\n\t\t}\n\n\t\tif (initial) {\n\t\t\trawMouseLeft0 = _l;\n\t\t\trawMouseTop0 = _t;\n\n\t\t\t[mouseLeft0, mouseTop0] = cursor.move(self, _l, _t);\n\t\t}\n\t\telse {\n\t\t\tmouseLeft1 = _l;\n\t\t\tmouseTop1 = _t;\n\t\t}\n\t}\n\n\tconst _hideProps = {\n\t\twidth: 0,\n\t\theight: 0,\n\t\tleft: 0,\n\t\ttop: 0,\n\t};\n\n\tfunction hideSelect() {\n\t\tsetSelect(_hideProps, false);\n\t}\n\n\tlet downSelectLeft;\n\tlet downSelectTop;\n\tlet downSelectWidth;\n\tlet downSelectHeight;\n\n\tfunction mouseDown(e, src, _l, _t, _w, _h, _i) {\n\t\tdragging = true;\n\t\tdragX = dragY = drag._x = drag._y = false;\n\n\t\tcacheMouse(e, src, _l, _t, _w, _h, _i, true, false);\n\n\t\tif (e != null) {\n\t\t\tonMouse(mouseup, doc, mouseUp, false);\n\t\t\tpubSync(mousedown, self, mouseLeft0, mouseTop0, plotWidCss, plotHgtCss, null);\n\t\t}\n\n\t\tlet { left, top, width, height } = select;\n\n\t\tdownSelectLeft   = left;\n\t\tdownSelectTop    = top;\n\t\tdownSelectWidth  = width;\n\t\tdownSelectHeight = height;\n\n\t//\thideSelect();\n\t}\n\n\tfunction mouseUp(e, src, _l, _t, _w, _h, _i) {\n\t\tdragging = drag._x = drag._y = false;\n\n\t\tcacheMouse(e, src, _l, _t, _w, _h, _i, false, true);\n\n\t\tlet { left, top, width, height } = select;\n\n\t\tlet hasSelect = width > 0 || height > 0;\n\t\tlet chgSelect = (\n\t\t\tdownSelectLeft   != left   ||\n\t\t\tdownSelectTop    != top    ||\n\t\t\tdownSelectWidth  != width  ||\n\t\t\tdownSelectHeight != height\n\t\t);\n\n\t\thasSelect && chgSelect && setSelect(select);\n\n\t\tif (drag.setScale && hasSelect && chgSelect) {\n\t\t//\tif (syncKey != null) {\n\t\t//\t\tdragX = drag.x;\n\t\t//\t\tdragY = drag.y;\n\t\t//\t}\n\n\t\t\tlet xOff = left,\n\t\t\t\txDim = width,\n\t\t\t\tyOff = top,\n\t\t\t\tyDim = height;\n\n\t\t\tif (scaleX.ori == 1) {\n\t\t\t\txOff = top,\n\t\t\t\txDim = height,\n\t\t\t\tyOff = left,\n\t\t\t\tyDim = width;\n\t\t\t}\n\n\t\t\tif (dragX) {\n\t\t\t\t_setScale(xScaleKey,\n\t\t\t\t\tposToVal(xOff, xScaleKey),\n\t\t\t\t\tposToVal(xOff + xDim, xScaleKey)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (dragY) {\n\t\t\t\tfor (let k in scales) {\n\t\t\t\t\tlet sc = scales[k];\n\n\t\t\t\t\tif (k != xScaleKey && sc.from == null && sc.min != inf) {\n\t\t\t\t\t\t_setScale(k,\n\t\t\t\t\t\t\tposToVal(yOff + yDim, k),\n\t\t\t\t\t\t\tposToVal(yOff, k)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thideSelect();\n\t\t}\n\t\telse if (cursor.lock) {\n\t\t\tcursor._lock = !cursor._lock;\n\t\t\tupdateCursor(src, true, e != null);\n\t\t}\n\n\t\tif (e != null) {\n\t\t\toffMouse(mouseup, doc);\n\t\t\tpubSync(mouseup, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);\n\t\t}\n\t}\n\n\tfunction mouseLeave(e, src, _l, _t, _w, _h, _i) {\n\t\tif (cursor._lock)\n\t\t\treturn;\n\n\t\tsetCursorEvent(e);\n\n\t\tlet _dragging = dragging;\n\n\t\tif (dragging) {\n\t\t\t// handle case when mousemove aren't fired all the way to edges by browser\n\t\t\tlet snapH = true;\n\t\t\tlet snapV = true;\n\t\t\tlet snapProx = 10;\n\n\t\t\tlet dragH, dragV;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tdragH = dragX;\n\t\t\t\tdragV = dragY;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdragH = dragY;\n\t\t\t\tdragV = dragX;\n\t\t\t}\n\n\t\t\tif (dragH && dragV) {\n\t\t\t\t// maybe omni corner snap\n\t\t\t\tsnapH = mouseLeft1 <= snapProx || mouseLeft1 >= plotWidCss - snapProx;\n\t\t\t\tsnapV = mouseTop1  <= snapProx || mouseTop1  >= plotHgtCss - snapProx;\n\t\t\t}\n\n\t\t\tif (dragH && snapH)\n\t\t\t\tmouseLeft1 = mouseLeft1 < mouseLeft0 ? 0 : plotWidCss;\n\n\t\t\tif (dragV && snapV)\n\t\t\t\tmouseTop1 = mouseTop1 < mouseTop0 ? 0 : plotHgtCss;\n\n\t\t\tupdateCursor(null, true, true);\n\n\t\t\tdragging = false;\n\t\t}\n\n\t\tmouseLeft1 = -10;\n\t\tmouseTop1 = -10;\n\n\t\tactiveIdxs.fill(null);\n\n\t\t// passing a non-null timestamp to force sync/mousemove event\n\t\tupdateCursor(null, true, true);\n\n\t\tif (_dragging)\n\t\t\tdragging = _dragging;\n\t}\n\n\tfunction dblClick(e, src, _l, _t, _w, _h, _i) {\n\t\tif (cursor._lock)\n\t\t\treturn;\n\n\t\tsetCursorEvent(e);\n\n\t\tautoScaleX();\n\n\t\thideSelect();\n\n\t\tif (e != null)\n\t\t\tpubSync(dblclick, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);\n\t}\n\n\tfunction syncPxRatio() {\n\t\taxes.forEach(syncFontSize);\n\t\t_setSize(self.width, self.height, true);\n\t}\n\n\ton(dppxchange, win, syncPxRatio);\n\n\t// internal pub/sub\n\tconst events = {};\n\n\tevents.mousedown = mouseDown;\n\tevents.mousemove = mouseMove;\n\tevents.mouseup = mouseUp;\n\tevents.dblclick = dblClick;\n\tevents[\"setSeries\"] = (e, src, idx, opts) => {\n\t\tlet seriesIdxMatcher = syncOpts.match[2];\n\t\tidx = seriesIdxMatcher(self, src, idx);\n\t\tidx != -1 && setSeries(idx, opts, true, false);\n\t};\n\n\tif (showCursor) {\n\t\tonMouse(mousedown,  over, mouseDown);\n\t\tonMouse(mousemove,  over, mouseMove);\n\t\tonMouse(mouseenter, over, e => {\n\t\t\tsetCursorEvent(e);\n\t\t\tsyncRect(false);\n\t\t});\n\t\tonMouse(mouseleave, over, mouseLeave);\n\n\t\tonMouse(dblclick, over, dblClick);\n\n\t\tcursorPlots.add(self);\n\n\t\tself.syncRect = syncRect;\n\t}\n\n\t// external on/off\n\tconst hooks = self.hooks = opts.hooks || {};\n\n\tfunction fire(evName, a1, a2) {\n\t\tif (deferHooks)\n\t\t\thooksQueue.push([evName, a1, a2]);\n\t\telse {\n\t\t\tif (evName in hooks) {\n\t\t\t\thooks[evName].forEach(fn => {\n\t\t\t\t\tfn.call(null, self, a1, a2);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t(opts.plugins || []).forEach(p => {\n\t\tfor (let evName in p.hooks)\n\t\t\thooks[evName] = (hooks[evName] || []).concat(p.hooks[evName]);\n\t});\n\n\tconst seriesIdxMatcher = (self, src, srcSeriesIdx) => srcSeriesIdx;\n\n\tconst syncOpts = assign({\n\t\tkey: null,\n\t\tsetSeries: false,\n\t\tfilters: {\n\t\t\tpub: retTrue,\n\t\t\tsub: retTrue,\n\t\t},\n\t\tscales: [xScaleKey, series[1] ? series[1].scale : null],\n\t\tmatch: [retEq, retEq, seriesIdxMatcher],\n\t\tvalues: [null, null],\n\t}, cursor.sync);\n\n\tif (syncOpts.match.length == 2)\n\t\tsyncOpts.match.push(seriesIdxMatcher);\n\n\tcursor.sync = syncOpts;\n\n\tconst syncKey = syncOpts.key;\n\n\tconst sync = _sync(syncKey);\n\n\tfunction pubSync(type, src, x, y, w, h, i) {\n\t\tif (syncOpts.filters.pub(type, src, x, y, w, h, i))\n\t\t\tsync.pub(type, src, x, y, w, h, i);\n\t}\n\n\tsync.sub(self);\n\n\tfunction pub(type, src, x, y, w, h, i) {\n\t\tif (syncOpts.filters.sub(type, src, x, y, w, h, i))\n\t\t\tevents[type](null, src, x, y, w, h, i);\n\t}\n\n\tself.pub = pub;\n\n\tfunction destroy() {\n\t\tsync.unsub(self);\n\t\tcursorPlots.delete(self);\n\t\tmouseListeners.clear();\n\t\toff(dppxchange, win, syncPxRatio);\n\t\troot.remove();\n\t\tlegendTable?.remove(); // in case mounted outside of root\n\t\tfire(\"destroy\");\n\t}\n\n\tself.destroy = destroy;\n\n\tfunction _init() {\n\t\tfire(\"init\", opts, data);\n\n\t\tsetData(data || opts.data, false);\n\n\t\tif (pendScales[xScaleKey])\n\t\t\tsetScale(xScaleKey, pendScales[xScaleKey]);\n\t\telse\n\t\t\tautoScaleX();\n\n\t\tshouldSetSelect = select.show && (select.width > 0 || select.height > 0);\n\t\tshouldSetCursor = shouldSetLegend = true;\n\n\t\t_setSize(opts.width, opts.height);\n\t}\n\n\tseries.forEach(initSeries);\n\n\taxes.forEach(initAxis);\n\n\tif (then) {\n\t\tif (then instanceof HTMLElement) {\n\t\t\tthen.appendChild(root);\n\t\t\t_init();\n\t\t}\n\t\telse\n\t\t\tthen(self, _init);\n\t}\n\telse\n\t\t_init();\n\n\treturn self;\n}\n\nuPlot.assign = assign;\nuPlot.fmtNum = fmtNum;\nuPlot.rangeNum = rangeNum;\nuPlot.rangeLog = rangeLog;\nuPlot.rangeAsinh = rangeAsinh;\nuPlot.orient   = orient;\nuPlot.pxRatio = pxRatio;\n\n{\n\tuPlot.join = join;\n}\n\n{\n\tuPlot.fmtDate = fmtDate;\n\tuPlot.tzDate  = tzDate;\n}\n\nuPlot.sync = _sync;\n\n{\n\tuPlot.addGap = addGap;\n\tuPlot.clipGaps = clipGaps;\n\n\tlet paths = uPlot.paths = {\n\t\tpoints,\n\t};\n\n\t(paths.linear  = linear);\n\t(paths.stepped = stepped);\n\t(paths.bars    = bars);\n\t(paths.spline  = monotoneCubic);\n}\n\nexport { uPlot as default };\n", "import { CheckBox, IconInfo, TextInput, debugIcons } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { useState } from \"react\"\nimport * as styles from \"./Icons.styles.ts\"\n\nexport function Icons() {\n\tconst [search, setSearch] = useState(\"\")\n\tconst [showIconSize, setShowIconSize] = useState(true)\n\n\treturn (\n\t\t<div className={styles.iconTab}>\n\t\t\t<div className={styles.controls}>\n\t\t\t\t<TextInput\n\t\t\t\t\tsmall\n\t\t\t\t\tconstantChange\n\t\t\t\t\tvalue={search}\n\t\t\t\t\tonChange={value => {\n\t\t\t\t\t\tsetSearch(value)\n\t\t\t\t\t}}\n\t\t\t\t\tplaceholder=\"Filter by Name\"\n\t\t\t\t\tstyle={{ width: 200 }}\n\t\t\t\t/>\n\t\t\t\t<label>\n\t\t\t\t\t<CheckBox\n\t\t\t\t\t\tvalue={showIconSize}\n\t\t\t\t\t\tonChange={checked => {\n\t\t\t\t\t\t\tsetShowIconSize(checked)\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\tShow Icon Boundaries\n\t\t\t\t</label>\n\t\t\t\t<div className={styles.importInfo}>\n\t\t\t\t\t<IconInfo />\n\t\t\t\t\tImport these icons as{\" \"}\n\t\t\t\t\t<code className={styles.importInfoCode}>{`import { IconAddSmall } from \"@framerjs/fresco\"`}</code>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className={styles.container}>\n\t\t\t\t{Object.entries(debugIcons)\n\t\t\t\t\t.filter(([name]) => name.toLowerCase().includes(search.toLowerCase()))\n\t\t\t\t\t.map(entry => {\n\t\t\t\t\t\tconst [name, Icon] = entry as [string, any]\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div className={styles.containerItem} key={name}>\n\t\t\t\t\t\t\t\t<div className={styles.icon}>\n\t\t\t\t\t\t\t\t\t<div className={cx(showIconSize && styles.iconBoundaries)}>\n\t\t\t\t\t\t\t\t\t\t<Icon />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className={styles.name}>{name}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n", "import \"Icons.styles_ri3bu3.wyw.css\"; export const iconTab = \"iconTab_i21w0us\";\nexport const controls = \"controls_c511q1q\";\nexport const container = \"container_c18npwfh\";\nexport const containerItem = \"containerItem_ch2psr2\";\nexport const icon = \"icon_i8vs7tx\";\nexport const iconBoundaries = \"iconBoundaries_i6l6ytq\";\nexport const name = \"name_navju5v\";\nexport const importInfo = \"importInfo_i1fwqpfp\";\nexport const importInfoCode = \"importInfoCode_i9mvihx\";", "import { Button, Popover, PopupButton, PopupButtonItem, SearchBar, Stack, Text, TextInput } from \"@framerjs/fresco\"\nimport { colors, dimensions } from \"@framerjs/fresco/tokens\"\nimport {\n\tLogLevel,\n\tformatLogTimestamp,\n\tgetLogReplayBuffer,\n\tgetLogTimestamps,\n\tgetLogger,\n\tgetLoggers,\n\thasLogTimestampPrefix,\n\tsetLogLevel,\n\tsetLogTimestamps,\n} from \"@framerjs/shared\"\nimport engine from \"document/engine.ts\"\nimport React from \"react\"\n\nfunction stringFromLogLevel(l: LogLevel): string {\n\treturn LogLevel[l]\n}\n\nfunction logLevelFromString(l: string): LogLevel {\n\treturn LogLevel[l]\n}\n\nfunction isLogLevel(l: string): boolean {\n\tswitch (l.toLowerCase()) {\n\t\tcase \"trace\":\n\t\tcase \"debug\":\n\t\tcase \"info\":\n\t\tcase \"warn\":\n\t\tcase \"error\":\n\t\t\treturn true\n\t\tdefault:\n\t\t\treturn false\n\t}\n}\n\nfunction updateLogLevel(spec: string | null | undefined, logger: string, level: LogLevel): string {\n\tif (!spec) {\n\t\tspec = \"\"\n\t}\n\n\tconst levelString = stringFromLogLevel(level).toLowerCase()\n\n\t// Remove any direct specification set for this logger.\n\tconst parts = spec\n\t\t.split(/[, ]+/u)\n\t\t.filter(s => s.length > 0)\n\t\t.filter(s => !(s.startsWith(logger) && isLogLevel(s.slice(logger.length + 1))))\n\n\t// If something was removed, update the log levels.\n\tconst removed = parts.join(\",\")\n\tif (removed !== spec) {\n\t\tsetLogLevel(removed, false)\n\t}\n\n\t// Test if the current log spec already has the desired effect.\n\tif (getLogger(logger).level === level) {\n\t\tengine.canvasSandbox?.command?.(\"setLogLevel\", removed)\n\t\treturn removed\n\t}\n\n\t// Otherwise add the new log level to the spec string and make it the current log level.\n\tparts.push(`${logger}:${levelString}`)\n\tconst added = parts.join(\",\")\n\tif (added === spec) return spec\n\tsetLogLevel(added, false)\n\tengine.canvasSandbox?.command?.(\"setLogLevel\", added)\n\treturn added\n}\n\nfunction levelDropdown(logger: string, level: LogLevel, spec: string, setSpec: (spec: string) => void) {\n\tconst onSelect = (identifier: string) => {\n\t\tconst level = logLevelFromString(identifier)\n\t\tsetSpec(updateLogLevel(spec, logger, level))\n\t}\n\tconst elem: any[] = []\n\tfor (let l = 0; l < LogLevel.NotLogging; l++) {\n\t\tconst s = stringFromLogLevel(l)\n\t\telem.push(\n\t\t\t<PopupButtonItem key={s} title={s} identifier={s} selected={l === level} onSelect={onSelect}></PopupButtonItem>,\n\t\t)\n\t}\n\treturn <PopupButton wrapperStyle={{ flexGrow: 0, width: 100 }}>{elem}</PopupButton>\n}\n\nexport function Logs() {\n\tconst localStorageSpec = localStorage.getItem(\"logLevel\") || \"\"\n\tconst [spec, setSpec] = React.useState(localStorageSpec)\n\tconst [timestampsEnabled, setTimestampsEnabled] = React.useState(getLogTimestamps())\n\n\tif (spec !== localStorageSpec && typeof localStorageSpec === \"string\") {\n\t\tsetSpec(localStorageSpec)\n\t}\n\n\tconst onSpecInputChanged = React.useCallback(\n\t\t(value: string, final: boolean) => {\n\t\t\tif (!final) return\n\t\t\tconst cleaned = value.split(/[, ]+/u).join(\",\")\n\t\t\tsetLogLevel(cleaned, false)\n\t\t\tengine.canvasSandbox?.command?.(\"setLogLevel\", cleaned)\n\t\t\tsetSpec(cleaned)\n\t\t},\n\t\t[setSpec],\n\t)\n\n\tconst filterButtonRef = React.useRef<HTMLButtonElement>(null)\n\tconst [filterPopover, setFilterPopover] = React.useState(false)\n\n\tReact.useEffect(() => {\n\t\tengine.canvasSandbox?.command?.(\"setLogTimestamps\", timestampsEnabled)\n\t}, [timestampsEnabled])\n\n\treturn (\n\t\t<div style={{ display: \"flex\", flexDirection: \"column\", height: \"100%\" }}>\n\t\t\t<Stack style={{ margin: 5, marginLeft: 0, marginRight: dimensions.css.panelPadding }} direction=\"row\">\n\t\t\t\t<Button ref={filterButtonRef} onClick={() => setFilterPopover(!filterPopover)}>\n\t\t\t\t\t\u2630\n\t\t\t\t</Button>\n\t\t\t\t<TextInput value={spec} onChange={onSpecInputChanged}></TextInput>\n\t\t\t</Stack>\n\t\t\t{filterPopover && (\n\t\t\t\t<FilterPopover\n\t\t\t\t\tspec={spec}\n\t\t\t\t\tsetSpec={setSpec}\n\t\t\t\t\ttimestampsEnabled={timestampsEnabled}\n\t\t\t\t\tsetTimestampsEnabled={setTimestampsEnabled}\n\t\t\t\t\tanchor={filterButtonRef}\n\t\t\t\t\tonClose={() => setFilterPopover(false)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div style={{ flexGrow: 1, display: \"flex\" }}>\n\t\t\t\t<div style={{ position: \"relative\", height: \"100%\", flexGrow: 1 }}>\n\t\t\t\t\t<LogEntries />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nclass LogEntries extends React.Component {\n\tstickToBottom = true\n\tref = React.createRef<HTMLDivElement>()\n\n\tonScroll = (_event: React.UIEvent<HTMLDivElement>) => {\n\t\tthis.stickToBottom = false\n\t\tconst div = this.ref.current\n\t\tif (!div) return\n\t\tif (div.scrollTop + 1 >= div.scrollHeight - (div.parentElement?.scrollHeight ?? 0)) {\n\t\t\tthis.stickToBottom = true\n\t\t}\n\t}\n\n\toverride componentDidMount(): void {\n\t\tif (!this.stickToBottom) return\n\t\tconst div = this.ref.current\n\t\tif (!div) return\n\t\tdiv.scrollTop = div.scrollHeight\n\t}\n\n\toverride componentDidUpdate(): void {\n\t\tif (!this.stickToBottom) return\n\t\tconst div = this.ref.current\n\t\tif (!div) return\n\t\tdiv.scrollTop = div.scrollHeight\n\t}\n\n\toverride render() {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tinset: 0,\n\t\t\t\t\toverflowY: \"scroll\",\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tfontFamily: \"Menlo, Consolas, monospace\",\n\t\t\t\t\toverflowWrap: \"break-word\",\n\t\t\t\t\twhiteSpace: \"pre\",\n\t\t\t\t}}\n\t\t\t\tonScroll={this.onScroll}\n\t\t\t\tref={this.ref}\n\t\t\t>\n\t\t\t\t{getLogReplayBuffer(10_000 /* maxEntries */).map(entry => {\n\t\t\t\t\tif (entry.logger.level > entry.level) return null\n\t\t\t\t\tconst background = entry.level >= LogLevel.Warn ? colors.warningBadgeBackground : \"transparent\"\n\t\t\t\t\tconst text = entry.toString()\n\t\t\t\t\tconst textWithTimestamp = hasLogTimestampPrefix(text) ? text : `${formatLogTimestamp(entry.time)} ${text}`\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={entry.id} style={{ background, userSelect: \"text\" }}>\n\t\t\t\t\t\t\t{textWithTimestamp}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</div>\n\t\t)\n\t}\n}\n\nfunction FilterPopover({\n\tspec,\n\tsetSpec,\n\ttimestampsEnabled,\n\tsetTimestampsEnabled,\n\tanchor,\n\tonClose,\n}: {\n\tspec: string\n\tsetSpec: (spec: string) => void\n\ttimestampsEnabled: boolean\n\tsetTimestampsEnabled: (enabled: boolean) => void\n\tanchor: React.RefObject<HTMLElement>\n\tonClose: () => void\n}) {\n\tconst [search, setSearch] = React.useState(\"\")\n\n\tconst onSearchChanged = React.useCallback(\n\t\t(value: string, _final: boolean) => {\n\t\t\tsetSearch(value)\n\t\t},\n\t\t[setSearch],\n\t)\n\n\tconst onReset = React.useCallback(() => {\n\t\tsetLogLevel(\"app:info\", false)\n\t\tengine.canvasSandbox?.command?.(\"setLogLevel\", \"app:info\")\n\t\tsetSpec(\"app:info\")\n\t}, [setSpec])\n\n\tconst onDebug = React.useCallback(() => {\n\t\tsetLogLevel(\"*:debug\", false)\n\t\tengine.canvasSandbox?.command?.(\"setLogLevel\", \"*:debug\")\n\t\tsetSpec(\"*:debug\")\n\t}, [setSpec])\n\n\tconst onError = React.useCallback(() => {\n\t\tsetLogLevel(\"*:error\", false)\n\t\tengine.canvasSandbox?.command?.(\"setLogLevel\", \"*:error\")\n\t\tsetSpec(\"*:error\")\n\t}, [setSpec])\n\n\tconst onToggleTimestamps = React.useCallback(() => {\n\t\tconst nextValue = !timestampsEnabled\n\t\tsetLogTimestamps(nextValue)\n\t\tsetTimestampsEnabled(nextValue)\n\t}, [setTimestampsEnabled, timestampsEnabled])\n\n\treturn (\n\t\t<Popover\n\t\t\tanchor={anchor.current}\n\t\t\talignSelf=\"center\"\n\t\t\tattachTo=\"right\"\n\t\t\tstyle={{ padding: 5, color: colors.panelText }}\n\t\t\tonClose={onClose}\n\t\t\tshowArrow={false}\n\t\t>\n\t\t\t<div style={{ width: 400 }}>\n\t\t\t\t<Stack padding={dimensions.css.panelPadding}>\n\t\t\t\t\t<Stack direction=\"row\">\n\t\t\t\t\t\t<Button onClick={onReset}>Default</Button> <Button onClick={onDebug}>All Debug</Button>\n\t\t\t\t\t\t<Button onClick={onError}>All Error</Button>\n\t\t\t\t\t\t<Button onClick={onToggleTimestamps}>{timestampsEnabled ? \"Timestamps On\" : \"Timestamps Off\"}</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<SearchBar value={search} onChange={onSearchChanged}></SearchBar>\n\t\t\t\t\t<div style={{ height: 400, width: \"100%\", overflowY: \"scroll\" }}>\n\t\t\t\t\t\t<LoggerList search={search} spec={spec} setSpec={setSpec} />\n\t\t\t\t\t</div>\n\t\t\t\t</Stack>\n\t\t\t</div>\n\t\t</Popover>\n\t)\n}\n\nfunction matches(search: string, name: string): boolean {\n\tname = name.toLowerCase()\n\tconst parts = search.toLowerCase().split(/[ .,:;]/u)\n\tfor (const part of parts) {\n\t\tif (part.length === 0) continue\n\t\tif (part.length > name.length) return false\n\t\tif (!name.includes(part)) return false\n\t}\n\treturn true\n}\n\nfunction LoggerList({ search, spec, setSpec }: { search: string; spec: string; setSpec: (spec: string) => void }) {\n\tconst loggers: string[] = getLoggers().sort((a, b) =>\n\t\ta.localeCompare(b, undefined, { numeric: true, ignorePunctuation: true, sensitivity: \"base\" }),\n\t)\n\n\tconst mentionedLoggers = new Set<string>()\n\tspec.split(/[, ]+/u).forEach(s => {\n\t\tconst x = s.lastIndexOf(\":\")\n\t\tif (x >= 0 && isLogLevel(s.slice(x + 1))) {\n\t\t\tmentionedLoggers.add(s.slice(0, x))\n\t\t} else {\n\t\t\tmentionedLoggers.add(s)\n\t\t}\n\t})\n\n\treturn (\n\t\t<>\n\t\t\t{loggers.map(name => {\n\t\t\t\tif (search.length > 0 && !matches(search, name)) return null\n\n\t\t\t\tconst logger = getLogger(name)\n\t\t\t\tconst mentioned = mentionedLoggers.has(name)\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={name}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tbackground: mentioned ? colors.highlightsBackground : undefined,\n\t\t\t\t\t\t\tmargin: 1,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tsize={12}\n\t\t\t\t\t\t\tstyle={{ fontWeight: 600, color: colors.panelTitle, flexGrow: 1, paddingTop: 10 }}\n\t\t\t\t\t\t\tonMouseDown={() => {\n\t\t\t\t\t\t\t\tconst level = logger.level <= LogLevel.Debug ? LogLevel.Warn : LogLevel.Debug\n\t\t\t\t\t\t\t\tsetSpec(updateLogLevel(spec, name, level))\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{name}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t{levelDropdown(name, logger.level, spec, setSpec)}\n\t\t\t\t\t</div>\n\t\t\t\t)\n\t\t\t})}\n\t\t</>\n\t)\n}\n", "import { Button, CheckBox, TextInput } from \"@framerjs/fresco\"\nimport { rgba } from \"@framerjs/fresco/src/tokens/utils/rgba\"\nimport { palette } from \"@framerjs/fresco/tokens\"\nimport { ModuleType, asLocalId, delay, getLogger } from \"@framerjs/shared\"\nimport { formatCode } from \"code-editor/prettierFormatter.ts\"\nimport { getWebPagePath } from \"document/components/utils/getWebPagePath.ts\"\nimport { showCanvasNode } from \"document/components/utils/showCanvasNode.ts\"\nimport engine from \"document/engine.ts\"\nimport { isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport type { Immutable } from \"immer\"\nimport { memoize } from \"library/utils/memoize.ts\"\nimport type { ModuleEntry } from \"modules/ModulesStorage.ts\"\nimport { escapeRegExp } from \"modules/rewriteRelativeImports.ts\"\nimport { isSubmoduleImport } from \"modules/submodules.ts\"\nimport { getTypeSlashName } from \"modules/utils.ts\"\nimport Prism from \"prismjs\"\nimport React from \"react\"\nimport \"prismjs/components/prism-jsx.js\"\nimport \"prismjs/components/prism-tsx.js\"\nimport \"prismjs/themes/prism-okaidia.css\"\nimport { tsExtension, tsxExtension } from \"utils/fileExtensionNames.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { useDarkMode } from \"web/lib/useDarkMode.ts\"\nimport * as styles from \"./Modules.styles.ts\"\n\nconst log = getLogger(\"debugbar:modules\")\n\nconst errorColor = rgba(palette.red100, 0.15)\nconst notLoadedColor = rgba(palette.green100, 0.15)\nconst transientColor = rgba(palette.yellow120, 0.5)\nconst highlightColor = rgba(palette.yellow120, 0.5)\n\ntype ModuleContentEntry = {\n\tcontent: string\n\trevision: number | null\n}\n\n/**\n * Like regular HTML details, but renders children only when open. This improves React performance,\n * which matters because `children` of modules do expensive formatting and syntax highlighting.\n */\nconst Details = React.memo(function Details({\n\tsummary,\n\tchildren,\n\t...props\n}: Omit<React.HTMLProps<HTMLDetailsElement>, \"summary\"> & { summary: React.ReactNode }) {\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\treturn (\n\t\t<details {...props} open={isOpen} onToggle={e => setIsOpen(e.currentTarget.open)}>\n\t\t\t<summary>{summary}</summary>\n\t\t\t{isOpen ? children : null}\n\t\t</details>\n\t)\n})\n\nconst FormattedCodePreview = React.memo(function FormattedCodePreview({\n\tcode,\n\tcontentToHighlight,\n}: {\n\tcode: string\n\tcontentToHighlight: string\n}) {\n\tconst [formattedCode, setFormattedCode] = React.useState(\"\")\n\n\tReact.useEffect(() => {\n\t\tformatCodeForPreview(code, \"typescript\")\n\t\t\t.then(formattedCode => {\n\t\t\t\tsetFormattedCode(formattedCode)\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tlog.error(\"Error formatting code\", error)\n\t\t\t\tsetFormattedCode(code)\n\t\t\t})\n\t}, [code])\n\n\tconst highlightedCode = highlightCode(formattedCode)\n\n\tconst { isDarkMode } = useDarkMode()\n\n\treturn (\n\t\t<pre className={`${styles.codePreview} ${isDarkMode ? styles.codePreviewDark : styles.codePreviewLight}`}>\n\t\t\t<code style={{ position: \"relative\" }}>\n\t\t\t\t{/* A copy of the code with the highlights applied. This is a cheap hack to highlight\n\t\t\t\t * arbitrary text ranges without working around Prism.js wrapping parts of code\n\t\t\t\t * with spans. */}\n\t\t\t\t<div style={{ position: \"absolute\", pointerEvents: \"none\", color: \"transparent\", userSelect: \"none\" }}>\n\t\t\t\t\t{highlightMatchesWithJSX(formattedCode, contentToHighlight)}\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\t// Allow native right clicks\n\t\t\t\t\tclassName=\"wantsNativeTextAction\"\n\t\t\t\t\t// biome-ignore lint/security/noDangerouslySetInnerHtml: Prism.js requires this\n\t\t\t\t\tdangerouslySetInnerHTML={{ __html: highlightedCode }}\n\t\t\t\t/>\n\t\t\t</code>\n\t\t</pre>\n\t)\n})\n\nconst jsExtensionRegex = /\\.js$/\n\nfunction getModuleLink(module: Immutable<ModuleEntry>) {\n\tconst moduleExtension = module.type === ModuleType.Shader ? tsExtension : tsxExtension\n\treturn module.kind !== \"fast-refresh\" ? module.moduleURL.replace(jsExtensionRegex, moduleExtension) : undefined\n}\n\nconst Module = React.memo(function Module({\n\ttypeSlashName,\n\tmodule,\n\tmoduleContent,\n\tisEvaluated,\n\tcontentToHighlight,\n}: {\n\ttypeSlashName: string\n\tmodule: Immutable<ModuleEntry>\n\tmoduleContent: string | undefined\n\tisEvaluated: boolean\n\tcontentToHighlight: string\n}) {\n\tconst moduleLink = getModuleLink(module)\n\n\tconst localId = asLocalId(module.localId)\n\n\tconst nodeId = nodeIdForModule(module)\n\tconst node = nodeId ? engine.tree.get(nodeId) : undefined\n\n\tconst status: React.ReactElement[] = []\n\tconst displayName = getModuleDisplayName(module)\n\tif (displayName) {\n\t\tstatus.push(<b>{highlightMatchesWithJSX(displayName, contentToHighlight)}</b>)\n\t}\n\n\tif ((module.type === ModuleType.Canvas || module.type === ModuleType.Screen) && node) {\n\t\tstatus.push(\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tstyle={{ all: \"unset\", textDecoration: \"underline\", cursor: \"pointer\" }}\n\t\t\t\tonClick={() => {\n\t\t\t\t\t// Don\u2019t zoom since we won\u2019t have correct rects for a WebPageNode or a ComponentNode\n\t\t\t\t\tshowCanvasNode(engine, node, false)\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tView on canvas\n\t\t\t</button>,\n\t\t)\n\t}\n\n\tif (module.kind === \"local\" || module.kind === \"fast-refresh\") {\n\t\tstatus.push(<span>compiled locally {module.kind === \"fast-refresh\" ? \"with fast refresh\" : \"\"}</span>)\n\t} else if (\"sourceContent\" in module && module.sourceContent) {\n\t\tstatus.push(<span>source downloaded</span>)\n\t}\n\n\tif (!node) {\n\t\tstatus.push(<span style={{ background: errorColor }}>missing in tree</span>)\n\t}\n\n\tif (module.type !== \"css\" && module.type !== \"siteMetadata\" && module.type !== \"webPageMetadata\") {\n\t\tif (!isEvaluated) {\n\t\t\tstatus.push(<span style={{ background: notLoadedColor }}>missing in component loader</span>)\n\t\t}\n\t}\n\n\tfor (const path of module.relativeImports) {\n\t\tconst localId = localIdForImportPath(module, path)\n\t\tif (engine.stores.modulesStore.localModules.get(localId)) continue\n\t\tif (isSubmoduleImport(path)) continue\n\t\tstatus.push(<span style={{ background: errorColor, userSelect: \"text\" }}>missing import ${localId}</span>)\n\t}\n\n\tif (module.relativeImports.length > 0) {\n\t\tstatus.push(<span style={{ userSelect: \"text\" }}>imports: [{module.relativeImports.join(\", \")}]</span>)\n\t}\n\n\tconst transient = !!engine.stores.modulesStore.getTransientSave(localId)\n\tif (transient) {\n\t\tstatus.push(<span style={{ background: transientColor }}>transient</span>)\n\t}\n\n\t// Add separators between status fields.\n\tfor (let i = status.length - 1; i >= 0; i--) {\n\t\tstatus.splice(i, 0, <span> \u00B7 </span>)\n\t}\n\n\tconst keyedStatus = status.map((item, key) => React.cloneElement(item, { key }))\n\n\treturn (\n\t\t<Details\n\t\t\tsummary={\n\t\t\t\t<>\n\t\t\t\t\t<a href={moduleLink} target=\"_blank\" rel=\"noreferrer\" style={{ color: \"inherit\" }}>\n\t\t\t\t\t\t<b>{highlightMatchesWithJSX(typeSlashName, contentToHighlight)}</b>\n\t\t\t\t\t</a>\n\t\t\t\t\t{module.sourceRevision && <span> ({module.sourceRevision})</span>}\n\t\t\t\t\t{keyedStatus}\n\t\t\t\t</>\n\t\t\t}\n\t\t>\n\t\t\t{moduleContent && (\n\t\t\t\t<>\n\t\t\t\t\t<div style={{ display: \"flex\", gap: 10, marginTop: 10 }}>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tformatCodeForPreview(moduleContent, \"typescript\")\n\t\t\t\t\t\t\t\t\t.then(formattedCode => {\n\t\t\t\t\t\t\t\t\t\treturn navigator.clipboard.writeText(formattedCode)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\t\t\t\t\tlog.error(\"Error formatting or copying code\", error)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tCopy to Clipboard\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<FormattedCodePreview code={moduleContent} contentToHighlight={contentToHighlight} />\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Details>\n\t)\n})\n\nexport function Modules() {\n\tconst evaluatedComponents = new Set<string>()\n\tfor (const component of engine.componentLoader.getAllEntities()) {\n\t\tif (!component.identifier.startsWith(\"local-module:\")) continue\n\t\tconst moduleName = component.identifier.split(\":\")[1]\n\t\tif (!moduleName) continue\n\t\tevaluatedComponents.add(moduleName)\n\t}\n\n\tconst moduleList = Array.from(engine.stores.modulesStore.localModules.entries()).map(([typeSlashName, module]) => {\n\t\tlet currentModule: Immutable<ModuleEntry> | undefined\n\t\tif (engine.stores.modulesStore.fastRefreshModules.has(typeSlashName)) {\n\t\t\tcurrentModule = engine.stores.modulesStore.fastRefreshModules.get(typeSlashName)\n\t\t} else {\n\t\t\tcurrentModule = module\n\t\t}\n\n\t\treturn [typeSlashName, currentModule] as const\n\t})\n\n\tconst [moduleContents, setModuleContents] = React.useState<Record<string, ModuleContentEntry>>({})\n\tReact.useEffect(() => {\n\t\tlet cancelled = false\n\n\t\tvoid (async () => {\n\t\t\tconst modulesToFetch = moduleList.filter(([typeSlashName, module]) => {\n\t\t\t\tconst existing = moduleContents[typeSlashName]\n\t\t\t\tif (!module) {\n\t\t\t\t\treturn !existing\n\t\t\t\t}\n\t\t\t\treturn !existing || existing.revision !== module.update\n\t\t\t})\n\n\t\t\tif (modulesToFetch.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst updatedModuleContents: Record<string, ModuleContentEntry> = {}\n\n\t\t\tconst promises = modulesToFetch.map(async ([typeSlashName, module]) => {\n\t\t\t\tif (module) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tupdatedModuleContents[typeSlashName] = {\n\t\t\t\t\t\t\tcontent: await moduleContent(module),\n\t\t\t\t\t\t\trevision: module.update,\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlog.error(\"Error getting module content\", error)\n\t\t\t\t\t\tupdatedModuleContents[typeSlashName] = {\n\t\t\t\t\t\t\tcontent: \"Error getting module content\",\n\t\t\t\t\t\t\trevision: module.update,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tupdatedModuleContents[typeSlashName] = {\n\t\t\t\t\tcontent: \"No module for this ID\",\n\t\t\t\t\trevision: null,\n\t\t\t\t}\n\t\t\t})\n\t\t\tawait Promise.allSettled(promises)\n\n\t\t\tif (cancelled || Object.keys(updatedModuleContents).length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tReact.startTransition(() => {\n\t\t\t\tsetModuleContents(prev => ({ ...prev, ...updatedModuleContents }))\n\t\t\t})\n\t\t})()\n\n\t\treturn () => {\n\t\t\tcancelled = true\n\t\t}\n\t})\n\n\tconst kitTypeSlashName = getTypeSlashName({ type: ModuleType.Kit, name: \"kit\" })\n\tconst kit = engine.stores.modulesStore.getPersistedModuleByLocalId(asLocalId(kitTypeSlashName))\n\n\tconst [filter, setFilter] = React.useState(\"\")\n\tconst deferredFilter = React.useDeferredValue(filter)\n\tconst allModuleCategories = new Set(moduleList.map(([typeSlashName]) => typeSlashName.split(\"/\")[0]))\n\tconst [enabledCategories, setEnabledCategories] = React.useState<Set<string>>(() => new Set())\n\n\treturn (\n\t\t<div>\n\t\t\t<div style={{ display: \"flex\", gap: 20, marginBottom: 10 }}>\n\t\t\t\t<TextInput\n\t\t\t\t\tsmall\n\t\t\t\t\tconstantChange\n\t\t\t\t\tvalue={filter}\n\t\t\t\t\tonChange={value => {\n\t\t\t\t\t\tsetFilter(value)\n\t\t\t\t\t}}\n\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\"Filter modules \" +\n\t\t\t\t\t\t(Object.keys(moduleContents).length < moduleList.length\n\t\t\t\t\t\t\t? `(Loading ${moduleList.length - Object.keys(moduleContents).length}\u2026)`\n\t\t\t\t\t\t\t: \"\")\n\t\t\t\t\t}\n\t\t\t\t\tstyle={{ width: 250 }}\n\t\t\t\t/>\n\t\t\t\t<div style={{ display: \"flex\", alignItems: \"center\", gap: 10, flexWrap: \"wrap\" }}>\n\t\t\t\t\t{Array.from(allModuleCategories).map(category => (\n\t\t\t\t\t\t<label key={category} style={{ display: \"flex\", gap: 4, alignItems: \"center\" }}>\n\t\t\t\t\t\t\t<CheckBox\n\t\t\t\t\t\t\t\tvalue={enabledCategories.has(category)}\n\t\t\t\t\t\t\t\tonChange={checked => {\n\t\t\t\t\t\t\t\t\tsetEnabledCategories(prev => {\n\t\t\t\t\t\t\t\t\t\tconst newSet = new Set(prev)\n\t\t\t\t\t\t\t\t\t\tif (checked) {\n\t\t\t\t\t\t\t\t\t\t\tnewSet.add(category)\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tnewSet.delete(category)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn newSet\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{category}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{kit && (\n\t\t\t\t<div key={kitTypeSlashName}>\n\t\t\t\t\t<a href={kit.moduleURL} target=\"_blank\" rel=\"noreferrer\">\n\t\t\t\t\t\t<b>{kitTypeSlashName}</b>\n\t\t\t\t\t</a>\n\t\t\t\t\t<b>, {kit.metadata.title as string}</b>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{moduleList.map(([typeSlashName, module]) => {\n\t\t\t\tif (enabledCategories.size > 0 && !enabledCategories.has(typeSlashName.split(\"/\")[0])) return null\n\t\t\t\t// FIXME: when a user tries to filter by some text, we end up filtering in\n\t\t\t\t// non-formatted code\u00B9 \u2013 but displaying formatted code when modules open. This might\n\t\t\t\t// lead to edge cases when you\u2019re searching for something you see in an open module\n\t\t\t\t// \u2013 and are not finding it. A good fix here would be either moving Prettier to a\n\t\t\t\t// worker (v annoying with esbuild), or using @biomejs/js-api when it\u2019s a bit more\n\t\t\t\t// stable.\n\t\t\t\t//\n\t\t\t\t// \u00B9 \u2014 mainly for perf reasons \u2013 formatting even 900 modules with Prettier takes 10s\n\t\t\t\t// on my M2 Pro\n\t\t\t\tif (\n\t\t\t\t\tdeferredFilter &&\n\t\t\t\t\t!typeSlashName.toLowerCase().includes(deferredFilter.toLowerCase()) &&\n\t\t\t\t\t!moduleContents[typeSlashName]?.content?.toLowerCase().includes(deferredFilter.toLowerCase()) &&\n\t\t\t\t\t!(module && getModuleDisplayName(module)?.toLowerCase().includes(deferredFilter.toLowerCase()))\n\t\t\t\t) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tif (!module) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={typeSlashName} style={{ background: errorColor }}>\n\t\t\t\t\t\t\t<b>{typeSlashName}</b> missing module\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tconst persistedModule = engine.stores.modulesStore.getPersistedModuleByLocalId(asLocalId(module.localId))\n\t\t\t\tif (!persistedModule) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={typeSlashName} style={{ background: errorColor }}>\n\t\t\t\t\t\t\t<b>{typeSlashName}</b> missing persisted module\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<Module\n\t\t\t\t\t\tkey={typeSlashName}\n\t\t\t\t\t\ttypeSlashName={typeSlashName}\n\t\t\t\t\t\tmodule={module}\n\t\t\t\t\t\tmoduleContent={moduleContents[typeSlashName]?.content}\n\t\t\t\t\t\tisEvaluated={evaluatedComponents.has(module.localId)}\n\t\t\t\t\t\tcontentToHighlight={deferredFilter}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t})}\n\t\t</div>\n\t)\n}\n\nfunction localIdForImportPath(module: { localId: string }, path: string): string {\n\tif (path.startsWith(\"./\")) {\n\t\treturn module.localId.split(\"/\")[0] + \"/\" + path.slice(2)\n\t} else if (path.startsWith(\"../\")) {\n\t\treturn path.slice(3)\n\t}\n\treturn path\n}\n\nfunction nodeIdForModule(module: { localId: string }): string | undefined {\n\tconst split = module.localId.split(\"/\")\n\tconst id = split[1]\n\tif (!id) return\n\n\treturn id\n}\n\nfunction getModuleDisplayName(module: Immutable<ModuleEntry>): string | undefined {\n\tconst nodeId = nodeIdForModule(module)\n\tconst node = nodeId ? engine.tree.get(nodeId) : undefined\n\n\tif (module.type === \"screen\" && isWebPageNode(node)) {\n\t\treturn getWebPagePath(engine.tree, node)\n\t}\n\n\tconst persistedModule = engine.stores.modulesStore.getPersistedModuleByLocalId(asLocalId(module.localId))\n\treturn persistedModule?.title\n}\n\nasync function moduleContent(module: Immutable<ModuleEntry>) {\n\tconst resolvedLink = getModuleLink(module)\n\n\tif (\"sourceContent\" in module && isString(module.sourceContent)) {\n\t\treturn module.sourceContent\n\t} else if (\"moduleContent\" in module && module.moduleContent) {\n\t\treturn module.moduleContent\n\t} else if (resolvedLink) {\n\t\treturn fetchTextWithBackoff(resolvedLink)\n\t} else {\n\t\treturn \"No source content\"\n\t}\n}\n\nfunction highlightMatchesWithJSX(text: string, whatToHighlight: string) {\n\tif (!whatToHighlight) return text\n\n\t// This code is a lil complicated for the purposes of allowing case-insensitive matching\n\tconst regex = new RegExp(escapeRegExp(whatToHighlight), \"gi\")\n\tconst nodes: React.ReactNode[] = []\n\tlet lastIndex = 0\n\tlet key = 0\n\tlet match: RegExpExecArray | null\n\n\t// eslint-disable-next-line framer-studio/no-global-regex-in-test-exec -- intentional, we rely on the regex state to keep iterating over matches\n\twhile ((match = regex.exec(text)) !== null) {\n\t\tconst start = match.index\n\t\tconst end = start + match[0].length\n\n\t\t// Push text between the last and the current match (if any)\n\t\tif (start > lastIndex) {\n\t\t\tconst slice = text.slice(lastIndex, start)\n\t\t\tif (slice) {\n\t\t\t\tnodes.push(<span key={`text-${key++}`}>{slice}</span>)\n\t\t\t}\n\t\t}\n\n\t\t// Push the current match\n\t\tnodes.push(\n\t\t\t<mark key={`mark-${key++}`} style={{ background: highlightColor }}>\n\t\t\t\t{text.slice(start, end)}\n\t\t\t</mark>,\n\t\t)\n\n\t\tlastIndex = end\n\t}\n\n\tif (lastIndex < text.length) {\n\t\tconst slice = text.slice(lastIndex)\n\t\tif (slice) {\n\t\t\tnodes.push(<span key={`text-${key++}`}>{slice}</span>)\n\t\t}\n\t}\n\n\treturn nodes.length > 0 ? nodes : text\n}\n\nconst fetchCache = new Map<string, Promise<string>>()\nfunction fetchTextWithBackoff(url: string) {\n\treturn memoize(5000, fetchCache, url, async () => {\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\ttry {\n\t\t\t\treturn await fetch(url).then(res => res.text())\n\t\t\t} catch {\n\t\t\t\tawait delay(1000 * 2 ** i * (0.5 + Math.random()))\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Failed to fetch after 3 retries\")\n\t})\n}\n\nconst formattedCodeCache = new Map<string, Promise<string>>()\nfunction formatCodeForPreview(content: string, languageId: string): Promise<string> {\n\treturn memoize(5000, formattedCodeCache, `${content}-${languageId}`, () => formatCode(content, languageId))\n}\n\nconst highlightedCodeCache = new Map<string, string>()\nfunction highlightCode(code: string) {\n\treturn memoize(5000, highlightedCodeCache, code, () => Prism.highlight(code, Prism.languages.tsx!, \"tsx\"))\n}\n", "(function (Prism) {\n\n\tvar javascript = Prism.util.clone(Prism.languages.javascript);\n\n\tvar space = /(?:\\s|\\/\\/.*(?!.)|\\/\\*(?:[^*]|\\*(?!\\/))\\*\\/)/.source;\n\tvar braces = /(?:\\{(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])*\\})/.source;\n\tvar spread = /(?:\\{<S>*\\.{3}(?:[^{}]|<BRACES>)*\\})/.source;\n\n\t/**\n\t * @param {string} source\n\t * @param {string} [flags]\n\t */\n\tfunction re(source, flags) {\n\t\tsource = source\n\t\t\t.replace(/<S>/g, function () { return space; })\n\t\t\t.replace(/<BRACES>/g, function () { return braces; })\n\t\t\t.replace(/<SPREAD>/g, function () { return spread; });\n\t\treturn RegExp(source, flags);\n\t}\n\n\tspread = re(spread).source;\n\n\n\tPrism.languages.jsx = Prism.languages.extend('markup', javascript);\n\tPrism.languages.jsx.tag.pattern = re(\n\t\t/<\\/?(?:[\\w.:-]+(?:<S>+(?:[\\w.:$-]+(?:=(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|'(?:\\\\[\\s\\S]|[^\\\\'])*'|[^\\s{'\"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\\/?)?>/.source\n\t);\n\n\tPrism.languages.jsx.tag.inside['tag'].pattern = /^<\\/?[^\\s>\\/]*/;\n\tPrism.languages.jsx.tag.inside['attr-value'].pattern = /=(?!\\{)(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|'(?:\\\\[\\s\\S]|[^\\\\'])*'|[^\\s'\">]+)/;\n\tPrism.languages.jsx.tag.inside['tag'].inside['class-name'] = /^[A-Z]\\w*(?:\\.[A-Z]\\w*)*$/;\n\tPrism.languages.jsx.tag.inside['comment'] = javascript['comment'];\n\n\tPrism.languages.insertBefore('inside', 'attr-name', {\n\t\t'spread': {\n\t\t\tpattern: re(/<SPREAD>/.source),\n\t\t\tinside: Prism.languages.jsx\n\t\t}\n\t}, Prism.languages.jsx.tag);\n\n\tPrism.languages.insertBefore('inside', 'special-attr', {\n\t\t'script': {\n\t\t\t// Allow for two levels of nesting\n\t\t\tpattern: re(/=<BRACES>/.source),\n\t\t\talias: 'language-javascript',\n\t\t\tinside: {\n\t\t\t\t'script-punctuation': {\n\t\t\t\t\tpattern: /^=(?=\\{)/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\trest: Prism.languages.jsx\n\t\t\t},\n\t\t}\n\t}, Prism.languages.jsx.tag);\n\n\t// The following will handle plain text inside tags\n\tvar stringifyToken = function (token) {\n\t\tif (!token) {\n\t\t\treturn '';\n\t\t}\n\t\tif (typeof token === 'string') {\n\t\t\treturn token;\n\t\t}\n\t\tif (typeof token.content === 'string') {\n\t\t\treturn token.content;\n\t\t}\n\t\treturn token.content.map(stringifyToken).join('');\n\t};\n\n\tvar walkTokens = function (tokens) {\n\t\tvar openedTags = [];\n\t\tfor (var i = 0; i < tokens.length; i++) {\n\t\t\tvar token = tokens[i];\n\t\t\tvar notTagNorBrace = false;\n\n\t\t\tif (typeof token !== 'string') {\n\t\t\t\tif (token.type === 'tag' && token.content[0] && token.content[0].type === 'tag') {\n\t\t\t\t\t// We found a tag, now find its kind\n\n\t\t\t\t\tif (token.content[0].content[0].content === '</') {\n\t\t\t\t\t\t// Closing tag\n\t\t\t\t\t\tif (openedTags.length > 0 && openedTags[openedTags.length - 1].tagName === stringifyToken(token.content[0].content[1])) {\n\t\t\t\t\t\t\t// Pop matching opening tag\n\t\t\t\t\t\t\topenedTags.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (token.content[token.content.length - 1].content === '/>') {\n\t\t\t\t\t\t\t// Autoclosed tag, ignore\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Opening tag\n\t\t\t\t\t\t\topenedTags.push({\n\t\t\t\t\t\t\t\ttagName: stringifyToken(token.content[0].content[1]),\n\t\t\t\t\t\t\t\topenedBraces: 0\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (openedTags.length > 0 && token.type === 'punctuation' && token.content === '{') {\n\n\t\t\t\t\t// Here we might have entered a JSX context inside a tag\n\t\t\t\t\topenedTags[openedTags.length - 1].openedBraces++;\n\n\t\t\t\t} else if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces > 0 && token.type === 'punctuation' && token.content === '}') {\n\n\t\t\t\t\t// Here we might have left a JSX context inside a tag\n\t\t\t\t\topenedTags[openedTags.length - 1].openedBraces--;\n\n\t\t\t\t} else {\n\t\t\t\t\tnotTagNorBrace = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (notTagNorBrace || typeof token === 'string') {\n\t\t\t\tif (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces === 0) {\n\t\t\t\t\t// Here we are inside a tag, and not inside a JSX context.\n\t\t\t\t\t// That's plain text: drop any tokens matched.\n\t\t\t\t\tvar plainText = stringifyToken(token);\n\n\t\t\t\t\t// And merge text with adjacent text\n\t\t\t\t\tif (i < tokens.length - 1 && (typeof tokens[i + 1] === 'string' || tokens[i + 1].type === 'plain-text')) {\n\t\t\t\t\t\tplainText += stringifyToken(tokens[i + 1]);\n\t\t\t\t\t\ttokens.splice(i + 1, 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (i > 0 && (typeof tokens[i - 1] === 'string' || tokens[i - 1].type === 'plain-text')) {\n\t\t\t\t\t\tplainText = stringifyToken(tokens[i - 1]) + plainText;\n\t\t\t\t\t\ttokens.splice(i - 1, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\n\t\t\t\t\ttokens[i] = new Prism.Token('plain-text', plainText, null, plainText);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (token.content && typeof token.content !== 'string') {\n\t\t\t\twalkTokens(token.content);\n\t\t\t}\n\t\t}\n\t};\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'jsx' && env.language !== 'tsx') {\n\t\t\treturn;\n\t\t}\n\t\twalkTokens(env.tokens);\n\t});\n\n}(Prism));\n", "(function (Prism) {\n\tvar typescript = Prism.util.clone(Prism.languages.typescript);\n\tPrism.languages.tsx = Prism.languages.extend('jsx', typescript);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.tsx['parameter'];\n\tdelete Prism.languages.tsx['literal-property'];\n\n\t// This will prevent collisions between TSX tags and TS generic types.\n\t// Idea by https://github.com/karlhorky\n\t// Discussion: https://github.com/PrismJS/prism/issues/2594#issuecomment-710666928\n\tvar tag = Prism.languages.tsx.tag;\n\ttag.pattern = RegExp(/(^|[^\\w$]|(?=<\\/))/.source + '(?:' + tag.pattern.source + ')', tag.pattern.flags);\n\ttag.lookbehind = true;\n}(Prism));\n", "import \"Modules.styles_1mezhkb.wyw.css\"; export const codePreview = \"codePreview_c18psk33\";\nexport const codePreviewLight = \"codePreviewLight_cqh1izo\";\nexport const codePreviewDark = \"codePreviewDark_cwiuxvl\";", "import type { StackProps } from \"@framerjs/fresco\"\nimport { Stack } from \"@framerjs/fresco\"\nimport React, { useEffect, useRef, useState } from \"react\"\nimport * as styles from \"./DebugBar.styles.ts\"\n\nexport function ScrollableOverflowStack(stackProps: StackProps) {\n\tconst [showLeftShadow, setShowLeftShadow] = useState(false)\n\tconst [showRightShadow, setShowRightShadow] = useState(false)\n\tconst scrollContainerRef = useRef<HTMLDivElement>(null)\n\n\tconst updateShadows = React.useCallback(() => {\n\t\tconst container = scrollContainerRef.current\n\t\tif (!container) return\n\n\t\tconst { scrollLeft, scrollWidth, clientWidth } = container\n\t\tsetShowLeftShadow(scrollLeft > 0)\n\t\tsetShowRightShadow(scrollLeft < scrollWidth - clientWidth)\n\t}, [scrollContainerRef])\n\n\tuseEffect(() => {\n\t\tconst container = scrollContainerRef.current\n\t\tif (!container) return\n\n\t\tcontainer.addEventListener(\"scroll\", updateShadows)\n\t\twindow.addEventListener(\"resize\", updateShadows)\n\n\t\tupdateShadows()\n\n\t\treturn () => {\n\t\t\tcontainer.removeEventListener(\"scroll\", updateShadows)\n\t\t\twindow.removeEventListener(\"resize\", updateShadows)\n\t\t}\n\t}, [updateShadows])\n\n\treturn (\n\t\t<div style={{ position: \"relative\", flex: \"0 1 auto\", minWidth: 0 }}>\n\t\t\t{showLeftShadow && <div className={styles.scrollShadowLeft} />}\n\t\t\t{showRightShadow && <div className={styles.scrollShadowRight} />}\n\t\t\t<Stack {...stackProps} ref={scrollContainerRef} style={{ overflowX: \"auto\" }} />\n\t\t</div>\n\t)\n}\n", "import {\n\tButton,\n\tIconCheckmark,\n\tIconClose,\n\tIconOpenNewTab,\n\tIconPlus,\n\tIconTrash,\n\tSegmentedControl,\n\tSegmentedControlItem,\n\tStack,\n\tTextInput,\n\tTooltip,\n} from \"@framerjs/fresco\"\nimport { assert, type ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport * as idb from \"@iamakulov/idb-keyval\"\nimport { list } from \"app/ai/sections/data/index.ts\"\nimport { getKitSectionClipboardData } from \"app/ai/sections/getKitSectionNodeData.ts\"\nimport type { SectionNode } from \"app/ai/sections/index.ts\"\nimport {\n\tgetSectionsWithOverrides,\n\tisSectionNode,\n\tloadAllSectionsWithUniqueIds,\n\toverrideSections,\n} from \"app/ai/sections/index.ts\"\nimport type {\n\tControlPropFields,\n\tKitCollectionTemplate,\n\tKitItemSource,\n\tResolvedSection,\n\tSection,\n\tSectionOverride,\n\tSectionWithOverride,\n} from \"app/ai/sections/types.ts\"\nimport { getKitSectionId } from \"app/ai/utils/kitSection.ts\"\nimport { Globals } from \"app/globals.ts\"\nimport { showCanvasNode } from \"document/components/utils/showCanvasNode.ts\"\nimport engine from \"document/engine.ts\"\nimport { debounce, isEqual } from \"library/index.ts\"\nimport type React from \"react\"\nimport { useEffect, useReducer, useState } from \"react\"\nimport { useConstant } from \"utils/useConstant.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport { IconLinkChain } from \"../QuickActions/utils/icons.tsx\"\nimport * as styles from \"./Sections.styles.ts\"\nimport type { GitFile, GitHubContent, ProcessedGitFile } from \"./github.ts\"\nimport { getRemoteStatus, gitHubTokenKey, hashFiles, pushCommit } from \"./github.ts\"\n\nconst branch = \"feature/generated-kit-sections\"\nconst directory = \"src/app/vekter/src/app/ai/sections/data\"\n\nexport function Sections() {\n\tconst hasLoaded = engine.stores.loadingStore.useState(state => state.hasMinimalEditableData)\n\n\treturn (\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\tflexDirection: \"row\",\n\t\t\t\tinset: 0,\n\t\t\t\toverflowY: \"scroll\",\n\t\t\t\tpaddingBottom: 10,\n\t\t\t\tposition: \"absolute\",\n\t\t\t}}\n\t\t>\n\t\t\t{hasLoaded ? <SectionsManager /> : <strong>Please wait\u2026</strong>}\n\t\t</div>\n\t)\n}\n\nconst idbKey = \"ai-section-overrides\"\n\nconst sorter = new Intl.Collator(undefined, { numeric: true })\n\nfunction SectionsManager() {\n\tconst [groups, setGroups] = useState<Map<string, readonly SectionWithOverride[]>>(() => new Map())\n\tconst [overrides, dispatch] = useReducer(reducer, { initialized: false, value: [] })\n\tuseLoadOnVisibilityChange(dispatch)\n\n\tconst [gitHubToken, setGitHubToken] = useState(\"\")\n\tconst validGitHubToken = !!gitHubToken.match(/^ghp_[a-zA-Z\\d]{36}$/u)\n\tfunction saveGitHubToken() {\n\t\tlocalStorage.setItem(gitHubTokenKey, gitHubToken)\n\t\tsetGitHubToken(\"\")\n\t}\n\n\tconst [diff, setDiff] = useState<Diff | null>(null)\n\tconst [isCommitting, setIsCommitting] = useState(false)\n\tconst isUsingLatestCommit = Globals.Vekter.build.gitHash === diff?.latestCommitHash\n\n\tconst refreshStatus = useConstant(() => {\n\t\treturn debounce(() => {\n\t\t\tif (!localStorage.getItem(gitHubTokenKey)) return\n\n\t\t\tvoid buildGitDiff().then(setDiff)\n\t\t}, 1_000)\n\t})\n\n\tuseEffect(() => {\n\t\tvoid getSectionsWithOverrides(engine).then(setGroups)\n\t}, [])\n\n\tuseEffect(() => {\n\t\tif (!localStorage.getItem(gitHubTokenKey)) return\n\t\tif (isCommitting) return\n\t\tlet active = true\n\t\trefreshStatus()\n\t\tconst interval = setInterval(() => {\n\t\t\tif (!active) return\n\t\t\tif (document.visibilityState !== \"visible\") return\n\t\t\trefreshStatus()\n\t\t}, 60_000)\n\t\treturn () => {\n\t\t\tactive = false\n\t\t\tclearInterval(interval)\n\t\t}\n\t}, [gitHubToken, isCommitting, overrides.value, refreshStatus])\n\n\tasync function commit() {\n\t\tif (!diff?.hasChanges) return\n\t\tconst summary: string[] = []\n\t\tconst addedSections = diff.added.reduce((c, f) => c + (f.endsWith(\".json\") ? 1 : 0), 0)\n\t\tif (addedSections > 0) summary.push(`added ${addedSections}`)\n\t\tconst modifiedSections = diff.modified.reduce((c, f) => c + (f.endsWith(\".json\") ? 1 : 0), 0)\n\t\tif (modifiedSections > 0) summary.push(`modified ${modifiedSections}`)\n\t\tconst deletedSections = diff.deleted.reduce((c, f) => c + (f.endsWith(\".json\") ? 1 : 0), 0)\n\t\tif (deletedSections > 0) summary.push(`deleted ${deletedSections}`)\n\t\tif (summary.length === 0 && diff.moved.length > 0) {\n\t\t\t// Only include moves in the summary if there are no other changes.\n\t\t\tsummary.push(`renamed ${diff.moved.length}`)\n\t\t}\n\t\tconst commitMessage =\n\t\t\tsummary.length > 0\n\t\t\t\t? `Update sections (${summary.join(\" / \")})`\n\t\t\t\t: `Update ${diff.files.map(f => f.path.replace(/.*\\//, \"\")).join(\", \")}`\n\t\tsetIsCommitting(true)\n\t\tsetDiff(null)\n\t\tpushCommit({\n\t\t\trepo: \"framer/FramerStudio\",\n\t\t\tbranch,\n\t\t\tdirectory,\n\t\t\tfiles: diff.files,\n\t\t\tcommitMessage,\n\t\t\trequireBaseCommitHash: Globals.Vekter.build.gitHash,\n\t\t})\n\t\t\t.then(() => {\n\t\t\t\tdispatch({ type: \"reset\" })\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\ttoast({ type: \"add\", variant: \"error\", text: `Failed to commit changes (${error})` })\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tsetIsCommitting(false)\n\t\t\t})\n\t}\n\n\tconst sectionNodes = getSelectedSectionNodes()\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={10} style={{ flex: 1 }}>\n\t\t\t<Stack gap={5} style={{ flex: 2, overflow: \"auto\" }}>\n\t\t\t\t<Stack gap={5}>\n\t\t\t\t\t<strong className={styles.stickyHeader}>Create sections</strong>\n\t\t\t\t\t<NewSection dispatch={dispatch} groups={groups} sectionNodes={sectionNodes} />\n\t\t\t\t</Stack>\n\t\t\t\t{Array.from(groups, ([group, sections]) => (\n\t\t\t\t\t<Stack key={group} gap={5}>\n\t\t\t\t\t\t<strong className={styles.stickyHeader}>{group}</strong>\n\t\t\t\t\t\t{sections.map((section, i) => (\n\t\t\t\t\t\t\t<SectionRow key={i} id={section.id} section={section} dispatch={dispatch} />\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t))}\n\t\t\t</Stack>\n\t\t\t<Stack gap={5} style={{ flex: 2 }}>\n\t\t\t\t<strong>Push sections to repository</strong>\n\t\t\t\t{!localStorage.getItem(gitHubTokenKey) ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<p>You\u2019ll need to set up a GitHub token for this first.</p>\n\t\t\t\t\t\t<ol>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\tFirst, go to{\" \"}\n\t\t\t\t\t\t\t\t<a href=\"https://github.com/settings/tokens/new\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\tGitHub\u2019s New Personal Access Token page\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\tGive the token a useful note and{\" \"}\n\t\t\t\t\t\t\t\t<strong>\n\t\t\t\t\t\t\t\t\tmake sure to check all <code>repo</code> permissions\n\t\t\t\t\t\t\t\t</strong>\n\t\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\tGenerate the token <strong>and immediately copy it</strong> because it will not show up again!\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\tGo to{\" \"}\n\t\t\t\t\t\t\t\t<a href=\"https://github.com/settings/tokens\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\tthe tokens list page\n\t\t\t\t\t\t\t\t</a>{\" \"}\n\t\t\t\t\t\t\t\tand find the token you just created in the list.\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\tClick the \u201CConfigure SSO\u201D dropdown and authorize <strong>Framer</strong>.\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>Paste your token into the box below and save it.</li>\n\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t<Stack gap={5} direction=\"row\">\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\tvalue={gitHubToken}\n\t\t\t\t\t\t\t\tconstantChange\n\t\t\t\t\t\t\t\tonChange={value => setGitHubToken(value.trim())}\n\t\t\t\t\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\t\t\t\t></TextInput>\n\t\t\t\t\t\t\t<Button enabled={validGitHubToken} onClick={saveGitHubToken} variant=\"primary\">\n\t\t\t\t\t\t\t\tSave GitHub Token\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t{!validGitHubToken && gitHubToken && (\n\t\t\t\t\t\t\t<span style={{ color: \"red\" }}>\n\t\t\t\t\t\t\t\tThat doesn\u2019t look like a valid GitHub token. Please make sure you created a personal token and copied\n\t\t\t\t\t\t\t\tall of it correctly.\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{diff && !isUsingLatestCommit && (\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\tCommitting has been disabled because this instance of Framer is not running on the latest commit. Please\n\t\t\t\t\t\t\t\treload first to get an accurate diff. You may need to wait a bit if you or someone else just pushed to\n\t\t\t\t\t\t\t\tthe branch.\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Stack gap={2} style={{ flex: 1, overflow: \"auto\", opacity: isUsingLatestCommit ? undefined : 0.2 }}>\n\t\t\t\t\t\t\t{diff?.added.map((path, i) => (\n\t\t\t\t\t\t\t\t<span key={\"added-\" + i} style={{ color: \"#180\" }}>\n\t\t\t\t\t\t\t\t\t{path.replace(/^.*\\//u, \"\")} (added)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t{diff?.modified.map((path, i) => (\n\t\t\t\t\t\t\t\t<span key={\"modified-\" + i} style={{ color: \"#a4d\" }}>\n\t\t\t\t\t\t\t\t\t{path.replace(/^.*\\//u, \"\")} (modified)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t{diff?.deleted.map((path, i) => (\n\t\t\t\t\t\t\t\t<span key={\"deleted-\" + i} style={{ color: \"#e01\" }}>\n\t\t\t\t\t\t\t\t\t{path.replace(/^.*\\//u, \"\")} (deleted)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t{diff?.moved.map((move, i) => (\n\t\t\t\t\t\t\t\t<span key={\"moved-\" + i} style={{ color: \"#767676\" }}>\n\t\t\t\t\t\t\t\t\t{move.from.replace(/^.*\\//u, \"\")} \u2192 {move.to.replace(/^.*\\//u, \"\")}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Stack gap={5} direction=\"row\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\tenabled={isUsingLatestCommit && !isCommitting && Boolean(diff?.hasChanges)}\n\t\t\t\t\t\t\t\tonClick={() => commit()}\n\t\t\t\t\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tCommit and Push to Repo\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button onClick={() => refreshStatus()}>Refresh Status</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</Stack>\n\t)\n}\n\n/**\n * Only returns the selected nodes if they are all primary nodes (not replicas),\n * and they are direct children of a web page node. Only then can they be used\n * as sections.\n */\nfunction getSelectedSectionNodes(): SectionNode[] {\n\tconst { nodes } = engine.stores.selectionStore\n\treturn nodes.every(isSectionNode) ? nodes : []\n}\n\nfunction SectionRow({\n\tid,\n\tsection,\n\tduplicateOf,\n\tdispatch,\n}: {\n\tid: string\n\tsection: SectionWithOverride\n\tduplicateOf?: string\n\tdispatch: React.Dispatch<Action>\n}) {\n\tconst { source } = section\n\tconst sourceNode = engine.stores.projectStore.projectId === source.projectId ? engine.tree.get(source.layerId) : null\n\tlet externalSourceLink: string | null = null\n\tif (source.projectId !== engine.stores.projectStore.projectId) {\n\t\tconst url = new URL(\"/projects/\" + source.projectId, window.location.href)\n\t\turl.searchParams.set(\"node\", source.layerId)\n\t\texternalSourceLink = url.href\n\t}\n\n\tfunction selectSourceNode() {\n\t\tif (externalSourceLink) {\n\t\t\twindow.open(externalSourceLink, \"_blank\")\n\t\t\treturn\n\t\t}\n\t\tif (!sourceNode) return\n\t\tshowCanvasNode(engine, sourceNode)\n\t}\n\n\treturn (\n\t\t<Stack direction=\"row\" padding={0} gap={5} alignItems=\"center\">\n\t\t\t<Tooltip\n\t\t\t\ttext={section.isInRepo ? `Reset override for \u201C${id}\u201D` : `Delete local section \u201C${id}\u201D`}\n\t\t\t\tdirection=\"left\"\n\t\t\t\tinnerClassName={styles.rightSideTooltip}\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tenabled={section.hasOverride}\n\t\t\t\t\tvariant={section.hasOverride ? \"destructive\" : undefined}\n\t\t\t\t\tonClick={() => dispatch({ type: \"unset\", source })}\n\t\t\t\t>\n\t\t\t\t\t{section.isInRepo ? <IconClose /> : <IconTrash width={10} height={10} />}\n\t\t\t\t</Button>\n\t\t\t</Tooltip>\n\t\t\t<SegmentedControl style={{ width: 40 }}>\n\t\t\t\t<SegmentedControlItem\n\t\t\t\t\ttitle=\"O\"\n\t\t\t\t\tselected={!section.enabled}\n\t\t\t\t\tonSelect={() => dispatch({ type: \"override\", value: { source, enabled: false } })}\n\t\t\t\t/>\n\t\t\t\t<SegmentedControlItem\n\t\t\t\t\ttitle=\"I\"\n\t\t\t\t\tselected={section.enabled}\n\t\t\t\t\tonSelect={() => dispatch({ type: \"override\", value: { source, enabled: true } })}\n\t\t\t\t/>\n\t\t\t</SegmentedControl>\n\t\t\t<Stack direction=\"column\" gap={2} style={{ flex: 1 }}>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\ttextOverflow: \"ellipsis\",\n\t\t\t\t\t\tmaxWidth: 400,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{section.description}\n\t\t\t\t</span>\n\t\t\t</Stack>\n\t\t\t<Tooltip\n\t\t\t\ttext={\n\t\t\t\t\texternalSourceLink\n\t\t\t\t\t\t? `Click to open project for \u201C${id}\u201D in a new tab`\n\t\t\t\t\t\t: duplicateOf\n\t\t\t\t\t\t\t? `\u201C${duplicateOf}\u201D is already using the same layer`\n\t\t\t\t\t\t\t: sourceNode\n\t\t\t\t\t\t\t\t? `Click to go to the linked node for \u201C${id}\u201D`\n\t\t\t\t\t\t\t\t: `There is no node for \u201C${id}\u201D in this project`\n\t\t\t\t}\n\t\t\t\tdirection=\"right\"\n\t\t\t\tinnerClassName={styles.leftSideTooltip}\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\twidth: 36,\n\t\t\t\t\t}}\n\t\t\t\t\tenabled={Boolean(sourceNode || externalSourceLink)}\n\t\t\t\t\tonClick={selectSourceNode}\n\t\t\t\t\tvariant={duplicateOf ? \"destructive\" : undefined}\n\t\t\t\t>\n\t\t\t\t\t{externalSourceLink ? <IconOpenNewTab /> : <IconLinkChain />}\n\t\t\t\t</Button>\n\t\t\t</Tooltip>\n\t\t</Stack>\n\t)\n}\n\nfunction NewSection({\n\tdispatch,\n\tgroups,\n\tsectionNodes,\n}: {\n\tdispatch: React.Dispatch<Action>\n\tgroups: Map<string, readonly SectionWithOverride[]>\n\tsectionNodes: SectionNode[]\n}) {\n\tif (sectionNodes.length === 0) {\n\t\treturn (\n\t\t\t<Stack direction=\"row\" padding={0} gap={5} alignItems=\"center\">\n\t\t\t\t<span style={{ color: \"#767676\", flex: 1 }}>\n\t\t\t\t\tPlease select only top-level nodes in the primary breakpoint to create new sections.\n\t\t\t\t</span>\n\t\t\t</Stack>\n\t\t)\n\t}\n\n\tconst existingSectionNodeIds = new Set<string>()\n\tfor (const [, sections] of groups) {\n\t\tfor (const section of sections) {\n\t\t\tif (section.source.projectId !== engine.stores.projectStore.projectId) continue\n\t\t\texistingSectionNodeIds.add(section.source.layerId)\n\t\t}\n\t}\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={5}>\n\t\t\t{sectionNodes.map((node, i) => (\n\t\t\t\t<NewSectionRow key={i} dispatch={dispatch} node={node} existingSectionNodeIds={existingSectionNodeIds} />\n\t\t\t))}\n\t\t</Stack>\n\t)\n}\n\nfunction NewSectionRow({\n\tdispatch,\n\tnode,\n\texistingSectionNodeIds,\n}: {\n\tdispatch: React.Dispatch<Action>\n\tnode: SectionNode\n\texistingSectionNodeIds: Set<string>\n}) {\n\tconst nodeId = node.id\n\tconst sectionId = getKitSectionId(node)\n\tconst description = node.customizationsDescription\n\tconst alreadyExists = existingSectionNodeIds.has(nodeId)\n\tconst canCreate = !alreadyExists && !!sectionId && !!description\n\tconst { treeStore, loadedExternalModulesStore, modulesStore, projectStore } = engine.stores\n\n\tfunction create() {\n\t\tassert(canCreate, \"Cannot create section without a valid section node\")\n\t\tdispatch({\n\t\t\ttype: \"override\",\n\t\t\tvalue: {\n\t\t\t\tsource: { projectId: engine.stores.projectStore.projectId, layerId: nodeId },\n\t\t\t\tid: sectionId,\n\t\t\t\tdescription,\n\t\t\t\tenabled: true,\n\t\t\t\tdata: getKitSectionClipboardData(\n\t\t\t\t\ttreeStore.tree,\n\t\t\t\t\tengine.componentLoader,\n\t\t\t\t\tloadedExternalModulesStore,\n\t\t\t\t\tmodulesStore,\n\t\t\t\t\tprojectStore,\n\t\t\t\t\tnodeId,\n\t\t\t\t\ttrue,\n\t\t\t\t).clipboardData,\n\t\t\t},\n\t\t})\n\t}\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={5} alignItems=\"center\">\n\t\t\t<u\n\t\t\t\tstyle={{\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\ttextOverflow: \"ellipsis\",\n\t\t\t\t\twidth: 72,\n\t\t\t\t}}\n\t\t\t\ttitle={sectionId}\n\t\t\t>\n\t\t\t\t{sectionId}\n\t\t\t</u>\n\t\t\t<Stack direction=\"column\" gap={2} style={{ flex: 1 }}>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\ttextOverflow: \"ellipsis\",\n\t\t\t\t\t\tmaxWidth: 400,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{node.customizationsDescription || \"(missing description)\"}\n\t\t\t\t</span>\n\t\t\t</Stack>\n\t\t\t<Button\n\t\t\t\tenabled={canCreate}\n\t\t\t\tvariant=\"primary\"\n\t\t\t\tonClick={create}\n\t\t\t\tstyle={{\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\twidth: 36,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{alreadyExists ? <IconCheckmark /> : <IconPlus width={12} height={12} />}\n\t\t\t</Button>\n\t\t</Stack>\n\t)\n}\n\ninterface DiffMove {\n\tfrom: string\n\tto: string\n}\n\ninterface Diff {\n\tlatestCommitHash: string\n\thasChanges: boolean\n\t// The actual changed files we want to use.\n\tfiles: readonly GitFile[]\n\t// Entries for UI display only.\n\tadded: readonly string[]\n\tmodified: readonly string[]\n\tdeleted: readonly string[]\n\tmoved: readonly DiffMove[]\n}\n\ninterface GitSectionEntry {\n\tfilename: `${string}_${string}_${number}.json`\n\tpath: `${typeof directory}/${string}_${string}_${number}.json`\n\tsection: ResolvedSection\n}\n\nasync function loadAllSectionsForGit(): Promise<{\n\tsections: readonly GitSectionEntry[]\n\tcontrolPropFields?: ControlPropFields\n\tvectorSetModuleData?: Record<string, ModuleExportIdentifierString>\n\tcollections?: KitCollectionTemplate[]\n}> {\n\tconst { loadingStore, projectStore, treeStore, loadedExternalModulesStore, modulesStore } = engine.stores\n\t// Make sure we run the inspection for sections, controls and vector with a fully loaded tree\n\tawait engine.runWithFullyLoadedTreeAsync(() => {}, { name: \"loadAllSectionsForGit\" })\n\n\tconst {\n\t\tsections: resolvedSections,\n\t\tcontrolPropFields,\n\t\tvectorSetModuleData,\n\t\tcollections,\n\t} = await loadAllSectionsWithUniqueIds(\n\t\tengine.componentLoader,\n\t\tloadingStore,\n\t\tprojectStore,\n\t\ttreeStore,\n\t\tloadedExternalModulesStore,\n\t\tmodulesStore,\n\t)\n\n\tconst counter = new Map<`${string}_${string}`, number>()\n\tconst gitSections: GitSectionEntry[] = resolvedSections.map(section => {\n\t\t// Get the filename as the source project id, an underscore, and the\n\t\t// section id without the trailing number.\n\t\tconst filenameBase: `${string}_${string}` = `${section.source.projectId}_${section.id.replace(/_\\d+$/u, \"\")}`\n\t\t// Add back a trailing number that is in sequence within the project.\n\t\tconst count = counter.get(filenameBase) ?? 0\n\t\tcounter.set(filenameBase, count + 1)\n\t\tconst filename = `${filenameBase}_${count + 1}.json` as const\n\t\t// Return a metadata entry also with the full repo path.\n\t\treturn {\n\t\t\tfilename,\n\t\t\tpath: `${directory}/${filename}`,\n\t\t\tsection,\n\t\t}\n\t})\n\n\treturn { sections: gitSections, controlPropFields, vectorSetModuleData, collections }\n}\n\nconst sectionsDJsonTs = `import type { Json } from \"utils/json\"\\n\\ndeclare const json: Json\\nexport = json\\n`\nconst vectorSetDJsonTs = `import type { VectorSetModuleData } from \"../types\"\\n\\ndeclare const vectorSetModuleData: VectorSetModuleData\\nexport = vectorSetModuleData\\n`\nconst collectionsDJsonTs = `import type { Collections } from \"../types\"\\n\\ndeclare const collections: Collections\\nexport = collections\\n`\n\nasync function buildGitDiff(): Promise<Diff> {\n\tconst statusPromise = getRemoteStatus({\n\t\trepo: \"framer/FramerStudio\",\n\t\tbranch,\n\t\tdirectory,\n\t})\n\t// Build a list of files we want to update in Git.\n\tconst rawFiles: GitFile[] = []\n\tconst {\n\t\tsections: resolvedSectionsWithPaths,\n\t\tcontrolPropFields = {},\n\t\tvectorSetModuleData = {},\n\t\tcollections = {},\n\t} = await loadAllSectionsForGit()\n\tfor (const entry of resolvedSectionsWithPaths) {\n\t\t// Add the JSON file\n\t\trawFiles.push({ path: entry.path, content: JSON.stringify(entry.section.data) })\n\t\t// Add the corresponding .d.json.ts file for biome\n\t\tconst dJsonTsPath = entry.path.replace(\".json\", \".d.json.ts\")\n\t\trawFiles.push({ path: dJsonTsPath, content: sectionsDJsonTs })\n\t}\n\n\trawFiles.push({\n\t\tpath: `${directory}/controlProps.json`,\n\t\tcontent: JSON.stringify(controlPropFields),\n\t})\n\n\trawFiles.push({\n\t\tpath: `${directory}/vectorSetModuleData.json`,\n\t\tcontent: JSON.stringify(vectorSetModuleData),\n\t})\n\n\trawFiles.push({\n\t\tpath: `${directory}/vectorSetModuleData.d.json.ts`,\n\t\tcontent: vectorSetDJsonTs,\n\t})\n\n\trawFiles.push({\n\t\tpath: `${directory}/collections.json`,\n\t\tcontent: JSON.stringify(collections),\n\t})\n\n\trawFiles.push({\n\t\tpath: `${directory}/collections.d.json.ts`,\n\t\tcontent: collectionsDJsonTs,\n\t})\n\n\trawFiles.push({ path: `${directory}/index.ts`, content: generateSectionsIndexFile(resolvedSectionsWithPaths) })\n\n\tconst updatedFiles = await hashFiles(rawFiles)\n\tconst status = await statusPromise\n\t/** The SHA hashes of existing file paths. */\n\tconst shaByStatusPath = new Map<string, string>()\n\tfor (const entry of status.contents) {\n\t\tif (entry.type !== \"file\" || entry.path.endsWith(\".d.json.ts\")) continue\n\t\tshaByStatusPath.set(entry.path, entry.sha)\n\t}\n\t/** New files indexed by their path. */\n\tconst updatedFilesByPath = new Map<string, ProcessedGitFile>()\n\t/** Sets of updated file paths indexed by their SHA hash. */\n\tconst updatedPathsBySHA = new Map<string, Set<string>>()\n\tfor (const entry of updatedFiles) {\n\t\tupdatedFilesByPath.set(entry.file.path, entry)\n\t\tif (entry.sha) {\n\t\t\tlet paths = updatedPathsBySHA.get(entry.sha)\n\t\t\tif (!paths) {\n\t\t\t\tpaths = new Set()\n\t\t\t\tupdatedPathsBySHA.set(entry.sha, paths)\n\t\t\t}\n\t\t\tpaths.add(entry.file.path)\n\t\t}\n\t}\n\t// Build the lists we want to return from this API.\n\tconst files: GitFile[] = []\n\tconst added: string[] = []\n\tconst modified: string[] = []\n\tconst deleted: string[] = []\n\tconst moved: DiffMove[] = []\n\t// Track files that still exist after the update.\n\tconst existingFiles = new Map<string, Extract<GitHubContent, { type: \"file\" }>>()\n\tconst movedFiles = new Map<string, Extract<GitHubContent, { type: \"file\" }>>()\n\tconst movedSourcePaths = new Set<string>()\n\t// Iterate the existing files to find ones that have been deleted or moved.\n\tfor (const sourceFile of status.contents) {\n\t\tif (sourceFile.type !== \"file\") continue\n\t\tconst updatedPaths = updatedPathsBySHA.get(sourceFile.sha)\n\t\tif (updatedPaths && !updatedPaths.has(sourceFile.path)) {\n\t\t\t// The same content exists in the updated files map, but under a\n\t\t\t// different name. This either means the file moved, or there was a\n\t\t\t// duplicate. To rule out the latter, we need to see if the paths\n\t\t\t// that do exist were around before the update.\n\t\t\tfor (const path of updatedPaths) {\n\t\t\t\tif (shaByStatusPath.get(path) === sourceFile.sha) {\n\t\t\t\t\t// We found a duplicate with a different name that didn't\n\t\t\t\t\t// move. We need to rule this one out.\n\t\t\t\t\tupdatedPaths.delete(path)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If at this point there are still paths left, it means we have our\n\t\t\t// move destination. There could still be multiple moves of multiple\n\t\t\t// duplicates, so we'll just pick the first path in the set.\n\t\t\tfor (const path of updatedPaths) {\n\t\t\t\tmovedFiles.set(path, sourceFile)\n\t\t\t\tmovedSourcePaths.add(sourceFile.path)\n\t\t\t\tupdatedPaths.delete(path)\n\t\t\t}\n\t\t}\n\t\tif (updatedFilesByPath.has(sourceFile.path)) {\n\t\t\texistingFiles.set(sourceFile.path, sourceFile)\n\t\t\tcontinue\n\t\t}\n\t\t// The file no longer exists in the updated files map.\n\t\tfiles.push({ path: sourceFile.path, content: null })\n\t\tif (!movedSourcePaths.has(sourceFile.path)) {\n\t\t\tdeleted.push(sourceFile.path)\n\t\t}\n\t}\n\t// Files we need to add/update.\n\tfor (const [path, entry] of updatedFilesByPath) {\n\t\t// Determine if the file was moved, added, or modified.\n\t\tconst movedFile = movedFiles.get(path)\n\t\tif (movedFile) {\n\t\t\tfiles.push(entry.file)\n\t\t\tmoved.push({ from: movedFile.path, to: path })\n\t\t\tcontinue\n\t\t}\n\t\t// The file was not moved so it must've been added or modified.\n\t\tconst existingFile = existingFiles.get(path)\n\t\tif (existingFile) {\n\t\t\tif (existingFile.sha !== entry.sha) {\n\t\t\t\tfiles.push(entry.file)\n\t\t\t\tmodified.push(entry.file.path)\n\t\t\t} else {\n\t\t\t\t// There is nothing to do in this case, because the file already\n\t\t\t\t// existed with identical content, i.e. it was not modified and\n\t\t\t\t// should not be included in the commit.\n\t\t\t}\n\t\t} else {\n\t\t\tfiles.push(entry.file)\n\t\t\tadded.push(entry.file.path)\n\t\t}\n\t}\n\tadded.sort(sorter.compare)\n\tmodified.sort(sorter.compare)\n\tdeleted.sort(sorter.compare)\n\tmoved.sort((a, b) => sorter.compare(a.from, b.from))\n\treturn {\n\t\tlatestCommitHash: status.latestRef.object.sha,\n\t\thasChanges: files.length > 0,\n\t\tfiles,\n\t\tadded,\n\t\tmodified,\n\t\tdeleted,\n\t\tmoved,\n\t}\n}\n\nfunction generateSectionsIndexFile(entries: readonly GitSectionEntry[]) {\n\tentries = [...entries].sort((a, b) => sorter.compare(a.section.id, b.section.id))\n\tconst sectionsData = entries.map(({ filename, section: { id, description, source } }) => {\n\t\treturn `{\n    id: ${JSON.stringify(id)},\n    description: ${JSON.stringify(description)},\n    source: ${JSON.stringify(source)},\n    enabled: true,\n    load: () => import(\"./${filename}\") as Promise<{ default: unknown }>,\n}`\n\t})\n\n\treturn `// @ts-nocheck Ignore these files to speed up type checking and reduce memory usage\n// WARNING: This file is autogenerated! Manual edits may get lost!\n\nimport type { Section } from \"../types\"\n\nexport const list: readonly Section[] = [\n    ${sectionsData.join(\", \")}\n]`\n}\n\ntype Action =\n\t| { type: \"init\"; value: SectionOverride[] }\n\t| { type: \"reload\"; value: SectionOverride[] }\n\t| { type: \"reset\" }\n\t| { type: \"override\"; value: SectionOverride }\n\t| { type: \"unset\"; source: KitItemSource }\n\ninterface State {\n\tinitialized: boolean\n\tvalue: readonly SectionOverride[]\n}\n\nfunction matchingSource(a: { source: KitItemSource }, b: { source: KitItemSource }) {\n\treturn a.source.projectId === b.source.projectId && a.source.layerId === b.source.layerId\n}\n\nfunction reducer(prevState: State, action: Action) {\n\tlet nextState: State\n\tswitch (action.type) {\n\t\tcase \"init\":\n\t\t\tif (prevState.initialized) {\n\t\t\t\tthrow Error(\"cannot initialize twice\")\n\t\t\t}\n\t\t\t// TODO: Merge values.\n\t\t\tnextState = { initialized: true, value: action.value }\n\t\t\tbreak\n\t\tcase \"reload\":\n\t\t\t// Almost same as init, except we don't merge values.\n\t\t\tnextState = { initialized: true, value: action.value }\n\t\t\tbreak\n\t\tcase \"reset\":\n\t\t\tnextState = { ...prevState, value: [] }\n\t\t\tbreak\n\t\tcase \"override\": {\n\t\t\t// Prepare the next state without the old override in it.\n\t\t\tlet prevOverride: SectionOverride | undefined\n\t\t\tconst nextValue = prevState.value.filter(o => {\n\t\t\t\tif (matchingSource(o, action.value)) {\n\t\t\t\t\tprevOverride = o\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t\t\tnextState = { ...prevState, value: nextValue }\n\t\t\tconst nextOverride: SectionOverride = { ...prevOverride, ...action.value }\n\t\t\tconst item = list.find(s => matchingSource(s, action.value))\n\t\t\tif (item) {\n\t\t\t\tlet overrideIsNoOp = true\n\t\t\t\tfor (const [key, value] of Object.entries(nextOverride)) {\n\t\t\t\t\tif (!isEqual(item[key as keyof Section], value)) {\n\t\t\t\t\t\toverrideIsNoOp = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (overrideIsNoOp) {\n\t\t\t\t\t// Don't add the override if it's a no-op.\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Add the next override.\n\t\t\tnextValue.push(nextOverride)\n\t\t\tbreak\n\t\t}\n\t\tcase \"unset\": {\n\t\t\tnextState = { ...prevState, value: prevState.value.filter(o => !matchingSource(o, action)) }\n\t\t\tbreak\n\t\t}\n\t}\n\tif (isEqual(prevState, nextState)) {\n\t\treturn prevState\n\t}\n\toverrideSections(nextState.value)\n\tif (nextState.initialized && action.type !== \"reload\") {\n\t\tvoid idb.set(idbKey, nextState.value)\n\t}\n\treturn nextState\n}\n\nfunction useLoadOnVisibilityChange(dispatch: React.Dispatch<Action>) {\n\tuseEffect(() => {\n\t\t// Load from database as soon as we mount this component.\n\t\tvoid idb.get(idbKey).then(value => {\n\t\t\tdispatch({ type: \"init\", value: Array.isArray(value) ? value : [] })\n\t\t})\n\t\t// Also load from database whenever page becomes visible (there might\n\t\t// have been an edit in another tab).\n\t\tfunction reload() {\n\t\t\tvoid idb.get(idbKey).then(value => {\n\t\t\t\tif (!Array.isArray(value)) return\n\t\t\t\tdispatch({ type: \"reload\", value })\n\t\t\t})\n\t\t}\n\t\twindow.addEventListener(\"visibilitychange\", reload)\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"visibilitychange\", reload)\n\t\t}\n\t}, [dispatch])\n}\n", "import \"Sections.styles_1wnewu2.wyw.css\"; export const leftSideTooltip = \"leftSideTooltip_lq8s6bh\";\nexport const rightSideTooltip = \"rightSideTooltip_rkk2vh7\";\nexport const stickyHeader = \"stickyHeader_sq1o2nf\";", "import { assert, getLogger } from \"@framerjs/shared\"\nimport { encodeByteArrayToBase16 } from \"utils/base16.ts\"\nimport { isArray } from \"utils/typeChecks.ts\"\n\nconst log = getLogger(\"github\")\n\ninterface GitRef {\n\tref: string\n\tnode_id: string\n\turl: string\n\tobject: {\n\t\ttype: \"commit\"\n\t\tsha: string\n\t\turl: string\n\t}\n}\n\nexport interface GitFile {\n\tpath: string\n\t/** Specify `null` to delete. */\n\tcontent: string | null\n}\n\ninterface GitHubContentCommon {\n\tsize: number\n\tname: string\n\tpath: string\n\tsha: string\n\turl: string\n\tgit_url: string\n\thtml_url: string\n\tdownload_url: string | null\n\t_links: {\n\t\tgit: string\n\t\tself: string\n\t\thtml: string\n\t}\n}\n\nexport type GitHubContent = (\n\t| { type: \"file\"; encoding: \"base64\" }\n\t| { type: \"symlink\"; target: string }\n\t| { type: \"submodule\"; submodule_git_url: string }\n\t| { type: \"dir\" }\n) &\n\tGitHubContentCommon\n\nexport interface ProcessedGitFile {\n\tfile: GitFile\n\tsha: string | null\n}\n\nexport async function hashFiles(files: readonly GitFile[]): Promise<ProcessedGitFile[]> {\n\treturn Promise.all(files.map(hashFile))\n}\n\ninterface RemoteStatusOptions {\n\trepo: `${string}/${string}`\n\tbranch: string\n\tdirectory: string\n}\n\ninterface RemoteStatus {\n\tlatestRef: GitRef\n\ttree: {\n\t\tsha: string\n\t}\n\tcontents: GitHubContent[]\n}\n\nlet lastResult: RemoteStatus | undefined\n\nexport async function getRemoteStatus({ repo, branch, directory }: RemoteStatusOptions): Promise<RemoteStatus> {\n\tconst latestRef: GitRef = await api(`/repos/${repo}/git/ref/heads/${branch}`)\n\tassert(latestRef.object.type === \"commit\", \"cannot handle non-commit ref\", latestRef.object.type)\n\tconst commitSHA = latestRef.object.sha\n\tif (lastResult?.latestRef.object.sha === commitSHA) return lastResult\n\tconst treePromise = api(`/repos/${repo}/git/trees/${commitSHA}`)\n\tconst contents = await getContent(repo, branch, directory)\n\tassert(isArray(contents), \"expected directory\")\n\tconst tree = await treePromise\n\tlastResult = { latestRef, tree, contents }\n\treturn lastResult\n}\n\ninterface StatusOptions extends RemoteStatusOptions {\n\tfiles: readonly GitFile[]\n}\n\ninterface Status extends RemoteStatus {\n\tfiles: readonly ProcessedGitFile[]\n}\n\nasync function getStatus({ repo, branch, directory, files }: StatusOptions): Promise<Status> {\n\t// Verify that all files are directly under directory.\n\tconst base = directory.endsWith(\"/\") ? directory : directory + \"/\"\n\tfor (const file of files) {\n\t\tassert(\n\t\t\tfile.path.startsWith(base) && file.path.lastIndexOf(\"/\") < base.length,\n\t\t\t\"all files must be directly under directory\",\n\t\t)\n\t}\n\t// Get the formatted contents + SHA hashes as well as the remote repo state.\n\tconst processedFilesPromise = hashFiles(files)\n\tconst { latestRef, tree, contents } = await getRemoteStatus({ repo, branch, directory })\n\tconst processedFiles = await processedFilesPromise\n\treturn { latestRef, tree, contents, files: processedFiles }\n}\n\ninterface PushCommitOptions extends StatusOptions {\n\tcommitMessage: string\n\trequireBaseCommitHash?: string\n}\n\nexport async function pushCommit({\n\trepo,\n\tbranch,\n\tdirectory,\n\tfiles,\n\tcommitMessage,\n\trequireBaseCommitHash,\n}: PushCommitOptions) {\n\tconst status = await getStatus({ repo, branch, directory, files })\n\tif (requireBaseCommitHash && status.latestRef.object.sha !== requireBaseCommitHash) {\n\t\tthrow Error(`Base of ${branch} has changed from ${requireBaseCommitHash.substring(0, 7)}`)\n\t}\n\n\tconst newTree = await api(`/repos/${repo}/git/trees`, {\n\t\tmethod: \"POST\",\n\t\tbody: JSON.stringify({\n\t\t\tbase_tree: status.tree.sha,\n\t\t\ttree: status.files.map(({ file }) =>\n\t\t\t\tfile.content === null\n\t\t\t\t\t? { path: file.path, mode: \"100644\", type: \"blob\", sha: null }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tpath: file.path,\n\t\t\t\t\t\t\tmode: \"100644\",\n\t\t\t\t\t\t\ttype: \"blob\",\n\t\t\t\t\t\t\tcontent: file.content,\n\t\t\t\t\t\t},\n\t\t\t),\n\t\t}),\n\t})\n\n\tconst newCommit = await api(`/repos/${repo}/git/commits`, {\n\t\tmethod: \"POST\",\n\t\tbody: JSON.stringify({\n\t\t\tmessage: commitMessage,\n\t\t\tparents: [status.latestRef.object.sha],\n\t\t\ttree: newTree.sha,\n\t\t}),\n\t})\n\n\tawait api(`/repos/${repo}/git/refs/heads/${branch}`, {\n\t\tmethod: \"PATCH\",\n\t\tbody: JSON.stringify({\n\t\t\tsha: newCommit.sha,\n\t\t}),\n\t})\n}\n\nexport const gitHubTokenKey = \"gitHubToken\"\n\nclass GitHubAPIError extends Error {\n\tstatus: number\n\tconstructor(status: number, message: string) {\n\t\tsuper(message)\n\t\tthis.status = status\n\t\tthis.name = \"GitHubAPIError\"\n\t}\n}\n\nasync function api(endpoint: string, { headers: initHeaders, ...init }: RequestInit = {}) {\n\tconst token = localStorage.getItem(gitHubTokenKey)\n\tif (!token) {\n\t\tthrow Error(`Please run localStorage.setItem(${JSON.stringify(gitHubTokenKey)}, \"<your token>\") in the console`)\n\t}\n\tconst headers = {\n\t\tAuthorization: `token ${token}`,\n\t\t\"Content-Type\": \"application/json\",\n\t\t...initHeaders,\n\t}\n\tconst url = new URL(endpoint, \"https://api.github.com/\")\n\tconst response = await fetch(url.href, { ...init, cache: \"no-cache\", headers })\n\tlog.debug(response.status, \"for\", init.method ?? \"GET\", url.href)\n\tif (!response.ok) {\n\t\tlet errorMessage = `GitHub API request failed (${response.status})`\n\t\ttry {\n\t\t\tconst errorBody = await response.json()\n\t\t\tif (errorBody.message) {\n\t\t\t\terrorMessage += `: ${errorBody.message}`\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore JSON parse errors\n\t\t}\n\t\tthrow new GitHubAPIError(response.status, errorMessage)\n\t}\n\treturn response.json()\n}\n\nasync function calculateSHA(content: string) {\n\tconst encoder = new TextEncoder()\n\tconst utf8 = encoder.encode(content)\n\tconst header = `blob ${utf8.byteLength}\\0`\n\tconst data = encoder.encode(header + content)\n\tconst digest = await crypto.subtle.digest(\"SHA-1\", data)\n\treturn encodeByteArrayToBase16(new Uint8Array(digest))\n}\n\nasync function hashFile(file: GitFile): Promise<ProcessedGitFile> {\n\tif (file.content === null) return { file: file, sha: null }\n\tconst sha = await calculateSHA(file.content)\n\treturn { file: file, sha }\n}\n\nasync function getContent(\n\trepo: `${string}/${string}`,\n\tref: string,\n\tpath: string,\n): Promise<GitHubContent | GitHubContent[]> {\n\treturn api(`/repos/${repo}/contents/${path}?ref=${ref}`)\n}\n\n/**\n * Gets the SHA of the default branch (tries main, then master).\n */\nasync function getDefaultBranchSHA(repo: `${string}/${string}`): Promise<string> {\n\t// Try main first\n\ttry {\n\t\tconst mainRef: GitRef = await api(`/repos/${repo}/git/ref/heads/main`)\n\t\treturn mainRef.object.sha\n\t} catch (error) {\n\t\tif (!(error instanceof GitHubAPIError) || error.status !== 404) {\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t// Fall back to master\n\tconst masterRef: GitRef = await api(`/repos/${repo}/git/ref/heads/master`)\n\treturn masterRef.object.sha\n}\n\n/**\n * Ensures a branch exists, creating it from the default branch if needed.\n * Returns the SHA of the branch's HEAD commit.\n */\nexport async function ensureBranchExists(repo: `${string}/${string}`, branch: string): Promise<string> {\n\t// Try to get the branch ref\n\ttry {\n\t\tconst ref: GitRef = await api(`/repos/${repo}/git/ref/heads/${branch}`)\n\t\treturn ref.object.sha\n\t} catch (error) {\n\t\t// Only handle 404 (branch doesn't exist), re-throw other errors\n\t\tif (!(error instanceof GitHubAPIError) || error.status !== 404) {\n\t\t\tthrow error\n\t\t}\n\n\t\t// Branch doesn't exist, create it from default branch\n\t\tlog.debug(`Branch ${branch} doesn't exist, creating from default branch`)\n\n\t\t// Get the default branch SHA\n\t\tconst defaultSHA = await getDefaultBranchSHA(repo)\n\n\t\t// Create the new branch\n\t\tawait api(`/repos/${repo}/git/refs`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: JSON.stringify({\n\t\t\t\tref: `refs/heads/${branch}`,\n\t\t\t\tsha: defaultSHA,\n\t\t\t}),\n\t\t})\n\n\t\tlog.debug(`Created branch ${branch} at ${defaultSHA}`)\n\t\treturn defaultSHA\n\t}\n}\n", "// Debug-bar panel for quickly exercising the server-API telemetry paths:\n//   * Trigger a throw  \u2192 plugin_method_error row with `payload`\n//   * Trigger a timeout \u2192 plugin_method_timeout row with `payload`\n// If no headless plugin session exists yet, the buttons bootstrap one via\n// pluginStore.openPlugin with a fresh HeadlessTransport \u2014 same path that\n// HeadlessAPI takes in production, just driven from the debug bar.\n\nimport { Button, PopupButton, PopupButtonItem, Stack } from \"@framerjs/fresco\"\nimport engine from \"document/engine.ts\"\nimport { HeadlessTransport } from \"plugins/transport.ts\"\nimport React from \"react\"\nimport type { PluginMethodInvocation } from \"#framer-plugin/messages.ts\"\nimport { HeadlessAPI } from \"../../../../app/HeadlessAPI.ts\"\nimport { ConnectionGuard } from \"../../../../app/headless/ConnectionGuard.ts\"\nimport { getHeadlessAPI } from \"../../../../app/headlessApiContext.ts\"\nimport * as styles from \"./ServerAPI.styles.ts\"\nimport * as toolStyles from \"./Tools.styles.ts\"\nimport { type CallEvent, tapAllMethods } from \"./tapMethods.ts\"\n\nconst HANG_TIMEOUT_MS = 1_000\n\n// Client identities we know how to simulate. Matches the families recognised\n// by methodPayloadPolicy.clientFamilyFromId \u2014 picking \"other\" exercises the\n// 0%-sample default and is mostly useful as a negative control.\nconst CLIENT_OPTIONS = [\n\t{ id: \"dalton\", clientId: \"dalton/debugbar\" },\n\t{ id: \"framer-api\", clientId: \"framer-api/debugbar\" },\n\t{ id: \"other\", clientId: \"debugbar/0\" },\n] as const\n\ntype ClientId = (typeof CLIENT_OPTIONS)[number][\"id\"]\n\ntype LogKind = \"exec\" | \"result\" | \"error\" | \"call\"\n\ninterface LogEntry {\n\t// Monotonic counter for React key \u2014 `at` (Date.now) can collide when two\n\t// entries land in the same millisecond (e.g. rapid button clicks).\n\tkey: number\n\tat: number\n\tkind: LogKind\n\ttext: string\n}\n\nfunction classifyCall({ className, method, args }: CallEvent): LogKind {\n\tif (className === \"HeadlessTransport\" && method === \"send\") {\n\t\tconst first = args[0] as { type?: string; error?: string | null } | undefined\n\t\tif (first?.type === \"methodResponse\" && first.error != null) return \"error\"\n\t\treturn \"result\"\n\t}\n\tif (className === \"HeadlessTransport\" && method === \"receiveMessage\") return \"exec\"\n\treturn \"call\"\n}\n\nlet logEntrySeq = 0\nconst nextLogKey = (): number => ++logEntrySeq\n\nconst MAX_LOG_ENTRIES = 300\nconst PREVIEW_CHARS = 200\n\nfunction formatTime(at: number): string {\n\tconst d = new Date(at)\n\tconst ms = d.getMilliseconds().toString().padStart(3, \"0\")\n\treturn `${d.toLocaleTimeString(\"en-US\", { hour12: false })}.${ms}`\n}\n\nfunction preview(value: unknown): string {\n\tlet s: string\n\ttry {\n\t\ts = typeof value === \"string\" ? value : JSON.stringify(value)\n\t} catch {\n\t\ts = String(value)\n\t}\n\treturn s.length > PREVIEW_CHARS ? `${s.slice(0, PREVIEW_CHARS)}\u2026(+${s.length - PREVIEW_CHARS})` : s\n}\n\nconst KIND_PREFIX: Record<LogKind, string> = {\n\texec: \"\u2192 exec\",\n\tresult: \"\u2190 result\",\n\terror: \"\u2190 error\",\n\tcall: \"\u00B7  \",\n}\n\nconst KIND_STYLE: Record<LogKind, string> = {\n\texec: styles.logExec,\n\tresult: styles.logResult,\n\terror: styles.logError,\n\tcall: styles.logCall,\n}\n\nfunction Section({ title, children }: { title: string; children: React.ReactNode }) {\n\treturn (\n\t\t<section className={toolStyles.tool}>\n\t\t\t<div className={toolStyles.toolTitle}>{title}</div>\n\t\t\t<Stack direction=\"column\" gap={8}>\n\t\t\t\t{children}\n\t\t\t</Stack>\n\t\t</section>\n\t)\n}\n\nfunction ConnectionStatus({ state }: { state: { connected: boolean; attempts: number; nextRetryInMs: number } }) {\n\tconst dotClass = state.connected ? styles.statusDotConnected : styles.statusDotDisconnected\n\tconst label = state.connected ? \"connected\" : \"disconnected\"\n\tconst detail =\n\t\tstate.attempts === 0\n\t\t\t? null\n\t\t\t: state.nextRetryInMs > 0\n\t\t\t\t? `retry #${state.attempts + 1} in ${Math.ceil(state.nextRetryInMs / 1000)}s`\n\t\t\t\t: `${state.attempts} attempt${state.attempts === 1 ? \"\" : \"s\"}`\n\treturn (\n\t\t<div className={styles.status}>\n\t\t\t<span className={`${styles.statusDot} ${dotClass}`} /> {label}\n\t\t\t{detail && <span className={styles.statusMeta}> \u00B7 {detail}</span>}\n\t\t</div>\n\t)\n}\n\nexport function ServerAPI() {\n\tconst [status, setStatus] = React.useState<string>(\"\")\n\tconst [selected, setSelected] = React.useState<ClientId>(\"dalton\")\n\tconst [log, setLog] = React.useState<readonly LogEntry[]>([])\n\n\tconst appendLog = React.useCallback((entry: LogEntry) => {\n\t\tsetLog(prev => {\n\t\t\tconst next = [...prev, entry]\n\t\t\treturn next.length > MAX_LOG_ENTRIES ? next.slice(next.length - MAX_LOG_ENTRIES) : next\n\t\t})\n\t}, [])\n\n\tconst logScrollRef = React.useRef<HTMLDivElement>(null)\n\t// Only auto-scroll when the user is already pinned to the bottom; if they\n\t// scrolled up to inspect older entries, leave their position alone.\n\tconst stickToBottomRef = React.useRef(true)\n\tconst onLogScroll = React.useCallback((event: React.UIEvent<HTMLDivElement>) => {\n\t\tconst el = event.currentTarget\n\t\tconst distanceFromBottom = el.scrollHeight - el.clientHeight - el.scrollTop\n\t\tstickToBottomRef.current = distanceFromBottom < 4\n\t}, [])\n\tReact.useEffect(() => {\n\t\tconst el = logScrollRef.current\n\t\tif (el && stickToBottomRef.current) el.scrollTop = el.scrollHeight\n\t}, [log])\n\n\t// Prototype taps reflect every HeadlessAPI / ConnectionGuard / HeadlessTransport\n\t// method call into the log \u2014 including those triggered by real sessions outside\n\t// the debug bar. On by default while the tab is mounted; Tap button silences it.\n\tconst [tapping, setTapping] = React.useState(true)\n\tReact.useEffect(() => {\n\t\tif (!tapping) return\n\t\tconst onCall = (event: CallEvent) => {\n\t\t\tconst argText = event.args.map(arg => preview(arg)).join(\", \")\n\t\t\tappendLog({\n\t\t\t\tkey: nextLogKey(),\n\t\t\t\tat: Date.now(),\n\t\t\t\tkind: classifyCall(event),\n\t\t\t\ttext: `${event.className}.${event.method}(${argText})`,\n\t\t\t})\n\t\t}\n\t\tconst disposers = [\n\t\t\ttapAllMethods(HeadlessAPI, onCall),\n\t\t\ttapAllMethods(ConnectionGuard, onCall),\n\t\t\ttapAllMethods(HeadlessTransport, onCall),\n\t\t]\n\t\treturn () => {\n\t\t\tfor (const dispose of disposers) dispose()\n\t\t}\n\t}, [appendLog, tapping])\n\n\t// The simulated family on the currently-open debug plugin. ActivePlugin\n\t// captures clientId at openPlugin time and uses it for plugin_method_error\n\t// telemetry; the transport's setSessionContext only affects the\n\t// timeout-path record. So to switch families on the throw path we have to\n\t// close and reopen the plugin \u2014 not just retarget the transport.\n\tconst openFamilyRef = React.useRef<ClientId | undefined>(undefined)\n\n\tconst ensureSession = async (): Promise<HeadlessTransport> => {\n\t\tconst api = HeadlessAPI.debugCreateGlobalInstance()\n\n\t\tconst sessionId = `debugbar-${selected}-${Date.now()}`\n\t\tconst clientId = CLIENT_OPTIONS.find(option => option.id === selected)?.clientId ?? \"debugbar/0\"\n\n\t\tconst transport = api[\"transport\"]\n\n\t\tconst needsOpen = openFamilyRef.current !== selected || !api.isReady\n\t\tif (needsOpen) {\n\t\t\tawait api.openPlugin({ sessionId, clientId })\n\t\t\topenFamilyRef.current = selected\n\t\t\tvoid transport.receiveMessage({ type: \"pluginReadySignal\" })\n\t\t} else {\n\t\t\ttransport.setSessionContext(sessionId, clientId)\n\t\t}\n\n\t\treturn transport\n\t}\n\n\t// Negative ids avoid collision with ActivePlugin's outbound counter, which\n\t// only allocates non-negative ids.\n\tconst nextDebugId = (): number => -Math.floor(Math.random() * 1_000_000) - 1\n\n\tconst triggerThrow = async () => {\n\t\tsetStatus(\"opening session\u2026\")\n\t\tconst transport = await ensureSession()\n\t\tconst msg: PluginMethodInvocation = {\n\t\t\ttype: \"methodInvocation\",\n\t\t\tid: nextDebugId(),\n\t\t\tmethodName: \"applyAgentChanges\",\n\t\t\targs: [\"this is not valid DSL \u2014 debug bar throw test\"],\n\t\t}\n\t\tvoid transport.receiveMessage(msg)\n\t\tsetStatus(`dispatched throw as ${selected} \u2014 check BQ plugin_method_error`)\n\t}\n\n\t// Routes through HeadlessAPI.receiveMessage (the production inbound path)\n\t// so the call hits ConnectionGuard.ensureConnectedOrThrow before dispatch \u2014\n\t// matches what the SDK/backend trigger in prod.\n\tconst triggerBenignMethod = async () => {\n\t\tawait ensureSession()\n\t\tconst api = getHeadlessAPI()\n\t\tif (!api) {\n\t\t\tsetStatus(\"no HeadlessAPI on window \u2014 open the API plugin first\")\n\t\t\treturn\n\t\t}\n\t\tconst msg: PluginMethodInvocation = {\n\t\t\ttype: \"methodInvocation\",\n\t\t\tid: nextDebugId(),\n\t\t\tmethodName: \"getCollections\",\n\t\t\targs: [],\n\t\t}\n\t\ttry {\n\t\t\tawait api.receiveMessage(msg)\n\t\t\tsetStatus(`dispatched getCollections as ${selected} via HeadlessAPI`)\n\t\t} catch (error) {\n\t\t\tsetStatus(`receiveMessage threw: ${(error as Error).message}`)\n\t\t}\n\t}\n\n\t// Live snapshot of the guard's state and the underlying socket. Polled at\n\t// 250ms so the countdown reads smoothly without spamming React.\n\tconst [reconnectState, setReconnectState] = React.useState<{\n\t\tconnected: boolean\n\t\tattempts: number\n\t\tnextRetryInMs: number\n\t}>({ connected: false, attempts: 0, nextRetryInMs: 0 })\n\tReact.useEffect(() => {\n\t\tconst id = window.setInterval(() => {\n\t\t\tconst api = getHeadlessAPI()\n\t\t\tif (!api) return\n\t\t\tconst { attempts, nextRetryInMs } = api.debugReconnectState\n\t\t\tsetReconnectState({\n\t\t\t\tconnected: !!engine.remoteDocument?.hasRemoteConnection(),\n\t\t\t\tattempts,\n\t\t\t\tnextRetryInMs,\n\t\t\t})\n\t\t}, 250)\n\t\treturn () => window.clearInterval(id)\n\t}, [])\n\n\tconst burnRateLimit = () => {\n\t\tconst api = getHeadlessAPI()\n\t\tif (!api) {\n\t\t\tsetStatus(\"no HeadlessAPI on window \u2014 open the API plugin first\")\n\t\t\treturn\n\t\t}\n\t\tapi.debugBurnReconnectBudget()\n\t}\n\n\tconst resetReconnect = () => {\n\t\tgetHeadlessAPI()?.debugResetReconnectState()\n\t}\n\n\tconst triggerTimeout = async () => {\n\t\tsetStatus(\"opening session\u2026\")\n\t\tconst transport = await ensureSession()\n\t\ttransport.setOverrideTimeoutMs(HANG_TIMEOUT_MS)\n\t\t// `scheduleTimeoutForTest` drives the transport's timeout machinery\n\t\t// without invoking the real method handler. Calling `receiveMessage`\n\t\t// would route applyAgentChanges through `parseDSLString`, which throws\n\t\t// synchronously on invalid DSL \u2014 the throw would race (and usually\n\t\t// beat) the 1s timer, defeating the test.\n\t\tconst args = [\"__debug.hangForTimeoutTest\"]\n\t\tconst id = transport.scheduleTimeoutForTest(\"applyAgentChanges\", args)\n\t\tsetStatus(`scheduled timeout as ${selected} (timeout=${HANG_TIMEOUT_MS}ms)\u2026`)\n\t\tsetTimeout(() => {\n\t\t\ttransport.setOverrideTimeoutMs(undefined)\n\t\t\tsetStatus(prev => `${prev} \u2014 fired, override cleared`)\n\t\t}, HANG_TIMEOUT_MS + 200)\n\t}\n\n\treturn (\n\t\t<Stack direction=\"row\" padding={12} gap={12} style={{ height: \"100%\", minHeight: 0 }}>\n\t\t\t<div style={{ width: 260, flexShrink: 0, display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n\t\t\t\t<Section title=\"Session\">\n\t\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t\t<span style={{ fontSize: 12 }}>Simulate client:</span>\n\t\t\t\t\t\t<PopupButton title={selected}>\n\t\t\t\t\t\t\t{CLIENT_OPTIONS.map(option => (\n\t\t\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\tidentifier={option.id}\n\t\t\t\t\t\t\t\t\tselected={selected === option.id}\n\t\t\t\t\t\t\t\t\tonSelect={() => setSelected(option.id)}\n\t\t\t\t\t\t\t\t\ttitle={`${option.id} (${option.clientId})`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</PopupButton>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Section>\n\n\t\t\t\t<Section title=\"Send methods\">\n\t\t\t\t\t<Button onClick={() => void triggerBenignMethod()}>Send getCollections</Button>\n\t\t\t\t\t<Button onClick={() => void triggerThrow()}>Trigger throw</Button>\n\t\t\t\t\t<Button onClick={() => void triggerTimeout()}>Trigger timeout ({HANG_TIMEOUT_MS}ms)</Button>\n\t\t\t\t</Section>\n\n\t\t\t\t<Section title=\"Connection\">\n\t\t\t\t\t<ConnectionStatus state={reconnectState} />\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tengine.remoteDocument?.socket?.disconnect()\n\t\t\t\t\t\t\tsetStatus(\"socket disconnected \u2014 next plugin call hits ConnectionGuard\")\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tDisconnect\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button onClick={burnRateLimit}>Burn reconnect budget</Button>\n\t\t\t\t\t<Button onClick={resetReconnect}>Reset retry state</Button>\n\t\t\t\t</Section>\n\n\t\t\t\t<Section title=\"Log\">\n\t\t\t\t\t<Button onClick={() => setTapping(prev => !prev)}>{tapping ? \"Untap\" : \"Tap\"}</Button>\n\t\t\t\t\t<Button onClick={() => setLog([])}>Clear log</Button>\n\t\t\t\t\t{status && <div className={styles.status}>{status}</div>}\n\t\t\t\t</Section>\n\t\t\t</div>\n\t\t\t<div ref={logScrollRef} onScroll={onLogScroll} className={styles.log}>\n\t\t\t\t{log.map(entry => (\n\t\t\t\t\t<div key={entry.key} className={`${styles.logRow} ${KIND_STYLE[entry.kind]}`}>\n\t\t\t\t\t\t<span className={styles.logMeta}>{formatTime(entry.at)} </span>\n\t\t\t\t\t\t<span className={styles.logMeta}>{KIND_PREFIX[entry.kind]}</span> {entry.text}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</Stack>\n\t)\n}\n", "import \"ServerAPI.styles_1m82659.wyw.css\"; export const log = \"log_lha7fqk\";\nexport const logRow = \"logRow_lguw92y\";\nexport const logExec = \"logExec_l6usyud\";\nexport const logResult = \"logResult_ljxcumg\";\nexport const logError = \"logError_la9bhvc\";\nexport const logCall = \"logCall_l8mqxxn\";\nexport const logMeta = \"logMeta_l1b8n3g3\";\nexport const status = \"status_s1ysr00c\";\nexport const statusDot = \"statusDot_s1ptdjgu\";\nexport const statusDotConnected = \"statusDotConnected_s1t2faw4\";\nexport const statusDotDisconnected = \"statusDotDisconnected_srkefq5\";\nexport const statusMeta = \"statusMeta_sz3afz\";", "import \"Tools.styles_7g886w.wyw.css\"; export const radioButtonWithNoOverflow = \"radioButtonWithNoOverflow_r1e5o5qt\";\nexport const tools = \"tools_t1rlitx0\";\nexport const toolsFilter = \"toolsFilter_t1gz93qy\";\nexport const toolColumns = \"toolColumns_tvua49z\";\nexport const tool = \"tool_t185kjk7\";\nexport const toolTitle = \"toolTitle_tkzwiy6\";", "// Debug-bar method tap. Wraps every function on a prototype to call `onCall`\n// before delegating. Idempotent under HMR / StrictMode: re-installing on an\n// already-wrapped prototype is a no-op, and disposal restores the true\n// original captured at first install \u2014 not a nested wrapper.\n\nexport type CallEvent = { className: string; method: string; args: readonly unknown[] }\n\nconst TAP_MARKER = Symbol.for(\"framer.debugbar.tapMethods.original\")\n\ninterface Tapped {\n\t[TAP_MARKER]?: { original: PropertyDescriptor; listeners: Set<(event: CallEvent) => void> }\n}\n\n// Accept any class \u2014 we only read its prototype, never instantiate it. Using\n// `{ prototype: object; name: string }` instead of `new (...) => object` lets\n// classes with private/protected constructors pass through.\nexport function tapAllMethods(\n\tctor: { prototype: object; name: string },\n\tonCall: (event: CallEvent) => void,\n): () => void {\n\tconst proto = ctor.prototype as Record<string, unknown>\n\tconst className = ctor.name\n\tconst installed: Array<{ name: string; entry: NonNullable<Tapped[typeof TAP_MARKER]> }> = []\n\n\tfor (const name of Object.getOwnPropertyNames(proto)) {\n\t\tif (name === \"constructor\") continue\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(proto, name)\n\t\tif (!descriptor || typeof descriptor.value !== \"function\") continue\n\n\t\tconst tagged = descriptor.value as Tapped\n\t\tlet entry = tagged[TAP_MARKER]\n\t\tif (!entry) {\n\t\t\tentry = { original: descriptor, listeners: new Set() }\n\t\t\tconst wrapped = function (this: object, ...args: unknown[]): unknown {\n\t\t\t\tfor (const listener of entry!.listeners) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlistener({ className, method: name, args })\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Listeners are debug-only \u2014 never break the call path.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn (descriptor.value as (...args: unknown[]) => unknown).apply(this, args)\n\t\t\t}\n\t\t\t;(wrapped as Tapped)[TAP_MARKER] = entry\n\t\t\tObject.defineProperty(proto, name, { ...descriptor, value: wrapped })\n\t\t}\n\t\tentry.listeners.add(onCall)\n\t\tinstalled.push({ name, entry })\n\t}\n\n\treturn () => {\n\t\tfor (const { name, entry } of installed) {\n\t\t\tentry.listeners.delete(onCall)\n\t\t\tif (entry.listeners.size === 0) {\n\t\t\t\tObject.defineProperty(proto, name, entry.original)\n\t\t\t}\n\t\t}\n\t}\n}\n", "import {\n\tbenchmarkFastClone,\n\tbenchmarkNodeFromValue,\n\tbenchmarkTreeAssembling,\n\tbenchmarkValueFromNode,\n} from \"@framer/tree-library\"\nimport { defaultEmployeesOnlySettings } from \"@framerjs/app-config\"\nimport { openNewTab } from \"@framerjs/app-shared\"\nimport { createAbsoluteImageAssetURL, parseAssetReference } from \"@framerjs/assets\"\nimport {\n\tButton,\n\tCheckBox,\n\tIconInputDropdown,\n\tLabel,\n\tLink,\n\tPopover,\n\tPopupButton,\n\tPopupButtonItem,\n\tRadioButton,\n\tRadioButtonGroup,\n\tSegmentedControl,\n\tSegmentedControlItem,\n\tStack,\n\tTextArea,\n\tTextInput,\n} from \"@framerjs/fresco\"\nimport { assert, delay, getLogger, reportableError } from \"@framerjs/shared\"\nimport {\n\tgenerateHTMLForCapture,\n\tgetScreenshotViewportForCanvasNode,\n} from \"app/ai/agents/tools/utils/AgentScreenshots.ts\"\nimport {\n\ttype AgentScreenshotTheme,\n\tencodeHTMLForScreenshotting,\n\tisSuccessResult,\n\trequestAgentScreenshot,\n} from \"app/ai/agents/tools/utils/requestAgentScreenshot.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { employeesOnlySettings, useEmployeesOnlySettingIsOn } from \"app/employeesOnlySettings.ts\"\nimport type { MenuItemOptions } from \"app/menu.ts\"\nimport {\n\tCanvasSandboxController,\n\tdebugBarSandboxWindowModeKey,\n} from \"canvas-sandbox-renderer/CanvasSandboxRenderer.tsx\"\nimport type { SandboxRenderer } from \"canvas-sandbox-renderer/SandboxRenderer.ts\"\nimport { getRelatedReplicaNodes } from \"code-generation/utils/isOnlyVisibleInCurrentVariant.ts\"\nimport { type CrashFunctionName, crashFunctionNames, crashFunctions } from \"debug-utils/crash.ts\"\nimport { debugLoadingQueryParam } from \"document/components/chrome/DebugLoadingPerf.tsx\"\nimport type { LocalCache, LocalCrdtSyncStrategy } from \"document/crdt/sync/LocalCache.ts\"\nimport {\n\tBACKEND_TYPE,\n\ttype BackendType,\n\tclearBackendOverride,\n\tcreateLocalCacheDataBackend,\n\tgetBackendOverride,\n\tisBackendType,\n\treadCacheMeta,\n\tsetBackendOverride,\n} from \"document/crdt/sync/LocalCacheDataBackend.ts\"\nimport { debugClearLocalCacheParam, performLocalCacheMaintenance } from \"document/crdt/sync/LocalCacheMaintenance.ts\"\nimport engine from \"document/engine.ts\"\nimport type { Changeset } from \"document/models/CanvasTree/Changeset.ts\"\nimport type { NodeChange } from \"document/models/CanvasTree/TreeDiff.ts\"\nimport { nodeChange } from \"document/models/CanvasTree/TreeDiff.ts\"\nimport type {\n\tAnyScopeNode,\n\tCanvasNode,\n\tLayoutTemplateNode,\n\tNodeID,\n\tSmartComponentNode,\n\tWebPageNode,\n} from \"document/models/CanvasTree/index.ts\"\nimport { CanvasTree, FrameNode, TextNode, isScopeNode } from \"document/models/CanvasTree/index.ts\"\nimport { getContentManagementNode } from \"document/models/CanvasTree/nodes/ContentManagementNode.utils.ts\"\nimport { randomID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport { PresetsListNode } from \"document/models/CanvasTree/nodes/PresetsListNode.ts\"\nimport { TemplateHelper } from \"document/models/CanvasTree/nodes/TemplateHelper.ts\"\nimport type { VectorSetNode } from \"document/models/CanvasTree/nodes/VectorSetNode.ts\"\nimport { collectMinimalHiddenAncestorSet } from \"document/models/CanvasTree/nodes/utils/collectMinimalHiddenAncestorSet.ts\"\nimport {\n\tisLayoutTemplateNode,\n\tisShaderNode,\n\tisShapeContainerNode,\n\tisSmartComponentNode,\n\tisVectorSetNode,\n\tisWebPageNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { getGeneratedValue } from \"document/models/CanvasTree/traits/Generated.ts\"\nimport { richTextTags } from \"document/models/CanvasTree/traits/WithRichTextTag.ts\"\nimport type { IsMaster, IsReplica } from \"document/models/CanvasTree/traits/WithTemplate.ts\"\nimport type { IsVariant } from \"document/models/CanvasTree/traits/WithVariant.ts\"\nimport { isBreakpointVariant, isGestureVariant } from \"document/models/CanvasTree/traits/WithVariant.ts\"\nimport type { DebugStore } from \"document/stores/DebugStore.ts\"\nimport { ReactBuild } from \"document/stores/DebugStore.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { ModalType } from \"document/utils/ModalType.ts\"\nimport { ScopeType } from \"document/utils/scopeType.ts\"\nimport { useSignalState } from \"editorbar/engine/OnPageEngineSignals.ts\"\nimport { environment } from \"environment/index.ts\"\nimport { generateLayoutTemplateHTMLForScreenshot } from \"export/exportLayoutTemplateToHTMLForScreenshot.ts\"\nimport { generateSmartComponentVariantHTMLForScreenshot } from \"export/exportSmartComponentToHTMLForScreenshot.ts\"\nimport type { Size } from \"library/index.ts\"\nimport React, { useCallback, useState } from \"react\"\nimport type { DebugRenderingFeatures } from \"renderer/DebugRenderingFeatures.ts\"\nimport { createInlineCodeStylePreset } from \"utils/inlineCodeStylePresetUtils.ts\"\nimport { createLinkStylePreset } from \"utils/linkStylePresetUtils.ts\"\nimport { createTextStylePreset } from \"utils/textStylePresetUtils.ts\"\nimport { getCookie, setCookie } from \"web/lib/cookies.ts\"\nimport { downloadContent, downloadURL } from \"web/lib/downloadFile.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport { updateFeatureSetStorage } from \"web/pages/project/employeesOnlyMenu/menuFromFeatureSet.ts\"\nimport { canBeBatchTranslated } from \"../localization/canBeBatchTranslated.ts\"\nimport { forEachLocalizationSourceInGroup } from \"../localization/localizationSourceGroupUtils.ts\"\nimport { LocaleSelector } from \"../shared/LocaleSelector.tsx\"\nimport type { LocaleCode } from \"../shared/locales.ts\"\nimport { BranchesTools } from \"./BranchesTools.tsx\"\nimport { CollectionTools } from \"./CollectionTools.tsx\"\nimport { CouldCollapseTool } from \"./CouldCollapseTool.tsx\"\nimport { FuzzerControls } from \"./Fuzzer.tsx\"\nimport { LoaderControls } from \"./LoaderControls.tsx\"\nimport { RecoverableErrorsTool } from \"./RecoverableErrorsTool.tsx\"\nimport {\n\tAiCreditsTools,\n\tBandwidthTools,\n\tCmsCollectionsTools,\n\tCmsItemsTools,\n\tConvertTools,\n\tLocalesTools,\n\tPagesTools,\n} from \"./SelfServeTools.tsx\"\nimport { SimulatedDOMTools } from \"./SimulatedDOMTools.tsx\"\nimport * as styles from \"./Tools.styles.ts\"\nimport { VersionHistoryTools } from \"./VersionHistoryTools.tsx\"\nimport { createSampleBatchTranslationCollection } from \"./createSampleBatchTranslationCollection.ts\"\nimport { useLocalStorageState } from \"./useLocalStorageState.tsx\"\n\nconst log = getLogger(\"debugbar\")\n\nconst DEFAULT_TRANSLATE_LOCALE_CODE: LocaleCode = \"nl\"\nconst importMapGeneratorLogsFlag = \"__ENABLE_IMPORT_MAP_GENERATOR_LOGS__\"\n\nenum ToolCategory {\n\tTree = \"Tree\",\n\tBranches = \"Branches\",\n\tSandbox = \"Sandbox\",\n\tRendering = \"Rendering\",\n\tModules = \"Modules & Codegen\",\n\tPublishing = \"Publishing\",\n\tCanvasPerf = \"Canvas Perf\",\n\tSitesPerf = \"Sites Perf\",\n\tSelfServe = \"Self Serve\",\n}\n\ninterface ImportMapFixturesWindow extends Window {\n\t__CAPTURE_IMPORT_MAP_FIXTURES__?: true\n\t__IMPORT_MAP_FIXTURE__?: ImportMapFixtureCaptureEntry[]\n\t__ENABLE_IMPORT_MAP_GENERATOR_LOGS__?: true\n}\n\ninterface ImportMapFixtureCaptureEntry {\n\tcaptureId: string\n\toperation: \"install\" | \"reinstall\" | \"link\"\n\tphase: \"input\" | \"output\"\n\tpayload: unknown\n\ttimestamp: number\n}\n\ninterface ImportMapCapturedFixture {\n\tcaptureId: string\n\toperation: \"install\" | \"reinstall\" | \"link\"\n\tinput: unknown\n\toutput?: unknown\n\ttimestamp: number\n}\n\ninterface ScreenshotHTMLDebugRun {\n\thtmlGenerationMs: number\n\tscreenshotRequestMs: number\n\tscreenshotURL: string\n}\n\nfunction getLatestImportMapCapturedFixture(entries: ImportMapFixtureCaptureEntry[]): ImportMapCapturedFixture | null {\n\tconst captures = new Map<\n\t\tstring,\n\t\t{\n\t\t\toperation: \"install\" | \"reinstall\" | \"link\"\n\t\t\tinput?: unknown\n\t\t\toutput?: unknown\n\t\t\ttimestamp: number\n\t\t}\n\t>()\n\n\tfor (const entry of entries) {\n\t\tconst existing = captures.get(entry.captureId)\n\t\tconst next = existing ?? {\n\t\t\toperation: entry.operation,\n\t\t\ttimestamp: entry.timestamp,\n\t\t}\n\t\tnext.operation = entry.operation\n\t\tnext.timestamp = Math.max(next.timestamp, entry.timestamp)\n\t\tif (entry.phase === \"input\") next.input = entry.payload\n\t\tif (entry.phase === \"output\") next.output = entry.payload\n\t\tcaptures.set(entry.captureId, next)\n\t}\n\n\tlet latest: ImportMapCapturedFixture | null = null\n\tfor (const [captureId, capture] of captures) {\n\t\tif (capture.input === undefined) continue\n\t\tif (!latest || capture.timestamp > latest.timestamp) {\n\t\t\tlatest = {\n\t\t\t\tcaptureId,\n\t\t\t\toperation: capture.operation,\n\t\t\t\tinput: capture.input,\n\t\t\t\toutput: capture.output,\n\t\t\t\ttimestamp: capture.timestamp,\n\t\t\t}\n\t\t}\n\t}\n\treturn latest\n}\n\nconst screenshotTargetTitles: Partial<Record<ScopeType, string>> = {\n\t[ScopeType.WebPage]: Dictionary.Page,\n\t[ScopeType.SmartComponent]: Dictionary.Component,\n\t[ScopeType.LayoutTemplate]: Dictionary.Template,\n}\n\nexport function Tools() {\n\tconst importMapFixturesWindow = window as ImportMapFixturesWindow\n\tconst [crashFunction, setCrashFunction] = useLocalStorageState<CrashFunctionName>(\n\t\t\"debugbar.crashOption\",\n\t\tcrashFunctionNames[0],\n\t)\n\tconst handleCrashChange = React.useCallback(\n\t\t(functionName: CrashFunctionName) => setCrashFunction(functionName),\n\t\t[setCrashFunction],\n\t)\n\n\tconst [useBinaryFormat, setUseBinaryFormat] = React.useState(() => getCookie(\"binary\") === \"true\")\n\tconst [componentRecompileProgress, setComponentRecompileProgress] = React.useState<{\n\t\tcurrent: number\n\t\ttotal: number\n\t} | null>(null)\n\tconst [webpageRecompileProgress, setWebpageRecompileProgress] = React.useState<{\n\t\tcurrent: number\n\t\ttotal: number\n\t} | null>(null)\n\tconst [vectorSetRecompileProgress, setVectorSetRecompileProgress] = React.useState<{\n\t\tcurrent: number\n\t\ttotal: number\n\t} | null>(null)\n\tconst [collectionRecompileProgress, setCollectionRecompileProgress] = React.useState<{\n\t\tcurrent: number\n\t\ttotal: number\n\t} | null>(null)\n\tconst [stylePresetRecompileProgress, setStylePresetRecompileProgress] = React.useState<{\n\t\tcurrent: number\n\t\ttotal: number\n\t} | null>(null)\n\tconst [isBatchTranslateInProgress, setIsBatchTranslateInProgress] = React.useState(false)\n\tconst [showForceSnapshotPopover, setShowForceSnapshotPopover] = React.useState(false)\n\tconst forceSnapshotOptionsAnchorRef = React.useRef<HTMLButtonElement>(null)\n\tconst [captureImportMapFixtures, setCaptureImportMapFixtures] = useLocalStorageState(\n\t\t\"debugbar.captureImportMapFixtures\",\n\t\t\"__CAPTURE_IMPORT_MAP_FIXTURES__\" in importMapFixturesWindow,\n\t)\n\tconst [enableImportMapGeneratorLogs, setEnableImportMapGeneratorLogs] = React.useState(\n\t\t() => importMapGeneratorLogsFlag in importMapFixturesWindow,\n\t)\n\tconst [latestImportMapFixture, setLatestImportMapFixture] = React.useState<ImportMapCapturedFixture | null>(() =>\n\t\tgetLatestImportMapCapturedFixture(importMapFixturesWindow.__IMPORT_MAP_FIXTURE__ ?? []),\n\t)\n\n\tconst [customAiInstructions, setCustomAiInstructions] = React.useState(\"\")\n\tconst [selectedLocaleToTranslate, setSelectedLocaleToTranslate] = React.useState<LocaleCode | \"\">(\n\t\tDEFAULT_TRANSLATE_LOCALE_CODE,\n\t)\n\tconst [isScreenshotHTMLInProgress, setIsScreenshotHTMLInProgress] = React.useState(false)\n\tconst [lastScreenshotHTMLRun, setLastScreenshotHTMLRun] = React.useState<ScreenshotHTMLDebugRun[] | null>(null)\n\tconst activeScopeType = useEngineState(\n\t\t() => {\n\t\t\treturn engine.stores.scopeStore.scopeType\n\t\t},\n\t\t[],\n\t\t[engine.stores.scopeStore],\n\t)\n\tconst isActiveScopeScreenshotable =\n\t\tactiveScopeType === ScopeType.WebPage ||\n\t\tactiveScopeType === ScopeType.SmartComponent ||\n\t\tactiveScopeType === ScopeType.LayoutTemplate\n\tconst screenshotTargetTitle = screenshotTargetTitles[activeScopeType] ?? Dictionary.Scope\n\n\tfunction handleCrashClick() {\n\t\tengine.scheduler.process(() => {\n\t\t\tlet name = crashFunction\n\t\t\tlet crash = crashFunctions[name]\n\t\t\tif (!crash) {\n\t\t\t\tname = crashFunctionNames[0]\n\t\t\t\tcrash = crashFunctions[name]\n\t\t\t}\n\t\t\tlog.info(\"crashing with:\", name)\n\t\t\tcrash()\n\t\t})\n\t}\n\n\tconst handleGenerateTranslationCollection = useCallback(async () => {\n\t\ttry {\n\t\t\tsetIsBatchTranslateInProgress(true)\n\n\t\t\tconst result = await createSampleBatchTranslationCollection(\n\t\t\t\tengine,\n\t\t\t\tcustomAiInstructions,\n\t\t\t\tselectedLocaleToTranslate || DEFAULT_TRANSLATE_LOCALE_CODE,\n\t\t\t)\n\n\t\t\tawait new Promise(resolve => {\n\t\t\t\tengine.scheduler.runWhenIdle(resolve)\n\t\t\t})\n\n\t\t\tawait engine.scheduler.processWhenReadyAsync(() => {\n\t\t\t\tengine.stores.chromeStore.setLocalizationsVisible(true)\n\t\t\t})\n\n\t\t\tengine.scheduler.runWhenIdle(() => {\n\t\t\t\tconst filteredLocalizationGroups = engine.stores.localizationStore.filteredGroupsAndSources\n\t\t\t\tif (!filteredLocalizationGroups) {\n\t\t\t\t\tthrow new Error(\"there are no localization groups to translate\")\n\t\t\t\t}\n\n\t\t\t\tconst collectionGroup = filteredLocalizationGroups.find(group => {\n\t\t\t\t\treturn group.nodeId === result.collection.id && group.groupType === \"collection\"\n\t\t\t\t})\n\t\t\t\tif (collectionGroup?.groupType !== \"collection\") {\n\t\t\t\t\tthrow new Error(\"No collection group found\")\n\t\t\t\t}\n\n\t\t\t\tconst collectionItemGroup = collectionGroup.groups[0]\n\n\t\t\t\tif (!collectionItemGroup || !result.locale) {\n\t\t\t\t\tthrow new Error(\"No collection item group found\")\n\t\t\t\t}\n\n\t\t\t\tconst batchTranslatableItemKeyPaths: Set<string> = new Set()\n\n\t\t\t\tforEachLocalizationSourceInGroup(collectionItemGroup, source => {\n\t\t\t\t\tif (!canBeBatchTranslated(result.locale, source, engine.stores.previewStore.framerSiteId)) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tbatchTranslatableItemKeyPaths.add(source.keyPath)\n\t\t\t\t})\n\n\t\t\t\tengine.stores.modalStore.set({\n\t\t\t\t\ttype: ModalType.BatchTranslate,\n\t\t\t\t\tlocalesWithKeyPaths: [{ locale: result.locale, keyPaths: batchTranslatableItemKeyPaths }],\n\t\t\t\t\tsource: \"localization_table\",\n\t\t\t\t})\n\t\t\t})\n\t\t} catch (error) {\n\t\t\ttoast({\n\t\t\t\ttext: `Failed to generate and translate test collection: ${\n\t\t\t\t\terror instanceof Error ? error.message : \"Unknown error\"\n\t\t\t\t}`,\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"error\",\n\t\t\t})\n\t\t} finally {\n\t\t\tsetIsBatchTranslateInProgress(false)\n\t\t}\n\t}, [customAiInstructions, selectedLocaleToTranslate])\n\n\tconst setImportMapFixtureCapture = useCallback(\n\t\t(enabled: boolean) => {\n\t\t\tif (enabled) {\n\t\t\t\timportMapFixturesWindow.__CAPTURE_IMPORT_MAP_FIXTURES__ = true\n\t\t\t} else {\n\t\t\t\tdelete importMapFixturesWindow.__CAPTURE_IMPORT_MAP_FIXTURES__\n\t\t\t}\n\t\t\tsetCaptureImportMapFixtures(enabled)\n\t\t},\n\t\t[importMapFixturesWindow, setCaptureImportMapFixtures],\n\t)\n\n\tReact.useEffect(() => {\n\t\tif (captureImportMapFixtures) {\n\t\t\timportMapFixturesWindow.__CAPTURE_IMPORT_MAP_FIXTURES__ = true\n\t\t\treturn\n\t\t}\n\n\t\tdelete importMapFixturesWindow.__CAPTURE_IMPORT_MAP_FIXTURES__\n\t}, [captureImportMapFixtures, importMapFixturesWindow])\n\n\tconst setImportMapGeneratorLogs = useCallback(\n\t\t(enabled: boolean) => {\n\t\t\tif (enabled) {\n\t\t\t\timportMapFixturesWindow.__ENABLE_IMPORT_MAP_GENERATOR_LOGS__ = true\n\t\t\t} else {\n\t\t\t\tdelete importMapFixturesWindow.__ENABLE_IMPORT_MAP_GENERATOR_LOGS__\n\t\t\t}\n\t\t\tsetEnableImportMapGeneratorLogs(enabled)\n\t\t},\n\t\t[importMapFixturesWindow],\n\t)\n\n\tconst updateLatestImportMapFixture = useCallback(() => {\n\t\tsetLatestImportMapFixture(getLatestImportMapCapturedFixture(importMapFixturesWindow.__IMPORT_MAP_FIXTURE__ ?? []))\n\t}, [importMapFixturesWindow])\n\n\tReact.useEffect(() => {\n\t\tupdateLatestImportMapFixture()\n\t\tfunction handleFixtureCapture() {\n\t\t\tupdateLatestImportMapFixture()\n\t\t}\n\t\twindow.addEventListener(\"import-map-fixture-captured\", handleFixtureCapture)\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"import-map-fixture-captured\", handleFixtureCapture)\n\t\t}\n\t}, [updateLatestImportMapFixture])\n\n\tconst handleSaveLatestImportMapFixtureInput = useCallback(() => {\n\t\tif (!latestImportMapFixture) return\n\n\t\tconst inputFilename = `latest-${latestImportMapFixture.operation}-input.json`\n\t\tdownloadContent(JSON.stringify(latestImportMapFixture.input, null, \"\\t\"), inputFilename)\n\t}, [latestImportMapFixture])\n\n\tconst handleSaveLatestImportMapFixtureExpected = useCallback(() => {\n\t\tif (!latestImportMapFixture?.output) return\n\n\t\tconst expectedFilename = `latest-${latestImportMapFixture.operation}-expected.json`\n\t\tconst expected = {\n\t\t\tsuccess: true,\n\t\t\tassertions: {},\n\t\t\timports: {},\n\t\t}\n\n\t\tdownloadContent(JSON.stringify(expected, null, \"\\t\"), expectedFilename)\n\t}, [latestImportMapFixture])\n\n\treturn (\n\t\t<ToolsContainer\n\t\t\ttools={[\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Generate Random Edits\",\n\t\t\t\t\tcategories: [ToolCategory.Rendering, ToolCategory.CanvasPerf],\n\t\t\t\t\ttool: <FuzzerControls />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Import Maps / npm\",\n\t\t\t\t\tcategories: [ToolCategory.Modules],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<CheckBox value={captureImportMapFixtures} onChange={setImportMapFixtureCapture} />\n\t\t\t\t\t\t\t\tCapture import map fixtures\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<CheckBox value={enableImportMapGeneratorLogs} onChange={setImportMapGeneratorLogs} />\n\t\t\t\t\t\t\t\tEnable import map generator logs\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t{latestImportMapFixture\n\t\t\t\t\t\t\t\t? `Latest captured: ${latestImportMapFixture.operation}`\n\t\t\t\t\t\t\t\t: \"No captured fixture yet.\"}\n\t\t\t\t\t\t\t<Button onClick={handleSaveLatestImportMapFixtureInput} enabled={Boolean(latestImportMapFixture)}>\n\t\t\t\t\t\t\t\tDownload latest input fixture\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={handleSaveLatestImportMapFixtureExpected}\n\t\t\t\t\t\t\t\tenabled={Boolean(latestImportMapFixture?.output)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tDownload expected fixture stub\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Modules in Tree\",\n\t\t\t\t\tcategories: [ToolCategory.Modules],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<Button onClick={() => engine.stores.modulesStore.startDivergenceReporter()}>\n\t\t\t\t\t\t\t\tStart Divergence Reporter\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button onClick={() => engine.stores.modulesStore.sampleDivergencesNow()}>Sample Divergences Now</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Document Loader Controls\",\n\t\t\t\t\tcategories: [ToolCategory.Tree, ToolCategory.Modules],\n\t\t\t\t\ttool: <LoaderControls />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Suppress UI Mount\",\n\t\t\t\t\tcategories: [ToolCategory.Rendering, ToolCategory.CanvasPerf],\n\t\t\t\t\ttool: <SuppressUIMountTool />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Network\",\n\t\t\t\t\tcategories: [ToolCategory.Tree, ToolCategory.Modules],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<Button onClick={handleDisconnect}>Disconnect</Button>\n\t\t\t\t\t\t\t<Button onClick={handleConnect}>Connect</Button>\n\t\t\t\t\t\t\t<Button onClick={handleReconnect}>Reconnect</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Changesets\",\n\t\t\t\t\tcategories: [ToolCategory.Tree],\n\t\t\t\t\ttool: <ChangesetTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Branches\",\n\t\t\t\t\tcategories: [ToolCategory.Branches, ToolCategory.Tree],\n\t\t\t\t\ttool: <BranchesTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Server\",\n\t\t\t\t\tcategories: [ToolCategory.Tree, ToolCategory.Modules],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<CheckBox\n\t\t\t\t\t\t\t\t\tvalue={useBinaryFormat}\n\t\t\t\t\t\t\t\t\tonChange={checked => {\n\t\t\t\t\t\t\t\t\t\tsetUseBinaryFormat(checked)\n\t\t\t\t\t\t\t\t\t\tsetCookie(\"binary\", checked ? \"true\" : \"false\", 365)\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tUse Binary Format\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t<Stack direction=\"row\" gap={4} style={{ width: \"100%\" }}>\n\t\t\t\t\t\t\t\t<Button onClick={handleForceServerSnapshot} style={{ flex: 1 }}>\n\t\t\t\t\t\t\t\t\tForce snapshot\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tref={forceSnapshotOptionsAnchorRef}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tsetShowForceSnapshotPopover(open => !open)\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"Force snapshot options\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<IconInputDropdown />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t{showForceSnapshotPopover && (\n\t\t\t\t\t\t\t\t\t<Popover\n\t\t\t\t\t\t\t\t\t\tanchor={forceSnapshotOptionsAnchorRef.current}\n\t\t\t\t\t\t\t\t\t\talignSelf=\"start\"\n\t\t\t\t\t\t\t\t\t\tattachTo={[\"bottom\", \"top\"]}\n\t\t\t\t\t\t\t\t\t\tshowArrow={false}\n\t\t\t\t\t\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\t\t\t\t\t\tsetShowForceSnapshotPopover(false)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Stack padding={8}>\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleForceServerSnapshotWithCompaction()\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetShowForceSnapshotPopover(false)\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tForce snapshot with compaction\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</Popover>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Button onClick={handleReloadDocument}>Reload Document From Server</Button>\n\t\t\t\t\t\t\t<Button onClick={handleVerifyDocument}>Verify Document With Server Version</Button>\n\t\t\t\t\t\t\t<Button onClick={addLocalOnlyFrame}>Corrupt Local Tree</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Rerender and recompile\",\n\t\t\t\t\tcategories: [ToolCategory.Rendering, ToolCategory.Modules, ToolCategory.Sandbox],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<Button onClick={clearCache}>Clear Caches and Rerender</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={async function () {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tfor await (const progress of recompileComponents()) {\n\t\t\t\t\t\t\t\t\t\t\tsetComponentRecompileProgress(progress)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\t\tsetComponentRecompileProgress(null)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tenabled={componentRecompileProgress === null}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{componentRecompileProgress\n\t\t\t\t\t\t\t\t\t? `Recompiling\u2026 (${componentRecompileProgress.current + 1} out of ${componentRecompileProgress.total})`\n\t\t\t\t\t\t\t\t\t: \"Recompile Local Smart Components\"}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={async function () {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tfor await (const progress of recompileWebpages()) {\n\t\t\t\t\t\t\t\t\t\t\tsetWebpageRecompileProgress(progress)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\t\tsetWebpageRecompileProgress(null)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tenabled={webpageRecompileProgress === null}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{webpageRecompileProgress\n\t\t\t\t\t\t\t\t\t? `Recompiling\u2026 (${webpageRecompileProgress.current + 1} out of ${webpageRecompileProgress.total})`\n\t\t\t\t\t\t\t\t\t: \"Recompile Local Webpages\"}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={async function () {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tfor await (const progress of recompileVectorSets()) {\n\t\t\t\t\t\t\t\t\t\t\tsetVectorSetRecompileProgress(progress)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\t\tsetVectorSetRecompileProgress(null)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tenabled={vectorSetRecompileProgress === null}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{vectorSetRecompileProgress\n\t\t\t\t\t\t\t\t\t? `Recompiling\u2026 (${vectorSetRecompileProgress.current + 1} out of ${vectorSetRecompileProgress.total})`\n\t\t\t\t\t\t\t\t\t: \"Recompile Local Vector Sets\"}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={async function () {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tfor await (const progress of recompileCollections()) {\n\t\t\t\t\t\t\t\t\t\t\tsetCollectionRecompileProgress(progress)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\t\tsetCollectionRecompileProgress(null)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tenabled={collectionRecompileProgress === null}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{collectionRecompileProgress\n\t\t\t\t\t\t\t\t\t? `Recompiling\u2026 (${collectionRecompileProgress.current + 1} out of ${collectionRecompileProgress.total})`\n\t\t\t\t\t\t\t\t\t: \"Recompile Local Collections\"}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={async function () {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tfor await (const progress of recompileStylePresets()) {\n\t\t\t\t\t\t\t\t\t\t\tsetStylePresetRecompileProgress(progress)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\t\tsetStylePresetRecompileProgress(null)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tenabled={stylePresetRecompileProgress === null}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{stylePresetRecompileProgress\n\t\t\t\t\t\t\t\t\t? `Recompiling\u2026 (${stylePresetRecompileProgress.current + 1} out of ${stylePresetRecompileProgress.total})`\n\t\t\t\t\t\t\t\t\t: \"Recompile Local Style Presets\"}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={function () {\n\t\t\t\t\t\t\t\t\tconst componentId = prompt(\"Enter component ID (such as HhPAOqa16):\")\n\t\t\t\t\t\t\t\t\tif (!componentId) return\n\t\t\t\t\t\t\t\t\tengine.scheduler.process(() => {\n\t\t\t\t\t\t\t\t\t\tvoid engine.stores.codeGenerationStore.forceComponentUpdate(componentId)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tRecompile Component ID\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Test Crashing and Recovery Logic\",\n\t\t\t\t\tcategories: [ToolCategory.Rendering],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<PopupButton>\n\t\t\t\t\t\t\t\t{crashFunctionNames.map(name => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\t\t\t\t\tkey={name}\n\t\t\t\t\t\t\t\t\t\t\tselected={crashFunction === name}\n\t\t\t\t\t\t\t\t\t\t\ttitle={name}\n\t\t\t\t\t\t\t\t\t\t\tidentifier={name}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={handleCrashChange}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</PopupButton>\n\t\t\t\t\t\t\t<Button onClick={handleCrashClick}>Test Crash Handling</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"History Panel\",\n\t\t\t\t\tcategories: [ToolCategory.Tree],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<Button onClick={handleClearHistoryPanelData}>Clear History Panel Data</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Version History & Rollback\",\n\t\t\t\t\tcategories: [ToolCategory.Tree],\n\t\t\t\t\ttool: <VersionHistoryTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Sandbox Controls\",\n\t\t\t\t\tcategories: [ToolCategory.Sandbox],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<SandboxDebugEnabledCheckBox />\n\t\t\t\t\t\t\t<Button onClick={() => CanvasSandboxController.getShared()?.recreate()}>Remount Sandbox</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tconst controller = CanvasSandboxController.getShared()\n\t\t\t\t\t\t\t\t\tconst newMode = controller?.debugSandboxInWindow ? \"iframe\" : \"window\"\n\t\t\t\t\t\t\t\t\tlocalStorage.setItem(debugBarSandboxWindowModeKey, newMode)\n\t\t\t\t\t\t\t\t\tcontroller?.recreate(newMode)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tSandbox in {CanvasSandboxController.getShared()?.debugSandboxInWindow ? \"iframe\" : \"window\"}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Other Tree Tools\",\n\t\t\t\t\tcategories: [ToolCategory.Tree, ToolCategory.CanvasPerf],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<Button onClick={repairContentHash}>Repair graphics content hashes</Button>\n\t\t\t\t\t\t\t<Button onClick={repairMissingVariantCrash}>Repair missing variant crash</Button>\n\t\t\t\t\t\t\t<Button onClick={handleSelectZeroSizedElement}>Select zero sized elements</Button>\n\t\t\t\t\t\t\t<Button onClick={() => benchmarkNodeFromValue(engine.tree)}>Benchmark Node From Value</Button>\n\t\t\t\t\t\t\t<Button onClick={() => benchmarkValueFromNode(engine.tree.root)}>Benchmark Root Serializer</Button>\n\t\t\t\t\t\t\t<Button onClick={() => benchmarkValueFromNode(engine.stores.scopeStore.active)}>\n\t\t\t\t\t\t\t\tBenchmark Scope Serializer\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button onClick={() => benchmarkFastClone(engine.stores.scopeStore.active)}>Benchmark Fast Clone</Button>\n\t\t\t\t\t\t\t<Button onClick={() => benchmarkTreeAssembling(engine.tree, [engine.stores.scopeStore.activeId])}>\n\t\t\t\t\t\t\t\tBenchmark Active Page Assembling\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Debug The Next Publish\",\n\t\t\t\t\tcategories: [ToolCategory.Publishing, ToolCategory.SitesPerf],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<CheckBox\n\t\t\t\t\t\t\t\t\tvalue={engine.stores.debugStore.debuggingOfPublishedSites.minification}\n\t\t\t\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.minification =\n\t\t\t\t\t\t\t\t\t\t\t\t!engine.stores.debugStore.debuggingOfPublishedSites.minification\n\n\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\n\t\t\t\t\t\t\t\t\t\t\t\t`${engine.stores.debugStore.debuggingOfPublishedSites.minification ? Dictionary.Enabled : Dictionary.Disabled} minification`,\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tMinify\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<CheckBox\n\t\t\t\t\t\t\t\t\tvalue={engine.stores.debugStore.debuggingOfPublishedSites.bundling}\n\t\t\t\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.bundling =\n\t\t\t\t\t\t\t\t\t\t\t\t!engine.stores.debugStore.debuggingOfPublishedSites.bundling\n\n\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\n\t\t\t\t\t\t\t\t\t\t\t\t`${engine.stores.debugStore.debuggingOfPublishedSites.bundling ? Dictionary.Enabled : Dictionary.Disabled} bundling`,\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tBundle\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<CheckBox\n\t\t\t\t\t\t\t\t\tvalue={engine.stores.debugStore.debuggingOfPublishedSites.disableCustomCode}\n\t\t\t\t\t\t\t\t\tstyle={{ marginRight: 6, top: 2, position: \"relative\" }}\n\t\t\t\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.disableCustomCode =\n\t\t\t\t\t\t\t\t\t\t\t\t!engine.stores.debugStore.debuggingOfPublishedSites.disableCustomCode\n\n\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\n\t\t\t\t\t\t\t\t\t\t\t\t`${\n\t\t\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.disableCustomCode\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Dictionary.Disabled\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: Dictionary.Enabled\n\t\t\t\t\t\t\t\t\t\t\t\t} custom code`,\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tDisable custom code (might miss a small % of old code)\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<CheckBox\n\t\t\t\t\t\t\t\t\tvalue={engine.stores.debugStore.debuggingOfPublishedSites.stepByStepInit}\n\t\t\t\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.stepByStepInit =\n\t\t\t\t\t\t\t\t\t\t\t\t!engine.stores.debugStore.debuggingOfPublishedSites.stepByStepInit\n\n\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\n\t\t\t\t\t\t\t\t\t\t\t\t`${engine.stores.debugStore.debuggingOfPublishedSites.stepByStepInit ? Dictionary.Enabled : Dictionary.Disabled} step-by-step init`,\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tStep-by-step init (check the site\u2019s console)\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<CheckBox\n\t\t\t\t\t\t\t\t\tvalue={engine.stores.debugStore.debuggingOfPublishedSites.forceRendererLambda}\n\t\t\t\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.forceRendererLambda =\n\t\t\t\t\t\t\t\t\t\t\t\t!engine.stores.debugStore.debuggingOfPublishedSites.forceRendererLambda\n\n\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\n\t\t\t\t\t\t\t\t\t\t\t\t`${engine.stores.debugStore.debuggingOfPublishedSites.forceRendererLambda ? \"Forcing\" : \"Not forcing\"} ssg-sandbox-renderer Lambda`,\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tForce ssg-sandbox-renderer Lambda\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\tPublish with React version{\" \"}\n\t\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.reactVersionOverride\n\t\t\t\t\t\t\t\t\t\t\t? `${engine.stores.debugStore.debuggingOfPublishedSites.reactVersionOverride},${engine.stores.debugStore.debuggingOfPublishedSites.schedulerVersionOverride}`\n\t\t\t\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonChange={e => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst value = e.target.value\n\t\t\t\t\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst [reactVersion, schedulerVersion] = value.split(\",\")\n\t\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.reactVersionOverride = reactVersion\n\t\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.schedulerVersionOverride = schedulerVersion\n\n\t\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\n\t\t\t\t\t\t\t\t\t\t\t\t\t`Switched to React v${reactVersion} (with scheduler v${schedulerVersion})`,\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.reactVersionOverride = undefined\n\t\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.schedulerVersionOverride = undefined\n\n\t\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\"Switched to the default React version\")\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<option value=\"\" selected>\n\t\t\t\t\t\t\t\t\t\tdefault\n\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t{/* The values below list the React version + the scheduler version. */}\n\t\t\t\t\t\t\t\t\t<option value=\"19.2.0,0.27.0\">19.2.0</option>\n\t\t\t\t\t\t\t\t\t<option value=\"19.1.0,0.26.0\">19.1.0</option>\n\t\t\t\t\t\t\t\t\t<option value=\"18.3.0,0.23.0\">18.3.0</option>\n\t\t\t\t\t\t\t\t\t<option value=\"18.2.0,0.23.0\">18.2.0</option>\n\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t<RadioButtonGroup>\n\t\t\t\t\t\t\t\t<RadioButton\n\t\t\t\t\t\t\t\t\tclassName={styles.radioButtonWithNoOverflow}\n\t\t\t\t\t\t\t\t\tidentifier=\"enable-with-react-instrumented\"\n\t\t\t\t\t\t\t\t\tselected={engine.stores.debugStore.debuggingOfPublishedSites.reactBuild === ReactBuild.Instrumented}\n\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.reactBuild = ReactBuild.Instrumented\n\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\"Switched to instrumented React (v19.2.0)\")\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"use instrumented React (v19.2.0)\"\n\t\t\t\t\t\t\t\t\tdescription={\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\tLog all state updates, selectively disable some \u00B7{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\thref=\"https://www.notion.so/framer/Instrumented-React-2a8adf6e8c9680bfbcece218b8bda67d?source=copy_link\"\n\t\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tHow to use\n\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<RadioButton\n\t\t\t\t\t\t\t\t\tclassName={styles.radioButtonWithNoOverflow}\n\t\t\t\t\t\t\t\t\tidentifier=\"enable-with-react-dev\"\n\t\t\t\t\t\t\t\t\tselected={engine.stores.debugStore.debuggingOfPublishedSites.reactBuild === ReactBuild.Development}\n\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.reactBuild = ReactBuild.Development\n\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\"Switched to development React\")\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"use development React\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<RadioButton\n\t\t\t\t\t\t\t\t\tclassName={styles.radioButtonWithNoOverflow}\n\t\t\t\t\t\t\t\t\tidentifier=\"enable-with-react-profiling\"\n\t\t\t\t\t\t\t\t\tselected={\n\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.reactBuild === ReactBuild.ProductionWithProfiling\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.reactBuild = ReactBuild.ProductionWithProfiling\n\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\"Switched to production-profiling React\")\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"use production-profiling React\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<RadioButton\n\t\t\t\t\t\t\t\t\tclassName={styles.radioButtonWithNoOverflow}\n\t\t\t\t\t\t\t\t\tidentifier=\"disable\"\n\t\t\t\t\t\t\t\t\tselected={engine.stores.debugStore.debuggingOfPublishedSites.reactBuild === ReactBuild.Production}\n\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\t\t\t\t\tengine.stores.debugStore.debuggingOfPublishedSites.reactBuild = ReactBuild.Production\n\t\t\t\t\t\t\t\t\t\t\tshowReactPublishToast(\"Switched to production React\")\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"keep production React (default)\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</RadioButtonGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Add Recoverable Errors to Web Pages\",\n\t\t\t\t\tcategories: [ToolCategory.Modules, ToolCategory.Publishing],\n\t\t\t\t\ttool: <RecoverableErrorsTool />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Page Screenshot\",\n\t\t\t\t\tcategories: [ToolCategory.Publishing],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<Button enabled={isActiveScopeScreenshotable} onClick={() => void downloadActiveScopeScreenshotHTML()}>\n\t\t\t\t\t\t\t\tDownload {screenshotTargetTitle} HTML\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tenabled={isActiveScopeScreenshotable && !isScreenshotHTMLInProgress}\n\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tsetIsScreenshotHTMLInProgress(true)\n\t\t\t\t\t\t\t\t\t\tconst run = await requestActiveScopeScreenshot()\n\t\t\t\t\t\t\t\t\t\tsetLastScreenshotHTMLRun(run)\n\t\t\t\t\t\t\t\t\t\tfor (const result of run) {\n\t\t\t\t\t\t\t\t\t\t\topenNewTab(result.screenshotURL)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\t\ttoast({\n\t\t\t\t\t\t\t\t\t\t\ttext: `Failed to request screenshot: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\t\t\t\t\t\ttype: \"add\",\n\t\t\t\t\t\t\t\t\t\t\tvariant: \"error\",\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\t\tsetIsScreenshotHTMLInProgress(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isScreenshotHTMLInProgress ? \"Screenshotting\u2026\" : `Request ${screenshotTargetTitle} Screenshot`}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{lastScreenshotHTMLRun?.[0] && (\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<Link href={lastScreenshotHTMLRun[0].screenshotURL} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t\t\t\t\t\t\tView\n\t\t\t\t\t\t\t\t\t</Link>{\" \"}\n\t\t\t\t\t\t\t\t\tExport: {Math.round(lastScreenshotHTMLRun[0].htmlGenerationMs)}ms; Request:{\" \"}\n\t\t\t\t\t\t\t\t\t{Math.round(lastScreenshotHTMLRun[0].screenshotRequestMs)}ms\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Generate\",\n\t\t\t\t\tcategories: [ToolCategory.Tree, ToolCategory.CanvasPerf],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<Button onClick={handleCreateTextStress}>Create many text elements</Button>\n\t\t\t\t\t\t\t<Button onClick={handleCreateAssetStress}>Create many asset styles</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: Dictionary.Translations,\n\t\t\t\t\tcategories: [ToolCategory.Tree, ToolCategory.Modules],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<TextArea\n\t\t\t\t\t\t\t\tonChange={setCustomAiInstructions}\n\t\t\t\t\t\t\t\tvalue={customAiInstructions}\n\t\t\t\t\t\t\t\tplaceholder=\"Include emojis in translations where possible\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<LocaleSelector onChange={setSelectedLocaleToTranslate} value={selectedLocaleToTranslate} />\n\t\t\t\t\t\t\t<Button enabled={!isBatchTranslateInProgress} onClick={handleGenerateTranslationCollection}>\n\t\t\t\t\t\t\t\tCreate & Batch Translate Collection\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Collection Tools\",\n\t\t\t\t\tcategories: [ToolCategory.Tree, ToolCategory.Modules],\n\t\t\t\t\ttool: <CollectionTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Simulated DOM\",\n\t\t\t\t\tcategories: [ToolCategory.SitesPerf],\n\t\t\t\t\ttool: <SimulatedDOMTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Could Collapse\",\n\t\t\t\t\tcategories: [ToolCategory.Rendering],\n\t\t\t\t\ttool: <CouldCollapseTool />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Shader fallback image\",\n\t\t\t\t\tcategories: [ToolCategory.Rendering],\n\t\t\t\t\ttool: <ShaderFallbackImageTools />,\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Local Cache\",\n\t\t\t\t\tcategories: [ToolCategory.Tree],\n\t\t\t\t\ttool: <CacheTools />,\n\t\t\t\t},\n\t\t\t\t// Add more panels here\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Performance analysis tools\",\n\t\t\t\t\tcategories: [ToolCategory.CanvasPerf],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<Button onClick={showLargestScopes}>Largest scopes\u2026</Button>\n\t\t\t\t\t\t\t<Button onClick={selectInvisibleNodes}>Select nodes invisible in all variants</Button>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\tTo delete invisible nodes in the current scope, use the button above and press Delete. To delete them\n\t\t\t\t\t\t\t\tacross all scopes, see Employees-only menu \u2192 Unused Invisible Nodes.\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Vekter Performance Heavy Features\",\n\t\t\t\t\tcategories: [ToolCategory.CanvasPerf, ToolCategory.Rendering, ToolCategory.Sandbox],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<ShowCheckBox name=\"Hide Titles\" prop=\"hideTitles\" />\n\t\t\t\t\t\t\t<ShowCheckBox name=\"Hide Arrows\" prop=\"hideArrows\" />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Hide Sandbox Rendering Features\",\n\t\t\t\t\tcategories: [ToolCategory.CanvasPerf, ToolCategory.Rendering, ToolCategory.Sandbox],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t<div style={{ display: \"grid\", gap: 6, gridTemplateColumns: \"1fr 1fr\" }}>\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name={Dictionary.Canvas} prop=\"hideCanvas\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name={Dictionary.Shadows} prop=\"hideShadows\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"Gradients\" prop=\"hideGradients\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"Backgrounds\" prop=\"hideBackgrounds\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"Filters\" prop=\"hideFilters\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"Layers\" prop=\"hideLayers\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div style={{ display: \"grid\", gap: 6, gridTemplateColumns: \"1fr 1fr\" }}>\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"Texts\" prop=\"hideTexts\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"Images\" prop=\"hideImages\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"SVGs\" prop=\"hideSVGs\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"Graphics\" prop=\"hideGraphics\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"Code&nbsp;Assets\" prop=\"hideCodeComponents\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"External&nbsp;Assets\" prop=\"hideExternalComponents\" />\n\t\t\t\t\t\t\t\t<ShowSandboxFeature name=\"Local&nbsp;Assets\" prop=\"hideLocalComponents\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Skip Runtime Tests for Benchmarking\",\n\t\t\t\t\tcategories: [ToolCategory.CanvasPerf],\n\t\t\t\t\ttool: (\n\t\t\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<CheckBox\n\t\t\t\t\t\t\t\t\tvalue={environment.benchmarkSkipTreeVerify}\n\t\t\t\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\t\t\t\tengine.scheduler.process(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst benchmarkSkipTreeVerify = !environment.benchmarkSkipTreeVerify\n\t\t\t\t\t\t\t\t\t\t\tenvironment.benchmarkSkipTreeVerify = benchmarkSkipTreeVerify\n\t\t\t\t\t\t\t\t\t\t\tengine.canvasSandbox?.command?.(\"setEnvironment\", {\n\t\t\t\t\t\t\t\t\t\t\t\tbenchmarkSkipTreeVerify,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tskip tree verify\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"AI Credits\",\n\t\t\t\t\tcategories: [ToolCategory.SelfServe],\n\t\t\t\t\ttool: <AiCreditsTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Bandwidth\",\n\t\t\t\t\tcategories: [ToolCategory.SelfServe],\n\t\t\t\t\ttool: <BandwidthTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"CMS Collections\",\n\t\t\t\t\tcategories: [ToolCategory.SelfServe],\n\t\t\t\t\ttool: <CmsCollectionsTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"CMS Items\",\n\t\t\t\t\tcategories: [ToolCategory.SelfServe],\n\t\t\t\t\ttool: <CmsItemsTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Convert\",\n\t\t\t\t\tcategories: [ToolCategory.SelfServe],\n\t\t\t\t\ttool: <ConvertTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Locales\",\n\t\t\t\t\tcategories: [ToolCategory.SelfServe],\n\t\t\t\t\ttool: <LocalesTools />,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Pages\",\n\t\t\t\t\tcategories: [ToolCategory.SelfServe],\n\t\t\t\t\ttool: <PagesTools />,\n\t\t\t\t},\n\t\t\t]}\n\t\t/>\n\t)\n}\n\nfunction getDefaultChangesetName(count: number) {\n\treturn `Changeset ${count + 1}`\n}\n\nfunction ChangesetTools() {\n\tconst debugStore = engine.stores.debugStore\n\tconst changesets = useEngineState(() => debugStore.changesets, [], [debugStore])\n\tconst defaultChangesetName = getDefaultChangesetName(changesets.length)\n\tconst [selectedChangesetId, setSelectedChangesetId] = useState<string | null>(null)\n\tconst [changesetName, setChangesetName] = useState(defaultChangesetName)\n\n\tconst updateChangesets = useCallback(\n\t\t(updater: React.SetStateAction<{ handle: Changeset; nodeId: string }[]>) => {\n\t\t\tconst next = typeof updater === \"function\" ? updater(debugStore.changesets) : updater\n\t\t\tdebugStore.changesets = next\n\t\t},\n\t\t[debugStore],\n\t)\n\n\tconst updateChangesetName = useCallback((nextName: string) => {\n\t\tsetChangesetName(nextName)\n\t}, [])\n\n\tconst selectedChangeset = changesets.find(entry => entry.handle.id === selectedChangesetId)?.handle ?? null\n\n\tconst handleSelectChangeset = useCallback((id: string) => {\n\t\tsetSelectedChangesetId(id)\n\t}, [])\n\n\tconst handleCreateChangeset = useCallback(() => {\n\t\tengine.scheduler.process(() => {\n\t\t\tconst tree = engine.tree\n\t\t\tconst parent = tree.root.children.find(node => isScopeNode(node))\n\t\t\tif (!parent) return\n\n\t\t\tconst index = changesets.length\n\t\t\tconst gap = 140\n\t\t\tconst perRow = 5\n\t\t\tconst left = (index % perRow) * gap\n\t\t\tconst top = Math.floor(index / perRow) * gap\n\t\t\tlet createdNodeId = \"\"\n\n\t\t\tconst changeset = tree.changeset({\n\t\t\t\tname: changesetName || undefined,\n\t\t\t})\n\n\t\t\tvoid engine.scheduler.scheduleAgentChanges(() => {\n\t\t\t\tchangeset.append(() => {\n\t\t\t\t\tconst frame = new FrameNode({\n\t\t\t\t\t\tid: randomID(),\n\t\t\t\t\t\tname: changesetName || \"Changeset frame\",\n\t\t\t\t\t\twidth: 120,\n\t\t\t\t\t\theight: 120,\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\ttop,\n\t\t\t\t\t\tfillColor: \"rgba(255, 0, 0, 0.2)\",\n\t\t\t\t\t})\n\t\t\t\t\ttree.insertNode(frame, parent.id)\n\t\t\t\t\tcreatedNodeId = frame.id\n\n\t\t\t\t\tif (createdNodeId) {\n\t\t\t\t\t\tupdateChangesets(prev => [...prev, { handle: changeset, nodeId: createdNodeId }])\n\t\t\t\t\t\tsetSelectedChangesetId(changeset.id)\n\t\t\t\t\t\tif (changesetName === defaultChangesetName) {\n\t\t\t\t\t\t\tsetChangesetName(getDefaultChangesetName(changesets.length + 1))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t}, [changesetName, changesets.length, defaultChangesetName, updateChangesets])\n\n\tconst handleDiscardChangeset = useCallback(() => {\n\t\tif (!selectedChangeset) return\n\t\tvoid engine.scheduler.scheduleAgentChanges(() => {\n\t\t\tengine.stores.treeStore.timeline.discardChangeset(selectedChangeset)\n\t\t})\n\t\tupdateChangesets(prev => {\n\t\t\tconst next = prev.filter(entry => entry.handle.id !== selectedChangeset.id)\n\t\t\tif (selectedChangesetId === selectedChangeset.id) {\n\t\t\t\tsetSelectedChangesetId(next[0]?.handle.id ?? null)\n\t\t\t}\n\t\t\treturn next\n\t\t})\n\t}, [selectedChangeset, selectedChangesetId, updateChangesets, setSelectedChangesetId])\n\n\tconst handleAppendInsertNode = useCallback(() => {\n\t\tif (!selectedChangeset) return\n\t\tvoid engine.scheduler.scheduleAgentChanges(() => {\n\t\t\tselectedChangeset.append(() => {\n\t\t\t\tconst tree = engine.tree\n\t\t\t\tconst parent = tree.root.children.find(node => isScopeNode(node))\n\t\t\t\tif (!parent) return\n\n\t\t\t\tconst frame = new FrameNode({\n\t\t\t\t\tid: randomID(),\n\t\t\t\t\tname: `Changeset insert ${Math.floor(Math.random() * 1000)}`,\n\t\t\t\t\twidth: 120,\n\t\t\t\t\theight: 120,\n\t\t\t\t\tleft: Math.floor(Math.random() * 500),\n\t\t\t\t\ttop: Math.floor(Math.random() * 400),\n\t\t\t\t\tfillColor: \"rgba(0, 150, 255, 0.2)\",\n\t\t\t\t})\n\t\t\t\ttree.insertNode(frame, parent.id)\n\t\t\t})\n\t\t})\n\t}, [selectedChangeset])\n\n\tconst handleAppendRandomFill = useCallback(() => {\n\t\tif (!selectedChangeset) return\n\t\tvoid engine.scheduler.scheduleAgentChanges(() => {\n\t\t\tselectedChangeset.append(() => {\n\t\t\t\tconst tree = engine.tree\n\t\t\t\tconst candidates = Array.from(tree.root.descendants()).filter(node => \"fillColor\" in node)\n\t\t\t\tif (candidates.length === 0) return\n\t\t\t\tconst target = candidates[Math.floor(Math.random() * candidates.length)]\n\t\t\t\tif (!target) return\n\t\t\t\tconst color = `hsl(${Math.floor(Math.random() * 360)}, 70%, 60%)`\n\t\t\t\ttarget.set({ fillColor: color }, tree)\n\t\t\t})\n\t\t})\n\t}, [selectedChangeset])\n\n\treturn (\n\t\t<Stack gap={10}>\n\t\t\t<Label htmlFor=\"changeset-name-input\">Changeset name</Label>\n\t\t\t<TextInput id=\"changeset-name-input\" small value={changesetName} onChange={updateChangesetName} />\n\t\t\t<PopupButton>\n\t\t\t\t{changesets.length === 0 ? (\n\t\t\t\t\t<PopupButtonItem identifier=\"none\" title=\"No changesets\" onSelect={() => {}} />\n\t\t\t\t) : (\n\t\t\t\t\tchangesets.map(entry => (\n\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\tkey={entry.handle.id}\n\t\t\t\t\t\t\tidentifier={entry.handle.id}\n\t\t\t\t\t\t\ttitle={entry.handle.name ?? entry.handle.id}\n\t\t\t\t\t\t\tselected={entry.handle.id === selectedChangesetId}\n\t\t\t\t\t\t\tonSelect={handleSelectChangeset}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))\n\t\t\t\t)}\n\t\t\t</PopupButton>\n\t\t\t<Button onClick={handleCreateChangeset}>Create Changeset</Button>\n\t\t\t<Button onClick={handleAppendInsertNode} enabled={Boolean(selectedChangeset)}>\n\t\t\t\tInsert node for changeset\n\t\t\t</Button>\n\t\t\t<Button onClick={handleAppendRandomFill} enabled={Boolean(selectedChangeset)}>\n\t\t\t\tRandomize fill color of a random nodein for changeset\n\t\t\t</Button>\n\n\t\t\t<Button onClick={handleDiscardChangeset} enabled={Boolean(selectedChangeset)}>\n\t\t\t\tDiscard Changeset\n\t\t\t</Button>\n\t\t</Stack>\n\t)\n}\n\ninterface DebugBarTool {\n\ttitle: string\n\tcategories: string[]\n\ttool: React.ReactNode\n}\n\nfunction ToolsContainer({ tools }: { tools: DebugBarTool[] }) {\n\tconst [nameFilter, setNameFilter] = useLocalStorageState(\"debugBarToolsNameFilter\", \"\")\n\tconst [categoryFilter, setCategoryFilter] = useLocalStorageState<ToolCategory | \"\">(\"debugBarToolsCategory\", \"\")\n\n\treturn (\n\t\t<div className={styles.tools}>\n\t\t\t<div className={styles.toolsFilter}>\n\t\t\t\t<TextInput\n\t\t\t\t\tsmall\n\t\t\t\t\tconstantChange\n\t\t\t\t\tvalue={nameFilter}\n\t\t\t\t\tonChange={value => {\n\t\t\t\t\t\tsetNameFilter(value)\n\t\t\t\t\t}}\n\t\t\t\t\tplaceholder=\"Filter by Name\"\n\t\t\t\t/>\n\n\t\t\t\t<SegmentedControl unsaturated direction=\"vertical\">\n\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\ttitle={Dictionary.All}\n\t\t\t\t\t\tselected={!categoryFilter}\n\t\t\t\t\t\tonSelect={() => setCategoryFilter(\"\")}\n\t\t\t\t\t/>\n\t\t\t\t\t{Object.values(ToolCategory).map(category => (\n\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\tkey={category}\n\t\t\t\t\t\t\ttitle={category}\n\t\t\t\t\t\t\tselected={category === categoryFilter}\n\t\t\t\t\t\t\tonSelect={() => setCategoryFilter(category)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</SegmentedControl>\n\t\t\t</div>\n\t\t\t<div className={styles.toolColumns}>\n\t\t\t\t{tools\n\t\t\t\t\t.filter(tool => tool.title.toLowerCase().includes(nameFilter.toLowerCase()))\n\t\t\t\t\t.filter(tool => !categoryFilter || tool.categories.includes(categoryFilter))\n\t\t\t\t\t.map(tool => (\n\t\t\t\t\t\t<div className={styles.tool} key={tool.title}>\n\t\t\t\t\t\t\t<div className={styles.toolTitle}>{tool.title}</div>\n\t\t\t\t\t\t\t{tool.tool}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction handleClearHistoryPanelData() {\n\tif (!engine.remoteDocument) return\n\tengine.stores.historyStore.debugReset()\n}\n\nfunction addLocalOnlyFrame() {\n\tengine.scheduler.runBeforeNextFrame(() => {\n\t\tlet tree = engine.tree\n\t\tconst page = tree.root.children.at(0)\n\t\tif (!page) return\n\n\t\t// Manually insert a frame into the tree and collect the diff.\n\t\tconst changes: NodeChange[] = []\n\t\tconst frame = new FrameNode({ id: \"test-corruption-\" + Math.floor(1000 + Math.random() * 9000) })\n\t\ttree.editClosed = false\n\t\ttree.isViewOnly = false\n\t\ttree.insertNode(frame, page.id)\n\t\ttree = tree.commit(engine.componentLoader, (current: CanvasNode | undefined, future: CanvasNode | undefined) => {\n\t\t\tconst change = nodeChange(current, future)\n\t\t\tif (change) {\n\t\t\t\tchanges.push(change)\n\t\t\t}\n\t\t})\n\n\t\t// Override the local tree.\n\t\tengine.tree = tree\n\t\tengine.stores.treeStore.timeline.debugOverwriteCurrentTree(tree)\n\n\t\t// Send the sandbox a diff.\n\t\tconst sandbox = engine.canvasSandbox as SandboxRenderer | undefined\n\t\tsandbox?.sendSandboxUpdate({ changes })\n\n\t\tlog.info(\"Rigged the local tree to be out of sync with server!\")\n\n\t\t// Make the new node selected and zoom in on it.\n\t\tengine.scheduler.process(() => {\n\t\t\tengine.stores.selectionStore.set(frame.id)\n\t\t\tengine.stores.canvasStore.zoomToNode(engine.tree.get(frame.id)!)\n\t\t})\n\n\t\t// Then edit the rigged node after a small delay. This will send something to the server,\n\t\t// but it, and any other client, won't know about the id it references.\n\t\tsetTimeout(() => {\n\t\t\tengine.scheduler.process(() => {\n\t\t\t\tconst latestFrame = engine.tree.get<FrameNode>(frame.id)\n\t\t\t\tlatestFrame?.set({ top: -10, left: -10, width: 120, height: 120, fillColor: \"red\" }, engine.tree)\n\t\t\t})\n\t\t}, 500)\n\t})\n}\n\nfunction repairContentHash() {\n\tengine.scheduler.process(() => {\n\t\tlet updated = 0\n\t\tfor (const node of engine.tree.root.descendants()) {\n\t\t\tif (!isShapeContainerNode(node)) continue\n\n\t\t\tconst contentHash = node.computeContentHash()\n\t\t\tif (node.contentHash !== contentHash) {\n\t\t\t\t// Notice that this will set the contentHash. But also makes the node mutable, and\n\t\t\t\t// it will go through a commit and preFreeze. At which point the node will compute\n\t\t\t\t// the content hash again. It can even turn out slightly different,  especially auto\n\t\t\t\t// sizing graphics, when they recompute their size, they might round it differently\n\t\t\t\t// compared to how we did so in the past.\n\t\t\t\tif (node.originalid) {\n\t\t\t\t\t// If this is a replica node, we also make the master version mutable, so it\n\t\t\t\t\t// will do a preFreeze before the replica, and we don't accidentally create overrides.\n\t\t\t\t\tengine.tree.get(node.originalid)?.asDraft()\n\t\t\t\t}\n\t\t\t\tnode.set({ contentHash })\n\t\t\t\tupdated += 1\n\t\t\t}\n\t\t}\n\n\t\tif (updated === 0) {\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"info\",\n\t\t\t\ttext: \"No outdated content hashes found.\",\n\t\t\t\tkey: \"tree-contenthash-repair\",\n\t\t\t\tduration: 10000,\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t\ttext: `Repaired ${updated} graphics content ${updated === 1 ? \"hash\" : \"hashes\"}.`,\n\t\t\tkey: \"tree-contenthash-repair\",\n\t\t\tduration: 10000,\n\t\t})\n\t})\n}\n\nfunction repairMissingVariantCrash() {\n\tengine.scheduler.process(() => {\n\t\tlet repaired = 0\n\t\tconst smartComponentNodes = engine.stores.scopeStore.getSmartComponentNodes()\n\n\t\tfor (const smartComponentNode of smartComponentNodes) {\n\t\t\t// TODO Check and handle shallow/fully loaded scope state\n\t\t\tif (!smartComponentNode.isLoaded()) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst replicaVariants = smartComponentNode.getReplicaVariants()\n\t\t\tconst gestures = replicaVariants.filter(isGestureVariant)\n\t\t\tconst gesturesWithoutTopVariant = gestures.filter(\n\t\t\t\tgesture => gesture.replicaInfo.inheritsFrom && !engine.tree.getNode(gesture.replicaInfo.inheritsFrom),\n\t\t\t)\n\n\t\t\tfor (const [index, brokenGesture] of gesturesWithoutTopVariant.entries()) {\n\t\t\t\t// remove the gesture override on the master, remove its broken inheritsFrom, turned it into a normal\n\t\t\t\t// variant with an easy to find name\n\t\t\t\tconst { master, inheritsFrom, overrides } = brokenGesture.replicaInfo\n\t\t\t\tconst masterVariant = engine.tree.getNode(master) as CanvasNode & IsMaster\n\t\t\t\tif (!masterVariant) continue\n\t\t\t\tconst { gesture: _, ...masterOverrides } = overrides[master] ?? {}\n\t\t\t\tconst newOverrides = {\n\t\t\t\t\t...overrides,\n\t\t\t\t\t[master]: { ...masterOverrides, name: \"Repaired Variant \" + index },\n\t\t\t\t}\n\t\t\t\tconst latest = engine.tree.getNode<CanvasNode & IsReplica & IsVariant>(brokenGesture.id)\n\t\t\t\tif (latest) {\n\t\t\t\t\tlatest.set({\n\t\t\t\t\t\tgesture: undefined,\n\t\t\t\t\t\treplicaInfo: { master, overrides: newOverrides },\n\t\t\t\t\t})\n\n\t\t\t\t\t// Relink the master & replca, or the component will only update if changed itself, or after a reload.\n\t\t\t\t\tTemplateHelper.registerInInheritedNode(masterVariant, latest)\n\t\t\t\t\tlatest.cache.rebuildReplica = true\n\n\t\t\t\t\t// biome-ignore lint/suspicious/noConsole: <explanation>\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\"repaired broken gesture\",\n\t\t\t\t\t\tbrokenGesture.id,\n\t\t\t\t\t\t\" in smart component\",\n\t\t\t\t\t\tsmartComponentNode.id,\n\t\t\t\t\t\t\", missing inheritsFrom:\",\n\t\t\t\t\t\tinheritsFrom,\n\t\t\t\t\t)\n\t\t\t\t\trepaired += 1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (repaired === 0) return\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t\ttext: `Repaired ${repaired} broken gesture variants.`,\n\t\t\tkey: \"tree-missing-variant-repair\",\n\t\t\tduration: 10000,\n\t\t\ticon: \"warning\",\n\t\t})\n\t})\n}\n\nfunction handleSelectZeroSizedElement() {\n\tconst zeroSizedNodes: CanvasNode[] = []\n\tfor (const node of engine.stores.scopeStore.active.walk()) {\n\t\tconst canvasRect = node.cache.canvasRect\n\t\tif (canvasRect?.width === 0 || canvasRect?.height === 0) {\n\t\t\t// biome-ignore lint/suspicious/noConsole: <explanation>\n\t\t\tconsole.log(\"node:\", node.id, \"rect:\", canvasRect)\n\t\t\tzeroSizedNodes.push(node)\n\t\t}\n\t}\n\n\t// biome-ignore lint/suspicious/noConsole: <explanation>\n\tconsole.log(\"found:\", zeroSizedNodes.length, \"nodes with zero sized canvas rect.\")\n\tengine.stores.selectionStore.set(zeroSizedNodes)\n}\n\nfunction clearCache() {\n\tengine.scheduler.process(() => {\n\t\tengine.debugClearCache()\n\t\tengine.stores.canvasStore.scroll(1, 0)\n\t})\n}\n\nasync function* recompileComponents() {\n\tconst allSmartComponents = engine.tree.root.children.filter<SmartComponentNode>(isSmartComponentNode)\n\tfor (const [index, smartComponent] of allSmartComponents.entries()) {\n\t\tyield { current: index, total: allSmartComponents.length }\n\t\tawait engine.stores.codeGenerationStore.forceComponentUpdate(smartComponent.id)\n\t}\n}\n\nasync function* recompileWebpages() {\n\tconst allWebPages = engine.tree.root.children.filter<WebPageNode>(isWebPageNode)\n\tfor (const [index, webPage] of allWebPages.entries()) {\n\t\tyield { current: index, total: allWebPages.length }\n\t\tawait engine.stores.codeGenerationStore.forceComponentUpdate(webPage.id)\n\t}\n}\n\nasync function* recompileVectorSets() {\n\tconst allVectorSetItems = engine.tree.root.children\n\t\t.filter<VectorSetNode>(isVectorSetNode)\n\t\t.flatMap(vectorSet => [...vectorSet.getVectorSetItems(), vectorSet])\n\tfor (const [index, vectorSet] of allVectorSetItems.entries()) {\n\t\tyield { current: index, total: allVectorSetItems.length }\n\t\tawait engine.stores.codeGenerationStore.forceComponentUpdate(vectorSet.id)\n\t}\n}\n\nasync function* recompileCollections() {\n\t// FIXME If CMS Node will ever become shallow this code needs to be checked/updated\n\tconst contentManagementNode = getContentManagementNode(engine.tree)?.loaded\n\tif (!contentManagementNode) return\n\n\tlet index = 0\n\tfor (const collectionNode of contentManagementNode.children) {\n\t\tyield { current: index++, total: contentManagementNode.children.length }\n\t\tawait engine.stores.codeGenerationStore.forceComponentUpdate(collectionNode.id)\n\t}\n}\n\nasync function* recompileStylePresets() {\n\tconst allStylePresets = PresetsListNode.getNodes(engine.tree)\n\tfor (const [index, stylePreset] of allStylePresets.entries()) {\n\t\tyield { current: index, total: allStylePresets.length }\n\t\tawait engine.stores.codeGenerationStore.forceComponentUpdate(stylePreset.id)\n\t}\n}\n\nasync function handleReloadDocument() {\n\tconst remoteDocument = engine.remoteDocument\n\tif (!remoteDocument) return\n\n\tconst { documentSettingsStore, loadingStore } = engine.stores\n\n\tlog.info(\"Closing remote socket and loading an empty document.\")\n\tconst nodeId = documentSettingsStore.activeNode?.id\n\tremoteDocument.socket?.disconnect()\n\tengine.scheduler.processWhenReady(() => {\n\t\t// Capture and restore loadingStore.documentLoaded, because the remote document call will\n\t\t// call engine.load which will flip documentLoading otherwise.\n\t\tconst documentLoaded = loadingStore.documentLoaded\n\t\tremoteDocument.debugCreateNewTreeSyncSession(CanvasTree.createWithDefaultPage())\n\t\tloadingStore.documentLoaded = documentLoaded\n\t})\n\n\t// Wait a bit to let the above run, and to let the socket close properly.\n\tawait delay(100)\n\n\tlog.info(\"Opening remote socket again. Should always download latest document from server.\")\n\n\t// Pretend this is an initial load and set the activeNode, otherwise the\n\t// wrong page/node is focused.\n\tremoteDocument.initialLoad = true\n\tremoteDocument.suppressLoadingForDebugging = false\n\tdocumentSettingsStore.activeNode = nodeId ? { id: nodeId } : null\n\tremoteDocument.socket?.connect()\n}\n\nfunction handleForceServerSnapshot() {\n\tvoid engine.remoteDocument?.forceServerSnapshot()\n}\n\nfunction handleForceServerSnapshotWithCompaction() {\n\tvoid engine.remoteDocument?.forceServerSnapshot({ forceCompact: true })\n}\n\nasync function handleVerifyDocument() {\n\tconst remoteDocument = engine.remoteDocument\n\tif (!remoteDocument) return\n\n\ttry {\n\t\tif (!engine.stores.treeStore.getDataTree()) {\n\t\t\tawait engine.runWithFullyLoadedTreeAsync(() => {}, { name: \"verifyServerDocument\" })\n\t\t}\n\n\t\tconst result = await remoteDocument.verifyTreeWithServer()\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"success\",\n\t\t\ttext: `Document verified ok. (Shapshot verified is ${result === 0 ? \"latest\" : result + \" edits behind\"}.)`,\n\t\t\tkey: \"tree-verify\",\n\t\t\tduration: 10000,\n\t\t\ticon: \"success\",\n\t\t})\n\t} catch (errorValue) {\n\t\tconst error = reportableError(errorValue)\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tengine.scheduler.errorInEventHandler(error)\n\t\t})\n\t}\n}\n\nfunction handleDisconnect() {\n\tengine.remoteDocument?.socket?.disconnect()\n}\n\nfunction handleConnect() {\n\tengine.remoteDocument?.socket?.connect()\n}\n\nfunction handleReconnect() {\n\tengine.remoteDocument?.socket?.disconnect()\n\tsetTimeout(() => {\n\t\tengine.remoteDocument?.socket?.connect()\n\t})\n}\n\nasync function getActiveWebPageScreenshotHTMLWithOptions(): Promise<ActiveScopeScreenshotHTMLResult[] | undefined> {\n\tconst activeScope = engine.stores.scopeStore.active\n\n\tif (!activeScope || !isWebPageNode(activeScope)) {\n\t\treturn undefined\n\t}\n\n\tconst htmlGenerationStart = performance.now()\n\tconst html = await generateHTMLForCapture({ engine, scopeNode: activeScope, breakpointNode: activeScope })\n\n\tconst theme = getAgentScreenshotTheme()\n\n\treturn [\n\t\t{\n\t\t\tid: activeScope.id,\n\t\t\thtml,\n\t\t\thtmlGenerationMs: performance.now() - htmlGenerationStart,\n\t\t\ttheme,\n\t\t\tname: getGeneratedValue(activeScope.name) || Dictionary.WebPage,\n\t\t},\n\t]\n}\n\ninterface ActiveScopeScreenshotHTMLResult {\n\tid: NodeID\n\tname: string\n\thtml: string\n\thtmlGenerationMs: number\n\ttheme: AgentScreenshotTheme\n}\nasync function getActiveScopeScreenshotHTML() {\n\tconst active = engine.stores.scopeStore.active\n\n\tif (isWebPageNode(active)) {\n\t\treturn getActiveWebPageScreenshotHTMLWithOptions()\n\t}\n\n\tif (isSmartComponentNode(active)) {\n\t\treturn getActiveSmartComponentScreenshotHTML(active)\n\t}\n\n\tif (isLayoutTemplateNode(active)) {\n\t\treturn getActiveLayoutTemplateScreenshotHTML(active)\n\t}\n\n\treturn undefined\n}\n\nasync function downloadActiveScopeScreenshotHTML() {\n\tconst results = await getActiveScopeScreenshotHTML()\n\tif (!results) {\n\t\ttoast({\n\t\t\ttext: \"Open a page, layout template or smart component to export its screenshot HTML.\",\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t})\n\t\treturn\n\t}\n\n\tfor (const result of results) {\n\t\tdownloadContent(result.html, `${result.name}-${result.id}.html`, { type: \"text/html;charset=utf-8\" })\n\t}\n}\n\nasync function getActiveSmartComponentScreenshotHTML(scopeNode: SmartComponentNode) {\n\tconst loaded = scopeNode.loaded\n\tif (!loaded) {\n\t\ttoast({\n\t\t\ttext: \"Smart component is not loaded yet.\",\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t})\n\t\treturn\n\t}\n\tconst theme = getAgentScreenshotTheme()\n\tconst variants = loaded.getTopLevelVariants()\n\tconst results: ActiveScopeScreenshotHTMLResult[] = []\n\tfor (const variant of variants) {\n\t\tconst htmlGenerationStart = performance.now()\n\t\tconst html = await generateSmartComponentVariantHTMLForScreenshot({\n\t\t\tengine,\n\t\t\tscopeNode: loaded,\n\t\t\tvariantNodeId: variant.id,\n\t\t})\n\t\tresults.push({\n\t\t\thtml,\n\t\t\tid: variant.id,\n\t\t\tname: getGeneratedValue(scopeNode.name) || Dictionary.Component,\n\t\t\thtmlGenerationMs: performance.now() - htmlGenerationStart,\n\t\t\ttheme,\n\t\t})\n\t}\n\treturn results\n}\n\nasync function getActiveLayoutTemplateScreenshotHTML(scopeNode: LayoutTemplateNode) {\n\tconst loaded = scopeNode.loaded\n\tif (!loaded) {\n\t\ttoast({\n\t\t\ttext: \"Layout template is not loaded yet.\",\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t})\n\t\treturn\n\t}\n\tconst theme = getAgentScreenshotTheme()\n\tconst variants = loaded.getTopLevelVariants()\n\tconst results: ActiveScopeScreenshotHTMLResult[] = []\n\tfor (const variant of variants) {\n\t\tconst htmlGenerationStart = performance.now()\n\t\tconst html = await generateLayoutTemplateHTMLForScreenshot({\n\t\t\tengine,\n\t\t\tscopeNode: loaded,\n\t\t})\n\t\tresults.push({\n\t\t\thtml,\n\t\t\tid: variant.id,\n\t\t\tname: getGeneratedValue(scopeNode.name) || Dictionary.Template,\n\t\t\thtmlGenerationMs: performance.now() - htmlGenerationStart,\n\t\t\ttheme,\n\t\t})\n\t}\n\treturn results\n}\n\nasync function requestActiveScopeScreenshot(): Promise<ScreenshotHTMLDebugRun[]> {\n\tconst htmlResults = await getActiveScopeScreenshotHTML()\n\tassert(htmlResults, \"Active scope HTML is unavailable\")\n\n\tconst screenshotResults: ScreenshotHTMLDebugRun[] = []\n\tfor (const result of htmlResults) {\n\t\tconst screenshotRequestStart = performance.now()\n\t\tconst response = await requestAgentScreenshot({\n\t\t\thtmlBase64: await encodeHTMLForScreenshotting(result.html),\n\t\t\tselectors: [\"body\"],\n\t\t\ttheme: result.theme,\n\t\t\tviewport: getViewportForScreenshotTargetNode(result.id),\n\t\t})\n\t\tconst screenshotRequestMs = performance.now() - screenshotRequestStart\n\t\tconst selectorResult = response.results.body\n\t\tassert(selectorResult, \"Screenshot result not found\")\n\t\tif (!isSuccessResult(selectorResult)) {\n\t\t\tthrow new Error(selectorResult.error.message)\n\t\t}\n\t\tscreenshotResults.push({\n\t\t\thtmlGenerationMs: result.htmlGenerationMs,\n\t\t\tscreenshotRequestMs,\n\t\t\tscreenshotURL: selectorResult.url,\n\t\t})\n\t}\n\treturn screenshotResults\n}\n\nfunction getViewportForScreenshotTargetNode(nodeID: NodeID): Size | undefined {\n\tconst node = engine.tree.get(nodeID)\n\tif (!node) return undefined\n\tif (isWebPageNode(node)) {\n\t\tassert(node.isLoaded(), \"Web page node must be loaded to get viewport\")\n\t\treturn getWebPageScreenshotViewport(node)\n\t}\n\n\tconst scopeNode = engine.stores.scopeStore.active\n\treturn getScreenshotViewportForCanvasNode(scopeNode, node)\n}\n\nfunction getAgentScreenshotTheme(): AgentScreenshotTheme {\n\treturn engine.stores.documentSettingsStore.hasDarkAppearance ? \"dark\" : \"light\"\n}\n\nfunction getWebPageScreenshotViewport(webPage: WebPageNode) {\n\tconst selectedGroundNode = engine.stores.selectionStore.commonGroundNode\n\tconst activeNodeId = engine.stores.documentSettingsStore.activeNode?.id\n\tconst activeNode = activeNodeId ? engine.stores.treeStore.tree.get(activeNodeId) : undefined\n\tconst activeGroundNode = activeNode ? engine.stores.treeStore.tree.getGroundNodeFor(activeNode) : undefined\n\n\tconst breakpoint =\n\t\t(selectedGroundNode?.parentid === webPage.id && isBreakpointVariant(selectedGroundNode) && selectedGroundNode) ||\n\t\t(activeGroundNode?.parentid === webPage.id && isBreakpointVariant(activeGroundNode) && activeGroundNode) ||\n\t\twebPage.getPrimaryVariant()\n\n\treturn getScreenshotViewportForCanvasNode(webPage, breakpoint)\n}\n\nfunction handleCreateTextStress() {\n\tengine.scheduler.processWhenReady(() => {\n\t\tconst rnd = randomID().slice(0, 4)\n\t\tfor (let i = 0; i < 500; i++) {\n\t\t\tconst text = new TextNode({ top: i * 20, widthType: 2, heightType: 2 })\n\t\t\ttext.styledText = text.styledText.withUpdatedText(`${rnd} ${i} - Hello! \u6C49\u8BED \u6F22\u8A9E \u4E2D\u6587 H\u00E0ny\u01D4`)\n\t\t\tengine.stores.scopeStore.insertNode(text)\n\t\t}\n\t})\n}\n\nfunction handleCreateAssetStress() {\n\tengine.scheduler.processWhenReady(() => {\n\t\tconst rnd = randomID().slice(0, 4)\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst randomTag = richTextTags[Math.floor(Math.random() * richTextTags.length)] ?? \"h1\"\n\t\t\tcreateTextStylePreset(engine, randomTag, {\n\t\t\t\tname: `Text ${rnd}`,\n\t\t\t})\n\t\t\tcreateLinkStylePreset(engine, {\n\t\t\t\tname: `Link ${rnd}`,\n\t\t\t})\n\t\t\tcreateInlineCodeStylePreset(engine, {\n\t\t\t\tname: `Code ${rnd}`,\n\t\t\t})\n\t\t}\n\t})\n}\n\nfunction showReactPublishToast(message: string) {\n\ttoast({\n\t\ttype: \"add\",\n\t\tvariant: \"success\",\n\t\tkey: \"debug-publish\",\n\t\ttext: `${message}. Publish the site to see the effect.`,\n\t\ticon: \"success\",\n\t\tduration: 5000,\n\t\taction: {\n\t\t\ttitle: Dictionary.Publish,\n\t\t\tonClick: () => {\n\t\t\t\tvoid engine.stores.publishStore.publish()\n\t\t\t},\n\t\t},\n\t})\n}\n\ntype DebugStoreBooleans = Pick<DebugStore, \"hideTitles\" | \"hideArrows\">\n\nfunction SandboxDebugEnabledCheckBox() {\n\tconst [debugEnabled, setDebugEnabled] = useState(() => {\n\t\treturn CanvasSandboxController.getShared()?.debugEnabled ?? false\n\t})\n\n\treturn (\n\t\t<label>\n\t\t\t<CheckBox\n\t\t\t\tvalue={debugEnabled}\n\t\t\t\tonChange={checked => {\n\t\t\t\t\tconst controller = CanvasSandboxController.getShared()\n\t\t\t\t\tif (controller) {\n\t\t\t\t\t\tcontroller.debugEnabled = checked\n\t\t\t\t\t}\n\t\t\t\t\tsetDebugEnabled(checked)\n\t\t\t\t}}\n\t\t\t/>\n\t\t\tIgnore errors and timeouts.\n\t\t</label>\n\t)\n}\n\nfunction ShowCheckBox({ name, prop }: { name: string; prop: keyof DebugStoreBooleans }) {\n\treturn (\n\t\t<label>\n\t\t\t<CheckBox\n\t\t\t\tvalue={engine.stores.debugStore[prop]}\n\t\t\t\tonChange={() => (engine.stores.debugStore[prop] = !engine.stores.debugStore[prop])}\n\t\t\t/>\n\t\t\t{name}\n\t\t</label>\n\t)\n}\n\nfunction ShowSandboxFeature({ name, prop }: { name: string; prop: keyof DebugRenderingFeatures }) {\n\treturn (\n\t\t<label>\n\t\t\t<CheckBox\n\t\t\t\tvalue={engine.stores.debugStore.renderingFeatures[prop]}\n\t\t\t\tonChange={() => {\n\t\t\t\t\tengine.stores.debugStore.renderingFeatures[prop] = !engine.stores.debugStore.renderingFeatures[prop]\n\t\t\t\t\tengine.canvasSandbox?.command?.(\"renderingFeatures\", engine.stores.debugStore.renderingFeatures)\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{name}\n\t\t</label>\n\t)\n}\n\nfunction numberOfDescendants(node: CanvasNode) {\n\treturn Array.from(node.descendants()).length\n}\n\nasync function showLargestScopes(event: React.MouseEvent) {\n\tconst items: MenuItemOptions[] = []\n\tconst shallowScopes: AnyScopeNode[] = []\n\tfor (const scope of engine.tree.root.children) {\n\t\tif (!isScopeNode(scope)) {\n\t\t\tcontinue\n\t\t}\n\t\tif (!scope.isLoaded()) {\n\t\t\tshallowScopes.push(scope)\n\t\t\tcontinue\n\t\t}\n\t\tconst size = numberOfDescendants(scope) + 1\n\t\titems.push({\n\t\t\tlabel: scope.resolveValue(\"name\") ?? undefined,\n\t\t\tbadge: `${size}`,\n\t\t\tclick: () => {\n\t\t\t\tengine.stores.scopeStore.select(scope.id, { keepHistory: false })\n\t\t\t},\n\t\t})\n\t}\n\t// Convert badge to number to sort is a bit wasteful here, but it's only in the debug panel.\n\titems.sort((a, b) => Number(b.badge) - Number(a.badge))\n\tif (shallowScopes.length > 0) {\n\t\titems.push({ label: `\u2026and ${shallowScopes.length} shallow scope(s)`, enabled: false })\n\t}\n\tengine.stores.contextMenuStore.show(items, { location: { x: event.clientX, y: event.clientY } })\n}\n\nfunction selectInvisibleNodes() {\n\tconst currentScope = engine.stores.scopeStore.active\n\tif (!isWebPageNode(currentScope) && !isSmartComponentNode(currentScope)) return\n\tconst allInvisibleNodes = collectMinimalHiddenAncestorSet(engine.tree, currentScope)\n\tengine.stores.selectionStore.set(\n\t\tArray.from(allInvisibleNodes)\n\t\t\t.map(id => engine.tree.get(id))\n\t\t\t.filter(node => node !== null)\n\t\t\t// Select replicas across all variants to make it easier to spot that a node is invisible in all variants.\n\t\t\t.flatMap(node => {\n\t\t\t\tconst relatedNodes = getRelatedReplicaNodes(engine.tree, node)\n\t\t\t\treturn [node, ...relatedNodes.map(({ relatedNode }) => relatedNode)]\n\t\t\t}),\n\t)\n}\n\nfunction resolveAssetReferenceToURL(assetReference: string): string | undefined {\n\tconst parsed = parseAssetReference(assetReference)\n\tif (!parsed) return undefined\n\treturn createAbsoluteImageAssetURL(parsed.identifier)\n}\n\nfunction SuppressUIMountTool() {\n\tconst isSuppressed = useEmployeesOnlySettingIsOn(\"suppressUIMount\")\n\treturn (\n\t\t// eslint-disable-next-line jsx-a11y/label-has-associated-control\n\t\t<label>\n\t\t\t<CheckBox\n\t\t\t\tvalue={isSuppressed}\n\t\t\t\tonChange={checked => {\n\t\t\t\t\tconst change = { suppressUIMount: checked ? \"on\" : \"off\" }\n\t\t\t\t\temployeesOnlySettings.update(change)\n\t\t\t\t\tupdateFeatureSetStorage(change, \"employeesOnlySettings\", defaultEmployeesOnlySettings)\n\t\t\t\t}}\n\t\t\t/>\n\t\t\tSuppress UI Mount\n\t\t</label>\n\t)\n}\n\nfunction getLocalCache(): LocalCache | undefined {\n\treturn engine.remoteDocument?.localCache\n}\n\nfunction getLocalCacheProjectId(): string | undefined {\n\treturn engine.remoteDocument?.projectId\n}\n\nconst localCacheBackendPriority: BackendType[] = [\"opfs\", \"cache-api\", \"idb\"]\n\nasync function getLocalCacheBackendCandidates(projectId: string): Promise<BackendType[]> {\n\t// Use a throwaway IDB backend just to borrow its `idbStore` handle for\n\t// the meta read. Meta always lives in the shared `crdt-sync-cache`/\n\t// `crdt-data` IDB store, regardless of which data backend actually\n\t// holds the snapshot/rows, and every backend opens that same store.\n\tconst metaBackend = createLocalCacheDataBackend(\"idb\")\n\tconst meta = await readCacheMeta(projectId, metaBackend.idbStore)\n\tconst storedBackend = meta.backend\n\tif (!storedBackend || !isBackendType(storedBackend)) return localCacheBackendPriority\n\n\treturn [storedBackend, ...localCacheBackendPriority.filter(type => type !== storedBackend)]\n}\n\nasync function readLocalCacheBlob(\n\tprojectId: string,\n\tkey: string,\n): Promise<{ blob: Blob; backend: BackendType } | undefined> {\n\tconst backends = await getLocalCacheBackendCandidates(projectId)\n\tfor (const backendType of backends) {\n\t\ttry {\n\t\t\tconst blob = await createLocalCacheDataBackend(backendType).getAsBlob(key)\n\t\t\tif (blob) return { blob, backend: backendType }\n\t\t} catch {\n\t\t\t// Ignore unsupported backend failures while probing.\n\t\t}\n\t}\n\n\treturn undefined\n}\n\nfunction downloadBlob(blob: Blob, filename: string): void {\n\tconst url = URL.createObjectURL(blob)\n\tdownloadURL(url, filename)\n\tURL.revokeObjectURL(url)\n}\n\nfunction reloadWithDebugGlobalLoadingParam(): void {\n\tconst url = new URL(window.location.href)\n\ttry {\n\t\tlocalStorage.setItem(\"debugbar.debugGlobalLoading\", JSON.stringify(true))\n\t} catch {\n\t\t// Ignore storage errors (e.g. QuotaExceededError)\n\t}\n\turl.searchParams.set(debugLoadingQueryParam, \"\")\n\twindow.location.assign(url.toString())\n}\n\nfunction reloadWithClearLocalCache(): void {\n\tconst url = new URL(window.location.href)\n\turl.searchParams.set(debugClearLocalCacheParam, \"\")\n\twindow.location.assign(url.toString())\n}\n\nfunction CacheTools() {\n\tconst [clearRowsVersion, setClearRowsVersion] = useState(\"\")\n\tconst [status, setStatus] = useState(\"\")\n\tconst [backendOverride, setBackendOverrideState] = useState<BackendType | undefined>(getBackendOverride)\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: Re-subscribe when localCache instance is attached/replaced.\n\tconst localCacheDebugGen = useSignalState(() => {\n\t\tconst c = getLocalCache()\n\t\tif (!c) return 0\n\t\tc.getLastCrdtSyncStrategyForDebug()\n\t\treturn c.getDebugGeneration()\n\t}, [engine.remoteDocument?.localCache])\n\n\tReact.useEffect(() => {\n\t\tconst cache = getLocalCache()\n\t\tif (!cache) return\n\t\tvoid cache.readTreeVersion().then(v => setClearRowsVersion(String(v)))\n\t}, [])\n\n\tconst handleClearCache = useCallback(async () => {\n\t\tconst cache = getLocalCache()\n\t\tif (!cache) return\n\t\tawait cache.clearCache()\n\t\tclearBackendOverride()\n\t\tsetBackendOverrideState(undefined)\n\t\tsetStatus(\"Cache + backend override cleared \u2014 reload to re-fetch\")\n\t}, [])\n\n\tconst handleClearRows = useCallback(async () => {\n\t\tconst cache = getLocalCache()\n\t\tif (!cache) return\n\t\tconst version = clearRowsVersion ? Number(clearRowsVersion) : undefined\n\t\tawait cache.clearRows(version)\n\t\tsetStatus(`Rows cleared (version ${version ?? \"current\"}) \u2014 reload to re-sync`)\n\t}, [clearRowsVersion])\n\n\tconst handleFlush = useCallback(async () => {\n\t\tconst cache = getLocalCache()\n\t\tif (!cache) return\n\t\tawait cache.write()\n\t\tsetStatus(\"Flushed pending data to store\")\n\t}, [])\n\n\tconst handleRunMaintenance = useCallback(async () => {\n\t\tconst cache = getLocalCache()\n\t\tif (!cache) return\n\n\t\tlocalStorage.removeItem(`crdt-snapshot-refresh-last-run:${cache.projectId}`)\n\t\tlocalStorage.removeItem(\"crdt-maintenance-last-run\")\n\n\t\tsetStatus(\"Running maintenance\u2026\")\n\t\tconst refreshResult = await cache.runSnapshotRefresh()\n\t\tconst evictionResult = await performLocalCacheMaintenance(cache.isUserIdle)\n\t\tsetStatus(\n\t\t\t`Maintenance done (refresh: ${refreshResult ? \"ok\" : \"skipped \u2014 not idle\"}, eviction: ${evictionResult ? \"ok\" : \"skipped \u2014 not idle\"})`,\n\t\t)\n\t}, [])\n\n\tconst handleVerifyRows = useCallback(async () => {\n\t\tconst cache = getLocalCache()\n\t\tif (!cache) return\n\n\t\tsetStatus(\"Verifying rows against server\u2026\")\n\t\tconst syncURL =\n\t\t\tengine.stores.treeStore.initData?.syncURL ??\n\t\t\tnew URL(`/projects/${cache.projectId}/tree/sync`, window.location.href).href\n\t\tconst result = await cache.debugVerifyRows(syncURL)\n\t\tconst { stats } = result\n\t\tconst lines = [\n\t\t\t`${result.ok ? \"OK\" : \"FAIL\"}: ${result.message}`,\n\t\t\t`strategy=${result.strategy}, requested=${result.requestedVersion}, serverLatest=${result.serverLatestVersion}, binarySearchAttempts=${result.binarySearchAttempts}`,\n\t\t\t`local: ${stats.rowUpdates} updates`,\n\t\t\t`server: ${stats.serverUpdates} updates / ${stats.serverRows} rows`,\n\t\t\t`compared=${stats.comparedBatches}, mismatched=${stats.mismatchedBatches}, missingLocal=${stats.missingLocalBatches}, trailingLocalRows=${stats.trailingLocalRows}`,\n\t\t]\n\t\tsetStatus(lines.join(\"\\n\"))\n\t}, [])\n\n\tconst handleBackendChange = useCallback(async (value: string) => {\n\t\tconst cache = getLocalCache()\n\t\tif (value === \"\") {\n\t\t\tclearBackendOverride()\n\t\t\tsetBackendOverrideState(undefined)\n\t\t\tif (cache) {\n\t\t\t\tawait cache.migrateToBackend(BACKEND_TYPE)\n\t\t\t\tsetStatus(`Migrated data to default backend (${BACKEND_TYPE})`)\n\t\t\t} else {\n\t\t\t\tsetStatus(`Backend reset to default (${BACKEND_TYPE})`)\n\t\t\t}\n\t\t} else if (isBackendType(value)) {\n\t\t\tsetBackendOverride(value)\n\t\t\tsetBackendOverrideState(value)\n\t\t\tif (cache) {\n\t\t\t\tawait cache.migrateToBackend(value)\n\t\t\t\tsetStatus(`Migrated data to ${value} backend`)\n\t\t\t} else {\n\t\t\t\tsetStatus(`Backend set to ${value}`)\n\t\t\t}\n\t\t}\n\t}, [])\n\n\tconst handleDownloadCacheValue = useCallback(async (valueType: \"snapshot\" | \"rows\" | \"version\") => {\n\t\tconst projectId = getLocalCacheProjectId()\n\t\tif (!projectId) {\n\t\t\tsetStatus(\"No remote document/project ID available\")\n\t\t\treturn\n\t\t}\n\n\t\tconst key = `${projectId}:${valueType}`\n\t\tconst found = await readLocalCacheBlob(projectId, key)\n\t\tconst filenamePrefix = `local-cache-${projectId}`\n\n\t\tif (!found) {\n\t\t\tconst fallbackFilename = `${filenamePrefix}-${valueType}.txt`\n\t\t\tdownloadContent(\"\", fallbackFilename, { type: \"text/plain\" })\n\t\t\tsetStatus(`No ${valueType} found in local cache backends; downloaded empty file`)\n\t\t\treturn\n\t\t}\n\n\t\tconst fileExtension = valueType === \"snapshot\" ? \"crdt\" : valueType === \"rows\" ? \"json\" : \"txt\"\n\t\tdownloadBlob(found.blob, `${filenamePrefix}-${valueType}.${fileExtension}`)\n\t\tsetStatus(`Downloaded ${valueType} from ${found.backend} backend`)\n\t}, [])\n\n\tconst cache = getLocalCache()\n\tif (!cache) {\n\t\treturn (\n\t\t\t<Stack direction=\"column\" gap={6}>\n\t\t\t\t<div>No local cache (JSON project?)</div>\n\t\t\t\t<Stack direction=\"row\" gap={6}>\n\t\t\t\t\t<Button onClick={() => void handleDownloadCacheValue(\"snapshot\")}>Download Snapshot</Button>\n\t\t\t\t\t<Button onClick={() => void handleDownloadCacheValue(\"rows\")}>Download Rows</Button>\n\t\t\t\t\t<Button onClick={() => void handleDownloadCacheValue(\"version\")}>Download Version</Button>\n\t\t\t\t</Stack>\n\t\t\t\t<Button onClick={reloadWithDebugGlobalLoadingParam}>Reload with loading perf overlay</Button>\n\t\t\t\t<div style={{ opacity: 0.85 }}>\n\t\t\t\t\tSets <code>?{debugLoadingQueryParam}</code> and reloads the page so the loading timeline is captured from the\n\t\t\t\t\tstart.\n\t\t\t\t</div>\n\t\t\t\t<Button onClick={reloadWithClearLocalCache}>Reload & Nuke All Local Caches</Button>\n\t\t\t\t{status && <div>{status}</div>}\n\t\t\t</Stack>\n\t\t)\n\t}\n\n\tconst lastSyncStrategy: LocalCrdtSyncStrategy | undefined = cache.getLastCrdtSyncStrategyForDebug()\n\n\treturn (\n\t\t<Stack direction=\"column\" data-local-cache-rev={localCacheDebugGen}>\n\t\t\t<Button onClick={reloadWithDebugGlobalLoadingParam}>Reload with loading perf overlay</Button>\n\t\t\t<div style={{ opacity: 0.85 }}>\n\t\t\t\tSets <code>?{debugLoadingQueryParam}</code> and reloads so the loading timeline is captured from the start.\n\t\t\t</div>\n\t\t\t<Button onClick={reloadWithClearLocalCache}>Reload while clearing all local caches</Button>\n\t\t\t<Button onClick={handleClearCache}>Clear this project&apos;s local cache</Button>\n\t\t\t<Stack direction=\"row\" gap={6}>\n\t\t\t\t<Button onClick={() => void handleDownloadCacheValue(\"snapshot\")}>Download Snapshot</Button>\n\t\t\t\t<Button onClick={() => void handleDownloadCacheValue(\"rows\")}>Download Rows</Button>\n\t\t\t\t<Button onClick={() => void handleDownloadCacheValue(\"version\")}>Download Version</Button>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={6}>\n\t\t\t\t<Button onClick={handleClearRows}>Clear Rows</Button>\n\t\t\t\t<Label htmlFor=\"cache-clear-rows-version\">at version</Label>\n\t\t\t\t<TextInput\n\t\t\t\t\tid=\"cache-clear-rows-version\"\n\t\t\t\t\tsmall\n\t\t\t\t\tvalue={clearRowsVersion}\n\t\t\t\t\tonChange={setClearRowsVersion}\n\t\t\t\t\tstyle={{ width: 100 }}\n\t\t\t\t/>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={6}>\n\t\t\t\t<Label htmlFor=\"backend-override\">Backend override</Label>\n\t\t\t\t<PopupButton>\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tidentifier=\"\"\n\t\t\t\t\t\ttitle={`default (${BACKEND_TYPE})`}\n\t\t\t\t\t\tselected={backendOverride === undefined}\n\t\t\t\t\t\tonSelect={handleBackendChange}\n\t\t\t\t\t/>\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tidentifier=\"idb\"\n\t\t\t\t\t\ttitle=\"idb\"\n\t\t\t\t\t\tselected={backendOverride === \"idb\"}\n\t\t\t\t\t\tonSelect={handleBackendChange}\n\t\t\t\t\t/>\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tidentifier=\"cache-api\"\n\t\t\t\t\t\ttitle=\"cache-api\"\n\t\t\t\t\t\tselected={backendOverride === \"cache-api\"}\n\t\t\t\t\t\tonSelect={handleBackendChange}\n\t\t\t\t\t/>\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tidentifier=\"opfs\"\n\t\t\t\t\t\ttitle=\"opfs\"\n\t\t\t\t\t\tselected={backendOverride === \"opfs\"}\n\t\t\t\t\t\tonSelect={handleBackendChange}\n\t\t\t\t\t/>\n\t\t\t\t</PopupButton>\n\t\t\t</Stack>\n\t\t\t<div style={{ opacity: 0.85 }}>Last CRDT cache path: {lastSyncStrategy ?? \"\u2014\"}</div>\n\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={6}>\n\t\t\t\t<Button onClick={handleFlush}>Flush to Store</Button>\n\t\t\t\t{cache.hasPending && (\n\t\t\t\t\t<span style={{ color: \"orange\" }}>\n\t\t\t\t\t\tpending data\n\t\t\t\t\t\t{cache.pendingRowCountForDebug > 0 && ` (${cache.pendingRowCountForDebug} rows)`}\n\t\t\t\t\t\t{cache.pendingSnapshotForDebug && \" + snapshot\"}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t<Button onClick={handleRunMaintenance}>Reset Cooldowns & Run Maintenance</Button>\n\t\t\t<div style={{ opacity: 0.85 }}>\n\t\t\t\tWill reset cache eviction and refresh snapshot timers. Then runs both tasks and reports the results.\n\t\t\t</div>\n\t\t\t<Button onClick={handleVerifyRows}>Verify Rows Against Server</Button>\n\t\t\t<div style={{ opacity: 0.85 }}>\n\t\t\t\tRe-fetches <code>tree/sync</code> from the cached snapshot version and compares server updates to locally-cached\n\t\t\t\tbatches. Binary-searches forward when the server returns a newer snapshot.\n\t\t\t</div>\n\t\t\t{status && <div style={{ whiteSpace: \"pre-wrap\" }}>{status}</div>}\n\t\t</Stack>\n\t)\n}\n\nfunction ShaderFallbackImageTools() {\n\tconst node = engine.stores.selectionStore.nodes.find(isShaderNode)\n\tconst imageHash = node?.shaderFallbackImageHash\n\tconst image = node?.shaderFallbackImage\n\tconst imageURL = image ? resolveAssetReferenceToURL(image) : undefined\n\n\tconst imageInfo = React.useMemo(() => {\n\t\tif (!image) return undefined\n\t\tconst parsed = parseAssetReference(image)\n\t\tif (!parsed) return undefined\n\t\tconst { identifier, intrinsicSize } = parsed\n\t\treturn {\n\t\t\twidth: intrinsicSize?.width,\n\t\t\theight: intrinsicSize?.height,\n\t\t\turl: createAbsoluteImageAssetURL(identifier),\n\t\t}\n\t}, [image])\n\n\tfunction regenerateFallbackImage() {\n\t\tif (!node) return\n\t\tengine.scheduler.process(() => {\n\t\t\tnode.set({ shaderFallbackImageHash: undefined })\n\t\t})\n\t}\n\n\treturn (\n\t\t<Stack direction=\"column\">\n\t\t\t{node ? (\n\t\t\t\t<>\n\t\t\t\t\t{imageHash && <div>Hash: {imageHash}</div>}\n\t\t\t\t\t{imageInfo && (\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\tImage: {imageInfo.width}\u00D7{imageInfo.height}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{imageURL ? (\n\t\t\t\t\t\t<a href={imageURL} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tdecoding=\"async\"\n\t\t\t\t\t\t\t\tsrc={imageURL}\n\t\t\t\t\t\t\t\talt=\"Shader fallback\"\n\t\t\t\t\t\t\t\tstyle={{ maxWidth: 200, maxHeight: 200, border: \"1px solid #333\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\"No fallback image\"\n\t\t\t\t\t)}\n\t\t\t\t\t<Button enabled={!!node} onClick={regenerateFallbackImage}>\n\t\t\t\t\t\tForce Regenerate\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<div>Select a shader node</div>\n\t\t\t)}\n\t\t</Stack>\n\t)\n}\n", "import { MAIN_BRANCH_ID } from \"@framerjs/crdtree2\"\nimport { Button, Stack, TextInput } from \"@framerjs/fresco\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { isCrdtTreeCommitter, type CrdtTreeCommitter } from \"document/crdt/sync/CrdtTreeCommitter.ts\"\nimport engine from \"document/engine.ts\"\nimport type { CanvasTree } from \"document/models/CanvasTree/CanvasTree.ts\"\nimport {\n\tisBranchContributor,\n\ttype BranchContributor,\n\ttype BranchNode,\n} from \"document/models/CanvasTree/nodes/branches/BranchNode.ts\"\nimport { getGeneratedValue } from \"document/models/CanvasTree/traits/Generated.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { assert } from \"library/utils/assert.ts\"\nimport { useState } from \"react\"\nimport { getIsViewOnly } from \"web/pages/project/permissions/isViewOnly.ts\"\n\nfunction branchName(branch: BranchNode): string {\n\treturn getGeneratedValue(branch.name) ?? \"\"\n}\n\ninterface ActiveBranchInfo {\n\tid: string\n\tname: string\n\tcontributors: BranchContributor[]\n}\n\nfunction syncBranchViewOnlyState(tree: CanvasTree): void {\n\tconst branchId = engine.activeBranchId\n\tconst branchNode = tree.get<BranchNode>(branchId)\n\tconst isUserContributor = !branchNode || isBranchContributor(branchNode, engine.stores.sessionStore.user.id)\n\tengine.stores.chromeStore.isViewingBranchFromOtherUser = branchId !== MAIN_BRANCH_ID && !isUserContributor\n\tengine.tree.isViewOnly = getIsViewOnly(engine, \"canSendDiffs\")\n}\n\nfunction updateBranchContributors(updateContributors: (committer: CrdtTreeCommitter) => void): void {\n\tengine.scheduler.processWhenReady(() => {\n\t\tconst committer = engine.stores.treeStore.timeline\n\t\tassert(isCrdtTreeCommitter(committer), \"Branch contributor changes require a CRDT timeline\")\n\t\tupdateContributors(committer)\n\t\tengine.remoteDocument?.afterCommit(committer.tree)\n\t\tengine.scheduler.changes.addChanges(EngineChange.Tree)\n\t\tengine.tree = committer.tree\n\t\tengine.tree.editClosed = true\n\t\tsyncBranchViewOnlyState(committer.tree)\n\t}, \"nonUserEvent\")\n}\n\nfunction addBranchContributor(branchId: string, userId: string): void {\n\tupdateBranchContributors(committer => {\n\t\tcommitter.addBranchContributor(branchId, userId)\n\t})\n}\n\nfunction removeBranchContributor(branchId: string, userId: string): void {\n\tupdateBranchContributors(committer => {\n\t\tcommitter.removeBranchContributor(branchId, userId)\n\t})\n}\n\nexport function BranchesTools() {\n\tconst activeBranch = useEngineState<ActiveBranchInfo | null>(\n\t\t() => {\n\t\t\tconst committer = engine.stores.treeStore.timeline\n\t\t\tif (!isCrdtTreeCommitter(committer)) return null\n\t\t\tconst branchId = committer.branches.activeBranchId\n\t\t\tif (branchId === MAIN_BRANCH_ID) return null\n\t\t\tconst node = engine.tree.get<BranchNode>(branchId)\n\t\t\tif (!node) return null\n\t\t\treturn {\n\t\t\t\tid: branchId,\n\t\t\t\tname: branchName(node),\n\t\t\t\tcontributors: node.contributors ?? [],\n\t\t\t}\n\t\t},\n\t\t[],\n\t\tEngineChange.Tree,\n\t\t{ deepEqual: true },\n\t)\n\n\tconst [createByInput, setCreateByInput] = useState(\"\")\n\tconst [contributorInput, setContributorInput] = useState(\"\")\n\n\tconst handleCreateBranchBy = () => {\n\t\tconst userId = createByInput.trim()\n\t\tif (!userId) return\n\t\tengine.createBranchAndSwitch(undefined, undefined, userId)\n\t\tsetCreateByInput(\"\")\n\t}\n\n\tconst handleAddContributor = () => {\n\t\tconst userId = contributorInput.trim()\n\t\tif (!userId || !activeBranch) return\n\t\taddBranchContributor(activeBranch.id, userId)\n\t\tsetContributorInput(\"\")\n\t}\n\n\tconst handleRemoveContributor = (userId: string) => {\n\t\tif (!activeBranch) return\n\t\tremoveBranchContributor(activeBranch.id, userId)\n\t}\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={8}>\n\t\t\t{/* Create branch as a specific user */}\n\t\t\t<div style={{ fontWeight: 600, fontSize: 11 }}>Create branch as user</div>\n\t\t\t<Stack direction=\"row\" gap={6}>\n\t\t\t\t<TextInput value={createByInput} onChange={setCreateByInput} placeholder=\"userId\" style={{ flex: 1 }} />\n\t\t\t\t<Button onClick={handleCreateBranchBy} enabled={createByInput.trim().length > 0}>\n\t\t\t\t\tCreate\n\t\t\t\t</Button>\n\t\t\t</Stack>\n\n\t\t\t{/* Contributor management for the active branch */}\n\t\t\t<div style={{ fontWeight: 600, fontSize: 11 }}>\n\t\t\t\tContributors{activeBranch ? ` \u2014 ${activeBranch.name || activeBranch.id}` : \" (switch to a branch)\"}\n\t\t\t</div>\n\t\t\t{activeBranch && activeBranch.contributors.length > 0 && (\n\t\t\t\t<Stack direction=\"column\" gap={4}>\n\t\t\t\t\t{activeBranch.contributors.map(contributor => (\n\t\t\t\t\t\t<Stack key={contributor.id} direction=\"row\" alignItems=\"center\" gap={6}>\n\t\t\t\t\t\t\t<span style={{ flex: 1, fontFamily: \"monospace\", fontSize: 11, wordBreak: \"break-all\" }}>\n\t\t\t\t\t\t\t\t{contributor.id}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<Button onClick={() => handleRemoveContributor(contributor.id)}>Remove</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t{activeBranch && activeBranch.contributors.length === 0 && (\n\t\t\t\t<div style={{ opacity: 0.6, fontSize: 11 }}>No contributors.</div>\n\t\t\t)}\n\t\t\t<Stack direction=\"row\" gap={6}>\n\t\t\t\t<TextInput\n\t\t\t\t\tvalue={contributorInput}\n\t\t\t\t\tonChange={setContributorInput}\n\t\t\t\t\tplaceholder=\"userId\"\n\t\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\t\tenabled={!!activeBranch}\n\t\t\t\t/>\n\t\t\t\t<Button onClick={handleAddContributor} enabled={!!activeBranch && contributorInput.trim().length > 0}>\n\t\t\t\t\tAdd\n\t\t\t\t</Button>\n\t\t\t</Stack>\n\t\t</Stack>\n\t)\n}\n", "import e from\"seedrandom\";import{v4 as a}from\"uuid\";let t=e();function i(){return t()}function o(a){t=e(a)}function n(e,a){let t=e;if(Array.isArray(e)){let i=e;a?.maxCharCount&&\"string\"==typeof e[0]&&(i=e.filter((e=>e.length<=a.maxCharCount))),t=()=>r(i)}return void 0===a?.length?t(0):Array.from({length:a.length},((e,a)=>t(a)))}function r(e){return e[Math.floor(i()*e.length)]}function s({min:e=1,max:a=9999.99,fraction:t=0}={}){if(a<e)throw new Error(\"Max must be bigger than min\");return Number((i()*(a-e)+e).toFixed(t))}var l=[\"SCSI\",\"SMTP\",\"ADP\",\"TCP\",\"PNG\",\"EXE\",\"AI\",\"RAM\",\"RSS\",\"GB\",\"SSL\",\"CSS\",\"SAS\",\"SDD\",\"PCI\",\"IB\",\"SQL\",\"XML\",\"THX\",\"AGP\",\"HTTP\",\"SMS\",\"FTP\",\"JBOD\",\"XSS\",\"HDD\",\"JSON\",\"COM\"];function u(e){return n(l,e)}var c=[\"Fashion accessory\",\"Aiguillette\",\"Armband\",\"Autographer\",\"Baby sling\",\"Baseball cap\",\"Beanie\",\"Boutonni\u00E8re\",\"Breast milk jewelry\",\"Breton\",\"Thomas Brigg & Sons\",\"Bum flap\",\"Button\",\"Capulana\",\"Card enclosure\",\"Cartwheel hat\",\"Caul\",\"Chatelaine\",\"Chemisette\",\"Cheopji\",\"Chinese hairpin\",\"Cigarette case\",\"Cigarette holder\",\"Coin purse\",\"Collar pin\",\"Compact\",\"Corsage\",\"Cufflink\",\"Cummerbund\",\"Daenggi\",\"Deep Blue Sea\",\"Doll hat\",\"Draped turban\",\"Dress hook\",\"Dush-toh\",\"Epaulette\",\"Evening glove\",\"Boa\",\"Flower bouquet\",\"Fluffy\",\"Folding clasp\",\"Frisette\",\"Garter\",\"Great Greenland Furhouse\",\"Hair drop\",\"Hair stick\",\"Hairnet\",\"Half hat\",\"Halo hat\",\"Hambiliya\",\"Hand cooler\",\"Hand fan\",\"Handbag\",\"Handkerchief\",\"Hidesign\",\"Inro\",\"Iron-on\",\"It bag\",\"Jeggings\",\"Jewellery\",\"Herbert Johnson\",\"Kittisol\",\"Lampshade hat\",\"Lapel pin\",\"Metal clay\",\"Metal couture\",\"Minaudi\u00E8re\",\"Mobile phone charm\",\"Money clip\",\"Muff\",\"Museum of Bags and Purses\",\"Mushroom hat\",\"Norigae\",\"Nosegay\",\"Obi\",\"Ojime\",\"Papworth Industries\",\"Partlet\",\"Peach basket hat\",\"Picture hat\",\"Pin trading\",\"Pin-back button\",\"Pocket protector\",\"Presidential sash\",\"Purse accessories\",\"Purse hook\",\"Reimiro\",\"Safety reflector\",\"Sash\",\"Scrunchie\",\"Shillelagh\",\"Shubi\",\"Skirt lifter\",\"Snood\",\"Snuff bottle\",\"Solar viewer\",\"Sporran\",\"Sunglasses\",\"Suspenders\",\"Sutton Hoo purse-lid\",\"Tasuki\",\"Tie chain\",\"Tie clip\",\"Tie pin\",\"Toup\u00E9e\",\"Tuanshan\",\"Umbrella\",\"Walking stick\",\"Wallet\",\"Watch strap\",\"Wearable art\",\"Wearable computer\",\"Wearable technology\",\"Wig\",\"Wrist clasp\",\"Zibellino\",\"Apron\",\"Necklace\",\"Watch\",\"Socks\",\"Tie\",\"Bow tie\",\"Purse\",\"Ring\",\"Gloves\",\"Scarf\",\"Boots\",\"Mittens\",\"Stockings\",\"Earmuffs\",\"Hair clip\",\"Bobby pin\",\"Hair band\",\"Safety pin\",\"Pocket watch\",\"Beanie\",\"Cap\",\"Beret\",\"Straw hat\",\"Derby hat\",\"Helmet\",\"Top hat\",\"Mortar board\"];function d(e){return n(c,e)}function h(e){const a=e?.accountLength??9;return n((()=>Array(a).fill(\"#\").join(\"\").replace(/#/g,(()=>s({min:0,max:9}).toString()))),e)}const m=\"0123456789\",p=\"abcdefghijklmnopqrstuvwxyz\",y=\"<>@!#$%^&*()_+[]{}?:;|'\\\"\\\\,./~`-=\",g=`${m}${p}${p.toUpperCase()}`;function f(e=8,a=g){let t=\"\";for(let o=e;o>0;--o)t+=a[Math.floor(i()*a.length)];return t}function b(e){if(!e?.charType||e?.chars)return n((()=>f(e?.size,e?.chars)),e);switch(e.charType){case\"alpha\":return n((()=>f(e?.size,`${p}${p.toUpperCase()}`)),e);case\"alphaNumeric\":return n((()=>f(e?.size,g)),e);case\"numeric\":return n((()=>f(e?.size,m)),e);case\"special\":return n((()=>f(e?.size,y)),e);default:return function(e){throw new Error(`Invalid charType: ${e}`)}(e.charType)}}function w(e){return n(p.split(\"\"),e)}function v(e){return n((()=>r([!0,!1])),e)}function k(e){const a={min:e?.min??0,max:e?.max??999999,precision:e?.precision,fraction:e?.fraction};return n((()=>{if(a.min===a.max)return a.min;const e=s(a);return void 0!==a.precision?Math.floor(e/a.precision)*a.precision:e}),e)}function S(e){return n((()=>v()?w():k({min:0,max:9})),e)}var C=[\"Arizona Cardinals\",\"Atlanta Falcons\",\"Baltimore Ravens\",\"Buffalo Bills\",\"Carolina Panthers\",\"Chicago Bears\",\"Cincinnati Bengals\",\"Cleveland Browns\",\"Dallas Cowboys\",\"Denver Broncos\",\"Detroit Lions\",\"Green Bay Packers\",\"Houston Texans\",\"Indianapolis Colts\",\"Jacksonville Jaguars\",\"Kansas City Chiefs\",\"Las Vegas Raiders\",\"Los Angeles Chargers\",\"Los Angeles Rams\",\"Miami Dolphins\",\"Minnesota Vikings\",\"New England Patriots\",\"New Orleans Saints\",\"New York Giants\",\"New York Jets\",\"Philadelphia Eagles\",\"Pittsburgh Steelers\",\"San Francisco 49ers\",\"Seattle Seahawks\",\"Tampa Bay Buccaneers\",\"Tennessee Titans\"];function A(e){return n(C,e)}function M(e){const a={...e,fraction:e?.fraction??2},t=e?.symbol??\"\";return n((()=>{const e=s(a);return t?`${t}${e}`:e}),e)}var T=[\"bird\",\"cetacean\",\"rabbit\",\"bear\",\"cat\",\"snake\",\"cow\",\"insect\",\"crocodile\",\"horse\",\"fish\",\"dog\",\"lion\"];function B(e){return n(T,e)}var I=[\"Aardvark\",\"Aardwolf\",\"Abyssinian\",\"Abyssinian Guinea Pig\",\"Acadian Flycatcher\",\"Achrioptera Manga\",\"Ackie Monitor\",\"Addax\",\"Adelie Penguin\",\"Aesculapian snake\",\"Affenpinscher\",\"Afghan Hound\",\"African Bullfrog\",\"African Bush Elephant\",\"African Civet\",\"African Clawed Frog\",\"African Fish Eagle\",\"African Forest Elephant\",\"African Golden Cat\",\"African Grey Parrot\",\"African Jacana\",\"African Palm Civet\",\"African Penguin\",\"African Tree Toad\",\"African Wild Dog\",\"Africanized bee\",\"Agama Lizard\",\"Aidi\",\"Ainu\",\"Airedale Terrier\",\"Airedoodle\",\"Akbash\",\"Akita\",\"Akita Shepherd\",\"Alabai\",\"Alaskan Husky\",\"Alaskan Klee Kai\",\"Alaskan Malamute\",\"Alaskan Pollock\",\"Alaskan Shepherd\",\"Albacore Tuna\",\"Albatross\",\"Albertonectes\",\"Albino Corn Snake\",\"Aldabra Giant Tortoise\",\"Alligator Gar\",\"Allosaurus\",\"Alpaca\",\"Alpine Dachsbracke\",\"Alpine Goat\",\"Alusky\",\"Amano Shrimp\",\"Amargasaurus\",\"Amazon Parrot\",\"Amazon River Dolphin\",\"Amazon Tree Boa\",\"Amazonian Royal Flycatcher\",\"Ambrosia Beetle\",\"American Alligator\",\"American Alsatian\",\"American Bulldog\",\"American Bully\",\"American Cocker Spaniel\",\"American Cockroach\",\"American Coonhound\",\"American Dog Tick\",\"American Eel\",\"American Eskimo Dog\",\"American Foxhound\",\"American Hairless Terrier\",\"American Leopard Hound\",\"American Paddlefish\",\"American Pit Bull Terrier\",\"American Pugabull\",\"American Pygmy Goat\",\"American Robin\",\"American Staffordshire Terrier\",\"American Toad\",\"American Water Spaniel\",\"American Wirehair\",\"Amethystine Python\",\"Amphicoelias Fragillimus\",\"Amur Leopard\",\"Anaconda\",\"Anatolian Shepherd Dog\",\"Anchovies\",\"Andrewsarchus\",\"Angelfish\",\"Angelshark\",\"Angled Sunbeam Caterpillar\",\"Anglerfish\",\"Angora Ferret\",\"Angora Goat\",\"Anhinga\",\"Anna\u2019s Hummingbird\",\"Anole Lizard\",\"Anomalocaris\",\"Ant\",\"Antarctic scale worm\",\"Anteater\",\"Antelope\",\"Anteosaurus\",\"Ape\",\"Apennine Wolf\",\"Appenzeller Dog\",\"Apple Head Chihuahua\",\"Apple Moth\",\"Arabian Cobra\",\"Arabian Wolf\",\"Arafura File Snake\",\"Arambourgiania\",\"Arapaima\",\"Archaeoindris\",\"Archaeopteryx\",\"Archaeotherium\",\"Archelon Turtle\",\"Archerfish\",\"Arctic Char\",\"Arctic Fox\",\"Arctic Hare\",\"Arctic Wolf\",\"Arctodus\",\"Arctotherium\",\"Argentavis Magnificens\",\"Argentinosaurus\",\"Arizona Bark Scorpion\",\"Arizona Black Rattlesnake\",\"Arizona Blonde Tarantula\",\"Arizona Coral Snake\",\"Armadillo\",\"Armadillo Lizard\",\"Armenian Gampr\",\"Armored Catfish\",\"Armyworm\",\"Arsinoitherium\",\"Arthropleura\",\"Aruba Rattlesnake\",\"Asian Arowana\",\"Asian Carp\",\"Asian Cockroach\",\"Asian Elephant\",\"Asian Giant Hornet\",\"Asian Lady Beetle\",\"Asian Longhorn Beetle\",\"Asian Palm Civet\",\"Asian Vine Snake\",\"Asian Water Monitor\",\"Asiatic Black Bear\",\"Asp\",\"Assassin Bug\",\"Assassin Snail\",\"Atlantic Salmon\",\"Atlantic Sturgeon\",\"Atlas Beetle\",\"Atlas Moth\",\"Aurochs\",\"Aussiedoodle\",\"Aussiedor\",\"Aussiepom\",\"Australian Bulldog\",\"Australian Cattle Dog\",\"Australian Cockroach\",\"Australian Flathead Perch\",\"Australian Gecko\",\"Australian Kelpie Dog\",\"Australian Labradoodle\",\"Australian Mist\",\"Australian Retriever\",\"Australian Shepherd\",\"Australian Terrier\",\"Australopithecus\",\"Avocet\",\"Axanthic Ball Python\",\"Axolotl\",\"Ayam Cemani\",\"Aye-aye\",\"Azawakh\",\"Babirusa\",\"Baboon\",\"Bactrian Camel\",\"Badger\",\"Baiji\",\"Baird\u2019s Rat Snake\",\"Bald Eagle\",\"Baleen Whale\",\"Balinese\",\"Balkan Lynx\",\"Ball Python\",\"Bamboo Worms\",\"Banana Ball Python\",\"Banana Cinnamon Ball Python\",\"Banana Eel\",\"Banana Spider\",\"Banded Krait\",\"Banded Palm Civet\",\"Banded Water Snake\",\"Bandicoot\",\"Banjo Catfish\",\"Barb\",\"Barbet\",\"Barinasuchus\",\"Bark Beetle\",\"Bark Scorpion\",\"Barn Owl\",\"Barn Swallow\",\"Barnacle\",\"Barosaurus\",\"Barracuda\",\"Barramundi Fish\",\"Barred Owl\",\"Barreleye Fish\",\"Barylambda\",\"Basenji Dog\",\"Basilisk Lizard\",\"Basilosaurus\",\"Basking Shark\",\"Bass\",\"Bassador\",\"Basset Fauve de Bretagne\",\"Basset Hound\",\"Bassetoodle\",\"Bat\",\"Bat-Eared Fox\",\"Batfish\",\"Bavarian Mountain Hound\",\"Baya\",\"Bea-Tzu\",\"Beabull\",\"Beagador\",\"Beagle\",\"Beagle Shepherd\",\"Beaglier\",\"Beago\",\"Bear\",\"Bearded Collie\",\"Bearded Dragon\",\"Bearded Fireworm\",\"Bearded Vulture\",\"Beaski\",\"Beauceron\",\"Beauty rat snake\",\"Beaver\",\"Bed Bugs\",\"Bedlington Terrier\",\"Bee\",\"Bee-Eater\",\"Beefalo\",\"Beetle\",\"Belgian Canary\",\"Belgian Laekenois\",\"Belgian Malinois\",\"Belgian Sheepdog\",\"Belgian Shepherd\",\"Belgian Tervuren\",\"Belted Kingfisher\",\"Beluga Sturgeon\",\"Bengal Tiger\",\"Bergamasco\",\"Berger Blanc Suisse\",\"Berger Picard\",\"Bernedoodle\",\"Bernese Mountain Dog\",\"Bernese Shepherd\",\"Betta Fish\",\"Bhutan Takin\",\"Bichir\",\"Bichon Frise\",\"Bichpoo\",\"Biewer Terrier\",\"Bigfin Reef Squid\u00A0\",\"Bighorn Sheep\",\"Bilby\",\"Binturong\",\"Bird\",\"Bird Of Paradise\",\"Bird Snake\",\"Birman\",\"Biscuit Beetle\",\"Bismarck Ringed Python\",\"Bison\",\"Black And Tan Coonhound\",\"Black and White Warbler\",\"Black Dragon Lizard\",\"Black Mamba\",\"Black Marlin\",\"Black Mouth Cur\",\"Black Pastel Ball Python\",\"Black Rat Snake\",\"Black Rhinoceros\",\"Black Russian Terrier\",\"Black Tarantula\",\"Black Throat Monitor\",\"Black Wasp\",\"Black Widow Spider\",\"Black Witch Moth\",\"Black-Bellied Whistling Duck\",\"Black-Capped Chickadee\",\"Black-Footed Ferret\",\"Black-headed python\",\"Blacknose Shark\",\"Blackpoll Warbler\",\"Blacktip Reef Shark\",\"Bladefin Basslet\",\"Blanket Octopus\",\"Blind Snake\",\"Blister Beetle\",\"Blobfish\",\"Blood Python\",\"Bloodhound\",\"Blue Belly Lizard\",\"Blue Catfish\",\"Blue Death Feigning Beetle\",\"Blue Eyed Pleco\",\"Blue Gray Gnatcatcher\",\"Blue grosbeak\",\"Blue Iguana\",\"Blue Jay\",\"Blue Lacy Dog\",\"Blue Picardy Spaniel\",\"Blue Racer\",\"Blue Shark\",\"Blue Tanager\",\"Blue Tit\",\"Blue Whale\",\"Blue-Ringed Octopus\",\"Bluefin Tuna\",\"Bluegill\",\"Bluetick Coonhound\",\"Boas\",\"Bobcat\",\"Bobolink\",\"Boelen\u2019s python\",\"Boerboel\",\"Boggle\",\"Boglen Terrier\",\"Boiga\",\"Bolivian Anaconda\",\"Bolognese Dog\",\"Bombay\",\"Bongo\",\"Bonito Fish\",\"Bonnethead Shark\",\"Bonobo\",\"Booby\",\"Boomslang\",\"Borador\",\"Border Collie\",\"Border Terrier\",\"Bordoodle\",\"Borkie\",\"Bornean Orang-utan\",\"Borneo Elephant\",\"Boston Terrier\",\"Bottlenose Dolphin\",\"Bouvier Des Flandres\",\"Bowfin\",\"Bowhead Whale\",\"Box Tree Moth\",\"Box Turtle\",\"Boxachi\",\"Boxador\",\"Boxer Dog\",\"Boxerdoodle\",\"Boxfish\",\"Boxsky\",\"Boxweiler\",\"Boykin Spaniel\",\"Bracco Italiano\",\"Brachiosaurus\",\"Brahminy Blindsnake\",\"Braque Francais\",\"Brazilian Black Tarantula\",\"Brazilian Terrier\",\"Brazilian Treehopper\",\"Bredl\u2019s Python\",\"Briard\",\"British Timber\",\"Brittany\",\"Brontosaurus\",\"Bronze Whaler Shark\",\"Bronze-winged Jacana\",\"Brook Trout\",\"Brookesia Micra\",\"Brown Bear\",\"Brown Dog Tick\",\"Brown Headed Cowbird\",\"Brown Hyena\",\"Brown Snake\",\"Brown Tree Snake\",\"Brown Water Snake\",\"Brown-banded Cockroach\",\"Brug\",\"Brussels Griffon\",\"Budgerigar\",\"Buffalo\",\"Buffalo Fish\",\"Bull and Terrier\",\"Bull Shark\",\"Bull Terrier\",\"Bull Trout\",\"Bulldog\",\"Bulldog Mix\",\"Bullfrog\",\"Bullmastiff\",\"Bullsnake\",\"Bumblebee\",\"Burmese\",\"Burmese Python\",\"Burrowing Frog\",\"Burrowing Owl\",\"Bush Baby\",\"Bush Viper\",\"Bushmaster Snake\",\"Butterfly\",\"Butterfly Fish\",\"Cabbage Moth\",\"Cactus Moth\",\"Cactus Mouse\",\"Cactus Wren\",\"Caecilian\",\"Caiman\",\"Caiman Lizard\",\"Cairn Terrier\",\"California Condor\",\"California Kingsnake\",\"California Tarantula\",\"Camel\",\"Camel Cricket\",\"Camel Spider\",\"Canaan Dog\",\"Canada Lynx\",\"Canada Warbler\",\"Canadian Eskimo Dog\",\"Canadian Horse\",\"Cane Corso\",\"Cantil\",\"Cape Lion\",\"Capybara\",\"Caracal\",\"Cardinal\",\"Caribbean Reef Shark\",\"Caribou\",\"Carolina Dog\",\"Carolina Parakeet\",\"Carp\",\"Carpenter Ant\",\"Carpet Python\",\"Carpet Viper\",\"Cascabel\",\"Cashmere Goat\",\"Cassowary\",\"Cat\",\"Cat Snake\",\"Cat-Eyed Snake\",\"Catahoula Bulldog\",\"Catahoula Leopard\",\"Catalan Sheepdog\",\"Caterpillar\",\"Catfish\",\"Caucasian Mountain Dog\",\"Caucasian Shepherd\",\"Cava Tzu\",\"Cavador\",\"Cavalier King Charles Spaniel\",\"Cavapoo\",\"Cave Bear\",\"Cave Lion\",\"Cecropia Moth\",\"Cedar Waxwing\",\"Centipede\",\"Central Ranges Taipan\",\"Cephalaspis\",\"Ceratosaurus\",\"Cervalces latifrons\",\"Cesky Fousek\",\"Cesky Terrier\",\"Chameleon\",\"Chamois\",\"Chartreux\",\"Cheagle\",\"Checkered Garter Snake\",\"Cheetah\",\"Chesapeake Bay Retriever\",\"Chestnut-Sided Warbler\",\"Chi Chi\",\"Chickadee\",\"Chicken\",\"Chicken Snake\",\"Chigger\",\"Chihuahua\",\"Children\u2019s python\",\"Chilean Rose Tarantula\",\"Chimaera\",\"Chimpanzee\",\"Chinchilla\",\"Chinese Alligator\",\"Chinese Cobra\",\"Chinese Crested Dog\",\"Chinese Geese\",\"Chinese Paddlefish\",\"Chinese Shar-Pei\",\"Chinese Water Deer\",\"Chinook\",\"Chinook Salmon\",\"Chinstrap Penguin\",\"Chipit\",\"Chipmunk\",\"Chipoo\",\"Chipping Sparrow\",\"Chiton\",\"Chiweenie\",\"Chorkie\",\"Chow Chow\",\"Chow Pom\",\"Chow Shepherd\",\"Christmas Beetle\",\"Christmas Island Red Crab\",\"Chusky\",\"Cicada\",\"Cichlid\",\"Cinereous Vulture\",\"Cinnamon Ball Python\",\"Cinnamon Bear\",\"Cinnamon Ferret\",\"Clark\u2019s Grebe\",\"Click Beetle\",\"Clock Spider\",\"Clothes Moth\",\"Clouded Leopard\",\"Clownfish\",\"Clumber Spaniel\",\"Coachwhip Snake\",\"Coastal Carpet Python\",\"Coastal Taipan\",\"Coati\",\"Cobia Fish\",\"Cobras\",\"Cockalier\",\"Cockapoo\",\"Cockatiel\",\"Cockatoo\",\"Cocker Spaniel\",\"Cockle\",\"Cockroach\",\"Codfish\",\"Codling Moth\",\"Coelacanth\",\"Collared Peccary\",\"Collett\u2019s Snake\",\"Collie\",\"Colossal Squid\",\"Comb Jellyfish\",\"Comb-crested Jacana\",\"Comet Moth\",\"Comfort Retriever\",\"Common Buzzard\",\"Common Carp\",\"Common European Adder\",\"Common Frog\",\"Common Furniture Beetle\",\"Common Grackle\",\"Common Green Magpie\",\"Common House Spider\",\"Common Loon\",\"Common Raven\",\"Common Toad\",\"Common Yellowthroat\",\"Compsognathus\",\"Cone Snail\",\"Conger Eel\",\"Congo Snake\",\"Conure\",\"Cookiecutter Shark\",\"Cooper\u2019s Hawk\",\"Copperhead\",\"Coral\",\"Coral Snake\",\"Corella\",\"Corgidor\",\"Corgipoo\",\"Corkie\",\"Corman Shepherd\",\"Corn Rex Cat\",\"Corn Snake\",\"Cory Catfish\",\"Coryphodon\",\"Costa\u2019s Hummingbird\",\"Coton de Tulear\",\"Cotton-top Tamarin\",\"Cottonmouth\",\"Cougar\",\"Cow\",\"Coyote\",\"Crab\",\"Crab Spider\",\"Crab-Eating Macaque\",\"Crabeater Seal\",\"Crane\",\"Crappie Fish\",\"Crayfish\",\"Crested Gecko\",\"Crested Penguin\",\"Cricket\",\"Croatian Sheepdog\",\"Crocodile\",\"Crocodile Monitor\",\"Cross Fox\",\"Cross River Gorilla\",\"Crow\",\"Crucian Carp\",\"Cryolophosaurus\",\"Cuban Boa\",\"Cuban Cockroach\",\"Cuckoo\",\"Curly Coated Retriever\",\"Curly Hair Tarantula\",\"Cuscus\",\"Cuttlefish\",\"Czechoslovakian Wolfdog\",\"Dachsador\",\"Dachshund\",\"Daeodon\",\"Dalmadoodle\",\"Dalmador\",\"Dalmatian\",\"Dandie Dinmont Terrier\",\"Daniff\",\"Danios\",\"Danish Swedish Farmdog\",\"Dapple Dachshund\",\"Dark-Eyed Junco\",\"Darkling Beetle\",\"Darwin\u2019s fox\",\"Darwin\u2019s Frog\",\"Daug\",\"De Brazza\u2019s Monkey\",\"De Kay\u2019s Brown Snake\",\"Death Adder\",\"Death\u2019s Head Cockroach\",\"Deathwatch Beetle\",\"Decorator Crab\",\"Deer\",\"Deer Head Chihuahua\",\"Deer Tick\",\"Deinocheirus\",\"Deinosuchus\",\"Desert Ghost Ball Python\",\"Desert Kingsnake\",\"Desert Locust\",\"Desert Rain Frog\",\"Desert Tortoise\",\"Desert Wolf\",\"Desmostylus\",\"Deutsche Bracke\",\"Devil\u2019s Coach Horse Beetle\",\"Devon Rex\",\"Dhole\",\"Diamond python\",\"Diamondback Moth\",\"Dickinsonia\",\"Dik-Dik\",\"Dilophosaurus\",\"Dimetrodon\",\"Dingo\",\"Dinocrocuta\",\"Dinofelis\",\"Dinopithecus\",\"Dinosaur Shrimp\",\"Dinosaurs\",\"Diplodocus\",\"Diprotodon\",\"Dire Wolf\",\"Discus\",\"Doberman Pinscher\",\"Dobsonfly\",\"Dodo\",\"Doedicurus\",\"Dog\",\"Dog Tick\",\"Dogo Argentino\",\"Dogue De Bordeaux\",\"Dolphin\",\"Donkey\",\"Dorgi\",\"Dorkie\",\"Dormouse\",\"Double Doodle\",\"Douc\",\"Downy Woodpecker\",\"Doxiepoo\",\"Doxle\",\"Draco Volans Lizard\",\"Dragon Eel\",\"Dragonfish\",\"Dragonfly\",\"Dreadnoughtus\",\"Drever\",\"Drum Fish\",\"Dubia Cockroach\",\"Duck\",\"Dugong\",\"Dumeril\u2019s Boa\",\"Dung Beetle\",\"Dungeness Crab\",\"Dunker\",\"Dunkleosteus\",\"Dunnock\",\"Dusky Dolphin\",\"Dusky Shark\",\"Dutch Rabbit\",\"Dutch Shepherd\",\"Dwarf Boa\",\"Dwarf Crocodile\",\"Dwarf Hamster\",\"Eagle\",\"Eagle Ray\",\"Eared Grebe\",\"Earless Monitor Lizard\",\"Earthworm\",\"Earwig\",\"East Siberian Laika\",\"Eastern Barred Bandicoot\",\"Eastern Bluebird\",\"Eastern Box Turtle\",\"Eastern Brown Snake\",\"Eastern Chipmunk\",\"Eastern Coral Snake\",\"Eastern Diamondback Rattlesnake\",\"Eastern Dobsonfly\",\"Eastern Fence Lizard\",\"Eastern Glass Lizard\",\"Eastern Gorilla\",\"Eastern Gray Squirrel\",\"Eastern Green Mamba\",\"Eastern Hognose Snake\",\"Eastern Indigo Snake\",\"Eastern Kingbird\",\"Eastern Lowland Gorilla\",\"Eastern Meadowlark\",\"Eastern Phoebe\",\"Eastern Racer\",\"Eastern Rat snake\",\"Eastern Tiger Snake\",\"Eastern Turkey\",\"Eastern Woodrat\",\"Echidna\",\"Eclectus Parrot\",\"Edible Frog\",\"Eel\",\"Eel catfish\",\"Egret\",\"Egyptian Cobra\",\"Egyptian Goose\",\"Egyptian Mau\",\"Egyptian Tortoise\",\"Egyptian Vulture\",\"Eider\",\"Eland\",\"Elasmosaurus\",\"Elasmotherium\",\"Electric Catfish\",\"Electric Eel\",\"Elegant Tern\",\"Elephant\",\"Elephant Beetle\",\"Elephant Bird\",\"Elephant Fish\",\"Elephant Seal\",\"Elephant Shrew\",\"Elf Owl\",\"Elk\",\"Ember Tetra\",\"Embolotherium\",\"Emerald Toucanet\",\"Emerald Tree Boa\",\"Emerald Tree Monitor\",\"Emperor Angelfish\",\"Emperor Goose\",\"Emperor Penguin\",\"Emperor Tamarin\",\"Emu\",\"Enchi Ball Python\",\"English Bulldog\",\"English Cocker Spaniel\",\"English Cream Golden Retriever\",\"English Crested Guinea Pig\",\"English Foxhound\",\"English Longhorn Cattle\",\"English Pointer\",\"English Setter\",\"English Shepherd\",\"English Springer Spaniel\",\"English Toy Terrier\",\"Entlebucher Mountain Dog\",\"Epagneul Pont Audemer\",\"Epicyon haydeni\",\"Epidexipteryx\",\"Equatorial Spitting Cobra\",\"Equus giganteus\",\"Ermine\",\"Eryops\",\"Escolar\",\"Eskimo Dog\",\"Eskipoo\",\"Estrela Mountain Dog\",\"Euoplocephalus\",\"Eurasian Beaver\",\"Eurasian Bullfinch\",\"Eurasian Collared Dove\",\"Eurasian Jay\",\"Eurasian Lynx\",\"Eurasian Nuthatch\",\"Eurasian Sparrowhawk\",\"Eurasian Wolf\",\"Eurasier\",\"European Bee-Eater\",\"European Corn Borer\",\"European Goldfinch\",\"European Polecat\",\"European Robin\",\"European Starling\",\"European Wildcat\",\"Eurypterus\",\"Evening Bat\",\"Evening Grosbeak\",\"Executioner Wasp\u00A0\",\"Eyelash Viper\",\"Fairy-Wren\",\"Falcon\",\"Fallow deer\",\"False Cobra\",\"False coral snake\",\"False Killer Whale\",\"False Water Cobra\",\"False Widow Spider\",\"Fangtooth\",\"Feist\",\"Fennec Fox\",\"Fer-de-lance Snake\",\"Ferret\",\"Ferruginous Hawk\",\"Fiddler Crab\",\"Field Spaniel\",\"Fierce Snake\",\"Figeater Beetle\",\"Fila Brasileiro\",\"Fin Whale\",\"Finnish Lapphund\",\"Finnish Spitz\",\"Fire Ball Python\",\"Fire Eel\",\"Fire salamander\",\"Fire-Bellied Toad\",\"Firefly\",\"Firefly Ball Python\",\"Fish\",\"Fisher Cat\",\"Fishing Cat\",\"Flamingo\",\"Flat-Coated Retriever\",\"Flathead Catfish\",\"Flea\",\"Flea Beetle\",\"Fleckvieh Cattle\",\"Florida Gar\",\"Florida Panther\",\"Florida Woods Cockroach\",\"Flounder\",\"Flounder Fish\",\"Flour Beetle\",\"Flowerhorn Fish\",\"Fluke Fish\",\"Fly\",\"Flycatcher\",\"Flying Fish\",\"Flying Lemur\",\"Flying Snake\",\"Flying Squirrel\",\"Football Fish\",\"Forest Cobra\",\"Formosan Mountain Dog\",\"Fossa\",\"Fox\",\"Fox Snakes\",\"Fox Squirrel\",\"Fox Terrier\",\"Freeway Ball Python\",\"French Bulldog\",\"French Lop\",\"Frenchton\",\"Frengle\",\"Freshwater Crocodile\",\"Freshwater Eel\",\"Freshwater Jellyfish\",\"Freshwater Sunfish\",\"Frigatebird\",\"Frilled Lizard\",\"Frilled Shark\",\"Fritillary Butterfly\",\"Frog\",\"Frogfish\",\"Frug\",\"Fruit Bat\",\"Fruit Fly\",\"Fulvous Whistling Duck\",\"Fur Seal\",\"Gaboon Viper\",\"Galapagos Penguin\",\"Galapagos Shark\",\"Galapagos Tortoise\",\"Gar\",\"Garden Eel\",\"Garden Spider\",\"Gargoyle Gecko\",\"Garter Snake\",\"Gastornis\",\"Gazelle\",\"Gecko\",\"Genet\",\"Gentoo Penguin\",\"Geoffroys Tamarin\",\"Gerberian Shepsky\",\"Gerbil\",\"German Cockroach\",\"German Longhaired Pointer\",\"German Pinscher\",\"German Shepherd Guide\",\"German Sheppit\",\"German Sheprador\",\"German Shorthaired Pointer\",\"German Spitz\",\"German Wirehaired Pointer\",\"Gharial\",\"Ghost Catfish\",\"Ghost Crab\",\"Giant African Land Snail\",\"Giant Armadillo\",\"Giant Beaver\",\"Giant Clam\",\"Giant Desert Centipede\",\"Giant House Spider\",\"Giant Isopod\",\"Giant Leopard Moth\",\"Giant Panda Bear\",\"Giant Salamander\",\"Giant Schnauzer\",\"Giant Schnoodle\",\"Giant Weta\",\"Gibbon\",\"Gigantopithecus\",\"Gila Monster\",\"Giraffe\",\"Glass Frog\",\"Glass Lizard\",\"Glechon\",\"Glen Of Imaal Terrier\",\"Glow Worm\",\"Gnat\",\"Goat\",\"Goberian\",\"Goblin Shark\",\"Goby Fish\",\"Goldador\",\"Goldcrest\",\"Golden Dox\",\"Golden Eagle\",\"Golden Irish\",\"Golden Lancehead\",\"Golden Lion Tamarin\",\"Golden Masked Owl\",\"Golden Newfie\",\"Golden Oriole\",\"Golden Pyrenees\",\"Golden Retriever\",\"Golden Saint\",\"Golden Shepherd\",\"Golden Tortoise Beetle\",\"Golden-Crowned Flying Fox\",\"Golden-Crowned Kinglet\",\"Goldendoodle\",\"Goldfish\",\"Goliath Beetle\",\"Goliath Frog\",\"Goliath Tigerfish\",\"Gollie\",\"Gomphotherium\",\"Goonch Catfish\",\"Goose\",\"Gooty Sapphire Tarantula\",\"Gopher\",\"Gopher Snake\",\"Gopher Tortoise\",\"Gordon Setter\",\"Gorgosaurus\",\"Gorilla\",\"Goshawk\",\"Gouldian Finch\",\"Grapevine Beetle\",\"Grass Carp\",\"Grass Snake\",\"Grass Spider\",\"Grasshopper\",\"Grasshopper Mouse\",\"Gray Catbird\",\"Gray Fox\",\"Gray Tree Frog\",\"Great Blue Heron\",\"Great Crested Flycatcher\",\"Great Dane\",\"Great Danoodle\",\"Great Egret\",\"Great Hammerhead Shark\",\"Great Kiskadee\",\"Great Plains Rat Snake\",\"Great Potoo Bird\",\"Great Pyrenees\",\"Great White Shark\",\"Greater Swiss Mountain Dog\",\"Grebe\",\"Green Anaconda\",\"Green Anole\",\"Green Aphids\",\"Green Bee-Eater\",\"Green Bottle Blue Tarantula\",\"Green Frog\",\"Green Heron\",\"Green Mamba\",\"Green Rat Snake\",\"Green Snake\",\"Green Sunfish\",\"Green Tree Frog\",\"Green Tree Python\",\"Greenland Dog\",\"Greenland Shark\",\"Grey Heron\",\"Grey Mouse Lemur\",\"Grey Reef Shark\",\"Grey Seal\",\"Greyhound\",\"Griffon Vulture\",\"Griffonshire\",\"Grizzly Bear\",\"Groenendael\",\"Ground Snake\",\"Groundhog\",\"Grouper\",\"Grouse\",\"Guinea Fowl\",\"Guinea Pig\",\"Gulper Catfish\u00A0\",\"Gulper Eel\u00A0\",\"Guppy\",\"Gypsy Moth\",\"Haast\u2019s Eagle\",\"Habu Snake\",\"Haddock\",\"Hagfish\",\"Haikouichthys\",\"Hainosaurus\",\"Hairy Frogfish\",\"Hairy Woodpecker\",\"Halibut\",\"Hallucigenia\",\"Hamburg Chicken\",\"Hammerhead Shark\",\"Hamster\",\"Harbor Seal\",\"Hardhead Catfish\",\"Hare\",\"Harlequin Rabbit\",\"Harlequin Snake\",\"Harp Seal\",\"Harpy Eagle\",\"Harrier\",\"Harris Hawk\",\"Hatzegopteryx\",\"Havamalt\",\"Havanese\",\"Havapoo\",\"Havashire\",\"Havashu\",\"Hawaiian Crow\",\"Hawaiian Goose\",\"Hawaiian Monk Seal\",\"Hawk\",\"Hawk Moth Caterpillar\",\"Hedgehog\",\"Helicoprion\",\"Hellbender\",\"Hepatic Tanager\",\"Hercules Beetle\",\"Hercules Moth\",\"Hermit Crab\",\"Heron\",\"Herrerasaurus\",\"Herring\",\"Herring Gull\",\"Highland Cattle\",\"Himalayan\",\"Hippopotamus\",\"Hippopotamus gorgops\",\"Hoary Bat\",\"Hobo Spider\",\"Hognose snake\",\"Hokkaido\",\"Holy Cross Frog\",\"Honduran White Bat\",\"Honey Badger\",\"Honey Bee\",\"Honey Buzzard\",\"Hooded Oriole\",\"Hooded Seal\",\"Hook-Nosed Sea Snake\",\"Hoopoe\",\"Horgi\",\"Horn Shark\",\"Hornbill\",\"Horned Adder\",\"Horned Beetle\",\"Horned Frog\",\"Horned Grebe\",\"Horned Lizard\",\"Horned Viper\",\"Hornet\",\"Horse\",\"Horse Mackerel\",\"Horsefly\",\"Horseshoe Crab\",\"Houdan Chicken\",\"House Finch\",\"House Sparrow\",\"House wren\",\"Housefly\",\"Hovasaurus\",\"Hovawart\",\"Howler Monkey\",\"Human\",\"Humboldt Penguin\",\"Humboldt Squid\",\"Hummingbird\",\"Hummingbird Hawk-Moth\",\"Humpback Whale\",\"Huntaway\",\"Huntsman Spider\",\"Huskador\",\"Huskita\",\"Husky\",\"Husky Jack\",\"Huskydoodle\",\"Hyacinth Macaw\",\"Hyaenodon\",\"Hyena\",\"Ibex\",\"Ibis\",\"Ibizan Hound\",\"Icadyptes\",\"Icelandic Sheepdog\",\"Ichthyosaurus\",\"Ichthyostega\",\"Iguana\",\"Iguanodon\",\"IMG Boa Constrictor\",\"Immortal Jellyfish\",\"Impala\",\"Imperial Moth\",\"Indian Cobra\",\"Indian Elephant\",\"Indian Giant Squirrel\",\"Indian Palm Squirrel\",\"Indian python\",\"Indian Rhinoceros\",\"Indian Star Tortoise\",\"Indianmeal Moth\",\"Indigo Snake\",\"Indochinese Tiger\",\"Indri\",\"Inland Taipan\",\"Insect\",\"Insects\",\"IO Moth\",\"Irish Doodle\",\"Irish Elk\",\"Irish Setter\",\"Irish Terrier\",\"Irish Water Spaniel\",\"Irish WolfHound\",\"Italian Greyhound\",\"Ivory-billed woodpecker\",\"Jabiru\",\"Jacana\",\"Jack Russell\",\"Jack-Chi\",\"Jackabee\",\"Jackal\",\"Jackdaw\",\"Jackrabbit\",\"Jackson\u2019s Chameleon\",\"Jagdterrier\",\"Jaguar\",\"Jaguarundi Cat\",\"Jamaican Boa\",\"Jamaican Iguana\",\"Japanese Bantam Chicken\",\"Japanese Beetle\",\"Japanese Chin\",\"Japanese Macaque\",\"Japanese rat snake\",\"Japanese Spitz\",\"Japanese Squirrel\",\"Japanese Terrier\",\"Javan Leopard\",\"Javan Rhinoceros\",\"Javanese\",\"Jellyfish\",\"Jerboa\",\"Jewel Beetle\u00A0\",\"John Dory\",\"Jonah Crab\",\"Joro Spider\",\"Josephoartigasia monesi\",\"Jumping Spider\",\"Jungle Carpet Python\",\"Junglefowl\",\"Kagu\",\"Kai Ken\",\"Kakapo\",\"Kaluga Sturgeon\",\"Kangal Shepard Dog\",\"Kangaroo\",\"Kangaroo Mouse\",\"Kangaroo Rat\",\"Katydid\",\"Kaua\u2019i \u2018\u014C\u2018\u014D\",\"Kea\",\"Keagle\",\"Keel-Billed Toucan\",\"Keelback\",\"Keeshond\",\"Kelp Greenling\",\"Kentucky Warbler\",\"Kenyan Sand Boa\",\"Kermode Bear\",\"Kerry Blue Terrier\",\"Kestrel\",\"Keta Salmon\",\"Key Deer\",\"Khao Manee\",\"Kiko Goat\",\"Killdeer\",\"Killer Clown Ball Python\",\"Killer Whale\",\"Killifish\",\"Kinabalu Giant Red Leech\",\"Kinder Goat\",\"King Cobra\",\"King Crab\",\"King Eider\",\"King Penguin\",\"King Quail\",\"King Rat Snake\",\"King Salmon\",\"King Shepherd\",\"King Snake\",\"King Vulture\",\"Kingfisher\",\"Kinkajou\",\"Kirtland\u2019s snake\",\"Kishu\",\"Kissing Bugs\",\"Kit Fox\",\"Kitefin Shark\",\"Kiwi\",\"Klipspringer\",\"Knifefish\",\"Knight Anole\",\"Koala\",\"Kodiak Bear\",\"Kodkod\",\"Koi Fish\",\"Kokanee Salmon\",\"Komodo Dragon\",\"Komondor\",\"Kooikerhondje\",\"Kookaburra\",\"Koolie\",\"Korean Jindo\",\"Kori Bustard\",\"Kouprey\",\"Kowari\",\"Krait\",\"Krill\",\"Kudu\",\"Kudzu Bug\",\"Kuvasz\",\"Labahoula\",\"Labmaraner\",\"Labout\u2019s Fairy Wrasse\",\"Labrabull\",\"Labradane\",\"Labradoodle\",\"Labrador Retriever\",\"Labraheeler\",\"Labrottie\",\"Lace Bug\",\"Lace Monitor\",\"Ladybug\",\"Ladyfish\",\"Lagotto Romagnolo\",\"Lake Sturgeon\",\"Lakeland Terrier\",\"LaMancha Goat\",\"Lamprey\",\"Lancashire Heeler\",\"Lancetfish\",\"Landseer Newfoundland\",\"Lappet-faced Vulture\",\"Lapponian Herder\",\"Larder Beetle\",\"Large Munsterlander\",\"Lavender Albino Ball Python\",\"Lawnmower Blenny\",\"Lazarus Lizard\",\"Leaf-Tailed Gecko\",\"Leatherback Sea Turtle\",\"Leech\",\"Leedsichthys\",\"Leichhardt\u2019s Grasshopper\",\"Lemming\",\"Lemon Blast Ball Python\",\"Lemon Shark\",\"Lemur\",\"Leonberger\",\"Leopard\",\"Leopard Cat\",\"Leopard Frog\",\"Leopard Gecko\",\"Leopard Lizard\",\"Leopard Seal\",\"Leopard Shark\",\"Leopard Tortoise\",\"Leptocephalus\",\"Lesser Jacana\",\"Lhasa Apso\",\"Lhasapoo\",\"Liger\",\"Limpet\",\"Lineback Cattle\",\"Linnet\",\"Lion\",\"Lion\u2019s Mane Jellyfish\",\"Lionfish\",\"Liopleurodon\",\"Little Brown Bat\",\"Little Penguin\",\"Livyatan\",\"Lizard\",\"Lizardfish\",\"Llama\",\"Loach\",\"Lobster\",\"Locust\",\"Lone Star Tick\",\"Long-Eared Owl\",\"Long-Haired Rottweiler\",\"Long-Tailed Tit\",\"Longfin Mako Shark\",\"Longnose Gar\",\"Lorikeet\",\"Loris\",\"Lowchen\",\"Lumpfish\",\"Lungfish\",\"Lurcher\",\"Lykoi Cat\",\"Lynx\",\"Lyrebird\",\"Lystrosaurus\",\"Macaque\",\"Macaroni Penguin\",\"Macaw\",\"Machaeroides\",\"Mackenzie Wolf\",\"Macrauchenia\",\"Madagascar Hissing Cockroach\",\"Madagascar Jacana\",\"Madagascar Tree Boa\",\"Madora Moth\",\"Magellanic Penguin\",\"Maggot\",\"Magnolia Warbler\",\"Magpie\",\"Magyarosaurus\",\"Mahi Mahi\",\"Maiasaura\",\"Maine Coon\",\"Mal Shi\",\"Malayan Civet\",\"Malayan Krait\",\"Malayan Tiger\",\"Malchi\",\"Mallard\",\"Malteagle\",\"Maltese\",\"Maltese Shih Tzu\",\"Maltipom\",\"Maltipoo\",\"Mamba\",\"Mamushi Snake\",\"Man of War Jellyfish\",\"Manatee\",\"Manchester Terrier\",\"Mandarin Rat Snake\",\"Mandrill\",\"Maned Wolf\",\"Mangrove Snake\",\"Manta Ray\",\"Mantella Frog\",\"Marabou Stork\",\"Marble Fox\",\"Maremma Sheepdog\",\"Marine Iguana\",\"Marine Toad\",\"Markhor\",\"Marmoset\",\"Marmot\",\"Marsh Frog\",\"Marsican Brown Bear\",\"Masiakasaurus\",\"Masked Angelfish\",\"Masked Palm Civet\",\"Massasauga\",\"Mastador\",\"Mastiff\",\"Mauzer\",\"May Beetle\",\"Mayfly\",\"Meagle\",\"Mealworm Beetle\",\"Mealybug\",\"Meerkat\",\"Megalania\",\"Megalochelys\",\"Megalodon\",\"Megamouth Shark\",\"Meganeura\",\"Megatherium\",\"Meiolania\",\"Mekong Giant Catfish\",\"Merganser\",\"Mexican Alligator Lizard\",\"Mexican Black Kingsnake\",\"Mexican Eagle\",\"Mexican Fireleg Tarantula\",\"Mexican Free-Tailed Bat\",\"Mexican Mole Lizard\",\"Microraptor\",\"Midget Faded Rattlesnake\",\"Miki\",\"Milk Snake\",\"Milkfish\",\"Millipede\",\"Mini Labradoodle\",\"Mini Lop\",\"Miniature Bull Terrier\",\"Miniature Husky\",\"Miniature Pinscher\",\"Mink\",\"Minke Whale\",\"Mississippi Kite\",\"Moccasin Snake\",\"Modern Game Chicken\",\"Mojarra\",\"Mojave Ball Python\",\"Mojave Rattlesnake\",\"Mola mola\",\"Mole\",\"Mole Crab\",\"Mole Cricket\",\"Mole Snake\",\"Molly\",\"Monarch Butterfly\",\"Mongoose\",\"Mongrel\",\"Monitor Lizard\",\"Monkey\",\"Monkfish\",\"Monocled Cobra\",\"Monte Iberia Eleuth\",\"Moon Jellyfish\",\"Moonglow Boa\",\"Moorhen\",\"Moose\",\"Moray Eel\",\"Morkie\",\"Mosasaurus\",\"Moscow Watchdog\",\"Mosquito\",\"Moth\",\"Mountain Bluebird\",\"Mountain Cur\",\"Mountain Feist\",\"Mountain Gorilla\",\"Mountain Lion\",\"Mourning Dove\",\"Mouse\",\"Mozambique Spitting Cobra\",\"Mud Snake\",\"Mudi\",\"Mudpuppy\",\"Mule\",\"Mule Deer\",\"Mulga Snake\",\"Mullet Fish\",\"Muntjac\",\"Muscovy Duck\",\"Musk Deer\",\"Muskox\",\"Muskrat\",\"Mussurana Snake\",\"Muttaburrasaurus\",\"Myna Bird\",\"Nabarlek\",\"Naegleria\",\"Naked Mole Rat\",\"Narwhal\",\"Natterjack\",\"Nautilus\",\"Neanderthal\",\"Neapolitan Mastiff\",\"Nebelung\",\"Needlefish\",\"Nelore Cattle\",\"Neon Tetra\",\"Neptune Grouper\",\"Newfoundland\",\"Newfypoo\",\"Newt\",\"Nguni Cattle\",\"Nicobar pigeon\",\"Nigerian Goat\",\"Night Adder\",\"Night Heron\",\"Night Snake\",\"Nightingale\",\"Nightjar\",\"Nile Crocodile\",\"Nilgai\",\"No See Ums\",\"Norfolk Terrier\",\"Norrbottenspets\",\"North American Black Bear\",\"Northern Alligator Lizard\",\"Northern Cardinal\",\"Northern Flicker\",\"Northern Fur Seal\",\"Northern Harrier\",\"Northern Inuit Dog\",\"Northern Jacana\",\"Northern Parula\",\"Northern Potoo\",\"Northern Screamer\",\"Northern Water Snake\",\"Norway Rat\",\"Norwegian Buhund\",\"Norwegian Elkhound\",\"Norwegian Forest\",\"Norwegian Lundehund\",\"Norwich Terrier\",\"Nose-horned viper\",\"Nova Scotia Duck Tolling Retriever\",\"Nubian Goat\",\"Nudibranch\",\"Numbat\",\"Nuralagus\",\"Nurse Shark\",\"Nut Weevil\",\"Nuthatch\",\"Nutria\",\"Nyala\",\"Oak Toad\",\"Oarfish\",\"Ocean Whitefish\",\"Oceanic Whitetip Shark\",\"Ocellated Turkey\",\"Ocelot\",\"Octopus\",\"Oenpelli python\",\"Okapi\",\"Old English Sheepdog\",\"Old House Borer\",\"Oleander Hawk Moth\",\"Olingo\",\"Olive Baboon\",\"Olive python\",\"Olive Sea Snake\",\"Olm\",\"Onagadori Chicken\",\"Onager\",\"Opabinia\",\"Opah\",\"Opossum\",\"Oranda Goldfish\",\"Orang-utan\",\"Orange Baboon Tarantula\",\"Orange Dream Ball Python\",\"Orange Roughy\u00A0\",\"Orange Tanager\",\"Orange-Crowned Warbler\",\"Orb Weaver\",\"Orchard Oriole\",\"Oregon Spotted Frog\",\"Ori-Pei\",\"Oribi\",\"Oriental Cockroach\",\"Oriental Dwarf Kingfisher\",\"Orinoco Crocodile\",\"Ornate Box Turtle\",\"Ornithocheirus\",\"Ornithomimus\",\"Ortolan Bunting\",\"Oscar Fish\",\"Osprey\",\"Ostracod\",\"Ostrich\",\"Otter\",\"Otterhound\",\"Ovenbird\",\"Oviraptor\",\"Owl\",\"Owl Butterfly\",\"Ox\",\"Oxpecker\",\"Oyster\",\"Oyster Toadfish\",\"Ozark Bass\",\"Pachycephalosaurus\",\"Pacific Sleeper Shark\",\"Paddlefish\",\"Pademelon\",\"Painted Turtle\",\"Palaeoloxodon namadicus\",\"Paleoparadoxia\",\"Palm Rat\",\"Palo Verde Beetle\",\"Panda Pied Ball Python\",\"Pangolin\",\"Panther\",\"Panthera atrox\",\"Papillon\",\"Paradise Flying Snake\",\"Parakeet\",\"Parasaurolophus\",\"Parrot\",\"Parrot Snake\",\"Parrotfish\",\"Parrotlet\",\"Parson Russell Terrier\",\"Parti Schnauzer\",\"Partridge\",\"Patagotitan\",\"Patas Monkey\",\"Patterdale Terrier\",\"Pea Puffer\",\"Peacock\",\"Peacock Butterfly\",\"Peacock Spider\",\"Peagle\",\"Peekapoo\",\"Pekingese\",\"Pelagornis\",\"Pelagornithidae\",\"Pelican\",\"Pelycosaurs\",\"Pembroke Welsh Corgi\",\"Penguin\",\"Pennsylvania Wood Cockroach\",\"Peppered Moth\",\"Peppermint Angelfish\",\"Perch Fish\",\"Pere Davids Deer\",\"Peregrine Falcon\",\"Peringuey\u2019s Adder\",\"Perro De Presa Canario\",\"Persian\",\"Peruvian Guinea Pig\",\"Peruvian Inca Orchid\",\"Pesquet\u2019s Parrot\",\"Petit Basset Griffon Vend\u00E9en\",\"Petite Goldendoodle\",\"Pharaoh Hound\",\"Pheasant\",\"Pheasant-tailed Jacana\",\"Philippine Cobra\",\"Phoenix Chicken\",\"Phorusrhacos\",\"Phytosaurs\",\"Picardy Spaniel\",\"Pictus Catfish\",\"Piebald Dachshund\",\"Pied Ball Python\",\"Pied Tamarin\",\"Pied-Billed Grebe\",\"Pig\",\"Pigeon\",\"Pika\",\"Pike Fish\",\"Pileated Woodpecker\",\"Pinacate Beetle\",\"Pine Beetle\",\"Pine Marten\",\"Pine Siskin\",\"Pine Snake\",\"Pink Fairy Armadillo\",\"Pink Salmon\",\"Pink Toed Tarantula\",\"Pink-Necked Green Pigeon\",\"Pipe Snake\",\"Pipefish\",\"Piranha\",\"Pit Bull\",\"Pit Viper\",\"Pitador\",\"Pitsky\",\"Plains Hognose Snake\",\"Platinum Arowana\",\"Platybelodon\",\"Platypus\",\"Plesiosaur\",\"Pliosaur\",\"Plott Hounds\",\"Pocket Beagle\",\"Pocket Pitbull\",\"Podenco Canario\",\"Pointer\",\"Poison Dart Frog\",\"Polacanthus\",\"Polar Bear\",\"Polecat\",\"Polish Lowland Sheepdog\",\"Polish Tatra Sheepdog\",\"Polka Dot Stingray\",\"Pollock Fish\",\"Polyphemus moth\",\"Pomapoo\",\"Pomchi\",\"Pomeagle\",\"Pomeranian\",\"Pomsky\",\"Pond Skater\",\"Poochon\",\"Poodle\",\"Poogle\",\"Pool Frog\",\"Porbeagle Shark\",\"Porcupine\",\"Porpoise\",\"Portuguese Podengo\",\"Possum\",\"Potoo\",\"Potoroo\",\"Powderpost Beetle\",\"Prairie Chicken\",\"Prairie Dog\",\"Prairie Rattlesnake\",\"Prawn\",\"Praying Mantis\",\"Proboscis Monkey\",\"Procoptodon\",\"Pronghorn\",\"Psittacosaurus\",\"Pteranodon\",\"Pterodactyl\",\"Pudelpointer\",\"Puff Adder\",\"Pufferfish\",\"Puffin\",\"Pug\",\"Pugapoo\",\"Puggle\",\"Pugshire\",\"Puli\",\"Puma\",\"Pumi\",\"Pumpkin Patch Tarantula\",\"Purple Emperor Butterfly\",\"Purple Finch\",\"Purple Gallinule\",\"Purple Tarantula\",\"Purussaurus\",\"Puss Moth\",\"Pygmy Hippopotamus\",\"Pygmy Marmoset\",\"Pygmy python\",\"Pygmy Shark\",\"Pygora Goat\",\"Pyjama Shark\",\"Pyrador\",\"Pyredoodle\",\"Pyrenean Mastiff\",\"Pyrenean Shepherd\",\"Python\",\"Quagga\",\"Quail\",\"Queen snake\",\"Quetzal\",\"Quetzalcoatlus northropi\",\"Quokka\",\"Quoll\",\"Rabbit\",\"Raccoon\",\"Raccoon Dog\",\"Racer Snake\",\"Radiated Tortoise\",\"Ragamuffin\",\"Ragdoll\",\"Raggle\",\"Rainbow Boa\",\"Rainbow Kribs\",\"Rainbow Shark\",\"Rat\",\"Rat Snakes\",\"Rat Terrier\",\"Rattlesnake\",\"Red Ackie Monitor\",\"Red Aphids\",\"Red Deer\",\"Red Diamondback Rattlesnake\",\"Red Finch\",\"Red Fox\",\"Red Kite\",\"Red Knee Tarantula\",\"Red Panda\",\"Red Paper Wasp\",\"Red Racer Snake\",\"Red Spitting Cobra\",\"Red Squirrel\",\"Red Tail Boa\",\"Red Wolf\",\"Red-Bellied Black Snake\",\"Red-Bellied Woodpecker\",\"Red-Billed Quelea Bird\",\"Red-Eared Slider\",\"Red-Eyed Tree Frog\",\"Red-Footed Tortoise\",\"Red-handed Tamarin\",\"Red-Headed Vulture\",\"Red-Lipped Batfish\",\"Red-Shouldered Hawk\",\"Red-winged blackbird\",\"Redback Spider\",\"Redbone Coonhound\",\"Redhump Eartheater\",\"Redstart\",\"Redtail Catfish\",\"Reef Shark\",\"Reindeer\",\"Repenomamus\",\"Reticulated python\",\"Rex Rabbit\",\"Rhamphosuchus\",\"Rhea\",\"Rhesus Macaque\",\"Rhino Beetle\",\"Rhino Viper\",\"Rhinoceros\",\"Rhodesian Ridgeback\",\"Rhombic Egg-Eater Snake\",\"Ribbon Eel\",\"Ribbon Snake\",\"Rim Rock Crowned Snake\",\"Ring-billed Gull\",\"Ringed Kingfisher\",\"Rinkhals Snake\",\"River Otter\",\"River Turtle\",\"Roadrunner\",\"Robber Flies\",\"Robin\",\"Rock Crab\",\"Rock Hyrax\",\"Rock Python\",\"Rockfish\",\"Rockhopper Penguin\",\"Rodents\",\"Roe Deer\",\"Rooster\",\"Root Aphids\",\"Rose-breasted Grosbeak\",\"Roseate Spoonbill\",\"Rosy Boa\",\"Rotterman\",\"Rottsky\",\"Rottweiler\",\"Rough Earth Snake\",\"Rough Green Snake\",\"Rough-Legged Hawk\",\"Rove Beetle\",\"Royal Penguin\",\"Rubber Boa\",\"Ruby-Crowned Kinglet\",\"Ruby-Throated Hummingbird\",\"Ruddy Turnstone\",\"Rufous Hummingbird\",\"Russel\u2019s Viper\",\"Russell Terrier\",\"Russian Bear Dog\",\"Russian Blue\",\"Russian Tortoise\",\"Saanen Goat\",\"Saarloos Wolfdog\",\"Saber-Toothed Tiger\",\"Sable\",\"Sable Black German Shepherd\",\"Sable Ferret\",\"Saddleback Caterpillar\",\"Saiga\",\"Saint Berdoodle\",\"Saint Bernard\",\"Saint Shepherd\",\"Salamander\",\"Salmon\",\"Salmon Shark\",\"Saluki\",\"Sambar\",\"Samoyed\",\"San Francisco Garter Snake\",\"Sand Cat\",\"Sand Crab\",\"Sand Dollar\",\"Sand Lizard\",\"Sand Tiger Shark\",\"Sand Viper\",\"Sandhill Crane\",\"Saola\",\"Sapsali\",\"Sarcosuchus\",\"Sardines\",\"Sarkastodon\",\"Sarplaninac\",\"Sarus Crane\",\"Satanic leaf-tailed gecko\",\"Saturniidae Moth\",\"Sauropoda\",\"Savanna Goat\",\"Savannah Monitor\",\"Savannah Sparrow\",\"Savu Python\",\"Saw-scaled viper\",\"Sawfish\",\"Scallops\",\"Scarab Beetle\",\"Scarlet Kingsnake\",\"Scarlet Macaw\",\"Scarlet Tanager\",\"Schapendoes\",\"Schipperke\",\"Schneagle\",\"Schnoodle\",\"Scimitar-horned Oryx\",\"Scorpion\",\"Scorpion Fish\",\"Scotch Collie\",\"Scottish Deerhound\",\"Scottish Fold Cat\",\"Scottish Terrier\",\"Scrotum Frog\",\"Sculpin\",\"Scutosaurus\",\"Sea Anemone\",\"Sea Dragon\",\"Sea Eagle\",\"Sea Lion\",\"Sea Otter\",\"Sea Roach\",\"Sea Slug\",\"Sea Snake\",\"Sea Squirt\",\"Sea Turtle\",\"Sea Urchin\",\"Seagull\",\"Seahorse\",\"Seal\",\"Sealyham Terrier\",\"Sedge Warbler\",\"Sei Whale\",\"Senegal Parrot\",\"Senepol Cattle\",\"Sequined Spider\",\"Serval\",\"Seymouria\",\"Shark\",\"Sharp-Shinned Hawk\",\"Sharp-Tailed Snake\",\"Shastasaurus\",\"Sheep\",\"Sheepadoodle\",\"Sheepshead Fish\",\"Shepadoodle\",\"Shepkita\",\"Shepweiler\",\"Shetland Sheepdog\",\"Shiba Inu\",\"Shichi\",\"Shih Poo\",\"Shih Tzu\",\"Shikoku\",\"Shiloh Shepherd\",\"Shiranian\",\"Shoebill Stork\",\"Shollie\",\"Short-Eared Owl\",\"Short-Faced Bear\",\"Shortfin Mako Shark\",\"Shrew\",\"Shrimp\",\"Siamese\",\"Siberian\",\"Siberian Husky\",\"Siberian Ibex\",\"Siberian Retriever\",\"Siberian Tiger\",\"Siberpoo\",\"Sidewinder\",\"Sika Deer\",\"Silken Windhound\",\"Silkie Chicken\",\"Silky Shark\",\"Silky Terrier\",\"Silver Dollar\",\"Silver Labrador\",\"Simbakubwa\",\"Sinosauropteryx\",\"Sivatherium\",\"Sixgill shark\",\"Skate Fish\",\"Skeleton Tarantula\",\"Skink Lizard\",\"Skipjack Tuna\",\"Skua\",\"Skunk\",\"Skye Terrier\",\"Sleeper Shark\",\"Sloth\",\"Slovak Cuvac\",\"Slow Worm\",\"Slug\",\"Smallmouth Bass\",\"Smilosuchus\",\"Smokybrown Cockroach\",\"Smooth Earthsnake\",\"Smooth Fox Terrier\",\"Smooth Green Snake\",\"Smooth Hammerhead Shark\",\"Smooth Snake\",\"Snail\",\"Snake\",\"Snapping Turtle\",\"Snook Fish\",\"Snorkie\",\"Snouted Cobra\",\"Snow Bunting\",\"Snow Crab\",\"Snow Leopard\",\"Snowberry Clearwing Moth\",\"Snowflake Eel\",\"Snowshoe\",\"Snowshoe Hare\",\"Snowy Owl\",\"Sockeye Salmon\",\"Soldier Beetle\",\"Somali\",\"Song Sparrow\",\"Song Thrush\",\"South China Tiger\",\"Southern Black Racer\",\"Southern Hognose Snake\",\"Southern Pacific Rattlesnake\",\"Spadefoot Toad\",\"Spanador\",\"Spanish Goat\",\"Spanish Mastiff\",\"Spanish Water Dog\",\"Sparrow\",\"Sparrowhawk\",\"Speckled Kingsnake\",\"Spectacled Bear\",\"Sperm Whale\",\"Sphynx\",\"Spider\",\"Spider Ball Python\",\"Spider Beetle\",\"Spider Monkey\",\"Spider Wasp\",\"Spider-Tailed Horned Viper\",\"Spinner Shark\",\"Spinone Italiano\",\"Spinosaurus\",\"Spiny bush viper\",\"Spiny Dogfish\",\"Spiny Hill Turtle\",\"Spitting Cobra\",\"Spixs Macaw\",\"Sponge\",\"Spongy Moth\",\"Spotted Gar\",\"Spotted Lanternfly\",\"Spotted python\",\"Spotted Skunk\",\"Springador\",\"Springbok\",\"Springerdoodle\",\"Squash Beetle\",\"Squid\",\"Squirrel\",\"Squirrel Monkey\",\"Squirrelfish\",\"Sri Lankan Elephant\",\"Stabyhoun\",\"Staffordshire Bull Terrier\",\"Stag Beetle\",\"Standard Schnauzer\",\"Star-nosed mole\",\"Starfish\",\"Stargazer Fish\",\"Steelhead Salmon\",\"Steller\u2019s Sea Cow\",\"Stick Insect\",\"Stiletto Snake\",\"Stingray\",\"Stoat\",\"Stone Crab\",\"Stonechat\",\"Stonefish\",\"Stoplight Loosejaw\",\"Stork\",\"Strawberry Hermit Crab\",\"Striped Hyena\",\"Striped Rocket Frog\",\"Stupendemys\",\"Sturgeon\",\"Styracosaurus\",\"Suchomimus\",\"Sucker Fish\",\"Sugar Glider\",\"Sulcata Tortoise\",\"Sumatran Elephant\",\"Sumatran Orang-utan\",\"Sumatran Rhinoceros\",\"Sumatran Tiger\",\"Summer Tanager\",\"Sun Bear\",\"Sunbeam Snake\",\"Sunset Ball Python\",\"Super Pastel Ball Python\",\"Supersaurus\",\"Superworm\",\"Surgeonfish\",\"Swai Fish\",\"Swainson\u2019s Hawk\",\"Swallow\",\"Swan\",\"Swedish Elkhound\",\"Swedish Lapphund\",\"Swedish Vallhund\",\"Swordfish\",\"Syrian Hamster\",\"Taco Terrier\",\"Tailless Whip Scorpion\",\"Taipan\",\"Takin\",\"Tamaskan\",\"Tang\",\"Tangerine Leopard Gecko\",\"Tapanuli Orang-utan\",\"Tapir\",\"Tarantula Hawk\",\"Tarbosaurus\",\"Tarpon\",\"Tarsier\",\"Tasmanian Devil\",\"Tasmanian Tiger\",\"Tasmanian Tiger Snake\",\"Tawny Frogmouth\",\"Tawny Owl\",\"Teacup Miniature Horse\",\"Teddy Bear Hamster\",\"Teddy Guinea Pig\",\"Teddy Roosevelt Terrier\",\"Telescope Fish\",\"Ten-Lined June Beetle\",\"Tennessee Walking Horse\",\"Tentacled Snake\",\"Tenterfield Terrier\",\"Termite\",\"Terrier\",\"Terror Bird\",\"Tetra\",\"Texas Blind Snake\",\"Texas Brown Tarantula\",\"Texas Coral Snake\",\"Texas Garter Snake\",\"Texas Heeler\",\"Texas Indigo Snake\",\"Texas Night Snake\",\"Texas Rat Snake\",\"Texas Spiny Lizard\",\"Thai Ridgeback\",\"Thalassomedon\",\"Thanatosdrakon\",\"Thornback Ray\",\"Thorny Devil\",\"Thresher Shark\",\"Thrush\",\"Thylacoleo\",\"Thylacoleo carnifex\",\"Thylacosmilus\",\"Tibetan Fox\",\"Tibetan Mastiff\",\"Tibetan Spaniel\",\"Tibetan Terrier\",\"Tick\",\"Tiffany\",\"Tiger\",\"Tiger Beetle\",\"Tiger Moth\",\"Tiger Rattlesnake\",\"Tiger Salamander\",\"Tiger Shark\",\"Tiger snake\",\"Timber Rattlesnake\",\"Timor python\",\"Tire Track Eel\",\"Titan Beetle\",\"Titanoboa\",\"Toadfish\",\"Tomato Hornworm\",\"Torkie\",\"Tornjak\",\"Tortoise\",\"Tosa\",\"Toucan\",\"Towhee\",\"Toxodon\",\"Toy Fox Terrier\",\"Toy Poodle\",\"Transylvanian Hound\",\"Trapdoor spider\",\"Tree Frog\",\"Tree Kangaroo\",\"Tree Snake\",\"Tree swallow\",\"Tree Viper\",\"Treecreeper\",\"Treeing Tennessee Brindle\",\"Treeing Walker Coonhound\",\"Triggerfish\",\"Troodon\",\"Tropicbird\",\"Trout\",\"Tsetse Fly\",\"Tuatara\",\"Tufted Coquette\",\"Tufted Titmouse\",\"Tully Monster\",\"Tuna\",\"Turaco\",\"Turkey\",\"Turkey Vulture\",\"Turkish Angora\",\"Turtles\",\"Tusoteuthis\",\"Twig Snake\",\"Tylosaurus\",\"Tyrannosaurus Rex\",\"Uakari\",\"Uguisu\",\"Uinta Ground Squirrel\",\"Uintatherium\",\"Umbrellabird\",\"Unau\",\"Underwing Moth\",\"Upland Sandpiper\",\"Ural owl\",\"Urechis unicinctus\",\"Urial\",\"Uromastyx\",\"Urutu Snake\",\"Utonagan\",\"Valley Bulldog\",\"Vampire Bat\",\"Vampire Crab\u00A0\",\"Vampire Squid\",\"Vaquita\",\"Vegavis\",\"Velociraptor\",\"Venus Flytrap\",\"Vermilion Flycatcher\",\"Vervet Monkey\",\"Vicu\u00F1a\",\"Vine Snake\",\"Vinegaroon\",\"Viper\",\"Viper Boa\",\"Viper Shark\",\"Viperfish\",\"Virgin Islands Dwarf Gecko\",\"Vizsla\",\"Vole\",\"Volpino Italiano\",\"Vulture\",\"Wahoo Fish\",\"Waimanu\",\"Walking Catfish\",\"Wallaby\",\"Walleye Fish\",\"Walrus\",\"Wandering Albatross\",\"Warbler\",\"Warthog\",\"Wasp\",\"Water Beetle\",\"Water Buffalo\",\"Water Bug\",\"Water Dragon\",\"Water Vole\",\"Wattled Jacana\",\"Wax Moth\",\"Weasel\",\"Weaver Bird\",\"Weimaraner\",\"Weimardoodle\",\"Wels Catfish\",\"Welsh Black Cattle\",\"Welsh Corgi\",\"Welsh Springer Spaniel\",\"Welsh Terrier\",\"West Highland Terrier\",\"West Siberian Laika\",\"Western Blind Snake\",\"Western Diamondback Rattlesnake\",\"Western Gorilla\",\"Western Green Mamba\",\"Western Hognose Snake\",\"Western Lowland Gorilla\",\"Western Rat Snake\",\"Western Tanager\",\"Westiepoo\",\"Whale Shark\",\"Wheaten Terrier\",\"Whimbrel\",\"Whinchat\",\"Whippet\",\"Whiptail Lizard\",\"White Butterfly\",\"White Catfish\",\"White Ferret / Albino Ferrets\",\"White Rhinoceros\",\"White Shark\",\"White Sturgeon\u00A0\",\"White Tiger\",\"White-Crowned Sparrow\",\"White-Eyed Vireo\",\"White-Faced Capuchin\",\"White-shouldered House Moth\",\"White-tail deer\",\"White-Tailed Eagle\",\"Whitetail Deer\",\"Whiting\",\"Whoodle\",\"Whooping Crane\",\"Wild Boar\",\"Wildebeest\",\"Willow Warbler\",\"Winter Moth\",\"Wire Fox Terrier\",\"Wirehaired Pointing Griffon\",\"Wirehaired Vizsla\",\"Wiwaxia\",\"Wolf\",\"Wolf Eel\",\"Wolf Snake\",\"Wolf Spider\",\"Wolffish\",\"Wolverine\",\"Woma python\",\"Wombat\",\"Wood Bison\",\"Wood Frog\",\"Wood Tick\",\"Wood Turtle\",\"Woodlouse\",\"Woodlouse Spider\",\"Woodpecker\",\"Woodrat\",\"Woolly Aphids\",\"Woolly Mammoth\",\"Woolly Monkey\",\"Woolly Rhinoceros\",\"Worm\",\"Worm Snake\",\"Wrasse\",\"Writing Spider\",\"Wrought Iron Butterflyfish\",\"Wryneck\",\"Wyoming Toad\",\"X-Ray Tetra\",\"Xeme\",\"Xenacanthus\",\"Xenoceratops\",\"Xenotarsosaurus\",\"Xerus\",\"Xiaosaurus\",\"Xiaotingia\",\"Xiphactinus\",\"Xoloitzcuintli\",\"Yak\",\"Yakutian Laika\",\"Yarara\",\"Yellow Anaconda\",\"Yellow Aphids\",\"Yellow Bellied Sapsucker\",\"Yellow Belly Ball Python\",\"Yellow Cobra\",\"Yellow Crazy Ant\",\"Yellow Perch\",\"Yellow Sac Spider\",\"Yellow Spotted Lizard\",\"Yellow Tanager\",\"Yellow Tang\",\"Yellow-Bellied Sea Snake\",\"Yellow-Eyed Penguin\",\"Yellowfin Tuna\",\"Yellowhammer\",\"Yellowthroat\",\"Yeti Crab\",\"Yokohama chicken\",\"Yoranian\",\"Yorkie Bichon\",\"Yorkie-poo\",\"Yorkshire Terrier\",\"Zebra\",\"Zebra Finch\",\"Zebra Mussels\",\"Zebra Pleco\",\"Zebra Shark\",\"Zebra Snake\",\"Zebra Spitting Cobra\",\"Zebra Tarantula\",\"Zebu\",\"Zokor\",\"Zonkey\",\"Zorse\",\"Zuchon\"];function P(e){return n(I,e)}var x=[\"us-east-2\",\"us-east-1\",\"us-west-1\",\"us-west-2\",\"af-south-1\",\"ap-east-1\",\"ap-southeast-3\",\"ap-south-1\",\"ap-northeast-3\",\"ap-northeast-2\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ca-central-1\",\"eu-central-1\",\"eu-west-1\",\"eu-west-2\",\"eu-south-1\",\"eu-west-3\",\"eu-north-1\",\"me-south-1\",\"sa-east-1\",\"us-gov-east-1\",\"us-gov-west-1\"];function D(e){return n(x,e)}var G=[\"/usr/X11R6\",\"/sys\",\"/mnt\",\"/Network\",\"/usr/libdata\",\"/Library\",\"/sbin\",\"/tmp\",\"/usr/local/src\",\"/boot/defaults\",\"/etc/mail\",\"/bin\",\"/boot\",\"/var/tmp\",\"/etc/namedb\",\"/private/var\",\"/var/mail\",\"/opt\",\"/opt/lib\",\"/proc\",\"/usr/include\",\"/usr/src\",\"/home/user\",\"/selinux\",\"/usr/libexec\",\"/dev\",\"/etc/defaults\",\"/usr\",\"/usr/share\",\"/rescue\",\"/private\",\"/usr/sbin\",\"/home/user/dir\",\"/Users\",\"/var\",\"/lost+found\",\"/usr/bin\",\"/etc/ppp\",\"/var/spool\",\"/var/yp\",\"/usr/ports\",\"/private/tmp\",\"/usr/obj\",\"/home\",\"/media\"];function F(e){return n(G,e)}var q=[\"markets\",\"solid_backing_strategist\",\"granite\",\"synthesizing_executive_specialist\",\"ecuador\",\"calculate_island\",\"nevada\",\"gloves_manat_delaware\",\"loan_saint\",\"client_server\",\"kroon\",\"investor\",\"dynamic_portal\",\"pixel\",\"concrete\",\"nuevo_avon_market\",\"productize_withdrawal_override\",\"operative_sum_bypassing\",\"visionary_online_account\",\"balboa\",\"sql_connecting\",\"incredible_azure_interface\",\"open_source_netherlands_copying\",\"hack_hard_thailand\",\"berkshire_car_micronesia\",\"pound_program_handmade\",\"implement_nevada\",\"home\",\"agp\",\"berkshire_investment_tasty\",\"licensed_pink_fundamental\",\"concrete_encompassing\",\"holistic\",\"application_saint_infrastructureg\",\"visionary\",\"towels_visionary_ergonomic\",\"scalable_jewelery_sudan\",\"revolutionary\",\"global_fresh_open_source\",\"png_capacitor_quantify\",\"automotive\",\"action_items\",\"soap_unbranded\",\"music_payment_payment\",\"chips_taiwan\",\"payment\",\"intelligent_connecting_account\",\"capacitor_bypass\",\"tools_vatu\",\"interface\",\"e_markets\",\"transmit_borders_input\",\"invoice\",\"ball_orange\",\"morph_magnetic\",\"team_oriented_ivory\",\"concrete_compress\",\"market_hack\",\"wireless_frictionless_chicken\",\"png\",\"turquoise_territories_berkshire\",\"back_end\",\"withdrawal_paradigm_matrix\",\"payment_context_sensitive_wisconsin\",\"unbranded_json_wooden\",\"invoice_sleek_customized\",\"silver_copying\",\"licensed\",\"plug_and_play\",\"cultivate_orchestrator\",\"quantifying_quantify_norway\",\"account_borders_gourde\",\"quantifyg\",\"open_architected_content_based_protocol\",\"administrator\",\"synthesizing\",\"metrics\",\"white_wireless_garden\",\"berkshireg\",\"nepal_view_protocol\",\"calculating_shirt\",\"fuchsia_reintermediate_fish\",\"extend\",\"matrix\",\"peso\",\"superstructure_value_added_redundant\",\"national_world_classv\",\"yellowv\",\"moratorium\",\"views\",\"metal_drive_sports\",\"ports_pink_overriding\",\"borders\",\"supply_chains_client_driven_dynamic\",\"shirt_moratorium_place\",\"calculate\",\"protocol_engineer_azerbaijan\",\"chair_rss\",\"b2b_belarussian\",\"fiji\"];function L(e){const a=e?.extension??\"pdf\";return n((()=>`${r(q)}.${a}`),e)}const R=[\"aws\",\"aws-cn\",\"aws-us-gov\"],E=[\"s3\",\"sqs\",\"lambda\",\"iam\"],H={s3:()=>`::${F()}/*`,iam:()=>`:${h()}:${n([\"user\",\"group\"])}/*`,sqs:()=>`${D()}:${h()}:queue${k({min:1,max:10})}`,lambda:()=>`${D()}:${h()}:function:${L().replace(/_/g,\"-\")}`};function W(e){return n((()=>{const e=n(R),a=n(E);return`arn:${e}:${a}:${H[a]()}`}),e)}function N(e){const a=e?.size??100;return n((()=>`https://i.pravatar.cc/${a}`),e)}var z=[\"EC2\",\"RDS\",\"S3\",\"Lambda\",\"CloudFront\",\"Glacier\",\"SNS\",\"SQS\",\"EBS\",\"VPC\",\"Kinesis\",\"Kinesis Data Firehose\",\"Dynamo DB\",\"ElastiCache\",\"CloudWatch\",\"Cognito\",\"API Gateway\",\"AppSync\",\"Athena\"];function K(e){return n(z,e)}function O(e){return n((()=>[S({length:8}),S({length:4}),S({length:4}),S({length:4}),S({length:12})].map((e=>e.join(\"\"))).join(\"-\")),e)}var J=[\"Arizona Diamondbacks\",\"Atlanta Braves\",\"Baltimore Orioles\",\"Boston Red Sox\",\"Chicago Cubs\",\"Chicago White Sox\",\"Cincinnati Reds\",\"Cleveland Guardians\",\"Colorado Rockies\",\"Detroit Tigers\",\"Houston Astros\",\"Kansas City Royals\",\"Los Angeles Angels\",\"Los Angeles Dodgers\",\"Miami Marlins\",\"Milwaukee Brewers\",\"Minnesota Twins\",\"New York Mets\",\"New York Yankees\",\"Oakland Athletics\",\"Philadelphia Phillies\",\"Pittsburgh Pirates\",\"San Diego Padres\",\"San Francisco Giants\",\"Seattle Mariners\",\"St. Louis Cardinals\",\"Tampa Bay Rays\",\"Texas Rangers\",\"Toronto Blue Jays\",\"Washington Nationals\"];function V(e){return n(J,e)}var U=[\"Atlanta Hawks\",\"Boston Celtics\",\"Brooklyn Nets\",\"Charlotte Hornets\",\"Chicago Bulls\",\"Cleveland Cavaliers\",\"Dallas Mavericks\",\"Denver Nuggets\",\"Detroit Pistons\",\"Golden State Warriors\",\"Houston Rockets\",\"Indiana Pacers\",\"LA Clippers\",\"Los Angeles Lakers\",\"Memphis Grizzlies\",\"Miami Heat\",\"Milwaukee Bucks\",\"Minnesota Timberwolves\",\"New Orleans Pelicans\",\"New York Knicks\",\"Oklahoma City Thunder\",\"Orlando Magic\",\"Philadelphia 76ers\",\"Phoenix Suns\",\"Portland Trail Blazers\",\"Sacramento Kings\",\"San Antonio Spurs\",\"Toronto Raptors\",\"Utah Jazz\",\"Washington Wizards\"];function j(e){return n(U,e)}var _=[\"Spectacled bear\",\"Brown bear\",\"Asian black bear\",\"Sun bear\",\"Polar bear\",\"Giant panda\",\"Sloth bear\",\"American black bear\"];function Y(e){return n(_,e)}function Q(e){const a=new Date(e.from).getTime(),t=new Date(e.to).getTime();if(a>=t)throw new Error(\"From must be before to\");return n((()=>new Date(k({min:a,max:t}))),e)}var $=[\"MS\",\"TW\",\"LR\",\"HU\",\"PK\",\"GQ\",\"GG\",\"SZ\",\"MQ\",\"AS\",\"WS\",\"BJ\",\"NR\",\"FJ\",\"ZM\",\"CR\",\"BO\",\"AW\",\"AI\",\"GW\",\"PF\",\"MO\",\"PE\",\"UZ\",\"JM\",\"KH\",\"RW\",\"GN\",\"IN\",\"MR\",\"MC\",\"KG\",\"SA\",\"SV\",\"TZ\",\"ME\",\"BB\",\"IE\",\"LY\",\"TM\",\"SN\",\"MA\",\"BN\",\"ML\",\"LV\",\"SM\",\"HT\",\"NF\",\"TD\",\"UA\",\"FM\",\"KM\",\"CN\",\"GF\",\"MT\",\"RO\",\"PA\",\"FI\",\"BG\",\"KZ\",\"PN\",\"BL\",\"NO\",\"IM\",\"AQ\",\"MV\",\"LA\",\"NU\",\"LS\",\"CW\",\"CF\",\"GT\",\"TL\",\"RU\",\"BQ\",\"GB\",\"BV\",\"TC\",\"EC\",\"NG\",\"AD\",\"RE\",\"SL\",\"CL\",\"ER\"],Z=[\"AFG\",\"ALB\",\"DZA\",\"ASM\",\"AND\",\"AGO\",\"AIA\",\"ATA\",\"ATG\",\"ARG\",\"ARM\",\"ABW\",\"AUS\",\"AUT\",\"AZE\",\"BHS\",\"BHR\",\"BGD\",\"BRB\",\"BLR\",\"BEL\",\"BLZ\",\"BEN\",\"BMU\",\"BTN\",\"BOL\",\"BES\",\"BIH\",\"BWA\",\"BVT\",\"BRA\",\"IOT\",\"BRN\",\"BGR\",\"BFA\",\"BDI\",\"CPV\",\"KHM\",\"CMR\",\"CAN\",\"CYM\",\"CAF\",\"TCD\",\"CHL\",\"CHN\",\"CXR\",\"CCK\",\"COL\",\"COM\",\"COG\",\"COD\",\"COK\",\"CRI\",\"HRV\",\"CUB\",\"CUW\",\"CYP\",\"CZE\",\"DNK\",\"DJI\",\"DMA\",\"DOM\",\"ECU\",\"EGY\",\"SLV\",\"GNQ\",\"ERI\",\"EST\",\"SWZ\",\"ETH\",\"FLK\",\"FRO\",\"FJI\",\"FIN\",\"FRA\",\"GUF\",\"PYF\",\"ATF\",\"GAB\",\"GMB\",\"GEO\",\"DEU\",\"GHA\",\"GIB\",\"GRC\",\"GRL\",\"GRD\",\"GLP\",\"GUM\",\"GTM\",\"GGY\",\"GIN\",\"GNB\",\"GUY\",\"HTI\",\"HMD\",\"VAT\",\"HND\",\"HKG\",\"HUN\",\"ISL\",\"IND\",\"IDN\",\"IRN\",\"IRQ\",\"IRL\",\"IMN\",\"ISR\",\"ITA\",\"JAM\",\"JPN\",\"JEY\",\"JOR\",\"KAZ\",\"KEN\",\"KIR\",\"PRK\",\"KOR\",\"KWT\",\"KGZ\",\"LAO\",\"LVA\",\"LBN\",\"LSO\",\"LBR\",\"LBY\",\"LIE\",\"LTU\",\"LUX\",\"MAC\",\"MDG\",\"MWI\",\"MYS\",\"MDV\",\"MLI\",\"MLT\",\"MHL\",\"MTQ\",\"MRT\",\"MUS\",\"MYT\",\"MEX\",\"FSM\",\"MDA\",\"MCO\",\"MNG\",\"MNE\",\"MSR\",\"MAR\",\"MOZ\",\"MMR\",\"NAM\",\"NRU\",\"NPL\",\"NLD\",\"NCL\",\"NZL\",\"NIC\",\"NER\",\"NGA\",\"NIU\",\"NFK\",\"MKD\",\"MNP\",\"NOR\",\"OMN\",\"PAK\",\"PLW\",\"PSE\",\"PAN\",\"PNG\",\"PRY\",\"PER\",\"PHL\",\"PCN\",\"POL\",\"PRT\",\"PRI\",\"QAT\",\"REU\",\"ROU\",\"RUS\",\"RWA\",\"BLM\",\"SHN\",\"KNA\",\"LCA\",\"MAF\",\"SPM\",\"VCT\",\"WSM\",\"SMR\",\"STP\",\"SAU\",\"SEN\",\"SRB\",\"SYC\",\"SLE\",\"SGP\",\"SXM\",\"SVK\",\"SVN\",\"SLB\",\"SOM\",\"ZAF\",\"SGS\",\"SSD\",\"ESP\",\"LKA\",\"SDN\",\"SUR\",\"SJM\",\"SWE\",\"CHE\",\"SYR\",\"TWN\",\"TJK\",\"TZA\",\"THA\",\"TLS\",\"TGO\",\"TKL\",\"TON\",\"TTO\",\"TUN\",\"TUR\",\"TKM\",\"TCA\",\"TUV\",\"UGA\",\"UKR\",\"ARE\",\"GBR\",\"USA\",\"UMI\",\"URY\",\"UZB\",\"VUT\",\"VEN\",\"VNM\",\"VGB\",\"VIR\",\"WLF\",\"ESH\",\"YEM\",\"ZMB\",\"ZWE\"];function X(e){return n(e?.alpha3?Z:$,e)}function ee(e){if(e?.bankCode&&4!==e?.bankCode?.length)throw new Error(\"bank code should be valid 4 letters. For example DEUT\");return n((()=>{const a=e?.bankCode??\"####\".replace(/#/g,(()=>w())),t=e?.countryCode??X(),i=e?.locationCode??\"##\".replace(/#/g,(()=>w())),o=e?.branchCode??\"###\".replace(/#/g,(()=>S().toString()));return`${a}${t}${i}${e?.fillBranchCode?\"XXX\":o}`.toUpperCase()}),e)}function ae(e){const a={...e,length:void 0};return n((()=>ee(a).toString()),e)}function te(e){return n((()=>{const e=s({min:0,max:Number.MAX_SAFE_INTEGER,fraction:0});return BigInt(e.toString(2)).toString()}),e)}var ie=[\"Red-necked Phalarope\",\"Cliff Swallow\",\"Loggerhead Kingbird\",\"Aztec Thrush\",\"Hooded Warbler\",\"Common Pochard\",\"Scotts Oriole\",\"Black-browed Albatross\",\"Monk Parakeet\",\"Magnificent Hummingbird\",\"Broad-billed Sandpiper\",\"Bushtit\",\"Mexican Jay\",\"Hooded Merganser\",\"Wood Stork\",\"Rosss Gull\",\"Green Sandpiper\",\"Whooping Crane\"];function oe(e){return n(ie,e)}function ne(e){return n((()=>b({size:33})),e)}var re=[{title:\"The Adventures of Augie March\",author:\"Saul Bellow\",category:\"Comedy\"},{title:\"The Uncommon Reader\",author:\"Alan Bennett\",category:\"Comedy\"},{title:\"Don Quixote\",author:\"Miguel de Cervantes\",category:\"Comedy\"},{title:\"Tom Jones\",author:\"Henry Fielding\",category:\"Comedy\"},{title:\"Dead Souls\",author:\"Nikolai Gogol\",category:\"Comedy\"},{title:\"The Wind in the Willows\",author:\"Kenneth Grahame\",category:\"Comedy\"},{title:\"Our Man in Havana\",author:\"Graham Greene\",category:\"Comedy\"},{title:\"Catch-22\",author:\"Joseph Heller\",category:\"Comedy\"},{title:\"High Fidelity\",author:\"Nick Hornby\",category:\"Comedy\"},{title:\"Three Men in a Boat\",author:\"Jerome K Jerome\",category:\"Comedy\"},{title:\"Finnegans Wake\",author:\"James Joyce\",category:\"Comedy\"},{title:\"Puckoon\",author:\"Spike Milligan\",category:\"Comedy\"},{title:\"Portnoy\u2019s Complaint\",author:\"Philip Roth\",category:\"Comedy\"},{title:\"Great Apes\",author:\"Will Self\",category:\"Comedy\"},{title:\"The Life and Opinions of Tristram Shandy, Gentleman\",author:\"Laurence Sterne\",category:\"Comedy\"},{title:\"A Confederacy of Dunces\",author:\"John Kennedy Toole\",category:\"Comedy\"},{title:\"Breakfast of Champions\",author:\"Kurt Vonnegut\",category:\"Comedy\"},{title:\"Infinite Jest\",author:\"David Foster Wallace\",category:\"Comedy\"},{title:\"Molesworth\",author:\"Geoffrey Willans and Ronald Searle\",category:\"Comedy\"},{title:\"Thank You Jeeves\",author:\"PG Wodehouse\",category:\"Comedy\"},{title:\"The Thirty-Nine Steps\",author:\"John Buchan\",category:\"Crime\"},{title:\"The Big Sleep\",author:\"Raymond Chandler\",category:\"Crime\"},{title:\"And Then There Were None\",author:\"Agatha Christie\",category:\"Crime\"},{title:\"The Hound of the Baskervilles\",author:\"Arthur Conan Doyle\",category:\"Crime\"},{title:\"The Manchurian Candidate\",author:\"Richard Condon\",category:\"Crime\"},{title:\"The Andromeda Strain\",author:\"Michael Crichton\",category:\"Crime\"},{title:\"The Ipcress File\",author:\"Len Deighton\",category:\"Crime\"},{title:\"Crime and Punishment\",author:\"Fyodor Dostoevsky\",category:\"Crime\"},{title:\"The Count of Monte Cristo\",author:\"Alexandre Dumas\",category:\"Crime\"},{title:\"The Day of the Jackal\",author:\"Frederick Forsyth\",category:\"Crime\"},{title:\"The Third Man\",author:\"Graham Greene\",category:\"Crime\"},{title:\"A Time to Kill\",author:\"John Grisham\",category:\"Crime\"},{title:\"The Thin Man\",author:\"Dashiell Hammett\",category:\"Crime\"},{title:\"The Talented Mr Ripley\",author:\"Patricia Highsmith\",category:\"Crime\"},{title:\"Tinker, Tailor, Soldier, Spy\",author:\"John le Carre\",category:\"Crime\"},{title:\"To Kill a Mockingbird\",author:\"Harper Lee\",category:\"Crime\"},{title:\"No Country for Old Men\",author:\"Cormac McCarthy\",category:\"Crime\"},{title:\"The Godfather\",author:\"Mario Puzo\",category:\"Crime\"},{title:\"The Crying of Lot 49\",author:\"Thomas Pynchon\",category:\"Crime\"},{title:\"Judgment in Stone\",author:\"Ruth Rendell\",category:\"Crime\"},{title:\"Little Women\",author:\"Louisa May Alcott\",category:\"Family and Self\"},{title:\"Le Pere Goriot\",author:\"Honore de Balzac\",category:\"Family and Self\"},{title:\"The Outsider\",author:\"Albert Camus\",category:\"Family and Self\"},{title:\"Great Expectations\",author:\"Charles Dickens\",category:\"Family and Self\"},{title:\"The Sound and the Fury\",author:\"William Faulkner\",category:\"Family and Self\"},{title:\"Howards End\",author:\"EM Forster\",category:\"Family and Self\"},{title:\"The Power and the Glory\",author:\"Graham Greene\",category:\"Family and Self\"},{title:\"Steppenwolf\",author:\"Herman Hesse\",category:\"Family and Self\"},{title:\"A Prayer for Owen Meany\",author:\"John Irving\",category:\"Family and Self\"},{title:\"Ulysses\",author:\"James Joyce\",category:\"Family and Self\"},{title:\"One Flew Over the Cuckoo\u2019s Nest\",author:\"Ken Kesey\",category:\"Family and Self\"},{title:\"How Green was My Valley\",author:\"Richard Llewellyn\",category:\"Family and Self\"},{title:\"The Bluest Eye\",author:\"Toni Morrison\",category:\"Family and Self\"},{title:\"Who Do You Think You Are?\",author:\"Alice Munro\",category:\"Family and Self\"},{title:\"The Bell Jar\",author:\"Sylvia Plath\",category:\"Family and Self\"},{title:\"Remembrance of Things Past\",author:\"Marcel Proust\",category:\"Family and Self\"},{title:\"The Catcher in the Rye\",author:\"JD Salinger\",category:\"Family and Self\"},{title:\"The Color Purple\",author:\"Alice Walker\",category:\"Family and Self\"},{title:\"Jimmy Corrigan, The Smarest Kid on Earth\",author:\"Chris Ware\",category:\"Family and Self\"},{title:\"The Picture of Dorian Gray\",author:\"Oscar Wilde\",category:\"Family and Self\"},{title:\"Pride and Prejudice\",author:\"Jane Austen\",category:\"Love\"},{title:\"Jane Eyre\",author:\"Charlotte Bronte\",category:\"Love\"},{title:\"Wuthering Heights\",author:\"Emily Bronte\",category:\"Love\"},{title:\"Breakfast at Tiffany\u2019s\",author:\"Truman Capote\",category:\"Love\"},{title:\"Rebecca\",author:\"Daphne du Maurier\",category:\"Love\"},{title:\"Daniel Deronda\",author:\"George Eliot\",category:\"Love\"},{title:\"The Great Gatsby\",author:\"F Scott Fitzgerald\",category:\"Love\"},{title:\"Madame Bovary\",author:\"Gustave Flaubert\",category:\"Love\"},{title:\"A Room with a View\",author:\"EM Forster\",category:\"Love\"},{title:\"The Sorrows of Young Werther\",author:\"Johann Wolfgang Goethe\",category:\"Love\"},{title:\"Far From the Madding Crowd\",author:\"Thomas Hardy\",category:\"Love\"},{title:\"The Scarlet Letter\",author:\"Nathaniel Hawthorne\",category:\"Love\"},{title:\"The Remains of the Day\",author:\"Kazuo Ishiguro\",category:\"Love\"},{title:\"Les Liaisons Dangereuses\",author:\"Pierre-Ambroise-Francois Choderlos de Laclos\",category:\"Love\"},{title:\"Of Human Bondage\",author:\"Somerset Maugham\",category:\"Love\"},{title:\"Atonement\",author:\"Ian McEwan\",category:\"Love\"},{title:\"Gone With the Wind\",author:\"Margaret Mitchell\",category:\"Love\"},{title:\"Norwegian Wood\",author:\"Haruki Murakami\",category:\"Love\"},{title:\"Doctor Zhivago\",author:\"Boris Pasternak\",category:\"Love\"},{title:\"Wide Sargasso Sea\",author:\"Jean Rhys\",category:\"Love\"},{title:\"The Hitchhikers Guide to the Galaxy\",author:\"Douglas Adams\",category:\"Science Fiction and Fantasy\"},{title:\"Foundation\",author:\"Isaac Asimov\",category:\"Science Fiction and Fantasy\"},{title:\"Fahrenheit 451\",author:\"Ray Bradbury\",category:\"Science Fiction and Fantasy\"},{title:\"Alice\u2019s Adventures in Wonderland\",author:\"Lewis Carroll\",category:\"Science Fiction and Fantasy\"},{title:\"The Man who was Thursday\",author:\"GK Chesterton\",category:\"Science Fiction and Fantasy\"},{title:\"Childhood\u2019s End\",author:\"Arthur C Clarke\",category:\"Science Fiction and Fantasy\"},{title:\"Do Androids Dream of Electric Sheep?\",author:\"Philip K Dick\",category:\"Science Fiction and Fantasy\"},{title:\"American Gods\",author:\"Neil Gaiman\",category:\"Science Fiction and Fantasy\"},{title:\"Neuromancer\",author:\"William Gibson\",category:\"Science Fiction and Fantasy\"},{title:\"Dune\",author:\"Frank L Herbert\",category:\"Science Fiction and Fantasy\"},{title:\"The Turn of the Screw\",author:\"Henry James\",category:\"Science Fiction and Fantasy\"},{title:\"The Shining\",author:\"Stephen King\",category:\"Science Fiction and Fantasy\"},{title:\"The Earthsea Series\",author:\"Ursula Le Guin\",category:\"Science Fiction and Fantasy\"},{title:\"The Chronicles of Narnia\",author:\"CS Lewis\",category:\"Science Fiction and Fantasy\"},{title:\"Nineteen Eighty-Four\",author:\"George Orwell\",category:\"Science Fiction and Fantasy\"},{title:\"The Discworld Series\",author:\"Terry Pratchett\",category:\"Science Fiction and Fantasy\"},{title:\"Frankenstein\",author:\"Mary Shelley\",category:\"Science Fiction and Fantasy\"},{title:\"The Strange Case of Dr Jekyll and Mr Hyde\",author:\"Robert Louis Stevenson\",category:\"Science Fiction and Fantasy\"},{title:\"Dracula\",author:\"Bram Stoker\",category:\"Science Fiction and Fantasy\"},{title:\"The Lord of the Rings\",author:\"JRR Tolkien\",category:\"Science Fiction and Fantasy\"},{title:\"Things Fall Apart\",author:\"Chinua Achebe\",category:\"State of the Nation\"},{title:\"Go Tell it on the Mountain\",author:\"James Baldwin\",category:\"State of the Nation\"},{title:\"Uncle Tom\u2019s Cabin\",author:\"Harriet Beecher Stowe\",category:\"State of the Nation\"},{title:\"Moll Flanders\",author:\"Daniel Defoe\",category:\"State of the Nation\"},{title:\"A Tale of Two Cities\",author:\"Charles Dickens\",category:\"State of the Nation\"},{title:\"North and South\",author:\"Elizabeth Gaskell\",category:\"State of the Nation\"},{title:\"Les Miserables\",author:\"Victor Hugo\",category:\"State of the Nation\"},{title:\"A Girl in Winter\",author:\"Philip Larkin\",category:\"State of the Nation\"},{title:\"The Magic Mountain\",author:\"Thomas Mann\",category:\"State of the Nation\"},{title:\"Bel-Ami\",author:\"Guy de Maupassant\",category:\"State of the Nation\"},{title:\"Animal Farm\",author:\"George Orwell\",category:\"State of the Nation\"},{title:\"Cry, the Beloved Country\",author:\"Alan Paton\",category:\"State of the Nation\"},{title:\"The Jungle\",author:\"Upton Sinclair\",category:\"State of the Nation\"},{title:\"White Teeth\",author:\"Zadie Smith\",category:\"State of the Nation\"},{title:\"The Grapes of Wrath\",author:\"John Steinbeck\",category:\"State of the Nation\"},{title:\"Vanity Fair\",author:\"William Makepeace Thackeray\",category:\"State of the Nation\"},{title:\"The Way We Live Now\",author:\"Anthony Trollope\",category:\"State of the Nation\"},{title:\"The Adventures of Tom Sawyer\",author:\"Mark Twain\",category:\"State of the Nation\"},{title:\"The Bonfire of the Vanities\",author:\"Tom Wolfe\",category:\"State of the Nation\"},{title:\"Germinal\",author:\"Emile Zola\",category:\"State of the Nation\"},{title:\"Empire of the Sun\",author:\"JG Ballard\",category:\"War and Travel\"},{title:\"Heart of Darkness\",author:\"Joseph Conrad\",category:\"War and Travel\"},{title:\"Robinson Crusoe\",author:\"Daniel Defoe\",category:\"War and Travel\"},{title:\"The Three Musketeers\",author:\"Alexandre Dumas\",category:\"War and Travel\"},{title:\"King Solomon\u2019s Mines\",author:\"H Rider Haggard\",category:\"War and Travel\"},{title:\"Enigma\",author:\"Robert Harris\",category:\"War and Travel\"},{title:\"The Good Soldier Svejk\",author:\"Jaroslav Hasek\",category:\"War and Travel\"},{title:\"For Whom the Bell Tolls\",author:\"Ernest Hemingway\",category:\"War and Travel\"},{title:\"On the Road\",author:\"Jack Kerouac\",category:\"War and Travel\"},{title:\"The Call of the Wild\",author:\"Jack London\",category:\"War and Travel\"},{title:\"One Hundred Years of Solitude\",author:\"Gabriel Garcia Marquez\",category:\"War and Travel\"},{title:\"Moby-Dick or, The Whale\",author:\"Herman Melville\",category:\"War and Travel\"},{title:\"Zen and the Art of Motorcycle Maintenance\",author:\"Robert Pirsig\",category:\"War and Travel\"},{title:\"All Quiet on the Western Front\",author:\"Erich Maria Remarque\",category:\"War and Travel\"},{title:\"Ivanhoe\",author:\"Sir Walter Scott\",category:\"War and Travel\"},{title:\"Treasure Island\",author:\"Robert Louis Stevenson\",category:\"War and Travel\"},{title:\"Gulliver\u2019s Travels\",author:\"Jonathan Swift\",category:\"War and Travel\"},{title:\"War and Peace\",author:\"Leo Tolstoy\",category:\"War and Travel\"},{title:\"Around the World in Eighty Days\",author:\"Jules Verne\",category:\"War and Travel\"},{title:\"The Caine Mutiny\",author:\"Herman Wouk\",category:\"War and Travel\"}];function se(e){return n(e?.category?re.filter((({category:a})=>a===e.category)):re,e)}var le=[\"Apple\",\"Amazon\",\"Microsoft\",\"Google\",\"Samsung\",\"Coca-Cola\",\"Toyota\",\"Mercedes\",\"McDonald\u2019s\",\"Disney\",\"BMW\",\"Intel\",\"Facebook\",\"IBM\",\"Nike\",\"Cisco\",\"Louis Vuitton\",\"SAP\",\"Instagram\",\"Honda\",\"Chanel\",\"J.P. Morgan\",\"American Express\",\"UPS\",\"Ikea\",\"Pepsi\",\"Adobe\",\"Herm\u00E8s\",\"General Electric\",\"YouTube\",\"Accenture\",\"Gucci\",\"Budweiser\",\"Pampers\",\"Zara\",\"Hyundai\",\"H&M\",\"Nescaf\u00E9\",\"Allianz\",\"Tesla\",\"Netflix\",\"Ford\",\"L'Oreal\",\"Audi\",\"Visa\",\"Ebay\",\"Volkswagen\",\"AXA\",\"Goldman Sachs\",\"Adidas\",\"Sony\",\"Citi\",\"Philips\",\"Gillette\",\"Porsche\",\"Starbucks\",\"Mastercard\",\"Salesforce\",\"Nissan\",\"PayPal\",\"Siemens\",\"Danone\",\"Nestl\u00E9\",\"HSBC\",\"Hewlett Packard\",\"Kellogg's\",\"3M\",\"Colgate\",\"Morgan Stanely\",\"Spotify\",\"Canon\",\"Lego\",\"Cartier\",\"Santander\",\"FedEx\",\"Nintendo\",\"Hewlett Packard Enterprise\",\"Corona\",\"Ferrari\",\"Huawei\",\"DHL\",\"Jack Daniel's\",\"Dior\",\"Caterpillar\",\"Panasonic\",\"Kia\",\"Johnson & Johnson\",\"Heineken\",\"John Deere\",\"LinkedIn\",\"Hennessy\",\"KFC\",\"Land Rover\",\"Tiffany & Co.\",\"Mini\",\"Uber\",\"Burberry\",\"Johnnie Walker\",\"Prada\",\"Zoom\"];function ue(e){return n(le,e)}var ce=[\"Chrome\",\"Edge\",\"Firefox\",\"Internet Explorer\",\"Safari\",\"Opera\",\"Yandex\",\"Chromium\",\"Vivaldi\",\"Baidu\",\"Brave\"];function de(e){return n(ce,e)}var he=[\"East\",\"South\",\"West\",\"North\"];function me(e){return n(he,e)}var pe=[\"Japanese Bobtail\",\"Savannah\",\"LaPerm\",\"Siberian\",\"Ocicat\",\"Birman\",\"Devon Rex\",\"Minskin\",\"Serengeti\",\"Bombay\",\"Himalayan\",\"American Curl\",\"Thai\",\"Balinese\",\"Singapura\",\"American Shorthair\",\"Ojos Azules\",\"Burmese\"];function ye(e){return n(pe,e)}var ge=[\"Persevering encompassing middleware\",\"Multi-layered zero administration system engine\",\"Digitized attitude-oriented implementation\",\"Multi-lateral zero defect throughput\",\"Profit-focused coherent application\",\"Decentralized human-resource system engine\",\"Right-sized client-driven firmware\",\"Cloned incremental structure\",\"Streamlined impactful alliance\",\"Visionary fresh-thinking instruction set\",\"Networked exuding monitoring\",\"Organized contextually-based function\",\"Enterprise-wide directional orchestration\",\"Universal empowering product\",\"Reduced regional frame\",\"Monitored bottom-line productivity\",\"Reduced multi-tasking encoding\",\"Enhanced responsive software\",\"Multi-tiered exuding approach\",\"Balanced stable knowledge user\",\"Re-engineered neutral database\",\"Versatile national time-frame\",\"Exclusive fresh-thinking workforce\",\"Virtual background paradigm\",\"Upgradable cohesive knowledge user\",\"De-engineered needs-based hardware\",\"Networked mobile moratorium\",\"Inverse contextually-based portal\",\"De-engineered full-range extranet\",\"Advanced transitional support\",\"Business-focused stable framework\",\"Reactive 4th generation info-mediaries\",\"Switchable upward-trending array\",\"Integrated regional open architecture\",\"Reactive local implementation\",\"Focused asymmetric contingency\",\"Synergized 4th generation success\",\"Mandatory regional complexity\",\"Proactive client-server access\",\"Implemented well-modulated task-force\",\"Pre-emptive clear-thinking groupware\",\"Balanced radical archive\",\"Managed explicit installation\",\"Switchable next generation intranet\",\"Quality-focused coherent groupware\",\"Customizable client-driven encoding\",\"Centralized impactful contingency\",\"Streamlined executive Graphic Interface\",\"Seamless bi-directional capacity\",\"Synchronised 24 hour emulation\",\"Robust heuristic installation\",\"Face to face 6th generation complexity\",\"Vision-oriented holistic protocol\",\"Ameliorated asynchronous pricing structure\",\"Profit-focused executive core\",\"Multi-channelled zero tolerance core\",\"Customizable global open system\",\"Robust foreground synergy\",\"Up-sized eco-centric pricing structure\",\"Upgradable stable strategy\",\"Synergized client-server architecture\",\"Focused logistical definition\",\"Secured holistic architecture\",\"Adaptive asymmetric infrastructure\",\"Digitized clear-thinking firmware\",\"De-engineered eco-centric installation\",\"Stand-alone next generation task-force\",\"User-centric optimizing implementation\",\"Re-contextualized grid-enabled portal\",\"Extended asynchronous system engine\",\"Reactive neutral moderator\",\"Expanded 4th generation Graphic Interface\",\"Optimized contextually-based toolset\",\"Operative bi-directional protocol\",\"De-engineered dynamic frame\",\"User-friendly disintermediate alliance\",\"Fundamental client-server data-warehouse\",\"Ameliorated multimedia groupware\",\"Secured methodical frame\",\"Organized maximized firmware\",\"User-centric executive knowledge user\",\"Configurable global help-desk\",\"Realigned empowering monitoring\",\"Enterprise-wide 24 hour info-mediaries\",\"Expanded didactic methodology\",\"Configurable zero administration projection\",\"Fundamental multi-tasking standardization\",\"Future-proofed leading edge secured line\",\"Polarised global open system\",\"Re-engineered upward-trending standardization\",\"Stand-alone needs-based pricing structure\",\"Synergistic responsive service-desk\",\"Re-engineered 24/7 paradigm\",\"Compatible fresh-thinking success\",\"Innovative background attitude\",\"Automated modular access\",\"Distributed heuristic archive\",\"Cloned human-resource knowledge base\",\"User-friendly impactful utilisation\",\"Reactive motivating data-warehouse\"];function fe(e){return n(ge,e)}var be=[\"Clymene Dolphin\",\"Bottlenose Dolphin\",\"Costero\",\"Chilean Dolphin\",\"Heaviside\u2019s Dolphin\",\"Pantropical Spotted Dolphin\",\"Sperm Whale\",\"Burrunan Dolphin\",\"Bryde\u2019s whale\",\"Atlantic White-Sided Dolphin\",\"Northern Rightwhale Dolphin\",\"Killer Whale (Orca)\",\"False Killer Whale\",\"Ganges River Dolphin\",\"Pacific White-Sided Dolphin\",\"Blue Whale\",\"Southern Bottlenose Whale\",\"Peale\u2019s Dolphin\"];function we(e){return n(be,e)}var ve=[\"South Dagmarshire\",\"New Solonmouth\",\"New Montemouth\",\"Langborough\",\"Padbergmouth\",\"Connfurt\",\"Metairie\",\"New Merle\",\"Willbury\",\"North Sigmund\",\"Opalbury\",\"North Antonetta\",\"Tallahassee\",\"Janefurt\",\"Port Adalberto\",\"West Dorris\",\"Kettering\",\"Lake Adell\",\"Bellingham\",\"Buffalo\",\"West Brendonville\",\"South Laila\",\"West Lucy\",\"Marionton\",\"Lake Brianne\",\"New Ansley\",\"Johnnieburgh\",\"Jaskolskifort\",\"New Davonteside\",\"New Kyle\",\"Williemouth\",\"Lake Cesar\",\"Bernierfurt\",\"West Janetborough\",\"Port Asa\",\"East Filibertofurt\",\"Fort Lauderdale\",\"West Dellside\",\"Glen Burnie\",\"Port Amie\",\"Shoreline\",\"West Estaton\",\"Cuyahoga Falls\",\"North Kaleighshire\",\"Kuvalismouth\",\"South Darienbury\",\"Venamouth\",\"North Winnifred\",\"Bahringertown\",\"Haneborough\",\"South Ahmedfort\",\"East Khalilton\",\"Aliso Viejo\",\"Jaquelinview\",\"Lake Ludie\",\"West Simone\",\"Katrinaside\",\"North Nona\",\"Tryciastad\",\"Tabithaville\",\"Frisco\",\"Olympia\",\"State College\",\"New Garlandfort\",\"Lake Anthony\",\"West Everardo\",\"Wehnerfort\",\"South Verdieton\",\"Lawrence\",\"New Wallaceberg\",\"White Plains\",\"South Stacey\",\"Farmington\",\"Borerville\",\"Erynside\",\"Lake Zackton\",\"Port Salvador\",\"Funkville\",\"North Frankie\",\"East Vicentaborough\",\"North Braulio\",\"East Providence\",\"Denesikburgh\",\"New Philip\",\"Durwardton\",\"Kissimmee\",\"North Celia\",\"Maxwellport\",\"Reichertland\",\"Rettaland\",\"West Amiya\",\"Elisabethland\",\"Rogers\",\"Henderson\",\"Franeckiview\",\"Grand Rapids\",\"Murray\",\"Port Ricky\",\"Port Hardymouth\",\"Cruzshire\"];function ke(e){return n(ve,e)}var Se=[\"XXS\",\"XS\",\"S\",\"M\",\"L\",\"XL\",\"XXL\"];function Ce(e){return n(Se,e)}var Ae=[\"AliceBlue\",\"AntiqueWhite\",\"Aqua\",\"Aquamarine\",\"Azure\",\"Beige\",\"Bisque\",\"Black\",\"BlanchedAlmond\",\"Blue\",\"BlueViolet\",\"Brown\",\"BurlyWood\",\"CadetBlue\",\"Chartreuse\",\"Chocolate\",\"Coral\",\"CornflowerBlue\",\"Cornsilk\",\"Crimson\",\"Cyan\",\"DarkBlue\",\"DarkCyan\",\"DarkGoldenRod\",\"DarkGray\",\"DarkGrey\",\"DarkGreen\",\"DarkKhaki\",\"DarkMagenta\",\"DarkOliveGreen\",\"DarkOrange\",\"DarkOrchid\",\"DarkRed\",\"DarkSalmon\",\"DarkSeaGreen\",\"DarkSlateBlue\",\"DarkSlateGray\",\"DarkSlateGrey\",\"DarkTurquoise\",\"DarkViolet\",\"DeepPink\",\"DeepSkyBlue\",\"DimGray\",\"DimGrey\",\"DodgerBlue\",\"FireBrick\",\"FloralWhite\",\"ForestGreen\",\"Fuchsia\",\"Gainsboro\",\"GhostWhite\",\"Gold\",\"GoldenRod\",\"Gray\",\"Grey\",\"Green\",\"GreenYellow\",\"HoneyDew\",\"HotPink\",\"IndianRed\",\"Indigo\",\"Ivory\",\"Khaki\",\"Lavender\",\"LavenderBlush\",\"LawnGreen\",\"LemonChiffon\",\"LightBlue\",\"LightCoral\",\"LightCyan\",\"LightGoldenRodYellow\",\"LightGray\",\"LightGrey\",\"LightGreen\",\"LightPink\",\"LightSalmon\",\"LightSeaGreen\",\"LightSkyBlue\",\"LightSlateGray\",\"LightSlateGrey\",\"LightSteelBlue\",\"LightYellow\",\"Lime\",\"LimeGreen\",\"Linen\",\"Magenta\",\"Maroon\",\"MediumAquaMarine\",\"MediumBlue\",\"MediumOrchid\",\"MediumPurple\",\"MediumSeaGreen\",\"MediumSlateBlue\",\"MediumSpringGreen\",\"MediumTurquoise\",\"MediumVioletRed\",\"MidnightBlue\",\"MintCream\",\"MistyRose\",\"Moccasin\",\"NavajoWhite\",\"Navy\",\"OldLace\",\"Olive\",\"OliveDrab\",\"Orange\",\"OrangeRed\",\"Orchid\",\"PaleGoldenRod\",\"PaleGreen\",\"PaleTurquoise\",\"PaleVioletRed\",\"PapayaWhip\",\"PeachPuff\",\"Peru\",\"Pink\",\"Plum\",\"PowderBlue\",\"Purple\",\"RebeccaPurple\",\"Red\",\"RosyBrown\",\"RoyalBlue\",\"SaddleBrown\",\"Salmon\",\"SandyBrown\",\"SeaGreen\",\"SeaShell\",\"Sienna\",\"Silver\",\"SkyBlue\",\"SlateBlue\",\"SlateGray\",\"SlateGrey\",\"Snow\",\"SpringGreen\",\"SteelBlue\",\"Tan\",\"Teal\",\"Thistle\",\"Tomato\",\"Turquoise\",\"Violet\",\"Wheat\",\"White\",\"WhiteSmoke\",\"Yellow\",\"YellowGreen\"];function Me(e){return n(Ae,e)}var Te=[\"Kautzer, Macejkovic and Fisher\",\"Greenholt - Mosciski\",\"Marquardt - Runolfsdottir\",\"Abernathy Inc\",\"Dickens - Lang\",\"Hand, Bernhard and Kessler\",\"Abbott LLC\",\"Kub Inc\",\"Johnston - Wisozk\",\"Reichert LLC\",\"Kohler LLC\",\"Shanahan - Boyle\",\"Batz - Rice\",\"Cronin, Oberbrunner and Beier\",\"Kuhlman, Schowalter and West\",\"Luettgen Inc\",\"Ward Group\",\"Hills and Sons\",\"Prohaska, Balistreri and Walker\",\"Rempel - Durgan\",\"Bernier LLC\",\"Stehr - Lockman\",\"Roberts, Rogahn and Dooley\",\"Lesch - Jakubowski\",\"Jenkins - Turcotte\",\"Gerhold - Rowe\",\"Block - Rau\",\"Dickinson, Tremblay and Moore\",\"Nader - Fritsch\",\"Kreiger and Sons\",\"Bartell, Wehner and Schowalter\",\"Hegmann Inc\",\"Orn, Spencer and Kiehn\",\"Graham, Sipes and Towne\",\"Hodkiewicz Inc\",\"Mills Group\",\"Legros, Tillman and Hodkiewicz\",\"Lesch - Carter\",\"Lesch Group\",\"Kreiger - Sauer\",\"Cartwright - Schuster\",\"Labadie LLC\",\"Pfannerstill, White and Mosciski\",\"Jenkins LLC\",\"Boehm, Hettinger and Huels\",\"Maggio, Wisoky and Blick\",\"Kozey Inc\",\"Stracke - Wisozk\",\"Olson, Olson and Carter\",\"Orn, Gerlach and Runolfsdottir\",\"Stracke - Kertzmann\",\"Walker - Zieme\",\"Hodkiewicz - Hintz\",\"Lind Group\",\"Fahey, Leannon and Gleichner\",\"Mertz, Gusikowski and Lemke\",\"Heidenreich - Aufderhar\",\"Zboncak and Sons\",\"Carroll Group\",\"Brown LLC\",\"Weber Inc\",\"Rath LLC\",\"Walker Inc\",\"Heller, Hyatt and Jaskolski\",\"Jacobi - Kutch\",\"Skiles and Sons\",\"Durgan - Stamm\",\"Renner - Prosacco\",\"Hahn - Welch\",\"Lesch, Dooley and Bartell\",\"Crona and Sons\",\"Rogahn, Armstrong and Goyette\",\"Lubowitz, Kuhlman and Bailey\",\"Doyle Group\",\"Dooley and Sons\",\"Kerluke LLC\",\"Bogan - Daniel\",\"Hintz - Boehm\",\"Swaniawski and Sons\",\"Kris, Legros and Cartwright\",\"Reichel Group\",\"Russel - Hintz\",\"Welch, Lockman and Hand\",\"Pouros - Brakus\",\"Mohr, Fritsch and Wisozk\",\"Upton - Reichert\",\"Koepp and Sons\",\"Weber and Sons\",\"Quigley, Bins and Becker\",\"Strosin, Oberbrunner and Wunsch\",\"Rodriguez - Spencer\",\"Wilkinson - Dare\",\"Gutkowski Inc\",\"OReilly LLC\",\"Collins, Mante and Pacocha\",\"Steuber, Luettgen and Corkery\",\"Kub and Sons\",\"Lesch and Sons\"];function Be(e){return n(Te,e)}var Ie=[\"Argentina\",\"Peru\",\"Colombia\",\"Chile\",\"Uruguay\",\"Gabon\",\"Congo\",\"Norfolk Island\",\"Qatar\",\"Syrian Arab Republic\",\"Wallis and Futuna\",\"Somalia\",\"Saint Barthelemy\",\"Comoros\",\"Sri Lanka\",\"Czech Republic\",\"Christmas Island\",\"Macao\",\"Montenegro\",\"Anguilla\",\"Canada\",\"Mayotte\",\"Tajikistan\",\"Afghanistan\",\"Liechtenstein\",\"Cocos (Keeling) Islands\",\"Angola\",\"Bahrain\",\"Dominican Republic\",\"Croatia\",\"Latvia\",\"Virgin Islands, U.S.\",\"United Kingdom\",\"Brazil\",\"Spain\",\"Mongolia\",\"Montserrat\",\"Estonia\",\"Benin\",\"Guinea\",\"Guinea-Bissau\",\"Greece\",\"Lao Peoples Democratic Republic\",\"Puerto Rico\",\"Slovakia (Slovak Republic)\",\"United States of America\",\"Switzerland\",\"Costa Rica\",\"Mauritius\",\"Nigeria\",\"Russian Federation\",\"Germany\",\"Antigua and Barbuda\",\"Albania\",\"Romania\",\"Moldova\",\"Senegal\",\"Tanzania\",\"British Indian Ocean Territory (Chagos Archipelago)\",\"Central African Republic\",\"New Caledonia\",\"Burundi\",\"Panama\",\"Azerbaijan\",\"Namibia\",\"French Southern Territories\",\"Vanuatu\",\"Ethiopia\",\"Burkina Faso\",\"Tunisia\",\"Mozambique\",\"Belarus\",\"Saint Kitts and Nevis\",\"Hungary\",\"Indonesia\",\"Cyprus\",\"Ecuador\",\"Saint Martin\",\"Nauru\",\"Faroe Islands\",\"Iran\",\"Bolivia\",\"Pitcairn Islands\",\"France\",\"Paraguay\",\"Isle of Man\",\"Sierra Leone\",\"Monaco\",\"Belize\",\"Trinidad and Tobago\"];function Pe(e){return n(Ie,e)}var xe=[\"Bedfordshire\",\"Berkshire\",\"Bristol\",\"Buckinghamshire\",\"Cambridgeshire\",\"Cheshire\",\"City of London\",\"Cornwall\",\"Cumbria\",\"Derbyshire\",\"Devon\",\"Dorset\",\"Durham\",\"East Riding of Yorkshire\",\"East Sussex\",\"Essex\",\"Gloucestershire\",\"Greater London\",\"Greater Manchester\",\"Hampshire\",\"Herefordshire\",\"Hertfordshire\",\"Isle of Wight\",\"Kent\",\"Lancashire\",\"Leicestershire\",\"Lincolnshire\",\"Merseyside\",\"Norfolk\",\"North Yorkshire\",\"Northamptonshire\",\"Northumberland\",\"Nottinghamshire\",\"Oxfordshire\",\"Rutland\",\"Shropshire\",\"Somerset\",\"South Yorkshire\",\"Staffordshire\",\"Suffolk\",\"Surrey\",\"Tyne and Wear\",\"Warwickshire\",\"West Midlands\",\"West Sussex\",\"West Yorkshire\",\"Wiltshire\",\"Worcestershire\"];function De(e){return n(xe,e)}var Ge=[\"Hart\u00F3n del Valle\",\"Pedit\",\"German Black Pied cattle\",\"Parda Alpina\",\"Dajal\",\"Raya\",\"Adamawa\",\"Blaarkop\",\"Doayo cattle\",\"Aulie-Ata\",\"North Bengal Grey\",\"Nguni\",\"Canaria\",\"Siri\",\"Breed\",\"Hallikar4\",\"Simmental\",\"Pie Rouge des Plaines\"];function Fe(e){return n(Ge,e)}function qe(e){return n((()=>s({min:100,max:999}).toString()),e)}var Le=[\"American Express\",\"T-Union\",\"UnionPay\",\"Diners Club\",\"Discover Card\",\"UkrCard\",\"RuPay\",\"InterPayment\",\"InstaPayment\",\"JCB\",\"Maestro UK\",\"Maestro\",\"Dankort\",\"Mir\",\"NPS Pridnestrovie\",\"Mastercard\",\"51\u201355\",\"Troy\",\"Visa\",\"Visa Electron\",\"UATP\",\"Verve\"];function Re(e){return n(Le,e)}var Ee=[{brand:\"American Express\",formats:[\"34## ###### #####\",\"37## ###### #####\"]},{brand:\"UnionPay\",formats:[\"62## #### #### ####\",\"62#### #############\"]},{brand:\"Diners Club\",formats:[\"300# ###### ####\",\"301# ###### ####\",\"302# ###### ####\",\"303# ###### ####\",\"304# ###### ####\",\"305# ###### ####\",\"309# ###### ####\",\"36## ###### ####\",\"38## ###### ####\",\"39## ###### ####\",\"54## #### #### ####\",\"55## #### #### ####\"]},{brand:\"Discover Card\",formats:[\"6011 #### #### ####\",\"644# #### #### ####\",\"645# #### #### ####\",\"646# #### #### ####\",\"647# #### #### ####\",\"648# #### #### ####\",\"649# #### #### ####\",\"65## #### #### ####\"]},{brand:\"RuPay\",formats:[\"60## #### #### ####\",\"65## #### #### ####\",\"81## #### #### ####\",\"82## #### #### ####\",\"508# #### #### ####\",\"353# #### #### ####\",\"356# #### #### ####\"]},{brand:\"JCB\",formats:[\"3528 #### #### ####\",\"3565 #### #### ####\",\"3572 #### #### ####\",\"3589 #### #### ####\"]},{brand:\"Maestro\",formats:[\"5018 #### #####\",\"5020 #### #####\",\"5038 #### #####\",\"5893 ###### #####\",\"6304 #### #### ####\",\"6759 #### #### ####\",\"6761 #### #### #### ###\",\"6762 #### #### ####\",\"6763 #### #### #### ###\"]},{brand:\"Dankort\",formats:[\"5019 #### #### ####\"]},{brand:\"Mastercard\",formats:[\"51## #### #### ####\",\"52## #### #### ####\",\"53## #### #### ####\",\"54## #### #### ####\",\"55## #### #### ####\"]},{brand:\"Visa\",formats:[\"4### #### #### ####\"]},{brand:\"Visa Electron\",formats:[\"4026 #### #### ####\",\"4175 00## #### ####\",\"4405 #### #### ####\",\"4508 #### #### ####\",\"4844 #### #### ####\",\"4913 #### #### ####\",\"4917 #### #### ####\"]},{brand:\"UATP\",formats:[\"1### ##### ######\"]}];function He(e){const a=e?.brand??Re(),t=Ee.find((e=>e.brand===a))?.formats,i=[\"#### #### #### ####\"];return n((()=>r(t||i).replace(/#/g,(()=>s({min:0,max:9}).toString()))),e)}var We=[\"Orinoco Crocodile\",\"Gharial\",\"Broad-snouted Caiman\",\"Saltwater Crocodile\",\"Black Caiman\",\"West African Crocodile\",\"Tomistoma\",\"Siamese Crocodile\",\"Philippine Crocodile\",\"Schneider\u2019s Smooth-fronted Caiman\",\"Cuban Crocodile\",\"New Guinea Freshwater Crocodile\",\"Nile Crocodile\",\"American Crocodile\",\"Chinese Alligator\",\"Dwarf Crocodile\",\"Yacare Caiman\",\"African Slender-snouted Crocodile\"];function Ne(e){return n(We,e)}var ze=[\"IRR\",\"SHP\",\"NPR\",\"CAD\",\"XDR\",\"BMD\",\"LTL\",\"XTS\",\"CRC\",\"BYR\",\"GEL\",\"PGK\",\"HKD\",\"LKR\",\"IQD\",\"CVE\",\"BRL\",\"MGA\",\"TMT\",\"ISK\",\"GIP\",\"CUC\",\"SYP\",\"MWK\",\"BND\",\"AFN\",\"FKP\",\"GYD\",\"PAB\",\"NAD\",\"ZMK\",\"ILS\",\"KMF\",\"GBP\",\"JPY\",\"MUR\",\"UAH\",\"EEK\",\"SLL\",\"MMK\",\"NGN\",\"SDG\",\"ALL\",\"TRY\",\"BTN\",\"JMD\",\"AWG\",\"GTQ\",\"VEF\",\"XAF\",\"DJF\",\"NIO\",\"XAU\",\"COP\",\"CHF\",\"HNL\",\"DOP\",\"KHR\",\"EUR\",\"CLP\",\"KES\",\"TND\",\"DZD\",\"GNF\",\"USD\",\"MAD\",\"AOA\",\"SRD\",\"TWD\",\"RWF\",\"XPT\",\"PKR\",\"SOS\",\"SCR\",\"GHS\",\"MNT\",\"BWP\",\"AED\",\"RON\"];function Ke(e){return n(ze,e)}var Oe=[\"Egyptian Pound\",\"Belize Dollar\",\"Sudanese Pound\",\"Palladium\",\"Mexican Peso\",\"Rupiah\",\"Tenge\",\"Boliviano boliviano\",\"Vatu\",\"Lebanese Pound\",\"Riel\",\"US Dollar\",\"Djibouti Franc\",\"Kwacha\",\"Hryvnia\",\"Lari\",\"Russian Ruble\",\"Codes specifically reserved for testing purposes\",\"Kina\",\"Tunisian Dinar\",\"Leone\",\"Brunei Dollar\",\"Danish Krone\",\"Nepalese Rupee\",\"North Korean Won\",\"Saudi Riyal\",\"Afghani\",\"Platinum\",\"Iraqi Dinar\",\"Costa Rican Colon\",\"Singapore Dollar\",\"Philippine Peso\",\"Pound Sterling\",\"Dalasi\",\"Dobra\",\"Paanga\",\"Balboa\",\"Bermudian Dollar (customarily known as Bermuda Dollar)\",\"Barbados Dollar\",\"Pataca\",\"Kuwaiti Dinar\",\"CFP Franc\",\"Uganda Shilling\",\"Norwegian Krone\",\"Dong\",\"Lilangeni\",\"Croatian Kuna\",\"Lesotho Loti\",\"Rufiyaa\",\"Forint\",\"Argentine Peso\",\"Cedi\",\"Bhutanese Ngultrum\",\"Dominican Peso\",\"Somoni\",\"Guinea Franc\",\"European Unit of Account 9(E.U.A.-9)\",\"European Monetary Unit (E.M.U.-6)\",\"Convertible Marks\",\"Cuban Peso Convertible\",\"UAE Dirham\",\"Iceland Krona\",\"Gourde\",\"Som\",\"Bahamian Dollar\",\"Kwanza\",\"Cordoba Oro\",\"Gold\",\"Manat\",\"Burundi Franc\",\"New Taiwan Dollar\",\"Fiji Dollar\",\"Uzbekistan Sum\",\"Romanian Leu\"];function Je(e){return n(Oe,e)}var Ve=[\"B/.\",\"\u00A3\",\"Ls\",\"\u20A1\",\"NT$\",\"\u043B\u0432\",\"$\",\"R\",\"Lt\",\"\uFDFC\",\"kr\",\"KM\",\"\u17DB\",\"Bs\",\"\u20B9\",\"Q\",\"\u0192\",\"R$\",\"\u20A8\",\"\u0434\u0435\u043D\",\"p.\",\"\u20BA\",\"\u0414\u0438\u043D.\",\"P\",\"RD$\",\"L\",\"Ft\",\"CHF\",\"\u20A9\",\"Php\",\"S/.\",\"\u20AD\",\"RM\",\"\u20AC\",\"Lek\",\"\u00A5\",\"\u060B\",\"\u20A6\"];function Ue(e){return n(Ve,e)}var je=[\"utf8_unicode_ci\",\"cp1250_general_ci\",\"cp1250_bin\",\"utf8_general_ci\",\"ascii_general_ci\",\"utf8_bin\",\"ascii_bin\"];function _e(e){return n(je,e)}var Ye=[\"comment\",\"group\",\"password\",\"token\",\"phone\",\"title\",\"status\",\"id\",\"name\",\"updatedAt\",\"category\",\"email\",\"avatar\",\"createdAt\"];function Qe(e){return n(Ye,e)}var $e=[\"CSV\",\"ARCHIVE\",\"MyISAM\",\"MEMORY\",\"InnoDB\",\"BLACKHOLE\"];function Ze(e){return n($e,e)}var Xe=[\"tinyint\",\"date\",\"timestamp\",\"set\",\"datetime\",\"enum\",\"binary\",\"bigint\",\"point\",\"smallint\",\"text\",\"bit\",\"decimal\",\"varchar\",\"mediumint\",\"double\",\"time\",\"blob\",\"geometry\",\"boolean\",\"serial\",\"real\",\"float\"];function ea(e){return n(Xe,e)}var aa=[\"Oracle\",\"MySQL\",\"Microsoft SQL Server\",\"PostgreSQL\",\"MongoDB\",\"IBM Db2\",\"Redis\",\"Elasticsearch\",\"Microsoft Access\",\"SQLite\",\"Cassandra\",\"Splunk\",\"MariaDB\",\"Teradata\",\"Hive\",\"Solr\",\"HBase\",\"FileMaker\",\"SAP HANA\",\"Amazon DynamoDB\",\"SAP Adaptive Server\",\"Neo4j\",\"Couchbase\",\"Memcached\",\"Microsoft Azure SQL Database\"];function ta(e){return n(aa,e)}var ia=[\"Games\",\"Automotive\",\"Music\",\"Home\",\"Movies\",\"Health\",\"Sports\",\"Garden\",\"Baby\",\"Kids\",\"Toys\",\"Computers\",\"Clothing\",\"Outdoors\",\"Shoes\",\"Jewelery\",\"Industrial\",\"Electronics\",\"Tools\",\"Grocery\",\"Beauty\",\"Books\"];function oa(e){return n(ia,e)}var na=[\"Southwest\",\"North\",\"Northeast\",\"Northwest\",\"South\",\"West\",\"East\",\"Southeast\"];function ra(e){return n(na,e)}var sa=[\"Jack Russell Terrier\",\"Beauceron\",\"Denmark Feist\",\"Affenpinscher\",\"Kishu\",\"Boykin Spaniel\",\"English Toy Terrier\",\"Alaskan Malamute\",\"English Mastiff\",\"Maltese\",\"Croatian Sheepdog\",\"Garafian Shepherd\",\"Giant Schnauzer\",\"Austrian Black and Tan Hound\",\"Basset Fauve de Bretagne\",\"Pomeranian\",\"Nova Scotia Duck Tolling Retriever\",\"Hygen Hound\",\"Golden Retriever\",\"Doberman Pinscher\",\"French Poodle\",\"Siberian Husky\",\"Cocker Spaniel\"];function la(e){return n(sa,e)}var ua=[\"org\",\"biz\",\"com\",\"net\",\"name\",\"info\",\"io\",\"dev\"];function ca(e){return n(ua,e)}var da=[\"est\",\"voluptatem\",\"non\",\"aut\",\"aliquid\",\"quaerat\",\"quos\",\"vel\",\"tenetur\",\"consectetur\",\"ipsum\",\"voluptate\",\"numquam\",\"nulla\",\"asperiores\",\"in\",\"laborum\",\"quas\",\"et\",\"ullam\",\"consequuntur\",\"enim\",\"dicta\",\"quia\",\"facilis\",\"voluptatibus\",\"at\",\"hic\",\"sunt\",\"excepturi\",\"maiores\",\"vitae\",\"fugit\",\"possimus\",\"unde\",\"repellat\",\"sit\",\"necessitatibus\",\"nemo\",\"qui\",\"exercitationem\",\"dolores\",\"esse\",\"reiciendis\",\"nihil\",\"commodi\",\"id\",\"sequi\",\"consequatur\",\"occaecati\",\"deserunt\",\"quae\",\"eos\",\"sapiente\",\"fugiat\",\"neque\",\"quasi\",\"nostrum\",\"magnam\",\"sed\",\"omnis\",\"doloribus\",\"error\",\"ducimus\",\"rerum\",\"beatae\",\"cupiditate\",\"blanditiis\",\"labore\"];function ha(e){return n((()=>{let a=r(da);var t;return e?.capitalize&&(a=(t=a).charAt(0).toUpperCase()+t.slice(1)),a}),e)}function ma(e){return n((()=>`${ha()}.${ca()}`),e)}var pa=[\"Amaretto Sour\",\"Aviation\",\"Cocktail\",\"Gin\",\"Liqueur\",\"Bellini\",\"Brandy\",\"Black Russian\",\"Bourbon\",\"Coffee-flavored liqueur\",\"Coffee liqueur\",\"Cranberry Vodka\",\"Creme de Cacao\",\"Creme de Cassis\",\"Creme de Menthe\",\"Creme de Noyaux\",\"Bloody Mary\",\"Boulevardier\",\"Bronx Cocktail\",\"Clover Club\",\"Cosmopolitan\",\"Cuba Libre\",\"Daiquiri\",\"Dark and Stormy\",\"French 75\",\"Gin and Tonic\",\"Godfather\",\"B52\",\"Greyhound\",\"Harvey Wallbanger\",\"Irish Coffee\",\"Jack Rose\",\"Kamikaze\",\"Martini\",\"Martini Bianco\",\"Long Island\",\"Long Island Ice Tea\",\"Mai Tai\",\"Margarita\",\"Mimosa\",\"Mint Julep\",\"Negroni\",\"Mojito\",\"Still Water\",\"Sprinkled Water\",\"White Lady\",\"Negroni\",\"Champagne\",\"Red Wine\",\"White Wine\",\"Rum\",\"Rum and Coke\",\"Rum Punch\",\"Pina Colada\",\"Sangria\",\"Sazerac\",\"Tequila\",\"Tequila Sunrise\",\"Zombie\",\"Thai Spring Mojito\",\"Thai Basil Martini\",\"Screwdriver\",\"Raspberry Lemon Drop\",\"Orange Soda\",\"Pineapple Gingerale\",\"Pomegranate Cranberry\",\"Natural Vanilla Syrup\",\"Orange Liqueur\",\"Peach Schnapps\",\"Peppermint Schnapps\",\"Pineapple Juice\",\"Pineapple Soda\",\"Passion Fruit Pucker\"];function ya(e){return n(pa,e)}var ga=[\"aim\",\"alice\",\"aliceadsl\",\"aol\",\"arcor\",\"att\",\"bellsouth\",\"bigpond\",\"bluewin\",\"blueyonder\",\"bol\",\"centurytel\",\"charter\",\"chello\",\"club-internet\",\"comcast\",\"earthlink\",\"facebook\",\"free\",\"freenet\",\"frontiernet\",\"gmail\",\"gmx\",\"googlemail\",\"hetnet\",\"home\",\"hotmail\",\"ig\",\"juno\",\"laposte\",\"libero\",\"live\",\"mac\",\"mail\",\"me\",\"msn\",\"neuf\",\"ntlworld\",\"optonline\",\"optusnet\",\"orange\",\"outlook\",\"planet\",\"qq\",\"rambler\",\"rediffmail\",\"rocketmail\",\"sbcglobal\",\"sfr\",\"shaw\",\"sky\",\"skynet\",\"sympatico\",\"t-online\",\"telenet\",\"terra\",\"tin\",\"tiscali\",\"unaref\",\"uol\",\"verizon\",\"virgilio\",\"voila\",\"wanadoo\",\"web\",\"windstream\",\"yahoo\",\"yandex\",\"zonnet\"];function fa(e){return n(ga,e)}var ba={withAccents:{male:[\"Adri\u00E1n\",\"\u00C6gir\",\"\u00C1lvaro\",\"Andr\u00E9\",\"Andr\u00E9s\",\"\u00C1rni\",\"Asbj\u00F8rn\",\"Bj\u00F6rn\",\"C\u00E9sar\",\"Dan\u00EDel\",\"Dav\u00ED\u00F0\",\"Em\u00EDlio\",\"Fa\u00F1ch\",\"Fran\u00E7ois\",\"Franti\u0161ek\",\"G\u00EDsli\",\"G\u00F6tz\",\"Gu\u00F0j\u00F3n\",\"Gu\u00F0mundur\",\"G\u00FCnter\",\"Halld\u00F3r\",\"Hans-J\u00F6rg\",\"Hans-J\u00FCrgen\",\"H\u00FCseyin\",\"I\u00F1aki\",\"J\u00E1nos\",\"Jes\u00FAs\",\"Ji\u0159\u00ED\",\"J\u00F3hann\",\"J\u00F3hannes\",\"Jok\u016Bbas\",\"J\u00F3n\",\"Jos\u00E9\",\"J\u00F6rn\",\"Juli\u00E3o\",\"J\u00FCrgen\",\"Kristj\u00E1n\",\"Ma\u00EBl\",\"Magn\u00FAs\",\"Math\u00E9o\",\"M\u00E1ty\u00E1s\",\"Micha\u0142\",\"No\u00EBl\",\"Nu\u00F1ez\",\"\u00D3lafur\",\"\u00D3scar\",\"\u00D8yvind\",\"P\u00E1ll\",\"Pawe\u0142\",\"P\u00E9tur\",\"Ram\u00F3n\",\"Ra\u00FAl\",\"Ren\u00E9\",\"Ruair\u00ED\",\"Rub\u00E9n\",\"Se\u00E1n\",\"S\u00E9rgio\",\"Sigur\u00F0ur\",\"S\u00F6nke\",\"Stef\u00E1n\",\"Tom\u00E1\u0161\",\"\u00DEorsteinn\"],female:[\"\u00C6del\",\"Agn\u00E8s\",\"Al\u00EDcia\",\"\u00C4nne\",\"Ant\u00F3nia\",\"\u00C1sta\",\"Au\u00F0ur\",\"C\u00E4cilia\",\"Chlo\u00EB\",\"Cla\u00FAdia\",\"D\u00F6rte\",\"El\u00EDn\",\"El\u00EDsabet\",\"Eli\u0161ka\",\"Franti\u0161ka\",\"Gl\u00F3ria\",\"Gra\u017Cyna\",\"Gu\u00F0bj\u00F6rg\",\"Gu\u00F0n\u00FD\",\"Gu\u00F0r\u00FAn\",\"Henri\u00EBtte\",\"Ingibj\u00F6rg\",\"\u00CDris\",\"J\u00F3hanna\",\"J\u00F3na\",\"J\u00FAlia\",\"K\u00E4te\",\"Katr\u00EDn\",\"Kolbr\u00FAn\",\"Krist\u00EDn\",\"K\u0160the\",\"Let\u00EDcia\",\"L\u00EDdia\",\"L\u00FAcia\",\"Ma\u0142gorzata\",\"Margr\u00E9t\",\"Mar\u00EDa\",\"M\u00F3nica\",\"Nat\u00E1lia\",\"\u00D3l\u00F6f\",\"Patr\u00EDcia\",\"Ragnhei\u00F0ur\",\"Ren\u00E9e\",\"Ru\u017Eena\",\"Si\u00E2n\",\"Sigr\u00ED\u00F0ur\",\"Sigr\u00FAn\",\"S\u00EDlvia\",\"S\u00F8rina\",\"V\u011Bra\",\"Virg\u00EDnia\",\"Zo\u00EB\",\"\u00DE\u00F3ra\",\"\u00DE\u00F3runn\"]},withoutAccents:{male:[\"Abdul\",\"Abdullahi\",\"Abubakar\",\"Adam\",\"Adamu\",\"Adiy\",\"Ahmad\",\"Ajay\",\"Akira\",\"Alan\",\"Alberto\",\"Alejandro\",\"Aleksander\",\"Aleksandr\",\"Aleksey\",\"Alex\",\"Alexander\",\"Alexey\",\"Ali\",\"Aliyu\",\"Aminu\",\"Amit\",\"Amiyr\",\"Amiyt\",\"Amnuai\",\"Amphon\",\"Anah\",\"Anan\",\"Andreas\",\"Andrew\",\"Andrey\",\"Andri\",\"Andries\",\"Andrzej\",\"Anil\",\"Anthony\",\"Anton\",\"Antonio\",\"Arnar\",\"Artur\",\"Artyom\",\"Arun\",\"Ashok\",\"Atli\",\"Avraham\",\"Bartosz\",\"Bello\",\"Bernd\",\"Bin\",\"Birgir\",\"Bjarni\",\"Blessing\",\"Bongani\",\"Brian\",\"Bunmi\",\"Carlos\",\"Carol\",\"Chan\",\"Chao\",\"Charles\",\"Charoen\",\"Chen\",\"Cheng\",\"Christian\",\"Christopher\",\"Colin\",\"Daniel\",\"Daniyel\",\"Dariusz\",\"David\",\"Denis\",\"Dennis\",\"Diego\",\"Dieter\",\"Dilip\",\"Dinesh\",\"Dmitriy\",\"Dmitry\",\"Einar\",\"Eliyahu\",\"Emmanuel\",\"Evgeniy\",\"Fernando\",\"Fran\",\"Francis\",\"Francisco\",\"Francisco-Javier\",\"Frank\",\"Franz\",\"Gang\",\"Gareth\",\"Gary\",\"George\",\"Gerhard\",\"Graham\",\"Grzegorz\",\"Gunnar\",\"Guy\",\"Haim\",\"Haiyan\",\"Hans\",\"Hans-Ulrich\",\"Haruna\",\"Hassan\",\"Heike\",\"Heinz\",\"Helgi\",\"Helmut\",\"Hendrik\",\"Herbert\",\"Hideo\",\"Hiromi\",\"Hiroshi\",\"Hong\",\"Horst\",\"Hui\",\"Ian\",\"Ibrahim\",\"Idris\",\"Igor\",\"Ilya\",\"Isa\",\"Isaac\",\"Isah\",\"Ivan\",\"Jabulani\",\"Jacek\",\"Jacobus\",\"Jakub\",\"James\",\"Jan\",\"Janusz\",\"Javier\",\"Jean\",\"Jerzy\",\"Jesus\",\"Jason\",\"Jianguo\",\"Jianhua\",\"Jianjun\",\"Jianping\",\"Jin\",\"Joan\",\"Johan\",\"Johannes\",\"John\",\"Jonathan\",\"Jorge\",\"Jose\",\"Jose-Antonio\",\"Jose-Luis\",\"Jose-Manuel\",\"Jose-Maria\",\"Josef\",\"Joseph\",\"Joyce\",\"Juan\",\"Kabiru\",\"Kai\",\"Kamil\",\"Karen\",\"Karl\",\"Karl-Heinz\",\"Katsumi\",\"Kazuo\",\"Kelvin\",\"Kenji\",\"Kenneth\",\"Kevin\",\"Kiran\",\"Kirill\",\"Kiyoshi\",\"Kjartan\",\"Klaus\",\"Ko\",\"Koichi\",\"Koji\",\"Konstantin\",\"Koshi\",\"Krishna\",\"Kristinn\",\"Krzysztof\",\"Kun\",\"Lakshmi\",\"Lan\",\"Laxmi\",\"Lei\",\"Li\",\"Lihua\",\"Lijun\",\"Lilian\",\"Lin\",\"Ling\",\"Liping\",\"Liyor\",\"Luis\",\"Lukasz\",\"Maciej\",\"Mahmood\",\"Maksim\",\"Manfred\",\"Manoj\",\"Manuel\",\"Marcin\",\"Mardkhay\",\"Marek\",\"Mariusz\",\"Mark\",\"Martin\",\"Masami\",\"Masao\",\"Mateusz\",\"Matt\",\"Matthew\",\"Meiyr\",\"Michael\",\"Michal\",\"Miguel\",\"Miguel-Angel\",\"Mikhail\",\"Min\",\"Ming\",\"Mitsuo\",\"Miykhael\",\"Miykhal\",\"Mo\",\"Mohamed\",\"Mohammad\",\"Mohammed\",\"Mohan\",\"Moses\",\"Moshe\",\"Mpho\",\"Muhammad\",\"Muhammed\",\"Mukesh\",\"Musa\",\"Narong\",\"Nathan\",\"Nicola\",\"Nikita\",\"Nikolay\",\"Ning\",\"Nkosinathi\",\"Noam\",\"Oleg\",\"Omer\",\"Otieno\",\"Pablo\",\"Patrick\",\"Paul\",\"Pavel\",\"Pawel\",\"Pedro\",\"Peng\",\"Peter\",\"Petrus\",\"Philip\",\"Pieter\",\"Ping\",\"Piotr\",\"Prasit\",\"Prasoet\",\"Pricha\",\"Pushpa\",\"Qiang\",\"Qing\",\"Radha\",\"Rafael\",\"Ragnar\",\"Raj\",\"Rajendra\",\"Rajesh\",\"Raju\",\"Rakesh\",\"Ram\",\"Ramesh\",\"Raphael\",\"Rattana\",\"Ravi\",\"Richard\",\"Robert\",\"Roman\",\"Rong\",\"Roy\",\"Ryan\",\"Salisu\",\"Saman\",\"Samran\",\"Samuel\",\"Sani\",\"Sanjay\",\"Santosh\",\"Sam\",\"Sammy\",\"Sawat\",\"Sebastian\",\"Sergey\",\"Sergio\",\"Shankar\",\"Shay\",\"Shigeru\",\"Shimon\",\"Shlomo\",\"Shoji\",\"Sibusiso\",\"Simon\",\"Sipho\",\"Sombat\",\"Sombun\",\"Somchai\",\"Somchit\",\"Somkhit\",\"Somkiat\",\"Sommai\",\"Somnuek\",\"Somphon\",\"Somphong\",\"Somsak\",\"Sri\",\"Stefan\",\"Stephen\",\"Steve\",\"Steven\",\"Suman\",\"Sunday\",\"Sunil\",\"Sunthon\",\"Suresh\",\"Sushila\",\"Suwit\",\"Sveinn\",\"Tadashi\",\"Takashi\",\"Takeshi\",\"Tal\",\"Tebogo\",\"Thabo\",\"Thawi\",\"Themba\",\"Thomas\",\"Thulani\",\"Tomasz\",\"Toshio\",\"Udom\",\"Umar\",\"Uriy\",\"Usman\",\"Uwe\",\"Victor\",\"Vijay\",\"Viktor\",\"Vincent\",\"Vinod\",\"Vladimir\",\"Walter\",\"Wanchai\",\"Waraphon\",\"Wei\",\"Werner\",\"Wichai\",\"Wichian\",\"Willem\",\"William\",\"Winai\",\"Wirat\",\"Wirot\",\"Wojciech\",\"Wolfgang\",\"Xiang\",\"Xiaohong\",\"Xiaoli\",\"Xiaoping\",\"Xiaoyan\",\"Xin\",\"Xolani\",\"Yaakv\",\"Yahaya\",\"Yakubu\",\"Yan\",\"Yasuo\",\"Yhudah\",\"Ying\",\"Yisrael\",\"Yong\",\"Yosef\",\"Yoshie\",\"Yoshimi\",\"Yoshio\",\"Yu\",\"Yue\",\"Yukio\",\"Yun\",\"Yuriy\",\"Yusuf\",\"Yuval\",\"Zbigniew\",\"Zhen\",\"Zhiqiang\"],female:[\"Agata\",\"Agnieszka\",\"Aisha\",\"Akira\",\"Aleksandra\",\"Alina\",\"Alyona\",\"Amina\",\"Amnuai\",\"Ana\",\"Ana-Maria\",\"Anah\",\"Anan\",\"Anastasiya\",\"Andrea\",\"Angela\",\"Anita\",\"Ann\",\"Anna\",\"Anong\",\"Antonia\",\"Asha\",\"Barbara\",\"Beata\",\"Berglind\",\"Bin\",\"Birgit\",\"Birna\",\"Blessing\",\"Brigitte\",\"Bunmi\",\"Busisiwe\",\"Carmen\",\"Carol\",\"Caroline\",\"Catherine\",\"Chan\",\"Chanah\",\"Chao\",\"Charoen\",\"Chayah\",\"Chen\",\"Cheng\",\"Christa\",\"Christine\",\"Claire\",\"Claudia\",\"Cristina\",\"Darya\",\"Dolores\",\"Dorota\",\"Edda\",\"Ekaterina\",\"Elena\",\"Elisabeth\",\"Elizabeth\",\"Elke\",\"Emiko\",\"Emma\",\"Erika\",\"Erla\",\"Erna\",\"Ester\",\"Esther\",\"Eunice\",\"Eva\",\"Eugenia\",\"Ewa\",\"Faith\",\"Fatima\",\"Fiona\",\"Fran\",\"Francisca\",\"Fumiko\",\"Galina\",\"Gabra\",\"Gisela\",\"Gita\",\"Grace\",\"Hadiza\",\"Haiyan\",\"Hanna\",\"Haruna\",\"Hauwa\",\"Heike\",\"Helen\",\"Helga\",\"Hildur\",\"Hiroko\",\"Hiromi\",\"Hisako\",\"Hong\",\"Hui\",\"Hulda\",\"Inga\",\"Ingrid\",\"Irina\",\"Isa\",\"Isabel\",\"Isah\",\"Iwona\",\"Jackline\",\"Jan\",\"Jane\",\"Janet\",\"Jean\",\"Jennifer\",\"Jianhua\",\"Jianping\",\"Jin\",\"Joan\",\"Joanna\",\"Johanna\",\"Josefa\",\"Joy\",\"Joyce\",\"Juan\",\"Julie\",\"Justyna\",\"Kai\",\"Kanchana\",\"Karen\",\"Karin\",\"Karolina\",\"Kasia\",\"Katarzyna\",\"Katsumi\",\"Keiko\",\"Kiran\",\"Kiyoko\",\"Kristina\",\"Kseniya\",\"Kun\",\"Lakshmi\",\"Lalita\",\"Lan\",\"Latda\",\"Laura\",\"Laxmi\",\"Leah\",\"Lei\",\"Li\",\"Lihua\",\"Lijun\",\"Lilian\",\"Lilja\",\"Lin\",\"Linda\",\"Lindiwe\",\"Ling\",\"Liping\",\"Lisa\",\"Lucia\",\"Lucy\",\"Lyubov\",\"Lyudmila\",\"Magda\",\"Magdalena\",\"Mali\",\"Manju\",\"Margaret\",\"Maria\",\"Maria-Isabel\",\"Maria-Jose\",\"Maria-Pilar\",\"Marina\",\"Mariya\",\"Marta\",\"Martha\",\"Mary\",\"Maryam\",\"Masako\",\"Masami\",\"Mei\",\"Mercy\",\"Michal\",\"Michiko\",\"Mieko\",\"Min\",\"Mina\",\"Ming\",\"Miriam\",\"Miyoko\",\"Mo\",\"Monika\",\"Mpho\",\"Na\",\"Nadezhda\",\"Nan\",\"Nancy\",\"Natalya\",\"Ngozi\",\"Nicola\",\"Ning\",\"Nittaya\",\"Noam\",\"Nobuko\",\"Nokuthula\",\"Nonhlanhla\",\"Noriko\",\"Nushi\",\"Olga\",\"Omer\",\"Patricia\",\"Paula\",\"Paulina\",\"Peng\",\"Petra\",\"Phonthip\",\"Pilar\",\"Ping\",\"Prani\",\"Purity\",\"Pushpa\",\"Qing\",\"Rachel\",\"Radha\",\"Rattana\",\"Rebecca\",\"Reiko\",\"Rekha\",\"Renate\",\"Rita\",\"Rong\",\"Rosa\",\"Rose\",\"Rut\",\"Ruth\",\"Ryoko\",\"Sabine\",\"Sachiko\",\"Samran\",\"Santosh\",\"Sara\",\"Sarah\",\"Sam\",\"Sammy\",\"Sawat\",\"Shanti\",\"Sharon\",\"Shay\",\"Shizuko\",\"Shoshanah\",\"Sibongile\",\"Sita\",\"Sombat\",\"Sombun\",\"Somchit\",\"Somkhit\",\"Sommai\",\"Somnuek\",\"Somphon\",\"Somphong\",\"Sri\",\"Steinunn\",\"Sukanya\",\"Suman\",\"Sunday\",\"Sunita\",\"Suphaphon\",\"Susan\",\"Susanne\",\"Sushila\",\"Svetlana\",\"Takako\",\"Tamar\",\"Tatyana\",\"Tal\",\"Tebogo\",\"Teruko\",\"Thawi\",\"Tomiko\",\"Toshiko\",\"Unnur\",\"Urai\",\"Urmila\",\"Ursula\",\"Usha\",\"Valentina\",\"Victoria\",\"Wanjiru\",\"Wanphen\",\"Watsana\",\"Wei\",\"Wilai\",\"Xiang\",\"Xiaohong\",\"Xiaoli\",\"Xiaoping\",\"Xiaoyan\",\"Xin\",\"Yael\",\"Yan\",\"Yasuko\",\"Yelena\",\"Yhudiyt\",\"Ying\",\"Yoko\",\"Yong\",\"Yoshie\",\"Yoshiko\",\"Yoshimi\",\"Yu\",\"Yue\",\"Yuko\",\"Yuliya\",\"Yun\",\"Yuval\",\"Zainab\",\"Zandile\",\"Zanele\",\"Zhen\"]}};function wa(e,a){return n(e,a)}function va(e){const a=e?.withAccents??!1,t=e?.gender??wa([\"male\",\"female\"]),i=e?.locale||ba;return n(a?i.withAccents[t]:i.withoutAccents[t],e)}var ka={withAccents:[\"\u00C6bel\u00F8\",\"\u00C6beltoft\",\"\u00C1g\u00FAstsd\u00F3ttir\",\"\u00C1g\u00FAstsson\",\"\u00C1lvarez\",\"\u00C1rnad\u00F3ttir\",\"\u00C1rnason\",\"\u00C1sgeirsd\u00F3ttir\",\"\u00C3shaikh\",\"Bene\u0161\",\"Bene\u0161ov\u00E1\",\"Baldursd\u00F3ttir\",\"Birgisd\u00F3ttir\",\"Bjarnad\u00F3ttir\",\"Bj\u00F6rnsd\u00F3ttir\",\"Bj\u00F6rnsson\",\"B\u00F6ttcher\",\"\u010Cern\u00E1\",\"\u010Cern\u00FD\",\"Ch\u00E1vez\",\"\u00D0eki\u0107\",\"D\u00EDaz\",\"\u00D0or\u00F0i\u0107\",\"Dvo\u0159\u00E1k\",\"Dvo\u0159\u00E1kov\u00E1\",\"Einarsd\u00F3ttir\",\"Fern\u00E1ndez\",\"Fialov\u00E1\",\"F\u00F6rster\",\"Fri\u00F0riksson\",\"Fr\u00F6hlich\",\"Garc\u00EDa\",\"G\u00EDslad\u00F3ttir\",\"G\u00EDslason\",\"G\u00F6bel\",\"G\u00F3mez\",\"Gro\u00DF\",\"Gunnarsd\u00F3ttir\",\"Gu\u00F0j\u00F3nsd\u00F3ttir\",\"Gu\u00F0j\u00F3nsson\",\"Gu\u00F0mundsd\u00F3ttir\",\"Gu\u00F0mundsson\",\"G\u00FCnther\",\"Halld\u00F3rsd\u00F3ttir\",\"Halld\u00F3rsson\",\"Guti\u00E9rrez\",\"Guzm\u00E1n\",\"H\u00E1jek\",\"Haraldsd\u00F3ttir\",\"Har\u00F0ard\u00F3ttir\",\"Har\u00F0arson\",\"Helgad\u00F3ttir\",\"Hern\u00E1ndez\",\"Hauksd\u00F3ttir\",\"Hor\u00E1k\",\"Hor\u00E1kov\u00E1\",\"Jab\u0142o\u0144ski\",\"J\u00E4ger\",\"Jasi\u0144ski\",\"Jim\u00E9nez\",\"J\u00F3hannesd\u00F3ttir\",\"J\u00F3hannesson\",\"J\u00F3hannsd\u00F3ttir\",\"J\u00F3hannsson\",\"J\u00F3nasd\u00F3ttir\",\"J\u00F3nasson\",\"J\u00F3nsd\u00F3ttir\",\"J\u00F3nsson\",\"Kami\u0144ski\",\"Karlsd\u00F3ttir\",\"Kjartansd\u00F3ttir\",\"K\u00F6hler\",\"K\u00F6nig\",\"Koz\u0142owski\",\"Kr\u00E1lov\u00E1\",\"Krej\u010D\u00ED\",\"Kristinsd\u00F3ttir\",\"Kristj\u00E1nsd\u00F3ttir\",\"Kristj\u00E1nsson\",\"Kr\u00FCger\",\"Ku\u010Dera\",\"Ku\u010Derov\u00E1\",\"\u0141api\u0144ski\",\"L\u00F6ffler\",\"L\u00F3pez\",\"\u0141uczak\",\"\u0141ukaszewski\",\"Magn\u00FAsd\u00F3ttir\",\"Magn\u00FAsson\",\"Markov\u00E1\",\"Mart\u00EDnez\",\"Mei\u00DFner\",\"M\u00E9ndez\",\"M\u00F6ller\",\"M\u00FCller\",\"Mu\u00F1oz\",\"Nov\u00E1k\",\"Nov\u00E1kov\u00E1\",\"Novotn\u00E1\",\"Novotn\u00FD\",\"Nu\u00F1ez\",\"N\u00FA\u00F1ez\",\"\u00D8deg\u00E5rd\",\"\u0150hlschl\u00E4gerov\u00E1\",\"\u00D3lafsd\u00F3ttir\",\"\u00D3lafsson\",\"\u0150ll\u00F6sov\u00E1\",\"Olszewski\",\"\u0150ri\",\"\u0150rs\u00E9gi-Z\u00F6lderd\u0151\",\"\u00D3skarsd\u00F3ttir\",\"\u00D3skarsson\",\"\u00D8verg\u00E5rd\",\"\u0150zse\",\"P\u00E1lsd\u00F3ttir\",\"P\u00E1lsson\",\"Paw\u0142owski\",\"Pe\u00F1a\",\"P\u00E9rez\",\"P\u00E9tursd\u00F3ttir\",\"P\u00E9tursson\",\"Pokorn\u00E1\",\"Pokorn\u00FD\",\"Posp\u00ED\u0161il\",\"Posp\u00ED\u0161ilov\u00E1\",\"Proch\u00E1zka\",\"Proch\u00E1zkov\u00E1\",\"Ragnarsd\u00F3ttir\",\"Ram\u00EDrez\",\"R\u00EDos\",\"Rodr\u00EDguez\",\"S\u00E1nchez\",\"Sch\u00E4fer\",\"Schr\u00F6der\",\"Sch\u00FCtz\",\"Sigur\u00F0ard\u00F3ttir\",\"Sigur\u00F0sson\",\"Sigurj\u00F3nsd\u00F3ttir\",\"Sigurj\u00F3nsson\",\"Soko\u0142owski\",\"Stef\u00E1nsd\u00F3ttir\",\"Stef\u00E1nsson\",\"Sveinsd\u00F3ttir\",\"Svobodov\u00E1\",\"Szczepa\u0144ski\",\"Szyma\u0144ski\",\"Urba\u0144ski\",\"\u016Asas\",\"\u016A\u017Eien\",\"V\u00E1squez\",\"Vesel\u00E1\",\"Vesel\u00FD\",\"Wei\u00DF\",\"\u017Bak\",\"\u017D\u00E1kov\u00E1\",\"Zemanov\u00E1\",\"Zieli\u0144ski\",\"\u017Dukauskas\",\"\u017Dukauskien\u0117\",\"\u00DE\u00F3r\u00F0ard\u00F3ttir\",\"\u00DE\u00F3r\u00F0arson\",\"\u00DEorsteinsd\u00F3ttir\",\"\u00DEorsteinsson\"],withoutAccents:[\"Abdi\",\"Abdullahi\",\"Abe\",\"Abubakar\",\"Achieng\",\"Adamczyk\",\"Adamu\",\"Adan\",\"Adebayo\",\"Adhiambo\",\"Adri\",\"Agbaria\",\"Aguilar\",\"Ahmad\",\"Ahmed\",\"Akinyi\",\"Akpan\",\"Ali\",\"Aliev\",\"Aliyu\",\"Allen\",\"Alonso\",\"Alvarez\",\"Amadi\",\"Aminu\",\"Andreev\",\"Andreeva\",\"Ansari\",\"Anyango\",\"Aoki\",\"Arai\",\"Arnarson\",\"Ashknaziy\",\"Atieno\",\"Attias\",\"Audu\",\"Avraham\",\"Ayutthaya\",\"Azulay\",\"Baba\",\"Bai\",\"Bailey\",\"Baker\",\"Bakker\",\"Bala\",\"Baldursson\",\"Baloyi\",\"Baran\",\"Barasa\",\"Barman\",\"Bauer\",\"Becker\",\"Begam\",\"Begum\",\"Behera\",\"Bekher\",\"Bello\",\"Bennett\",\"Ber\",\"Bevan\",\"Bibi\",\"Birgisson\",\"Biswas\",\"Bitton\",\"Bjarnason\",\"Blanco\",\"Blom\",\"Borkowski\",\"Bos\",\"Botha\",\"Bowen\",\"Braun\",\"Brouwer\",\"Brown\",\"Bunma\",\"Bunmi\",\"Bunsi\",\"Buthelezi\",\"Cai\",\"Cano\",\"Cao\",\"Carter\",\"Castillo\",\"Castro\",\"Cele\",\"Ceng\",\"Chaichana\",\"Chand\",\"Chanthara\",\"Chauke\",\"Chebet\",\"Chen\",\"Cheng\",\"Chepkemoi\",\"Cherinsuk\",\"Cheruiyot\",\"Chided\",\"Chmielewski\",\"Chukwu\",\"Clark\",\"Clarke\",\"Coetzee\",\"Cohen\",\"Collins\",\"Cook\",\"Cooper\",\"Cortes\",\"Cruz\",\"Cui\",\"Czarnecki\",\"Dahan\",\"Dai\",\"Das\",\"Dauda\",\"David\",\"Davies\",\"Davis\",\"Dayan\",\"De-Bruijn\",\"De-Graaf\",\"De-Groot\",\"De-Jong\",\"Dekker\",\"Delgado\",\"Deng\",\"Devi\",\"Diaz\",\"Dijkstra\",\"Ding\",\"Dlamini\",\"Dominguez\",\"Dong\",\"Du-Plessis\",\"Dube\",\"Duda\",\"Dudek\",\"Dumont\",\"Edwards\",\"Egorov\",\"Egorova\",\"Einarsson\",\"Elbaz\",\"Eliyahu\",\"Ellis\",\"Emmanuel\",\"Endo\",\"Espinoza\",\"Esteban\",\"Evans\",\"Eze\",\"Fan\",\"Fang\",\"Feldman\",\"Feng\",\"Fernandez\",\"Fiala\",\"Fischer\",\"Flores\",\"Friedman\",\"Frolova\",\"Fu\",\"Fuchs\",\"Fujii\",\"Fujita\",\"Fukuda\",\"Gaby\",\"Gao\",\"Garba\",\"Garcia\",\"Garrido\",\"Garza\",\"Ghosh\",\"Gil\",\"Golan\",\"Goldstein\",\"Gomez\",\"Gonzales\",\"Gonzalez\",\"Goto\",\"Govender\",\"Grabowski\",\"Green\",\"Greenberg\",\"Griffiths\",\"Gu\",\"Guerrero\",\"Gumede\",\"Gunnarsson\",\"Guo\",\"Gupta\",\"Gutierrez\",\"Hahn\",\"Hall\",\"Han\",\"Haraldsson\",\"Harle\",\"Harle-Cowan\",\"Harris\",\"Harrison\",\"Hartmann\",\"Haruna\",\"Hasegawa\",\"Hashimoto\",\"Hasna\",\"Hassan\",\"Hauksson\",\"Hayashi\",\"He\",\"Helgason\",\"Hen\",\"Hendriks\",\"Herbulot\",\"Hernandez\",\"Herrera\",\"Herrmann\",\"Hill\",\"Hoekstra\",\"Hoffmann\",\"Hofmann\",\"Hongthong\",\"Hopkins\",\"Howells\",\"Hu\",\"Huang\",\"Huber\",\"Hughes\",\"Huisman\",\"Hussein\",\"Ibrahim\",\"Idris\",\"Iglesias\",\"Igwe\",\"Ikeda\",\"Inoue\",\"Isa\",\"Isaac\",\"Isah\",\"Ishii\",\"Ishikawa\",\"Ito\",\"Ivanov\",\"Ivanova\",\"Jabarin\",\"Jackson\",\"Jacobs\",\"Jadhav\",\"Jakubowski\",\"James\",\"Jankowski\",\"Jansen\",\"Janssen\",\"Jaworski\",\"Jenkins\",\"Jia\",\"Jiang\",\"Jimenez\",\"Jin\",\"John\",\"Johnson\",\"Jones\",\"Joseph\",\"Juma\",\"Jung\",\"Kaczmarek\",\"Kaiser\",\"Kamau\",\"Karanja\",\"Kariuki\",\"Karlsson\",\"Kato\",\"Katz\",\"Kaur\",\"Keller\",\"Khan\",\"Khatib\",\"Khatoon\",\"Khatun\",\"Khoury\",\"Khoza\",\"Khumalo\",\"Kibet\",\"Kikuchi\",\"Kim\",\"Kimani\",\"Kimura\",\"King\",\"Kjartansson\",\"Klein\",\"Kobayashi\",\"Koch\",\"Koech\",\"Kok\",\"Kondo\",\"Kongkaeo\",\"Koster\",\"Kovalenko\",\"Kowalczyk\",\"Kowalski\",\"Kozlov\",\"Kozlova\",\"Krause\",\"Krawczyk\",\"Kristinsson\",\"Kubiak\",\"Kucharski\",\"Kuipers\",\"Kumar\",\"Kumari\",\"Kuznetsov\",\"Kuznetsova\",\"Kwiatkowski\",\"Lal\",\"Lang\",\"Langat\",\"Lange\",\"Lavyan\",\"Lawal\",\"Lebedeva\",\"Lee\",\"Lehmann\",\"Levy\",\"Lewandowski\",\"Lewis\",\"Li\",\"Liang\",\"Liao\",\"Lim\",\"Lin\",\"Lis\",\"Liu\",\"Llewellyn\",\"Lloyd\",\"Lopez\",\"Lozano\",\"Lu\",\"Luo\",\"Ma\",\"Maas\",\"Mabaso\",\"Macharia\",\"Maciejewski\",\"Maeda\",\"Magomedov\",\"Mahagna\",\"Mahato\",\"Mahlangu\",\"Mahto\",\"Maier\",\"Maina\",\"Majewski\",\"Makarov\",\"Makarova\",\"Malinowski\",\"Malkah\",\"Maluleke\",\"Mandal\",\"Marciniak\",\"Marek\",\"Marin\",\"Martin\",\"Martinez\",\"Masarweh\",\"Maseko\",\"Mathebula\",\"Matsumoto\",\"Matthews\",\"Mayer\",\"Mazibuko\",\"Mazur\",\"Mazurek\",\"Mbatha\",\"Medina\",\"Meier\",\"Meijer\",\"Mendoza\",\"Meng\",\"Meyer\",\"Mhamid\",\"Mhlongo\",\"Michalak\",\"Michalski\",\"Mikhaylov\",\"Mikhaylova\",\"Mishra\",\"Mitchell\",\"Mizrahi\",\"Mkhize\",\"Mofokeng\",\"Mohamed\",\"Mohammed\",\"Mokoena\",\"Molefe\",\"Molina\",\"Mondal\",\"Moore\",\"Mor\",\"Morales\",\"Moreno\",\"Morgan\",\"Mori\",\"Morozov\",\"Morozova\",\"Morris\",\"Moshe\",\"Mthembu\",\"Mthethwa\",\"Mtshali\",\"Muhammad\",\"Muhammadu\",\"Muhammed\",\"Mulder\",\"Murakami\",\"Musa\",\"Mustapha\",\"Muthoni\",\"Mutua\",\"Mutuku\",\"Mwangi\",\"Naidoo\",\"Nakajima\",\"Nakamura\",\"Nakano\",\"Navarro\",\"Nayak\",\"Ndlovu\",\"Nel\",\"Neumann\",\"Ngcobo\",\"Ngobeni\",\"Ngubane\",\"Nguyen\",\"Ngwenya\",\"Nikitina\",\"Nikolaev\",\"Nikolaeva\",\"Njeri\",\"Njoroge\",\"Njuguna\",\"Nkosi\",\"Novikov\",\"Novikova\",\"Nowak\",\"Nowakowski\",\"Nowicki\",\"Ntuli\",\"Nxumalo\",\"Nyambura\",\"Oakley\",\"Ochieng\",\"Odhiambo\",\"Ogawa\",\"Ohana\",\"Ohayon\",\"Ojo\",\"Okada\",\"Okafor\",\"Okeke\",\"Okon\",\"Okoro\",\"Okoth\",\"Omar\",\"Omer\",\"Omondi\",\"Ono\",\"Onyango\",\"Ortega\",\"Ortiz\",\"Ostrowski\",\"Ota\",\"Otieno\",\"Ouma\",\"Owen\",\"Owino\",\"Pal\",\"Pan\",\"Panya\",\"Paramar\",\"Parker\",\"Parry\",\"Paswan\",\"Patel\",\"Patil\",\"Pavlov\",\"Pavlova\",\"Pawlak\",\"Peeters\",\"Peng\",\"Peretz\",\"Perez\",\"Peter\",\"Peters\",\"Petrov\",\"Petrova\",\"Pfeiffer\",\"Phillips\",\"Photsi\",\"Pietrzak\",\"Pillay\",\"Piotrowski\",\"Popov\",\"Popova\",\"Powell\",\"Prasad\",\"Pretorius\",\"Price\",\"Prieto\",\"Prins\",\"Pritchard\",\"Pugh\",\"Qiu\",\"Rabiu\",\"Radebe\",\"Ragnarsson\",\"Ram\",\"Ramirez\",\"Ramos\",\"Rani\",\"Rathod\",\"Ray\",\"Rees\",\"Ren\",\"Reuben\",\"Reyes\",\"Richards\",\"Richardson\",\"Richter\",\"Rivera\",\"Roberts\",\"Robinson\",\"Rodriguez\",\"Rogers\",\"Romanov\",\"Romanova\",\"Romero\",\"Rosenberg\",\"Rotich\",\"Rowlands\",\"Roy\",\"Rubio\",\"Ruiz\",\"Rungrueang\",\"Rumbelow\",\"Rutkowski\",\"Sadowski\",\"Saeli\",\"Saelim\",\"Saengthong\",\"Saetan\",\"Saetang\",\"Saeueng\",\"Sah\",\"Saha\",\"Sahu\",\"Saidu\",\"Saito\",\"Sakai\",\"Sakamoto\",\"Salazar\",\"Salisu\",\"Samuel\",\"Sanchez\",\"Sangthong\",\"Sani\",\"Santiago\",\"Santos\",\"Sanz\",\"Sarkar\",\"Sasaki\",\"Sato\",\"Sawicki\",\"Schmid\",\"Schmidt\",\"Schmitt\",\"Schmitz\",\"Schneider\",\"Scholz\",\"Schouten\",\"Schulz\",\"Schulze\",\"Schwartz\",\"Schwarz\",\"Scott\",\"Segel\",\"Sekh\",\"Sergeeva\",\"Serrano\",\"Shaikh\",\"Shalom\",\"Shapiro\",\"Sharabi\",\"Sharma\",\"Shaw\",\"Shehu\",\"Shemesh\",\"Shevchenko\",\"Shi\",\"Shimizu\",\"Sibiya\",\"Sichantha\",\"Sikora\",\"Simiyu\",\"Singh\",\"Sisuk\",\"Sithole\",\"Sitwat\",\"Smee\",\"Smirnov\",\"Smirnova\",\"Smit\",\"Smith\",\"Smits\",\"Sokolov\",\"Sokolova\",\"Sombun\",\"Song\",\"Soto\",\"Smoakley\",\"Starr\",\"Stepanov\",\"Stepanova\",\"Su\",\"Suad\",\"Suarez\",\"Suissa\",\"Sukkasem\",\"Sulaiman\",\"Suleiman\",\"Sun\",\"Sunday\",\"Suwan\",\"Suzuki\",\"Sveinsson\",\"Svoboda\",\"Szewczyk\",\"Takahashi\",\"Takeuchi\",\"Tal\",\"Tan\",\"Tanaka\",\"Tang\",\"Taylor\",\"Thakur\",\"Thomas\",\"Thompson\",\"Thongdi\",\"Thongkham\",\"Thongsuk\",\"Tian\",\"Tomaszewski\",\"Torres\",\"Tshabalala\",\"Turner\",\"Udo\",\"Ueda\",\"Umar\",\"Umaru\",\"Usman\",\"Vaknin\",\"Valdez\",\"Van-Beek\",\"Van-Dam\",\"Van-den-Berg\",\"Van-der-Heijden\",\"Van-der-Linden\",\"Van-Dijk\",\"Vargas\",\"Vasilev\",\"Vasileva\",\"Vazquez\",\"Vega\",\"Venter\",\"Verhoeven\",\"Vermeulen\",\"Visser\",\"Volkov\",\"Volkova\",\"Vos\",\"Wafula\",\"Wagner\",\"Wairimu\",\"Walczak\",\"Walker\",\"Walter\",\"Walters\",\"Wambua\",\"Wambui\",\"Wang\",\"Wangui\",\"Wanjala\",\"Wanjiku\",\"Ward\",\"Watanabe\",\"Watkins\",\"Watson\",\"Weber\",\"Wei\",\"Wekesa\",\"Wen\",\"Werner\",\"White\",\"Wieczorek\",\"Wilk\",\"Willems\",\"Williams\",\"Wilson\",\"Witkowski\",\"Wojciechowski\",\"Wolf\",\"Wood\",\"Wright\",\"Wu\",\"Xiao\",\"Xie\",\"Xu\",\"Yaakv\",\"Yadav\",\"Yahaya\",\"Yakovleva\",\"Yakubu\",\"Yamada\",\"Yamaguchi\",\"Yamamoto\",\"Yamashita\",\"Yamazaki\",\"Yan\",\"Yang\",\"Yao\",\"Ye\",\"Yin\",\"Yosef\",\"Yoshida\",\"Young\",\"Yu\",\"Yuan\",\"Yusuf\",\"Zajac\",\"Zakharov\",\"Zakharova\",\"Zalewski\",\"Zawadzki\",\"Zaytseva\",\"Zhang\",\"Zhao\",\"Zheng\",\"Zhong\",\"Zhou\",\"Zhu\",\"Zimmermann\",\"Zoabi\",\"Zulu\",\"Zwane\"]};function Sa(e){const a=e?.withAccents??v(),t=e?.locale||ka;return n(a?t.withAccents:t.withoutAccents,e)}function Ca(e){return n((()=>{const a=e?.provider??fa(),t=function(e){let a=\"\";const t=e?.firstName??va({withAccents:!1}),i=e?.lastName??Sa({withAccents:!1});e?.nameSeparator?\"none\"!==e.nameSeparator&&(a=e.nameSeparator):a=n([\".\",\"-\",\"_\",\"+\",\"\"]);let o=`${t} ${i}`.replace(\" \",a);return v()&&(o+=k({min:1,max:1e3})),o.toLowerCase()}(e);return`${t}@${a}.${e?.suffix??ca()}`}),e)}var Aa=[\"\uD83D\uDE00\",\"\uD83D\uDE03\",\"\uD83D\uDE04\",\"\uD83D\uDE01\",\"\uD83D\uDE06\",\"\uD83D\uDE05\",\"\uD83E\uDD23\",\"\uD83D\uDE02\",\"\uD83D\uDE42\",\"\uD83D\uDE43\",\"\uD83D\uDE09\",\"\uD83D\uDE0A\",\"\uD83D\uDE07\",\"\uD83E\uDD70\",\"\uD83D\uDE0D\",\"\uD83E\uDD29\",\"\uD83D\uDE18\",\"\uD83D\uDE17\",\"\u263A\uFE0F\",\"\uD83D\uDE1A\",\"\uD83D\uDE19\",\"\uD83E\uDD72\",\"\uD83D\uDE0B\",\"\uD83D\uDE1B\",\"\uD83D\uDE1C\",\"\uD83E\uDD2A\",\"\uD83D\uDE1D\",\"\uD83E\uDD11\",\"\uD83E\uDD17\",\"\uD83E\uDD2D\",\"\uD83E\uDD2B\",\"\uD83E\uDD14\",\"\uD83E\uDD10\",\"\uD83E\uDD28\",\"\uD83D\uDE10\",\"\uD83D\uDE11\",\"\uD83D\uDE36\",\"\uD83D\uDE36\u200D\uD83C\uDF2B\uFE0F\",\"\uD83D\uDE0F\",\"\uD83D\uDE12\",\"\uD83D\uDE44\",\"\uD83D\uDE2C\",\"\uD83D\uDE2E\u200D\uD83D\uDCA8\",\"\uD83E\uDD25\",\"\uD83D\uDE0C\",\"\uD83D\uDE14\",\"\uD83D\uDE2A\",\"\uD83E\uDD24\",\"\uD83D\uDE34\",\"\uD83D\uDE37\",\"\uD83E\uDD12\",\"\uD83E\uDD15\",\"\uD83E\uDD22\",\"\uD83E\uDD2E\",\"\uD83E\uDD27\",\"\uD83E\uDD75\",\"\uD83E\uDD76\",\"\uD83E\uDD74\",\"\uD83D\uDE35\",\"\uD83D\uDE35\u200D\uD83D\uDCAB\",\"\uD83E\uDD2F\",\"\uD83E\uDD20\",\"\uD83E\uDD73\",\"\uD83E\uDD78\",\"\uD83D\uDE0E\",\"\uD83E\uDD13\",\"\uD83E\uDDD0\",\"\uD83D\uDE15\",\"\uD83D\uDE1F\",\"\uD83D\uDE41\",\"\u2639\uFE0F\",\"\uD83D\uDE2E\",\"\uD83D\uDE2F\",\"\uD83D\uDE32\",\"\uD83D\uDE33\",\"\uD83E\uDD7A\",\"\uD83D\uDE26\",\"\uD83D\uDE27\",\"\uD83D\uDE28\",\"\uD83D\uDE30\",\"\uD83D\uDE25\",\"\uD83D\uDE22\",\"\uD83D\uDE2D\",\"\uD83D\uDE31\",\"\uD83D\uDE16\",\"\uD83D\uDE23\",\"\uD83D\uDE1E\",\"\uD83D\uDE13\",\"\uD83D\uDE29\",\"\uD83D\uDE2B\",\"\uD83E\uDD71\",\"\uD83D\uDE24\",\"\uD83D\uDE21\",\"\uD83D\uDE20\",\"\uD83E\uDD2C\",\"\uD83D\uDE08\",\"\uD83D\uDC7F\",\"\uD83D\uDC80\",\"\u2620\uFE0F\",\"\uD83D\uDCA9\",\"\uD83E\uDD21\",\"\uD83D\uDC79\",\"\uD83D\uDC7A\",\"\uD83D\uDC7B\",\"\uD83D\uDC7D\",\"\uD83D\uDC7E\",\"\uD83E\uDD16\",\"\uD83D\uDE3A\",\"\uD83D\uDE38\",\"\uD83D\uDE39\",\"\uD83D\uDE3B\",\"\uD83D\uDE3C\",\"\uD83D\uDE3D\",\"\uD83D\uDE40\",\"\uD83D\uDE3F\",\"\uD83D\uDE3E\",\"\uD83D\uDE48\",\"\uD83D\uDE49\",\"\uD83D\uDE4A\",\"\uD83D\uDC8B\",\"\uD83D\uDC8C\",\"\uD83D\uDC98\",\"\uD83D\uDC9D\",\"\uD83D\uDC96\",\"\uD83D\uDC97\",\"\uD83D\uDC93\",\"\uD83D\uDC9E\",\"\uD83D\uDC95\",\"\uD83D\uDC9F\",\"\u2763\uFE0F\",\"\uD83D\uDC94\",\"\u2764\uFE0F\u200D\uD83D\uDD25\",\"\u2764\uFE0F\u200D\uD83E\uDE79\",\"\u2764\uFE0F\",\"\uD83E\uDDE1\",\"\uD83D\uDC9B\",\"\uD83D\uDC9A\",\"\uD83D\uDC99\",\"\uD83D\uDC9C\",\"\uD83E\uDD0E\",\"\uD83D\uDDA4\",\"\uD83E\uDD0D\",\"\uD83D\uDCAF\",\"\uD83D\uDCA2\",\"\uD83D\uDCA5\",\"\uD83D\uDCAB\",\"\uD83D\uDCA6\",\"\uD83D\uDCA8\",\"\uD83D\uDD73\uFE0F\",\"\uD83D\uDCA3\",\"\uD83D\uDCAC\",\"\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8\uFE0F\",\"\uD83D\uDDE8\uFE0F\",\"\uD83D\uDDEF\uFE0F\",\"\uD83D\uDCAD\",\"\uD83D\uDCA4\",\"\uD83D\uDC4B\",\"\uD83E\uDD1A\",\"\uD83D\uDD90\uFE0F\",\"\u270B\",\"\uD83D\uDD96\",\"\uD83D\uDC4C\",\"\uD83E\uDD0C\",\"\uD83E\uDD0F\",\"\u270C\uFE0F\",\"\uD83E\uDD1E\",\"\uD83E\uDD1F\",\"\uD83E\uDD18\",\"\uD83E\uDD19\",\"\uD83D\uDC48\",\"\uD83D\uDC49\",\"\uD83D\uDC46\",\"\uD83D\uDD95\",\"\uD83D\uDC47\",\"\u261D\uFE0F\",\"\uD83D\uDC4D\",\"\uD83D\uDC4E\",\"\u270A\",\"\uD83D\uDC4A\",\"\uD83E\uDD1B\",\"\uD83E\uDD1C\",\"\uD83D\uDC4F\",\"\uD83D\uDE4C\",\"\uD83D\uDC50\",\"\uD83E\uDD32\",\"\uD83E\uDD1D\",\"\uD83D\uDE4F\",\"\u270D\uFE0F\",\"\uD83D\uDC85\",\"\uD83E\uDD33\",\"\uD83D\uDCAA\",\"\uD83E\uDDBE\",\"\uD83E\uDDBF\",\"\uD83E\uDDB5\",\"\uD83E\uDDB6\",\"\uD83D\uDC42\",\"\uD83E\uDDBB\",\"\uD83D\uDC43\",\"\uD83E\uDDE0\",\"\uD83E\uDEC0\",\"\uD83E\uDEC1\",\"\uD83E\uDDB7\",\"\uD83E\uDDB4\",\"\uD83D\uDC40\",\"\uD83D\uDC41\uFE0F\",\"\uD83D\uDC45\",\"\uD83D\uDC44\",\"\uD83D\uDC76\",\"\uD83E\uDDD2\",\"\uD83D\uDC66\",\"\uD83D\uDC67\",\"\uD83E\uDDD1\",\"\uD83D\uDC71\",\"\uD83D\uDC68\",\"\uD83E\uDDD4\",\"\uD83E\uDDD4\u200D\u2642\uFE0F\",\"\uD83E\uDDD4\u200D\u2640\uFE0F\",\"\uD83D\uDC68\u200D\uD83E\uDDB0\",\"\uD83D\uDC68\u200D\uD83E\uDDB1\",\"\uD83D\uDC68\u200D\uD83E\uDDB3\",\"\uD83D\uDC68\u200D\uD83E\uDDB2\",\"\uD83D\uDC69\",\"\uD83D\uDC69\u200D\uD83E\uDDB0\",\"\uD83E\uDDD1\u200D\uD83E\uDDB0\",\"\uD83D\uDC69\u200D\uD83E\uDDB1\",\"\uD83E\uDDD1\u200D\uD83E\uDDB1\",\"\uD83D\uDC69\u200D\uD83E\uDDB3\",\"\uD83E\uDDD1\u200D\uD83E\uDDB3\",\"\uD83D\uDC69\u200D\uD83E\uDDB2\",\"\uD83E\uDDD1\u200D\uD83E\uDDB2\",\"\uD83D\uDC71\u200D\u2640\uFE0F\",\"\uD83D\uDC71\u200D\u2642\uFE0F\",\"\uD83E\uDDD3\",\"\uD83D\uDC74\",\"\uD83D\uDC75\",\"\uD83D\uDE4D\",\"\uD83D\uDE4D\u200D\u2642\uFE0F\",\"\uD83D\uDE4D\u200D\u2640\uFE0F\",\"\uD83D\uDE4E\",\"\uD83D\uDE4E\u200D\u2642\uFE0F\",\"\uD83D\uDE4E\u200D\u2640\uFE0F\",\"\uD83D\uDE45\",\"\uD83D\uDE45\u200D\u2642\uFE0F\",\"\uD83D\uDE45\u200D\u2640\uFE0F\",\"\uD83D\uDE46\",\"\uD83D\uDE46\u200D\u2642\uFE0F\",\"\uD83D\uDE46\u200D\u2640\uFE0F\",\"\uD83D\uDC81\",\"\uD83D\uDC81\u200D\u2642\uFE0F\",\"\uD83D\uDC81\u200D\u2640\uFE0F\",\"\uD83D\uDE4B\",\"\uD83D\uDE4B\u200D\u2642\uFE0F\",\"\uD83D\uDE4B\u200D\u2640\uFE0F\",\"\uD83E\uDDCF\",\"\uD83E\uDDCF\u200D\u2642\uFE0F\",\"\uD83E\uDDCF\u200D\u2640\uFE0F\",\"\uD83D\uDE47\",\"\uD83D\uDE47\u200D\u2642\uFE0F\",\"\uD83D\uDE47\u200D\u2640\uFE0F\",\"\uD83E\uDD26\",\"\uD83E\uDD26\u200D\u2642\uFE0F\",\"\uD83E\uDD26\u200D\u2640\uFE0F\",\"\uD83E\uDD37\",\"\uD83E\uDD37\u200D\u2642\uFE0F\",\"\uD83E\uDD37\u200D\u2640\uFE0F\",\"\uD83E\uDDD1\u200D\u2695\uFE0F\",\"\uD83D\uDC68\u200D\u2695\uFE0F\",\"\uD83D\uDC69\u200D\u2695\uFE0F\",\"\uD83E\uDDD1\u200D\uD83C\uDF93\",\"\uD83D\uDC68\u200D\uD83C\uDF93\",\"\uD83D\uDC69\u200D\uD83C\uDF93\",\"\uD83E\uDDD1\u200D\uD83C\uDFEB\",\"\uD83D\uDC68\u200D\uD83C\uDFEB\",\"\uD83D\uDC69\u200D\uD83C\uDFEB\",\"\uD83E\uDDD1\u200D\u2696\uFE0F\",\"\uD83D\uDC68\u200D\u2696\uFE0F\",\"\uD83D\uDC69\u200D\u2696\uFE0F\",\"\uD83E\uDDD1\u200D\uD83C\uDF3E\",\"\uD83D\uDC68\u200D\uD83C\uDF3E\",\"\uD83D\uDC69\u200D\uD83C\uDF3E\",\"\uD83E\uDDD1\u200D\uD83C\uDF73\",\"\uD83D\uDC68\u200D\uD83C\uDF73\",\"\uD83D\uDC69\u200D\uD83C\uDF73\",\"\uD83E\uDDD1\u200D\uD83D\uDD27\",\"\uD83D\uDC68\u200D\uD83D\uDD27\",\"\uD83D\uDC69\u200D\uD83D\uDD27\",\"\uD83E\uDDD1\u200D\uD83C\uDFED\",\"\uD83D\uDC68\u200D\uD83C\uDFED\",\"\uD83D\uDC69\u200D\uD83C\uDFED\",\"\uD83E\uDDD1\u200D\uD83D\uDCBC\",\"\uD83D\uDC68\u200D\uD83D\uDCBC\",\"\uD83D\uDC69\u200D\uD83D\uDCBC\",\"\uD83E\uDDD1\u200D\uD83D\uDD2C\",\"\uD83D\uDC68\u200D\uD83D\uDD2C\",\"\uD83D\uDC69\u200D\uD83D\uDD2C\",\"\uD83E\uDDD1\u200D\uD83D\uDCBB\",\"\uD83D\uDC68\u200D\uD83D\uDCBB\",\"\uD83D\uDC69\u200D\uD83D\uDCBB\",\"\uD83E\uDDD1\u200D\uD83C\uDFA4\",\"\uD83D\uDC68\u200D\uD83C\uDFA4\",\"\uD83D\uDC69\u200D\uD83C\uDFA4\",\"\uD83E\uDDD1\u200D\uD83C\uDFA8\",\"\uD83D\uDC68\u200D\uD83C\uDFA8\",\"\uD83D\uDC69\u200D\uD83C\uDFA8\",\"\uD83E\uDDD1\u200D\u2708\uFE0F\",\"\uD83D\uDC68\u200D\u2708\uFE0F\",\"\uD83D\uDC69\u200D\u2708\uFE0F\",\"\uD83E\uDDD1\u200D\uD83D\uDE80\",\"\uD83D\uDC68\u200D\uD83D\uDE80\",\"\uD83D\uDC69\u200D\uD83D\uDE80\",\"\uD83E\uDDD1\u200D\uD83D\uDE92\",\"\uD83D\uDC68\u200D\uD83D\uDE92\",\"\uD83D\uDC69\u200D\uD83D\uDE92\",\"\uD83D\uDC6E\",\"\uD83D\uDC6E\u200D\u2642\uFE0F\",\"\uD83D\uDC6E\u200D\u2640\uFE0F\",\"\uD83D\uDD75\uFE0F\",\"\uD83D\uDD75\uFE0F\u200D\u2642\uFE0F\",\"\uD83D\uDD75\uFE0F\u200D\u2640\uFE0F\",\"\uD83D\uDC82\",\"\uD83D\uDC82\u200D\u2642\uFE0F\",\"\uD83D\uDC82\u200D\u2640\uFE0F\",\"\uD83E\uDD77\",\"\uD83D\uDC77\",\"\uD83D\uDC77\u200D\u2642\uFE0F\",\"\uD83D\uDC77\u200D\u2640\uFE0F\",\"\uD83E\uDD34\",\"\uD83D\uDC78\",\"\uD83D\uDC73\",\"\uD83D\uDC73\u200D\u2642\uFE0F\",\"\uD83D\uDC73\u200D\u2640\uFE0F\",\"\uD83D\uDC72\",\"\uD83E\uDDD5\",\"\uD83E\uDD35\",\"\uD83E\uDD35\u200D\u2642\uFE0F\",\"\uD83E\uDD35\u200D\u2640\uFE0F\",\"\uD83D\uDC70\",\"\uD83D\uDC70\u200D\u2642\uFE0F\",\"\uD83D\uDC70\u200D\u2640\uFE0F\",\"\uD83E\uDD30\",\"\uD83E\uDD31\",\"\uD83D\uDC69\u200D\uD83C\uDF7C\",\"\uD83D\uDC68\u200D\uD83C\uDF7C\",\"\uD83E\uDDD1\u200D\uD83C\uDF7C\",\"\uD83D\uDC7C\",\"\uD83C\uDF85\",\"\uD83E\uDD36\",\"\uD83E\uDDD1\u200D\uD83C\uDF84\",\"\uD83E\uDDB8\",\"\uD83E\uDDB8\u200D\u2642\uFE0F\",\"\uD83E\uDDB8\u200D\u2640\uFE0F\",\"\uD83E\uDDB9\",\"\uD83E\uDDB9\u200D\u2642\uFE0F\",\"\uD83E\uDDB9\u200D\u2640\uFE0F\",\"\uD83E\uDDD9\",\"\uD83E\uDDD9\u200D\u2642\uFE0F\",\"\uD83E\uDDD9\u200D\u2640\uFE0F\",\"\uD83E\uDDDA\",\"\uD83E\uDDDA\u200D\u2642\uFE0F\",\"\uD83E\uDDDA\u200D\u2640\uFE0F\",\"\uD83E\uDDDB\",\"\uD83E\uDDDB\u200D\u2642\uFE0F\",\"\uD83E\uDDDB\u200D\u2640\uFE0F\",\"\uD83E\uDDDC\",\"\uD83E\uDDDC\u200D\u2642\uFE0F\",\"\uD83E\uDDDC\u200D\u2640\uFE0F\",\"\uD83E\uDDDD\",\"\uD83E\uDDDD\u200D\u2642\uFE0F\",\"\uD83E\uDDDD\u200D\u2640\uFE0F\",\"\uD83E\uDDDE\",\"\uD83E\uDDDE\u200D\u2642\uFE0F\",\"\uD83E\uDDDE\u200D\u2640\uFE0F\",\"\uD83E\uDDDF\",\"\uD83E\uDDDF\u200D\u2642\uFE0F\",\"\uD83E\uDDDF\u200D\u2640\uFE0F\",\"\uD83D\uDC86\",\"\uD83D\uDC86\u200D\u2642\uFE0F\",\"\uD83D\uDC86\u200D\u2640\uFE0F\",\"\uD83D\uDC87\",\"\uD83D\uDC87\u200D\u2642\uFE0F\",\"\uD83D\uDC87\u200D\u2640\uFE0F\",\"\uD83D\uDEB6\",\"\uD83D\uDEB6\u200D\u2642\uFE0F\",\"\uD83D\uDEB6\u200D\u2640\uFE0F\",\"\uD83E\uDDCD\",\"\uD83E\uDDCD\u200D\u2642\uFE0F\",\"\uD83E\uDDCD\u200D\u2640\uFE0F\",\"\uD83E\uDDCE\",\"\uD83E\uDDCE\u200D\u2642\uFE0F\",\"\uD83E\uDDCE\u200D\u2640\uFE0F\",\"\uD83E\uDDD1\u200D\uD83E\uDDAF\",\"\uD83D\uDC68\u200D\uD83E\uDDAF\",\"\uD83D\uDC69\u200D\uD83E\uDDAF\",\"\uD83E\uDDD1\u200D\uD83E\uDDBC\",\"\uD83D\uDC68\u200D\uD83E\uDDBC\",\"\uD83D\uDC69\u200D\uD83E\uDDBC\",\"\uD83E\uDDD1\u200D\uD83E\uDDBD\",\"\uD83D\uDC68\u200D\uD83E\uDDBD\",\"\uD83D\uDC69\u200D\uD83E\uDDBD\",\"\uD83C\uDFC3\",\"\uD83C\uDFC3\u200D\u2642\uFE0F\",\"\uD83C\uDFC3\u200D\u2640\uFE0F\",\"\uD83D\uDC83\",\"\uD83D\uDD7A\",\"\uD83D\uDD74\uFE0F\",\"\uD83D\uDC6F\",\"\uD83D\uDC6F\u200D\u2642\uFE0F\",\"\uD83D\uDC6F\u200D\u2640\uFE0F\",\"\uD83E\uDDD6\",\"\uD83E\uDDD6\u200D\u2642\uFE0F\",\"\uD83E\uDDD6\u200D\u2640\uFE0F\",\"\uD83E\uDDD7\",\"\uD83E\uDDD7\u200D\u2642\uFE0F\",\"\uD83E\uDDD7\u200D\u2640\uFE0F\",\"\uD83E\uDD3A\",\"\uD83C\uDFC7\",\"\u26F7\uFE0F\",\"\uD83C\uDFC2\",\"\uD83C\uDFCC\uFE0F\",\"\uD83C\uDFCC\uFE0F\u200D\u2642\uFE0F\",\"\uD83C\uDFCC\uFE0F\u200D\u2640\uFE0F\",\"\uD83C\uDFC4\",\"\uD83C\uDFC4\u200D\u2642\uFE0F\",\"\uD83C\uDFC4\u200D\u2640\uFE0F\",\"\uD83D\uDEA3\",\"\uD83D\uDEA3\u200D\u2642\uFE0F\",\"\uD83D\uDEA3\u200D\u2640\uFE0F\",\"\uD83C\uDFCA\",\"\uD83C\uDFCA\u200D\u2642\uFE0F\",\"\uD83C\uDFCA\u200D\u2640\uFE0F\",\"\u26F9\uFE0F\",\"\u26F9\uFE0F\u200D\u2642\uFE0F\",\"\u26F9\uFE0F\u200D\u2640\uFE0F\",\"\uD83C\uDFCB\uFE0F\",\"\uD83C\uDFCB\uFE0F\u200D\u2642\uFE0F\",\"\uD83C\uDFCB\uFE0F\u200D\u2640\uFE0F\",\"\uD83D\uDEB4\",\"\uD83D\uDEB4\u200D\u2642\uFE0F\",\"\uD83D\uDEB4\u200D\u2640\uFE0F\",\"\uD83D\uDEB5\",\"\uD83D\uDEB5\u200D\u2642\uFE0F\",\"\uD83D\uDEB5\u200D\u2640\uFE0F\",\"\uD83E\uDD38\",\"\uD83E\uDD38\u200D\u2642\uFE0F\",\"\uD83E\uDD38\u200D\u2640\uFE0F\",\"\uD83E\uDD3C\",\"\uD83E\uDD3C\u200D\u2642\uFE0F\",\"\uD83E\uDD3C\u200D\u2640\uFE0F\",\"\uD83E\uDD3D\",\"\uD83E\uDD3D\u200D\u2642\uFE0F\",\"\uD83E\uDD3D\u200D\u2640\uFE0F\",\"\uD83E\uDD3E\",\"\uD83E\uDD3E\u200D\u2642\uFE0F\",\"\uD83E\uDD3E\u200D\u2640\uFE0F\",\"\uD83E\uDD39\",\"\uD83E\uDD39\u200D\u2642\uFE0F\",\"\uD83E\uDD39\u200D\u2640\uFE0F\",\"\uD83E\uDDD8\",\"\uD83E\uDDD8\u200D\u2642\uFE0F\",\"\uD83E\uDDD8\u200D\u2640\uFE0F\",\"\uD83D\uDEC0\",\"\uD83D\uDECC\",\"\uD83E\uDDD1\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1\",\"\uD83D\uDC6D\",\"\uD83D\uDC6B\",\"\uD83D\uDC6C\",\"\uD83D\uDC8F\",\"\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\",\"\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\",\"\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC69\",\"\uD83D\uDC91\",\"\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC68\",\"\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC68\",\"\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69\",\"\uD83D\uDC6A\",\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66\",\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\",\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66\",\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66\",\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67\",\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66\",\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\",\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66\",\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66\u200D\uD83D\uDC66\",\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67\",\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\",\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\",\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66\",\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66\",\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67\",\"\uD83D\uDC68\u200D\uD83D\uDC66\",\"\uD83D\uDC68\u200D\uD83D\uDC66\u200D\uD83D\uDC66\",\"\uD83D\uDC68\u200D\uD83D\uDC67\",\"\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66\",\"\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67\",\"\uD83D\uDC69\u200D\uD83D\uDC66\",\"\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66\",\"\uD83D\uDC69\u200D\uD83D\uDC67\",\"\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66\",\"\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67\",\"\uD83D\uDDE3\uFE0F\",\"\uD83D\uDC64\",\"\uD83D\uDC65\",\"\uD83E\uDEC2\",\"\uD83D\uDC63\",\"\uD83D\uDC35\",\"\uD83D\uDC12\",\"\uD83E\uDD8D\",\"\uD83E\uDDA7\",\"\uD83D\uDC36\",\"\uD83D\uDC15\",\"\uD83E\uDDAE\",\"\uD83D\uDC15\u200D\uD83E\uDDBA\",\"\uD83D\uDC29\",\"\uD83D\uDC3A\",\"\uD83E\uDD8A\",\"\uD83E\uDD9D\",\"\uD83D\uDC31\",\"\uD83D\uDC08\",\"\uD83D\uDC08\u200D\u2B1B\",\"\uD83E\uDD81\",\"\uD83D\uDC2F\",\"\uD83D\uDC05\",\"\uD83D\uDC06\",\"\uD83D\uDC34\",\"\uD83D\uDC0E\",\"\uD83E\uDD84\",\"\uD83E\uDD93\",\"\uD83E\uDD8C\",\"\uD83E\uDDAC\",\"\uD83D\uDC2E\",\"\uD83D\uDC02\",\"\uD83D\uDC03\",\"\uD83D\uDC04\",\"\uD83D\uDC37\",\"\uD83D\uDC16\",\"\uD83D\uDC17\",\"\uD83D\uDC3D\",\"\uD83D\uDC0F\",\"\uD83D\uDC11\",\"\uD83D\uDC10\",\"\uD83D\uDC2A\",\"\uD83D\uDC2B\",\"\uD83E\uDD99\",\"\uD83E\uDD92\",\"\uD83D\uDC18\",\"\uD83E\uDDA3\",\"\uD83E\uDD8F\",\"\uD83E\uDD9B\",\"\uD83D\uDC2D\",\"\uD83D\uDC01\",\"\uD83D\uDC00\",\"\uD83D\uDC39\",\"\uD83D\uDC30\",\"\uD83D\uDC07\",\"\uD83D\uDC3F\uFE0F\",\"\uD83E\uDDAB\",\"\uD83E\uDD94\",\"\uD83E\uDD87\",\"\uD83D\uDC3B\",\"\uD83D\uDC3B\u200D\u2744\uFE0F\",\"\uD83D\uDC28\",\"\uD83D\uDC3C\",\"\uD83E\uDDA5\",\"\uD83E\uDDA6\",\"\uD83E\uDDA8\",\"\uD83E\uDD98\",\"\uD83E\uDDA1\",\"\uD83D\uDC3E\",\"\uD83E\uDD83\",\"\uD83D\uDC14\",\"\uD83D\uDC13\",\"\uD83D\uDC23\",\"\uD83D\uDC24\",\"\uD83D\uDC25\",\"\uD83D\uDC26\",\"\uD83D\uDC27\",\"\uD83D\uDD4A\uFE0F\",\"\uD83E\uDD85\",\"\uD83E\uDD86\",\"\uD83E\uDDA2\",\"\uD83E\uDD89\",\"\uD83E\uDDA4\",\"\uD83E\uDEB6\",\"\uD83E\uDDA9\",\"\uD83E\uDD9A\",\"\uD83E\uDD9C\",\"\uD83D\uDC38\",\"\uD83D\uDC0A\",\"\uD83D\uDC22\",\"\uD83E\uDD8E\",\"\uD83D\uDC0D\",\"\uD83D\uDC32\",\"\uD83D\uDC09\",\"\uD83E\uDD95\",\"\uD83E\uDD96\",\"\uD83D\uDC33\",\"\uD83D\uDC0B\",\"\uD83D\uDC2C\",\"\uD83E\uDDAD\",\"\uD83D\uDC1F\",\"\uD83D\uDC20\",\"\uD83D\uDC21\",\"\uD83E\uDD88\",\"\uD83D\uDC19\",\"\uD83D\uDC1A\",\"\uD83D\uDC0C\",\"\uD83E\uDD8B\",\"\uD83D\uDC1B\",\"\uD83D\uDC1C\",\"\uD83D\uDC1D\",\"\uD83E\uDEB2\",\"\uD83D\uDC1E\",\"\uD83E\uDD97\",\"\uD83E\uDEB3\",\"\uD83D\uDD77\uFE0F\",\"\uD83D\uDD78\uFE0F\",\"\uD83E\uDD82\",\"\uD83E\uDD9F\",\"\uD83E\uDEB0\",\"\uD83E\uDEB1\",\"\uD83E\uDDA0\",\"\uD83D\uDC90\",\"\uD83C\uDF38\",\"\uD83D\uDCAE\",\"\uD83C\uDFF5\uFE0F\",\"\uD83C\uDF39\",\"\uD83E\uDD40\",\"\uD83C\uDF3A\",\"\uD83C\uDF3B\",\"\uD83C\uDF3C\",\"\uD83C\uDF37\",\"\uD83C\uDF31\",\"\uD83E\uDEB4\",\"\uD83C\uDF32\",\"\uD83C\uDF33\",\"\uD83C\uDF34\",\"\uD83C\uDF35\",\"\uD83C\uDF3E\",\"\uD83C\uDF3F\",\"\u2618\uFE0F\",\"\uD83C\uDF40\",\"\uD83C\uDF41\",\"\uD83C\uDF42\",\"\uD83C\uDF43\",\"\uD83C\uDF47\",\"\uD83C\uDF48\",\"\uD83C\uDF49\",\"\uD83C\uDF4A\",\"\uD83C\uDF4B\",\"\uD83C\uDF4C\",\"\uD83C\uDF4D\",\"\uD83E\uDD6D\",\"\uD83C\uDF4E\",\"\uD83C\uDF4F\",\"\uD83C\uDF50\",\"\uD83C\uDF51\",\"\uD83C\uDF52\",\"\uD83C\uDF53\",\"\uD83E\uDED0\",\"\uD83E\uDD5D\",\"\uD83C\uDF45\",\"\uD83E\uDED2\",\"\uD83E\uDD65\",\"\uD83E\uDD51\",\"\uD83C\uDF46\",\"\uD83E\uDD54\",\"\uD83E\uDD55\",\"\uD83C\uDF3D\",\"\uD83C\uDF36\uFE0F\",\"\uD83E\uDED1\",\"\uD83E\uDD52\",\"\uD83E\uDD6C\",\"\uD83E\uDD66\",\"\uD83E\uDDC4\",\"\uD83E\uDDC5\",\"\uD83C\uDF44\",\"\uD83E\uDD5C\",\"\uD83C\uDF30\",\"\uD83C\uDF5E\",\"\uD83E\uDD50\",\"\uD83E\uDD56\",\"\uD83E\uDED3\",\"\uD83E\uDD68\",\"\uD83E\uDD6F\",\"\uD83E\uDD5E\",\"\uD83E\uDDC7\",\"\uD83E\uDDC0\",\"\uD83C\uDF56\",\"\uD83C\uDF57\",\"\uD83E\uDD69\",\"\uD83E\uDD53\",\"\uD83C\uDF54\",\"\uD83C\uDF5F\",\"\uD83C\uDF55\",\"\uD83C\uDF2D\",\"\uD83E\uDD6A\",\"\uD83C\uDF2E\",\"\uD83C\uDF2F\",\"\uD83E\uDED4\",\"\uD83E\uDD59\",\"\uD83E\uDDC6\",\"\uD83E\uDD5A\",\"\uD83C\uDF73\",\"\uD83E\uDD58\",\"\uD83C\uDF72\",\"\uD83E\uDED5\",\"\uD83E\uDD63\",\"\uD83E\uDD57\",\"\uD83C\uDF7F\",\"\uD83E\uDDC8\",\"\uD83E\uDDC2\",\"\uD83E\uDD6B\",\"\uD83C\uDF71\",\"\uD83C\uDF58\",\"\uD83C\uDF59\",\"\uD83C\uDF5A\",\"\uD83C\uDF5B\",\"\uD83C\uDF5C\",\"\uD83C\uDF5D\",\"\uD83C\uDF60\",\"\uD83C\uDF62\",\"\uD83C\uDF63\",\"\uD83C\uDF64\",\"\uD83C\uDF65\",\"\uD83E\uDD6E\",\"\uD83C\uDF61\",\"\uD83E\uDD5F\",\"\uD83E\uDD60\",\"\uD83E\uDD61\",\"\uD83E\uDD80\",\"\uD83E\uDD9E\",\"\uD83E\uDD90\",\"\uD83E\uDD91\",\"\uD83E\uDDAA\",\"\uD83C\uDF66\",\"\uD83C\uDF67\",\"\uD83C\uDF68\",\"\uD83C\uDF69\",\"\uD83C\uDF6A\",\"\uD83C\uDF82\",\"\uD83C\uDF70\",\"\uD83E\uDDC1\",\"\uD83E\uDD67\",\"\uD83C\uDF6B\",\"\uD83C\uDF6C\",\"\uD83C\uDF6D\",\"\uD83C\uDF6E\",\"\uD83C\uDF6F\",\"\uD83C\uDF7C\",\"\uD83E\uDD5B\",\"\u2615\",\"\uD83E\uDED6\",\"\uD83C\uDF75\",\"\uD83C\uDF76\",\"\uD83C\uDF7E\",\"\uD83C\uDF77\",\"\uD83C\uDF78\",\"\uD83C\uDF79\",\"\uD83C\uDF7A\",\"\uD83C\uDF7B\",\"\uD83E\uDD42\",\"\uD83E\uDD43\",\"\uD83E\uDD64\",\"\uD83E\uDDCB\",\"\uD83E\uDDC3\",\"\uD83E\uDDC9\",\"\uD83E\uDDCA\",\"\uD83E\uDD62\",\"\uD83C\uDF7D\uFE0F\",\"\uD83C\uDF74\",\"\uD83E\uDD44\",\"\uD83D\uDD2A\",\"\uD83C\uDFFA\",\"\uD83C\uDF0D\",\"\uD83C\uDF0E\",\"\uD83C\uDF0F\",\"\uD83C\uDF10\",\"\uD83D\uDDFA\uFE0F\",\"\uD83D\uDDFE\",\"\uD83E\uDDED\",\"\uD83C\uDFD4\uFE0F\",\"\u26F0\uFE0F\",\"\uD83C\uDF0B\",\"\uD83D\uDDFB\",\"\uD83C\uDFD5\uFE0F\",\"\uD83C\uDFD6\uFE0F\",\"\uD83C\uDFDC\uFE0F\",\"\uD83C\uDFDD\uFE0F\",\"\uD83C\uDFDE\uFE0F\",\"\uD83C\uDFDF\uFE0F\",\"\uD83C\uDFDB\uFE0F\",\"\uD83C\uDFD7\uFE0F\",\"\uD83E\uDDF1\",\"\uD83E\uDEA8\",\"\uD83E\uDEB5\",\"\uD83D\uDED6\",\"\uD83C\uDFD8\uFE0F\",\"\uD83C\uDFDA\uFE0F\",\"\uD83C\uDFE0\",\"\uD83C\uDFE1\",\"\uD83C\uDFE2\",\"\uD83C\uDFE3\",\"\uD83C\uDFE4\",\"\uD83C\uDFE5\",\"\uD83C\uDFE6\",\"\uD83C\uDFE8\",\"\uD83C\uDFE9\",\"\uD83C\uDFEA\",\"\uD83C\uDFEB\",\"\uD83C\uDFEC\",\"\uD83C\uDFED\",\"\uD83C\uDFEF\",\"\uD83C\uDFF0\",\"\uD83D\uDC92\",\"\uD83D\uDDFC\",\"\uD83D\uDDFD\",\"\u26EA\",\"\uD83D\uDD4C\",\"\uD83D\uDED5\",\"\uD83D\uDD4D\",\"\u26E9\uFE0F\",\"\uD83D\uDD4B\",\"\u26F2\",\"\u26FA\",\"\uD83C\uDF01\",\"\uD83C\uDF03\",\"\uD83C\uDFD9\uFE0F\",\"\uD83C\uDF04\",\"\uD83C\uDF05\",\"\uD83C\uDF06\",\"\uD83C\uDF07\",\"\uD83C\uDF09\",\"\u2668\uFE0F\",\"\uD83C\uDFA0\",\"\uD83C\uDFA1\",\"\uD83C\uDFA2\",\"\uD83D\uDC88\",\"\uD83C\uDFAA\",\"\uD83D\uDE82\",\"\uD83D\uDE83\",\"\uD83D\uDE84\",\"\uD83D\uDE85\",\"\uD83D\uDE86\",\"\uD83D\uDE87\",\"\uD83D\uDE88\",\"\uD83D\uDE89\",\"\uD83D\uDE8A\",\"\uD83D\uDE9D\",\"\uD83D\uDE9E\",\"\uD83D\uDE8B\",\"\uD83D\uDE8C\",\"\uD83D\uDE8D\",\"\uD83D\uDE8E\",\"\uD83D\uDE90\",\"\uD83D\uDE91\",\"\uD83D\uDE92\",\"\uD83D\uDE93\",\"\uD83D\uDE94\",\"\uD83D\uDE95\",\"\uD83D\uDE96\",\"\uD83D\uDE97\",\"\uD83D\uDE98\",\"\uD83D\uDE99\",\"\uD83D\uDEFB\",\"\uD83D\uDE9A\",\"\uD83D\uDE9B\",\"\uD83D\uDE9C\",\"\uD83C\uDFCE\uFE0F\",\"\uD83C\uDFCD\uFE0F\",\"\uD83D\uDEF5\",\"\uD83E\uDDBD\",\"\uD83E\uDDBC\",\"\uD83D\uDEFA\",\"\uD83D\uDEB2\",\"\uD83D\uDEF4\",\"\uD83D\uDEF9\",\"\uD83D\uDEFC\",\"\uD83D\uDE8F\",\"\uD83D\uDEE3\uFE0F\",\"\uD83D\uDEE4\uFE0F\",\"\uD83D\uDEE2\uFE0F\",\"\u26FD\",\"\uD83D\uDEA8\",\"\uD83D\uDEA5\",\"\uD83D\uDEA6\",\"\uD83D\uDED1\",\"\uD83D\uDEA7\",\"\u2693\",\"\u26F5\",\"\uD83D\uDEF6\",\"\uD83D\uDEA4\",\"\uD83D\uDEF3\uFE0F\",\"\u26F4\uFE0F\",\"\uD83D\uDEE5\uFE0F\",\"\uD83D\uDEA2\",\"\u2708\uFE0F\",\"\uD83D\uDEE9\uFE0F\",\"\uD83D\uDEEB\",\"\uD83D\uDEEC\",\"\uD83E\uDE82\",\"\uD83D\uDCBA\",\"\uD83D\uDE81\",\"\uD83D\uDE9F\",\"\uD83D\uDEA0\",\"\uD83D\uDEA1\",\"\uD83D\uDEF0\uFE0F\",\"\uD83D\uDE80\",\"\uD83D\uDEF8\",\"\uD83D\uDECE\uFE0F\",\"\uD83E\uDDF3\",\"\u231B\",\"\u23F3\",\"\u231A\",\"\u23F0\",\"\u23F1\uFE0F\",\"\u23F2\uFE0F\",\"\uD83D\uDD70\uFE0F\",\"\uD83D\uDD5B\",\"\uD83D\uDD67\",\"\uD83D\uDD50\",\"\uD83D\uDD5C\",\"\uD83D\uDD51\",\"\uD83D\uDD5D\",\"\uD83D\uDD52\",\"\uD83D\uDD5E\",\"\uD83D\uDD53\",\"\uD83D\uDD5F\",\"\uD83D\uDD54\",\"\uD83D\uDD60\",\"\uD83D\uDD55\",\"\uD83D\uDD61\",\"\uD83D\uDD56\",\"\uD83D\uDD62\",\"\uD83D\uDD57\",\"\uD83D\uDD63\",\"\uD83D\uDD58\",\"\uD83D\uDD64\",\"\uD83D\uDD59\",\"\uD83D\uDD65\",\"\uD83D\uDD5A\",\"\uD83D\uDD66\",\"\uD83C\uDF11\",\"\uD83C\uDF12\",\"\uD83C\uDF13\",\"\uD83C\uDF14\",\"\uD83C\uDF15\",\"\uD83C\uDF16\",\"\uD83C\uDF17\",\"\uD83C\uDF18\",\"\uD83C\uDF19\",\"\uD83C\uDF1A\",\"\uD83C\uDF1B\",\"\uD83C\uDF1C\",\"\uD83C\uDF21\uFE0F\",\"\u2600\uFE0F\",\"\uD83C\uDF1D\",\"\uD83C\uDF1E\",\"\uD83E\uDE90\",\"\u2B50\",\"\uD83C\uDF1F\",\"\uD83C\uDF20\",\"\uD83C\uDF0C\",\"\u2601\uFE0F\",\"\u26C5\",\"\u26C8\uFE0F\",\"\uD83C\uDF24\uFE0F\",\"\uD83C\uDF25\uFE0F\",\"\uD83C\uDF26\uFE0F\",\"\uD83C\uDF27\uFE0F\",\"\uD83C\uDF28\uFE0F\",\"\uD83C\uDF29\uFE0F\",\"\uD83C\uDF2A\uFE0F\",\"\uD83C\uDF2B\uFE0F\",\"\uD83C\uDF2C\uFE0F\",\"\uD83C\uDF00\",\"\uD83C\uDF08\",\"\uD83C\uDF02\",\"\u2602\uFE0F\",\"\u2614\",\"\u26F1\uFE0F\",\"\u26A1\",\"\u2744\uFE0F\",\"\u2603\uFE0F\",\"\u26C4\",\"\u2604\uFE0F\",\"\uD83D\uDD25\",\"\uD83D\uDCA7\",\"\uD83C\uDF0A\",\"\uD83C\uDF83\",\"\uD83C\uDF84\",\"\uD83C\uDF86\",\"\uD83C\uDF87\",\"\uD83E\uDDE8\",\"\u2728\",\"\uD83C\uDF88\",\"\uD83C\uDF89\",\"\uD83C\uDF8A\",\"\uD83C\uDF8B\",\"\uD83C\uDF8D\",\"\uD83C\uDF8E\",\"\uD83C\uDF8F\",\"\uD83C\uDF90\",\"\uD83C\uDF91\",\"\uD83E\uDDE7\",\"\uD83C\uDF80\",\"\uD83C\uDF81\",\"\uD83C\uDF97\uFE0F\",\"\uD83C\uDF9F\uFE0F\",\"\uD83C\uDFAB\",\"\uD83C\uDF96\uFE0F\",\"\uD83C\uDFC6\",\"\uD83C\uDFC5\",\"\uD83E\uDD47\",\"\uD83E\uDD48\",\"\uD83E\uDD49\",\"\u26BD\",\"\u26BE\",\"\uD83E\uDD4E\",\"\uD83C\uDFC0\",\"\uD83C\uDFD0\",\"\uD83C\uDFC8\",\"\uD83C\uDFC9\",\"\uD83C\uDFBE\",\"\uD83E\uDD4F\",\"\uD83C\uDFB3\",\"\uD83C\uDFCF\",\"\uD83C\uDFD1\",\"\uD83C\uDFD2\",\"\uD83E\uDD4D\",\"\uD83C\uDFD3\",\"\uD83C\uDFF8\",\"\uD83E\uDD4A\",\"\uD83E\uDD4B\",\"\uD83E\uDD45\",\"\u26F3\",\"\u26F8\uFE0F\",\"\uD83C\uDFA3\",\"\uD83E\uDD3F\",\"\uD83C\uDFBD\",\"\uD83C\uDFBF\",\"\uD83D\uDEF7\",\"\uD83E\uDD4C\",\"\uD83C\uDFAF\",\"\uD83E\uDE80\",\"\uD83E\uDE81\",\"\uD83C\uDFB1\",\"\uD83D\uDD2E\",\"\uD83E\uDE84\",\"\uD83E\uDDFF\",\"\uD83C\uDFAE\",\"\uD83D\uDD79\uFE0F\",\"\uD83C\uDFB0\",\"\uD83C\uDFB2\",\"\uD83E\uDDE9\",\"\uD83E\uDDF8\",\"\uD83E\uDE85\",\"\uD83E\uDE86\",\"\u2660\uFE0F\",\"\u2665\uFE0F\",\"\u2666\uFE0F\",\"\u2663\uFE0F\",\"\u265F\uFE0F\",\"\uD83C\uDCCF\",\"\uD83C\uDC04\",\"\uD83C\uDFB4\",\"\uD83C\uDFAD\",\"\uD83D\uDDBC\uFE0F\",\"\uD83C\uDFA8\",\"\uD83E\uDDF5\",\"\uD83E\uDEA1\",\"\uD83E\uDDF6\",\"\uD83E\uDEA2\",\"\uD83D\uDC53\",\"\uD83D\uDD76\uFE0F\",\"\uD83E\uDD7D\",\"\uD83E\uDD7C\",\"\uD83E\uDDBA\",\"\uD83D\uDC54\",\"\uD83D\uDC55\",\"\uD83D\uDC56\",\"\uD83E\uDDE3\",\"\uD83E\uDDE4\",\"\uD83E\uDDE5\",\"\uD83E\uDDE6\",\"\uD83D\uDC57\",\"\uD83D\uDC58\",\"\uD83E\uDD7B\",\"\uD83E\uDE71\",\"\uD83E\uDE72\",\"\uD83E\uDE73\",\"\uD83D\uDC59\",\"\uD83D\uDC5A\",\"\uD83D\uDC5B\",\"\uD83D\uDC5C\",\"\uD83D\uDC5D\",\"\uD83D\uDECD\uFE0F\",\"\uD83C\uDF92\",\"\uD83E\uDE74\",\"\uD83D\uDC5E\",\"\uD83D\uDC5F\",\"\uD83E\uDD7E\",\"\uD83E\uDD7F\",\"\uD83D\uDC60\",\"\uD83D\uDC61\",\"\uD83E\uDE70\",\"\uD83D\uDC62\",\"\uD83D\uDC51\",\"\uD83D\uDC52\",\"\uD83C\uDFA9\",\"\uD83C\uDF93\",\"\uD83E\uDDE2\",\"\uD83E\uDE96\",\"\u26D1\uFE0F\",\"\uD83D\uDCFF\",\"\uD83D\uDC84\",\"\uD83D\uDC8D\",\"\uD83D\uDC8E\",\"\uD83D\uDD07\",\"\uD83D\uDD08\",\"\uD83D\uDD09\",\"\uD83D\uDD0A\",\"\uD83D\uDCE2\",\"\uD83D\uDCE3\",\"\uD83D\uDCEF\",\"\uD83D\uDD14\",\"\uD83D\uDD15\",\"\uD83C\uDFBC\",\"\uD83C\uDFB5\",\"\uD83C\uDFB6\",\"\uD83C\uDF99\uFE0F\",\"\uD83C\uDF9A\uFE0F\",\"\uD83C\uDF9B\uFE0F\",\"\uD83C\uDFA4\",\"\uD83C\uDFA7\",\"\uD83D\uDCFB\",\"\uD83C\uDFB7\",\"\uD83E\uDE97\",\"\uD83C\uDFB8\",\"\uD83C\uDFB9\",\"\uD83C\uDFBA\",\"\uD83C\uDFBB\",\"\uD83E\uDE95\",\"\uD83E\uDD41\",\"\uD83E\uDE98\",\"\uD83D\uDCF1\",\"\uD83D\uDCF2\",\"\u260E\uFE0F\",\"\uD83D\uDCDE\",\"\uD83D\uDCDF\",\"\uD83D\uDCE0\",\"\uD83D\uDD0B\",\"\uD83D\uDD0C\",\"\uD83D\uDCBB\",\"\uD83D\uDDA5\uFE0F\",\"\uD83D\uDDA8\uFE0F\",\"\u2328\uFE0F\",\"\uD83D\uDDB1\uFE0F\",\"\uD83D\uDDB2\uFE0F\",\"\uD83D\uDCBD\",\"\uD83D\uDCBE\",\"\uD83D\uDCBF\",\"\uD83D\uDCC0\",\"\uD83E\uDDEE\",\"\uD83C\uDFA5\",\"\uD83C\uDF9E\uFE0F\",\"\uD83D\uDCFD\uFE0F\",\"\uD83C\uDFAC\",\"\uD83D\uDCFA\",\"\uD83D\uDCF7\",\"\uD83D\uDCF8\",\"\uD83D\uDCF9\",\"\uD83D\uDCFC\",\"\uD83D\uDD0D\",\"\uD83D\uDD0E\",\"\uD83D\uDD6F\uFE0F\",\"\uD83D\uDCA1\",\"\uD83D\uDD26\",\"\uD83C\uDFEE\",\"\uD83E\uDE94\",\"\uD83D\uDCD4\",\"\uD83D\uDCD5\",\"\uD83D\uDCD6\",\"\uD83D\uDCD7\",\"\uD83D\uDCD8\",\"\uD83D\uDCD9\",\"\uD83D\uDCDA\",\"\uD83D\uDCD3\",\"\uD83D\uDCD2\",\"\uD83D\uDCC3\",\"\uD83D\uDCDC\",\"\uD83D\uDCC4\",\"\uD83D\uDCF0\",\"\uD83D\uDDDE\uFE0F\",\"\uD83D\uDCD1\",\"\uD83D\uDD16\",\"\uD83C\uDFF7\uFE0F\",\"\uD83D\uDCB0\",\"\uD83E\uDE99\",\"\uD83D\uDCB4\",\"\uD83D\uDCB5\",\"\uD83D\uDCB6\",\"\uD83D\uDCB7\",\"\uD83D\uDCB8\",\"\uD83D\uDCB3\",\"\uD83E\uDDFE\",\"\uD83D\uDCB9\",\"\u2709\uFE0F\",\"\uD83D\uDCE7\",\"\uD83D\uDCE8\",\"\uD83D\uDCE9\",\"\uD83D\uDCE4\",\"\uD83D\uDCE5\",\"\uD83D\uDCE6\",\"\uD83D\uDCEB\",\"\uD83D\uDCEA\",\"\uD83D\uDCEC\",\"\uD83D\uDCED\",\"\uD83D\uDCEE\",\"\uD83D\uDDF3\uFE0F\",\"\u270F\uFE0F\",\"\u2712\uFE0F\",\"\uD83D\uDD8B\uFE0F\",\"\uD83D\uDD8A\uFE0F\",\"\uD83D\uDD8C\uFE0F\",\"\uD83D\uDD8D\uFE0F\",\"\uD83D\uDCDD\",\"\uD83D\uDCBC\",\"\uD83D\uDCC1\",\"\uD83D\uDCC2\",\"\uD83D\uDDC2\uFE0F\",\"\uD83D\uDCC5\",\"\uD83D\uDCC6\",\"\uD83D\uDDD2\uFE0F\",\"\uD83D\uDDD3\uFE0F\",\"\uD83D\uDCC7\",\"\uD83D\uDCC8\",\"\uD83D\uDCC9\",\"\uD83D\uDCCA\",\"\uD83D\uDCCB\",\"\uD83D\uDCCC\",\"\uD83D\uDCCD\",\"\uD83D\uDCCE\",\"\uD83D\uDD87\uFE0F\",\"\uD83D\uDCCF\",\"\uD83D\uDCD0\",\"\u2702\uFE0F\",\"\uD83D\uDDC3\uFE0F\",\"\uD83D\uDDC4\uFE0F\",\"\uD83D\uDDD1\uFE0F\",\"\uD83D\uDD12\",\"\uD83D\uDD13\",\"\uD83D\uDD0F\",\"\uD83D\uDD10\",\"\uD83D\uDD11\",\"\uD83D\uDDDD\uFE0F\",\"\uD83D\uDD28\",\"\uD83E\uDE93\",\"\u26CF\uFE0F\",\"\u2692\uFE0F\",\"\uD83D\uDEE0\uFE0F\",\"\uD83D\uDDE1\uFE0F\",\"\u2694\uFE0F\",\"\uD83D\uDD2B\",\"\uD83E\uDE83\",\"\uD83C\uDFF9\",\"\uD83D\uDEE1\uFE0F\",\"\uD83E\uDE9A\",\"\uD83D\uDD27\",\"\uD83E\uDE9B\",\"\uD83D\uDD29\",\"\u2699\uFE0F\",\"\uD83D\uDDDC\uFE0F\",\"\u2696\uFE0F\",\"\uD83E\uDDAF\",\"\uD83D\uDD17\",\"\u26D3\uFE0F\",\"\uD83E\uDE9D\",\"\uD83E\uDDF0\",\"\uD83E\uDDF2\",\"\uD83E\uDE9C\",\"\u2697\uFE0F\",\"\uD83E\uDDEA\",\"\uD83E\uDDEB\",\"\uD83E\uDDEC\",\"\uD83D\uDD2C\",\"\uD83D\uDD2D\",\"\uD83D\uDCE1\",\"\uD83D\uDC89\",\"\uD83E\uDE78\",\"\uD83D\uDC8A\",\"\uD83E\uDE79\",\"\uD83E\uDE7A\",\"\uD83D\uDEAA\",\"\uD83D\uDED7\",\"\uD83E\uDE9E\",\"\uD83E\uDE9F\",\"\uD83D\uDECF\uFE0F\",\"\uD83D\uDECB\uFE0F\",\"\uD83E\uDE91\",\"\uD83D\uDEBD\",\"\uD83E\uDEA0\",\"\uD83D\uDEBF\",\"\uD83D\uDEC1\",\"\uD83E\uDEA4\",\"\uD83E\uDE92\",\"\uD83E\uDDF4\",\"\uD83E\uDDF7\",\"\uD83E\uDDF9\",\"\uD83E\uDDFA\",\"\uD83E\uDDFB\",\"\uD83E\uDEA3\",\"\uD83E\uDDFC\",\"\uD83E\uDEA5\",\"\uD83E\uDDFD\",\"\uD83E\uDDEF\",\"\uD83D\uDED2\",\"\uD83D\uDEAC\",\"\u26B0\uFE0F\",\"\uD83E\uDEA6\",\"\u26B1\uFE0F\",\"\uD83D\uDDFF\",\"\uD83E\uDEA7\",\"\uD83C\uDFE7\",\"\uD83D\uDEAE\",\"\uD83D\uDEB0\",\"\u267F\",\"\uD83D\uDEB9\",\"\uD83D\uDEBA\",\"\uD83D\uDEBB\",\"\uD83D\uDEBC\",\"\uD83D\uDEBE\",\"\uD83D\uDEC2\",\"\uD83D\uDEC3\",\"\uD83D\uDEC4\",\"\uD83D\uDEC5\",\"\u26A0\uFE0F\",\"\uD83D\uDEB8\",\"\u26D4\",\"\uD83D\uDEAB\",\"\uD83D\uDEB3\",\"\uD83D\uDEAD\",\"\uD83D\uDEAF\",\"\uD83D\uDEB1\",\"\uD83D\uDEB7\",\"\uD83D\uDCF5\",\"\uD83D\uDD1E\",\"\u2622\uFE0F\",\"\u2623\uFE0F\",\"\u2B06\uFE0F\",\"\u2197\uFE0F\",\"\u27A1\uFE0F\",\"\u2198\uFE0F\",\"\u2B07\uFE0F\",\"\u2199\uFE0F\",\"\u2B05\uFE0F\",\"\u2196\uFE0F\",\"\u2195\uFE0F\",\"\u2194\uFE0F\",\"\u21A9\uFE0F\",\"\u21AA\uFE0F\",\"\u2934\uFE0F\",\"\u2935\uFE0F\",\"\uD83D\uDD03\",\"\uD83D\uDD04\",\"\uD83D\uDD19\",\"\uD83D\uDD1A\",\"\uD83D\uDD1B\",\"\uD83D\uDD1C\",\"\uD83D\uDD1D\",\"\uD83D\uDED0\",\"\u269B\uFE0F\",\"\uD83D\uDD49\uFE0F\",\"\u2721\uFE0F\",\"\u2638\uFE0F\",\"\u262F\uFE0F\",\"\u271D\uFE0F\",\"\u2626\uFE0F\",\"\u262A\uFE0F\",\"\u262E\uFE0F\",\"\uD83D\uDD4E\",\"\uD83D\uDD2F\",\"\u2648\",\"\u2649\",\"\u264A\",\"\u264B\",\"\u264C\",\"\u264D\",\"\u264E\",\"\u264F\",\"\u2650\",\"\u2651\",\"\u2652\",\"\u2653\",\"\u26CE\",\"\uD83D\uDD00\",\"\uD83D\uDD01\",\"\uD83D\uDD02\",\"\u25B6\uFE0F\",\"\u23E9\",\"\u23ED\uFE0F\",\"\u23EF\uFE0F\",\"\u25C0\uFE0F\",\"\u23EA\",\"\u23EE\uFE0F\",\"\uD83D\uDD3C\",\"\u23EB\",\"\uD83D\uDD3D\",\"\u23EC\",\"\u23F8\uFE0F\",\"\u23F9\uFE0F\",\"\u23FA\uFE0F\",\"\u23CF\uFE0F\",\"\uD83C\uDFA6\",\"\uD83D\uDD05\",\"\uD83D\uDD06\",\"\uD83D\uDCF6\",\"\uD83D\uDCF3\",\"\uD83D\uDCF4\",\"\u2640\uFE0F\",\"\u2642\uFE0F\",\"\u26A7\uFE0F\",\"\u2716\uFE0F\",\"\u2795\",\"\u2796\",\"\u2797\",\"\u267E\uFE0F\",\"\u203C\uFE0F\",\"\u2049\uFE0F\",\"\u2753\",\"\u2754\",\"\u2755\",\"\u2757\",\"\u3030\uFE0F\",\"\uD83D\uDCB1\",\"\uD83D\uDCB2\",\"\u2695\uFE0F\",\"\u267B\uFE0F\",\"\u269C\uFE0F\",\"\uD83D\uDD31\",\"\uD83D\uDCDB\",\"\uD83D\uDD30\",\"\u2B55\",\"\u2705\",\"\u2611\uFE0F\",\"\u2714\uFE0F\",\"\u274C\",\"\u274E\",\"\u27B0\",\"\u27BF\",\"\u303D\uFE0F\",\"\u2733\uFE0F\",\"\u2734\uFE0F\",\"\u2747\uFE0F\",\"\u00A9\uFE0F\",\"\u00AE\uFE0F\",\"\u2122\uFE0F\",\"#\uFE0F\u20E3\",\"*\uFE0F\u20E3\",\"0\uFE0F\u20E3\",\"1\uFE0F\u20E3\",\"2\uFE0F\u20E3\",\"3\uFE0F\u20E3\",\"4\uFE0F\u20E3\",\"5\uFE0F\u20E3\",\"6\uFE0F\u20E3\",\"7\uFE0F\u20E3\",\"8\uFE0F\u20E3\",\"9\uFE0F\u20E3\",\"\uD83D\uDD1F\",\"\uD83D\uDD20\",\"\uD83D\uDD21\",\"\uD83D\uDD22\",\"\uD83D\uDD23\",\"\uD83D\uDD24\",\"\uD83C\uDD70\uFE0F\",\"\uD83C\uDD8E\",\"\uD83C\uDD71\uFE0F\",\"\uD83C\uDD91\",\"\uD83C\uDD92\",\"\uD83C\uDD93\",\"\u2139\uFE0F\",\"\uD83C\uDD94\",\"\u24C2\uFE0F\",\"\uD83C\uDD95\",\"\uD83C\uDD96\",\"\uD83C\uDD7E\uFE0F\",\"\uD83C\uDD97\",\"\uD83C\uDD7F\uFE0F\",\"\uD83C\uDD98\",\"\uD83C\uDD99\",\"\uD83C\uDD9A\",\"\uD83C\uDE01\",\"\uD83C\uDE02\uFE0F\",\"\uD83C\uDE37\uFE0F\",\"\uD83C\uDE36\",\"\uD83C\uDE2F\",\"\uD83C\uDE50\",\"\uD83C\uDE39\",\"\uD83C\uDE1A\",\"\uD83C\uDE32\",\"\uD83C\uDE51\",\"\uD83C\uDE38\",\"\uD83C\uDE34\",\"\uD83C\uDE33\",\"\u3297\uFE0F\",\"\u3299\uFE0F\",\"\uD83C\uDE3A\",\"\uD83C\uDE35\",\"\uD83D\uDD34\",\"\uD83D\uDFE0\",\"\uD83D\uDFE1\",\"\uD83D\uDFE2\",\"\uD83D\uDD35\",\"\uD83D\uDFE3\",\"\uD83D\uDFE4\",\"\u26AB\",\"\u26AA\",\"\uD83D\uDFE5\",\"\uD83D\uDFE7\",\"\uD83D\uDFE8\",\"\uD83D\uDFE9\",\"\uD83D\uDFE6\",\"\uD83D\uDFEA\",\"\uD83D\uDFEB\",\"\u2B1B\",\"\u2B1C\",\"\u25FC\uFE0F\",\"\u25FB\uFE0F\",\"\u25FE\",\"\u25FD\",\"\u25AA\uFE0F\",\"\u25AB\uFE0F\",\"\uD83D\uDD36\",\"\uD83D\uDD37\",\"\uD83D\uDD38\",\"\uD83D\uDD39\",\"\uD83D\uDD3A\",\"\uD83D\uDD3B\",\"\uD83D\uDCA0\",\"\uD83D\uDD18\",\"\uD83D\uDD33\",\"\uD83D\uDD32\",\"\uD83C\uDFC1\",\"\uD83D\uDEA9\",\"\uD83C\uDF8C\",\"\uD83C\uDFF4\",\"\uD83C\uDFF3\uFE0F\",\"\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08\",\"\uD83C\uDFF3\uFE0F\u200D\u26A7\uFE0F\",\"\uD83C\uDFF4\u200D\u2620\uFE0F\",\"\uD83C\uDDE6\uD83C\uDDE8\",\"\uD83C\uDDE6\uD83C\uDDE9\",\"\uD83C\uDDE6\uD83C\uDDEA\",\"\uD83C\uDDE6\uD83C\uDDEB\",\"\uD83C\uDDE6\uD83C\uDDEC\",\"\uD83C\uDDE6\uD83C\uDDEE\",\"\uD83C\uDDE6\uD83C\uDDF1\",\"\uD83C\uDDE6\uD83C\uDDF2\",\"\uD83C\uDDE6\uD83C\uDDF4\",\"\uD83C\uDDE6\uD83C\uDDF6\",\"\uD83C\uDDE6\uD83C\uDDF7\",\"\uD83C\uDDE6\uD83C\uDDF8\",\"\uD83C\uDDE6\uD83C\uDDF9\",\"\uD83C\uDDE6\uD83C\uDDFA\",\"\uD83C\uDDE6\uD83C\uDDFC\",\"\uD83C\uDDE6\uD83C\uDDFD\",\"\uD83C\uDDE6\uD83C\uDDFF\",\"\uD83C\uDDE7\uD83C\uDDE6\",\"\uD83C\uDDE7\uD83C\uDDE7\",\"\uD83C\uDDE7\uD83C\uDDE9\",\"\uD83C\uDDE7\uD83C\uDDEA\",\"\uD83C\uDDE7\uD83C\uDDEB\",\"\uD83C\uDDE7\uD83C\uDDEC\",\"\uD83C\uDDE7\uD83C\uDDED\",\"\uD83C\uDDE7\uD83C\uDDEE\",\"\uD83C\uDDE7\uD83C\uDDEF\",\"\uD83C\uDDE7\uD83C\uDDF1\",\"\uD83C\uDDE7\uD83C\uDDF2\",\"\uD83C\uDDE7\uD83C\uDDF3\",\"\uD83C\uDDE7\uD83C\uDDF4\",\"\uD83C\uDDE7\uD83C\uDDF6\",\"\uD83C\uDDE7\uD83C\uDDF7\",\"\uD83C\uDDE7\uD83C\uDDF8\",\"\uD83C\uDDE7\uD83C\uDDF9\",\"\uD83C\uDDE7\uD83C\uDDFB\",\"\uD83C\uDDE7\uD83C\uDDFC\",\"\uD83C\uDDE7\uD83C\uDDFE\",\"\uD83C\uDDE7\uD83C\uDDFF\",\"\uD83C\uDDE8\uD83C\uDDE6\",\"\uD83C\uDDE8\uD83C\uDDE8\",\"\uD83C\uDDE8\uD83C\uDDE9\",\"\uD83C\uDDE8\uD83C\uDDEB\",\"\uD83C\uDDE8\uD83C\uDDEC\",\"\uD83C\uDDE8\uD83C\uDDED\",\"\uD83C\uDDE8\uD83C\uDDEE\",\"\uD83C\uDDE8\uD83C\uDDF0\",\"\uD83C\uDDE8\uD83C\uDDF1\",\"\uD83C\uDDE8\uD83C\uDDF2\",\"\uD83C\uDDE8\uD83C\uDDF3\",\"\uD83C\uDDE8\uD83C\uDDF4\",\"\uD83C\uDDE8\uD83C\uDDF5\",\"\uD83C\uDDE8\uD83C\uDDF7\",\"\uD83C\uDDE8\uD83C\uDDFA\",\"\uD83C\uDDE8\uD83C\uDDFB\",\"\uD83C\uDDE8\uD83C\uDDFC\",\"\uD83C\uDDE8\uD83C\uDDFD\",\"\uD83C\uDDE8\uD83C\uDDFE\",\"\uD83C\uDDE8\uD83C\uDDFF\",\"\uD83C\uDDE9\uD83C\uDDEA\",\"\uD83C\uDDE9\uD83C\uDDEC\",\"\uD83C\uDDE9\uD83C\uDDEF\",\"\uD83C\uDDE9\uD83C\uDDF0\",\"\uD83C\uDDE9\uD83C\uDDF2\",\"\uD83C\uDDE9\uD83C\uDDF4\",\"\uD83C\uDDE9\uD83C\uDDFF\",\"\uD83C\uDDEA\uD83C\uDDE6\",\"\uD83C\uDDEA\uD83C\uDDE8\",\"\uD83C\uDDEA\uD83C\uDDEA\",\"\uD83C\uDDEA\uD83C\uDDEC\",\"\uD83C\uDDEA\uD83C\uDDED\",\"\uD83C\uDDEA\uD83C\uDDF7\",\"\uD83C\uDDEA\uD83C\uDDF8\",\"\uD83C\uDDEA\uD83C\uDDF9\",\"\uD83C\uDDEA\uD83C\uDDFA\",\"\uD83C\uDDEB\uD83C\uDDEE\",\"\uD83C\uDDEB\uD83C\uDDEF\",\"\uD83C\uDDEB\uD83C\uDDF0\",\"\uD83C\uDDEB\uD83C\uDDF2\",\"\uD83C\uDDEB\uD83C\uDDF4\",\"\uD83C\uDDEB\uD83C\uDDF7\",\"\uD83C\uDDEC\uD83C\uDDE6\",\"\uD83C\uDDEC\uD83C\uDDE7\",\"\uD83C\uDDEC\uD83C\uDDE9\",\"\uD83C\uDDEC\uD83C\uDDEA\",\"\uD83C\uDDEC\uD83C\uDDEB\",\"\uD83C\uDDEC\uD83C\uDDEC\",\"\uD83C\uDDEC\uD83C\uDDED\",\"\uD83C\uDDEC\uD83C\uDDEE\",\"\uD83C\uDDEC\uD83C\uDDF1\",\"\uD83C\uDDEC\uD83C\uDDF2\",\"\uD83C\uDDEC\uD83C\uDDF3\",\"\uD83C\uDDEC\uD83C\uDDF5\",\"\uD83C\uDDEC\uD83C\uDDF6\",\"\uD83C\uDDEC\uD83C\uDDF7\",\"\uD83C\uDDEC\uD83C\uDDF8\",\"\uD83C\uDDEC\uD83C\uDDF9\",\"\uD83C\uDDEC\uD83C\uDDFA\",\"\uD83C\uDDEC\uD83C\uDDFC\",\"\uD83C\uDDEC\uD83C\uDDFE\",\"\uD83C\uDDED\uD83C\uDDF0\",\"\uD83C\uDDED\uD83C\uDDF2\",\"\uD83C\uDDED\uD83C\uDDF3\",\"\uD83C\uDDED\uD83C\uDDF7\",\"\uD83C\uDDED\uD83C\uDDF9\",\"\uD83C\uDDED\uD83C\uDDFA\",\"\uD83C\uDDEE\uD83C\uDDE8\",\"\uD83C\uDDEE\uD83C\uDDE9\",\"\uD83C\uDDEE\uD83C\uDDEA\",\"\uD83C\uDDEE\uD83C\uDDF1\",\"\uD83C\uDDEE\uD83C\uDDF2\",\"\uD83C\uDDEE\uD83C\uDDF3\",\"\uD83C\uDDEE\uD83C\uDDF4\",\"\uD83C\uDDEE\uD83C\uDDF6\",\"\uD83C\uDDEE\uD83C\uDDF7\",\"\uD83C\uDDEE\uD83C\uDDF8\",\"\uD83C\uDDEE\uD83C\uDDF9\",\"\uD83C\uDDEF\uD83C\uDDEA\",\"\uD83C\uDDEF\uD83C\uDDF2\",\"\uD83C\uDDEF\uD83C\uDDF4\",\"\uD83C\uDDEF\uD83C\uDDF5\",\"\uD83C\uDDF0\uD83C\uDDEA\",\"\uD83C\uDDF0\uD83C\uDDEC\",\"\uD83C\uDDF0\uD83C\uDDED\",\"\uD83C\uDDF0\uD83C\uDDEE\",\"\uD83C\uDDF0\uD83C\uDDF2\",\"\uD83C\uDDF0\uD83C\uDDF3\",\"\uD83C\uDDF0\uD83C\uDDF5\",\"\uD83C\uDDF0\uD83C\uDDF7\",\"\uD83C\uDDF0\uD83C\uDDFC\",\"\uD83C\uDDF0\uD83C\uDDFE\",\"\uD83C\uDDF0\uD83C\uDDFF\",\"\uD83C\uDDF1\uD83C\uDDE6\",\"\uD83C\uDDF1\uD83C\uDDE7\",\"\uD83C\uDDF1\uD83C\uDDE8\",\"\uD83C\uDDF1\uD83C\uDDEE\",\"\uD83C\uDDF1\uD83C\uDDF0\",\"\uD83C\uDDF1\uD83C\uDDF7\",\"\uD83C\uDDF1\uD83C\uDDF8\",\"\uD83C\uDDF1\uD83C\uDDF9\",\"\uD83C\uDDF1\uD83C\uDDFA\",\"\uD83C\uDDF1\uD83C\uDDFB\",\"\uD83C\uDDF1\uD83C\uDDFE\",\"\uD83C\uDDF2\uD83C\uDDE6\",\"\uD83C\uDDF2\uD83C\uDDE8\",\"\uD83C\uDDF2\uD83C\uDDE9\",\"\uD83C\uDDF2\uD83C\uDDEA\",\"\uD83C\uDDF2\uD83C\uDDEB\",\"\uD83C\uDDF2\uD83C\uDDEC\",\"\uD83C\uDDF2\uD83C\uDDED\",\"\uD83C\uDDF2\uD83C\uDDF0\",\"\uD83C\uDDF2\uD83C\uDDF1\",\"\uD83C\uDDF2\uD83C\uDDF2\",\"\uD83C\uDDF2\uD83C\uDDF3\",\"\uD83C\uDDF2\uD83C\uDDF4\",\"\uD83C\uDDF2\uD83C\uDDF5\",\"\uD83C\uDDF2\uD83C\uDDF6\",\"\uD83C\uDDF2\uD83C\uDDF7\",\"\uD83C\uDDF2\uD83C\uDDF8\",\"\uD83C\uDDF2\uD83C\uDDF9\",\"\uD83C\uDDF2\uD83C\uDDFA\",\"\uD83C\uDDF2\uD83C\uDDFB\",\"\uD83C\uDDF2\uD83C\uDDFC\",\"\uD83C\uDDF2\uD83C\uDDFD\",\"\uD83C\uDDF2\uD83C\uDDFE\",\"\uD83C\uDDF2\uD83C\uDDFF\",\"\uD83C\uDDF3\uD83C\uDDE6\",\"\uD83C\uDDF3\uD83C\uDDE8\",\"\uD83C\uDDF3\uD83C\uDDEA\",\"\uD83C\uDDF3\uD83C\uDDEB\",\"\uD83C\uDDF3\uD83C\uDDEC\",\"\uD83C\uDDF3\uD83C\uDDEE\",\"\uD83C\uDDF3\uD83C\uDDF1\",\"\uD83C\uDDF3\uD83C\uDDF4\",\"\uD83C\uDDF3\uD83C\uDDF5\",\"\uD83C\uDDF3\uD83C\uDDF7\",\"\uD83C\uDDF3\uD83C\uDDFA\",\"\uD83C\uDDF3\uD83C\uDDFF\",\"\uD83C\uDDF4\uD83C\uDDF2\",\"\uD83C\uDDF5\uD83C\uDDE6\",\"\uD83C\uDDF5\uD83C\uDDEA\",\"\uD83C\uDDF5\uD83C\uDDEB\",\"\uD83C\uDDF5\uD83C\uDDEC\",\"\uD83C\uDDF5\uD83C\uDDED\",\"\uD83C\uDDF5\uD83C\uDDF0\",\"\uD83C\uDDF5\uD83C\uDDF1\",\"\uD83C\uDDF5\uD83C\uDDF2\",\"\uD83C\uDDF5\uD83C\uDDF3\",\"\uD83C\uDDF5\uD83C\uDDF7\",\"\uD83C\uDDF5\uD83C\uDDF8\",\"\uD83C\uDDF5\uD83C\uDDF9\",\"\uD83C\uDDF5\uD83C\uDDFC\",\"\uD83C\uDDF5\uD83C\uDDFE\",\"\uD83C\uDDF6\uD83C\uDDE6\",\"\uD83C\uDDF7\uD83C\uDDEA\",\"\uD83C\uDDF7\uD83C\uDDF4\",\"\uD83C\uDDF7\uD83C\uDDF8\",\"\uD83C\uDDF7\uD83C\uDDFA\",\"\uD83C\uDDF7\uD83C\uDDFC\",\"\uD83C\uDDF8\uD83C\uDDE6\",\"\uD83C\uDDF8\uD83C\uDDE7\",\"\uD83C\uDDF8\uD83C\uDDE8\",\"\uD83C\uDDF8\uD83C\uDDE9\",\"\uD83C\uDDF8\uD83C\uDDEA\",\"\uD83C\uDDF8\uD83C\uDDEC\",\"\uD83C\uDDF8\uD83C\uDDED\",\"\uD83C\uDDF8\uD83C\uDDEE\",\"\uD83C\uDDF8\uD83C\uDDEF\",\"\uD83C\uDDF8\uD83C\uDDF0\",\"\uD83C\uDDF8\uD83C\uDDF1\",\"\uD83C\uDDF8\uD83C\uDDF2\",\"\uD83C\uDDF8\uD83C\uDDF3\",\"\uD83C\uDDF8\uD83C\uDDF4\",\"\uD83C\uDDF8\uD83C\uDDF7\",\"\uD83C\uDDF8\uD83C\uDDF8\",\"\uD83C\uDDF8\uD83C\uDDF9\",\"\uD83C\uDDF8\uD83C\uDDFB\",\"\uD83C\uDDF8\uD83C\uDDFD\",\"\uD83C\uDDF8\uD83C\uDDFE\",\"\uD83C\uDDF8\uD83C\uDDFF\",\"\uD83C\uDDF9\uD83C\uDDE6\",\"\uD83C\uDDF9\uD83C\uDDE8\",\"\uD83C\uDDF9\uD83C\uDDE9\",\"\uD83C\uDDF9\uD83C\uDDEB\",\"\uD83C\uDDF9\uD83C\uDDEC\",\"\uD83C\uDDF9\uD83C\uDDED\",\"\uD83C\uDDF9\uD83C\uDDEF\",\"\uD83C\uDDF9\uD83C\uDDF0\",\"\uD83C\uDDF9\uD83C\uDDF1\",\"\uD83C\uDDF9\uD83C\uDDF2\",\"\uD83C\uDDF9\uD83C\uDDF3\",\"\uD83C\uDDF9\uD83C\uDDF4\",\"\uD83C\uDDF9\uD83C\uDDF7\",\"\uD83C\uDDF9\uD83C\uDDF9\",\"\uD83C\uDDF9\uD83C\uDDFB\",\"\uD83C\uDDF9\uD83C\uDDFC\",\"\uD83C\uDDF9\uD83C\uDDFF\",\"\uD83C\uDDFA\uD83C\uDDE6\",\"\uD83C\uDDFA\uD83C\uDDEC\",\"\uD83C\uDDFA\uD83C\uDDF2\",\"\uD83C\uDDFA\uD83C\uDDF3\",\"\uD83C\uDDFA\uD83C\uDDF8\",\"\uD83C\uDDFA\uD83C\uDDFE\",\"\uD83C\uDDFA\uD83C\uDDFF\",\"\uD83C\uDDFB\uD83C\uDDE6\",\"\uD83C\uDDFB\uD83C\uDDE8\",\"\uD83C\uDDFB\uD83C\uDDEA\",\"\uD83C\uDDFB\uD83C\uDDEC\",\"\uD83C\uDDFB\uD83C\uDDEE\",\"\uD83C\uDDFB\uD83C\uDDF3\",\"\uD83C\uDDFB\uD83C\uDDFA\",\"\uD83C\uDDFC\uD83C\uDDEB\",\"\uD83C\uDDFC\uD83C\uDDF8\",\"\uD83C\uDDFD\uD83C\uDDF0\",\"\uD83C\uDDFE\uD83C\uDDEA\",\"\uD83C\uDDFE\uD83C\uDDF9\",\"\uD83C\uDDFF\uD83C\uDDE6\",\"\uD83C\uDDFF\uD83C\uDDF2\",\"\uD83C\uDDFF\uD83C\uDDFC\",\"\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F\",\"\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74\uDB40\uDC7F\",\"\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73\uDB40\uDC7F\"];function Ma(e){return n(Aa,e)}var Ta=[\"0x958aa9ddbd62f989dec2fd1468bf436aebeb8be6\",\"0x9a7a3607dc4617deff6d4f9ca5d8c0beba0cffc5\",\"0xf5dcc57cb74623d2b3bfa6be9d96902f4bacb0b4\",\"0xfeff5fc09fc64ddde1cb09cdbba9d5aa1bd60028\",\"0xbf7aa2fdfdc0a971427bc7a815eabe4f37f53c19\",\"0xba0cbdbda3e1fafd9ba9b1b638d9eea0f8b9d7da\",\"0xeac476af2cdd3d5bbd723759073db20fe987f7bc\",\"0x5cef0214f4ebecaeb0a34088f4169dc2dbbf3ddb\",\"0x3be4ca88dda4aede8b2cf4cdf80878daecfd97d0\",\"0x5a367fae4dae00e05d6b3ce19d4fadec4da5dffe\",\"0xbae7b517fdd077edfefffafbd6ffdec6a95413ac\",\"0xdbcebff49e6f9c8ddb764b5a68b7ba2fdf555c2e\",\"0xf7aea0ce7ab75bbbeabf83a35b6631124e1b01de\",\"0xbf53ee26d8dddcccda95b373ad8ce0ebdbb00cfd\",\"0xd97be3baebea30eedc318e82befd7b451fdca1ce\",\"0xa69ea3e7eb2937dbc56f1b93dbabbbe7484108d5\",\"0x46270faac76c1dcb9ea78bfc75d84b82b928962b\",\"0xeda7bd82aa45cb6f6ddc92ff432b9f1fc970cf6f\"];function Ba(e){return n(Ta,e)}var Ia=[\"aiff\",\"deb\",\"utz\",\"mpeg\",\"itp\",\"qxb\",\"mmf\",\"fbs\",\"aam\",\"link66\",\"mmr\",\"clkw\",\"vis\",\"eol\",\"cii\",\"ini\",\"uvd\",\"uvx\",\"kwd\",\"gqf\",\"onetoc2\",\"man\",\"z2\",\"urls\",\"ots\",\"cpp\",\"pub\",\"csp\",\"rdf\",\"list\",\"sfd-hdstx\",\"u32\",\"xhtml\",\"vxml\",\"ecma\",\"swi\",\"cpt\",\"gramps\",\"mb\",\"pre\",\"rs\",\"dts\",\"nnd\",\"atom\",\"pas\",\"uvvi\",\"p7b\",\"ptid\",\"djvu\",\"cmp\",\"msl\",\"oa2\",\"flw\",\"pcurl\",\"azs\",\"ssdl\",\"dotx\",\"mrcx\",\"ssf\",\"m3u\",\"onetoc\",\"w3d\",\"tpt\",\"mft\",\"yin\",\"ogg\",\"jsonml\",\"fst\",\"acc\",\"x3dvz\",\"mads\",\"sxg\",\"str\",\"ppsm\",\"pfx\",\"vsw\",\"irp\",\"meta4\",\"tex\",\"clkx\",\"chrt\",\"txt\",\"msf\",\"wvx\",\"et3\",\"bdm\",\"ods\",\"3ds\",\"smi\",\"skm\",\"t3\",\"asm\"];function Pa(e){return n(Ia,e)}var xa=[\"/opt/bin/turn_key_bedfordshire_contingency.mts.acu\",\"/lib/niches_account_springs.w3d.gtm\",\"/Applications/plains_fresh_hack.s.onepkg\",\"/usr/libexec/gold_plum_toys.mbk.xdf\",\"/net/green_terrace_faroe.csh.wspolicy\",\"/net/monitor_saint_engineer.mrc.ogv\",\"/usr/lib/dong.gsf.dxr\",\"/usr/include/rand_sleek.uvs.qxt\",\"/usr/buckinghamshire.pdb.so\",\"/tmp/soft.fxp.dist\",\"/lost+found/producer_metal_networked.spot.ktz\",\"/lost+found/gorgeous_plastic.z1.dwf\",\"/usr/sbin/car.cba.dssc\",\"/Applications/responsive_mobile.twds.markdown\",\"/usr/share/copying.scq.teacher\",\"/bin/neural_net.btif.php\",\"/lost+found/sudanese.sm.m1v\",\"/usr/local/bin/compressing_bifurcated.crd.oda\",\"/etc/mail/uzbekistan_invoice_analyzer.lostxml.xht\",\"/usr/local/bin/turn_key.uvv.mng\",\"/usr/share/moldova_loan_administration.pvb.xaml\",\"/opt/include/frozen.z2.pnm\",\"/opt/bin/recontextualize_optimization.onetoc.opf\",\"/rescue/director_grocery.gml.nns\",\"/opt/bin/adp_keyboard.mcd.prf\",\"/Users/table_leading.ufd.aas\",\"/usr/include/avon_best_of_breed.tga.xif\",\"/etc/periodic/compatible.icm.pcf\",\"/var/log/withdrawal.sdc.aep\",\"/var/yp/tasty_silver_idaho.cbr.uvf\",\"/etc/periodic/web_readiness_international_licensed.lwp.xlf\",\"/var/spool/future_organic.bpk.wtb\",\"/home/account_cotton.xap.jpe\",\"/etc/mail/strategist.ngdat.mcd\",\"/lib/transmit_awesome.cba.flx\",\"/home/software.spc.dd2\",\"/rescue/sticky.asc.ots\",\"/usr/bin/fish_islands_estates.fdf.aif\",\"/usr/sbin/optimization_multi_tasking.hvp.mcd\",\"/etc/ppp/steel.cdf.mp4\",\"/etc/gorgeous_mews.pml.ppam\",\"/usr/lib/metrics.smzip.hpid\",\"/System/hacking.sass.sxg\",\"/home/user/gloves_grey.ami.svg\",\"/usr/include/overriding_png.txt.aw\",\"/lost+found/designer_decentralized.tcl.m4u\",\"/etc/namedb/de_engineered_bandwidth.igx.avi\",\"/opt/include/christmas.mp2a.vob\",\"/usr/X11R6/producer_deliver.txd.rtx\",\"/net/exploit_smtp.kpxx.qwd\",\"/private/var/azure_pine_iranian.rif.cst\",\"/Library/virtual.bdoc.ief\",\"/usr/bin/drive.hpid.joda\",\"/etc/namedb/account_parsing.bcpio.mj2\",\"/lib/configuration_programming.fly.nfo\",\"/usr/include/maryland_enterprise_wide_tuna.rmvb.mk3d\",\"/srv/back_end.java.mp3\",\"/rescue/trace_cotton_synergized.pgm.mpt\",\"/var/mail/incredible.elc.setreg\",\"/usr/share/avon_state.onepkg.dwg\",\"/usr/lib/composite_maryland.md.psd\",\"/lib/ports_calculating.ogg.wm\",\"/Network/embrace_interactions_internal.mng.lasxml\",\"/Users/mobility_avon_internal.mpp.cxx\",\"/home/smtp_keys_serbian.cbt.f90\",\"/boot/defaults/index_avon.stl.dxp\",\"/var/computers_bedfordshire.mp2.ami\",\"/etc/zimbabwe.html.crx\",\"/usr/share/alarm.vob.wmls\",\"/etc/namedb/calculate.cbz.gqs\",\"/usr/ports/experiences.uvvz.ifm\",\"/home/user/regional_gold.p8.silo\",\"/System/avon_representative_bandwidth_monitored.nlu.ez3\",\"/selinux/gardens.dwg.aiff\",\"/Library/direct.link66.ktx\",\"/sys/agp_borders_channels.uu.roa\",\"/opt/share/computer_indigo.sfs.x3dv\",\"/srv/payment_invoice.ppd.irm\",\"/usr/local/bin/indexing_health_tactics.fe_launch.sgl\",\"/sbin/online_technician.vcd.zmm\",\"/var/tmp/soap_cambridgeshire_regional.au.xps\",\"/opt/share/singapore.elc.hps\",\"/root/solutions_logistical.npx.kmz\",\"/sbin/system_contingency.xspf.pgp\",\"/root/dakota.pfa.xps\",\"/usr/X11R6/savings_expressway.json.uvf\",\"/usr/ports/intermediate_avon_soft.mml.xfdf\",\"/etc/namedb/won_fresh.et3.aam\",\"/dev/hacking.caf.vcd\",\"/sys/gorgeous_payment.skm.htm\",\"/Applications/niches.x3d.atom\",\"/Applications/website.pgp.clkp\",\"/etc/mail/barbados_azure.gre.php\",\"/var/tasty.cfs.uvvt\",\"/usr/src/real.box.gif\",\"/opt/include/engineer.qxd.xpw\",\"/opt/sbin/synthesizing_investor.ra.c4d\",\"/etc/defaults/incredible.spc.edm\",\"/usr/src/rufiyaa.odp.ace\",\"/usr/local/bin/tactics_maryland_xml.zip.gram\"];function Da(e){return n(xa,e)}var Ga=[\"model\",\"x-conference\",\"x-shader\",\"video\",\"application\",\"message\",\"multipart\",\"font\",\"audio\",\"image\",\"chemical\",\"text\"];function Fa(e){return n(Ga,e)}var qa=[\"Araucanian herring\",\"Pacific saury\",\"Indian oil sardine\",\"Nile tilapia\",\"Bombay-duck\",\"Japanese common catfish\",\"Whiteleg shrimp\",\"Haddock\",\"Chilean jack mackerel\",\"Pollock\",\"Southern rough shrimp\",\"Amur catfish\",\"Largehead hairtail\",\"Gazami crab\",\"Silver carp\",\"Blue whiting\",\"Pacific thread herring\",\"Pacific anchoveta\"];function La(e){return n(qa,e)}function Ra(e){const a={...e,fraction:e?.fraction??2};return n((function(){return s(a)}),e)}var Ea=[\"Inter\",\"DM Sans\",\"Space Mono\",\"Space Grotesk\",\"Work Sans\",\"Syne\",\"Libre Franklin\",\"Cormorant\",\"Fira Sans\",\"Eczar\",\"Alegreya Sans\",\"Alegreya\",\"Source Sans Pro\",\"Source Serif Pro\",\"Roboto\",\"Roboto Slab\",\"BioRhyme\",\"Inknut Antiqua\",\"Poppins\",\"Archivo Narrow\",\"Libre Baskerville\",\"Playfair Display\",\"Karla\",\"Lora\",\"Proza Libre\",\"Spectral\",\"IBM Plex Sans\",\"Crimson Text\",\"Montserrat\",\"Lato\",\"PT Sans\",\"PT Serif\",\"Cardo\",\"Chivo\",\"Neuton\",\"Rubik\",\"Open Sans\",\"Inconsolata\",\"Raleway\",\"Merriweather\"];function Ha(e){return n(Ea,e)}function Wa(e){return n((()=>`${k({min:0,max:2e3,fraction:2})}${e?.suffix??\"px\"}`),e)}var Na={china:[\"Peking roasted duck\",\"Kung pao chicken\",\"Sweet and sour pork\",\"Hot pot\",\"Dim sum\",\"Dumplings\",\"Ma po tofu\",\"Char siu\",\"Chicken chow mein\",\"Beef chow mein\",\"vegetable chow mein\",\"Chicken fried rice\",\"Beef fried rice\",\"Vegetable fried Rice\",\"Special fried Rice\",\"Sichuan pork\",\"Xiaolongbao\",\"Zhajiangmian\",\"Wonton soup\",\"Sweet and sour pork\",\"Duck spring Rolls\",\"Vegetable spring Rolls\",\"Wonton\",\"Peking duck\",\"Lamb hot pot\",\"Spicy crayfish\",\"Guilin rice noodles\",\"Lanzhou hand-pulled noodles\",\"Steamed crab\",\"Shredded pork with garlic sauce\",\"Red braised pork\",\"Sweet and sour Ribs\",\"Xinjiang\",\"Braised pork with vermicelli\"],italy:[\"Butternut squash risotto\",\"Mushroom risotto\",\"Beetroot risotto\",\"Courgette risotto\",\"Pizza\",\"Gnocchi\",\"Spaghetti bolognese\",\"Spaghetti carbonara\",\"Pesto alla Genovese\",\"Beef lasagne\",\"Vegetable lasagne\",\"Gelato\",\"Prosciutto di Parma\",\"Ribollita\",\"Bagna cauda\",\"Polenta\",\"Tortelli and ravioli\",\"Focaccia\",\"Garlic bread\",\"Arancini\",\"Il tartufo\",\"Panzerotto fritto\",\"Fiorentina\",\"Minestrone\",\"Frico\",\"Arrosticini\",\"Olive ascolante\",\"Fritto misto piemontes\",\"Tiramis\u00F9\"],india:[\"Biryani\",\"Dosa\",\"Tandoori chicken\",\"Samosas\",\"Chaat\",\"Plain naan\",\"Garlic naan\",\"Pilau rice\",\"Steamed rice\",\"Chicken madras\",\"Vegetable madras\",\"Chicken vindaloo\",\"Chicken jalfrezi\",\"Chicken roghan josh\",\"Lamb roghan josh\",\"Beef roghan josh\",\"Butter chicken\",\"Dosa\",\"Gulab jamun\",\"Chicken korma\",\"Mutter paneer\",\"Papadum\",\"Paratha\",\"Raita\",\"Saag paneer\",\"Tandoori chicken\",\"Chicken tikka masala\",\"Pakora\",\"Dal\",\"Chapati\",\"Pasanda\",\"Aloo gobi\",\"Kofta\",\"Chicken makhani\",\"Paneer naan\",\"Chana Aloo Curry\"],mexico:[\"Chilaquiles\",\"Pozole\",\"Tacos al pastor\",\"Tostadas\",\"Chiles en nogada\",\"Elote\",\"Enchiladas\",\"Mole\",\"Guacamole\",\"Tamales\",\"Huevos rancheros\",\"Machaca\",\"Discada\",\"Beef Burrito\",\"Chicken Burrito\",\"Pozole de pollo o duajolote\",\"Menudo\",\"Cochinita pibil\",\"Tamale\",\"Quesadilla\",\"Frijoles puercos\",\"Chile en nogada\",\"Esquites\",\"Alegria de amaranto\",\"Pipi\u00E1n\",\"Aguachile\",\"Ceviche\",\"Pescado zarandeado\",\"Camarones a la diabla\",\"Birria de chivo\",\"Tlayuda\",\"Guacamole con chapulines\",\"Flautas\",\"Torta Ahogada\",\"Carnitas\",\"Caldo Azteca\",\"Gorditas de Nata\"],japan:[\"Sushi\",\"Udon\",\"Tofu\",\"Tempura\",\"Yakitori\",\"Sashimi\",\"Ramen\",\"Donburi\",\"Natto\",\"Oden\",\"Tamagoyaki\",\"Soba\",\"Tonkatsu\",\"Kashipan\",\"Sukiyaki\",\"Miso soup\",\"Okonomiyaki\",\"Mentaiko\",\"Nikujaga\",\"Unagi no kabayaki\",\"Shabu Shabu\",\"Onigiri\",\"Gyoza\",\"Takoyaki\",\"aiseki ryori\",\"Edamame\",\"Yakisoba\",\"Chawanmushi\",\"Wagashi\"],france:[\"Foie gras\",\"Hu\u00EEtres\",\"Cassoulet\",\"Poulet basquaise\",\"Escargots au beurre persill\u00E9\",\"Mouclade charentaise\",\"Galettes bretonnes\",\"Flemish carbonnade\",\"Quiche lorraine\",\"Raclette\",\"Cheese fondue\",\"Beef fondue\",\"Gratin dauphinois\",\"Tartiflette\",\"Bouillabaisse\",\"Ratatouille\",\"Boeuf bourguignon\",\"Blanquette de veau\",\"Pot-au-feu\",\"Coq-au-vin\",\"Hachis parmentier\",\"Steak tartare\",\"Choucroute\",\"Souffl\u00E9 au fromage\",\"Cuisses de grenouilles\",\"Soupe \u00E0 l\u2019oignon\",\"Baguette\",\"Croissant\",\"French cheeses\",\"Fondant au chocolat\",\"Tarte tatin\",\"Macarons\",\"Cr\u00E8me br\u00FBl\u00E9e\",\"\u00CEle flottante\",\"Profiteroles\",\"Pain au chocolat\"],lebanon:[\"Kibbeh\",\"Kafta\",\"Kanafeh\",\"Hummus\",\"Rice pilaf\",\"Fattoush\",\"Manakish\",\"Tabbouleh\",\"Sfeeha\",\"Fattoush\",\"Labneh\",\"Muhammara\",\"Lahm bi ajin\",\"Kaak\",\"Chanklich\",\"Mssabaha\",\"Shawarma\",\"Kebbe\",\"Falafel\",\"Halewit el jeben\",\"Namoura\",\"Maamoul\",\"Foul mdammas\",\"Balila\",\"Kawarma\",\"Fattouch\"],thailand:[\"Pad kra pao moo\",\"Tom kha gai\",\"Khao Pad\",\"Chicken pad Thai\",\"Vegetable pad Thai\",\"Moo satay\",\"Tom yum goong\",\"Khao niew mamuang\",\"Kai yad sai\",\"Khao soi\",\"Pad see ew\",\"Laab moo\",\"Gaeng panang\",\"Gai pad med ma muang\",\"Som tam\",\"Poh pia tod\",\"Gaeng massaman\",\"Pla kapung nueng manao\",\"Tod mun pla\",\"Gaeng ped\",\"Gaeng garee\",\"Gaeng keow wan\",\"Moo ping\",\"Durian\",\"Sai ooah\",\"Hoy tod\",\"Kuay teow reua\",\"Mu kratha\",\"Kao ka moo\",\"Yam nua\"],greece:[\"Moussaka\",\"Papoutsakia\",\"Pastitsio\",\"Souvlaki\",\"Soutzoukakia\",\"Stifado\",\"Tomatokeftedes\",\"Tzatziki\",\"Kolokithokeftedes\",\"Giouvetsi\",\"Choriatiki\",\"Kleftiko\",\"Gemista\",\"Fasolada\",\"Bougatsa\",\"Tiropita\",\"Spanakopita\",\"Feta Cheese with Honey\",\"Horta\",\"Tirokroketes\",\"Briam\",\"Saganaki\",\"Gigantes\",\"Dolmades\",\"Fasolatha\",\"Koulouri\",\"Loukoumades\",\"Gyros\",\"Galaktoboureko\",\"Baklava\"],turkey:[\"\u015Ei\u015F kebap\",\"D\u00F6ner\",\"K\u00F6fte\",\"Pide\",\"Kumpir\",\"Meze\",\"Mant\u0131\",\"Lahmacun\",\"Menemen\",\"\u015Ei\u015F kebap\",\"\u0130skender kebab\",\"Corba\",\"Kuzu tandir\",\"\u00C7i\u011F K\u00F6fte\",\"Pilav\",\"Yaprak sarma\",\"Dolma\",\"\u0130mam bay\u0131ld\u0131\",\"Borek\",\"Durum\",\"Kumpir\",\"Balik ekmek\",\"Simit\",\"Kunefe\",\"Baklava\",\"Lokum\",\"Halva\",\"Mozzaik pasta\",\"G\u00FClla\u00E7\",\"Mercimek K\u00F6ftesi\",\"Haydari\",\"Tursu suyu\",\"Kahvalti\",\"Kazan dibi\",\"Hunkar begendi\",\"Islak burgers\",\"Salep\",\"Yogurtlu kebab\"],spain:[\"Tortilla de patatas\",\"Fabada asturiana\",\"Cal\u00E7ots\",\"Boquerones al vinagre\",\"Empanada gallega\",\"Paella\",\"Gazpacho\",\"Gachas\",\"Migas\",\"Bocadillo de calamares\",\"Pulpo a feira\",\"Caldo gallego\",\"Lentejas con chorizo\",\"Cocido madrile\u00F1o\",\"Cachopo\",\"Caracoles\"],venezuela:[\"Pabell\u00F3n criollo\",\"Arepa\",\"Mondongo\",\"Empanadas\",\"Quesillo\",\"Chicha andina\",\"Teque\u00F1os\",\"Cachapa\",\"Hallaca\",\"Perico\",\"Pasticho\",\"Mandocas\",\"Caraotas negras\",\"Patacones\",\"Dulce de leche\",\"Pan de Jam\u00F3n\"],chile:[\"Humitas\",\"Empanadas\",\"Porotos con riendas\",\"Completos\",\"Manjar\",\"Cordero al palo\",\"Pastel de choclo\",\"Mote con huesillos\",\"Sopaipillas\",\"Curanto\"],argentina:[\"Milanesas\",\"Empanadas\",\"Pizza fugazeta\",\"Asado\",\"Choripan\",\"Bondiola\",\"Bife de chorizo\"],colombia:[\"Bandeja paisa\",\"Chuleta valluna\",\"Sancocho trif\u00E1sico\",\"Empanada valluna\",\"Salpicon de frutas\",\"Pastel de garbanzo\",\"Ajiaco\",\"Arepas\",\"Arroz de lisa\",\"Sancocho\",\"Pan de bono\",\"Cuchuco\",\"Oblea\",\"Cazuela de mariscos\",\"Pan de yuca\",\"Bollo Limpio\",\"Almoj\u00E1bana\",\"Empanadas\",\"Arroz con Coco\",\"Sopa de mondongo\",\"Cazuela de Mariscos\",\"Arroz con Pollo\",\"Arepa de Huevo\",\"Mote de Queso\"],ecuador:[\"Encebollado\",\"Ceviche\",\"Tigrillo\",\"Bolon de verde\",\"Llapingacho\",\"Mote pillo\",\"Locro de papa\",\"Churrasco\"],peru:[\"Ceviche\",\"Arroz con pollo\",\"Aji de gallina\",\"Llunca de gallina\"],\"el salvador\":[\"Pupusa\",\"Sopa de patas\",\"Rigua\",\"Flor de izote con huevo\",\"Gallo en chicha\"],romania:[\"Sarmale\",\"Mici\",\"Pomana porcului\",\"Ciorb\u0103 de fasole cu ciolan\",\"Ciorb\u0103 de burt\u0103\",\"Ciorb\u0103 r\u0103d\u0103u\u021Bean\u0103\",\"Pl\u0103cint\u0103 cu br\u00E2nz\u0103\",\"Ciorb\u0103 de potroace\",\"M\u0103m\u0103lig\u0103 cu br\u00E2nz\u0103 \u0219i sm\u00E2nt\u00E2n\u0103\",\"Tochitur\u0103\",\"Piftie\",\"Iahnie de fasole\",\"Sl\u0103nin\u0103 afumat\u0103\",\"C\u00E2rna\u021Bi afuma\u021Bi\",\"Varz\u0103 a la Cluj\",\"Gula\u0219 de cartofi cu afum\u0103tur\u0103\",\"Cozonac de cas\u0103\",\"Ciorb\u0103 ardeleneasc\u0103 de porc\",\"Mucenici moldovene\u0219ti\",\"Salat\u0103 de boeuf\",\"Dovleac copt\",\"Papana\u0219i cu br\u00E2nz\u0103 de vac\u0103 \u0219i afine\",\"Drob de miel\",\"P\u00E2rjoale moldovene\u0219ti\",\"Zacusc\u0103 de vinete\",\"Zacusc\u0103 de fasole\",\"Turt\u0103 dulce\",\"Cl\u0103titele cu gem\",\"Cl\u0103titele cu br\u00E2nza de vac\u0103\",\"Balmo\u0219\",\"Cozonac\",\"Chiftele\"]};const za=Object.keys(Na)?.length;function Ka(e){const a=Na,t=e?.origin;if(!za)throw\"No foods found\";if(t&&!a[t])throw\"No foods found for selected origin\";return n((()=>{if(t)return r(a[t]);const e=s({min:0,max:za-1}),i=(o=a,Object.keys(o))[e];var o;return r(a[i])}),e)}var Oa=[\"AFC Bournemouth\",\"Alav\u00E9s\",\"Arsenal\",\"Aston Villa\",\"Athletic Bilbao\",\"Atl\u00E9tico Madrid\",\"Barcelona\",\"Barnsley\",\"Birmingham City\",\"Blackburn Rovers\",\"Blackpool\",\"Bolton Wanderers\",\"Bradford City\",\"Brentford\",\"Brighton and Hove Albion\",\"Burnley\",\"C\u00E1diz\",\"Cardiff City\",\"Celta Vigo\",\"Charlton Athletic\",\"Chelsea\",\"Coventry City\",\"Crystal Palace\",\"Derby County\",\"Elche\",\"Espanyol\",\"Everton\",\"Fulham\",\"Getafe\",\"Granada\",\"Huddersfield Town\",\"Hull City\",\"Ipswich Town\",\"Leeds United\",\"Leicester City\",\"Levante\",\"Liverpool\",\"Mallorca\",\"Manchester City\",\"Manchester United\",\"Middlesbrough\",\"Newcastle United\",\"Norwich City\",\"Nottingham Forest\",\"Oldham Athletic\",\"Osasuna\",\"Portsmouth\",\"Queens Park Rangers\",\"Rayo Vallecano\",\"Reading\",\"Real Betis\",\"Real Madrid\",\"Real Sociedad\",\"Sevilla\",\"Sheffield United\",\"Sheffield Wednesday\",\"Southampton\",\"Stoke City\",\"Sunderland\",\"Swansea City\",\"Swindon Town\",\"Tottenham Hotspur\",\"Valencia\",\"Villarreal\",\"Watford\",\"West Bromwich Albion\",\"West Ham United\",\"Wigan Athletic\",\"Wimbledon\",\"Wolverhampton Wanderers\",\"River Plate\",\"Boca Juniors\",\"Atl\u00E9tico Nacional\",\"Independiente\",\"Llaneros\",\"Tigre\",\"Palmeiras\",\"Atletico Paranaense\",\"Sydney FC\",\"Melbourne Victory\"];function Ja(e){return n(Oa,e)}var Va=[\"always\",\"constantly\",\"usually\",\"normally\",\"frequently\",\"regularly\",\"often\",\"sometimes\",\"occasionally\",\"rarely\",\"infrequently\",\"seldom\",\"hardly\",\"never\",\"hourly\",\"daily\",\"weekly\",\"monthly\",\"yearly\",\"once\",\"twice\"];function Ua(e){return n(Va,e)}function ja(e){const a={withAccents:e?.withAccents,gender:e?.gender};return n((()=>`${va(a)} ${Sa(a)}`),e)}const _a=31536e6;function Ya(e){const a=e?.years??1;if(a<=0)throw new Error(\"Years must be positive, use past() instead\");const t=a*_a,i=new Date,o=new Date(i.getTime()+t);return n((()=>Q({from:i,to:o})),e)}var Qa=[\"Cisgender\",\"Male to female transgender woman\",\"Androgyne\",\"Bigender\",\"Pangender\",\"Cis\",\"Transexual Person\",\"Transgender Female\",\"Female to male transsexual man\",\"Gender neutral\",\"Intersex woman\",\"Intersex\",\"Transexual Female\",\"Trans*Male\",\"Cisgender Male\",\"Transexual Woman\",\"Trans Female\",\"Gender Variant\",\"Male to Female\",\"Two-spirit\",\"Trans Man\",\"Gender Nonconforming\",\"Non-binary\",\"Transgender Person\",\"Cisgender Woman\",\"Cis Woman\",\"Cis Female\",\"Trans*Woman\",\"Polygender\",\"M2F\",\"Neither\",\"Male to female transsexual woman\",\"Intersex man\",\"Asexual\",\"Transexual\",\"Cis Male\",\"T* woman\",\"Woman\",\"Cisgender Female\",\"Other\",\"T* man\",\"Androgynous\",\"Trans Male\",\"Male to female trans woman\",\"Transexual Male\",\"Cis Man\",\"Female to male transgender man\",\"Genderqueer\",\"Neutrois\",\"Intersex person\",\"FTM\",\"Hermaphrodite\",\"Female to Male\"],$a=[\"Andro\",\"Bi\",\"Pan\",\"F\",\"M\",\"Cis\",\"Cis M\",\"Cis W\",\"Cis F\",\"Demi\",\"T*\",\"T F\",\"GV\",\"T M\",\"T*M\",\"T*W\",\"Non-bi\",\"Poly\",\"M2F\",\"M2FT\",\"Ace\",\"W\",\"Other\",\"NC\",\"Q\",\"TC\",\"TGNC\",\"FTM\",\"GSM\"];function Za(e){return n(e?.code?$a:Qa,e)}var Xa=[\"protocol-navigate\",\"array-quantify\",\"transmitter-override\",\"circuit-compress\",\"feed-program\",\"microchip-parse\",\"feed-quantify\",\"card-synthesize\",\"bus-reboot\",\"application-input\",\"firewall-generate\",\"monitor-transmit\",\"sensor-parse\",\"port-compress\",\"interface-reboot\",\"capacitor-program\",\"monitor-quantify\",\"transmitter-input\"];function et(e){return n(Xa,e)}function at(){return k({min:0,max:15}).toString(16)}function tt(e){return n(at,e)}function it(e){return()=>{let a=\"\";for(let t=0;t<e;t++)a+=tt();return a}}const ot=40;function nt(e){return n(it(ot),e)}function rt(e){return n((()=>{const e=[];for(let a=0;a<k({min:2,max:5});a++)e.push(ha());return e.join(\" \")}),e)}function st(e){return n((()=>`commit ${nt()}\\\\r\\\\nAuthor: ${ja()} <${Ca()}>\\\\r\\\\nDate: ${(new Date).toString()}\\\\r\\\\n\\\\r\\\\n${rt()}`),e)}function lt(e){return n(it(7),e)}function ut(e){return n((()=>`#${i().toString(16).substr(2,6)}`),e)}var ct=[\"Pottok\",\"Dutch Heavy Draft\",\"Spanish Barb\",\"Russian Heavy Draft\",\"American Saddlebred\",\"Camarillo White Horse\",\"Karachai Horse\",\"Andalusian Horse\",\"Poitevin Horse\",\"Colorado Ranger\",\"Paso Fino\",\"Swiss Warmblood\",\"Murgese\",\"Selle Fran\u00E7ais\",\"Riwoche Horse\",\"French Trotter\",\"American Indian Horse\",\"Jeju Horse\"];function dt(e){return n(ct,e)}function ht(e){return n((()=>{const[a,t,i,o]=[s({min:0,max:359,fraction:0}),s({min:0,max:100,fraction:0}),s({min:0,max:100,fraction:0}),Ra({min:.1,max:1})];return e?.alpha?`hsla(${a}, ${t}%, ${i}%, ${o})`:`hsl(${a}, ${t}%, ${i}%)`}),e)}var mt=[\"GET\",\"POST\",\"PUT\",\"PATCH\",\"DELETE\"];function pt(e){return n(mt,e)}function yt(e){return n((()=>`${e?.countryCode??X()}${k({min:10,max:99}).toString()}${Array(k({min:12,max:30})).fill(\"#\").join(\"\").replace(/#/g,(()=>S().toString()))}`.toUpperCase()),e)}var gt=[\"Anaheim Ducks\",\"Arizona Coyotes\",\"Boston Bruins\",\"Buffalo Sabres\",\"Calgary Flames\",\"Carolina Hurricanes\",\"Chicago Blackhawks\",\"Colorado Avalanche\",\"Columbus Blue Jackets\",\"Dallas Stars\",\"Detroit Red Wings\",\"Edmonton Oilers\",\"Florida Panthers\",\"Los Angeles Kings\",\"Minnesota Wild\",\"Montr\u00E9al Canadiens\",\"Nashville Predators\",\"New Jersey Devils\",\"New York Islanders\",\"New York Rangers\",\"Ottawa Senators\",\"Philadelphia Flyers\",\"Pittsburgh Penguins\",\"San Jose Sharks\",\"Seattle Kraken\",\"St. Louis Blues\",\"Tampa Bay Lightning\",\"Toronto Maple Leafs\",\"Vancouver Canucks\",\"Vegas Golden Knights\",\"Washington Capitals\",\"Winnipeg Jets\"];function ft(e){return n(gt,e)}function bt(e){const[a,t,i]=[e?.width??e?.height??500,e?.height??e?.width??500,e?.grayscale??!1];return n((()=>`https://picsum.photos/${a}/${t}${i?\"?grayscale\":\"\"}`),e)}var wt=[\"Slack\",\"GitHub\",\"Jira\",\"AWS Lambda\",\"Bitbucket\",\"Bitbucket Server\",\"GitHub Enterprise\",\"GitLab\",\"Grafana\",\"Jira Server\",\"Microsoft Teams\",\"PagerDuty\",\"Vercel\",\"Azure DevOps\",\"WebHooks\",\"Amixr\",\"Calixa\",\"ClickUp\",\"Komodor\",\"Linear\",\"Rookout\",\"Shortcut\",\"Spike.sh\",\"Split\",\"TaskCall\",\"Teamwork\",\"Asana\",\"OpenReplay\",\"Bitbucket Pipelines\",\"Datadog\",\"FullStory\",\"GitHub Actions\",\"Heroku\",\"InsightFinder\",\"Netlify\",\"Octohook\",\"Learn More\",\"Pivotal Tracker\",\"Rocket.Chat\",\"Trello\",\"Twilio (SMS)\",\"OpsGenie\",\"Phabricator\",\"Pushover\",\"Redmine\",\"SessionStack\",\"VictorOps\",\"Amazon SQS\",\"Segment\",\"Splunk\"];function vt(e){return n(wt,e)}const kt={min:0,max:255};function St(e){return n((()=>Array.from({length:4},(()=>k(kt))).join(\".\")),e)}function Ct(e){return n((()=>Array.from({length:8},(()=>Array.from({length:4},(()=>tt())).join(\"\"))).join(\":\")),e)}var At=[\"Brand\",\"Tactics\",\"Markets\",\"Usability\",\"Operations\",\"Integration\",\"Identity\",\"Marketing\",\"Creative\",\"Response\",\"Branding\",\"Quality\",\"Program\",\"Accounts\",\"Accountability\",\"Interactions\",\"Security\",\"Applications\",\"Configuration\",\"Factors\",\"Paradigm\",\"Division\",\"Group\",\"Data\",\"Directives\",\"Optimization\",\"Web\",\"Functionality\",\"Research\",\"Intranet\",\"Solutions\",\"Mobility\",\"Communications\",\"Metrics\",\"Assurance\"];function Mt(e){return n(At,e)}var Tt=[\"Senior\",\"Corporate\",\"Future\",\"International\",\"Global\",\"Central\",\"Product\",\"Internal\",\"National\",\"Direct\",\"Customer\",\"Human\",\"Lead\",\"District\",\"Chief\",\"Dynamic\",\"Principal\",\"Forward\",\"Legacy\",\"Regional\",\"Investor\"];function Bt(e){return n(Tt,e)}var It=[\"Internal Quality Coordinator\",\"Legacy Marketing Planner\",\"Investor Configuration Specialist\",\"Human Directives Engineer\",\"District Quality Technician\",\"Central Mobility Liaison\",\"International Interactions Orchestrator\",\"Central Implementation Producer\",\"Forward Configuration Facilitator\",\"Internal Solutions Coordinator\",\"Global Web Agent\",\"International Brand Associate\",\"Regional Applications Strategist\",\"Direct Brand Analyst\",\"Investor Mobility Consultant\",\"Principal Division Supervisor\",\"Chief Interactions Administrator\",\"District Web Facilitator\",\"Investor Metrics Consultant\",\"Corporate Applications Director\",\"Corporate Group Planner\",\"Global Functionality Manager\",\"Principal Web Engineer\",\"National Directives Executive\",\"Dynamic Factors Officer\",\"Principal Identity Supervisor\",\"Dynamic Solutions Administrator\",\"Corporate Interactions Analyst\",\"Senior Configuration Consultant\",\"Human Web Consultant\",\"Customer Metrics Technician\",\"Senior Solutions Producer\",\"Central Operations Technician\",\"Product Security Producer\",\"Forward Security Executive\",\"Dynamic Assurance Architect\",\"Internal Integration Representative\",\"Lead Web Developer\",\"Human Directives Assistant\",\"Internal Operations Representative\",\"Chief Communications Associate\",\"Principal Branding Strategist\",\"International Paradigm Specialist\",\"Regional Security Administrator\",\"Forward Operations Architect\",\"Product Mobility Orchestrator\",\"Lead Functionality Orchestrator\",\"Lead Solutions Consultant\",\"Human Markets Strategist\",\"International Infrastructure Engineer\",\"Dynamic Response Officer\",\"Dynamic Quality Engineer\",\"National Creative Strategist\",\"Principal Security Representative\",\"Internal Usability Executive\",\"Product Usability Coordinator\",\"Global Optimization Associate\",\"Global Configuration Executive\",\"Global Research Engineer\",\"Regional Accounts Associate\",\"Central Identity Agent\",\"Principal Program Officer\",\"Senior Group Developer\",\"Forward Research Coordinator\",\"Legacy Identity Developer\",\"Central Interactions Developer\",\"Direct Research Technician\",\"Chief Web Planner\",\"Investor Program Architect\",\"National Intranet Architect\",\"Principal Operations Administrator\",\"Legacy Security Associate\",\"Global Communications Architect\",\"Forward Configuration Analyst\",\"Customer Program Representative\",\"Dynamic Communications Director\",\"Dynamic Division Architect\",\"Customer Security Manager\",\"Dynamic Branding Analyst\",\"Internal Configuration Agent\",\"Principal Program Liaison\",\"Regional Research Administrator\",\"Dynamic Functionality Coordinator\",\"Investor Configuration Producer\",\"Direct Web Engineer\",\"Central Implementation Orchestrator\",\"Investor Tactics Strategist\",\"National Creative Agent\",\"Central Intranet Specialist\",\"Future Creative Strategist\",\"Product Intranet Liaison\",\"Dynamic Markets Consultant\",\"Global Infrastructure Administrator\",\"Lead Interactions Supervisor\",\"Future Usability Designer\",\"Principal Research Producer\",\"International Quality Facilitator\",\"Legacy Data Director\",\"Dynamic Infrastructure Representative\",\"Direct Paradigm Analyst\"];function Pt(e){return n(It,e)}var xt=[\"Director\",\"Representative\",\"Officer\",\"Coordinator\",\"Engineer\",\"Designer\",\"Developer\",\"Specialist\",\"Analyst\",\"Orchestrator\",\"Technician\",\"Executive\",\"Assistant\",\"Producer\",\"Liaison\",\"Consultant\",\"Architect\",\"Associate\",\"Manager\",\"Agent\",\"Facilitator\",\"Planner\",\"Administrator\",\"Supervisor\"];function Dt(e){return n(xt,e)}var Gt=[\"Afrikaans\",\"Amharic\",\"Arabic\",\"Azerbaijani\",\"Byelorussian\",\"Bulgarian\",\"Bengali,Bangla\",\"Bosnian\",\"Catalan\",\"Cebuano\",\"Corsican\",\"Czech\",\"Welsh\",\"Danish\",\"German\",\"Greek\",\"English\",\"Esperanto\",\"Spanish\",\"Estonian\",\"Basque\",\"Persian\",\"Finnish\",\"French\",\"Frisian\",\"Irish\",\"Gaelic (Scots Gaelic)\",\"Galician\",\"Gujarati\",\"Hausa\",\"Hindi\",\"Hmong\",\"Croatian\",\"Haitian Creole\",\"Hungarian\",\"Armenian\",\"Indonesian\",\"Igbo\",\"Icelandic\",\"Italian\",\"Hebrew\",\"Japanese\",\"Javanese\",\"Georgian\",\"Kazakh\",\"Cambodian\",\"Kannada\",\"Korean\",\"Kurdish\",\"Kirghiz\",\"Latin\",\"Luxembourgish\",\"Laothian\",\"Lithuanian\",\"Latvian,Lettish\",\"Malagasy\",\"Maori\",\"Macedonian\",\"Malayalam\",\"Mongolian\",\"Marathi\",\"Malay\",\"Maltese\",\"Burmese\",\"Nepali\",\"Dutch\",\"Norwegian\",\"Nyanja\",\"Punjabi\",\"Polish\",\"Pashto,Pushto\",\"Portuguese\",\"Romanian\",\"Russian\",\"Sindhi\",\"Singhalese\",\"Slovak\",\"Slovenian\",\"Samoan\",\"Shona\",\"Somali\",\"Albanian\",\"Serbian\",\"Sesotho\",\"Sundanese\",\"Swedish\",\"Swahili\",\"Tamil\",\"Tegulu\",\"Tajik\",\"Thai\",\"Turkish\",\"Ukrainian\",\"Urdu\",\"Uzbek\",\"Vietnamese\",\"Xhosa\",\"Yiddish\",\"Yoruba\",\"Chinese\",\"Zulu\"],Ft=[\"af\",\"am\",\"ar\",\"az\",\"be\",\"bg\",\"bn\",\"bs\",\"ca\",\"ce\",\"co\",\"cs\",\"cy\",\"da\",\"de\",\"el\",\"en\",\"eo\",\"es\",\"et\",\"eu\",\"fa\",\"fi\",\"fr\",\"fy\",\"ga\",\"gd\",\"gl\",\"gu\",\"ha\",\"hi\",\"hm\",\"hr\",\"ht\",\"hu\",\"hy\",\"id\",\"ig\",\"is\",\"it\",\"iw\",\"ja\",\"jv\",\"ka\",\"kk\",\"km\",\"kn\",\"ko\",\"ku\",\"ky\",\"la\",\"lb\",\"lo\",\"lt\",\"lv\",\"mg\",\"mi\",\"mk\",\"ml\",\"mn\",\"mr\",\"ms\",\"mt\",\"my\",\"ne\",\"nl\",\"no\",\"ny\",\"pa\",\"pl\",\"ps\",\"pt\",\"ro\",\"ru\",\"sd\",\"si\",\"sk\",\"sl\",\"sm\",\"sn\",\"so\",\"sq\",\"sr\",\"st\",\"su\",\"sv\",\"sw\",\"ta\",\"te\",\"tg\",\"th\",\"tr\",\"uk\",\"ur\",\"uz\",\"vi\",\"xh\",\"yi\",\"yo\",\"zh\",\"zu\"];function qt(e){return n(e?.code?Ft:Gt,e)}function Lt(e){return n((()=>s({min:-90,max:90,fraction:3})),e)}const Rt=50;function Et(e){const a=s({min:1,max:10,fraction:0});return 1===a||e===Rt?\".\":2===a?\",\":\"\"}function Ht(e){return n((()=>{let e=ha({capitalize:!0}),a=1;for(;a<Rt;){const t=ha();let i=\"\";if(a++,a>3&&(i=Et(a)),e+=` ${t}${i}`,\".\"===i)break}return e}),e)}function Wt(e){const a=e?.lineCount??5;if(a<1||isNaN(a))throw\"Line count must be greater than 0\";return n((()=>{let e=`${Ht()}\\n`;for(let t=0;t<a-1;t++)e+=`${Ht()}\\n`;return e}),e)}var Nt=[\"Commodi est rerum dolorum quae voluptatem aliquam.\",\"Minima qui ut nulla eius.\\\\nA incidunt ipsum tempore porro tempore.\\\\nFugit quas voluptas ducimus aut.\\\\nTempore nostrum velit expedita voluptate est.\\\\nNam iste explicabo tempore impedit voluptas.\",\"Dolorem sed neque sequi ad nulla.\\\\nEum tempora ut sit et ducimus.\\\\nVel a expedita dignissimos.\\\\nFacilis iste ut.\\\\nAd saepe doloremque possimus mollitia atque explicabo.\",\"Omnis quidem vero eius sed laudantium a ex a saepe.\\\\nModi qui laudantium in libero odit et impedit.\",\"Doloribus temporibus dolorum placeat.\\\\nFugit nulla quaerat.\\\\nEveniet ratione odit sed non rerum.\\\\nNemo tempore eveniet veritatis alias repellat et.\\\\nVoluptas nisi quis commodi id.\",\"Sunt hic autem eum sint quia vitae.\",\"Laborum est maxime enim accusantium magnam.\\\\nRerum dolorum minus laudantium delectus eligendi necessitatibus quia.\\\\nDeleniti consequatur explicabo aut nobis est vero tempore.\\\\nExcepturi earum quo quod voluptatem quo iure vel sapiente occaecati.\\\\nConsectetur consequatur corporis doloribus omnis harum voluptas esse amet.\",\"Sed dolores nostrum quis.\",\"Autem sed aspernatur aut sint ipsam et facere rerum voluptas.\\\\nPerferendis eligendi molestias laudantium eveniet eos.\\\\nId veniam asperiores quis voluptates aut deserunt.\\\\nTempora et eius dignissimos nulla iusto et omnis pariatur.\\\\nSit mollitia eum blanditiis suscipit.\",\"Temporibus aut adipisci magnam aliquam eveniet nihil laudantium reprehenderit sit.\\\\nAspernatur cumque labore voluptates mollitia deleniti et.\",\"Ipsam voluptate fugiat iusto illo dignissimos rerum sint placeat.\\\\nLabore sit omnis.\",\"Deserunt ab porro similique est accusamus id enim aut suscipit.\\\\nSoluta reprehenderit error nesciunt odit veniam sed.\\\\nDolore optio qui aut ab.\\\\nAut minima provident eius repudiandae a quibusdam in nisi quam.\",\"Mollitia nostrum exercitationem sunt rem.\\\\nRem et voluptas consequatur mollitia nostrum.\\\\nSunt nesciunt et pariatur quam provident impedit.\",\"Ipsum eos ipsam.\\\\nAperiam quia quis sit fugiat saepe voluptas est.\\\\nDolores et veniam ut.\\\\nQuibusdam voluptatum quis.\\\\nEt omnis ut corporis.\",\"Quia consequatur voluptatibus et.\\\\nVoluptatibus aspernatur et.\\\\nDicta architecto qui dignissimos.\\\\nVeritatis facilis voluptatem inventore aliquid cum.\\\\nNumquam odio quis porro sunt adipisci culpa.\",\"Totam ab necessitatibus quidem non.\",\"Quia quo iste et aperiam voluptas consectetur a omnis et.\\\\nDolores et earum consequuntur sunt et.\\\\nEa nulla ab voluptatem dicta vel.\",\"Qui corrupti at eius cumque adipisci ut sunt voluptates ab.\",\"Blanditiis non quos aut dolore nulla unde.\\\\nIncidunt repudiandae amet eius porro.\\\\nTempora unde sapiente repellat voluptatem omnis et ut omnis in.\\\\nEt pariatur odit qui minima perspiciatis non dolores.\",\"Sed odit quidem qui sed eum id eligendi laboriosam.\",\"Nisi vitae nostrum perspiciatis impedit laborum repellat ullam et ut.\",\"Quas ea voluptatem iste iure.\\\\nEt soluta et doloremque vero quis occaecati et fuga.\\\\nIncidunt recusandae dignissimos iusto quisquam sed unde at ea incidunt.\\\\nId voluptate incidunt qui totam autem voluptas maxime atque quaerat.\\\\nCorporis iste ut molestiae.\",\"Qui soluta veritatis autem repellat et inventore occaecati.\",\"Totam voluptas consequatur officiis.\\\\nPlaceat sit nobis ut est quae dolore consequuntur vel.\\\\nRepudiandae ut molestias rerum occaecati quod.\\\\nRerum optio minus aliquid.\\\\nIllum et voluptas iusto molestiae nulla praesentium deserunt est voluptas.\",\"Ut atque harum inventore natus facere sed molestiae.\\\\nQuia aliquid ut.\\\\nAnimi sunt rem et sit ullam dolorem ab consequatur modi.\",\"Ut in omnis sapiente laboriosam autem laborum.\\\\nRepellendus et beatae qui qui numquam saepe.\\\\nNon vitae molestias quos illum.\\\\nSed fugiat qui ullam molestias ad ullam dolore.\\\\nAutem ex minus distinctio dicta sapiente beatae veritatis at.\",\"Nemo repudiandae molestiae.\\\\nNobis sed ducimus aperiam.\\\\nBeatae cupiditate praesentium in omnis.\",\"Voluptatem sed debitis.\\\\nArchitecto sint et deleniti et quod possimus cupiditate.\\\\nTempore aut eum ipsum recusandae aliquid.\",\"Qui eligendi molestiae molestiae sit rem quis.\\\\nDucimus voluptates ut ducimus possimus quis.\\\\nCupiditate velit cupiditate harum impedit minima veniam ipsam amet atque.\\\\nEt architecto molestiae omnis eos aspernatur voluptatem occaecati non.\\\\nMolestiae inventore aut aut nesciunt totam eum a expedita illo.\",\"Consequuntur dolorem enim eos sit.\\\\nMollitia impedit dolor optio et dolorem.\\\\nVitae nulla eos excepturi culpa.\\\\nMagni iure optio quaerat.\\\\nAb sed sit autem et ut eum.\",\"Et fuga repellendus magnam dignissimos eius aspernatur rerum.\",\"Debitis facilis dolorum maiores aut et.\\\\nEa voluptas magnam deserunt at ut sunt voluptatem.\\\\nEt voluptatem voluptatem.\\\\nUt est fugiat magnam.\",\"Temporibus quod quidem placeat porro.\\\\nUnde ipsam vel explicabo.\",\"Voluptatum tempora voluptas est odio iure odio dolorem.\\\\nVoluptatum est deleniti explicabo explicabo harum provident quis molestiae.\",\"Laborum excepturi numquam sequi reiciendis voluptate repellat sint.\\\\nQui inventore ipsam voluptatem sit quos.\\\\nDolorem aut quod suscipit fugiat culpa.\\\\nOdio nostrum praesentium accusantium dolor quo.\",\"Voluptatem velit ut deserunt.\\\\nQuibusdam eius repellat.\",\"Illum voluptates ut vel et.\\\\nUt debitis excepturi suscipit perferendis officia numquam possimus.\\\\nFacere sit doloremque repudiandae corrupti veniam qui.\",\"Autem reiciendis provident iure possimus.\\\\nOccaecati soluta quibusdam libero tenetur minus vel sit illo.\\\\nCulpa optio dolorem eos similique voluptatem voluptatibus error accusantium.\",\"Ipsa cumque ad repellat qui libero quia impedit fugiat.\\\\nExcepturi ut vitae recusandae eos quisquam et voluptatem.\\\\nNeque nostrum distinctio provident eius tempore odio aliquid.\\\\nSaepe ut suscipit architecto.\",\"Non natus nihil.\",\"Ad voluptate vel.\\\\nAut aut dolor.\",\"Est est sed itaque necessitatibus vitae officiis.\\\\nIusto dolores sint eveniet quasi dolore quo laborum esse laboriosam.\\\\nModi similique aut voluptates animi aut dicta dolorum.\\\\nSint explicabo autem quidem et.\\\\nNeque aspernatur assumenda fugit provident.\",\"Voluptatibus harum ullam odio sed animi corporis.\",\"Laborum itaque quos provident.\\\\nRerum cupiditate praesentium amet voluptatem dolor impedit modi dicta.\\\\nVoluptates assumenda optio est.\\\\nNon aperiam nam consequuntur vel a commodi dicta incidunt.\",\"Et perspiciatis illo.\\\\nLaboriosam aspernatur omnis expedita doloribus.\\\\nEum aliquam provident voluptas similique et omnis.\",\"Ipsa laudantium deserunt.\",\"Nesciunt numquam velit nihil qui quia eius.\",\"Voluptate et quasi optio eos et eveniet culpa et nobis.\\\\nSint aut sint sequi possimus reiciendis nisi.\\\\nRerum et omnis et sit doloribus corporis voluptas error.\\\\nIusto molestiae tenetur necessitatibus dolorem omnis.\",\"Quia harum nulla et quos sint voluptates exercitationem corrupti.\",\"Similique et quos maiores commodi exercitationem laborum animi qui.\",\"Ab quis aut earum.\\\\nVoluptatem sint accusantium sed cupiditate optio.\\\\nConsequatur in dolores aut enim.\\\\nNon sunt atque maxime dolores.\\\\nNam impedit sit.\",\"Sunt excepturi ut dolore fuga.\\\\nAutem eum maiores aut nihil magnam corporis consectetur sit.\",\"Cum vitae aliquam neque consequatur quia id dicta ipsam.\\\\nExercitationem ab eum exercitationem non alias numquam qui.\\\\nItaque rerum ut nobis est nam vitae exercitationem minima fugiat.\\\\nEst sit non tempora soluta consequatur eveniet.\\\\nCorporis nisi dolorem architecto voluptatem.\",\"Qui et dolorum.\\\\nEveniet architecto qui accusamus et modi harum facilis a eum.\\\\nEt vel cumque voluptatem earum minima perferendis.\",\"Consequatur odit voluptatem qui.\\\\nQui quis sequi vel corrupti asperiores soluta rerum.\\\\nIusto at id quod reiciendis.\",\"Dolorum eius dignissimos et magnam voluptate aut voluptatem natus.\\\\nAut sint est eum molestiae consequatur officia omnis.\\\\nQuae et quam odit voluptatum itaque ducimus magni dolores ab.\\\\nDolorum sed iure voluptatem et reiciendis.\",\"Id est non ad temporibus nobis.\\\\nQuod soluta quae voluptatem quisquam est.\",\"Exercitationem suscipit enim et aliquam dolor.\",\"Deleniti explicabo assumenda ipsum cumque voluptatem blanditiis voluptatum omnis provident.\\\\nQuis placeat nisi fugit aperiam quaerat mollitia.\\\\nOccaecati repellendus voluptate similique.\\\\nLaboriosam qui qui voluptas itaque ipsa.\",\"Voluptas aut occaecati cum et quia quam.\\\\nBeatae libero doloribus nesciunt iusto.\\\\nDolores vitae neque quisquam qui ipsa ut aperiam.\",\"Eveniet sit ipsa officiis laborum.\\\\nIn vel est omnis sed impedit quod magni.\\\\nDignissimos quis illum qui atque aut ut quasi sequi.\",\"Voluptatem cumque molestias soluta consequatur aut voluptatibus beatae vel commodi.\\\\nNulla voluptatem aut.\",\"Pariatur quo neque est perspiciatis non illo rerum expedita minima.\\\\nEt commodi voluptas eos ex.\\\\nUnde velit delectus deleniti deleniti non in sit.\\\\nAliquid voluptatem magni.\",\"Aut ipsa et qui vel similique sed hic a.\\\\nVoluptates dolorem culpa nihil aut ipsam voluptatem.\",\"Animi enim quo deserunt.\\\\nAmet facilis at laboriosam.\\\\nRerum assumenda harum et sapiente suscipit ipsa fugiat.\\\\nSunt ut aut rem expedita consequatur optio.\\\\nRecusandae tenetur rerum quos culpa.\",\"Maiores assumenda porro est ea necessitatibus qui qui dolorum.\\\\nVelit suscipit ut ipsam odit aut earum.\",\"Placeat sequi quaerat sapiente aspernatur autem sunt molestiae voluptatem.\\\\nAccusamus unde libero accusamus omnis totam et temporibus.\",\"Nemo tempore dolor maiores blanditiis quia qui qui voluptatem non.\\\\nNisi dolores animi laboriosam aliquam qui adipisci voluptates atque dignissimos.\\\\nLibero sit quibusdam corporis aut inventore natus libero.\\\\nPraesentium omnis dolorum temporibus repellendus qui.\\\\nNon nostrum doloribus occaecati dolores sit ut.\",\"Libero sed ut architecto.\\\\nEx itaque et modi aut voluptatem alias quae.\\\\nModi dolor cupiditate sit.\\\\nDelectus consectetur nobis aliquid deserunt sint ut et voluptas.\\\\nCorrupti in labore laborum quod.\",\"Est aut quis soluta accusantium debitis vel.\\\\nQuisquam aliquid ex corporis velit.\",\"Provident saepe omnis non molestiae natus et.\\\\nAccusamus laudantium hic unde voluptate et sunt voluptatem.\\\\nMollitia velit id eius mollitia occaecati repudiandae.\",\"Ducimus dolores recusandae.\\\\nEa aut aperiam et aut eos inventore.\\\\nQuia cum ducimus autem iste.\\\\nQuos consequuntur est delectus temporibus autem.\",\"Sapiente vitae culpa ut voluptatem incidunt excepturi voluptates exercitationem.\\\\nSed doloribus alias consectetur omnis occaecati ad placeat labore.\\\\nVoluptate consequatur expedita nemo recusandae sint assumenda.\\\\nQui vel totam quia fugit saepe suscipit autem quasi qui.\\\\nEt eum vel ut delectus ut nesciunt animi.\",\"Eos pariatur eos fugit aut aperiam labore beatae.\\\\nVel non ea id dignissimos voluptate quis error assumenda consectetur.\\\\nRerum quas libero totam error facere sunt facilis quo.\\\\nEveniet debitis et aliquid ratione.\",\"Incidunt doloremque enim autem quam et magnam et expedita fuga.\\\\nPlaceat quia dolor ut.\\\\nNon dolor amet temporibus quas non hic sed.\\\\nQui tempore enim mollitia omnis sed ut eos rerum et.\\\\nQuidem voluptas est vel.\",\"Officia consectetur quibusdam velit debitis porro quia cumque.\\\\nSuscipit esse voluptatem cum sit totam consequatur molestiae est.\\\\nMollitia pariatur distinctio fugit.\",\"Ipsa labore numquam aut quidem quia.\\\\nMinus ut et recusandae sed dolorem eveniet.\\\\nEst vero sit et omnis et explicabo exercitationem qui quasi.\\\\nQui maxime iusto alias sint nihil quas.\\\\nModi quaerat voluptatem reiciendis reiciendis vero.\",\"Sapiente maxime sequi.\",\"Ab rerum eos ipsa accusantium nihil voluptatem.\\\\nEum minus alias.\\\\nIure commodi at harum.\\\\nNostrum non occaecati omnis quisquam.\",\"Facere consequatur ullam.\\\\nSint illum iste ab et saepe sit ut quis voluptatibus.\\\\nQuo esse dolorum a quasi nihil.\\\\nError quo eveniet.\\\\nQuia aut rem quia in iste fugit ad.\",\"Sunt dolor maxime nam assumenda non beatae magni molestias quia.\",\"Facere beatae delectus ut.\\\\nPossimus voluptas perspiciatis voluptatem nihil sint praesentium.\\\\nSint est nihil voluptates nesciunt voluptatibus temporibus blanditiis.\\\\nOfficiis voluptatem earum sed.\",\"In ipsam mollitia placeat quia adipisci rerum labore repellat.\",\"Et sed dicta eveniet accusamus consequatur.\\\\nUllam voluptas consequatur aut eos ducimus.\\\\nId officia est ut dicta provident beatae ipsa.\",\"Consequatur exercitationem asperiores quidem fuga rerum voluptas pariatur.\\\\nRepellendus sit itaque nam.\\\\nDeleniti consectetur vel aliquam vitae est velit.\\\\nId blanditiis ullam sed consequatur omnis.\",\"Dicta quia molestias natus est.\\\\nSit animi inventore a ut ut suscipit.\\\\nEos et et commodi eligendi nihil.\\\\nEa reprehenderit consectetur eum.\",\"Iusto laborum aperiam neque delectus consequuntur provident est maiores explicabo.\",\"Cupiditate officia voluptatum.\\\\nTenetur facere eum distinctio animi qui laboriosam.\\\\nQuod sed voluptatem et cumque est eos.\\\\nSint id provident suscipit harum odio et.\",\"Quos pariatur tenetur.\\\\nQuasi omnis eveniet eos maiores esse magni possimus blanditiis.\\\\nQui incidunt sit quos consequatur aut qui et aperiam delectus.\\\\nPraesentium quas culpa.\\\\nEaque occaecati cumque incidunt et.\",\"Quo perferendis nesciunt.\\\\nDolore dolorem porro omnis voluptatibus consequuntur et expedita suscipit et.\\\\nTempora facere ipsa.\\\\nDolore accusamus soluta officiis eligendi.\\\\nEum quaerat neque eum beatae odio.\",\"Ut autem labore nisi iusto.\\\\nRepellendus voluptate eaque eligendi nam facere tempora soluta.\\\\nAnimi sed vero aut dignissimos.\",\"Officia vero fugiat sit praesentium fugiat id cumque.\\\\nEt iste amet dolores molestiae quo dignissimos recusandae.\\\\nAliquam explicabo facilis asperiores ea optio.\\\\nExplicabo ut quia harum corrupti omnis.\\\\nOmnis sit mollitia qui dolorem ipsam sed aut.\",\"Non enim expedita maiores incidunt voluptatem rem.\\\\nEt nam vel nihil non non.\\\\nVoluptates accusantium aut nisi et error doloribus molestiae voluptas soluta.\",\"Quis nesciunt ut est eos.\\\\nQui reiciendis doloribus.\\\\nEst quidem ullam reprehenderit.\\\\nEst omnis eligendi quis quis quo eum officiis asperiores quis.\",\"Reprehenderit quae quas quos sapiente ullam ut.\\\\nVoluptates non ut.\",\"Molestias non debitis quibusdam quis quod.\\\\nSaepe ab et hic unde et sed.\\\\nMagni voluptatem est.\\\\nEt similique quo porro et.\",\"Doloribus consequatur et labore suscipit deserunt tempore ad quasi sed.\\\\nQuam cupiditate modi dolor et eos et culpa qui.\\\\nDelectus molestias ea id.\\\\nIllum ea unde sapiente non non non.\\\\nDolorem ut sed magni.\",\"Rerum minus et quia et dolorem officiis sunt id.\\\\nPariatur dolorum sint blanditiis ex vero optio.\\\\nQuam numquam omnis porro voluptatem.\",\"Dolores accusamus ducimus suscipit neque fugit quo aliquam.\\\\nOdit eum eum sint accusamus.\\\\nQuod ipsum sed placeat.\\\\nEt culpa voluptas et quod atque a.\\\\nVoluptatibus rerum nihil quia cupiditate nihil facere beatae dolor.\",\"Fugit harum mollitia.\\\\nMagni eos asperiores assumenda ad.\"];function zt(e){return n(Nt,e)}var Kt=[\"Cape lion\",\"Transvaal lion\",\"Masai Lion\",\"Barbary Lion\",\"West African Lion\",\"Northeast Congo Lion\",\"Asiatic Lion\"];function Ot(e){return n(Kt,e)}var Jt=[\"cz\",\"ge\",\"ne\",\"it\",\"de_CH\",\"en_AU_ocker\",\"ja\",\"ar\",\"en_CA\",\"pt_BR\",\"de\",\"es\",\"vi\",\"hr\",\"en_ZA\",\"fr\",\"id_ID\",\"nb_NO\",\"zh_TW\",\"ro\",\"pl\",\"en_GB\",\"en_AU\",\"fr_CA\",\"hy\",\"ko\",\"en_BORK\",\"es_MX\",\"en_IE\",\"az\",\"nl_BE\",\"en_US\",\"sk\",\"fr_CH\",\"en_IND\",\"sv\",\"fi\",\"en\",\"zh_CN\",\"he\",\"pt_PT\",\"de_AT\"];function Vt(e){return n(Jt,e)}function Ut(e){return n((()=>s({min:-180,max:180,fraction:3})),e)}function jt(e){return n((()=>Array.from({length:6},(()=>tt()+tt())).join(\"-\")),e)}function _t(e){return n((()=>{const[a,t,i]=[e?.mask??\"@##@#\",e?.char??\"@\",e?.digit??\"#\"];return a.split(\"\").map((e=>e===t?w():e===i?s({min:0,max:9,fraction:0}):e)).join(\"\")}),e)}var Yt=[\"application/vnd.lotus-approach\",\"application/vnd.wv.csp+wbxml\",\"application/font-tdpfr\",\"application/vnd.nokia.iptv.config+xml\",\"application/vnd.oma.dcdc\",\"application/vnd.dece.data\",\"audio/x-flac\",\"application/vnd.uplanet.channel-wbxml\",\"application/vnd.fsc.weblaunch\",\"video/mpv\",\"application/vnd.framemaker\",\"application/vnd.gov.sk.e-form+xml\",\"model/vnd.opengex\",\"application/metalink+xml\",\"application/scvp-vp-response\",\"application/vnd.oipf.mippvcontrolmessage+xml\",\"multipart/form-data\",\"application/vnd.umajin\",\"application/x-bzip\",\"application/vnd.anser-web-certificate-issue-initiation\",\"application/ocsp-request\",\"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\",\"video/ogg\",\"audio/evrcwb0\",\"application/vnd.font-fontforge-sfd\",\"application/vnd.openxmlformats-officedocument.presentationml-template\",\"video/parityfec\",\"application/vnd.openblox.game+xml\",\"text/jade\",\"audio/aptx\",\"application/vnd.japannet-registration\",\"application/vnd.pvi.ptid1\",\"application/vnd.webturbo\",\"application/vnd.accpac.simply.imp\",\"application/x-msschedule\",\"image/vnd.airzip.accelerator.azv\",\"application/vnd.kenameaapp\",\"application/vnd.geoplan\",\"application/vnd.tmd.mediaflex.api+xml\",\"application/mpeg4-iod\",\"application/vnd.syncml.dmddf+xml\",\"application/vnd.cluetrust.cartomobile-config\",\"application/vnd.radisys.msml-audit-stream+xml\",\"application/vnd.sus-calendar\",\"application/samlassertion+xml\",\"application/vnd.ms-word.document.macroenabled.12\",\"application/x-shockwave-flash\",\"application/xcap-error+xml\",\"video/h264-svc\",\"multipart/header-set\",\"image/vnd.adobe.photoshop\",\"application/pkix-pkipath\",\"application/mac-compactpro\",\"text/vnd.fly\",\"application/vnd.novadigm.edm\",\"application/vnd.dtg.local.flash\",\"application/vnd.ecowin.series\",\"application/vnd.spotfire.dxp\",\"audio/x-m4a\",\"text/rtp-enc-aescm128\",\"audio/pcmu\",\"multipart/appledouble\",\"audio/x-wav\",\"application/vnd.ibm.electronic-media\",\"text/coffeescript\",\"application/metalink4+xml\",\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\",\"audio/1d-interleaved-parityfec\",\"application/vnd.powerbuilder75\",\"application/sql\",\"text/markdown\",\"text/vnd.dmclientscript\",\"application/pidf+xml\",\"application/mbms-msk+xml\",\"audio/rtp-enc-aescm128\",\"application/x-font-dos\",\"application/x-pkcs7-certificates\",\"application/x-msaccess\",\"text/x-sass\",\"application/vnd.dart\",\"application/vnd.palm\",\"application/vnd.intergeo\",\"application/vnd.accpac.simply.aso\",\"model/vnd.moml+xml\",\"application/vnd.uplanet.alert-wbxml\",\"audio/g726-24\",\"image/vnd.microsoft.icon\",\"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\",\"audio/ilbc\",\"audio/vnd.dts.hd\",\"audio/l20\",\"audio/vnd.nuera.ecelp4800\",\"video/vnd.iptvforum.1dparityfec-2005\",\"application/vnd.ms-asf\",\"application/vnd.avistar+xml\",\"audio/vnd.dolby.pulse.1\",\"application/vnd.dm.delegation+xml\"];function Qt(e){return n(Yt,e)}var $t=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];function Zt(e){const a=$t,t=e?.abbreviation;return n((()=>{const e=r(a);return t?e.slice(0,3):e}),e)}var Xt=[\"Aprilia\",\"Benelli\",\"BMW Motorrad\",\"Bultaco\",\"Cagiva\",\"Daelim\",\"Derbi\",\"Ducati\",\"Gas Gas\",\"Gilera\",\"Harley-Davidson\",\"Honda\",\"Husqvarna\",\"Hyosung\",\"Indian Motorcycle\",\"Kawasaki\",\"Keeway\",\"KTM\",\"Moto Guzzi\",\"MV Agusta\",\"Piaggio\",\"Rieju\",\"Royal Enfield\",\"Suzuki\",\"SYM\",\"Triumph\",\"Vespa\",\"Yamaha\",\"Zero Motorcycles\"];function ei(e){return n(Xt,e)}function ai(e){return n(Xt,e)}var ti=[\"12 Angry Men\",\"12 Years a Slave\",\"1917\",\"2001: A Space Odyssey\",\"A Beautiful Mind\",\"A Clockwork Orange\",\"Alien\",\"Aliens\",\"All About Eve\",\"Amadeus\",\"American Beauty\",\"American History X\",\"Am\u00E9lie\",\"Apocalypse Now\",\"Back to the Future\",\"Before Sunrise\",\"Before Sunset\",\"Ben-Hur\",\"Bicycle Thieves\",\"Blade Runner\",\"Braveheart\",\"Casablanca\",\"Casino\",\"Catch Me If You Can\",\"Children of Heaven\",\"Chinatown\",\"Cinema Paradiso\",\"Citizen Kane\",\"City Lights\",\"City of God\",\"Cool Hand Luke\",\"Das Boot\",\"Dead Poets Society\",\"Die Hard\",\"Django Unchained\",\"Double Indemnity\",\"Downfall\",\"Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb\",\"Eternal Sunshine of the Spotless Mind\",\"Everything Everywhere All at Once\",\"Fargo\",\"Fight Club\",\"For a Few Dollars More\",\"Forrest Gump\",\"Full Metal Jacket\",\"Gandhi\",\"Gladiator\",\"Gone Girl\",\"Good Will Hunting\",\"Goodfellas\",\"Gran Torino\",\"Grave of the Fireflies\",\"Green Book\",\"Groundhog Day\",\"Hacksaw Ridge\",\"Heat\",\"Hotel Rwanda\",\"In the Name of the Father\",\"Inception\",\"Indiana Jones and the Last Crusade\",\"Into the Wild\",\"It Happened One Night\",\"It's a Wonderful Life\",\"Jaws\",\"Jurassic Park\",\"Kill Bill: Vol. 1\",\"L.A. Confidential\",\"Lawrence of Arabia\",\"Le Mans '66\",\"Life Is Beautiful\",\"Life of Brian\",\"Lock, Stock and Two Smoking Barrels\",\"L\u00E9on: The Professional\",\"M\",\"Mad Max: Fury Road\",\"Memento\",\"Metropolis\",\"Million Dollar Baby\",\"Modern Times\",\"Monty Python and the Holy Grail\",\"No Country for Old Men\",\"North by Northwest\",\"Oldboy\",\"On the Waterfront\",\"Once Upon a Time in America\",\"Once Upon a Time in the West\",\"One Flew Over the Cuckoo's Nest\",\"Paths of Glory\",\"Platoon\",\"Princess Mononoke\",\"Prisoners\",\"Psycho\",\"Pulp Fiction\",\"Raging Bull\",\"Raiders of the Lost Ark\",\"Rashomon\",\"Rear Window\",\"Requiem for a Dream\",\"Reservoir Dogs\",\"Rocky\",\"Room\",\"Rush\",\"Saving Private Ryan\",\"Scarface\",\"Schindler's List\",\"Se7en\",\"Seven Samurai\",\"Shutter Island\",\"Singin' in the Rain\",\"Snatch\",\"Some Like It Hot\",\"Spirited Away\",\"Spotlight\",\"Stand by Me\",\"Star Wars\",\"Star Wars: Episode V - The Empire Strikes Back\",\"Star Wars: Episode VI - Return of the Jedi\",\"Sunset Blvd.\",\"Taxi Driver\",\"Terminator 2: Judgment Day\",\"The Apartment\",\"The Battle of Algiers\",\"The Best Years of Our Lives\",\"The Big Lebowski\",\"The Bridge on the River Kwai\",\"The Dark Knight\",\"The Dark Knight Rises\",\"The Deer Hunter\",\"The Departed\",\"The Elephant Man\",\"The Exorcist\",\"The Father\",\"The General\",\"The Godfather\",\"The Godfather: Part II\",\"The Gold Rush\",\"The Good, the Bad and the Ugly\",\"The Grand Budapest Hotel\",\"The Grapes of Wrath\",\"The Great Dictator\",\"The Great Escape\",\"The Green Mile\",\"The Help\",\"The Intouchables\",\"The Iron Giant\",\"The Lion King\",\"The Lives of Others\",\"The Lord of the Rings: The Fellowship of the Ring\",\"The Lord of the Rings: The Return of the King\",\"The Lord of the Rings: The Two Towers\",\"The Matrix\",\"The Pianist\",\"The Prestige\",\"The Secret in Their Eyes\",\"The Seventh Seal\",\"The Shawshank Redemption\",\"The Shining\",\"The Silence of the Lambs\",\"The Sixth Sense\",\"The Sound of Music\",\"The Sting\",\"The Terminator\",\"The Third Man\",\"The Treasure of the Sierra Madre\",\"The Truman Show\",\"The Usual Suspects\",\"The Wizard of Oz\",\"The Wolf of Wall Street\",\"There Will Be Blood\",\"Three Billboards Outside Ebbing, Missouri\",\"To Kill a Mockingbird\",\"Toy Story 3\",\"Trainspotting\",\"Unforgiven\",\"Up\",\"Vertigo\",\"WALL\u00B7E\",\"Warrior\",\"Wild Tales\",\"Witness for the Prosecution\",\"Yojimbo\"];function ii(e){return n(ti,e)}var oi=[\"Darth Vader\",\"Edna Mode\",\"Randle McMurphy\",\"Optimus Prime\",\"Norman Bates\",\"The Minions\",\"Maximus\",\"Legolas\",\"Wednesday Addams\",\"Inspector Clouseau\",\"Inigo Montoya\",\"Hal\",\"Groot\",\"Gromit\",\"Ethan Hunt\",\"Red\",\"Walker\",\"Corporal Hicks\",\"Bane\",\"Woody\",\"Withnail\",\"V\",\"Roy Batty\",\"Martin Blank\",\"Samwise Gamgee\",\"Private William Hudson\",\"Lisbeth Salander\",\"Frank Drebin\",\"Donnie Darko\",\"Captain Kirk\",\"Star-Lord\",\"Tony Montana\",\"Marge Gunderson\",\"Neo\",\"Harry Potter\",\"Gollum / Sm\u00E9agol\",\"Hans Landa\",\"George Bailey\",\"Wolverine\",\"E.T.\",\"Bilbo Baggins\",\"Dr. King Schultz\",\"Ace Ventura\",\"Sarah Connor\",\"Katniss Everdeen\",\"Jack Burton\",\"Axel Foley\",\"Am\u00E9lie Poulain\",\"Vito Corleone\",\"Shaun Riley\",\"Obi-Wan Kenobi\",\"Luke Skywalker\",\"Harry Callahan\",\"Lester Burnham\",\"Rick Deckard\",\"Captain America\",\"Tommy DeVito\",\"Anton Chigurh\",\"Amy Dunne\",\"Lou Bloom\",\"Keyser S\u00F6ze\",\"Ferris Bueller\",\"Driver\",\"Yoda\",\"Walter Sobchak\",\"Rocky Balboa\",\"Atticus Finch\",\"Captain Mal Reynolds\",\"The Man With No Name\",\"Jules Winnfield\",\"Peter Venkman\",\"Gandalf\",\"Snake Plissken\",\"The Terminator (T-800)\",\"Forrest Gump\",\"Patrick Bateman\",\"Ash\",\"Daniel Plainview\",\"The Bride\",\"Travis Bickle\",\"Hannibal Lecter\",\"Doc Brown\",\"Loki\",\"Rick Blaine\",\"M. Gustave\",\"Ron Burgundy\",\"Aragorn\",\"Captain Jack Sparrow\",\"Iron Man\",\"Marty McFly\",\"Michael Corleone\",\"The Dude\",\"Tyler Durden\",\"John McClane\",\"The Joker\",\"Ellen Ripley\",\"Batman\",\"Han Solo\",\"James Bond\",\"Indiana Jones\"];function ni(e){return n(oi,e)}var ri=[\"Classical\",\"Reggae\",\"Blues\",\"Country\",\"Latin\",\"Funk\",\"Rap\",\"Folk\",\"Electronic\",\"World\",\"Hip Hop\",\"Pop\",\"Stage And Screen\",\"Soul\",\"Non Music\",\"Jazz\",\"Rock\",\"Metal\"];function si(e){return n(ri,e)}function li(e){return n((()=>[Lt(),Ut()]),e)}var ui=[\"Amazon\",\"AOL\",\"Autodesk\",\"Apple\",\"Basecamp\",\"Battle.net\",\"Bitbucket\",\"bitly\",\"Box\",\"ClearScore\",\"Cloud Foundry\",\"Dailymotion\",\"Deutsche Telekom\",\"deviantART\",\"Discogs\",\"Discord\",\"Dropbox\",\"Etsy\",\"Evernote\",\"Facebook\",\"FatSecret\",\"Fitbit\",\"Flickr\",\"Formstack\",\"Foursquare\",\"GitHub\",\"GitLab\",\"Goodreads\",\"Google\",\"Google App Engine\",\"Groundspeak\",\"Huddle\",\"Imgur\",\"Instagram\",\"IntelCloud Services\",\"Jive Software\",\"Keycloak\",\"LinkedIn\",\"LoginRadius\",\"Microsoft services\",\"Mixi\",\"MySpace\",\"MoreTeam\",\"Netflix\",\"NetIQ\",\"Okta\",\"OpenAM\",\"OpenStreetMap\",\"OpenTable\",\"ORCID\",\"PayPal\",\"Ping Identity\",\"Pixiv\",\"Plurk\",\"Reddit\",\"Salesforce.com\",\"Sina Weibo\",\"Spotify\",\"Stack Exchange\",\"StatusNet\",\"Strava\",\"Stripe\",\"Trello\",\"Tumblr\",\"Twitch\",\"Twitter\",\"Ubuntu One\",\"Viadeo\",\"Vimeo\",\"VK\",\"WeChat\",\"Withings\",\"WooCommerce\",\"WordPress.com\",\"WSO2 Identity Server\",\"Xero\",\"XING\",\"Yahoo!\",\"Yammer\",\"Yandex\",\"Yelp\",\"Zendesk\"];function ci(e){return n(ui,e)}function di(e){return n((()=>{const e=Math.floor(Math.random()*Number.MAX_SAFE_INTEGER);return BigInt(e.toString(8))}),e)}var hi=[\"Southwest\",\"Northwest\",\"Southeast\",\"Northeast\"];function mi(e){return n(hi,e)}var pi=[\"Quia sit architecto itaque voluptas aliquam. Rem veritatis qui quasi sint velit dolorem maxime voluptatem. Sit aut laboriosam aspernatur dicta non consequatur qui recusandae. Dignissimos voluptatem labore praesentium.\",\"Eveniet qui aperiam et. Rem incidunt sapiente architecto earum consectetur officia. Assumenda voluptatem sed aperiam sed temporibus sunt in. Totam molestiae aspernatur quia non rem facilis expedita harum veritatis. Culpa ipsam quo dolor.\",\"Perspiciatis distinctio quia est magni. Aliquid id sed qui quis eum amet ut iusto. Et eos repellat nisi doloremque. Non est aut dolores accusamus pariatur placeat amet dolor.\",\"Sint doloribus id voluptatem nulla dicta deserunt. Enim exercitationem aut modi saepe numquam ea. Voluptas mollitia non totam tempora delectus tenetur necessitatibus officiis. Odit vero consequatur qui dolorem et. Repellendus quia iure et dolorem.\",\"Error quos aperiam et dolor et sit occaecati. Qui minima officia pariatur dolorem sit. Et incidunt consequatur eaque unde sunt sit dolore. Et quia ut rerum. Fugit sunt architecto cupiditate voluptas.\",\"Consequatur praesentium vel optio facilis alias ea nesciunt. Soluta dolores facere eum ea quasi qui. Odit quisquam libero recusandae sit sit sed. Distinctio nihil omnis est sunt.\",\"Magni fugit perspiciatis aperiam ipsam dolorem minima. Magni ea qui quaerat harum quo repellat eos. Necessitatibus possimus quis fugit aut sed quis asperiores et.\",\"Perspiciatis illum illum et et error labore ut iure. Eius quidem eius placeat blanditiis in et deserunt. Eligendi fugiat vero nam asperiores sequi sit dignissimos. Quam rerum consequuntur dolor.\",\"Distinctio facere fugit vel nobis dolor voluptas vel quod in. Molestiae et velit. Maiores voluptatem ut qui eligendi repellat eos quia. Tempore ipsa voluptatem minus. In reiciendis dolorem deserunt consequatur at.\",\"Consectetur suscipit beatae est ut ut dolorem voluptas. Et sunt ratione. Consequatur illo et architecto.\",\"Quisquam at dolorem cupiditate enim ut recusandae porro aut quae. In nostrum et velit maiores dolores in architecto natus delectus. Aspernatur possimus libero velit omnis beatae. Libero adipisci et consequatur ullam. Aliquam est nam repudiandae odio. Eligendi vitae in beatae sint saepe ut eaque esse.\",\"Odit consequatur nobis aut quo dolores in adipisci praesentium. Quod rerum ducimus ad. Ut autem velit consequatur nihil animi animi architecto. Quaerat et sed.\",\"Vel provident ab nemo rerum consequatur fugiat. Voluptas facilis officia sint ullam omnis qui quis a. Nostrum atque laudantium delectus dolorum quod error.\",\"Veritatis officiis est occaecati sunt consequatur. Aut sapiente totam sed ad ad qui eum omnis deleniti. Quis blanditiis aperiam.\",\"Asperiores labore tempore quam. Ut voluptatem unde tempore fuga non repellendus omnis maxime. Quia soluta quibusdam. Commodi animi eum dolorem placeat sit. Quam nihil doloremque eligendi rem quibusdam iusto consequatur quae. Modi quaerat labore laboriosam quaerat sint nulla.\",\"Provident cumque quos quam enim. Nihil aperiam nihil ut. Blanditiis enim officia omnis quo tenetur aliquid odio et. Perspiciatis unde officiis ea expedita id dolorem. Quam nihil et amet quos et fugit. Cum voluptatem tempora deserunt.\",\"Ipsa nemo eos sequi nulla id accusamus nam ratione dolore. Omnis sint quisquam accusamus rem rem nihil. Non minus animi cum dolorem earum odit sequi. Rem non inventore sed dicta atque modi. Sed dolorem iste molestiae. Sed eum iste aliquid aliquid.\",\"Et quod ad optio culpa dicta at eveniet. Deserunt perferendis debitis sunt aut. Laboriosam laboriosam aspernatur id corporis.\",\"Et atque sunt ab esse excepturi ut quos delectus. Possimus dolor assumenda dicta sapiente quaerat nisi sed consequatur hic. In dolorem eos ut eum nam accusantium iure. Ipsam laborum deleniti ut.\",\"Et id harum unde et ratione minima non. Suscipit ipsum rem. Sed asperiores quaerat dolorum autem nihil voluptatem et hic ut. Molestiae rerum autem. Dolores nam soluta officia pariatur debitis.\",\"Alias esse minus. Molestiae et ut dolores iste. Nam sint aut. Explicabo ut earum modi accusamus facilis rerum.\",\"Sint id odit. Tenetur sit in deserunt voluptatem corporis voluptatum culpa eligendi. Est quia reprehenderit atque modi. Ipsum quo eos deserunt nobis.\",\"Molestias in reprehenderit molestias quam doloribus tenetur. Cupiditate enim ad est nemo et quos. Minus non et voluptatem magni voluptatibus consectetur temporibus ad. Molestiae sed voluptate et dolor eaque sequi minima. Quisquam atque distinctio culpa distinctio rerum labore vero assumenda voluptate.\",\"Quas quidem dolores eum aspernatur tempore illo deserunt veniam sed. Non est molestias omnis dolorem doloremque et exercitationem odit itaque. Aliquid nam eos rem maiores exercitationem similique rerum voluptatem voluptas. Dolor rerum ea hic esse inventore.\",\"Distinctio adipisci ex. Temporibus esse error ea aut est temporibus. Sunt laudantium recusandae. Soluta culpa nihil nemo sunt et repellat sapiente distinctio. Nostrum accusamus doloribus repellat blanditiis labore.\",\"Esse omnis enim odit. Veniam sed iusto. Voluptas libero accusamus. Corporis consequatur ut voluptas corporis blanditiis laudantium consequatur ea ducimus. Incidunt incidunt molestiae.\",\"Dignissimos nesciunt suscipit beatae et eveniet omnis voluptatum natus. Iusto minima commodi rem et a rerum asperiores. Fugit tenetur ut at aut molestias.\",\"Optio consectetur rerum eos reiciendis. Voluptatem hic iure. Unde aut voluptas.\",\"Culpa ipsa voluptatem suscipit ut omnis omnis iste. Molestias facere facilis delectus vel fugit quibusdam saepe. Vel ut et dignissimos fugiat sint aut magnam. Quis maiores harum aliquid modi consequuntur veniam ipsum quaerat. Quam quo iusto nulla. Et quasi qui dolore enim.\",\"Exercitationem similique magni voluptates. Amet et asperiores quidem error. Commodi nostrum hic suscipit fuga consequatur nobis veritatis sit.\",\"Quaerat officia voluptatum officiis. Quo velit numquam qui sint voluptatem eos magnam quas hic. Excepturi reprehenderit totam reprehenderit et fugit dolorum perferendis est. Quae repudiandae quisquam veniam maxime qui. Rerum aut dolores voluptates corrupti modi ducimus pariatur error tempore.\",\"Sed quam quo nesciunt et laboriosam. Aspernatur et eum voluptas nesciunt omnis distinctio occaecati eum aut. Occaecati mollitia et est. Reiciendis dolor et ut commodi est repellat ipsa iure. Minus laudantium ut sed earum odit. Laudantium et non iusto et aliquid.\",\"Repellat illo sunt cum. Maiores et iure. Accusantium eum quo ullam minus architecto aut nulla rerum. Non quis nisi omnis eos dolores quia. Beatae nihil hic ut necessitatibus id fugiat.\",\"Non consequuntur ut voluptatum. Dicta omnis architecto iure perspiciatis veritatis itaque dolore. Quos necessitatibus dolor nam.\",\"Et ipsam distinctio quia quia ipsum dignissimos autem assumenda qui. Vel earum harum provident consequatur. Neque animi architecto ratione. Veniam porro possimus nisi voluptas.\",\"Aut facilis qui. Cupiditate sit ratione eum sunt rerum impedit. Qui suscipit debitis et et voluptates voluptatem voluptatibus. Quas voluptatum quae corporis corporis possimus.\",\"Et illo dolor cupiditate beatae. Eius eum recusandae odit placeat. Quibusdam error quisquam culpa pariatur praesentium et.\",\"Consequatur perferendis itaque dolor corporis vel voluptatem quaerat. Ex numquam sed. Reiciendis eveniet ducimus nobis et necessitatibus qui. Sit veritatis temporibus nostrum eius laborum voluptatum deleniti optio. Aperiam vel laborum eos odit ut veritatis. Eos tempora enim sed.\",\"Est iste totam accusamus dolorem est. Quis non sit impedit similique incidunt odio aspernatur aut rem. Architecto est eum.\",\"Aperiam autem non et aut illum ut nihil laborum omnis. Vitae et ab et. Cupiditate et est delectus. Mollitia qui qui dolores reiciendis perferendis voluptates maiores. Omnis corporis cumque sequi sequi excepturi velit laborum nobis. Neque id maiores voluptatem est debitis.\",\"Recusandae id nemo ut amet quas voluptas. Quas vero et molestiae esse. Eum qui quia nulla. Cum ipsa aut voluptate et iste ut porro adipisci. Quisquam error sed quasi voluptates ea nobis consequatur explicabo.\",\"Sunt velit facere fuga et voluptas inventore itaque. Necessitatibus ratione in esse. Quasi dignissimos quia est sequi incidunt enim reiciendis. At omnis iure in doloremque. Aut tempore consequatur facilis est ut distinctio est quas. Autem sunt est saepe quasi sed reprehenderit error magnam.\",\"Aliquid rerum tenetur exercitationem enim nihil laboriosam. Ut sequi sit dicta sequi non voluptatibus molestias rerum laudantium. Dolores beatae aut ipsa aut. Ut porro consequatur inventore praesentium quis. Omnis enim in voluptatem voluptatem quia.\",\"Tempora sunt enim. Sint ullam deleniti ut. Consequatur unde error odio quod fugit. Expedita unde commodi ratione sequi velit. Qui reprehenderit et tempora tenetur rerum. Veritatis consequatur odit sequi explicabo.\",\"Praesentium consequatur ut sit vel. Molestias fugiat quis cupiditate ipsa eos fugit est ullam. Sit labore et natus dolores ut quis eaque cupiditate. Et ut et et autem assumenda animi autem. Pariatur amet consequatur necessitatibus consequatur consequatur et explicabo sint. Nam sit dolore.\",\"Corporis distinctio delectus a ipsam commodi voluptas. Facilis minus sit numquam. Iusto quod consequatur molestias dolore dolor atque quidem distinctio. Voluptatem hic debitis sint ut sed recusandae qui consequatur. Nulla veritatis est.\",\"Deleniti dolor aliquam qui saepe officia nisi. Omnis sit molestiae ea rerum ratione. Dolorum ut corporis eligendi id dolorem totam et architecto voluptatem. Laudantium et vel. Dolores laborum sed quis sed et soluta. Et odio voluptate amet.\",\"Veniam commodi autem voluptatibus eos dolor quas reprehenderit. Praesentium cupiditate tempore et reprehenderit. Deleniti exercitationem illum maiores. Reprehenderit odio in ea voluptatem ut ut ullam.\",\"Labore corporis blanditiis dolorum nemo nam praesentium alias sequi inventore. Cupiditate rerum enim sint quis. Eum occaecati provident labore veniam deserunt vero sed soluta repellat. Cum sapiente pariatur et ea a recusandae et optio. Sequi doloribus reiciendis corrupti quidem accusamus est nesciunt. Excepturi accusamus consequatur est sed maiores excepturi autem.\",\"Assumenda molestiae laboriosam enim ipsum quaerat enim officia vel quo. Earum odit rem natus totam atque cumque. Sint dolorem facere non.\",\"Aut facere quaerat sapiente inventore libero impedit vero. Animi harum assumenda autem sint necessitatibus fugiat. Qui eligendi et ut distinctio.\",\"Vel amet eos voluptatibus vel expedita accusantium molestiae illo exercitationem. Assumenda ea voluptatem rerum. Accusantium sed totam aut et.\",\"Accusantium aliquid non neque dicta eum. Molestias nesciunt odit. Quis rerum et cumque distinctio a pariatur vel ea dicta.\",\"Tempora id non maxime. Qui qui dignissimos omnis adipisci qui. Voluptatibus ut labore est quisquam consequuntur fugiat harum tenetur est. Repellendus quisquam quaerat error nobis voluptatem nihil minima. Autem aliquid ut adipisci officia eos atque excepturi.\",\"Cupiditate voluptas cumque aspernatur. Adipisci voluptatibus vel eos. Doloremque commodi aliquid occaecati quia provident. Voluptatem tempore doloribus architecto rem quidem quaerat ipsam possimus. Laboriosam quisquam aut illo necessitatibus quo ducimus. Eum cupiditate sint a placeat dolores nemo.\",\"Beatae officiis nihil similique soluta non voluptas totam ad. Quam nobis enim vel qui ratione quos voluptatem molestiae est. Ipsum voluptate illo aliquid beatae blanditiis dolorem. Adipisci non libero laudantium. A aperiam distinctio tempora aspernatur.\",\"Eligendi corrupti occaecati et. Laboriosam molestiae dolore laborum consequuntur dolorem sit qui sit. Et placeat voluptas repudiandae expedita et. Dolores aut incidunt iure qui enim et quo fuga.\",\"Eos necessitatibus officia quos. Et vitae aliquid autem occaecati repudiandae placeat repellat odit. Minus iure voluptates autem quam dicta. Iste consequatur aspernatur voluptas quibusdam sint beatae.\",\"In reprehenderit esse id ut quas cupiditate error sit. Eum nostrum libero facilis quis error consectetur. Totam porro ut similique aut sint enim amet enim. Harum quo est repudiandae doloribus.\",\"Quis error sunt. Tempora magnam consequatur. Eum repellendus beatae dolores hic ut placeat voluptas commodi. Amet aliquid vero. Ullam ratione architecto.\",\"Inventore natus explicabo qui adipisci laborum voluptate molestias suscipit. Ullam quisquam assumenda nesciunt voluptatem in. Similique facere debitis mollitia autem fugit a quo et impedit.\",\"Vel facere dolorem sit hic non. Veniam nihil cumque sed et delectus. Maiores minus quisquam nostrum. Eius quasi nostrum. Molestiae recusandae ut. Suscipit natus aliquam eos sit aut.\",\"Incidunt accusamus vero. Ipsam reiciendis unde voluptatibus voluptates ab aliquam aut. Aut voluptas laudantium. Voluptatem beatae explicabo et eius. Commodi a autem omnis.\",\"Placeat tenetur ut enim similique et nam commodi. Dolores culpa enim. Fuga aliquid voluptatem repellat.\",\"Rerum enim tenetur maiores ullam et id assumenda est magnam. At praesentium molestias culpa fugiat et ipsum velit est et. Non velit ipsum quas laudantium accusantium sed qui id. Eum deserunt ratione veniam.\",\"Tempore explicabo laborum laboriosam officia velit aspernatur dolor cupiditate aperiam. Ab aliquid est. Veniam eius vel id rerum quisquam illo voluptates id.\",\"Quaerat veritatis tempora. Consectetur id fuga iusto voluptas quibusdam est. Et aut dolor est. Sunt mollitia libero.\",\"Voluptatem ipsa delectus corporis necessitatibus et et et eos debitis. Doloremque enim dolorum. Exercitationem ratione pariatur ut temporibus et est distinctio. Doloremque exercitationem dolores excepturi praesentium ut esse ut dolorum laboriosam. Itaque non aut quos nesciunt voluptatem voluptatem cupiditate.\",\"Tenetur doloremque at fuga eligendi mollitia modi placeat. Dolores corrupti repellendus et quos eos modi sunt. Quae non molestiae earum iusto magni. Molestiae quo fugit quisquam sed. Quia culpa rem minus distinctio.\",\"Molestias fugit perspiciatis voluptatem nihil assumenda doloribus. Reiciendis et aperiam ea fugiat ipsum atque omnis qui. Doloribus officiis quisquam optio nihil. Minus iure consequatur fugit quidem quae. Sit et ducimus culpa voluptatum officiis fugiat.\",\"Cupiditate eos ratione aperiam fuga temporibus. Ut nulla aliquid. Eos dolores eaque. Itaque est nostrum consequuntur sapiente qui delectus unde. Et ut et aut qui a ut ducimus ut. Mollitia quis rem dolorum in pariatur id velit.\",\"Ducimus omnis numquam. Eos ut quis. Autem numquam nihil ut quo est nam eius. Laboriosam sint nihil in dolorum et recusandae est. Inventore consequuntur at ratione dolores quas doloribus autem et. Qui atque delectus consectetur praesentium doloribus corporis expedita soluta.\",\"Quo voluptatem quia numquam laudantium sit quibusdam aut. Veritatis omnis neque ea saepe hic enim. Nam odit dolor non consequuntur perspiciatis inventore ut sint. Velit quod praesentium adipisci modi.\",\"Deserunt laboriosam quas autem repellat aspernatur ipsa accusamus pariatur deserunt. Nam aut eum vel ut. Sunt dicta id eveniet minus. Debitis temporibus quod.\",\"Ea aut aut sit. Incidunt ut quisquam laborum molestiae temporibus aut quam non. Voluptatibus quia laudantium et et quis quae voluptas accusantium. Doloremque in ab. Illo alias aut.\",\"Et veritatis rerum. Omnis repellat quo. Provident omnis consequatur provident tempore assumenda assumenda ducimus.\",\"Est sed deserunt eligendi in velit saepe. Dolorem quis illo vero qui ut recusandae occaecati dolores quae. Voluptatem vero aliquam alias adipisci reiciendis odit nobis est. Vel laboriosam quia commodi rerum. Voluptatum et sed et nesciunt iure ipsum iste aut enim.\",\"Corrupti aspernatur minus eum. Nihil omnis fuga doloremque eius ipsam saepe impedit. Nobis odio omnis laboriosam similique nostrum voluptas magnam commodi at. Magnam quibusdam dolore. Dolorem minima neque est amet voluptate explicabo similique quos. Rerum esse pariatur.\",\"Vel et molestiae quis ea modi quas tempore dolorum fuga. Aut dolore numquam et. Amet sit quibusdam ea blanditiis consectetur velit.\",\"Rerum aut expedita ad nam rerum. Animi sed in sunt enim. Rerum aspernatur ipsam quia consequatur sit est excepturi quidem voluptatem. Eum est et autem ducimus eius quod ipsa officia vero.\",\"Unde est nesciunt consequuntur magnam quo quia et fugiat. Totam sapiente iure eaque. Ut praesentium quisquam dolorem animi quibusdam quo nostrum facilis. Quasi quos et beatae architecto perferendis. Et laudantium officiis autem aut dolor iure et omnis.\",\"Similique molestiae id officia corporis quidem. Aliquam et ut eos ut nemo est voluptatem. Possimus ut quo labore. Alias amet quia enim. Quia ipsum pariatur facere illum esse recusandae veniam. Nihil enim fugit porro nam et quis sunt.\",\"Quis repellendus aspernatur magni non temporibus officiis et aliquid ut. Voluptas consectetur voluptatibus quos quas illo unde. Alias voluptas est. Inventore occaecati sed id minima fuga enim amet. Voluptatibus eius dolorum quam natus consectetur repellat rerum. Incidunt nisi hic consequatur iste iste velit.\",\"Minima soluta sed sed et optio explicabo at distinctio repudiandae. Magnam deleniti a ea. Non velit accusamus veniam qui. Necessitatibus velit ad aut officiis in officiis quasi. Sunt nulla dolores voluptatem esse magnam ut.\",\"Consequuntur nihil a id. Consequatur est cum excepturi aut labore odit quo molestiae molestiae. Soluta voluptatem ducimus cupiditate. Dolorum eveniet aliquid aut repudiandae et illo et. Harum unde ut harum accusamus suscipit quia.\",\"Omnis perspiciatis qui quia commodi sequi modi. Nostrum quam aut cupiditate est facere omnis possimus. Tenetur similique nemo illo soluta molestias facere quo. Ipsam totam facilis delectus nihil quidem soluta vel est omnis.\",\"Ea hic voluptatum omnis dolorum pariatur sed illo ea. Praesentium veniam vitae pariatur quae. Optio aspernatur aut ut recusandae.\",\"Ea tempora qui. Aut deserunt dolorum laborum rerum vel. Omnis et ut deserunt minima soluta adipisci sed voluptas.\",\"Dolor officia a fuga omnis sit. Ut atque est nostrum. Quos aut quo eos vel velit autem et aspernatur.\",\"Quo nihil assumenda corrupti nobis provident tenetur et. Molestiae unde explicabo nihil maxime. Quidem molestiae velit laborum amet rerum tenetur. Error non aspernatur suscipit asperiores voluptas ipsa dolor. Similique itaque omnis.\",\"Ut a voluptas labore et dolores magnam. Dolor deleniti dolores temporibus non autem. Voluptatibus numquam reiciendis nesciunt ipsa numquam enim. Unde velit optio quia.\",\"Libero quod eius. Ad libero qui omnis. Laudantium ut aperiam est exercitationem qui soluta aut ullam. Est dicta veniam voluptas est perspiciatis rerum. Alias ut autem est illo.\",\"Possimus molestiae mollitia alias reprehenderit autem saepe est odio qui. Odit est quos. Corrupti similique harum reiciendis. Placeat est at aut quo. Laudantium qui voluptatem nemo accusamus minima. Perferendis quos architecto repellat sed id quae iusto.\",\"Pariatur ut dolor repellendus dolores ut debitis. Est iusto neque dicta voluptatibus quia nulla consequatur. Omnis aut sed dolores qui laborum a amet.\",\"Veritatis fuga sit ut explicabo ab eos repellendus. Ipsa praesentium dolor. Tempora ipsum est dolorum nihil.\",\"Rerum quisquam qui repellendus totam nemo nihil odio. Tempore quam non vel molestiae veniam rem necessitatibus. Voluptas commodi recusandae vel illum eveniet ex. Dolore facilis illum atque explicabo.\",\"Ut quidem et. Quo assumenda et cumque molestias atque sint qui modi. Velit qui dolore possimus totam qui blanditiis. Vel quia consequatur aliquid corrupti qui libero.\",\"Est quo facilis voluptas aperiam. Natus dolores quas ratione enim repellendus. Illum dolor repellendus voluptas.\",\"Eveniet quae minus vero praesentium eos fugit explicabo et. Libero at ea ut sapiente et nesciunt odio similique vel. Libero aliquam tempore corporis eveniet dolorum nihil maiores veritatis. Harum modi sint officia.\",\"Repellendus et iste dolorem iste et perspiciatis occaecati vero eius. Vel ipsa officia quidem in maiores. Fugiat similique aliquam est eveniet ullam laborum qui. Et a maxime et magnam in.\"];function yi(e){return n(pi,e)}function gi(e){const a=e?.size||15;return n((()=>b({size:a})),e)}function fi(e){const a=e?.years??1;if(a<=0)throw new Error(\"Years must be positive, use future() instead\");const t=365*a*24*60*60*1e3,i=new Date,o=new Date(i.getTime()-t);return n((()=>Q({from:o,to:i})),e)}var bi=[\"read\",\"write\",\"execute\",\"no permission\"];function wi(e){return n(e?.numeric?[0,1,2,4]:bi,e)}var vi=[\"Dr.\",\"Miss\",\"Mr.\",\"Mrs.\",\"Ms.\"];function ki(e){return n(vi,e)}var Si=[{formats:[\"+247 ####\"],countryCode:[\"AC\"]},{formats:[\"+376 ### ###\"],countryCode:[\"AD\"]},{formats:[\"+971 ## ### ####\",\"+971 # ### ####\"],countryCode:[\"AE\"]},{formats:[\"+93 ## ### ####\"],countryCode:[\"AF\"]},{formats:[\"+1(268)### ####\"],countryCode:[\"AG\"]},{formats:[\"+1(264)### ####\"],countryCode:[\"AI\"]},{formats:[\"+355(###)### ###\"],countryCode:[\"AL\"]},{formats:[\"+374 ## ### ###\"],countryCode:[\"AM\"]},{formats:[\"+599 ### ####\",\"+599 9### ####\"],countryCode:[\"AN\"]},{formats:[\"+244(###)### ###\"],countryCode:[\"AO\"]},{formats:[\"+672 1## ###\"],countryCode:[\"AQ\"]},{formats:[\"+54(###)### ####\"],countryCode:[\"AR\"]},{formats:[\"+1(684)### ####\"],countryCode:[\"AS\"]},{formats:[\"+43(###)### ####\"],countryCode:[\"AT\"]},{formats:[\"+61 # #### ####\"],countryCode:[\"AU\"]},{formats:[\"+297 ### ####\"],countryCode:[\"AW\"]},{formats:[\"+994 ## ### ## ##\"],countryCode:[\"AZ\"]},{formats:[\"+387 ## #####\",\"+387 ## ####\"],countryCode:[\"BA\"]},{formats:[\"+1(246)### ####\"],countryCode:[\"BB\"]},{formats:[\"+880 ## ### ###\"],countryCode:[\"BD\"]},{formats:[\"+32(###)### ###\"],countryCode:[\"BE\"]},{formats:[\"+226 ## ## ####\"],countryCode:[\"BF\"]},{formats:[\"+359(###)### ###\"],countryCode:[\"BG\"]},{formats:[\"+973 #### ####\"],countryCode:[\"BH\"]},{formats:[\"+257 ## ## ####\"],countryCode:[\"BI\"]},{formats:[\"+229 ## ## ####\"],countryCode:[\"BJ\"]},{formats:[\"+1(441)### ####\"],countryCode:[\"BM\"]},{formats:[\"+673 ### ####\"],countryCode:[\"BN\"]},{formats:[\"+591 # ### ####\"],countryCode:[\"BO\"]},{formats:[\"+55 ## #### ####\",\"+55 ## ##### ####\"],countryCode:[\"BR\"]},{formats:[\"+1(242)### ####\"],countryCode:[\"BS\"]},{formats:[\"+975 17 ### ###\",\"+975 # ### ###\"],countryCode:[\"BT\"]},{formats:[\"+267 ## ### ###\"],countryCode:[\"BW\"]},{formats:[\"+375(##)### ## ##\"],countryCode:[\"BY\"]},{formats:[\"+501 ### ####\"],countryCode:[\"BZ\"]},{formats:[\"+243(###)### ###\"],countryCode:[\"CD\"]},{formats:[\"+236 ## ## ####\"],countryCode:[\"CF\"]},{formats:[\"+242 ## ### ####\"],countryCode:[\"CG\"]},{formats:[\"+41 ## ### ####\"],countryCode:[\"CH\"]},{formats:[\"+225 ## ### ###\"],countryCode:[\"CI\"]},{formats:[\"+682 ## ###\"],countryCode:[\"CK\"]},{formats:[\"+56 # #### ####\"],countryCode:[\"CL\"]},{formats:[\"+237 #### ####\"],countryCode:[\"CM\"]},{formats:[\"+86(###)#### ####\",\"+86(###)#### ###\",\"+86 ## ##### #####\"],countryCode:[\"CN\"]},{formats:[\"+57(###)### ####\"],countryCode:[\"CO\"]},{formats:[\"+506 #### ####\"],countryCode:[\"CR\"]},{formats:[\"+53 # ### ####\"],countryCode:[\"CU\"]},{formats:[\"+238(###)## ##\"],countryCode:[\"CV\"]},{formats:[\"+599 ### ####\"],countryCode:[\"CW\"]},{formats:[\"+357 ## ### ###\"],countryCode:[\"CY\"]},{formats:[\"+420(###)### ###\"],countryCode:[\"CZ\"]},{formats:[\"+49(####)### ####\",\"+49(###)### ####\",\"+49(###)## ####\",\"+49(###)## ###\",\"+49(###)## ##\",\"+49 ### ###\"],countryCode:[\"DE\"]},{formats:[\"+253 ## ## ## ##\"],countryCode:[\"DJ\"]},{formats:[\"+45 ## ## ## ##\"],countryCode:[\"DK\"]},{formats:[\"+1(767)### ####\"],countryCode:[\"DM\"]},{formats:[\"+1(809)### ####\",\"+1(829)### ####\",\"+1(849)### ####\"],countryCode:[\"DO\"]},{formats:[\"+213 ## ### ####\"],countryCode:[\"DZ\"]},{formats:[\"+593 ## ### ####\",\"+593 # ### ####\"],countryCode:[\"EC\"]},{formats:[\"+372 #### ####\",\"+372 ### ####\"],countryCode:[\"EE\"]},{formats:[\"+20(###)### ####\"],countryCode:[\"EG\"]},{formats:[\"+291 # ### ###\"],countryCode:[\"ER\"]},{formats:[\"+34(###)### ###\"],countryCode:[\"ES\"]},{formats:[\"+251 ## ### ####\"],countryCode:[\"ET\"]},{formats:[\"+358(###)### ## ##\"],countryCode:[\"FI\"]},{formats:[\"+679 ## #####\"],countryCode:[\"FJ\"]},{formats:[\"+500 #####\"],countryCode:[\"FK\"]},{formats:[\"+691 ### ####\"],countryCode:[\"FM\"]},{formats:[\"+298 ### ###\"],countryCode:[\"FO\"]},{formats:[\"+262 ##### ####\",\"+33 1 ## ## ## ##\",\"+33 2 ## ## ## ##\",\"+33 3 ## ## ## ##\",\"+33 4 ## ## ## ##\",\"+33 5 ## ## ## ##\",\"+33 6 ## ## ## ##\",\"+33 7 ## ## ## ##\",\"+508 ## ####\",\"+590(###)### ###\"],countryCode:[\"FR\"]},{formats:[\"+241 # ## ## ##\"],countryCode:[\"GA\"]},{formats:[\"+1(473)### ####\"],countryCode:[\"GD\"]},{formats:[\"+995(###)### ###\"],countryCode:[\"GE\"]},{formats:[\"+594 ##### ####\"],countryCode:[\"GF\"]},{formats:[\"+233(###)### ###\"],countryCode:[\"GH\"]},{formats:[\"+350 ### #####\"],countryCode:[\"GI\"]},{formats:[\"+299 ## ## ##\"],countryCode:[\"GL\"]},{formats:[\"+220(###)## ##\"],countryCode:[\"GM\"]},{formats:[\"+224 ## ### ###\"],countryCode:[\"GN\"]},{formats:[\"+240 ## ### ####\"],countryCode:[\"GQ\"]},{formats:[\"+30(###)### ####\"],countryCode:[\"GR\"]},{formats:[\"+502 # ### ####\"],countryCode:[\"GT\"]},{formats:[\"+1(671)### ####\"],countryCode:[\"GU\"]},{formats:[\"+245 # ######\"],countryCode:[\"GW\"]},{formats:[\"+592 ### ####\"],countryCode:[\"GY\"]},{formats:[\"+852 #### ####\"],countryCode:[\"HK\"]},{formats:[\"+504 #### ####\"],countryCode:[\"HN\"]},{formats:[\"+385 (##) ### ###\",\"+385 (##) ### ####\",\"+385 1 #### ###\"],countryCode:[\"HR\"]},{formats:[\"+509 ## ## ####\"],countryCode:[\"HT\"]},{formats:[\"+36(###)### ###\"],countryCode:[\"HU\"]},{formats:[\"+62(8##)### ####\",\"+62(8##)### ###\",\"+62(8##)### ## ###\",\"+62 ## ### ##\",\"+62 ## ### ###\",\"+62 ## ### ####\"],countryCode:[\"ID\"]},{formats:[\"+353(###)### ###\"],countryCode:[\"IE\"]},{formats:[\"+972 5# ### ####\",\"+972 # ### ####\"],countryCode:[\"IL\"]},{formats:[\"+91 ##### #####\"],countryCode:[\"IN\"]},{formats:[\"+246 ### ####\"],countryCode:[\"IO\"]},{formats:[\"+964(###)### ####\"],countryCode:[\"IQ\"]},{formats:[\"+98(###)### ####\"],countryCode:[\"IR\"]},{formats:[\"+354 ### ####\"],countryCode:[\"IS\"]},{formats:[\"+39(0##)#### ## ##\",\"+39(0##)#### ###\",\"+39(0##)### ###\",\"+39(0##)## ###\",\"+39(0##)## ##\",\"+39(0#)## ##\",\"+39(3##)### ## ##\",\"+39(3##)## ## ##\"],countryCode:[\"IT\"]},{formats:[\"+1(876)### ####\"],countryCode:[\"JM\"]},{formats:[\"+962 # #### ####\"],countryCode:[\"JO\"]},{formats:[\"+81 ## #### ####\",\"+81(###)### ###\"],countryCode:[\"JP\"]},{formats:[\"+254 ### ######\"],countryCode:[\"KE\"]},{formats:[\"+996(###)### ###\"],countryCode:[\"KG\"]},{formats:[\"+855 ## ### ###\"],countryCode:[\"KH\"]},{formats:[\"+686 ## ###\"],countryCode:[\"KI\"]},{formats:[\"+269 ## #####\"],countryCode:[\"KM\"]},{formats:[\"+1(869)### ####\"],countryCode:[\"KN\"]},{formats:[\"+850 191 ### ####\",\"+850 ## ### ###\",\"+850 ### #### ###\",\"+850 ### ###\",\"+850 #### ####\",\"+850 #### #############\"],countryCode:[\"KP\"]},{formats:[\"+82 ## ### ####\"],countryCode:[\"KR\"]},{formats:[\"+965 #### ####\"],countryCode:[\"KW\"]},{formats:[\"+1(345)### ####\"],countryCode:[\"KY\"]},{formats:[\"+7(6##)### ## ##\",\"+7(7##)### ## ##\"],countryCode:[\"KZ\"]},{formats:[\"+856(20##)### ###\",\"+856 ## ### ###\"],countryCode:[\"LA\"]},{formats:[\"+961 ## ### ###\",\"+961 # ### ###\"],countryCode:[\"LB\"]},{formats:[\"+1(758)### ####\"],countryCode:[\"LC\"]},{formats:[\"+423(###)### ####\"],countryCode:[\"LI\"]},{formats:[\"+94 ## ### ####\"],countryCode:[\"LK\"]},{formats:[\"+231 ## ### ###\"],countryCode:[\"LR\"]},{formats:[\"+266 # ### ####\"],countryCode:[\"LS\"]},{formats:[\"+370(###)## ###\"],countryCode:[\"LT\"]},{formats:[\"+352 ### ###\",\"+352 #### ###\",\"+352 ##### ###\",\"+352 ###### ###\"],countryCode:[\"LU\"]},{formats:[\"+371 ## ### ###\"],countryCode:[\"LV\"]},{formats:[\"+218 ## ### ###\",\"+218 21 ### ####\"],countryCode:[\"LY\"]},{formats:[\"+212 ## #### ###\"],countryCode:[\"MA\"]},{formats:[\"+377(###)### ###\",\"+377 ## ### ###\"],countryCode:[\"MC\"]},{formats:[\"+373 #### ####\"],countryCode:[\"MD\"]},{formats:[\"+382 ## ### ###\"],countryCode:[\"ME\"]},{formats:[\"+261 ## ## #####\"],countryCode:[\"MG\"]},{formats:[\"+692 ### ####\"],countryCode:[\"MH\"]},{formats:[\"+389 ## ### ###\"],countryCode:[\"MK\"]},{formats:[\"+223 ## ## ####\"],countryCode:[\"ML\"]},{formats:[\"+95 ## ### ###\",\"+95 # ### ###\",\"+95 ### ###\"],countryCode:[\"MM\"]},{formats:[\"+976 ## ## ####\"],countryCode:[\"MN\"]},{formats:[\"+853 #### ####\"],countryCode:[\"MO\"]},{formats:[\"+1(670)### ####\"],countryCode:[\"MP\"]},{formats:[\"+596(###)## ## ##\"],countryCode:[\"MQ\"]},{formats:[\"+222 ## ## ####\"],countryCode:[\"MR\"]},{formats:[\"+1(664)### ####\"],countryCode:[\"MS\"]},{formats:[\"+356 #### ####\"],countryCode:[\"MT\"]},{formats:[\"+230 ### ####\"],countryCode:[\"MU\"]},{formats:[\"+960 ### ####\"],countryCode:[\"MV\"]},{formats:[\"+265 1 ### ###\",\"+265 # #### ####\"],countryCode:[\"MW\"]},{formats:[\"+52(###)### ####\",\"+52 ## ## ####\"],countryCode:[\"MX\"]},{formats:[\"+60 ## ### ####\",\"+60 11 #### ####\",\"+60(###)### ###\",\"+60 ## ### ###\",\"+60 # ### ###\"],countryCode:[\"MY\"]},{formats:[\"+258 ## ### ###\"],countryCode:[\"MZ\"]},{formats:[\"+264 ## ### ####\"],countryCode:[\"NA\"]},{formats:[\"+687 ## ####\"],countryCode:[\"NC\"]},{formats:[\"+227 ## ## ####\"],countryCode:[\"NE\"]},{formats:[\"+672 3## ###\"],countryCode:[\"NF\"]},{formats:[\"+234(###)### ####\",\"+234 ## ### ###\",\"+234 ## ### ##\",\"+234(###)### ####\"],countryCode:[\"NG\"]},{formats:[\"+505 #### ####\"],countryCode:[\"NI\"]},{formats:[\"+31 ## ### ####\"],countryCode:[\"NL\"]},{formats:[\"+47(###)## ###\"],countryCode:[\"NO\"]},{formats:[\"+977 ## ### ###\"],countryCode:[\"NP\"]},{formats:[\"+674 ### ####\"],countryCode:[\"NR\"]},{formats:[\"+683 ####\"],countryCode:[\"NU\"]},{formats:[\"+64(###)### ###[#]\",\"+64 ## ### ###\"],countryCode:[\"NZ\"]},{formats:[\"+968 ## ### ###\"],countryCode:[\"OM\"]},{formats:[\"+507 ### ####\"],countryCode:[\"PA\"]},{formats:[\"+51(###)### ###\"],countryCode:[\"PE\"]},{formats:[\"+689 ## ## ##\"],countryCode:[\"PF\"]},{formats:[\"+675(###)## ###\"],countryCode:[\"PG\"]},{formats:[\"+63(###)### ####\"],countryCode:[\"PH\"]},{formats:[\"+92(###)### ####\"],countryCode:[\"PK\"]},{formats:[\"+48(###)### ###\"],countryCode:[\"PL\"]},{formats:[\"+970 ## ### ####\"],countryCode:[\"PS\"]},{formats:[\"+351 ## ### ####\"],countryCode:[\"PT\"]},{formats:[\"+680 ### ####\"],countryCode:[\"PW\"]},{formats:[\"+595(###)### ###\"],countryCode:[\"PY\"]},{formats:[\"+974 #### ####\"],countryCode:[\"QA\"]},{formats:[\"+262 ##### ####\"],countryCode:[\"RE\"]},{formats:[\"+40 ## ### ####\"],countryCode:[\"RO\"]},{formats:[\"+381 ## ### ####\"],countryCode:[\"RS\"]},{formats:[\"+7(###)### ## ##\"],countryCode:[\"RU\"]},{formats:[\"+250(###)### ###\"],countryCode:[\"RW\"]},{formats:[\"+966 5 #### ####\",\"+966 # ### ####\"],countryCode:[\"SA\"]},{formats:[\"+677 ### ####\",\"+677 #####\"],countryCode:[\"SB\"]},{formats:[\"+248 # ### ###\"],countryCode:[\"SC\"]},{formats:[\"+249 ## ### ####\"],countryCode:[\"SD\"]},{formats:[\"+46 ## ### ####\"],countryCode:[\"SE\"]},{formats:[\"+65 #### ####\"],countryCode:[\"SG\"]},{formats:[\"+290 ####\",\"+290 ####\"],countryCode:[\"SH\"]},{formats:[\"+386 ## ### ###\"],countryCode:[\"SI\"]},{formats:[\"+421(###)### ###\"],countryCode:[\"SK\"]},{formats:[\"+232 ## ######\"],countryCode:[\"SL\"]},{formats:[\"+378 #### ######\"],countryCode:[\"SM\"]},{formats:[\"+221 ## ### ####\"],countryCode:[\"SN\"]},{formats:[\"+252 ## ### ###\",\"+252 # ### ###\",\"+252 # ### ###\"],countryCode:[\"SO\"]},{formats:[\"+597 ### ####\",\"+597 ### ###\"],countryCode:[\"SR\"]},{formats:[\"+211 ## ### ####\"],countryCode:[\"SS\"]},{formats:[\"+239 ## #####\"],countryCode:[\"ST\"]},{formats:[\"+503 ## ## ####\"],countryCode:[\"SV\"]},{formats:[\"+1(721)### ####\"],countryCode:[\"SX\"]},{formats:[\"+963 ## #### ###\"],countryCode:[\"SY\"]},{formats:[\"+268 ## ## ####\"],countryCode:[\"SZ\"]},{formats:[\"+1(649)### ####\"],countryCode:[\"TC\"]},{formats:[\"+235 ## ## ## ##\"],countryCode:[\"TD\"]},{formats:[\"+228 ## ### ###\"],countryCode:[\"TG\"]},{formats:[\"+66 ## ### ####\",\"+66 ## ### ###\"],countryCode:[\"TH\"]},{formats:[\"+992 ## ### ####\"],countryCode:[\"TJ\"]},{formats:[\"+690 ####\"],countryCode:[\"TK\"]},{formats:[\"+670 ### ####\",\"+670 77# #####\",\"+670 78# #####\"],countryCode:[\"TL\"]},{formats:[\"+993 # ### ####\"],countryCode:[\"TM\"]},{formats:[\"+216 ## ### ###\"],countryCode:[\"TN\"]},{formats:[\"+676 #####\"],countryCode:[\"TO\"]},{formats:[\"+90(###)### ####\"],countryCode:[\"TR\"]},{formats:[\"+1(868)### ####\"],countryCode:[\"TT\"]},{formats:[\"+688 90####\",\"+688 2####\"],countryCode:[\"TV\"]},{formats:[\"+886 # #### ####\",\"+886 #### ####\"],countryCode:[\"TW\"]},{formats:[\"+255 ## ### ####\"],countryCode:[\"TZ\"]},{formats:[\"+380(##)### ## ##\"],countryCode:[\"UA\"]},{formats:[\"+256(###)### ###\"],countryCode:[\"UG\"]},{formats:[\"+44 #### ######\"],countryCode:[\"GB\",\"UK\"]},{formats:[\"+598 # ### ## ##\"],countryCode:[\"UY\"]},{formats:[\"+998 ## ### ####\"],countryCode:[\"UZ\"]},{formats:[\"+39 6 698 #####\"],countryCode:[\"VA\"]},{formats:[\"+1(784)### ####\"],countryCode:[\"VC\"]},{formats:[\"+58(###)### ####\"],countryCode:[\"VE\"]},{formats:[\"+1(284)### ####\"],countryCode:[\"VG\"]},{formats:[\"+1(340)### ####\"],countryCode:[\"VI\"]},{formats:[\"+84 ## #### ###\",\"+84(###)#### ###\"],countryCode:[\"VN\"]},{formats:[\"+678 ## #####\",\"+678 #####\"],countryCode:[\"VU\"]},{formats:[\"+681 ## ####\"],countryCode:[\"WF\"]},{formats:[\"+685 ## ####\"],countryCode:[\"WS\"]},{formats:[\"+967 ### ### ###\",\"+967 # ### ###\",\"+967 ## ### ###\"],countryCode:[\"YE\"]},{formats:[\"+27 ## ### ####\"],countryCode:[\"ZA\"]},{formats:[\"+260 ## ### ####\"],countryCode:[\"ZM\"]},{formats:[\"+263 # ######\"],countryCode:[\"ZW\"]},{formats:[\"+1(###)### ####\"],countryCode:[\"US\",\"CA\"]}];function Ci(e){const a=e?.countryCode??X(),t=Si.find((e=>e.countryCode.includes(a)))?.formats||Si.map((({formats:e})=>e)).flat();return n(Array.from({length:e?.length||1},(()=>_t({mask:r(t)}))),e)}var Ai=[\"Try to program the GB interface, maybe it will copy the wireless hard drive!\",\"Try to bypass the GB panel, maybe it will synthesize the back-end transmitter!\",\"If we program the protocol, we can get to the SDD application through the virtual RAM pixel!\",\"Use the open-source THX application, then you can quantify the solid state transmitter!\",\"You cant transmit the firewall without copying the 1080p SDD interface!\",\"Ill compress the open-source SAS bandwidth, that should array the FTP port!\",\"programming the alarm wont do anything, we need to hack the solid state ADP transmitter!\",\"calculating the interface wont do anything, we need to bypass the mobile IB panel!\",\"Try to calculate the GB transmitter, maybe it will quantify the online pixel!\",\"If we calculate the circuit, we can get to the HDD driver through the optical XML panel!\",\"navigating the program wont do anything, we need to calculate the cross-platform SMS capacitor!\",\"Try to calculate the JBOD firewall, maybe it will override the redundant port!\",\"If we quantify the alarm, we can get to the FTP pixel through the online SSL interface!\",\"You cant override the capacitor without indexing the bluetooth PNG pixel!\",\"quantifying the microchip wont do anything, we need to index the online SQL hard drive!\",\"connecting the port wont do anything, we need to program the haptic RSS pixel!\",\"We need to back up the 1080p JBOD bandwidth!\",\"If we index the card, we can get to the SMS hard drive through the bluetooth AGP bus!\",\"Ill compress the optical SDD hard drive, that should interface the XSS bandwidth!\",\"You cant copy the feed without compressing the primary JBOD circuit!\",\"If we back up the application, we can get to the TCP bus through the auxiliary FTP hard drive!\",\"Try to override the RSS port, maybe it will quantify the haptic port!\",\"We need to calculate the bluetooth JBOD bus!\",\"bypassing the bus wont do anything, we need to program the wireless SDD driver!\",\"Try to parse the PCI capacitor, maybe it will quantify the bluetooth interface!\",\"copying the monitor wont do anything, we need to synthesize the back-end ADP application!\",\"Try to index the PNG card, maybe it will transmit the neural system!\",\"Try to bypass the SCSI sensor, maybe it will generate the 1080p card!\",\"We need to calculate the open-source SDD driver!\",\"If we reboot the port, we can get to the RSS application through the 1080p SQL microchip!\",\"Use the cross-platform AI system, then you can connect the digital card!\",\"We need to navigate the virtual SSL transmitter!\",\"The JSON hard drive is down, bypass the redundant firewall so we can copy the FTP port!\",\"We need to navigate the haptic JBOD system!\",\"We need to generate the virtual USB pixel!\",\"Ill override the digital ADP alarm, that should microchip the USB firewall!\",\"We need to bypass the redundant RAM pixel!\",\"Ill compress the cross-platform EXE card, that should circuit the AGP sensor!\",\"The AGP protocol is down, compress the open-source card so we can override the XML program!\",\"Ill reboot the bluetooth GB capacitor, that should card the HDD panel!\",\"Ill connect the neural IB matrix, that should array the CSS card!\",\"The EXE matrix is down, transmit the wireless matrix so we can index the RAM pixel!\",\"The THX monitor is down, reboot the auxiliary array so we can parse the XML microchip!\",\"Try to override the HDD firewall, maybe it will generate the open-source panel!\",\"We need to index the digital JBOD bus!\",\"Use the multi-byte THX firewall, then you can back up the digital system!\",\"Use the 1080p IB feed, then you can reboot the haptic feed!\",\"Try to bypass the SAS card, maybe it will transmit the solid state system!\",\"Try to quantify the TCP array, maybe it will index the virtual transmitter!\",\"Ill override the cross-platform PCI port, that should driver the FTP card!\",\"If we override the bandwidth, we can get to the SMTP capacitor through the cross-platform RSS alarm!\",\"Use the redundant AGP transmitter, then you can generate the 1080p circuit!\",\"Use the auxiliary EXE monitor, then you can hack the haptic port!\",\"Try to synthesize the SCSI card, maybe it will back up the 1080p circuit!\",\"We need to transmit the auxiliary GB sensor!\",\"Use the mobile GB transmitter, then you can quantify the wireless system!\",\"Try to quantify the SQL application, maybe it will bypass the primary pixel!\",\"You cant override the protocol without programming the mobile RAM card!\",\"The JBOD port is down, program the wireless array so we can input the PCI program!\",\"Use the auxiliary JSON card, then you can copy the optical matrix!\",\"We need to calculate the wireless TCP circuit!\",\"Use the back-end AI firewall, then you can parse the optical program!\",\"navigating the hard drive wont do anything, we need to synthesize the auxiliary USB circuit!\",\"Ill quantify the redundant TCP bus, that should hard drive the ADP bandwidth!\",\"If we back up the sensor, we can get to the JBOD matrix through the optical EXE alarm!\",\"Try to generate the TCP bus, maybe it will override the neural bandwidth!\",\"The ADP protocol is down, parse the 1080p card so we can reboot the ADP application!\",\"calculating the driver wont do anything, we need to generate the optical SMTP feed!\",\"Ill calculate the 1080p XML transmitter, that should alarm the RSS firewall!\",\"You cant connect the interface without programming the virtual PNG protocol!\",\"Use the cross-platform THX array, then you can parse the primary capacitor!\",\"generating the sensor wont do anything, we need to hack the solid state AI bus!\",\"Try to calculate the JBOD program, maybe it will synthesize the mobile system!\",\"We need to program the back-end PNG pixel!\",\"Ill program the virtual XML microchip, that should transmitter the SDD protocol!\",\"If we hack the firewall, we can get to the USB application through the bluetooth SDD system!\",\"Use the auxiliary SDD system, then you can input the redundant hard drive!\",\"The GB port is down, quantify the mobile circuit so we can hack the SMTP system!\",\"You cant quantify the driver without transmitting the multi-byte SQL microchip!\",\"Try to parse the SMTP array, maybe it will generate the multi-byte port!\",\"copying the system wont do anything, we need to calculate the virtual SSL circuit!\",\"Use the bluetooth TCP capacitor, then you can reboot the open-source hard drive!\",\"If we navigate the card, we can get to the ADP array through the open-source IB feed!\",\"Try to input the HTTP feed, maybe it will reboot the mobile capacitor!\",\"If we input the driver, we can get to the RAM monitor through the 1080p GB bus!\",\"Ill calculate the wireless ADP port, that should bandwidth the SSL microchip!\",\"Use the haptic XSS driver, then you can connect the wireless program!\",\"quantifying the circuit wont do anything, we need to parse the back-end FTP interface!\",\"Ill reboot the online COM interface, that should system the THX protocol!\",\"Try to transmit the HTTP card, maybe it will override the multi-byte hard drive!\",\"Ill program the back-end THX matrix, that should interface the HDD panel!\",\"Ill generate the virtual SQL protocol, that should bus the AI hard drive!\",\"We need to calculate the mobile AGP panel!\",\"Ill compress the back-end PCI circuit, that should monitor the PNG driver!\",\"We need to quantify the primary TCP matrix!\",\"Ill synthesize the primary AI capacitor, that should array the JBOD sensor!\",\"You cant hack the card without indexing the primary XSS capacitor!\",\"The TCP feed is down, compress the cross-platform alarm so we can synthesize the XSS array!\",\"The JSON interface is down, hack the haptic transmitter so we can bypass the XML system!\",\"Use the online SDD protocol, then you can parse the open-source bandwidth!\"];function Mi(e){return n(Ai,e)}function Ti(e){return n((()=>k({min:0,max:65535})),e)}function Bi(e){return n((()=>a({random:k({min:0,max:255,length:16})})),e)}function Ii(e){const a={withAccents:e?.withAccents};return n((()=>{let t=`${e?.firstName??va(a)} ${e?.lastName??Sa(a)}`.replace(\" \",n([\".\",\"_\"]));return v()&&(t+=k({min:0,max:100})),t}),e)}var Pi=[\"King Drives\",\"Georgiana Throughway\",\"Antonietta Highway\",\"Elian Road\",\"Reynold Crossing\",\"Max Wall\",\"Lehner Drive\",\"Graham Walks\",\"Buckridge Drives\",\"Schimmel Fields\",\"Doyle Expressway\",\"Cade Forks\",\"Myriam Spur\",\"Fannie Loaf\",\"Dorian Gateway\",\"Ruecker Fields\",\"Daugherty Center\",\"Emerald Key\",\"Jazmyn Isle\",\"Viviane Junctions\",\"Price Spring\",\"Aracely Row\",\"Chyna Plaza\",\"Harmon Lodge\",\"Konopelski Inlet\",\"Dave Stravenue\",\"Goyette Circle\",\"Stokes Wells\",\"Arturo Manors\",\"Schumm Land\",\"Bechtelar Fields\",\"Natalia Points\",\"Dianna Inlet\",\"Curt Locks\",\"Durgan Parkways\",\"Dante Summit\",\"Hilma Mills\",\"Stiedemann Field\",\"Genesis Plaza\",\"Carmelo Plaza\",\"Gutkowski Ferry\",\"Abbott Square\",\"Hodkiewicz Oval\",\"Heathcote Cliff\",\"Calista Via\",\"Kihn Expressway\",\"Caesar Place\",\"Lockman Greens\",\"Brisa Hill\",\"Quigley Parkways\",\"Howell Vista\",\"Fisher Light\",\"Tremblay Springs\",\"Stroman Turnpike\",\"Howell Plaza\",\"Wilma Greens\",\"Adell Mews\",\"Shakira Crossroad\",\"Moises Causeway\",\"Frances Groves\",\"Sammy Creek\",\"Wolf Glen\",\"Fay Corners\",\"Collins Lane\",\"Smitham Drive\",\"Cronin Shoal\",\"Missouri Extension\",\"Leffler Fields\",\"Laurianne Glens\",\"Parker Ways\",\"Benny River\",\"Kreiger Mission\",\"Dameon Mountain\",\"Emard Hill\",\"Quitzon Green\",\"Corwin Mission\",\"Rosendo Spring\",\"Carter Pike\",\"Harber Village\",\"Jade Shore\",\"Dariana Junction\",\"Beer Plaza\",\"Hauck Stream\",\"Joshuah Fork\",\"Rath Walk\",\"Eugenia Heights\",\"Kuphal Mountain\",\"Zboncak Harbor\",\"Torphy Fords\",\"Jocelyn Throughway\",\"Cole Center\",\"Forest Path\",\"Oswald Junction\",\"King Springs\",\"Zulauf Branch\",\"Esteban Inlet\",\"Conner Vista\",\"Zboncak Center\",\"Glover Lights\",\"Rohan Tunnel\"];function xi(e){return n(Pi,e)}function Di(e){return n((()=>`${k({min:0,max:1500})} ${xi()}`),e)}function Gi(e){return n((()=>{let e=\"\"+k({min:1e4,max:99999});return v()&&(e+=\"-\"+k({min:1e3,max:9999})),e}),e)}function Fi(e){const a=e?.includeCounty??!0,t=e?.includeCountry??!0;return n((()=>{const e={street:Di(),city:ke(),zipCode:Gi()};return a&&(e.county=De()),t&&(e.country=Pe()),e}),e)}function qi(e){return n((()=>{const e=va({withAccents:!1}),a=Sa({withAccents:!1});return{id:Bi(),email:Ca({firstName:e,lastName:a}),firstName:e,lastName:a,phone:Ci(),img:N(),username:Ii({firstName:e,lastName:a}),address:Fi()}}),e)}function Li(e){const a=e?.charCount??10;if(a<1||isNaN(a))throw\"Character count must be greater than 0\";return n((()=>{let e=Ht();if(1===a)return w();for(;e.length<a;)e+=` ${Ht()}`;return e=e.substring(0,a-2),e+=`${w()}.`,e}),e)}function Ri(e){return n((()=>({id:Bi(),title:Li({charCount:40}),body:Li({charCount:500}),comments:Array.from({length:k({min:1,max:5})},(()=>({id:Bi(),text:Li({charCount:100}),user:qi()})))})),e)}var Ei=[\"low\",\"medium\",\"high\",\"critical\",\"urgent\",\"major\",\"moderate\",\"minor\"];function Hi(e){return n(Ei,e)}var Wi=[\"Small Rubber Shoes\",\"Fantastic Wooden Sausages\",\"Handmade Frozen Salad\",\"Intelligent Soft Car\",\"Intelligent Concrete Chips\",\"Handcrafted Concrete Bacon\",\"Small Fresh Fish\",\"Rustic Metal Towels\",\"Unbranded Cotton Hat\",\"Fantastic Frozen Bike\",\"Generic Rubber Shirt\",\"Unbranded Wooden Keyboard\",\"Awesome Metal Computer\",\"Gorgeous Fresh Shoes\",\"Unbranded Concrete Sausages\",\"Practical Wooden Ball\",\"Ergonomic Soft Towels\",\"Small Plastic Table\",\"Awesome Metal Pants\",\"Licensed Steel Sausages\",\"Handcrafted Rubber Bike\",\"Ergonomic Cotton Computer\",\"Generic Wooden Ball\",\"Fantastic Frozen Soap\",\"Generic Plastic Keyboard\",\"Awesome Cotton Pizza\",\"Licensed Metal Chips\",\"Handcrafted Cotton Towels\",\"Handmade Plastic Tuna\",\"Practical Granite Keyboard\",\"Intelligent Concrete Soap\",\"Rustic Concrete Chips\",\"Fantastic Steel Hat\",\"Rustic Cotton Chair\",\"Gorgeous Metal Pants\",\"Intelligent Metal Bacon\",\"Handmade Rubber Car\",\"Tasty Concrete Keyboard\",\"Incredible Granite Hat\",\"Practical Rubber Fish\",\"Rustic Cotton Gloves\",\"Rustic Cotton Ball\",\"Refined Fresh Shirt\",\"Generic Granite Sausages\",\"Rustic Granite Fish\",\"Practical Wooden Bacon\",\"Sleek Plastic Chair\",\"Handcrafted Fresh Mouse\",\"Small Concrete Shoes\",\"Awesome Fresh Chair\",\"Incredible Soft Computer\",\"Tasty Concrete Chips\",\"Generic Rubber Sausages\",\"Intelligent Concrete Chicken\",\"Rustic Soft Ball\",\"Awesome Steel Towels\",\"Incredible Fresh Bike\",\"Unbranded Granite Chicken\",\"Rustic Concrete Bike\",\"Small Frozen Sausages\",\"Intelligent Plastic Gloves\",\"Ergonomic Frozen Towels\",\"Refined Frozen Ball\",\"Refined Cotton Ball\",\"Licensed Steel Salad\",\"Intelligent Wooden Bacon\",\"Unbranded Metal Shoes\",\"Fantastic Granite Car\",\"Ergonomic Granite Bacon\",\"Awesome Wooden Shirt\",\"Rustic Wooden Pizza\",\"Tasty Frozen Table\",\"Awesome Wooden Hat\",\"Awesome Rubber Salad\",\"Licensed Concrete Fish\",\"Fantastic Soft Cheese\",\"Rustic Frozen Pizza\",\"Refined Concrete Tuna\",\"Small Frozen Tuna\",\"Licensed Granite Cheese\",\"Practical Rubber Car\",\"Rustic Steel Sausages\",\"Awesome Concrete Hat\",\"Awesome Granite Sausages\",\"Sleek Plastic Chips\",\"Handcrafted Wooden Gloves\",\"Intelligent Metal Computer\",\"Fantastic Fresh Sausages\",\"Fantastic Plastic Salad\",\"Unbranded Steel Sausages\",\"Handcrafted Wooden Fish\",\"Sleek Wooden Bacon\",\"Unbranded Plastic Towels\",\"Tasty Soft Sausages\",\"Generic Metal Shirt\",\"Handmade Granite Cheese\",\"Small Fresh Bacon\",\"Tasty Granite Towels\",\"Licensed Steel Chips\"];function Ni(e){return n(Wi,e)}var zi=[\"Bostons most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles\",\"The Football Is Good For Training And Recreational Purposes\",\"New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016\",\"The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive\",\"The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J\",\"The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality\",\"Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals\",\"The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design\",\"Carbonite web goalkeeper gloves are ergonomically designed to give easy fit\",\"Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support\",\"New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart\",\"The beautiful range of Apple Natural\u00E9 that has an exciting mix of natural ingredients. With the Goodness of 100% Natural Ingredients\"];function Ki(e){return n(zi,e)}var Oi=[\"Antiques\",\"Appliances\",\"Automotive Parts & Accessories\",\"Automotive Parts\",\"Baby & Personal Care\",\"Books\",\"CDs & Vinyl\",\"Clothing\",\"Collectibles\",\"Computers & Tablets\",\"Crafts\",\"Electronics\",\"Garden\",\"Grocery\",\"Health & Beauty\",\"Kindle\",\"Movies & TV\",\"Musical Instruments\",\"Smartphones & Accessories\",\"Sporting Goods\",\"Toys\",\"Video Games\"];function Ji(e){return n(Oi,e)}function Vi(e){return n((()=>({id:Bi(),title:Ni(),description:Ki(),price:s({fraction:2}).toString(),category:Ji(),image:bt(),rating:{rate:s({min:.1,max:5,fraction:1}).toString(),count:s({min:0,max:1e4}).toString()}})),e)}var Ui=[\"Awesome\",\"Rustic\",\"Small\",\"Gorgeous\",\"Fantastic\",\"Sleek\",\"Intelligent\",\"Unbranded\",\"Refined\",\"Licensed\",\"Generic\",\"Practical\",\"Ergonomic\",\"Handcrafted\",\"Tasty\",\"Handmade\",\"Incredible\"];function ji(e){return n(Ui,e)}var _i=[\"Metal\",\"Plastic\",\"Rubber\",\"Frozen\",\"Soft\",\"Concrete\",\"Granite\",\"Fresh\",\"Steel\",\"Cotton\",\"Wooden\"];function Yi(e){return n(_i,e)}var Qi=[\"Python\",\"Java\",\"JavaScript\",\"C\",\"C++\",\"C#\",\"PHP\",\"Kotlin\",\"R\",\"TypeScript\",\"Abap\",\"Swift\",\"Objective-C\",\"VBA\",\"Matlab\",\"Go\",\"Scala\",\"Ruby\",\"Groovy\",\"Dart\",\"Cobol\",\"Visual Basic\",\"Perl\",\"Julia\",\"Rust\",\"Lua\",\"Lisp\",\"Haskell\",\"Delphi\"];function $i(e){return n(Qi,e)}var Zi=[\"They/Them\",\"She/Her\",\"He/Him\",\"Ze/Hir\"];function Xi(e){return n(Zi,e)}var eo=[\"https\",\"http\",\"tcp\",\"udp\",\"ip\",\"pop\",\"smtp\",\"dhcp\",\"l2tp\",\"ftp\",\"imap\"],ao=[\"Hyper Text Transfer Protocol Secure\",\"Hyper Text Transfer Protocol\",\"Transmission Control Protocol\",\"User Datagram Protocol\",\"Internet Protocol\",\"Post office Protocol\",\"Simple mail transport Protocol\",\"Dynamic Host Configuration Protoco\",\"Layer Two Tunnelling Protocol\",\"File Transfer Protocol\",\"Internet Message Access Protocol\"];function to(e){return n(e?.fullName?ao:eo,e)}var io=[\"A stumble may prevent a fall.\",\"Put your future in good hands your own.\",\"What you see depends on what you're looking for.\",\"Worry gives a small thing a big shadow.\",\"To get something you never had, you have to do something you never did.\",\"Be thankful when you don't know something for it gives you the opportunity to learn.\",\"Letting go is not the end of the world; it is the beginning of a new life.\",\"Our greatest glory is not in never failing but rising everytime we fall.\",\"Being right is highly overrated. Even a stopped clock is right twice a day.\",\"Love is not blind; it simply enables one to see things others fail to see.\",\"If you get up one more time than you fall, you will make it through.\",\"Don't focus on making the right decision, focus on making the decision the right one.\",\"Love is just a word until someone comes along and gives it meaning.\",\"We all have problems. The way we solve them is what makes us different.\",\"Invent your world. Surround yourself with people, color, sounds, and work that nourish you.\",\"Every day may not be good, but there's something good in every day.\",\"Some people think it's holding that makes one strong sometimes it's letting go.\",\"Why worry about things you cannot control when you can keep yourself busy controlling the things that depend on you?\",\"It is better to take many small steps in the right direction than to make a great leap forward only to stumble backward.\",\"As the rest of the world is walking out the door, your best friends are the ones walking in.\",\"Why compare yourself with others? No one in the entire world can do a better job of being you than you.\",\"A good teacher is like a candle it consumes itself to light the way for others.\",\"Life is not measured by the breaths we take, but by the moments that take our breath.\",\"The real measure of your wealth is how much youd be worth if you lost all your money.\",\"Though no one can go back and make a brand new start, anyone can start from now and make a brand new ending.\",\"A friend is someone who understands your past, believes in your future, and accepts you just the way you are.\",\"Giving up doesn't always mean you are weak. Sometimes it means that you are strong enough to let go.\",\"Never miss an opportunity to make others happy, even if you have to leave them alone in order to do it.\",\"Yesterday is history. Tomorrow is a mystery. And today? Today is a gift that's why they call it the present.\",\"When you don't know what you believe, everything becomes an argument. Everything is debatable. But when you stand for something, decisions are obvious.\",\"Every sixty seconds you spend angry, upset or mad, is a full minute of happiness you will never get back.\",\"If we are facing in the right direction, all we have to do is keep on walking.\",\"Peace of mind is not the absence of conflict from life, but the ability to cope with it.\",\"An obstacle may be either a stepping stone or a stumbling block.\",\"I've never seen a smiling face that was not beautiful.\",\"Kindness is the greatest wisdom.\",\"Don't miss all the beautiful colors of the rainbow looking for that pot of gold.\",\"You don't drown by falling in water. You drown by staying there.\",\"Never be afraid to try, remember... Amateurs built the ark, Professionals built the Titanic.\",\"A smile is a light in the window of your face to show your heart is at home.\",\"You may only be someone in the world, but to someone else, you may be the world.\",\"A bend in the road is not the end of the road...unless you fail to make the turn.\",\"One who asks a question is a fool for five minutes; one who does not ask a question remains a fool forever.\",\"Courage is the discovery that you may not win, and trying when you know you can lose.\",\"A good rest is half the work.\",\"All the flowers of all the tomorrows are in the seeds of today.\",\"A man is not where he lives but where he loves.\",\"The world does not happen to you it happens from you.\",\"More powerful than the will to win is the courage to begin.\",\"What we see is mainly what we look for.\",\"Don't wait for people to be friendly. Show them how.\",\"Don't let today's disappointments cast a shadow on tomorrow's dreams.\",\"Never let lack of money interfere with having fun.\",\"He who has health has hope, and he who has hope has everything.\",\"The difficulties of life are intended to make us better, not bitter.\",\"Change your words. Change your world.\",\"Open minds lead to open doors.\",\"Each time we face a fear, we gain strength, courage, and confidence in the doing.\",\"If you come to a fork in the road, take it.\",\"Nobody can do everything, but everybody can do something.\",\"Why worry about tomorrow, when today is all we have?\",\"Most smiles are started by another smile.\",\"When you lose, don't lose the lesson.\",\"If I could reach up and hold a star for every time you've made me smile, the entire evening sky would be in the palm of my hand.\",\"The steeper the mountain the harder the climb the better the view from the finishing line\",\"Don't let what you can't do stop you from doing what you can do.\",\"You can never cross the ocean unless you have the courage to lose sight of the shore.\",\"The best place to find a helping hand is at the end of your own arm.\",\"Don't fear failure so much that you refuse to try new things. The saddest summary of life contains three descriptions: could have, might have, and should have.\",\"We cannot direct the wind but we can adjust the sails.\",\"Giving up doesn't always mean you are weak; sometimes it means that you are strong enough to let go.\",\"Many people have gone further than they thought they could because someone else thought they could.\",\"Never tell me the sky is the limit when there are footprints on the moon.\",\"Count your joys instead of your woes. Count your friends instead of your foes.\",\"Beware of the half truth. You may have gotten hold of the wrong half.\",\"It's not who you are that holds you back, it's who you think you're not.\",\"Choosing to be positive and having a grateful attitude is going to determine how you're going to live your life.\",\"My attitude is that if you push me towards something that you think is a weakness, then I will turn that perceived weakness into a strength.\",\"Weakness of attitude becomes weakness of character.\",\"Nothing can stop the man with the right mental attitude from achieving his goal nothing on earth can help the man with the wrong mental attitude.\",\"Attitude is a little thing that makes a big difference.\",\"Your attitude, not your aptitude, will determine your altitude.\",\"There is little difference in people, but that little difference makes a big difference. The little difference is attitude. The big difference is whether it is positive or negative.\",\"Develop an attitude of gratitude, and give thanks for everything that happens to you, knowing that every step forward is a step toward achieving something bigger and better than your current situation.\",\"Everything can be taken from a man but one thing: the last of human freedoms - to choose one's attitude in any given set of circumstances, to choose one's own way.\",\"A positive attitude causes a chain reaction of positive thoughts, events and outcomes. It is a catalyst and it sparks extraordinary results.\",\"Morality is simply the attitude we adopt towards people whom we personally dislike.\",\"It is not the body's posture, but the heart's attitude that counts when we pray.\",\"People may hear your words, but they feel your attitude.\",\"But the attitude of faith is to let go, and become open to truth, whatever it might turn out to be.\",\"Character is the result of two things: mental attitude and the way we spend our time.\",\"Our attitude towards others determines their attitude towards us.\",\"Adopting the right attitude can convert a negative stress into a positive one.\",\"Take the attitude of a student, never be too big to ask questions, never know too much to learn something new.\",\"The reactionary is always willing to take a progressive attitude on any issue that is dead.\",\"Ability is what you're capable of doing. Motivation determines what you do. Attitude determines how well you do it.\",\"Cock your hat - angles are attitudes.\",\"When you pray for anyone you tend to modify your personal attitude toward him.\",\"If you are going to achieve excellence in big things, you develop the habit in little matters. Excellence is not an exception, it is a prevailing attitude.\",\"I'm only going to stand before God and give an account for my life, not for somebody else's life. If I have a bad attitude, then I need to say there's no point in me blaming you for what's wrong in my life.\",\"It is our attitude at the beginning of a difficult task which, more than anything else, will affect its successful outcome.\",\"My attitude is, if someone's going to criticize me, tell me to my face.\",\"Having a positive mental attitude is asking how something can be done rather than saying it can't be done.\",\"My general attitude to life is to enjoy every minute of every day. I never do anything with a feeling of, 'Oh God, I've got to do this today.'\",\"A complainer is like a Death Eater because there's a suction of negative energy. You can catch a great attitude from great people.\",\"The meaning of things lies not in the things themselves, but in our attitude towards them.\",\"Pink isn't just a color, it's an attitude!\",\"The remarkable thing is, we have a choice everyday regarding the attitude we will embrace for that day.\",\"A positive attitude can really make dreams come true - it did for me.\",\"Good humor is one of the best articles of dress one can wear in society.\",\"When you are thwarted, it is your own attitude that is out of order.\",\"I think it's my adventure, my trip, my journey, and I guess my attitude is, let the chips fall where they may.\",\"Bad attitudes will ruin your team.\",\"For success, attitude is equally as important as ability.\",\"Happiness is an attitude of mind, born of the simple determination to be happy under all outward circumstances.\",\"Great effort springs naturally from great attitude.\",\"Attitudes are more important than facts.\",\"Attitude is everything.\",\"Attitude determines the altitude of life.\",\"Our attitude toward life determines life's attitude towards us.\",\"The greatest discovery of my generation is that man can alter his life simply by altering his attitude of mind.\",\"But my attitude about it is I have miles to go before I sleep.\",\"The attitude is very important. Because, your behavior radiates how you feel.\",\"When you ain't got no money, you gotta get an attitude.\",\"Civilization is a method of living, an attitude of equal respect for all men.\",\"Most of us start out with a positive attitude and a plan to do our best.\",\"There are no menial jobs, only menial attitudes.\",\"Funny is an attitude.\",\"The biggest challenge is how to affect public attitudes and make people care.\",\"If you don't like something, change it. If you can't change it, change your attitude.\",\"It is very important to generate a good attitude, a good heart, as much as possible. From this, happiness in both the short term and the long term for both yourself and others will come.\",\"Your living is determined not so much by what life brings to you as by the attitude you bring to life not so much by what happens to you as by the way your mind looks at what happens.\",\"Happiness doesn't depend on any external conditions, it is governed by our mental attitude.\",\"Whenever you're in conflict with someone, there is one factor that can make the difference between damaging your relationship and deepening it. That factor is attitude.\",\"Keep a good attitude and do the right thing even when it's hard. When you do that you are passing the test. And God promises you your marked moments are on their way.\",\"Success or failure depends more upon attitude than upon capacity successful men act as though they have accomplished or are enjoying something. Soon it becomes a reality. Act, look, feel successful, conduct yourself accordingly, and you will be amazed at the positive results.\",\"Like success, failure is many things to many people. With Positive Mental Attitude, failure is a learning experience, a rung on the ladder, a plateau at which to get your thoughts in order and prepare to try again.\",\"The only disability in life is a bad attitude.\",\"If you have a positive attitude and constantly strive to give your best effort, eventually you will overcome your immediate problems and find you are ready for greater challenges.\",\"You cannot control what happens to you, but you can control your attitude toward what happens to you, and in that, you will be mastering change rather than allowing it to master you.\",\"The greatest discovery of all time is that a person can change his future by merely changing his attitude.\",\"A healthy attitude is contagious but don't wait to catch it from others. Be a carrier.\",\"Any fact facing us is not as important as our attitude toward it, for that determines our success or failure. The way you think about a fact may defeat you before you ever do anything about it. You are overcome by the fact because you think you are.\",\"Excellence is not a skill. It is an attitude.\",\"I hope the millions of people I've touched have the optimism and desire to share their goals and hard work and persevere with a positive attitude.\",\"We cannot change our past. We can not change the fact that people act in a certain way. We can not change the inevitable. The only thing we can do is play on the one string we have, and that is our attitude.\",\"I was looking for something a lot heavier, yet melodic at the same time. Something different from heavy metal, a different attitude.\",\"Spend some time this weekend on home improvement improve your attitude toward your family.\",\"We awaken in others the same attitude of mind we hold toward them.\",\"There is little difference in people, but that little difference makes a big difference. That little difference is attitude. The big difference is whether it is positive or negative.\",\"Ability is what you're capable of doing. Motivation determines what you do. Attitude determines how well you do it.\",\"The last of human freedoms - the ability to chose one's attitude in a given set of circumstances.\",\"Attitude is more important than the past, than education, than money, than circumstances, than what people do or say. It is more important than appearance, giftedness, or skill.\",\"Being black is not a matter of pigmentation - being black is a reflection of a mental attitude.\",\"People in tough times - it doesn't mean they don't have a great attitude.\",\"A strong positive mental attitude will create more miracles than any wonder drug.\",\"Certain thoughts are prayers. There are moments when, whatever be the attitude of the body, the soul is on its knees.\",\"Leadership is practiced not so much in words as in attitude and in actions.\",\"If a person gets his attitude toward money straight, it will help straighten out almost every other area in his life.\",\"I've reached a point in my life where it's the little things that matter... I was always a rebel and probably could have got much farther had I changed my attitude. But when you think about it, I got pretty far without changing attitudes. I'm happier with that.\",\"Fairness is not an attitude. It's a professional skill that must be developed and exercised.\",\"I think whether you're having setbacks or not, the role of a leader is to always display a winning attitude.\",\"Be sure what you want and be sure about yourself. Fashion is not just beauty, it's about good attitude. You have to believe in yourself and be strong.\",\"Hitler and Mussolini were only the primary spokesmen for the attitude of domination and craving for power that are in the heart of almost everyone. Until the source is cleared, there will always be confusion and hate, wars and class antagonisms.\",\"There must be something solemn, serious, and tender about any attitude which we denominate religious. If glad, it must not grin or snicker if sad, it must not scream or curse.\",\"Sales are contingent upon the attitude of the salesman - not the attitude of the prospect.\",\"A positive attitude is not going to save you. What it's going to do is, everyday, between now and the day you die, whether that's a short time from now or a long time from now, that every day, you're going to actually live.\",\"Always keep that happy attitude. Pretend that you are holding a beautiful fragrant bouquet.\",\"Black Consciousness is an attitude of the mind and a way of life, the most positive call to emanate from the black world for a long time.\",\"I think music is the greatest art form that exists, and I think people listen to music for different reasons, and it serves different purposes. Some of it is background music, and some of it is things that might affect a person's day, if not their life, or change an attitude. The best songs are the ones that make you feel something.\",\"We submit to the majority because we have to. But we are not compelled to call our attitude of subjection a posture of respect.\",\"The winner's edge is not in a gifted birth, a high IQ, or in talent. The winner's edge is all in the attitude, not aptitude. Attitude is the criterion for success.\",\"Having a clear faith, based on the creed of the church is often labeled today as fundamentalism. Whereas relativism, which is letting oneself be tossed and swept along by every wind of teaching, look like the only attitude acceptable to today's standards.\",\"Today's students can put dope in their veins or hope in their brains. If they can conceive it and believe it, they can achieve it. They must know it is not their aptitude but their attitude that will determine their altitude.\",\"I think a lot of times we don't pay enough attention to people with a positive attitude because we assume they are naive or stupid or unschooled.\",\"A great attitude does much more than turn on the lights in our worlds it seems to magically connect us to all sorts of serendipitous opportunities that were somehow absent before the change.\",\"Chaotic people often have chaotic lives, and I think they create that. But if you try and have an inner peace and a positive attitude, I think you attract that.\",\"I am Classic Rock Revisited. I revisit it every waking moment of my life because it has the spirit and the attitude and the fire and the middle finger. I am Rosa Parks with a Gibson guitar.\",\"And the attitude of faith is the very opposite of clinging to belief, of holding on.\",\"Our lives are not determined by what happens to us but how we react to what happens, not by what life brings us but the attitude we bring to life.\",\"Being a sex symbol has to do with an attitude, not looks. Most men think it's looks, most women know otherwise.\",\"I am responsible. Although I may not be able to prevent the worst from happening, I am responsible for my attitude toward the inevitable misfortunes that darken life.\",\"No rational argument will have a rational effect on a man who does not want to adopt a rational attitude.\",\"When I was a child I asked my mother what homosexuality was about and she said - and this was 100 years ago in Germany and she was very open-minded - 'It's like hair color. It's nothing. Some people are blond and some people have dark hair. It's not a subject.' This was a very healthy attitude.\",\"Success or failure in business is caused more by the mental attitude even than by mental capacities.\",\"Obama does not represent America. Nor does he represent anything what our forefathers stood for. This country is basically built on an attitude. It's a way of life. It's not because you're born here. It's not that you're supposed to take from those who have and give to those who haven't. That kills a country. It killed Russia.\",\"Stop this attitude that older people ain't any good anymore! We're as good as we ever were - if we ever were any good.\",\"My attitude to peace is rather based on the Burmese definition of peace - it really means removing all the negative factors that destroy peace in this world. So peace does not mean just putting an end to violence or to war, but to all other factors that threaten peace, such as discrimination, such as inequality, poverty.\",\"Your attitude is like a box of crayons that color your world. Constantly color your picture gray, and your picture will always be bleak. Try adding some bright colors to the picture by including humor, and your picture begins to lighten up.\",\"Crime is terribly revealing. Try and vary your methods as you will, your tastes, your habits, your attitude of mind, and your soul is revealed by your actions.\",\"Some people say I have attitude - maybe I do... but I think you have to. You have to believe in yourself when no one else does - that makes you a winner right there.\",\"The minute you try to talk business with him he takes the attitude that he is a gentleman and a scholar, and the moment you try to approach him on the level of his moral integrity he starts to talk business.\",\"Stiletto, I look at it more as an attitude as opposed to a high-heeled shoe.\",\"If somebody says no to you, or if you get cut, Michael Jordan was cut his first year, but he came back and he was the best ever. That is what you have to have. The attitude that I'm going to show everybody, I'm going to work hard to get better and better.\",\"When you have vision it affects your attitude. Your attitude is optimistic rather than pessimistic.\",\"What matters to me is that I do what I think is right and I see, I'm a numbers guy, that's my attitude. I know we have a debt tsunami coming, we are bankrupting this country and I'm in a position where I can actually advance ideas to prevent that from happening. That's exactly what I should be doing.\",\"I developed a nutty attitude where I'd think, If some guy really loves me he doesn't care if I'm fat. I'd come up with all these stupid reasons why it would be OK to be fat.\",\"Really you just gotta keep chugging along and keep a positive attitude and get through all the problems. You gotta face them, otherwise you don't get through.\",\"Solidarity is an attitude of resistance, I suppose, or it should be.\",\"There's always the motivation of wanting to win. Everybody has that. But a champion needs, in his attitude, a motivation above and beyond winning.\",\"Americans are the most generous country on the planet. I've worked in Europe, I've worked in Australia. There is no where else where you get absolutely no attitude for being a foreigner. If you do your job well, they embrace you.\",\"When I go to the clinic next and sit with a tube in my arm and watch the poison go in, I'm in an attitude of abject passivity. It doesn't feel like fighting at all it just feels like submitting.\",\"Our judgments judge us, and nothing reveals us, exposes our weaknesses, more ingeniously than the attitude of pronouncing upon our fellows.\",\"Pessimism only describes an attitude, and not facts, and hence is entirely subjective.\",\"I was kicked out of school because of my attitude. I was not assimilating. So I went to work, taking any jobs I could get.\",\"A lot of times I find that people who are blessed with the most talent don't ever develop that attitude, and the ones who aren't blessed in that way are the most competitive and have the biggest heart.\",\"So long as you've got your friends about you, and a good positive attitude, you don't really have to care what everyone else thinks.\",\"I separated from the Southern Baptists when they adopted the discriminatory attitude towards women, because I believe what Paul taught in Galatians that there is no distinction in God's eyes between men and women, slaves and masters, Jews and non-Jews - everybody is created equally in the eyes of God.\",\"My attitude toward men who mess around is simple: If you find 'em, kill 'em.\",\"Prayer is talking with God. God knows your heart and is not so concerned with your words as He is with the attitude of your heart.\",\"You can't study comedy it's within you. It's a personality. My humor is an attitude.\",\"You call to a dog and a dog will break its neck to get to you. Dogs just want to please. Call to a cat and its attitude is, 'What's in it for me?'\",\"The compulsion to do good is an innate American trait. Only North Americans seem to believe that they always should, may, and actually can choose somebody with whom to share their blessings. Ultimately this attitude leads to bombing people into the acceptance of gifts.\",\"I keep guitars that are, you know, the neck's a little bit bent and it's a little bit out of tune. I want to work and battle it and conquer it and make it express whatever attitude I have at that moment. I want it to be a struggle.\",\"Most of my arguments with musicians through the years have had more to do with their attitude about music, or their attitude about their own lives, or their personal responsibility. Music has never really been the big centerpiece of the fight.\",\"I love everybody. One of the great things about me is that I have a very positive attitude.\",\"Mankind's true moral test, its fundamental test (which lies deeply buried from view), consists of its attitude towards those who are at its mercy: animals. And in this respect mankind has suffered a fundamental debacle, a debacle so fundamental that all others stem from it.\",\"It's sort of a mental attitude about critical thinking and curiosity. It's about mindset of looking at the world in a playful and curious and creative way.\",\"Punk was defined by an attitude rather than a musical style.\",\"It's a fundamental, social attitude that the 1% supports symphonies and operas and doesn't support Johnny learning to program hip-hop beats. When I put it like that, it sounds like, 'Well, yeah,' but you start to think, 'Why not, though?' What makes one more valuable than another?\",\"I think people feel threatened by homosexuality. The problem isn't about gay people, the problem is about the attitude towards gay people. People think that all gays are Hannibal Lecters. But gay people are sons and daughters, politicians and doctors, American heroes and daughters of American heroes.\",\"I have this theory that, depending on your attitude, your life doesn't have to become this ridiculous charade that it seems so many people end up living.\",\"It was just like a dream. I could have ended up with an album that's not all that different from anything else coming out of Nashville. Mutt made the difference. He took these songs, my attitude, my creativity, and colored them in a way that is unique.\",\"I look at Jagger and the like and if I see a good attitude I'll admire it but I wouldn't copy their style.\",\"My attitude is never to be satisfied, never enough, never.\",\"Today's youth are told to get rich or die trying and they really shouldn't take that attitude forward with them.\",\"The purely agitational attitude is not good enough for a detailed consideration of a subject.\",\"Not every religion has to have St. Augustine's attitude to sex. Why even in our culture marriages are celebrated in a church, everyone present knows what is going to happen that night, but that doesn't prevent it being a religious ceremony.\",\"Never refuse an assignment except when there is a conflict of interest, a potential of danger to you or your family, or you hold a strongly biased attitude about the subject under focus.\",\"We can revolutionize the attitude of inner city brown and black kids to learning. We need a civil rights movement within the African-American community.\",\"It's a question of keeping one's eyes and ears open and watching how other people play the game. They're watching me too, to see what my attitude is like.\",\"Yes, we're still five little people with a noisy attitude.\",\"In individual industries where female labour pays an important role, any movement advocating better wages, shorter working hours, etc., would not be doomed from the start because of the attitude of those women workers who are not organized.\",\"On 'Van Halen,' I was a young punk, and everything revolved around the fastest kid in town, gunslinger attitude. But I'd say that at the time of 'Fair Warning,' I started concentrating more on songwriting. But I guess in most people's minds I'm just a gunslinger.\",\"Design is about point of view, and there should be some sort of woman or lifestyle or attitude in one's head as a designer.\",\"Liberalism is an attitude rather than a set of dogmas - an attitude that insists upon questioning all plausible and self-evident propositions, seeking not to reject them but to find out what evidence there is to support them rather than their possible alternatives.\",\"The Dolls were an attitude. If nothing else they were a great attitude.\",\"I was impressed by Hendrix. His attitude was brilliant. Even the way he walked was amazing.\",\"The best way to inspire people to superior performance is to convince them by everything you do and by your everyday attitude that you are wholeheartedly supporting them.\",\"I think it's your mental attitude. So many of us start dreading age in high school and that's a waste of a lovely life. 'Oh... I'm 30, oh, I'm 40, oh, 50.' Make the most of it.\",\"The attitude that nature is chaotic and that the artist puts order into it is a very absurd point of view, I think. All that we can hope for is to put some order into ourselves.\",\"Britishness is just a way of putting things together and a certain don't care attitude about clothes. You don't care, you just do it and it looks great.\",\"It remains to consider what attitude thoughtful men and Christian believers should take respecting them, and how they stand related to beliefs of another order.\",\"Surfers have the most attitude.\",\"I've never run into a guy who could win at the top level in anything today and didn't have the right attitude, didn't give it everything he had, at least while he was doing it wasn't prepared and didn't have the whole program worked out.\",\"That's what I love from metal, and that's what I love from hip-hop. That's what I love from any music that's hard, that's got an edge to it-The attitude in it.\",\"That attitude that fighting is probably not fair, but you have to defend yourself anyway and damage the enemy, has been profoundly consequential as far as my political activism goes.\",\"Seek out that particular mental attribute which makes you feel most deeply and vitally alive, along with which comes the inner voice which says, 'This is the real me,' and when you have found that attitude, follow it.\",\"People think, 'She's a model. She must have such an attitude. She must be so stuck up.' But I'm normal. I cry. I'm not rich. I drive a 1987 Chevrolet Celebrity.\",\"My grandfather was a man, when he talked about freedom, his attitude was really interesting. His view was that you had obligations or you had responsibilities, and when you fulfilled those obligations or responsibilities, that then gave you the liberty to do other things.\",\"I think failure is nothing more than life's way of nudging you that you are off course. My attitude to failure is not attached to outcome, but in not trying. It is liberating. Most people attach failure to something not working out or how people perceive you. This way, it is about answering to yourself.\",\"Part of our western outlook stems from the scientific attitude and its method of isolating the parts of a phenomenon in order to analyze them.\",\"There is a single thread of attitude, a single direction of flow, that joins our present time to its early burgeoning in Mediterranean civilization.\",\"We live in a country that used to have a can-do attitude, and now we have a 'what-can-you-do-for-me?' attitude, and what I try to do is find ways that we can develop common ground.\",\"Could we change our attitude, we should not only see life differently, but life itself would come to be different.\",\"The ideal attitude is to be physically loose and mentally tight.\",\"An attitude to life which seeks fulfillment in the single-minded pursuit of wealth - in short, materialism - does not fit into this world, because it contains within itself no limiting principle, while the environment in which it is placed is strictly limited.\",\"You may not be able to change a situation, but with humor you can change your attitude about it.\",\"What was past was past. I suppose that was the general attitude.\",\"Iraq is just a symbol of the attitude of western democracies to the rest of the world.\",\"I don't mean this in a stuck-up way, but I needed an attitude song.\",\"I met my grandfather just before he died, and it was the first time that I had seen Dad with a relative of his. It was interesting to see my own father as a son and the body language and alteration in attitude that comes with that, and it sort of changed our relationship for the better.\",\"I don't think it's a good attitude in your life to feel that you have to be rich to have self-esteem.\",\"All we need, really, is a change from a near frigid to a tropical attitude of mind.\",\"An aristocratic culture does not advertise its emotions. In its forms of expression it is sober and reserved. Its general attitude is stoic.\",\"I was impressed by Hendrix. Not so much by his playing, as his attitude - he wasn't a great player, but everything else about him was brilliant.\",\"Attitude is attitude, whether you're a West Coast gangster or East Coast gangster, you know?\",\"You know, I always say white is not a colour, white is an attitude, and if you haven't got trillions of dollars in the bank that you don't need, you can't be white.\",\"Being a part of SKECHERS is exciting. It is such a hip company with a great attitude and image.\",\"It is precisely the purpose of the public opinion generated by the press to make the public incapable of judging, to insinuate into it the attitude of someone irresponsible, uninformed.\",\"Coaches will eventually notice a great attitude, and they respect that.\",\"The novelist teaches the reader to comprehend the world as a question. There is wisdom and tolerance in that attitude. In a world built on sacrosanct certainties the novel is dead.\",\"No one's going to be able to operate without a grounding in the basic sciences. Language would be helpful, although English is becoming increasingly international. And travel. You have to have a global attitude.\",\"My second husband believed I had such a fickle attitude to friendship that each Friday he would update the list of my 'Top Ten' friends in the manner of a Top Of The Pops chart countdown.\",\"If you can kill animals, the same attitude can kill human beings. The mentality is the same which exploits nature and which creates wars.\",\"My attitude is, do as much as I can while I'm free. And if I'm arrested I'll still do as much as I can.\",\"There are a lot of movies I'd like to throw away. That's not to say that I went in with that attitude. Any film I ever started, I went in with all the hope and best intentions in the world, but some films just don't work.\",\"By making a comeback, I'm changing the attitude of people toward me. If I'd known that people would react so enthusiastically, I'd have done it years ago.\",\"Today, I think the attitude is that governing is not necessarily good politics, and the result is that it's much more partisan and much more divided.\",\"That term's definitely got a negative aura to it, because people think a diva is somebody with an attitude who demands things all the time. Of course there is that type of diva, but my idea of a diva has always been a singer - whether male or female - who gets on that stage and captivates you with their presence and their voice.\",\"Oh, I don't think Tom Sowell would tell anybody to join the administration. That's not his style. But I think his attitude has always been if it had to be done he'd prefer me to do it than somebody else.\",\"The Senator from Massachusetts has given us ample grounds to doubt the judgment and the attitude he brings to bear on vital issues of national security.\",\"I perfectly understood President Obama's attitude throughout the French presidential campaign. He had no reason to distance himself from Nicolas Sarkozy. It's the basic solidarity that leaders who worked together owe to each other.\",\"I think it has something to do with being British. We don't take ourselves as seriously as some other countries do. I think a lot of people take themselves far too seriously I find that a very tedious attitude.\",\"I failed the LSAT. Basically, if I had not failed, I'd have been a lawyer and there would be no Spanx. I think failure is nothing more than life's way of nudging you that you are off course. My attitude to failure is not attached to outcome, but in not trying. It is liberating.\",\"My attitude to writing is like when you do wallpapering, you remember where all the little bits are that don't meet. And then your friends say: It's terrific!\",\"Liberalism is a really old British tradition and it has a completely different attitude towards the individual and the relationship between the individual and the state than the collectivist response of Labour, and particularly Old Labour, does.\",\"I've always had a 'Work hard, play hard' attitude to life - I still do - but sometimes you get involved in something that needs a calm, methodical approach.\",\"I've always considered myself to be fiercely patriotic. I love Britain - its history and the down-to-earth attitude people have.\",\"There is a brief moment when all there is in a man's mind and soul and spirit is reflected through his eyes, his hands, his attitude. This is the moment to record.\",\"I was fortunate to play for Pete Rose and have teammates like Ken Griffey Sr., Tony Perez and Dave Concepcion. I grew up in the game with a mature attitude. I've always known it was better to be seen and not heard.\",\"I've never been out with any of the cast of Coronation Street. We're all very close friends so it's very much a professional attitude.\",\"Nothing. We're all friends and friendly. So when the cameras go down, depending on the mood or the nature of the material we're dealing with, there's usually a kind of a prevailing light attitude that's floating around.\",\"I will keep smiling, be positive and never give up! I will give 100 percent each time I play. These are always my goals and my attitude.\",\"I'm taking a bit of a wait-and-see attitude towards 3D.\",\"My father instilled in me the attitude of prevailing. If there's a challenge, go for it. If there's a wall to break down, break it down.\",\"Just as the left has to be more willing to question 'Government knows best,' the right has to rethink its laissez-faire attitude toward government.\",\"The attitude of insolent haughtiness is characteristic of the relationships Americans form with what is alien to them, with others.\",\"Although as a sailor I despised politics - for I loved my sailor's life and still love it today - conditions forced me to take up a definite attitude towards political problems.\",\"How do you nurture a positive attitude when all the statistics say you're a dead man? You go to work.\",\"The pilot looked at his cues of attitude and speed and orientation and so on and responded as he would from the same cues in an airplane, but there was no way it flew the same. The simulators had showed us that.\",\"It was my father who instilled the 'never say no' attitude I carry around with me today, and who instilled in me a sense of wonder, always taking us on adventures in the car, never telling us the destination.\",\"I went to England in the '70s, and I was in my early 20s. There was still a residue of that era of being an underclass or colonial. I assume it must have been a more aggressive and prominent attitude 40 years before that, because Australia internationally wasn't regarded as having much cultural value. We were a country full of sheep and convicts.\",\"For a writer only one form of patriotism exists: his attitude toward language.\",\"Gardening is not trivial. If you believe that it is, closely examine why you feel that way. You may discover that this attitude has been forced upon you by mass media and the crass culture it creates and maintains. The fact is, gardening is just the opposite - it is, or should be, a central, basic expression of human life.\",\"Becoming an author changes your attitude too. Once you see where books come from, and how they're made, they never seem quite as sacred again.\",\"I was bringing my attitude as a regular person 'cause this is my attitude.\",\"If you can attribute your success entirely to your own mental effort, to your own attitude, to some spiritual essence that you have that is better than other people's, then that must feel pretty good.\",\"I fell in love with Erica Kane the summer before my freshman year of high school. Like all red-blooded teen American boys, I'd come home from water polo practice and eat a box of Entenmann's Pop'Ems donut holes in front of the TV while obsessively fawning over 'All My Children' and Erica, her clothes, and her narcissistic attitude.\",\"Films for TV have to be much closer to the book, mainly because the objective with a TV movie that translates literature is to get the audience, after seeing this version, to pick up the book and read it themselves. My attitude is that TV can never really be any form of art, because it serves audience expectations.\",\"You can't beat the beehive for glam punkette attitude.\",\"I haven't seen Clones, which has been during this period when I haven't seen much of anything, but I did see Phantom Menace, and see my feelings about it - see, first of all, I think that when you make a lot of movies, your attitude about the movies changes.\",\"My attitude is always one of sensuality, aggressive enthusiasm and a kind of outrageousness in my expression.\",\"Epic poetry exhibits life in some great symbolic attitude. It cannot strictly be said to symbolize life itself, but always some manner of life.\",\"When you retire, it's a place in life, a part of the journey. You just don't quit work you develop an attitude where you can do what you please.\",\"When a parent shows up with an attitude of entitlement, understand that under it is a boatload of anxiety.\",\"What reader wants to be told what attitude to strike?\",\"My denial and irresponsible attitude about asthma put me at great risk and caused me so much needless suffering. My hope is that the kids I talk to learn to open up about their asthma, become educated about their condition, and seek help.\",\"Woman must have her freedom, the fundamental freedom of choosing whether or not she will be a mother and how many children she will have. Regardless of what man's attitude may be, that problem is hers - and before it can be his, it is hers alone.\",\"Even as a little child, I've always had that comedian kind of attitude.\",\"I mean, the shoe - there is a music to it, there is attitude, there is sound, it's a movement. Clothes - it's a different story. There are a million things I'd rather do before designing clothes: directing, landscaping.\",\"In just the same way the thousands of successive positions of a runner are contracted into one sole symbolic attitude, which our eye perceives, which art reproduces, and which becomes for everyone the image of a man who runs.\",\"In the late '70s, maybe just before I started, there was still an attitude that if you did film you didn't do TV and vice versa, but that's gone now.\",\"I cannot say that the attitude of the United Nations always is for the Israeli attitude. Israel, I think, has been under severe attacks by members of the United Nations many times.\",\"I love her attitude, but as much as I'd like to bring my medals to a speech or appearance, I never do.\",\"We must advertise to U.S. business that we are there, that our attitude has changed, and that we care. When we are asked to help, we have to perform and provide the right advice.\",\"The American attitude towards efficiency and execution should always underlie architecture.\",\"I have such an extreme attitude about work, where I can just completely be derelict of my responsibilities and then when I am not derelict, I am completely indulged in it. I swing pretty wildly from the two extremes.\",\"I have a political attitude, but I'm certainly not a politician.\",\"I think my attitude to human beings has changed since leaving prison.\",\"I went to the Performing Arts School and studied classical ballet. That attitude is something that's put into your head. You are never thin enough.\",\"I have always detested any departure from reality, an attitude which I relate to my mother's poor mental health.\",\"With just about every player in Australia, his whole goal and ambition is to play for Australia. That's why they're playing first class cricket. It's just a different attitude.\",\"Right after 'Raymond' I had a world-is-my-oyster attitude, but I found out I don't like oysters. I had this existential emptiness. 'What is my purpose? Who am I?' I had a big identity crisis.\",\"What sculptors do is represent the essence of gesture. What is important in mime is attitude.\",\"It really was hand-to-mouth and you can say, 'Poor little me, how dreadful, what a deprived childhood', but I didn't feel that way at all. It's all about the attitude at home.\",\"Having a clear faith, based on the creed of the church is often labeled today as fundamentalism. Whereas relativism, which is letting oneself be tossed and swept along by every wind of teaching, look like the only attitude acceptable to today's standards.\",\"You know what's funny to me? Attitude.\",\"The characteristic political attitude of today is not one of positive belief, but of despair.\",\"If you can't change your fate, change your attitude.\",\"Mainly what I learned from Buddy... was an attitude. He loved music, and he taught me that it shouldn't have any barriers to it.\",\"I think fun is an important part of the entertainment industry, and it should be. Anybody who's not incorporating some of that into their work needs to take a break, go away, and have an attitude adjustment.\",\"I have played on many teams throughout my career, and I know when a team has the tools, and the right positive attitude towards winning.\",\"Vampires are so old that they don't need to impress anyone anymore. They're comfortable in their own skin. It's this enigmatic strength that's very romantic and old-fashioned. I think it goes back to something of a Victorian attitude of finding a strong man who's going to look after his woman.\",\"What I wish I had, is that I wish I was a little more Greek, in that I wish I could lose my North American driven attitude and that I could be a little bit more poetic and laissez faire.\",\"I was always the guy getting kicked out of my classes at school for having an attitude problem.\",\"And I tell you, having girls has made me a much better man. I have friends who are fathers, but they only have boys, and they have the same attitude toward women they always had, you know? And I don't play that... My girls, you mess with them? I will bury you underground.\",\"Style is a reflection of your attitude and your personality.\",\"If a person can be said to have the wrong attitude, there is no need to pay attention to his arguments.\",\"The attitude is we live and let live. This is actually an amazing change in values in a rather short time and it's an example of freedom from religion.\",\"Not to discriminate every moment some passionate attitude in those about us, and in the very brilliancy of their gifts some tragic dividing on their ways, is, on this short day of frost and sun, to sleep before evening.\",\"Players should know that if you can't make the contribution of the winning shot, that your attitude every day when you come to practice, or the positive contribution you make through cheering and keeping up team morale, is just as important in the overall picture.\",\"It's not the style that motivates me, as much as an attitude of openness that I have when I go into a project.\",\"The place of chess in the society is closely related to the attitude of young people towards our game.\",\"We assume that we've come so far as compassionate citizens of the world if we do choose to read the news, yet the attitude towards life can be one where we put blinders on and forget that there are civil wars going on. It's easy to forget that there are so many people starving to death every single day.\",\"The jokes are great but what really matters for a comedian is his performance, his whole attitude, and the laughs that he gets between the jokes rather than on top of the jokes.\",\"There were a few teachers who just did not like me because of my face. Once, I was told to stand in the corner until I cheered up. The attitude was, 'Oh, for God's sake, what's the matter with him?' But it's just a natural expression.\",\"I'm just part of a tradition of people who aren't pleased. I would never think anyone else who has the same attitude was getting it from me. I'd just think they're... sensible.\",\"The key to life is your attitude. Whether you're single or married or have kids or don't have kids, it's how you look at your life, what you make of it. It's about making the best of your life wherever you are in life.\",\"If you get a diagnosis, get on a therapy, keep a good attitude and keep your sense of humor.\",\"When a woman puts on a heel, she has a different posture, a different attitude. She really stands up and has a consciousness of her body.\",\"Whenever I'm having a bad day and have an attitude, I stay home. I keep it at home.\",\"You don't have to have an attitude if you're famous.\",\"I need that aggressive attitude to play my music and more men have that attitude than women.\",\"But Jesus changes your attitude towards yourself and towards other people.\",\"But I think bands that rolled in with a big attitude, like they were some big deal, I just found that very strange.\",\"What irritates me is the bland way people go around saying, 'Oh, our attitude has changed. We don't dislike these people any more.' But by the strangest coincidence, they haven't taken away the injustice the laws are still on the books.\",\"There is definitely something sexy about a girl with an attitude and a pair of leather pants.\",\"The phenomenon of home schooling is a wonderful example of the American can-do attitude. Growing numbers of parents have become disenchanted with government-run public schools. Many parents have simply taken matters into their own hands, literally.\",\"Regardless of what one's attitude towards prohibition may be, temperance is something against which, at a time of war, no reasonable protest can be made.\",\"At home in Ireland, there's a habit of avoidance, an ironical attitude towards the authority figure.\",\"Even if people do wrong, we're social animals, so what can we do about stopping them doing the same things in future? Saying people are 'bad' or 'evil' is just an unwillingness to engage an unwillingness to try to empathise. That sanctimonious attitude doesn't help anyone.\",\"People have often asked if I'm gay because I don't go out of my way to spit and scratch and give people attitude.\",\"I don't return anybody's calls unless it's going to mean extra money for me. And I've completely cut off all relationships with any friends that I had before the show. And I've copped an attitude.\",\"A positive attitude is something everyone can work on, and everyone can learn how to employ it.\",\"My feelings about my mortality are less selfish than they used to be. I used to affect a cavalier attitude to death now I see it from my son's perspective.\",\"The U.S. tries to provide immigrants who grow up here with a world-class education and imbue them with the can-do attitude that has long defined American innovation.\",\"The attitude of independence toward a constructed language which all national speakers must adopt is really a great advantage, because it tends to make man see himself as the master of language instead of its obedient servant.\",\"I feel like I have as good a shot as anybody out there and I have gotten close in the past, so why not have the attitude that I can come out and play great tennis and maybe even win this tournament.\",\"Art is the child of Nature yes, her darling child, in whom we trace the features of the mother's face, her aspect and her attitude.\",\"I just think that people take me a little more seriously as a brunette. I don't know if that's just because of a societal preconceived notion that all blondes are stupid, but it's a different kind of attitude.\",\"I came back to performing with a different attitude about performing and myself. I wasn't expecting perfection any more, just hoping for an occasional inspiration.\",\"The purely agitation attitude is not good enough for a detailed consideration of a subject.\",\"Animals have a much better attitude to life and death than we do. They know when their time has come. We are the ones that suffer when they pass, but it's a healing kind of grief that enables us to deal with other griefs that are not so easy to grab hold of.\",\"Only one thing can conquer war - that attitude of mind which can see nothing in war but destruction and annihilation.\",\"It's not too good to have this attitude in F1. It could be a disadvantage.\",\"I just really think every job I do, I get this gypsy attitude to money.\",\"My personal view is that such total planning by the state is an absolute good and not simply a relative good... I do not myself think of the attitude I take as deriving from Marx - though this undoubtedly will be suggested - but from Fichte and Hegel.\",\"There's a punk-rock attitude, clearly, to 'Hated.' There's even a punk-rock attitude to 'The Hangover,' I think. We start the movie with a Glenn Danzig song.\",\"The American attitude is 'We're the best'. That's why the NBA guys who come from other countries, the Europeans, all sort of stick together away from the game.\",\"The problem was just a mean attitude that festers and has to be challenged.\",\"I'm not anti-fashion, but I've always had a bit of a punk attitude. That's important, I think. I do my own thing.\",\"To so enter into it in nature and art that the enjoyed meanings of life may become a part of living is the attitude of aesthetic appreciation.\",\"The traditional Christian attitude toward human personality was that human nature was essentially good and that it was formed and modified by social pressures and training.\",\"My parents have a strong work ethic, but their attitude to life, their philosophy, is: 'whatever makes you happy.'\",\"Bob Altman had this relaxed but serious attitude. Everybody loved him. I wanted him to adopt me.\",\"The pool is terrible, but that doesn't have much to do with my record swims. That's all mental attitude.\",\"Fame can be just so annoying because people are so critical of you. You can't just say, 'hi'. You say hi and people whisper' man did you see the way she said hi? What an attitude.\",\"My dad instilled in me a great sense of humor. I wasn't bullied at school because my outward attitude was confident, and that helps.\",\"The attitude and capacity of the factory, the old metal table and the new ideas of the wooden furniture quickly and naturally suggested the possibility of metal furniture.\",\"You can measure a programmer's perspective by noting his attitude on the continuing vitality of FORTRAN.\",\"Let us change our traditional attitude to the construction of programs. Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.\",\"It goes without saying that the Jewish people can have no other goal than Palestine and that, whatever the fate of the proposition may be, our attitude toward the land of our fathers is and shall remain unchangeable.\",\"That attitude toward women as objects may have worked for the late Sixties, but it doesn't do so now.\",\"The time I spent thinking about how I was better than somebody else or worrying about somebody else's attitude was time I could put to better use.\",\"I really believe you can predict when someone has a great attitude, a real well of talent.\",\"It is impossible to exaggerate the wide, and widening, gulf between the American attitude on the Iraq war and the view from our friends across the Atlantic.\",\"As a team, you need to come from behind every once in awhile just to do it. Good for the attitude. It makes it exciting. And when everybody knows you have to throw it... that makes it fun too.\",\"I hope 'The Voice' has a fifteen-year run, don't get me wrong. But I come from nothing, and maybe it's the Irish in me, but my attitude is always like, 'They'll figure me out soon.'\",\"Time plays a role in almost every decision. And some decisions define your attitude about time.\",\"'UFO's' attitude toward the subject is very similar to mine. It's not an advocacy its philosophy is more 'I want to believe this, but I want it proved.'\",\"The music is first and foremost everything - no egos, no attitude, nothing - it's about the music.\",\"But having said that, there's also a sea change in attitude towards media.\",\"In the West, you have always associated the Islamic faith 100 percent with Arab culture. This in itself is a fundamentalist attitude and it is mistaken.\",\"Jazz in itself is not struggling. That is, the music itself is not struggling... It's the attitude that's in trouble. My plays insist that we should not forget or toss away our history.\",\"As the time goes by, you change, your learn new things, your attitude is different. For the moment, I'm still enjoying ski racing so much that it would be difficult for me to think about ending my career.\",\"My attitude on skis is different now. I have learned to put less pressure on myself and on the edges of my skis when I'm racing, to be keep myself more under control.\",\"Our attitude is that we want to cross over. You can't go on making records just for your own hometown.\",\"I do not share the half-in, half-out attitude to the EU of some in Britain. Britain's place is in Europe.\",\"I think that the U.S. does have this very much more open attitude, and I admire it very much and I think it's very important to the world. But the information and the discussion sometimes come too late, after the effective decision has been made.\",\"The Stones are a different kind of group. I realized that when I joined them. It's not really so much their musical ability, it's just they have a certain kind of style and attitude which is unique.\",\"Even with, or perhaps, because of, this background, I have over the past few years sensed a very dramatic change in attitude on the part of Prince Edward Islanders towards the on-going rush for so-called modernization.\",\"If you're looking for can-do, earthy-crunchy attitude then you've got to go to Wisconsin.\",\"When I was in my 20s it did occur to me that there was something perverted about an attitude that thought that killing somebody was a minor offence compared to kissing somebody.\",\"You can have a laugh in Los Angeles, or you can weep in Los Angeles, depending on your attitude towards it.\",\"People are patronizing the theatres with renewed enthusiasm - there is an entire picnic-like attitude when families go out to see movies, which is a very good sign. They want to see larger-than-life characters on the big screen and not just watch movies on television or on DVDs.\",\"I just want to go in with the right attitude and from Day 1 make a difference.\",\"The theatre only knows what it's doing next week, not like the opera, where they say: What are we going to do in five years' time? A completely different attitude.\",\"I'm not a music lover in the sense that I look for something to have on. I've never had that attitude to music.\",\"I think one of the things that language poets are very involved with is getting away from conventional ideas of beauty, because those ideas contain a certain attitude toward women, certain attitudes toward sex, certain attitudes toward race, etc.\",\"When you Google me, you'll find a lot of people don't like Richard Dreyfuss. Because I'm cocky and I present a cocky attitude. But no one has ever disagreed with the notion I represent, that we need more civic education. So far there's 100 percent support for that.\",\"My mother, she had a very good attitude toward money. I'm very grateful for the fact that we had to learn to save. I used to get like 50 pence a week, and I'd save it for like five months. And then I'd spend it on Christmas presents. I'd save up like eight pounds. It's nothing, but we did that.\",\"Too many people say to their brokers, I can't deal with this. Take my money. Do what you want. That's the worst attitude you can have.\",\"If philosophy is practice, a demand to know the manner in which its history is to be studied is entailed: a theoretical attitude toward it becomes real only in the living appropriation of its contents from the texts.\",\"I am shocked by the easy attitude of many in the media towards disclosing our Nation's secrets.\",\"I always give Lindsay so much credit for her tennis game, for her attitude, for her person, and because of how she deals with all the things. I don't think people give her enough credit for how well she's doing.\",\"I don't know that I have any role models now that are fixed. Definitely my mom - she's the coolest. She's worked really hard her whole life and I just think she's got a great attitude. Moms just know so much it's so silly.\",\"It's tricky. I've never been standing at the top of the tree with tons of money thrown at me. I've never really had a profile. So in a way I have this 'nothing to lose' attitude.\",\"Lead singers not only do the majority of the work, but their personalities are singled out and taken as the general attitude of the unit.\",\"It's better for me to play with guys because Rock 'n' Roll has such an aggressive attitude.\",\"I think Nina Simone has had an amazing journey. She was spicy and she had attitude and she didn't care, she wanted her money in a paper bag and don't mess with me and I've been doing some research on that so.\",\"I kind of resent this attitude of men that we somehow must always look good.\",\"Bambi can't act. Bambi had major attitude.\",\"I'm a big fan of Courtney Love. I love Hole and I love her acting and I love her attitude. I just hope I never meet her in a dark alley.\",\"I do support a sex-positive attitude for young people. Use condoms, that's important. I love the idea that promiscuity can be healthy but it's got some dodgy crevasses. Ooh, that's a bad reference! But it's got some dangerous cavities there. You know what I'm saying.\",\"The war changed everybody's attitude. We became international almost overnight.\",\"As I wrote, I found that Aibileen had some things to say that really weren't in her character. She was older, soft-spoken, and she started showing some attitude.\",\"I like England more than I did when I left. It's become a bit of a better country in the last ten years, in the attitude of it. A bit more Americanized, which is both good and bad. At least when you order a cup of coffee they don't give you a hard time.\",\"What a stupid attitude we have in this country to personal stories.\",\"I have a Woody Allen Jewish attitude to life: that it's all going to be disastrous. That it hasn't all been that way is simply down to some random quirk of fate.\",\"My attitude toward graduate students was different, I must say. I used graduate students as colleagues: I gave them the best problems to work on, and I encouraged them.\",\"Tommie Aaron taught me how to have a good attitude, to be easy going and not get uptight.\",\"In aid, the proper attitude is one omitting gratitude.\",\"In Scotland over many years we have cultivated through our justice system what I hope can be described as a 'culture of compassion.' On the other hand, there still exists in many parts of the U.S., if not nationally, an attitude towards the concept of justice which can only be described as a 'culture of vengeance.'\",\"Any time I need to get a serious attitude adjustment, I put on one of their records, and there are examples there for all time to keep us honest and keep us reaching they'll never be eclipsed.\",\"I always had the attitude that I wanted to throw a no-hitter every game.\",\"I like actors that are good with pantomime and that can transmit a lot by their presence and attitude more than through their dialogue.\",\"Having a child makes you strong and gives you chutzpah. It relaxed my attitude to the job my center of focus shifted, which I think is very helpful, because even if you're not a very indulgent actor you spend a lot of time thinking about yourself. I don't think that is particularly healthy.\",\"I always said punk was an attitude. It was never about having a Mohican haircut or wearing a ripped T-shirt. It was all about destruction, and the creative potential within that.\",\"Sid Vicious began the age of participation in which everyone could be the artist. Sid proved that you don't have to play well to be the star. You can play badly, or not even at all. I endorsed that attitude. If you can't write songs, no problem - simply steal one and change it to your taste.\",\"Abhorrence of apartheid is a moral attitude, not a policy.\",\"Every baseball crowd, like every theatre audience, has its own distinctive attitude and atmosphere.\",\"Football is my profession now. I'm getting married in August... It's a new experience for me as someone just getting out of college. I still have the same attitude about football I always had. I play hard. I enjoy practice. I'd rather be throwing in passing drills than sitting around and watching TV.\",\"The attitude we have towards our personal pets as opposed to the animals that suffer under the factory farm is hypocritical and delusional.\",\"Certain kinds of speed, flow, intensity, density of attacks, density of interaction... Music that concentrates on those qualities is, I think, easier achieved by free improvisation between people sharing a common attitude, a common language.\",\"I saw 'Taxi Driver,' and 'Taxi Driver' kind of saved my life. The scene where Robert De Niro is looking at himself in the mirror saying, 'You talkin' to me? You talkin' to me? Who the hell else are you talkin' to?' That's the scene that changed my life by changing my attitude about acting.\",\"I've always been a guy who's pretty supportive, its just my nature, so I came in to the situation with the attitude that I wanted to support Johnny and make it work.\",\"I thought I was going to be killed. The casualties were so heavy, it was just a given. I learned to take each day, each mission, as it came. That's an attitude I've carried into my professional life. I take each case, each job, as it comes.\",\"What has happened is that to some degree they have taken an attitude where they don't listen to demos of diverse subject matters. They're looking for demos like the record the guy on the left just did.\",\"Here you do have forests, where pigs could be raised by letting them root about in the forests for a good part of the year. Therefore, you have a different attitude toward them compared with what continues to exist in the Middle East.\",\"The attitude of physiological psychology to sensations and feelings, considered as psychical elements, is, naturally, the attitude of psychology at large.\",\"This generation... they have a different attitude. Instead of sitting and watching something, they want to be a part of it - they're very hedonistic and sensual.\",\"We have become aware of the responsibility for our attitude towards the dark pages in our history. We have understood that bad service is done to the nation by those who are impelling to renounce that past.\",\"But I do think that we approach music, in of itself, with a religious attitude.\",\"I think that generally music should be a positive thing, I like Bob Marley's attitude: he said that his goal in life was to single handedly fight all the evil in the world with nothing but music, and when he went to a place he didn't go to play, he went to conquer.\",\"In 1977, at least, he wished to have people believe that he shared and was proud of an attitude toward women that is not acceptable in a politician. In 2003, all he has said is that he doesn't remember the interview.\",\"You'd like more people to recognise what you do is special. But I take the attitude that the best thing I can do for my sport is to be the best at it. The best way people will come to recognise that track and field is a great sport is to see athletes excelling at it. Which is what I intend to do.\",\"So at a time in which the media give the public everything it wants and desires, maybe art should adopt a much more aggressive attitude towards the public. I myself am very much inclined to take this position.\",\"Modern Orthodoxy has a highly positive attitude toward the State of Israel. Our Ultra-Orthodox brethren recognize only the Holy Land, but not the state.\",\"I just try to try to keep an attitude that I don't know what I'm doing. Not to the point where I'm beating myself up, but I just go in thinking that I have a lot to learn. And I hope I still have that attitude 30 years from now.\",\"I'm not going to take this defeatist attitude and listen to all this crap any more from all these people who have nothing except doomsday to predict.\",\"A series of rumors about my attitude, as well as derogatory remarks about myself and my family showed me that the personal resentment of the Detroit general manager toward me would make it impossible for me to continue playing hockey in Detroit.\",\"Before 'Gangnam Style' I was not a good attitude artist.\",\"Women didn't want to be on the stage with other women because they didn't want their bodies to be compared. They didn't want another female act opening for them because of this weird competitive and tokenistic attitude.\",\"Listen, whatever makes the movie better. That's the attitude you have to have.\",\"Reason is an action of the mind knowledge is a possession of the mind but faith is an attitude of the person. It means you are prepared to stake yourself on something being so.\",\"Hardboiled crime fiction came of age in 'Black Mask' magazine during the Twenties and Thirties. Writers like Dashiell Hammett and Raymond Chandler learnt their craft and developed a distinct literary style and attitude toward the modern world.\",\"I don't think people are fools, and I think they deserve a good attitude and smart entertainment.\",\"Hollywood's a very weird place. I think there's less of everything except for attitude.\",\"My agent says that I'm a 'repeat business guy.' If you hire me to come do a movie, I'll be on time, know all my material, be ready to go, have a good attitude. I'm here to work, so I get hired over and over again by the same producers. If you just be a team player on set you can work so much more often.\",\"What do you mean by faith? Is faith enough for Man? Should he be satisfied with faith alone? Is there no way of finding out the truth? Is the attitude of faith, of believing in something for which there can be no more than philosophic proof, the true mark of a Christian?\",\"I still have a young attitude.\",\"Elvis Costello had a brand new bag. He was a musician, but he knew all about the attitude part of it.\",\"The world is full of musicians who can play great, and you wouldn't cross the road to see them. It's people who have this indefinable attitude that are the good ones.\",\"After working for years in Hollywood where the actors have taken over, it was a real relief to get down there and not only have some children, but also have some actors that had no attitude.\",\"When you are facing the wilderness on your own, you have a totally different attitude to someone who works in government or who has a monthly cheque.\",\"If you take the contempt some Americans have for yuppies and multiply it by 10 you might come close to understanding their attitude towards the City, as they call it - London, the people of the south.\",\"If you go on stage with the wrong attitude, or something in your performance is off, you can lose an audience in the first minute. That first minute is crucial.\",\"We can do better in higher education. And it is more than just technology. It's also an attitude on the part of faculty. We need to think through how we can produce a better quality product at less cost.\",\"In terms of work I've always had a Bad Attitude in that I won't work anywhere which requires me to work strict hours or follow a dress code. I don't know if that's an Asperger's thing or not, I think it's just being reasonable.\"];function oo(e){return n(io,e)}var no=[\"Satin\",\"Giant Angora\",\"Tan\",\"Havana\",\"Harlequin\",\"Rhinelander\",\"Cinnamon\",\"American\",\"Florida White\",\"Checkered Giant\",\"English Lop\",\"Polish\",\"English Angora\",\"Belgian Hare\",\"Standard Chinchilla\",\"Giant Chinchilla\",\"English Spot\",\"Dutch\"];function ro(e){return n(no,e)}function so(e){const a=e?.days??1;if(a<1)throw new Error(\"days must be positive, use soon() instead\");const t=24*a*60*60*1e3,i=new Date,o=new Date(i.getTime()-t);return n((()=>Q({from:o,to:i})),e)}var lo=[{width:\"1024\",height:\"768\"},{width:\"2048\",height:\"1536\"},{width:\"1280\",height:\"800\"},{width:\"1920\",height:\"1080\"},{width:\"2560\",height:\"1440\"},{width:\"3840\",height:\"2160\"},{width:\"320\",height:\"480\"},{width:\"750\",height:\"1334\"},{width:\"1080\",height:\"1920\"},{width:\"1280\",height:\"720\"},{width:\"1920\",height:\"1080\"},{width:\"3840\",height:\"2160\"},{width:\"2732\",height:\"2048\"},{width:\"2160\",height:\"1620\"},{width:\"2560\",height:\"1600\"},{width:\"3440\",height:\"1440\"},{width:\"5120\",height:\"2880\"},{width:\"3840\",height:\"1600\"},{width:\"2560\",height:\"1080\"},{width:\"4096\",height:\"2160\"},{width:\"3840\",height:\"1080\"},{width:\"2960\",height:\"1440\"},{width:\"3120\",height:\"1440\"},{width:\"2560\",height:\"1312\"},{width:\"3840\",height:\"1200\"},{width:\"3840\",height:\"2160\"},{width:\"7680\",height:\"4320\"},{width:\"5120\",height:\"2160\"}];function uo(e){return n(lo,e)}function co(e){return n((()=>{const[a,t,i,o]=[s({min:0,max:255}),s({min:0,max:255}),s({min:0,max:255}),Ra({min:.1,max:1})];return e?.alpha?`rgba(${a}, ${t}, ${i}, ${o})`:`rgb(${a}, ${t}, ${i})`}),e)}var ho=[\"Admin\",\"Editor\",\"Owner\",\"Contributor\",\"Viewer\",\"Developer\"];function mo(e){return n(ho,e)}function po(e){return n((()=>k({min:1e7,max:99999999})),e)}function yo(e){return n((()=>{const a=Array.from({length:3},(()=>k({min:0,max:20}))).join(\".\");return`${e?.prefix||\"\"}${a}`}),e)}var go=[\"Triangle\",\"Circle\",\"Square\",\"Rectangle\",\"Parallelogram\",\"Rhombus\",\"Trapezium\",\"Kite\",\"Polygons\",\"Sphere\",\"Cube\",\"Cuboid\",\"Cone\",\"Cylinder\"];function fo(e){return n(go,e)}var bo=[\"Accounting or bookkeeping\",\"Active listening\",\"Adaptability\",\"Analytical and problem solving\",\"Attention to detail\",\"Brand development\",\"Collaboration\",\"Communication\",\"Creativity\",\"Critical thinking\",\"Customer service\",\"Data analysis\",\"Data mining\",\"Data privacy\",\"Decision making\",\"Dependability\",\"Diplomacy\",\"Empathy\",\"Enterprise resource planning\",\"Human resources\",\"Leadership\",\"Microsoft office proficiency\",\"Multilingualism\",\"Multitasking\",\"Negotiation\",\"Organization\",\"Patience\",\"Positivity\",\"Problem solving\",\"Process automation\",\"Product design\",\"Project management\",\"Research skills\",\"Search engine optimization\",\"Self-motivation\",\"Social skills\",\"Software proficiency\",\"Storytelling\",\"Teamwork\",\"Time management\",\"Troubleshooting\",\"Typing skills\",\"Verbal and presentation\",\"Work ethic\",\"Writing and editing\"];function wo(e){return n(bo,e)}function vo(e){return n((()=>ha({length:s({min:3,max:10})}).join(\"-\")),e)}var ko=[\"Bluntnose viper\",\"Yunnan keelback\",\"Eastern hognose snake\",\"Southwestern black spitting cobra\",\"Machete savane\",\"Angolan python\",\"Huttons tree viper\",\"Eastern tiger snake\",\"Central ranges taipan\",\"Schultzes pitviper\",\"Mexican west coast rattlesnake\",\"Indigo snake\",\"Dog-toothed cat snake\",\"Bismarck ringed python\",\"Boomslang\",\"Mangshan pitviper\",\"Whip snake\",\"Mountain adder\"];function So(e){return n(ko,e)}var Co=[{name:\"Triller\",link:\"https://www.triller.co/\"},{name:\"Periscope\",link:\"https://www.periscope.tv/\"},{name:\"Vimeo\",link:\"https://vimeo.com/\"},{name:\"Valence\",link:\"https://valence.community/\"},{name:\"Untappd\",link:\"https://untappd.com/\"},{name:\"Elpha\",link:\"https://elpha.com/\"},{name:\"Yubo\",link:\"https://yubo.live/\"},{name:\"Peanut\",link:\"https://www.peanut-app.io/\"},{name:\"Houseparty\",link:\"https://houseparty.com/\"},{name:\"Caffeine\",link:\"https://www.caffeine.tv/\"},{name:\"Steemit\",link:\"https://steemit.com/\"},{name:\"Baidu Tieba\",link:\"https://tieba.baidu.com/\"},{name:\"23snaps\",link:\"https://www.23snaps.com/\"},{name:\"Likee\",link:\"https://likee.video/\"},{name:\"8tracks\",link:\"https://8tracks.com/\"},{name:\"Academia\",link:\"https://www.academia.edu/\"},{name:\"Amikumu\",link:\"https://amikumu.com/\"},{name:\"aNobii\",link:\"https://www.anobii.com/\"},{name:\"ASMALLWORLD\",link:\"https://www.asmallworld.com/\"},{name:\"Athlinks\",link:\"https://www.athlinks.com/\"},{name:\"BAND\",link:\"https://band.us/en\"},{name:\"beBee\",link:\"https://www.bebee.com/us/\"},{name:\"blind\",link:\"https://www.teamblind.com/\"},{name:\"diaspora*\",link:\"https://diasporafoundation.org/\"},{name:\"Fark\",link:\"https://www.fark.com/\"},{name:\"MeWe\",link:\"https://mewe.com/\"},{name:\"Facebook\",link:\"https://www.facebook.com/\"},{name:\"Instagram\",link:\"https://www.instagram.com/\"},{name:\"Twitter\",link:\"https://twitter.com/\"},{name:\"Tumblr\",link:\"https://www.tumblr.com/\"},{name:\"LinkedIn\",link:\"https://www.linkedin.com/\"},{name:\"WhatsApp\",link:\"https://www.whatsapp.com/\"},{name:\"Snapchat\",link:\"https://www.snapchat.com/\"},{name:\"Pinterest\",link:\"https://www.pinterest.com/\"},{name:\"Reddit\",link:\"https://www.reddit.com/\"},{name:\"YouTube\",link:\"https://www.youtube.com/\"},{name:\"Mix\",link:\"https://mix.com/\"},{name:\"Tagged\",link:\"https://www.tagged.com/\"},{name:\"Nextdoor\",link:\"https://nextdoor.com/\"},{name:\"DeviantArt\",link:\"https://www.deviantart.com/\"},{name:\"Quora\",link:\"https://www.quora.com/\"},{name:\"Meetup\",link:\"https://www.meetup.com/\"},{name:\"ReverbNation\",link:\"https://www.reverbnation.com/\"},{name:\"Flixster\",link:\"https://www.flixster.com/\"},{name:\"Goodreads\",link:\"https://www.goodreads.com/\"},{name:\"Twitch\",link:\"https://www.twitch.tv/\"},{name:\"CaringBridge\",link:\"https://www.caringbridge.org/\"},{name:\"Wattpad\",link:\"https://www.wattpad.com/\"},{name:\"Viadeo\",link:\"http://www.viadeo.com/\"},{name:\"Crunchyroll\",link:\"https://www.crunchyroll.com/\"},{name:\"Skyrock\",link:\"https://www.skyrock.com/\"},{name:\"VK\",link:\"https://vk.com/\"},{name:\"MyHeritage\",link:\"https://www.myheritage.com/\"},{name:\"LiveJournal\",link:\"https://www.livejournal.com/\"},{name:\"Classmates\",link:\"https://www.classmates.com/\"},{name:\"SoundCloud\",link:\"https://soundcloud.com/\"},{name:\"Bubbly\",link:\"http://bubbly.net/\"},{name:\"Flickr\",link:\"https://www.flickr.com/\"},{name:\"We Heart It\",link:\"https://weheartit.com/\"},{name:\"Influenster\",link:\"https://www.influenster.com/\"},{name:\"FilmAffinity\",link:\"https://www.filmaffinity.com/en/main.html\"},{name:\"Open Diary\",link:\"https://www.opendiary.com/\"},{name:\"Yelp\",link:\"https://www.yelp.com/\"},{name:\"CollegeHumor\",link:\"http://www.collegehumor.com/\"},{name:\"Gaia Online\",link:\"https://www.gaiaonline.com/\"},{name:\"MocoSpace\",link:\"https://www.mocospace.com/\"},{name:\"CouchSurfing\",link:\"https://www.couchsurfing.com/\"},{name:\"Funny or Die\",link:\"https://www.funnyordie.com/\"},{name:\"italki\",link:\"https://www.italki.com/home\"},{name:\"eToro\",link:\"https://www.etoro.com/\"},{name:\"XING\",link:\"https://www.xing.com/en\"},{name:\"MeetMe\",link:\"https://www.meetme.com/\"},{name:\"Ravelry\",link:\"https://www.ravelry.com/account/login\"},{name:\"Care2\",link:\"https://www.care2.com/\"},{name:\"YY\",link:\"http://www.yy.com/\"},{name:\"Vero\",link:\"https://www.vero.co/\"},{name:\"Medium\",link:\"https://medium.com/\"},{name:\"GIPHY\",link:\"https://giphy.com/\"},{name:\"Tribe\",link:\"https://tribe.so/\"},{name:\"Tencent QQ\",link:\"https://www.qq.com/\"},{name:\"WeChat\",link:\"https://www.wechat.com/en\"},{name:\"Qzone\",link:\"https://qzone.qq.com/\"},{name:\"TikTok\",link:\"https://www.tiktok.com/trending?lang=en\"},{name:\"Sina Weibo\",link:\"https://www.weibo.com/overseas\"},{name:\"Kuaishou\",link:\"https://www.kuaishou.com/\"},{name:\"Skype\",link:\"https://www.skype.com/en/\"},{name:\"Viber\",link:\"https://www.viber.com/en/\"},{name:\"LINE\",link:\"https://line.me/en/\"},{name:\"LINE PLAY\",link:\"http://lp.play.line.me/en.html\"},{name:\"The Dots\",link:\"https://the-dots.com/\"},{name:\"Telegram\",link:\"https://telegram.org/\"},{name:\"Foursquare Swarm\",link:\"https://www.swarmapp.com/\"},{name:\"Douban\",link:\"https://www.douban.com/\"},{name:\"Discord\",link:\"https://discord.com/\"},{name:\"Badoo\",link:\"https://badoo.com/\"},{name:\"Myspace\",link:\"https://myspace.com/\"},{name:\"Mixi\",link:\"https://mixi.jp/\"},{name:\"Ravelry\",link:\"https://www.ravelry.com/account/login\"},{name:\"Cellufun\",link:\"http://www.cellufun.com/games.asp?v=59bfuWxNv00\"},{name:\"Xanga\",link:\"http://xanga.com/\"},{name:\"Imgur\",link:\"https://imgur.com/\"},{name:\"Ello\",link:\"https://ello.co/\"}];function Ao(e){return n(Co,e)}function Mo(e){const a=e?.days??1;if(a<1)throw new Error(\"days must be positive, use recent() instead\");const t=24*a*60*60*1e3,i=new Date,o=new Date(i.getTime()+t);return n((()=>Q({from:i,to:o})),e)}var To={olympic:[\"Archery\",\"Artistic Gymnastics\",\"Artistic Swimming\",\"Athletics\",\"Badminton\",\"Baseball Softball\",\"Basketball\",\"Beach Volleyball\",\"BMX Freestyle\",\"BMX Racing\",\"Boxing\",\"Kayak Flatwater\",\"Kayak Slalom\",\"Diving\",\"Equestrian\",\"Fencing\",\"Football\",\"Golf\",\"Handball\",\"Hockey\",\"Judo\",\"Karate\",\"Marathon Swimming\",\"Modern Pentathlon\",\"Mountain Bike\",\"Rhythmic Gymnastics\",\"Road Cycling\",\"Rowing\",\"Rugby\",\"Sailing\",\"Shooting\",\"Skateboarding\",\"Sport Climbing\",\"Surfing\",\"Swimming\",\"Table Tennis\",\"Taekwondo\",\"Tennis\",\"Track Cycling\",\"Trampoline\",\"Triathlon\",\"Volleyball\",\"Water Polo\",\"Weightlifting\",\"Wrestling\"],winterOlympic:[\"Alpine Skiing\",\"Biathlon\",\"Bobsleigh\",\"Cross-Country Skiing\",\"Curling\",\"Figure Skating\",\"Freestyle Skiing\",\"Ice Hockey\",\"Luge\",\"Nordic Combined\",\"Short Track Speed Skating\",\"Skeleton\",\"Ski Jumping\",\"Snowboard\",\"Speed Skating\"],outdoor:[\"Archery\",\"Athletics\",\"Badminton\",\"Baseball\",\"Basketball\",\"Bowling\",\"Boxing\",\"Camping\",\"Canoeing\",\"Climbing\",\"Cricket\",\"Curling\",\"Cycling\",\"Equestrian\",\"Fencing\",\"Football\",\"Golf\",\"Gymnastics\",\"Handball\",\"Hang Gliding\",\"High Jumping\",\"Hockey\",\"Ice Hockey\",\"Judo\",\"Karate\",\"Kite Flying\",\"Monkey Bars\",\"Motorsports\",\"Netball\",\"Rowing\",\"Rugby\",\"Running\",\"Sailing\",\"Skateboarding\",\"Slide\",\"Snow Skiing\",\"Soccer\",\"Street Hockey\",\"Surfing\",\"Swimming\",\"Table Tennis\",\"Tennis\",\"Trekking\",\"Triathlon\",\"Volleyball\",\"Weightlifting\",\"Wrestling\"]};function Bo(e){const a=e?.category??wa([\"olympic\",\"outdoor\",\"winterOlympic\"]);return n((()=>r(To[a])),e)}function Io(e){return n((()=>r([A,V,j,Ja,ft])()),e)}var Po=[\"Oklahoma\",\"South Dakota\",\"Massachusetts\",\"Minnesota\",\"Rhode Island\",\"Florida\",\"Delaware\",\"Utah\",\"Maryland\",\"Pennsylvania\",\"West Virginia\",\"Nevada\",\"New York\",\"Alabama\",\"Arizona\",\"Wyoming\",\"Washington\",\"Nebraska\",\"Mississippi\",\"Missouri\",\"Arkansas\",\"Vermont\",\"North Dakota\",\"Iowa\",\"Georgia\",\"Kentucky\",\"Wisconsin\",\"New Hampshire\",\"Hawaii\",\"Idaho\",\"Michigan\",\"Ohio\",\"Colorado\",\"Kansas\",\"Maine\",\"Alaska\",\"Indiana\",\"South Carolina\",\"Oregon\",\"Illinois\",\"Tennessee\",\"California\",\"Virginia\",\"Texas\",\"Montana\",\"New Jersey\",\"North Carolina\"];function xo(e){return n(Po,e)}var Do=[\"OR\",\"FL\",\"NM\",\"AK\",\"MO\",\"NE\",\"RI\",\"MI\",\"PA\",\"WI\",\"AL\",\"MA\",\"MN\",\"TN\",\"ND\",\"MS\",\"AR\",\"HI\",\"UT\",\"ID\",\"SC\",\"CA\",\"NJ\",\"CT\",\"OK\",\"AZ\",\"IA\",\"SD\",\"MT\",\"MD\",\"WY\",\"KS\",\"WV\",\"CO\",\"TX\",\"VT\",\"NV\",\"DE\",\"ME\",\"GA\",\"LA\",\"IN\",\"VA\"];function Go(e){return n(Do,e)}var Fo=[{status:\"Pending\",type:[\"Project\",\"User Story\"]},{status:\"Todo\",type:[\"User Story\",\"Task\"]},{status:\"In progress\",type:[\"Task\"]},{status:\"In Discussion\",type:[\"User Story\"]},{status:\"In Development\",type:[\"User Story\",\"Task\"]},{status:\"Needs Confirmation\",type:[\"User Story\"]},{status:\"Completed\",type:[\"User Story\",\"Task\",\"Project\"]},{status:\"Upcoming\",type:[\"Project\"]},{status:\"Overdue\",type:[\"Project\"]},{status:\"Not started\",type:[\"Project\"]},{status:\"Active\",type:[\"Project\"]},{status:\"Priority\",type:[\"Project\"]},{status:\"Canceled\",type:[\"Project\"]},{status:\"Closed\",type:[\"Project\",\"Task\"]},{status:\"New\",type:[\"Project\",\"Task\",\"User Story\"]},{status:\"On hold\",type:[\"Project\"]}];function qo(e){return n((e?.type?Fo.filter((a=>a.type.includes(e.type))):Fo).map((({status:e})=>e)).flat(),e)}var Lo=[\"Basic\",\"Premium\",\"Free\",\"Gold\",\"Unlimited\",\"Starter\",\"Business\",\"Professional\",\"Advanced\",\"Silver\",\"Bronze\",\"Standard\",\"Pro\",\"Enterprise\",\"Platinum\"];function Ro(e){return n(Lo,e)}var Eo=[{realName:\"Peter Parker\",alterEgo:\"Spider-man\",company:\"Marvel\"},{realName:\"Matt Murdock\",alterEgo:\"Daredevil\",company:\"Marvel\"},{realName:\"T'Challa\",alterEgo:\"Black Panther\",company:\"Marvel\"},{realName:\"Steve Rogers\",alterEgo:\"Captain America\",company:\"Marvel\"},{realName:\"Thor Odinson\",alterEgo:\"Thor\",company:\"Marvel\"},{realName:\"Remy Etienne LeBeau\",alterEgo:\"Gambit\",company:\"Marvel\"},{realName:'James \"Logan\" Howlett',alterEgo:\"Wolverine\",company:\"Marvel\"},{realName:\"Frank Castle\",alterEgo:\"Punisher\",company:\"Marvel\"},{realName:\"Dr. Stephen Strange\",alterEgo:\"Doctor Strange\",company:\"Marvel\"},{realName:\"Tony Stark\",alterEgo:\"Iron Man\",company:\"Marvel\"},{realName:\"Wade Wilson\",alterEgo:\"Deadpool\",company:\"Marvel\"},{realName:\"Steven Grant\",alterEgo:\"Moon Knight\",company:\"Marvel\"},{realName:\"Frog Thor\",alterEgo:\"Frog Thor\",company:\"Marvel\"},{realName:\"Doug Ramsey\",alterEgo:\"Cypher\",company:\"Marvel\"},{realName:\"Natasha Alianovna Romanova\",alterEgo:\"Black Widow\",company:\"Marvel\"},{realName:\"Ms. Marvel\",alterEgo:\"Carol Danvers\",company:\"Marvel\"},{realName:\"Shadowcat\",alterEgo:\"Kitty Pryde\",company:\"Marvel\"},{realName:\"Susan Storm\",alterEgo:\"Invisible Woman\",company:\"Marvel\"},{realName:\"Elektra Natchios\",alterEgo:\"Elektra\",company:\"Marvel\"},{realName:\"Janet Van Dyne\",alterEgo:\"Wasp\",company:\"Marvel\"},{realName:\"Clarice Ferguson\",alterEgo:\"Blink\",company:\"Marvel\"},{realName:\"Ororo Munroe\",alterEgo:\"Storm\",company:\"Marvel\"},{realName:\"Wanda Maximoff\",alterEgo:\"Scarlet Witch\",company:\"Marvel\"},{realName:\"Anna Marie LeBeau\",alterEgo:\"Rogue\",company:\"Marvel\"},{realName:\"Jennifer Walter\",alterEgo:\"She-Hulk\",company:\"Marvel\"},{realName:\"Silvija Sablinova\",alterEgo:\"Silver Sable\",company:\"Marvel\"},{realName:\"Gamora Zen Whoberi Ben Titan\",alterEgo:\"Gamora\",company:\"Marvel\"},{realName:\"Jessica Drew\",alterEgo:\"X-23\",company:\"Marvel\"},{realName:\"Bruce Wayne\",alterEgo:\"Batman\",company:\"DC\"},{realName:\"Clark Kent\",alterEgo:\"Superman\",company:\"DC\"},{realName:\"Hal Jordan\",alterEgo:\"Green Lantern\",company:\"DC\"},{realName:\"Barry Allen\",alterEgo:\"The Flash\",company:\"DC\"},{realName:\"J'onn J'onzz\",alterEgo:\"Martian Manhunter\",company:\"DC\"},{realName:\"Arthur Curry\",alterEgo:\"Aquaman\",company:\"DC\"},{realName:\"Oliver Queen\",alterEgo:\"Green Arrow\",company:\"DC\"},{realName:\"Ryan Choi\",alterEgo:\"The Atom\",company:\"DC\"},{realName:\"Carter Hall\",alterEgo:\"Hawkman\",company:\"DC\"},{realName:\"Nathaniel Adam\",alterEgo:\"Captain Atom\",company:\"DC\"},{realName:\"Jefferson Michael Pierce\",alterEgo:\"Black Lightning\",company:\"DC\"},{realName:\"Diana Prince\",alterEgo:\"Wonder Woman\",company:\"DC\"},{realName:\"Chay-Ara\",alterEgo:\"Hawkgirl\",company:\"DC\"},{realName:\"Tora Olafsdotter\",alterEgo:\"Ice\",company:\"DC\"},{realName:\"Kara Zor-El\",alterEgo:\"Supergirl\",company:\"DC\"},{realName:\"Jennifer-Lynn Hayden\",alterEgo:\"Jade\",company:\"DC\"},{realName:\"Kara Zor-L\",alterEgo:\"Power Girl\",company:\"DC\"},{realName:\"Dawn Granger\",alterEgo:\"Hawk\",company:\"DC\"},{realName:\"Dinah Lance\",alterEgo:\"Black Canary\",company:\"DC\"},{realName:\"Helena Bertinelli\",alterEgo:\"Huntress\",company:\"DC\"},{realName:\"Barbara Gordon\",alterEgo:\"Batgirl\",company:\"DC\"},{realName:\"Zinda Blake\",alterEgo:\"Lady Blackhawk\",company:\"DC\"}];function Ho(e){const a=e?.company?Eo.filter((({company:a})=>a===e.company)):Eo;return n((()=>({...r(a),id:Bi()})),e)}function Wo(e){const a=e?.company?Eo.filter((({company:a})=>a===e.company)):Eo;return n((()=>r(a).alterEgo),e)}var No=['<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><g><path d=\"M28,14H14c-1.1,0-2-0.9-2-2s0.9-2,2-2h1h13c0.6,0,1-0.4,1-1s-0.4-1-1-1H15h-1H7C5.9,8,5,7.1,5,6s0.9-2,2-2h14c0.6,0,1-0.4,1-1s-0.4-1-1-1H7C4.8,2,3,3.8,3,6v15c0,2.2,1.8,4,4,4h3v2c0,2.2,1.8,4,4,4h14c0.6,0,1-0.4,1-1V15C29,14.4,28.6,14,28,14z\"/><path d=\"M28,11H14c-0.6,0-1,0.4-1,1s0.4,1,1,1h14c0.6,0,1-0.4,1-1S28.6,11,28,11z\"/><path d=\"M21,5H7C6.4,5,6,5.4,6,6s0.4,1,1,1h14c0.6,0,1-0.4,1-1S21.6,5,21,5z\"/></g></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><g><path d=\"M31,25H10.5C8,25,6,23,6,20.5S8,16,10.5,16H31c0.6,0,1,0.4,1,1s-0.4,1-1,1H10.5C9.1,18,8,19.1,8,20.5S9.1,23,10.5,23H31 c0.6,0,1,0.4,1,1S31.6,25,31,25z\"/></g><g><path d=\"M30,25c-0.3,0-0.7-0.2-0.9-0.5c-1.4-2.5-1.4-5.5,0-8c0.3-0.5,0.9-0.6,1.4-0.4c0.5,0.3,0.6,0.9,0.4,1.4c-1.1,1.9-1.1,4.1,0,6c0.3,0.5,0.1,1.1-0.4,1.4C30.3,25,30.2,25,30,25z\"/></g><g><path d=\"M25,32H4.5C2,32,0,30,0,27.5S2,23,4.5,23H25c0.6,0,1,0.4,1,1s-0.4,1-1,1H4.5C3.1,25,2,26.1,2,27.5S3.1,30,4.5,30H25 c0.6,0,1,0.4,1,1S25.6,32,25,32z\"/></g><g><path d=\"M24,32c-0.3,0-0.7-0.2-0.9-0.5c-1.4-2.5-1.4-5.5,0-8c0.3-0.5,0.9-0.6,1.4-0.4c0.5,0.3,0.6,0.9,0.4,1.4c-1.1,1.9-1.1,4.1,0,6c0.3,0.5,0.1,1.1-0.4,1.4C24.3,32,24.2,32,24,32z\"/></g><g><path d=\"M16.9,5c-0.6,0-1-0.4-1-1c0-0.7-0.6-1.5-1.5-2l-0.2-0.1c-0.5-0.3-0.7-0.9-0.4-1.3c0.3-0.5,0.9-0.7,1.3-0.4l0.2,0.1c1.6,0.9,2.6,2.3,2.6,3.8C17.9,4.6,17.5,5,16.9,5z\"/></g><path d=\"M21.5,3.1L21.5,3.1c-1.2-0.2-2.4,0.1-3.4,0.7c-0.3,0.2-0.8,0.2-1.1,0c-0.3-0.2-0.7-0.4-1.1-0.5c0,0.2,0.1,0.5,0.1,0.7c0,0.6-0.4,1-1,1s-1-0.4-1-1c0-0.3-0.1-0.6-0.3-0.9c0,0-0.1,0-0.1,0c-2.9,0.5-4.9,3.5-4.5,6.7c0.3,2.3,1.9,5.8,3.9,7.3c0.7,0.5,1.4,0.8,2,0.8c0.1,0,0.3,0,0.4,0c0.5-0.1,0.9-0.3,1.3-0.6c0.4-0.3,1.1-0.3,1.5,0c0.4,0.3,0.9,0.5,1.3,0.6c0.8,0.1,1.6-0.1,2.5-0.7c2-1.5,3.6-5,3.9-7.3C26.3,6.6,24.3,3.5,21.5,3.1z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M14,24c0-5.5,4.5-10,10-10c1,0,2.1,0.2,3,0.5V9c0-0.6-0.4-1-1-1H11H9C7.9,8,7,7.1,7,6s0.9-2,2-2h17c0.6,0,1-0.4,1-1s-0.4-1-1-1H9C6.8,2,5,3.8,5,6v20c0,2.2,1.8,4,4,4h2h5C14.8,28.3,14,26.3,14,24z\"/><path d=\"M24,16c-4.4,0-8,3.6-8,8s3.6,8,8,8s8-3.6,8-8S28.4,16,24,16z M27,25h-6c-0.6,0-1-0.4-1-1s0.4-1,1-1h6c0.6,0,1,0.4,1,1S27.6,25,27,25z\"/><g><path d=\"M26,7H9C8.4,7,8,6.6,8,6s0.4-1,1-1h17c0.6,0,1,0.4,1,1S26.6,7,26,7z\"/></g></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M18.3,18.3c-3.1,3.1-3.1,8.2,0,11.3s8.2,3.1,11.3,0s3.1-8.2,0-11.3S21.5,15.2,18.3,18.3z M26.8,22.6L25.4,24l1.4,1.4c0.4,0.4,0.4,1,0,1.4c-0.4,0.4-1,0.4-1.4,0L24,25.4l-1.4,1.4c-0.4,0.4-1,0.4-1.4,0c-0.4-0.4-0.4-1,0-1.4l1.4-1.4l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0l1.4,1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0C27.2,21.6,27.2,22.2,26.8,22.6z\"/><path d=\"M14,24c0-5.5,4.5-10,10-10c1,0,2.1,0.2,3,0.5V9c0-0.6-0.4-1-1-1H11H9C7.9,8,7,7.1,7,6s0.9-2,2-2h17c0.6,0,1-0.4,1-1s-0.4-1-1-1H9C6.8,2,5,3.8,5,6v20c0,2.2,1.8,4,4,4h2h5C14.8,28.3,14,26.3,14,24z\"/><g><path d=\"M26,7H9C8.4,7,8,6.6,8,6s0.4-1,1-1h17c0.6,0,1,0.4,1,1S26.6,7,26,7z\"/></g></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><g><path d=\"M20,24c-2.8,0-5-2.2-5-5s2.2-5,5-5s5,2.2,5,5S22.8,24,20,24z\"/></g><path d=\"M29,5H3C2.4,5,2,5.4,2,6v20c0,0.6,0.4,1,1,1h11v-4.4c-0.6-1.1-1-2.3-1-3.6c0-3.9,3.1-7,7-7s7,3.1,7,7c0,1.3-0.4,2.5-1,3.6V27h3c0.6,0,1-0.4,1-1V6C30,5.4,29.6,5,29,5z M10,16H6c-0.6,0-1-0.4-1-1s0.4-1,1-1h4c0.6,0,1,0.4,1,1S10.6,16,10,16z M13,12H6c-0.6,0-1-0.4-1-1s0.4-1,1-1h7c0.6,0,1,0.4,1,1S13.6,12,13,12z\"/><path d=\"M20,26c-1.5,0-2.9-0.5-4-1.3V31c0,0.3,0.2,0.6,0.4,0.8c0.3,0.2,0.6,0.2,0.9,0.1l2.7-0.9l2.7,0.9c0.1,0,0.2,0.1,0.3,0.1c0.2,0,0.4-0.1,0.6-0.2c0.3-0.2,0.4-0.5,0.4-0.8v-6.3C22.9,25.5,21.5,26,20,26z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><g><path d=\"M26,7H9C8.4,7,8,6.6,8,6s0.4-1,1-1h17c0.6,0,1,0.4,1,1S26.6,7,26,7z\"/></g><path d=\"M26,8H11H9C7.9,8,7,7.1,7,6s0.9-2,2-2h17c0.6,0,1-0.4,1-1s-0.4-1-1-1H9C6.8,2,5,3.8,5,6v20c0,2.2,1.8,4,4,4h2h15c0.6,0,1-0.4,1-1V9C27,8.4,26.6,8,26,8z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M24,16c-4.4,0-8,3.6-8,8s3.6,8,8,8s8-3.6,8-8S28.4,16,24,16z M27,25h-2v2c0,0.6-0.4,1-1,1s-1-0.4-1-1v-2h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2h2c0.6,0,1,0.4,1,1S27.6,25,27,25z\"/><path d=\"M14,24c0-5.5,4.5-10,10-10c1,0,2.1,0.2,3,0.5V9c0-0.6-0.4-1-1-1H11H9C7.9,8,7,7.1,7,6s0.9-2,2-2h17c0.6,0,1-0.4,1-1s-0.4-1-1-1H9C6.8,2,5,3.8,5,6v20c0,2.2,1.8,4,4,4h2h5C14.8,28.3,14,26.3,14,24z\"/><g><path d=\"M26,7H9C8.4,7,8,6.6,8,6s0.4-1,1-1h17c0.6,0,1,0.4,1,1S26.6,7,26,7z\"/></g></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M14,24c0-5.5,4.5-10,10-10c1,0,2.1,0.2,3,0.5V9c0-0.6-0.4-1-1-1H11H9C7.9,8,7,7.1,7,6s0.9-2,2-2h17c0.6,0,1-0.4,1-1s-0.4-1-1-1H9C6.8,2,5,3.8,5,6v20c0,2.2,1.8,4,4,4h2h5C14.8,28.3,14,26.3,14,24z\"/><g><path d=\"M26,7H9C8.4,7,8,6.6,8,6s0.4-1,1-1h17c0.6,0,1,0.4,1,1S26.6,7,26,7z\"/></g><path d=\"M31.7,21.9c-0.1-0.5-0.7-0.8-1.2-0.7c-0.7,0.2-1.2,0-1.3-0.2c-0.1-0.2,0-0.7,0.5-1.3c0.4-0.4,0.4-1,0-1.4c-1-1-2.2-1.7-3.6-2.1c-0.5-0.1-1.1,0.2-1.2,0.7c-0.2,0.7-0.6,1-0.9,1s-0.6-0.4-0.9-1c-0.2-0.5-0.7-0.8-1.2-0.7c-1.4,0.4-2.6,1.1-3.6,2.1c-0.4,0.4-0.4,1,0,1.4c0.5,0.5,0.6,1,0.5,1.3c-0.1,0.2-0.6,0.4-1.3,0.2c-0.5-0.1-1.1,0.2-1.2,0.7C16.1,22.6,16,23.3,16,24s0.1,1.4,0.3,2.1c0.1,0.5,0.7,0.8,1.2,0.7c0.7-0.2,1.2,0,1.3,0.2c0.1,0.2,0,0.7-0.5,1.3c-0.4,0.4-0.4,1,0,1.4c1,1,2.2,1.7,3.6,2.1c0.5,0.1,1.1-0.2,1.2-0.7c0.2-0.7,0.6-1,0.9-1s0.6,0.4,0.9,1c0.1,0.4,0.5,0.7,1,0.7c0.1,0,0.2,0,0.3,0c1.4-0.4,2.6-1.1,3.6-2.1c0.4-0.4,0.4-1,0-1.4c-0.5-0.5-0.6-1-0.5-1.3c0.1-0.2,0.6-0.4,1.3-0.2c0.5,0.1,1.1-0.2,1.2-0.7c0.2-0.7,0.3-1.4,0.3-2.1S31.9,22.6,31.7,21.9z M24,27c-1.7,0-3-1.3-3-3s1.3-3,3-3s3,1.3,3,3S25.7,27,24,27z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><g><polygon points=\"7.1,23 8.9,23 8,21.2\"/><path d=\"M13,16H3c-1.1,0-2,0.9-2,2v10c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V18C15,16.9,14.1,16,13,16z M12.4,27.9C12.3,28,12.2,28,12,28c-0.4,0-0.7-0.2-0.9-0.6L9.9,25H6.1l-1.2,2.4c-0.2,0.5-0.8,0.7-1.3,0.4c-0.5-0.2-0.7-0.8-0.4-1.3l4-8c0.3-0.7,1.5-0.7,1.8,0l4,8C13.1,27,12.9,27.6,12.4,27.9z\"/></g><path d=\"M17,1H7C5.9,1,5,1.9,5,3v10c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V3C19,1.9,18.1,1,17,1z M12,11c0.9,0,1.7-0.4,2.2-1c0.4-0.4,1-0.5,1.4-0.1c0.4,0.4,0.5,1,0.1,1.4c-1,1.1-2.3,1.7-3.8,1.7c-2.8,0-5-2.2-5-5s2.2-5,5-5c1.4,0,2.8,0.6,3.8,1.7c0.4,0.4,0.3,1-0.1,1.4c-0.4,0.4-1,0.3-1.4-0.1c-0.6-0.7-1.4-1-2.2-1c-1.7,0-3,1.3-3,3S10.3,11,12,11z\"/><g><path d=\"M24,24h-3v2h3c0.6,0,1-0.4,1-1S24.6,24,24,24z\"/><path d=\"M25,21c0-0.6-0.4-1-1-1h-3v2h3C24.6,22,25,21.6,25,21z\"/><path d=\"M28,16H18c-1.1,0-2,0.9-2,2v10c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V18C30,16.9,29.1,16,28,16z M27,25c0,1.7-1.3,3-3,3h-4c-0.6,0-1-0.4-1-1v-4v-4c0-0.6,0.4-1,1-1h4c1.7,0,3,1.3,3,3c0,0.8-0.3,1.5-0.8,2C26.7,23.5,27,24.2,27,25z\"/></g></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M28.9,9.4C28.9,9.4,28.9,9.4,28.9,9.4C28.9,9.3,29,9.2,29,9.1c0,0,0,0,0-0.1c0,0,0,0,0-0.1c0-0.1,0-0.2,0-0.3c0,0,0,0,0-0.1c0-0.1-0.1-0.2-0.1-0.3c0,0,0,0,0,0c-0.1-0.1-0.1-0.1-0.2-0.2l-11-7c-0.3-0.2-0.8-0.2-1.1,0l-13,9c0,0-0.1,0.1-0.1,0.1c0,0,0,0-0.1,0c-0.1,0.1-0.1,0.2-0.2,0.3c0,0,0,0,0,0.1C3,10.8,3,10.9,3,11c0,0,0,0,0,0v6v6c0,0.3,0.2,0.7,0.5,0.8l11,7c0.2,0.1,0.4,0.2,0.5,0.2c0.2,0,0.4-0.1,0.6-0.2l13-9c0.2-0.2,0.4-0.4,0.4-0.7s-0.1-0.6-0.3-0.8c-0.9-0.9-1.1-2.2-0.5-3.4l0.7-1.5c0-0.1,0.1-0.2,0.1-0.3c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0-0.1,0-0.3-0.1-0.4c0,0,0-0.1,0-0.1c0-0.1-0.1-0.2-0.2-0.3c0,0,0,0,0,0c-0.9-0.9-1.1-2.2-0.5-3.4L28.9,9.4z M26.6,14.8l-11.6,8L5,16.5v-3.6l9.5,6c0.2,0.1,0.4,0.2,0.5,0.2c0.2,0,0.4-0.1,0.6-0.2l10.3-7.1C25.8,12.8,26,13.8,26.6,14.8z M15,28.8L5,22.5v-3.6l9.5,6c0.2,0.1,0.4,0.2,0.5,0.2c0.2,0,0.4-0.1,0.6-0.2l10.3-7.1c-0.1,1.1,0.1,2.2,0.7,3.1L15,28.8z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><g><path d=\"M16,21c-1.3,0-2.6-0.5-3.5-1.5C11.5,18.6,11,17.3,11,16s0.5-2.6,1.5-3.5c1.9-1.9,5.1-1.9,7.1,0c0.9,0.9,1.5,2.2,1.5,3.5s-0.5,2.6-1.5,3.5l0,0l0,0C18.6,20.5,17.3,21,16,21z\"/></g><path d=\"M11.1,20.9c-0.9-0.9-1.6-2.1-1.9-3.4c-2.7,2.4-5.6,4.7-8.6,6.8c-0.2,0.2-0.4,0.4-0.4,0.7c0,0.3,0.1,0.6,0.3,0.8l5.7,5.7c0.2,0.2,0.4,0.3,0.7,0.3c0,0,0.1,0,0.1,0c0.3,0,0.6-0.2,0.7-0.4c2.1-3,4.4-5.9,6.8-8.6C13.2,22.5,12,21.9,11.1,20.9z\"/><path d=\"M31.5,6.1l-5.7-5.7c-0.2-0.2-0.5-0.3-0.8-0.3c-0.3,0-0.6,0.2-0.7,0.4c-2.1,3-4.4,5.9-6.8,8.6c1.3,0.3,2.4,0.9,3.4,1.9c0.9,0.9,1.6,2.1,1.9,3.4c2.7-2.4,5.6-4.7,8.6-6.8c0.2-0.2,0.4-0.4,0.4-0.7C31.9,6.6,31.7,6.3,31.5,6.1z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M29,2H3C2.4,2,2,2.4,2,3v18c0,0.6,0.4,1,1,1h8.6l-2.6,7.7c-0.2,0.5,0.1,1.1,0.6,1.3c0.5,0.2,1.1-0.1,1.3-0.6l1.4-4.3h7.2l1.4,4.3c0.1,0.4,0.5,0.7,0.9,0.7c0.1,0,0.2,0,0.3-0.1c0.5-0.2,0.8-0.7,0.6-1.3L20.4,22H29c0.6,0,1-0.4,1-1V3C30,2.4,29.6,2,29,2zM18.9,24h-5.9l0.7-2h4.6L18.9,24z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M6,19v8c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3v-8H6z M21,24c0,1.7-1.3,3-3,3h-4c-1.7,0-3-1.3-3-3v-2c0-0.6,0.4-1,1-1h8c0.6,0,1,0.4,1,1V24z\"/><g><path d=\"M22,7.-3C26,11.1,24.4,8.5,22,7.1z\"/><path d=\"M10,7.1c-2.4,1.4-4,4-4,6.9v3h4V7.1z\"/></g><g><path d=\"M19,8h-6c-0.6,0-1-0.4-1-1V5c0-1.7,1.3-3,3-3h2c1.7,0,3,1.3,3,3v2C20,7.6,19.6,8,19,8z M14,6h4V5c0-0.6-0.4-1-1-1h-2c-0.6,0-1,0.4-1,1V6z\"/></g><path d=\"M18,6h-4c-0.7,0-1.4,0.1-2,0.3V7v1v9h8V8V7V6.3C19.4,6.1,18.7,6,18,6z\"/><g><path d=\"M4,18.2c-1.2,0.4-2,1.5-2,2.8v4c0,1.3,0.8,2.4,2,2.8V18.2z\"/></g><g><path d=\"M28,18.2v9.6c1.2-0.4,2-1.5,2-2.8v-4C30,19.7,29.2,18.6,28,18.2z\"/></g></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M27,3H11C9.3,3,8,4.8,8,7v14H7c-1.7,0-3,1.8-3,4s1.3,4,3,4h16c1.7,0,3-1.8,3-4V8h3c0.6,0,1-0.4,1-1C30,4.8,28.7,3,27,3zM12,10h6c0.6,0,1,0.4,1,1s-0.4,1-1,1h-6c-0.6,0-1-0.4-1-1S11.4,10,12,10z M12,13h3c0.6,0,1,0.4,1,1s-0.4,1-1,1h-3c-0.6,0-1-0.4-1-1S11.4,13,12,13z M20.4,27H7c-0.4,0-1-0.8-1-2s0.6-2,1-2h13.4c-0.3,0.6-0.4,1.3-0.4,2S20.2,26.4,20.4,27z M26.1,6c0.2-0.6,0.6-1,0.9-1s0.6,0.4,0.9,1H26.1z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M11,1H9C7.3,1,6,2.3,6,4v1h4c0.6,0,1,0.4,1,1s-0.4,1-1,1H6v3h3c0.6,0,1,0.4,1,1s-0.4,1-1,1H6v3h4c0.6,0,1,0.4,1,1s-0.4,1-1,1H6v3h3c0.6,0,1,0.4,1,1s-0.4,1-1,1H6v3h4c0.6,0,1,0.4,1,1s-0.4,1-1,1H6v1c0,1.7,1.3,3,3,3h2c1.7,0,3-1.3,3-3V4C14,2.3,12.7,1,11,1z\"/><g><path d=\"M26,6V4c0-1.7-1.3-3-3-3h-2c-1.7,0-3,1.3-3,3v2H26z\"/><path d=\"M18,8v18c0,0.2,0.1,0.4,0.2,0.6l3,4c0.2,0.3,0.5,0.4,0.8,0.4s0.6-0.1,0.8-0.4l3-4c0.1-0.2,0.2-0.4,0.2-0.6V8H18z\"/></g></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><g><path d=\"M23,28L23,28c-1.1,0-2.1-0.7-2.5-1.8c0-0.1,0-0.2-0.1-0.2h-8.9c0,0.1,0,0.2-0.1,0.2C11.1,27.3,10.1,28,9,28h0c-0.6,0-1,0.4-1,1s0.4,1,1,1h14c0.6,0,1-0.4,1-1S23.6,28,23,28z\"/><path d=\"M27,3H5C3.3,3,2,4.3,2,6v15c0,1.7,1.3,3,3,3h6.9h8.1H27c1.7,0,3-1.3,3-3V6C30,4.3,28.7,3,27,3z\"/></g><path class=\"st0\" d=\"M15,20V10c0-1.7-1.3-3-3-3H7C6.4,7,6,7.4,6,8v8c0,0.6,0.4,1,1,1h5C13.7,17,15,18.3,15,20L15,20\"/><path class=\"st0\" d=\"M17,20V10c0-1.7,1.3-3,3-3h5c0.6,0,1,0.4,1,1v8c0,0.6-0.4,1-1,1h-5C18.3,17,17,18.3,17,20L17,20\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M19,22V12c0-1.7-1.3-3-3-3h-5c-0.6,0-1,0.4-1,1v8c0,0.6,0.4,1,1,1h5C17.7,19,19,20.3,19,22L19,22\"/><path d=\"M20,22V12c0-1.7,1.3-3,3-3h5c0.6,0,1,0.4,1,1v8c0,0.6-0.4,1-1,1h-5C21.3,19,20,20.3,20,22L20,22\"/><path d=\"M16,22H6H4V8h2h10h2V5c0-1.7-1.3-3-3-3H5C3.3,2,2,3.3,2,5v22c0,1.7,1.3,3,3,3h10c1.7,0,3-1.3,3-3v-5H16z M11,27H9c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S11.6,27,11,27z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M19.1,11.1c-0.1-0.2-0.3-0.3-0.4-0.3c-0.9,0.2-1.7,0-2-0.5c-0.3-0.5-0.1-1.3,0.6-2c0.1-0.1,0.1-0.4,0-0.5c-0.9-0.9-2-1.6-3.3-1.9c-0.2-0.1-0.4,0.1-0.5,0.3C13.2,7,12.6,7.6,12,7.6S10.8,7,10.5,6.1c-0.1-0.2-0.3-0.3-0.5-0.3c-1.3,0.3-2.4,1-3.3,1.9c-0.1,0.1-0.1,0.4,0,0.5c0.6,0.7,0.9,1.5,0.6,2c-0.3,0.5-1.1,0.7-2,0.5c-0.2,0-0.4,0.1-0.4,0.3c-0.2,0.6-0.3,1.3-0.3,1.9s0.1,1.3,0.3,1.9c0.1,0.2,0.3,0.3,0.4,0.3c0.9-0.2,1.7,0,2,0.5c0.3,0.5,0.1,1.3-0.6,2c-0.1,0.1-0.1,0.4,0,0.5c0.9,0.9,2,1.6,3.3,1.9c0,0,0.1,0,0.1,0c0.2,0,0.3-0.1,0.4-0.3c0.3-0.9,0.8-1.5,1.5-1.5s1.2,0.6,1.5,1.5c0.1,0.2,0.3,0.3,0.5,0.3c1.3-0.3,2.4-1,3.3-1.9c0.1-0.1,0.1-0.4,0-0.5c-0.6-0.7-0.9-1.5-0.6-2c0.3-0.5,1.1-0.7,2-0.5c0.2,0,0.4-0.1,0.4-0.3c0.2-0.6,0.3-1.3,0.3-1.9S19.3,11.7,19.1,11.1z M12.9,13.4c-0.1,0.1-0.1,0.2-0.2,0.3C12.5,13.9,12.3,14,12,14c-0.1,0-0.3,0-0.4-0.1c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1-0.1-0.2-0.2-0.2-0.3c0-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3c0.4-0.4,1-0.4,1.4,0c0.1,0.1,0.2,0.2,0.2,0.3c0,0.1,0.1,0.3,0.1,0.4C13,13.1,13,13.3,12.9,13.4z\"/><path d=\"M28.9,17.6L26,11.8C25.9,6.4,21.4,2,16,2c-2.4,0-4.6,0.8-6.4,2.3C10.4,4.1,11.2,4,12,4c5,0,9,4,9,9c0,5-4,9-9,9c-1.1,0-2.1-0.2-3-0.5V27c0,0.5,0.3,0.9,0.8,1l10,2c0.1,0,0.1,0,0.2,0c0.2,0,0.5-0.1,0.6-0.2c0.2-0.2,0.4-0.5,0.4-0.8v-4h2c1.7,0,3-1.3,3-3v-3h2c0.3,0,0.7-0.2,0.9-0.5S29,17.9,28.9,17.6z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><g><path d=\"M6,7H0.9C0.4,7,0,7.4,0,7.9v9.1C0,17.6,0.4,18,0.9,18H6c1.7,0,3,1.3,3,3V10C9,8.3,7.7,7,6,7z\"/><path d=\"M18.1,7H13c-1.7,0-3,1.3-3,3v11c0-1.7,1.3-3,3-3h5.1c0.5,0,0.9-0.4,0.9-0.9V7.9C19,7.4,18.6,7,18.1,7z\"/></g><path d=\"M31.9,17.6L29,11.8C28.9,6.4,24.4,2,19,2c-2.8,0-5.4,1.2-7.3,3.2C12.1,5.1,12.5,5,13,5h5.1C19.7,5,21,6.3,21,7.9v9.1c0,1.6-1.3,2.9-2.9,2.9H13c-0.6,0-1,0.4-1,1v6c0,0.5,0.3,0.9,0.8,1l10,2c0.1,0,0.1,0,0.2,0c0.2,0,0.5-0.1,0.6-0.2c0.2-0.2,0.4-0.5,0.4-0.8v-4h2c1.7,0,3-1.3,3-3v-3h2c0.3,0,0.7-0.2,0.9-0.5S32,17.9,31.9,17.6z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M30.3,17.4c0-0.1,0-0.2,0-0.3l-3.6-9.7C26.2,6,25.1,5.2,23.7,5c-1.4-0.2-2.7,0.3-3.5,1.4c-0.3,0.4-0.2,1.1,0.2,1.4c0.4,0.3,1.1,0.2,1.4-0.2c0.4-0.5,1-0.8,1.6-0.7C24.1,7,24.6,7.4,24.8,8l2.4,6.6c-1-0.4-2.1-0.7-3.2-0.7c-3.1,0-5.8,1.8-6.7,4.2c-0.9-0.2-1.8-0.2-2.7,0C13.8,15.8,11.1,14,8,14c-1.2,0-2.3,0.2-3.2,0.7L7.2,8c0.2-0.6,0.7-1,1.4-1.1c0.6-0.1,1.2,0.2,1.6,0.7c0.3,0.4,1,0.5,1.4,0.2s0.5-1,0.2-1.4C11,5.3,9.7,4.8,8.3,5C6.9,5.2,5.8,6,5.3,7.3l-3.6,9.7c0,0.1,0,0.2,0,0.3C1.3,18.2,1,19.1,1,20c0,3.3,3.1,6,7,6c3.8,0,6.9-2.6,7-5.8c0.7-0.2,1.4-0.2,2,0c0.1,3.2,3.2,5.8,7,5.8c3.9,0,7-2.7,7-6C31,19.1,30.7,18.2,30.3,17.4z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M27,8V7c0-3.4-4.8-6-11-6S5,3.6,5,7v1c-1.7,0-3,1.3-3,3v3c0,0.6,0.4,1,1,1s1-0.4,1-1v-3c0-0.6,0.4-1,1-1v6.2c-1.2,0.4-2,1.5-2,2.8v6c0,0.6,0.4,1,1,1v1c0,1.7,1.3,3,3,3h1c1.7,0,3-1.3,3-3v-1h10v1c0,1.7,1.3,3,3,3h1c1.7,0,3-1.3,3-3v-1c0.6,0,1-0.4,1-1v-6c0-1.3-0.8-2.4-2-2.8V10c0.6,0,1,0.4,1,1v3c0,0.6,0.4,1,1,1s1-0.4,1-1v-3C30,9.3,28.7,8,27,8z M26,21c0,0.6-0.4,1-1,1h-1c-0.6,0-1-0.4-1-1s0.4-1,1-1h1C25.6,20,26,20.4,26,21z M25,16h-3h-3.6H17v-6h8V16z M21,5.8c0-0.1,0-0.1,0.1-0.2c0-0.1,0.1-0.1,0.1-0.2c0,0,0.1-0.1,0.1-0.1c0.4-0.4,1-0.4,1.4,0c0,0,0.1,0.1,0.1,0.1c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0,0.1,0.1,0.2c0,0.1,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4c-0.1,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.2,0.2-0.3,0.2S22.1,7,22,7c-0.1,0-0.3,0-0.4-0.1c-0.1,0-0.2-0.1-0.3-0.2C21.1,6.5,21,6.3,21,6C21,5.9,21,5.9,21,5.8z M13,5h6c0.6,0,1,0.4,1,1s-0.4,1-1,1h-6c-0.6,0-1-0.4-1-1S12.4,5,13,5z M9,5.8c0-0.1,0-0.1,0.1-0.2c0-0.1,0.1-0.1,0.1-0.2c0,0,0.1-0.1,0.1-0.1c0.4-0.4,1-0.4,1.4,0c0,0,0.1,0.1,0.1,0.1c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0,0.1,0.1,0.2c0,0.1,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4c-0.1,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.2,0.2-0.3,0.2S10.1,7,10,7C9.9,7,9.7,7,9.6,6.9c-0.1,0-0.2-0.1-0.3-0.2C9.1,6.5,9,6.3,9,6C9,5.9,9,5.9,9,5.8z M7,10h8v6h-1.4H10H7V10z M7,20h1c0.6,0,1,0.4,1,1s-0.4,1-1,1H7c-0.6,0-1-0.4-1-1S6.4,20,7,20z M19.3,24h-6.5c-0.7,0-1.3-0.7-1.1-1.4l0.9-3.6c0.1-0.6,0.5-0.9,1-0.9h4.9c0.4,0,0.8,0.4,1,1l0.9,3.6C20.5,23.3,20,24,19.3,24z\"/></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><g><path d=\"M16,6c-2.9,0-5-1.3-5-3s2.1-3,5-3s5,1.3,5,3S18.9,6,16,6z\"/></g><g><path d=\"M16,24.6c2.3,0,4.1-0.6,5-1.3V6.6C19.8,7.5,18,8,16,8s-3.8-0.5-5-1.4v16.7C11.9,24,13.7,24.6,16,24.6z\"/><path d=\"M16,26.9c-1.7,0-3.2-0.3-4.5-0.7l3.6,5.4c0.2,0.3,0.5,0.4,0.8,0.4s0.6-0.2,0.8-0.4l3.6-5.4C19.2,26.6,17.7,26.9,16,26.9z\"/></g></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M29,9H3c-0.6,0-1,0.4-1,1v16c0,0.6,0.4,1,1,1h26c0.6,0,1-0.4,1-1V10C30,9.4,29.6,9,29,9z M15,23H7c-0.6,0-1-0.4-1-1c0-1.9,1-3.5,2.5-4.3C8.2,17.2,8,16.6,8,16c0-1.7,1.3-3,3-3s3,1.3,3,3c0,0.6-0.2,1.2-0.5,1.7C15,18.5,16,20.1,16,22C16,22.6,15.6,23,15,23z M25,21h-3c-0.6,0-1-0.4-1-1s0.4-1,1-1h3c0.6,0,1,0.4,1,1S25.6,21,25,21z M25,17h-6c-0.6,0-1-0.4-1-1s0.4-1,1-1h6c0.6,0,1,0.4,1,1S25.6,17,25,17z\"/><g><path d=\"M20,11h-8c-0.6,0-1-0.4-1-1V9c0-2.8,2.2-5,5-5s5,2.2,5,5v1C21,10.6,20.6,11,20,11z M13,9h6c0-1.7-1.3-3-3-3S13,7.3,13,9z\"/></g></svg>','<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 32 32\" style=\"enable-background:new 0 0 32 32;\" xml:space=\"preserve\"><style type=\"text/css\">.st0{fill:#FFFFFF;}</style><path d=\"M30.4,6.5c-0.2-1.1-0.8-2.3-1.7-3.2c-0.9-0.9-2-1.5-3.2-1.7c-1.2-0.2-2.4,0.2-3.2,1c0,0,0,0,0,0c0,0,0,0,0,0c-2.8,3.3-5.8,6.5-8.9,9.6c-0.2,0-0.5,0-0.7,0.1c-0.4,0.2-0.5,0.6-0.4,1c-3.1,3.1-6.3,6.1-9.7,9c-0.8,0.8-1.1,1.9-1,3.2c0.2,1.1,0.8,2.3,1.7,3.2c0.9,0.9,2,1.5,3.2,1.7c0.2,0,0.4,0,0.6,0c1,0,1.9-0.4,2.6-1.1c2.4-2.7,4.8-5.3,7.3-7.9V25c0,0.6,0.4,1,1,1s1-0.4,1-1v-4.9c0.7,1,1,2.4,1,4.4V29c0,0.6,0.4,1,1,1s1-0.4,1-1v-4.5c0-1.9-0.2-4.4-1.9-6.2c3-3,6.1-5.9,9.3-8.6c0,0,0,0,0,0c0,0,0,0,0,0C30.2,8.9,30.6,7.7,30.4,6.5z M25.5,10.4c-2.4,2.2-4.8,4.4-7.1,6.7c-0.1,0-0.2-0.1-0.3-0.1c-1.1-0.9-2.5-2.2-3.4-3.3c2.3-2.4,4.6-4.8,6.8-7.2c0.3,0.9,0.8,1.8,1.5,2.5C23.8,9.6,24.6,10.2,25.5,10.4z M8.2,28c-0.5,0.5-1.1,0.4-1.5,0.4c-0.7-0.1-1.5-0.5-2.1-1.1c-0.6-0.6-1-1.3-1.1-2.1c-0.1-0.4-0.1-1,0.3-1.4c3.2-2.8,6.4-5.7,9.4-8.7c1.1,1.3,2.5,2.6,3.6,3.5C13.9,21.7,11,24.8,8.2,28z\"/></svg>'];function zo(e){return n(No,e)}var Ko=[\"America/Lima\",\"America/Juneau\",\"Pacific/Auckland\",\"Europe/Warsaw\",\"Europe/London\",\"Asia/Taipei\",\"Asia/Shanghai\",\"Pacific/Majuro\",\"Asia/Tashkent\",\"America/Caracas\",\"Africa/Harare\",\"America/La_Paz\",\"Europe/Vilnius\",\"Asia/Tokyo\",\"Australia/Brisbane\",\"Africa/Casablanca\",\"Atlantic/South_Georgia\",\"Europe/Riga\",\"Asia/Baku\",\"America/St_Johns\",\"Asia/Riyadh\",\"Europe/Bratislava\",\"Europe/Rome\",\"Asia/Dhaka\",\"Asia/Kolkata\",\"Europe/Berlin\",\"America/Chicago\",\"America/Phoenix\",\"Asia/Seoul\",\"Australia/Melbourne\",\"Asia/Baghdad\",\"Asia/Karachi\",\"America/New_York\",\"Asia/Krasnoyarsk\",\"Europe/Paris\",\"America/Mexico_City\",\"Europe/Moscow\",\"Europe/Madrid\",\"Africa/Johannesburg\",\"Europe/Athens\",\"Asia/Tehran\",\"Pacific/Port_Moresby\",\"Europe/Bucharest\",\"Asia/Singapore\",\"America/Denver\",\"Europe/Prague\",\"Africa/Cairo\",\"Asia/Kamchatka\",\"Europe/Stockholm\",\"America/Santiago\",\"Africa/Nairobi\",\"Asia/Kuala_Lumpur\",\"Europe/Lisbon\",\"America/Monterrey\",\"Europe/Vienna\",\"America/Argentina/Buenos_Aires\",\"Europe/Dublin\",\"Europe/Copenhagen\",\"Pacific/Apia\",\"Europe/Zagreb\",\"America/Mazatlan\",\"America/Guyana\",\"America/Tijuana\",\"Africa/Monrovia\",\"Europe/Minsk\",\"Pacific/Honolulu\",\"America/Indiana/Indianapolis\"];function Oo(e){return n(Ko,e)}function Jo(e){return n((()=>({id:Bi(),title:Li({charCount:40}),completed:v()})),e)}var Vo=[\"deposit\",\"withdrawal\",\"payment\",\"invoice\"];function Uo(e){return n(Vo,e)}function jo(e){return n((()=>`${n([\"http\",\"https\"])}://${ha()}.${ca()}`),e)}var _o=[\"Mozilla/5.0 (Windows; U; Windows NT 6.0) AppleWebKit/538.2.0 (KHTML, like Gecko) Chrome/32.0.862.0 Safari/538.2.0\",\"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.2; Trident/4.1; .NET CLR 1.3.78921.4)\",\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_9_8 rv:3.0; RU) AppleWebKit/537.2.2 (KHTML, like Gecko) Version/7.1.6 Safari/537.2.2\",\"Mozilla/5.0 (Windows; U; Windows NT 6.1) AppleWebKit/535.1.1 (KHTML, like Gecko) Chrome/38.0.882.0 Safari/535.1.1\",\"Mozilla/5.0 (Windows; U; Windows NT 5.3) AppleWebKit/536.1.1 (KHTML, like Gecko) Chrome/30.0.896.0 Safari/536.1.1\",\"Mozilla/5.0 (Windows NT 6.3; rv:15.9) Gecko/20100101 Firefox/15.9.2\",\"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/6.0)\",\"Mozilla/5.0 (Windows; U; Windows NT 6.2) AppleWebKit/537.0.1 (KHTML, like Gecko) Chrome/16.0.885.0 Safari/537.0.1\",\"Mozilla/5.0 (Windows; U; Windows NT 6.2) AppleWebKit/532.2.1 (KHTML, like Gecko) Chrome/34.0.818.0 Safari/532.2.1\",\"Mozilla/5.0 (Windows; U; Windows NT 6.1) AppleWebKit/536.1.2 (KHTML, like Gecko) Chrome/15.0.867.0 Safari/536.1.2\",\"Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\",\"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:13.0) Gecko/20100101 Firefox/13.0.0\",\"Mozilla/5.0 (Windows; U; Windows NT 5.0) AppleWebKit/538.0.1 (KHTML, like Gecko) Chrome/14.0.814.0 Safari/538.0.1\",\"Mozilla/5.0 (Windows; U; Windows NT 5.3) AppleWebKit/532.0.2 (KHTML, like Gecko) Chrome/33.0.871.0 Safari/532.0.2\",\"Mozilla/5.0 (Windows; U; Windows NT 5.3) AppleWebKit/537.2.0 (KHTML, like Gecko) Chrome/35.0.864.0 Safari/537.2.0\",\"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.3; Trident/6.1; .NET CLR 4.8.82855.9)\",\"Mozilla/5.0 (Windows; U; Windows NT 6.0) AppleWebKit/537.1.1 (KHTML, like Gecko) Chrome/21.0.863.0 Safari/537.1.1\",\"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/6.1; .NET CLR 2.7.77884.9)\"];function Yo(e){return n(_o,e)}var Qo=[\"Toyota Volt\",\"Rolls Royce XC90\",\"Nissan Fiesta\",\"Mercedes Benz A4\",\"Bugatti 1\",\"Mini Explorer\",\"Nissan Spyder\",\"Kia Spyder\",\"Ford Camry\",\"Bugatti Corvette\",\"Toyota A4\",\"Toyota Challenger\",\"Smart Focus\",\"Mazda Challenger\",\"Lamborghini F-150\",\"Lamborghini Prius\",\"Hyundai Roadster\",\"Chevrolet Malibu\"];function $o(e){return n(Qo,e)}var Zo=[\"Gasoline\",\"Hybrid\",\"Electric\",\"Diesel\"];function Xo(e){return n(Zo,e)}var en=[\"Abarth\",\"Acura\",\"Alpine\",\"Alfa Romeo\",\"Aston Martin\",\"Audi\",\"Bentley\",\"BMW\",\"Bugatti\",\"Buick\",\"Cadillac\",\"Caterham\",\"Chrysler\",\"Citro\u00EBn\",\"Chevrolet\",\"Dacia\",\"Dodge\",\"Ferrari\",\"Fiat\",\"Ford\",\"Genesis\",\"GMC\",\"Hennessey\",\"Honda\",\"Hyundai\",\"Infiniti\",\"Isuzu\",\"Jaguar\",\"Jeep\",\"Kia\",\"Koenigsegg\",\"Lamborghini\",\"Lancia\",\"Land Rover\",\"Lexus\",\"Lincoln\",\"Lotus\",\"Maserati\",\"Maybach\",\"Mazda\",\"McLaren\",\"Mercedes Benz\",\"Mini\",\"Mitsubishi\",\"Morgan\",\"Nissan\",\"Opel\",\"Pagani\",\"Peugeot\",\"Plymouth\",\"Polestar\",\"Pontiac\",\"Porsche\",\"Renault\",\"Rimac\",\"Rolls Royce\",\"SEAT\",\"Smart\",\"Subaru\",\"Suzuki\",\"Tesla\",\"Toyota\",\"Volkswagen\",\"Volvo\"];function an(e){return n(en,e)}var tn=[\"296 GTB\",\"4Runner\",\"500\",\"718\",\"911\",\"A-Class\",\"A2\",\"A3\",\"A4\",\"A6\",\"A7\",\"A8\",\"Accord\",\"Alpine\",\"Arteon\",\"Atlas\",\"Avalon\",\"Aventador\",\"Aviator\",\"Blazer\",\"Bronco\",\"C-Class\",\"C-HR\",\"Camaro\",\"Camry\",\"Cayenne\",\"Chiron\",\"Civic\",\"Clarity\",\"Clubman\",\"Colorado\",\"Corolla\",\"Corsair\",\"Corvette\",\"Countryman\",\"CR-V\",\"CT-4\",\"CT-5\",\"CX-9\",\"Duster\",\"e-tron\",\"E-Class\",\"Edge\",\"Elantra\",\"Escalade\",\"EQS\",\"EV-6\",\"Expedition\",\"Explorer\",\"F-150\",\"Fiesta\",\"Forester\",\"Ghibli\",\"Giulia\",\"GR86\",\"Grand Cherokee\",\"Grecale\",\"Golf\",\"Highlander\",\"HR-V\",\"Huracan\",\"ID.4\",\"Impreza\",\"Insight\",\"Ioniq\",\"Jetta\",\"John Cooper Works\",\"Kona\",\"Land Cruiser\",\"Legacy\",\"Levante\",\"Logan\",\"Lyriq\",\"M3\",\"M4\",\"M5\",\"Macan\",\"Malibu\",\"Maverick\",\"Mirai\",\"Model 3\",\"Model S\",\"Model X\",\"Model Y\",\"Mustang\",\"Nautilus\",\"Navigator\",\"Niro\",\"Outback\",\"Odyssey\",\"Palisade\",\"Panamera\",\"Passat\",\"Passport\",\"Portofino\",\"Prius\",\"Q3\",\"Q4\",\"Q5\",\"Q6\",\"Q7\",\"Q8\",\"Quattroporte\",\"Ranger\",\"R8\",\"RAV4\",\"Rio\",\"Roma\",\"S-Class\",\"Sandero\",\"Santa fe\",\"Sequoia\",\"Sentra\",\"Sienna\",\"Silverado\",\"Sonata\",\"Sorento\",\"Spark\",\"Sportage\",\"Spring\",\"Stelvio\",\"Stinger\",\"Suburban\",\"Super Duty\",\"Supra\",\"Tacoma\",\"Tahoe\",\"Tacoma\",\"Taos\",\"Taurus\",\"Taycan\",\"Tiguan\",\"Tonale\",\"Touareg\",\"Trailblazer\",\"TT\",\"Tucson\",\"Tundra\",\"Urus\",\"Veloster\",\"Venza\",\"Veyron\",\"Wrangler\",\"X1\",\"X2\",\"X3\",\"X4\",\"X5\",\"X6\",\"X7\",\"XT4\",\"XT5\",\"Yaris\",\"Z4\"];function on(e){return n(tn,e)}var nn=[\"Sedan\",\"Crew Cab Pickup\",\"Minivan\",\"Extended Cab Pickup\",\"Wagon\",\"SUV\",\"Cargo Van\",\"Coupe\",\"Hatchback\",\"Convertible\",\"Passenger Van\"];function rn(e){return n(nn,e)}var sn=[\"bypass\",\"index\",\"transmit\",\"parse\",\"synthesize\",\"compress\",\"reboot\",\"quantify\",\"hack\",\"back up\",\"program\",\"generate\",\"override\",\"input\",\"connect\",\"copy\",\"calculate\",\"navigate\"];function ln(e){return n(sn,e)}var un=[\"Monday\",\"Tuesday\",\"Wedneday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"];function cn(e){return n(un,e)}var dn=[\"Mary J. Blige\",\"Steven Tyler\",\"Stevie Nicks\",\"Joe Cocker\",\"B.B. King\",\"Patti LaBelle\",\"Karen Carpenter\",\"Annie Lennox\",\"Morrissey\",\"Levon Helm\",\"The Everly Brothers\",\"Solomon Burke\",\"Willie Nelson\",\"Don Henley\",\"Art Garfunkel\",\"Sam Moore\",\"Darlene Love\",\"Patti Smith\",\"Tom Waits\",\"John Lee Hooker\",\"Frankie Valli\",\"Mariah Carey\",\"Sly Stone\",\"Merle Haggard\",\"Steve Perry\",\"Iggy Pop\",\"James Taylor\",\"Dolly Parton\",\"John Fogerty\",\"Toots Hibbert\",\"Gregg Allman\",\"Ronnie Spector\",\"Wilson Pickett\",\"Jerry Lee Lewis\",\"Thom Yorke\",\"David Ruffin\",\"Axl Rose\",\"Dion\",\"Lou Reed\",\"Roger Daltrey\",\"Bj\u00F6rk\",\"Rod Stewart\",\"Christina Aguilera\",\"Eric Burdon\",\"Mavis Staples\",\"Paul Rodgers\",\"Luther Vandross\",\"Muddy Waters\",\"Brian Wilson\",\"Gladys Knight\",\"Bonnie Raitt\",\"Donny Hathaway\",\"Buddy Holly\",\"Jim Morrison\",\"Patsy Cline\",\"Kurt Cobain\",\"Bobby Blue Bland\",\"George Jones\",\"Joni Mitchell\",\"Chuck Berry\",\"Curtis Mayfield\",\"Jeff Buckley\",\"Elton John\",\"Neil Young\",\"Bruce Springsteen\",\"Dusty Springfield\",\"Whitney Houston\",\"Steve Winwood\",\"Bono\",\"Howlin' Wolf\",\"Prince\",\"Nina Simone\",\"Janis Joplin\",\"Hank Williams\",\"Jackie Wilson\",\"Michael Jackson\",\"Van Morrison\",\"David Bowie\",\"Etta James\",\"Johnny Cash\",\"Smokey Robinson\",\"Bob Marley\",\"Freddie Mercury\",\"Tina Turner\",\"Mick Jagger\",\"Robert Plant\",\"Al Green\",\"Roy Orbison\",\"Little Richard\",\"Paul McCartney\",\"James Brown\",\"Stevie Wonder\",\"Otis Redding\",\"Bob Dylan\",\"Marvin Gaye\",\"John Lennon\",\"Sam Cooke\",\"Elvis Presley\",\"Ray Charles\",\"Aretha Franklin\"];function hn(e){return n(dn,e)}var mn=[\"The twist\",\"Smooth\",\"Mack the knife\",\"Uptown funk!\",\"How do i live\",\"Party rock anthem\",\"I gotta feeling\",\"Macarena (bayside boys mix)\",\"Shape of you\",\"Physical\",\"You light up my life\",\"Hey jude\",\"Closer\",\"We belong together\",\"Un-break my heart\",\"Yeah!\",\"Bette davis eyes\",\"Endless love\",\"Tonight\u2019s the night (gonna be alright)\",\"You were meant for me/foolish games\",\"(everything i do) i do it for you\",\"I\u2019ll make love to you\",\"The theme from \u201Ca summer place\u201D\",\"Le freak\",\"How deep is your love\",\"Eye of the tiger\",\"We found love\",\"Low\",\"Just want to be your everything\",\"Too close\",\"Every breath you take\",\"Somebody that i used to know\",\"Despacito\",\"Flashdance\u2026 what a feeling\",\"Rolling in the deep\",\"Tossin\u2019 and turnin\u2019\",\"The battle of new orleans\",\"One sweet day\",\"Truly madly deeply\",\"Silly love songs\",\"Let\u2019s get it on\",\"Night fever\",\"Another one bites the dust\",\"Say say say\",\"How you remind me\",\"Tie a yellow ribbon round the ole oak tree\",\"It's all in the game\",\"I want to hold your hand\",\"Shadow dancing\",\"Call me maybe\",\"Blurred lines\",\"Candle in the wind \u201897/something about the way you look tonight\",\"No one\",\"I will always love you\",\"End of the road\",\"Boom boom pow\",\"Call me\",\"Let me love you\",\"Stayin\u2019 alive\",\"Lady\",\"Tik tok\",\"I\u2019m a believer\",\"Gold digger\",\"Apologize\",\"The sign\",\"Centerfold\",\"All about that bass\",\"(just like) starting over\",\"Royals\",\"The boy is mine\",\"Because i love you (the postman song)\",\"I love rock \u2019n rolln\",\"Aquarius/let the sunshine in\",\"Whoomp! (there it is)\",\"Moves like jagger\",\"Ebony and ivory\",\"Rush rush\",\"That\u2019s what friends are for\",\"Happy\",\"Upside down\",\"Sugar, sugar\",\"Just the way you are\",\"Dilemma\",\"I heard it through the grapevine\",\"You\u2019re still the one\",\"Billie jean\",\"Hot stuff\",\"Rockstar\",\"Gangsta\u2019s paradise\",\"Abracadabra\",\"Perfect\",\"You\u2019re so vain\",\"Play that funky music\",\"Say you, say me\",\"My sharona\",\"All night long (all night)\",\"Nothing compares 2 u\",\"I swear\",\"Family affair\",\"Waiting for a girl like you\"];function pn(e){return n(mn,e)}function yn(e){const a=e?.includeCounty??!0,t=e?.includeCountry??!0;return n((()=>{const{street:e,city:i,county:o,country:n,zipCode:r}=Fi({includeCounty:a,includeCountry:t});let s=`${e}, ${i}, `;return a&&(s+=`${o}, `),t&&(s+=`${n}, `),s+r}),e)}var gn=[\"Aegean Airlines\",\"Aer Lingus\",\"Aeroflot\",\"Aerolineas Argentinas\",\"Aeromexico\",\"Air Arabia\",\"Air Astana\",\"Air Austral\",\"Air Baltic\",\"Air Belgium\",\"Air Canada\",\"Air Caraibes\",\"Air China\",\"Air Corsica\",\"Air Dolomiti\",\"Air Europa\",\"Air France\",\"Air India\",\"Air India Express\",\"Air Macau\",\"Air Malta\",\"Air Mauritius\",\"Air Namibia\",\"Air New Zealand\",\"Air North\",\"Air Seoul\",\"Air Serbia\",\"Air Tahiti Nui\",\"Air Transat\",\"Air Vanuatu\",\"AirAsia\",\"AirAsia X\",\"Aircalin\",\"Alaska Airlines\",\"Alitalia\",\"Allegiant\",\"American Airlines\",\"ANA\",\"Asiana\",\"Austrian\",\"Avianca\",\"Azerbaijan Hava Yollary\",\"Azores Airlines\",\"Azul\",\"Bamboo Airways\",\"Bangkok Airways\",\"British Airways\",\"Brussels Airlines\",\"Caribbean Airlines\",\"Cathay Dragon\",\"Cathay Pacific\",\"Cayman Airways\",\"CEBU Pacific Air\",\"China Airlines\",\"China Eastern\",\"China Southern\",\"Condor\",\"Copa Airlines\",\"Croatia Airlines\",\"Czech Airlines\",\"Delta\",\"easyJet\",\"Edelweiss Air\",\"Egyptair\",\"EL AL\",\"Emirates\",\"Ethiopian Airlines\",\"Etihad\",\"Eurowings\",\"EVA Air\",\"Fiji Airways\",\"Finnair\",\"flydubai\",\"FlyOne\",\"French bee\",\"Frontier\",\"Garuda Indonesia\",\"Gol\",\"Gulf Air\",\"Hainan Airlines\",\"Hawaiian Airlines\",\"Helvetic Airways\",\"HK Express\",\"Hong Kong Airlines\",\"Iberia\",\"Icelandair\",\"IndiGo Airlines\",\"InterJet\",\"Japan Airlines\",\"Jeju Air\",\"Jet2\",\"JetBlue\",\"Jetstar\",\"Jin Air\",\"Kenya Airways\",\"KLM\",\"Korean Air\",\"Kulula\",\"La Compagnie\",\"LATAM\",\"Lion Airlines\",\"LOT Polish Airlines\",\"Lufthansa\",\"Luxair\",\"Malaysia Airlines\",\"Mango\",\"Middle East Airlines\",\"Nok Air\",\"Nordwind Airlines\",\"Norwegian Air International\",\"Norwegian Air Shuttle\",\"Norwegian Air Sweden\",\"Norwegian Air UK\",\"Oman Air\",\"Pakistan International Airlines\",\"Peach\",\"Pegasus Airlines\",\"Philippine Airlines\",\"Porter\",\"Qantas\",\"Qatar Airways\",\"Regional Express\",\"Rossiya - Russian Airlines\",\"Royal Air Maroc\",\"Royal Brunei\",\"Royal Jordanian\",\"RwandAir\",\"Ryanair\",\"S7 Airlines\",\"SAS\",\"Saudia\",\"Scoot Airlines\",\"Shanghai Airlines\",\"Silkair\",\"Silver\",\"Singapore Airlines\",\"Skylanes\",\"South African Airways\",\"Southwest\",\"SpiceJet\",\"Spirit\",\"Spring Airlines\",\"Spring Japan\",\"SriLankan Airlines\",\"Sun Country\",\"Sunclass Airlines\",\"Sunwing\",\"SWISS\",\"Swoop\",\"TAAG\",\"TACA\",\"TAP Portugal\",\"THAI\",\"tigerair Australia\",\"Transavia Airlines\",\"TUI UK\",\"TUIfly\",\"Tunis Air\",\"Turkish Airlines\",\"Ukraine International\",\"United\",\"Ural Airlines\",\"UTair Aviation\",\"Uzbekistan Airways\",\"Vietnam Airlines\",\"Virgin Atlantic\",\"Virgin Australia\",\"Vistara\",\"Viva Aerobus\",\"Volaris\",\"Volotea\",\"Vueling Airlines\",\"WestJet\",\"Wizzair\",\"Xiamen Airlines\"];function fn(e){return n(gn,e)}const bn={RyanAir:{prefix:\"FR\"},\"British Airways\":{prefix:\"BA\",suffixMin:100,suffixMax:999},Iberia:{prefix:\"IB\"},Jet2:{prefix:\"LS\"},EasyJet:{prefix:\"EZY\",suffixMin:100,suffixMax:999},Emirates:{prefix:\"EK\",suffixMin:10,suffixMax:99},\"American Airlines\":{prefix:\"AA\"},JetBlue:{prefix:\"B\",suffixMin:100,suffixMax:999},\"Air Europa\":{prefix:\"UX\"},\"Delta Air Lines\":{prefix:\"DL\"},\"United Airlines\":{prefix:\"UA\"},\"Virgin Atlantic\":{prefix:\"VS\"},\"Thai Airways\":{prefix:\"TG\"},\"Qatar Airways\":{prefix:\"QR\"}};function wn(e){const a=e?.airline??wa(gn);return n((()=>bn[a]?function({prefix:e,suffixMin:a=1e3,suffixMax:t=9999}){return`${e}${s({min:a,max:t})}`}(bn[a]):s({min:1e4,max:99999}).toString()),e)}function vn(e){return n((()=>`${s({min:1,max:33})}${wa([\"A\",\"B\",\"C\",\"D\",\"E\",\"F\"])}`),e)}var kn=[{name:\"Hartsfield\u2013Jackson Atlanta International Airport\",code:\"ATL\",city:\"Atlanta\",country:\"United States\"},{name:\"Los Angeles International Airport\",code:\"LAX\",city:\"Los Angeles\",country:\"United States\"},{name:\"O'Hare International Airport\",code:\"ORD\",city:\"Chicago\",country:\"United States\"},{name:\"Dallas-Fort Worth International Airport\",code:\"DFW\",city:\"Dallas\",country:\"United States\"},{name:\"Denver International Airport\",code:\"DEN\",city:\"Denver\",country:\"United States\"},{name:\"John F. Kennedy International Airport\",code:\"JFK\",city:\"New York\",country:\"United States\"},{name:\"San Francisco International Airport\",code:\"SFO\",city:\"San Francisco\",country:\"United States\"},{name:\"McCarran International Airport\",code:\"LAS\",city:\"Las Vegas\",country:\"United States\"},{name:\"Toronto Pearson International Airport\",code:\"YYZ\",city:\"Toronto\",country:\"Canada\"},{name:\"Seattle\u2013Tacoma International Airport\",code:\"SEA\",city:\"Seattle\",country:\"United States\"},{name:\"Charlotte Douglas International Airport\",code:\"CLT\",city:\"Charlotte\",country:\"United States\"},{name:\"Orlando International Airport\",code:\"MCO\",city:\"Orlando\",country:\"United States\"},{name:\"Miami International Airport\",code:\"MIA\",city:\"Miami\",country:\"United States\"},{name:\"Phoenix Sky Harbor International Airport\",code:\"PHX\",city:\"Phoenix\",country:\"United States\"},{name:\"Newark Liberty International Airport\",code:\"EWR\",city:\"Newark\",country:\"United States\"},{name:\"George Bush Intercontinental Houston Airport\",code:\"IAH\",city:\"Houston\",country:\"United States\"},{name:\"Minneapolis-St Paul International/Wold-Chamberlain Airport\",code:\"MSP\",city:\"Minneapolis\",country:\"United States\"},{name:\"Logan International Airport\",code:\"BOS\",city:\"Boston\",country:\"United States\"},{name:\"Detroit Metropolitan Wayne County Airport\",code:\"DTW\",city:\"Detroit\",country:\"United States\"},{name:\"Fort Lauderdale Hollywood International Airport\",code:\"FLL\",city:\"Fort Lauderdale\",country:\"United States\"},{name:\"Orlando Executive Airport\",code:\"ORL\",city:\"Orlando\",country:\"United States\"},{name:\"LaGuardia Airport\",code:\"LGA\",city:\"New York\",country:\"United States\"},{name:\"Philadelphia International Airport\",code:\"PHL\",city:\"Philadelphia\",country:\"United States\"},{name:\"Baltimore/Washington International Thurgood Marshall Airport\",code:\"BWI\",city:\"Baltimore\",country:\"United States\"},{name:\"Salt Lake City International Airport\",code:\"SLC\",city:\"Salt Lake City\",country:\"United States\"},{name:\"Vancouver International Airport\",code:\"YVR\",city:\"Vancouver\",country:\"Canada\"},{name:\"Ronald Reagan Washington National Airport\",code:\"DCA\",city:\"Washington\",country:\"United States\"},{name:\"Washington Dulles International Airport\",code:\"IAD\",city:\"Washington\",country:\"United States\"},{name:\"Midway International Airport\",code:\"MDW\",city:\"Chicago\",country:\"United States\"},{name:\"San Diego International Airport\",code:\"SAN\",city:\"San Diego\",country:\"United States\"},{name:\"O. R. Tambo International Airport\",code:\"JNB\",city:\"Johannesburg\",country:\"South Africa\"},{name:\"Cairo International Airport\",code:\"CAI\",city:\"Cairo\",country:\"Egypt\"},{name:\"Cape Town International Airport\",code:\"CPT\",city:\"Cape Town\",country:\"South Africa\"},{name:\"Mohammed V International Airport\",code:\"CMN\",city:\"Casablanca\",country:\"Morocco\"},{name:\"Addis Ababa Bole International Airport\",code:\"ADD\",city:\"Addis Ababa\",country:\"Ethiopia\"},{name:\"Houari Boumediene Airport\",code:\"ALG\",city:\"Algier\",country:\"Algeria\"},{name:\"Jomo Kenyatta International Airport\",code:\"NBO\",city:\"Nairobi\",country:\"Kenya\"},{name:\"Murtala Muhammed International Airport\",code:\"LOS\",city:\"Lagos\",country:\"Nigeria\"},{name:\"Tunis Carthage International Airport\",code:\"TUN\",city:\"Tunis\",country:\"Tunisia\"},{name:\"King Shaka International Airport\",code:\"DUR\",city:\"Durban\",country:\"South Africa\"},{name:\"Menara Airport\",code:\"RAK\",city:\"Marrakech\",country:\"Morocco\"},{name:\"Hurghada International Airport\",code:\"HRG\",city:\"Hurghada\",country:\"Egypt\"},{name:\"Monastir Habib Bourguiba International Airport\",code:\"MIR\",city:\"Monastir\",country:\"Tunisia\"},{name:\"Sir Seewoosagur Ramgoolam International Airport\",code:\"MRU\",city:\"Plaisance\",country:\"Mauritius\"},{name:\"Nnamdi Azikiwe International Airport\",code:\"ABV\",city:\"Abuja\",country:\"Nigeria\"},{name:\"Kotoka International Airport\",code:\"ACC\",city:\"Accra\",country:\"Ghana\"},{name:\"Sharm El Sheikh International Airport\",code:\"SSH\",city:\"Sharm El Sheikh\",country:\"Egypt\"},{name:\"Julius Nyerere International Airport\",code:\"DAR\",city:\"Dar Es Salaam\",country:\"Tanzania\"},{name:\"Quatro de Fevereiro Airport\",code:\"LAD\",city:\"Luanda\",country:\"Angola\"},{name:\"Roland Garros Airport\",code:\"RUN\",city:\"St.-denis\",country:\"Reunion\"},{name:\"Khartoum International Airport\",code:\"KRT\",city:\"Khartoum\",country:\"Sudan\"},{name:\"L\u00E9opold S\u00E9dar Senghor International Airport\",code:\"DKR\",city:\"Dakar\",country:\"Senegal\"},{name:\"F\u00E9lix-Houphou\u00EBt-Boigny International Airport\",code:\"ABJ\",city:\"Abidjan\",country:\"Cote d'Ivoire\"},{name:\"Es Senia Airport\",code:\"ORN\",city:\"Oran\",country:\"Algeria\"},{name:\"Borg El Arab Airport\",code:\"HBE\",city:\"Alexandria\",country:\"Egypt\"},{name:\"Port Elizabeth International Airport\",code:\"PLZ\",city:\"Port Elizabeth\",country:\"South Africa\"},{name:\"Agadir\u2013Al Massira Airport\",code:\"AGA\",city:\"Agadir\",country:\"Morocco\"},{name:\"Entebbe International Airport\",code:\"EBB\",city:\"Entebbe\",country:\"Uganda\"},{name:\"Douala International Airport\",code:\"DLA\",city:\"Douala\",country:\"Cameroon\"},{name:\"Djerba\u2013Zarzis International Airport\",code:\"DJE\",city:\"Djerba\",country:\"Tunisia\"},{name:\"Beijing Capital International Airport\",code:\"PEK\",city:\"Beijing\",country:\"China\"},{name:\"Dubai International Airport\",code:\"DXB\",city:\"Dubai\",country:\"United Arab Emirates\"},{name:\"Haneda Airport\",code:\"HND\",city:\"Tokyo\",country:\"Japan\"},{name:\"Hong Kong International Airport\",code:\"HKG\",city:\"Hong Kong\",country:\"Hong Kong\"},{name:\"Shanghai Pudong International Airport\",code:\"PVG\",city:\"Shanghai\",country:\"China\"},{name:\"Guangzhou Baiyun International Airport\",code:\"CAN\",city:\"Guangzhou\",country:\"China\"},{name:\"Indira Gandhi International Airport\",code:\"DEL\",city:\"Delhi\",country:\"India\"},{name:\"Soekarno-Hatta International Airport\",code:\"CGK\",city:\"Jakarta\",country:\"Indonesia\"},{name:\"Singapore Changi Airport\",code:\"SIN\",city:\"Singapore\",country:\"Singapore\"},{name:\"Incheon International Airport\",code:\"ICN\",city:\"Seoul\",country:\"South Korea\"},{name:\"Suvarnabhumi Airport\",code:\"BKK\",city:\"Bangkok\",country:\"Thailand\"},{name:\"Kuala Lumpur International Airport\",code:\"KUL\",city:\"Kuala Lumpur\",country:\"Malaysia\"},{name:\"Chengdu Shuangliu International Airport\",code:\"CTU\",city:\"Chengdu\",country:\"China\"},{name:\"Chhatrapati Shivaji International Airport\",code:\"BOM\",city:\"Mumbai\",country:\"India\"},{name:\"Shenzhen Bao'an International Airport\",code:\"SZX\",city:\"Shenzhen\",country:\"China\"},{name:\"Taiwan Taoyuan International Airport\",code:\"TPE\",city:\"Taipei\",country:\"Taiwan\"},{name:\"Kunming Changshui International Airport\",code:\"KMG\",city:\"Kunming\",country:\"China\"},{name:\"Ninoy Aquino International Airport\",code:\"MNL\",city:\"Manila\",country:\"Philippines\"},{name:\"Shanghai Hongqiao International Airport\",code:\"SHA\",city:\"Shanghai\",country:\"China\"},{name:\"Xi'an Xianyang International Airport\",code:\"XIY\",city:\"Xi'an\",country:\"China\"},{name:\"Narita International Airport\",code:\"NRT\",city:\"Tokyo\",country:\"Japan\"},{name:\"Chongqing Jiangbei International Airport\",code:\"CKG\",city:\"Chongqing\",country:\"China\"},{name:\"Don Mueang International Airport\",code:\"DMK\",city:\"Bangkok\",country:\"Thailand\"},{name:\"Tan Son Nhat International Airport\",code:\"SGN\",city:\"Ho Chi Minh City\",country:\"Vietnam\"},{name:\"Hamad International Airport\",code:\"DOH\",city:\"Doha\",country:\"Qatar\"},{name:\"Hangzhou Xiaoshan International Airport\",code:\"HGH\",city:\"Hangzhou\",country:\"China\"},{name:\"King Abdulaziz International Airport\",code:\"JED\",city:\"Jeddah\",country:\"Saudi Arabia\"},{name:\"Jeju International Airport\",code:\"CJU\",city:\"Cheju\",country:\"South Korea\"},{name:\"Kansai International Airport\",code:\"KIX\",city:\"Osaka\",country:\"Japan\"},{name:\"Nanjing Lukou International Airport\",code:\"NKG\",city:\"Nanjing\",country:\"China\"},{name:\"Sydney Airport\",code:\"SYD\",city:\"Sydney\",country:\"Australia\"},{name:\"Melbourne Airport\",code:\"MEL\",city:\"Melbourne\",country:\"Australia\"},{name:\"Brisbane International Airport\",code:\"BNE\",city:\"Brisbane\",country:\"Australia\"},{name:\"Auckland International Airport\",code:\"AKL\",city:\"Auckland\",country:\"New Zealand\"},{name:\"Perth International Airport\",code:\"PER\",city:\"Perth\",country:\"Australia\"},{name:\"Adelaide International Airport\",code:\"ADL\",city:\"Adelaide\",country:\"Australia\"},{name:\"Christchurch International Airport\",code:\"CHC\",city:\"Christchurch\",country:\"New Zealand\"},{name:\"Gold Coast Airport\",code:\"OOL\",city:\"Coolangatta\",country:\"Australia\"},{name:\"Wellington International Airport\",code:\"WLG\",city:\"Wellington\",country:\"New Zealand\"},{name:\"Cairns International Airport\",code:\"CNS\",city:\"Cairns\",country:\"Australia\"},{name:\"Canberra International Airport\",code:\"CBR\",city:\"Canberra\",country:\"Australia\"},{name:\"Hobart International Airport\",code:\"HBA\",city:\"Hobart\",country:\"Australia\"},{name:\"Darwin International Airport\",code:\"DRW\",city:\"Darwin\",country:\"Australia\"},{name:\"Nadi International Airport\",code:\"NAN\",city:\"Nandi\",country:\"Fiji\"},{name:\"Queenstown International Airport\",code:\"ZQN\",city:\"Queenstown International\",country:\"New Zealand\"},{name:\"Townsville Airport\",code:\"TSV\",city:\"Townsville\",country:\"Australia\"},{name:\"Launceston Airport\",code:\"LST\",city:\"Launceston\",country:\"Australia\"},{name:\"Newcastle Airport\",code:\"NTL\",city:\"Newcastle\",country:\"Australia\"},{name:\"Nelson Airport\",code:\"NSN\",city:\"Nelson\",country:\"New Zealand\"},{name:\"Dunedin Airport\",code:\"DUD\",city:\"Dunedin\",country:\"New Zealand\"},{name:\"Mackay Airport\",code:\"MKY\",city:\"Mackay\",country:\"Australia\"},{name:\"Port Moresby Jacksons International Airport\",code:\"POM\",city:\"Port Moresby\",country:\"Papua New Guinea\"},{name:\"Sunshine Coast Airport\",code:\"MCY\",city:\"Maroochydore\",country:\"Australia\"},{name:\"Karratha Airport\",code:\"KTA\",city:\"Karratha\",country:\"Australia\"},{name:\"Hawke's Bay Airport\",code:\"NPE\",city:\"NAPIER\",country:\"New Zealand\"},{name:\"Rockhampton Airport\",code:\"ROK\",city:\"Rockhampton\",country:\"Australia\"},{name:\"Palmerston North Airport\",code:\"PMR\",city:\"Palmerston North\",country:\"New Zealand\"},{name:\"Alice Springs Airport\",code:\"ASP\",city:\"Alice Springs\",country:\"Australia\"},{name:\"Hamilton Island Airport\",code:\"HTI\",city:\"Hamilton Island\",country:\"Australia\"},{name:\"Port Hedland International Airport\",code:\"PHE\",city:\"Port Hedland\",country:\"Australia\"},{name:\"Heathrow Airport\",code:\"LHR\",city:\"London\",country:\"United Kingdom\"},{name:\"Charles de Gaulle International Airport\",code:\"CDG\",city:\"Paris\",country:\"France\"},{name:\"Amsterdam Airport Schiphol\",code:\"AMS\",city:\"Amsterdam\",country:\"Netherlands\"},{name:\"Frankfurt am Main International Airport\",code:\"FRA\",city:\"Frankfurt\",country:\"Germany\"},{name:\"Istanbul Atat\u00FCrk Airport\",code:\"IST\",city:\"Istanbul\",country:\"Turkey\"},{name:\"Adolfo Su\u00E1rez Madrid\u2013Barajas Airport\",code:\"MAD\",city:\"Madrid\",country:\"Spain\"},{name:\"Barcelona\u2013El Prat Airport\",code:\"BCN\",city:\"Barcelona\",country:\"Spain\"},{name:\"Gatwick Airport\",code:\"LGW\",city:\"London\",country:\"United Kingdom\"},{name:\"Munich Airport\",code:\"MUC\",city:\"Munich\",country:\"Germany\"},{name:\"Leonardo da Vinci\u2013Fiumicino Airport\",code:\"FCO\",city:\"Rome\",country:\"Italy\"},{name:\"Sheremetyevo International Airport\",code:\"SVO\",city:\"Moscow\",country:\"Russia\"},{name:\"Sabiha G\u00F6k\u00E7en International Airport\",code:\"SAW\",city:\"Istanbul\",country:\"Turkey\"},{name:\"Moscow Domodedovo Airport\",code:\"DME\",city:\"Moscow\",country:\"Russia\"},{name:\"Dublin Airport\",code:\"DUB\",city:\"Dublin\",country:\"Ireland\"},{name:\"Z\u00FCrich Airport\",code:\"ZRH\",city:\"Zurich\",country:\"Switzerland\"},{name:\"Copenhagen Airport\",code:\"CPH\",city:\"Copenhagen\",country:\"Denmark\"},{name:\"Palma De Mallorca Airport\",code:\"PMI\",city:\"Palma de Mallorca\",country:\"Spain\"},{name:\"Manchester Airport\",code:\"MAN\",city:\"Manchester\",country:\"United Kingdom\"},{name:\"Oslo Airport, Gardermoen\",code:\"OSL\",city:\"Oslo\",country:\"Norway\"},{name:\"Lisbon Portela Airport\",code:\"LIS\",city:\"Lisbon\",country:\"Portugal\"},{name:\"Stockholm Arlanda Airport\",code:\"ARN\",city:\"Stockholm\",country:\"Sweden\"},{name:\"Antalya Airport\",code:\"AYT\",city:\"Antalya\",country:\"Turkey\"},{name:\"London Stansted Airport\",code:\"STN\",city:\"London\",country:\"United Kingdom\"},{name:\"Brussels Airport\",code:\"BRU\",city:\"Brussels\",country:\"Belgium\"},{name:\"D\u00FCsseldorf International Airport\",code:\"DUS\",city:\"Duesseldorf\",country:\"Germany\"},{name:\"Vienna International Airport\",code:\"VIE\",city:\"Vienna\",country:\"Austria\"},{name:\"Milan\u2013Malpensa Airport\",code:\"MXP\",city:\"Milano\",country:\"Italy\"},{name:\"Athens International Airport\",code:\"ATH\",city:\"Athens\",country:\"Greece\"},{name:\"Berlin-Tegel International Airport\",code:\"TXL\",city:\"Berlin\",country:\"Germany\"},{name:\"Helsinki Airport\",code:\"HEL\",city:\"Helsinki\",country:\"Finland\"},{name:\"M\u00E1laga Airport\",code:\"AGP\",city:\"Malaga\",country:\"Spain\"},{name:\"Mexico City International Airport\",code:\"MEX\",city:\"Mexico City\",country:\"Mexico\"},{name:\"S\u00E3o Paulo\u2013Guarulhos International Airport\",code:\"GRU\",city:\"Sao Paulo\",country:\"Brazil\"},{name:\"El Dorado International Airport\",code:\"BOG\",city:\"Bogota\",country:\"Colombia\"},{name:\"Canc\u00FAn International Airport\",code:\"CUN\",city:\"Cancun\",country:\"Mexico\"},{name:\"Comodoro Arturo Merino Ben\u00EDtez International Airport\",code:\"SCL\",city:\"Santiago\",country:\"Chile\"},{name:\"Jorge Ch\u00E1vez International Airport\",code:\"LIM\",city:\"Lima\",country:\"Peru\"},{name:\"S\u00E3o Paulo\u2013Congonhas Airport\",code:\"CGH\",city:\"Sao Paulo\",country:\"Brazil\"},{name:\"Presidente Juscelino Kubistschek International Airport\",code:\"BSB\",city:\"Brasilia\",country:\"Brazil\"},{name:\"Rio de Janeiro\u2013Gale\u00E3o International Airport\",code:\"GIG\",city:\"Rio De Janeiro\",country:\"Brazil\"},{name:\"Tocumen International Airport\",code:\"PTY\",city:\"Panama City\",country:\"Panama\"},{name:\"Aeroparque Jorge Newbery\",code:\"AEP\",city:\"Buenos Aires\",country:\"Argentina\"},{name:\"Guadalajara International Airport\",code:\"GDL\",city:\"Guadalajara\",country:\"Mexico\"},{name:\"Ministro Pistarini International Airport\",code:\"EZE\",city:\"Buenos Aires\",country:\"Argentina\"},{name:\"Tancredo Neves International Airport\",code:\"CNF\",city:\"Belo Horizonte\",country:\"Brazil\"},{name:\"Monterrey International Airport\",code:\"MTY\",city:\"Monterrey\",country:\"Mexico\"},{name:\"Viracopos International Airport\",code:\"VCP\",city:\"Campinas\",country:\"Brazil\"},{name:\"Santos Dumont Airport\",code:\"SDU\",city:\"Rio De Janeiro\",country:\"Brazil\"},{name:\"Salgado Filho Airport\",code:\"POA\",city:\"Porto Alegre\",country:\"Brazil\"},{name:\"Guararapes - Gilberto Freyre International Airport\",code:\"REC\",city:\"Recife\",country:\"Brazil\"},{name:\"Deputado Lu\u00EDs Eduardo Magalh\u00E3es International Airport\",code:\"SSA\",city:\"Salvador\",country:\"Brazil\"},{name:\"General Abelardo L. Rodr\u00EDguez International Airport\",code:\"TIJ\",city:\"Tijuana\",country:\"Mexico\"},{name:\"Afonso Pena Airport\",code:\"CWB\",city:\"Curitiba\",country:\"Brazil\"},{name:\"Pinto Martins International Airport\",code:\"FOR\",city:\"Fortaleza\",country:\"Brazil\"},{name:\"Jos\u00E9 Mart\u00ED International Airport\",code:\"HAV\",city:\"Havana\",country:\"Cuba\"},{name:\"Juan Santamaria International Airport\",code:\"SJO\",city:\"San Jose\",country:\"Costa Rica\"},{name:\"Matur\u00EDn Airport\",code:\"MUN\",city:\"Maturin\",country:\"Venezuela\"},{name:\"Herc\u00EDlio Luz International Airport\",code:\"FLN\",city:\"Florianopolis\",country:\"Brazil\"},{name:\"Val de Cans International Airport\",code:\"BEL\",city:\"Belem\",country:\"Brazil\"},{name:\"Alejandro Velasco Astete International Airport\",code:\"CUZ\",city:\"Cuzco\",country:\"Peru\"},{name:\"Santa Genoveva Airport\",code:\"GYN\",city:\"Goiania\",country:\"Brazil\"}];function Sn(e){return n(kn,e)}function Cn(e){return n((()=>{const a=e?.airline??fn(),t=e?.passenger??ja(),[i,o]=Sn({length:2});return{passenger:t,airline:a,flightNumber:wn({airline:a}),origin:i,destination:o,date:Ya().toISOString(),seat:vn(),flightLength:.25*Math.ceil(s({min:1,max:9,fraction:2})/.25)}}),e)}function An(e){return n((()=>{const a=e?.fullName??`${ki()} ${ja({withAccents:!1})}`,t=e?.brand??Re(),i={month:\"numeric\",year:\"2-digit\"};return{fullName:a,brand:t,validFrom:fi({years:1}).toLocaleDateString(\"en-GB\",i),untilEnd:Ya({years:2}).toLocaleDateString(\"en-GB\",i),ccv:qe(),number:He({brand:t}),account:h(),type:wa([\"Credit\",\"Debit\"])}}),e)}const Mn=()=>{const e=[v(),k(),k({length:k({min:1,max:10})}),hn(),hn({length:k({min:1,max:10})}),ii(),ii({length:k({min:1,max:10})}),ni(),ni({length:k({min:1,max:10})}),ha(),ha({length:k({min:1,max:10})}),So(),So({length:k({min:1,max:10})}),qi(),qi({length:k({min:1,max:10})}),Fi(),Fi({length:k({min:1,max:10})}),Vi(),Vi({length:k({min:1,max:10})}),Cn(),Cn({length:k({min:1,max:10})}),An(),An({length:k({min:1,max:10})})];return e[k({min:0,max:e.length-1})]};function Tn(e){const a=e?.totalKeys??k({min:e?.minKeys||1,max:e?.maxKeys||99});return n((()=>{const e={};for(let t=0;t<a;t++)e[Bi().replace(/-/g,\"\")]=Mn();return e}),e)}var Bn={bash:'#!/bin/bash\\n\\nmove()\\n{\\n  local n=\"$1\"\\n  local from=\"$2\"\\n  local to=\"$3\"\\n  local via=\"$4\"\\n\\n  if [[ \"$n\" == \"1\" ]]\\n  then\\n    echo \"Move disk from pole $from to pole $to\"\\n  else\\n    move $(($n - 1)) $from $via $to\\n    move 1 $from $to $via\\n    move $(($n - 1)) $via $to $from\\n  fi\\n}\\n\\nmove $1 $2 $3 $4',c:'#include <stdio.h>\\n\\nvoid move(int n, int from, int via, int to) {\\n   if (n > 1) {\\n      move(n - 1, from, to, via);\\n      printf(\"Move disk from pole %d to pole %d\\\\n\", from, to);\\n      move(n - 1, via, from, to);\\n   } else {\\n      printf(\"Move disk from pole %d to pole %d\\\\n\", from, to);\\n   }\\n}\\nint main() {\\n   move(4, 1, 2, 3);\\n   return 0;\\n}',\"c#\":'public void move(int n, int from, int to, int via) {\\n  if (n == 1) {\\n    System.Console.WriteLine(\"Move disk from pole \" + from + \" to pole \" + to);\\n  } else {\\n    move(n - 1, from, via, to);\\n    move(1, from, to, via);\\n    move(n - 1, via, to, from);\\n  }\\n}',\"c++\":'void move(int n, int from, int to, int via) {\\n  if (n == 1) {\\n    std::cout << \"Move disk from pole \" << from << \" to pole \" << to << std::endl;\\n  } else {\\n    move(n - 1, from, via, to);\\n    move(1, from, to, via);\\n    move(n - 1, via, to, from);\\n  }\\n}',css:\".hover-rotate {\\n  overflow: hidden;\\n  margin: 8px;\\n  min-width: 240px;\\n  max-width: 320px;\\n  width: 100%;\\n}\\n\\n.hover-rotate img {\\n  transition: all 0.3s;\\n  box-sizing: border-box;\\n  max-width: 100%;\\n}\\n\\n.hover-rotate:hover img {\\n  transform: scale(1.3) rotate(5deg);\\n}\",go:\"func fib(a int) int {\\n  if a < 2 {\\n      return a\\n  }\\n  return fib(a - 1) + fib(a - 2)\\n}\",html:'<form action=\"http://maps.google.com/maps\" method=\"get\" target=\"_blank\">\\n  <label for=\"saddr\">Enter your location</label>\\n  <input type=\"text\" name=\"saddr\" />\\n  <input type=\"hidden\" name=\"daddr\" value=\"350 5th Ave New York, NY 10018 (Empire State Building)\" />\\n  <input type=\"submit\" value=\"Get directions\" />\\n</form>',java:'public void move(int n, int from, int to, int via) {\\n  if (n == 1) {\\n      System.out.println(\"Move disk from pole \" + from + \" to pole \" + to);\\n  } else {\\n      move(n - 1, from, via, to);\\n      move(1, from, to, via);\\n      move(n - 1, via, to, from);\\n  }\\n}',javascript:'function move(n, a, b, c) {\\n  if (n > 0) {\\n    move(n - 1, a, c, b);\\n    console.log(\"Move disk from \" + a + \" to \" + c);\\n    move(n - 1, b, a, c);\\n  }\\n}\\nmove(4, \"A\", \"B\", \"C\");',php:'function move($n,$from,$to,$via) {\\n  if ($n === 1) {\\n    print(\"Move disk from pole $from to pole $to\");\\n  } else {\\n    move($n-1,$from,$via,$to);\\n    move(1,$from,$to,$via);\\n    move($n-1,$via,$to,$from);\\n  }\\n}',python:'def hanoi(ndisks, startPeg=1, endPeg=3):\\n  if ndisks:\\n    hanoi(ndisks - 1, startPeg, 6 - startPeg - endPeg)\\n    print \"Move disk %d from peg %d to peg %d\" % (ndisks, startPeg, endPeg)\\n    hanoi(ndisks - 1, 6 - startPeg - endPeg, endPeg)\\n\\nhanoi(ndisks=4)',rust:'fn move_(n: i32, from: i32, to: i32, via: i32) {\\n  if n > 0 {\\n      move_(n - 1, from, via, to);\\n      println!(\"Move disk from pole {} to pole {}\", from, to);\\n      move_(n - 1, via, to, from);\\n  }\\n}\\n \\nfn main() {\\n  move_(4, 1,2,3);\\n}',sql:\"SELECT *\\nFROM   call\\nORDER  BY call.employee_id ASC,\\n          call.start_time ASC;\",swift:'func hanoi(n: Int, a: String, b: String, c: String) {\\n  if n > 0 {\\n    hanoi(n - 1, a: a, b: c, c: b)\\n    print(\"Move disk from \\\\\\\\(a) to \\\\\\\\(c)\")\\n    hanoi(n - 1, a: b, b: a, c: c)\\n  }\\n}\\n  \\nhanoi(4, a: \"A\", b: \"B\", c: \"C\")\\';'};function In(e){const a=e?.lang??\"javascript\";return n((()=>Bn[a]),e)}function Pn(e){const a=e.min,t=e.max;if(a>=t)throw new Error(\"Min must be less than max\");return n((()=>Li({charCount:s({min:a,max:t})})),e)}function xn(e){return n((()=>wa(kn.map((({name:e})=>e)))),e)}function Dn(e){return n((()=>wa(kn.map((({code:e})=>e)))),e)}function Gn(e){return null==e}const Fn=e=>{const a=e.replace(/ /g,\"\");if(11!==a.length)return!1;const t=[10,1,3,5,7,9,11,13,15,17,19];let i=0;for(let e=0;e<t.length;e++)i+=(Number(String(a[e]))-(0==e?1:0))*t[e];return i%89==0};function qn(e={from:1,step:1}){if(0===e.step)throw new Error(\"`step` should be a number different than 0, for example: {from: 1, step: 1}\");if(e.from<0)throw new Error(\"`from` should be a number greater than 0\");if(!Gn(e.to)){if(e.to<0)throw new Error(\"`to` should be a number greater than from and greater than 0\");if(e.from>e.to&&e.step>0)throw new Error(\"`to` should be higher or equal to `from`, for example: {from: 1, to: 3}\");if(e.from<e.to&&e.step<0)throw new Error(\"`to` should be lower or equal to `from`, for example: {from: 5, to: 1, step: -1}\")}let a=e.from;return()=>{if(!Gn(e.to)){if(e.step>0&&a>e.to)return;if(e.step<0&&a<e.to)return}const t=a;return a+=e.step,t}}function Ln(e={from:new Date,step:864e5}){const a=new Date(e.from),t=e.to?new Date(e.to):void 0;if(0===e.step)throw new Error(\"`step` should be a number different from 0, for example: {from: new Date(), step: 10}\");if(!Gn(t)){if(a>t&&e.step>0)throw new Error(\"`to` should be a date greater than or equal to `from`\");if(a<t&&e.step<0)throw new Error(\"`to` should be a date lower than or equal to `from`\")}const i=qn({from:a.getTime(),to:t?.getTime(),step:e.step});return()=>{const e=i();return e?new Date(e):void 0}}function Rn(e){const a=e?.values??2,t=e?.totalValue??100,i=e?.noZeros??!1;if(a<=1)throw new Error(\"Values must be bigger than 1\");if(t<0)throw new Error(\"TotalValue must be positive\");if(i&&t<a)throw new Error(\"Values must be larger or equal to totalValue with the noZero option\");return n((()=>{const o=new Array(a).fill(i?1:0);let n=t;i&&(n-=a);for(let t=0;t<a-1;t++){const a=s({min:0,max:s({min:0,max:Math.max(n,0)}),fraction:e?.fraction});n-=a,o[t]+=a}o[o.length-1]+=t-o.reduce(((e,a)=>e+a),0);const r=[];for(;0!==o.length;){const e=s({min:0,max:o.length-1,fraction:0}),[a]=o.splice(e,1);r.push(a)}return r}),e)}function En(e){return n((()=>{if(void 0===e?.chanceTrue&&void 0===e?.chanceFalse)throw new Error(\"One of chanceTrue and chanceFalse must be provided\");if(void 0!==e?.chanceTrue&&void 0!==e?.chanceFalse)throw new Error(\"chanceTrue and chanceFalse can't both be provided\");if(void 0!==e.chanceFalse)return Ra({min:0,max:1,fraction:15})>=e.chanceFalse;if(void 0!==e.chanceTrue)return Ra({min:0,max:1,fraction:15})<=e.chanceTrue;throw new Error(\"Unexpected error occurred\")}),e)}function Hn(e,a){return n((()=>e(a)),a)}function Wn(e){return n((()=>{const a=e?.onlyValid??!0;let t=\"\";do{t=k({min:0,max:9,length:11}).map((e=>String(e))).join(\"\")}while(!Fn(t)&&a);return t}),e)}export{Ln as incrementalDate,qn as incrementalNumber,wa as rand,u as randAbbreviation,Wn as randAbn,d as randAccessory,h as randAccount,Fi as randAddress,Rn as randAggregation,fn as randAirline,Sn as randAirport,Dn as randAirportCode,xn as randAirportName,w as randAlpha,S as randAlphaNumeric,A as randAmericanFootballTeam,M as randAmount,P as randAnimal,B as randAnimalType,W as randArn,N as randAvatar,D as randAwsRegion,O as randAwsRequestId,K as randAwsService,V as randBaseballTeam,j as randBasketballTeam,Y as randBear,Q as randBetweenDate,ae as randBic,te as randBinary,oe as randBird,ne as randBitcoinAddress,se as randBook,v as randBoolean,ue as randBrand,de as randBrowser,me as randCardinalDirection,ye as randCat,fe as randCatchPhrase,we as randCetacean,En as randChanceBoolean,ke as randCity,Ce as randClothingSize,In as randCodeSnippet,Me as randColor,Be as randCompanyName,Pe as randCountry,X as randCountryCode,De as randCounty,Fe as randCow,An as randCreditCard,Re as randCreditCardBrand,qe as randCreditCardCVV,He as randCreditCardNumber,Ne as randCrocodilia,Ke as randCurrencyCode,Je as randCurrencyName,Ue as randCurrencySymbol,ta as randDatabase,_e as randDatabaseCollation,Qe as randDatabaseColumn,Ze as randDatabaseEngine,ea as randDatabaseType,oa as randDepartment,ra as randDirection,F as randDirectoryPath,la as randDog,ma as randDomainName,ca as randDomainSuffix,ya as randDrinks,Ca as randEmail,fa as randEmailProvider,Ma as randEmoji,Ba as randEthereumAddress,Pa as randFileExt,L as randFileName,Da as randFilePath,Fa as randFileType,va as randFirstName,La as randFish,Cn as randFlightDetails,wn as randFlightNumber,Ra as randFloat,Ha as randFontFamily,Wa as randFontSize,Ka as randFood,Ja as randFootballTeam,Ua as randFrequency,yn as randFullAddress,ja as randFullName,Ya as randFutureDate,Za as randGender,et as randGitBranch,st as randGitCommitEntry,rt as randGitCommitMessage,nt as randGitCommitSha,lt as randGitShortSha,ut as randHex,tt as randHexaDecimal,dt as randHorse,ht as randHsl,pt as randHttpMethod,yt as randIban,ft as randIceHockeyTeam,bt as randImg,vt as randIntegration,St as randIp,Ct as randIpv6,Tn as randJSON,Mt as randJobArea,Bt as randJobDescriptor,Pt as randJobTitle,Dt as randJobType,qt as randLanguage,Sa as randLastName,Lt as randLatitude,Wt as randLine,zt as randLines,Ot as randLion,Vt as randLocale,Ut as randLongitude,jt as randMac,_t as randMask,Qt as randMimeType,Zt as randMonth,ei as randMotorcycleManufacturer,ai as randMotorcylceManufacturer,ii as randMovie,ni as randMovieCharacter,si as randMusicGenre,li as randNearbyGPSCoordinate,k as randNumber,ci as randOAuthProvider,di as randOctal,mi as randOrdinalDirection,yi as randParagraph,gi as randPassword,fi as randPastDate,wi as randPermission,ki as randPersonTitle,Ci as randPhoneNumber,Mi as randPhrase,Ti as randPort,Ri as randPost,Hi as randPriority,Vi as randProduct,ji as randProductAdjective,Ji as randProductCategory,Ki as randProductDescription,Yi as randProductMaterial,Ni as randProductName,$i as randProgrammingLanguage,Xi as randPronoun,to as randProtocol,oo as randQuote,ro as randRabbit,so as randRecentDate,uo as randResolution,co as randRgb,mo as randRole,po as randRoutingNumber,vn as randSeatNumber,yo as randSemver,Ht as randSentence,b as randSequence,fo as randShape,hn as randSinger,wo as randSkill,vo as randSlug,So as randSnake,Ao as randSocial,pn as randSong,Mo as randSoonDate,Bo as randSports,Io as randSportsTeam,xo as randState,Go as randStateAbbr,qo as randStatus,Di as randStreetAddress,xi as randStreetName,Ro as randSubscriptionPlan,Ho as randSuperhero,Wo as randSuperheroName,zo as randSvg,ee as randSwift,Li as randText,Pn as randTextRange,Oo as randTimeZone,Jo as randTodo,Uo as randTransactionType,jo as randUrl,qi as randUser,Yo as randUserAgent,Ii as randUserName,Bi as randUuid,$o as randVehicle,Xo as randVehicleFuel,an as randVehicleManufacturer,on as randVehicleModel,rn as randVehicleType,ln as randVerb,cn as randWeekday,ha as randWord,Gi as randZipCode,i as random,o as seed,Hn as toCollection};\n", "import { createAssetReferenceForImage } from \"@framerjs/assets\"\nimport { Button, NumberInput, PopupButton, PopupButtonItem, Stack } from \"@framerjs/fresco\"\nimport { assertNever } from \"@framerjs/shared\"\nimport * as falso from \"@ngneat/falso\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport engine from \"document/engine.ts\"\nimport type { CollectionNode, MaybeNodeID } from \"document/models/CanvasTree/index.ts\"\nimport { CollectionItemNode } from \"document/models/CanvasTree/nodes/CollectionItemNode.ts\"\nimport { getContentManagementNode } from \"document/models/CanvasTree/nodes/ContentManagementNode.utils.ts\"\nimport { randomID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport { type VariableDefinition, isVariableDefinition } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type {\n\tCollectionArrayControlPropValue,\n\tCollectionControlProp,\n} from \"document/models/controlProps/CollectionControlProp.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { ControlType } from \"library/index.ts\"\nimport { useRef, useState } from \"react\"\nimport type { Mutable } from \"utils/Mutable.ts\"\nimport { tryParseNumber } from \"utils/tryParseNumber.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { BatchAssetUploader } from \"web/lib/BatchAssetUploader.ts\"\nimport { toastProgress } from \"web/lib/toaster.ts\"\n\nconst TOAST_KEY = \"insert-random-collection-items\"\n\nexport function CollectionTools() {\n\tconst [selectedId, setSelectedId] = useState<MaybeNodeID>()\n\tconst [insertItemCount, setInsertItemCount] = useState<number>(50)\n\tconst inputRef = useRef<HTMLInputElement>(null)\n\tconst collectionNodes = useEngineState(\n\t\t() => {\n\t\t\t// FIXME If CMS Node will ever become shallow this code needs to be checked/updated\n\t\t\tconst node = getContentManagementNode(engine.tree)?.loaded\n\t\t\treturn node?.children ?? []\n\t\t},\n\t\t[],\n\t\tEngineChange.Tree,\n\t)\n\n\tconst selectedNode = collectionNodes.find(node => node.id === selectedId) ?? collectionNodes.at(0)\n\tif (!selectedNode) return null\n\n\treturn (\n\t\t<Stack direction=\"column\">\n\t\t\t<PopupButton>\n\t\t\t\t{collectionNodes.map(node => (\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tkey={node.id}\n\t\t\t\t\t\tselected={selectedNode.id === node.id}\n\t\t\t\t\t\ttitle={node.resolveValue(\"name\") ?? node.id}\n\t\t\t\t\t\tidentifier={node.id}\n\t\t\t\t\t\tonSelect={setSelectedId}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</PopupButton>\n\n\t\t\t<NumberInput value={insertItemCount} ref={inputRef} onChange={setInsertItemCount} min={0} step={10} />\n\n\t\t\t<Button\n\t\t\t\t// A bit ugly here, we use an inputRef in the onClick handler because NumberInput\n\t\t\t\t// won't have marked the value as \"final\" until the field is blurred. By using the\n\t\t\t\t// ref we can yank the current value from the input immediately. Under normal usage,\n\t\t\t\t// ie: when backed by the tree, this is not needed.\n\t\t\t\tonClick={() => insertRandomItems(selectedNode, tryParseNumber(inputRef.current?.value, true) ?? 0)}\n\t\t\t>\n\t\t\t\tInsert Random Items\n\t\t\t</Button>\n\t\t</Stack>\n\t)\n}\n\nasync function insertRandomItems(selectedNode: CollectionNode, itemCount: number) {\n\tif (!selectedNode) return\n\n\tawait toastProgress(\n\t\t{\n\t\t\tkey: TOAST_KEY,\n\t\t\tprogress: {\n\t\t\t\tvariant: \"progress\",\n\t\t\t\ttext: \"Inserting items\u2026\",\n\t\t\t},\n\t\t\tsuccess: {\n\t\t\t\tvariant: \"success\",\n\t\t\t\ttext: `Inserted ${itemCount} items`,\n\t\t\t},\n\t\t\terror: {\n\t\t\t\tvariant: \"error\",\n\t\t\t\ttext: \"Failed to insert items\",\n\t\t\t},\n\t\t},\n\t\tasync () => {\n\t\t\tconst { variables } = selectedNode\n\t\t\tconst slugVariable = variables.find(variable => variable.type === \"slug\")\n\n\t\t\tconst slugs = new Set<string>()\n\t\t\tif (slugVariable) {\n\t\t\t\tfor (const item of selectedNode.getUnsortedChildren()) {\n\t\t\t\t\tconst slug = item.getControlProp(slugVariable.id)\n\t\t\t\t\tif (slug && isString(slug.value)) slugs.add(slug.value)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst assetUploader = new BatchAssetUploader(engine, {\n\t\t\t\tsilent: true,\n\t\t\t})\n\n\t\t\tconst nodes = await Promise.all(\n\t\t\t\tArray.from({ length: itemCount }, async () => {\n\t\t\t\t\tconst node = CollectionItemNode.create()\n\n\t\t\t\t\tfor (const variable of variables) {\n\t\t\t\t\t\tif (variable.type === \"divider\") continue\n\n\t\t\t\t\t\tconst prop = await getRandomControlProp(variable, assetUploader, slugs)\n\t\t\t\t\t\tif (prop) node.setControlProp(variable.id, prop)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn node\n\t\t\t\t}),\n\t\t\t)\n\n\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\tfor (const node of nodes) {\n\t\t\t\t\tengine.tree.insertNode(node, selectedNode.id)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t)\n}\n\nasync function getRandomControlProp(\n\tvariable: VariableDefinition,\n\tassetUploader: BatchAssetUploader,\n\tslugs: Set<string>,\n): Promise<CollectionControlProp | undefined> {\n\tswitch (variable.type) {\n\t\tcase \"slug\": {\n\t\t\treturn {\n\t\t\t\ttype: ControlType.String,\n\t\t\t\tvalue: getRandomSlug(slugs),\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.Array: {\n\t\t\tconst numberOfItems = falso.randNumber({ min: variable.minCount ?? 1, max: variable.maxCount ?? 10 })\n\n\t\t\tconst value: Mutable<CollectionArrayControlPropValue> = []\n\n\t\t\tfor (let i = 0; i < numberOfItems; i++) {\n\t\t\t\tconst item: CollectionArrayControlPropValue[number] = {\n\t\t\t\t\tid: randomID(),\n\t\t\t\t\ttype: ControlType.Object,\n\t\t\t\t\tvalue: Object.fromEntries(\n\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\tvariable.itemVariables.map(async itemVariable => [\n\t\t\t\t\t\t\t\titemVariable.id,\n\t\t\t\t\t\t\t\tisVariableDefinition(itemVariable)\n\t\t\t\t\t\t\t\t\t? await getRandomControlProp(itemVariable, assetUploader, slugs)\n\t\t\t\t\t\t\t\t\t: itemVariable,\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t\tvalue.push(item)\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttype: ControlType.Array,\n\t\t\t\tvalue,\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.Boolean: {\n\t\t\treturn {\n\t\t\t\ttype: ControlType.Boolean,\n\t\t\t\tvalue: falso.randBoolean(),\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.Color: {\n\t\t\treturn {\n\t\t\t\ttype: ControlType.Color,\n\t\t\t\tvalue: falso.randRgb(),\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.CollectionReference: {\n\t\t\t// TODO: Implement\n\t\t\treturn undefined\n\t\t}\n\n\t\tcase ControlType.MultiCollectionReference: {\n\t\t\t// TODO: Implement\n\t\t\treturn undefined\n\t\t}\n\n\t\tcase ControlType.Date: {\n\t\t\treturn {\n\t\t\t\ttype: ControlType.Date,\n\t\t\t\tvalue: falso\n\t\t\t\t\t.randBetweenDate({\n\t\t\t\t\t\tfrom: new Date(\"1900-01-01\"),\n\t\t\t\t\t\tto: new Date(\"2100-01-01\"),\n\t\t\t\t\t})\n\t\t\t\t\t.toISOString(),\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.Enum: {\n\t\t\treturn {\n\t\t\t\ttype: ControlType.Enum,\n\t\t\t\tvalue: falso.rand(variable.cases).id,\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.File: {\n\t\t\t// TODO: Implement\n\t\t\treturn undefined\n\t\t}\n\n\t\tcase ControlType.Image: {\n\t\t\tconst imageUrl = falso.randImg({\n\t\t\t\twidth: 800,\n\t\t\t\theight: 600,\n\t\t\t})\n\n\t\t\tconst random = falso.randNumber()\n\n\t\t\tconst { filename, originalFilename } = await assetUploader.add(`${imageUrl}?${random}`)\n\n\t\t\treturn {\n\t\t\t\ttype: ControlType.Image,\n\t\t\t\tvalue: createAssetReferenceForImage({\n\t\t\t\t\tidentifier: filename,\n\t\t\t\t\tintrinsicSize: {\n\t\t\t\t\t\twidth: 800,\n\t\t\t\t\t\theight: 600,\n\t\t\t\t\t},\n\t\t\t\t\toriginalFilename,\n\t\t\t\t}),\n\t\t\t\talt: falso.randCatchPhrase(),\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.Link: {\n\t\t\treturn {\n\t\t\t\ttype: ControlType.Link,\n\t\t\t\tvalue: {\n\t\t\t\t\ttype: \"url\",\n\t\t\t\t\turl: falso.randUrl(),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.Number: {\n\t\t\treturn {\n\t\t\t\ttype: ControlType.Number,\n\t\t\t\tvalue: falso.randNumber({\n\t\t\t\t\tmin: variable.options?.min,\n\t\t\t\t\tmax: variable.options?.max,\n\t\t\t\t}),\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.RichText: {\n\t\t\tconst paragraphs = falso.randParagraph({\n\t\t\t\tlength: falso.randNumber({\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: 10,\n\t\t\t\t}),\n\t\t\t})\n\n\t\t\treturn {\n\t\t\t\ttype: ControlType.RichText,\n\t\t\t\tvalue: paragraphs.map(paragraph => `<p>${paragraph}</p>`).join(\"\"),\n\t\t\t}\n\t\t}\n\n\t\tcase ControlType.String: {\n\t\t\tconst fallbackMaxLength = variable.options?.displayTextArea ? 1000 : 100\n\t\t\tconst maxLength = variable.options?.maxLength ?? fallbackMaxLength\n\n\t\t\treturn {\n\t\t\t\ttype: ControlType.String,\n\t\t\t\tvalue: falso.randTextRange({\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: maxLength,\n\t\t\t\t}),\n\t\t\t}\n\t\t}\n\n\t\tcase \"controlReference\":\n\t\tcase \"nodePropertyControlReference\":\n\t\tcase ControlType.CustomCursor:\n\t\tcase ControlType.Cursor:\n\t\tcase ControlType.EventHandler:\n\t\tcase ControlType.Transition:\n\t\tcase ControlType.BoxShadow:\n\t\tcase ControlType.ScrollSectionRef:\n\t\tcase ControlType.Border:\n\t\tcase ControlType.BorderRadius:\n\t\tcase ControlType.Gap:\n\t\tcase ControlType.Padding:\n\t\tcase ControlType.TrackingId:\n\t\tcase ControlType.VectorSetItem:\n\t\tcase ControlType.LinkRelValues:\n\t\tcase ControlType.Location:\n\t\t\tthrow new Error(`Unsupported variable type: ${variable.type}`)\n\n\t\tdefault:\n\t\t\tassertNever(variable)\n\t}\n}\n\nfunction getRandomSlug(slugs: Set<string>) {\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst slug = falso.randSlug()\n\t\tif (slugs.has(slug)) continue\n\t\tslugs.add(slug)\n\t\treturn slug\n\t}\n}\n", "import { CheckBox, PopupButton, PopupButtonItem, Stack } from \"@framerjs/fresco\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport engine from \"document/engine.ts\"\nimport { couldCollapse } from \"document/models/CanvasTree/nodes/utils/couldCollapse.ts\"\nimport { withSizeDimensionType } from \"document/models/CanvasTree/traits/WithSizeDimensionType.ts\"\nimport { DimensionType } from \"library/render/types/Constraints.ts\"\nimport { useCallback, useEffect, useState } from \"react\"\n\nconst dimensionTypeLabels: Record<DimensionType, string> = {\n\t[DimensionType.FixedNumber]: \"FixedNumber\",\n\t[DimensionType.Percentage]: \"Percentage\",\n\t[DimensionType.Auto]: \"Auto\",\n\t[DimensionType.FractionOfFreeSpace]: \"FractionOfFreeSpace\",\n\t[DimensionType.Viewport]: \"Viewport\",\n\t[DimensionType.FitImage]: \"FitImage\",\n}\n\ntype OverrideValue = DimensionType | \"none\"\n\nexport function CouldCollapseTool() {\n\tconst [override, setOverride] = useState<OverrideValue>(DimensionType.Auto)\n\tconst [result, setResult] = useState<boolean | null>(null)\n\tconst [nodeId, setNodeId] = useState<string | null>(null)\n\tconst [error, setError] = useState<string>(\"Select a node\")\n\tconst [lockedNodeId, setLockedNodeId] = useState<string | null>(null)\n\n\tconst evaluate = useCallback(\n\t\t(currentOverride: OverrideValue) => {\n\t\t\tconst node = lockedNodeId ? engine.tree.getNode(lockedNodeId) : engine.stores.selectionStore.nodes[0]\n\t\t\tif (!node) {\n\t\t\t\tsetResult(null)\n\t\t\t\tsetNodeId(null)\n\t\t\t\tsetError(\"Select a node\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!withSizeDimensionType(node)) {\n\t\t\t\tsetResult(null)\n\t\t\t\tsetNodeId(node.id)\n\t\t\t\tsetError(\"Node doesn't have size dimension types\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst withValues = currentOverride !== \"none\" ? { heightType: currentOverride } : {}\n\t\t\tsetError(\"\")\n\t\t\tsetNodeId(node.id)\n\t\t\tsetResult(couldCollapse(node, withValues))\n\t\t},\n\t\t[lockedNodeId],\n\t)\n\n\tuseEffect(() => {\n\t\tif (lockedNodeId) return\n\n\t\tconst token = engine.scheduler.changes.observe(engine.stores.selectionStore, () => {\n\t\t\tevaluate(override)\n\t\t})\n\t\tevaluate(override)\n\t\treturn () => {\n\t\t\tengine.scheduler.changes.removeObserver(token)\n\t\t}\n\t}, [evaluate, override, lockedNodeId])\n\n\tuseEffect(() => {\n\t\tconst token = engine.scheduler.changes.observe(EngineChange.Tree, () => {\n\t\t\tevaluate(override)\n\t\t})\n\t\tevaluate(override)\n\t\treturn () => {\n\t\t\tengine.scheduler.changes.removeObserver(token)\n\t\t}\n\t}, [evaluate, override])\n\n\tconst handleOverrideChange = useCallback((identifier: string) => {\n\t\tconst next: OverrideValue = identifier === \"none\" ? \"none\" : (Number(identifier) as DimensionType)\n\t\tsetOverride(next)\n\t}, [])\n\n\tconst handleLockChange = useCallback((checked: boolean) => {\n\t\tsetLockedNodeId(checked ? (engine.stores.selectionStore.nodes[0]?.id ?? null) : null)\n\t}, [])\n\n\treturn (\n\t\t<Stack direction=\"column\">\n\t\t\t{(lockedNodeId || nodeId) && (\n\t\t\t\t// eslint-disable-next-line jsx-a11y/label-has-associated-control\n\t\t\t\t<label>\n\t\t\t\t\t<CheckBox value={!!lockedNodeId} onChange={handleLockChange} />\n\t\t\t\t\tLock to current node\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t{nodeId && (\n\t\t\t\t<div>\n\t\t\t\t\t<b>Node:</b> {nodeId}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{error ? (\n\t\t\t\t<div>{error}</div>\n\t\t\t) : (\n\t\t\t\tresult !== null && (\n\t\t\t\t\t<div style={result ? { color: \"red\", fontWeight: \"bold\" } : undefined}>couldCollapse: {String(result)}</div>\n\t\t\t\t)\n\t\t\t)}\n\t\t\t{(lockedNodeId || nodeId) && (\n\t\t\t\t<>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<b>heightType override:</b>\n\t\t\t\t\t</div>\n\t\t\t\t\t<PopupButton>\n\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\tidentifier=\"none\"\n\t\t\t\t\t\t\ttitle=\"Node default\"\n\t\t\t\t\t\t\tselected={override === \"none\"}\n\t\t\t\t\t\t\tonSelect={handleOverrideChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{Object.entries(dimensionTypeLabels).map(([value, label]) => (\n\t\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\t\t\tidentifier={value}\n\t\t\t\t\t\t\t\ttitle={label}\n\t\t\t\t\t\t\t\tselected={override === Number(value)}\n\t\t\t\t\t\t\t\tonSelect={handleOverrideChange}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</PopupButton>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Stack>\n\t)\n}\n", "import * as F from \"@ngneat/falso\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\n\ntype Callable = (() => unknown) | unknown\n\nexport let currentSeed: string = \"\"\n\nexport const setSeed = (seed: string) => {\n\tcurrentSeed = seed\n\tF.seed(seed)\n}\n\nsetSeed(F.randSlug())\n\nexport const random = {\n\tboolean: () => F.randBoolean(),\n\tnumber: () =>\n\t\tF.randNumber({\n\t\t\tmax: 1000,\n\t\t}),\n\tstring: () =>\n\t\tF.randTextRange({\n\t\t\tmin: 1,\n\t\t\tmax: 10,\n\t\t}),\n\tnull: () => null,\n\tsampleArray: F.rand,\n}\n\nclass Property {\n\tconstructor(\n\t\tpublic name: string,\n\t\tpublic getValue: () => unknown,\n\t) {}\n}\n\nconst PropertiesRegistry = new Map<string, Property>()\nconst NodesRegistry = new Map<typeof CanvasNode, Property[]>()\n\nexport const registerProperty = (name: string, ...fns: Callable[]) => {\n\tPropertiesRegistry.set(name, new Property(name, createCallAny(...fns)))\n}\n\nexport const hasNodesRegistered = () => NodesRegistry.size > 0\n\nexport const registerNodes = (nodes: (typeof CanvasNode)[], ...props: string[]) => {\n\tfor (const key of props) {\n\t\tfor (const Class of nodes) {\n\t\t\tconst prop = PropertiesRegistry.get(key)\n\t\t\tif (!prop) {\n\t\t\t\tthrow new Error(`Property ${key} not found`)\n\t\t\t}\n\t\t\tconst nodeProps = NodesRegistry.get(Class) ?? []\n\t\t\tif (nodeProps.length === 0) {\n\t\t\t\tNodesRegistry.set(Class, nodeProps)\n\t\t\t}\n\t\t\tnodeProps.push(prop)\n\t\t}\n\t}\n}\n\nexport function setSomeOfValues(key: typeof CanvasNode): Record<string, unknown> {\n\tconst props = NodesRegistry.get(key)\n\tif (!props) {\n\t\tthrow new Error(`Node ${key} not found`)\n\t}\n\tconst obj: Record<string, unknown> = {}\n\tfor (const prop of props) {\n\t\t// only set 20% of properties\n\t\tif (F.randChanceBoolean({ chanceTrue: 0.2 })) continue\n\n\t\tconst val = prop.getValue()\n\n\t\t// prefer to not set null or undefined\n\t\tif ((val === undefined || val === null) && F.randChanceBoolean({ chanceTrue: 0.3 })) continue\n\n\t\tobj[prop.name] = val\n\t}\n\treturn obj\n}\n\nexport function randomNode(): CanvasNode | undefined {\n\tconst keys = Array.from(NodesRegistry.keys())\n\tif (keys.length === 0) {\n\t\tthrow new Error(\"No nodes registered\")\n\t}\n\tconst Class = F.rand(keys)\n\tconst edits = setSomeOfValues(Class)\n\treturn new Class(edits)\n}\n\nfunction createCallAny(...fns: Callable[]) {\n\treturn () => {\n\t\tconst fn = F.rand(fns)\n\t\treturn typeof fn === \"function\" ? fn() : fn\n\t}\n}\n", "import \"../generated/fuzzer/initFuzzer.ts\"\n\nimport { getLogger } from \"@framerjs/shared\"\nimport type { CanvasNode } from \"document/models/CanvasTree/index.ts\"\nimport { currentSeed, hasNodesRegistered, randomNode, setSomeOfValues } from \"./fuzzer/random.ts\"\n\nexport interface FuzzerApi {\n\tmaybeCreateEdits(node: CanvasNode): Record<string, unknown> | undefined\n\tmaybeEditNode(node: CanvasNode): CanvasNode | undefined\n\tmaybeRandomNode(): CanvasNode | undefined\n\tseed: string\n}\n\nconst logger = getLogger(\"tree-fuzzer\")\n\nexport const canUseGeneratedFunctions = hasNodesRegistered()\nclass TreeFuzzer implements FuzzerApi {\n\tget seed() {\n\t\treturn currentSeed\n\t}\n\tmaybeCreateEdits(node: CanvasNode) {\n\t\tif (!canUseGeneratedFunctions) {\n\t\t\tlogger.errorOncePerMinute(\"Generated functions are not available\")\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst edit = setSomeOfValues(node.constructor as typeof CanvasNode)\n\t\tif (edit) {\n\t\t\treturn edit\n\t\t}\n\t}\n\n\tmaybeEditNode(node: CanvasNode) {\n\t\tif (!canUseGeneratedFunctions) {\n\t\t\tlogger.errorOncePerMinute(\"Generated functions are not available\")\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst edit = setSomeOfValues(node.constructor as typeof CanvasNode)\n\t\tif (edit) {\n\t\t\tlogger.info(\"edited node\", node.__class, node.id)\n\t\t\tnode.assign(edit)\n\t\t}\n\t\treturn node\n\t}\n\n\tmaybeRandomNode() {\n\t\tif (!canUseGeneratedFunctions) {\n\t\t\tlogger.errorOncePerMinute(\"Generated functions are not available\")\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst node = randomNode()\n\t\tif (node) {\n\t\t\tlogger.info(\"created random node\", node.toJS())\n\t\t}\n\t\treturn node\n\t}\n}\n\nexport const treeFuzzer = new TreeFuzzer() as FuzzerApi\n", "import { treeFuzzer } from \"../document/generated-tree-library/src/fuzzer.ts\"\nimport { Fuzzer } from \"./fuzzer.ts\"\n\nexport class GeneratedTreeFuzzer extends Fuzzer {\n\toverride probabilities = GeneratedTreeFuzzer.getDefaultProbabilities()\n\n\tstatic override getDefaultProbabilities() {\n\t\treturn {\n\t\t\tdeletePage: 0.05,\n\t\t\taddPage: 0.05,\n\t\t\tchangePage: 0.1,\n\t\t\tdeleteNode: 0.1,\n\t\t\taddNode: 0.4,\n\t\t\tmoveNode: 0.2,\n\t\t\teditNode: 1,\n\t\t}\n\t}\n\n\toverride randomNode() {\n\t\treturn treeFuzzer.maybeRandomNode()\n\t}\n\n\toverride editNode() {\n\t\tconst target = this.randomTarget()\n\t\tif (!target) return\n\n\t\tconst newFuzzerEdit = treeFuzzer.maybeCreateEdits(target)\n\n\t\tif (newFuzzerEdit) {\n\t\t\tthis.recording.push(`edit ${target.id}`)\n\t\t\ttarget.set(newFuzzerEdit)\n\t\t}\n\t}\n}\n", "import { Button, PopupButton, PopupButtonItem, Slider, Stack } from \"@framerjs/fresco\"\nimport { assertNever } from \"@framerjs/shared\"\nimport { Fuzzer } from \"debug-utils/fuzzer.ts\"\nimport { GeneratedTreeFuzzer } from \"debug-utils/generatedTreeFuzzer.ts\"\nimport engine from \"document/engine.ts\"\nimport React from \"react\"\nimport { useLocalStorageState } from \"./useLocalStorageState.tsx\"\n\nconst fuzzerNodeIdPrefix = \"fuzzer_\"\nconst intervals = [\"10ms\", \"50ms\", \"1s\", \"10s\", \"1m\", \"10m\"]\nconst intervalMillis = [10, 50, 1000, 10 * 1000, 60 * 1000, 10 * 60 * 1000]\n\nenum FuzzerType {\n\tSimpleFuzzer,\n\tMover,\n\tTreeFuzzer,\n}\n\ninterface State {\n\ttype: FuzzerType\n\tinterval: string\n}\n\nconst globalFuzzer: {\n\t[FuzzerType.SimpleFuzzer]?: Fuzzer\n\t[FuzzerType.Mover]?: Fuzzer\n\t[FuzzerType.TreeFuzzer]?: GeneratedTreeFuzzer\n} = {}\n\nfunction ProbabilitySlider(props: { value: number; onChange: (val: number) => void }) {\n\treturn <Slider value={props.value} min={0} step={0.05} max={1} onChange={props.onChange} />\n}\n\nfunction Probabilities(props: { children: React.ReactNode }) {\n\tconst [isShown, setIsShown] = React.useState(false)\n\treturn (\n\t\t<>\n\t\t\t<Button onClick={() => setIsShown(!isShown)}>{isShown ? \"Hide\" : \"Show\"} Probabilities</Button>\n\t\t\t{isShown && props.children}\n\t\t</>\n\t)\n}\n\nfunction getInitialProbabilitiesForType(type: State[\"type\"]) {\n\tswitch (type) {\n\t\tcase FuzzerType.SimpleFuzzer:\n\t\tcase FuzzerType.Mover:\n\t\t\treturn Fuzzer.getDefaultProbabilities()\n\t\tcase FuzzerType.TreeFuzzer:\n\t\t\treturn GeneratedTreeFuzzer.getDefaultProbabilities()\n\t\tdefault:\n\t\t\tassertNever(type)\n\t}\n}\n\nexport function FuzzerControls() {\n\tconst [state, setState] = useLocalStorageState<State>(\n\t\t\"debugbar.fuzzer\",\n\t\t{\n\t\t\tinterval: intervals[1],\n\t\t\ttype: FuzzerType.SimpleFuzzer,\n\t\t},\n\t\t(key: keyof State, value: unknown) => {\n\t\t\tif (key === \"interval\") {\n\t\t\t\tconst interval = String(value)\n\t\t\t\treturn intervals.indexOf(interval) >= 0 ? interval : intervals[1]\n\t\t\t}\n\t\t\tif (key === \"type\") {\n\t\t\t\tswitch (value) {\n\t\t\t\t\tcase FuzzerType.SimpleFuzzer:\n\t\t\t\t\tcase FuzzerType.Mover:\n\t\t\t\t\tcase FuzzerType.TreeFuzzer:\n\t\t\t\t\t\treturn value\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn FuzzerType.SimpleFuzzer\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t)\n\tconst [activeProbabilities, setActiveProbabilities] = React.useState(() => getInitialProbabilitiesForType(state.type))\n\n\tconst handleTypeChange = React.useCallback(\n\t\t(type: FuzzerType) => {\n\t\t\tsetState({ ...state, type })\n\t\t\tsetActiveProbabilities(getInitialProbabilitiesForType(type))\n\t\t},\n\t\t[state, setState],\n\t)\n\n\tconst handleIntervalChange = React.useCallback(\n\t\t(e: string) => {\n\t\t\tconst index = intervals.indexOf(e)\n\t\t\tif (index < 0) return\n\t\t\tsetState({ ...state, interval: intervals[index] })\n\t\t},\n\t\t[state, setState],\n\t)\n\n\tconst handleStart = React.useCallback(() => {\n\t\tif (globalFuzzer[state.type]) return\n\t\tconst interval = intervalMillis[intervals.indexOf(state.interval)]\n\t\tlet fuzzer: Fuzzer\n\t\tlet start = () => {}\n\t\tswitch (state.type) {\n\t\t\tcase FuzzerType.SimpleFuzzer:\n\t\t\t\tfuzzer = new Fuzzer(engine, fuzzerNodeIdPrefix)\n\t\t\t\tstart = () => fuzzer.start(interval)\n\t\t\t\tbreak\n\t\t\tcase FuzzerType.Mover:\n\t\t\t\tfuzzer = new Fuzzer(engine, fuzzerNodeIdPrefix)\n\t\t\t\tstart = () => fuzzer.startMoving(engine.stores.selectionStore.ids, interval)\n\t\t\t\tbreak\n\t\t\tcase FuzzerType.TreeFuzzer:\n\t\t\t\tfuzzer = new GeneratedTreeFuzzer(engine, fuzzerNodeIdPrefix)\n\t\t\t\tstart = () => fuzzer.start(interval)\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tassertNever(state.type)\n\t\t}\n\t\tObject.assign(fuzzer.probabilities, activeProbabilities)\n\t\tglobalFuzzer[state.type] = fuzzer\n\t\tstart()\n\t}, [activeProbabilities, state.interval, state.type])\n\n\tconst handleStop = React.useCallback(() => {\n\t\tglobalFuzzer[state.type]?.stop()\n\t\tdelete globalFuzzer[state.type]\n\t}, [state.type])\n\n\tconst handleStopAll = () => {\n\t\tfor (const type in globalFuzzer) {\n\t\t\tglobalFuzzer[type].stop()\n\t\t\tdelete globalFuzzer[type]\n\t\t}\n\t}\n\n\tconst handleDeleteFuzzerNodes = React.useCallback(() => {\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tfor (const n of engine.tree.root.walk()) {\n\t\t\t\tif (n.id.startsWith(fuzzerNodeIdPrefix)) {\n\t\t\t\t\tengine.deleteNode(n.id)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}, [])\n\n\tconst selectedFuzzer = globalFuzzer[state.type]\n\n\treturn (\n\t\t<Stack direction=\"column\">\n\t\t\t<Stack direction=\"row\">\n\t\t\t\t<PopupButton>\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tidentifier={FuzzerType.SimpleFuzzer}\n\t\t\t\t\t\tselected={state.type === FuzzerType.SimpleFuzzer}\n\t\t\t\t\t\tonSelect={handleTypeChange}\n\t\t\t\t\t\ttitle=\"Simple Random Edits\"\n\t\t\t\t\t/>\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tidentifier={FuzzerType.Mover}\n\t\t\t\t\t\tselected={state.type === FuzzerType.Mover}\n\t\t\t\t\t\tonSelect={handleTypeChange}\n\t\t\t\t\t\ttitle=\"Move Selected Nodes\"\n\t\t\t\t\t/>\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tidentifier={FuzzerType.TreeFuzzer}\n\t\t\t\t\t\tselected={state.type === FuzzerType.TreeFuzzer}\n\t\t\t\t\t\tonSelect={handleTypeChange}\n\t\t\t\t\t\ttitle=\"Edit all Node Properties\"\n\t\t\t\t\t/>\n\t\t\t\t</PopupButton>\n\t\t\t\t<PopupButton wrapperStyle={{ width: 100 }}>\n\t\t\t\t\t{intervals.map(e => (\n\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\tkey={e}\n\t\t\t\t\t\t\tselected={state.interval === e}\n\t\t\t\t\t\t\ttitle={e}\n\t\t\t\t\t\t\tidentifier={e}\n\t\t\t\t\t\t\tonSelect={handleIntervalChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</PopupButton>\n\t\t\t</Stack>\n\t\t\t<Button onClick={selectedFuzzer ? handleStop : handleStart}>{selectedFuzzer ? \"Stop\" : \"Start\"}</Button>\n\t\t\t{Object.keys(globalFuzzer).length > 1 && <Button onClick={handleStopAll}>Stop All</Button>}\n\t\t\t<Button onClick={handleDeleteFuzzerNodes}>Delete All Fuzzer Nodes</Button>\n\n\t\t\t<Probabilities>\n\t\t\t\t<Stack direction=\"column\">\n\t\t\t\t\t{Object.keys(activeProbabilities).map((key: keyof typeof activeProbabilities) => (\n\t\t\t\t\t\t// biome-ignore lint/a11y/noLabelWithoutControl: the control is inside the label\n\t\t\t\t\t\t<label key={key}>\n\t\t\t\t\t\t\t<Stack>\n\t\t\t\t\t\t\t\t<Stack justifyContent=\"space-between\" direction=\"row\">\n\t\t\t\t\t\t\t\t\t{key}\n\t\t\t\t\t\t\t\t\t<span>{activeProbabilities[key]}</span>\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<ProbabilitySlider\n\t\t\t\t\t\t\t\t\tvalue={activeProbabilities[key]}\n\t\t\t\t\t\t\t\t\tonChange={val => {\n\t\t\t\t\t\t\t\t\t\tsetActiveProbabilities(prev => ({ ...prev, [key]: val }))\n\t\t\t\t\t\t\t\t\t\tif (!selectedFuzzer) return\n\t\t\t\t\t\t\t\t\t\tselectedFuzzer.probabilities[key] = val\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t</Probabilities>\n\t\t</Stack>\n\t)\n}\n", "import { Button, CheckBox, Stack } from \"@framerjs/fresco\"\nimport engine from \"document/engine.ts\"\nimport type { DocumentLoader } from \"document/loader/DocumentLoader.ts\"\nimport React from \"react\"\nimport { useLocalStorageState } from \"./useLocalStorageState.tsx\"\n\ninterface State {\n\tloader: DocumentLoader | undefined\n\tpauseOnLoad: boolean\n\tdidPauseOnLoad: boolean\n\tloadingPromise: Promise<void> | null\n}\n\nexport function LoaderControls() {\n\tconst [_, setSteps] = React.useState(0)\n\tconst [pauseOnLoad, setPauseOnLoad] = useLocalStorageState(\"debugbar.pauseLoaderOnLoad\", false)\n\tconst [debugGlobalLoading, setDebugGlobalLoading] = useLocalStorageState(\"debugbar.debugGlobalLoading\", false)\n\tconst state = React.useRef<State>({\n\t\tloader: undefined,\n\t\tpauseOnLoad: false,\n\t\tdidPauseOnLoad: false,\n\t\tloadingPromise: null,\n\t})\n\tstate.current.pauseOnLoad = pauseOnLoad\n\n\tconst loader = engine.remoteDocument?.loader\n\n\tif (state.current.loader !== loader) {\n\t\tif (state.current.loader) {\n\t\t\tstate.current.loader.scheduler.debugStepListener = undefined\n\t\t\tstate.current.loader = undefined\n\t\t}\n\n\t\tif (loader) {\n\t\t\tstate.current.loader = loader\n\t\t\tstate.current.didPauseOnLoad = false\n\n\t\t\tloader.scheduler.debugStepListener = () => {\n\t\t\t\tconst { didPauseOnLoad, pauseOnLoad } = state.current\n\t\t\t\tconst scopesToLoad = loader.numberOfScopesToLoad()\n\t\t\t\tconst canPause = loader.loadedFirstScope && scopesToLoad > 0\n\n\t\t\t\tif (canPause && pauseOnLoad && !didPauseOnLoad) {\n\t\t\t\t\tstate.current.didPauseOnLoad = true\n\t\t\t\t\tloader.debugPause()\n\t\t\t\t}\n\t\t\t\tsetSteps(steps => steps + 1)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst pause = () => {\n\t\tstate.current.didPauseOnLoad = true\n\t\tstate.current.loader?.debugPause()\n\t\tsetSteps(steps => steps + 1)\n\t}\n\n\tconst step = () => {\n\t\tstate.current.didPauseOnLoad = true\n\t\tvoid state.current.loader?.scheduler.debugResumeOneStep()\n\t\tsetSteps(steps => steps + 1)\n\t}\n\n\tconst resume = () => {\n\t\tstate.current.didPauseOnLoad = true\n\t\tvoid state.current.loader?.debugResume()\n\t\tsetSteps(steps => steps + 1)\n\t}\n\n\tconst loadNextScope = async () => {\n\t\t// Wait for any previous load to complete\n\t\tif (state.current.loadingPromise) {\n\t\t\tawait state.current.loadingPromise\n\t\t}\n\n\t\tconst currentLoader = state.current.loader\n\t\tif (!currentLoader) return\n\n\t\tstate.current.didPauseOnLoad = true\n\t\tconst scopesBeforeLoad = currentLoader.numberOfScopesToLoad()\n\n\t\t// Create a promise for this load operation\n\t\tconst promise = (async () => {\n\t\t\twhile (\n\t\t\t\tstate.current.loader === currentLoader &&\n\t\t\t\tcurrentLoader.numberOfScopesToLoad() === scopesBeforeLoad &&\n\t\t\t\tcurrentLoader.isDebugPaused()\n\t\t\t) {\n\t\t\t\tcurrentLoader.scheduler.debugResumeOneStep()\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tsetTimeout(resolve, 0)\n\t\t\t\t})\n\t\t\t}\n\t\t\tsetSteps(steps => steps + 1)\n\t\t})()\n\n\t\tstate.current.loadingPromise = promise\n\n\t\tvoid promise.finally(() => {\n\t\t\tif (state.current.loadingPromise === promise) {\n\t\t\t\tstate.current.loadingPromise = null\n\t\t\t}\n\t\t})\n\t}\n\n\tconst canPause = !!loader && !loader.isDebugPaused()\n\tconst canStep = !!loader && loader.isDebugPaused()\n\tconst canResume = !!loader && !loader.scheduler.isDone() && loader.isDebugPaused()\n\tconst canLoadNextScope = !!loader && loader.isDebugPaused() && loader.numberOfScopesToLoad() > 0\n\n\treturn (\n\t\t<Stack direction=\"column\">\n\t\t\tscopes to load: {loader?.numberOfScopesToLoad() ?? 0}\n\t\t\t<br />\n\t\t\tmodules: {engine.scheduler.canvasModulesRuntimePhase}\n\t\t\t<Stack direction=\"row\">\n\t\t\t\t<Button onClick={pause} enabled={canPause}>\n\t\t\t\t\tPause\n\t\t\t\t</Button>\n\t\t\t\t<Button onClick={resume} enabled={canResume}>\n\t\t\t\t\tResume\n\t\t\t\t</Button>\n\t\t\t\t<Button onClick={step} enabled={canStep}>\n\t\t\t\t\tStep\n\t\t\t\t</Button>\n\t\t\t\t<Button onClick={loadNextScope} enabled={canLoadNextScope}>\n\t\t\t\t\tNext Scope\n\t\t\t\t</Button>\n\t\t\t</Stack>\n\t\t\t<label>\n\t\t\t\t<CheckBox\n\t\t\t\t\tvalue={pauseOnLoad}\n\t\t\t\t\tonChange={checked => {\n\t\t\t\t\t\tsetPauseOnLoad(checked)\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\tPause On Load\n\t\t\t</label>\n\t\t\t<label>\n\t\t\t\t<CheckBox\n\t\t\t\t\tvalue={debugGlobalLoading}\n\t\t\t\t\tonChange={checked => {\n\t\t\t\t\t\tsetDebugGlobalLoading(checked)\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\tDebug Global Loading\n\t\t\t</label>\n\t\t</Stack>\n\t)\n}\n", "import { Button, NumberInputWithTicker, Stack } from \"@framerjs/fresco\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport {\n\tgetWebPageModulesToRegenerate,\n\tregenerateModulesForLayoutTemplateFlowEffect,\n} from \"document/components/chrome/properties/utils/regenerateModulesForLayoutTemplateFlowEffect.ts\"\nimport engine from \"document/engine.ts\"\nimport { ERROR_LIST_NODE_ID, ErrorListNode } from \"document/models/CanvasTree/nodes/ErrorListNode.ts\"\nimport { ErrorNode, ErrorNodeReason, ErrorNodeType } from \"document/models/CanvasTree/nodes/ErrorNode.ts\"\nimport { isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport { tryParseNumber } from \"utils/tryParseNumber.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\n\n/**\n * Tool for adding recoverable errors to web pages with a configurable limit.\n * This allows testing the recovery progress indicator during publish.\n */\nexport function RecoverableErrorsTool() {\n\tconst existingPageCount = useEngineState(\n\t\t() => engine.tree.root.children.filter(isWebPageNode).length,\n\t\t[],\n\t\tEngineChange.Tree,\n\t)\n\tconst [errorCountToAdd, setErrorCountToAdd] = useState(existingPageCount)\n\tconst errorCountInputRef = useRef<HTMLInputElement>(null)\n\n\tconst [isRegenerating, setIsRegenerating] = useState(false)\n\tconst [moduleLimit, setModuleLimit] = useState(0)\n\tconst moduleLimitInputRef = useRef<HTMLInputElement>(null)\n\n\tuseEffect(() => {\n\t\t// eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n\t\tsetErrorCountToAdd(existingPageCount)\n\t}, [existingPageCount])\n\n\tconst handleAddErrors = useCallback(() => {\n\t\t// Read the current input value directly to get the latest value even before blur\n\t\tconst inputValue = tryParseNumber(errorCountInputRef.current?.value, true)\n\t\tif (inputValue === undefined) return\n\n\t\tconst clampedValue = Math.max(1, Math.min(existingPageCount, inputValue))\n\t\taddRecoverableErrorsToWebPages(clampedValue)\n\t}, [existingPageCount])\n\n\tconst handleRegenerateFlowEffectModules = useCallback(async () => {\n\t\tconst { stats } = getWebPageModulesToRegenerate(engine.stores.modulesStore, engine.stores.treeStore)\n\n\t\tif (stats.modulesToRegenerate === 0) {\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"success\",\n\t\t\t\tkey: \"flow-effect-no-modules\",\n\t\t\t\ttext: `No modules need Flow Effect regeneration. ${stats.totalModules} module(s) already have the annotation.`,\n\t\t\t\ticon: \"success\",\n\t\t\t\tduration: 5000,\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Read the current input value directly to get the latest value even before blur\n\t\tconst moduleLimitInputValue = tryParseNumber(moduleLimitInputRef.current?.value, true)\n\t\tconst limit =\n\t\t\tmoduleLimitInputValue !== undefined\n\t\t\t\t? Math.max(1, Math.min(stats.modulesToRegenerate, moduleLimitInputValue))\n\t\t\t\t: undefined\n\n\t\tconst count = limit ?? stats.modulesToRegenerate\n\n\t\tsetIsRegenerating(true)\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t\tkey: \"flow-effect-regenerating\",\n\t\t\ttext: `Regenerating ${count} of ${stats.modulesToRegenerate} module(s) for Flow Effect...`,\n\t\t\ticon: \"reconnecting\",\n\t\t\tduration: 3000,\n\t\t})\n\n\t\ttry {\n\t\t\tawait regenerateModulesForLayoutTemplateFlowEffect(engine.stores, { limit })\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"success\",\n\t\t\t\tkey: \"flow-effect-complete\",\n\t\t\t\ttext: `Flow Effect regeneration complete. ${count} module(s) processed.`,\n\t\t\t\ticon: \"success\",\n\t\t\t\tduration: 5000,\n\t\t\t})\n\t\t} finally {\n\t\t\tsetIsRegenerating(false)\n\t\t}\n\t}, [])\n\n\tconst flowEffectStats = useEngineState(\n\t\t() => getWebPageModulesToRegenerate(engine.stores.modulesStore, engine.stores.treeStore).stats,\n\t\t[],\n\t\t[EngineChange.Tree, EngineChange.ActiveBundle],\n\t)\n\n\tuseEffect(() => {\n\t\t// eslint-disable-next-line react-you-might-not-need-an-effect/no-event-handler\n\t\tif (flowEffectStats.modulesToRegenerate < moduleLimit || moduleLimit === 0) {\n\t\t\t// eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n\t\t\tsetModuleLimit(flowEffectStats.modulesToRegenerate)\n\t\t}\n\t}, [flowEffectStats.modulesToRegenerate, moduleLimit])\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={12}>\n\t\t\t<Stack>\n\t\t\t\t<NumberInputWithTicker\n\t\t\t\t\tref={errorCountInputRef}\n\t\t\t\t\tvalue={errorCountToAdd}\n\t\t\t\t\tonChange={setErrorCountToAdd}\n\t\t\t\t\tmin={1}\n\t\t\t\t\tmax={existingPageCount}\n\t\t\t\t\tlabelShort=\"Pages\"\n\t\t\t\t/>\n\t\t\t\t<Button onClick={handleAddErrors}>Add Errors</Button>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"column\" gap={4}>\n\t\t\t\t<div style={{ fontWeight: 500 }}>Layout Template Flow Effect</div>\n\t\t\t\t<div style={{ opacity: 0.6, fontSize: 11 }}>\n\t\t\t\t\t{flowEffectStats.modulesToRegenerate} of {flowEffectStats.totalModules} module(s) need regeneration\n\t\t\t\t</div>\n\t\t\t\t<Stack>\n\t\t\t\t\t<NumberInputWithTicker\n\t\t\t\t\t\tref={moduleLimitInputRef}\n\t\t\t\t\t\tvalue={moduleLimit}\n\t\t\t\t\t\tonChange={setModuleLimit}\n\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\tmax={flowEffectStats.modulesToRegenerate}\n\t\t\t\t\t\tlabelShort=\"Modules\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Button onClick={handleRegenerateFlowEffectModules} enabled={!isRegenerating}>\n\t\t\t\t\t\t{isRegenerating ? \"Regenerating...\" : \"Regenerate Modules\"}\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Stack>\n\t)\n}\n\nfunction addRecoverableErrorsToWebPages(limit: number) {\n\tengine.scheduler.processWhenReady(() => {\n\t\tconst tree = engine.tree\n\t\tconst listNode = tree.get(ERROR_LIST_NODE_ID)\n\t\tif (!listNode) {\n\t\t\tErrorListNode.ensure(tree)\n\t\t}\n\n\t\tlet errorCount = 0\n\t\tfor (const node of tree.root.children) {\n\t\t\tif (!isWebPageNode(node)) continue\n\t\t\tif (errorCount >= limit) break\n\n\t\t\ttree.insertNode(\n\t\t\t\tnew ErrorNode({\n\t\t\t\t\ttype: ErrorNodeType.CodeGeneration,\n\t\t\t\t\tscopeId: node.id,\n\t\t\t\t\tsourceNodeId: node.id,\n\t\t\t\t\treason: ErrorNodeReason.FitImageRegenerationRequired,\n\t\t\t\t}),\n\t\t\t\tERROR_LIST_NODE_ID,\n\t\t\t)\n\t\t\terrorCount++\n\t\t}\n\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t\tkey: \"added-recoverable-errors\",\n\t\t\ttext: `Added ${errorCount} recoverable error${errorCount === 1 ? \"\" : \"s\"} to web pages. Click Publish to test recovery progress.`,\n\t\t\ticon: \"warning\",\n\t\t\tduration: 5000,\n\t\t})\n\t})\n}\n", "import { Button, CheckBox, NumberInput, Stack } from \"@framerjs/fresco\"\nimport { fonts } from \"@framerjs/fresco/tokens\"\nimport engine from \"document/engine.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport type { ReactNode } from \"react\"\nimport { useState } from \"react\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport { getRouteSegmentNodeByWebPageId } from \"../Pages/utils/getRouteSegmentNodeByWebPageId.ts\"\nimport { createCollection } from \"../contentManagement/utils/createCollection.ts\"\nimport { BYTES_PER_UNIT } from \"../siteSettings/Usage/constants.ts\"\n\nfunction LimitInput({\n\tvalue,\n\tonChange,\n\tfallback,\n}: {\n\tvalue: number | null\n\tonChange: (next: number | null) => void\n\tfallback: number\n}) {\n\tconst isUnlimited = value === null\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t<CheckBox value={isUnlimited} onChange={unlimited => onChange(unlimited ? null : fallback)} />\n\t\t\t\t<div>Unlimited</div>\n\t\t\t</Stack>\n\t\t\t{!isUnlimited && <NumberInput value={value} onChange={onChange} />}\n\t\t</>\n\t)\n}\n\nfunction SubSection({ title, children }: { title: string; children: ReactNode }) {\n\treturn (\n\t\t<Stack direction=\"column\" gap={8}>\n\t\t\t<div style={{ fontWeight: fonts.weight.headingBold }}>{title}</div>\n\t\t\t{children}\n\t\t</Stack>\n\t)\n}\n\nfunction LabeledInput({ label, value, onChange }: { label: string; value: number; onChange: (next: number) => void }) {\n\treturn (\n\t\t<Stack direction=\"column\" gap={4}>\n\t\t\t<div>{label}</div>\n\t\t\t<NumberInput value={value} onChange={onChange} />\n\t\t</Stack>\n\t)\n}\n\nfunction InputColumns({ children }: { children: ReactNode }) {\n\treturn <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 8 }}>{children}</div>\n}\n\nexport function ConvertTools() {\n\tconst usage = engine.stores.projectStore.useState(state => state.usageData?.advancedAnalytics)\n\tconst trackingEventsLimit =\n\t\tengine.stores.projectStore.useState(state => state.resourceLimits?.trackingEventsLimit) || null\n\tconst project = engine.stores.projectStore.useState(state => state.project) || null\n\n\tconst [currentMonth, setCurrentMonth] = useState(usage?.currentMonth ?? 0)\n\tconst [previousMonth, setPreviousMonth] = useState(usage?.previousMonth ?? 0)\n\tconst [limit, setLimit] = useState<number | null>(trackingEventsLimit)\n\n\tconst handleSetUsage = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tusage: {\n\t\t\t\tadvancedAnalytics: { currentMonth, previousMonth },\n\t\t\t\taiCredits: project.usage?.aiCredits,\n\t\t\t\tbandwidth: project.usage?.bandwidth,\n\t\t\t},\n\t\t})\n\t}, [project, currentMonth, previousMonth])\n\n\tconst handleSetLimit = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tsettings: {\n\t\t\t\t...project.settings,\n\t\t\t\tresourceLimits: { ...project.settings.resourceLimits, trackingEventsLimit: limit },\n\t\t\t},\n\t\t})\n\t}, [project, limit])\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={12}>\n\t\t\t<SubSection title=\"Usage\">\n\t\t\t\t<InputColumns>\n\t\t\t\t\t<LabeledInput label=\"Current Month (events)\" value={currentMonth} onChange={setCurrentMonth} />\n\t\t\t\t\t<LabeledInput label=\"Past Month (events)\" value={previousMonth} onChange={setPreviousMonth} />\n\t\t\t\t</InputColumns>\n\t\t\t\t<Button onClick={handleSetUsage}>Set Convert Usage</Button>\n\t\t\t</SubSection>\n\t\t\t<SubSection title=\"Limit\">\n\t\t\t\t<div>Tracking Events Limit</div>\n\t\t\t\t<LimitInput value={limit} onChange={setLimit} fallback={10000} />\n\t\t\t\t<Button onClick={handleSetLimit}>Set Convert Limit</Button>\n\t\t\t</SubSection>\n\t\t</Stack>\n\t)\n}\n\nexport function BandwidthTools() {\n\tconst bandwidthUsage = engine.stores.projectStore.useState(state => state.usageData?.bandwidth)\n\tconst bandwidthLimit = engine.stores.projectStore.useState(state => state.resourceLimits?.bandwidthInGB) || null\n\tconst project = engine.stores.projectStore.useState(state => state.project) || null\n\n\tconst [currentMonth, setCurrentMonth] = useState(\n\t\tbandwidthUsage?.currentMonth ? bandwidthUsage.currentMonth / BYTES_PER_UNIT.GB : 0,\n\t)\n\tconst [previousMonth, setPreviousMonth] = useState(\n\t\tbandwidthUsage?.previousMonth ? bandwidthUsage.previousMonth / BYTES_PER_UNIT.GB : 0,\n\t)\n\tconst [twoMonthsAgo, setTwoMonthsAgo] = useState(\n\t\tbandwidthUsage?.twoMonthsAgo ? bandwidthUsage.twoMonthsAgo / BYTES_PER_UNIT.GB : 0,\n\t)\n\tconst [limitGB, setLimitGB] = useState<number | null>(bandwidthLimit)\n\tconst isUnlimited = limitGB === null\n\n\tconst handleSetUsage = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tusage: {\n\t\t\t\tbandwidth: {\n\t\t\t\t\tcurrentMonth: currentMonth * BYTES_PER_UNIT.GB,\n\t\t\t\t\tpreviousMonth: previousMonth * BYTES_PER_UNIT.GB,\n\t\t\t\t\ttwoMonthsAgo: twoMonthsAgo * BYTES_PER_UNIT.GB,\n\t\t\t\t},\n\t\t\t\taiCredits: project.usage?.aiCredits,\n\t\t\t\tadvancedAnalytics: project.usage?.advancedAnalytics,\n\t\t\t},\n\t\t})\n\t}, [project, currentMonth, previousMonth, twoMonthsAgo])\n\n\tconst handleSetLimit = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tsettings: {\n\t\t\t\t...project.settings,\n\t\t\t\tresourceLimits: { ...project.settings.resourceLimits, bandwidthInGB: limitGB },\n\t\t\t},\n\t\t})\n\t}, [project, limitGB])\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={12}>\n\t\t\t<SubSection title=\"Usage\">\n\t\t\t\t<div>Current Month (GB)</div>\n\t\t\t\t<NumberInput value={currentMonth} onChange={setCurrentMonth} />\n\t\t\t\t<div>Past Month (GB)</div>\n\t\t\t\t<NumberInput value={previousMonth} onChange={setPreviousMonth} />\n\t\t\t\t<div>Two Months Ago (GB)</div>\n\t\t\t\t<NumberInput value={twoMonthsAgo} onChange={setTwoMonthsAgo} />\n\t\t\t\t<Button onClick={handleSetUsage}>Set Bandwidth Usage</Button>\n\t\t\t</SubSection>\n\t\t\t<SubSection title=\"Limit\">\n\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t<CheckBox value={isUnlimited} onChange={unlimited => setLimitGB(unlimited ? null : 500)} />\n\t\t\t\t\t<div>Unlimited Bandwidth</div>\n\t\t\t\t</Stack>\n\t\t\t\t{!isUnlimited && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<div>Bandwidth Limit (GB)</div>\n\t\t\t\t\t\t<NumberInput value={limitGB ?? 500} onChange={setLimitGB} />\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t<Button onClick={handleSetLimit}>{isUnlimited ? \"Set Unlimited Bandwidth\" : \"Set Bandwidth Limit\"}</Button>\n\t\t\t</SubSection>\n\t\t</Stack>\n\t)\n}\n\nexport function AiCreditsTools() {\n\tconst aiUsage = engine.stores.projectStore.useState(state => state.usageData?.aiCredits)\n\tconst aiCreditsLimit = engine.stores.projectStore.useState(state => state.resourceLimits?.aiCredits) || null\n\tconst aiCreditsLimitDaily = engine.stores.projectStore.useState(state => state.resourceLimits?.aiCreditsDaily) || null\n\tconst project = engine.stores.projectStore.useState(state => state.project) || null\n\n\tconst [usageCurrentMonth, setUsageCurrentMonth] = useState(aiUsage?.currentMonth ?? 0)\n\tconst [usageCurrentDay, setUsageCurrentDay] = useState(aiUsage?.currentDay ?? 0)\n\tconst [monthlyLimit, setMonthlyLimit] = useState<number | null>(aiCreditsLimit)\n\tconst [dailyLimit, setDailyLimit] = useState<number | null>(aiCreditsLimitDaily)\n\n\tconst handleSetUsage = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tusage: {\n\t\t\t\taiCredits: { currentMonth: usageCurrentMonth, currentDay: usageCurrentDay },\n\t\t\t\tbandwidth: project.usage?.bandwidth,\n\t\t\t\tadvancedAnalytics: project.usage?.advancedAnalytics,\n\t\t\t},\n\t\t})\n\t}, [project, usageCurrentMonth, usageCurrentDay])\n\n\tconst handleSetLimit = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tsettings: {\n\t\t\t\t...project.settings,\n\t\t\t\tresourceLimits: {\n\t\t\t\t\t...project.settings.resourceLimits,\n\t\t\t\t\taiCredits: monthlyLimit,\n\t\t\t\t\taiCreditsDaily: dailyLimit,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t}, [project, monthlyLimit, dailyLimit])\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={12}>\n\t\t\t<SubSection title=\"Usage\">\n\t\t\t\t<InputColumns>\n\t\t\t\t\t<LabeledInput label=\"Current Month\" value={usageCurrentMonth} onChange={setUsageCurrentMonth} />\n\t\t\t\t\t<LabeledInput label=\"Current Day\" value={usageCurrentDay} onChange={setUsageCurrentDay} />\n\t\t\t\t</InputColumns>\n\t\t\t\t<Button onClick={handleSetUsage}>Set AI Credits Usage</Button>\n\t\t\t</SubSection>\n\t\t\t<SubSection title=\"Limit\">\n\t\t\t\t<div>Monthly Limit</div>\n\t\t\t\t<LimitInput value={monthlyLimit} onChange={setMonthlyLimit} fallback={100000} />\n\t\t\t\t<div>Daily Limit</div>\n\t\t\t\t<LimitInput value={dailyLimit} onChange={setDailyLimit} fallback={5000} />\n\t\t\t\t<Button onClick={handleSetLimit}>Set AI Credits Limit</Button>\n\t\t\t</SubSection>\n\t\t</Stack>\n\t)\n}\n\nexport function PagesTools() {\n\tconst pagesLimit = engine.stores.projectStore.useState(state => state.resourceLimits?.pages) || null\n\tconst maxPagesLimit = engine.stores.projectStore.useState(state => state.resourceLimits?.maxPages) || null\n\tconst project = engine.stores.projectStore.useState(state => state.project) || null\n\n\tconst [pageLimit, setPageLimit] = useState<number | null>(pagesLimit)\n\tconst [maxPageLimit, setMaxPageLimit] = useState<number | null>(maxPagesLimit)\n\tconst [pagesToCreate, setPagesToCreate] = useState(pagesLimit ?? 150)\n\tconst [isCreatingPages, setIsCreatingPages] = useState(false)\n\n\tconst handleSetPageLimit = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tsettings: {\n\t\t\t\t...project.settings,\n\t\t\t\tresourceLimits: { ...project.settings.resourceLimits, pages: pageLimit },\n\t\t\t},\n\t\t})\n\t}, [project, pageLimit])\n\n\tconst handleSetMaxPageLimit = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tsettings: {\n\t\t\t\t...project.settings,\n\t\t\t\tresourceLimits: { ...project.settings.resourceLimits, maxPages: maxPageLimit },\n\t\t\t},\n\t\t})\n\t}, [project, maxPageLimit])\n\n\tconst handleCreatePages = useEngineCallback(() => {\n\t\tconst count = Math.max(0, Math.floor(pagesToCreate))\n\t\tif (!Number.isFinite(count) || count <= 0) return\n\n\t\tsetIsCreatingPages(true)\n\n\t\tconst PAGES_PER_FOLDER = 300\n\n\t\tconst timestamp = Date.now().toString().slice(-6) // Last 6 digits of timestamp\n\t\tconst batchPrefix = `batch-${timestamp}`\n\n\t\tlet folderIndex = 0\n\t\tconst totalFolders = Math.ceil(count / PAGES_PER_FOLDER)\n\n\t\tconst scheduleNextFolder = () => {\n\t\t\tif (folderIndex >= totalFolders) {\n\t\t\t\t// Re-enable button\n\t\t\t\tsetIsCreatingPages(false)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst scheduleCallback =\n\t\t\t\t(window as Window & { requestIdleCallback?: typeof requestIdleCallback }).requestIdleCallback ||\n\t\t\t\t((callback: () => void) => setTimeout(callback, 0))\n\t\t\tscheduleCallback(() => {\n\t\t\t\tvoid createNextFolder()\n\t\t\t})\n\t\t}\n\n\t\tconst createNextFolder = async () => {\n\t\t\t// Calculate the range for this folder\n\t\t\tconst startRange = folderIndex * PAGES_PER_FOLDER\n\t\t\tconst endRange = startRange + PAGES_PER_FOLDER\n\t\t\tconst actualPagesInFolder = Math.min(PAGES_PER_FOLDER, count - startRange)\n\n\t\t\t// Create folder name with the range pattern: \"0-300\", \"300-600\", etc.\n\t\t\tconst folderName = `${startRange}-${endRange}`\n\n\t\t\t// Create all pages in this folder\n\t\t\tfor (let pageInFolder = 0; pageInFolder < actualPagesInFolder; pageInFolder++) {\n\t\t\t\tconst globalPageIndex = startRange + pageInFolder\n\n\t\t\t\t// Create the page with a path that includes the folder\n\t\t\t\tconst webPage = await engine.createWebPage({\n\t\t\t\t\tstartEditingPageTitle: false,\n\t\t\t\t\tpreferredPath: `${batchPrefix}/${folderName}/page-${globalPageIndex + 1}`,\n\t\t\t\t})\n\n\t\t\t\t// Collapse auto opened folders as the pages list creates re-rendering issues when the list is too long\n\t\t\t\tif (pageInFolder === 0 && webPage) {\n\t\t\t\t\tconst routeSegment = getRouteSegmentNodeByWebPageId(engine.tree, webPage.id)\n\n\t\t\t\t\tif (routeSegment?.parentid) {\n\t\t\t\t\t\tconst rangeFolder = engine.tree.get(routeSegment.parentid)\n\n\t\t\t\t\t\t// Collapse the range folder (e.g., \"0-300\") for performance on ui\n\t\t\t\t\t\tif (rangeFolder) {\n\t\t\t\t\t\t\tengine.stores.chromeStore.collapseRouteSegment(rangeFolder.id)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Collapse the main batch folder (e.g., \"batch-123456\")\n\t\t\t\t\t\tif (rangeFolder?.parentid) {\n\t\t\t\t\t\t\tengine.stores.chromeStore.collapseRouteSegment(rangeFolder.parentid)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfolderIndex++\n\n\t\t\t// Show progress toast for completed folder\n\t\t\tconst completedPages = Math.min(folderIndex * PAGES_PER_FOLDER, count)\n\t\t\tconst isLastFolder = folderIndex >= totalFolders\n\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: isLastFolder ? \"success\" : \"info\",\n\t\t\t\tkey: `folder-creation-progress-${folderIndex}`,\n\t\t\t\ttext: isLastFolder\n\t\t\t\t\t? `Successfully created all ${count} pages in organized folders`\n\t\t\t\t\t: `Created folder ${folderIndex}/${totalFolders} (${completedPages}/${count} pages)`,\n\t\t\t\tduration: isLastFolder ? 4000 : 2000,\n\t\t\t})\n\n\t\t\t// Schedule the next folder creation during idle time\n\t\t\tscheduleNextFolder()\n\t\t}\n\n\t\t// Start creating folders\n\t\tscheduleNextFolder()\n\t}, [pagesToCreate])\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={12}>\n\t\t\t<SubSection title=\"Page Limit\">\n\t\t\t\t<LimitInput value={pageLimit} onChange={setPageLimit} fallback={10} />\n\t\t\t\t<Button onClick={handleSetPageLimit}>Set Page Limit</Button>\n\t\t\t</SubSection>\n\t\t\t<SubSection title=\"Max Pages Limit\">\n\t\t\t\t<LimitInput value={maxPageLimit} onChange={setMaxPageLimit} fallback={30000} />\n\t\t\t\t<Button onClick={handleSetMaxPageLimit}>Set Max Page Limit</Button>\n\t\t\t</SubSection>\n\t\t\t<SubSection title=\"Bulk Page Creation\">\n\t\t\t\t<div>Number of Pages to Create</div>\n\t\t\t\t<NumberInput value={pagesToCreate} onChange={setPagesToCreate} />\n\t\t\t\t<Button onClick={handleCreatePages} enabled={!isCreatingPages}>\n\t\t\t\t\t{isCreatingPages ? \"Creating Pages\u2026\" : \"Create Pages\"}\n\t\t\t\t</Button>\n\t\t\t</SubSection>\n\t\t</Stack>\n\t)\n}\n\nexport function CmsCollectionsTools() {\n\tconst cmsCollectionsLimit = engine.stores.projectStore.useState(state => state.resourceLimits?.cmsCollections) || null\n\tconst project = engine.stores.projectStore.useState(state => state.project) || null\n\n\tconst [limit, setLimit] = useState<number | null>(cmsCollectionsLimit)\n\tconst [collectionsToCreate, setCollectionsToCreate] = useState(5)\n\tconst [isCreatingCollections, setIsCreatingCollections] = useState(false)\n\n\tconst handleSetLimit = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tsettings: {\n\t\t\t\t...project.settings,\n\t\t\t\tresourceLimits: { ...project.settings.resourceLimits, cmsCollections: limit },\n\t\t\t},\n\t\t})\n\t}, [project, limit])\n\n\tconst handleCreateCollections = useEngineCallback(() => {\n\t\tconst count = Math.max(0, Math.floor(collectionsToCreate))\n\t\tif (!Number.isFinite(count) || count <= 0) return\n\n\t\tsetIsCreatingCollections(true)\n\n\t\tconst timestamp = Date.now().toString().slice(-6) // Last 6 digits of timestamp\n\t\tlet createdCount = 0\n\n\t\tconst createNextCollection = () => {\n\t\t\tif (createdCount >= count) {\n\t\t\t\t// Re-enable button and show completion toast\n\t\t\t\tsetIsCreatingCollections(false)\n\t\t\t\ttoast({\n\t\t\t\t\ttype: \"add\",\n\t\t\t\t\tvariant: \"success\",\n\t\t\t\t\tkey: `bulk-collection-creation-complete`,\n\t\t\t\t\ttext: `Successfully created ${count} CMS collections`,\n\t\t\t\t\tduration: 4000,\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Create collection with unique name\n\t\t\tconst collectionName = `Collection ${timestamp}-${createdCount + 1}`\n\t\t\tconst collection = createCollection(engine, \"SelfServeTools\")\n\n\t\t\tif (collection) {\n\t\t\t\t// Update the collection name to be unique\n\t\t\t\tcollection.name = collectionName\n\t\t\t\tcreatedCount++\n\n\t\t\t\t// Show progress toast every 50 collections or on completion\n\t\t\t\tif (createdCount % 50 === 0 || createdCount === count) {\n\t\t\t\t\ttoast({\n\t\t\t\t\t\ttype: \"add\",\n\t\t\t\t\t\tvariant: createdCount === count ? \"success\" : \"info\",\n\t\t\t\t\t\tkey: `bulk-collection-creation-progress-${createdCount}`,\n\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\tcreatedCount === count\n\t\t\t\t\t\t\t\t? `Successfully created all ${count} CMS collections`\n\t\t\t\t\t\t\t\t: `Created ${createdCount}/${count} CMS collections`,\n\t\t\t\t\t\tduration: createdCount === count ? 4000 : 2000,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Schedule next collection creation during idle time\n\t\t\tconst scheduleCallback =\n\t\t\t\t(window as Window & { requestIdleCallback?: typeof requestIdleCallback }).requestIdleCallback ||\n\t\t\t\t((callback: () => void) => setTimeout(callback, 10))\n\t\t\tscheduleCallback(createNextCollection)\n\t\t}\n\n\t\t// Start creating collections\n\t\tcreateNextCollection()\n\t}, [collectionsToCreate])\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={12}>\n\t\t\t<SubSection title=\"Limit\">\n\t\t\t\t<LimitInput value={limit} onChange={setLimit} fallback={10} />\n\t\t\t\t<Button onClick={handleSetLimit}>Set CMS Collections Limit</Button>\n\t\t\t</SubSection>\n\t\t\t<SubSection title=\"Bulk Collection Creation\">\n\t\t\t\t<div>Number of Collections to Create</div>\n\t\t\t\t<NumberInput value={collectionsToCreate} onChange={setCollectionsToCreate} />\n\t\t\t\t<Button onClick={handleCreateCollections} enabled={!isCreatingCollections}>\n\t\t\t\t\t{isCreatingCollections ? \"Creating Collections\u2026\" : \"Create Collections\"}\n\t\t\t\t</Button>\n\t\t\t</SubSection>\n\t\t</Stack>\n\t)\n}\n\nexport function CmsItemsTools() {\n\tconst cmsItemsLimit = engine.stores.projectStore.useState(state => state.resourceLimits?.cmsItems) || null\n\tconst project = engine.stores.projectStore.useState(state => state.project) || null\n\n\tconst [limit, setLimit] = useState<number | null>(cmsItemsLimit)\n\n\tconst handleSetLimit = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\t...project,\n\t\t\tsettings: {\n\t\t\t\t...project.settings,\n\t\t\t\tresourceLimits: { ...project.settings.resourceLimits, cmsItems: limit },\n\t\t\t},\n\t\t})\n\t}, [project, limit])\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={8}>\n\t\t\t<LimitInput value={limit} onChange={setLimit} fallback={1000} />\n\t\t\t<Button onClick={handleSetLimit}>Set CMS Items Limit</Button>\n\t\t</Stack>\n\t)\n}\n\nexport function LocalesTools() {\n\tconst localesLimit = engine.stores.projectStore.useState(state => state.resourceLimits?.locales) || null\n\tconst project = engine.stores.projectStore.useState(state => state.project) || null\n\n\tconst [limit, setLimit] = useState<number | null>(localesLimit)\n\n\tconst handleSetLimit = useEngineCallback(() => {\n\t\tif (!project) return\n\t\tengine.stores.projectStore.updateProject({\n\t\t\tsettings: {\n\t\t\t\t...project.settings,\n\t\t\t\tresourceLimits: { ...project.settings.resourceLimits, locales: limit },\n\t\t\t},\n\t\t})\n\t}, [project, limit])\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={8}>\n\t\t\t<LimitInput value={limit} onChange={setLimit} fallback={5} />\n\t\t\t<Button onClick={handleSetLimit}>Set Locales Limit</Button>\n\t\t</Stack>\n\t)\n}\n", "import { CheckBox, Stack } from \"@framerjs/fresco\"\nimport type { SafeJS } from \"code-generation/js/serializeJS.ts\"\nimport { createJSXContext } from \"code-generation/jsx/jsxContext.ts\"\nimport { SimulatedDOM } from \"code-generation/simulatedDOM/SimulatedDOM.ts\"\nimport engine from \"document/engine.ts\"\nimport { isPinnable } from \"document/models/CanvasTree/traits/WithPins.ts\"\nimport { withPositionType } from \"document/models/CanvasTree/traits/WithPositionType.ts\"\nimport { withSize } from \"document/models/CanvasTree/traits/WithSize.ts\"\nimport { withSizeDimensionType } from \"document/models/CanvasTree/traits/WithSizeDimensionType.ts\"\nimport type { Rect } from \"library/index.ts\"\nimport { useEffect, useState } from \"react\"\nimport { performanceMeasure } from \"utils/userTiming.ts\"\n\ntype DebugState =\n\t| {\n\t\t\ttype: \"success\"\n\t\t\tsimulatedCSSWidth?: string | SafeJS\n\t\t\tsimulatedCSSWidthDuration: number\n\t\t\tsimulatedHeight?: number | SafeJS\n\t\t\tsimulatedHeightDuration: number\n\t\t\tsimulatedYPosition?: number | SafeJS\n\t\t\tsimulatedYPositionDuration: number\n\t\t\tdomRect?: Rect\n\t  }\n\t| {\n\t\t\ttype: \"error\"\n\t\t\tmessage: string\n\t  }\n\nconst EMPTY_SELECTION_STATE: DebugState = { type: \"error\", message: \"Select a node\" }\n\nexport function SimulatedDOMTools() {\n\tconst [debuggingEnabled, setDebuggingEnabled] = useState(false)\n\n\tconst [result, setResult] = useState<DebugState>(EMPTY_SELECTION_STATE)\n\n\tuseEffect(() => {\n\t\tif (!debuggingEnabled) return\n\n\t\tconst token = engine.scheduler.changes.observe(engine.stores.selectionStore, () => {\n\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\tconst node = engine.stores.selectionStore.nodes[0]\n\t\t\t\tif (!node) {\n\t\t\t\t\tsetResult(EMPTY_SELECTION_STATE)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (!withSize(node) || !withSizeDimensionType(node) || !isPinnable(node) || !withPositionType(node)) {\n\t\t\t\t\tsetResult({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: \"Node does not have a size, or size dimension type, or is not pinnable, or has no position type\",\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst scopeNode = engine.stores.treeStore.tree.getCanvasScopeNodeFor(node)\n\t\t\t\tif (!scopeNode) {\n\t\t\t\t\tsetResult({ type: \"error\", message: `No scope node for node ID ${node.id} found` })\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst context = createJSXContext(node, scopeNode, {\n\t\t\t\t\tcomponentLoader: engine.componentLoader,\n\t\t\t\t\ttree: engine.stores.treeStore.tree,\n\t\t\t\t\tmodulesStore: engine.stores.modulesStore,\n\t\t\t\t\tengineChanges: engine.scheduler.changes,\n\t\t\t\t\tassetMap: engine.stores.assetStore.assetMap,\n\t\t\t\t})\n\t\t\t\tconst mockVariables = context.variables\n\t\t\t\tconst mockValueTransforms = context.valueTransforms\n\n\t\t\t\tconst cssWidthStart = performance.now()\n\t\t\t\tconst cssWidth = new SimulatedDOM(\n\t\t\t\t\tengine.componentLoader,\n\t\t\t\t\tengine.stores.treeStore.tree,\n\t\t\t\t\tmockVariables,\n\t\t\t\t\tmockValueTransforms,\n\t\t\t\t\tcontext.imports,\n\t\t\t\t\tcontext.declarations.component,\n\t\t\t\t).getCSSWidth(node)\n\t\t\t\tconst cssWidthEnd = performance.now()\n\t\t\t\tperformanceMeasure(\"simulateCSSWidth\", { start: cssWidthStart, end: cssWidthEnd })\n\n\t\t\t\tconst heightStart = performance.now()\n\t\t\t\tconst height = new SimulatedDOM(\n\t\t\t\t\tengine.componentLoader,\n\t\t\t\t\tengine.stores.treeStore.tree,\n\t\t\t\t\tmockVariables,\n\t\t\t\t\tmockValueTransforms,\n\t\t\t\t\tcontext.imports,\n\t\t\t\t\tcontext.declarations.component,\n\t\t\t\t).getHeight(node)\n\t\t\t\tconst heightEnd = performance.now()\n\t\t\t\tperformanceMeasure(\"simulateHeight\", { start: heightStart, end: heightEnd })\n\n\t\t\t\tconst yPositionStart = performance.now()\n\t\t\t\tconst yPosition = new SimulatedDOM(\n\t\t\t\t\tengine.componentLoader,\n\t\t\t\t\tengine.stores.treeStore.tree,\n\t\t\t\t\tmockVariables,\n\t\t\t\t\tmockValueTransforms,\n\t\t\t\t\tcontext.imports,\n\t\t\t\t\tcontext.declarations.component,\n\t\t\t\t).getYPosition(node)\n\t\t\t\tconst yPositionEnd = performance.now()\n\t\t\t\tperformanceMeasure(\"simulateYPosition\", { start: yPositionStart, end: yPositionEnd })\n\n\t\t\t\tconst domRect = node.cache.canvasRect\n\n\t\t\t\tsetResult({\n\t\t\t\t\ttype: \"success\",\n\t\t\t\t\tdomRect,\n\t\t\t\t\tsimulatedCSSWidth: cssWidth,\n\t\t\t\t\tsimulatedCSSWidthDuration: cssWidthEnd - cssWidthStart,\n\t\t\t\t\tsimulatedHeight: height,\n\t\t\t\t\tsimulatedHeightDuration: heightEnd - heightStart,\n\t\t\t\t\tsimulatedYPosition: yPosition,\n\t\t\t\t\tsimulatedYPositionDuration: yPositionEnd - yPositionStart,\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t\treturn () => {\n\t\t\tengine.scheduler.changes.removeObserver(token)\n\t\t}\n\t}, [debuggingEnabled])\n\n\treturn (\n\t\t<Stack direction=\"column\">\n\t\t\t{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n\t\t\t<label>\n\t\t\t\t<CheckBox\n\t\t\t\t\tvalue={debuggingEnabled}\n\t\t\t\t\tonChange={checked => {\n\t\t\t\t\t\tsetDebuggingEnabled(checked)\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\tEnable Simulated DOM Debugging\n\t\t\t</label>\n\n\t\t\t<div>\n\t\t\t\t{result.type === \"success\" && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<b>Simulated Width:</b> {formatValueForDisplay(result.simulatedCSSWidth)} (took{\" \"}\n\t\t\t\t\t\t{formatDurationForDisplay(result.simulatedCSSWidthDuration)}ms)\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<b>DOM Width:</b> {formatValueForDisplay(result.domRect?.width)}\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<b>Simulated Height:</b> {formatValueForDisplay(result.simulatedHeight)} (took{\" \"}\n\t\t\t\t\t\t{formatDurationForDisplay(result.simulatedHeightDuration)}ms)\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<b>DOM Height:</b> {formatValueForDisplay(result.domRect?.height)}\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<b>Simulated Y Position:</b> {formatValueForDisplay(result.simulatedYPosition)} (took{\" \"}\n\t\t\t\t\t\t{formatDurationForDisplay(result.simulatedYPositionDuration)}ms)\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<b>DOM Y Position:</b> {formatValueForDisplay(result.domRect?.y)}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t{result.type === \"error\" && <div>{result.message}</div>}\n\t\t\t</div>\n\t\t</Stack>\n\t)\n}\n\nfunction formatValueForDisplay(value: number | string | SafeJS | null | undefined) {\n\tif (value === null || value === undefined) return \"null\"\n\tif (typeof value === \"number\") return Math.round(value * 100) / 100\n\treturn value\n}\n\nfunction formatDurationForDisplay(value: number) {\n\treturn Math.round(value * 100) / 100\n}\n", "import type { VersionDeployment } from \"@framerjs/app-shared\"\nimport { Button, NumberInputWithTicker, Spinner, Stack, Toggle } from \"@framerjs/fresco\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { formatDistanceToNow } from \"date-fns\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useIsCrdt } from \"document/crdt/useIsCrdt.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport type { Activity } from \"history/dataProcessing.ts\"\nimport { initClusterHistory } from \"history/initClusterHistory.ts\"\nimport React from \"react\"\nimport { accessTokenRefresher } from \"web/lib/accessTokenRefresherWeb.ts\"\nimport { getMultiplayerServiceURL } from \"web/lib/multiplayerService.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport { xRequestedByHeader } from \"web/lib/xRequestedByHeader.ts\"\nimport * as styles from \"./VersionHistoryTools.styles.ts\"\n\ntype MergedEntry = { kind: \"cluster\"; cluster: Activity } | { kind: \"deployment\"; deployment: VersionDeployment }\n\nasync function rollbackToVersion(version: number, mode: \"json\" | \"crdt\"): Promise<{ version: number }> {\n\tconst projectId = engine.stores.projectStore.projectId\n\n\t// The new Multiplayer Service is mounted at `/multiplayer` on the API\n\t// host, while the legacy host serves the same endpoint at `/internal`\n\t// on the editor origin.\n\tconst path = `/projects/${projectId}/tree/rollback`\n\tconst url = engine.stores.treeStore.isMPSSocket ? getMultiplayerServiceURL(path) : `/internal${path}`\n\n\tconst response = await fetch(\n\t\turl,\n\t\tawait accessTokenRefresher.withAuthorizationHeader({\n\t\t\tmethod: \"POST\",\n\t\t\tcredentials: \"include\",\n\t\t\theaders: {\n\t\t\t\t...xRequestedByHeader,\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify({ version, mode }),\n\t\t}),\n\t)\n\n\tif (!response.ok) {\n\t\tconst messages: Record<number, string> = {\n\t\t\t400: \"Invalid version or mode\",\n\t\t\t401: \"Not authenticated\",\n\t\t\t403: \"No write access to this project\",\n\t\t\t404: `No ${mode.toUpperCase()} snapshot found at this version`,\n\t\t\t503: \"Project is restarting \u2014 try again shortly\",\n\t\t}\n\t\tthrow new Error(messages[response.status] ?? `Rollback failed (${response.status})`)\n\t}\n\n\t// Arm the reload-on-disconnect only after the server confirms success.\n\t// The flag is a one-way latch, so setting it before would cause spurious\n\t// reloads if the request failed and a later network blip disconnected.\n\tengine.remoteDocument?.reloadOnDisconnect()\n\n\treturn response.json()\n}\n\nexport function VersionHistoryTools() {\n\tconst branchId = useEngineState(() => engine.stores.treeStore.branchId, [], EngineChange.Tree)\n\tconst lastLoadedBranchRef = React.useRef<string | null>(branchId)\n\n\tReact.useEffect(() => {\n\t\tlet cancelled = false\n\n\t\tconst branchChanged = lastLoadedBranchRef.current !== branchId\n\t\tif (branchChanged) {\n\t\t\tlastLoadedBranchRef.current = branchId\n\t\t}\n\n\t\tif (branchChanged || !engine.stores.publishStore.didLoadInitialVersionDeployments) {\n\t\t\tvoid engine.stores.publishStore.loadVersions().then(() => {\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tinitClusterHistory()\n\t\t\t\t}\n\t\t\t})\n\t\t} else {\n\t\t\tinitClusterHistory()\n\t\t}\n\n\t\treturn () => {\n\t\t\tcancelled = true\n\t\t\tengine.stores.historyStore.stopLoadingAndPolling()\n\t\t}\n\t}, [branchId])\n\n\tconst { loadingState, clusters, activeTreeVersion, activeVersionDeploymentId } = engine.stores.historyStore.useState()\n\tconst {\n\t\tversions: deploymentVersions,\n\t\tdidLoadInitialVersionDeployments,\n\t\tcanLoadMoreVersionDeployments,\n\t} = engine.stores.publishStore.useState()\n\tconst { acl } = engine.stores.projectStore.useState()\n\n\tconst isLoading = loadingState !== \"ready\" || !didLoadInitialVersionDeployments\n\n\tconst currentMode: \"json\" | \"crdt\" = useIsCrdt() ? \"crdt\" : \"json\"\n\n\tconst merged = React.useMemo<MergedEntry[]>(() => {\n\t\tconst entries: MergedEntry[] = []\n\n\t\tfor (const cluster of clusters) {\n\t\t\t// CRDT snapshots always include a JSON companion, so they are\n\t\t\t// valid rollback targets in both modes. Only hide JSON-only\n\t\t\t// snapshots when the project is currently in CRDT mode.\n\t\t\tif (cluster.mode !== \"crdt\" && currentMode === \"crdt\") continue\n\t\t\tentries.push({ kind: \"cluster\", cluster })\n\t\t}\n\t\tfor (const deployment of deploymentVersions) {\n\t\t\t// CRDT deployments (frontier present) also have a JSON snapshot,\n\t\t\t// so they are valid in both modes. Only hide JSON-only deployments\n\t\t\t// when the project is currently in CRDT mode.\n\t\t\tconst deploymentIsCrdtCapable = deployment.treeState?.frontier != null\n\t\t\tif (!deploymentIsCrdtCapable && currentMode === \"crdt\") continue\n\t\t\tentries.push({ kind: \"deployment\", deployment })\n\t\t}\n\n\t\tentries.sort((a, b) => {\n\t\t\tconst timeA = a.kind === \"cluster\" ? a.cluster.time : new Date(a.deployment.createdAt).getTime()\n\t\t\tconst timeB = b.kind === \"cluster\" ? b.cluster.time : new Date(b.deployment.createdAt).getTime()\n\t\t\treturn timeB - timeA\n\t\t})\n\n\t\treturn entries\n\t}, [clusters, deploymentVersions, currentMode])\n\n\tconst handleRestore = React.useCallback(() => {\n\t\tengine.stores.historyStore.restoreLatest()\n\t}, [])\n\n\tconst handleView = React.useCallback((entry: MergedEntry) => {\n\t\tif (entry.kind === \"cluster\") {\n\t\t\tconst name = formatDistanceToNow(entry.cluster.time, { addSuffix: true })\n\t\t\tvoid engine.stores.historyStore.loadVersion(entry.cluster.treeVersion, name)\n\t\t} else {\n\t\t\tconst name = formatDistanceToNow(new Date(entry.deployment.createdAt).getTime(), { addSuffix: true })\n\t\t\tvoid engine.stores.historyStore.loadVersionDeployment(entry.deployment, name)\n\t\t}\n\t}, [])\n\n\tconst [isRollingBack, setIsRollingBack] = React.useState(false)\n\tconst [rolledBackToVersion, setRolledBackToVersion] = React.useState<number | null>(null)\n\n\tconst handleRollback = React.useCallback(\n\t\t(entry: MergedEntry) => {\n\t\t\tconst treeVersion = entry.kind === \"cluster\" ? entry.cluster.treeVersion : entry.deployment.treeVersion\n\t\t\tif (treeVersion == null) return\n\n\t\t\tconst type = entry.kind === \"cluster\" ? \"Autosave\" : Dictionary.Published\n\t\t\t// CRDT snapshots always include a JSON companion, so the\n\t\t\t// rollback mode should match the project's current mode \u2014 not\n\t\t\t// the mode the snapshot was originally taken in.\n\t\t\tconst modeLabel = currentMode.toUpperCase()\n\t\t\tconst confirmed = window.confirm(\n\t\t\t\t`Roll back to v${treeVersion} (${type}, ${modeLabel})?\\n\\nAll connected clients will be disconnected and the page will reload.`,\n\t\t\t)\n\t\t\tif (!confirmed) return\n\n\t\t\tsetIsRollingBack(true)\n\n\t\t\tvoid engine.stores.historyStore\n\t\t\t\t.resolveSnapshotVersion(treeVersion)\n\t\t\t\t.then(resolvedVersion => rollbackToVersion(resolvedVersion, currentMode))\n\t\t\t\t.then(result => {\n\t\t\t\t\tsetRolledBackToVersion(treeVersion)\n\t\t\t\t\ttoast({\n\t\t\t\t\t\ttype: \"add\",\n\t\t\t\t\t\tvariant: \"success\",\n\t\t\t\t\t\ttext: `Rolled back to v${treeVersion}. New version: v${result.version}. Reloading\u2026`,\n\t\t\t\t\t\tkey: \"version-rollback\",\n\t\t\t\t\t\tduration: 5000,\n\t\t\t\t\t})\n\t\t\t\t\t// The server disconnects all clients after rollback. reloadOnDisconnect()\n\t\t\t\t\t// was already set, so the page will reload when the socket closes.\n\t\t\t\t\t// As a fallback, force reload after a short delay.\n\t\t\t\t\tsetTimeout(() => window.location.reload(), 3000)\n\t\t\t\t})\n\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\tsetIsRollingBack(false)\n\t\t\t\t\ttoast({\n\t\t\t\t\t\ttype: \"add\",\n\t\t\t\t\t\tvariant: \"error\",\n\t\t\t\t\t\ttext: `Rollback failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n\t\t\t\t\t\tkey: \"version-rollback\",\n\t\t\t\t\t\tduration: 10000,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t},\n\t\t[currentMode],\n\t)\n\n\tconst [isLoadingMore, setIsLoadingMore] = React.useState(false)\n\n\tconst handleLoadMore = React.useCallback(() => {\n\t\tsetIsLoadingMore(true)\n\t\tvoid engine.stores.publishStore.loadVersions().finally(() => {\n\t\t\tsetIsLoadingMore(false)\n\t\t})\n\t}, [])\n\n\tconst resolveAuthors = React.useCallback(\n\t\t(authors: Record<string, number>): string => {\n\t\t\tconst names = acl.filter(e => e.user.id in authors).map(e => e.user.name)\n\t\t\tif (names.length <= 1) return names[0] || \"\"\n\t\t\treturn `${names.slice(0, -1).join(\", \")} & ${names[names.length - 1]}`\n\t\t},\n\t\t[acl],\n\t)\n\n\tconst [isLocked, setIsLocked] = React.useState(true)\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<Stack direction=\"column\" alignItems=\"center\" padding={10}>\n\t\t\t\t<Spinner />\n\t\t\t</Stack>\n\t\t)\n\t}\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={4}>\n\t\t\t{activeTreeVersion !== \"latest\" && (\n\t\t\t\t<Stack direction=\"row\" gap={4}>\n\t\t\t\t\t<Toggle small value={!isLocked} onChange={value => setIsLocked(!value)} />\n\t\t\t\t\t<div>Unlock Rollback</div>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t<div style={styles.row}>\n\t\t\t\t<div style={styles.info}>\n\t\t\t\t\t<strong>Current Version</strong>\n\t\t\t\t\t<span style={styles.badge}>\n\t\t\t\t\t\tv{engine.remoteDocument?.treeVersion() ?? \"?\"} \u00B7 {currentMode.toUpperCase()} \u00B7 Latest\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div style={styles.actions}>\n\t\t\t\t\t<Button onClick={handleRestore} enabled={activeTreeVersion !== \"latest\"}>\n\t\t\t\t\t\tView\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div style={styles.list}>\n\t\t\t\t{merged.map(entry => {\n\t\t\t\t\tconst isCluster = entry.kind === \"cluster\"\n\t\t\t\t\tconst treeVersion = isCluster ? entry.cluster.treeVersion : entry.deployment.treeVersion\n\t\t\t\t\tconst time = isCluster ? entry.cluster.time : new Date(entry.deployment.createdAt).getTime()\n\t\t\t\t\tconst type = isCluster ? \"Autosave\" : Dictionary.Published\n\t\t\t\t\tconst authors = isCluster ? resolveAuthors(entry.cluster.authors) : entry.deployment.deployedBy.name\n\n\t\t\t\t\tconst isSelected = isCluster\n\t\t\t\t\t\t? !activeVersionDeploymentId && activeTreeVersion === entry.cluster.treeVersion\n\t\t\t\t\t\t: activeVersionDeploymentId === entry.deployment.id\n\n\t\t\t\t\tconst key = isCluster ? `cluster-${entry.cluster.treeVersion}` : `deployment-${entry.deployment.id}`\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={key} style={isSelected ? styles.selectedRowMerged : styles.row}>\n\t\t\t\t\t\t\t<div style={styles.info}>\n\t\t\t\t\t\t\t\t<span style={styles.time} title={new Date(time).toLocaleString()}>\n\t\t\t\t\t\t\t\t\t{formatDistanceToNow(time, { addSuffix: true })}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span style={styles.meta}>\n\t\t\t\t\t\t\t\t\tv{treeVersion ?? \"?\"} \u00B7 {type} \u00B7 {authors}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div style={styles.actions}>\n\t\t\t\t\t\t\t\t{!isSelected && <Button onClick={() => handleView(entry)}>View</Button>}\n\t\t\t\t\t\t\t\t{rolledBackToVersion === treeVersion && <span style={styles.rolledBackBadge}>Restored</span>}\n\t\t\t\t\t\t\t\t{isSelected && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleRollback(entry)}\n\t\t\t\t\t\t\t\t\t\tenabled={treeVersion != null && !isRollingBack && !isLocked}\n\t\t\t\t\t\t\t\t\t\ttitle=\"Revert the whole project to this version. All changes after it will be lost\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{isRollingBack ? \"\u2026\" : \"Roll back\"}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t})}\n\n\t\t\t\t{isLoadingMore && (\n\t\t\t\t\t<Stack direction=\"column\" alignItems=\"center\" padding={6}>\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{canLoadMoreVersionDeployments && (\n\t\t\t\t<Button onClick={handleLoadMore} enabled={!isLoadingMore}>\n\t\t\t\t\t{isLoadingMore ? Dictionary.LoadingEllipsis : \"Load More\"}\n\t\t\t\t</Button>\n\t\t\t)}\n\n\t\t\t<div style={styles.row}>\n\t\t\t\t<NumberInputWithTicker\n\t\t\t\t\twrapperStyle={{ width: 150 }}\n\t\t\t\t\tvalue={Number.isNaN(activeTreeVersion) ? \"\" : activeTreeVersion}\n\t\t\t\t\tonChange={version => {\n\t\t\t\t\t\thandleView({\n\t\t\t\t\t\t\tkind: \"deployment\",\n\t\t\t\t\t\t\tdeployment: {\n\t\t\t\t\t\t\t\ttreeVersion: version,\n\t\t\t\t\t\t\t\tcreatedAt: new Date().toString(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} as MergedEntry)\n\t\t\t\t\t}}\n\t\t\t\t\tmin={1}\n\t\t\t\t\tstep={1}\n\t\t\t\t/>\n\t\t\t\t<div style={styles.actions}>\n\t\t\t\t\t{!Number.isNaN(activeTreeVersion) && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\thandleRollback({\n\t\t\t\t\t\t\t\t\tkind: \"deployment\",\n\t\t\t\t\t\t\t\t\tdeployment: {\n\t\t\t\t\t\t\t\t\t\ttreeVersion: activeTreeVersion,\n\t\t\t\t\t\t\t\t\t\tcreatedAt: new Date().toString(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t} as MergedEntry)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tenabled={!isRollingBack && !isLocked}\n\t\t\t\t\t\t\ttitle=\"Revert the whole project to this version. All changes after it will be lost\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isRollingBack ? \"\u2026\" : \"Roll back\"}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Stack>\n\t)\n}\n", "export const row = {\n  display: \"flex\",\n  justifyContent: \"space-between\",\n  alignItems: \"center\",\n  padding: \"6px 0\",\n  gap: 8\n};\nexport const selectedRowMerged = {\n  ...row,\n  background: \"rgba(0, 153, 255, 0.1)\",\n  borderRadius: 4,\n  padding: \"6px 4px\"\n};\nexport const info = {\n  display: \"flex\",\n  flexDirection: \"column\",\n  gap: 2,\n  minWidth: 0,\n  flex: 1\n};\nexport const time = {\n  fontSize: 12,\n  fontWeight: 500\n};\nexport const meta = {\n  fontSize: 11,\n  opacity: 0.7,\n  overflow: \"hidden\",\n  textOverflow: \"ellipsis\",\n  whiteSpace: \"nowrap\"\n};\nexport const badge = {\n  fontSize: 11,\n  opacity: 0.7\n};\nexport const actions = {\n  display: \"flex\",\n  gap: 4,\n  flexShrink: 0\n};\nexport const rolledBackBadge = {\n  fontSize: 11,\n  fontWeight: 500,\n  color: \"rgba(0, 153, 255, 0.8)\",\n  padding: \"4px 8px\"\n};\nexport const list = {\n  maxHeight: 300,\n  overflowY: \"auto\"\n};\n", "import { isString } from \"@framerjs/assets/src/utils.ts\"\nimport { assert } from \"@framerjs/document-migrations/src/utils/assert.ts\"\nimport { List, delay, unhandledError } from \"@framerjs/shared\"\nimport { projectFeatures } from \"app/projectFeatures.ts\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport { CollectionItemNode, CollectionNode } from \"document/models/CanvasTree/index.ts\"\nimport { getContentManagementNode } from \"document/models/CanvasTree/nodes/ContentManagementNode.utils.ts\"\nimport { randomID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport type { CollectionVariableDefinition } from \"document/models/CanvasTree/traits/CollectionVariableDefinition.ts\"\nimport type { Locale } from \"document/models/CanvasTree/traits/WithLocales.ts\"\nimport type { CollectionControlProp } from \"document/models/controlProps/CollectionControlProp.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { type PrefixedControlProps, prefixControlPropKey } from \"document/models/controlProps/controlPropKey.ts\"\nimport { ControlType } from \"library/index.ts\"\nimport { getNameForLocaleCode } from \"utils/getNameForLocaleCode.ts\"\nimport { extractTagsFromRichText } from \"utils/richTextUtils.ts\"\nimport { ensureStylePresetForTags } from \"utils/stylePresetUtils.ts\"\nimport { createContentManagementNodeIfNeeded } from \"../contentManagement/utils/createContentManagementNodeIfNeeded.ts\"\nimport { uniqueCollectionName } from \"../contentManagement/utils/createSampleCollection.ts\"\nimport { createVariable } from \"../properties/utils/createVariable.ts\"\nimport type { LocaleCode } from \"../shared/locales.ts\"\n\ninterface TranslatableSampleRecord {\n\tslug: string\n\ttitle: string\n\tcontent: string\n}\n\nfunction getSampleData(): TranslatableSampleRecord[] {\n\treturn [\n\t\t{\n\t\t\tslug: \"create-a-landing-page-that-performs-great\",\n\t\t\ttitle: \"Create a Landing Page That Performs Great\",\n\t\t\tcontent: `<h2>What is a landing page?</h2>\n<p>Whether you work in marketing, sales, or product design, you understand the importance of a quality landing page. Landing pages are standalone websites used to generate leads or sales\u2014in other words they help you increase your revenue. Unlike typical web pages, landing pages only have one call to action, or CTA, and they are usually tied to a specific marketing or advertising campaign. The hyper-focused nature of landing pages means they come with a pretty standard set of best practices.</p>\n\n<h2>Landing pages vs. front pages</h2>\n<p>A typical front page or website in general includes a full navigation bar with tons of links throughout the page linking to other pages or pieces of content. A good landing page should only have one link, or multiple links that all point to the same thing. Having one CTA on your landing page increases conversions because there\u2019s less distraction\u2014fewer equally appealing options to prompt your users into leaving your landing page.</p>\n<p>Your brand\u2019s front page has totally different goals. It should show off your brand\u2019s personality, let people explore different features, find blogs and support articles, or even apply for a job. But they won\u2019t necessarily purchase your product from the front page. And that\u2019s why we need landing pages.</p>\n<p>Since landing pages are tied to specific campaigns, you don\u2019t need to worry about users lacking information about your product. They arrived at your landing page because they were interested in an ad or post on Google, Bing, YouTube, Facebook, Instagram, Twitter, or similar places on the web. With super detailed campaigns pointing to easy-to-use landing pages, you\u2019re getting high-quality leads that are actually interested in using your product.</p>\n\n<h2>Best practices for creating a landing page</h2>\n<p>What makes an easy-to-use landing page? Overall it\u2019s clear, concise, and doesn\u2019t give users any options except for the main CTA.In terms of copy, your landing page should have one clear message. The header of your page should promote the desired action you want visitors to take. And additionally it should explain the benefits of performing this action.</p>\n<p>The visual design of your page should be very simple. Unlike your front page, this is not the place to go crazy with brand personality\u2014so no wild animations or complex design elements. You wouldn\u2019t want to distract visitors from performing the main action of your page.</p>\n<p>Landing page CTA\u2019s are typically buttons, sometimes accompanied by an input field if you need to collect user information. To ensure your buttons are clicked, make sure they stand out visually. This can be done with contrasting the button color with your page background and clear copy on the button itself. For example, if you are asking visitors to book a demo, write\u201CBook a demo\u201D clearly on the CTA button.</p>`,\n\t\t},\n\t]\n}\n\nconst scopeType = \"collection\"\nconst translateSampleName = \"Translation sample\"\n\nasync function createSampleCollection(engine: VekterEngine): Promise<CollectionNode> {\n\tassert(projectFeatures.isOn(\"sites\"), \"CMS sample data should only be created for site projects\")\n\n\tconst collection = await engine.scheduler.processWhenReadyAsync(() => {\n\t\tconst contentManagementNode = createContentManagementNodeIfNeeded(engine.tree)\n\t\tengine.stores.scopeStore.select(contentManagementNode.id, { keepHistory: false })\n\n\t\tconst titleVariableID = randomID()\n\n\t\tconst variablesByKey: Record<keyof TranslatableSampleRecord, CollectionVariableDefinition> = {\n\t\t\ttitle: createVariable(\n\t\t\t\t{\n\t\t\t\t\tid: titleVariableID,\n\t\t\t\t\ttype: ControlType.String,\n\t\t\t\t\tname: \"Title\",\n\t\t\t\t\tinitialValue: \"\",\n\t\t\t\t},\n\t\t\t\tscopeType,\n\t\t\t),\n\t\t\tslug: createVariable(\n\t\t\t\t{\n\t\t\t\t\ttype: \"slug\",\n\t\t\t\t\tname: \"Slug\",\n\t\t\t\t\tinitialValue: \"\",\n\t\t\t\t\tassociatedStringVariable: titleVariableID,\n\t\t\t\t},\n\t\t\t\tscopeType,\n\t\t\t),\n\t\t\tcontent: createVariable(\n\t\t\t\t{\n\t\t\t\t\ttype: ControlType.RichText,\n\t\t\t\t\tname: \"Content\",\n\t\t\t\t\tinitialValue: \"\",\n\t\t\t\t},\n\t\t\t\tscopeType,\n\t\t\t),\n\t\t}\n\n\t\tconst name = uniqueCollectionName(contentManagementNode, translateSampleName)\n\t\tconst collectionNode = new CollectionNode({ name, variables: Object.values(variablesByKey) })\n\n\t\tgetSampleData().forEach(record => {\n\t\t\tconst controlProps: PrefixedControlProps<CollectionControlProp> = Object.fromEntries(\n\t\t\t\tObject.entries(record).map(([key, value]: [keyof TranslatableSampleRecord, string]) => {\n\t\t\t\t\tassert(isString(value), \"Value must be a string\")\n\n\t\t\t\t\tlet controlProp: ControlProp\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase \"content\": {\n\t\t\t\t\t\t\tcontrolProp = {\n\t\t\t\t\t\t\t\ttype: ControlType.RichText,\n\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"slug\":\n\t\t\t\t\t\tcase \"title\": {\n\t\t\t\t\t\t\tcontrolProp = {\n\t\t\t\t\t\t\t\ttype: ControlType.String,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [prefixControlPropKey(variablesByKey[key].id), controlProp]\n\t\t\t\t}),\n\t\t\t)\n\t\t\tconst collectionItem = CollectionItemNode.create(controlProps)\n\t\t\tcollectionNode.addChild(collectionItem)\n\t\t})\n\n\t\tengine.stores.scopeStore.insertNode(collectionNode)\n\t\tengine.stores.selectionStore.set(collectionNode.id)\n\t\treturn collectionNode\n\t})\n\n\tawait engine.stores.codeGenerationStore\n\t\t.createModuleFromComponentSource(collection.draftOrCurrent())\n\t\t.catch(unhandledError)\n\n\treturn collection\n}\n\nfunction ensureSampleBlogStylePresets(engine: VekterEngine) {\n\tconst tags = new Set<string>()\n\tconst blogSample = getSampleData()\n\n\tfor (const item of blogSample) {\n\t\textractTagsFromRichText(item.content, tags)\n\t}\n\n\tensureStylePresetForTags(engine, tags)\n}\n\n/**\n * Create a sample CMS collection that will be batch translated for testing / assessing GPT output based on prompt\n */\nexport async function createSampleBatchTranslationCollection(\n\tengine: VekterEngine,\n\tcustomAiInstructions: string,\n\tlocaleCode: LocaleCode,\n) {\n\tconst initialLoading: Promise<unknown>[] = [Promise.all([ensureSampleBlogStylePresets(engine)])]\n\n\tengine.scheduler.process(() => {\n\t\tengine.beginUndoGroup()\n\n\t\tengine.stores.contentManagementStore.isLoadingSampleData = true\n\n\t\tconst contentManagementNode = getContentManagementNode(engine.tree)\n\t\t// FIXME If CMS Node will ever become shallow this code needs to be checked/updated\n\t\tconst hasNoCollections = contentManagementNode?.loaded ? contentManagementNode.loaded.children.length === 0 : true\n\n\t\t// Make sure loading the dependencies takes at least one second, unless we already have some collections\n\t\tif (hasNoCollections) {\n\t\t\tconst waitOneSecond = delay(1000)\n\t\t\tinitialLoading.push(waitOneSecond)\n\t\t}\n\t})\n\n\treturn Promise.all(initialLoading)\n\t\t.then(async () => {\n\t\t\t// Make sure that the sample collection module has been generated before creating the sample pages\n\t\t\tconst collection = await createSampleCollection(engine)\n\n\t\t\treturn collection\n\t\t})\n\t\t.then(async collection => {\n\t\t\tconst locale = await new Promise<Locale>(resolve => {\n\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t// Set default language to English\n\t\t\t\t\tconst currentWebMetadata = engine.tree.root.webMetadata\n\t\t\t\t\tconst webMetadata = currentWebMetadata ? { ...currentWebMetadata } : {}\n\t\t\t\t\twebMetadata.language = \"en\"\n\n\t\t\t\t\tengine.tree.root.set({ webMetadata })\n\n\t\t\t\t\tconst root = engine.tree.root\n\t\t\t\t\tconst currentLocales = root.locales ?? []\n\n\t\t\t\t\tconst localeName = getNameForLocaleCode(localeCode)\n\t\t\t\t\tif (!localeName) {\n\t\t\t\t\t\tthrow new Error(\"Couldn't find name for locale code: \" + localeCode)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create or update the locale to translate to with instructions\n\t\t\t\t\tconst currentLocale = currentLocales.find(({ slug }) => slug === localeCode)\n\t\t\t\t\tconst updatedLocale: Locale = {\n\t\t\t\t\t\tid: currentLocale?.id ?? randomID(),\n\t\t\t\t\t\tcode: localeCode,\n\t\t\t\t\t\tname: localeName,\n\t\t\t\t\t\tslug: localeCode.split(\"-\")[0],\n\t\t\t\t\t\tdraft: false,\n\t\t\t\t\t\tcustomAiInstructions: customAiInstructions.length > 0 ? customAiInstructions : undefined,\n\t\t\t\t\t}\n\n\t\t\t\t\tif (currentLocale) {\n\t\t\t\t\t\tconst index = currentLocales.findIndex(({ id }) => id === currentLocale.id)\n\t\t\t\t\t\tconst newLocales = List.replace(currentLocales, index, updatedLocale)\n\t\t\t\t\t\troot.set({ locales: newLocales })\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst newLocales = List.push(currentLocales, updatedLocale)\n\t\t\t\t\t\troot.set({ locales: newLocales })\n\t\t\t\t\t\tengine.stores.localizationStore.selectedLocaleId = updatedLocale.id\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(updatedLocale)\n\t\t\t\t})\n\t\t\t})\n\n\t\t\treturn { locale, collection }\n\t\t})\n\t\t.finally(async () => {\n\t\t\tawait engine.scheduler.processWhenReadyAsync(() => {\n\t\t\t\tengine.endUndoGroup()\n\t\t\t})\n\t\t})\n}\n", "import { Button, Stack, TextArea } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { aiServiceEndpoint } from \"app/ai/config/openRouter.ts\"\nimport { generateScreenshotHTML, requestLocalKitScreenshots } from \"app/ai/kits/screenshots.ts\"\nimport engine from \"document/engine.ts\"\nimport { isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { assert } from \"library/utils/assert.ts\"\nimport { startTransition, useEffect, useState } from \"react\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport * as styles from \"./Wireframer.styles.ts\"\nimport { mockCreateLayoutTemplateFromKit, mockCreateWebPage, mockUpdateWebPage } from \"./mockWireframer.ts\"\n\ninterface APICall {\n\tid: string\n\ttimestamp: number\n\tmethod: string\n\turl: string\n\trequest: unknown\n\tresponse?: unknown\n\tstatus?: number\n\terror?: string\n\tisStreaming?: boolean\n\tstreamContent?: string\n}\n\ninterface StreamEventData {\n\tchoices?: Array<{\n\t\tdelta?: {\n\t\t\tcontent?: string\n\t\t}\n\t}>\n}\n\ninterface ApiFetcher {\n\tpost: (endpoint: string, body?: unknown, signal?: AbortSignal) => Promise<unknown>\n\tpostRaw: (endpoint: string, body?: unknown, contentType?: string, signal?: AbortSignal) => Promise<Response>\n\tpostStream: (endpoint: string, partialInit: StreamInit, body?: unknown) => Promise<void>\n}\n\ninterface StreamInit {\n\tonmessage?: (event: { data: string }) => void\n\tonclose?: () => void\n\tonerror?: (error: Error) => void\n\tsignal?: AbortSignal\n\topenWhenHidden?: boolean\n}\n\nclass APIInterceptor {\n\tprivate calls: APICall[] = []\n\tprivate listeners: Set<() => void> = new Set()\n\tprivate originalPost: ApiFetcher[\"post\"] | null = null\n\tprivate originalPostStream: ApiFetcher[\"postStream\"] | null = null\n\tprivate originalPostRaw: ApiFetcher[\"postRaw\"] | null = null\n\tprivate interceptorInitialized = false\n\n\tconstructor() {\n\t\tthis.initializeInterceptor()\n\t}\n\n\tprivate initializeInterceptor() {\n\t\tif (this.interceptorInitialized) return\n\n\t\tconst checkApiFetcher = () => {\n\t\t\timport(\"web/lib/apiFetcher.ts\")\n\t\t\t\t.then(({ apiFetcher }) => {\n\t\t\t\t\tif (!this.interceptorInitialized) {\n\t\t\t\t\t\tthis.setupInterceptor(apiFetcher as ApiFetcher)\n\t\t\t\t\t\tthis.interceptorInitialized = true\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(console.error)\n\t\t}\n\n\t\tcheckApiFetcher()\n\t\tsetTimeout(checkApiFetcher, 100)\n\t}\n\n\tprivate setupInterceptor(apiFetcher: ApiFetcher) {\n\t\tthis.originalPost = apiFetcher.post.bind(apiFetcher)\n\t\tthis.originalPostStream = apiFetcher.postStream.bind(apiFetcher)\n\t\tthis.originalPostRaw = apiFetcher.postRaw.bind(apiFetcher)\n\n\t\tapiFetcher.post = async (endpoint: string, body?: unknown, signal?: AbortSignal) => {\n\t\t\tassert(this.originalPost, \"originalPost is not defined\")\n\n\t\t\tif (endpoint === aiServiceEndpoint) {\n\t\t\t\tconst callId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n\t\t\t\tconst apiCall: APICall = {\n\t\t\t\t\tid: callId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\turl: endpoint,\n\t\t\t\t\trequest: body,\n\t\t\t\t\tisStreaming: false,\n\t\t\t\t}\n\n\t\t\t\tthis.addCall(apiCall)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await this.originalPost(endpoint, body, signal)\n\t\t\t\t\tapiCall.response = response\n\t\t\t\t\tapiCall.status = 200\n\t\t\t\t\tthis.updateCall()\n\t\t\t\t\treturn response\n\t\t\t\t} catch (error) {\n\t\t\t\t\tapiCall.error = error instanceof Error ? error.message : String(error)\n\t\t\t\t\tapiCall.status = 500\n\t\t\t\t\tthis.updateCall()\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.originalPost(endpoint, body, signal)\n\t\t}\n\n\t\tapiFetcher.postStream = (endpoint: string, partialInit: StreamInit, body?: unknown) => {\n\t\t\tassert(this.originalPostStream, \"originalPostStream is not defined\")\n\n\t\t\tif (endpoint === aiServiceEndpoint) {\n\t\t\t\tconst callId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n\t\t\t\tconst apiCall: APICall = {\n\t\t\t\t\tid: callId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tmethod: \"POST (Stream)\",\n\t\t\t\t\turl: endpoint,\n\t\t\t\t\trequest: body,\n\t\t\t\t\tisStreaming: true,\n\t\t\t\t\tstreamContent: \"\",\n\t\t\t\t}\n\n\t\t\t\tthis.addCall(apiCall)\n\n\t\t\t\tconst originalOnMessage = partialInit.onmessage\n\t\t\t\tpartialInit.onmessage = (event: { data: string }) => {\n\t\t\t\t\tif (event.data && event.data !== \"[DONE]\" && event.data.length > 0) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst data: StreamEventData = JSON.parse(event.data)\n\t\t\t\t\t\t\tif (data.choices?.[0]?.delta?.content) {\n\t\t\t\t\t\t\t\tapiCall.streamContent += data.choices[0].delta.content\n\t\t\t\t\t\t\t\tthis.updateCall()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Ignore parsing errors for non-JSON data\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (originalOnMessage) originalOnMessage(event)\n\t\t\t\t}\n\n\t\t\t\tconst originalOnClose = partialInit.onclose\n\t\t\t\tpartialInit.onclose = () => {\n\t\t\t\t\tapiCall.status = 200\n\t\t\t\t\tthis.updateCall()\n\t\t\t\t\tif (originalOnClose) originalOnClose()\n\t\t\t\t}\n\n\t\t\t\tconst originalOnError = partialInit.onerror\n\t\t\t\tpartialInit.onerror = (error: Error) => {\n\t\t\t\t\tapiCall.error = error instanceof Error ? error.message : String(error)\n\t\t\t\t\tapiCall.status = 500\n\t\t\t\t\tthis.updateCall()\n\t\t\t\t\tif (originalOnError) originalOnError(error)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.originalPostStream(endpoint, partialInit, body)\n\t\t}\n\n\t\tapiFetcher.postRaw = async (\n\t\t\tendpoint: string,\n\t\t\tbody?: string | FormData,\n\t\t\tcontentType?: string,\n\t\t\tsignal?: AbortSignal,\n\t\t) => {\n\t\t\tassert(this.originalPostRaw, \"originalPostRaw is not defined\")\n\n\t\t\tif (endpoint === aiServiceEndpoint) {\n\t\t\t\tconst callId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n\t\t\t\tconst apiCall: APICall = {\n\t\t\t\t\tid: callId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\turl: endpoint,\n\t\t\t\t\trequest: body,\n\t\t\t\t\tisStreaming: true,\n\t\t\t\t\tstreamContent: \"\",\n\t\t\t\t}\n\n\t\t\t\tthis.addCall(apiCall)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst upstream = await this.originalPostRaw(endpoint, body, contentType, signal)\n\t\t\t\t\tconst responseType = upstream.headers.get(\"content-type\") ?? \"\"\n\t\t\t\t\tconst isStream = responseType.includes(\"text/event-stream\")\n\n\t\t\t\t\tapiCall.isStreaming = isStream\n\n\t\t\t\t\tif (!isStream) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst clone = upstream.clone()\n\t\t\t\t\t\t\tconst text = await clone.text()\n\t\t\t\t\t\t\tapiCall.response = responseType.includes(\"application/json\") ? JSON.parse(text) : text\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tapiCall.error = error instanceof Error ? error.message : String(error)\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tapiCall.status = upstream.status\n\t\t\t\t\t\t\tthis.updateCall()\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn upstream\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!upstream.body) {\n\t\t\t\t\t\tapiCall.status = upstream.status\n\t\t\t\t\t\tthis.updateCall()\n\t\t\t\t\t\treturn upstream\n\t\t\t\t\t}\n\n\t\t\t\t\tconst [consumer, monitor] = upstream.body.tee()\n\t\t\t\t\tawait this.captureStream(monitor, apiCall)\n\n\t\t\t\t\tconst mirrored = new Response(consumer, {\n\t\t\t\t\t\tstatus: upstream.status,\n\t\t\t\t\t\tstatusText: upstream.statusText,\n\t\t\t\t\t\theaders: upstream.headers,\n\t\t\t\t\t})\n\n\t\t\t\t\tapiCall.status = upstream.status\n\t\t\t\t\tthis.updateCall()\n\t\t\t\t\treturn mirrored\n\t\t\t\t} catch (error) {\n\t\t\t\t\tapiCall.error = error instanceof Error ? error.message : String(error)\n\t\t\t\t\tthis.updateCall()\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.originalPostRaw(endpoint, body, contentType, signal)\n\t\t}\n\t}\n\n\tprivate async captureStream(stream: ReadableStream<Uint8Array>, apiCall: APICall) {\n\t\tconst reader = stream.getReader()\n\t\tconst decoder = new TextDecoder()\n\t\tlet buffer = \"\"\n\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst { value, done } = await reader.read()\n\t\t\t\tif (done) break\n\n\t\t\t\tbuffer += value ? decoder.decode(value, { stream: true }) : \"\"\n\n\t\t\t\tconst segments = buffer.split(\"\\n\\n\")\n\t\t\t\tbuffer = segments.pop() ?? \"\"\n\n\t\t\t\tfor (const segment of segments) {\n\t\t\t\t\tconst match = /^data:\\s*(.*)$/m.exec(segment)\n\t\t\t\t\tif (!match) continue\n\t\t\t\t\tif (match[1] === \"[DONE]\") return\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst payload: StreamEventData = JSON.parse(match[1] ?? \"\")\n\t\t\t\t\t\tconst delta = payload.choices?.[0]?.delta?.content\n\t\t\t\t\t\tif (typeof delta === \"string\" && delta.length > 0) {\n\t\t\t\t\t\t\tapiCall.streamContent = (apiCall.streamContent ?? \"\") + delta\n\t\t\t\t\t\t\tthis.updateCall()\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore non-JSON chunks\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst remaining = decoder.decode()\n\t\t\tif (remaining) {\n\t\t\t\tbuffer += remaining\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tapiCall.error = error instanceof Error ? error.message : String(error)\n\t\t\tthis.updateCall()\n\t\t}\n\t}\n\n\tprivate addCall(call: APICall) {\n\t\tthis.calls.unshift(call)\n\t\tif (this.calls.length > 50) {\n\t\t\tthis.calls = this.calls.slice(0, 50)\n\t\t}\n\t\tthis.notifyListeners()\n\t}\n\n\tprivate updateCall() {\n\t\tthis.notifyListeners()\n\t}\n\n\tprivate notifyListeners() {\n\t\tthis.listeners.forEach(listener => listener())\n\t}\n\n\tgetCalls(): readonly APICall[] {\n\t\treturn this.calls\n\t}\n\n\tsubscribe(listener: () => void): () => void {\n\t\tthis.listeners.add(listener)\n\t\treturn () => this.listeners.delete(listener)\n\t}\n\n\tclear() {\n\t\tthis.calls = []\n\t\tthis.notifyListeners()\n\t}\n}\n\nconst apiInterceptor = new APIInterceptor()\n\nexport function Wireframer() {\n\tconst [calls, setCalls] = useState<readonly APICall[]>([])\n\tconst [, forceUpdate] = useState({})\n\n\tuseEffect(() => {\n\t\tconst unsubscribe = apiInterceptor.subscribe(() => {\n\t\t\tstartTransition(() => {\n\t\t\t\tsetCalls(apiInterceptor.getCalls())\n\t\t\t\tforceUpdate({})\n\t\t\t})\n\t\t})\n\n\t\tsetCalls(apiInterceptor.getCalls())\n\n\t\treturn unsubscribe\n\t}, [])\n\n\tconst handleClear = () => {\n\t\tstartTransition(() => {\n\t\t\tapiInterceptor.clear()\n\t\t})\n\t}\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={12}>\n\t\t\t<Stack direction=\"row\" gap={12}>\n\t\t\t\t<Button onClick={mockCreateWebPage}>Create Web Page</Button>\n\t\t\t\t<Button onClick={mockUpdateWebPage}>Update Web Page</Button>\n\t\t\t\t<Button onClick={mockCreateLayoutTemplateFromKit}>Create Layout Template From Kit</Button>\n\t\t\t\t<Button onClick={downloadActiveKitPageHTML}>Download Kit Page Screenshot HTML</Button>\n\t\t\t\t<Button onClick={requestActiveKitPageScreenshots}>Request Section Screenshots for Active Kit Page</Button>\n\t\t\t</Stack>\n\t\t\t<div className={styles.container}>\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t<Stack direction=\"row\" gap={12}>\n\t\t\t\t\t\t<div style={{ flex: 1 }}>\n\t\t\t\t\t\t\t<h3 className={styles.title}>AI API Monitor</h3>\n\t\t\t\t\t\t\t<p className={styles.subtitle}>\n\t\t\t\t\t\t\t\tMonitoring requests to {aiServiceEndpoint} \u2022 {calls.length} calls captured\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Button onClick={handleClear} enabled={calls.length > 0}>\n\t\t\t\t\t\t\tClear All\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t</div>\n\n\t\t\t\t<div className={styles.content}>\n\t\t\t\t\t{calls.length === 0 ? (\n\t\t\t\t\t\t<div className={styles.emptyState}>\n\t\t\t\t\t\t\t<div className={styles.emptyTitle}>No API calls captured yet</div>\n\t\t\t\t\t\t\t<div className={styles.emptyDescription}>Make an AI request to see it appear here</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Stack direction=\"column\" gap={12}>\n\t\t\t\t\t\t\t{calls.map(call => (\n\t\t\t\t\t\t\t\t<APICallDisplay key={call.id} call={call} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Stack>\n\t)\n}\n\nfunction APICallDisplay({ call }: { call: APICall }) {\n\tconst timestampFormatted = new Date(call.timestamp).toLocaleTimeString()\n\tconst [copyText, setCopyText] = useState<string>(\"\")\n\n\tconst handleCopyRequest = async () => {\n\t\ttry {\n\t\t\tconst text = JSON.stringify(call.request, null, 2)\n\t\t\tawait navigator.clipboard.writeText(text)\n\t\t\tsetCopyText(\"Request copied!\")\n\t\t\tsetTimeout(() => setCopyText(\"\"), 2000)\n\t\t} catch {\n\t\t\tsetCopyText(\"Copy failed\")\n\t\t\tsetTimeout(() => setCopyText(\"\"), 2000)\n\t\t}\n\t}\n\n\tconst handleCopyResponse = async () => {\n\t\ttry {\n\t\t\tconst text = call.isStreaming ? call.streamContent || \"\" : JSON.stringify(call.response, null, 2)\n\t\t\tawait navigator.clipboard.writeText(text)\n\t\t\tsetCopyText(\"Response copied!\")\n\t\t\tsetTimeout(() => setCopyText(\"\"), 2000)\n\t\t} catch {\n\t\t\tsetCopyText(\"Copy failed\")\n\t\t\tsetTimeout(() => setCopyText(\"\"), 2000)\n\t\t}\n\t}\n\n\tconst getStatusBadge = () => {\n\t\tif (call.error) {\n\t\t\treturn <span className={styles.errorBadge}>ERROR</span>\n\t\t}\n\t\tif (call.status === 200) {\n\t\t\treturn <span className={styles.successBadge}>SUCCESS</span>\n\t\t}\n\t\treturn <span className={styles.pendingBadge}>PENDING</span>\n\t}\n\n\treturn (\n\t\t<div className={styles.callCard}>\n\t\t\t<div className={styles.callHeader}>\n\t\t\t\t<Stack direction=\"row\" gap={12}>\n\t\t\t\t\t<div style={{ flex: 1 }}>\n\t\t\t\t\t\t<Stack direction=\"row\" gap={8}>\n\t\t\t\t\t\t\t<span className={styles.methodBadge}>{call.method}</span>\n\t\t\t\t\t\t\t{call.isStreaming && <span className={styles.streamBadge}>STREAM</span>}\n\t\t\t\t\t\t\t{getStatusBadge()}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<div className={styles.timestamp}>{timestampFormatted}</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div style={{ display: \"flex\", gap: 8 }}>\n\t\t\t\t\t\t{copyText && <span className={styles.copyFeedback}>{copyText}</span>}\n\t\t\t\t\t</div>\n\t\t\t\t</Stack>\n\t\t\t</div>\n\n\t\t\t<div className={styles.callContent}>\n\t\t\t\t<Stack direction=\"column\" gap={16}>\n\t\t\t\t\t{/* Request Section */}\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t\t\t<h4 className={styles.sectionTitle} style={{ flex: 1 }}>\n\t\t\t\t\t\t\t\tRequest\n\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t<Button onClick={handleCopyRequest}>Copy</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<TextArea\n\t\t\t\t\t\t\tclassName={styles.codeArea}\n\t\t\t\t\t\t\tvalue={JSON.stringify(call.request, null, 2)}\n\t\t\t\t\t\t\tselectOnFocus={false}\n\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t\tonChange={() => {}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Response Section */}\n\t\t\t\t\t{(call.response || call.streamContent || call.error) && (\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t\t\t\t<h4 className={styles.sectionTitle} style={{ flex: 1 }}>\n\t\t\t\t\t\t\t\t\t{call.isStreaming ? \"Stream Content\" : \"Response\"}\n\t\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t\t<Button onClick={handleCopyResponse}>Copy</Button>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<TextArea\n\t\t\t\t\t\t\t\tclassName={cx(call.error ? styles.errorCodeArea : styles.responseCodeArea)}\n\t\t\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\t\t\tcall.error\n\t\t\t\t\t\t\t\t\t\t? call.error\n\t\t\t\t\t\t\t\t\t\t: call.isStreaming\n\t\t\t\t\t\t\t\t\t\t\t? call.streamContent || \"\"\n\t\t\t\t\t\t\t\t\t\t\t: JSON.stringify(call.response, null, 2)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tselectOnFocus={false}\n\t\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t\t\tonChange={() => {}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nasync function downloadActiveKitPageHTML() {\n\tconst activeScope = engine.stores.scopeStore.active\n\n\tif (!activeScope || !isWebPageNode(activeScope) || !activeScope.kitPage) {\n\t\ttoast({\n\t\t\ttext: \"Open a kit page to download its HTML.\",\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t})\n\t\treturn\n\t}\n\n\tconst kitManifest = engine.tree.root.kitManifest\n\tif (!kitManifest) {\n\t\ttoast({\n\t\t\ttext: \"This project does not have a local kit.\",\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t})\n\t\treturn\n\t}\n\n\ttry {\n\t\tconst html = await generateScreenshotHTML(\n\t\t\tengine.componentLoader,\n\t\t\tengine.stores.treeStore,\n\t\t\tengine.stores.modulesStore,\n\t\t\tengine.stores.codeGenerationStore,\n\t\t\tengine.stores.debugStore,\n\t\t\tengine.stores.publishStore,\n\t\t\tengine.stores.projectStore,\n\t\t\tengine.stores.assetStore,\n\t\t\tengine.scheduler,\n\t\t\tactiveScope.id,\n\t\t)\n\n\t\tif (!html) {\n\t\t\ttoast({\n\t\t\t\ttext: \"No kit sections available to render for this page.\",\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"warning\",\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\tconst blob = new Blob([html], { type: \"text/html;charset=utf-8\" })\n\t\tconst url = URL.createObjectURL(blob)\n\t\tconst anchor = document.createElement(\"a\")\n\t\tconst filename = `kit-page-${activeScope.id}.html`\n\n\t\tanchor.href = url\n\t\tanchor.download = filename\n\t\tdocument.body.appendChild(anchor)\n\t\tanchor.click()\n\t\tdocument.body.removeChild(anchor)\n\t\tURL.revokeObjectURL(url)\n\n\t\ttoast({\n\t\t\ttext: \"Downloading kit page HTML\u2026\",\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"success\",\n\t\t})\n\t} catch (error) {\n\t\ttoast({\n\t\t\ttext: `Failed to generate kit page HTML: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"error\",\n\t\t})\n\t}\n}\n\nasync function requestActiveKitPageScreenshots() {\n\tconst activeScope = engine.stores.scopeStore.active\n\n\tif (!activeScope || !isWebPageNode(activeScope) || !activeScope.kitPage) {\n\t\ttoast({\n\t\t\ttext: \"Open a kit page to request screenshots.\",\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t})\n\t\treturn\n\t}\n\n\tif (!engine.tree.root.kitManifest) {\n\t\ttoast({\n\t\t\ttext: \"This project does not have a local kit.\",\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t})\n\t\treturn\n\t}\n\n\ttry {\n\t\tawait requestLocalKitScreenshots(\n\t\t\tengine.componentLoader,\n\t\t\tengine.stores.treeStore,\n\t\t\tengine.stores.modulesStore,\n\t\t\tengine.stores.codeGenerationStore,\n\t\t\tengine.stores.debugStore,\n\t\t\tengine.stores.publishStore,\n\t\t\tengine.stores.projectStore,\n\t\t\tengine.stores.assetStore,\n\t\t\tengine.scheduler,\n\t\t\t{ pageID: activeScope.id, draft: true, force: true },\n\t\t)\n\t\ttoast({\n\t\t\ttext: \"Requested kit page screenshots.\",\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"success\",\n\t\t})\n\t} catch (error) {\n\t\ttoast({\n\t\t\ttext: `Failed to request kit screenshots: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"error\",\n\t\t})\n\t}\n}\n", "import \"Wireframer.styles_uilgd3.wyw.css\"; export const container = \"container_c17lqnvn\";\nexport const header = \"header_h121r2u3\";\nexport const title = \"title_tlhilzs\";\nexport const subtitle = \"subtitle_s1sgmm3c\";\nexport const content = \"content_c1dtx0q1\";\nexport const emptyState = \"emptyState_e1c2wknu\";\nexport const emptyTitle = \"emptyTitle_e1mryts0\";\nexport const emptyDescription = \"emptyDescription_e3jcors\";\nexport const callCard = \"callCard_cw4jks3\";\nexport const callHeader = \"callHeader_c1260qdp\";\nexport const callContent = \"callContent_c1oe6j9r\";\nexport const methodBadge = \"methodBadge_mgpsfl5\";\nexport const streamBadge = \"streamBadge_s1ol973m\";\nexport const successBadge = \"successBadge_su0358k\";\nexport const errorBadge = \"errorBadge_ea2r4bi\";\nexport const pendingBadge = \"pendingBadge_pxb7dre\";\nexport const timestamp = \"timestamp_t1kfrhnn\";\nexport const copyFeedback = \"copyFeedback_cg444e\";\nexport const sectionTitle = \"sectionTitle_s1yqcw1w\";\nexport const codeArea = \"codeArea_clpvjob\";\nexport const responseCodeArea = \"responseCodeArea_rargt6t\";\nexport const errorCodeArea = \"errorCodeArea_e10zvckn\";", "import { isEmptyObject } from \"@framerjs/shared\"\nimport { DebugWireframerSession } from \"app/ai/WireframerSession.ts\"\nimport { DefaultKit } from \"app/ai/kits/DefaultKit.ts\"\nimport { CommandType, PageMode } from \"app/ai/orchestrator/dsl.ts\"\nimport type { WireframerWorkerTask } from \"app/ai/orchestrator/tasks.ts\"\nimport type { ResolvedSectionsWithControlPropFields } from \"app/ai/sections/types.ts\"\nimport type { KitSectionMeta } from \"app/ai/utils/wireframerKit.ts\"\nimport { getFieldsForSection } from \"app/ai/utils/wireframerKit.ts\"\nimport { createNodeForScope } from \"app/ai/workers/generateWebPage/utils/sectionOperations.ts\"\nimport { RenamedIds } from \"document/components/tools/utils/updateNodeConnections.ts\"\nimport engine from \"document/engine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isDesignPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { shuffle } from \"utils/shuffle.ts\"\n\nconst mockCreateWebPageFeatureRequest =\n\t\"Create a new simple personal page in dark mode that features a list of projects, with project dates starting from 2020 and ending at 2025. The page should be in English and present the content in a clear, straightforward manner suitable for a personal portfolio.\"\n\nconst mockCreateWebPagePlan: WireframerWorkerTask[] = [\n\t{\n\t\ttype: CommandType.CreatePage,\n\t\tid: \"mockNodeId\",\n\t\tpath: \"/personal-projects\",\n\t\tname: \"Personal Projects\",\n\t\tinstructions:\n\t\t\t\"Create a new simple personal page in dark mode that features a list of projects, with project dates starting from 2020 and ending at 2025. The page should be in English and present the content in a clear, straightforward manner suitable for a personal portfolio.\",\n\t\tmode: PageMode.Dark,\n\t},\n]\n\nasync function executeMockPlan(request: string, plan: WireframerWorkerTask[]) {\n\tconst { default: mockKitSectionsWithControlPropFields } = (await import(\n\t\t\"./mockKitSectionsWithControlPropFields.json\",\n\t\t{ with: { type: \"json\" } }\n\t)) as unknown as { default: ResolvedSectionsWithControlPropFields }\n\n\tconst { sections, collections, controlPropFields, vectorSetModuleData = {} } = mockKitSectionsWithControlPropFields\n\n\tconst kit = new DefaultKit(\n\t\t\"mockKit\",\n\t\t\"mockProjectId\",\n\t\tshuffle(sections).reduce<Record<NodeID, KitSectionMeta>>((acc, section) => {\n\t\t\tif (Object.keys(section.data.cmsConnectedFields ?? {}).length > 0) return acc\n\t\t\tacc[section.id] = {\n\t\t\t\tid: section.id,\n\t\t\t\tdescription: section.description,\n\t\t\t\tfields: getFieldsForSection(section.data, controlPropFields),\n\t\t\t\tdetailPageCollectionId: section.data.detailPageCollectionId,\n\t\t\t}\n\t\t\treturn acc\n\t\t}, {}),\n\t\tvectorSetModuleData,\n\t\tcollections ?? [],\n\t\tasync (id: string) => sections.find(section => section.id === id)?.data,\n\t)\n\tconst wireframerSession = new DebugWireframerSession(\n\t\tisDesignPageNode(engine.stores.scopeStore.active) ? engine.stores.scopeStore.active.id : undefined,\n\t)\n\tawait wireframerSession.executePlan(engine, request, plan, kit)\n\tengine.stores.aiGenerationStore.resetGenerationState()\n}\n\nexport function mockCreateWebPage() {\n\tvoid executeMockPlan(mockCreateWebPageFeatureRequest, mockCreateWebPagePlan)\n}\n\nconst mockUpdateWebPageFeatureRequest = \"Add a resume section to the personal projects page.\"\n\nconst mockUpdateWebPagePlan: WireframerWorkerTask[] = [\n\t{\n\t\ttype: CommandType.UpdatePage,\n\t\tid: \"mockNodeId\",\n\t\tinstructions: \"Add a resume section to the personal projects page.\",\n\t\tmode: PageMode.Dark,\n\t},\n]\n\nexport function mockUpdateWebPage() {\n\tvoid executeMockPlan(mockUpdateWebPageFeatureRequest, mockUpdateWebPagePlan)\n}\n\n/**\n * Find the first available layout template in the first available external kit, and create a new\n * layout template from it, if not already exists.\n */\nexport async function mockCreateLayoutTemplateFromKit() {\n\tconst kit = await engine.stores.aiGenerationStore.getKit(engine, {\n\t\tcms: true,\n\t})\n\n\tif (isEmptyObject(kit.layoutTemplates)) return\n\tconst layoutTemplateMeta = Object.values(kit.layoutTemplates)[0]\n\tif (!layoutTemplateMeta) return\n\n\tconst data = await kit.getClipboardDataById(layoutTemplateMeta.id)\n\tif (!data) return\n\n\tconst renamedIds = new RenamedIds()\n\tvoid createNodeForScope(engine, data, renamedIds, true)\n}\n", "import { Button, SegmentedControl, SegmentedControlItem } from \"@framerjs/fresco\"\nimport type { Agent } from \"app/ai/agents/Agent.ts\"\nimport { transformToAiNode } from \"app/ai/agents/context/nodes.ts\"\nimport { getRequestModelMessages } from \"app/ai/agents/messages.ts\"\nimport type { ChecklistTask } from \"app/ai/agents/tools/checklist.ts\"\nimport { CHECKLIST_COMPLETE_TASK_TOOL_NAME, CHECKLIST_CREATE_TOOL_NAME } from \"app/ai/agents/tools/toolNames.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport * as styles from \"./ActiveAgent.styles.ts\"\nimport { extractDSLCommands } from \"./serializeDSL.ts\"\n\nconst views = [\"dsl\", \"checklist\", \"selection\", \"scope\", \"transient\", \"response\"] as const\ntype ActiveView = (typeof views)[number]\n\nconst checklistViews = [\"json\", \"graph\"] as const\ntype ChecklistView = (typeof checklistViews)[number]\n\nconst viewLabels: Record<ActiveView, string> = {\n\tselection: \"Selection\",\n\tscope: \"Scope\",\n\tdsl: \"DSL History\",\n\tchecklist: \"Checklist\",\n\ttransient: \"Messages\",\n\tresponse: \"Model Messages\",\n}\n\nfunction computeDSLHistory(agent: Agent) {\n\treturn agent.chatMessages.flatMap(request => extractDSLCommands(request.state.messages)).join(\"\\n\")\n}\n\nfunction computeTransientMessages(agent: Agent) {\n\tconst messages = agent.chatMessages.flatMap(request => request.state.messages)\n\treturn JSON.stringify(messages, null, 2)\n}\n\nfunction computeResponseMessages(agent: Agent) {\n\tconst messages = agent.chatMessages.flatMap(request => getRequestModelMessages(request, { model: request.model }))\n\treturn JSON.stringify(messages, null, 2)\n}\n\ninterface ChecklistProgress {\n\tcompletedTaskIds: readonly string[]\n\tremainingTaskIds: readonly string[]\n\tavailableTaskIds: readonly string[]\n\tnextTaskId: string | null\n\terror?: string\n\tchecklistUnchanged?: true\n}\n\ninterface ChecklistEvent {\n\ttoolName: typeof CHECKLIST_COMPLETE_TASK_TOOL_NAME | typeof CHECKLIST_CREATE_TOOL_NAME\n\tinput: unknown\n\toutput: unknown\n}\n\ninterface ChecklistTaskView extends ChecklistTask {\n\tcompleted: boolean\n\tavailable: boolean\n\tnext: boolean\n}\n\ninterface ChecklistCurrent extends ChecklistProgress {\n\ttasks: ChecklistTaskView[]\n}\n\ninterface ChecklistData {\n\tcurrent?: ChecklistCurrent\n\tevents: ChecklistEvent[]\n}\n\nfunction getChecklistProgress(output: ChecklistProgress): ChecklistProgress {\n\treturn {\n\t\tcompletedTaskIds: output.completedTaskIds,\n\t\tremainingTaskIds: output.remainingTaskIds,\n\t\tavailableTaskIds: output.availableTaskIds,\n\t\tnextTaskId: output.nextTaskId,\n\t\t...(output.error ? { error: output.error } : {}),\n\t\t...(output.checklistUnchanged ? { checklistUnchanged: output.checklistUnchanged } : {}),\n\t}\n}\n\nfunction computeChecklistData(agent: Agent): ChecklistData | undefined {\n\tlet tasks: readonly ChecklistTask[] | undefined\n\tlet progress: ChecklistProgress | undefined\n\tconst events: ChecklistEvent[] = []\n\n\tfor (const request of agent.chatMessages) {\n\t\tfor (const step of request.steps) {\n\t\t\tfor (const result of step.toolResults) {\n\t\t\t\tif (result.toolName === CHECKLIST_CREATE_TOOL_NAME) {\n\t\t\t\t\tevents.push({ toolName: result.toolName, input: result.input, output: result.output })\n\t\t\t\t\tif (result.output.checklistUnchanged) continue\n\t\t\t\t\ttasks = result.output.tasks\n\t\t\t\t\tprogress = getChecklistProgress(result.output)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (result.toolName === CHECKLIST_COMPLETE_TASK_TOOL_NAME) {\n\t\t\t\t\tevents.push({ toolName: result.toolName, input: result.input, output: result.output })\n\t\t\t\t\tprogress = getChecklistProgress(result.output)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (events.length === 0) return\n\n\tif (!progress) return { events }\n\tconst currentProgress = progress\n\tconst completedTaskIds = new Set(currentProgress.completedTaskIds)\n\tconst availableTaskIds = new Set(currentProgress.availableTaskIds)\n\tconst current = {\n\t\ttasks: (tasks ?? []).map(task => ({\n\t\t\t...task,\n\t\t\tcompleted: completedTaskIds.has(task.id),\n\t\t\tavailable: availableTaskIds.has(task.id),\n\t\t\tnext: currentProgress.nextTaskId === task.id,\n\t\t})),\n\t\tcompletedTaskIds: currentProgress.completedTaskIds,\n\t\tremainingTaskIds: currentProgress.remainingTaskIds,\n\t\tavailableTaskIds: currentProgress.availableTaskIds,\n\t\tnextTaskId: currentProgress.nextTaskId,\n\t\t...(currentProgress.error ? { error: currentProgress.error } : {}),\n\t\t...(currentProgress.checklistUnchanged ? { checklistUnchanged: currentProgress.checklistUnchanged } : {}),\n\t}\n\n\treturn { current, events }\n}\n\nfunction formatChecklistJSON(data: ChecklistData | undefined) {\n\treturn data ? JSON.stringify(data, null, 2) : \"\"\n}\n\nfunction getChecklistGraphColumns(tasks: readonly ChecklistTaskView[]) {\n\tconst tasksById = new Map(tasks.map(task => [task.id, task]))\n\tconst depthById = new Map<string, number>()\n\tconst visitingTaskIds = new Set<string>()\n\n\tconst getDepth = (task: ChecklistTaskView): number => {\n\t\tconst depth = depthById.get(task.id)\n\t\tif (depth !== undefined) return depth\n\t\tif (visitingTaskIds.has(task.id)) return 0\n\n\t\tvisitingTaskIds.add(task.id)\n\t\tconst dependencyDepths = (task.dependsOn ?? []).flatMap(dependencyId => {\n\t\t\tconst dependency = tasksById.get(dependencyId)\n\t\t\treturn dependency ? [getDepth(dependency) + 1] : []\n\t\t})\n\t\tconst nextDepth = Math.max(0, ...dependencyDepths)\n\t\tvisitingTaskIds.delete(task.id)\n\t\tdepthById.set(task.id, nextDepth)\n\t\treturn nextDepth\n\t}\n\n\tconst columns: ChecklistTaskView[][] = []\n\tfor (const task of tasks) {\n\t\tconst depth = getDepth(task)\n\t\tconst column = columns[depth] ?? []\n\t\tcolumn.push(task)\n\t\tcolumns[depth] = column\n\t}\n\n\treturn columns\n}\n\nfunction getChecklistTaskLabel(task: ChecklistTaskView) {\n\treturn task.title || task.id\n}\n\nfunction formatChecklistGraph(data: ChecklistData | undefined) {\n\tconst tasks = data?.current?.tasks\n\tif (!tasks?.length) return \"\"\n\n\treturn getChecklistGraphColumns(tasks)\n\t\t.map(column => column.map(task => `[${task.completed ? \"x\" : \" \"}] ${getChecklistTaskLabel(task)}`).join(\"\\n\"))\n\t\t.join(\"\\n ->\\n\")\n}\n\nfunction ChecklistGraph({ data }: { data: ChecklistData | undefined }) {\n\tconst tasks = data?.current?.tasks\n\tif (!tasks?.length) return <div className={styles.checklistEmpty}>No checklist yet.</div>\n\n\tconst columns = getChecklistGraphColumns(tasks)\n\treturn (\n\t\t<section className={styles.graphContent} aria-label=\"Checklist dependency graph\">\n\t\t\t{columns.map((column, columnIndex) => (\n\t\t\t\t<div className={styles.graphStage} key={columnIndex}>\n\t\t\t\t\t<div className={styles.graphColumn}>\n\t\t\t\t\t\t{column.map(task => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={task.id}\n\t\t\t\t\t\t\t\tclassName={styles.graphNode}\n\t\t\t\t\t\t\t\tdata-available={task.available}\n\t\t\t\t\t\t\t\tdata-next={task.next}\n\t\t\t\t\t\t\t\ttitle={task.description ?? task.id}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className={styles.graphCheck}>[{task.completed ? \"x\" : \" \"}]</span>\n\t\t\t\t\t\t\t\t<span className={styles.graphLabel} data-completed={task.completed}>\n\t\t\t\t\t\t\t\t\t{getChecklistTaskLabel(task)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t\t{columnIndex < columns.length - 1 && (\n\t\t\t\t\t\t<div className={styles.graphArrow} aria-hidden>\n\t\t\t\t\t\t\t{\"\\u2192\"}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</section>\n\t)\n}\n\nexport function ActiveAgent() {\n\tconst activeAgent = useEngineState(\n\t\t() => {\n\t\t\tconst id = engine.stores.agentStore.activeChatAgentId\n\t\t\tif (!id) return\n\n\t\t\treturn engine.stores.agentStore.getAgent(id)\n\t\t},\n\t\t[],\n\t\tengine.stores.agentStore,\n\t)\n\n\tconst [activeView, setActiveView] = useState<ActiveView>(\"dsl\")\n\tconst [activeChecklistView, setActiveChecklistView] = useState<ChecklistView>(\"graph\")\n\tconst [asyncOutput, setAsyncOutput] = useState(\"\")\n\tconst [copied, setCopied] = useState(false)\n\tconst copiedTimeout = useRef<ReturnType<typeof setTimeout>>()\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tclearTimeout(copiedTimeout.current)\n\t\t}\n\t}, [])\n\n\tconst checklistData = useEngineState(\n\t\t() => {\n\t\t\tif (!activeAgent || activeView !== \"checklist\") return\n\t\t\treturn computeChecklistData(activeAgent)\n\t\t},\n\t\t[activeView, activeAgent],\n\t\tengine.stores.agentStore,\n\t\t{ deepEqual: true },\n\t)\n\n\t// Live sync for DSL and Messages\n\tconst syncOutput = useEngineState(\n\t\t() => {\n\t\t\tif (!activeAgent) return null\n\n\t\t\tif (activeView === \"dsl\") return computeDSLHistory(activeAgent)\n\t\t\tif (activeView === \"transient\") return computeTransientMessages(activeAgent)\n\t\t\tif (activeView === \"response\") return computeResponseMessages(activeAgent)\n\n\t\t\treturn null\n\t\t},\n\t\t[activeView, activeAgent],\n\t\t[engine.stores.agentStore, engine.stores.selectionStore, engine.stores.scopeStore],\n\t)\n\n\tconst checklistOutput =\n\t\tactiveView === \"checklist\" && activeChecklistView === \"json\" ? formatChecklistJSON(checklistData) : \"\"\n\tconst isSyncView = activeView === \"dsl\" || activeView === \"transient\" || activeView === \"response\"\n\tconst output = activeView === \"checklist\" ? checklistOutput : isSyncView ? syncOutput : asyncOutput\n\tconst copyValue =\n\t\tactiveView === \"checklist\" && activeChecklistView === \"graph\" ? formatChecklistGraph(checklistData) : output\n\n\tconst selectedNodes = useEngineState(() => engine.stores.selectionStore.nodes, [], [engine.stores.selectionStore])\n\tconst activeScope = useEngineState(() => engine.stores.scopeStore.active, [], [engine.stores.scopeStore])\n\n\t// Serializing the scope and nodes is async so its done in a useEffect.\n\tuseEffect(() => {\n\t\tif (!activeAgent) return\n\t\tconst ctx = activeAgent.debugContext\n\t\tif (!ctx) return\n\n\t\tlet isAborted = false\n\t\tswitch (activeView) {\n\t\t\tcase \"selection\": {\n\t\t\t\tif (!selectedNodes) return\n\n\t\t\t\tconst compute = async () => {\n\t\t\t\t\tconst selection = await transformToAiNode(selectedNodes, ctx)\n\t\t\t\t\tconst json = JSON.stringify(selection, null, 2)\n\n\t\t\t\t\tif (isAborted) return\n\t\t\t\t\tsetAsyncOutput(json)\n\t\t\t\t}\n\n\t\t\t\tvoid compute()\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase \"scope\": {\n\t\t\t\tif (!activeScope) return\n\n\t\t\t\tconst compute = async () => {\n\t\t\t\t\tconst scope = await transformToAiNode([activeScope], ctx)\n\t\t\t\t\tconst json = JSON.stringify(scope, null, 2)\n\n\t\t\t\t\tif (isAborted) return\n\t\t\t\t\tsetAsyncOutput(json)\n\t\t\t\t}\n\n\t\t\t\tvoid compute()\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tisAborted = true\n\t\t}\n\t}, [selectedNodes, activeAgent, activeScope, activeView])\n\n\tconst handleCopy = useCallback(() => {\n\t\tif (!copyValue) return\n\t\tvoid navigator.clipboard.writeText(copyValue)\n\t\tsetCopied(true)\n\t\tclearTimeout(copiedTimeout.current)\n\t\tcopiedTimeout.current = setTimeout(() => setCopied(false), 1000)\n\t}, [copyValue])\n\n\tif (!activeAgent) {\n\t\treturn <div className={styles.emptyState}>No active agent session. Start a chat to use these tools.</div>\n\t}\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<div className={styles.sidebar}>\n\t\t\t\t<SegmentedControl unsaturated direction=\"vertical\">\n\t\t\t\t\t{views.map(view => (\n\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\tkey={view}\n\t\t\t\t\t\t\ttitle={viewLabels[view]}\n\t\t\t\t\t\t\tselected={activeView === view}\n\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\tsetActiveView(view)\n\t\t\t\t\t\t\t\tsetAsyncOutput(\"\")\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</SegmentedControl>\n\t\t\t</div>\n\t\t\t<div className={styles.outputPanel}>\n\t\t\t\t{activeView === \"checklist\" && (\n\t\t\t\t\t<div className={styles.checklistHeader}>\n\t\t\t\t\t\t<SegmentedControl unsaturated className={styles.checklistModeControl}>\n\t\t\t\t\t\t\t{checklistViews.map(view => (\n\t\t\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\t\t\tkey={view}\n\t\t\t\t\t\t\t\t\ttitle={view === \"json\" ? \"JSON\" : \"Graph\"}\n\t\t\t\t\t\t\t\t\tselected={activeChecklistView === view}\n\t\t\t\t\t\t\t\t\tonSelect={() => setActiveChecklistView(view)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</SegmentedControl>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{activeView === \"checklist\" && activeChecklistView === \"graph\" ? (\n\t\t\t\t\t<ChecklistGraph data={checklistData} />\n\t\t\t\t) : (\n\t\t\t\t\t<pre className={styles.outputContent}>{output}</pre>\n\t\t\t\t)}\n\t\t\t\t{copyValue && (\n\t\t\t\t\t<Button onClick={handleCopy} className={styles.copyButton}>\n\t\t\t\t\t\t{copied ? \"Copied\" : \"Copy\"}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n", "import \"ActiveAgent.styles_1hh0hmz.wyw.css\"; export const emptyState = \"emptyState_e1acpqf9\";\nexport const container = \"container_c1dv3jji\";\nexport const sidebar = \"sidebar_szenmyz\";\nexport const outputPanel = \"outputPanel_o1sqhxh9\";\nexport const outputContent = \"outputContent_o1cq3kvp\";\nexport const checklistHeader = \"checklistHeader_c423vey\";\nexport const checklistModeControl = \"checklistModeControl_c6ex18x\";\nexport const checklistEmpty = \"checklistEmpty_c5g00my\";\nexport const graphContent = \"graphContent_g1gbgpre\";\nexport const graphStage = \"graphStage_go15qbt\";\nexport const graphColumn = \"graphColumn_g1m9pb5m\";\nexport const graphArrow = \"graphArrow_gmi0nwc\";\nexport const graphCheck = \"graphCheck_g179dfmj\";\nexport const graphLabel = \"graphLabel_gn4nhzo\";\nexport const graphNode = \"graphNode_gyb9or2\";\nexport const copyButton = \"copyButton_c8pqn1f\";", "import { commandToDSL } from \"app/ai/agents/nodeToDSLCommands.ts\"\nimport type { TransientTurnMessage } from \"app/ai/agents/types.ts\"\n\nexport function extractDSLCommands(messages: readonly TransientTurnMessage[]): string[] {\n\tconst commands: string[] = []\n\n\tfor (const message of messages) {\n\t\tif (message.type !== \"command\") continue\n\t\tconst serialized = serializeCommand(message)\n\t\tif (serialized) commands.push(serialized)\n\t}\n\n\treturn commands\n}\n\n/**\n * Serializes a DSL command back into DSL for easy replay.\n */\nfunction serializeCommand(message: Extract<TransientTurnMessage, { type: \"command\" }>): string | undefined {\n\treturn commandToDSL(message.command)\n}\n", "import \"Agents.styles_mmcsew.wyw.css\"; export const container = \"container_c13qhc7g\";\nexport const categorySelector = \"categorySelector_cgo79rd\";\nexport const content = \"content_c17arqkr\";\nexport const historyColumns = \"historyColumns_h58e5o8\";", "import { assertNever, errorFromUnknown } from \"@framerjs/shared\"\nimport { noop } from \"@framerjs/shared/src/noop.ts\"\nimport { createAgentAttachmentImage } from \"app/agent/attachments.ts\"\nimport { estimateTextTokens } from \"app/ai/agents/tokens.ts\"\nimport type { AgentRequestAbortedReason } from \"app/ai/agents/types.ts\"\nimport { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { getDefaultReasoningEffortForModel } from \"app/ai/models.ts\"\nimport engine from \"document/engine.ts\"\nimport { startTransition, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { isNull } from \"utils/typeChecks.ts\"\nimport { type ImageUploadResult, uploadService } from \"web/pages/project/lib/UploadService.ts\"\nimport { getSelectionForAgent } from \"../../agentPanel/AgentChatPanel.tsx\"\nimport { ChatContainer, type InstrumentedModelMessage } from \"./Chat.tsx\"\nimport { type DSLEvent, EventsLog, commandToEvent } from \"./Events.tsx\"\n\nconst MAX_ATTACHMENTS = 5\n\nfunction getAgentRequestErrorMessage(error: AgentRequestAbortedReason): string {\n\tif (\"message\" in error && error.message) return error.message\n\n\tswitch (error.reason) {\n\t\tcase \"error\":\n\t\t\treturn \"Generation failed.\"\n\t\tcase \"credit-limit-reached\":\n\t\t\treturn \"Out of credits.\"\n\t\tcase \"ai-disabled\":\n\t\t\treturn \"AI features disabled.\"\n\t\tcase \"user-stopped\":\n\t\t\treturn \"Generation stopped.\"\n\t\tcase \"queue-interrupted\":\n\t\tcase \"unknown\":\n\t\t\treturn \"Generation interrupted.\"\n\t\tdefault:\n\t\t\tassertNever(error, \"Unknown agent request error\")\n\t}\n}\n\nfunction getAgentSessionError(agentSession: ReturnType<typeof engine.stores.agentStore.create>): Error | undefined {\n\tconst aborted = agentSession.chatMessages.at(-1)?.aborted\n\tif (aborted) return new Error(getAgentRequestErrorMessage(aborted))\n\tif (agentSession.state === \"error\") return new Error(\"Generation failed.\")\n\treturn undefined\n}\n\ninterface PendingImage {\n\tfile: File\n\tresult: ImageUploadResult | null\n\tisUploading: boolean\n}\n\nexport function AiDSL() {\n\tconst [userInput, setUserInput] = useState(\"\")\n\tconst [events, setEvents] = useState<DSLEvent[]>([])\n\tconst [isStreaming, setIsStreaming] = useState(false)\n\tconst [isThinking, setIsThinking] = useState(false)\n\tconst [streamingContent, setStreamingContent] = useState(\"\")\n\tconst [streamingStartTime, setStreamingStartTime] = useState<number | null>(null)\n\tconst [chatHistory, setChatHistory] = useState<InstrumentedModelMessage[]>([])\n\tconst [selectedModelConfig, setSelectedModelConfig] = useState(() => ({\n\t\tmodel: LanguageModel.GPT51,\n\t\treasoningEffort: getDefaultReasoningEffortForModel(LanguageModel.GPT51),\n\t}))\n\tconst [pendingImages, setPendingImages] = useState<PendingImage[]>([])\n\tconst scrollRef = useRef<HTMLDivElement>(null)\n\tconst messagesEndRef = useRef<HTMLDivElement>(null)\n\tconst agentSessionRef = useRef<ReturnType<typeof engine.stores.agentStore.create> | null>(null)\n\n\tconst isUploadingImages = useMemo(() => pendingImages.some(img => img.isUploading), [pendingImages])\n\tconst attachedImages = useMemo(() => pendingImages.map(img => img.file), [pendingImages])\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (agentSessionRef.current) {\n\t\t\t\tvoid agentSessionRef.current.stop()\n\t\t\t\tengine.stores.agentStore.dismiss(agentSessionRef.current.id)\n\t\t\t}\n\t\t}\n\t}, [])\n\n\tconst scrollToBottom = useCallback(() => {\n\t\tmessagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" })\n\t\tscrollRef.current?.scrollIntoView({ behavior: \"smooth\" })\n\t}, [])\n\n\tconst uploadImage = useCallback((file: File) => {\n\t\tconst pending: PendingImage = { file, result: null, isUploading: true }\n\n\t\tsetPendingImages(prev => {\n\t\t\tif (prev.length >= MAX_ATTACHMENTS) return prev\n\t\t\treturn [...prev, pending]\n\t\t})\n\n\t\tvoid uploadService.uploadImage(file, { silent: true }).then(result => {\n\t\t\tsetPendingImages(prev =>\n\t\t\t\tprev.map(img => (img.file === file ? { ...img, result: result ?? null, isUploading: false } : img)),\n\t\t\t)\n\t\t})\n\t}, [])\n\n\tconst handleFiles = useCallback(\n\t\t(files: File[]) => {\n\t\t\tfor (const file of files) {\n\t\t\t\tif (!file.type.startsWith(\"image/\")) continue\n\t\t\t\tuploadImage(file)\n\t\t\t}\n\t\t},\n\t\t[uploadImage],\n\t)\n\n\tconst handleDrop = useCallback(\n\t\t(event: DragEvent) => {\n\t\t\tif (!event.dataTransfer?.files?.length) return\n\t\t\tconst files = Array.from(event.dataTransfer.files)\n\t\t\thandleFiles(files)\n\t\t},\n\t\t[handleFiles],\n\t)\n\n\tconst handlePaste = useCallback(\n\t\t(event: React.ClipboardEvent) => {\n\t\t\tif (!event.clipboardData?.files?.length) return\n\t\t\tconst files = Array.from(event.clipboardData.files)\n\t\t\thandleFiles(files)\n\t\t},\n\t\t[handleFiles],\n\t)\n\n\tconst handleRemoveImage = useCallback((index: number) => {\n\t\tsetPendingImages(prev => {\n\t\t\tconst next = [...prev]\n\t\t\tnext.splice(index, 1)\n\t\t\treturn next\n\t\t})\n\t}, [])\n\n\tconst handleSend = useCallback(async () => {\n\t\tif ((!userInput.trim() && pendingImages.length === 0) || isStreaming || isUploadingImages) return\n\n\t\tconst currentInput = userInput\n\t\tconst images = pendingImages.reduce<ReturnType<typeof createAgentAttachmentImage>[]>((acc, img) => {\n\t\t\tif (!isNull(img.result)) acc.push(createAgentAttachmentImage(img.result))\n\t\t\treturn acc\n\t\t}, [])\n\n\t\tconst startTime = Date.now()\n\t\tconst perfStartTime = performance.now()\n\n\t\tconst userMessage: InstrumentedModelMessage = { role: \"user\", content: currentInput, timestamp: startTime }\n\n\t\tstartTransition(() => {\n\t\t\tsetChatHistory(prev => [...prev, userMessage])\n\t\t\tsetUserInput(\"\")\n\t\t\tsetPendingImages([])\n\t\t\tsetIsThinking(true)\n\t\t\tsetIsStreaming(true)\n\t\t\tsetStreamingContent(\"\")\n\t\t\tsetStreamingStartTime(startTime)\n\t\t\tsetEvents([])\n\t\t})\n\n\t\t// Scroll after user message is added\n\t\tsetTimeout(scrollToBottom, 0)\n\n\t\tlet fullText = \"\"\n\t\tlet estimatedInputTokens = 0\n\n\t\t// Clean up previous session if it exists\n\t\tif (agentSessionRef.current) {\n\t\t\tengine.stores.agentStore.dismiss(agentSessionRef.current.id)\n\t\t\tagentSessionRef.current = null\n\t\t}\n\n\t\tconst selection = engine.stores.selectionStore.nodes\n\t\tconst agentSession = engine.stores.agentStore.create(\n\t\t\t{\n\t\t\t\tselection: selection.map(node => node.id),\n\t\t\t\tscopeId: engine.stores.scopeStore.active.id,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonContext: context => {\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetEvents([\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"message_sent\",\n\t\t\t\t\t\t\t\tmessage: currentInput,\n\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t// @TODO: Add nodes\n\t\t\t\t\t\t\t\tnodes: [],\n\t\t\t\t\t\t\t\ttimestamp: perfStartTime,\n\t\t\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t])\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tonFirstToken: () => {\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetIsThinking(false)\n\t\t\t\t\t\tsetEvents(prev => [\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"first_token_received\",\n\t\t\t\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\t\t\t\tduration: performance.now() - perfStartTime,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t])\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tonPart: part => {\n\t\t\t\t\tif (part.type !== \"text\") return\n\t\t\t\t\tfullText += part.text\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetStreamingContent(fullText)\n\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t})\n\t\t\t\t\treturn { ui: noop }\n\t\t\t\t},\n\t\t\t\tonCommandApplied: (command, diagnostics, raw) => {\n\t\t\t\t\tconst estimatedTokens = estimateTextTokens(raw)\n\t\t\t\t\testimatedInputTokens += estimatedTokens\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetEvents(prev => [\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"line_received\",\n\t\t\t\t\t\t\t\tline: raw,\n\t\t\t\t\t\t\t\testimatedTokens,\n\t\t\t\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\t\t\t\tduration: performance.now() - perfStartTime,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcommandToEvent(command, perfStartTime, diagnostics),\n\t\t\t\t\t\t])\n\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tonParseError: (line, error) => {\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetEvents(prev => [\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\t\terror: errorFromUnknown(error),\n\t\t\t\t\t\t\t\tline,\n\t\t\t\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\t\t\t\tduration: performance.now() - perfStartTime,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t])\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tonCommandFailed: (line, error) => {\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetEvents(prev => [\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\t\terror: errorFromUnknown(error),\n\t\t\t\t\t\t\t\tline,\n\t\t\t\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\t\t\t\tduration: performance.now() - perfStartTime,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t])\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\n\t\tagentSessionRef.current = agentSession\n\n\t\tlet sendError: Error | undefined\n\t\ttry {\n\t\t\tawait agentSession.send(\n\t\t\t\t[currentInput],\n\t\t\t\tgetSelectionForAgent(engine.stores.scopeStore.active),\n\t\t\t\tselectedModelConfig.model,\n\t\t\t\tselectedModelConfig.reasoningEffort,\n\t\t\t\timages,\n\t\t\t)\n\t\t} catch (error) {\n\t\t\tsendError = errorFromUnknown(error)\n\t\t}\n\n\t\tconst agentError = sendError ?? getAgentSessionError(agentSession)\n\t\tstartTransition(() => {\n\t\t\tsetChatHistory(prev => [\n\t\t\t\t...prev,\n\t\t\t\t{\n\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\tcontent: fullText,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tdurationMs: Date.now() - startTime,\n\t\t\t\t},\n\t\t\t])\n\t\t\tsetEvents(prev => [\n\t\t\t\t...prev,\n\t\t\t\tagentError\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\terror: agentError,\n\t\t\t\t\t\t\tline: \"response\",\n\t\t\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\t\t\tduration: performance.now() - perfStartTime,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\ttype: \"complete\",\n\t\t\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\t\t\tduration: performance.now() - perfStartTime,\n\t\t\t\t\t\t\tusage: agentSession.usage,\n\t\t\t\t\t\t\testimatedInputTokens,\n\t\t\t\t\t\t},\n\t\t\t])\n\t\t\tsetIsStreaming(false)\n\t\t\tsetIsThinking(false)\n\t\t\tsetStreamingContent(\"\")\n\t\t\tsetStreamingStartTime(null)\n\t\t\tscrollToBottom()\n\t\t})\n\t}, [userInput, pendingImages, isStreaming, isUploadingImages, selectedModelConfig, scrollToBottom])\n\n\tconst handleCancel = useCallback(() => {\n\t\tvoid agentSessionRef.current?.stop()\n\t}, [])\n\n\tconst handleNewSession = useCallback(() => {\n\t\tstartTransition(() => {\n\t\t\tsetChatHistory([])\n\t\t\tsetEvents([])\n\t\t\tsetStreamingContent(\"\")\n\t\t\tsetStreamingStartTime(null)\n\t\t\tsetPendingImages([])\n\t\t})\n\t}, [])\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent) => {\n\t\t\tif (event.key === \"Enter\" && !event.shiftKey) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvoid handleSend()\n\t\t\t}\n\t\t},\n\t\t[handleSend],\n\t)\n\n\treturn (\n\t\t<ChatContainer\n\t\t\tmessages={chatHistory}\n\t\t\tstreamingContent={streamingContent}\n\t\t\tstreamingStartTime={streamingStartTime}\n\t\t\tisThinking={isThinking}\n\t\t\tisStreaming={isStreaming}\n\t\t\tselectedModel={selectedModelConfig.model}\n\t\t\tonModelChange={model =>\n\t\t\t\tsetSelectedModelConfig({ model, reasoningEffort: getDefaultReasoningEffortForModel(model) })\n\t\t\t}\n\t\t\tonNewSession={handleNewSession}\n\t\t\tuserInput={userInput}\n\t\t\tonUserInputChange={setUserInput}\n\t\t\tonSend={handleSend}\n\t\t\tonCancel={handleCancel}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tmessagesEndRef={messagesEndRef}\n\t\t\tattachedImages={attachedImages}\n\t\t\tisUploadingImages={isUploadingImages}\n\t\t\tonDrop={handleDrop}\n\t\t\tonPaste={handlePaste}\n\t\t\tonRemoveImage={handleRemoveImage}\n\t\t>\n\t\t\t<EventsLog events={events} scrollRef={scrollRef} />\n\t\t</ChatContainer>\n\t)\n}\n", "import { Button, FileDropZone, Scroll, Stack, TextArea } from \"@framerjs/fresco\"\nimport { IconInputClose } from \"@framerjs/fresco/icons\"\nimport { cx } from \"@linaria/core\"\nimport type { ModelMessage } from \"ai\"\nimport { ModelPicker } from \"app/agent/components/ModelPicker/ModelPicker.tsx\"\nimport type { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { allModels } from \"app/ai/languageModels.ts\"\n\nimport { startTransition, useEffect, useState } from \"react\"\nimport type React from \"react\"\nimport { isArray, isString, isUndefined } from \"utils/typeChecks.ts\"\nimport * as styles from \"./Chat.styles.ts\"\n\ninterface ChatBubbleProps {\n\tmessage: InstrumentedModelMessage\n\tisStreaming?: boolean\n\tisThinking?: boolean\n}\n\nconst assistantName = \"Framer Agent\"\n\nfunction renderContent(content: string | unknown[]) {\n\tif (isString(content)) return content\n\tif (isArray(content)) {\n\t\tconst images = content.filter((part: any) => part.type === \"image\" || part.type === \"image_url\")\n\t\tconst textParts = content.filter((part: any) => part.type === \"text\")\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{images.length > 0 && (\n\t\t\t\t\t<div className={styles.chatImagesContainer}>\n\t\t\t\t\t\t{images.map((part: any, i) => {\n\t\t\t\t\t\t\tconst image = part.image || part.image_url\n\t\t\t\t\t\t\tconst url = isString(image) ? image : image instanceof URL ? image.toString() : image.url\n\t\t\t\t\t\t\treturn <img key={i} src={url} alt=\"attached\" className={styles.chatAttachmentImage} decoding=\"async\" />\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{textParts.map((part: any, i) => (\n\t\t\t\t\t<span key={i}>{part.text}</span>\n\t\t\t\t))}\n\t\t\t</>\n\t\t)\n\t}\n\treturn null\n}\n\nfunction ChatBubble({ message, isStreaming, isThinking }: ChatBubbleProps) {\n\tconst { role, content, timestamp, durationMs } = message\n\tconst isUser = role === \"user\"\n\tconst isLive = isStreaming || isThinking\n\tconst [liveDuration, setLiveDuration] = useState(0)\n\n\tuseEffect(() => {\n\t\tif (!isLive) return\n\t\tconst interval = setInterval(() => {\n\t\t\tsetLiveDuration(Date.now() - timestamp)\n\t\t}, 100)\n\t\treturn () => clearInterval(interval)\n\t}, [isLive, timestamp])\n\n\tconst duration = isLive ? liveDuration : durationMs\n\tconst timeInfo =\n\t\t!isUser && !isUndefined(duration) ? `${formatTime(timestamp)} \u00B7 ${formatDuration(duration)}` : formatTime(timestamp)\n\n\treturn (\n\t\t<div className={cx(styles.bubbleWrapper, isUser ? styles.bubbleWrapperUser : styles.bubbleWrapperAssistant)}>\n\t\t\t{!isUser && <div className={styles.bubbleLabel}>{assistantName}</div>}\n\t\t\t<div\n\t\t\t\tclassName={cx(\n\t\t\t\t\t\"wantsNativeTextAction\",\n\t\t\t\t\tstyles.bubble,\n\t\t\t\t\tisUser ? styles.bubbleUser : styles.bubbleAssistant,\n\t\t\t\t\tisLive && styles.bubbleStreaming,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{isThinking ? (\n\t\t\t\t\t<span className={styles.thinkingText}>\n\t\t\t\t\t\t<span className={styles.thinkingDots} />\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{renderContent(content)}\n\t\t\t\t\t\t{isStreaming && <span className={styles.streamingCursor}>\u258A</span>}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclassName={cx(styles.bubbleTimestamp, isUser ? styles.bubbleTimestampUser : styles.bubbleTimestampAssistant)}\n\t\t\t>\n\t\t\t\t{timeInfo}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport type InstrumentedModelMessage = Exclude<ModelMessage, { role: \"system\" | \"tool\" }> & {\n\ttimestamp: number\n\tdurationMs?: number\n}\n\ninterface ChatContainerProps {\n\tmessages: InstrumentedModelMessage[]\n\tstreamingContent?: string\n\tstreamingStartTime?: number | null\n\tisThinking?: boolean\n\tisStreaming?: boolean\n\tselectedModel: LanguageModel\n\tonModelChange: (model: LanguageModel) => void\n\tonNewSession: () => void\n\tuserInput: string\n\tonUserInputChange: (value: string) => void\n\tonSend: () => void\n\tonCancel: () => void\n\tonKeyDown: (event: React.KeyboardEvent) => void\n\tmessagesEndRef: React.RefObject<HTMLDivElement>\n\tchildren?: React.ReactNode // For EventsLog\n\tattachedImages?: File[]\n\tisUploadingImages?: boolean\n\tonDrop?: (event: DragEvent) => void\n\tonPaste?: (event: React.ClipboardEvent) => void\n\tonRemoveImage?: (index: number) => void\n}\n\nfunction AttachmentPreview({ file, onRemove }: { file: File; onRemove?: () => void }) {\n\tconst [src, setSrc] = useState<string | null>(null)\n\n\tuseEffect(() => {\n\t\tconst objectUrl = URL.createObjectURL(file)\n\t\tsetSrc(objectUrl)\n\t\treturn () => URL.revokeObjectURL(objectUrl)\n\t}, [file])\n\n\tif (!src) return null\n\n\treturn (\n\t\t<div className={styles.attachmentPreview}>\n\t\t\t<img src={src} alt={file.name} className={styles.attachmentImage} decoding=\"async\" />\n\t\t\t{onRemove && (\n\t\t\t\t<button type=\"button\" className={styles.removeButton} onClick={onRemove}>\n\t\t\t\t\t<IconInputClose />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nexport function ChatContainer({\n\tmessages,\n\tstreamingContent,\n\tstreamingStartTime,\n\tisThinking,\n\tisStreaming,\n\tselectedModel,\n\tonModelChange,\n\tonNewSession,\n\tuserInput,\n\tonUserInputChange,\n\tonSend,\n\tonCancel,\n\tonKeyDown,\n\tmessagesEndRef,\n\tchildren,\n\tattachedImages = [],\n\tisUploadingImages = false,\n\tonDrop,\n\tonPaste,\n\tonRemoveImage,\n}: ChatContainerProps) {\n\treturn (\n\t\t<FileDropZone className={styles.container} onDrop={onDrop || (() => {})}>\n\t\t\t<Stack direction=\"row\" gap={12} className={styles.container}>\n\t\t\t\t<Stack direction=\"column\" gap={0} className={styles.chatColumn}>\n\t\t\t\t\t<div className={styles.chatHeader}>\n\t\t\t\t\t\t<span className={styles.chatTitle}>AI Chat</span>\n\t\t\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t\t\t<ModelPicker selected={selectedModel} onModelChange={onModelChange} models={allModels} />\n\t\t\t\t\t\t\t<Button onClick={onNewSession}>New Session</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<Scroll className={styles.messagesContainer}>\n\t\t\t\t\t\t{messages.length === 0 && !isStreaming && (\n\t\t\t\t\t\t\t<div className={styles.emptyState}>Start a conversation to generate DSL</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{messages.map((msg, i) => {\n\t\t\t\t\t\t\tif (msg.role !== \"user\" && msg.role !== \"assistant\") return null\n\t\t\t\t\t\t\treturn <ChatBubble key={`${msg.role}-${i}`} message={msg} />\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{isThinking && (\n\t\t\t\t\t\t\t<ChatBubble\n\t\t\t\t\t\t\t\tmessage={{\n\t\t\t\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\t\t\t\tcontent: \"\",\n\t\t\t\t\t\t\t\t\ttimestamp: streamingStartTime ?? Date.now(),\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tisThinking\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!isThinking && isStreaming && streamingContent && (\n\t\t\t\t\t\t\t<ChatBubble\n\t\t\t\t\t\t\t\tmessage={{\n\t\t\t\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\t\t\t\tcontent: streamingContent,\n\t\t\t\t\t\t\t\t\ttimestamp: streamingStartTime ?? Date.now(),\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tisStreaming\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div ref={messagesEndRef} />\n\t\t\t\t\t</Scroll>\n\n\t\t\t\t\t<div className={styles.inputArea}>\n\t\t\t\t\t\t{attachedImages.length > 0 && (\n\t\t\t\t\t\t\t<div className={styles.attachmentsContainer}>\n\t\t\t\t\t\t\t\t{attachedImages.map((file, i) => (\n\t\t\t\t\t\t\t\t\t<AttachmentPreview\n\t\t\t\t\t\t\t\t\t\tkey={`${file.name}-${file.lastModified}-${i}`}\n\t\t\t\t\t\t\t\t\t\tfile={file}\n\t\t\t\t\t\t\t\t\t\tonRemove={onRemoveImage ? () => onRemoveImage(i) : undefined}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Stack direction=\"row\" gap={8}>\n\t\t\t\t\t\t\t<TextArea\n\t\t\t\t\t\t\t\tvalue={userInput}\n\t\t\t\t\t\t\t\tonChange={value => startTransition(() => onUserInputChange(value))}\n\t\t\t\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t\t\t\t\tonPaste={onPaste}\n\t\t\t\t\t\t\t\tplaceholder=\"Describe what you want to create...\"\n\t\t\t\t\t\t\t\tclassName={styles.textArea}\n\t\t\t\t\t\t\t\tenabled={!isStreaming}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{isStreaming ? (\n\t\t\t\t\t\t\t\t<Button onClick={onCancel} variant=\"destructive\">\n\t\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\t\t\t\tenabled={!isUploadingImages && (!!userInput.trim() || attachedImages.length > 0)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isUploadingImages ? \"Uploading...\" : \"Send\"}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</div>\n\t\t\t\t</Stack>\n\t\t\t\t{children}\n\t\t\t</Stack>\n\t\t</FileDropZone>\n\t)\n}\n\nfunction formatTime(ts: number): string {\n\treturn new Date(ts).toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" })\n}\n\nfunction formatDuration(ms: number): string {\n\tif (ms < 1000) return `${Math.round(ms)}ms`\n\treturn `${(ms / 1000).toFixed(2)}s`\n}\n", "import \"Chat.styles_18n975u.wyw.css\"; export const container = \"container_c1yqmz4z\";\nexport const chatColumn = \"chatColumn_c1vo73cm\";\nexport const chatHeader = \"chatHeader_c3juyz2\";\nexport const chatTitle = \"chatTitle_c92w6f0\";\nexport const messagesContainer = \"messagesContainer_m144amoa\";\nexport const emptyState = \"emptyState_e1w2dy0t\";\nexport const inputArea = \"inputArea_i13f8f6n\";\nexport const textArea = \"textArea_t8s386d\";\nexport const bubbleWrapper = \"bubbleWrapper_b1g9d8c7\";\nexport const bubbleWrapperUser = \"bubbleWrapperUser_bgiksdv\";\nexport const bubbleWrapperAssistant = \"bubbleWrapperAssistant_brd6qkr\";\nexport const bubble = \"bubble_b4zx4q9\";\nexport const bubbleUser = \"bubbleUser_b8f88j7\";\nexport const bubbleAssistant = \"bubbleAssistant_bgv5ult\";\nexport const bubbleStreaming = \"bubbleStreaming_b29clhe\";\nexport const bubbleTimestamp = \"bubbleTimestamp_blttnip\";\nexport const bubbleTimestampUser = \"bubbleTimestampUser_b164e0u6\";\nexport const bubbleTimestampAssistant = \"bubbleTimestampAssistant_b17rhg5c\";\nexport const thinkingText = \"thinkingText_tbkd9uc\";\nexport const bubbleLabel = \"bubbleLabel_b1b33axa\";\nexport const streamingCursor = \"streamingCursor_s1at4avw\";\nexport const thinkingDots = \"thinkingDots_t105bgn6\";\nexport const attachmentsContainer = \"attachmentsContainer_a1f841fz\";\nexport const attachmentPreview = \"attachmentPreview_a1caob4s\";\nexport const attachmentImage = \"attachmentImage_a1eoks6a\";\nexport const removeButton = \"removeButton_rzcs0se\";\nexport const chatImagesContainer = \"chatImagesContainer_c1q1w18k\";\nexport const chatAttachmentImage = \"chatAttachmentImage_cd86k6t\";", "import { IconDashboardModalFonts, Scroll, Stack } from \"@framerjs/fresco\"\nimport { colorValues } from \"@framerjs/fresco/tokens\"\nimport { isEmptyObject } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport type { LanguageModelUsage } from \"ai\"\nimport type { AgentContext } from \"app/ai/agents/context/AgentContext.ts\"\nimport type { AIFontFamily } from \"app/ai/agents/context/fonts.ts\"\nimport type { CommandDiagnostics } from \"app/ai/agents/context/issues.ts\"\nimport type { AIContextNode } from \"app/ai/agents/context/nodes.ts\"\nimport { type Command, CommandType } from \"app/ai/agents/dsl.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport engine from \"document/engine.ts\"\nimport { assertNever } from \"library/utils/assert.ts\"\nimport type React from \"react\"\nimport { useCallback, useMemo } from \"react\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\nimport { useDarkMode } from \"web/lib/useDarkMode.ts\"\nimport { iconName } from \"../../layers/Layers.tsx\"\nimport { layerIcons } from \"../../layers/layerIcons.ts\"\nimport { ColorTokenPreview } from \"../../shared/ColorPicker/tokens/ColorPickerTokenRowPreview.tsx\"\nimport * as styles from \"./Events.styles.ts\"\nimport { HoverTooltip } from \"./HoverTooltip.tsx\"\n\nconst eventColors = colorValues.dark\n\nfunction formatDuration(ms: number): string {\n\tif (ms < 1) return \"<1ms\"\n\tif (ms < 1000) return `${Math.round(ms)}ms`\n\treturn `${(ms / 1000).toFixed(2)}s`\n}\n\nfunction getEventStyle(event: DSLEvent): { icon: string; color: string } {\n\tif (hasCommandError(event)) return { icon: \"\u26A0\", color: eventColors.errorTint }\n\tif (hasCommandWarnings(event)) return { icon: \"\u26A0\", color: eventColors.warningTint }\n\n\tswitch (event.type) {\n\t\tcase \"message_sent\":\n\t\t\treturn { icon: \"\uD83D\uDDE3\uFE0F\", color: eventColors.tint }\n\t\tcase \"first_token_received\":\n\t\t\treturn { icon: \"\u26A1\", color: eventColors.warningTint }\n\t\tcase \"line_received\":\n\t\t\treturn { icon: \"\u2192\", color: eventColors.panelDescription }\n\t\tcase CommandType.Add:\n\t\t\treturn { icon: \"+\", color: eventColors.insertPanelGreenIcon }\n\t\tcase CommandType.Update:\n\t\t\treturn { icon: \"~\", color: eventColors.tint }\n\t\tcase CommandType.Remove:\n\t\t\treturn { icon: \"-\", color: eventColors.insertPanelOrangeIcon }\n\t\tcase CommandType.Duplicate:\n\t\t\treturn { icon: \"D\", color: eventColors.insertPanelOrangeIcon }\n\t\tcase CommandType.CreateVariant:\n\t\t\treturn { icon: \"V\", color: eventColors.insertPanelOrangeIcon }\n\t\tcase CommandType.Move:\n\t\t\treturn { icon: \"<\", color: eventColors.insertPanelCyanIcon }\n\t\tcase \"error\":\n\t\t\treturn { icon: \"\u26A0\", color: eventColors.errorTint }\n\t\tcase \"complete\":\n\t\t\treturn { icon: \"\u2713\", color: eventColors.insertPanelGreenIcon }\n\t\tdefault:\n\t\t\tassertNever(event)\n\t}\n}\n\nfunction getAppliedChange(event: DSLEvent): string | null {\n\tswitch (event.type) {\n\t\tcase CommandType.Add:\n\t\tcase CommandType.Update:\n\t\tcase CommandType.Remove:\n\t\tcase CommandType.Move:\n\t\tcase CommandType.Duplicate:\n\t\tcase CommandType.CreateVariant:\n\t\t\treturn JSON.stringify(event.command, null, 2)\n\t\tcase \"message_sent\":\n\t\tcase \"first_token_received\":\n\t\tcase \"line_received\":\n\t\tcase \"error\":\n\t\tcase \"complete\":\n\t\t\treturn null\n\t\tdefault:\n\t\t\tassertNever(event)\n\t}\n}\n\nfunction hasCommandWarnings(event: DSLEvent): boolean {\n\treturn isNodeEvent(event) && !!event.diagnostics?.warnings && !isEmptyObject(event.diagnostics.warnings)\n}\n\nfunction hasCommandError(event: DSLEvent): boolean {\n\treturn isNodeEvent(event) && !!event.diagnostics?.error\n}\n\nfunction isNodeEvent(event: DSLEvent): event is NodeEvent {\n\tswitch (event.type) {\n\t\tcase CommandType.Add:\n\t\tcase CommandType.Update:\n\t\tcase CommandType.Remove:\n\t\tcase CommandType.Move:\n\t\tcase CommandType.Duplicate:\n\t\tcase CommandType.CreateVariant:\n\t\t\treturn true\n\t\tcase \"message_sent\":\n\t\tcase \"first_token_received\":\n\t\tcase \"line_received\":\n\t\tcase \"error\":\n\t\tcase \"complete\":\n\t\t\treturn false\n\t\tdefault:\n\t\t\tassertNever(event)\n\t}\n}\n\nfunction getTooltipContent(event: DSLEvent, appliedChange: string | null): React.ReactNode {\n\tif (!isNodeEvent(event)) {\n\t\tif (appliedChange) {\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t<div className={styles.tooltipLabel}>Applied Change:</div>\n\t\t\t\t\t{appliedChange}\n\t\t\t\t</>\n\t\t\t)\n\t\t}\n\t\treturn null\n\t}\n\n\tconst warningEntries = Object.entries(event.diagnostics?.warnings ?? {})\n\tconst hasDiagnostics = !!event.diagnostics?.error || warningEntries.length > 0\n\tif (!appliedChange && !hasDiagnostics) return null\n\n\treturn (\n\t\t<>\n\t\t\t{appliedChange && (\n\t\t\t\t<>\n\t\t\t\t\t<div className={styles.tooltipLabel}>Applied Change:</div>\n\t\t\t\t\t{appliedChange}\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t{event.diagnostics?.error && (\n\t\t\t\t<>\n\t\t\t\t\t<div className={styles.tooltipLabel}>Error:</div>\n\t\t\t\t\t{event.diagnostics.error}\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t{warningEntries.length > 0 && (\n\t\t\t\t<>\n\t\t\t\t\t<div className={styles.tooltipLabel}>Warnings:</div>\n\t\t\t\t\t{warningEntries.map(([key, warning]) => `${key}: ${warning}`).join(\"\\n\")}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</>\n\t)\n}\n\nfunction formatTokenEstimate(tokens: number): string {\n\treturn `~${tokens} tok`\n}\n\nfunction renderInlineDiagnostics(event: NodeEvent): React.ReactNode {\n\tconst warningEntries = Object.entries(event.diagnostics?.warnings ?? {})\n\tif (!event.diagnostics?.error && warningEntries.length === 0) return null\n\n\treturn (\n\t\t<>\n\t\t\t{event.diagnostics?.error && (\n\t\t\t\t<>\n\t\t\t\t\t<span className={styles.eventMeta}> | </span>\n\t\t\t\t\t<span className={styles.diagnosticLabelError}>error:</span>\n\t\t\t\t\t<span className={styles.eventMeta}> {event.diagnostics.error}</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t{warningEntries.map(([key, warning]) => (\n\t\t\t\t<span key={key}>\n\t\t\t\t\t<span className={styles.eventMeta}> | </span>\n\t\t\t\t\t<span className={styles.diagnosticLabelWarning}>warning {key}:</span>\n\t\t\t\t\t<span className={styles.eventMeta}> {warning}</span>\n\t\t\t\t</span>\n\t\t\t))}\n\t\t</>\n\t)\n}\n\nfunction getIconForContextNode(item: AIContextNode): React.ComponentType | undefined {\n\tconst tree = engine.stores.treeStore.tree\n\tif (isUndefined(tree)) return undefined\n\tconst node = tree.get(item.id)\n\tif (!node) return undefined\n\treturn layerIcons[iconName(tree, node)]\n}\n\ninterface BaseEvent {\n\ttimestamp: number\n\tduration: number\n}\n\ninterface BaseNodeEvent extends BaseEvent {\n\tllmId: string\n\tcommand: Command\n\tdiagnostics?: CommandDiagnostics\n}\n\ninterface MessageSentEvent extends BaseEvent {\n\ttype: \"message_sent\"\n\tmessage: string\n\tcontext: AgentContext\n\tnodes: readonly AIContextNode[]\n}\n\ninterface FirstTokenReceivedEvent extends BaseEvent {\n\ttype: \"first_token_received\"\n}\n\ninterface LineReceivedEvent extends BaseEvent {\n\ttype: \"line_received\"\n\tline: string\n\testimatedTokens: number\n}\n\ninterface NodeCreatedEvent extends BaseNodeEvent {\n\ttype: CommandType.Add\n\tattributes: Extract<Command, { type: CommandType.Add }>[\"attributes\"]\n}\n\ninterface NodeUpdatedEvent extends BaseNodeEvent {\n\ttype: CommandType.Update\n}\n\ninterface NodeRemovedEvent extends BaseNodeEvent {\n\ttype: CommandType.Remove\n}\n\ninterface NodeMovedEvent extends BaseNodeEvent {\n\ttype: CommandType.Move\n}\ninterface NodeDuplicatedEvent extends BaseNodeEvent {\n\ttype: CommandType.Duplicate\n}\ninterface NodeCreatedVariantEvent extends BaseNodeEvent {\n\ttype: CommandType.CreateVariant\n}\n\ntype NodeEvent =\n\t| NodeCreatedEvent\n\t| NodeUpdatedEvent\n\t| NodeRemovedEvent\n\t| NodeMovedEvent\n\t| NodeDuplicatedEvent\n\t| NodeCreatedVariantEvent\n\ninterface ErrorEvent extends BaseEvent {\n\ttype: \"error\"\n\terror: Error\n\tline: string\n}\n\ninterface CompleteEvent extends BaseEvent {\n\ttype: \"complete\"\n\tusage: readonly LanguageModelUsage[]\n\testimatedInputTokens: number\n}\n\nexport type DSLEvent =\n\t| MessageSentEvent\n\t| FirstTokenReceivedEvent\n\t| LineReceivedEvent\n\t| NodeCreatedEvent\n\t| NodeUpdatedEvent\n\t| NodeRemovedEvent\n\t| NodeMovedEvent\n\t| NodeDuplicatedEvent\n\t| NodeCreatedVariantEvent\n\t| ErrorEvent\n\t| CompleteEvent\n\nexport function commandToEvent(command: Command, startTime: number, diagnostics?: CommandDiagnostics): DSLEvent {\n\tconst baseEvent = {\n\t\ttimestamp: performance.now(),\n\t\tduration: performance.now() - startTime,\n\t\tcommand,\n\t\tdiagnostics,\n\t}\n\n\tswitch (command.type) {\n\t\tcase CommandType.Add: {\n\t\t\treturn {\n\t\t\t\t...baseEvent,\n\t\t\t\ttype: CommandType.Add,\n\t\t\t\tllmId: command.attributes.id,\n\t\t\t\tattributes: command.attributes,\n\t\t\t}\n\t\t}\n\t\tcase CommandType.Update:\n\t\t\treturn {\n\t\t\t\t...baseEvent,\n\t\t\t\ttype: CommandType.Update,\n\t\t\t\tllmId: command.attributes.id,\n\t\t\t}\n\t\tcase CommandType.Remove:\n\t\tcase CommandType.Move:\n\t\tcase CommandType.Duplicate:\n\t\tcase CommandType.CreateVariant:\n\t\t\treturn {\n\t\t\t\t...baseEvent,\n\t\t\t\ttype: command.type,\n\t\t\t\tllmId: command.attributes.id,\n\t\t\t}\n\t\tdefault:\n\t\t\tassertNever(command)\n\t}\n}\n\ninterface EventsLogProps {\n\tevents: DSLEvent[]\n\ttitle?: string\n\tscrollRef?: React.RefObject<HTMLDivElement>\n}\n\nexport function EventsLog({ events, scrollRef }: EventsLogProps) {\n\treturn (\n\t\t<Stack direction=\"column\" gap={0} className={styles.eventsLogContainer}>\n\t\t\t<div className={styles.eventsLogHeader}>\n\t\t\t\t<span className={styles.eventsLogTitle}>Events Log</span>\n\t\t\t</div>\n\t\t\t<Scroll className={styles.eventsLogContent}>\n\t\t\t\t{events.length === 0 && <div className={styles.emptyState}>Events will appear here...</div>}\n\t\t\t\t{events.map((event, index) => (\n\t\t\t\t\t<EventLogEntry key={`${event.type}-${index}`} event={event} />\n\t\t\t\t))}\n\t\t\t\t{scrollRef && <div ref={scrollRef} />}\n\t\t\t</Scroll>\n\t\t</Stack>\n\t)\n}\n\nfunction NodeLink({ nodeId }: { nodeId: string }) {\n\tconst handleClick = useCallback(() => {\n\t\tengine.scheduler.process(() => {\n\t\t\t// TODO: this does not zoom to the node\n\t\t\tengine.stores.selectionStore.set([nodeId])\n\t\t})\n\t}, [nodeId])\n\n\treturn (\n\t\t<button type=\"button\" aria-label={`Select node ${nodeId}`} onClick={handleClick} className={styles.nodeLink}>\n\t\t\t{nodeId}\n\t\t</button>\n\t)\n}\n\nfunction EventLogEntry({ event }: { event: DSLEvent }) {\n\tconst { icon, color } = getEventStyle(event)\n\n\tconst appliedChange = getAppliedChange(event)\n\n\tconst eventContent = useMemo((): React.ReactNode => {\n\t\tswitch (event.type) {\n\t\t\tcase \"message_sent\": {\n\t\t\t\tconst truncated = event.message.length > 40 ? `${event.message.slice(0, 40)}\u2026` : event.message\n\t\t\t\treturn `\"${truncated}\"`\n\t\t\t}\n\t\t\tcase \"first_token_received\":\n\t\t\t\treturn \"First token received (TTFT)\"\n\t\t\tcase \"line_received\":\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{event.line} <span className={styles.eventMeta}>({formatTokenEstimate(event.estimatedTokens)})</span>\n\t\t\t\t\t</>\n\t\t\t\t)\n\t\t\tcase CommandType.Add:\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\tCreated {event.attributes.node} <NodeLink nodeId={event.llmId} />\n\t\t\t\t\t\t{renderInlineDiagnostics(event)}\n\t\t\t\t\t</>\n\t\t\t\t)\n\t\t\tcase CommandType.Update:\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\tUpdated <NodeLink nodeId={event.llmId} />\n\t\t\t\t\t\t{renderInlineDiagnostics(event)}\n\t\t\t\t\t</>\n\t\t\t\t)\n\t\t\tcase CommandType.Remove:\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\tRemoved {event.llmId}\n\t\t\t\t\t\t{renderInlineDiagnostics(event)}\n\t\t\t\t\t</>\n\t\t\t\t)\n\t\t\tcase CommandType.Duplicate:\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\tDuplicated {event.llmId}\n\t\t\t\t\t\t{renderInlineDiagnostics(event)}\n\t\t\t\t\t</>\n\t\t\t\t)\n\t\t\tcase CommandType.CreateVariant:\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\tCreated Variant {event.llmId}\n\t\t\t\t\t\t{renderInlineDiagnostics(event)}\n\t\t\t\t\t</>\n\t\t\t\t)\n\t\t\tcase CommandType.Move:\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\tMoved <NodeLink nodeId={event.llmId} />\n\t\t\t\t\t\t{renderInlineDiagnostics(event)}\n\t\t\t\t\t</>\n\t\t\t\t)\n\t\t\tcase \"error\":\n\t\t\t\treturn `${event.error.message} (${event.line})`\n\t\t\tcase \"complete\":\n\t\t\t\tif (event.usage.length > 0) {\n\t\t\t\t\tconst totalInputTokens = event.usage.reduce((acc, usage) => acc + (usage.inputTokens ?? 0), 0)\n\t\t\t\t\tconst totalOutputTokens = event.usage.reduce((acc, usage) => acc + (usage.outputTokens ?? 0), 0)\n\t\t\t\t\tif (event.estimatedInputTokens > 0) {\n\t\t\t\t\t\treturn `Done (${formatTokenEstimate(event.estimatedInputTokens)} DSL in | ${totalInputTokens}\u2192${totalOutputTokens} model tokens)`\n\t\t\t\t\t}\n\t\t\t\t\treturn `Done (${totalInputTokens}\u2192${totalOutputTokens} tokens)`\n\t\t\t\t}\n\t\t\t\tif (event.estimatedInputTokens > 0) {\n\t\t\t\t\treturn `Done (${formatTokenEstimate(event.estimatedInputTokens)} DSL in)`\n\t\t\t\t}\n\t\t\t\treturn Dictionary.Done\n\t\t\tdefault:\n\t\t\t\tassertNever(event)\n\t\t}\n\t}, [event])\n\n\tconst tooltipContent = getTooltipContent(event, appliedChange)\n\tconst isCommandDiagnostic = hasCommandError(event) || hasCommandWarnings(event)\n\n\treturn (\n\t\t<HoverTooltip content={tooltipContent} disabled={!tooltipContent}>\n\t\t\t<div className={styles.eventEntry}>\n\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t<span className={styles.eventIcon} style={{ color }}>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={event.type === \"error\" || isCommandDiagnostic ? styles.eventContentError : styles.eventContent}\n\t\t\t\t\t\tstyle={event.type === \"error\" || isCommandDiagnostic ? { color } : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{eventContent}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className={styles.eventDuration}>{formatDuration(event.duration)}</span>\n\t\t\t\t</Stack>\n\n\t\t\t\t{event.type === \"message_sent\" && !isEmptyObject(event.context) && (\n\t\t\t\t\t<Stack direction=\"row\" gap={6} wrap=\"wrap\" className={styles.contextRow}>\n\t\t\t\t\t\t<span className={styles.contextLabel}>\u21AA\uFE0F context:</span>\n\t\t\t\t\t\t{getContextItems(event.context, event.nodes)}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</HoverTooltip>\n\t)\n}\n\nfunction NodeContextItemBadge({ item }: { item: AIContextNode }) {\n\tconst handleClick = useCallback(() => {\n\t\tengine.scheduler.process(() => {\n\t\t\tengine.stores.selectionStore.set([item.id])\n\t\t})\n\t}, [item.id])\n\n\tconst Icon = getIconForContextNode(item)\n\n\treturn (\n\t\t<HoverTooltip content={JSON.stringify(item, null, 2)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label=\"Select node\"\n\t\t\t\tonClick={handleClick}\n\t\t\t\tclassName={cx(styles.contextBadge, styles.contextBadgeDefault)}\n\t\t\t\tstyle={{ background: eventColors.tint }}\n\t\t\t>\n\t\t\t\t{Icon && <Icon />}\n\t\t\t\tNode\n\t\t\t</button>\n\t\t</HoverTooltip>\n\t)\n}\n\nfunction FontsContextItemBadge({ item }: { item: AIFontFamily }) {\n\treturn (\n\t\t<HoverTooltip content={JSON.stringify(item, null, 2)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label=\"Select font\"\n\t\t\t\tclassName={cx(styles.contextBadge, styles.contextBadgeDefault)}\n\t\t\t\tstyle={{ background: eventColors.neutralBadgeColor }}\n\t\t\t>\n\t\t\t\t<IconDashboardModalFonts />\n\t\t\t\tFont\n\t\t\t</button>\n\t\t</HoverTooltip>\n\t)\n}\n\nfunction ColorsContextItemBadge({ id, name, light, dark }: { id: string; name: string; light: string; dark?: string }) {\n\tconst { isDarkMode } = useDarkMode()\n\treturn (\n\t\t<HoverTooltip content={JSON.stringify({ id, name, light, dark }, null, 2)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label=\"Select color\"\n\t\t\t\tclassName={cx(styles.contextBadge, styles.contextBadgeDefault)}\n\t\t\t\tstyle={{ background: eventColors.neutralBadgeColor }}\n\t\t\t>\n\t\t\t\t<ColorTokenPreview value={isDarkMode ? (dark ?? light) : light} size=\"small\" />\n\t\t\t\t{name}\n\t\t\t</button>\n\t\t</HoverTooltip>\n\t)\n}\n\nfunction getContextItems(context: AgentContext, nodes: readonly AIContextNode[]): React.ReactNode[] {\n\tconst items: React.ReactNode[] = []\n\n\tfor (const item of context.fonts) {\n\t\titems.push(<FontsContextItemBadge key={item.name} item={item} />)\n\t}\n\n\tfor (const item of context.tokens.values()) {\n\t\titems.push(\n\t\t\t<ColorsContextItemBadge\n\t\t\t\tkey={item.id}\n\t\t\t\tid={item.id}\n\t\t\t\tname={item.name ?? Dictionary.Unknown}\n\t\t\t\tlight={item.light}\n\t\t\t\tdark={item.dark}\n\t\t\t/>,\n\t\t)\n\t}\n\n\t// TODO: Add images, vectorSets, components to context.\n\n\tfor (const item of nodes) {\n\t\titems.push(<NodeContextItemBadge key={item.id} item={item} />)\n\t}\n\n\treturn items\n}\n", "import \"Events.styles_is8sqr.wyw.css\"; export const eventsLogContainer = \"eventsLogContainer_etejb25\";\nexport const eventsLogHeader = \"eventsLogHeader_e1sn25ss\";\nexport const eventsLogTitle = \"eventsLogTitle_e1wtijd3\";\nexport const eventsLogContent = \"eventsLogContent_e1fdq72h\";\nexport const emptyState = \"emptyState_e1o51avw\";\nexport const nodeLink = \"nodeLink_ngblcus\";\nexport const eventEntry = \"eventEntry_eiudhxl\";\nexport const eventIcon = \"eventIcon_ejmlmtd\";\nexport const eventContent = \"eventContent_e1snenjj\";\nexport const eventContentError = \"eventContentError_en9s8im\";\nexport const eventDuration = \"eventDuration_e1ys5til\";\nexport const eventMeta = \"eventMeta_e1bzy6gw\";\nexport const contextRow = \"contextRow_cw180rc\";\nexport const diagnosticLabelError = \"diagnosticLabelError_d1lpi990\";\nexport const diagnosticLabelWarning = \"diagnosticLabelWarning_d118m48k\";\nexport const contextLabel = \"contextLabel_csl9i4v\";\nexport const contextBadge = \"contextBadge_c5mmhez\";\nexport const contextBadgeClickable = \"contextBadgeClickable_cgup50v\";\nexport const contextBadgeDefault = \"contextBadgeDefault_c12l170u\";\nexport const tooltipLabel = \"tooltipLabel_tdjhyof\";\nexport const colorPill = \"colorPill_c1vjs8sb\";", "import { cx } from \"@linaria/core\"\nimport { type WithBoundingRectsProps, withBoundingRects } from \"@visx/bounds\"\nimport type React from \"react\"\nimport { startTransition, useState } from \"react\"\nimport * as styles from \"./HoverTooltip.styles.ts\"\n\ninterface HoverTooltipProps {\n\tcontent: React.ReactNode\n\tdisabled?: boolean\n}\n\nexport function HoverTooltip({ children, content, disabled }: React.PropsWithChildren<HoverTooltipProps>) {\n\tconst [isHovered, setIsHovered] = useState(false)\n\n\tif (disabled) return <>{children}</>\n\n\treturn (\n\t\t// biome-ignore lint/nursery/noStaticElementInteractions: used to capture events\n\t\t<span\n\t\t\tonMouseEnter={() => startTransition(() => setIsHovered(true))}\n\t\t\tonMouseLeave={() => startTransition(() => setIsHovered(false))}\n\t\t\tclassName={styles.triggerButton}\n\t\t>\n\t\t\t{children}\n\t\t\t{isHovered && <HoverTooltipContent>{content}</HoverTooltipContent>}\n\t\t</span>\n\t)\n}\n\nconst HoverTooltipContent = withBoundingRects(function HoverTooltipContentInner({\n\tchildren,\n\trect: ownBounds,\n\tparentRect: parentBounds,\n}: React.PropsWithChildren<WithBoundingRectsProps>) {\n\tlet placeAbove = false\n\n\tif (ownBounds && parentBounds) {\n\t\tconst spaceBelow = window.innerHeight - parentBounds.bottom\n\t\tconst spaceAbove = parentBounds.top\n\t\tplaceAbove = spaceBelow < ownBounds.height + 20 && spaceAbove > spaceBelow\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cx(\n\t\t\t\t\"wantsNativeTextAction\",\n\t\t\t\tstyles.tooltipContent,\n\t\t\t\tplaceAbove ? styles.tooltipAbove : styles.tooltipBelow,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n})\n", "import \"HoverTooltip.styles_1ywg0s5.wyw.css\"; export const triggerButton = \"triggerButton_thg09mp\";\nexport const tooltipContent = \"tooltipContent_tn06n38\";\nexport const tooltipAbove = \"tooltipAbove_t2ewhux\";\nexport const tooltipBelow = \"tooltipBelow_t40vf46\";", "export function sortObjectKeysForJson(_key: string, value: unknown): unknown {\n\tif (value === null || Array.isArray(value) || typeof value !== \"object\") return value\n\n\treturn Object.fromEntries(Object.entries(value).sort(([left], [right]) => collator.compare(left, right)))\n}\n\nconst collator = new Intl.Collator(\"en\")\n", "import { BINARY_SCHEMA_VERSION } from \"@framerjs/crdtree2\"\nimport { Button, Stack, TextArea, TextInput } from \"@framerjs/fresco\"\nimport { hostInfo, unhandledError } from \"@framerjs/shared\"\nimport type { AgentInputSegment } from \"app/agent/editor/agentInputSchema.ts\"\nimport type { Agent } from \"app/ai/agents/Agent.ts\"\nimport { toAgentRequestError } from \"app/ai/agents/errors.ts\"\nimport {\n\tbuildEvalExportZipBlob,\n\tcreateEvalExportTimestamp,\n\tcreateEvalExportZipFilename,\n} from \"app/ai/agents/evals2/export/AgentStoreEvalExport.ts\"\nimport type { BlockingTaskType, AgentRequest } from \"app/ai/agents/types.ts\"\nimport { sortObjectKeysForJson } from \"document/agentSnapshotMigration/sortObjectKeysForJson.ts\"\nimport { useIsCrdt } from \"document/crdt/useIsCrdt.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { useCallback, useState } from \"react\"\nimport { sleep } from \"utils/sleep.ts\"\nimport { downloadBlob, downloadContent } from \"web/lib/downloadFile.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport * as styles from \"./ChatPanel.styles.ts\"\n\nexport function ChatPanel() {\n\tconst canDownloadEvalExport = hostInfo.isProduction\n\tconst [simulatedAgentPrompt, setSimulatedAgentPrompt] = useState(\"Help me improve this hero section.\")\n\tconst [simulatedAgentResponse, setSimulatedAgentResponse] = useState(\n\t\t\"Great direction. I would improve hierarchy first: stronger headline contrast, tighter spacing above the CTA, and a clearer visual anchor for the supporting text. Then I would align the button style with your primary brand action.\",\n\t)\n\tconst [agentTaskText, setAgentTaskText] = useState(\"Thinking\u2026\")\n\tconst [agentTaskScopeIdOverride, setAgentTaskScopeIdOverride] = useState(\"\")\n\tconst [agentTaskKind, setAgentTaskKind] = useState<\"step\" | \"blocking\">(\"step\")\n\tconst [agentBlockingTaskType, setAgentBlockingTaskType] = useState<BlockingTaskType>(\"font-search\")\n\tconst [agentTaskIsLoading, setAgentTaskIsLoading] = useState(false)\n\tconst [isSimulatingAgentTurn, setIsSimulatingAgentTurn] = useState(false)\n\tconst [isClearing, setIsClearing] = useState(false)\n\tconst [isDownloadingEvalExport, setIsDownloadingEvalExport] = useState(false)\n\tconst hasCrdtEnabled = useIsCrdt()\n\n\tconst hasUpdatingNodes = useEngineState(\n\t\t() => engine.stores.agentStore.updatingCanvasNodes.size > 0,\n\t\t[],\n\t\tengine.stores.agentStore,\n\t)\n\n\tconst handleToggleDebugShimmer = useCallback(async () => {\n\t\tif (engine.stores.agentStore.updatingCanvasNodes.size > 0) {\n\t\t\tengine.stores.agentStore.debugClearUpdatingNodes()\n\t\t\treturn\n\t\t}\n\t\tconst nodeIds = await engine.stores.agentStore.debugGetActiveScopeBreakpointIds()\n\t\tengine.stores.agentStore.debugAddToUpdatingNodes(nodeIds)\n\t}, [])\n\n\tconst getOrCreateDebugChatAgent = useCallback(() => {\n\t\tconst activeScope = engine.stores.scopeStore.active\n\t\tconst id = engine.stores.agentStore.activeChatAgentId\n\t\tlet agent = id ? engine.stores.agentStore.getAgent(id) : undefined\n\t\tif (!agent) {\n\t\t\tagent = engine.stores.agentStore.create({\n\t\t\t\tscopeId: activeScope.id,\n\t\t\t})\n\t\t\tengine.stores.agentStore.activeChatAgentId = agent.id\n\t\t}\n\t\treturn agent\n\t}, [])\n\n\tconst handleSimulateAgentChatTurn = useCallback(\n\t\tasync (throwProviderErrorMidStream: boolean = false) => {\n\t\t\tconst prompt = simulatedAgentPrompt.trim()\n\t\t\tif (!prompt) {\n\t\t\t\ttoast({\n\t\t\t\t\ttype: \"add\",\n\t\t\t\t\tvariant: \"warning\",\n\t\t\t\t\ttext: \"Please add a prompt before simulating a chat turn.\",\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tsetIsSimulatingAgentTurn(true)\n\t\t\ttry {\n\t\t\t\tconst parts: readonly AgentInputSegment[] = [prompt]\n\t\t\t\tconst implicitSelection = engine.stores.selectionStore.ids\n\t\t\t\tconst agent = getOrCreateDebugChatAgent()\n\n\t\t\t\tawait debugSimulateTurn(agent, parts, implicitSelection, simulatedAgentResponse, {\n\t\t\t\t\tthrowProviderErrorMidStream,\n\t\t\t\t\tproviderErrorMessage: \"Mock error: stream interrupted by debug tool\",\n\t\t\t\t})\n\t\t\t} finally {\n\t\t\t\tsetIsSimulatingAgentTurn(false)\n\t\t\t}\n\t\t},\n\t\t[getOrCreateDebugChatAgent, simulatedAgentPrompt, simulatedAgentResponse],\n\t)\n\n\tconst handleAppendAgentTask = useCallback(() => {\n\t\tconst agent = getOrCreateDebugChatAgent()\n\t\tconst scopeId = agentTaskScopeIdOverride.trim() || undefined\n\t\tconst text = agentTaskText.trim() || \"Thinking\u2026\"\n\t\tdebugAppendAssistantCommand(agent, text, scopeId, {\n\t\t\tkind: agentTaskKind,\n\t\t\tblockingTaskType: agentBlockingTaskType,\n\t\t\tisLoading: agentTaskIsLoading,\n\t\t})\n\t}, [\n\t\tagentBlockingTaskType,\n\t\tagentTaskIsLoading,\n\t\tagentTaskKind,\n\t\tagentTaskScopeIdOverride,\n\t\tagentTaskText,\n\t\tgetOrCreateDebugChatAgent,\n\t])\n\n\tconst handleDownloadHistory = useCallback(() => {\n\t\tconst snapshot = engine.stores.agentStore.getHistorySnapshot()\n\t\tconst projectMetadata = {\n\t\t\tprojectId: engine.stores.projectStore.projectId,\n\t\t\treleaseChannel: engine.stores.projectStore.project?.releaseChannel ?? \"default\",\n\t\t\tbuildHash: process.env.BUILD_ID ?? \"unknown\",\n\t\t\t...(hasCrdtEnabled ? { crdtVersion: BINARY_SCHEMA_VERSION } : {}),\n\t\t}\n\t\tconst date = new Date().toISOString().replaceAll(\":\", \"-\")\n\t\tdownloadContent(\n\t\t\tJSON.stringify({ ...snapshot, projectMetadata }, sortObjectKeysForJson, \"\\t\"),\n\t\t\t`agent-history-${date}.json`,\n\t\t)\n\t}, [hasCrdtEnabled])\n\n\tconst handleClearHistory = useCallback(async () => {\n\t\tsetIsClearing(true)\n\t\ttry {\n\t\t\tawait engine.stores.agentStore.clearHistory()\n\t\t} catch (error) {\n\t\t\tunhandledError(error)\n\t\t} finally {\n\t\t\tsetIsClearing(false)\n\t\t}\n\t}, [])\n\n\tconst handleDownloadEvalExport = useCallback(async () => {\n\t\tsetIsDownloadingEvalExport(true)\n\t\ttry {\n\t\t\tconst project = engine.stores.projectStore.project\n\t\t\tconst exportOptions = {\n\t\t\t\tfeatureFlags: {\n\t\t\t\t\t...project?.canvasFeatures,\n\t\t\t\t\treleaseChannel: project?.releaseChannel ?? \"default\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tconst evalExportArchive = await engine.stores.agentStore.getEvalExportArchiveSnapshot(exportOptions)\n\t\t\tconst timestamp = createEvalExportTimestamp()\n\t\t\tconst archiveBlob = buildEvalExportZipBlob(evalExportArchive, timestamp)\n\t\t\tdownloadBlob(archiveBlob, createEvalExportZipFilename(timestamp))\n\t\t} catch (error) {\n\t\t\tunhandledError(error)\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"error\",\n\t\t\t\ttext: \"Unable to generate eval export.\",\n\t\t\t})\n\t\t} finally {\n\t\t\tsetIsDownloadingEvalExport(false)\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<div className={styles.panel}>\n\t\t\t<section className={styles.section}>\n\t\t\t\t<div className={styles.title}>Chat UI</div>\n\t\t\t\t<TextArea value={simulatedAgentPrompt} onChange={setSimulatedAgentPrompt} placeholder=\"User prompt...\" />\n\t\t\t\t<TextArea value={simulatedAgentResponse} onChange={setSimulatedAgentResponse} placeholder=\"Agent stream...\" />\n\t\t\t\t<Stack direction=\"column\" gap={8}>\n\t\t\t\t\t<Button enabled={!isSimulatingAgentTurn} onClick={() => void handleSimulateAgentChatTurn()}>\n\t\t\t\t\t\t{isSimulatingAgentTurn ? \"Simulating\u2026\" : \"Simulate chat turn\"}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tenabled={!isSimulatingAgentTurn}\n\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\tonClick={() => void handleSimulateAgentChatTurn(true)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSimulatingAgentTurn ? \"Simulating\u2026\" : \"Simulate error mid stream\"}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Stack direction=\"row\" gap={8}>\n\t\t\t\t\t\t<TextInput value={agentTaskText} onChange={setAgentTaskText} placeholder=\"Task text\" constantChange />\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tvalue={agentTaskScopeIdOverride}\n\t\t\t\t\t\t\tonChange={setAgentTaskScopeIdOverride}\n\t\t\t\t\t\t\tplaceholder=\"(Optional) Scope ID\"\n\t\t\t\t\t\t\tconstantChange\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Stack direction=\"row\" gap={8}>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclassName={styles.select}\n\t\t\t\t\t\t\taria-label=\"Agent task kind\"\n\t\t\t\t\t\t\tvalue={agentTaskKind}\n\t\t\t\t\t\t\tonChange={event => setAgentTaskKind(event.target.value as \"step\" | \"blocking\")}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<option value=\"step\">Step task</option>\n\t\t\t\t\t\t\t<option value=\"blocking\">Blocking task</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclassName={styles.select}\n\t\t\t\t\t\t\taria-label=\"Task status\"\n\t\t\t\t\t\t\tvalue={agentTaskIsLoading ? \"loading\" : \"completed\"}\n\t\t\t\t\t\t\tonChange={event => setAgentTaskIsLoading(event.target.value === \"loading\")}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<option value=\"completed\">Completed</option>\n\t\t\t\t\t\t\t<option value=\"loading\">Loading</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t{agentTaskKind === \"blocking\" && (\n\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\tclassName={styles.select}\n\t\t\t\t\t\t\t\taria-label=\"Blocking task type\"\n\t\t\t\t\t\t\t\tvalue={agentBlockingTaskType}\n\t\t\t\t\t\t\t\tonChange={event => setAgentBlockingTaskType(event.target.value as BlockingTaskType)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<option value=\"font-search\">FontSearch</option>\n\t\t\t\t\t\t\t\t<option value=\"screenshot\">Screenshot</option>\n\t\t\t\t\t\t\t\t<option value=\"image-search\">ImageSearch</option>\n\t\t\t\t\t\t\t\t<option value=\"fetch\">Fetch</option>\n\t\t\t\t\t\t\t\t<option value=\"publish\">Publish</option>\n\t\t\t\t\t\t\t\t<option value=\"make-external-component-local\">MakeExternalComponentLocal</option>\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Button enabled={!isSimulatingAgentTurn} onClick={handleAppendAgentTask}>\n\t\t\t\t\t\tAppend agent task\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</section>\n\t\t\t<div className={styles.divider} />\n\t\t\t<section className={styles.section}>\n\t\t\t\t<div className={styles.title}>Shimmer</div>\n\t\t\t\t<Button variant={hasUpdatingNodes ? \"destructive\" : \"primary\"} onClick={() => void handleToggleDebugShimmer()}>\n\t\t\t\t\t{hasUpdatingNodes ? \"Clear scope shimmer\" : \"Shimmer scope nodes\"}\n\t\t\t\t</Button>\n\t\t\t</section>\n\t\t\t<div className={styles.divider} />\n\t\t\t<section className={styles.section}>\n\t\t\t\t<div className={styles.title}>History</div>\n\t\t\t\t<Stack direction=\"column\" gap={8}>\n\t\t\t\t\t<Button onClick={handleDownloadHistory}>Download history</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tenabled={!isDownloadingEvalExport && canDownloadEvalExport}\n\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\tcanDownloadEvalExport\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: \"Evaluation export is only available in production. Run make dev-on-production (or switch to production).\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={() => void handleDownloadEvalExport()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDownloadingEvalExport ? \"Preparing eval export\u2026\" : \"Download eval export\"}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button onClick={handleClearHistory} enabled={!isClearing} variant=\"destructive\">\n\t\t\t\t\t\t{isClearing ? \"Clearing\u2026\" : \"Clear chat history\"}\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</section>\n\t\t</div>\n\t)\n}\n\ninterface DebugSimulateTurnOptions {\n\tthrowProviderErrorMidStream?: boolean\n\tproviderErrorMessage?: string\n}\n\nasync function debugSimulateTurn(\n\tagent: Agent,\n\tparts: readonly AgentInputSegment[],\n\timplicitSelection: readonly string[],\n\tresponseText: string,\n\toptions?: DebugSimulateTurnOptions,\n): Promise<void> {\n\tawait agent.debugSend(\n\t\tparts,\n\t\timplicitSelection,\n\t\tasync selectionForContext => {\n\t\t\tconst request = agent.debugCreateRequest(parts, selectionForContext)\n\t\t\tconst updateText = agent.debugOnPart(request, { type: \"text\", text: \"\", complete: false })\n\n\t\t\tconst text = responseText.trim() || \"This is a simulated response for chat UI testing.\"\n\t\t\tconst shouldThrow = options?.throwProviderErrorMidStream ?? false\n\t\t\tconst errorAtIndex = text.length <= 1 ? 1 : Math.min(Math.max(Math.floor(text.length / 2), 1), text.length - 1)\n\t\t\tfor (let i = 1; i <= text.length; i++) {\n\t\t\t\tawait sleep(18)\n\t\t\t\tupdateText(current => ({ ...current, text: text.slice(0, i) }))\n\t\t\t\tif (shouldThrow && i === errorAtIndex) {\n\t\t\t\t\tconst error = new Error(options?.providerErrorMessage ?? \"Mock provider error during streaming\")\n\t\t\t\t\trequest.aborted = toAgentRequestError(error)\n\t\t\t\t\trequest.done = true\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst last = request.state.messages.at(-1)\n\t\t\tif (last?.type === \"text\") {\n\t\t\t\tlast.complete = true\n\t\t\t}\n\t\t\trequest.done = true\n\t\t},\n\t\t{ skipTitleGeneration: true },\n\t)\n}\n\ninterface DebugAppendTaskOptions {\n\tkind: \"step\" | \"blocking\"\n\tblockingTaskType: BlockingTaskType\n\tisLoading: boolean\n}\n\nfunction debugAppendAssistantCommand(\n\tagent: Agent,\n\tcontent: string,\n\tscopeId: string | undefined,\n\toptions: DebugAppendTaskOptions,\n): void {\n\tconst timestamp = Date.now()\n\tconst messages: AgentRequest[\"state\"][\"messages\"] = []\n\n\tif (options.kind === \"blocking\") {\n\t\tconst imageUrls =\n\t\t\toptions.blockingTaskType === \"screenshot\" && !options.isLoading\n\t\t\t\t? [\"https://picsum.photos/seed/debug1/600/400\", \"https://picsum.photos/seed/debug2/600/400\"]\n\t\t\t\t: undefined\n\t\tmessages.push({\n\t\t\ttype: \"blocking-task\",\n\t\t\ttask: options.blockingTaskType,\n\t\t\tmessage: content,\n\t\t\ttimestamp,\n\t\t\tcompletedAt: options.isLoading ? undefined : timestamp,\n\t\t\t...(imageUrls ? { metadata: { imageUrls } } : {}),\n\t\t})\n\t} else if (scopeId === undefined) {\n\t\tmessages.push({\n\t\t\ttype: \"step\",\n\t\t\ttext: content,\n\t\t\ttimestamp,\n\t\t\tcomplete: !options.isLoading,\n\t\t})\n\t} else {\n\t\tmessages.push({\n\t\t\ttype: \"step\",\n\t\t\ttext: content,\n\t\t\ttimestamp,\n\t\t\tcomplete: !options.isLoading,\n\t\t})\n\t\tif (!options.isLoading) {\n\t\t\tmessages.push({\n\t\t\t\ttype: \"read\",\n\t\t\t\ttimestamp: timestamp + 1,\n\t\t\t})\n\t\t}\n\t}\n\n\tagent.debugAppendMessages(messages, scopeId)\n}\n", "import \"ChatPanel.styles_1gq30r3.wyw.css\"; export const panel = \"panel_p9dvr0r\";\nexport const divider = \"divider_d1m3z8hu\";\nexport const section = \"section_s1hp4dtf\";\nexport const title = \"title_t12zezbv\";\nexport const select = \"select_s182cuq4\";", "import { Button, Label, Stack, TextInput } from \"@framerjs/fresco\"\nimport { type ContourOverride, defaultContourOverride, getContourTarget } from \"app/ai/contourOverride.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { type CSSProperties, useCallback } from \"react\"\nimport * as toolStyles from \"../Tools.styles.ts\"\n\nconst modelIdInputId = \"debug-contour-model-id\"\nconst environmentInputId = \"debug-contour-environment\"\nconst deploymentInputId = \"debug-contour-deployment\"\n\nconst panelStyle = { maxWidth: 620 } satisfies CSSProperties\nconst labelColumnStyle = { width: 120, flexShrink: 0, whiteSpace: \"nowrap\" } satisfies CSSProperties\nconst inputStyle = { flex: 1, minWidth: 260 } satisfies CSSProperties\nconst targetValueStyle = { minWidth: 0 } satisfies CSSProperties\nconst targetCodeStyle = {\n\toverflow: \"hidden\",\n\tmaxWidth: 360,\n\ttextOverflow: \"ellipsis\",\n\twhiteSpace: \"nowrap\",\n} satisfies CSSProperties\n\nexport function Contour() {\n\tconst override = useEngineState(\n\t\t() => engine.stores.persistedUserDefaults.contourOverride,\n\t\t[],\n\t\t[EngineChange.UserDefaultsStore],\n\t\t{ deepEqual: true },\n\t)\n\n\tconst updateOverride = useCallback(\n\t\t(key: keyof ContourOverride, value: string) => {\n\t\t\tengine.stores.persistedUserDefaults.contourOverride = { ...override, [key]: value }\n\t\t},\n\t\t[override],\n\t)\n\n\tconst resetOverride = useCallback(() => {\n\t\tengine.stores.persistedUserDefaults.contourOverride = defaultContourOverride\n\t}, [])\n\n\treturn (\n\t\t<section className={toolStyles.tool}>\n\t\t\t<div className={toolStyles.toolTitle}>Contour</div>\n\t\t\t<Stack direction=\"column\" gap={10} style={panelStyle}>\n\t\t\t\t<Stack direction=\"row\" gap={10} alignItems=\"center\">\n\t\t\t\t\t<Stack style={labelColumnStyle}>\n\t\t\t\t\t\t<Label htmlFor={modelIdInputId}>Model ID</Label>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\tid={modelIdInputId}\n\t\t\t\t\t\tsmall\n\t\t\t\t\t\tconstantChange\n\t\t\t\t\t\tstyle={inputStyle}\n\t\t\t\t\t\tvalue={override.modelId}\n\t\t\t\t\t\tonChange={value => updateOverride(\"modelId\", value)}\n\t\t\t\t\t\tplaceholder={defaultContourOverride.modelId}\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t<Stack direction=\"row\" gap={10} alignItems=\"center\">\n\t\t\t\t\t<Stack style={labelColumnStyle}>\n\t\t\t\t\t\t<Label htmlFor={environmentInputId}>Environment</Label>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\tid={environmentInputId}\n\t\t\t\t\t\tsmall\n\t\t\t\t\t\tconstantChange\n\t\t\t\t\t\tstyle={inputStyle}\n\t\t\t\t\t\tvalue={override.environment}\n\t\t\t\t\t\tonChange={value => updateOverride(\"environment\", value)}\n\t\t\t\t\t\tplaceholder={defaultContourOverride.environment}\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t<Stack direction=\"row\" gap={10} alignItems=\"center\">\n\t\t\t\t\t<Stack style={labelColumnStyle}>\n\t\t\t\t\t\t<Label htmlFor={deploymentInputId}>Deployment</Label>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\tid={deploymentInputId}\n\t\t\t\t\t\tsmall\n\t\t\t\t\t\tconstantChange\n\t\t\t\t\t\tstyle={inputStyle}\n\t\t\t\t\t\tvalue={override.deployment}\n\t\t\t\t\t\tonChange={value => updateOverride(\"deployment\", value)}\n\t\t\t\t\t\tplaceholder=\"Optional deployment id\"\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t<Stack direction=\"row\" gap={10} alignItems=\"center\">\n\t\t\t\t\t<Stack style={labelColumnStyle}>Target</Stack>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={8} style={targetValueStyle}>\n\t\t\t\t\t\t<code style={targetCodeStyle}>{getContourTarget(override)}</code>\n\t\t\t\t\t\t<Button onClick={resetOverride}>Reset</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</section>\n\t)\n}\n", "import { Stack } from \"@framerjs/fresco\"\nimport type { AgentRequest } from \"app/ai/agents/types.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { useMemo } from \"react\"\nimport { isNumber } from \"utils/typeChecks.ts\"\nimport * as toolStyles from \"../Tools.styles.ts\"\nimport * as styles from \"./CostSection.styles.ts\"\n\nfunction formatCost(cost: number): string {\n\treturn `$${cost.toFixed(2)}`\n}\n\nfunction getRequestSummary(request: AgentRequest): string {\n\tconst messages = request.state.messages\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i]\n\t\tif (msg?.type === \"text\" && msg.text) {\n\t\t\treturn msg.text.trim()\n\t\t}\n\t}\n\treturn \"\u2014\"\n}\n\nfunction formatTokenCount(n: number): string {\n\treturn n.toLocaleString()\n}\n\nfunction formatDuration(ms: number): string {\n\treturn ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${ms}ms`\n}\n\n/** Input/output counts when available; otherwise a single total if that is all we have. */\nfunction getUsageTokenDisplay(\n\tusage: NonNullable<AgentRequest[\"usage\"]>,\n): { input: number; output: number } | { totalOnly: number } | undefined {\n\tconst { inputTokens, outputTokens, totalTokens } = usage\n\tif (isNumber(inputTokens) || isNumber(outputTokens)) {\n\t\treturn {\n\t\t\tinput: inputTokens ?? 0,\n\t\t\toutput: outputTokens ?? 0,\n\t\t}\n\t}\n\tif (isNumber(totalTokens)) {\n\t\treturn { totalOnly: totalTokens }\n\t}\n\treturn undefined\n}\n\nexport function CostSection() {\n\tconst finishedRequests = useEngineState(\n\t\t() => {\n\t\t\tconst id = engine.stores.agentStore.activeChatAgentId\n\t\t\tif (!id) return []\n\t\t\tconst agent = engine.stores.agentStore.getAgent(id)\n\t\t\treturn agent?.chatMessages.filter(r => r.done) ?? []\n\t\t},\n\t\t[],\n\t\tengine.stores.agentStore,\n\t)\n\n\tconst processed = useMemo(() => {\n\t\tlet total = 0\n\t\treturn finishedRequests.map(request => {\n\t\t\tconst cost = request.cost ?? 0\n\t\t\ttotal += cost\n\t\t\treturn {\n\t\t\t\trequest,\n\t\t\t\tcost,\n\t\t\t\trunningTotal: total,\n\t\t\t\tsummary: getRequestSummary(request),\n\t\t\t\telapsedMs: request.elapsedMs,\n\t\t\t\ttokenDisplay: request.usage ? getUsageTokenDisplay(request.usage) : undefined,\n\t\t\t}\n\t\t})\n\t}, [finishedRequests])\n\n\tconst processedReversed = useMemo(() => [...processed].reverse(), [processed])\n\n\treturn (\n\t\t<section className={toolStyles.tool}>\n\t\t\t<div className={toolStyles.toolTitle}>Cost</div>\n\t\t\t<div className={styles.log}>\n\t\t\t\t{processedReversed.length === 0 ? (\n\t\t\t\t\t<div className={styles.empty}>No cost data for the current session.</div>\n\t\t\t\t) : (\n\t\t\t\t\t<Stack direction=\"row\" gap={12} wrap=\"wrap\">\n\t\t\t\t\t\t{processedReversed.map(({ request, cost, runningTotal, summary, elapsedMs, tokenDisplay }) => (\n\t\t\t\t\t\t\t<article key={request.id} className={styles.entry}>\n\t\t\t\t\t\t\t\t{summary && <div className={styles.entrySummary}>{summary}</div>}\n\t\t\t\t\t\t\t\t<div className={styles.entryMeta}>\n\t\t\t\t\t\t\t\t\t<span>Task: {formatCost(cost)}</span>\n\t\t\t\t\t\t\t\t\t<span>Session: {formatCost(runningTotal)}</span>\n\t\t\t\t\t\t\t\t\t{isNumber(elapsedMs) && <span>Duration: {formatDuration(elapsedMs)}</span>}\n\t\t\t\t\t\t\t\t\t{tokenDisplay &&\n\t\t\t\t\t\t\t\t\t\t(\"totalOnly\" in tokenDisplay ? (\n\t\t\t\t\t\t\t\t\t\t\t<span>Tokens (total): {formatTokenCount(tokenDisplay.totalOnly)}</span>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>Input tokens: {formatTokenCount(tokenDisplay.input)}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>Output tokens: {formatTokenCount(tokenDisplay.output)}</span>\n\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</article>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</section>\n\t)\n}\n", "import \"CostSection.styles_1urqk84.wyw.css\"; export const log = \"log_lc9ah6k\";\nexport const empty = \"empty_e6uj6fj\";\nexport const entry = \"entry_eipt93l\";\nexport const entrySummary = \"entrySummary_e4ouohn\";\nexport const entryMeta = \"entryMeta_e1l00tgj\";", "import { assertNever } from \"@framerjs/shared\"\nimport type { RichTextNode } from \"document/models/CanvasTree/index.ts\"\nimport { isRichTextNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport type { AgentContext } from \"./context/AgentContext.ts\"\nimport { type RichTextTargetHandle, isVirtualNodeId, parseVirtualNodeId } from \"./context/richtext/document.ts\"\nimport { isCompositeRichTextTarget, resolveRichTextTargetHandle } from \"./context/richtext/targets.ts\"\nimport { CommandType, type Command } from \"./dsl.ts\"\n\nfunction collectNodeReferences(command: Command): string[] {\n\tswitch (command.type) {\n\t\tcase CommandType.Update:\n\t\tcase CommandType.Remove:\n\t\t\treturn [command.attributes.id]\n\t\tcase CommandType.Add:\n\t\t\t// Only the parent ID - created nodes have temporary \"id\"\n\t\t\treturn [command.attributes.parent].filter(isString)\n\t\tcase CommandType.Duplicate:\n\t\tcase CommandType.Move:\n\t\t\treturn [command.attributes.id, command.attributes.parent].filter(isString)\n\t\tcase CommandType.CreateVariant:\n\t\t\treturn [command.attributes.from]\n\t\tdefault:\n\t\t\tassertNever(command)\n\t}\n}\n\nfunction resolveTargetFromId(id: string, ctx: AgentContext): RichTextTargetHandle | RichTextNode | undefined {\n\tif (isVirtualNodeId(id)) {\n\t\tconst virtualNodeId = parseVirtualNodeId(id)\n\t\t// Composite rich text target (e.g. nodeId/controlKey)\n\t\tif (isCompositeRichTextTarget(virtualNodeId.richTextTarget)) {\n\t\t\treturn resolveRichTextTargetHandle(virtualNodeId.richTextTarget, ctx)\n\t\t}\n\n\t\tconst node = ctx.treeStore.tree.get(virtualNodeId.richTextTarget)\n\t\tif (isRichTextNode(node)) return node\n\t}\n\n\tif (isCompositeRichTextTarget(id)) {\n\t\treturn resolveRichTextTargetHandle(id, ctx)\n\t}\n\n\tconst treeNode = ctx.treeResolver.get(id)\n\tif (isRichTextNode(treeNode)) return treeNode\n}\n\n/**\n * Preprocesses commands by hydrating the virtual text cache for all rich text targets they reference.\n * Only needed in contexts that bypass the normal agent read phase \u2014 e.g. evals, the debugbar DSL\n * runner, and tests \u2014 where no prior context gathering has populated the cache. In the actual agent\n * loop the cache is already warm from reading nodes into context.\n *\n * If it is not, the agent will be notified that a re-read is required instead. Instead of\n * re-hydrating during a command, which could result into a different state than the one the agent\n * already generated commands for at that point in time.\n */\nexport function preprocessCommands(commands: readonly Command[], ctx: AgentContext) {\n\tfor (const command of commands) {\n\t\tfor (const nodeId of collectNodeReferences(command)) {\n\t\t\tconst resolved = resolveTargetFromId(nodeId, ctx)\n\t\t\tif (!resolved) continue\n\n\t\t\tctx.virtualText.hydrate(resolved)\n\t\t}\n\t}\n}\n", "import { Button, Stack, TextArea } from \"@framerjs/fresco\"\nimport { errorFromUnknown } from \"@framerjs/shared\"\nimport { StreamingDSLParser } from \"app/ai/StreamingDSLParser.ts\"\nimport { AgentContext, type AgentContextHooks } from \"app/ai/agents/context/AgentContext.ts\"\nimport { transformToAiNode } from \"app/ai/agents/context/nodes.ts\"\nimport { COMMAND_SEPARATOR, isDSLCommandStart, parseDSLCommand } from \"app/ai/agents/dsl.ts\"\nimport { preprocessCommands } from \"app/ai/agents/preprocessCommands.ts\"\nimport { createProcessCommand } from \"app/ai/agents/processCommand.ts\"\nimport { dslInstructionsFromExamples } from \"app/ai/agents/prompt/dslCommands.ts\"\nimport { estimateTextTokens } from \"app/ai/agents/tokens.ts\"\nimport { createNodeByIdCursorStoreState } from \"app/ai/agents/tools/nodeById/cursorStore.ts\"\nimport engine from \"document/engine.ts\"\nimport { LockQueue } from \"document/utils/LockQueue.ts\"\nimport { startTransition, useCallback, useState } from \"react\"\nimport { useSessionStorageState } from \"../useSessionStorageState.tsx\"\nimport * as styles from \"./DSL.styles.ts\"\nimport { type DSLEvent, EventsLog, commandToEvent } from \"./Events.tsx\"\n\nexport function DSL() {\n\tconst dslInputStorageKey = `debugbar.dslInput.${engine.stores.projectStore.projectId}`\n\tconst [dslInput, setDslInput] = useSessionStorageState(dslInputStorageKey, \"\")\n\tconst [events, setEvents] = useState<DSLEvent[]>([])\n\tconst [isExecuting, setIsExecuting] = useState(false)\n\n\tconst handleExecute = useCallback(async () => {\n\t\tif (!dslInput.trim()) return\n\t\tconst selection = engine.stores.selectionStore.nodes\n\t\tconst hooks: AgentContextHooks = {\n\t\t\tgetEngine: () => engine,\n\t\t}\n\t\tconst ctx = await AgentContext.init(\n\t\t\t{\n\t\t\t\ttreeStore: engine.stores.treeStore,\n\t\t\t\tmodulesStore: engine.stores.modulesStore,\n\t\t\t\tvectorsStore: engine.stores.vectorsStore,\n\t\t\t\tformsStore: engine.stores.formsStore,\n\t\t\t\tsessionStore: engine.stores.sessionStore,\n\t\t\t\tcodeGenerationStore: engine.stores.codeGenerationStore,\n\t\t\t\tscheduler: engine.scheduler,\n\t\t\t\tcomponentLoader: engine.componentLoader,\n\t\t\t\thooks,\n\t\t\t\tsource: { agent: \"app\", prompt: \"in-app\" },\n\t\t\t\tprojectId: engine.stores.projectStore.projectId,\n\t\t\t},\n\t\t\tengine.stores.scopeStore.active,\n\t\t\tcreateNodeByIdCursorStoreState(),\n\t\t)\n\n\t\tconst nodes = await transformToAiNode(selection, ctx)\n\t\tconst startTime = performance.now()\n\t\tlet estimatedInputTokens = 0\n\n\t\tstartTransition(() => {\n\t\t\tsetIsExecuting(true)\n\t\t\tsetEvents([\n\t\t\t\t{\n\t\t\t\t\ttype: \"message_sent\",\n\t\t\t\t\tmessage: \"DSL executed\",\n\t\t\t\t\tcontext: ctx,\n\t\t\t\t\tnodes,\n\t\t\t\t\ttimestamp: startTime,\n\t\t\t\t\tduration: 0,\n\t\t\t\t},\n\t\t\t])\n\t\t})\n\n\t\tconst lockQueue = new LockQueue()\n\t\tconst treeStore = engine.stores.treeStore\n\t\tconst parsedCommands: Array<{ line: string; command: ReturnType<typeof parseDSLCommand> }> = []\n\n\t\tconst processCommand = createProcessCommand(treeStore, engine.stores.scopeStore.active, ctx, (fn, _raw) =>\n\t\t\tengine.scheduler.scheduleAgentChanges(() => {\n\t\t\t\tfn()\n\t\t\t\tctx.deferred.applyTraits(ctx)\n\t\t\t}),\n\t\t)\n\n\t\tconst parser = new StreamingDSLParser(\n\t\t\tCOMMAND_SEPARATOR,\n\t\t\tparseDSLCommand,\n\t\t\t(command, line) => {\n\t\t\t\tparsedCommands.push({ command, line })\n\t\t\t},\n\t\t\t{\n\t\t\t\tisCommandStart: isDSLCommandStart,\n\t\t\t\tonAnnotation: () => {},\n\t\t\t\tonError: (error, line) => {\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetEvents(prev => [\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\t\terror: errorFromUnknown(error),\n\t\t\t\t\t\t\t\tline,\n\t\t\t\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\t\t\t\tduration: performance.now() - startTime,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t])\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\n\t\tparser.addToken(dslInput)\n\t\tparser.finalize()\n\t\tpreprocessCommands(\n\t\t\tparsedCommands.map(({ command }) => command),\n\t\t\tctx,\n\t\t)\n\n\t\tfor (const { command, line } of parsedCommands) {\n\t\t\tconst estimatedTokens = estimateTextTokens(line)\n\t\t\testimatedInputTokens += estimatedTokens\n\n\t\t\tawait lockQueue.request(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait processCommand(command, line)\n\t\t\t\t\tconst diagnostics = ctx.issues.peekByRawCommand(line)\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetEvents(prev => [\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"line_received\",\n\t\t\t\t\t\t\t\tline,\n\t\t\t\t\t\t\t\testimatedTokens,\n\t\t\t\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\t\t\t\tduration: performance.now() - startTime,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcommandToEvent(command, startTime, diagnostics),\n\t\t\t\t\t\t])\n\t\t\t\t\t})\n\t\t\t\t} catch (error) {\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetEvents(prev => [\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\t\terror: errorFromUnknown(error),\n\t\t\t\t\t\t\t\tline,\n\t\t\t\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\t\t\t\tduration: performance.now() - startTime,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t])\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tawait ctx.files.finalize()\n\n\t\tawait lockQueue.synchronize()\n\n\t\tif (ctx.deferred.hasPendingTraits()) {\n\t\t\t// Await lazy resource loads before retrying deferred traits. Can't use\n\t\t\t// `ctx.deferred.flush`: it schedules via the turn changeset, which the debugbar\n\t\t\t// never populates.\n\t\t\tawait ctx.deferred.flushBlockingPromises()\n\t\t\tawait engine.scheduler.processWhenReadyAsync(() => ctx.deferred.applyTraits(ctx))\n\t\t}\n\n\t\tawait ctx.forms.finalize()\n\n\t\tstartTransition(() => {\n\t\t\tsetEvents(prev => [\n\t\t\t\t...prev,\n\t\t\t\t{\n\t\t\t\t\ttype: \"complete\",\n\t\t\t\t\ttimestamp: performance.now(),\n\t\t\t\t\tduration: performance.now() - startTime,\n\t\t\t\t\tusage: [],\n\t\t\t\t\testimatedInputTokens,\n\t\t\t\t},\n\t\t\t])\n\t\t\tsetIsExecuting(false)\n\t\t})\n\t}, [dslInput])\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent) => {\n\t\t\tif (event.key === \"Enter\" && !event.shiftKey) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvoid handleExecute()\n\t\t\t}\n\t\t},\n\t\t[handleExecute],\n\t)\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={12} className={styles.container}>\n\t\t\t<Stack direction=\"column\" gap={12} className={styles.inputColumn}>\n\t\t\t\t<TextArea\n\t\t\t\t\tvalue={dslInput}\n\t\t\t\t\tonChange={value => setDslInput(value)}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tplaceholder={dslInstructionsFromExamples({ test: true })}\n\t\t\t\t\tclassName={styles.textArea}\n\t\t\t\t/>\n\t\t\t\t<Button onClick={handleExecute} enabled={!isExecuting && !!dslInput.trim()}>\n\t\t\t\t\t{isExecuting ? \"Executing\u2026\" : \"Execute DSL\"}\n\t\t\t\t</Button>\n\t\t\t</Stack>\n\t\t\t<EventsLog events={events} />\n\t\t</Stack>\n\t)\n}\n", "import \"DSL.styles_4lilhf.wyw.css\"; export const container = \"container_cz5vpa9\";\nexport const inputColumn = \"inputColumn_iha13w1\";\nexport const textArea = \"textArea_t1b7q39u\";", "import { useClickHandlers } from \"@framerjs/app-shared/src/PreferMouseDown.tsx\"\nimport { Button, PopupButton, PopupButtonItem } from \"@framerjs/fresco\"\nimport { palette } from \"@framerjs/fresco/tokens\"\nimport { isEmptyObject } from \"@framerjs/shared\"\nimport { getNodeIdForPossiblyVirtualId } from \"app/ai/agents/commandTargets.ts\"\nimport { AgentContext, type AgentContextDependencies } from \"app/ai/agents/context/AgentContext.ts\"\nimport { getLintProblems } from \"app/ai/agents/linting/index.ts\"\nimport { createNodesDataProvider } from \"app/ai/agents/linting/lib/NodesDataProvider.ts\"\nimport type { LintProblem } from \"app/ai/agents/linting/lib/TreeLinter.ts\"\nimport { createNodeByIdCursorStoreState } from \"app/ai/agents/tools/nodeById/cursorStore.ts\"\nimport { flatten } from \"app/ai/utils/flatten.ts\"\nimport { useFindNodeById } from \"document/components/chrome/debugbar/useFindNodeById.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { startTransition, useCallback, useRef, useState } from \"react\"\nimport * as styles from \"./Linter.styles.ts\"\n\ntype LintMode = \"once\" | \"continuous\"\ntype SchedulerMode = \"yield-to-engine\" | \"fast-mode\"\n\nfunction buildAgentContextDependencies(): AgentContextDependencies {\n\treturn {\n\t\ttreeStore: engine.stores.treeStore,\n\t\tmodulesStore: engine.stores.modulesStore,\n\t\tvectorsStore: engine.stores.vectorsStore,\n\t\tformsStore: engine.stores.formsStore,\n\t\tsessionStore: engine.stores.sessionStore,\n\t\tcodeGenerationStore: engine.stores.codeGenerationStore,\n\t\tscheduler: engine.scheduler,\n\t\tcomponentLoader: engine.componentLoader,\n\t\thooks: { getEngine: () => engine },\n\t\tsource: { agent: \"app\", prompt: \"in-app\" },\n\t\tprojectId: engine.stores.projectStore.projectId,\n\t}\n}\n\ninterface DebugLintProblem extends LintProblem {\n\tdataString?: string\n}\n\nexport function Linter() {\n\tconst selectedNodes = useEngineState(() => engine.stores.selectionStore.nodes, [], [engine.stores.selectionStore])\n\tconst [results, setResults] = useState<DebugLintProblem[]>([])\n\tconst [durationRangeMs, setDurationRangeMs] = useState<{ mean: number; max: number } | null>(null)\n\tconst [isLinting, setIsLinting] = useState(false)\n\tconst [hasLinted, setHasLinted] = useState(false)\n\tconst [lintMode, setLintMode] = useState<LintMode>(\"once\")\n\tconst [schedulerMode, setSchedulerMode] = useState<SchedulerMode>(\"yield-to-engine\")\n\tconst shouldContinueLintingRef = useRef<AbortController | null>(null)\n\tconst recentDurationsRef = useRef<number[]>([])\n\n\tconst handleLint = useCallback(async () => {\n\t\tif (isLinting && shouldContinueLintingRef.current) {\n\t\t\tshouldContinueLintingRef.current.abort()\n\t\t\treturn\n\t\t}\n\t\tif (selectedNodes.length === 0) return\n\n\t\trecentDurationsRef.current = []\n\n\t\tconst nodesToLint = selectedNodes.map(node => engine.tree.getNode(node.id) ?? node)\n\t\tshouldContinueLintingRef.current = new AbortController()\n\t\tsetIsLinting(true)\n\n\t\ttry {\n\t\t\tdo {\n\t\t\t\tconst ctx = await AgentContext.init(\n\t\t\t\t\tbuildAgentContextDependencies(),\n\t\t\t\t\tengine.stores.scopeStore.active,\n\t\t\t\t\tcreateNodeByIdCursorStoreState(),\n\t\t\t\t)\n\n\t\t\t\tconst startTime = performance.now()\n\t\t\t\tconst lintProblems = await getLintProblems({\n\t\t\t\t\tnodesToLint,\n\t\t\t\t\tnodesDataProvider: createNodesDataProvider(ctx),\n\t\t\t\t\tschedulerYieldCallback:\n\t\t\t\t\t\tschedulerMode === \"yield-to-engine\" ? engine.scheduler.runWhenIdle.bind(engine.scheduler) : undefined,\n\t\t\t\t\truleConfig: {\n\t\t\t\t\t\tthemes: ctx.tokens.getThemes(),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tconst duration = Math.round(performance.now() - startTime)\n\n\t\t\t\tstartTransition(() => {\n\t\t\t\t\tsetHasLinted(true)\n\t\t\t\t\tsetResults(\n\t\t\t\t\t\tlintProblems.map<DebugLintProblem>(problem => {\n\t\t\t\t\t\t\tconst data = flatten(problem.data ?? {})\n\t\t\t\t\t\t\tconst dataString = Object.entries(data)\n\t\t\t\t\t\t\t\t.map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n\t\t\t\t\t\t\t\t.join(\", \")\n\n\t\t\t\t\t\t\treturn { ...problem, dataString }\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\n\t\t\t\t\trecentDurationsRef.current.push(duration)\n\t\t\t\t\twhile (recentDurationsRef.current.length > 50) {\n\t\t\t\t\t\trecentDurationsRef.current.shift()\n\t\t\t\t\t}\n\t\t\t\t\tsetDurationRangeMs({\n\t\t\t\t\t\tmean: Math.round(recentDurationsRef.current.reduce((a, b) => a + b) / recentDurationsRef.current.length),\n\t\t\t\t\t\tmax: Math.max(...recentDurationsRef.current),\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} while (lintMode === \"continuous\" && !shouldContinueLintingRef.current.signal.aborted)\n\t\t} finally {\n\t\t\tshouldContinueLintingRef.current = null\n\t\t\tsetIsLinting(false)\n\t\t}\n\t}, [isLinting, lintMode, schedulerMode, selectedNodes])\n\n\treturn (\n\t\t<section className={styles.panel} aria-label=\"Linter\">\n\t\t\t<div className={styles.toolbar}>\n\t\t\t\t<Button\n\t\t\t\t\tonClick={() => void handleLint()}\n\t\t\t\t\tenabled={selectedNodes.length > 0 || (isLinting && lintMode === \"continuous\")}\n\t\t\t\t\tclassName={styles.lintButton}\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t>\n\t\t\t\t\t{isLinting ? \"Stop\" : lintMode === \"continuous\" ? \"Start\" : \"Lint\"}\n\t\t\t\t</Button>\n\n\t\t\t\t<div className={styles.toolbarControl}>\n\t\t\t\t\t<span>Mode</span>\n\t\t\t\t\t<PopupButton title={lintMode === \"once\" ? \"Once\" : \"Continuous\"} enabled={!isLinting}>\n\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\tidentifier=\"once\"\n\t\t\t\t\t\t\ttitle=\"Once\"\n\t\t\t\t\t\t\tselected={lintMode === \"once\"}\n\t\t\t\t\t\t\tonSelect={value => setLintMode(value as LintMode)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\tidentifier=\"continuous\"\n\t\t\t\t\t\t\ttitle=\"Continuous\"\n\t\t\t\t\t\t\tselected={lintMode === \"continuous\"}\n\t\t\t\t\t\t\tonSelect={value => setLintMode(value as LintMode)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PopupButton>\n\t\t\t\t</div>\n\n\t\t\t\t<div className={styles.toolbarControl}>\n\t\t\t\t\t<span>Scheduler</span>\n\t\t\t\t\t<PopupButton\n\t\t\t\t\t\ttitle={schedulerMode === \"yield-to-engine\" ? \"Yield to Engine\" : \"Fast Mode\"}\n\t\t\t\t\t\tenabled={!isLinting}\n\t\t\t\t\t>\n\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\tidentifier=\"yield-to-engine\"\n\t\t\t\t\t\t\ttitle=\"Yield to Engine\"\n\t\t\t\t\t\t\tselected={schedulerMode === \"yield-to-engine\"}\n\t\t\t\t\t\t\tonSelect={value => setSchedulerMode(value as SchedulerMode)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\tidentifier=\"fast-mode\"\n\t\t\t\t\t\t\ttitle=\"Fast Mode\"\n\t\t\t\t\t\t\tselected={schedulerMode === \"fast-mode\"}\n\t\t\t\t\t\t\tonSelect={value => setSchedulerMode(value as SchedulerMode)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PopupButton>\n\t\t\t\t</div>\n\n\t\t\t\t{durationRangeMs !== null && (\n\t\t\t\t\t<span className={styles.timing}>\n\t\t\t\t\t\tMean:{durationRangeMs.mean}ms Max:{durationRangeMs.max}ms\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\n\t\t\t\t<div className={styles.toolbarSpacer} />\n\n\t\t\t\t<div className={styles.selectionSummary}>\n\t\t\t\t\tSelected:{\" \"}\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{selectedNodes.length === 0\n\t\t\t\t\t\t\t? \"None\"\n\t\t\t\t\t\t\t: selectedNodes.length === 1\n\t\t\t\t\t\t\t\t? selectedNodes[0]?.id\n\t\t\t\t\t\t\t\t: `${selectedNodes.length} elements`}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className={styles.resultsContainer}>\n\t\t\t\t{results.length > 0 ? (\n\t\t\t\t\t<table className={styles.table}>\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th className={styles.headerCell}>Level</th>\n\t\t\t\t\t\t\t\t<th className={styles.headerCell}>Rule</th>\n\t\t\t\t\t\t\t\t<th className={styles.headerCell}>Problem</th>\n\t\t\t\t\t\t\t\t<th className={styles.headerCell}>Node IDs</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\n\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t{results.map((result, index) => (\n\t\t\t\t\t\t\t\t<tr key={`${result.level}-${result.rule.name}-${result.problem}-${index}`}>\n\t\t\t\t\t\t\t\t\t<td className={styles.cell}>\n\t\t\t\t\t\t\t\t\t\t<span className={result.level === \"error\" ? styles.levelError : styles.levelWarning}>\n\t\t\t\t\t\t\t\t\t\t\t{result.level}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t<td className={styles.cell}>\n\t\t\t\t\t\t\t\t\t\t{result.rule.name}\n\t\t\t\t\t\t\t\t\t\t<div className={styles.data}>{result.rule.description}</div>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t<td className={styles.cell}>\n\t\t\t\t\t\t\t\t\t\t{result.problem}\n\t\t\t\t\t\t\t\t\t\t{!!result.data && !isEmptyObject(result.data) && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={styles.data}>{result.dataString}</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t<td className={styles.cell}>\n\t\t\t\t\t\t\t\t\t\t<div className={styles.nodeIds}>\n\t\t\t\t\t\t\t\t\t\t\t{result.nodeIds.map(nodeId => (\n\t\t\t\t\t\t\t\t\t\t\t\t<NodeIdButton key={nodeId} nodeId={nodeId} />\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t) : (\n\t\t\t\t\t<div className={styles.emptyState}>{hasLinted ? \"No issues found.\" : \"No lint results yet.\"}</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</section>\n\t)\n}\n\nfunction NodeIdButton({ nodeId }: { nodeId: string }) {\n\tconst realNodeId = getNodeIdForPossiblyVirtualId(nodeId)\n\tconst { findNodeById } = useFindNodeById()\n\tconst color = getNodeIdColor(nodeId)\n\tconst handleClick = useCallback(() => {\n\t\tvoid findNodeById(realNodeId)\n\t}, [findNodeById, realNodeId])\n\tconst clickHandlers = useClickHandlers(handleClick)\n\n\treturn (\n\t\t<button type=\"button\" className={styles.nodeIdButton} style={{ color }} {...clickHandlers}>\n\t\t\t{nodeId}\n\t\t</button>\n\t)\n}\n\nfunction getNodeIdColor(nodeId: string) {\n\tlet hash = 0\n\tfor (let index = 0; index < nodeId.length; index++) {\n\t\thash = (hash * 31 + nodeId.charCodeAt(index)) >>> 0\n\t}\n\n\treturn nodeIdPalette[hash % nodeIdPalette.length]\n}\n\nconst nodeIdPalette = [\n\tpalette.purple170,\n\tpalette.purple160,\n\tpalette.purple150,\n\tpalette.purple140,\n\tpalette.purple135,\n\tpalette.purple126,\n\tpalette.purple100,\n\tpalette.purple95,\n\tpalette.purple90,\n\tpalette.purple60,\n\tpalette.blue60,\n\tpalette.blue55,\n\tpalette.blue50,\n\tpalette.blue80,\n\tpalette.blue90,\n\tpalette.blue100,\n\tpalette.blue40,\n\tpalette.blue30,\n\tpalette.purple100,\n\tpalette.pink60,\n\tpalette.pink50,\n\tpalette.pink40,\n\tpalette.red130,\n\tpalette.red120,\n\tpalette.red114,\n\tpalette.red110,\n\tpalette.red107,\n\tpalette.red106,\n\tpalette.green100,\n\tpalette.green110,\n\tpalette.green130,\n\tpalette.orange100,\n\tpalette.orange90,\n\tpalette.orange80,\n\tpalette.orange70,\n\tpalette.red100,\n\tpalette.yellow120,\n\tpalette.yellow110,\n\tpalette.yellow100,\n]\n", "import \"Linter.styles_4snv0t.wyw.css\"; export const panel = \"panel_p14wu89m\";\nexport const toolbar = \"toolbar_t1avouuh\";\nexport const selectionSummary = \"selectionSummary_srhmz8x\";\nexport const toolbarSpacer = \"toolbarSpacer_t1isoaz3\";\nexport const lintButton = \"lintButton_l1yncdkk\";\nexport const toolbarControl = \"toolbarControl_t15b7wuw\";\nexport const timing = \"timing_t1ocn95v\";\nexport const resultsContainer = \"resultsContainer_r1ux080a\";\nexport const table = \"table_trvvmnt\";\nexport const headerCell = \"headerCell_h1ltz18k\";\nexport const cell = \"cell_c1i8l0z5\";\nexport const levelWarning = \"levelWarning_l1figk3d\";\nexport const levelError = \"levelError_lep1gb\";\nexport const data = \"data_d1faaont\";\nexport const nodeIds = \"nodeIds_n1a2k5sy\";\nexport const nodeIdButton = \"nodeIdButton_n1zfw1r\";\nexport const emptyState = \"emptyState_er8q5po\";", "import { Button, Stack, TextArea } from \"@framerjs/fresco\"\nimport { errorFromUnknown, isCommandKeyPressed } from \"@framerjs/shared\"\nimport { createDocumentParser } from \"app/ai/agents/DocumentParser.ts\"\nimport { AgentContext, type AgentContextHooks } from \"app/ai/agents/context/AgentContext.ts\"\nimport { QUOTE_REPAIR_WARNING } from \"app/ai/agents/dsl.ts\"\nimport { createProcessCommand } from \"app/ai/agents/processCommand.ts\"\nimport { synchronizeAgentContext } from \"app/ai/agents/synchronizeAgentContext.ts\"\nimport { createNodeByIdCursorStoreState } from \"app/ai/agents/tools/nodeById/cursorStore.ts\"\nimport { AgentScriptBridge, type AgentScriptRecordedCall } from \"app/ai/agents/tools/script/bridge.ts\"\nimport engine from \"document/engine.ts\"\nimport { LockQueue } from \"document/utils/LockQueue.ts\"\nimport { startTransition, useCallback, useEffect, useRef, useState } from \"react\"\nimport { useSessionStorageState } from \"../useSessionStorageState.tsx\"\nimport * as styles from \"./Script.styles.ts\"\n\nconst defaultScript = `const node = await api.tree.getNode(\"augiA20Il\")\nreturn node`\n\ninterface ScriptCommandError {\n\tline: string\n\tmessage: string\n}\n\ninterface ScriptRunState {\n\tstatus: \"idle\" | \"running\" | \"success\" | \"error\"\n\tresult: string\n\terror: string\n\telapsedMs?: number\n\tcalls: readonly AgentScriptRecordedCall[]\n\tcommandErrors: readonly ScriptCommandError[]\n}\n\nconst idleRunState: ScriptRunState = {\n\tstatus: \"idle\",\n\tresult: \"\",\n\terror: \"\",\n\tcalls: [],\n\tcommandErrors: [],\n}\n\nexport function Script() {\n\tconst scriptInputStorageKey = `debugbar.scriptInput.${engine.stores.projectStore.projectId}`\n\tconst [scriptInput, setScriptInput] = useSessionStorageState(scriptInputStorageKey, defaultScript)\n\tconst [runState, setRunState] = useState<ScriptRunState>(idleRunState)\n\tconst abortControllerRef = useRef<AbortController | null>(null)\n\n\tuseEffect(() => {\n\t\treturn () => abortControllerRef.current?.abort()\n\t}, [])\n\n\tconst handleRun = useCallback(async () => {\n\t\tconst script = scriptInput.trim()\n\t\tif (!script || runState.status === \"running\") return\n\n\t\tconst abortController = new AbortController()\n\t\tabortControllerRef.current = abortController\n\n\t\tstartTransition(() => {\n\t\t\tsetRunState({ ...idleRunState, status: \"running\" })\n\t\t})\n\n\t\ttry {\n\t\t\tconst nextRunState = await runScript(script, abortController.signal)\n\t\t\tstartTransition(() => {\n\t\t\t\tsetRunState(nextRunState)\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tconst normalizedError = errorFromUnknown(error)\n\t\t\tstartTransition(() => {\n\t\t\t\tsetRunState({\n\t\t\t\t\t...idleRunState,\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\terror: normalizedError.stack ?? normalizedError.message,\n\t\t\t\t})\n\t\t\t})\n\t\t} finally {\n\t\t\tif (abortControllerRef.current === abortController) {\n\t\t\t\tabortControllerRef.current = null\n\t\t\t}\n\t\t}\n\t}, [runState.status, scriptInput])\n\n\tconst handleCancel = useCallback(() => {\n\t\tabortControllerRef.current?.abort()\n\t}, [])\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent) => {\n\t\t\tif (event.key === \"Enter\" && isCommandKeyPressed(event)) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvoid handleRun()\n\t\t\t}\n\t\t},\n\t\t[handleRun],\n\t)\n\n\tconst isRunning = runState.status === \"running\"\n\tconst output = getOutput(runState)\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={12} className={styles.container}>\n\t\t\t<Stack direction=\"column\" gap={12} className={styles.inputColumn}>\n\t\t\t\t<TextArea\n\t\t\t\t\tvalue={scriptInput}\n\t\t\t\t\tonChange={setScriptInput}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tplaceholder={defaultScript}\n\t\t\t\t\tclassName={styles.textArea}\n\t\t\t\t/>\n\t\t\t\t<Stack direction=\"row\" gap={8}>\n\t\t\t\t\t<Button onClick={() => void handleRun()} enabled={!isRunning && !!scriptInput.trim()}>\n\t\t\t\t\t\t{isRunning ? \"Running...\" : \"Run script\"}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button onClick={handleCancel} enabled={isRunning}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"column\" gap={12} className={styles.outputColumn}>\n\t\t\t\t<section className={styles.panel}>\n\t\t\t\t\t<div className={styles.panelHeader}>\n\t\t\t\t\t\t<span>Result</span>\n\t\t\t\t\t\t<span className={styles.panelStatus}>{getStatusLabel(runState)}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<pre className={`${styles.output} ${runState.status === \"error\" ? styles.errorOutput : \"\"}`}>{output}</pre>\n\t\t\t\t</section>\n\t\t\t\t<section className={styles.panel}>\n\t\t\t\t\t<div className={styles.panelHeader}>\n\t\t\t\t\t\t<span>API calls</span>\n\t\t\t\t\t\t<span className={styles.panelStatus}>{runState.calls.length}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={styles.callsList}>\n\t\t\t\t\t\t{runState.calls.length === 0 && <div className={styles.callMeta}>Calls will appear here.</div>}\n\t\t\t\t\t\t{runState.calls.map((call, index) => (\n\t\t\t\t\t\t\t<div key={`${call.method}-${index}`} className={styles.callItem}>\n\t\t\t\t\t\t\t\t<div>{call.method}</div>\n\t\t\t\t\t\t\t\t<div className={styles.callMeta}>\n\t\t\t\t\t\t\t\t\t{call.elapsedMs}ms{call.error ? ` | ${call.error}` : \"\"}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<pre className={styles.output}>{formatValue(call.input)}</pre>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t</Stack>\n\t\t</Stack>\n\t)\n}\n\nasync function runScript(script: string, signal: AbortSignal): Promise<ScriptRunState> {\n\tconst startedAt = performance.now()\n\tconst calls: AgentScriptRecordedCall[] = []\n\tconst commandErrors: ScriptCommandError[] = []\n\tconst queue = new LockQueue()\n\tconst scope = engine.stores.scopeStore.active\n\tconst hooks: AgentContextHooks = {\n\t\tgetEngine: () => engine,\n\t}\n\tconst ctx = await AgentContext.init(\n\t\t{\n\t\t\ttreeStore: engine.stores.treeStore,\n\t\t\tmodulesStore: engine.stores.modulesStore,\n\t\t\tvectorsStore: engine.stores.vectorsStore,\n\t\t\tformsStore: engine.stores.formsStore,\n\t\t\tsessionStore: engine.stores.sessionStore,\n\t\t\tcodeGenerationStore: engine.stores.codeGenerationStore,\n\t\t\tscheduler: engine.scheduler,\n\t\t\tcomponentLoader: engine.componentLoader,\n\t\t\thooks,\n\t\t\tsource: { agent: \"app\", prompt: \"in-app\" },\n\t\t\tprojectId: engine.stores.projectStore.projectId,\n\t\t},\n\t\tscope,\n\t\tcreateNodeByIdCursorStoreState(),\n\t)\n\n\tconst processCommand = createProcessCommand(engine.stores.treeStore, scope, ctx, (fn, _raw) =>\n\t\tengine.scheduler.scheduleAgentChanges(() => {\n\t\t\tfn()\n\t\t\tctx.deferred.applyTraits(ctx)\n\t\t}),\n\t)\n\n\tconst parser = createDocumentParser({\n\t\tonDSLCommand: (parsed, raw) => {\n\t\t\tif (signal.aborted) return\n\n\t\t\tif (parsed instanceof Error) {\n\t\t\t\tctx.issues.error(raw, parsed)\n\t\t\t\tcommandErrors.push({ line: raw, message: parsed.message })\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tvoid queue.request(\n\t\t\t\tasync () => {\n\t\t\t\t\tif (signal.aborted) return\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait processCommand(parsed, raw)\n\t\t\t\t\t\tconst resolutionError = ctx.treeResolver.consumeResolutionError()\n\t\t\t\t\t\tif (resolutionError) {\n\t\t\t\t\t\t\tctx.issues.error(raw, resolutionError, { nodeIds: [resolutionError.nodeId] })\n\t\t\t\t\t\t\tcommandErrors.push({ line: raw, message: resolutionError.message })\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst normalizedError = errorFromUnknown(error)\n\t\t\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\t\t\tctx.issues.error(raw, error)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommandErrors.push({ line: raw, message: normalizedError.message })\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ synchronize: false },\n\t\t\t)\n\t\t},\n\t\tonDSLRepair: info => ctx.issues.warning(info.repairedRaw, { syntax: QUOTE_REPAIR_WARNING }),\n\t\tonText: () => {},\n\t\tonDesignPlan: () => {},\n\t\tonAnnotation: () => {},\n\t})\n\n\tconst synchronize = async (fullSync: boolean = true) => {\n\t\tparser.finalize()\n\t\tawait queue.synchronize()\n\t\tawait synchronizeAgentContext({\n\t\t\tctx,\n\t\t\tengine,\n\t\t\tfullSync,\n\t\t\tscheduleUpdate: fn => engine.scheduler.scheduleAgentChanges(fn),\n\t\t})\n\t}\n\n\tconst bridge = new AgentScriptBridge(ctx, parser, synchronize, undefined, {\n\t\trecordCall: call => calls.push(call),\n\t})\n\tconst execution = await bridge.run({ script, signal })\n\tawait synchronize()\n\n\tconst elapsedMs = Math.round(performance.now() - startedAt)\n\tif (!execution.ok) {\n\t\treturn {\n\t\t\tstatus: \"error\",\n\t\t\tresult: \"\",\n\t\t\terror: formatScriptExecutionError(execution),\n\t\t\telapsedMs,\n\t\t\tcalls,\n\t\t\tcommandErrors,\n\t\t}\n\t}\n\n\tif (commandErrors.length > 0) {\n\t\treturn {\n\t\t\tstatus: \"error\",\n\t\t\tresult: formatValue(execution.result),\n\t\t\terror: formatCommandErrors(commandErrors),\n\t\t\telapsedMs,\n\t\t\tcalls,\n\t\t\tcommandErrors,\n\t\t}\n\t}\n\n\treturn {\n\t\tstatus: \"success\",\n\t\tresult: formatValue(execution.result),\n\t\terror: \"\",\n\t\telapsedMs,\n\t\tcalls,\n\t\tcommandErrors,\n\t}\n}\n\nfunction getStatusLabel(runState: ScriptRunState): string {\n\tswitch (runState.status) {\n\t\tcase \"idle\":\n\t\t\treturn \"Ready\"\n\t\tcase \"running\":\n\t\t\treturn \"Running\"\n\t\tcase \"success\":\n\t\t\treturn runState.elapsedMs === undefined ? \"Done\" : `Done in ${runState.elapsedMs}ms`\n\t\tcase \"error\":\n\t\t\treturn runState.elapsedMs === undefined ? \"Error\" : `Error after ${runState.elapsedMs}ms`\n\t}\n}\n\nfunction getOutput(runState: ScriptRunState): string {\n\tswitch (runState.status) {\n\t\tcase \"idle\":\n\t\t\treturn \"Run a script to validate it against the current project.\"\n\t\tcase \"running\":\n\t\t\treturn \"Running script...\"\n\t\tcase \"success\":\n\t\t\treturn runState.result\n\t\tcase \"error\":\n\t\t\treturn [runState.error, runState.result ? `\\nResult:\\n${runState.result}` : \"\"].join(\"\")\n\t}\n}\n\nfunction formatScriptExecutionError(execution: {\n\terror?: string\n\terrorType?: string\n\tline?: number\n\tdiagnostics?: unknown\n}): string {\n\tconst parts = [execution.error ?? \"Script execution failed.\"]\n\tif (execution.errorType) parts.push(`type: ${execution.errorType}`)\n\tif (execution.line !== undefined) parts.push(`line: ${execution.line}`)\n\tif (execution.diagnostics !== undefined) parts.push(`diagnostics: ${formatValue(execution.diagnostics)}`)\n\treturn parts.join(\"\\n\")\n}\n\nfunction formatCommandErrors(errors: readonly ScriptCommandError[]): string {\n\treturn errors.map(error => `${error.message}\\n${error.line}`).join(\"\\n\\n\")\n}\n\nfunction formatValue(value: unknown): string {\n\tif (value === undefined) return \"undefined\"\n\tconst json = JSON.stringify(value, null, \"\\t\")\n\treturn json ?? String(value)\n}\n", "import \"Script.styles_12x338b.wyw.css\"; export const container = \"container_crkhrwy\";\nexport const inputColumn = \"inputColumn_insshhj\";\nexport const outputColumn = \"outputColumn_odn0vgn\";\nexport const textArea = \"textArea_tn8z0fr\";\nexport const panel = \"panel_p1pe0ct\";\nexport const panelHeader = \"panelHeader_p1jfixsb\";\nexport const panelStatus = \"panelStatus_p15ppr9o\";\nexport const output = \"output_oul6eec\";\nexport const errorOutput = \"errorOutput_e1obvpla\";\nexport const callsList = \"callsList_c1mtb12p\";\nexport const callItem = \"callItem_c1u0oqm3\";\nexport const callMeta = \"callMeta_c1sgxty1\";", "import * as toolStyles from \"../Tools.styles.ts\"\n\nimport { Button, Link, PopupButton, PopupButtonItem, Stack, TextArea } from \"@framerjs/fresco\"\nimport { type ModelMessage, generateText } from \"ai\"\nimport { createVekterOpenRouterExtraBody, openRouter } from \"app/ai/config/openRouter.ts\"\nimport { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { getProviderForModel, getReasoningForModel } from \"app/ai/models.ts\"\nimport { type ChangeEvent, useState } from \"react\"\nimport { estimateTokenCount } from \"tokenx\"\nimport { uploadService } from \"web/pages/project/lib/UploadService.ts\"\n\nconst OPENAI_TOKENIZER_URL = \"https://platform.openai.com/tokenizer\"\nconst CLAUDE_TOKEN_COUNTING_DOCS_URL = \"https://platform.claude.com/docs/en/build-with-claude/token-counting\"\n\nconst DEFAULT_TEXT = \"Paste any arbitrary text here to estimate token usage.\"\ninterface SupportedModel {\n\tmodel: LanguageModel\n\ttitle: string\n}\n\nconst SUPPORTED_MODELS: readonly SupportedModel[] = [\n\t{ model: LanguageModel.ClaudeHaiku45, title: \"Anthropic (Claude 4.x, except Opus 4.7)\" },\n\t{ model: LanguageModel.ClaudeOpus47, title: \"Anthropic (Claude Opus 4.7)\" },\n\t{ model: LanguageModel.GPT51CodexMini, title: \"OpenAI (GPT 5.x)\" },\n\t{ model: LanguageModel.KimiK25, title: \"Kimi (K2.5)\" },\n\t{ model: LanguageModel.Gemini31FlashLite, title: \"Google (Gemini 3.1 Flash Lite)\" },\n]\n\nconst DEFAULT_MODEL: LanguageModel = LanguageModel.GPT51CodexMini\n\nfunction TokenizerPlayground() {\n\tconst [selectedModel, setSelectedModel] = useState<LanguageModel>(DEFAULT_MODEL)\n\tconst [inputText, setInputText] = useState(DEFAULT_TEXT)\n\tconst [uploadedImageUrls, setUploadedImageUrls] = useState<string[]>([])\n\tconst [tokens, setTokens] = useState<number | null>(null)\n\tconst [errorMessage, setErrorMessage] = useState(\"\")\n\tconst [isLoading, setIsLoading] = useState(false)\n\tconst [isUploadingImages, setIsUploadingImages] = useState(false)\n\n\tconst characterCount = inputText.length\n\tconst liveTokenxEstimate = estimateTokenCount(buildTokenxText(inputText, uploadedImageUrls))\n\tconst hasInput = inputText.trim().length > 0 || uploadedImageUrls.length > 0\n\n\tasync function handleCountTokens() {\n\t\tif (!hasInput) {\n\t\t\tsetErrorMessage(\"Add text and/or images first.\")\n\t\t\treturn\n\t\t}\n\n\t\tsetIsLoading(true)\n\t\tsetErrorMessage(\"\")\n\t\tsetTokens(null)\n\n\t\ttry {\n\t\t\tconst messages = toModelMessages(inputText, uploadedImageUrls)\n\t\t\tconst provider = getProviderForModel(selectedModel)\n\t\t\tconst reasoning = getReasoningForModel(selectedModel)\n\t\t\tconst openRouterModel = openRouter(selectedModel, {\n\t\t\t\t...(provider ? { provider } : {}),\n\t\t\t\t...(reasoning ? { reasoning } : {}),\n\t\t\t\textraBody: createVekterOpenRouterExtraBody({\n\t\t\t\t\tfeatureCategory: \"agents\",\n\t\t\t\t\tfeatureName: \"agents\",\n\t\t\t\t\tstep: \"tokenizer-playground\",\n\t\t\t\t\tsessionId: crypto.randomUUID(),\n\t\t\t\t}),\n\t\t\t})\n\t\t\tconst response = await generateText({\n\t\t\t\tmodel: openRouterModel,\n\t\t\t\tmessages,\n\t\t\t\tmaxOutputTokens: 16,\n\t\t\t\ttemperature: 0,\n\t\t\t})\n\n\t\t\tlet tokens = response.usage?.inputTokens\n\t\t\tif (tokens === undefined) {\n\t\t\t\tsetErrorMessage(\"No usage data returned by the model.\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (selectedModel.includes(\"anthropic\") || selectedModel.includes(\"openai\")) {\n\t\t\t\t// This is a magic number and seems to remove the per-request token overhead to get\n\t\t\t\t// a correct result. Somehow only Anthropic and OpenAI models need this.\n\t\t\t\ttokens -= 6\n\t\t\t}\n\t\t\tif (selectedModel.includes(\"kimi\")) {\n\t\t\t\t// Same as above but seemingly 1 token higher for Kimi models.\n\t\t\t\ttokens -= 7\n\t\t\t}\n\n\t\t\tsetTokens(tokens)\n\t\t} catch (error) {\n\t\t\tsetErrorMessage(getErrorMessage(error, \"Failed to estimate tokens.\"))\n\t\t} finally {\n\t\t\tsetIsLoading(false)\n\t\t}\n\t}\n\n\tasync function handleImageFilesChange(event: ChangeEvent<HTMLInputElement>) {\n\t\tconst files = Array.from(event.target.files ?? [])\n\t\tevent.target.value = \"\"\n\t\tif (files.length === 0) return\n\t\tsetIsUploadingImages(true)\n\t\tsetErrorMessage(\"\")\n\t\ttry {\n\t\t\tconst urls: string[] = []\n\t\t\tfor (const file of files) {\n\t\t\t\tif (!file.type.startsWith(\"image/\")) continue\n\t\t\t\tconst result = await uploadService.uploadImage(file, { silent: true })\n\t\t\t\tif (result?.url) urls.push(result.url)\n\t\t\t}\n\t\t\tsetUploadedImageUrls(prev => [...prev, ...urls])\n\t\t} catch (error) {\n\t\t\tsetErrorMessage(getErrorMessage(error, \"Failed to upload images.\"))\n\t\t} finally {\n\t\t\tsetIsUploadingImages(false)\n\t\t}\n\t}\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={8}>\n\t\t\t<Stack direction=\"column\" gap={4}>\n\t\t\t\t<div>Model</div>\n\t\t\t\t<PopupButton title={getModelTitle(selectedModel)} enabled={!isLoading && !isUploadingImages}>\n\t\t\t\t\t{SUPPORTED_MODELS.map(({ model, title }) => (\n\t\t\t\t\t\t<PopupButtonItem key={model} title={title} onSelect={() => setSelectedModel(model)} />\n\t\t\t\t\t))}\n\t\t\t\t</PopupButton>\n\t\t\t</Stack>\n\n\t\t\t<Stack direction=\"column\" gap={4}>\n\t\t\t\t<div>Text</div>\n\t\t\t\t<TextArea rows={14} value={inputText} onChange={setInputText} placeholder=\"Paste any text...\" />\n\t\t\t\t<div style={{ opacity: 0.7 }}>\n\t\t\t\t\tCharacters: {characterCount} | tokenx estimate: {liveTokenxEstimate}\n\t\t\t\t</div>\n\t\t\t</Stack>\n\n\t\t\t<Stack direction=\"column\" gap={4}>\n\t\t\t\t<div>Images</div>\n\t\t\t\t<input type=\"file\" multiple accept=\"image/*\" onChange={handleImageFilesChange} disabled={isUploadingImages} />\n\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t<div style={{ opacity: 0.7 }}>Uploaded images: {uploadedImageUrls.length}</div>\n\t\t\t\t\t{uploadedImageUrls.length > 0 ? <Button onClick={() => setUploadedImageUrls([])}>Clear</Button> : null}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\n\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t<Button onClick={handleCountTokens} enabled={!isLoading && !isUploadingImages}>\n\t\t\t\t\t{isLoading ? \"Getting tokens...\" : \"Submit\"}\n\t\t\t\t</Button>\n\t\t\t\t{tokens !== null ? <div>tokens = {tokens}</div> : null}\n\t\t\t\t{errorMessage ? <div style={{ color: \"#cc3344\" }}>{errorMessage}</div> : null}\n\t\t\t</Stack>\n\n\t\t\t<Stack direction=\"column\" gap={2}>\n\t\t\t\t<Link href={CLAUDE_TOKEN_COUNTING_DOCS_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t\tClaude token counting docs\n\t\t\t\t</Link>\n\t\t\t\t<Link href={OPENAI_TOKENIZER_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t\tOpenAI tokenizer playground\n\t\t\t\t</Link>\n\t\t\t</Stack>\n\t\t</Stack>\n\t)\n}\n\nfunction toModelMessages(text: string, imageUrls: readonly string[]): ModelMessage[] {\n\tconst content = [\n\t\t...(text.trim() ? [{ type: \"text\" as const, text }] : []),\n\t\t...imageUrls.map(imageUrl => ({ type: \"image\" as const, image: new URL(imageUrl) })),\n\t]\n\tif (content.length === 0) return []\n\treturn [{ role: \"user\", content }]\n}\n\nfunction buildTokenxText(text: string, imageUrls: readonly string[]): string {\n\tconst imageLines = imageUrls.map((url, index) => `image_${index + 1}: ${url}`)\n\treturn [text, ...imageLines].filter(Boolean).join(\"\\n\")\n}\n\nfunction getModelTitle(model: LanguageModel): string {\n\tconst found = SUPPORTED_MODELS.find(({ model: supportedModel }) => supportedModel === model)\n\treturn found?.title ?? model\n}\n\nfunction getErrorMessage(error: unknown, fallback: string): string {\n\tif (error instanceof Error && error.message) return error.message\n\tif (typeof error === \"string\" && error) return error\n\tif (typeof error === \"object\" && error !== null) {\n\t\tconst maybeMessage = Reflect.get(error, \"message\")\n\t\tif (typeof maybeMessage === \"string\" && maybeMessage) return maybeMessage\n\t\ttry {\n\t\t\treturn JSON.stringify(error)\n\t\t} catch {\n\t\t\treturn fallback\n\t\t}\n\t}\n\treturn fallback\n}\n\nexport function TokenizerSection() {\n\treturn (\n\t\t<section className={toolStyles.tool}>\n\t\t\t<div className={toolStyles.toolTitle}>Tokenizer Playground</div>\n\t\t\t<TokenizerPlayground />\n\t\t</section>\n\t)\n}\n", "import { assert } from \"@framerjs/shared\"\nimport type { SerializableRecord } from \"code-generation/js/SerializableValue.ts\"\nimport { js, jst } from \"code-generation/js/js.ts\"\nimport { SafeJS, serializeJS } from \"code-generation/js/serializeJS.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/index.ts\"\nimport type { WebPageNode } from \"document/models/CanvasTree/nodes/WebPageNode.ts\"\nimport { isCollectionNode, isFrameNode, isRichTextNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { hasStackLayout } from \"document/models/CanvasTree/traits/WithLayout.ts\"\nimport { getHTMLTextContentPreservingNewLinesCached } from \"utils/getHTMLTextContent.ts\"\nimport { join } from \"utils/join.ts\"\nimport { ClassDiscriminator } from \"utils/withClassDiscriminator.ts\"\nimport type { AgentContext } from \"../context/AgentContext.ts\"\nimport { type AIContextNode, transformToAiNode } from \"../context/nodes.ts\"\nimport { createBlock } from \"../fencedBlock.ts\"\nimport { serializeVariablesForAgent } from \"../tools/collectionSchema.ts\"\nimport type { SerializedAgentExample } from \"./types.ts\"\n\nconst serializeBinding = new SafeJS(\"serialize\")\nconst exampleJsonBlockType = \"example-json\"\nconst contextBlockType = \"context\"\n\nfunction isSeparatorNode(node: CanvasNode): boolean {\n\treturn isFrameNode(node) && node.resolveValue(\"name\") === \"Separator\"\n}\n\nfunction isGroupNode(node: CanvasNode): boolean {\n\treturn isFrameNode(node) && hasStackLayout(node) && node.resolveValue(\"name\") === \"Group\"\n}\nconst markdownSeparator = `\n---\n`\n\nexport function withExampleReferences(template: string | SafeJS, references: string): string {\n\treturn join.lines(template, markdownSeparator, \"## Example References\", references)\n}\n\n/** Creates a markdown guide template while preserving visual examples as serialized node references. */\nexport async function createImplementationGuideTemplate(\n\tnode: CanvasNode,\n\thandleNodeExample: (node: CanvasNode) => Promise<string | SafeJS>,\n\tprefix: readonly string[],\n): Promise<string | SafeJS> {\n\tassert(node.children, \"Node must have children\")\n\tconst template: (string | SafeJS)[] = [...prefix]\n\n\tfor (const n of node.children) {\n\t\tif (isRichTextNode(n)) {\n\t\t\tconst htmlWithExplicitLineBreaks = n.getHTMLContent().replace(/<br\\s*\\/?>/giu, \"\\n\")\n\t\t\ttemplate.push(getHTMLTextContentPreservingNewLinesCached(htmlWithExplicitLineBreaks))\n\t\t} else if (isSeparatorNode(n)) {\n\t\t\ttemplate.push(markdownSeparator)\n\t\t} else {\n\t\t\tconst example = await handleNodeExample(n)\n\t\t\ttemplate.push(example)\n\t\t}\n\t}\n\n\treturn jst.join(template, `\\n`)\n}\n\n/** Inlines guide-local Group wrappers while preserving normal node serialization elsewhere. */\nexport async function createImplementationGuideReference(\n\tnode: CanvasNode,\n\thandleNodeExamples: (nodes: readonly CanvasNode[]) => Promise<string | SafeJS>,\n): Promise<string | SafeJS> {\n\tif (!isGroupNode(node) || !node.children) return handleNodeExamples([node])\n\n\tconst template: (string | SafeJS)[] = []\n\tlet pendingExampleNodes: CanvasNode[] = []\n\n\tasync function flushExampleNodes() {\n\t\tif (pendingExampleNodes.length === 0) return\n\t\ttemplate.push(await handleNodeExamples(pendingExampleNodes))\n\t\tpendingExampleNodes = []\n\t}\n\n\tfor (const child of node.children) {\n\t\tpendingExampleNodes.push(child)\n\t}\n\n\tawait flushExampleNodes()\n\n\treturn jst.join(template, `\\n`)\n}\n\nexport function handleSerializedReference(node: CanvasNode): SafeJS {\n\treturn new SafeJS(`await ${SafeJS.fn(serializeBinding, node.id)}`)\n}\n\nexport function wrapInSerializer(template: SafeJS | string) {\n\treturn js`async (${serializeBinding}) => ${template}`\n}\n\nasync function serializeNodeValue(node: CanvasNode, ctx: AgentContext): Promise<AIContextNode> {\n\tconst includeChildren = !isCollectionNode(node)\n\tconst [serialized] = await transformToAiNode([node], ctx, includeChildren, undefined, undefined, {\n\t\tincludeGenericMetadata: false,\n\t})\n\n\tassert(serialized, \"Serialized node must be found\")\n\treturn serialized\n}\n\nexport async function serializeNode(node: CanvasNode, ctx: AgentContext): Promise<string> {\n\treturn createBlock(exampleJsonBlockType, JSON.stringify(await serializeNodeValue(node, ctx)))\n}\n\nexport async function serializeNodes(nodes: readonly CanvasNode[], ctx: AgentContext): Promise<string> {\n\tconst serializedNodes: AIContextNode[] = []\n\tfor (const node of nodes) {\n\t\tserializedNodes.push(await serializeNodeValue(node, ctx))\n\t}\n\n\treturn createBlock(exampleJsonBlockType, JSON.stringify(serializedNodes))\n}\n\nexport async function serializePageVariables(node: WebPageNode, ctx: AgentContext): Promise<string> {\n\tconst tree = ctx.treeStore.getDataTreeOrPartialTree()\n\tconst variables = await serializeVariablesForAgent(tree, node, ctx)\n\treturn createBlock(contextBlockType, JSON.stringify({ type: ClassDiscriminator.WebPageNode, variables }))\n}\n\nexport function serializeImplementationGuideDefinitionModule(example: SerializedAgentExample): string {\n\treturn serializeJS(\n\t\tjs.joinLines(\n\t\t\tjs`const definition = ${{ ...example, template: new SafeJS(example.template) } as unknown as SerializableRecord}`,\n\t\t\tjs`export default definition`,\n\t\t),\n\t)\n}\n", "import { type AnyComponentLoader, setVariantActionControls } from \"@framerjs/framer-runtime\"\nimport { assert, isModuleExportIdentifier, type ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { jst } from \"code-generation/js/js.ts\"\nimport { type SafeJS, serializeJS } from \"code-generation/js/serializeJS.ts\"\nimport type { JSXEngineDependencies } from \"code-generation/jsx/types.ts\"\nimport { CanvasTree } from \"document/models/CanvasTree/CanvasTree.ts\"\nimport {\n\ttype CanvasNode,\n\ttype NodeID,\n\tRootNode,\n\tSmartComponentNode,\n\tWebPageNode,\n} from \"document/models/CanvasTree/index.ts\"\nimport { RouteSegmentRootNode } from \"document/models/CanvasTree/nodes/RouteSegmentRootNode.ts\"\nimport { canvasNodeFromValue } from \"document/models/CanvasTree/nodes/canvasNodeFromValue.ts\"\nimport {\n\tisCodeComponentNode,\n\tisCollectionNode,\n\tisShaderNode,\n\tisSmartComponentNode,\n\tisWebPageNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { getSmartComponentForCodeComponent } from \"document/models/CanvasTree/nodes/utils/smartComponentInstanceHelpers.ts\"\nimport { hasCollectionDataSource } from \"document/models/CanvasTree/traits/WithCollectionDataSource.ts\"\nimport { CustomCursorType, withCursor } from \"document/models/CanvasTree/traits/WithCursor.ts\"\nimport { stylePresetKeys, withStylePresets } from \"document/models/CanvasTree/traits/WithStylePresets.ts\"\nimport { withVariables } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport { HardCodedCodeIdentifier } from \"document/models/CanvasTree/traits/utils/hardCodedCodeComponentIdentifiers.ts\"\nimport { getAncestorProvidingCursorComponent } from \"document/models/CanvasTree/traits/utils/reduceCursor.ts\"\nimport type { TreeStore } from \"document/stores/TreeStore.ts\"\nimport type { VectorsStore } from \"document/stores/VectorsStore.ts\"\nimport type { Rect } from \"library/render/types/Rect.ts\"\nimport { getVariableReferencesFromNode } from \"renderer/utils/getVariableReferencesFromNode.ts\"\nimport { getCollectionIdForIdentifier } from \"utils/getCollectionForIdentifier.ts\"\nimport { isFunction, isString } from \"utils/typeChecks.ts\"\nimport { TreeResolver } from \"../TreeResolver.ts\"\nimport type { AgentContext, AgentContextHooks } from \"../context/AgentContext.ts\"\nimport { Collections } from \"../context/collections.ts\"\nimport { Components } from \"../context/components.ts\"\nimport { DeferredOps } from \"../context/deferred.ts\"\nimport { DynamicValues } from \"../context/dynamicValues.ts\"\nimport { Files } from \"../context/files.ts\"\nimport { VirtualText } from \"../context/richtext/virtualText.ts\"\nimport { Shaders } from \"../context/shaders.ts\"\nimport { StylePresets, isStylePresetNodeClass } from \"../context/stylePresets.ts\"\nimport { Tokens } from \"../context/tokens.ts\"\nimport { createTurnChangeset } from \"../context/turnChangeset.ts\"\nimport { VectorSets } from \"../context/vectors.ts\"\nimport { createMockScheduler, createMockTreeStore } from \"../traits/types.ts\"\nimport {\n\tcreateImplementationGuideReference,\n\tcreateImplementationGuideTemplate,\n\thandleSerializedReference,\n\tserializeImplementationGuideDefinitionModule,\n\tserializeNodes,\n\tserializePageVariables,\n\twithExampleReferences,\n\twrapInSerializer,\n} from \"./createImplementationGuide.ts\"\nimport type { SerializedAgentExample } from \"./types.ts\"\n\ninterface ExtractDependencies extends JSXEngineDependencies {\n\tvectorsStore: VectorsStore\n\ttreeStore: TreeStore\n}\n\nfunction getHardCodedPropertiesForIdentifier(identifier: string) {\n\tswitch (identifier) {\n\t\tcase HardCodedCodeIdentifier.setVariantAction:\n\t\t\treturn setVariantActionControls\n\t\tdefault:\n\t\t\treturn undefined\n\t}\n}\n\nconst noopHooks: AgentContextHooks = {\n\tgetEngine: () => undefined,\n}\n\ntype Writable<T> = {\n\t-readonly [P in keyof T]: T[P]\n}\nfunction createExtractionContext(context: Partial<Writable<AgentContext>>): AgentContext {\n\tcontext.fonts ??= []\n\treturn context as AgentContext\n}\n\nfunction getCursorReferencedSmartComponentId(tree: CanvasTree, node: CanvasNode): NodeID | undefined {\n\tif (!withCursor(node)) return\n\n\tif (isString(node.customCursorSmartComponentId)) {\n\t\treturn tree.getNodeWithTrait(node.customCursorSmartComponentId, isSmartComponentNode)?.id\n\t}\n\n\tif (node.customCursorType !== CustomCursorType.Variant) return\n\n\tconst inheritedCursorComponentId = getAncestorProvidingCursorComponent(tree, node)?.customCursorSmartComponentId\n\tif (!isString(inheritedCursorComponentId)) return\n\n\treturn tree.getNodeWithTrait(inheritedCursorComponentId, isSmartComponentNode)?.id\n}\n\nfunction registerCollectionsForSelection(collections: Collections, selectedNodes: readonly CanvasNode[]) {\n\tfor (const { collectionId } of collections.collectionsForCanvasSelection(selectedNodes)) {\n\t\tcollections.registerVariables(collectionId)\n\t}\n}\n\nfunction registerScopeVariables(dynamicValues: DynamicValues, node: CanvasNode) {\n\tif (!withVariables(node) || isCollectionNode(node)) return\n\n\tdynamicValues.replaceNodeVariables(node)\n}\n\ntype CollectionIdByProviderId = Map<NodeID, NodeID>\n\nfunction getCollectionIdForProvider(\n\ttree: CanvasTree,\n\tproviderId: NodeID,\n\tcollectionIdByProviderId: ReadonlyMap<NodeID, NodeID>,\n): NodeID | undefined {\n\tconst providerNode = tree.get(providerId)\n\tif (providerNode && hasCollectionDataSource(providerNode)) {\n\t\tconst collectionId = getCollectionIdForIdentifier(providerNode.dataIdentifier)\n\t\tif (collectionId) return collectionId\n\t}\n\n\treturn collectionIdByProviderId.get(providerId)\n}\n\nfunction collectReferencedCollections(\n\ttree: CanvasTree,\n\tnode: CanvasNode,\n\tcollectionIdByProviderId: CollectionIdByProviderId,\n): Set<NodeID> {\n\tconst referencedCollections = new Set<NodeID>()\n\n\tfor (const variableReference of getVariableReferencesFromNode(tree, node)) {\n\t\tif (!variableReference.providerId) continue\n\n\t\tconst providerNode = tree.get(variableReference.providerId)\n\t\tif (providerNode && hasCollectionDataSource(providerNode)) {\n\t\t\tconst collectionId = getCollectionIdForIdentifier(providerNode.dataIdentifier)\n\t\t\tif (collectionId) {\n\t\t\t\tcollectionIdByProviderId.set(providerNode.id, collectionId)\n\t\t\t}\n\t\t}\n\n\t\tconst collectionId = getCollectionIdForProvider(tree, variableReference.providerId, collectionIdByProviderId)\n\t\tif (collectionId) referencedCollections.add(collectionId)\n\t}\n\n\treturn referencedCollections\n}\n\n/**\n * Walks a reference subtree and collects additional nodes that should be serialized alongside it\n * for the example to be self-contained (e.g. local Smart Components, style presets).\n */\nasync function collectReferencedNodes(\n\ttree: CanvasTree,\n\treference: CanvasNode,\n\tcollectionIdByProviderId: CollectionIdByProviderId,\n\tcb?: (node: CanvasNode) => Promise<void>,\n): Promise<CanvasNode[]> {\n\tconst nodes: CanvasNode[] = [reference]\n\tconst referencedSmartComponents = new Set<NodeID>()\n\tconst referencedCollections = new Set<NodeID>()\n\tconst referencedStylePresets = new Set<NodeID>()\n\n\tfunction collectStylePresetIds(node: CanvasNode) {\n\t\tif (!withStylePresets(node)) return\n\t\tfor (const key of stylePresetKeys) {\n\t\t\tconst presetId = node[key]\n\t\t\tif (isString(presetId)) referencedStylePresets.add(presetId)\n\t\t}\n\t}\n\n\tfunction collectCollectionMetadata(node: CanvasNode) {\n\t\tfor (const collectionId of collectReferencedCollections(tree, node, collectionIdByProviderId)) {\n\t\t\treferencedCollections.add(collectionId)\n\t\t}\n\t}\n\n\t// Walk the reference node and collect referenced nodes ids.\n\tfor (const node of reference.walk()) {\n\t\tawait cb?.(node)\n\n\t\tif (isCodeComponentNode(node)) {\n\t\t\tconst smartComponent = getSmartComponentForCodeComponent(tree, node)\n\t\t\tif (smartComponent) referencedSmartComponents.add(smartComponent.id)\n\t\t}\n\n\t\tcollectStylePresetIds(node)\n\n\t\tconst cursorSmartComponentId = getCursorReferencedSmartComponentId(tree, node)\n\t\tif (cursorSmartComponentId) referencedSmartComponents.add(cursorSmartComponentId)\n\t}\n\n\t// Load the referenced smart components and append them after the reference node.\n\tfor (const id of referencedSmartComponents) {\n\t\tconst smartComponent = tree.getNodeWithTrait(id, isSmartComponentNode)\n\t\tif (!smartComponent) continue\n\t\tconst loaded = smartComponent.isLoaded() ? smartComponent : await smartComponent.load()\n\t\tassert(loaded, \"Smart Component must be loaded\")\n\t\tnodes.push(loaded)\n\n\t\t// Also walk the smart component to extract necessary metadata from the tree needed to\n\t\t// serialize the example, and to collect any style presets used within the smart component.\n\t\tfor (const n of loaded.walk()) {\n\t\t\tawait cb?.(n)\n\t\t\tcollectStylePresetIds(n)\n\t\t}\n\n\t\tcollectCollectionMetadata(loaded)\n\t}\n\n\tcollectCollectionMetadata(reference)\n\n\t// Append referenced collections and one collection item so the example shows how collection\n\t// variables map to real row data.\n\tfor (const id of referencedCollections) {\n\t\tconst collectionNode = tree.getNodeWithTrait(id, isCollectionNode)\n\t\tif (!collectionNode) continue\n\n\t\tnodes.push(collectionNode)\n\n\t\tconst firstCollectionItem = collectionNode.getUnsortedChildren()[0]\n\t\tif (firstCollectionItem) {\n\t\t\tnodes.push(firstCollectionItem)\n\t\t}\n\t}\n\n\t// Append referenced style presets.\n\tfor (const id of referencedStylePresets) {\n\t\tconst presetNode = tree.get(id)\n\t\tif (!presetNode || !isStylePresetNodeClass(presetNode.__class)) continue\n\t\tnodes.push(presetNode)\n\t}\n\n\treturn nodes\n}\n\nfunction makeSerialize(\n\ttree: CanvasTree,\n\tctx: AgentContext,\n\tserializeToJS: boolean,\n\tcb: (node: CanvasNode) => Promise<void>,\n\tcollectionIdByProviderId: CollectionIdByProviderId,\n) {\n\tconst nodes: CanvasNode[] = []\n\tconst deferredNodes: CanvasNode[] = []\n\treturn {\n\t\tnodes,\n\t\tdeferredNodes,\n\t\tserialize: async (node: CanvasNode): Promise<string | SafeJS> => {\n\t\t\tasync function serializeReferences(references: readonly CanvasNode[]): Promise<string | SafeJS> {\n\t\t\t\tconst referenceNodes: CanvasNode[] = []\n\t\t\t\tfor (const reference of references) {\n\t\t\t\t\t// **Always** collect all the nodes even if we are serializing to JS because we need to create\n\t\t\t\t\t// a full tree to serialize with at bundle time.\n\t\t\t\t\tconst referencedNodes = await collectReferencedNodes(tree, reference, collectionIdByProviderId, cb)\n\t\t\t\t\tnodes.push(...referencedNodes)\n\n\t\t\t\t\tconst [referenceNode, ...subReferences] = referencedNodes\n\t\t\t\t\tassert(referenceNode, \"Reference node must be found\")\n\t\t\t\t\treferenceNodes.push(referenceNode)\n\n\t\t\t\t\tif (!serializeToJS) deferredNodes.push(...subReferences)\n\t\t\t\t}\n\n\t\t\t\tif (serializeToJS) return jst.join(references.map(handleSerializedReference), `\\n`)\n\t\t\t\treturn serializeNodes(referenceNodes, ctx)\n\t\t\t}\n\n\t\t\tif (serializeToJS) return serializeReferences([node])\n\t\t\treturn createImplementationGuideReference(node, serializeReferences)\n\t\t},\n\t}\n}\n\n/**\n * The one that makes the real guides.\n */\nfunction makeDeserializeSerialize(\n\ttree: CanvasTree,\n\tctx: AgentContext,\n\trects: SerializedAgentExample[\"rects\"],\n\tcollectionIdByProviderId: CollectionIdByProviderId,\n) {\n\tconst deferredNodes: CanvasNode[] = []\n\n\treturn {\n\t\tdeferredNodes,\n\t\tserialize: async (node: CanvasNode): Promise<string> => {\n\t\t\tasync function serializeReferences(references: readonly CanvasNode[]): Promise<string> {\n\t\t\t\tconst referenceNodes: CanvasNode[] = []\n\t\t\t\tfor (const reference of references) {\n\t\t\t\t\t// Expand the example to include any referenced nodes, also hydrating rects.\n\t\t\t\t\tconst subtreeNodes = await collectReferencedNodes(\n\t\t\t\t\t\ttree,\n\t\t\t\t\t\treference,\n\t\t\t\t\t\tcollectionIdByProviderId,\n\t\t\t\t\t\tasync referencedNode => {\n\t\t\t\t\t\t\tconst originalId = referencedNode.originalid ?? referencedNode.id\n\t\t\t\t\t\t\tconst rect = rects[referencedNode.id] ?? rects[originalId]\n\t\t\t\t\t\t\tif (rect) referencedNode.cache.setRawDOMRect(referencedNode.id, rect)\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\tconst [referenceNode, ...subReferences] = subtreeNodes\n\t\t\t\t\tassert(referenceNode, \"Reference node must be found\")\n\t\t\t\t\treferenceNodes.push(referenceNode)\n\t\t\t\t\tdeferredNodes.push(...subReferences)\n\t\t\t\t}\n\n\t\t\t\treturn serializeNodes(referenceNodes, ctx)\n\t\t\t}\n\n\t\t\t// The deserialize path only produces strings (no SafeJS), safe to narrow.\n\t\t\treturn createImplementationGuideReference(node, serializeReferences) as Promise<string>\n\t\t},\n\t}\n}\n\n/**\n * Serializes raw agent example from canvas selection.\n * @param serializeToJS - Whether to serialize the example template to a fn string for serialization\n * to fs.\n */\nexport async function serializeAgentExampleFromSelection(\n\tnode: CanvasNode,\n\tdependencies: ExtractDependencies,\n\tprojectId: string,\n\tserializeToJS: boolean = false,\n): Promise<SerializedAgentExample> {\n\tconst { treeStore, modulesStore, vectorsStore, componentLoader } = dependencies\n\tconst tree = treeStore.tree\n\n\tconst scopeNode = WebPageNode.getFor(tree, node) ?? SmartComponentNode.getFor(tree, node)\n\tassert(scopeNode, \"Selected nodes must be within a WebPage | SmartComponent\")\n\tassert(scopeNode.isLoaded(), \"Scope node must be loaded\")\n\n\tconst dynamicValues = new DynamicValues()\n\tconst virtualText = new VirtualText()\n\tconst collections = new Collections(treeStore, componentLoader, dynamicValues)\n\tconst treeResolver = new TreeResolver(treeStore, scopeNode, componentLoader, collections, virtualText)\n\tdynamicValues.setTreeResolver(treeResolver)\n\tconst vectorSets = await VectorSets.fromTree(treeStore, modulesStore, vectorsStore, componentLoader)\n\tconst deferred = new DeferredOps()\n\tconst components = new Components(treeResolver, treeStore, vectorSets, deferred, componentLoader, modulesStore)\n\tconst shaders = await Shaders.fromTree(treeStore.tree, modulesStore, componentLoader)\n\tconst tokens = Tokens.fromTree(treeStore)\n\tconst stylePresets = new StylePresets()\n\tconst scheduler = createMockScheduler()\n\tconst turnChangeset = createTurnChangeset()\n\tconst files = new Files(treeStore, scheduler, new Map(), turnChangeset.getTurnChangeset)\n\n\tconst ctx = createExtractionContext({\n\t\ttreeStore,\n\t\tvectorSets,\n\t\tcollections,\n\t\tcomponents,\n\t\tcomponentLoader,\n\t\ttokens,\n\t\tshaders,\n\t\tstylePresets,\n\t\tfiles,\n\t\tdeferred,\n\t\tdynamicValues,\n\t\ttreeResolver,\n\t\tvirtualText,\n\t\thooks: noopHooks,\n\t})\n\n\tawait stylePresets.init(ctx)\n\n\tregisterScopeVariables(dynamicValues, scopeNode)\n\n\tregisterCollectionsForSelection(collections, Array.from(node.walk()))\n\n\tconst rects: Record<NodeID, Rect> = {}\n\n\t// Variable references may be provided by a WebPageNode as the provider. We store a mapping of\n\t// just the collectionId by providerId to avoid having to serialize the entire WebPageNode In\n\t// the guide's definition module.\n\tconst collectionIdByProviderId: CollectionIdByProviderId = new Map()\n\n\tconst { nodes, deferredNodes, serialize } = makeSerialize(\n\t\ttree,\n\t\tctx,\n\t\tserializeToJS,\n\t\tasync child => {\n\t\t\trects[child.id] = tree.getRect(child, false, true)\n\t\t\tregisterScopeVariables(dynamicValues, child)\n\n\t\t\tif (isShaderNode(child)) {\n\t\t\t\tawait shaders.async.forIdentifier(child.shaderModuleIdentifier)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (!isCodeComponentNode(child) || !isModuleExportIdentifier(child.codeComponentIdentifier)) return\n\n\t\t\tif (child.isVectorInstance) {\n\t\t\t\t// Load only vectors that are in the selection into the context, optionally waiting for them to\n\t\t\t\t// be evaluated.\n\t\t\t\tawait vectorSets.async.forInstanceIdentifier(child.codeComponentIdentifier)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Load only components that are in the selection into the context.\n\t\t\tawait components.async.forIdentifier(child.codeComponentIdentifier)\n\t\t},\n\t\tcollectionIdByProviderId,\n\t)\n\n\tconst templatePrefix: string[] = []\n\n\tif (isWebPageNode(scopeNode) && scopeNode.variables.length > 0) {\n\t\ttemplatePrefix.push(await serializePageVariables(scopeNode, ctx))\n\t}\n\n\tconst rawTemplate = await createImplementationGuideTemplate(node, serialize, templatePrefix)\n\n\t// For the non-JS path, append deduplicated references at the end of the template.\n\tlet template: string | SafeJS\n\tif (serializeToJS) {\n\t\ttemplate = serializeJS(wrapInSerializer(rawTemplate))\n\t} else {\n\t\tconst uniqueNodeIds = new Set<NodeID>()\n\t\tconst serializedReferences: CanvasNode[] = []\n\t\tfor (const deferredNode of deferredNodes) {\n\t\t\tif (uniqueNodeIds.has(deferredNode.id)) continue\n\t\t\tuniqueNodeIds.add(deferredNode.id)\n\t\t\tserializedReferences.push(deferredNode)\n\t\t}\n\t\ttemplate =\n\t\t\tserializedReferences.length > 0\n\t\t\t\t? withExampleReferences(rawTemplate, await serializeNodes(serializedReferences, ctx))\n\t\t\t\t: rawTemplate\n\t}\n\n\tregisterCollectionsForSelection(\n\t\tcollections,\n\t\tnodes.flatMap(reference => Array.from(reference.walk())),\n\t)\n\n\tconst name = node.resolveValue(\"name\")\n\tassert(name, \"Node must have a name\")\n\n\treturn {\n\t\tid: node.id,\n\t\tname,\n\t\tcontext: {\n\t\t\ttokens: tokens.toJSON(),\n\t\t\tvectorSets: vectorSets.toJSON(),\n\t\t\tcomponents: components.toJSON(),\n\t\t\tshaders: shaders.toJSON(),\n\t\t\tstylePresets: stylePresets.toExampleJSON(),\n\t\t\tvariables: dynamicValues.toJSON(),\n\t\t\tcollectionIdByProviderId: Object.fromEntries(collectionIdByProviderId),\n\t\t},\n\t\trects,\n\t\tnodes: nodes.map(n => n.toJS()),\n\t\ttemplate,\n\t\tprojectId,\n\t}\n}\n\nasync function formatExampleDefinitionModule(content: string): Promise<string> {\n\tconst [{ format }, babel, estree, typescript] = await Promise.all([\n\t\timport(\"prettier/standalone\"),\n\t\timport(\"prettier/plugins/babel\"),\n\t\timport(\"prettier/plugins/estree\"),\n\t\timport(\"prettier/plugins/typescript\"),\n\t])\n\n\treturn format(content, {\n\t\tparser: \"typescript\",\n\t\tplugins: [typescript.default ?? typescript, babel.default ?? babel, estree.default ?? estree],\n\t\ttabWidth: 2,\n\t\tsemi: false,\n\t\ttrailingComma: \"es5\",\n\t})\n}\n\n/** Download local examples as individual definition modules. Returns example count. */\nexport async function downloadAllExamples(\n\texampleIds: NodeID[],\n\tdependencies: ExtractDependencies,\n\tprojectId: string,\n): Promise<void> {\n\tconst { downloadContent } = await import(\"web/lib/downloadFile.ts\")\n\n\tfor (const id of exampleIds) {\n\t\tconst node = dependencies.tree.get(id)\n\t\tassert(node, \"Node must be found\")\n\t\tconst downloadableExample = await serializeAgentExampleFromSelection(node, dependencies, projectId, true)\n\t\tconst file = await formatExampleDefinitionModule(serializeImplementationGuideDefinitionModule(downloadableExample))\n\t\tdownloadContent(file, `${downloadableExample.name}.js`, {\n\t\t\ttype: \"text/javascript\",\n\t\t})\n\t}\n}\n\n/**\n * Converts raw recipe to agent-consumable recipe.\n * Must be able to run at bundle time!\n */\nexport async function deserializeNodeAgentExample(rawRecipe: SerializedAgentExample): Promise<string> {\n\tconst { context, nodes, template, rects } = rawRecipe\n\tassert(isFunction(template), \"Template must be a function\")\n\tassert(context.variables, \"Serialized example context is missing variables. Re-export the example guide.\")\n\n\tconst root = new RootNode({ id: \"agent-example-root\" })\n\troot.addChild(new RouteSegmentRootNode())\n\tconst tree = CanvasTree.createByAdoptingRoot(root)\n\tfor (const rawNode of nodes) {\n\t\tconst node = canvasNodeFromValue(rawNode)\n\t\tif (!node || tree.has(node.id)) continue\n\t\ttree.insertNode(node)\n\t}\n\n\tconst treeStore = createMockTreeStore(tree)\n\tconst deferred = new DeferredOps()\n\n\tconst temporaryScope = new WebPageNode()\n\tassert(temporaryScope.isLoaded(), \"Temporary scope must be loaded\")\n\n\tconst tokens = Tokens.fromJSON(treeStore, context.tokens)\n\tconst vectorSets = VectorSets.fromJSON(context.vectorSets)\n\tconst virtualText = new VirtualText()\n\n\t// Create a minimal component loader for TemplateHelper\n\tconst getComponentInfo = (identifier: ModuleExportIdentifierString) => {\n\t\tconst properties =\n\t\t\tvectorSets.getPropertiesForIdentifier(identifier) ??\n\t\t\tcomponents.getPropertiesForIdentifier(identifier) ??\n\t\t\tgetHardCodedPropertiesForIdentifier(identifier)\n\t\tif (!properties) return undefined\n\n\t\treturn { name: components.getDisplayName(identifier) ?? identifier, properties }\n\t}\n\n\tconst componentLoader = {\n\t\tcomponentForIdentifier: getComponentInfo,\n\t\treactComponentForIdentifier: getComponentInfo,\n\t} as AnyComponentLoader\n\n\tconst dynamicValues = DynamicValues.fromJSON(context.variables)\n\tconst collections = new Collections(treeStore, componentLoader, dynamicValues)\n\tconst treeResolver = new TreeResolver(treeStore, temporaryScope, componentLoader, collections, virtualText)\n\tdynamicValues.setTreeResolver(treeResolver)\n\tconst components = Components.fromJSON(context.components, treeResolver, treeStore, vectorSets, deferred)\n\tconst shaders = Shaders.fromJSON(context.shaders ?? [])\n\tconst stylePresets = StylePresets.fromJSON(context.stylePresets ?? [])\n\tconst turnChangeset = createTurnChangeset()\n\tconst files = new Files(treeStore, createMockScheduler(), new Map(), turnChangeset.getTurnChangeset)\n\tconst collectionIdByProviderId: CollectionIdByProviderId = new Map(\n\t\tObject.entries(context.collectionIdByProviderId ?? {}),\n\t)\n\n\tconst ctx = createExtractionContext({\n\t\ttreeStore,\n\t\tvectorSets,\n\t\tcollections,\n\t\tcomponents,\n\t\tcomponentLoader,\n\t\ttokens,\n\t\tshaders,\n\t\tstylePresets,\n\t\tfiles,\n\t\tdeferred,\n\t\tdynamicValues,\n\t\ttreeResolver,\n\t\thooks: noopHooks,\n\t\tvirtualText,\n\t})\n\n\tconst { deferredNodes, serialize } = makeDeserializeSerialize(tree, ctx, rects, collectionIdByProviderId)\n\tconst result = await template(async id => {\n\t\tconst reference = tree.get(id)\n\t\tassert(reference, \"Node must be found\")\n\t\t// We are using data hydrated from the filesystem - the nodes are loaded.\n\t\tif (isSmartComponentNode(reference)) assert(reference.isLoaded(), \"Smart component must be loaded\")\n\n\t\treturn serialize(reference)\n\t})\n\n\t// Append deduplicated references at the end of the guide.\n\tconst uniqueNodeIds = new Set<NodeID>()\n\tconst serializedReferences: CanvasNode[] = []\n\tfor (const deferredNode of deferredNodes) {\n\t\tif (uniqueNodeIds.has(deferredNode.id)) continue\n\t\tuniqueNodeIds.add(deferredNode.id)\n\t\tserializedReferences.push(deferredNode)\n\t}\n\n\treturn serializedReferences.length > 0\n\t\t? withExampleReferences(result, await serializeNodes(serializedReferences, ctx))\n\t\t: result\n}\n", "import { Button, SegmentedControl, SegmentedControlItem, Spinner, Stack } from \"@framerjs/fresco\"\nimport { assert, getLogger } from \"@framerjs/shared\"\nimport {\n\taddLocalExample,\n\tclearLocalExamples,\n\tclearRemovedBundledExamples,\n\tgetBundledNodeExamples,\n\tgetLocalExampleChanges,\n\tgetRemovedBundledExamples,\n\tgetSerializedLocalExamples,\n\tinitExamplesCache,\n\tisLocalModeEnabled,\n\tremoveLocalExample,\n\tsetLocalModeEnabled,\n\tsetRemovedBundledExample,\n} from \"app/ai/agents/examples/exampleLoader.ts\"\nimport { downloadAllExamples, serializeAgentExampleFromSelection } from \"app/ai/agents/examples/extraction.ts\"\nimport type { LocalExamplesChangeSet } from \"app/ai/agents/examples/localExamplesState.ts\"\nimport type { SerializedAgentExample } from \"app/ai/agents/examples/types.ts\"\nimport type { OpenRouterFeatureStepTraceConfig } from \"app/ai/tracing/openRouterTrace.ts\"\nimport { waitForMeasuredRectWithTimeout } from \"document/components/utils/isWaitingForMeasuredRect.ts\"\nimport engine from \"document/engine.ts\"\nimport { type NodeID, randomID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport { ModalType } from \"document/utils/ModalType.ts\"\nimport React from \"react\"\nimport { useConstant } from \"utils/useConstant.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport * as styles from \"./AgentExamples.styles.ts\"\nimport { ExampleRow } from \"./ExamplesRow.tsx\"\nimport { extractSerializedExample, getProcessableExamples, sortByLastUsed } from \"./exampleProcessing.ts\"\nimport { getReplacedBundledExampleNames } from \"./exampleVisibility.ts\"\nimport { IconDownload } from \"./icons.tsx\"\nimport { useExampleContextFromActiveChatHistory } from \"./useExampleContextFromActiveChatHistory.ts\"\n\nconst log = getLogger(\"app:debugbar:agent:examples\")\n\nexport function AgentExamples() {\n\tconst [isLoadingAdd, setIsLoadingAdd] = React.useState(false)\n\tconst [isLoadingRegenerate, setIsLoadingRegenerate] = React.useState(false)\n\tconst [useLocalMode, setUseLocalMode] = React.useState(isLocalModeEnabled)\n\tconst [localExamples, setLocalExamples] = React.useState<SerializedAgentExample[]>([])\n\tconst [localExampleChanges, setLocalExampleChanges] = React.useState<LocalExamplesChangeSet>({\n\t\tadded: [],\n\t\tmodified: [],\n\t\tdeleted: [],\n\t})\n\tconst [removedBundledExamples, setRemovedBundledExamples] = React.useState<Set<string>>(() => new Set())\n\n\tconst traceSessionId = useConstant(() => randomID())\n\tconst traceConfig = React.useMemo<OpenRouterFeatureStepTraceConfig>(\n\t\t() => ({ featureName: \"agent-examples\", sessionId: traceSessionId }),\n\t\t[],\n\t)\n\n\tconst { nodeExampleStatusByName } = useExampleContextFromActiveChatHistory()\n\n\tconst bundledExamples = getBundledNodeExamples()\n\n\tconst isLoading = isLoadingAdd || isLoadingRegenerate\n\n\t/** Helper to update local examples state */\n\tconst updateLocalExamples = React.useCallback((examples: SerializedAgentExample[]) => {\n\t\tsetLocalExamples(examples)\n\t}, [])\n\n\tconst refreshLocalExamples = React.useCallback(async () => {\n\t\tconst serialized = await getSerializedLocalExamples()\n\t\tupdateLocalExamples(serialized)\n\t\tsetLocalExampleChanges(getLocalExampleChanges())\n\t\tsetRemovedBundledExamples(getRemovedBundledExamples())\n\t}, [updateLocalExamples])\n\n\tReact.useEffect(() => {\n\t\tvoid initExamplesCache().then(refreshLocalExamples)\n\t}, [refreshLocalExamples])\n\n\tfunction handleToggleLocalMode(enabled: boolean) {\n\t\tsetLocalModeEnabled(enabled)\n\t\tsetUseLocalMode(enabled)\n\t\tif (!enabled) return\n\t\tvoid refreshLocalExamples()\n\t}\n\n\tasync function handleExtractAndAddLocal() {\n\t\tsetIsLoadingAdd(true)\n\t\ttry {\n\t\t\tconst serialized = await extractSerializedExample(false)\n\t\t\tassert(serialized, \"Serialized example must be found\")\n\t\t\tawait addLocalExample(serialized)\n\t\t\tawait refreshLocalExamples()\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"success\",\n\t\t\t\ttext: `Added local example: ${serialized.name.slice(0, 50)}...`,\n\t\t\t\tkey: \"agent-example\",\n\t\t\t\tduration: 5000,\n\t\t\t})\n\t\t} finally {\n\t\t\tsetIsLoadingAdd(false)\n\t\t}\n\t}\n\n\tconst handleRemoveLocalExample = React.useCallback(\n\t\tasync (name: string) => {\n\t\t\tawait removeLocalExample(name)\n\t\t\tawait refreshLocalExamples()\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"info\",\n\t\t\t\ttext: `Removed local example`,\n\t\t\t\tkey: \"agent-example\",\n\t\t\t\tduration: 3000,\n\t\t\t})\n\t\t},\n\t\t[refreshLocalExamples],\n\t)\n\n\tconst handleRemoveBundledExample = React.useCallback((name: string) => {\n\t\t// Optimistically update UI\n\t\tsetRemovedBundledExamples(prev => new Set([...prev, name]))\n\t\t// Persist to IndexedDB in background\n\t\tvoid setRemovedBundledExample(name, true)\n\t}, [])\n\n\tconst handleRestoreBundledExample = React.useCallback((name: string) => {\n\t\t// Optimistically update UI\n\t\tsetRemovedBundledExamples(prev => {\n\t\t\tconst next = new Set(prev)\n\t\t\tnext.delete(name)\n\t\t\treturn next\n\t\t})\n\t\t// Persist to IndexedDB in background\n\t\tvoid setRemovedBundledExample(name, false)\n\t}, [])\n\n\tfunction handleResetWithConfirmation() {\n\t\tconst localCount = localExamples.length\n\t\tconst removedBundledCount = removedBundledExamples.size\n\n\t\tif (localCount === 0 && removedBundledCount === 0) {\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"info\",\n\t\t\t\ttext: \"Nothing to reset\",\n\t\t\t\tkey: \"agent-example\",\n\t\t\t\tduration: 3000,\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\tconst details: string[] = []\n\t\tif (localCount > 0) {\n\t\t\tdetails.push(`${localCount} local example(s) will be removed`)\n\t\t}\n\t\tif (removedBundledCount > 0) {\n\t\t\tdetails.push(`${removedBundledCount} removed bundled example(s) will be restored`)\n\t\t}\n\n\t\tengine.stores.modalStore.set({\n\t\t\ttype: ModalType.Confirmation,\n\t\t\tsource: \"settings\",\n\t\t\ttitle: \"Reset Examples\",\n\t\t\tdescription: details.join(\". \") + \".\",\n\t\t\tconfirmLabel: \"Reset\",\n\t\t\tvariant: \"destructive\",\n\t\t\tonConfirm: handleReset,\n\t\t})\n\t}\n\n\tasync function handleReset() {\n\t\tawait clearLocalExamples()\n\t\tawait clearRemovedBundledExamples()\n\t\tupdateLocalExamples([])\n\t\tsetRemovedBundledExamples(new Set())\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"info\",\n\t\t\ttext: \"Reset to bundled examples\",\n\t\t\tkey: \"agent-example\",\n\t\t\tduration: 3000,\n\t\t})\n\t}\n\n\tasync function handleDownloadAllExamples() {\n\t\tawait downloadAllExamples(\n\t\t\tlocalExamples.map(e => e.id),\n\t\t\t{\n\t\t\t\tcomponentLoader: engine.componentLoader,\n\t\t\t\tmodulesStore: engine.stores.modulesStore,\n\t\t\t\ttreeStore: engine.stores.treeStore,\n\t\t\t\ttree: engine.stores.treeStore.tree,\n\t\t\t\tengineChanges: engine.scheduler.changes,\n\t\t\t\tassetMap: engine.stores.assetStore.assetMap,\n\t\t\t\tvectorsStore: engine.stores.vectorsStore,\n\t\t\t},\n\t\t\tengine.stores.projectStore.projectId,\n\t\t)\n\t}\n\n\tinterface RegenerationPreview {\n\t\tbundledNames: string[]\n\t\tlocalNames: string[]\n\t\tskippedNames: string[]\n\t}\n\n\tasync function calculateRegenerationPreview(): Promise<RegenerationPreview> {\n\t\tconst currentProjectId = engine.stores.projectStore.projectId\n\t\tconst { processable, skipped } = await getProcessableExamples(bundledExamples, currentProjectId)\n\n\t\tconst bundledNames = processable.filter(e => e.source === \"bundled\").map(e => e.name)\n\t\tconst localNames = processable.filter(e => e.source === \"local\").map(e => e.name)\n\n\t\treturn { bundledNames, localNames, skippedNames: skipped }\n\t}\n\n\tasync function handleRegenerateAllWithConfirmation() {\n\t\tconst preview = await calculateRegenerationPreview()\n\t\tconst totalCount = preview.bundledNames.length + preview.localNames.length\n\n\t\tif (totalCount === 0) {\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"info\",\n\t\t\t\ttext: \"No examples to regenerate in this project\",\n\t\t\t\tkey: \"agent-example\",\n\t\t\t\tduration: 3000,\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\tconst allNames = [...preview.bundledNames, ...preview.localNames]\n\t\tconst hasLocalOverwrites = preview.localNames.length > 0\n\t\tconst hasSkipped = preview.skippedNames.length > 0\n\n\t\tconst description = (\n\t\t\t<div style={{ textAlign: \"left\" }}>\n\t\t\t\t{hasSkipped && (\n\t\t\t\t\t<p style={{ margin: 0, marginBottom: 12 }}>\n\t\t\t\t\t\t<strong>{preview.skippedNames.length} example(s)</strong> skipped (not in this project):\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t{preview.skippedNames.join(\", \")}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t\t<p style={{ margin: 0, marginBottom: hasLocalOverwrites ? 12 : 0 }}>\n\t\t\t\t\t<strong>{totalCount} example(s)</strong> will be regenerated:\n\t\t\t\t\t<br />\n\t\t\t\t\t{allNames.join(\", \")}\n\t\t\t\t</p>\n\t\t\t\t{hasLocalOverwrites && (\n\t\t\t\t\t<p style={{ margin: 0, color: \"#f59e0b\" }}>\n\t\t\t\t\t\t<strong>{preview.localNames.length} local example(s)</strong> will be overwritten:\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t{preview.localNames.join(\", \")}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t)\n\n\t\tengine.stores.modalStore.set({\n\t\t\ttype: ModalType.Confirmation,\n\t\t\tsource: \"settings\",\n\t\t\ttitle: \"Regenerate All Examples\",\n\t\t\tdescription,\n\t\t\tconfirmLabel: \"Regenerate\",\n\t\t\tonConfirm: handleRegenerateAll,\n\t\t})\n\t}\n\n\tasync function handleRegenerateAll() {\n\t\tsetIsLoadingRegenerate(true)\n\t\ttry {\n\t\t\tconst currentProjectId = engine.stores.projectStore.projectId\n\t\t\tlet updatedCount = 0\n\n\t\t\tconst deps = {\n\t\t\t\tcomponentLoader: engine.componentLoader,\n\t\t\t\tmodulesStore: engine.stores.modulesStore,\n\t\t\t\ttreeStore: engine.stores.treeStore,\n\t\t\t\ttree: engine.stores.treeStore.tree,\n\t\t\t\tengineChanges: engine.scheduler.changes,\n\t\t\t\tassetMap: engine.stores.assetStore.assetMap,\n\t\t\t\tvectorsStore: engine.stores.vectorsStore,\n\t\t\t}\n\n\t\t\tconst { processable } = await getProcessableExamples(bundledExamples, currentProjectId)\n\n\t\t\t// Track processed selection keys for handling local duplicates\n\t\t\tconst processedSelectionKeys = new Set<string>()\n\n\t\t\t// Fetch local examples to identify duplicates that need removal\n\t\t\tconst localSerialized = await getSerializedLocalExamples()\n\n\t\t\t// Process all examples\n\t\t\tfor (const { name, id, source } of processable) {\n\t\t\t\t// Get actual nodes\n\t\t\t\tconst node = engine.tree.get(id)\n\t\t\t\tif (!node) continue\n\n\t\t\t\ttry {\n\t\t\t\t\t// Navigate to the scope containing the nodes so rects are computed correctly\n\t\t\t\t\tconst scopeNode = engine.tree.getScopeNodeFor(node)\n\t\t\t\t\tif (scopeNode) {\n\t\t\t\t\t\tassert(scopeNode.isLoaded(), \"Scope node must be loaded\")\n\t\t\t\t\t\t// Switch to the scope so rects are computed from the active render tree\n\t\t\t\t\t\tengine.stores.scopeStore.select(scopeNode.id, { keepHistory: false })\n\t\t\t\t\t\t// Wait for node rects to be measured\n\t\t\t\t\t\tawait waitForMeasuredRectWithTimeout(engine, [node])\n\t\t\t\t\t}\n\n\t\t\t\t\tif (source === \"bundled\") {\n\t\t\t\t\t\tconst serialized = await serializeAgentExampleFromSelection(node, deps, currentProjectId)\n\n\t\t\t\t\t\t// Bundled examples become explicit \"replace\" operations in local patch state.\n\t\t\t\t\t\tawait addLocalExample(serialized)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Remove old local example first\n\t\t\t\t\t\tawait removeLocalExample(name)\n\n\t\t\t\t\t\t// Create new example with fresh data\n\t\t\t\t\t\tconst serialized = await serializeAgentExampleFromSelection(node, deps, currentProjectId)\n\t\t\t\t\t\tawait addLocalExample(serialized)\n\t\t\t\t\t}\n\t\t\t\t\tprocessedSelectionKeys.add(node.id)\n\t\t\t\t\tupdatedCount++\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlog.error(`Failed to regenerate ${source} example \"${name}\":`, error)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove local duplicates that weren't processed (they share ids with bundled examples)\n\t\t\tfor (const example of localSerialized) {\n\t\t\t\tconst name = example.name\n\t\t\t\tconst node = engine.tree.get(example.id)\n\t\t\t\tif (!node) continue\n\n\t\t\t\t// If this selection key was already processed by a bundled example, remove the local duplicate\n\t\t\t\tif (processedSelectionKeys.has(node.id) && !processable.some(p => p.source === \"local\" && p.name === name)) {\n\t\t\t\t\tawait removeLocalExample(name)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Refresh local examples state\n\t\t\tawait refreshLocalExamples()\n\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"success\",\n\t\t\t\ttext: `Regenerated ${updatedCount} example(s)`,\n\t\t\t\tkey: \"agent-example\",\n\t\t\t\tduration: 3000,\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Unknown error\"\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"error\",\n\t\t\t\ttext: `Failed to regenerate: ${message}`,\n\t\t\t\tkey: \"agent-example\",\n\t\t\t\tduration: 5000,\n\t\t\t})\n\t\t\tlog.error(\"Regenerate all failed:\", error)\n\t\t} finally {\n\t\t\tsetIsLoadingRegenerate(false)\n\t\t}\n\t}\n\n\tconst examplesInContext = React.useMemo(() => new Set([...nodeExampleStatusByName.keys()]), [nodeExampleStatusByName])\n\tconst localExampleNames = React.useMemo(() => new Set(localExamples.map(e => e.name)), [localExamples])\n\tconst addedLocalExampleIds = React.useMemo(() => new Set(localExampleChanges.added), [localExampleChanges])\n\tconst modifiedLocalExampleIds = React.useMemo(() => new Set(localExampleChanges.modified), [localExampleChanges])\n\n\t// Sort examples: last-used first, then preserve original order\n\tconst sortedBundledExamples = React.useMemo(\n\t\t() => Object.values(bundledExamples).sort((a, b) => sortByLastUsed(a.name, b.name, examplesInContext)),\n\t\t[bundledExamples, examplesInContext],\n\t)\n\n\tconst sortedLocalExamples = React.useMemo(\n\t\t() => [...localExamples].sort((a, b) => sortByLastUsed(a.name, b.name, examplesInContext)),\n\t\t[localExamples, examplesInContext],\n\t)\n\n\tconst replacedBundledExampleNames = React.useMemo(\n\t\t() => getReplacedBundledExampleNames(bundledExamples, localExamples, modifiedLocalExampleIds),\n\t\t[bundledExamples, localExamples, modifiedLocalExampleIds],\n\t)\n\n\tconst visibleBundledExamples = React.useMemo(() => {\n\t\tif (!useLocalMode) return sortedBundledExamples\n\t\treturn sortedBundledExamples.filter(example => !replacedBundledExampleNames.has(example.name))\n\t}, [replacedBundledExampleNames, sortedBundledExamples, useLocalMode])\n\n\t// Count active examples (accounting for removed and replaced bundled entries in local mode)\n\tconst bundledExamplesCount = Object.keys(bundledExamples).length\n\tconst localExamplesCount = localExamples.length\n\tconst activeExamplesCount = useLocalMode\n\t\t? bundledExamplesCount + localExamplesCount - replacedBundledExampleNames.size - removedBundledExamples.size\n\t\t: bundledExamplesCount\n\n\tconst agentExampleItems = React.useMemo(() => {\n\t\t// for local mode we want to show all examples\n\t\tif (useLocalMode) {\n\t\t\tconst allExamples = [...sortedLocalExamples, ...visibleBundledExamples]\n\t\t\treturn allExamples.map(example => {\n\t\t\t\tconst isLocalExample = localExampleNames.has(example.name)\n\t\t\t\tconst id = example.id\n\n\t\t\t\treturn (\n\t\t\t\t\t<ExampleRow\n\t\t\t\t\t\tkey={example.name}\n\t\t\t\t\t\tname={example.name}\n\t\t\t\t\t\texampleStatus={nodeExampleStatusByName.get(example.name)}\n\t\t\t\t\t\tlocalExampleStatus={getExampleStatus(isLocalExample, addedLocalExampleIds, modifiedLocalExampleIds, id)}\n\t\t\t\t\t\tisRemoved={!isLocalExample && removedBundledExamples.has(example.name)}\n\t\t\t\t\t\tisLocalExample={isLocalExample}\n\t\t\t\t\t\texamplesSource=\"local\"\n\t\t\t\t\t\tonRemove={() =>\n\t\t\t\t\t\t\tisLocalExample ? handleRemoveLocalExample(example.name) : handleRemoveBundledExample(example.name)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonRestore={() => handleRestoreBundledExample(example.name)}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t})\n\t\t}\n\n\t\treturn visibleBundledExamples.map(example => (\n\t\t\t<ExampleRow\n\t\t\t\tkey={example.name}\n\t\t\t\tname={example.name}\n\t\t\t\texamplesSource=\"bundle\"\n\t\t\t\texampleStatus={nodeExampleStatusByName.get(example.name)}\n\t\t\t/>\n\t\t))\n\t}, [\n\t\tuseLocalMode,\n\t\tsortedLocalExamples,\n\t\tvisibleBundledExamples,\n\t\tlocalExampleNames,\n\t\tnodeExampleStatusByName,\n\t\taddedLocalExampleIds,\n\t\tmodifiedLocalExampleIds,\n\t\tremovedBundledExamples,\n\t\thandleRemoveLocalExample,\n\t\thandleRemoveBundledExample,\n\t\thandleRestoreBundledExample,\n\t])\n\n\treturn (\n\t\t<div className={styles.splitContainer} style={{ height: \"100%\" }}>\n\t\t\t<Stack direction=\"column\" gap={8} padding={12} className={styles.examplesContainer}>\n\t\t\t\t{/* Header Row */}\n\t\t\t\t<Stack direction=\"row\" gap={12} alignItems=\"center\">\n\t\t\t\t\t<div className={styles.examplesTitle}>Guides ({activeExamplesCount})</div>\n\t\t\t\t\t{useLocalMode && (\n\t\t\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={handleDownloadAllExamples}\n\t\t\t\t\t\t\t\tenabled={!isLoading}\n\t\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\t\ttitle=\"Download all examples\"\n\t\t\t\t\t\t\t\tstyle={{ width: 24, minWidth: 24, padding: 0 }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconDownload />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button onClick={handleRegenerateAllWithConfirmation} enabled={!isLoading} small>\n\t\t\t\t\t\t\t\t{isLoadingRegenerate ? (\n\t\t\t\t\t\t\t\t\t<span className={styles.spinnerWrapper}>\n\t\t\t\t\t\t\t\t\t\t<Spinner size=\"normal\" inline />\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\"Regenerate All\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t<div style={{ flex: 1 }} />\n\t\t\t\t\t<div className={styles.sourceLabel}>Source</div>\n\t\t\t\t\t<SegmentedControl style={{ width: 120 }}>\n\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\ttitle=\"Bundle\"\n\t\t\t\t\t\t\tselected={!useLocalMode}\n\t\t\t\t\t\t\tonSelect={() => handleToggleLocalMode(false)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<SegmentedControlItem title=\"Local\" selected={useLocalMode} onSelect={() => handleToggleLocalMode(true)} />\n\t\t\t\t\t</SegmentedControl>\n\t\t\t\t</Stack>\n\n\t\t\t\t{/* Actions Row - only shown in Local mode */}\n\t\t\t\t{useLocalMode && (\n\t\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\" justifyContent=\"space-between\">\n\t\t\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t\t\t<div className={styles.sourceLabel}>New example</div>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={handleExtractAndAddLocal}\n\t\t\t\t\t\t\t\tenabled={!isLoading}\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\t\tstyle={{ minWidth: 60 }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isLoadingAdd ? (\n\t\t\t\t\t\t\t\t\t<span className={styles.spinnerWrapper}>\n\t\t\t\t\t\t\t\t\t\t<Spinner size=\"normal\" inline />\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\"Add\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Stack direction=\"row\" gap={8} alignItems=\"center\">\n\t\t\t\t\t\t\t<Button onClick={handleResetWithConfirmation} enabled={!isLoading} variant=\"destructive\" small>\n\t\t\t\t\t\t\t\tReset\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t<Stack direction=\"column\" gap={0} className={styles.examplesList}>\n\t\t\t\t\t{agentExampleItems}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</div>\n\t)\n}\n\nfunction getExampleStatus(\n\tisLocalExample: boolean,\n\taddedLocalExampleIds: Set<NodeID>,\n\tmodifiedLocalExampleIds: Set<NodeID>,\n\tid: NodeID,\n): \"new\" | \"modified\" | undefined {\n\tif (!isLocalExample) return\n\tif (addedLocalExampleIds.has(id)) return \"new\"\n\tif (modifiedLocalExampleIds.has(id)) return \"modified\"\n\treturn undefined\n}\n", "import \"AgentExamples.styles_1rz28ao.wyw.css\"; import { cx } from \"@linaria/core\";\nexport const examplesContainer = \"examplesContainer_eiq7amw\";\nexport const examplesTitle = \"examplesTitle_e1sgjx7j\";\nexport const sourceLabel = \"sourceLabel_s1l7bsfs\";\nexport const spinnerWrapper = \"spinnerWrapper_s1v47zhu\";\nexport const examplesList = \"examplesList_e20bm3i\";\nexport const exampleRowContainer = \"exampleRowContainer_ec0yx7s\";\nexport const exampleRowHeader = \"exampleRowHeader_eriucdl\";\nexport const exampleRowToggle = \"exampleRowToggle_e1ff8rsu\";\nexport const expandIndicator = \"expandIndicator_e1nnfynf\";\nexport const exampleInfo = \"exampleInfo_epfswsa\";\nconst exampleNameContainer = \"exampleNameContainer_e1v0fuyc\";\nexport const exampleName = cx(exampleNameContainer, \"exampleName_e17zofsu\");\nexport const exampleNameRemoved = cx(exampleNameContainer, \"exampleNameRemoved_ekz8g73\");\nexport const exampleNameText = cx(\"exampleNameText_e1938f69\");\nexport const exampleNameLink = cx(\"exampleNameLink_epq1rin\");\nexport const exampleTags = \"exampleTags_e1h561bi\";\nexport const lastUsedBadge = \"lastUsedBadge_lrvmtxj\";\nexport const unloadedBadge = \"unloadedBadge_u1ejv3u1\";\nexport const statusPillModified = \"statusPillModified_sun09dx\";\nexport const statusPillNew = \"statusPillNew_sv9hrlb\";\nexport const typePill = \"typePill_t124fkx3\";\nexport const removeButton = \"removeButton_r1ws5v5n\";\nexport const restoreButton = \"restoreButton_r1firrhd\";\nexport const propertiesContainer = \"propertiesContainer_p3i7cy9\";\nexport const propertiesContainerWithoutToggle = \"propertiesContainerWithoutToggle_p50lovd\";\nexport const propertyRow = \"propertyRow_pq1d5h3\";\nexport const propertyLabel = \"propertyLabel_p1adtzoe\";\nexport const propertyValue = \"propertyValue_pkm0iwf\";\nexport const detailsSection = \"detailsSection_d1p23bdy\";\nexport const detailsSummary = \"detailsSummary_d1d2bvy1\";\nexport const preBlock = \"preBlock_p44viqv\";\nexport const copyButton = \"copyButton_c15uh1ur\";\nexport const splitContainer = \"splitContainer_s1du0vte\";\nexport const nodePanelSize = \"nodePanelSize_n11s8jll\";\nexport const imagePanelSize = \"imagePanelSize_ibexehy\";\nexport const imageThumbnail = \"imageThumbnail_i1f0b00i\";\nexport const imageThumbnailButton = \"imageThumbnailButton_it4teou\";\nexport const imageDescription = \"imageDescription_i1sudeeb\";\nexport const forceCheckboxLabel = \"forceCheckboxLabel_fumnnkf\";\nexport const forcedPillsRow = \"forcedPillsRow_f1rriwxl\";\nexport const forcedExamplePill = \"forcedExamplePill_f1t5gm41\";\nexport const imagePreviewModal = \"imagePreviewModal_ivfvpaq\";\nexport const imagePreviewContent = \"imagePreviewContent_i1jjqvmt\";\nexport const imagePreview = \"imagePreview_i6023i6\";", "import { Button, Stack } from \"@framerjs/fresco\"\nimport { getExampleNavigationData, getLocalExampleNavigationData } from \"app/ai/agents/examples/exampleLoader.ts\"\nimport engine from \"document/engine.ts\"\nimport { getBoundingFrameForNodes } from \"document/models/CanvasTree/utils/geometry.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport * as styles from \"./AgentExamples.styles.ts\"\nimport type { ExampleContextStatus } from \"./exampleContextFromHistory.ts\"\n\ntype ExampleStatus = \"new\" | \"modified\"\ntype ExamplesSource = \"bundle\" | \"local\"\n\ninterface ExampleRowBaseProps {\n\tname: string\n\texamplesSource: ExamplesSource\n\texampleStatus?: ExampleContextStatus\n\tlocalExampleStatus?: ExampleStatus\n}\n\ninterface ExampleRowBundledProps extends ExampleRowBaseProps {\n\texamplesSource: \"bundle\"\n}\n\ninterface ExampleRowLocalProps extends ExampleRowBaseProps {\n\texamplesSource: \"local\"\n\tisRemoved: boolean\n\tisLocalExample: boolean\n\tonRemove: () => void\n\tonRestore: () => void\n}\n\ntype ExampleRowProps = ExampleRowBundledProps | ExampleRowLocalProps\n\nexport function ExampleRow(props: ExampleRowProps) {\n\tconst status = props.localExampleStatus\n\tconst canNavigateToNode = (props.examplesSource === \"local\" && !props.isRemoved) || props.examplesSource === \"bundle\"\n\tconst navigationSource: ExamplesSource =\n\t\tprops.examplesSource === \"local\" ? (props.isLocalExample ? \"local\" : \"bundle\") : \"bundle\"\n\n\treturn (\n\t\t<div className={styles.exampleRowContainer}>\n\t\t\t<div role=\"button\" tabIndex={0} className={styles.exampleRowHeader}>\n\t\t\t\t<Stack direction=\"column\" gap={2} className={styles.exampleInfo}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\tprops.examplesSource === \"local\" && props.isRemoved ? styles.exampleNameRemoved : styles.exampleName\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{props.examplesSource === \"local\" && props.isLocalExample && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{status === \"modified\" && <span className={styles.statusPillModified}>M</span>}\n\t\t\t\t\t\t\t\t{status === \"new\" && <span className={styles.statusPillNew}>N</span>}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{canNavigateToNode ? (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdata-interactive\n\t\t\t\t\t\t\t\tclassName={styles.exampleNameLink}\n\t\t\t\t\t\t\t\ttitle=\"Select example nodes on canvas\"\n\t\t\t\t\t\t\t\tonClick={() => void navigateToExample(props.name, navigationSource)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{props.name}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className={styles.exampleNameText}>{props.name}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{props.exampleStatus === \"in-context\" && <span className={styles.lastUsedBadge}>Chat: Active</span>}\n\t\t\t\t\t\t{props.exampleStatus === \"unloaded\" && <span className={styles.unloadedBadge}>Chat: Unloaded</span>}\n\t\t\t\t\t</div>\n\t\t\t\t</Stack>\n\n\t\t\t\t{props.examplesSource === \"local\" && props.isRemoved && props.onRestore && (\n\t\t\t\t\t<Button onClick={props.onRestore} className={styles.restoreButton} small>\n\t\t\t\t\t\tRestore\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\n\t\t\t\t{props.examplesSource === \"local\" && !props.isRemoved && (\n\t\t\t\t\t<Button onClick={props.onRemove} variant=\"destructive\" className={styles.removeButton}>\n\t\t\t\t\t\t\u00D7\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n/** Navigate to example nodes - either locally or in source project */\nasync function navigateToExample(name: string, source: ExamplesSource): Promise<void> {\n\tconst navData = source === \"local\" ? getLocalExampleNavigationData(name) : getExampleNavigationData(name)\n\tif (!navData || !navData.id) {\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t\tprimaryText: \"No selection nodes\",\n\t\t\tsecondaryText: \"found for this example.\",\n\t\t\tkey: \"agent-example-navigate\",\n\t\t\tduration: 3000,\n\t\t})\n\t\treturn\n\t}\n\n\tconst currentProjectId = engine.stores.projectStore.projectId\n\tconst firstNode = navData.id\n\n\t// Different project - open in new tab\n\tif (navData.projectId && navData.projectId !== currentProjectId) {\n\t\tconst url = `https://framer.com/projects/${navData.projectId}?node=${firstNode}`\n\t\twindow.open(url, \"_blank\")\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"info\",\n\t\t\tprimaryText: \"Opening example\",\n\t\t\tsecondaryText: \"in source project\u2026\",\n\t\t\tkey: \"agent-example-navigate\",\n\t\t\tduration: 2000,\n\t\t})\n\t\treturn\n\t}\n\n\t// Same project - try to navigate locally\n\tlet existingNodes = [navData.id].filter(id => engine.tree.has(id))\n\n\t// If nodes aren't found, they might be on a different page/scope - force-load all scopes\n\tif (existingNodes.length === 0) {\n\t\tconst loader = engine.tree.getService(\"loader\")\n\t\tif (loader && loader.numberOfScopesToLoad() > 0) {\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"info\",\n\t\t\t\tprimaryText: \"Loading project data\",\n\t\t\t\tsecondaryText: \"for examples\u2026\",\n\t\t\t\tkey: \"agent-example-navigate\",\n\t\t\t\tduration: 2000,\n\t\t\t})\n\t\t\tloader.prioritizeLoadingAllData({\n\t\t\t\toperationInBackground: false,\n\t\t\t\toperationName: \"agent_example_navigate\",\n\t\t\t})\n\t\t\tawait loader.afterAllDataLoaded()\n\t\t\t// Try again after loading\n\t\t\texistingNodes = [navData.id].filter(id => engine.tree.has(id))\n\t\t}\n\t}\n\n\tif (existingNodes.length === 0) {\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t\tprimaryText: \"Example nodes not found\",\n\t\t\tsecondaryText: \"in current project.\",\n\t\t\tkey: \"agent-example-navigate\",\n\t\t\tduration: 3000,\n\t\t})\n\t\treturn\n\t}\n\n\t// Navigate to the first node's scope and select all nodes\n\tconst firstFoundNode = engine.tree.get(existingNodes[0])\n\tif (firstFoundNode) {\n\t\tengine.stores.scopeStore.selectByNode(firstFoundNode.id)\n\t}\n\n\tengine.stores.selectionStore.set(existingNodes)\n\n\t// Zoom to show the selected nodes\n\tconst nodes = existingNodes.flatMap(id => {\n\t\tconst node = engine.tree.get(id)\n\t\treturn node ? [node] : []\n\t})\n\tconst rect = getBoundingFrameForNodes(engine.tree, nodes)\n\tif (rect.width > 0 && rect.height > 0) {\n\t\tengine.stores.canvasStore.zoomToCenter(rect, { maxZoom: 1 })\n\t}\n\n\ttoast({\n\t\ttype: \"add\",\n\t\tvariant: \"success\",\n\t\tprimaryText: `Selected ${existingNodes.length} ${existingNodes.length === 1 ? \"layer\" : \"layers\"}`,\n\t\tsecondaryText: \"on canvas.\",\n\t\tkey: \"agent-example-navigate\",\n\t\tduration: 2000,\n\t})\n}\n", "import { assert, getLogger } from \"@framerjs/shared\"\nimport {\n\tgetBundledSerializedByName,\n\tgetExampleNavigationData,\n\tgetSerializedLocalExamples,\n} from \"app/ai/agents/examples/exampleLoader.ts\"\nimport { deserializeNodeAgentExample, serializeAgentExampleFromSelection } from \"app/ai/agents/examples/extraction.ts\"\nimport type { ImplementationGuide, SerializedAgentExample } from \"app/ai/agents/examples/types.ts\"\nimport engine from \"document/engine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\n\nconst log = getLogger(\"app:debugbar:agent:examples\")\n\ninterface ProcessableExample {\n\tid: NodeID\n\tname: string\n\tsource: \"bundled\" | \"local\"\n}\n\ninterface ProcessableExamplesResult {\n\tprocessable: ProcessableExample[]\n\tskipped: string[]\n}\n\nexport async function deserializeLocalExamples(\n\tserialized: SerializedAgentExample[],\n): Promise<{ [key: string]: string }> {\n\tconst examples: Record<string, string> = {}\n\tfor (const s of serialized) {\n\t\ttry {\n\t\t\tconst example = await deserializeNodeAgentExample(s)\n\t\t\tassert(example, \"Example must be found\")\n\t\t\texamples[s.name] = example\n\t\t} catch (error) {\n\t\t\tlog.error(\"Failed to deserialize example:\", error)\n\t\t}\n\t}\n\treturn examples\n}\n\n/**\n * Gets processable examples from bundled and local examples.\n * Filters out examples from different projects and tracks duplicates.\n */\nexport async function getProcessableExamples(\n\tbundledExamples: Record<string, ImplementationGuide>,\n\tcurrentProjectId: string,\n): Promise<ProcessableExamplesResult> {\n\tconst processedSelectionKeys = new Set<string>()\n\tconst processable: ProcessableExample[] = []\n\tconst skipped: string[] = []\n\n\t// Process bundled examples\n\tfor (const [name] of Object.entries(bundledExamples)) {\n\t\tconst navData = getExampleNavigationData(name)\n\t\tif (!navData) continue\n\n\t\t// Check if example is from a different project\n\t\tif (navData.projectId && navData.projectId !== currentProjectId) {\n\t\t\tskipped.push(name)\n\t\t\tcontinue\n\t\t}\n\n\t\tif (!engine.tree.has(navData.id)) continue\n\n\t\tconst serialized = getBundledSerializedByName(name)\n\t\tif (!serialized || processedSelectionKeys.has(serialized.id)) continue\n\t\tprocessedSelectionKeys.add(serialized.id)\n\t\tprocessable.push({ name, id: serialized.id, source: \"bundled\" })\n\t}\n\n\t// Process local examples\n\tconst localSerialized = await getSerializedLocalExamples()\n\tfor (const example of localSerialized) {\n\t\tconst name = example.name\n\n\t\t// Check if example is from a different project\n\t\tif (example.projectId && example.projectId !== currentProjectId) {\n\t\t\tskipped.push(name)\n\t\t\tcontinue\n\t\t}\n\n\t\tif (!engine.tree.has(example.id)) continue\n\t\tif (processedSelectionKeys.has(example.id)) continue\n\n\t\tprocessedSelectionKeys.add(example.id)\n\t\tprocessable.push({ name, id: example.id, source: \"local\" })\n\t}\n\n\treturn { processable, skipped }\n}\n\nexport async function extractSerializedExample(serialize: boolean = false): Promise<SerializedAgentExample | null> {\n\tconst selectedNodes = engine.stores.selectionStore.nodes\n\tif (selectedNodes.length === 0 || selectedNodes.length > 1) {\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t\ttext: \"Please select exactly one node on the canvas first.\",\n\t\t\tkey: \"agent-example\",\n\t\t\tduration: 5000,\n\t\t})\n\t\treturn null\n\t}\n\n\ttry {\n\t\tconst node = selectedNodes[0]\n\t\tassert(node, \"Node must be found\")\n\t\tconst serialized = await serializeAgentExampleFromSelection(\n\t\t\tnode,\n\t\t\t{\n\t\t\t\tcomponentLoader: engine.componentLoader,\n\t\t\t\tmodulesStore: engine.stores.modulesStore,\n\t\t\t\ttreeStore: engine.stores.treeStore,\n\t\t\t\ttree: engine.stores.treeStore.tree,\n\t\t\t\tengineChanges: engine.scheduler.changes,\n\t\t\t\tassetMap: engine.stores.assetStore.assetMap,\n\t\t\t\tvectorsStore: engine.stores.vectorsStore,\n\t\t\t},\n\t\t\tengine.stores.projectStore.projectId,\n\t\t\t// Serialize to js.\n\t\t\tserialize,\n\t\t)\n\n\t\treturn serialized\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : \"Unknown error\"\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"error\",\n\t\t\ttext: `Failed to extract: ${message}`,\n\t\t\tkey: \"agent-example\",\n\t\t\tduration: 10000,\n\t\t})\n\t\tlog.error(\"Extraction failed:\", error)\n\t\treturn null\n\t}\n}\n\n/** Sort comparator that places last-used examples first */\nexport function sortByLastUsed(nameA: string, nameB: string, lastUsedSet: Set<string>): number {\n\tconst aIsLastUsed = lastUsedSet.has(nameA)\n\tconst bIsLastUsed = lastUsedSet.has(nameB)\n\tif (aIsLastUsed && !bIsLastUsed) return -1\n\tif (!aIsLastUsed && bIsLastUsed) return 1\n\treturn 0\n}\n", "import type { getBundledNodeExamples } from \"app/ai/agents/examples/exampleLoader.ts\"\nimport type { SerializedAgentExample } from \"app/ai/agents/examples/types.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\n\nexport function getReplacedBundledExampleNames(\n\tbundledExamples: ReturnType<typeof getBundledNodeExamples>,\n\tlocalExamples: SerializedAgentExample[],\n\tmodifiedLocalExampleIds: Set<NodeID>,\n): Set<string> {\n\tconst names = new Set<string>()\n\tconst bundledExampleNamesById = new Map(Object.values(bundledExamples).map(example => [example.id, example.name]))\n\n\tfor (const example of localExamples) {\n\t\tconst replacedBundledName = modifiedLocalExampleIds.has(example.id)\n\t\t\t? bundledExampleNamesById.get(example.id)\n\t\t\t: bundledExamples[example.name]\n\t\t\t\t? example.name\n\t\t\t\t: undefined\n\n\t\tif (replacedBundledName) names.add(replacedBundledName)\n\t}\n\n\treturn names\n}\n", "export function IconDownload(props: React.SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"16\"\n\t\t\theight=\"16\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"2\"\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<path d=\"M12 17V3\" />\n\t\t\t<path d=\"m6 11 6 6 6-6\" />\n\t\t\t<path d=\"M19 21H5\" />\n\t\t</svg>\n\t)\n}\n", "import { SegmentedControl, SegmentedControlItem } from \"@framerjs/fresco\"\nimport { hasContourOverride } from \"app/ai/contourOverride.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport * as toolStyles from \"../Tools.styles.ts\"\nimport { setDebugBarAgentsCategory, useDebugBarAgentsCategory } from \"../debugBarNavigationStore.ts\"\nimport { ActiveAgent } from \"./ActiveAgent.tsx\"\nimport * as styles from \"./Agents.styles.ts\"\nimport { AiDSL } from \"./AiDSL.tsx\"\nimport { ChatPanel } from \"./ChatPanel.tsx\"\nimport { Contour } from \"./Contour.tsx\"\nimport { CostSection } from \"./CostSection.tsx\"\nimport { DSL } from \"./DSL.tsx\"\nimport { Linter } from \"./Linter.tsx\"\nimport { Script } from \"./Script.tsx\"\nimport { TokenizerSection } from \"./TokenizerPlayground.tsx\"\nimport { AgentExamples } from \"./examples/AgentExamples.tsx\"\n\nenum AgentCategory {\n\tAIDSL = \"AI DSL\",\n\tDSL = \"DSL\",\n\tScript = \"Script\",\n\tExamples = \"Examples\",\n\tChat = \"Chat\",\n\tLinter = \"Linter\",\n\tActiveAgent = \"Active Agent\",\n\tTokenizer = \"Tokenizer\",\n\tCost = \"Cost\",\n\tContour = \"Contour\",\n}\n\nconst agentCategories = Object.values(AgentCategory)\nconst agentCategoriesSet = new Set<string>(agentCategories)\n\nfunction isAgentCategory(value: string): value is AgentCategory {\n\treturn agentCategoriesSet.has(value)\n}\n\nfunction getAgentCategoryTitle(category: AgentCategory, hasContourStar: boolean): string {\n\tif (category === AgentCategory.Contour && hasContourStar) return `${category}*`\n\treturn category\n}\n\nexport function Agents() {\n\tconst rawCategory = useDebugBarAgentsCategory()\n\tconst category = rawCategory && isAgentCategory(rawCategory) ? rawCategory : AgentCategory.AIDSL\n\tconst contourOverride = useEngineState(\n\t\t() => engine.stores.persistedUserDefaults.contourOverride,\n\t\t[],\n\t\t[EngineChange.UserDefaultsStore],\n\t\t{ deepEqual: true },\n\t)\n\tconst hasContourStar = hasContourOverride(contourOverride)\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<div className={styles.categorySelector}>\n\t\t\t\t<SegmentedControl unsaturated direction=\"vertical\">\n\t\t\t\t\t{agentCategories.map(cat => (\n\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\tkey={cat}\n\t\t\t\t\t\t\ttitle={getAgentCategoryTitle(cat, hasContourStar)}\n\t\t\t\t\t\t\tselected={category === cat}\n\t\t\t\t\t\t\tonSelect={() => setDebugBarAgentsCategory(cat)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</SegmentedControl>\n\t\t\t</div>\n\t\t\t<div className={styles.content}>\n\t\t\t\t{category === AgentCategory.ActiveAgent && <ActiveAgent />}\n\t\t\t\t{category === AgentCategory.AIDSL && <AiDSL />}\n\t\t\t\t{category === AgentCategory.DSL && <DSL />}\n\t\t\t\t{category === AgentCategory.Script && <Script />}\n\t\t\t\t{category === AgentCategory.Examples && <AgentExamples />}\n\t\t\t\t{category === AgentCategory.Linter && <Linter />}\n\t\t\t\t{category === AgentCategory.Tokenizer && (\n\t\t\t\t\t<div className={`${toolStyles.toolColumns} ${styles.historyColumns}`}>\n\t\t\t\t\t\t<TokenizerSection />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{category === AgentCategory.Chat && <ChatPanel />}\n\t\t\t\t{category === AgentCategory.Contour && <Contour />}\n\t\t\t\t{category === AgentCategory.Cost && (\n\t\t\t\t\t<div className={`${toolStyles.toolColumns} ${styles.historyColumns}`}>\n\t\t\t\t\t\t<CostSection />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n", "import { CheckBox, Label, Stack } from \"@framerjs/fresco\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useLocalStorageState } from \"document/components/chrome/debugbar/useLocalStorageState.js\"\nimport type { CrdtDebugRecord } from \"document/crdt/CRDTDebugRecord.ts\"\nimport { useIsCrdt } from \"document/crdt/useIsCrdt.ts\"\nimport engine from \"document/engine.js\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { useEffect, useMemo, useState } from \"react\"\nimport * as styles from \"./CrdtDebugPanel.styles.ts\"\nimport { CrdtFileSaver } from \"./CrdtFileSaver.tsx\"\nimport { CrdtRecordingControls } from \"./CrdtRecordingControls.tsx\"\nimport { CrdtRowTable } from \"./CrdtRowTable.tsx\"\n\nexport function CrdtDebugPanel() {\n\tif (!useIsCrdt()) return <CrdtPanelDisabled />\n\treturn <CrdtPanelEnabled />\n}\n\nfunction CrdtPanelDisabled() {\n\treturn <div style={{ display: \"flex\", gap: 24, marginBottom: 8 }}>This project does not use CRDT</div>\n}\n\nfunction CrdtPanelEnabled() {\n\tconst timeline = engine.stores.treeStore.crdtTimeline\n\tconst [allCrdtRecords, setAllCrdtRecords] = useState<CrdtDebugRecord[]>([])\n\n\tconst [includeSnapshotRows, setIncludeSnapshotRows] = useLocalStorageState(\"debugpanel.crdtIncludeSnapshot\", false)\n\n\tconst { rowsCount, seq, client } = useEngineState(\n\t\t() => {\n\t\t\treturn {\n\t\t\t\trowsCount: timeline.store.length,\n\t\t\t\tseq: timeline.store.seq,\n\t\t\t\tclient: timeline.store.client,\n\t\t\t}\n\t\t},\n\t\t[],\n\t\t[EngineChange.Tree],\n\t)\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\tuseEffect(() => {\n\t\t// eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n\t\tsetAllCrdtRecords(prev => {\n\t\t\tconst withoutOldSnapshot = prev.filter(r => r.source !== \"snapshot\")\n\t\t\treturn [{ source: \"snapshot\", rows: timeline.store.getSerializableRows() }, ...withoutOldSnapshot]\n\t\t})\n\t}, [rowsCount])\n\n\tconst filteredCrdtRecords = useMemo(\n\t\t() =>\n\t\t\tallCrdtRecords\n\t\t\t\t.filter(crdtRecord => includeSnapshotRows || crdtRecord.source !== \"snapshot\")\n\t\t\t\t.filter(record => record.rows.length > 0),\n\t\t[allCrdtRecords, includeSnapshotRows],\n\t)\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={16} className={styles.crdtDebugPanel}>\n\t\t\t<Stack direction=\"column\" className={styles.crdtDebugPanelSidebar} gap={8}>\n\t\t\t\t<CrdtRecordingControls crdtRecords={filteredCrdtRecords} setCrdtRecords={setAllCrdtRecords} />\n\t\t\t\t<div>{new Intl.NumberFormat().format(rowsCount)} rows</div>\n\t\t\t\t<div>seq: {seq}</div>\n\t\t\t\t<div>client: {client}</div>\n\t\t\t\t<Stack direction=\"row\" gap={4}>\n\t\t\t\t\t<CheckBox id=\"debug-crdt-snapshot-filter\" value={includeSnapshotRows} onChange={setIncludeSnapshotRows} />\n\t\t\t\t\t<Label htmlFor=\"debug-crdt-snapshot-filter\">Include snapshot</Label>\n\t\t\t\t</Stack>\n\t\t\t\t<CrdtFileSaver />\n\t\t\t</Stack>\n\t\t\t<div className={styles.crdtDebugPanelContent}>\n\t\t\t\t<CrdtRowTable crdtRecords={filteredCrdtRecords} />\n\t\t\t</div>\n\t\t</Stack>\n\t)\n}\n", "import \"CrdtDebugPanel.styles_yl2asa.wyw.css\"; export const crdtDebugPanel = \"crdtDebugPanel_cokbj1a\";\nexport const crdtDebugPanelContent = \"crdtDebugPanelContent_czqoigl\";\nexport const crdtRecordTable = \"crdtRecordTable_c1l21um2\";\nexport const crdtRecordTableHeaderCell = \"crdtRecordTableHeaderCell_c1jsjj3h\";\nexport const crdtRecordHeaderCell = \"crdtRecordHeaderCell_ckix319\";\nexport const crdtLocalRecord = \"crdtLocalRecord_c1uxbd98\";\nexport const crdtRemoteRecord = \"crdtRemoteRecord_c124yr7e\";\nexport const crdtSnapshotRecord = \"crdtSnapshotRecord_c1jpjgdn\";\nexport const crdtDebugPanelSidebar = \"crdtDebugPanelSidebar_cwvolsf\";\nexport const crdtDebugPanelSection = \"crdtDebugPanelSection_c1ku1z94\";\nexport const emptyView = \"emptyView_ew2x6ua\";\nexport const recordingIcon = \"recordingIcon_r12ytcn5\";\nexport const recordingIconActive = \"recordingIconActive_rmxpjfp\";\nexport const clickable = \"clickable_cgj3l76\";", "import { Button, Stack } from \"@framerjs/fresco\"\nimport { saveCrdtAsLocalBinaryFile, saveCrdtAsLocalJsonFile } from \"./saveBlobAsLocalFile.ts\"\n\nexport function CrdtFileSaver() {\n\treturn (\n\t\t<Stack direction=\"column\" gap={8}>\n\t\t\t<div>Save full CRDT tree</div>\n\t\t\t<Button onClick={saveCrdtAsLocalJsonFile}>Save as JSON</Button>\n\t\t\t<Button onClick={saveCrdtAsLocalBinaryFile}>Save as raw binary</Button>\n\t\t</Stack>\n\t)\n}\n", "import { Button, Stack } from \"@framerjs/fresco\"\nimport { getLogger } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport type { RemoteDocument } from \"document/RemoteDocument.ts\"\nimport type { CrdtDebugRecord } from \"document/crdt/CRDTDebugRecord.ts\"\nimport type { CrdtRemoteDocumentDataHandler } from \"document/crdt/sync/CrdtRemoteDocumentDataHandler.ts\"\nimport engine from \"document/engine.ts\"\nimport { type Dispatch, type SetStateAction, useState } from \"react\"\nimport * as styles from \"./CrdtDebugPanel.styles.ts\"\nimport { saveBlobAsLocalFile } from \"./saveBlobAsLocalFile.ts\"\n\nconst log = getLogger(\"debugbar\")\n\nexport function CrdtRecordingControls({\n\tcrdtRecords,\n\tsetCrdtRecords,\n}: {\n\tcrdtRecords: CrdtDebugRecord[]\n\tsetCrdtRecords: Dispatch<SetStateAction<CrdtDebugRecord[]>>\n}) {\n\tconst [isRecording, setIsRecording] = useState(false)\n\tfunction handleRecording() {\n\t\tconst timeline = engine.stores.treeStore.crdtTimeline\n\t\tconst recordFn = (record: CrdtDebugRecord) => {\n\t\t\tsetCrdtRecords(prev => [record, ...prev])\n\t\t}\n\n\t\tif (crdtRecords.length === 0) {\n\t\t\tconst rows = timeline.store.getSerializableRows()\n\t\t\trecordFn({\n\t\t\t\tsource: \"snapshot\",\n\t\t\t\trows,\n\t\t\t})\n\t\t}\n\n\t\tif (timeline.recorder) {\n\t\t\ttimeline.recorder = undefined\n\t\t} else {\n\t\t\ttimeline.recorder = recordFn\n\t\t}\n\n\t\tif (engine.remoteDocument) {\n\t\t\tconst dataHandler = (engine.remoteDocument as RemoteDocument).treeDataHandler as CrdtRemoteDocumentDataHandler\n\n\t\t\tif (dataHandler.recorder) {\n\t\t\t\tdataHandler.recorder = undefined\n\t\t\t} else {\n\t\t\t\tdataHandler.recorder = recordFn\n\t\t\t}\n\t\t}\n\n\t\tsetIsRecording(prev => !prev)\n\t}\n\n\tfunction handleClearRecording() {\n\t\tsetCrdtRecords([])\n\t}\n\n\tasync function saveRecords() {\n\t\ttry {\n\t\t\tconst blob = new Blob([JSON.stringify(crdtRecords)], { type: \"application/json\" })\n\t\t\tsaveBlobAsLocalFile(blob, \"records\", \"json\")\n\t\t} catch (e) {\n\t\t\tlog.error(e)\n\t\t}\n\t}\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={8} className={styles.crdtDebugPanelSection}>\n\t\t\t<Button onClick={handleRecording}>\n\t\t\t\t<div className={cx(styles.recordingIcon, isRecording && styles.recordingIconActive)} />\n\t\t\t\t{isRecording ? \"Stop recording\" : \"Start recording\"}\n\t\t\t</Button>\n\t\t\t<Button onClick={handleClearRecording} enabled={crdtRecords.length > 0}>\n\t\t\t\tClear records\n\t\t\t</Button>\n\t\t\t<Button onClick={saveRecords} enabled={crdtRecords.length > 0}>\n\t\t\t\tSave records\n\t\t\t</Button>\n\t\t</Stack>\n\t)\n}\n", "import { preventDefaultAndStopPropagation } from \"@framerjs/app-shared\"\nimport { Stack } from \"@framerjs/fresco\"\nimport { IconButton } from \"@framerjs/fresco/components/IconButton\"\nimport { cx } from \"@linaria/core\"\nimport { IconSearchSmall } from \"document/components/chrome/QuickActions/utils/icons.tsx\"\nimport type { CrdtRowFilter } from \"document/components/chrome/debugbar/crdt/CrdtRowFilter.js\"\nimport { useFindNodeById } from \"document/components/chrome/debugbar/useFindNodeById.ts\"\nimport type { CrdtDebugRecord } from \"document/crdt/CRDTDebugRecord.ts\"\nimport React from \"react\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport * as styles from \"./CrdtDebugPanel.styles.ts\"\n\nconst copyToClipboard = (value: string) =>\n\tnavigator.clipboard.writeText(value).then(() => {\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"info\",\n\t\t\ttext: `Copied ${value} to clipboard`,\n\t\t})\n\t})\n\nfunction CopyOnClickCell({ value, children }: { value: string; children?: React.ReactNode }) {\n\treturn (\n\t\t<td>\n\t\t\t<Stack direction=\"row\">\n\t\t\t\t<div className={styles.clickable} title={`Copy ${value} to clipboard`} onClick={() => copyToClipboard(value)}>\n\t\t\t\t\t{value}\n\t\t\t\t</div>{\" \"}\n\t\t\t\t<div>{children}</div>\n\t\t\t</Stack>\n\t\t</td>\n\t)\n}\n\nexport function CrdtRowTableBody({\n\tcrdtRecords,\n\trowFilter,\n}: {\n\tcrdtRecords: CrdtDebugRecord[]\n\trowFilter: CrdtRowFilter\n}) {\n\tconst { findNodeById } = useFindNodeById()\n\treturn (\n\t\t<tbody>\n\t\t\t{crdtRecords.map(record => {\n\t\t\t\tconst sourceClass = cx(\n\t\t\t\t\trecord.source === \"remote\" && styles.crdtRemoteRecord,\n\t\t\t\t\trecord.source === \"local\" && styles.crdtLocalRecord,\n\t\t\t\t\trecord.source === \"snapshot\" && styles.crdtSnapshotRecord,\n\t\t\t\t)\n\n\t\t\t\tconst filteredRows = record.rows.filter(r => {\n\t\t\t\t\tconst byClientId = rowFilter.clientIds.length === 0 || rowFilter.clientIds.includes(r.client)\n\t\t\t\t\tconst byNodeId = rowFilter.nodeIds.length === 0 || rowFilter.nodeIds.includes(r.id)\n\t\t\t\t\tconst byKey = rowFilter.hierarchyOnly || rowFilter.keys.length === 0 || rowFilter.keys.includes(r.key)\n\t\t\t\t\tconst byHierarchy = !rowFilter.hierarchyOnly || r.key === \"parentid\"\n\t\t\t\t\tconst byValue = rowFilter.values.length === 0 || rowFilter.values.includes(String(r.value))\n\n\t\t\t\t\treturn byNodeId && byClientId && byKey && byValue && byHierarchy\n\t\t\t\t})\n\t\t\t\tif (filteredRows.length === 0) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={filteredRows[0]?.seq}>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td colSpan={5} className={cx(styles.crdtRecordHeaderCell, sourceClass)}>\n\t\t\t\t\t\t\t\t{record.source} \u2014{\" \"}\n\t\t\t\t\t\t\t\t{filteredRows.length === record.rows.length\n\t\t\t\t\t\t\t\t\t? `${filteredRows.length} rows`\n\t\t\t\t\t\t\t\t\t: `${filteredRows.length} of ${record.rows.length} rows`}\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t{filteredRows.toReversed().map(r => (\n\t\t\t\t\t\t\t<tr key={`${r.seq}/${r.client}/${r.id}/${r.key}`} className={sourceClass}>\n\t\t\t\t\t\t\t\t<td>{r.seq}</td>\n\t\t\t\t\t\t\t\t<CopyOnClickCell value={r.client.toString(10)} />\n\t\t\t\t\t\t\t\t<CopyOnClickCell value={r.id}>\n\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\tonMouseDown={() => findNodeById(r.id)}\n\t\t\t\t\t\t\t\t\t\tonClick={preventDefaultAndStopPropagation}\n\t\t\t\t\t\t\t\t\t\ticon={<IconSearchSmall />}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</CopyOnClickCell>\n\t\t\t\t\t\t\t\t<CopyOnClickCell value={r.key} />\n\t\t\t\t\t\t\t\t<CopyOnClickCell value={JSON.stringify(r.value)} />\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t)\n\t\t\t})}\n\t\t</tbody>\n\t)\n}\n", "import { CheckBox, Label, Stack, TextInput } from \"@framerjs/fresco\"\nimport type { CrdtRowFilter } from \"document/components/chrome/debugbar/crdt/CrdtRowFilter.js\"\nimport { type Dispatch, type ReactNode, type SetStateAction, useState } from \"react\"\nimport * as styles from \"./CrdtDebugPanel.styles.ts\"\nimport { FilterIcon } from \"./FilterIcon.tsx\"\n\nenum CrdtStoreColumn {\n\tClientId = \"client\",\n\tNodeId = \"node\",\n\tKey = \"key\",\n\tValue = \"value\",\n}\n\nfunction HeaderCellWithFilter({\n\twidth,\n\tcolumn,\n\texpandedFilter,\n\tsetExpandedFilter,\n\tchildren,\n\tfilterString,\n\tsetFilterString,\n}: {\n\twidth?: number\n\tcolumn: CrdtStoreColumn\n\texpandedFilter: CrdtStoreColumn | undefined\n\tsetExpandedFilter: (column: CrdtStoreColumn | undefined) => void\n\tchildren?: ReactNode\n\tfilterString: string\n\tsetFilterString: (filterString: string) => void\n}) {\n\treturn (\n\t\t<td className={styles.crdtRecordTableHeaderCell} width={width}>\n\t\t\t{expandedFilter === column ? (\n\t\t\t\t<>\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\tvalue={filterString}\n\t\t\t\t\t\tonChange={setFilterString}\n\t\t\t\t\t\tplaceholder={column}\n\t\t\t\t\t\ttitle=\"comma-separated list of client ids\"\n\t\t\t\t\t\tonBlur={() => setExpandedFilter(undefined)}\n\t\t\t\t\t\tautoFocus={!children} /* if the filter panel has more than one text field, don't auto focus */\n\t\t\t\t\t/>\n\t\t\t\t\t{children}\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<Stack direction=\"row\" gap={4}>\n\t\t\t\t\t<b>{column}</b>\n\t\t\t\t\t<span className={styles.clickable} onClick={() => setExpandedFilter(column)}>\n\t\t\t\t\t\t{filterString.length ? <i> \u2014 {filterString}</i> : <FilterIcon />}\n\t\t\t\t\t</span>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</td>\n\t)\n}\n\nexport function CrdtRowTableHeader({\n\trowFilter,\n\tsetRowFilter,\n}: {\n\tsetRowFilter: Dispatch<SetStateAction<CrdtRowFilter>>\n\trowFilter: CrdtRowFilter\n}) {\n\tconst nodeIdFilterString = rowFilter.nodeIds.join(\",\")\n\tconst clientIdFilterString = rowFilter.clientIds.join(\",\")\n\tconst keyFilterString = rowFilter.keys.join(\",\")\n\tconst valueFilterString = rowFilter.values.join(\",\")\n\tconst hierarchyOnlyFilter = rowFilter.hierarchyOnly\n\n\tconst [expandedFilter, setExpandedFilter] = useState<CrdtStoreColumn | undefined>()\n\n\tconst appendRowFilter = (diff: Partial<CrdtRowFilter>) => {\n\t\tsetRowFilter(old => ({ ...old, ...diff }))\n\t}\n\n\treturn (\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<td className={styles.crdtRecordTableHeaderCell} width={64}>\n\t\t\t\t\t<b>seq</b>\n\t\t\t\t</td>\n\t\t\t\t<HeaderCellWithFilter\n\t\t\t\t\twidth={128}\n\t\t\t\t\tcolumn={CrdtStoreColumn.ClientId}\n\t\t\t\t\texpandedFilter={expandedFilter}\n\t\t\t\t\tsetExpandedFilter={setExpandedFilter}\n\t\t\t\t\tfilterString={clientIdFilterString}\n\t\t\t\t\tsetFilterString={clientIdFilter =>\n\t\t\t\t\t\tappendRowFilter({\n\t\t\t\t\t\t\tclientIds: clientIdFilter.trim() === \"\" ? [] : clientIdFilter.split(\",\").map(s => parseInt(s.trim(), 10)),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<HeaderCellWithFilter\n\t\t\t\t\twidth={128}\n\t\t\t\t\tcolumn={CrdtStoreColumn.NodeId}\n\t\t\t\t\texpandedFilter={expandedFilter}\n\t\t\t\t\tsetExpandedFilter={setExpandedFilter}\n\t\t\t\t\tfilterString={nodeIdFilterString}\n\t\t\t\t\tsetFilterString={nodeIdFilter =>\n\t\t\t\t\t\tappendRowFilter({\n\t\t\t\t\t\t\tnodeIds: nodeIdFilter.trim() === \"\" ? [] : nodeIdFilter.split(\",\").map(s => s.trim()),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<HeaderCellWithFilter\n\t\t\t\t\twidth={128}\n\t\t\t\t\tcolumn={CrdtStoreColumn.Key}\n\t\t\t\t\texpandedFilter={expandedFilter}\n\t\t\t\t\tsetExpandedFilter={setExpandedFilter}\n\t\t\t\t\tfilterString={keyFilterString}\n\t\t\t\t\tsetFilterString={keysFilter =>\n\t\t\t\t\t\tappendRowFilter({\n\t\t\t\t\t\t\tkeys: keysFilter.trim() === \"\" ? [] : keysFilter.split(\",\").map(s => s.trim()),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<CheckBox\n\t\t\t\t\t\tid=\"debug-crdt-hierarchy-filter\"\n\t\t\t\t\t\tvalue={hierarchyOnlyFilter}\n\t\t\t\t\t\tonChange={hierarchyOnly =>\n\t\t\t\t\t\t\tappendRowFilter({\n\t\t\t\t\t\t\t\thierarchyOnly,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t<Label htmlFor=\"debug-crdt-hierarchy-filter\">Hierarchy changes only</Label>\n\t\t\t\t</HeaderCellWithFilter>\n\t\t\t\t<HeaderCellWithFilter\n\t\t\t\t\tcolumn={CrdtStoreColumn.Value}\n\t\t\t\t\texpandedFilter={expandedFilter}\n\t\t\t\t\tsetExpandedFilter={setExpandedFilter}\n\t\t\t\t\tfilterString={valueFilterString}\n\t\t\t\t\tsetFilterString={valuesFilter =>\n\t\t\t\t\t\tappendRowFilter({\n\t\t\t\t\t\t\tvalues: valuesFilter.trim() === \"\" ? [] : valuesFilter.split(\",\").map(s => s.trim()),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</tr>\n\t\t</thead>\n\t)\n}\n", "export function FilterIcon() {\n\treturn (\n\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M3 7C3 6.44772 3.44772 6 4 6H20C20.5523 6 21 6.44772 21 7C21 7.55228 20.5523 8 20 8H4C3.44772 8 3 7.55228 3 7ZM6 12C6 11.4477 6.44772 11 7 11H17C17.5523 11 18 11.4477 18 12C18 12.5523 17.5523 13 17 13H7C6.44772 13 6 12.5523 6 12ZM9 17C9 16.4477 9.44772 16 10 16H14C14.5523 16 15 16.4477 15 17C15 17.5523 14.5523 18 14 18H10C9.44772 18 9 17.5523 9 17Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import { Stack } from \"@framerjs/fresco\"\nimport { CrdtRowTableBody } from \"document/components/chrome/debugbar/crdt/CrdtRowTableBody.tsx\"\nimport { CrdtRowTableHeader } from \"document/components/chrome/debugbar/crdt/CrdtRowTableHeader.tsx\"\nimport { useStoredCrdtRowFilter } from \"document/components/chrome/debugbar/crdt/useStoredCrdtRowFilter.js\"\nimport type { CrdtDebugRecord } from \"document/crdt/CRDTDebugRecord.ts\"\nimport * as styles from \"./CrdtDebugPanel.styles.ts\"\n\nexport function CrdtRowTable({ crdtRecords }: { crdtRecords: CrdtDebugRecord[] }) {\n\tconst [rowFilter, setRowFilter] = useStoredCrdtRowFilter()\n\n\treturn (\n\t\t<Stack direction=\"column\">\n\t\t\t{crdtRecords.length ? (\n\t\t\t\t<table className={styles.crdtRecordTable}>\n\t\t\t\t\t<CrdtRowTableHeader rowFilter={rowFilter} setRowFilter={setRowFilter} />\n\t\t\t\t\t<CrdtRowTableBody crdtRecords={crdtRecords} rowFilter={rowFilter} />\n\t\t\t\t</table>\n\t\t\t) : (\n\t\t\t\t<div className={styles.emptyView}>\n\t\t\t\t\t<div>No records to display</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Stack>\n\t)\n}\n"],
  "mappings": "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",
  "names": ["Prism", "_self", "_", "o", "v", "i", "m", "lang", "container", "name", "content", "s", "e", "p", "k", "list", "status", "pre", "global", "module", "define", "t", "copy", "n", "data", "i", "global", "module", "define", "t", "k", "copy", "global", "module", "define", "t", "k", "copy", "global", "module", "define", "i", "t", "v", "w", "me", "seed", "copy", "global", "module", "define", "w", "i", "t", "v", "me", "seed", "copy", "global", "module", "define", "k", "copy", "t", "global", "flatten", "n", "prng", "seed", "copy", "t", "i", "s", "r", "j", "e", "require_seedrandom", "import_react", "rect", "name", "data", "i", "v", "log", "min", "max", "noop", "_", "p", "n", "o", "k", "join", "table", "t", "table2", "row", "row2", "m", "s", "tzDate", "self", "fmtDate", "e", "w", "gaps", "rect", "g", "r", "points", "pi", "u", "seriesIdx", "size", "font", "off", "title", "key", "sc", "opts", "sidesWithAxes", "facet", "xScaleKey", "idxs", "strokePath", "strokeStyle", "fillPath", "fillStyle", "shiftAmt", "ticks", "border", "grid", "select", "i2", "can", "seriesIdxMatcher", "import_jsx_runtime", "v", "data", "m", "max", "tool", "React", "import_react", "import_jsx_runtime", "name", "entry", "import_react", "import_jsx_runtime", "logger", "s", "level", "React", "entry", "name", "import_react", "Prism", "i", "Prism", "import_jsx_runtime", "React", "Details", "e", "FormattedCodePreview", "formattedCode", "Module", "moduleContent", "status", "localId", "i", "isString", "content", "Prism", "import_react", "import_jsx_runtime", "React", "container", "import_react", "log", "branch", "directory", "status", "content", "header", "data", "import_jsx_runtime", "sections", "section", "i", "entry", "status", "o", "s", "import_react", "log", "name", "entry", "import_jsx_runtime", "s", "title", "status", "React", "log", "entry", "api", "import_react", "import_react", "import_jsx_runtime", "branch", "assert", "e", "t", "i", "a", "e", "e", "t", "e", "e", "t", "e", "e", "e", "t", "i", "e", "t", "i", "e", "e", "e", "t", "i", "o", "e", "e", "e", "t", "e", "import_react", "import_jsx_runtime", "isString", "i", "import_react", "import_jsx_runtime", "import_react", "import_jsx_runtime", "React", "e", "n", "import_react", "import_jsx_runtime", "_", "React", "pauseOnLoad", "canPause", "import_react", "import_jsx_runtime", "import_react", "import_jsx_runtime", "title", "timestamp", "import_react", "import_jsx_runtime", "import_react", "list", "import_jsx_runtime", "React", "entry", "name", "e", "list", "time", "assert", "name", "import_jsx_runtime", "log", "ToolCategory", "entry", "Tools", "React", "name", "e", "tools", "tool", "change", "_", "i", "meta", "downloadBlob", "status", "cache", "v", "import_react", "container", "sections", "section", "data", "import_jsx_runtime", "assert", "data", "container", "import_react", "emptyState", "container", "import_jsx_runtime", "output", "data", "emptyState", "container", "container", "content", "import_react", "import_react", "container", "emptyState", "import_jsx_runtime", "content", "isString", "i", "timestamp", "formatTime", "container", "emptyState", "import_react", "emptyState", "import_react", "import_jsx_runtime", "content", "import_jsx_runtime", "formatDuration", "assertNever", "emptyState", "icon", "eventContent", "tooltipContent", "name", "import_jsx_runtime", "import_react", "title", "import_jsx_runtime", "nodeIds", "prompt", "timestamp", "title", "i", "content", "import_react", "import_jsx_runtime", "import_react", "log", "import_jsx_runtime", "i", "n", "formatDuration", "r", "log", "isString", "import_react", "container", "textArea", "import_jsx_runtime", "container", "textArea", "import_react", "panel", "emptyState", "import_jsx_runtime", "data", "panel", "emptyState", "import_react", "container", "inputColumn", "textArea", "panel", "import_jsx_runtime", "output", "container", "inputColumn", "textArea", "panel", "info", "import_react", "import_jsx_runtime", "tokens", "title", "content", "n", "isString", "collectionId", "n", "name", "n", "content", "downloadContent", "import_react", "removeButton", "import_jsx_runtime", "status", "removeButton", "name", "rect", "log", "name", "log", "import_jsx_runtime", "import_jsx_runtime", "log", "React", "name", "e", "preview", "p", "import_jsx_runtime", "AgentCategory", "container", "content", "import_react", "import_jsx_runtime", "import_react", "import_jsx_runtime", "log", "e", "import_react", "import_jsx_runtime", "r", "React", "import_react", "import_jsx_runtime", "import_jsx_runtime", "s", "import_jsx_runtime", "import_jsx_runtime", "r", "import_jsx_runtime", "Tools", "React", "section", "title"]
}
