From 101de03e70a70b50e435e043fa34073682d06212 Mon Sep 17 00:00:00 2001 From: TrentChou Date: Fri, 16 Oct 2026 17:06:31 +0800 Subject: [PATCH] text-editor: add Text Editor MiniApp A Sublime-style local text editor shared live with the Agent: MCP tools read, edit, create and save the same buffers the user sees, and review highlights (lines, character ranges or exact snippets, with notes) overlay code without touching files. Highlight lifetime is a user switch: gone once the code is edited or the file closed, or kept until cleared (also across restarts). --- README.md | 1 + README.zh-CN.md | 1 + .../text-editor/.minimax-plugin/plugin.json | 23 + plugins/trentchou/text-editor/LICENSE | 25 + plugins/trentchou/text-editor/README.md | 115 + plugins/trentchou/text-editor/README.zh-CN.md | 73 + .../trentchou/text-editor/docs/preview.jpg | Bin 0 -> 250778 bytes .../trentchou/text-editor/hooks/hooks.json | 28 + .../text-editor/hooks/record-workspace.ps1 | 11 + .../text-editor/hooks/record-workspace.sh | 9 + plugins/trentchou/text-editor/icon.png | Bin 0 -> 18284 bytes .../text-editor/miniapp/client/app.js | 2373 +++++++++++++++++ .../text-editor/miniapp/client/fonts/OFL.txt | 93 + .../miniapp/client/fonts/jetbrains-mono.css | 118 + ...brains-mono-cyrillic-ext-wght-italic.woff2 | Bin 0 -> 2180 bytes ...brains-mono-cyrillic-ext-wght-normal.woff2 | Bin 0 -> 2028 bytes .../jetbrains-mono-cyrillic-wght-italic.woff2 | Bin 0 -> 13352 bytes .../jetbrains-mono-cyrillic-wght-normal.woff2 | Bin 0 -> 12108 bytes .../jetbrains-mono-greek-wght-italic.woff2 | Bin 0 -> 9548 bytes .../jetbrains-mono-greek-wght-normal.woff2 | Bin 0 -> 9004 bytes ...jetbrains-mono-latin-ext-wght-italic.woff2 | Bin 0 -> 16520 bytes ...jetbrains-mono-latin-ext-wght-normal.woff2 | Bin 0 -> 15196 bytes .../jetbrains-mono-latin-wght-italic.woff2 | Bin 0 -> 42964 bytes .../jetbrains-mono-latin-wght-normal.woff2 | Bin 0 -> 40404 bytes ...etbrains-mono-vietnamese-wght-italic.woff2 | Bin 0 -> 8056 bytes ...etbrains-mono-vietnamese-wght-normal.woff2 | Bin 0 -> 7504 bytes .../text-editor/miniapp/client/index.html | 178 ++ .../text-editor/miniapp/client/languages.js | 258 ++ .../text-editor/miniapp/client/styles.css | 923 +++++++ .../text-editor/miniapp/client/themes.js | 86 + .../client/vendor/THIRD_PARTY_LICENSES.txt | 1034 +++++++ .../miniapp/client/vendor/codemirror.js | 41 + .../text-editor/miniapp/miniapp.json | 25 + .../miniapp/node/editor-service.mjs | 1536 +++++++++++ .../text-editor/miniapp/node/mcp.mjs | 331 +++ .../text-editor/miniapp/node/miniapp-api.ts | 109 + .../text-editor/miniapp/node/server.mjs | 303 +++ .../node/vendor/THIRD_PARTY_LICENSES.txt | 1034 +++++++ .../miniapp/node/vendor/cm-state.mjs | 6 + plugins/trentchou/text-editor/package.json | 6 + .../trentchou/text-editor/servers.mcp.json | 12 + .../text-editor/vendor-src/build.mjs | 72 + .../text-editor/vendor-src/client-entry.js | 55 + .../text-editor/vendor-src/node-entry.js | 2 + .../text-editor/vendor-src/package-lock.json | 1011 +++++++ .../text-editor/vendor-src/package.json | 35 + 46 files changed, 9927 insertions(+) create mode 100644 plugins/trentchou/text-editor/.minimax-plugin/plugin.json create mode 100644 plugins/trentchou/text-editor/LICENSE create mode 100644 plugins/trentchou/text-editor/README.md create mode 100644 plugins/trentchou/text-editor/README.zh-CN.md create mode 100644 plugins/trentchou/text-editor/docs/preview.jpg create mode 100644 plugins/trentchou/text-editor/hooks/hooks.json create mode 100644 plugins/trentchou/text-editor/hooks/record-workspace.ps1 create mode 100644 plugins/trentchou/text-editor/hooks/record-workspace.sh create mode 100644 plugins/trentchou/text-editor/icon.png create mode 100644 plugins/trentchou/text-editor/miniapp/client/app.js create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/OFL.txt create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono.css create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-ext-wght-italic.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-ext-wght-normal.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-wght-italic.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-wght-normal.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-greek-wght-italic.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-greek-wght-normal.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-ext-wght-italic.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-ext-wght-normal.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-wght-italic.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-wght-normal.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-vietnamese-wght-italic.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-vietnamese-wght-normal.woff2 create mode 100644 plugins/trentchou/text-editor/miniapp/client/index.html create mode 100644 plugins/trentchou/text-editor/miniapp/client/languages.js create mode 100644 plugins/trentchou/text-editor/miniapp/client/styles.css create mode 100644 plugins/trentchou/text-editor/miniapp/client/themes.js create mode 100644 plugins/trentchou/text-editor/miniapp/client/vendor/THIRD_PARTY_LICENSES.txt create mode 100644 plugins/trentchou/text-editor/miniapp/client/vendor/codemirror.js create mode 100644 plugins/trentchou/text-editor/miniapp/miniapp.json create mode 100644 plugins/trentchou/text-editor/miniapp/node/editor-service.mjs create mode 100644 plugins/trentchou/text-editor/miniapp/node/mcp.mjs create mode 100644 plugins/trentchou/text-editor/miniapp/node/miniapp-api.ts create mode 100644 plugins/trentchou/text-editor/miniapp/node/server.mjs create mode 100644 plugins/trentchou/text-editor/miniapp/node/vendor/THIRD_PARTY_LICENSES.txt create mode 100644 plugins/trentchou/text-editor/miniapp/node/vendor/cm-state.mjs create mode 100644 plugins/trentchou/text-editor/package.json create mode 100644 plugins/trentchou/text-editor/servers.mcp.json create mode 100644 plugins/trentchou/text-editor/vendor-src/build.mjs create mode 100644 plugins/trentchou/text-editor/vendor-src/client-entry.js create mode 100644 plugins/trentchou/text-editor/vendor-src/node-entry.js create mode 100644 plugins/trentchou/text-editor/vendor-src/package-lock.json create mode 100644 plugins/trentchou/text-editor/vendor-src/package.json diff --git a/README.md b/README.md index 1f85b31..0b53dfa 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ The MiniMax Code Agent communicates through the host MCP client. Business reques | [灵签易占 / Chinese Divination](plugins/weekbin/chinese-divination/) | Cast hexagrams with the Plum Blossom method (time, number, three-coin, or daily), read the result through the classical body/use rules, and browse all sixty-four hexagrams with a ganzhi almanac | [weekbin](https://github.com/weekbin) | | [Session Trajectory](plugins/avatasia/mmc-trajectory/) | Browse a conversation's model trajectory: messages, reasoning, tool calls and results, Token usage, and per-turn timing | [avatasia](https://github.com/avatasia) | | [CadQuery Viewer](plugins/hanzijie/cq-viewer/) | View STL / STEP models from your project (STEP keeps assembly part names, colours, and real CAD edges), watch models pushed from CadQuery scripts, and mark positions on the model to send to the conversation in one click; MCP tools let the AI add model folders and open models, and a CadQuery parametric-design skill is bundled | [HanZijie](https://github.com/HanZijie) · [flowful-ai](https://github.com/flowful-ai) | +| [Text Editor](plugins/trentchou/text-editor/) | A Sublime-style text editor you share live with the Agent: it reads, edits, and saves the same buffers you see, and highlights code with notes during reviews without touching the file | [TrentChou](https://github.com/TrentChou) |
Preview: Token Usage Board diff --git a/README.zh-CN.md b/README.zh-CN.md index 43754de..d3556dd 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -69,6 +69,7 @@ MiniMax Code Agent 通过宿主 MCP 客户端与 MiniApp 协作。业务请求 | [灵签易占](plugins/weekbin/chinese-divination/README.zh-CN.md) | 梅花易数起卦与解卦:时间、数字、铜钱摇卦、每日一卦四法起卦,按体用生克断吉凶,另备六十四卦全文与干支历法 | [weekbin](https://github.com/weekbin) | | [会话轨迹](plugins/avatasia/mmc-trajectory/README.zh-CN.md) | 按轮次浏览一段会话的模型轨迹:消息流、思考过程、工具调用与结果、token 用量与每轮耗时 | [avatasia](https://github.com/avatasia) | | [CadQuery Viewer](plugins/hanzijie/cq-viewer/README.zh-CN.md) | 本地查看项目里的 STL / STEP(保留装配零件名称、颜色和真实边线),实时显示 CadQuery 脚本推送的模型,在模型上标注位置后一键发给 AI;AI 可通过 MCP 工具添加模型文件夹、打开模型,并内置 CadQuery 参数化建模 skill | [HanZijie](https://github.com/HanZijie) · [flowful-ai](https://github.com/flowful-ai) | +| [文本编辑器](plugins/trentchou/text-editor/README.zh-CN.md) | 与 Agent 实时共享的 Sublime 风格文本编辑器:Agent 读写、保存的就是你眼前的缓冲区;Review 时可以高亮代码并附上注释,不会改动文件 | [TrentChou](https://github.com/TrentChou) |
预览:Token 用量看板 diff --git a/plugins/trentchou/text-editor/.minimax-plugin/plugin.json b/plugins/trentchou/text-editor/.minimax-plugin/plugin.json new file mode 100644 index 0000000..62ae548 --- /dev/null +++ b/plugins/trentchou/text-editor/.minimax-plugin/plugin.json @@ -0,0 +1,23 @@ +{ + "schemaVersion": 1, + "name": "text-editor", + "displayName": "文本编辑器", + "version": "1.3.1", + "description": "Sublime 风格的本地文本编辑器:多标签、快速打开、语法高亮、JSON/YAML/TOML 折叠、多光标。Agent 可通过 MCP 工具与你共同读写、创建和保存同一份文件,并在 Review 时高亮代码、附上注释(只叠加显示,不改文件)。", + "author": "TrentChou", + "icon": "icon.png", + "category": "Code", + "exampleQueries": [ + "打开文本编辑器,加载当前项目", + "把编辑器里我正在看的 YAML 改成两空格缩进,然后保存", + "Review 一下当前文件,把有问题的地方在编辑器里高亮出来并写上原因" + ], + "apps": [], + "mcpServers": [ + "servers.mcp.json" + ], + "skills": [], + "hooks": [ + "hooks/hooks.json" + ] +} diff --git a/plugins/trentchou/text-editor/LICENSE b/plugins/trentchou/text-editor/LICENSE new file mode 100644 index 0000000..8e64250 --- /dev/null +++ b/plugins/trentchou/text-editor/LICENSE @@ -0,0 +1,25 @@ +MIT License + +Copyright (c) 2026 TrentChou + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Third-party code and fonts bundled in this package keep their own licenses; see +miniapp/client/vendor/THIRD_PARTY_LICENSES.txt, +miniapp/node/vendor/THIRD_PARTY_LICENSES.txt, and miniapp/client/fonts/OFL.txt. diff --git a/plugins/trentchou/text-editor/README.md b/plugins/trentchou/text-editor/README.md new file mode 100644 index 0000000..36f5beb --- /dev/null +++ b/plugins/trentchou/text-editor/README.md @@ -0,0 +1,115 @@ +# Text Editor + +[简体中文](README.zh-CN.md) | English + +A Sublime-style local text editor that you and the MiniMax Code Agent work in together. Both of you edit +the same live buffers: the Agent reads, edits, creates, and saves files through MCP tools while you see +every change as it happens, and during a code review it can highlight code and attach notes that never +touch the file. + +Author: [TrentChou](https://github.com/TrentChou) · Version: `1.3.1` + +![Text Editor with Agent review highlights (synthetic code)](docs/preview.jpg) + +## Install & use + +1. Copy this directory, including the hidden `.minimax-plugin/`, to `/plugins/text-editor/` + (`~/.minimax/plugins/text-editor/` by default), then restart MiniMax Code. +2. Open it from the right panel's "+" menu, `@文本编辑器` in a conversation, or ask the Agent to + "打开文本编辑器,加载当前项目". +3. Add folders to the sidebar, or let the Agent add the conversation's workspace. The Agent sees the + editor's MCP tools from the next conversation turn after installation. + +The interface is in Chinese. + +## Features + +- Tabs, sidebar file tree, quick open (`⌘P`), go to line (`⌃G`), command palette (`⇧⌘P`), find and + replace, multiple cursors (`⌘D`, `⇧⌘L`), folding, minimap, indentation guides. +- Syntax highlighting for about 40 languages and formats, including JSON, YAML, TOML, Markdown, + JavaScript/TypeScript, Python, Go, Rust, Java, C/C++, SQL, and shell. +- Hot exit: unsaved edits survive closing the page and restarting MiniMax Code. +- Disk awareness: files changed by other programs reload automatically, or show a conflict banner when + you have unsaved edits; deleted files can be re-created by saving. +- Follows your conversations: when the editor opens, the workspace of the conversation you most recently + used moves to the top of the sidebar. + +## Agent tools (MCP) + +| Tool | What it does | +| --- | --- | +| `get_editor_state` | Sidebar folders, open tabs (unsaved/conflict flags, highlight counts), active file, the user's selection, highlight settings | +| `list_directory` | List a folder inside the sidebar folders | +| `read_file` | Read a file; returns the live buffer, including unsaved edits, when it is open | +| `create_file` | Create a file and open it in a tab | +| `write_file` / `edit_file` | Replace content, or an exact snippet, in the buffer the user sees; stays unsaved unless `save: true` | +| `save_file` | Save a buffer; refuses to overwrite changes made on disk by other programs unless told to | +| `open_in_editor` | Open a file at a line, or add a folder to the sidebar | +| `highlight_code` | Highlight lines, a character range, or an exact snippet, with an optional note and kind (`info`, `warning`, `error`, `success`) | +| `list_highlights` / `clear_highlights` | See which highlights remain (users can dismiss them) and remove them | + +The tools only reach files inside the sidebar folders, and they refuse credential-like files such as +`.env`, `.secrets/`, `.ssh/`, and private keys. You can still open those yourself. + +## Review highlights + +Highlights are overlays: they never change the buffer or the file on disk. Each one follows the code as +it is edited, and a note appears as a card under the highlighted code. Press `F8` / `⇧F8` to jump between +highlights; the status bar shows the count and opens a menu. + +You control their lifetime, from the status bar menu or Settings: + +- **Keep highlights until cleared** (off by default). When off, a highlight disappears as soon as its + code is edited (by you, the Agent, or a reload from disk; edits right at its edges count too) or its + file is closed. When on, highlights stay, also across restarts, until you or the Agent + clear them; if the file changed while it was closed, a highlight is re-anchored to its unchanged code, + or dropped with a notice if that code was rewritten. +- **Show Agent highlights** hides or shows them without deleting anything. + +Dismiss a single note with its ×, or clear the current file or everything from the status bar menu. + +## Data & access + +- **Files read:** files you open and files inside the folders you add to the sidebar. Open files are + checked with `stat` every 1.5 seconds to detect changes made by other programs. +- **Files written:** only when you or the Agent save (`⌘S`, `save_file`, or `save: true`) or create a + file or folder. Saving writes a temporary file (`....tmp`) in the same directory as the + target, copies the original permission bits, then renames it over the target. Symbolic links are + followed, so the link stays a link and its target is updated. Hard links to the old file keep the old + content, and extended attributes are not copied. If the directory is not writable but the file is, + the file is written in place instead. New files are created exclusively and never overwrite an + existing file. Highlights never write anything to your files. +- **State** (under the Mini App data directory): `state.json` (sidebar folders, tabs, settings), `hot/` + (unsaved buffers for hot exit), `drafts/` (the default 草稿 folder), and `highlights.json` (only while + "keep highlights" is on; removed when it is turned off). +- **Hooks:** on `SessionStart` and `UserPromptSubmit`, `hooks/record-workspace.sh` (or + `record-workspace.ps1` on Windows) writes the conversation's workspace path to + `/active-workspace`. It reads nothing else and prints nothing. The editor reads that file + from the hook data directory next to its own data directory. +- **Processes:** `git -C ls-files -co --exclude-standard -z` (arguments passed as an + array, 5-second timeout) to build the quick-open list; without Git it walks the folder instead, + skipping `node_modules`, build outputs, and similar directories. The hooks run `sh` or `powershell`. +- **Network:** none. The page and the MCP endpoint are served only on the Host-assigned + `127.0.0.1` port; cross-site requests and MCP calls from other web origins are rejected. + +## Tested environment + +- MiniMax Code 3.1.1 on macOS 26.5 (Apple silicon): installed, opened, and used through the page and + through the Agent's MCP tools in a real conversation, in light and dark themes. +- An isolated runtime test covers the highlight tools, edit mapping, both lifetimes, restart recovery, + external changes while a file is closed, and atomic saves (permission bits, symlinks, no leftover + temporary files, read-only directories). +- Windows and Linux are untested; the Windows hook script has not been run. + +## Building the vendored code + +`miniapp/client/vendor/codemirror.js` and `miniapp/node/vendor/cm-state.mjs` are prebuilt bundles of +CodeMirror 6. To rebuild them: `cd vendor-src && npm ci && node build.mjs ../miniapp`. Versions are +pinned in `vendor-src/package-lock.json`. + +## License + +[MIT](./LICENSE). Bundled third-party code keeps its own licenses: CodeMirror 6, Lezer, and the minimap +and indentation-marker extensions (MIT, see `miniapp/client/vendor/THIRD_PARTY_LICENSES.txt` and +`miniapp/node/vendor/THIRD_PARTY_LICENSES.txt`), and JetBrains Mono (SIL Open Font License 1.1, see +`miniapp/client/fonts/OFL.txt`). diff --git a/plugins/trentchou/text-editor/README.zh-CN.md b/plugins/trentchou/text-editor/README.zh-CN.md new file mode 100644 index 0000000..304f383 --- /dev/null +++ b/plugins/trentchou/text-editor/README.zh-CN.md @@ -0,0 +1,73 @@ +# 文本编辑器 + +[English](README.md) | 简体中文 + +一个 Sublime 风格的本地文本编辑器,由你和 MiniMax Code 的 Agent 一起使用。双方编辑的是同一份实时缓冲区:Agent 通过 MCP 工具读取、修改、新建和保存文件,你能实时看到每一处改动。Review 代码时,Agent 还可以高亮代码并附上注释,这些都不会写进文件。 + +作者:[TrentChou](https://github.com/TrentChou) · 版本:`1.3.1` + +![带有 Agent 评审高亮的文本编辑器(合成代码)](docs/preview.jpg) + +## 安装与使用 + +1. 把整个目录(包括隐藏的 `.minimax-plugin/`)复制到 `/plugins/text-editor/`(默认是 `~/.minimax/plugins/text-editor/`),然后重启 MiniMax Code。 +2. 从右侧面板的「+」打开,或在对话里 `@文本编辑器`,也可以直接对 Agent 说「打开文本编辑器,加载当前项目」。 +3. 在侧边栏添加文件夹,或者让 Agent 把当前对话的工作区加进来。安装之后,从下一轮对话开始,Agent 就能使用编辑器的 MCP 工具。 + +## 功能 + +- 多标签、侧边栏文件树、快速打开(`⌘P`)、跳转到行(`⌃G`)、命令面板(`⇧⌘P`)、查找替换、多光标(`⌘D`、`⇧⌘L`)、代码折叠、小地图、缩进参考线。 +- 约 40 种语言和格式的语法高亮,包括 JSON、YAML、TOML、Markdown、JavaScript/TypeScript、Python、Go、Rust、Java、C/C++、SQL、Shell 等。 +- 热退出:关闭页面或重启 MiniMax Code 后,未保存的修改仍然保留。 +- 感知磁盘变化:其他程序修改了文件时自动重新加载;如果你也有未保存的修改,会提示冲突。被删除的文件保存后会重新创建。 +- 跟随对话:打开编辑器时,你最近使用的对话的工作区会排到侧边栏最上方。 + +## Agent 工具(MCP) + +| 工具 | 作用 | +| --- | --- | +| `get_editor_state` | 侧边栏文件夹、已打开的标签(未保存/冲突标记、高亮数)、当前文件、用户选区、高亮设置 | +| `list_directory` | 列出侧边栏文件夹内的目录 | +| `read_file` | 读取文件;文件已打开时返回实时缓冲区,包括未保存的修改 | +| `create_file` | 新建文件并在标签中打开 | +| `write_file` / `edit_file` | 替换用户看到的缓冲区的全部内容或一段精确文本;除非传 `save: true`,否则保持未保存 | +| `save_file` | 保存缓冲区;如果磁盘上的文件已被其他程序修改,除非明确要求,否则拒绝覆盖 | +| `open_in_editor` | 打开文件并跳到指定行,或把文件夹加入侧边栏 | +| `highlight_code` | 按行、字符范围或精确片段高亮代码,可附带注释和类型(`info`、`warning`、`error`、`success`) | +| `list_highlights` / `clear_highlights` | 查看还存在哪些高亮(用户可以自行关掉),以及清除高亮 | + +这些工具只能访问侧边栏文件夹内的文件,并且拒绝读写 `.env`、`.secrets/`、`.ssh/`、私钥等凭据类文件。这类文件你仍然可以自己打开。 + +## Review 高亮 + +高亮只是叠加显示,不会修改缓冲区或磁盘上的文件。代码被编辑时,高亮会跟着移动;注释以卡片形式显示在被高亮的代码下面。按 `F8` / `⇧F8` 在高亮之间跳转,状态栏会显示高亮数,点击可以打开菜单。 + +高亮的生命周期由你决定,可以在状态栏菜单或设置里切换: + +- **保留高亮,直到手动清除**(默认关闭):关闭时,被高亮的代码一旦被编辑(你改、Agent 改、从磁盘重新加载都算,紧贴边缘的修改也算),或者文件被关闭,这处高亮就自动消失。打开时,高亮会一直保留,重启后也在,直到你或 Agent 清除;如果文件在关闭期间被改过,高亮会重新定位到原样未变的代码上,那段代码被改写时则失效并提示你。 +- **显示 Agent 高亮**:只控制显示或隐藏,不会删除任何高亮。 + +单条注释可以点它的 × 关掉,也可以从状态栏菜单清除当前文件或全部高亮。 + +## 数据与访问 + +- **读取的文件**:你打开的文件,以及你加入侧边栏的文件夹内的文件。已打开的文件每 1.5 秒 `stat` 一次,用来发现其他程序做的修改。 +- **写入的文件**:只在你或 Agent 保存(`⌘S`、`save_file` 或 `save: true`)以及新建文件、文件夹时写入。保存时先在目标所在目录写一个临时文件(`.<文件名>..<序号>.tmp`),复制原文件的权限位,再重命名覆盖目标。软链接会被跟随:链接本身保持不变,更新的是它指向的目标。指向旧文件的硬链接会保留旧内容,扩展属性不会复制。如果目录不可写但文件可写,会改为直接覆盖写入。新建文件采用独占方式创建,不会覆盖已有文件。高亮不会向你的文件写入任何内容。 +- **状态**(存放在 Mini App 数据目录):`state.json`(侧边栏文件夹、标签、设置)、`hot/`(热退出用的未保存内容)、`drafts/`(默认的「草稿」文件夹)、`highlights.json`(只在开启「保留高亮」时存在,关闭后删除)。 +- **Hook**:在 `SessionStart` 和 `UserPromptSubmit` 时,`hooks/record-workspace.sh`(Windows 上是 `record-workspace.ps1`)把当前对话的工作区路径写入 `/active-workspace`,不读取其他内容,也不输出任何东西。编辑器从自己数据目录旁边的 Hook 数据目录读取这个文件。 +- **子进程**:执行 `git -C <侧边栏文件夹> ls-files -co --exclude-standard -z`(参数以数组传递,超时 5 秒)生成快速打开列表;没有 Git 时改为遍历目录,跳过 `node_modules`、构建产物等目录。Hook 会运行 `sh` 或 `powershell`。 +- **网络**:无。页面和 MCP 端点只在宿主分配的 `127.0.0.1` 端口上提供服务,跨站请求和来自其他网页来源的 MCP 调用都会被拒绝。 + +## 测试环境 + +- macOS 26.5(Apple 芯片)上的 MiniMax Code 3.1.1:完成安装、打开,在亮色和暗色主题下通过页面使用,并在真实对话中通过 Agent 的 MCP 工具使用。 +- 隔离的运行时测试覆盖了:高亮工具、编辑后的位置映射、两种生命周期、重启后恢复、文件关闭期间的外部修改,以及原子保存(权限位、软链接、不残留临时文件、只读目录)。 +- 未在 Windows 和 Linux 上测试,Windows 的 Hook 脚本也没有实际运行过。 + +## 构建内置的第三方代码 + +`miniapp/client/vendor/codemirror.js` 和 `miniapp/node/vendor/cm-state.mjs` 是预先构建好的 CodeMirror 6 包。重新构建方法:`cd vendor-src && npm ci && node build.mjs ../miniapp`。版本锁定在 `vendor-src/package-lock.json`。 + +## 许可证 + +[MIT](./LICENSE)。内置的第三方代码沿用各自的许可证:CodeMirror 6、Lezer、小地图与缩进参考线扩展(MIT,见 `miniapp/client/vendor/THIRD_PARTY_LICENSES.txt` 和 `miniapp/node/vendor/THIRD_PARTY_LICENSES.txt`);JetBrains Mono(SIL Open Font License 1.1,见 `miniapp/client/fonts/OFL.txt`)。 diff --git a/plugins/trentchou/text-editor/docs/preview.jpg b/plugins/trentchou/text-editor/docs/preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c415c51b4fd18dec715a60a5705b4ca45119b0d6 GIT binary patch literal 250778 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 /dev/null +[ -n "$PLUGIN_DATA" ] && [ -n "$MINIMAX_PROJECT_DIR" ] || exit 0 +mkdir -p "$PLUGIN_DATA" || exit 0 +tmp="$PLUGIN_DATA/active-workspace.$$" +printf '%s' "$MINIMAX_PROJECT_DIR" > "$tmp" && mv -f "$tmp" "$PLUGIN_DATA/active-workspace" +exit 0 diff --git a/plugins/trentchou/text-editor/icon.png b/plugins/trentchou/text-editor/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7958be2d55b0610eb5ac0857aabfc8f39e3357e4 GIT binary patch literal 18284 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 document.querySelector(selector); +const tabsEl = $('#tabs'); +const treeEl = $('#tree'); +const editorEl = $('#editor'); +const welcomeEl = $('#welcome'); +const paletteEl = $('#palette'); +const paletteInput = $('#palette-input'); +const paletteList = $('#palette-list'); +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +// ---- icons ------------------------------------------------------------------------------------- + +const svg = (body, size = 16) => + ``; +const ICONS = { + file: svg('', 14), + folder: svg('', 14), + newFile: svg(''), + newFolder: svg(''), + addFolder: svg(''), + refresh: svg(''), + command: svg(''), + settings: svg(''), + close: svg('', 14), + chevron: '', + chevronDown: '', + dot: '', +}; +const CMD_ICONS = { + 'file.new': ICONS.newFile, 'file.newFolder': ICONS.newFolder, 'folder.add': ICONS.addFolder, + 'tree.refresh': ICONS.refresh, 'palette.commands': ICONS.command, prefs: ICONS.settings, +}; + +// ---- small helpers ----------------------------------------------------------------------------- + +const sepIndex = (p) => Math.max(p.lastIndexOf('/'), p.lastIndexOf('\\')); +const baseName = (p) => p.slice(sepIndex(p) + 1) || p; +const dirName = (p) => { + const i = sepIndex(p); + return i <= 0 ? p.slice(0, i + 1) || p : p.slice(0, i); +}; +const joinPath = (dir, name) => (dir.endsWith('/') ? dir + name : `${dir}/${name}`); +const clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n)); + +async function api(method, url, body) { + let res; + try { + res = await fetch(url, { + method, + headers: body === undefined ? undefined : { 'content-type': 'application/json' }, + body: body === undefined ? undefined : JSON.stringify(body), + }); + } catch { + const error = new Error('无法连接编辑器服务'); + error.code = 'NETWORK'; + throw error; + } + let data = null; + try { + data = await res.json(); + } catch { + data = null; + } + if (!res.ok) { + const error = new Error(data?.error?.message ?? `请求失败(${res.status})`); + error.code = data?.error?.code ?? `HTTP_${res.status}`; + throw error; + } + return data; +} +const get = (path, params) => api('GET', `${path}?${new URLSearchParams(params)}`); +const post = (path, body = {}) => api('POST', path, body); + +// ---- app state --------------------------------------------------------------------------------- + +const app = { + settings: null, + folders: [], + tabs: [], + tabStatus: new Map(), + active: null, + requestedActive: null, + requestedAt: 0, + tree: new Map(), + treeFocus: null, + index: new Map(), + lastUserEdit: 0, + everConnected: false, + chord: null, + chordTimer: null, + langOverride: new Map(), + indentOverride: new Map(), + highlightTotal: 0, +}; +/** path → { path, state, loading, scroll, size, langId, detectedIndent, eol, bom, closed, pushing, pushTimer, pulling } */ +const docs = new Map(); +let current = null; + +function folderOf(path) { + let best = null; + for (const f of app.folders) { + if ((path === f.path || path.startsWith(`${f.path}/`)) && (!best || f.path.length > best.path.length)) best = f; + } + return best; +} + +function displayPath(path) { + const f = folderOf(path); + if (!f) return path; + const rel = path.slice(f.path.length + 1); + return rel ? `${f.name}/${rel}` : f.name; +} + +const stateOf = (doc) => (doc === current ? view.state : doc.state); + +function isDirty(path) { + if (app.tabStatus.get(path)?.dirty) return true; + const doc = docs.get(path); + const st = doc && (doc === current || doc.state) ? stateOf(doc) : null; + return !!st && CB.sendableUpdates(st).length > 0; +} + +// ---- toasts and status ------------------------------------------------------------------------- + +function toast(message, level = 'info', action) { + const host = level === 'error' ? $('#alerts') : $('#toasts'); + const el = document.createElement('div'); + el.className = `toast ${level}`; + el.textContent = message; + if (action) { + const button = document.createElement('button'); + button.type = 'button'; + button.textContent = action.label; + button.addEventListener('click', () => { + el.remove(); + action.run(); + }); + el.append(button); + } + host.append(el); + while (host.children.length > 4) host.firstElementChild.remove(); + setTimeout(() => el.remove(), level === 'error' ? 7000 : 4500); +} +const showError = (error) => toast(error?.message ?? String(error), 'error'); + +let flashTimer = null; +function flash(message) { + const el = $('#st-message'); + el.textContent = message; + clearTimeout(flashTimer); + flashTimer = setTimeout(() => { + el.textContent = ''; + }, 4000); +} + +// ---- editor configuration ---------------------------------------------------------------------- + +const darkQuery = matchMedia('(prefers-color-scheme: dark)'); +const themeName = () => { + const t = app.settings?.theme ?? 'system'; + return t === 'system' ? (darkQuery.matches ? 'dark' : 'light') : t; +}; + +// ---- agent highlights -------------------------------------------------------------------------- +// Overlays added through the Agent's highlight_code tool; they never change the document. The service owns +// the list (it drops highlights whose code was edited unless the user keeps them); this field only maps +// positions through edits between service events. + +const setHighlights = S.StateEffect.define(); +const HIGHLIGHT_LABELS = { info: '说明', warning: '注意', error: '问题', success: '良好' }; + +class HighlightNote extends V.WidgetType { + constructor(item) { + super(); + this.item = item; + } + + eq(other) { + return other.item.id === this.item.id && other.item.kind === this.item.kind && other.item.note === this.item.note; + } + + toDOM() { + // CodeMirror measures block widgets without their margins, so spacing lives in this wrapper's + // padding; margins here would shift the line-number gutter below every note. + const el = document.createElement('div'); + el.className = 'cm-agent-note'; + const card = document.createElement('div'); + card.className = `cm-agent-note-card hl-${this.item.kind}`; + const kind = document.createElement('div'); + kind.className = 'cm-agent-note-kind'; + kind.textContent = `Agent · ${HIGHLIGHT_LABELS[this.item.kind] ?? HIGHLIGHT_LABELS.info}`; + const text = document.createElement('div'); + text.className = 'cm-agent-note-text'; + text.textContent = this.item.note; + const close = document.createElement('button'); + close.type = 'button'; + close.className = 'cm-agent-note-close'; + close.title = '移除这个高亮'; + close.setAttribute('aria-label', '移除这个高亮'); + close.innerHTML = ICONS.close; + close.addEventListener('click', () => void removeHighlights({ ids: [this.item.id] })); + card.append(kind, text, close); + el.append(card); + return el; + } + + ignoreEvent() { + return true; + } +} + +function highlightDeco(doc, items) { + const ranges = []; + for (const h of items) { + if (h.from < 0 || h.to > doc.length || h.to < h.from) continue; + const kind = `hl-${h.kind}`; + const first = doc.lineAt(h.from); + const last = doc.lineAt(h.lines ? h.to : Math.max(h.from, h.to - 1)); + if (h.lines) { + for (let n = first.number; n <= last.number; n++) { + const edges = `${n === first.number ? ' cm-agent-line-first' : ''}${n === last.number ? ' cm-agent-line-last' : ''}`; + ranges.push(V.Decoration.line({ class: `cm-agent-line ${kind}${edges}` }).range(doc.line(n).from)); + } + } else if (h.to > h.from) { + ranges.push(V.Decoration.mark({ class: `cm-agent-mark ${kind}` }).range(h.from, h.to)); + } + if (h.note) ranges.push(V.Decoration.widget({ widget: new HighlightNote(h), block: true, side: 1 }).range(last.to)); + } + return V.Decoration.set(ranges, true); +} + +/** Same mapping rule as the service, so both sides agree between events. */ +function mapHighlight(h, changes) { + const from = changes.mapPos(h.from, 1); + const to = Math.max(from, changes.mapPos(h.to, -1)); + return h.to > h.from && to === from ? null : { ...h, from, to }; +} + +const highlightField = S.StateField.define({ + create: () => ({ items: [], deco: V.Decoration.none }), + update(value, tr) { + for (const effect of tr.effects) { + if (effect.is(setHighlights)) return { items: effect.value, deco: highlightDeco(tr.state.doc, effect.value) }; + } + if (!tr.docChanged || !value.items.length) return value; + const items = value.items.map((h) => mapHighlight(h, tr.changes)).filter(Boolean); + return { items, deco: highlightDeco(tr.state.doc, items) }; + }, +}); +const highlightsOf = (st) => st?.field(highlightField, false)?.items ?? []; + +// Notes are sticky so they stay readable when a long line scrolls the editor sideways; they must stop +// right of the (also sticky) gutters, whose width changes with the line count. +const noteOffset = V.ViewPlugin.fromClass(class { + constructor(view) { + this.width = -1; + this.measure(view); + } + + update(update) { + if (update.geometryChanged) this.measure(update.view); + } + + measure(view) { + view.requestMeasure({ + read: () => view.dom.querySelector('.cm-gutters')?.getBoundingClientRect().width ?? 0, + write: (width) => { + if (width === this.width) return; + this.width = width; + view.dom.style.setProperty('--agent-note-left', `${width}px`); + }, + }); + } +}); + +const comp = { + lang: new S.Compartment(), + theme: new S.Compartment(), + indent: new S.Compartment(), + wrap: new S.Compartment(), + minimap: new S.Compartment(), + guides: new S.Compartment(), + whitespace: new S.Compartment(), + lineNumbers: new S.Compartment(), + highlights: new S.Compartment(), +}; + +function indentFor(doc) { + const o = app.indentOverride.get(doc.path) ?? doc.detectedIndent; + return { insertSpaces: o?.insertSpaces ?? app.settings.insertSpaces, size: o?.size ?? app.settings.tabSize }; +} + +const extFor = { + theme: () => (themeName() === 'dark' ? darkTheme : lightTheme), + indent: (doc) => { + const { insertSpaces, size } = indentFor(doc); + return [S.EditorState.tabSize.of(size), L.indentUnit.of(insertSpaces ? ' '.repeat(size) : '\t')]; + }, + wrap: () => (app.settings.wordWrap ? V.EditorView.lineWrapping : []), + minimap: (doc) => + app.settings.minimap && doc.size <= LARGE_DOC + ? CM.showMinimap.of({ create: () => ({ dom: document.createElement('div') }), displayText: 'blocks', showOverlay: 'always' }) + : [], + guides: () => + app.settings.indentGuides + ? CM.indentationMarkers({ + highlightActiveBlock: true, + markerType: 'fullScope', + thickness: 1, + colors: { light: 'var(--ed-guide)', dark: 'var(--ed-guide)', activeLight: 'var(--ed-guide-active)', activeDark: 'var(--ed-guide-active)' }, + }) + : [], + whitespace: () => (app.settings.showWhitespace ? [V.highlightWhitespace(), V.highlightTrailingWhitespace()] : []), + lineNumbers: () => (app.settings.lineNumbers ? V.lineNumbers() : []), + // Hiding only removes the decorations; the field keeps tracking the highlights. + highlights: () => (app.settings.highlightsVisible !== false ? [V.EditorView.decorations.from(highlightField, (v) => v.deco), noteOffset] : []), +}; + +const settingsEffects = (doc) => Object.keys(extFor).map((key) => comp[key].reconfigure(extFor[key](doc))); + +function foldMarker(open) { + const el = document.createElement('span'); + el.className = 'fold-marker'; + el.innerHTML = open ? ICONS.chevronDown : ICONS.chevron; + el.title = open ? '折叠' : '展开'; + return el; +} + +function splitSelectionByLine(target) { + const { state } = target; + const ranges = []; + for (const r of state.selection.ranges) { + if (r.empty) { + ranges.push(r); + continue; + } + const first = state.doc.lineAt(r.from).number; + const last = state.doc.lineAt(r.to).number; + for (let n = first; n <= last; n++) { + const line = state.doc.line(n); + const from = Math.max(line.from, r.from); + const to = Math.min(line.to, r.to); + if (n === last && n !== first && to === line.from) continue; + ranges.push(S.EditorSelection.range(from, to)); + } + } + if (ranges.length < 2) return false; + target.dispatch({ selection: S.EditorSelection.create(ranges, ranges.length - 1) }); + return true; +} + +function insertLineBefore(target) { + const { state } = target; + target.dispatch( + state.changeByRange((range) => { + const line = state.doc.lineAt(range.head); + const indent = /^\s*/.exec(line.text)[0]; + return { changes: { from: line.from, insert: `${indent}\n` }, range: S.EditorSelection.cursor(line.from + indent.length) }; + }), + { scrollIntoView: true, userEvent: 'input' }, + ); + return true; +} + +const sublimeKeymap = [ + { key: 'Mod-d', run: Q.selectNextOccurrence, preventDefault: true }, + { key: 'Mod-Shift-l', run: splitSelectionByLine, preventDefault: true }, + { key: 'Mod-l', run: C.selectLine, preventDefault: true }, + { key: 'Mod-Shift-k', run: C.deleteLine, preventDefault: true }, + { key: 'Mod-Shift-d', run: C.copyLineDown, preventDefault: true }, + { mac: 'Ctrl-Cmd-ArrowUp', key: 'Ctrl-Shift-ArrowUp', run: C.moveLineUp, preventDefault: true }, + { mac: 'Ctrl-Cmd-ArrowDown', key: 'Ctrl-Shift-ArrowDown', run: C.moveLineDown, preventDefault: true }, + { key: 'Mod-Shift-Enter', run: insertLineBefore, preventDefault: true }, + { key: 'Mod-Alt-f', run: Q.openSearchPanel, preventDefault: true }, + { mac: 'Ctrl-Cmd-g', key: 'Alt-F3', run: Q.selectSelectionMatches, preventDefault: true }, + { key: 'Ctrl-m', run: C.cursorMatchingBracket }, +]; + +function createDocState(doc, text, version, highlights = []) { + return S.EditorState.create({ + doc: text, + extensions: [ + comp.lineNumbers.of(extFor.lineNumbers()), + L.foldGutter({ markerDOM: foldMarker }), + V.highlightActiveLineGutter(), + V.highlightSpecialChars(), + C.history(), + V.drawSelection(), + V.dropCursor(), + S.EditorState.allowMultipleSelections.of(true), + L.indentOnInput(), + L.syntaxHighlighting(highlight), + L.bracketMatching(), + A.closeBrackets(), + A.autocompletion(), + S.EditorState.languageData.of(() => [{ autocomplete: A.completeAnyWord }]), + V.rectangularSelection(), + V.crosshairCursor(), + V.highlightActiveLine(), + Q.highlightSelectionMatches(), + Q.search({ top: true }), + V.keymap.of([ + ...sublimeKeymap, ...A.closeBracketsKeymap, ...C.defaultKeymap, ...Q.searchKeymap, + ...C.historyKeymap, ...L.foldKeymap, ...A.completionKeymap, C.indentWithTab, + ]), + comp.lang.of(languageById(doc.langId).load()), + comp.theme.of(extFor.theme()), + comp.indent.of(extFor.indent(doc)), + comp.wrap.of(extFor.wrap()), + comp.minimap.of(extFor.minimap(doc)), + comp.guides.of(extFor.guides()), + comp.whitespace.of(extFor.whitespace()), + highlightField.init((state) => ({ items: highlights, deco: highlightDeco(state.doc, highlights) })), + comp.highlights.of(extFor.highlights()), + V.EditorView.contentAttributes.of({ 'aria-label': `编辑 ${baseName(doc.path)}` }), + // Dropped files become new files (handled at window level) instead of being inserted as text. + V.EditorView.domEventHandlers({ drop: (event) => !!event.dataTransfer?.files?.length }), + CB.collab({ startVersion: version }), + V.EditorView.updateListener.of((update) => onEditorUpdate(doc, update)), + ], + }); +} + +const view = new V.EditorView({ parent: editorEl }); + +function reconfigureAll() { + for (const doc of docs.values()) { + if (doc === current) view.dispatch({ effects: settingsEffects(doc) }); + else if (doc.state) doc.state = doc.state.update({ effects: settingsEffects(doc) }).state; + } + updateStatusBar(); +} + +function reconfigureDoc(doc, key) { + const effects = comp[key].reconfigure(key === 'lang' ? languageById(doc.langId).load() : extFor[key](doc)); + if (doc === current) view.dispatch({ effects }); + else if (doc.state) doc.state = doc.state.update({ effects }).state; + updateStatusBar(); +} + +function applyChrome() { + const s = app.settings; + const root = document.documentElement; + root.dataset.theme = themeName(); + const font = s.codeFont === 'custom' ? (s.fontFamily ? `${s.fontFamily}, ${DEFAULT_MONO}` : DEFAULT_MONO) : FONT_STACKS[s.codeFont] ?? DEFAULT_MONO; + root.style.setProperty('--ed-font', font); + root.style.setProperty('--ed-font-size', `${s.fontSize}px`); + root.style.setProperty('--ed-line-height', String(s.lineHeight)); + root.style.setProperty('--sidebar-width', `${s.sidebarWidth}px`); + $('#app').classList.toggle('sidebar-hidden', !s.sidebarVisible); + const resizer = $('#resizer'); + resizer.setAttribute('aria-valuenow', String(s.sidebarWidth)); + resizer.setAttribute('aria-valuemin', '160'); + resizer.setAttribute('aria-valuemax', '640'); + view.requestMeasure(); +} + +darkQuery.addEventListener('change', () => { + if (app.settings?.theme !== 'system') return; + applyChrome(); + reconfigureAll(); +}); + +async function updateSettings(patch) { + const previous = app.settings; + app.settings = { ...app.settings, ...patch }; + applyChrome(); + reconfigureAll(); + try { + await post('/api/settings', { patch }); + } catch (error) { + app.settings = previous; + applyChrome(); + reconfigureAll(); + showError(error); + } +} + +const toggleSetting = (key) => updateSettings({ [key]: !app.settings[key] }); +const changeFont = (delta) => updateSettings({ fontSize: clamp(app.settings.fontSize + delta, 8, 40) }); + +// ---- document sync (CodeMirror collab) --------------------------------------------------------- + +function onEditorUpdate(doc, update) { + if (doc !== current) return; + if (update.docChanged) { + if (update.transactions.some((tr) => tr.docChanged && !tr.annotation(S.Transaction.remote))) { + app.lastUserEdit = Date.now(); + schedulePush(doc); + } + renderTabStatus(doc.path); + } + if (update.docChanged || update.selectionSet) { + updateStatusBar(); + scheduleViewReport(); + } +} + +const fromWire = (u) => ({ clientID: u.clientID, changes: S.ChangeSet.fromJSON(u.changes) }); + +function schedulePush(doc) { + if (doc.pushTimer) return; + doc.pushTimer = setTimeout(() => { + doc.pushTimer = null; + void pushDoc(doc); + }, 30); +} + +function pushDoc(doc) { + if (doc.pushing) { + doc.pushAgain = true; + return doc.pushing; + } + doc.pushing = (async () => { + for (let attempt = 0; attempt < 20; attempt++) { + if (doc.closed || !doc.state) return; + const st = stateOf(doc); + const updates = CB.sendableUpdates(st); + if (!updates.length) return; + const version = CB.getSyncedVersion(st); + let res; + try { + res = await post('/api/doc/push', { + path: doc.path, + version, + updates: updates.map((u) => ({ clientID: u.clientID, changes: u.changes.toJSON() })), + }); + } catch (error) { + if (error.code === 'DESYNC' || error.code === 'NOT_OPEN') { + await reloadDoc(doc, '编辑器服务的文档状态已变化,已重新加载该文件'); + return; + } + await sleep(1000); + continue; + } + if (res.ok) applyRemote(doc, version, updates.map((u) => ({ clientID: u.clientID, changes: u.changes }))); + else await pullDoc(doc); + } + })().finally(() => { + doc.pushing = null; + if (doc.pushAgain) { + doc.pushAgain = false; + schedulePush(doc); + } + }); + return doc.pushing; +} + +async function flushPush(doc) { + for (let i = 0; i < 60; i++) { + if (!doc.state || doc.closed) return true; + if (!CB.sendableUpdates(stateOf(doc)).length) return true; + await pushDoc(doc); + if (i > 3) await sleep(100); + } + return false; +} + +function applyRemote(doc, version, updates) { + if (!doc.state || doc.closed) return; + const st = stateOf(doc); + const synced = CB.getSyncedVersion(st); + if (version > synced) { + void pullDoc(doc); + return; + } + const fresh = updates.slice(synced - version); + if (!fresh.length) return; + const tr = CB.receiveUpdates(st, fresh); + if (doc === current) view.dispatch(tr); + else doc.state = tr.state; + renderTabStatus(doc.path); + const pending = doc.pendingHighlights; + if (pending && pending.version <= CB.getSyncedVersion(stateOf(doc))) receiveHighlights(doc, pending.version, pending.items); +} + +/** A highlight list from the service is at its document version; unconfirmed local edits are mapped on top. */ +function receiveHighlights(doc, version, items, refetch = true) { + if (doc.closed) return; + const st = doc.state ? stateOf(doc) : null; + const synced = st ? CB.getSyncedVersion(st) : -1; + if (!st || version > synced) { + doc.pendingHighlights = { version, items }; // applied once the document catches up (applyRemote / load) + return; + } + doc.pendingHighlights = null; + if (version < synced) { + // Our own edits were confirmed before this event arrived; ask for the list at the current version. + if (refetch) get('/api/highlights', { path: doc.path }).then((res) => receiveHighlights(doc, res.version, res.items, false)).catch(() => undefined); + return; + } + const unconfirmed = CB.sendableUpdates(st); + const changes = unconfirmed.length ? unconfirmed.map((u) => u.changes).reduce((a, b) => a.compose(b)) : null; + const effects = setHighlights.of(changes ? items.map((h) => mapHighlight(h, changes)).filter(Boolean) : items); + if (doc === current) { + view.dispatch({ effects }); + renderHighlightStatus(); + } else { + doc.state = doc.state.update({ effects }).state; + } +} + +/** A freshly loaded document already carries the list at its version; drop events it supersedes. */ +function settlePendingHighlights(doc, version) { + if (doc.pendingHighlights && doc.pendingHighlights.version <= version) doc.pendingHighlights = null; +} + +function pullDoc(doc) { + if (doc.pulling) return doc.pulling; + doc.pulling = (async () => { + if (!doc.state || doc.closed) return; + const version = CB.getSyncedVersion(stateOf(doc)); + const res = await get('/api/doc/pull', { path: doc.path, version }); + if (res.reset) await reloadDoc(doc, '编辑器服务已重启,已重新加载该文件'); + else applyRemote(doc, res.version, res.updates.map(fromWire)); + })() + .catch(() => undefined) + .finally(() => { + doc.pulling = null; + }); + return doc.pulling; +} + +async function reloadDoc(doc, message) { + try { + const res = await post('/api/doc/open', { path: doc.path, tab: false }); + if (doc.closed) return; + doc.size = res.text.length; + doc.eol = res.eol; + doc.bom = res.bom; + setTabStatus(doc.path, res); + doc.state = createDocState(doc, res.text, res.version, res.highlights); + settlePendingHighlights(doc, res.version); + if (doc === current) view.setState(doc.state); + if (message) toast(message, 'warn'); + } catch (error) { + showError(error); + } +} + +async function ensureDoc(path, { focus = false } = {}) { + let doc = docs.get(path); + if (doc?.state) return doc; + if (doc?.loading) return doc.loading; + doc = { path, state: null, loading: null, scroll: null, size: 0, langId: null, detectedIndent: null, eol: 'LF', bom: false, closed: false }; + docs.set(path, doc); + const loading = (async () => { + const res = await post('/api/doc/open', { path, tab: true, focus }); + doc.size = res.text.length; + doc.eol = res.eol; + doc.bom = res.bom; + doc.langId = app.langOverride.get(path) ?? detectLanguage(path, res.text.slice(0, 200)); + doc.detectedIndent = detectIndent(res.text.slice(0, 200_000)); + setTabStatus(path, res); + doc.state = createDocState(doc, res.text, res.version, res.highlights); + settlePendingHighlights(doc, res.version); + return doc; + })(); + doc.loading = loading; + try { + return await loading; + } catch (error) { + if (docs.get(path) === doc) docs.delete(path); + throw error; + } finally { + doc.loading = null; + } +} + +// ---- tabs and activation ----------------------------------------------------------------------- + +let activationSeq = 0; + +async function activate(path, { report = true, focus = true, line = null } = {}) { + const seq = ++activationSeq; + if (report) { + app.requestedActive = path; + app.requestedAt = Date.now(); + } + try { + let doc; + try { + doc = await ensureDoc(path, { focus: report }); + } catch (error) { + if (seq === activationSeq) showOpenError(path, error); + return; + } + if (seq !== activationSeq || doc.closed) return; + if (current !== doc) { + if (current && !current.closed) { + current.state = view.state; + current.scroll = view.scrollSnapshot(); + } + current = doc; + view.setState(doc.state); + if (doc.scroll) view.dispatch({ effects: doc.scroll }); + } + showEditor(); + if (line) gotoLine(line, focus); + renderTabs(); + updateStatusBar(); + renderBanner(); + markTreeActive(); + if (focus) view.focus(); + if (report && app.active !== path) { + app.active = path; + await post('/api/tabs/activate', { path }).catch(showError); + } + } finally { + if (seq === activationSeq && report) app.requestedActive = null; + } +} + +function setTabStatus(path, s) { + app.tabStatus.set(path, { dirty: !!s.dirty, diskChanged: !!s.diskChanged, deleted: !!s.deleted }); + renderTabStatus(path); + if (current?.path === path) renderBanner(); +} + +function tabLabel(path) { + const name = baseName(path); + const twins = app.tabs.filter((p) => p !== path && baseName(p) === name); + return twins.length ? `${name} — ${baseName(dirName(path))}` : name; +} + +function renderTabs() { + const frag = document.createDocumentFragment(); + for (const path of app.tabs) { + const tab = document.createElement('div'); + const selected = current ? current.path === path : app.active === path; + tab.className = 'tab'; + tab.setAttribute('role', 'tab'); + tab.setAttribute('aria-selected', String(selected)); + tab.setAttribute('aria-controls', 'editor-area'); + tab.tabIndex = selected ? 0 : -1; + tab.dataset.path = path; + tab.title = path; + const name = document.createElement('span'); + name.className = 'tab-name'; + name.textContent = tabLabel(path); + const close = document.createElement('button'); + close.type = 'button'; + close.className = 'tab-close'; + close.tabIndex = -1; + close.setAttribute('aria-label', `关闭 ${baseName(path)}`); + close.innerHTML = ICONS.close.replace(' .tree-row`); + if (row) { + const badge = row.querySelector('.tree-badge'); + if (dirty && !badge) row.insertAdjacentHTML('beforeend', '●未保存'); + else if (!dirty && badge) badge.remove(); + } +} + +function cycleTab(delta) { + if (!app.tabs.length) return; + const index = app.tabs.indexOf(current?.path ?? app.active); + void activate(app.tabs[(index + delta + app.tabs.length) % app.tabs.length]); +} + +async function closeTab(path) { + let discard = false; + if (isDirty(path)) { + const choice = await confirmDialog({ + title: '保存更改?', + message: `“${baseName(path)}” 有未保存的更改。如果不保存,这些更改会丢失。`, + buttons: [ + { value: 'cancel', label: '取消' }, + { value: 'discard', label: '不保存', kind: 'danger' }, + { value: 'save', label: '保存', kind: 'primary' }, + ], + }); + if (choice === 'save') { + if (!(await saveDoc(path))) return; + } else if (choice === 'discard') discard = true; + else return; + } + const doc = docs.get(path); + if (doc && !discard) await flushPush(doc); + try { + await post('/api/tabs/close', { path, discard }); + } catch (error) { + showError(error); + } +} + +function showEditor() { + const wasHidden = editorEl.hidden; + editorEl.hidden = false; + welcomeEl.hidden = true; + if (wasHidden) view.requestMeasure(); +} + +function showWelcome({ title = '没有打开的文件', text, actions } = {}) { + editorEl.hidden = true; + welcomeEl.hidden = false; + $('#welcome-title').textContent = title; + $('#welcome-text').textContent = text ?? '从左侧选择文件,或把文件拖进窗口。你和 Agent 编辑的是同一份内容,保存后才会写入磁盘。'; + const box = welcomeEl.querySelector('.welcome-actions'); + box.replaceChildren( + ...(actions ?? [ + { label: '新建文件', cmd: 'file.new', primary: true }, + { label: '快速打开', cmd: 'goto.file' }, + { label: '添加文件夹', cmd: 'folder.add' }, + ]).map((a) => { + const b = document.createElement('button'); + b.type = 'button'; + b.className = `btn${a.primary ? ' primary' : ''}`; + b.textContent = a.label; + if (a.cmd) b.dataset.cmd = a.cmd; + if (a.run) b.addEventListener('click', a.run); + return b; + }), + ); + $('#shortcuts').hidden = !!actions; + updateStatusBar(); + renderBanner(); +} + +function showOpenError(path, error) { + if (current) { + current.state = view.state; + current.scroll = view.scrollSnapshot(); + } + current = null; + renderTabs(); + showWelcome({ + title: `无法打开 ${baseName(path)}`, + text: error.message, + actions: [ + { label: '关闭标签', primary: true, run: () => post('/api/tabs/close', { path, discard: true }).catch(showError) }, + { label: '快速打开', cmd: 'goto.file' }, + ], + }); +} + +function renderBanner() { + const el = $('#doc-banner'); + const s = current ? app.tabStatus.get(current.path) : null; + if (!current || !s || (!s.diskChanged && !s.deleted)) { + el.hidden = true; + el.replaceChildren(); + return; + } + const path = current.path; + const text = document.createElement('span'); + text.className = 'banner-text'; + const button = (label, kind, run) => { + const b = document.createElement('button'); + b.type = 'button'; + b.className = `btn${kind ? ` ${kind}` : ''}`; + b.textContent = label; + b.addEventListener('click', run); + return b; + }; + if (s.diskChanged) { + text.textContent = `“${baseName(path)}” 已在磁盘上被其他程序修改,而编辑器中有未保存的更改。`; + el.replaceChildren( + text, + button('重新加载(放弃我的更改)', 'danger', () => revertDoc(path)), + button('保留我的版本并保存', '', () => saveDoc(path, { overwrite: true })), + ); + } else { + text.textContent = `“${baseName(path)}” 已在磁盘上被删除。保存会重新创建该文件。`; + el.replaceChildren(text, button('保存', '', () => saveDoc(path))); + } + el.hidden = false; +} + +function updateStatusBar() { + renderHighlightStatus(); + const cursor = $('#st-cursor'); + const indent = $('#st-indent'); + const lang = $('#st-lang'); + if (!current || editorEl.hidden) { + cursor.textContent = ''; + indent.hidden = true; + lang.hidden = true; + $('#st-encoding').textContent = ''; + $('#st-eol').textContent = ''; + return; + } + const st = view.state; + const main = st.selection.main; + const line = st.doc.lineAt(main.head); + let text = `行 ${line.number},列 ${main.head - line.from + 1}`; + if (st.selection.ranges.length > 1) text += ` ${st.selection.ranges.length} 个选区`; + else if (!main.empty) { + const lines = st.doc.lineAt(main.to).number - st.doc.lineAt(main.from).number + 1; + text += ` 已选 ${main.to - main.from} 个字符${lines > 1 ? `(${lines} 行)` : ''}`; + } + cursor.textContent = text; + const { insertSpaces, size } = indentFor(current); + indent.hidden = false; + indent.textContent = insertSpaces ? `空格:${size}` : `Tab:${size}`; + $('#st-encoding').textContent = current.bom ? 'UTF-8 BOM' : 'UTF-8'; + $('#st-eol').textContent = current.eol; + lang.hidden = false; + lang.textContent = languageById(current.langId).label; +} + +let viewTimer = null; +function scheduleViewReport() { + clearTimeout(viewTimer); + viewTimer = setTimeout(() => { + if (!current) return; + const st = view.state; + const pos = (p) => { + const line = st.doc.lineAt(p); + return { line: line.number, col: p - line.from + 1 }; + }; + const main = st.selection.main; + post('/api/view', { + path: current.path, + selections: st.selection.ranges.slice(0, 50).map((r) => ({ anchor: pos(r.anchor), head: pos(r.head) })), + selectedText: main.empty ? '' : st.sliceDoc(main.from, Math.min(main.to, main.from + 8000)), + }).catch(() => undefined); + }, 400); +} + +function gotoLine(n, focus = true) { + if (!current) return; + const { doc } = view.state; + const line = doc.line(clamp(n, 1, doc.lines)); + view.dispatch({ selection: { anchor: line.from }, effects: V.EditorView.scrollIntoView(line.from, { y: 'center' }) }); + if (focus) view.focus(); +} + +function renderHighlightStatus() { + const el = $('#st-highlights'); + const here = current && !editorEl.hidden ? highlightsOf(view.state).length : 0; + const total = Math.max(app.highlightTotal, here); + el.hidden = total === 0; + if (!total) return; + const visible = app.settings?.highlightsVisible !== false; + el.textContent = `高亮 ${here}${total > here ? ` / 共 ${total}` : ''}${visible ? '' : '(已隐藏)'}`; + el.classList.toggle('muted', !visible); + el.setAttribute('aria-label', `Agent 高亮:此文件 ${here} 个,共 ${total} 个${visible ? '' : ',已隐藏'}`); + el.title = app.settings?.highlightsPersist ? '高亮会一直保留,直到手动清除' : '修改被高亮的代码或关闭文件后,高亮会自动消失'; +} + +function jumpHighlight(delta) { + if (!current || editorEl.hidden) return; + const items = [...highlightsOf(view.state)].sort((a, b) => a.from - b.from || a.to - b.to); + if (!items.length) { + flash('这个文件没有 Agent 高亮'); + return; + } + if (app.settings.highlightsVisible === false) void toggleHighlightSetting('highlightsVisible'); + const head = view.state.selection.main.head; + const target = delta > 0 + ? items.find((h) => h.from > head) ?? items[0] + : items.findLast((h) => h.from < head) ?? items[items.length - 1]; + view.dispatch({ selection: { anchor: target.from }, effects: V.EditorView.scrollIntoView(target.from, { y: 'center' }) }); + view.focus(); + const note = target.note ? `:${target.note.split('\n')[0].slice(0, 80)}` : ''; + flash(`高亮 ${items.indexOf(target) + 1}/${items.length}${note}`); +} + +async function removeHighlights(body) { + try { + const res = await post('/api/highlights/remove', body); + flash(res.removed ? `已清除 ${res.removed} 个高亮` : '没有可清除的高亮'); + } catch (error) { + showError(error); + } +} + +async function toggleHighlightSetting(key) { + const on = !app.settings[key]; + await updateSettings({ [key]: on }); + if (app.settings[key] !== on) return; // the service rejected it; updateSettings already reported + if (key === 'highlightsVisible') flash(on ? '已显示 Agent 高亮' : 'Agent 高亮已隐藏(不会被删除)'); + else flash(on ? 'Agent 高亮会一直保留,直到手动清除' : 'Agent 高亮会在代码被修改或文件关闭后自动消失'); +} + +function setLanguage(id) { + if (!current) return; + app.langOverride.set(current.path, id); + current.langId = id; + reconfigureDoc(current, 'lang'); +} + +function setDocIndent(value) { + if (!current) return; + app.indentOverride.set(current.path, value); + reconfigureDoc(current, 'indent'); +} + +// ---- save / revert / create -------------------------------------------------------------------- + +async function saveDoc(path, { overwrite = false } = {}) { + const doc = docs.get(path); + if (doc?.state && !(await flushPush(doc))) { + toast('编辑内容还没有同步到编辑器服务,请稍后再试', 'error'); + return false; + } + try { + const res = await post('/api/doc/save', { path, overwrite }); + flash(res.saved ? `已保存 ${baseName(path)}` : `${baseName(path)} 没有需要保存的更改`); + return true; + } catch (error) { + if (error.code === 'CONFLICT') { + const choice = await confirmDialog({ + title: '文件已被外部修改', + message: `“${baseName(path)}” 在磁盘上已被其他程序修改。保存会覆盖这些修改。`, + buttons: [ + { value: 'cancel', label: '取消' }, + { value: 'reload', label: '重新加载(放弃我的更改)', kind: 'danger' }, + { value: 'overwrite', label: '覆盖保存', kind: 'primary' }, + ], + }); + if (choice === 'overwrite') return saveDoc(path, { overwrite: true }); + if (choice === 'reload') await revertDoc(path); + return false; + } + showError(error); + return false; + } +} + +async function saveAll() { + const dirty = app.tabs.filter((p) => isDirty(p)); + if (!dirty.length) { + flash('没有未保存的文件'); + return; + } + let saved = 0; + for (const path of dirty) if (await saveDoc(path)) saved++; + flash(`已保存 ${saved} 个文件`); +} + +async function revertDoc(path) { + const doc = docs.get(path); + try { + if (doc?.state) await flushPush(doc); + await post('/api/doc/revert', { path }); + flash(`已从磁盘重新加载 ${baseName(path)}`); + } catch (error) { + showError(error); + } +} + +function targetDir() { + if (current && folderOf(current.path)) return dirName(current.path); + const focused = treeEl.querySelector('[role="treeitem"][tabindex="0"]'); + if (focused?.dataset.path) return focused.dataset.kind === 'dir' ? focused.dataset.path : dirName(focused.dataset.path); + return app.folders[0]?.path ?? null; +} + +async function newEntry(kind, dir = targetDir()) { + if (!dir) { + toast('请先在侧边栏添加一个文件夹', 'warn'); + return addFolderPrompt(); + } + const isFile = kind === 'file'; + const created = await promptDialog({ + title: isFile ? '新建文件' : '新建文件夹', + label: `位置:${displayPath(dir)}`, + placeholder: isFile ? '例如 notes.md 或 docs/todo.txt' : '例如 docs', + confirm: '创建', + submit: (value) => post('/api/fs/create', { dir, name: value.trim(), kind, focus: false }), + }); + if (!created) return; + const node = app.tree.get(dir); + if (node) node.expanded = true; + void loadDir(dir, { silent: true }); + if (isFile) await activate(created.path); +} + +async function addFolderPrompt() { + const result = await promptDialog({ + title: '添加文件夹到侧边栏', + label: '文件夹的绝对路径', + placeholder: '/Users/you/project', + hint: '可以用 ~ 表示用户主目录。Agent 也能把当前对话的工作区添加进来。', + confirm: '添加', + submit: (value) => post('/api/folders/add', { path: value.trim() }), + }); + if (result) { + app.tree.set(result.path, { ...(app.tree.get(result.path) ?? {}), expanded: true }); + void loadDir(result.path); + } +} + +async function removeFolder(path) { + const choice = await confirmDialog({ + title: '从侧边栏移除文件夹?', + message: `“${baseName(path)}” 只会从侧边栏移除,磁盘上的文件不受影响。其中已打开的文件标签会被关闭。`, + buttons: [{ value: 'cancel', label: '取消' }, { value: 'remove', label: '移除', kind: 'primary' }], + }); + if (choice !== 'remove') return; + try { + await post('/api/folders/remove', { path }); + } catch (error) { + showError(error); + } +} + +async function copyText(text) { + try { + await navigator.clipboard.writeText(text); + } catch { + const area = document.createElement('textarea'); + area.value = text; + document.body.append(area); + area.select(); + document.execCommand('copy'); + area.remove(); + } + flash('已复制路径'); +} + +// ---- file import (drop / paste) ---------------------------------------------------------------- + +async function importFiles(files, dir) { + if (!dir) { + toast('请先在侧边栏添加一个文件夹', 'warn'); + return; + } + let added = 0; + let firstPath = null; + for (const file of files) { + if (file.size > MAX_UPLOAD_BYTES) { + toast(`${file.name} 超过 32 MB,已跳过`, 'warn'); + continue; + } + const bytes = new Uint8Array(await file.arrayBuffer()); + if (bytes.subarray(0, 8192).includes(0)) { + toast(`${file.name} 不是文本文件,已跳过`, 'warn'); + continue; + } + let content; + try { + content = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes); + } catch { + toast(`${file.name} 不是 UTF-8 编码,已跳过`, 'warn'); + continue; + } + try { + const res = await post('/api/fs/create', { dir, name: file.name, kind: 'file', content, unique: true, focus: false }); + added++; + firstPath ??= res.path; + } catch (error) { + showError(error); + } + } + if (!added) return; + const node = app.tree.get(dir); + if (node) node.expanded = true; + void loadDir(dir, { silent: true }); + flash(`已添加 ${added} 个文件到 ${displayPath(dir)}`); + if (firstPath) await activate(firstPath); +} + +const hasFiles = (event) => !!event.dataTransfer && Array.from(event.dataTransfer.types).includes('Files'); +let dragDepth = 0; +let dropRow = null; + +function dropDir(event) { + const item = document.elementFromPoint(event.clientX, event.clientY)?.closest?.('#tree [role="treeitem"]'); + if (item?.dataset.path) return { dir: item.dataset.kind === 'dir' ? item.dataset.path : dirName(item.dataset.path), item }; + return { dir: targetDir(), item: null }; +} + +function setDropRow(item) { + const row = item?.dataset.kind === 'dir' ? item.querySelector(':scope > .tree-row') : item?.parentElement?.closest('[role="treeitem"]')?.querySelector(':scope > .tree-row'); + if (row === dropRow) return; + dropRow?.classList.remove('drop-target'); + dropRow = row ?? null; + dropRow?.classList.add('drop-target'); +} + +window.addEventListener('dragenter', (event) => { + if (!hasFiles(event)) return; + event.preventDefault(); + dragDepth++; + $('#drop-overlay').hidden = false; +}); +window.addEventListener('dragover', (event) => { + if (!hasFiles(event)) return; + event.preventDefault(); + event.dataTransfer.dropEffect = 'copy'; + const { dir, item } = dropDir(event); + setDropRow(item); + $('#drop-text').textContent = dir ? `松开即可添加到 ${displayPath(dir)}` : '请先添加一个文件夹'; +}); +window.addEventListener('dragleave', (event) => { + if (!hasFiles(event)) return; + dragDepth = Math.max(0, dragDepth - 1); + if (!dragDepth) { + $('#drop-overlay').hidden = true; + setDropRow(null); + } +}); +window.addEventListener('drop', (event) => { + if (!hasFiles(event)) return; + event.preventDefault(); + dragDepth = 0; + $('#drop-overlay').hidden = true; + setDropRow(null); + const { dir } = dropDir(event); + const files = []; + let skippedDirs = 0; + for (const item of Array.from(event.dataTransfer.items)) { + if (item.kind !== 'file') continue; + if (item.webkitGetAsEntry?.()?.isDirectory) { + skippedDirs++; + continue; + } + const file = item.getAsFile(); + if (file) files.push(file); + } + if (skippedDirs) toast(`已跳过 ${skippedDirs} 个文件夹;可用“添加文件夹”把整个文件夹加入侧边栏`, 'warn'); + if (files.length) void importFiles(files, dir); +}); + +document.addEventListener( + 'paste', + (event) => { + const files = Array.from(event.clipboardData?.files ?? []); + if (!files.length || event.target.closest?.('dialog, input, select, textarea:not(.cm-content)')) return; + event.preventDefault(); + event.stopPropagation(); + void importFiles(files, targetDir()); + }, + true, +); + +// ---- tree -------------------------------------------------------------------------------------- + +function ensureRootNodes() { + app.folders.forEach((f, i) => { + if (!app.tree.has(f.path)) app.tree.set(f.path, { expanded: i === 0, entries: null, loading: false, error: null, truncated: false }); + const node = app.tree.get(f.path); + if (node.expanded && !node.entries && !node.loading && !node.error) void loadDir(f.path); + }); +} + +async function loadDir(path, { silent = false } = {}) { + let node = app.tree.get(path); + if (!node) { + node = { expanded: false }; + app.tree.set(path, node); + } + if (node.loading) return; + node.loading = true; + if (!silent) node.error = null; + try { + const res = await get('/api/list', { path }); + node.entries = res.entries; + node.truncated = res.truncated; + node.error = null; + } catch (error) { + if (!silent || !node.entries) { + node.error = error.message; + node.entries = null; + } + } finally { + node.loading = false; + renderTree(); + } +} + +function toggleDir(path, expand) { + const node = app.tree.get(path) ?? { expanded: false }; + node.expanded = expand ?? !node.expanded; + app.tree.set(path, node); + if (node.expanded && !node.entries) void loadDir(path); + renderTree(); +} + +function refreshDir(path) { + if (app.tree.get(path)?.entries) void loadDir(path, { silent: true }); +} + +function refreshTree() { + app.index.clear(); + for (const [path, node] of app.tree) if (node.entries) void loadDir(path, { silent: true }); +} + +function treeNote(text, level, error = false) { + const el = document.createElement('div'); + el.className = `tree-note${error ? ' error' : ''}`; + el.setAttribute('role', 'none'); + el.style.paddingLeft = `${26 + (level - 1) * 14}px`; + el.textContent = text; + return el; +} + +function renderTreeNode(entry, level) { + const item = document.createElement('div'); + item.className = 'tree-item'; + item.setAttribute('role', 'treeitem'); + item.setAttribute('aria-level', String(level)); + item.dataset.path = entry.path; + item.dataset.kind = entry.kind; + item.tabIndex = -1; + if (entry.root) item.dataset.root = '1'; + const row = document.createElement('div'); + row.className = `tree-row${entry.root ? ' root' : ''}${current?.path === entry.path ? ' active' : ''}`; + row.style.paddingLeft = `${6 + (level - 1) * 14}px`; + row.innerHTML = `${entry.kind === 'dir' ? ICONS.chevron : ''}${entry.kind === 'dir' ? ICONS.folder : ICONS.file}`; + row.querySelector('.tree-name').textContent = entry.name; + row.title = entry.drafts + ? `草稿:Mini App 的私有目录\n${entry.path}` + : entry.auto + ? `当前对话的项目(自动添加,切换项目且没有打开的文件时会自动移除)\n${entry.path}` + : entry.path; + item.append(row); + if (entry.kind === 'file') { + item.setAttribute('aria-selected', String(current?.path === entry.path)); + if (isDirty(entry.path)) row.insertAdjacentHTML('beforeend', '●未保存'); + return item; + } + const node = app.tree.get(entry.path); + const expanded = !!node?.expanded; + item.setAttribute('aria-expanded', String(expanded)); + if (!expanded) return item; + const group = document.createElement('div'); + group.className = 'tree-group'; + group.setAttribute('role', 'group'); + if (node.error) group.append(treeNote(node.error, level + 1, true)); + else if (!node.entries) group.append(treeNote('加载中…', level + 1)); + else { + if (!node.entries.length) group.append(treeNote('空文件夹', level + 1)); + for (const e of node.entries) { + group.append(renderTreeNode({ path: joinPath(entry.path, e.name), name: e.name, kind: e.kind === 'dir' ? 'dir' : 'file' }, level + 1)); + } + if (node.truncated) group.append(treeNote('仅显示前 5000 项', level + 1)); + } + item.append(group); + return item; +} + +function renderTree() { + const hadFocus = treeEl.contains(document.activeElement); + const scroll = treeEl.scrollTop; + const frag = document.createDocumentFragment(); + for (const f of app.folders) { + frag.append(renderTreeNode({ path: f.path, name: f.name, kind: 'dir', root: true, drafts: f.drafts, auto: f.auto }, 1)); + } + treeEl.replaceChildren(frag); + treeEl.scrollTop = scroll; + $('#sidebar-empty').hidden = app.folders.length > 0; + const focusItem = (app.treeFocus && treeEl.querySelector(`[role="treeitem"][data-path="${CSS.escape(app.treeFocus)}"]`)) || treeEl.querySelector('[role="treeitem"]'); + if (focusItem) { + focusItem.tabIndex = 0; + if (hadFocus) focusItem.focus({ preventScroll: true }); + } +} + +function markTreeActive() { + for (const el of treeEl.querySelectorAll('.tree-row.active')) el.classList.remove('active'); + for (const el of treeEl.querySelectorAll('[aria-selected="true"]')) el.setAttribute('aria-selected', 'false'); + if (!current) return; + const item = treeEl.querySelector(`[role="treeitem"][data-path="${CSS.escape(current.path)}"]`); + if (item) { + item.setAttribute('aria-selected', 'true'); + item.querySelector(':scope > .tree-row').classList.add('active'); + } +} + +function setTreeFocus(item) { + for (const el of treeEl.querySelectorAll('[role="treeitem"][tabindex="0"]')) el.tabIndex = -1; + item.tabIndex = 0; + item.focus({ preventScroll: false }); + app.treeFocus = item.dataset.path; +} + +treeEl.addEventListener('click', (event) => { + const item = event.target.closest('[role="treeitem"]'); + if (!item?.dataset.path) return; + setTreeFocus(item); + if (item.dataset.kind === 'dir') toggleDir(item.dataset.path); + else void activate(item.dataset.path); +}); + +treeEl.addEventListener('keydown', (event) => { + const item = event.target.closest('[role="treeitem"]'); + if (!item) return; + const items = [...treeEl.querySelectorAll('[role="treeitem"]')]; + const index = items.indexOf(item); + const isDir = item.dataset.kind === 'dir'; + const expanded = item.getAttribute('aria-expanded') === 'true'; + let handled = true; + switch (event.key) { + case 'ArrowDown': + if (items[index + 1]) setTreeFocus(items[index + 1]); + break; + case 'ArrowUp': + if (items[index - 1]) setTreeFocus(items[index - 1]); + break; + case 'Home': + setTreeFocus(items[0]); + break; + case 'End': + setTreeFocus(items[items.length - 1]); + break; + case 'ArrowRight': + if (isDir && !expanded) toggleDir(item.dataset.path, true); + else if (isDir && items[index + 1]) setTreeFocus(items[index + 1]); + break; + case 'ArrowLeft': + if (isDir && expanded) toggleDir(item.dataset.path, false); + else { + const parent = item.parentElement?.closest('[role="treeitem"]'); + if (parent) setTreeFocus(parent); + } + break; + case 'Enter': + case ' ': + if (isDir) toggleDir(item.dataset.path); + else void activate(item.dataset.path); + break; + case 'ContextMenu': + openTreeMenu(item, item.getBoundingClientRect().left + 24, item.getBoundingClientRect().bottom); + break; + default: + handled = false; + } + if (handled) event.preventDefault(); +}); + +treeEl.addEventListener('contextmenu', (event) => { + const item = event.target.closest('[role="treeitem"]'); + if (!item?.dataset.path) return; + event.preventDefault(); + setTreeFocus(item); + openTreeMenu(item, event.clientX, event.clientY); +}); + +function openTreeMenu(item, x, y) { + const path = item.dataset.path; + const isDir = item.dataset.kind === 'dir'; + const dir = isDir ? path : dirName(path); + const entries = []; + if (!isDir) entries.push({ label: '打开', run: () => activate(path) }); + entries.push( + { label: '新建文件…', run: () => newEntry('file', dir) }, + { label: '新建文件夹…', run: () => newEntry('dir', dir) }, + { sep: true }, + { label: '复制路径', run: () => copyText(path) }, + ); + if (isDir) entries.push({ label: '刷新', run: () => loadDir(path, { silent: true }) }); + if (item.dataset.root) entries.push({ sep: true }, { label: '从侧边栏移除', run: () => removeFolder(path) }); + showMenu(entries, x, y); +} + +// ---- tabs interaction -------------------------------------------------------------------------- + +tabsEl.addEventListener('click', (event) => { + const tab = event.target.closest('.tab'); + if (!tab) return; + if (event.target.closest('.tab-close')) void closeTab(tab.dataset.path); + else void activate(tab.dataset.path); +}); +tabsEl.addEventListener('auxclick', (event) => { + const tab = event.target.closest('.tab'); + if (tab && event.button === 1) void closeTab(tab.dataset.path); +}); +tabsEl.addEventListener('keydown', (event) => { + const tab = event.target.closest('.tab'); + if (!tab) return; + const index = app.tabs.indexOf(tab.dataset.path); + if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') { + event.preventDefault(); + const next = app.tabs[(index + (event.key === 'ArrowRight' ? 1 : -1) + app.tabs.length) % app.tabs.length]; + void activate(next, { focus: false }).then(() => tabsEl.querySelector(`[data-path="${CSS.escape(next)}"]`)?.focus()); + } else if (event.key === 'Delete' || event.key === 'Backspace') { + event.preventDefault(); + void closeTab(tab.dataset.path); + } else if (event.key === 'Enter') { + event.preventDefault(); + view.focus(); + } +}); +tabsEl.addEventListener('contextmenu', (event) => { + const tab = event.target.closest('.tab'); + if (!tab) return; + event.preventDefault(); + const path = tab.dataset.path; + showMenu( + [ + { label: '关闭', run: () => closeTab(path) }, + { label: '关闭其他标签', run: async () => { for (const p of app.tabs.filter((t) => t !== path)) await closeTab(p); } }, + { sep: true }, + { label: '复制路径', run: () => copyText(path) }, + { label: '从磁盘重新加载', run: () => revertDoc(path) }, + ], + event.clientX, + event.clientY, + ); +}); + +// ---- menu -------------------------------------------------------------------------------------- + +const menuEl = $('#menu'); +let menuRestore = null; + +function hideMenu() { + if (menuEl.hidden) return; + menuEl.hidden = true; + menuEl.replaceChildren(); + menuRestore?.focus?.({ preventScroll: true }); + menuRestore = null; +} + +function showMenu(entries, x, y) { + menuRestore = document.activeElement; + menuEl.replaceChildren(); + for (const entry of entries) { + if (entry.sep) { + const sep = document.createElement('div'); + sep.className = 'menu-sep'; + sep.setAttribute('role', 'separator'); + menuEl.append(sep); + continue; + } + const b = document.createElement('button'); + b.type = 'button'; + b.className = 'menu-item'; + b.setAttribute('role', entry.checked === undefined ? 'menuitem' : 'menuitemradio'); + if (entry.checked !== undefined) b.setAttribute('aria-checked', String(entry.checked)); + b.textContent = entry.label; + b.tabIndex = -1; + b.addEventListener('click', () => { + hideMenu(); + void entry.run(); + }); + menuEl.append(b); + } + menuEl.hidden = false; + const rect = menuEl.getBoundingClientRect(); + menuEl.style.left = `${clamp(x, 8, window.innerWidth - rect.width - 8)}px`; + menuEl.style.top = `${y + rect.height > window.innerHeight - 8 ? Math.max(8, y - rect.height) : y}px`; + menuEl.querySelector('.menu-item')?.focus(); +} + +menuEl.addEventListener('keydown', (event) => { + const items = [...menuEl.querySelectorAll('.menu-item')]; + const index = items.indexOf(document.activeElement); + if (event.key === 'ArrowDown') items[(index + 1) % items.length]?.focus(); + else if (event.key === 'ArrowUp') items[(index - 1 + items.length) % items.length]?.focus(); + else if (event.key === 'Escape' || event.key === 'Tab') hideMenu(); + else return; + event.preventDefault(); +}); +document.addEventListener('pointerdown', (event) => { + if (!menuEl.hidden && !menuEl.contains(event.target)) hideMenu(); +}); +window.addEventListener('blur', hideMenu); + +// ---- dialogs ----------------------------------------------------------------------------------- + +function promptDialog({ title, label, value = '', placeholder = '', hint = '', confirm = '确定', submit }) { + const dlg = $('#prompt-dialog'); + const form = $('#prompt-form'); + const input = $('#prompt-input'); + const errorEl = $('#prompt-error'); + const ok = $('#prompt-ok'); + const cancel = $('#prompt-cancel'); + $('#prompt-title').textContent = title; + $('#prompt-label').textContent = label; + $('#prompt-hint').textContent = hint; + input.value = value; + input.placeholder = placeholder; + input.removeAttribute('aria-invalid'); + errorEl.hidden = true; + ok.textContent = confirm; + const restore = document.activeElement; + return new Promise((resolve) => { + let busy = false; + const setError = (message) => { + errorEl.textContent = message; + errorEl.hidden = false; + input.setAttribute('aria-invalid', 'true'); + input.focus(); + }; + const finish = (result) => { + form.removeEventListener('submit', onSubmit); + cancel.removeEventListener('click', onCancel); + dlg.removeEventListener('cancel', onCancel); + if (dlg.open) dlg.close(); + restore?.focus?.({ preventScroll: true }); + resolve(result); + }; + const onSubmit = async (event) => { + event.preventDefault(); + if (busy) return; + if (!input.value.trim()) return setError('请输入内容'); + busy = true; + ok.disabled = true; + try { + finish(submit ? await submit(input.value) : input.value); + } catch (error) { + setError(error.message); + } finally { + busy = false; + ok.disabled = false; + } + }; + const onCancel = (event) => { + event.preventDefault(); + finish(null); + }; + form.addEventListener('submit', onSubmit); + cancel.addEventListener('click', onCancel); + dlg.addEventListener('cancel', onCancel); + dlg.showModal(); + input.focus(); + input.select(); + }); +} + +function confirmDialog({ title, message, buttons }) { + const dlg = $('#confirm-dialog'); + const actions = $('#confirm-actions'); + $('#confirm-title').textContent = title; + $('#confirm-message').textContent = message; + const restore = document.activeElement; + return new Promise((resolve) => { + const finish = (value) => { + dlg.removeEventListener('cancel', onCancel); + if (dlg.open) dlg.close(); + restore?.focus?.({ preventScroll: true }); + resolve(value); + }; + const onCancel = (event) => { + event.preventDefault(); + finish(null); + }; + actions.replaceChildren( + ...buttons.map((b) => { + const el = document.createElement('button'); + el.type = 'button'; + el.className = `btn${b.kind ? ` ${b.kind}` : ''}`; + el.textContent = b.label; + el.addEventListener('click', () => finish(b.value)); + return el; + }), + ); + dlg.addEventListener('cancel', onCancel); + dlg.showModal(); + (actions.querySelector('.btn.primary') ?? actions.lastElementChild)?.focus(); + }); +} + +const SETTING_CHECKS = ['insertSpaces', 'wordWrap', 'minimap', 'indentGuides', 'lineNumbers', 'showWhitespace', 'highlightsVisible', 'highlightsPersist']; + +function openSettings() { + const dlg = $('#settings-dialog'); + const form = $('#settings-form'); + const s = app.settings; + form.theme.value = s.theme; + form.fontSize.value = String(s.fontSize); + form.codeFont.value = s.codeFont; + form.fontFamily.value = s.fontFamily; + const customField = $('#custom-font-field'); + const syncCustom = () => { + const custom = form.codeFont.value === 'custom'; + customField.hidden = !custom; + form.fontFamily.required = custom; + }; + syncCustom(); + form.codeFont.addEventListener('change', syncCustom); + form.lineHeight.value = String(s.lineHeight); + form.tabSize.value = [2, 4, 8].includes(s.tabSize) ? String(s.tabSize) : '4'; + for (const key of SETTING_CHECKS) form[key].checked = s[key]; + const restore = document.activeElement; + const close = () => { + form.removeEventListener('submit', onSubmit); + form.codeFont.removeEventListener('change', syncCustom); + $('#settings-cancel').removeEventListener('click', onCancel); + dlg.removeEventListener('close', onClose); + if (dlg.open) dlg.close(); + restore?.focus?.({ preventScroll: true }); + }; + const onSubmit = (event) => { + event.preventDefault(); + if (!form.reportValidity()) return; + const patch = { + theme: form.theme.value, + fontSize: clamp(Math.round(Number(form.fontSize.value)), 8, 40), + codeFont: form.codeFont.value, + fontFamily: form.fontFamily.value.trim().replace(/[;{}<>\\]/g, ''), + lineHeight: clamp(Number(form.lineHeight.value), 1, 2.5), + tabSize: Number(form.tabSize.value), + }; + for (const key of SETTING_CHECKS) patch[key] = form[key].checked; + close(); + void updateSettings(patch).then(() => flash('设置已保存')); + }; + const onCancel = () => close(); + const onClose = () => close(); + form.addEventListener('submit', onSubmit); + $('#settings-cancel').addEventListener('click', onCancel); + dlg.addEventListener('close', onClose); + dlg.showModal(); + form.theme.focus(); +} + +// ---- palette (quick open, commands, syntax, go to line) ---------------------------------------- + +function fuzzy(query, text) { + const q = query.toLowerCase().replace(/\s+/g, ''); + if (!q) return { score: 0, positions: [] }; + const t = text.toLowerCase(); + const slash = t.lastIndexOf('/'); + const positions = []; + let from = 0; + let prev = -2; + let score = 0; + for (const ch of q) { + const i = t.indexOf(ch, from); + if (i === -1) return null; + positions.push(i); + score += i === prev + 1 ? 6 : 1; + if (i === 0 || '/_-. '.includes(t[i - 1])) score += 4; + if (i > slash) score += 2; + prev = i; + from = i + 1; + } + return { score: score - t.length / 100, positions }; +} + +function rank(list, query, textOf, limit = 80) { + if (!query.trim()) return list.slice(0, 300).map((item) => ({ item, positions: [] })); + const out = []; + for (const item of list) { + const m = fuzzy(query, textOf(item)); + if (m) out.push({ item, positions: m.positions, score: m.score }); + } + out.sort((a, b) => b.score - a.score); + return out.slice(0, limit); +} + +const palette = { + mode: 'files', + items: [], + selected: 0, + indexing: false, + open(mode = 'files', initial = '') { + hideMenu(); + this.mode = mode; + paletteInput.value = initial; + paletteInput.placeholder = { + files: '按名称查找文件(输入 : 跳转到行,> 执行命令)', + commands: '输入命令名称', + syntax: '选择语法', + }[mode]; + paletteInput.setAttribute('aria-label', paletteInput.placeholder); + if (!paletteEl.open) { + this.restore = document.activeElement; + paletteEl.showModal(); + } + paletteInput.focus(); + this.update(); + if (mode === 'files') void this.loadIndex(); + }, + close(restore = true) { + if (paletteEl.open) paletteEl.close(); + if (restore) this.restore?.focus?.({ preventScroll: true }); + }, + async loadIndex() { + const stale = app.folders.filter((f) => { + const entry = app.index.get(f.path); + return !entry || Date.now() - entry.at > 30_000; + }); + if (!stale.length) return; + this.indexing = true; + this.update(); + await Promise.all( + stale.map(async (f) => { + try { + const res = await get('/api/quick-open', { folder: f.path }); + app.index.set(f.path, { at: Date.now(), truncated: res.truncated, files: res.files.map((rel) => ({ path: joinPath(f.path, rel), rel, folder: f.name })) }); + } catch (error) { + app.index.set(f.path, { at: Date.now(), files: [], error: error.message }); + } + }), + ); + this.indexing = false; + if (paletteEl.open) this.update(); + }, + update() { + const raw = paletteInput.value; + let mode = this.mode; + let q = raw; + if (mode === 'files' && raw.startsWith('>')) { + mode = 'commands'; + q = raw.slice(1); + } else if (mode === 'files' && raw.startsWith(':')) { + mode = 'line'; + q = raw.slice(1); + } + let hint = ''; + if (mode === 'commands') { + this.items = rank(COMMANDS, q, (c) => c.title).map(({ item, positions }) => ({ + title: item.title, positions, keys: keyLabel(item.keys), run: () => runCommand(item.id), + })); + } else if (mode === 'syntax') { + this.items = rank(LANGUAGES, q, (l) => l.label).map(({ item, positions }) => ({ + title: item.label, positions, detail: current?.langId === item.id ? '当前' : '', run: () => setLanguage(item.id), + })); + } else if (mode === 'line') { + const n = Number.parseInt(q, 10); + const total = current ? view.state.doc.lines : 0; + this.items = current + ? [{ title: Number.isFinite(n) ? `跳转到第 ${clamp(n, 1, total)} 行` : `输入行号(1–${total})`, positions: [], run: Number.isFinite(n) ? () => gotoLine(n) : null }] + : [{ title: '没有打开的文件', positions: [], run: null }]; + } else { + const files = []; + let truncated = false; + for (const f of app.folders) { + const entry = app.index.get(f.path); + if (entry) { + files.push(...entry.files); + truncated ||= entry.truncated; + } + } + if (!q.trim()) { + this.items = app.tabs + .filter((p) => p !== current?.path) + .map((p) => ({ title: baseName(p), positions: [], detail: displayPath(dirName(p)), run: () => activate(p) })); + hint = this.items.length ? '最近打开的标签' : ''; + } else { + this.items = rank(files, q, (f) => f.rel, 60).map(({ item, positions }) => ({ + title: item.rel, positions, detail: item.folder, run: () => activate(item.path), + })); + } + if (this.indexing) hint = '正在建立文件索引…'; + else if (truncated) hint = '文件较多,只索引了一部分'; + else if (q.trim() && !this.items.length) hint = '没有匹配的文件'; + hint = [hint, '输入 : 跳转到行,> 执行命令'].filter(Boolean).join(' · '); + } + $('#palette-hint').textContent = hint; + this.selected = 0; + this.render(); + }, + render() { + const frag = document.createDocumentFragment(); + this.items.forEach((entry, i) => { + const li = document.createElement('li'); + li.className = 'palette-item'; + li.id = `palette-item-${i}`; + li.setAttribute('role', 'option'); + li.setAttribute('aria-selected', String(i === this.selected)); + const main = document.createElement('div'); + main.className = 'palette-main'; + const title = document.createElement('span'); + title.className = 'palette-title'; + const marks = new Set(entry.positions); + let run = ''; + let bold = false; + const flush = () => { + if (!run) return; + if (bold) { + const b = document.createElement('b'); + b.textContent = run; + title.append(b); + } else title.append(run); + run = ''; + }; + [...entry.title].forEach((ch, index) => { + const isMark = marks.has(index); + if (isMark !== bold) { + flush(); + bold = isMark; + } + run += ch; + }); + flush(); + main.append(title); + if (entry.detail) { + const detail = document.createElement('span'); + detail.className = 'palette-detail'; + detail.textContent = entry.detail; + main.append(detail); + } + li.append(main); + if (entry.keys) { + const keys = document.createElement('span'); + keys.className = 'palette-keys'; + keys.textContent = entry.keys; + li.append(keys); + } + li.addEventListener('mousedown', (event) => event.preventDefault()); + li.addEventListener('click', () => this.accept(i)); + frag.append(li); + }); + paletteList.replaceChildren(frag); + this.syncSelection(); + }, + syncSelection() { + const items = paletteList.children; + for (let i = 0; i < items.length; i++) items[i].setAttribute('aria-selected', String(i === this.selected)); + const active = items[this.selected]; + if (active) { + paletteInput.setAttribute('aria-activedescendant', active.id); + active.scrollIntoView({ block: 'nearest' }); + } else paletteInput.removeAttribute('aria-activedescendant'); + }, + move(delta) { + if (!this.items.length) return; + this.selected = (this.selected + delta + this.items.length) % this.items.length; + this.syncSelection(); + }, + accept(index = this.selected) { + const entry = this.items[index]; + if (!entry?.run) return; + this.close(false); + void entry.run(); + }, +}; + +paletteInput.addEventListener('input', () => palette.update()); +paletteInput.addEventListener('keydown', (event) => { + if (event.key === 'ArrowDown') palette.move(1); + else if (event.key === 'ArrowUp') palette.move(-1); + else if (event.key === 'Enter') palette.accept(); + else return; + event.preventDefault(); +}); +paletteEl.addEventListener('cancel', (event) => { + event.preventDefault(); + palette.close(); +}); +paletteEl.addEventListener('click', (event) => { + if (event.target === paletteEl) palette.close(); +}); + +// ---- commands and keyboard --------------------------------------------------------------------- + +const withView = (fn) => () => { + if (!current) return; + fn(view); + view.focus(); +}; + +const COMMANDS = [ + { id: 'file.new', title: '新建文件', keys: 'Mod-n', run: () => newEntry('file') }, + { id: 'file.newFolder', title: '新建文件夹', run: () => newEntry('dir') }, + { id: 'file.save', title: '保存', keys: 'Mod-s', run: () => current && saveDoc(current.path) }, + { id: 'file.saveAll', title: '全部保存', keys: 'Mod-Alt-s', run: saveAll }, + { id: 'file.revert', title: '从磁盘重新加载(放弃更改)', run: () => current && revertDoc(current.path) }, + { id: 'tab.close', title: '关闭标签', keys: 'Mod-w', run: () => current && closeTab(current.path) }, + { id: 'tab.next', title: '下一个标签', keys: isMac ? 'Mod-Alt-ArrowRight' : 'Mod-Tab', run: () => cycleTab(1) }, + { id: 'tab.prev', title: '上一个标签', keys: isMac ? 'Mod-Alt-ArrowLeft' : 'Mod-Shift-Tab', run: () => cycleTab(-1) }, + { id: 'goto.file', title: '快速打开文件', keys: 'Mod-p', run: () => palette.open('files') }, + { id: 'goto.line', title: '跳转到行', keys: isMac ? 'Ctrl-g' : 'Mod-g', run: () => palette.open('files', ':') }, + { id: 'palette.commands', title: '命令面板', keys: 'Mod-Shift-p', run: () => palette.open('commands') }, + { id: 'find', title: '查找', keys: 'Mod-f', run: withView(Q.openSearchPanel) }, + { id: 'replace', title: '查找和替换', keys: 'Mod-Alt-f', run: withView(Q.openSearchPanel) }, + { id: 'select.next', title: '选择下一个匹配项(多光标)', keys: 'Mod-d', run: withView(Q.selectNextOccurrence) }, + { id: 'select.all', title: '选择全部匹配项', keys: isMac ? 'Ctrl-Mod-g' : 'Alt-F3', run: withView(Q.selectSelectionMatches) }, + { id: 'select.splitLines', title: '把选区拆分成多行光标', keys: 'Mod-Shift-l', run: withView(splitSelectionByLine) }, + { id: 'select.line', title: '选择整行', keys: 'Mod-l', run: withView(C.selectLine) }, + { id: 'edit.comment', title: '切换注释', keys: 'Mod-/', run: withView(C.toggleComment) }, + { id: 'edit.deleteLine', title: '删除行', keys: 'Mod-Shift-k', run: withView(C.deleteLine) }, + { id: 'edit.duplicateLine', title: '复制当前行', keys: 'Mod-Shift-d', run: withView(C.copyLineDown) }, + { id: 'fold.code', title: '折叠当前块', keys: isMac ? 'Mod-Alt-[' : 'Ctrl-Shift-[', run: withView(L.foldCode) }, + { id: 'fold.unfold', title: '展开当前块', keys: isMac ? 'Mod-Alt-]' : 'Ctrl-Shift-]', run: withView(L.unfoldCode) }, + { id: 'fold.all', title: '全部折叠', keys: 'Mod-k Mod-1', run: withView(L.foldAll) }, + { id: 'fold.unfoldAll', title: '全部展开', keys: 'Mod-k Mod-0', run: withView(L.unfoldAll) }, + { id: 'view.syntax', title: '设置语法…', run: () => palette.open('syntax') }, + { id: 'view.sidebar', title: '显示或隐藏侧边栏', keys: 'Mod-k Mod-b', run: () => toggleSetting('sidebarVisible') }, + { id: 'view.wrap', title: '切换自动换行', run: () => toggleSetting('wordWrap') }, + { id: 'view.minimap', title: '切换小地图', run: () => toggleSetting('minimap') }, + { id: 'view.guides', title: '切换缩进参考线', run: () => toggleSetting('indentGuides') }, + { id: 'view.whitespace', title: '显示或隐藏空白字符', run: () => toggleSetting('showWhitespace') }, + { id: 'view.lineNumbers', title: '显示或隐藏行号', run: () => toggleSetting('lineNumbers') }, + { id: 'view.fontUp', title: '增大字号', keys: 'Mod-=', run: () => changeFont(1) }, + { id: 'view.fontDown', title: '减小字号', keys: 'Mod--', run: () => changeFont(-1) }, + { id: 'view.fontReset', title: '恢复默认字号', keys: 'Mod-0', run: () => updateSettings({ fontSize: 14 }) }, + { id: 'view.theme', title: '切换主题(跟随系统 / 深色 / 浅色)', run: () => updateSettings({ theme: { system: 'dark', dark: 'light', light: 'system' }[app.settings.theme] }) }, + { id: 'folder.add', title: '添加文件夹到侧边栏…', run: addFolderPrompt }, + { id: 'tree.refresh', title: '刷新文件列表', run: refreshTree }, + { id: 'highlight.next', title: '下一个 Agent 高亮', keys: 'F8', run: () => jumpHighlight(1) }, + { id: 'highlight.prev', title: '上一个 Agent 高亮', keys: 'Shift-F8', run: () => jumpHighlight(-1) }, + { id: 'highlight.toggle', title: '显示或隐藏 Agent 高亮', run: () => toggleHighlightSetting('highlightsVisible') }, + { id: 'highlight.keep', title: '切换 Agent 高亮的保留方式(自动消失 / 保留到手动清除)', run: () => toggleHighlightSetting('highlightsPersist') }, + { id: 'highlight.clearFile', title: '清除此文件的 Agent 高亮', run: () => current && removeHighlights({ path: current.path }) }, + { id: 'highlight.clearAll', title: '清除全部 Agent 高亮', run: () => removeHighlights({ all: true }) }, + { id: 'prefs', title: '设置…', keys: 'Mod-,', run: openSettings }, +]; +const commandById = new Map(COMMANDS.map((c) => [c.id, c])); + +function runCommand(id) { + const command = commandById.get(id); + if (command) void command.run(); +} + +const MAC_KEYS = { Mod: '⌘', Ctrl: '⌃', Alt: '⌥', Shift: '⇧', ArrowUp: '↑', ArrowDown: '↓', ArrowLeft: '←', ArrowRight: '→', Enter: '↩', Tab: '⇥' }; +const PC_KEYS = { Mod: 'Ctrl', Ctrl: 'Ctrl', Alt: 'Alt', Shift: 'Shift', ArrowUp: '↑', ArrowDown: '↓', ArrowLeft: '←', ArrowRight: '→' }; + +function keyLabel(keys) { + if (!keys) return ''; + return keys + .split(' ') + .map((combo) => combo.split(/-(?=.)/).map((part) => (isMac ? MAC_KEYS : PC_KEYS)[part] ?? part.toUpperCase()).join(isMac ? '' : '+')) + .join(' '); +} + +const CODE_KEYS = { Equal: '=', Minus: '-', Comma: ',', Period: '.', Slash: '/', BracketLeft: '[', BracketRight: ']', Backquote: '`' }; + +function keyId(event) { + const parts = []; + if (isMac ? event.metaKey : event.ctrlKey) parts.push('Mod'); + if (isMac && event.ctrlKey) parts.push('Ctrl'); + if (!isMac && event.metaKey) parts.push('Meta'); + if (event.altKey) parts.push('Alt'); + if (event.shiftKey) parts.push('Shift'); + let key = event.key; + if (/^Key[A-Z]$/.test(event.code)) key = event.code.slice(3).toLowerCase(); + else if (/^Digit[0-9]$/.test(event.code)) key = event.code.slice(5); + else if (CODE_KEYS[event.code]) key = CODE_KEYS[event.code]; + else if (key.length === 1) key = key.toLowerCase(); + parts.push(key); + return parts.join('-'); +} + +const GLOBAL_KEYS = { + 'Mod-s': 'file.save', + 'Mod-Alt-s': 'file.saveAll', + 'Mod-p': 'goto.file', + 'Mod-Shift-p': 'palette.commands', + 'Mod-n': 'file.new', + 'Mod-w': 'tab.close', + 'Mod-=': 'view.fontUp', + 'Mod-Shift-=': 'view.fontUp', + 'Mod--': 'view.fontDown', + 'Mod-0': 'view.fontReset', + 'Mod-,': 'prefs', + F8: 'highlight.next', + 'Shift-F8': 'highlight.prev', + [isMac ? 'Ctrl-g' : 'Mod-g']: 'goto.line', + [isMac ? 'Mod-Alt-ArrowRight' : 'Mod-Tab']: 'tab.next', + [isMac ? 'Mod-Alt-ArrowLeft' : 'Mod-Shift-Tab']: 'tab.prev', + [isMac ? 'Ctrl-Tab' : 'Mod-PageDown']: 'tab.next', + [isMac ? 'Ctrl-Shift-Tab' : 'Mod-PageUp']: 'tab.prev', +}; +const CHORDS = { 'Mod-k Mod-b': 'view.sidebar', 'Mod-k Mod-0': 'fold.unfoldAll', 'Mod-k Mod-1': 'fold.all' }; + +function clearChord() { + clearTimeout(app.chordTimer); + app.chord = null; +} + +window.addEventListener( + 'keydown', + (event) => { + if (event.isComposing || document.querySelector('dialog[open]')) return; + const id = keyId(event); + if (['Mod', 'Shift', 'Alt', 'Ctrl', 'Meta'].includes(event.key) || /-(Meta|Control|Shift|Alt)$/.test(id)) return; + if (app.chord) { + const combo = `${app.chord} ${id}`; + clearChord(); + if (CHORDS[combo]) { + event.preventDefault(); + event.stopPropagation(); + runCommand(CHORDS[combo]); + return; + } + } + if (id === 'Mod-k') { + event.preventDefault(); + event.stopPropagation(); + app.chord = 'Mod-k'; + app.chordTimer = setTimeout(clearChord, 1500); + return; + } + const command = GLOBAL_KEYS[id]; + if (command) { + event.preventDefault(); + event.stopPropagation(); + runCommand(command); + return; + } + const digit = /^Mod-([1-9])$/.exec(id); + if (digit && app.tabs.length) { + event.preventDefault(); + event.stopPropagation(); + const n = Number(digit[1]); + void activate(app.tabs[n === 9 ? app.tabs.length - 1 : Math.min(n, app.tabs.length) - 1]); + } + }, + true, +); + +document.addEventListener('click', (event) => { + const button = event.target.closest('[data-cmd]'); + if (button) runCommand(button.dataset.cmd); +}); + +$('#st-lang').addEventListener('click', () => palette.open('syntax')); +$('#st-highlights').addEventListener('click', (event) => { + const here = current && !editorEl.hidden ? highlightsOf(view.state).length : 0; + const rect = event.currentTarget.getBoundingClientRect(); + showMenu( + [ + { label: '显示 Agent 高亮', checked: app.settings.highlightsVisible !== false, run: () => toggleHighlightSetting('highlightsVisible') }, + { label: '保留高亮,直到手动清除', checked: !!app.settings.highlightsPersist, run: () => toggleHighlightSetting('highlightsPersist') }, + { sep: true }, + ...(here + ? [ + { label: `下一个高亮 ${keyLabel('F8')}`, run: () => jumpHighlight(1) }, + { label: `上一个高亮 ${keyLabel('Shift-F8')}`, run: () => jumpHighlight(-1) }, + { label: `清除此文件的高亮(${here})`, run: () => removeHighlights({ path: current.path }) }, + ] + : []), + { label: `清除全部高亮(${app.highlightTotal})`, run: () => removeHighlights({ all: true }) }, + ], + rect.left, + rect.top - 4, + ); +}); +$('#st-indent').addEventListener('click', (event) => { + if (!current) return; + const { insertSpaces, size } = indentFor(current); + const rect = event.currentTarget.getBoundingClientRect(); + showMenu( + [ + { label: '使用空格缩进', checked: insertSpaces, run: () => setDocIndent({ insertSpaces: true, size }) }, + { label: '使用 Tab 缩进', checked: !insertSpaces, run: () => setDocIndent({ insertSpaces: false, size }) }, + { sep: true }, + ...[2, 4, 8].map((n) => ({ label: `缩进宽度:${n}`, checked: size === n, run: () => setDocIndent({ insertSpaces, size: n }) })), + { sep: true }, + { + label: '根据内容重新识别', + run: () => { + app.indentOverride.delete(current.path); + current.detectedIndent = detectIndent(view.state.doc.sliceString(0, 200_000)); + reconfigureDoc(current, 'indent'); + }, + }, + ], + rect.left, + rect.top - 4, + ); +}); + +// ---- sidebar resizer --------------------------------------------------------------------------- + +const resizer = $('#resizer'); +resizer.addEventListener('pointerdown', (event) => { + event.preventDefault(); + resizer.setPointerCapture(event.pointerId); + resizer.classList.add('dragging'); + const startX = event.clientX; + const startWidth = app.settings.sidebarWidth; + let width = startWidth; + const move = (e) => { + width = clamp(Math.round(startWidth + e.clientX - startX), 160, 640); + document.documentElement.style.setProperty('--sidebar-width', `${width}px`); + }; + const up = () => { + resizer.removeEventListener('pointermove', move); + resizer.removeEventListener('pointerup', up); + resizer.removeEventListener('pointercancel', up); + resizer.classList.remove('dragging'); + if (width !== startWidth) void updateSettings({ sidebarWidth: width }); + }; + resizer.addEventListener('pointermove', move); + resizer.addEventListener('pointerup', up); + resizer.addEventListener('pointercancel', up); +}); +resizer.addEventListener('keydown', (event) => { + if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return; + event.preventDefault(); + void updateSettings({ sidebarWidth: clamp(app.settings.sidebarWidth + (event.key === 'ArrowRight' ? 16 : -16), 160, 640) }); +}); + +// ---- server events ----------------------------------------------------------------------------- + +function applyServerState(state) { + const previousSettings = app.settings; + app.settings = state.settings; + app.folders = state.folders; + app.tabs = state.tabs.map((t) => t.path); + for (const t of state.tabs) app.tabStatus.set(t.path, { dirty: t.dirty, diskChanged: t.diskChanged, deleted: t.deleted }); + for (const path of [...app.tabStatus.keys()]) if (!app.tabs.includes(path)) app.tabStatus.delete(path); + for (const [path, doc] of docs) { + if (app.tabs.includes(path)) continue; + doc.closed = true; + docs.delete(path); + if (current === doc) current = null; + } + app.active = state.active; + app.highlightTotal = state.highlights ?? 0; + if (!previousSettings || JSON.stringify(previousSettings) !== JSON.stringify(state.settings)) { + applyChrome(); + reconfigureAll(); + } + ensureRootNodes(); + renderTree(); + renderTabs(); + const pending = app.requestedActive && Date.now() - app.requestedAt < 5000; + if (!pending && state.active && state.active !== current?.path) void activate(state.active, { report: false, focus: false }); + else if (!pending && !state.active) showWelcome(); + else if (current) renderBanner(); + renderHighlightStatus(); +} + +function onAgentActivity(event) { + const name = baseName(event.path); + if (event.action === 'folder') { + app.tree.set(event.path, { ...(app.tree.get(event.path) ?? {}), expanded: true }); + void loadDir(event.path); + toast(`Agent 已把 ${name} 设为主文件夹`); + return; + } + if (event.action === 'open') { + void activate(event.path, { report: false, focus: false, line: event.line }); + return; + } + if (event.action === 'reveal') { + // Scroll to what the Agent highlighted without moving the user's cursor; never yank them away mid-typing. + const show = async () => { + if (current?.path !== event.path) await activate(event.path, { focus: false }); + if (current?.path !== event.path || !event.line) return; + const line = view.state.doc.line(clamp(event.line, 1, view.state.doc.lines)); + view.dispatch({ effects: V.EditorView.scrollIntoView(line.from, { y: 'center' }) }); + }; + if (Date.now() - app.lastUserEdit < 3000) toast(`Agent 在 ${name} 中高亮了代码`, 'info', { label: '查看', run: () => void show() }); + else void show(); + return; + } + flash(`Agent ${event.action === 'create' ? '创建了' : '修改了'} ${name}`); + if (current?.path === event.path) return; + if (!current || Date.now() - app.lastUserEdit > 3000) void activate(event.path, { focus: false }); + else toast(`Agent 修改了 ${name}`, 'info', { label: '查看', run: () => activate(event.path) }); +} + +function handleEvent(event) { + switch (event.type) { + case 'hello': + $('#offline-banner').hidden = true; + if (app.everConnected) for (const doc of docs.values()) if (doc.state) void pullDoc(doc); + app.everConnected = true; + break; + case 'state': + applyServerState(event.state); + break; + case 'doc.updates': { + setTabStatus(event.path, event); + const doc = docs.get(event.path); + if (doc?.state) applyRemote(doc, event.version, event.updates.map(fromWire)); + break; + } + case 'doc.status': + setTabStatus(event.path, event); + break; + case 'highlights': { + const doc = docs.get(event.path); + if (doc) receiveHighlights(doc, event.version, event.items); + break; + } + case 'fs.changed': + app.index.clear(); + refreshDir(event.dir); + break; + case 'notice': + toast(event.message, event.level === 'error' ? 'error' : event.level); + break; + case 'agent.activity': + onAgentActivity(event); + break; + case 'workspace.follow': + app.tree.set(event.path, { ...(app.tree.get(event.path) ?? {}), expanded: true }); + void loadDir(event.path); + toast(`已切换到当前对话的项目:${baseName(event.path)}`); + break; + default: + break; + } +} + +let offlineTimer = null; +function connectEvents() { + const source = new EventSource('/api/events'); + source.addEventListener('message', (message) => { + let event; + try { + event = JSON.parse(message.data); + } catch { + return; + } + clearTimeout(offlineTimer); + handleEvent(event); + }); + source.addEventListener('error', () => { + clearTimeout(offlineTimer); + offlineTimer = setTimeout(() => { + $('#offline-banner').hidden = false; + }, 2500); + }); +} + +window.addEventListener('focus', () => { + if (app.settings) refreshTree(); +}); + +// ---- boot -------------------------------------------------------------------------------------- + +function boot() { + document.documentElement.dataset.theme = darkQuery.matches ? 'dark' : 'light'; + for (const button of document.querySelectorAll('.icon-btn[data-cmd]')) button.innerHTML = CMD_ICONS[button.dataset.cmd] ?? ''; + const shortcuts = [ + ['Mod-p', '快速打开文件'], ['Mod-Shift-p', '命令面板'], ['Mod-n', '新建文件'], ['Mod-s', '保存'], + ['Mod-d', '选择下一个匹配项'], [isMac ? 'Mod-Alt-[' : 'Ctrl-Shift-[', '折叠代码块'], ['Mod-=', '放大字号'], + ]; + $('#shortcuts').replaceChildren( + ...shortcuts.flatMap(([keys, label]) => { + const dt = document.createElement('dt'); + dt.textContent = keyLabel(keys); + const dd = document.createElement('dd'); + dd.textContent = label; + return [dt, dd]; + }), + ); + editorEl.hidden = true; + showWelcome({ title: '正在加载…', text: '正在连接编辑器服务。', actions: [] }); + const root = new URLSearchParams(location.search).get('root'); + const ready = root + ? post('/api/folders/add', { path: root, top: true }) + .then((res) => app.tree.set(res.path, { ...(app.tree.get(res.path) ?? {}), expanded: true })) + .catch(showError) + : Promise.resolve(); + void ready.then(connectEvents); +} + +boot(); diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/OFL.txt b/plugins/trentchou/text-editor/miniapp/client/fonts/OFL.txt new file mode 100644 index 0000000..8f7ed67 --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/client/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) JetBrainsMono-Italic[wght].ttf: Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono.css b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono.css new file mode 100644 index 0000000..69d48f9 --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono.css @@ -0,0 +1,118 @@ +/* JetBrains Mono variable font via @fontsource-variable/jetbrains-mono (OFL-1.1, see OFL.txt). */ +/* jetbrains-mono-cyrillic-ext-wght-normal */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: normal; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-cyrillic-ext-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F; +} + +/* jetbrains-mono-cyrillic-wght-normal */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: normal; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-cyrillic-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116; +} + +/* jetbrains-mono-greek-wght-normal */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: normal; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-greek-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF; +} + +/* jetbrains-mono-vietnamese-wght-normal */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: normal; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-vietnamese-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; +} + +/* jetbrains-mono-latin-ext-wght-normal */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: normal; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-latin-ext-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; +} + +/* jetbrains-mono-latin-wght-normal */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: normal; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-latin-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; +}/* jetbrains-mono-cyrillic-ext-wght-italic */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: italic; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-cyrillic-ext-wght-italic.woff2) format('woff2-variations'); + unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F; +} + +/* jetbrains-mono-cyrillic-wght-italic */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: italic; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-cyrillic-wght-italic.woff2) format('woff2-variations'); + unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116; +} + +/* jetbrains-mono-greek-wght-italic */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: italic; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-greek-wght-italic.woff2) format('woff2-variations'); + unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF; +} + +/* jetbrains-mono-vietnamese-wght-italic */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: italic; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-vietnamese-wght-italic.woff2) format('woff2-variations'); + unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; +} + +/* jetbrains-mono-latin-ext-wght-italic */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: italic; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-latin-ext-wght-italic.woff2) format('woff2-variations'); + unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; +} + +/* jetbrains-mono-latin-wght-italic */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: italic; + font-display: swap; + font-weight: 100 800; + src: url(./jetbrains-mono/jetbrains-mono-latin-wght-italic.woff2) format('woff2-variations'); + unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; +} \ No newline at end of file diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-ext-wght-italic.woff2 b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-ext-wght-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d6f2ac23ec702c7c52d9418870260c32e19d7563 GIT binary patch literal 2180 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 K;CGGt0RR9FIkPSR literal 0 HcmV?d00001 diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-wght-italic.woff2 b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-wght-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..620f3df15acc973ad7a71b42b266ce97faafc155 GIT binary patch literal 13352 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 literal 0 HcmV?d00001 diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-wght-normal.woff2 b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-cyrillic-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8ee2d708552044aa780be4ebb12ecee30f98b709 GIT binary patch literal 12108 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 literal 0 HcmV?d00001 diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-greek-wght-normal.woff2 b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-greek-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6084d39345d0e1afab32ce2d6214bd9ae1c56db5 GIT binary patch literal 9004 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 literal 0 HcmV?d00001 diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-ext-wght-normal.woff2 b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-ext-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..01769d9e63d89d35d21547fdcfe84382a68cfe7c GIT binary patch literal 15196 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 WDe3x{Jh1bgDcAe|Ep*;>2LJ$kxGXII literal 0 HcmV?d00001 diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-wght-italic.woff2 b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-wght-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ef16b7d050b146ef5323d01d111eac19022a0d4e GIT binary patch literal 42964 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
_lB%-&e|SWIL5jAqu9QU)1Q83ZcUU_WT0|7ul- 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%0D{)-AljuX?mplPAp$P zitxZgUG34$@$_;(Nwm^0ddv5$Lc8?WoC5;~)^FI5`wUlYM2($B8MQ}b%&GIf4!_!J z+6>x0rLh2a)yu6iYqdEG7C*jo_uJ=rQ|&d)I_q6-CZ}_pCy>8m>sxnwZN6jeCU04} z&2C&y|NkOHXn|BviMP}{;wWDRgbDW~2_EF(0bd+q0tHM;3Z@!9(4tklVx^2>@q#CY z_{cX;J@ecPx7_yL2U2M0LoIdG(?DZkg%?p|QAHP1Y?F#BzJ!R8B9~ZF$)%JUC2F+j zF=CchdKt0Gj2)+}xbe!4pCDnP#7UASD<^qyNQ%&usYt9&lh#Gvk+aUlPNbv9KGk01 zW|;^#TI?Z%Gf>fyNhCEcbI>tI1>-Vg*5-HnN3gQ7b8vFW1U03-^H!Q$`)B8g0)(&!8(i_PKk_yVCwERo9O z3Z*Jr_t*+xWGtxGXmxsn(PXw*ZFYy#<@OX@bNSSAO!Y!TI-0{~m^kH4=3;h!Jk4j% zK3Z81Yo)+5->B*fj>PSek_*pMN5pjPJ-ex`|> zaEc`t1Kpy0(uUyz`s8q6uLOyO4#hVVW#V@FRNY*_wA6HuSMMj+7c3b!q|+*=vI-S$|Dud>V}5mWN?ESWnwLyS1zvJYM?_b>k_vb~c_^jmXAa2MjFWHmc>Lz>rD=)At$i0py2h=CaCabu1|2B5^b=orU9Eoz)drb1{=JeYDDm` zcZP`Vnm#$q`>wtb+2c-QwM96{t`58yP&t|n(j%rL@rj6#u8SuSv-&Ii%llCO$qmvv7N! zcTV=ZZ_C%}dn9*6$*!K42JeQ>!AC*@!@jaOUKP6NqE%LF{@f0@ gU5bD<M0LXcbO#lD@ literal 0 HcmV?d00001 diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-wght-normal.woff2 b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-latin-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cd5102a44c763f1cfe9f2b199fd5d7257491c0dd GIT binary patch literal 40404 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 G?FRs6a9N!I literal 0 HcmV?d00001 diff --git a/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-vietnamese-wght-normal.woff2 b/plugins/trentchou/text-editor/miniapp/client/fonts/jetbrains-mono/jetbrains-mono-vietnamese-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b6a3fa10343ee406e1cf44474d4c7ce018e9f80b GIT binary patch literal 7504 zcmV-W9k1edPew8T0RR9103A>O6aWAK08d;1036`}0RR9100000000000000000000 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

xCddC`dQ=0O(K8nww7HhB( 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 + + + + + 文本编辑器 + + + + + +

+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+

没有打开的文件

+

从左侧选择文件,或把文件拖进窗口。你和 Agent 编辑的是同一份内容,保存后才会写入磁盘。

+
+ + + +
+
+
+
+
+
+ + + + + + + + +
+
+
+ + +
+ + + +
+ +
    +

    +
    +
    + + + + + + + + + + + + + + + + diff --git a/plugins/trentchou/text-editor/miniapp/client/languages.js b/plugins/trentchou/text-editor/miniapp/client/languages.js new file mode 100644 index 0000000..74137db --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/client/languages.js @@ -0,0 +1,258 @@ +// Language detection, syntax support and folding for formats without a syntax tree. +import * as CM from './vendor/codemirror.js'; + +const { language: L } = CM; + +const streamCache = new Map(); +function stream(name) { + let lang = streamCache.get(name); + if (!lang) { + lang = L.StreamLanguage.define(CM.legacy[name]); + streamCache.set(name, lang); + } + return lang; +} + +function indentWidth(text, tabSize) { + let width = 0; + for (const ch of text) { + if (ch === ' ') width++; + else if (ch === '\t') width += tabSize - (width % tabSize); + else break; + } + return width; +} + +const FOLD_SCAN_LINES = 20000; + +/** Fold a line together with the following lines that are indented deeper. */ +export const indentFold = L.foldService.of((state, lineStart) => { + const line = state.doc.lineAt(lineStart); + if (!line.text.trim()) return null; + const base = indentWidth(line.text, state.tabSize); + let end = null; + const last = Math.min(state.doc.lines, line.number + FOLD_SCAN_LINES); + for (let n = line.number + 1; n <= last; n++) { + const next = state.doc.line(n); + if (!next.text.trim()) continue; + if (indentWidth(next.text, state.tabSize) <= base) break; + end = next; + } + return end ? { from: line.to, to: end.to } : null; +}); + +const TOML_HEADER = /^\s*\[\[?\s*[\w\-."' ]+\]\]?\s*(#.*)?$/; + +function stripTomlComment(text) { + let quote = null; + for (let i = 0; i < text.length; i++) { + const ch = text[i]; + if (quote) { + if (ch === '\\' && quote === '"') i++; + else if (ch === quote) quote = null; + } else if (ch === '"' || ch === "'") quote = ch; + else if (ch === '#') return text.slice(0, i); + } + return text; +} + +/** Find the bracket closing the one that ends at `start - 1`, skipping strings and comments. */ +function matchTomlBracket(doc, start, open) { + const close = open === '[' ? ']' : '}'; + const limit = Math.min(doc.length, start + 500_000); + const text = doc.sliceString(start, limit); + let depth = 1; + let quote = null; + let comment = false; + for (let i = 0; i < text.length; i++) { + const ch = text[i]; + if (comment) { + if (ch === '\n') comment = false; + continue; + } + if (quote) { + if (quote.length === 3) { + if (text.startsWith(quote, i)) { + quote = null; + i += 2; + } else if (ch === '\\' && quote === '"""') i++; + } else if (ch === '\\' && quote === '"') i++; + else if (ch === quote || ch === '\n') quote = null; + continue; + } + if (ch === '#') comment = true; + else if (text.startsWith('"""', i) || text.startsWith("'''", i)) { + quote = text.slice(i, i + 3); + i += 2; + } else if (ch === '"' || ch === "'") quote = ch; + else if (ch === '[' || ch === '{') depth++; + else if (ch === ']' || ch === '}') { + depth--; + if (depth === 0) return ch === close ? start + i : null; + } + } + return null; +} + +/** TOML folding: tables fold up to the next header; multi-line arrays, inline tables and strings fold to their end. */ +export const tomlFold = L.foldService.of((state, lineStart) => { + const { doc } = state; + const line = doc.lineAt(lineStart); + if (TOML_HEADER.test(line.text)) { + let last = null; + const end = Math.min(doc.lines, line.number + FOLD_SCAN_LINES); + for (let n = line.number + 1; n <= end; n++) { + const next = doc.line(n); + if (TOML_HEADER.test(next.text)) break; + if (next.text.trim()) last = next; + } + return last ? { from: line.to, to: last.to } : null; + } + const code = stripTomlComment(line.text).trimEnd(); + for (const delim of ['"""', "'''"]) { + if (code.endsWith(delim) && code.split(delim).length === 2) { + const after = doc.sliceString(line.to, Math.min(doc.length, line.to + 500_000)); + const close = after.indexOf(delim); + return close > 0 ? { from: line.to, to: line.to + close } : null; + } + } + const open = code.at(-1); + if (open === '[' || open === '{') { + const close = matchTomlBracket(doc, line.from + code.length, open); + if (close !== null && doc.lineAt(close).number > line.number) return { from: line.to, to: close }; + } + return null; +}); + +const withIndentFold = (name) => () => [stream(name), indentFold]; + +export const LANGUAGES = [ + { id: 'plain', label: '纯文本', load: () => [indentFold] }, + { id: 'json', label: 'JSON', load: () => CM.langs.json() }, + { id: 'yaml', label: 'YAML', load: () => CM.langs.yaml() }, + { id: 'toml', label: 'TOML', load: () => [stream('toml'), tomlFold] }, + { id: 'markdown', label: 'Markdown', load: () => CM.langs.markdown({ codeLanguages: fencedLanguage }) }, + { id: 'javascript', label: 'JavaScript', load: () => CM.langs.javascript({ jsx: true }) }, + { id: 'typescript', label: 'TypeScript', load: () => CM.langs.javascript({ typescript: true }) }, + { id: 'tsx', label: 'TSX', load: () => CM.langs.javascript({ typescript: true, jsx: true }) }, + { id: 'python', label: 'Python', load: () => CM.langs.python() }, + { id: 'html', label: 'HTML', load: () => CM.langs.html() }, + { id: 'css', label: 'CSS', load: () => CM.langs.css() }, + { id: 'xml', label: 'XML', load: () => CM.langs.xml() }, + { id: 'sql', label: 'SQL', load: () => CM.langs.sql() }, + { id: 'rust', label: 'Rust', load: () => CM.langs.rust() }, + { id: 'go', label: 'Go', load: () => CM.langs.go() }, + { id: 'java', label: 'Java', load: () => CM.langs.java() }, + { id: 'cpp', label: 'C / C++', load: () => CM.langs.cpp() }, + { id: 'php', label: 'PHP', load: () => CM.langs.php() }, + { id: 'shell', label: 'Shell', load: withIndentFold('shell') }, + { id: 'dockerfile', label: 'Dockerfile', load: withIndentFold('dockerFile') }, + { id: 'ini', label: 'INI / Properties / .env', load: withIndentFold('properties') }, + { id: 'diff', label: 'Diff', load: () => [stream('diff')] }, + { id: 'lua', label: 'Lua', load: withIndentFold('lua') }, + { id: 'ruby', label: 'Ruby', load: withIndentFold('ruby') }, + { id: 'swift', label: 'Swift', load: withIndentFold('swift') }, + { id: 'perl', label: 'Perl', load: withIndentFold('perl') }, + { id: 'r', label: 'R', load: withIndentFold('r') }, + { id: 'nginx', label: 'Nginx', load: withIndentFold('nginx') }, + { id: 'protobuf', label: 'Protocol Buffers', load: withIndentFold('protobuf') }, + { id: 'powershell', label: 'PowerShell', load: withIndentFold('powerShell') }, + { id: 'csharp', label: 'C#', load: withIndentFold('csharp') }, + { id: 'scala', label: 'Scala', load: withIndentFold('scala') }, + { id: 'kotlin', label: 'Kotlin', load: withIndentFold('kotlin') }, + { id: 'dart', label: 'Dart', load: withIndentFold('dart') }, + { id: 'objc', label: 'Objective-C', load: withIndentFold('objectiveC') }, + { id: 'haskell', label: 'Haskell', load: withIndentFold('haskell') }, + { id: 'erlang', label: 'Erlang', load: withIndentFold('erlang') }, + { id: 'groovy', label: 'Groovy / Gradle', load: withIndentFold('groovy') }, + { id: 'julia', label: 'Julia', load: withIndentFold('julia') }, + { id: 'cmake', label: 'CMake', load: withIndentFold('cmake') }, + { id: 'sass', label: 'Sass', load: withIndentFold('sass') }, +]; + +const byId = new Map(LANGUAGES.map((l) => [l.id, l])); +export const languageById = (id) => byId.get(id) ?? byId.get('plain'); + +const BY_EXT = { + json: 'json', jsonc: 'json', json5: 'json', jsonl: 'json', ndjson: 'json', geojson: 'json', ipynb: 'json', har: 'json', + yaml: 'yaml', yml: 'yaml', toml: 'toml', + md: 'markdown', markdown: 'markdown', mdx: 'markdown', + js: 'javascript', mjs: 'javascript', cjs: 'javascript', jsx: 'javascript', + ts: 'typescript', mts: 'typescript', cts: 'typescript', tsx: 'tsx', + py: 'python', pyi: 'python', pyw: 'python', + html: 'html', htm: 'html', xhtml: 'html', vue: 'html', svelte: 'html', + css: 'css', scss: 'css', less: 'css', sass: 'sass', + xml: 'xml', svg: 'xml', xsd: 'xml', xsl: 'xml', plist: 'xml', csproj: 'xml', + sql: 'sql', rs: 'rust', go: 'go', java: 'java', + c: 'cpp', h: 'cpp', cc: 'cpp', cpp: 'cpp', cxx: 'cpp', hpp: 'cpp', hh: 'cpp', hxx: 'cpp', ino: 'cpp', + php: 'php', sh: 'shell', bash: 'shell', zsh: 'shell', fish: 'shell', ksh: 'shell', + ini: 'ini', cfg: 'ini', conf: 'ini', properties: 'ini', env: 'ini', + diff: 'diff', patch: 'diff', lua: 'lua', rb: 'ruby', rake: 'ruby', gemspec: 'ruby', swift: 'swift', + pl: 'perl', pm: 'perl', r: 'r', proto: 'protobuf', ps1: 'powershell', psm1: 'powershell', + cs: 'csharp', scala: 'scala', sc: 'scala', kt: 'kotlin', kts: 'kotlin', dart: 'dart', m: 'objc', mm: 'objc', + hs: 'haskell', erl: 'erlang', hrl: 'erlang', groovy: 'groovy', gradle: 'groovy', jl: 'julia', cmake: 'cmake', +}; +const BY_NAME = { + 'Dockerfile': 'dockerfile', 'Containerfile': 'dockerfile', 'CMakeLists.txt': 'cmake', 'Gemfile': 'ruby', + 'Rakefile': 'ruby', 'Jenkinsfile': 'groovy', '.bashrc': 'shell', '.zshrc': 'shell', '.profile': 'shell', + '.bash_profile': 'shell', '.zprofile': 'shell', '.gitconfig': 'ini', '.editorconfig': 'ini', '.npmrc': 'ini', + 'nginx.conf': 'nginx', 'Cargo.lock': 'toml', 'poetry.lock': 'toml', 'uv.lock': 'toml', 'Pipfile': 'toml', +}; + +export function detectLanguage(path, head = '') { + const name = path.split(/[\\/]/).pop() ?? ''; + if (BY_NAME[name]) return BY_NAME[name]; + if (name.startsWith('Dockerfile')) return 'dockerfile'; + if (name.startsWith('.env')) return 'ini'; + const dot = name.lastIndexOf('.'); + const ext = dot > 0 ? name.slice(dot + 1).toLowerCase() : ''; + if (BY_EXT[ext]) return BY_EXT[ext]; + const shebang = /^#!.*\b(bash|sh|zsh|python[0-9.]*|node|ruby|perl)\b/.exec(head); + if (shebang) { + const exe = shebang[1]; + if (exe.startsWith('python')) return 'python'; + if (exe === 'node') return 'javascript'; + if (exe === 'ruby') return 'ruby'; + if (exe === 'perl') return 'perl'; + return 'shell'; + } + return 'plain'; +} + +const FENCE_ALIASES = { js: 'javascript', ts: 'typescript', py: 'python', sh: 'shell', bash: 'shell', zsh: 'shell', yml: 'yaml', rs: 'rust', c: 'cpp', 'c++': 'cpp', golang: 'go', jsonc: 'json', dockerfile: 'dockerfile' }; + +function fencedLanguage(info) { + const key = info.trim().toLowerCase().split(/\s/)[0]; + const id = FENCE_ALIASES[key] ?? key; + if (!id || id === 'markdown' || !byId.has(id)) return null; + const ext = byId.get(id).load(); + if (ext?.language instanceof L.Language) return ext.language; + if (Array.isArray(ext) && ext[0] instanceof L.Language) return ext[0]; + return null; +} + +/** Detect the indentation style used by a document. */ +export function detectIndent(text) { + const lines = text.split('\n', 2000); + let tabs = 0; + let spaces = 0; + const deltas = new Map(); + let previous = 0; + for (const line of lines) { + if (!line.trim()) continue; + if (line[0] === '\t') { + tabs++; + continue; + } + const width = line.length - line.trimStart().length; + if (width > 0) spaces++; + const delta = Math.abs(width - previous); + if (delta >= 2 && delta <= 8) deltas.set(delta, (deltas.get(delta) ?? 0) + 1); + previous = width; + } + if (tabs > spaces && tabs > 0) return { insertSpaces: false, size: null }; + if (!spaces) return null; + let best = null; + for (const [delta, count] of deltas) if (!best || count > best[1]) best = [delta, count]; + return best ? { insertSpaces: true, size: best[0] } : null; +} diff --git a/plugins/trentchou/text-editor/miniapp/client/styles.css b/plugins/trentchou/text-editor/miniapp/client/styles.css new file mode 100644 index 0000000..d14d7c7 --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/client/styles.css @@ -0,0 +1,923 @@ +:root, +[data-theme='light'] { + color-scheme: light; + --mcode-bg: #ffffff; + --mcode-bg-secondary: #f3f3f3; + --mcode-surface: #ffffff; + --mcode-surface-muted: #f5f5f5; + --mcode-hover: #e9e9e9; + --mcode-selected: #dcdcdc; + --mcode-text: #171717; + --mcode-text-muted: #666666; + --mcode-text-subtle: #8f8f8f; + --mcode-border: #0a0a0a14; + --mcode-border-strong: #0a0a0af2; + --mcode-accent: #0077d9; + --mcode-success: #04b54b; + --mcode-warning: #b84d0a; + --mcode-warning-bg: #fff4e5; + --mcode-danger: #d42a3a; + --mcode-primary-action-bg: #171717; + --mcode-primary-action-text: #ffffff; + --mcode-shadow: 0 0 20px rgb(10 10 10 / 8%); + + --ed-bg: #ffffff; + --ed-fg: #24292f; + --ed-caret: #24292f; + --ed-selection: #c8e1ff; + --ed-active-line: #f3f6fa; + --ed-gutter-fg: #9aa1a9; + --ed-fold-bg: #eef2f6; + --ed-fold-border: #c8d1db; + --ed-fold-fg: #57606a; + --ed-match: #c8e1ff80; + --ed-match-border: #9cc4f0; + --ed-bracket: #57606a; + --ed-search: #fff3a3; + --ed-search-border: #e3c100; + --ed-search-selected: #ffd33d; + --ed-invalid-fg: #ffffff; + --ed-invalid-bg: #cf222e; + --ed-whitespace: #b6bdc4; + --ed-minimap-border: #0000000d; + --ed-minimap-overlay: #0000000f; + --ed-guide: #0000001a; + --ed-guide-active: #00000040; + + --sx-comment: #008000; + --sx-string: #a31515; + --sx-number: #098658; + --sx-keyword: #0000ff; + --sx-operator: #383a42; + --sx-function: #795e26; + --sx-definition: #001080; + --sx-type: #267f99; + --sx-type-style: normal; + --sx-property: #0451a5; + --sx-special: #af00db; + --sx-meta: #6e7781; + --sx-punctuation: #383a42; +} + +[data-theme='dark'] { + color-scheme: dark; + --mcode-bg: #272822; + --mcode-bg-secondary: #1e1f1c; + --mcode-surface: #2d2e28; + --mcode-surface-muted: #34352e; + --mcode-hover: #3a3b34; + --mcode-selected: #45463e; + --mcode-text: #f8f8f2; + --mcode-text-muted: #b3b3a8; + --mcode-text-subtle: #8a8a7e; + --mcode-border: #ffffff14; + --mcode-border-strong: #fffffff2; + --mcode-accent: #4aa8ec; + --mcode-success: #a6e22e; + --mcode-warning: #fd971f; + --mcode-warning-bg: #3b3220; + --mcode-danger: #ff5f8a; + --mcode-primary-action-bg: #f8f8f2; + --mcode-primary-action-text: #1e1f1c; + --mcode-shadow: 0 0 24px rgb(0 0 0 / 40%); + + --ed-bg: #272822; + --ed-fg: #f8f8f2; + --ed-caret: #f8f8f0; + --ed-selection: #49483e; + --ed-active-line: #3e3d3266; + --ed-gutter-fg: #90908a; + --ed-fold-bg: #3e3d32; + --ed-fold-border: #75715e; + --ed-fold-fg: #e6db74; + --ed-match: #49483e99; + --ed-match-border: #75715e; + --ed-bracket: #f8f8f2aa; + --ed-search: #e6db7433; + --ed-search-border: #e6db74aa; + --ed-search-selected: #e6db7466; + --ed-invalid-fg: #f8f8f0; + --ed-invalid-bg: #f9267299; + --ed-whitespace: #75715e; + --ed-minimap-border: #ffffff10; + --ed-minimap-overlay: #ffffff14; + --ed-guide: #ffffff14; + --ed-guide-active: #ffffff3d; + + --sx-comment: #8f8a6f; + --sx-string: #e6db74; + --sx-number: #ae81ff; + --sx-keyword: #f92672; + --sx-operator: #f92672; + --sx-function: #a6e22e; + --sx-definition: #f8f8f2; + --sx-type: #66d9ef; + --sx-type-style: italic; + --sx-property: #66d9ef; + --sx-special: #fd971f; + --sx-meta: #8f8a6f; + --sx-punctuation: #f8f8f2; +} + +:root { + --ui-font: ui-sans-serif, -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif; + --ed-font: ui-monospace, 'SFMono-Regular', 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace; + --ed-font-size: 14px; + --ed-line-height: 1.6; + --sidebar-width: 248px; +} + +* { box-sizing: border-box; } + +html, +body { + height: 100%; + margin: 0; +} + +body { + font-family: var(--ui-font); + font-size: 13px; + line-height: 1.5; + color: var(--mcode-text); + background: var(--mcode-bg-secondary); + overflow: hidden; +} + +button, +input, +select { + font: inherit; + color: inherit; +} + +:focus-visible { + outline: 2px solid var(--mcode-accent); + outline-offset: -2px; +} + +svg { flex: none; } + +/* ---- layout ------------------------------------------------------------------------------- */ + +.app { + display: grid; + grid-template-columns: var(--sidebar-width) 4px minmax(0, 1fr); + height: 100vh; +} + +.app.sidebar-hidden { grid-template-columns: 0 0 minmax(0, 1fr); } +.app.sidebar-hidden .sidebar, +.app.sidebar-hidden .resizer { visibility: hidden; } + +.sidebar { + display: flex; + flex-direction: column; + min-width: 0; + overflow: hidden; + background: var(--mcode-bg-secondary); + border-right: 1px solid var(--mcode-border); +} + +.sidebar-header { + display: flex; + align-items: center; + gap: 8px; + height: 40px; + padding: 0 8px 0 14px; +} + +.app-title { + flex: 1; + margin: 0; + overflow: hidden; + font-size: 13px; + font-weight: 600; + white-space: nowrap; + text-overflow: ellipsis; +} + +.section-label { + margin: 4px 0 2px; + padding: 0 14px; + color: var(--mcode-text-subtle); + font-size: 11px; + font-weight: 600; + letter-spacing: 0.04em; +} + +.icon-group { + display: flex; + align-items: center; + gap: 2px; +} + +.icon-btn { + display: inline-grid; + place-items: center; + width: 28px; + height: 28px; + padding: 0; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--mcode-text-muted); + cursor: pointer; + transition: background-color 150ms ease-out, color 150ms ease-out; +} + +.icon-btn:hover { + background: var(--mcode-hover); + color: var(--mcode-text); +} + +.resizer { + cursor: col-resize; + background: transparent; + transition: background-color 150ms ease-out; +} + +.resizer:hover, +.resizer.dragging, +.resizer:focus-visible { background: var(--mcode-accent); } + +.workbench { + display: flex; + flex-direction: column; + min-width: 0; + min-height: 0; + background: var(--ed-bg); +} + +/* ---- tree --------------------------------------------------------------------------------- */ + +.tree { + flex: 1; + min-height: 0; + overflow: auto; + padding: 2px 0 16px; + outline: none; +} + +.tree-group { margin: 0; padding: 0; } + +.tree-item { outline: none; } + +.tree-row { + display: flex; + align-items: center; + gap: 4px; + height: 26px; + padding-right: 10px; + color: var(--mcode-text-muted); + white-space: nowrap; + cursor: pointer; + user-select: none; +} + +.tree-row:hover { background: var(--mcode-hover); color: var(--mcode-text); } +.tree-item:focus-visible > .tree-row { outline: 2px solid var(--mcode-accent); outline-offset: -2px; } +.tree-row.active { background: var(--mcode-selected); color: var(--mcode-text); } +.tree-row.root { color: var(--mcode-text); font-weight: 600; } +.tree-row.drop-target { background: color-mix(in srgb, var(--mcode-accent) 22%, transparent); } + +.tree-twisty { + display: inline-grid; + place-items: center; + width: 14px; + height: 14px; + color: var(--mcode-text-subtle); + transition: transform 150ms ease-out; +} + +.tree-item[aria-expanded='true'] > .tree-row .tree-twisty { transform: rotate(90deg); } +.tree-icon { color: var(--mcode-text-subtle); } +.tree-row.root .tree-icon { color: var(--mcode-text-muted); } + +.tree-name { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; +} + +.tree-badge { + flex: none; + color: var(--mcode-warning); + font-size: 11px; +} + +.tree-note { + padding: 3px 10px; + color: var(--mcode-text-subtle); + font-size: 12px; + white-space: nowrap; +} + +.tree-note.error { color: var(--mcode-danger); white-space: normal; } + +.sidebar-empty { + padding: 16px 14px; + color: var(--mcode-text-muted); +} + +.sidebar-empty h3 { + margin: 0 0 4px; + color: var(--mcode-text); + font-size: 13px; + font-weight: 600; +} + +.sidebar-empty p { margin: 0 0 12px; font-size: 12px; } + +/* ---- tabs --------------------------------------------------------------------------------- */ + +.tabbar { + display: flex; + align-items: stretch; + height: 36px; + flex: none; + background: var(--mcode-bg-secondary); + border-bottom: 1px solid var(--mcode-border); +} + +.tabs { + display: flex; + flex: 1; + min-width: 0; + overflow-x: auto; + overflow-y: hidden; + scrollbar-width: none; +} + +.tabs::-webkit-scrollbar { display: none; } + +.tab { + position: relative; + display: flex; + align-items: center; + gap: 6px; + min-width: 96px; + max-width: 220px; + height: 100%; + padding: 0 6px 0 12px; + border: 0; + border-right: 1px solid var(--mcode-border); + background: transparent; + color: var(--mcode-text-muted); + cursor: pointer; + user-select: none; +} + +.tab:hover { background: var(--mcode-hover); color: var(--mcode-text); } + +.tab[aria-selected='true'] { + background: var(--ed-bg); + color: var(--mcode-text); +} + +.tab[aria-selected='true']::after { + content: ''; + position: absolute; + inset: auto 0 -1px; + height: 1px; + background: var(--ed-bg); +} + +.tab[aria-selected='true']::before { + content: ''; + position: absolute; + inset: 0 0 auto; + height: 2px; + background: var(--mcode-accent); +} + +.tab-name { + flex: 1; + min-width: 0; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.tab-close { + display: inline-grid; + place-items: center; + width: 20px; + height: 20px; + padding: 0; + border: 0; + border-radius: 4px; + background: transparent; + color: var(--mcode-text-subtle); + cursor: pointer; +} + +.tab-close:hover { background: var(--mcode-selected); color: var(--mcode-text); } +.tab .dot { display: none; } +.tab.dirty .tab-close:not(:hover):not(:focus-visible) .x { display: none; } +.tab.dirty .tab-close:not(:hover):not(:focus-visible) .dot { display: block; } +.tab.warn .tab-name { color: var(--mcode-warning); } + +.tabbar-actions { padding: 0 6px; border-left: 1px solid var(--mcode-border); } + +/* ---- banners ------------------------------------------------------------------------------ */ + +.banner { + display: flex; + flex: none; + flex-wrap: wrap; + align-items: center; + gap: 8px 12px; + padding: 8px 14px; + border-bottom: 1px solid var(--mcode-border); + background: var(--mcode-warning-bg); + color: var(--mcode-text); + font-size: 12px; +} + +.banner[hidden] { display: none; } +.banner .banner-text { flex: 1; min-width: 200px; } +.banner .btn { height: 28px; padding: 0 10px; font-size: 12px; } + +/* ---- editor ------------------------------------------------------------------------------- */ + +.editor-area { + position: relative; + flex: 1; + min-height: 0; +} + +.editor, +.welcome { + position: absolute; + inset: 0; +} + +.editor .cm-editor { height: 100%; } +.editor .cm-editor.cm-focused { outline: none; } +.editor[hidden] { display: none; } + +.cm-indentation-marker { opacity: 1; } + +.welcome { + display: grid; + place-items: center; + padding: 24px; + overflow: auto; + background: var(--ed-bg); +} + +.welcome[hidden] { display: none; } + +.welcome-inner { + width: min(460px, 100%); + color: var(--mcode-text-muted); +} + +.welcome h2 { + margin: 0 0 6px; + color: var(--mcode-text); + font-size: 18px; + font-weight: 600; +} + +.welcome p { margin: 0 0 16px; font-size: 13px; } + +.welcome-actions { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-bottom: 24px; +} + +.shortcuts { + display: grid; + grid-template-columns: max-content 1fr; + gap: 6px 16px; + margin: 0; + font-size: 12px; +} + +.shortcuts dt { + justify-self: end; + color: var(--mcode-text); + font-family: var(--ed-font); +} + +.shortcuts dd { margin: 0; } +.shortcuts[hidden] { display: none; } + +/* ---- status bar --------------------------------------------------------------------------- */ + +.statusbar { + display: flex; + align-items: center; + gap: 2px; + height: 26px; + flex: none; + padding: 0 8px; + overflow: hidden; + background: var(--mcode-bg-secondary); + border-top: 1px solid var(--mcode-border); + color: var(--mcode-text-muted); + font-size: 12px; + white-space: nowrap; +} + +.status-item { padding: 0 8px; } +.status-message { overflow: hidden; text-overflow: ellipsis; color: var(--mcode-text-subtle); } +.status-spacer { flex: 1; } + +.status-btn { + height: 22px; + padding: 0 8px; + border: 0; + border-radius: 4px; + background: transparent; + color: var(--mcode-text-muted); + cursor: pointer; +} + +.status-btn:hover { background: var(--mcode-hover); color: var(--mcode-text); } +.status-btn[hidden], +.status-item:empty { display: none; } +.status-btn.muted { color: var(--mcode-text-subtle); } + +/* ---- agent highlights (editor overlays from highlight_code) -------------------------------- */ + +[data-theme='light'] { + --hl-info: #0969da; + --hl-warning: #b76e00; + --hl-error: #cf222e; + --hl-success: #1a7f37; +} + +[data-theme='dark'] { + --hl-info: #66d9ef; + --hl-warning: #fd971f; + --hl-error: #f92672; + --hl-success: #a6e22e; +} + +.hl-info { --hl: var(--hl-info); } +.hl-warning { --hl: var(--hl-warning); } +.hl-error { --hl: var(--hl-error); } +.hl-success { --hl: var(--hl-success); } + +/* Translucent so the selection layer behind the text stays visible; stronger than the active-line rule. */ +.cm-editor .cm-line.cm-agent-line { + background-color: color-mix(in srgb, var(--hl) 11%, transparent); + box-shadow: inset 3px 0 0 var(--hl); +} +.cm-editor .cm-line.cm-agent-line.cm-activeLine { background-color: color-mix(in srgb, var(--hl) 17%, transparent); } + +.cm-agent-mark { + background-color: color-mix(in srgb, var(--hl) 20%, transparent); + border-bottom: 2px solid var(--hl); + border-radius: 2px; +} + +/* Spacing is padding on the widget root: CodeMirror ignores margins when measuring block widgets. */ +.cm-agent-note { + padding: 2px 16px 8px 0; + white-space: normal; + cursor: default; +} + +.cm-agent-note-card { + position: sticky; + left: var(--agent-note-left, 0px); + box-sizing: border-box; + max-width: min(760px, 92vw); + padding: 6px 36px 8px 12px; + border-left: 3px solid var(--hl); + border-radius: 0 6px 6px 0; + background: color-mix(in srgb, var(--hl) 9%, var(--ed-bg)); + color: var(--ed-fg); + font-family: var(--ui-font); + font-size: 12.5px; + line-height: 1.55; +} + +.cm-agent-note-kind { color: var(--hl); font-size: 11.5px; font-weight: 600; } +.cm-agent-note-text { margin-top: 2px; white-space: pre-wrap; overflow-wrap: anywhere; } + +.cm-agent-note-close { + position: absolute; + top: 5px; + right: 6px; + display: grid; + place-items: center; + width: 22px; + height: 22px; + padding: 0; + border: 0; + border-radius: 5px; + background: transparent; + color: var(--mcode-text-muted); + cursor: pointer; +} + +.cm-agent-note-close:hover { background: var(--mcode-hover); color: var(--mcode-text); } +.cm-agent-note-close:focus-visible { outline: 2px solid var(--mcode-accent); outline-offset: -1px; } +.cm-agent-note-close svg { width: 14px; height: 14px; } +.checks .field-hint { margin: 0; } + +/* ---- buttons, inputs ---------------------------------------------------------------------- */ + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 6px; + height: 32px; + padding: 0 14px; + border: 1px solid var(--mcode-border); + border-radius: 8px; + background: var(--mcode-surface-muted); + color: var(--mcode-text); + cursor: pointer; + transition: background-color 150ms ease-out, opacity 150ms ease-out; +} + +.btn:hover { background: var(--mcode-hover); } + +.btn.primary { + border-color: transparent; + background: var(--mcode-primary-action-bg); + color: var(--mcode-primary-action-text); +} + +.btn.primary:hover { opacity: 0.88; } + +.btn.danger { + border-color: color-mix(in srgb, var(--mcode-danger) 45%, transparent); + background: transparent; + color: var(--mcode-danger); +} + +.btn.danger:hover { background: color-mix(in srgb, var(--mcode-danger) 12%, transparent); } + +.input { + width: 100%; + height: 36px; + padding: 0 10px; + border: 1px solid var(--mcode-border); + border-radius: 8px; + background: var(--mcode-surface-muted); +} + +.input:focus { outline: 2px solid var(--mcode-accent); outline-offset: -1px; } +.input[aria-invalid='true'] { border-color: var(--mcode-danger); } + +.field { display: flex; flex-direction: column; gap: 6px; min-width: 0; } +.field[hidden] { display: none; } +.field-label { color: var(--mcode-text-muted); font-size: 12px; } +.field-hint { margin: 8px 0 0; color: var(--mcode-text-subtle); font-size: 12px; } +.field-hint:empty { display: none; } +.field-error { margin: 8px 0 0; color: var(--mcode-danger); font-size: 12px; } + +/* ---- dialogs ------------------------------------------------------------------------------ */ + +dialog { + padding: 0; + border: 1px solid var(--mcode-border); + border-radius: 12px; + background: var(--mcode-surface); + color: var(--mcode-text); + box-shadow: var(--mcode-shadow); +} + +dialog::backdrop { background: rgb(0 0 0 / 28%); } + +.modal { width: min(440px, calc(100vw - 32px)); } +.modal.settings { width: min(560px, calc(100vw - 32px)); } +.modal-form { padding: 20px; } + +.modal-title { + margin: 0 0 12px; + font-size: 16px; + font-weight: 600; +} + +.modal-message { margin: 0; color: var(--mcode-text-muted); } + +.modal-actions { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: 8px; + margin-top: 20px; +} + +.settings-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 14px 16px; +} + +.span-2 { grid-column: span 2; } + +.checks { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px 16px; + margin: 0; + padding: 0; + border: 0; +} + +.checks legend { margin-bottom: 8px; padding: 0; } +.check { display: flex; align-items: center; gap: 8px; cursor: pointer; } +.check input { width: 16px; height: 16px; margin: 0; accent-color: var(--mcode-accent); } + +.palette { + width: min(620px, calc(100vw - 32px)); + margin: 72px auto auto; + overflow: hidden; +} + +.palette::backdrop { background: rgb(0 0 0 / 12%); } + +.palette-input { + width: 100%; + height: 44px; + padding: 0 16px; + border: 0; + border-bottom: 1px solid var(--mcode-border); + background: transparent; + font-size: 14px; + outline: none; +} + +.palette-list { + max-height: min(420px, 60vh); + margin: 0; + padding: 6px; + overflow: auto; + list-style: none; +} + +.palette-item { + display: flex; + align-items: center; + gap: 12px; + min-height: 34px; + padding: 4px 10px; + border-radius: 8px; + cursor: pointer; +} + +.palette-item[aria-selected='true'] { background: var(--mcode-selected); } +.palette-item:hover { background: var(--mcode-hover); } +.palette-item[aria-selected='true']:hover { background: var(--mcode-selected); } +.palette-main { display: flex; flex: 1; flex-direction: column; min-width: 0; } +.palette-title { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } +.palette-title b { color: var(--mcode-accent); font-weight: 600; } +.palette-detail { + overflow: hidden; + color: var(--mcode-text-subtle); + font-size: 12px; + white-space: nowrap; + text-overflow: ellipsis; +} + +.palette-keys { + color: var(--mcode-text-subtle); + font-family: var(--ed-font); + font-size: 12px; + white-space: nowrap; +} + +.palette-hint { + margin: 0; + padding: 8px 16px; + border-top: 1px solid var(--mcode-border); + color: var(--mcode-text-subtle); + font-size: 12px; +} + +.palette-hint:empty { display: none; } + +/* ---- menu, toasts, drop ------------------------------------------------------------------- */ + +.menu { + position: fixed; + z-index: 30; + min-width: 180px; + padding: 6px; + border: 1px solid var(--mcode-border); + border-radius: 12px; + background: var(--mcode-surface); + box-shadow: var(--mcode-shadow); +} + +.menu-item { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + width: 100%; + height: 32px; + padding: 0 10px; + border: 0; + border-radius: 8px; + background: transparent; + text-align: left; + cursor: pointer; +} + +.menu-item:hover, +.menu-item:focus-visible { background: var(--mcode-hover); outline: none; } +.menu-item.danger { color: var(--mcode-danger); } +.menu-item[aria-checked='true']::after { content: '✓'; color: var(--mcode-accent); } +.menu-sep { height: 1px; margin: 4px 6px; background: var(--mcode-border); } + +.toasts { + position: fixed; + right: 16px; + bottom: 40px; + z-index: 40; + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 8px; + pointer-events: none; +} + +.toasts.errors { bottom: auto; top: 48px; } + +.toast { + max-width: min(420px, calc(100vw - 32px)); + padding: 10px 14px; + border: 1px solid var(--mcode-border); + border-left: 3px solid var(--mcode-accent); + border-radius: 8px; + background: var(--mcode-surface); + box-shadow: var(--mcode-shadow); + font-size: 12px; + pointer-events: auto; + animation: toast-in 200ms ease-out; +} + +.toast.warn { border-left-color: var(--mcode-warning); } +.toast.error { border-left-color: var(--mcode-danger); } +.toast button { margin-left: 8px; border: 0; background: none; color: var(--mcode-accent); cursor: pointer; } + +@keyframes toast-in { + from { opacity: 0; transform: translateY(6px); } + to { opacity: 1; transform: none; } +} + +.drop-overlay { + position: fixed; + inset: 0; + z-index: 50; + display: grid; + place-items: center; + background: color-mix(in srgb, var(--mcode-accent) 12%, transparent); + border: 2px dashed var(--mcode-accent); + pointer-events: none; +} + +.drop-overlay[hidden] { display: none; } + +.drop-card { + padding: 12px 18px; + border-radius: 12px; + background: var(--mcode-surface); + box-shadow: var(--mcode-shadow); + font-size: 14px; +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; +} + +@media (max-width: 720px) { + .app { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr); } + .app .sidebar { max-height: 34vh; border-right: 0; border-bottom: 1px solid var(--mcode-border); } + .app .resizer { display: none; } + .app.sidebar-hidden { grid-template-columns: minmax(0, 1fr); } + .app.sidebar-hidden .sidebar { display: none; } + .settings-grid, + .checks { grid-template-columns: 1fr; } + .span-2 { grid-column: auto; } + #st-encoding, + #st-eol { display: none; } +} + +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation: none !important; + transition: none !important; + } +} diff --git a/plugins/trentchou/text-editor/miniapp/client/themes.js b/plugins/trentchou/text-editor/miniapp/client/themes.js new file mode 100644 index 0000000..25e35fe --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/client/themes.js @@ -0,0 +1,86 @@ +// Editor themes. Colors come from CSS variables (see styles.css) so chrome and editor stay in sync. +import * as CM from './vendor/codemirror.js'; + +const { view: V, language: L, tags: t } = CM; + +const base = { + '&': { color: 'var(--ed-fg)', backgroundColor: 'var(--ed-bg)', height: '100%' }, + '.cm-scroller': { fontFamily: 'var(--ed-font)', fontSize: 'var(--ed-font-size)', lineHeight: 'var(--ed-line-height)' }, + '.cm-content': { caretColor: 'var(--ed-caret)', padding: '6px 0 40vh' }, + '.cm-cursor, .cm-dropCursor': { borderLeftColor: 'var(--ed-caret)', borderLeftWidth: '2px' }, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': + { backgroundColor: 'var(--ed-selection) !important' }, + '.cm-activeLine': { backgroundColor: 'var(--ed-active-line)' }, + '.cm-gutters': { backgroundColor: 'var(--ed-bg)', color: 'var(--ed-gutter-fg)', border: 'none' }, + '.cm-lineNumbers .cm-gutterElement': { padding: '0 10px 0 16px', minWidth: '32px' }, + '.cm-activeLineGutter': { backgroundColor: 'var(--ed-active-line)', color: 'var(--ed-fg)' }, + '.cm-foldGutter .cm-gutterElement': { padding: '0 4px', cursor: 'pointer', color: 'var(--ed-gutter-fg)' }, + '.cm-foldGutter .cm-gutterElement:hover': { color: 'var(--ed-fg)' }, + '.cm-foldPlaceholder': { + backgroundColor: 'var(--ed-fold-bg)', border: '1px solid var(--ed-fold-border)', color: 'var(--ed-fold-fg)', + borderRadius: '4px', padding: '0 6px', margin: '0 4px', + }, + '.cm-selectionMatch': { backgroundColor: 'var(--ed-match)', outline: '1px solid var(--ed-match-border)' }, + '&.cm-focused .cm-matchingBracket': { backgroundColor: 'transparent', outline: '1px solid var(--ed-bracket)' }, + '&.cm-focused .cm-nonmatchingBracket': { backgroundColor: 'var(--ed-invalid-bg)' }, + '.cm-searchMatch': { backgroundColor: 'var(--ed-search)', outline: '1px solid var(--ed-search-border)' }, + '.cm-searchMatch.cm-searchMatch-selected': { backgroundColor: 'var(--ed-search-selected)' }, + '.cm-specialChar': { color: 'var(--ed-invalid-fg)' }, + '.cm-highlightSpace': { backgroundImage: 'radial-gradient(circle at 50% 55%, var(--ed-whitespace) 11%, transparent 5%)' }, + '.cm-highlightTab': { backgroundImage: 'none', position: 'relative' }, + '.cm-panels': { backgroundColor: 'var(--mcode-bg-secondary)', color: 'var(--mcode-text)' }, + '.cm-panels.cm-panels-top': { borderBottom: '1px solid var(--mcode-border)' }, + '.cm-panel.cm-search': { padding: '8px 12px', fontFamily: 'var(--ui-font)', fontSize: '12px' }, + '.cm-panel.cm-search input, .cm-panel.cm-search button, .cm-panel.cm-search label': { fontSize: '12px' }, + '.cm-textfield': { + backgroundColor: 'var(--mcode-surface-muted)', color: 'var(--mcode-text)', border: '1px solid var(--mcode-border)', + borderRadius: '6px', padding: '4px 8px', + }, + '.cm-textfield:focus': { outline: '2px solid var(--mcode-accent)', outlineOffset: '-1px' }, + '.cm-button': { + backgroundImage: 'none', backgroundColor: 'var(--mcode-surface-muted)', color: 'var(--mcode-text)', + border: '1px solid var(--mcode-border)', borderRadius: '6px', padding: '4px 10px', + }, + '.cm-button:hover': { backgroundColor: 'var(--mcode-hover)' }, + '.cm-panel.cm-search [name=close]': { color: 'var(--mcode-text-muted)', fontSize: '16px', right: '8px' }, + '.cm-tooltip': { + backgroundColor: 'var(--mcode-surface)', color: 'var(--mcode-text)', border: '1px solid var(--mcode-border)', + borderRadius: '8px', boxShadow: '0 4px 20px rgb(0 0 0 / 18%)', overflow: 'hidden', + }, + '.cm-tooltip-autocomplete > ul': { fontFamily: 'var(--ed-font)', fontSize: '12px' }, + '.cm-tooltip-autocomplete > ul > li[aria-selected]': { backgroundColor: 'var(--mcode-accent)', color: '#fff' }, + '.cm-minimap-gutter': { borderLeft: '1px solid var(--ed-minimap-border)' }, + '.cm-minimap-overlay': { backgroundColor: 'var(--ed-minimap-overlay)' }, +}; + +export const darkTheme = V.EditorView.theme(base, { dark: true }); +export const lightTheme = V.EditorView.theme(base, { dark: false }); + +export const highlight = L.HighlightStyle.define([ + { tag: [t.comment, t.lineComment, t.blockComment, t.docComment], color: 'var(--sx-comment)', fontStyle: 'italic' }, + { tag: [t.string, t.special(t.string), t.regexp, t.character], color: 'var(--sx-string)' }, + { tag: [t.number, t.integer, t.float, t.bool, t.null, t.atom, t.unit], color: 'var(--sx-number)' }, + { tag: [t.keyword, t.controlKeyword, t.operatorKeyword, t.definitionKeyword, t.moduleKeyword, t.modifier], color: 'var(--sx-keyword)' }, + { tag: [t.operator, t.compareOperator, t.logicOperator, t.arithmeticOperator, t.derefOperator], color: 'var(--sx-operator)' }, + { tag: [t.function(t.variableName), t.function(t.propertyName), t.function(t.definition(t.variableName))], color: 'var(--sx-function)' }, + { tag: [t.definition(t.variableName), t.definition(t.propertyName)], color: 'var(--sx-definition)' }, + { tag: [t.typeName, t.className, t.namespace, t.standard(t.typeName)], color: 'var(--sx-type)', fontStyle: 'var(--sx-type-style)' }, + { tag: [t.propertyName, t.attributeName], color: 'var(--sx-property)' }, + { tag: [t.self, t.special(t.variableName), t.local(t.variableName)], color: 'var(--sx-special)' }, + { tag: [t.tagName, t.angleBracket], color: 'var(--sx-keyword)' }, + { tag: [t.labelName, t.macroName, t.constant(t.variableName)], color: 'var(--sx-number)' }, + { tag: [t.meta, t.processingInstruction, t.annotation], color: 'var(--sx-meta)' }, + { tag: [t.escape], color: 'var(--sx-number)' }, + { tag: t.heading, color: 'var(--sx-function)', fontWeight: '600' }, + { tag: [t.heading1, t.heading2], color: 'var(--sx-function)', fontWeight: '700' }, + { tag: t.strong, fontWeight: '700' }, + { tag: t.emphasis, fontStyle: 'italic' }, + { tag: t.strikethrough, textDecoration: 'line-through' }, + { tag: [t.link, t.url], color: 'var(--sx-type)', textDecoration: 'underline' }, + { tag: [t.quote, t.monospace], color: 'var(--sx-string)' }, + { tag: t.inserted, color: 'var(--sx-function)' }, + { tag: t.deleted, color: 'var(--sx-keyword)' }, + { tag: t.changed, color: 'var(--sx-string)' }, + { tag: t.invalid, color: 'var(--ed-invalid-fg)', backgroundColor: 'var(--ed-invalid-bg)' }, + { tag: [t.punctuation, t.separator, t.bracket], color: 'var(--sx-punctuation)' }, +]); diff --git a/plugins/trentchou/text-editor/miniapp/client/vendor/THIRD_PARTY_LICENSES.txt b/plugins/trentchou/text-editor/miniapp/client/vendor/THIRD_PARTY_LICENSES.txt new file mode 100644 index 0000000..89af3e4 --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/client/vendor/THIRD_PARTY_LICENSES.txt @@ -0,0 +1,1034 @@ +Third-party software bundled in vendor/codemirror.js and vendor/cm-state.mjs + +==== @codemirror/autocomplete@6.20.3 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/collab@6.1.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/commands@6.11.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-cpp@6.0.3 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-css@6.3.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-go@6.0.1 (MIT) +MIT License + +Copyright (C) 2024 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-html@6.4.12 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-java@6.0.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-javascript@6.2.5 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-json@6.0.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-markdown@6.5.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-php@6.0.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-python@6.2.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-rust@6.0.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-sql@6.10.0 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-xml@6.1.0 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-yaml@6.1.3 (MIT) +MIT License + +Copyright (C) 2024 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/language@6.13.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/legacy-modes@6.5.5 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lint@6.9.7 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/search@6.7.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/state@6.7.6 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/streamparser@6.0.0 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/view@6.43.14 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/common@1.5.3 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/cpp@1.1.6 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/css@1.3.9 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/go@1.0.1 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/highlight@1.2.5 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/html@1.3.13 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/java@1.1.5 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/javascript@1.5.6 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/json@1.0.3 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke , Arun Srinivasan , and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/lr@1.4.11 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/markdown@1.8.0 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/php@1.0.6 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/python@1.1.19 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/rust@1.0.3 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/xml@1.0.6 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/yaml@1.0.4 (MIT) +MIT License + +Copyright (C) 2024 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @marijn/find-cluster-break@1.0.4 (MIT) +MIT License + +Copyright (C) 2024 by Marijn Haverbeke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @replit/codemirror-indentation-markers@6.5.3 (MIT) +MIT License + +Copyright (c) 2022 Replit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +==== @replit/codemirror-minimap@0.5.2 (MIT) +License: MIT + +==== crelt@1.0.7 (MIT) +Copyright (C) 2020 by Marijn Haverbeke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== style-mod@4.1.4 (MIT) +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== w3c-keyname@2.2.8 (MIT) +Copyright (C) 2016 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/plugins/trentchou/text-editor/miniapp/client/vendor/codemirror.js b/plugins/trentchou/text-editor/miniapp/client/vendor/codemirror.js new file mode 100644 index 0000000..a6454ac --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/client/vendor/codemirror.js @@ -0,0 +1,41 @@ +/*! Vendored CodeMirror 6 bundle (MIT). See THIRD_PARTY_LICENSES.txt. */ +var Ok=Object.defineProperty;var ei=(t,e)=>{for(var O in e)Ok(t,O,{get:e[O],enumerable:!0})};var dQ={};ei(dQ,{Annotation:()=>Ee,AnnotationType:()=>Sa,ChangeDesc:()=>Ct,ChangeSet:()=>Ye,CharCategory:()=>ee,Compartment:()=>En,EditorSelection:()=>X,EditorState:()=>$e,Facet:()=>z,Line:()=>pa,MapMode:()=>Te,Prec:()=>Ie,Range:()=>Ni,RangeSet:()=>te,RangeSetBuilder:()=>Re,RangeValue:()=>ct,SelectionRange:()=>yO,StateEffect:()=>A,StateEffectType:()=>Xa,StateField:()=>Qe,Text:()=>K,Transaction:()=>Pe,codePointAt:()=>ze,codePointSize:()=>tt,combineConfig:()=>xe,countColumn:()=>Me,findClusterBreak:()=>be,findColumn:()=>In,fromCodePoint:()=>Bi});var il=[],Nd=[];(()=>{let t="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,1n,9,16,o,,x,1i,3,,i,,7,a,2,t,3,1k,,,7,2,2,2,3,9,,a,2,q,,2,3,1k,,,5,4,2,2,3,3,,u,2,3,,b,3,1k,,,8,,3,,3,k,2,m,6,,3,1k,,,7,2,2,2,3,7,3,a,2,u,,1n,5,3,3,,4,9,,14,5,1j,,,7,,3,,4,7,2,b,2,t,3,1k,,,7,,3,,4,7,2,b,2,f,,c,4,1j,2,,7,,3,,4,9,,a,2,t,3,1y,,4,6,,,,8,i,2,1p,,,8,c,8,2q,,,a,b,7,21,2,r,,,,,,4,2,1d,k,,2,5,b,,10,9,,2u,b,,6,n,4,4,3,g,4,d,,,3,6,,f,,jj,3,qa,4,s,3,t,2,u,2,1s,w,9,,19,3,,,39,2,y,,3a,c,4,c,63,5,1l,a,,,,,2,o,2,,1c,1a,2,c,k,5,1b,h,12,9,c,3,u,d,1k,e,1c,k,48,3,,l,4,,6,,2,3,5i,1s,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,n,5,4,,2b,2,1e,i,q,i,d,,12,8,p,d,18,4,1b,e,10,,1v,e,c,,8,2,1a,,1f,,,3,2,2,5,2,,,15,5,5,2,6k,8,,2,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,1t,5,8t,2,25,6,1y,b,1d,4,3e,3,1h,f,15,,2,2,a,4,19,b,7,,1p,3,10,e,g,2,18,,c,3,1c,e,8,4,,2,2k,c,6,,2,,4d,c,l,4,1j,2,,7,2,2,2,3,9,,a,2,2,7,3,5,1v,9,,,2,,,4,,5,,,e,2,2a,i,n,,29,k,6j,7,2,9,r,2,2a,h,2y,d,2t,3,2,a,74,f,6t,6,,2,2,4,,,,2,3x,7,2,7,3,,s,a,14,7,,4,8,,9,b,1a,g,5i,8,5j,8,,8,2a,m,,e,3e,6,3,,,2,,7,,,1u,5,,2,,5,9n,4,9,2,,,1c,7,3,5,n,,44l,,6,f,8ug,i,1xc,5,1n,7,t4,,,1j,7,4,29,,b,2,f57,2,3mp,1a,2,n,f2,5,3,6,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,2s,,4g,7,af,,1p,4,e4,4,72,2,6r,,2,,7,2,5,,d6,7,31,7,240,5".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,O=0;e>1;if(t=Nd[i])e=i+1;else return!0;if(e==O)return!1}}function Id(t){return t>=127462&&t<=127487}var Md=8205;function Bd(t,e,O=!0,i=!0){return(O?Fd:nk)(t,e,i)}function Fd(t,e,O){if(e==t.length)return e;e&&Hd(t.charCodeAt(e))&&Kd(t.charCodeAt(e-1))&&e--;let i=Ol(t,e);for(e+=Dd(i);e=0&&Id(Ol(t,a));)r++,a-=2;if(r%2==0)break;e+=2}else break}return e}function nk(t,e,O){for(;e>1;){let i=Fd(t,e-2,O);if(i=56320&&t<57344}function Kd(t){return t>=55296&&t<56320}function Dd(t){return t<65536?1:2}var K=class t{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,O,i){[e,O]=Di(this,e,O);let n=[];return this.decompose(0,e,n,2),i.length&&i.decompose(0,i.length,n,3),this.decompose(O,this.length,n,1),Li.from(n,this.length-(O-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,O=this.length){[e,O]=Di(this,e,O);let i=[];return this.decompose(e,O,i,0),Li.from(i,O-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let O=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),n=new ii(this),r=new ii(e);for(let a=O,o=O;;){if(n.next(a),r.next(a),a=0,n.lineBreak!=r.lineBreak||n.done!=r.done||n.value!=r.value)return!1;if(o+=n.value.length,n.done||o>=i)return!0}}iter(e=1){return new ii(this,e)}iterRange(e,O=this.length){return new Qa(this,e,O)}iterLines(e,O){let i;if(e==null)i=this.iter();else{O==null&&(O=this.lines+1);let n=this.line(e).from;i=this.iterRange(n,Math.max(n,O==this.lines+1?this.length:O<=1?0:this.line(O-1).to))}return new $a(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?t.empty:e.length<=32?new lt(e):Li.from(lt.split(e,[]))}},lt=class t extends K{constructor(e,O=rk(e)){super(),this.text=e,this.length=O}get lines(){return this.text.length}get children(){return null}lineInner(e,O,i,n){for(let r=0;;r++){let a=this.text[r],o=n+a.length;if((O?i:o)>=e)return new pa(n,o,i,a);n=o+1,i++}}decompose(e,O,i,n){let r=e<=0&&O>=this.length?this:new t(Jd(this.text,e,O),Math.min(O,this.length)-Math.max(0,e));if(n&1){let a=i.pop(),o=da(r.text,a.text.slice(),0,r.length);if(o.length<=32)i.push(new t(o,a.length+r.length));else{let s=o.length>>1;i.push(new t(o.slice(0,s)),new t(o.slice(s)))}}else i.push(r)}replace(e,O,i){if(!(i instanceof t))return super.replace(e,O,i);[e,O]=Di(this,e,O);let n=da(this.text,da(i.text,Jd(this.text,0,e)),O),r=this.length+i.length-(O-e);return n.length<=32?new t(n,r):Li.from(t.split(n,[]),r)}sliceString(e,O=this.length,i=` +`){[e,O]=Di(this,e,O);let n="";for(let r=0,a=0;r<=O&&ae&&a&&(n+=i),er&&(n+=o.slice(Math.max(0,e-r),O-r)),r=s+1}return n}flatten(e){for(let O of this.text)e.push(O)}scanIdentical(){return 0}static split(e,O){let i=[],n=-1;for(let r of e)i.push(r),n+=r.length+1,i.length==32&&(O.push(new t(i,n)),i=[],n=-1);return n>-1&&O.push(new t(i,n)),O}},Li=class t extends K{constructor(e,O){super(),this.children=e,this.length=O,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,O,i,n){for(let r=0;;r++){let a=this.children[r],o=n+a.length,s=i+a.lines-1;if((O?s:o)>=e)return a.lineInner(e,O,i,n);n=o+1,i=s+1}}decompose(e,O,i,n){for(let r=0,a=0;a<=O&&r=a){let l=n&((a<=e?1:0)|(s>=O?2:0));a>=e&&s<=O&&!l?i.push(o):o.decompose(e-a,O-a,i,l)}a=s+1}}replace(e,O,i){if([e,O]=Di(this,e,O),i.lines=r&&O<=o){let s=a.replace(e-r,O-r,i),l=this.lines-a.lines+s.lines;if(s.lines>4&&s.lines>l>>6){let c=this.children.slice();return c[n]=s,new t(c,this.length-(O-e)+i.length)}return super.replace(r,o,s)}r=o+1}return super.replace(e,O,i)}sliceString(e,O=this.length,i=` +`){[e,O]=Di(this,e,O);let n="";for(let r=0,a=0;re&&r&&(n+=i),ea&&(n+=o.sliceString(e-a,O-a,i)),a=s+1}return n}flatten(e){for(let O of this.children)O.flatten(e)}scanIdentical(e,O){if(!(e instanceof t))return 0;let i=0,[n,r,a,o]=O>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;n+=O,r+=O){if(n==a||r==o)return i;let s=this.children[n],l=e.children[r];if(s!=l)return i+s.scanIdentical(l,O);i+=s.length+1}}static from(e,O=e.reduce((i,n)=>i+n.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let Q of e)Q.flatten(d);return new lt(d,O)}let n=Math.max(32,i>>5),r=n<<1,a=n>>1,o=[],s=0,l=-1,c=[];function h(d){let Q;if(d.lines>r&&d instanceof t)for(let $ of d.children)h($);else d.lines>a&&(s>a||!s)?(f(),o.push(d)):d instanceof lt&&s&&(Q=c[c.length-1])instanceof lt&&d.lines+Q.lines<=32?(s+=d.lines,l+=d.length+1,c[c.length-1]=new lt(Q.text.concat(d.text),Q.length+1+d.length)):(s+d.lines>n&&f(),s+=d.lines,l+=d.length+1,c.push(d))}function f(){s!=0&&(o.push(c.length==1?c[0]:t.from(c,l)),l=-1,s=c.length=0)}for(let d of e)h(d);return f(),o.length==1?o[0]:new t(o,O)}};K.empty=new lt([""],0);function rk(t){let e=-1;for(let O of t)e+=O.length+1;return e}function da(t,e,O=0,i=1e9){for(let n=0,r=0,a=!0;r=O&&(s>i&&(o=o.slice(0,i-n)),n0?1:(e instanceof lt?e.text.length:e.children.length)<<1]}nextInner(e,O){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,n=this.nodes[i],r=this.offsets[i],a=r>>1,o=n instanceof lt?n.text.length:n.children.length;if(a==(O>0?o:0)){if(i==0)return this.done=!0,this.value="",this;O>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(O>0?0:1)){if(this.offsets[i]+=O,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(n instanceof lt){let s=n.text[a+(O<0?-1:0)];if(this.offsets[i]+=O,s.length>Math.max(0,e))return this.value=e==0?s:O>0?s.slice(e):s.slice(0,s.length-e),this;e-=s.length}else{let s=n.children[a+(O<0?-1:0)];e>s.length?(e-=s.length,this.offsets[i]+=O):(O<0&&this.offsets[i]--,this.nodes.push(s),this.offsets.push(O>0?1:(s instanceof lt?s.text.length:s.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},Qa=class{constructor(e,O,i){this.value="",this.done=!1,this.cursor=new ii(e,O>i?-1:1),this.pos=O>i?e.length:0,this.from=Math.min(O,i),this.to=Math.max(O,i)}nextInner(e,O){if(O<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,O<0?this.pos-this.to:this.from-this.pos);let i=O<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:n}=this.cursor.next(e);return this.pos+=(n.length+e)*O,this.value=n.length<=i?n:O<0?n.slice(n.length-i):n.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},$a=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:O,lineBreak:i,value:n}=this.inner.next(e);return O&&this.afterBreak?(this.value="",this.afterBreak=!1):O?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=n,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(K.prototype[Symbol.iterator]=function(){return this.iter()},ii.prototype[Symbol.iterator]=Qa.prototype[Symbol.iterator]=$a.prototype[Symbol.iterator]=function(){return this});var pa=class{constructor(e,O,i,n){this.from=e,this.to=O,this.number=i,this.text=n}get length(){return this.to-this.from}};function Di(t,e,O){return e=Math.max(0,Math.min(t.length,e)),[e,Math.max(e,Math.min(t.length,O))]}function be(t,e,O=!0,i=!0){return Bd(t,e,O,i)}function ak(t){return t>=56320&&t<57344}function ok(t){return t>=55296&&t<56320}function ze(t,e){let O=t.charCodeAt(e);if(!ok(O)||e+1==t.length)return O;let i=t.charCodeAt(e+1);return ak(i)?(O-55296<<10)+(i-56320)+65536:O}function Bi(t){return t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode((t>>10)+55296,(t&1023)+56320))}function tt(t){return t<65536?1:2}var rl=/\r\n?|\n/,Te=(function(t){return t[t.Simple=0]="Simple",t[t.TrackDel=1]="TrackDel",t[t.TrackBefore=2]="TrackBefore",t[t.TrackAfter=3]="TrackAfter",t})(Te||(Te={})),Ct=class t{constructor(e){this.sections=e}get length(){let e=0;for(let O=0;Oe)return r+(e-n);r+=o}else{if(i!=Te.Simple&&l>=e&&(i==Te.TrackDel&&ne||i==Te.TrackBefore&&ne))return null;if(l>e||l==e&&O<0&&!o)return e==n||O<0?r:r+s;r+=s}n=l}if(e>n)throw new RangeError(`Position ${e} is out of range for changeset of length ${n}`);return r}touchesRange(e,O=e){for(let i=0,n=0;i=0&&n<=O&&o>=e)return nO?"cover":!0;n=o}return!1}toString(){let e="";for(let O=0;O=0?":"+n:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(O=>typeof O!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new t(e)}static create(e){return new t(e)}},Ye=class t extends Ct{constructor(e,O){super(e),this.inserted=O}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return al(this,(O,i,n,r,a)=>e=e.replace(n,n+(i-O),a),!1),e}mapDesc(e,O=!1){return ol(this,e,O,!0)}invert(e){let O=this.sections.slice(),i=[];for(let n=0,r=0;n=0){O[n]=o,O[n+1]=a;let s=n>>1;for(;i.length0&&wO(i,O,r.text),r.forward(c),o+=c}let l=e[a++];for(;o>1].toJSON()))}return e}static of(e,O,i){let n=[],r=[],a=0,o=null;function s(c=!1){if(!c&&!n.length)return;af||h<0||f>O)throw new RangeError(`Invalid change range ${h} to ${f} (in doc of length ${O})`);let Q=d?typeof d=="string"?K.of(d.split(i||rl)):d:K.empty,$=Q.length;if(h==f&&$==0)return;ha&&Le(n,h-a,-1),Le(n,f-h,$),wO(r,n,Q),a=f}}return l(e),s(!o),o}static empty(e){return new t(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let O=[],i=[];for(let n=0;no&&typeof a!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)O.push(r[0],0);else{for(;i.length=0&&O<=0&&O==t[n+1]?t[n]+=e:n>=0&&e==0&&t[n]==0?t[n+1]+=O:i?(t[n]+=e,t[n+1]+=O):t.push(e,O)}function wO(t,e,O){if(O.length==0)return;let i=e.length-2>>1;if(i>1])),!(O||a==t.sections.length||t.sections[a+1]<0);)o=t.sections[a++],s=t.sections[a++];e(n,l,r,c,h),n=l,r=c}}}function ol(t,e,O,i=!1){let n=[],r=i?[]:null,a=new ni(t),o=new ni(e);for(let s=-1;;){if(a.done&&o.len||o.done&&a.len)throw new Error("Mismatched change set lengths");if(a.ins==-1&&o.ins==-1){let l=Math.min(a.len,o.len);Le(n,l,-1),a.forward(l),o.forward(l)}else if(o.ins>=0&&(a.ins<0||s==a.i||a.off==0&&(o.len=0&&s=0){let l=0,c=a.len;for(;c;)if(o.ins==-1){let h=Math.min(c,o.len);l+=h,c-=h,o.forward(h)}else if(o.ins==0&&o.lens||a.ins>=0&&a.len>s)&&(o||i.length>l),r.forward2(s),a.forward(s)}}}}var ni=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return O>=e.length?K.empty:e[O]}textBit(e){let{inserted:O}=this.set,i=this.i-2>>1;return i>=O.length&&!e?K.empty:O[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},yO=class t{constructor(e,O,i,n){this.from=e,this.to=O,this.flags=i,this.goalColumn=n}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,O=-1){let i,n;return this.empty?i=n=e.mapPos(this.from,O):(i=e.mapPos(this.from,1),n=e.mapPos(this.to,-1)),i==this.from&&n==this.to?this:new t(i,n,this.flags,this.goalColumn)}extend(e,O=e,i=0){if(e<=this.anchor&&O>=this.anchor)return X.range(e,O,void 0,void 0,i);let n=Math.abs(e-this.anchor)>Math.abs(O-this.anchor)?e:O;return X.range(this.anchor,n,void 0,void 0,i)}eq(e,O=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!O||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return X.range(e.anchor,e.head)}static create(e,O,i,n){return new t(e,O,i,n)}},X=class t{constructor(e,O){this.ranges=e,this.mainIndex=O}map(e,O=-1){return e.empty?this:t.create(this.ranges.map(i=>i.map(e,O)),this.mainIndex)}eq(e,O=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new t(e.ranges.map(O=>yO.fromJSON(O)),e.main)}static single(e,O=e){return new t([t.range(e,O)],0)}static create(e,O=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,n=0;nn.from-r.from),O=e.indexOf(i);for(let n=1;nr.head?t.range(s,o):t.range(o,s))}}return new t(e,O)}};function rQ(t,e){for(let O of t.ranges)if(O.to>e)throw new RangeError("Selection points outside of document")}var Ql=0,z=class t{constructor(e,O,i,n,r){this.combine=e,this.compareInput=O,this.compare=i,this.isStatic=n,this.id=Ql++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new t(e.combine||(O=>O),e.compareInput||((O,i)=>O===i),e.compare||(e.combine?(O,i)=>O===i:$l),!!e.static,e.enables)}of(e){return new Ii([],this,0,e)}compute(e,O){if(this.isStatic)throw new Error("Can't compute a static facet");return new Ii(e,this,1,O)}computeN(e,O){if(this.isStatic)throw new Error("Can't compute a static facet");return new Ii(e,this,2,O)}from(e,O){return O||(O=i=>i),this.compute([e],i=>O(i.field(e)))}};function $l(t,e){return t==e||t.length==e.length&&t.every((O,i)=>O===e[i])}var Ii=class{constructor(e,O,i,n){this.dependencies=e,this.facet=O,this.type=i,this.value=n,this.id=Ql++}dynamicSlot(e){var O;let i=this.value,n=this.facet.compareInput,r=this.id,a=e[r]>>1,o=this.type==2,s=!1,l=!1,c=[];for(let h of this.dependencies)h=="doc"?s=!0:h=="selection"?l=!0:(((O=e[h.id])!==null&&O!==void 0?O:1)&1)==0&&c.push(e[h.id]);return{create(h){return h.values[a]=i(h),1},update(h,f){if(s&&f.docChanged||l&&(f.docChanged||f.selection)||sl(h,c)){let d=i(h);if(o?!eQ(d,h.values[a],n):!n(d,h.values[a]))return h.values[a]=d,1}return 0},reconfigure:(h,f)=>{let d,Q=f.config.address[r];if(Q!=null){let $=Pa(f,Q);if(this.dependencies.every(p=>p instanceof z?f.facet(p)===h.facet(p):p instanceof Qe?f.field(p,!1)==h.field(p,!1):!0)||(o?eQ(d=i(h),$,n):n(d=i(h),$)))return h.values[a]=$,0}else d=i(h);return h.values[a]=d,1}}}get extension(){return this}};function eQ(t,e,O){if(t.length!=e.length)return!1;for(let i=0;it[s.id]),n=O.map(s=>s.type),r=i.filter(s=>!(s&1)),a=t[e.id]>>1;function o(s){let l=[];for(let c=0;ci===n),e);return e.provide&&(O.provides=e.provide(O)),O}create(e){let O=e.facet(ha).find(i=>i.field==this);return(O?.create||this.createF)(e)}slot(e){let O=e[this.id]>>1;return{create:i=>(i.values[O]=this.create(i),1),update:(i,n)=>{let r=i.values[O],a=this.updateF(r,n);return this.compareF(r,a)?0:(i.values[O]=a,1)},reconfigure:(i,n)=>{let r=i.facet(ha),a=n.facet(ha),o;return(o=r.find(s=>s.field==this))&&o!=a.find(s=>s.field==this)?(i.values[O]=o.create(i),1):n.config.address[this.id]!=null?(i.values[O]=n.field(this),0):(i.values[O]=this.create(i),1)}}}init(e){return[this,ha.of({field:this,create:e})]}get extension(){return this}},ti={lowest:4,low:3,default:2,high:1,highest:0};function Gn(t){return e=>new ma(e,t)}var Ie={highest:Gn(ti.highest),high:Gn(ti.high),default:Gn(ti.default),low:Gn(ti.low),lowest:Gn(ti.lowest)},ma=class{constructor(e,O){this.inner=e,this.prec=O}get extension(){return this}},En=class t{of(e){return new An(this,e)}reconfigure(e){return t.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},An=class{constructor(e,O){this.compartment=e,this.inner=O}get extension(){return this}},ga=class t{constructor(e,O,i,n,r,a){for(this.base=e,this.compartments=O,this.dynamicSlots=i,this.address=n,this.staticValues=r,this.facets=a,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,O,i){let n=[],r=Object.create(null),a=new Map;for(let f of lk(e,O,a))f instanceof Qe?n.push(f):(r[f.facet.id]||(r[f.facet.id]=[])).push(f);let o=Object.create(null),s=[],l=[];for(let f of n)o[f.id]=l.length<<1,l.push(d=>f.slot(d));let c=i?.config.facets;for(let f in r){let d=r[f],Q=d[0].facet,$=c&&c[f]||[];if(d.every(p=>p.type==0))if(o[Q.id]=s.length<<1|1,$l($,d))s.push(i.facet(Q));else{let p=Q.combine(d.map(m=>m.value));s.push(i&&Q.compare(p,i.facet(Q))?i.facet(Q):p)}else{for(let p of d)p.type==0?(o[p.id]=s.length<<1|1,s.push(p.value)):(o[p.id]=l.length<<1,l.push(m=>p.dynamicSlot(m)));o[Q.id]=l.length<<1,l.push(p=>sk(p,Q,d))}}let h=l.map(f=>f(o));return new t(e,a,h,o,s,r)}};function lk(t,e,O){let i=[[],[],[],[],[]],n=new Map;function r(a,o){let s=n.get(a);if(s!=null){if(s<=o)return;let l=i[s].indexOf(a);l>-1&&i[s].splice(l,1),a instanceof An&&O.delete(a.compartment)}if(n.set(a,o),Array.isArray(a))for(let l of a)r(l,o);else if(a instanceof An){if(O.has(a.compartment))throw new RangeError("Duplicate use of compartment in extensions");let l=e.get(a.compartment)||a.inner;O.set(a.compartment,l),r(l,o)}else if(a instanceof ma)r(a.inner,a.prec);else if(a instanceof Qe)i[o].push(a),a.provides&&r(a.provides,o);else if(a instanceof Ii)i[o].push(a),a.facet.extensions&&r(a.facet.extensions,ti.default);else{let l=a.extension;if(!l)throw new Error(`Unrecognized extension value in extension set (${a}).`);if(l==a)throw new Error(`Unrecognized extension value in extension set (${a}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(l,o)}}return r(t,ti.default),i.reduce((a,o)=>a.concat(o))}function Cn(t,e){if(e&1)return 2;let O=e>>1,i=t.status[O];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;t.status[O]=4;let n=t.computeSlot(t,t.config.dynamicSlots[O]);return t.status[O]=2|n}function Pa(t,e){return e&1?t.config.staticValues[e>>1]:t.values[e>>1]}var aQ=z.define(),ll=z.define({combine:t=>t.some(e=>e),static:!0}),oQ=z.define({combine:t=>t.length?t[0]:void 0,static:!0}),sQ=z.define(),lQ=z.define(),cQ=z.define(),hQ=z.define({combine:t=>t.length?t[0]:!1}),Ee=class{constructor(e,O){this.type=e,this.value=O}static define(){return new Sa}},Sa=class{of(e){return new Ee(this,e)}},Xa=class{constructor(e){this.map=e}of(e){return new A(this,e)}},A=class t{constructor(e,O){this.type=e,this.value=O}map(e){let O=this.type.map(this.value,e);return O===void 0?void 0:O==this.value?this:new t(this.type,O)}is(e){return this.type==e}static define(e={}){return new Xa(e.map||(O=>O))}static mapEffects(e,O){if(!e.length)return e;let i=[];for(let n of e){let r=n.map(O);r&&i.push(r)}return i}};A.reconfigure=A.define();A.appendConfig=A.define();var Pe=class t{constructor(e,O,i,n,r,a){this.startState=e,this.changes=O,this.selection=i,this.effects=n,this.annotations=r,this.scrollIntoView=a,this._doc=null,this._state=null,i&&rQ(i,O.newLength),r.some(o=>o.type==t.time)||(this.annotations=r.concat(t.time.of(Date.now())))}static create(e,O,i,n,r,a){return new t(e,O,i,n,r,a)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let O of this.annotations)if(O.type==e)return O.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let O=this.annotation(t.userEvent);return!!(O&&(O==e||O.length>e.length&&O.slice(0,e.length)==e&&O[e.length]=="."))}};Pe.time=Ee.define();Pe.userEvent=Ee.define();Pe.addToHistory=Ee.define();Pe.remote=Ee.define();function ck(t,e){let O=[];for(let i=0,n=0;;){let r,a;if(i=t[i]))r=t[i++],a=t[i++];else if(n=0;n--){let r=i[n](t);r instanceof Pe?t=r:Array.isArray(r)&&r.length==1&&r[0]instanceof Pe?t=r[0]:t=uQ(e,Mi(r),!1)}return t}function fk(t){let e=t.startState,O=e.facet(cQ),i=t;for(let n=O.length-1;n>=0;n--){let r=O[n](t);r&&Object.keys(r).length&&(i=fQ(i,cl(e,r,t.changes.newLength),!0))}return i==t?t:Pe.create(e,t.changes,t.selection,i.effects,i.annotations,i.scrollIntoView)}var uk=[];function Mi(t){return t==null?uk:Array.isArray(t)?t:[t]}var ee=(function(t){return t[t.Word=0]="Word",t[t.Space=1]="Space",t[t.Other=2]="Other",t})(ee||(ee={})),dk=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,hl;try{hl=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function Qk(t){if(hl)return hl.test(t);for(let e=0;e"\x80"&&(O.toUpperCase()!=O.toLowerCase()||dk.test(O)))return!0}return!1}function $k(t){return e=>{if(!/\S/.test(e))return ee.Space;if(Qk(e))return ee.Word;for(let O=0;O-1)return ee.Word;return ee.Other}}var $e=class t{constructor(e,O,i,n,r,a){this.config=e,this.doc=O,this.selection=i,this.values=n,this.status=e.statusTemplate.slice(),this.computeSlot=r,a&&(a._state=this);for(let o=0;on.set(l,s)),O=null),n.set(o.value.compartment,o.value.extension)):o.is(A.reconfigure)?(O=null,i=o.value):o.is(A.appendConfig)&&(O=null,i=Mi(i).concat(o.value));let r;O?r=e.startState.values.slice():(O=ga.resolve(i,n,this),r=new t(O,this.doc,this.selection,O.dynamicSlots.map(()=>null),(s,l)=>l.reconfigure(s,this),null).values);let a=e.startState.facet(ll)?e.newSelection:e.newSelection.asSingle();new t(O,e.newDoc,a,r,(o,s)=>s.update(o,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(O=>({changes:{from:O.from,to:O.to,insert:e},range:X.cursor(O.from+e.length,-1)}))}changeByRange(e){let O=this.selection,i=e(O.ranges[0]),n=this.changes(i.changes),r=[i.range],a=Mi(i.effects);for(let o=1;oa.spec.fromJSON(o,s)))}}return t.create({doc:e.doc,selection:X.fromJSON(e.selection),extensions:O.extensions?n.concat([O.extensions]):n})}static create(e={}){let O=ga.resolve(e.extensions||[],new Map),i=e.doc instanceof K?e.doc:K.of((e.doc||"").split(O.staticFacet(t.lineSeparator)||rl)),n=e.selection?e.selection instanceof X?e.selection:X.single(e.selection.anchor,e.selection.head):X.single(0);return rQ(n,i.length),O.staticFacet(ll)||(n=n.asSingle()),new t(O,i,n,O.dynamicSlots.map(()=>null),(r,a)=>a.create(r),null)}get tabSize(){return this.facet(t.tabSize)}get lineBreak(){return this.facet(t.lineSeparator)||` +`}get readOnly(){return this.facet(hQ)}phrase(e,...O){for(let i of this.facet(t.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return O.length&&(e=e.replace(/\$(\$|\d*)/g,(i,n)=>{if(n=="$")return"$";let r=+(n||1);return!r||r>O.length?i:O[r-1]})),e}languageDataAt(e,O,i=-1){let n=[];for(let r of this.facet(aQ))for(let a of r(this,O,i))Object.prototype.hasOwnProperty.call(a,e)&&n.push(a[e]);return n}charCategorizer(e){let O=this.languageDataAt("wordChars",e);return $k(O.length?O[0]:"")}wordAt(e){let{text:O,from:i,length:n}=this.doc.lineAt(e),r=this.charCategorizer(e),a=e-i,o=e-i;for(;a>0;){let s=be(O,a,!1);if(r(O.slice(s,a))!=ee.Word)break;a=s}for(;ot.length?t[0]:4});$e.lineSeparator=oQ;$e.readOnly=hQ;$e.phrases=z.define({compare(t,e){let O=Object.keys(t),i=Object.keys(e);return O.length==i.length&&O.every(n=>t[n]==e[n])}});$e.languageData=aQ;$e.changeFilter=sQ;$e.transactionFilter=lQ;$e.transactionExtender=cQ;En.reconfigure=A.define();function xe(t,e,O={}){let i={};for(let n of t)for(let r of Object.keys(n)){let a=n[r],o=i[r];if(o===void 0)i[r]=a;else if(!(o===a||a===void 0))if(Object.hasOwnProperty.call(O,r))i[r]=O[r](o,a);else throw new Error("Config merge conflict for field "+r)}for(let n in e)i[n]===void 0&&(i[n]=e[n]);return i}var ct=class{eq(e){return this==e}range(e,O=e){return Ni.create(e,O,this)}};ct.prototype.startSide=ct.prototype.endSide=0;ct.prototype.point=!1;ct.prototype.mapMode=Te.TrackDel;function pl(t,e){return t==e||t.constructor==e.constructor&&t.eq(e)}var Ni=class t{constructor(e,O,i){this.from=e,this.to=O,this.value=i}static create(e,O,i){return new t(e,O,i)}};function fl(t,e){return t.from-e.from||t.value.startSide-e.value.startSide}var ul=class t{constructor(e,O,i,n){this.from=e,this.to=O,this.value=i,this.maxPoint=n}get length(){return Ai(this.to)}findIndex(e,O,i,n=0){let r=i?this.to:this.from;for(let a=n,o=r.length;;){if(a==o)return a;let s=a+o>>1,l=r[s]-e||(i?this.value[s].endSide:this.value[s].startSide)-O;if(s==a)return l>=0?a:o;l>=0?o=s:a=s+1}}between(e,O,i,n){for(let r=this.findIndex(O,-1e9,!0),a=this.findIndex(i,1e9,!1,r);rp||$==p&&f.startSide>0&&f.endSide<=0)continue;if(!((p-$||f.endSide-f.startSide)<0))if(l<0&&(l=$),f.point&&(c=Math.max(c,p-$)),($-i||f.startSide-n)>=0)a.push(f),o.push($-l),s.push(p-l),i=p,n=f.endSide;else{if($==p)for(let m=a.length;m>0;m--){if(($-(s[m-1]+l)||f.startSide-a[m-1].endSide)>=0){a.splice(m,0,f),o.splice(m,0,$-l),s.splice(m,0,p-l);continue e}if(($-(o[m-1]+l)||f.endSide-a[m-1].startSide)>0)break}r($,p,f)}}return{mapped:a.length?new t(o,s,a,c):null,pos:l}}},te=class t{constructor(e,O,i,n){this.chunkPos=e,this.chunk=O,this.nextLayer=i,this.maxPoint=n}static create(e,O,i,n){return new t(e,O,i,n)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let O of this.chunk)e+=O.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:O=[],sort:i=!1,filterFrom:n=0,filterTo:r=this.length}=e,a=e.filter;if(O.length==0&&!a)return this;if(i&&(O=O.slice().sort(fl)),this.isEmpty)return O.length?t.of(O):this;let o=new ba(this,null,-1).goto(0),s=0,l=[],c=new Re;for(;o.value||s=0){let h=O[s++];c.addInner(h.from,h.to,h.value,!1)||l.push(h)}else o.rangeIndex==1&&o.chunkIndexthis.chunkEnd(o.chunkIndex)||ro.to||r{r||(r=new Re),r.addRange(s,l,c,!1)};for(let s=0;s=r&&e<=r+a.length&&a.between(r,e-r,O-r,i)===!1)return}this.nextLayer.between(e,O,i)}}iter(e=0){return Ln.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,O=0){return Ln.from(e).goto(O)}static compare(e,O,i,n,r=-1){let a=e.filter(h=>h.maxPoint>0||!h.isEmpty&&h.maxPoint>=r),o=O.filter(h=>h.maxPoint>0||!h.isEmpty&&h.maxPoint>=r),s=tQ(a,o,i),l=new Oi(a,s,r),c=new Oi(o,s,r);i.iterGaps((h,f,d)=>OQ(l,h,c,f,d,n)),i.empty&&i.length==0&&OQ(l,0,c,0,0,n)}static eq(e,O,i=0,n){n==null&&(n=999999999);let r=e.filter(c=>!c.isEmpty&&O.indexOf(c)<0),a=O.filter(c=>!c.isEmpty&&e.indexOf(c)<0);if(r.length!=a.length)return!1;if(!r.length)return!0;let o=tQ(r,a),s=new Oi(r,o,0).goto(i),l=new Oi(a,o,0).goto(i);for(;;){if(s.to!=l.to||!dl(s.active,l.active)||s.point&&(!l.point||!pl(s.point,l.point)))return!1;if(s.to>n)return!0;s.next(),l.next()}}static spans(e,O,i,n,r=-1){let a=new Oi(e,null,r).goto(O),o=O,s=a.openStart;for(;;){let l=Math.min(a.to,i);if(a.point){let c=a.activeForPoint(a.to),h=a.pointFromo&&(n.span(o,l,a.active,s),s=a.openEnd(l));if(a.to>i)return s+(a.point&&a.to>i?1:0);o=a.to,a.next()}}static of(e,O=!1){let i=new Re;for(let n of e instanceof Ni?[e]:O?pk(e):e)i.add(n.from,n.to,n.value);return i.finish()}static join(e){if(!e.length)return t.empty;let O=Ai(e);for(let i=e.length-2;i>=0;i--)for(let n=e[i];n!=t.empty;n=n.nextLayer)O=new t(n.chunkPos,n.chunk,O,Math.max(n.maxPoint,O.maxPoint));return O}};te.empty=new te([],[],null,-1);function Ai(t){return t[t.length-1]}function pk(t){if(t.length>1)for(let e=t[0],O=1;O0)return t.slice().sort(fl);e=i}return t}te.empty.nextLayer=te.empty;var Re=class t{finishChunk(e){this.chunks.push(new ul(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,O,i){this.addRange(e,O,i,!0)}addRange(e,O,i,n){this.addInner(e,O,i,n)||(this.nextLayer||(this.nextLayer=new t)).addRange(e,O,i,n)}addInner(e,O,i,n){let r=e-this.lastTo||i.startSide-this.last.endSide;if(n&&r<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(O-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=O,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,O-e)),!0)}addChunk(e,O){if((e-this.lastTo||O.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,O.maxPoint),this.chunks.push(O),this.chunkPos.push(e);let i=O.value.length-1;return this.last=O.value[i],this.lastFrom=O.from[i]+e,this.lastTo=O.to[i]+e,!0}finish(){return this.finishInner(te.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let O=te.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,O}};function tQ(t,e,O){let i=new Map;for(let r of t)for(let a=0;a=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&n.push(new ba(a,O,i,r));return n.length==1?n[0]:new t(n)}get startSide(){return this.value?this.value.startSide:0}goto(e,O=-1e9){for(let i of this.heap)i.goto(e,O);for(let i=this.heap.length>>1;i>=0;i--)nl(this.heap,i);return this.next(),this}forward(e,O){for(let i of this.heap)i.forward(e,O);for(let i=this.heap.length>>1;i>=0;i--)nl(this.heap,i);(this.to-e||this.value.endSide-O)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),nl(this.heap,0)}}};function nl(t,e){for(let O=t[e];;){let i=(e<<1)+1;if(i>=t.length)break;let n=t[i];if(i+1=0&&(n=t[i+1],i++),O.compare(n)<0)break;t[i]=O,t[e]=n,e=i}}var Oi=class{constructor(e,O,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Ln.from(e,O,i)}goto(e,O=-1e9){return this.cursor.goto(e,O),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=O,this.openStart=-1,this.next(),this}forward(e,O){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-O)<0;)this.removeActive(this.minActive);this.cursor.forward(e,O)}removeActive(e){fa(this.active,e),fa(this.activeTo,e),fa(this.activeRank,e),this.minActive=iQ(this.active,this.activeTo)}addActive(e){let O=0,{value:i,to:n,rank:r}=this.cursor;for(;O0;)O++;ua(this.active,O,i),ua(this.activeTo,O,n),ua(this.activeRank,O,r),e&&ua(e,O,this.cursor.from),this.minActive=iQ(this.active,this.activeTo)}next(){let e=this.to,O=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let n=this.minActive;if(n>-1&&(this.activeTo[n]-this.cursor.from||this.active[n].endSide-this.cursor.startSide)<0){if(this.activeTo[n]>e){this.to=this.activeTo[n],this.endSide=this.active[n].endSide;break}this.removeActive(n),i&&fa(i,n)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(O&&this.cursor.to==this.to&&this.cursor.from=0&&i[n]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&O.push(this.active[i]);return O.reverse()}openEnd(e){let O=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)O++;return O}};function OQ(t,e,O,i,n,r){t.goto(e),O.goto(i);let a=i+n,o=i,s=i-e,l=!!r.boundChange;for(let c=!1;;){let h=t.to+s-O.to,f=h||t.endSide-O.endSide,d=f<0?t.to+s:O.to,Q=Math.min(d,a);if(t.point||O.point?(t.point&&O.point&&pl(t.point,O.point)&&dl(t.activeForPoint(t.to),O.activeForPoint(O.to))||r.comparePoint(o,Q,t.point,O.point),c=!1):(c&&(r.boundChange(o),c=!1),Q>o&&!dl(t.active,O.active)&&r.compareRange(o,Q,t.active,O.active),l&&Qa)break;o=d,f<=0&&t.next(),f>=0&&O.next()}}function dl(t,e){if(t.length!=e.length)return!1;for(let O=0;O=e;i--)t[i+1]=t[i];t[e]=O}function iQ(t,e){let O=-1,i=1e9;for(let n=0;n=e)return n;if(n==t.length)break;r+=t.charCodeAt(n)==9?O-r%O:1,n=be(t,n)}return i===!0?-1:t.length}var up={};ei(up,{BidiSpan:()=>ht,BlockInfo:()=>bt,BlockType:()=>Ue,BlockWrapper:()=>sr,Decoration:()=>W,Direction:()=>ne,EditorView:()=>_,GutterMarker:()=>nt,MatchDecorator:()=>cn,RectangleMarker:()=>_O,ViewPlugin:()=>Oe,ViewUpdate:()=>fr,WidgetType:()=>Ae,__test:()=>Gw,activateHover:()=>rp,closeHoverTooltip:()=>Xw,closeHoverTooltips:()=>Sw,crosshairCursor:()=>fw,drawSelection:()=>jy,dropCursor:()=>My,getDialog:()=>Uc,getDrawSelectionConfig:()=>Gy,getPanel:()=>fn,getTooltip:()=>ro,gutter:()=>ao,gutterLineClass:()=>ir,gutterWidgetClass:()=>lp,gutters:()=>Vc,hasHoverTooltips:()=>Pw,highlightActiveLine:()=>Ow,highlightActiveLineGutter:()=>Yw,highlightSpecialChars:()=>Hy,highlightTrailingWhitespace:()=>jw,highlightWhitespace:()=>Vw,hoverTooltip:()=>np,keymap:()=>fi,layer:()=>Yc,lineNumberMarkers:()=>cp,lineNumberWidgetMarker:()=>hp,lineNumbers:()=>_w,logException:()=>qe,panels:()=>xw,placeholder:()=>rw,rectangularSelection:()=>lw,repositionTooltips:()=>bw,runScopeHandlers:()=>Rc,scrollPastEnd:()=>tw,showDialog:()=>qc,showPanel:()=>YO,showTooltip:()=>hn,tooltips:()=>uw});var QQ=typeof Symbol>"u"?"__\u037C":Symbol.for("\u037C"),ml=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),$Q=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},Pt=class{constructor(e,O){this.rules=[];let{finish:i}=O||{};function n(a){return/^@/.test(a)?[a]:a.split(/,\s*/)}function r(a,o,s,l){let c=[],h=/^@(\w+)\b/.exec(a[0]),f=h&&h[1]=="keyframes";if(h&&o==null)return s.push(a[0]+";");for(let d in o){let Q=o[d];if(/&/.test(d))r(d.split(/,\s*/).map($=>a.map(p=>$.replace(/&/,p))).reduce(($,p)=>$.concat(p)),Q,s);else if(Q&&typeof Q=="object"){if(!h)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(n(d),Q,c,f)}else Q!=null&&c.push(d.replace(/_.*/,"").replace(/[A-Z]/g,$=>"-"+$.toLowerCase())+": "+Q+";")}(c.length||f)&&s.push((i&&!h&&!l?a.map(i):a).join(", ")+" {"+c.join(" ")+"}")}for(let a in e)r(n(a),e[a],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=$Q[QQ]||1;return $Q[QQ]=e+1,"\u037C"+e.toString(36)}static mount(e,O,i){let n=e[ml],r=i&&i.nonce;n?r&&n.setNonce(r):n=new gl(e,r),n.mount(Array.isArray(O)?O:[O],e)}},pQ=new Map,gl=class{constructor(e,O){let i=e.ownerDocument||e,n=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&n.CSSStyleSheet){let r=pQ.get(i);if(r)return e[ml]=r;this.sheet=new n.CSSStyleSheet,pQ.set(i,this)}else this.styleTag=i.createElement("style"),O&&this.styleTag.setAttribute("nonce",O);this.modules=[],e[ml]=this}mount(e,O){let i=this.sheet,n=0,r=0,a=!1;for(let o=0;o-1&&(this.modules.splice(l,1),a=!0,r--,l=-1),l==-1){if(this.modules.splice(r++,0,s),a=!0,i)for(let c=0;c",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},mk=typeof navigator<"u"&&/Mac/.test(navigator.platform),gk=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(ve=0;ve<10;ve++)tO[48+ve]=tO[96+ve]=String(ve);var ve;for(ve=1;ve<=24;ve++)tO[ve+111]="F"+ve;var ve;for(ve=65;ve<=90;ve++)tO[ve]=String.fromCharCode(ve+32),Fi[ve]=String.fromCharCode(ve);var ve;for(xa in tO)Fi.hasOwnProperty(xa)||(Fi[xa]=tO[xa]);var xa;function mQ(t){var e=mk&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||gk&&t.shiftKey&&t.key&&t.key.length==1||t.key=="Unidentified",O=!e&&t.key||(t.shiftKey?Fi:tO)[t.keyCode]||t.key||"Unidentified";return O=="Esc"&&(O="Escape"),O=="Del"&&(O="Delete"),O=="Left"&&(O="ArrowLeft"),O=="Up"&&(O="ArrowUp"),O=="Right"&&(O="ArrowRight"),O=="Down"&&(O="ArrowDown"),O}function J(){var t=arguments[0];typeof t=="string"&&(t=document.createElement(t));var e=1,O=arguments[1];if(O&&typeof O=="object"&&O.nodeType==null&&!Array.isArray(O)){for(var i in O)if(Object.prototype.hasOwnProperty.call(O,i)){var n=O[i];typeof n=="string"?t.setAttribute(i,n):n!=null&&(t[i]=n)}e++}for(;e2),V={mac:XQ||/Mac/.test(He.platform),windows:/Win/.test(He.platform),linux:/Linux|X11/.test(He.platform),ie:eo,ie_version:i$?wl.documentMode||6:vl?+vl[1]:Tl?+Tl[1]:0,gecko:PQ,gecko_version:PQ?+(/Firefox\/(\d+)/.exec(He.userAgent)||[0,0])[1]:0,chrome:!!Pl,chrome_version:Pl?+Pl[1]:0,ios:XQ,android:/Android\b/.test(He.userAgent),webkit:SQ,webkit_version:SQ?+(/\bAppleWebKit\/(\d+)/.exec(He.userAgent)||[0,0])[1]:0,safari:_l,safari_version:_l?+(/\bVersion\/(\d+(\.\d+)?)/.exec(He.userAgent)||[0,0])[1]:0,tabSize:wl.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function xc(t,e){for(let O in t)O=="class"&&e.class?e.class+=" "+t.class:O=="style"&&e.style?e.style+=";"+t.style:e[O]=t[O];return e}var ja=Object.create(null);function kc(t,e,O){if(t==e)return!0;t||(t=ja),e||(e=ja);let i=Object.keys(t),n=Object.keys(e);if(i.length-0!=n.length-0)return!1;for(let r of i)if(r!=O&&(n.indexOf(r)==-1||t[r]!==e[r]))return!1;return!0}function Pk(t,e){for(let O=t.attributes.length-1;O>=0;O--){let i=t.attributes[O].name;e[i]==null&&t.removeAttribute(i)}for(let O in e){let i=e[O];O=="style"?t.style.cssText=i:t.getAttribute(O)!=i&&t.setAttribute(O,i)}}function bQ(t,e,O){let i=!1;if(e)for(let n in e)O&&n in O||(i=!0,n=="style"?t.style.cssText="":t.removeAttribute(n));if(O)for(let n in O)e&&e[n]==O[n]||(i=!0,n=="style"?t.style.cssText=O[n]:t.setAttribute(n,O[n]));return i}function Sk(t){let e=Object.create(null);for(let O=0;O0?3e8:-4e8:O>0?1e8:-1e8,new oi(e,O,O,i,e.widget||null,!1)}static replace(e){let O=!!e.block,i,n;if(e.isBlockGap)i=-5e8,n=4e8;else{let{start:r,end:a}=n$(e,O);i=(r?O?-3e8:-1:5e8)-1,n=(a?O?2e8:1:-6e8)+1}return new oi(e,i,n,O,e.widget||null,!0)}static line(e){return new or(e)}static set(e,O=!1){return te.of(e,O)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};W.none=te.empty;var ar=class t extends W{constructor(e){let{start:O,end:i}=n$(e);super(O?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?xc(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||ja}eq(e){return this==e||e instanceof t&&this.tagName==e.tagName&&kc(this.attrs,e.attrs)}range(e,O=e){if(e>=O)throw new RangeError("Mark decorations may not be empty");return super.range(e,O)}};ar.prototype.point=!1;var or=class t extends W{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof t&&this.spec.class==e.spec.class&&kc(this.spec.attributes,e.spec.attributes)}range(e,O=e){if(O!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,O)}};or.prototype.mapMode=Te.TrackBefore;or.prototype.point=!0;var oi=class t extends W{constructor(e,O,i,n,r,a){super(O,i,r,e),this.block=n,this.isReplace=a,this.mapMode=n?O<=0?Te.TrackBefore:Te.TrackAfter:Te.TrackDel}get type(){return this.startSide!=this.endSide?Ue.WidgetRange:this.startSide<=0?Ue.WidgetBefore:Ue.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof t&&Xk(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,O=e){if(this.isReplace&&(e>O||e==O&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&O!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,O)}};oi.prototype.point=!0;function n$(t,e=!1){let{inclusiveStart:O,inclusiveEnd:i}=t;return O==null&&(O=t.inclusive),i==null&&(i=t.inclusive),{start:O??e,end:i??e}}function Xk(t,e){return t==e||!!(t&&e&&t.compare(e))}function On(t,e,O,i=0){let n=O.length-1;n>=0&&O[n]+i>=t?O[n]=Math.max(O[n],e):O.push(t,e)}var sr=class t extends ct{constructor(e,O,i){super(),this.tagName=e,this.attributes=O,this.rank=i}eq(e){return e==this||e instanceof t&&this.tagName==e.tagName&&kc(this.attributes,e.attributes)}static create(e){return new t(e.tagName,e.attributes||ja,e.rank==null?50:Math.max(0,Math.min(e.rank,100)))}static set(e,O=!1){return te.of(e,O)}};sr.prototype.startSide=sr.prototype.endSide=-1;var Ve=t=>t.nodeType==1,rn=t=>t.nodeType==3;function lr(t){let e;return t.nodeType==11?e=t.getSelection?t:t.ownerDocument:e=t,e.getSelection()}function Zl(t,e){return e?t==e||t.contains(e.nodeType!=1?e.parentNode:e):!1}function Bn(t,e){if(!e.anchorNode)return!1;try{return Zl(t,e.anchorNode)}catch{return!1}}function Fn(t){return rn(t)?hr(t,0,t.nodeValue.length).getClientRects():Ve(t)?t.getClientRects():[]}function Hn(t,e,O,i){return O?xQ(t,e,O,i,-1)||xQ(t,e,O,i,1):!1}function ZO(t){for(var e=0;;e++)if(t=t.previousSibling,!t)return e}function Ga(t){return Ve(t)&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(t.nodeName)}function xQ(t,e,O,i,n){for(;;){if(t==O&&e==i)return!0;if(e==(n<0?0:nO(t))){if(t.nodeName=="DIV")return!1;let r=t.parentNode;if(!r||!Ve(r))return!1;e=ZO(t)+(n<0?0:1),t=r}else if(Ve(t)){if(t=t.childNodes[e+(n<0?-1:0)],Ve(t)&&(t.nodeName=="IMG"||t.nodeName=="BR"||t.contentEditable=="false"))return!1;e=n<0?nO(t):0}else return!1}}function nO(t){return rn(t)?t.nodeValue.length:t.childNodes.length}function cr(t,e){let{left:O,right:i}=t;if(O==i)return t;let n=e?O:i;return{left:n,right:n,top:t.top,bottom:t.bottom}}function bk(t){let e=t.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:t.innerWidth,top:0,bottom:t.innerHeight}}function r$(t,e){let O=e.width/t.offsetWidth,i=e.height/t.offsetHeight;return(O>.995&&O<1.005||!isFinite(O)||Math.abs(e.width-t.offsetWidth)<1)&&(O=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-t.offsetHeight)<1)&&(i=1),{scaleX:O,scaleY:i}}function xk(t,e,O,i,n,r,a,o){let s=t.ownerDocument,l=s.defaultView||window;for(let c=t,h=!1;c&&!h;)if(Ve(c)){let f,d=c==s.body,Q=1,$=1;if(d)f=bk(l);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(h=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let P=c.getBoundingClientRect();({scaleX:Q,scaleY:$}=r$(c,P)),f={left:P.left,right:P.left+c.clientWidth*Q,top:P.top,bottom:P.top+c.clientHeight*$}}let p=0,m=0;if(n=="nearest")e.top0&&e.bottom>f.bottom+m&&(m=e.bottom-f.bottom+a)):e.bottom>f.bottom-a&&(m=e.bottom-f.bottom+a,O<0&&e.top-m0&&e.right>f.right+p&&(p=e.right-f.right+r)):e.right>f.right-r&&(p=e.right-f.right+r,O<0&&e.leftf.bottom||e.leftf.right)&&(e={left:Math.max(e.left,f.left),right:Math.min(e.right,f.right),top:Math.max(e.top,f.top),bottom:Math.min(e.bottom,f.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function a$(t,e=!0){let O=t.ownerDocument,i=null,n=null;for(let r=t.parentNode;r&&!(r==O.body||(!e||i)&&n);)if(Ve(r))!n&&r.scrollHeight>r.clientHeight&&(n=r),e&&!i&&r.scrollWidth>r.clientWidth&&(i=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:i,y:n}}var Rl=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:O,focusNode:i}=e;this.set(O,Math.min(e.anchorOffset,O?nO(O):0),i,Math.min(e.focusOffset,i?nO(i):0))}set(e,O,i,n){this.anchorNode=e,this.anchorOffset=O,this.focusNode=i,this.focusOffset=n}};function o$(t){let e=[];for(let O=t;O;O=O.nodeType==11?O.host:O.parentNode)Ve(O)&&e.push({node:O,left:O.scrollLeft,top:O.scrollTop});return e}function s$(t,e=!0){for(let{node:O,left:i,top:n}of t)e&&O.scrollTop!=n&&(O.scrollTop=n),O.scrollLeft!=i&&(O.scrollLeft=i)}var ri=null;V.safari&&V.safari_version>=26&&(ri=!1);function l$(t){if(t.setActive)return t.setActive();if(ri)return t.focus(ri);let e=o$(t);t.focus(ri==null?{get preventScroll(){return ri={preventScroll:!0},!0}}:void 0),ri||(ri=!1,s$(e))}var kQ;function hr(t,e,O=e){let i=kQ||(kQ=document.createRange());return i.setEnd(t,O),i.setStart(t,e),i}function nn(t,e,O,i){let n={key:e,code:e,keyCode:O,which:O,cancelable:!0};i&&({altKey:n.altKey,ctrlKey:n.ctrlKey,shiftKey:n.shiftKey,metaKey:n.metaKey}=i);let r=new KeyboardEvent("keydown",n);r.synthetic=!0,t.dispatchEvent(r);let a=new KeyboardEvent("keyup",n);return a.synthetic=!0,t.dispatchEvent(a),r.defaultPrevented||a.defaultPrevented}function kk(t){for(;t;){if(t&&(t.nodeType==9||t.nodeType==11&&t.host))return t;t=t.assignedSlot||t.parentNode}return null}function yk(t,e){let O=e.focusNode,i=e.focusOffset;if(!O||e.anchorNode!=O||e.anchorOffset!=i)return!1;for(i=Math.min(i,nO(O));;)if(i){if(!Ve(O))return!1;let n=O.childNodes[i-1];n.contentEditable=="false"?i--:(O=n,i=nO(O))}else{if(O==t)return!0;i=ZO(O),O=O.parentNode}}function c$(t){return t instanceof Window?t.pageYOffset>Math.max(0,t.document.documentElement.scrollHeight-t.innerHeight-4):t.scrollTop>Math.max(1,t.scrollHeight-t.clientHeight-4)}function h$(t,e){for(let O=t,i=e;;){if(rn(O)&&i>0)return{node:O,offset:i};if(Ve(O)&&i>0){if(O.contentEditable=="false")return null;O=O.childNodes[i-1],i=nO(O)}else if(O.parentNode&&!Ga(O))i=ZO(O),O=O.parentNode;else return null}}function f$(t,e){for(let O=t,i=e;;){if(rn(O)&&i=O){if(o.level==i)return a;(r<0||(n!=0?n<0?o.fromO:e[r].level>o.level))&&(r=a)}}if(r<0)throw new RangeError("Index out of range");return r}};function Q$(t,e){if(t.length!=e.length)return!1;for(let O=0;O=0;$-=3)if(Et[$+1]==-d){let p=Et[$+2],m=p&2?n:p&4?p&1?r:n:0;m&&(me[h]=me[Et[$]]=m),o=$;break}}else{if(Et.length==189)break;Et[o++]=h,Et[o++]=f,Et[o++]=s}else if((Q=me[h])==2||Q==1){let $=Q==n;s=$?0:1;for(let p=o-3;p>=0;p-=3){let m=Et[p+2];if(m&2)break;if($)Et[p+2]|=2;else{if(m&4)break;Et[p+2]|=4}}}}}function Rk(t,e,O,i){for(let n=0,r=i;n<=O.length;n++){let a=n?O[n-1].to:t,o=ns;)Q==p&&(Q=O[--$].from,p=$?O[$-1].to:t),me[--Q]=d;s=c}else r=l,s++}}}function zl(t,e,O,i,n,r,a){let o=i%2?2:1;if(i%2==n%2)for(let s=e,l=0;ss&&a.push(new ht(s,$.from,d));let p=$.direction==si!=!(d%2);ql(t,p?i+1:i,n,$.inner,$.from,$.to,a),s=$.to}Q=$.to}else{if(Q==O||(c?me[Q]!=o:me[Q]==o))break;Q++}f?zl(t,s,Q,i+1,n,f,a):se;){let c=!0,h=!1;if(!l||s>r[l-1].to){let $=me[s-1];$!=o&&(c=!1,h=$==16)}let f=!c&&o==1?[]:null,d=c?i:i+1,Q=s;e:for(;;)if(l&&Q==r[l-1].to){if(h)break e;let $=r[--l];if(!c)for(let p=$.from,m=l;;){if(p==e)break e;if(m&&r[m-1].to==p)p=r[--m].from;else{if(me[p-1]==o)break e;break}}if(f)f.push($);else{$.tome.length;)me[me.length]=256;let i=[],n=e==si?0:1;return ql(t,n,n,O,0,t.length,i),i}function p$(t){return[new ht(0,t,0)]}var m$="";function g$(t,e,O,i,n){var r;if(!t.length)return null;let a=i.head-t.from,o;if(i.head==t.from&&i.assoc<0){if(!n)return null;a=e[o=0].side(!1,O)}else if(i.head==t.to&&i.assoc>0){if(n)return null;a=e[o=e.length-1].side(!0,O)}else o=ht.find(e,a,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc);let s=e[o],l=s.side(n,O);if(a==l){let f=o+=n?1:-1;if(f<0||f>=e.length)return null;s=e[o=f],a=s.side(!n,O),l=s.side(n,O)}let c=be(t.text,a,s.forward(n,O));(cs.to)&&(c=l),m$=t.text.slice(Math.min(a,c),Math.max(a,c));let h=o==(n?e.length-1:0)?null:e[o+(n?1:-1)];if(c==l){if(!h)return n?X.cursor(t.to,1):X.cursor(t.from,-1);if(h.level+(n?0:1)t.some(e=>e)}),w$=z.define({combine:t=>t.some(e=>e)}),T$=z.define(),Kn=class t{constructor(e,O,i,n,r,a=!1){this.range=e,this.y=O,this.x=i,this.yMargin=n,this.xMargin=r,this.isSnapshot=a}map(e){return e.empty?this:new t(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new t(X.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},ka=A.define({map:(t,e)=>t.map(e)}),v$=A.define();function qe(t,e,O){let i=t.facet(b$);i.length?i[0](e):window.onerror&&window.onerror(String(e),O,void 0,void 0,e)||(O?console.error(O+":",e):console.error(e))}var OO=z.define({combine:t=>t.length?t[0]:!0}),zk=0,Ki=z.define({combine(t){return t.filter((e,O)=>{for(let i=0;i{let s=[];return a&&s.push(Oo.of(l=>{let c=l.plugin(o);return c?a(c):W.none})),r&&s.push(r(o)),s})}static fromClass(e,O){return t.define((i,n)=>new e(i,n),O)}},Jn=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let O=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(O)}catch(i){if(qe(O.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(O){qe(e.state,O,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var O;if(!((O=this.value)===null||O===void 0)&&O.destroy)try{this.value.destroy()}catch(i){qe(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},_$=z.define(),to=z.define(),Oo=z.define(),Z$=z.define(),vc=z.define(),dr=z.define(),R$=z.define();function yQ(t,e){let O=t.state.facet(R$);if(!O.length)return O;let i=O.map(r=>r instanceof Function?r(t):r),n=[];return te.spans(i,e.from,e.to,{point(){},span(r,a,o,s){let l=r-e.from,c=a-e.from,h=n;for(let f=o.length-1;f>=0;f--,s--){let d=o[f].spec.bidiIsolate,Q;if(d==null&&(d=Yk(e.text,l,c)),s>0&&h.length&&(Q=h[h.length-1]).to==l&&Q.direction==d)Q.to=c,h=Q.inner;else{let $={from:l,to:c,direction:d,inner:[]};h.push($),h=$.inner}}}}),n}var Y$=z.define();function _c(t){let e=0,O=0,i=0,n=0;for(let r of t.state.facet(Y$)){let a=r(t);a&&(a.left!=null&&(e=Math.max(e,a.left)),a.right!=null&&(O=Math.max(O,a.right)),a.top!=null&&(i=Math.max(i,a.top)),a.bottom!=null&&(n=Math.max(n,a.bottom)))}return{left:e,right:O,top:i,bottom:n}}var Mn=z.define(),xt=class t{constructor(e,O,i,n){this.fromA=e,this.toA=O,this.fromB=i,this.toB=n}join(e){return new t(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let O=e.length,i=this;for(;O>0;O--){let n=e[O-1];if(!(n.fromA>i.toA)){if(n.toAn.push(new xt(r,a,o,s))),this.changedRanges=n}static create(e,O,i){return new t(e,O,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},qk=[],Se=class{constructor(e,O,i=0){this.dom=e,this.length=O,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return qk}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let O=this.domAttrs;O&&Pk(this.dom,O)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,O=this.posAtStart){let i=O;for(let n of this.children){if(n==e)return i;i+=n.length+n.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,O,i){return null}domPosFor(e,O){let i=ZO(this.dom),n=this.length?e>0:O>0;return new At(this.parent.dom,i+(n?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof on)return e;return null}static get(e){return e.cmTile}},an=class extends Se{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let O=this.dom,i=null,n,r=e?.node==O?e:null,a=0;for(let o of this.children){if(o.sync(e),a+=o.length+o.breakAfter,n=i?i.nextSibling:O.firstChild,r&&n!=o.dom&&(r.written=!0),o.dom.parentNode==O)for(;n&&n!=o.dom;)n=wQ(n);else O.insertBefore(o.dom,n);i=o.dom}for(n=i?i.nextSibling:O.firstChild,r&&n&&(r.written=!0);n;)n=wQ(n);this.length=a}};function wQ(t){let e=t.nextSibling;return t.parentNode.removeChild(t),e}var on=class extends an{constructor(e,O){super(O),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let O=Se.get(e);if(O&&this.owns(O))return O;e=e.parentNode}}blockTiles(e){for(let O=[],i=this,n=0,r=0;;)if(n==i.children.length){if(!O.length)return;i=i.parent,i.breakAfter&&r++,n=O.pop()}else{let a=i.children[n++];if(a instanceof iO)O.push(n),i=a,n=0;else{let o=r+a.length,s=e(a,r);if(s!==void 0)return s;r=o+a.breakAfter}}}resolveBlock(e,O){let i,n=-1,r,a=-1;if(this.blockTiles((o,s)=>{let l=s+o.length;if(e>=s&&e<=l){if(o.isWidget()&&O>=-1&&O<=1){if(o.flags&32)return!0;o.flags&16&&(i=void 0)}(se||e==s&&(O>1?o.length:o.covers(-1)))&&(!r||!o.isWidget()&&r.isWidget())&&(r=o,a=e-s)}}),!i&&!r)throw new Error("No tile at position "+e);return i&&O<0||!r?{tile:i,offset:n}:{tile:r,offset:a}}},iO=class t extends an{constructor(e,O){super(e),this.wrapper=O}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,O){let i=new t(O||document.createElement(e.tagName),e);return O||(i.flags|=4),i}},sn=class t extends an{constructor(e,O){super(e),this.attrs=O}isLine(){return!0}static start(e,O,i){let n=new t(O||document.createElement("div"),e);return(!O||!i)&&(n.flags|=4),n}get domAttrs(){return this.attrs}resolveInline(e,O,i=!1){let n=null,r=-1,a=null,o=-1;function s(c,h){for(let f=0,d=0;f=h&&(Q.isComposite()?s(Q,h-d):(!a||i&&a.isHidden&&(O>0&&!(a.flags&32)||i&&Vk(a,Q)))&&($>h||Q.flags&32&&O<=1)?(a=Q,o=h-d):(d=-1)&&(n=Q,r=h-d)),d=$}}s(this,e);let l=(O<0?n:a)||n||a;return l?{tile:l,offset:l==n?r:o}:null}coordsIn(e,O,i){let n=this.resolveInline(e,O,!0);return n?n.tile.coordsIn(Math.max(0,n.offset),O,i):Uk(this)}domIn(e,O){let i=this.resolveInline(e,O);if(i){let{tile:n,offset:r}=i;if(this.dom.contains(n.dom))return n.isText()?new At(n.dom,Math.min(n.dom.nodeValue.length,r)):n.domPosFor(r,n.flags&16?1:n.flags&32?-1:O);let a=i.tile.parent,o=!1;for(let s of a.children){if(o)return new At(s.dom,0);s==i.tile&&(o=!0)}}return new At(this.dom,0)}};function Uk(t){let e=t.dom.lastChild;if(!e)return t.dom.getBoundingClientRect();let O=Fn(e);return O[O.length-1]||null}function Vk(t,e){let O=t.coordsIn(0,1),i=e.coordsIn(0,1);return O&&i&&i.topn&&(e=n);let r=e,a=e,o=0;e==0&&O<0||e==n&&O>=0?V.chrome||V.gecko||(e?(r--,o=1):a=0)?0:s.length-1];return V.safari&&!o&&l.width==0&&(l=Array.prototype.find.call(s,c=>c.width)||l),i==null?l:cr(l,(o?o>0:O<0)==i)}static of(e,O){let i=new t(O||document.createTextNode(e),e);return O||(i.flags|=2),i}},li=class t extends Se{constructor(e,O,i,n){super(e,O,n),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,O){return this.coordsInWidget(e,O,!1)}coordsInWidget(e,O,i){let n=this.widget.coordsAt(this.dom,e,O);if(n)return n;if(i)return cr(this.dom.getBoundingClientRect(),this.length?e==0:O<=0);{let r=this.dom.getClientRects(),a=null;if(!r.length)return null;let o=this.flags&16?!0:this.flags&32?!1:e>0;for(let s=o?r.length-1:0;a=r[s],!(e>0?s==0:s==r.length-1||a.top0==i)}},Vl=class{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,O,i){let{tile:n,index:r,beforeBreak:a,parents:o}=this;for(;e||O>0;)if(n.isComposite())if(a){if(!e)break;i&&i.break(),e--,a=!1}else if(r==n.children.length){if(!e&&!o.length)break;i&&i.leave(n),a=!!n.breakAfter,{tile:n,index:r}=o.pop(),r++}else{let s=n.children[r],l=s.breakAfter;(O>0?s.length<=e:s.length=0;o--){let s=O.marks[o],l=n.lastChild;if(l instanceof Ot&&l.mark.eq(s.mark))l.dom!=s.dom&&l.setDOM(Sl(s.dom)),n=l;else{let{dom:c}=s;this.cache.reused.get(s)&&Se.get(s.dom)&&(c=Sl(s.dom));let h=Ot.of(s.mark,c);n.append(h),n=h}this.cache.reused.set(s,2)}let r=Se.get(e.text);r&&this.cache.reused.set(r,2);let a=new ai(e.text,e.text.nodeValue);a.flags|=8,this.pos=e.range.toB,n.append(a)}addInlineWidget(e,O,i){let n=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);n||this.flushBuffer();let r=this.ensureMarks(O,i);!n&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,O,i){this.flushBuffer(),this.ensureMarks(O,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let O=this.afterWidget||this.lastBlock;O.length+=e,this.pos+=e}addLineStart(e,O){var i;e||(e=z$);let n=sn.start(e,O||((i=this.cache.find(sn))===null||i===void 0?void 0:i.dom),!!O);this.getBlockPos().append(this.lastBlock=this.curLine=n)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,O){var i;let n=this.curLine;for(let r=e.length-1;r>=0;r--){let a=e[r],o;if(O>0&&(o=n.lastChild)&&o instanceof Ot&&o.mark.eq(a))n=o,O--;else{let s=Ot.of(a,(i=this.cache.find(Ot,l=>l.mark.eq(a)))===null||i===void 0?void 0:i.dom);n.append(s),n=s,O=0}}return n}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!TQ(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(V.ios&&TQ(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Xl,0,32)||new li(Xl.toDOM(),0,Xl,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let O=e.rank*102+e.value.rank,i=new Wl(e.from,e.to,e.value,O),n=this.wrappers.length;for(;n>0&&(this.wrappers[n-1].rank-i.rank||this.wrappers[n-1].to-i.to)<0;)n--;this.wrappers.splice(n,0,i)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let O=this.root;for(let i of this.wrappers){let n=O.lastChild;if(i.froma.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);O.append(r),O=r}}return O}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let O=2|(e<0?16:32),i=this.cache.find(ln,void 0,1);return i&&(i.flags=O),i||new ln(O)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},Gl=class{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:n,lineBreak:r,done:a}=this.cursor.next(this.skipCount);if(this.skipCount=0,a)throw new Error("Ran out of text content when drawing inline views");this.text=n;let o=this.textOff=Math.min(e,n.length);return r?null:n.slice(0,o)}let O=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,O);return this.textOff=O,i}},Ca=[li,sn,ai,Ot,ln,iO,on];for(let t=0;t[]),this.index=Ca.map(()=>0),this.reused=new Map}add(e){let O=e.constructor.bucket,i=this.buckets[O];i.length<6?i.push(e):i[this.index[O]=(this.index[O]+1)%6]=e}find(e,O,i=2){let n=e.bucket,r=this.buckets[n],a=this.index[n];for(let o=0;o{if(this.cache.add(a),a.isComposite())return!1},enter:a=>this.cache.add(a),leave:()=>{},break:()=>{}}}run(e,O){let i=O&&this.getCompositionContext(O.text);for(let n=0,r=0,a=0;;){let o=an){let l=s-n;this.preserve(l,!a,!o),n=s,r+=l}if(!o)break;O&&o.fromA<=O.range.fromA&&o.toA>=O.range.toA?(this.forward(o.fromA,O.range.fromA,O.range.fromA{if(a.isWidget())if(this.openWidget)this.builder.continueWidget(s-o);else{let l=s>0||o{a.isLine()?this.builder.addLineStart(a.attrs,this.cache.maybeReuse(a)):(this.cache.add(a),a instanceof Ot&&n.unshift(a.mark)),this.openWidget=!1},leave:a=>{a.isLine()?n.length&&(n.length=r=0):a instanceof Ot&&(n.shift(),r=Math.min(r,n.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,O){let i=null,n=this.builder,r=-1,a=te.spans(this.decorations,e,O,{point:(o,s,l,c,h,f)=>{if(l instanceof oi){if(this.disallowBlockEffectsFor[f]){if(l.block)throw new RangeError("Block decorations may not be specified via plugins");if(s>this.view.state.doc.lineAt(o).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(r=c.length,h>c.length)n.continueWidget(s-o);else{let d=l.widget||(l.block?RO.block:RO.inline),Q=Wk(l),$=this.cache.findWidget(d,s-o,Q)||li.of(d,this.view,s-o,Q);l.block?(l.startSide>0&&n.addLineStartIfNotCovered(i),n.addBlockWidget($)):(n.ensureLine(i),n.addInlineWidget($,c,h))}i=null}else i=jk(i,l);s>o&&this.text.skip(s-o)},span:(o,s,l,c)=>{for(let h=o;h-1&&(this.openWidget=a>r),this.openWidget||n.addLineStartIfNotCovered(i),this.openMarks=a}forward(e,O,i=1){O-e<=10?this.old.advance(O-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(O-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let O=[],i=null;for(let n=e.parentNode;;n=n.parentNode){let r=Se.get(n);if(n==this.view.contentDOM)break;r instanceof Ot?O.push(r):r?.isLine()?i=r:r instanceof iO||(n.nodeName=="DIV"&&!i?i=new sn(n,z$):i||O.push(Ot.of(new ar({tagName:n.nodeName.toLowerCase(),attributes:Sk(n)}),n)))}return i?{line:i,marks:O}:null}};function TQ(t,e){let O=i=>{for(let n of i.children)if((e?n.isText():n.length)||O(n))return!0;return!1};return O(t)}function Wk(t){let e=t.isReplace?(t.startSide<0?64:0)|(t.endSide>0?128:0):t.startSide>0?32:16;return t.block&&(e|=256),e}var z$={class:"cm-line"};function jk(t,e){let O=e.spec.attributes,i=e.spec.class;return!O&&!i||(t||(t={class:"cm-line"}),O&&xc(O,t),i&&(t.class+=" "+i)),t}function Gk(t){let e=[];for(let O=t.parents.length;O>1;O--){let i=O==t.parents.length?t.tile:t.parents[O].tile;i instanceof Ot&&e.push(i.mark)}return e}function Sl(t){let e=Se.get(t);return e&&e.setDOM(t.cloneNode()),t}var RO=class extends Ae{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};RO.inline=new RO("span");RO.block=new RO("div");var Xl=new class extends Ae{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},Ea=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=W.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new on(e,e.contentDOM),this.updateInner([new xt(0,0,0,e.state.doc.length)],null)}update(e){var O;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:c,toA:h})=>hthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let n=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((O=this.domChanged)===null||O===void 0)&&O.newSel?n=this.domChanged.newSel.head:!Nk(e.changes,this.hasComposition)&&!e.selectionSet&&(n=e.state.selection.main.head));let r=n>-1?Ek(this.view,e.changes,n):null;if(this.domChanged=null,this.hasComposition){let{from:c,to:h}=this.hasComposition;i=new xt(c,h,e.changes.mapPos(c,-1),e.changes.mapPos(h,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(V.ie||V.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let a=this.decorations,o=this.blockWrappers;this.updateDeco();let s=Ik(a,this.decorations,e.changes);s.length&&(i=xt.extendWithRanges(i,s));let l=Mk(o,this.blockWrappers,e.changes);return l.length&&(i=xt.extendWithRanges(i,l)),r&&!i.some(c=>c.fromA<=r.range.fromA&&c.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,O){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(O||e.length){let a=this.tile,o=new El(this.view,a,this.blockWrappers,this.decorations,this.dynamicDecorationMap);O&&Se.get(O.text)&&o.cache.reused.set(Se.get(O.text),2),this.tile=o.run(e,O),Al(a,o.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let r=V.chrome||V.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let n=[];if(this.view.viewport.from||this.view.viewport.to-1)&&Bn(i,this.view.observer.selectionRange)&&!(n&&i.contains(n));if(!(r||O||a))return;let o=this.forceSelection;this.forceSelection=!1;let s=this.view.state.selection.main,l,c;if(s.empty?c=l=this.inlineDOMNearPos(s.anchor,s.assoc||1):(c=this.inlineDOMNearPos(s.head,s.head==s.from?1:-1),l=this.inlineDOMNearPos(s.anchor,s.anchor==s.from?1:-1)),V.gecko&&s.empty&&!this.hasComposition&&Ck(l)){let f=document.createTextNode("");this.view.observer.ignore(()=>l.node.insertBefore(f,l.node.childNodes[l.offset]||null)),l=c=new At(f,0),o=!0}let h=this.view.observer.selectionRange;(o||!h.focusNode||(!Hn(l.node,l.offset,h.anchorNode,h.anchorOffset)||!Hn(c.node,c.offset,h.focusNode,h.focusOffset))&&!this.suppressWidgetCursorChange(h,s))&&(this.view.observer.ignore(()=>{V.android&&V.chrome&&i.contains(h.focusNode)&&Dk(h.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let f=lr(this.view.root);if(f)if(s.empty){if(V.gecko){let d=Ak(l.node,l.offset);if(d&&d!=3){let Q=(d==1?h$:f$)(l.node,l.offset);Q&&(l=new At(Q.node,Q.offset))}}f.collapse(l.node,l.offset),s.bidiLevel!=null&&f.caretBidiLevel!==void 0&&(f.caretBidiLevel=s.bidiLevel)}else if(f.extend){f.collapse(l.node,l.offset);try{f.extend(c.node,c.offset)}catch{}}else{let d=document.createRange();s.anchor>s.head&&([l,c]=[c,l]),d.setEnd(c.node,c.offset),d.setStart(l.node,l.offset),f.removeAllRanges(),f.addRange(d)}a&&this.view.root.activeElement==i&&(i.blur(),n&&n.focus())}),this.view.observer.setSelectionRange(l,c)),this.impreciseAnchor=l.precise?null:new At(h.anchorNode,h.anchorOffset),this.impreciseHead=c.precise?null:new At(h.focusNode,h.focusOffset)}suppressWidgetCursorChange(e,O){return this.hasComposition&&O.empty&&Hn(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==O.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,O=e.state.selection.main,i=lr(e.root),{anchorNode:n,anchorOffset:r}=e.observer.selectionRange;if(!i||!O.empty||!O.assoc||!i.modify)return;let a=this.lineAt(O.head,O.assoc);if(!a)return;let o=a.posAtStart;if(O.head==o||O.head==o+a.length)return;let s=this.coordsAt(O.head,-1),l=this.coordsAt(O.head,1);if(!s||!l||s.bottom>l.top)return;let c=this.domAtPos(O.head+O.assoc,O.assoc);i.collapse(c.node,c.offset),i.modify("move",O.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let h=e.observer.selectionRange;e.docView.posFromDOM(h.anchorNode,h.anchorOffset)!=O.from&&i.collapse(n,r)}posFromDOM(e,O){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let n=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[O];else{let a=nO(e)==0?0:O==0?-1:1;for(;;){let o=e.parentNode;if(o==i.dom)break;a==0&&o.firstChild!=o.lastChild&&(e==o.firstChild?a=-1:a=1),e=o}a<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return n;for(;r&&!Se.get(r);)r=r.nextSibling;if(!r)return n+i.length;for(let a=0,o=n;;a++){let s=i.children[a];if(s.dom==r)return o;o+=s.length+s.breakAfter}}else return i.isText()?e==i.dom?n+O:n+(O?i.length:0):n}domAtPos(e,O){let{tile:i,offset:n}=this.tile.resolveBlock(e,O);return i.isWidget()?i.domPosFor(n,O):i.domIn(n,O)}inlineDOMNearPos(e,O){let i,n=-1,r=!1,a,o=-1,s=!1;return this.tile.blockTiles((l,c)=>{if(l.isWidget()){if(l.flags&32&&c>=e)return!0;l.flags&16&&(r=!0)}else{let h=c+l.length;if(c<=e&&(i=l,n=e-c,r=h=e&&!a&&(a=l,o=e-c,s=c>e),c>e&&a)return!0}}),!i&&!a?this.domAtPos(e,O):(r&&a?i=null:s&&i&&(a=null),i&&O<0||!a?i.domIn(n,O):a.domIn(o,O))}coordsAt(e,O,i){let{tile:n,offset:r}=this.tile.resolveBlock(e,O);return n.isWidget()?n.widget instanceof er?null:n.coordsInWidget(r,O,!0):n.coordsIn(r,O,i)}lineAt(e,O){let{tile:i}=this.tile.resolveBlock(e,O);return i.isLine()?i:null}coordsForChar(e){let{tile:O,offset:i}=this.tile.resolveBlock(e,1);if(!O.isLine())return null;function n(r,a){if(r.isComposite())for(let o of r.children){if(o.length>=a){let s=n(o,a);if(s)return s}if(a-=o.length,a<0)break}else if(r.isText()&&aMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,o=-1,s=this.view.textDirection==ne.LTR,l=0,c=(h,f,d)=>{for(let Q=0;Qn);Q++){let $=h.children[Q],p=f+$.length,m=$.dom.getBoundingClientRect(),{height:P}=m;if(d&&!Q&&(l+=m.top-d.top),$ instanceof iO)p>i&&c($,f,m);else if(f>=i&&(l>0&&O.push(-l),O.push(P+l),l=0,a)){let S=$.dom.lastChild,y=S?Fn(S):[];if(y.length){let k=y[y.length-1],T=s?k.right-m.left:m.right-k.left;T>o&&(o=T,this.minWidth=r,this.minWidthFrom=f,this.minWidthTo=p)}}d&&Q==h.children.length-1&&(l+=d.bottom-m.bottom),f=p+$.breakAfter}};return c(this.tile,0,null),O}textDirectionAt(e){let{tile:O}=this.tile.resolveBlock(e,1);return getComputedStyle(O.dom).direction=="rtl"?ne.RTL:ne.LTR}measureTextSize(){let e=this.tile.blockTiles(a=>{if(a.isLine()&&a.children.length&&a.length<=20){let o=0,s;for(let l of a.children){if(!l.isText()||/[^ -~]/.test(l.text))return;let c=Fn(l.dom);if(c.length!=1)return;o+=c[0].width,s=c[0].height}if(o)return{lineHeight:a.dom.getBoundingClientRect().height,charWidth:o/a.length,textHeight:s}}});if(e)return e;let O=document.createElement("div"),i,n,r;return O.className="cm-line",O.style.width="99999px",O.style.position="absolute",O.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(O);let a=Fn(O.firstChild)[0];i=O.getBoundingClientRect().height,n=a&&a.width?a.width/27:7,r=a&&a.height?a.height:i,O.remove()}),{lineHeight:i,charWidth:n,textHeight:r}}computeBlockGapDeco(){let e=[],O=this.view.viewState;for(let i=0,n=0;;n++){let r=n==O.viewports.length?null:O.viewports[n],a=r?r.from-1:this.view.state.doc.length;if(a>i){let o=(O.lineBlockAt(a).bottom-O.lineBlockAt(i).top)/this.view.scaleY;e.push(W.replace({widget:new er(o),block:!0,inclusive:!0,isBlockGap:!0}).range(i,a))}if(!r)break;i=r.to+1}return W.set(e)}updateDeco(){let e=1,O=this.view.state.facet(Oo).map(r=>(this.dynamicDecorationMap[e++]=typeof r=="function")?r(this.view):r),i=!1,n=this.view.state.facet(vc).map((r,a)=>{let o=typeof r=="function";return o&&(i=!0),o?r(this.view):r});for(n.length&&(this.dynamicDecorationMap[e++]=i,O.push(te.join(n))),this.decorations=[this.editContextFormatting,...O,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof r=="function"?r(this.view):r)}scrollIntoView(e){if(e.isSnapshot){let l=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=l.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let l of this.view.state.facet(T$))try{if(l(this.view,e.range,e))return!0}catch(c){qe(this.view.state,c,"scroll handler")}let{range:O}=e,i=this.coordsAt(O.head,O.assoc||(O.head>O.anchor?-1:1)),n;if(!i)return;!O.empty&&(n=this.coordsAt(O.anchor,O.anchor>O.head?-1:1))&&(i={left:Math.min(i.left,n.left),top:Math.min(i.top,n.top),right:Math.max(i.right,n.right),bottom:Math.max(i.bottom,n.bottom)});let r=_c(this.view),a={left:i.left-r.left,top:i.top-r.top,right:i.right+r.right,bottom:i.bottom+r.bottom},{offsetWidth:o,offsetHeight:s}=this.view.scrollDOM;if(xk(this.view.scrollDOM,a,O.head1&&(i.top>window.visualViewport.offsetTop+window.visualViewport.height||i.bottomi.isWidget()||i.children.some(O);return O(this.tile.resolveBlock(e,1).tile)}destroy(){Al(this.tile)}};function Al(t,e){let O=e?.get(t);if(O!=1){O==null&&t.destroy();for(let i of t.children)Al(i,e)}}function Ck(t){return Ve(t.node)&&t.node.firstChild&&(t.offset==0||t.node.childNodes[t.offset-1].contentEditable=="false")&&(t.offset==t.node.childNodes.length||t.node.childNodes[t.offset].contentEditable=="false")}function q$(t,e){let O=t.observer.selectionRange;if(!O.focusNode)return null;let i=h$(O.focusNode,O.focusOffset),n=f$(O.focusNode,O.focusOffset),r=i||n;if(n&&i&&n.node!=i.node){let o=Se.get(n.node);if(!o||o.isText()&&o.text!=n.node.nodeValue)r=n;else if(t.docView.lastCompositionAfterCursor){let s=Se.get(i.node);!s||s.isText()&&s.text!=i.node.nodeValue||(r=n)}}if(t.docView.lastCompositionAfterCursor=r!=i,!r)return null;let a=e-r.offset;return{from:a,to:a+r.node.nodeValue.length,node:r.node}}function Ek(t,e,O){let i=q$(t,O);if(!i)return null;let{node:n,from:r,to:a}=i,o=n.nodeValue;if(/[\n\r]/.test(o)||t.state.doc.sliceString(i.from,i.to)!=o)return null;let s=e.invertedDesc;return{range:new xt(s.mapPos(r),s.mapPos(a),r,a),text:n}}function Ak(t,e){return Ve(t)?(e&&t.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(O=!0)}),O}var er=class extends Ae{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function Bk(t,e,O=1){let i=t.charCategorizer(e),n=t.doc.lineAt(e),r=e-n.from;if(n.length==0)return X.cursor(e);r==0?O=1:r==n.length&&(O=-1);let a=r,o=r;O<0?a=be(n.text,r,!1):o=be(n.text,r);let s=i(n.text.slice(a,o));for(;a>0;){let l=be(n.text,a,!1);if(i(n.text.slice(l,a))!=s)break;a=l}for(;ot.defaultLineHeight*1.5){let o=t.viewState.heightOracle.textHeight,s=Math.floor((n-O.top-(t.defaultLineHeight-o)*.5)/o);r+=s*t.viewState.heightOracle.lineLength}let a=t.state.sliceDoc(O.from,O.to);return O.from+In(a,r,t.state.tabSize)}function Il(t,e,O){let i=t.lineBlockAt(e);if(Array.isArray(i.type)){let n;for(let r of i.type){if(r.from>e)break;if(!(r.toe)return r;(!n||r.type==Ue.Text&&(n.type!=r.type||(O<0?r.frome)))&&(n=r)}}return n||i}return i}function Hk(t,e,O,i){let n=Il(t,e.head,e.assoc||-1),r=!i||n.type!=Ue.Text||!(t.lineWrapping||n.widgetLineBreaks)?null:t.coordsAtPos(e.assoc<0&&e.head>n.from?e.head-1:e.head);if(r){let a=t.dom.getBoundingClientRect(),o=t.textDirectionAt(n.from),s=t.posAtCoords({x:O==(o==ne.LTR)?a.right-1:a.left+1,y:(r.top+r.bottom)/2});if(s!=null)return X.cursor(s,O?-1:1)}return X.cursor(O?n.to:n.from,O?-1:1)}function vQ(t,e,O,i){let n=t.state.doc.lineAt(e.head),r=t.bidiSpans(n),a=t.textDirectionAt(n.from);for(let o=e,s=null;;){let l=g$(n,r,a,o,O),c=m$;if(!l){if(n.number==(O?t.state.doc.lines:1))return o;c=` +`,n=t.state.doc.line(n.number+(O?1:-1)),r=t.bidiSpans(n),l=O?X.cursor(n.from,-1):X.cursor(n.to,1)}if(s){if(!s(c))return o}else{if(!i)return l;s=i(c)}o=l}}function Kk(t,e,O){let i=t.state.charCategorizer(e),n=i(O);return r=>{let a=i(r);return n==ee.Space&&(n=a),n==a}}function Jk(t,e,O,i){let n=e.head,r=O?1:-1;if(n==(O?t.state.doc.length:0))return X.cursor(n,e.assoc);let a=e.goalColumn,o,s=t.contentDOM.getBoundingClientRect(),l=t.coordsAtPos(n,e.assoc||((e.empty?O:e.head==e.from)?1:-1)),c=t.documentTop;if(l)a==null&&(a=l.left-s.left),o=r<0?l.top:l.bottom;else{let Q=t.viewState.lineBlockAt(n);a==null&&(a=Math.min(s.right-s.left,t.defaultCharacterWidth*(n-Q.from))),o=(r<0?Q.top:Q.bottom)+c}let h=s.left+a,f=t.viewState.heightOracle.textHeight>>1,d=i??f;for(let Q=0;;Q+=f){let $=o+(d+Q)*r,p=Ml(t,{x:h,y:$},!1,r);if(O?$>s.bottom:$o:P{if(e>r&&en(t)),O.from,e.head>O.from?-1:1);return i==O.from?O:X.cursor(i,it.viewState.docHeight)return new Xt(t.state.doc.length,-1);if(l=t.elementAtHeight(s),i==null)break;if(l.type==Ue.Text){if(i<0?l.tot.viewport.to)break;let f=t.docView.coordsAt(i<0?l.from:l.to,i>0?-1:1);if(f&&(i<0?f.top<=s+r:f.bottom>=s+r))break}let h=t.viewState.heightOracle.textHeight/2;s=i>0?l.bottom+h:l.top-h}if(t.viewport.from>=l.to||t.viewport.to<=l.from){if(O)return null;if(l.type==Ue.Text){let h=Fk(t,n,l,a,o);return new Xt(h,h==l.from?1:-1)}}if(l.type!=Ue.Text)return s<(l.top+l.bottom)/2?new Xt(l.from,1):new Xt(l.to,-1);let c=t.docView.lineAt(l.from,2);return(!c||c.length!=l.length)&&(c=t.docView.lineAt(l.from,-2)),new Dl(t,a,o,t.textDirectionAt(l.from)).scanTile(c,l.from)}var Dl=class{constructor(e,O,i,n){this.view=e,this.x=O,this.y=i,this.baseDir=n,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+n.from>1;t:if(a.has($)){for(let P=1;P=r&&(S-=Q),!a.has(S)){$=S;break t}}break e}a.add($);let p=O($),m=0;if(p)for(let P=0;P1))if(S.bottomthis.y)(!l||l.top>S.top)&&(l=S),m=-1;else{let y=S.left>this.x?this.x-S.left:S.right(Q+Q+$)/3)return this.y=s.bottom-1,this.scan(e,O,!0);if(l&&l.top<(Q+$+$)/3)return this.y=l.top+1,this.scan(e,O,!0)}let d=(o?this.dirAt(e[c],1):this.baseDir)==ne.LTR;return{i:c,after:this.x>(f.left+f.right)/2==d}}scanText(e,O){let i=[];for(let r=0;r{let a=i[r]-O,o=i[r+1]-O;return hr(e.dom,a,o).getClientRects()});return n.after?new Xt(i[n.i+1],-1):new Xt(i[n.i],1)}scanTile(e,O){if(!e.length)return new Xt(O,1);if(e.children.length==1){let o=e.children[0];if(o.isText())return this.scanText(o,O);if(o.isComposite())return this.scanTile(o,O)}let i=[O];for(let o=0,s=O;o{let s=e.children[o];return s.flags&48?null:(Ve(s.dom)?s.dom:hr(s.dom,0,s.length)).getClientRects()}),r=e.children[n.i],a=i[n.i];return r.isText()?this.scanText(r,a):r.isComposite()?this.scanTile(r,a):n.after?new Xt(i[n.i+1],-1):new Xt(a,1)}},Hi="\uFFFF",Nl=class{constructor(e,O){this.points=e,this.view=O,this.text="",this.lineSeparator=O.state.facet($e.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=Hi}readRange(e,O){if(!e)return this;let i=e.parentNode;for(let n=e;;){this.findPointBefore(i,n);let r=this.text.length;this.readNode(n);let a=Se.get(n),o=n.nextSibling;if(o==O){a?.breakAfter&&!o&&i!=this.view.contentDOM&&this.lineBreak();break}let s=Se.get(o);(a&&s?a.breakAfter:(a?a.breakAfter:Ga(n))||Ga(o)&&(n.nodeName!="BR"||a?.isWidget())&&this.text.length>r)&&!ty(o,O)&&this.lineBreak(),n=o}return this.findPointBefore(i,O),this}readTextNode(e){let O=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,O.length));for(let i=0,n=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,a=1,o;if(this.lineSeparator?(r=O.indexOf(this.lineSeparator,i),a=this.lineSeparator.length):(o=n.exec(O))&&(r=o.index,a=o[0].length),this.append(O.slice(i,r<0?O.length:r)),r<0)break;if(this.lineBreak(),a>1)for(let s of this.points)s.node==e&&s.pos>this.text.length&&(s.pos-=a-1);i=r+a}}readNode(e){let O=Se.get(e),i=O&&O.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let n=i.iter();!n.next().done;)n.lineBreak?this.lineBreak():this.append(n.value)}else rn(e)?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():Ve(e)&&this.readRange(e.firstChild,null)}findPointBefore(e,O){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==O&&(i.pos=this.text.length)}findPointInside(e,O){for(let i of this.points)(rn(e)?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(ey(e,i.node,i.offset)?O:0))}};function ey(t,e,O){for(;;){if(!e||O-1;let{impreciseHead:r,impreciseAnchor:a}=e.docView,o=e.state.selection;if(e.state.readOnly&&O>-1)this.newSel=null;else if(O>-1&&(this.bounds=V$(e.docView.tile,O,i,0))){let s=r||a?[]:iy(e),l=new Nl(s,e);l.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=l.text,this.newSel=ny(s,this.bounds.from)}else{let s=e.observer.selectionRange,l=r&&r.node==s.focusNode&&r.offset==s.focusOffset||!Zl(e.contentDOM,s.focusNode)?o.main.head:e.docView.posFromDOM(s.focusNode,s.focusOffset),c=a&&a.node==s.anchorNode&&a.offset==s.anchorOffset||!Zl(e.contentDOM,s.anchorNode)?o.main.anchor:e.docView.posFromDOM(s.anchorNode,s.anchorOffset),h=e.viewport;if((V.ios||V.chrome)&&l!=c&&Math.min(l,c)<=o.main.from&&Math.max(l,c)>=o.main.to&&(h.from>0||h.to-1&&o.ranges.length>1)this.newSel=o.replaceRange(X.range(c,l));else if(e.lineWrapping&&c==l&&!(o.main.empty&&o.main.head==l)&&e.inputState.lastTouchTime>Date.now()-100){let f=e.coordsAtPos(l,-1),d=0;f&&(d=e.inputState.lastTouchY<=f.bottom?-1:1),this.newSel=X.create([X.cursor(l,d)])}else this.newSel=X.single(c,l)}}};function V$(t,e,O,i){if(t.isComposite()){let n=-1,r=-1,a=-1,o=-1;for(let s=0,l=i,c=i;sO)return V$(h,e,O,l);if(f>=e&&n==-1&&(n=s,r=l),l>O&&h.dom.parentNode==t.dom){a=s,o=c;break}c=f,l=f+h.breakAfter}return{from:r,to:o<0?i+t.length:o,startDOM:(n?t.children[n-1].dom.nextSibling:null)||t.dom.firstChild,endDOM:a=0?t.children[a].dom:null}}else return t.isText()?{from:i,to:i+t.length,startDOM:t.dom,endDOM:t.dom.nextSibling}:null}function W$(t,e){let O,{newSel:i}=e,{state:n}=t,r=n.selection.main,a=t.inputState.lastKeyTime>Date.now()-100?t.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:s}=e.bounds,l=r.from,c=null;(a===8||V.android&&e.text.length=o&&r.to<=s&&(e.typeOver||h!=e.text)&&h.slice(0,r.from-o)==e.text.slice(0,r.from-o)&&h.slice(r.to-o)==e.text.slice(f=e.text.length-(h.length-(r.to-o)))?O={from:r.from,to:r.to,insert:K.of(e.text.slice(r.from-o,f).split(Hi))}:(d=j$(h,e.text,l-o,c))&&(V.chrome&&a==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==Hi+Hi&&d.toB--,O={from:o+d.from,to:o+d.toA,insert:K.of(e.text.slice(d.from,d.toB).split(Hi))})}else i&&(!t.hasFocus&&n.facet(OO)||Fl(i,r))&&(i=null);if(!O&&!i)return!1;if((V.mac||V.android)&&O&&O.from==O.to&&O.from==r.head-1&&/^\. ?$/.test(O.insert.toString())&&t.contentDOM.getAttribute("autocorrect")=="off"?(i&&O.insert.length==2&&(i=X.single(i.main.anchor-1,i.main.head-1)),O={from:O.from,to:O.to,insert:K.of([O.insert.toString().replace("."," ")])}):n.doc.lineAt(r.from).toDate.now()-50?O={from:r.from,to:r.to,insert:n.toText(t.inputState.insertingText)}:V.chrome&&O&&O.from==O.to&&O.from==r.head&&O.insert.toString()==` + `&&t.lineWrapping&&(i&&(i=X.single(i.main.anchor-1,i.main.head-1)),O={from:r.from,to:r.to,insert:K.of([" "])}),O)return Zc(t,O,i,a);if(i&&!Fl(i,r)){let o=!1,s="select";return t.inputState.lastSelectionTime>Date.now()-50&&(t.inputState.lastSelectionOrigin=="select"&&(o=!0),s=t.inputState.lastSelectionOrigin,s=="select.pointer"&&(i=U$(n.facet(dr).map(l=>l(t)),i))),t.dispatch({selection:i,scrollIntoView:o,userEvent:s}),!0}else return!1}function Zc(t,e,O,i=-1){if(V.ios&&t.inputState.flushIOSKey(e))return!0;let n=t.state.selection.main;if(V.android&&(e.to==n.to&&(e.from==n.from||e.from==n.from-1&&t.state.sliceDoc(e.from,n.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&nn(t.contentDOM,"Enter",13)||(e.from==n.from-1&&e.to==n.to&&e.insert.length==0||i==8&&e.insert.lengthn.head)&&nn(t.contentDOM,"Backspace",8)||e.from==n.from&&e.to==n.to+1&&e.insert.length==0&&nn(t.contentDOM,"Delete",46)))return!0;let r=e.insert.toString();t.inputState.composing>=0&&t.inputState.composing++;let a,o=()=>a||(a=Oy(t,e,O));return t.state.facet(x$).some(s=>s(t,e.from,e.to,r,o))||t.dispatch(o()),!0}function Oy(t,e,O){let i,n=t.state,r=n.selection.main,a=-1;if(e.from==e.to&&e.fromr.to){let s=e.fromh(t)),l,s);e.from==c&&(a=c)}if(a>-1)i={changes:e,selection:X.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!O||O.main.empty&&O.main.from==e.from+e.insert.length)&&t.inputState.composing<0){let s=r.frome.to?n.sliceDoc(e.to,r.to):"";i=n.replaceSelection(t.state.toText(s+e.insert.sliceString(0,void 0,t.state.lineBreak)+l))}else{let s=n.changes(e),l=O&&O.main.to<=s.newLength?O.main:void 0;if(n.selection.ranges.length>1&&(t.inputState.composing>=0||t.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let c=t.state.sliceDoc(e.from,e.to),h,f=O&&q$(t,O.main.head);if(f){let Q=e.insert.length-(e.to-e.from);h={from:f.from,to:f.to-Q}}else h=t.state.doc.lineAt(r.head);let d=r.to-e.to;i=n.changeByRange(Q=>{if(Q.from==r.from&&Q.to==r.to)return{changes:s,range:l||Q.map(s)};let $=Q.to-d,p=$-c.length;if(t.state.sliceDoc(p,$)!=c||$>=h.from&&p<=h.to)return{range:Q};let m=n.changes({from:p,to:$,insert:e.insert}),P=Q.to-r.to;return{changes:m,range:l?X.range(Math.max(0,l.anchor+P),Math.max(0,l.head+P)):Q.map(m)}})}else i={changes:s,selection:l&&n.selection.replaceRange(l)}}let o="input.type";return(t.composing||t.inputState.compositionPendingChange&&t.inputState.compositionEndedAt>Date.now()-50)&&(t.inputState.compositionPendingChange=!1,o+=".compose",t.inputState.compositionFirstChange&&(o+=".start",t.inputState.compositionFirstChange=!1)),n.update(i,{userEvent:o,scrollIntoView:!0})}function j$(t,e,O,i){let n=Math.min(t.length,e.length),r=0;for(;r0&&o>0&&t.charCodeAt(a-1)==e.charCodeAt(o-1);)a--,o--;if(i=="end"){let s=Math.max(0,r-Math.min(a,o));O-=a+s-r}if(a=a?r-O:0;r-=s,o=r+(o-a),a=r}else if(o=o?r-O:0;r-=s,a=r+(a-o),o=r}return{from:r,toA:a,toB:o}}function iy(t){let e=[];if(t.root.activeElement!=t.contentDOM)return e;let{anchorNode:O,anchorOffset:i,focusNode:n,focusOffset:r}=t.observer.selectionRange;return O&&(e.push(new Aa(O,i)),(n!=O||r!=i)&&e.push(new Aa(n,r))),e}function ny(t,e){if(t.length==0)return null;let O=t[0].pos,i=t.length==2?t[1].pos:O;return O<0||i<0?null:O==i?X.create([X.cursor(i+e,-1)]):X.single(O+e,i+e)}function Fl(t,e){return e.head==t.main.head&&e.anchor==t.main.anchor}var Hl=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.touchActive=!1,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.lastIOSMomentumScroll=0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,V.safari&&e.contentDOM.addEventListener("input",()=>null),V.gecko&&gy(e.contentDOM.ownerDocument)}handleEvent(e){!fy(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,O){let i=this.handlers[e];if(i){for(let n of i.observers)n(this.view,O);for(let n of i.handlers){if(O.defaultPrevented)break;if(n(this.view,O)){O.preventDefault();break}}}}ensureHandlers(e){let O=ay(e),i=this.handlers,n=this.view.contentDOM;for(let r in O)if(r!="scroll"){let a=!O[r].handlers.length,o=i[r];o&&a!=!o.handlers.length&&(n.removeEventListener(r,this.handleEvent),o=null),o||n.addEventListener(r,this.handleEvent,{passive:a})}for(let r in i)r!="scroll"&&!O[r]&&n.removeEventListener(r,this.handleEvent);this.handlers=O}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&C$.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),V.android&&V.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;if(V.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&(G$.some(O=>O.keyCode==e.keyCode)&&!e.ctrlKey||oy.indexOf(e.key)>-1&&e.ctrlKey)){let O={ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey};O.shiftKey&&V.ios&&!/^(off|none)$/.test(this.view.contentDOM.autocapitalize)&&ry(this.view.win)&&(O.shiftKey=!1);let i=this.pendingIOSKey={key:e.key,keyCode:e.keyCode,mods:O};return setTimeout(()=>{this.pendingIOSKey==i&&this.flushIOSKey()},50),!0}return e.keyCode!=229&&this.view.observer.forceFlush(),!1}flushIOSKey(e){let O=this.pendingIOSKey;return!O||this.view.observer.pendingRecords().length||O.key=="Enter"&&e&&e.from0?!0:V.safari&&!V.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function ry(t){return t.visualViewport?t.visualViewport.height*t.visualViewport.scale/t.document.documentElement.clientHeight<.85:!1}function _Q(t,e){return(O,i)=>{try{return e.call(t,i,O)}catch(n){qe(O.state,n)}}}function ay(t){let e=Object.create(null);function O(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of t){let n=i.spec,r=n&&n.plugin.domEventHandlers,a=n&&n.plugin.domEventObservers;if(r)for(let o in r){let s=r[o];s&&O(o).handlers.push(_Q(i.value,s))}if(a)for(let o in a){let s=a[o];s&&O(o).observers.push(_Q(i.value,s))}}for(let i in Rt)O(i).handlers.push(Rt[i]);for(let i in Ke)O(i).observers.push(Ke[i]);return e}var G$=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],oy="dthko",C$=[16,17,18,20,91,92,224,225],ya=6;function wa(t){return Math.max(0,t)*.7+8}function sy(t,e){return Math.max(Math.abs(t.clientX-e.clientX),Math.abs(t.clientY-e.clientY))}var Kl=class{constructor(e,O,i,n){this.view=e,this.startEvent=O,this.style=i,this.mustSelect=n,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=O,this.scrollParents=a$(e.contentDOM),this.atoms=e.state.facet(dr).map(a=>a(e));let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=O.shiftKey,this.multiple=e.state.facet($e.allowMultipleSelections)&&ly(e,O),this.dragging=hy(e,O)&&L$(O)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&sy(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let O=0,i=0,n=0,r=0,a=this.view.win.innerWidth,o=this.view.win.innerHeight;this.scrollParents.x&&({left:n,right:a}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:o}=this.scrollParents.y.getBoundingClientRect());let s=_c(this.view);e.clientX-s.left<=n+ya?O=-wa(n-e.clientX):e.clientX+s.right>=a-ya&&(O=wa(e.clientX-a)),e.clientY-s.top<=r+ya?i=-wa(r-e.clientY):e.clientY+s.bottom>=o-ya&&(i=wa(e.clientY-o)),this.setScrollSpeed(O,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,O){this.scrollSpeed={x:e,y:O},e||O?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:O}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),O&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=O,O=0),(e||O)&&this.view.win.scrollBy(e,O),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:O}=this,i=U$(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(O.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(O=>O.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function ly(t,e){let O=t.state.facet(P$);return O.length?O[0](e):V.mac?e.metaKey:e.ctrlKey}function cy(t,e){let O=t.state.facet(S$);return O.length?O[0](e):V.mac?!e.altKey:!e.ctrlKey}function hy(t,e){let{main:O}=t.state.selection;if(O.empty)return!1;let i=lr(t.root);if(!i||i.rangeCount==0)return!0;let n=i.getRangeAt(0).getClientRects();for(let r=0;r=e.clientX&&a.top<=e.clientY&&a.bottom>=e.clientY)return!0}return!1}function fy(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let O=e.target,i;O!=t.contentDOM;O=O.parentNode)if(!O||O.nodeType==11||(i=Se.get(O))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var Rt=Object.create(null),Ke=Object.create(null),E$=V.ie&&V.ie_version<15||V.ios&&V.webkit_version<604;function uy(t){let e=t.dom.parentNode;if(!e)return;let O=e.appendChild(document.createElement("textarea"));O.style.cssText="position: fixed; left: -10000px; top: 10px",O.focus(),setTimeout(()=>{t.focus(),O.remove(),A$(t,O.value)},50)}function io(t,e,O){for(let i of t.facet(e))O=i(O,t);return O}function A$(t,e){e=io(t.state,wc,e);let{state:O}=t,i,n=1,r=O.toText(e),a=r.lines==O.selection.ranges.length;if(Jl!=null&&O.selection.ranges.every(s=>s.empty)&&Jl==r.toString()){let s=-1;i=O.changeByRange(l=>{let c=O.doc.lineAt(l.from);if(c.from==s)return{range:l};s=c.from;let h=O.toText((a?r.line(n++).text:e)+O.lineBreak);return{changes:{from:c.from,insert:h},range:X.cursor(l.from+h.length,-1)}})}else a?i=O.changeByRange(s=>{let l=r.line(n++);return{changes:{from:s.from,to:s.to,insert:l.text},range:X.cursor(s.from+l.length,-1)}}):i=O.replaceSelection(r);t.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}Ke.scroll=t=>{let e=t.inputState;e.lastScrollTop=t.scrollDOM.scrollTop,e.lastScrollLeft=t.scrollDOM.scrollLeft,V.ios&&!e.touchActive&&(e.lastIOSMomentumScroll=Date.now())};Ke.wheel=Ke.mousewheel=t=>{t.inputState.lastWheelEvent=Date.now()};Rt.keydown=(t,e)=>(t.inputState.setSelectionOrigin("select"),e.keyCode==27&&t.inputState.tabFocusMode!=0&&(t.inputState.tabFocusMode=Date.now()+2e3),!1);Ke.touchstart=(t,e)=>{let O=t.inputState,i=e.targetTouches[0];O.touchActive=!0,O.lastTouchTime=Date.now(),i&&(O.lastTouchX=i.clientX,O.lastTouchY=i.clientY),O.setSelectionOrigin("select.pointer")};Ke.touchmove=t=>{t.inputState.setSelectionOrigin("select.pointer")};Ke.touchend=(t,e)=>{t.inputState.touchActive=!1};Rt.mousedown=(t,e)=>{if(t.observer.flush(),t.inputState.lastTouchTime>Date.now()-2e3)return!1;let O=null;for(let i of t.state.facet(X$))if(O=i(t,e),O)break;if(!O&&e.button==0&&(O=Qy(t,e)),O){let i=!t.hasFocus;t.inputState.startMouseSelection(new Kl(t,e,O,i)),i&&t.observer.ignore(()=>{l$(t.contentDOM);let r=t.root.activeElement;r&&!r.contains(t.contentDOM)&&r.blur()});let n=t.inputState.mouseSelection;if(n)return n.start(e),n.dragging===!1}else t.inputState.setSelectionOrigin("select.pointer");return!1};function ZQ(t,e,O,i){if(i==1)return X.cursor(e,O);if(i==2)return Bk(t.state,e,O);{let n=t.docView.lineAt(e,O),r=t.state.doc.lineAt(n?n.posAtEnd:e),a=n?n.posAtStart:r.from,o=n?n.posAtEnd:r.to;return oDate.now()-400&&Math.abs(e.clientX-t.clientX)<2&&Math.abs(e.clientY-t.clientY)<2?(YQ+1)%3:1}function Qy(t,e){let O=t.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=L$(e),n=t.state.selection;return{update(r){r.docChanged&&(O.pos=r.changes.mapPos(O.pos),n=n.map(r.changes))},get(r,a,o){let s=t.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),l,c=ZQ(t,s.pos,s.assoc,i);if(O.pos!=s.pos&&!a){let h=ZQ(t,O.pos,O.assoc,i),f=Math.min(h.from,c.from),d=Math.max(h.to,c.to);c=f1&&(l=$y(n,s.pos))?l:o?n.addRange(c):X.create([c])}}}function $y(t,e){for(let O=0;O=e)return X.create(t.ranges.slice(0,O).concat(t.ranges.slice(O+1)),t.mainIndex==O?0:t.mainIndex-(t.mainIndex>O?1:0))}return null}Rt.dragstart=(t,e)=>{let{selection:{main:O}}=t.state;if(e.target.draggable){let n=t.docView.tile.nearest(e.target);if(n&&n.isWidget()){let r=n.posAtStart,a=r+n.length;(r>=O.to||a<=O.from)&&(O=X.undirectionalRange(r,a))}}let{inputState:i}=t;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=O,e.dataTransfer&&(e.dataTransfer.setData("Text",io(t.state,Tc,t.state.sliceDoc(O.from,O.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Rt.dragend=t=>(t.inputState.draggedContent=null,!1);function qQ(t,e,O,i){if(O=io(t.state,wc,O),!O)return;let n=t.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=t.inputState,a=i&&r&&cy(t,e)?{from:r.from,to:r.to}:null,o={from:n,insert:O},s=t.state.changes(a?[a,o]:o);t.focus(),t.dispatch({changes:s,selection:{anchor:s.mapPos(n,-1),head:s.mapPos(n,1)},userEvent:a?"move.drop":"input.drop"}),t.inputState.draggedContent=null}Rt.drop=(t,e)=>{if(!e.dataTransfer)return!1;if(t.state.readOnly)return!0;let O=e.dataTransfer.files;if(O&&O.length){let i=Array(O.length),n=0,r=()=>{++n==O.length&&qQ(t,e,i.filter(a=>a!=null).join(t.state.lineBreak),!1)};for(let a=0;a{/[\x00-\x08\x0e-\x1f]{2}/.test(o.result)||(i[a]=o.result),r()},o.readAsText(O[a])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return qQ(t,e,i,!0),!0}return!1};Rt.paste=(t,e)=>{if(t.state.readOnly)return!0;t.observer.flush();let O=E$?null:e.clipboardData;return O?(A$(t,O.getData("text/plain")||O.getData("text/uri-list")),!0):(uy(t),!1)};function py(t,e){let O=t.dom.parentNode;if(!O)return;let i=O.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),t.focus()},50)}function my(t){let e=[],O=[],i=!1;for(let n of t.selection.ranges)n.empty||(e.push(t.sliceDoc(n.from,n.to)),O.push(n));if(!e.length){let n=-1;for(let{from:r}of t.selection.ranges){let a=t.doc.lineAt(r);a.number>n&&(e.push(a.text),O.push({from:a.from,to:Math.min(t.doc.length,a.to+1)})),n=a.number}i=!0}return{text:io(t,Tc,e.join(t.lineBreak)),ranges:O,linewise:i}}var Jl=null;Rt.copy=Rt.cut=(t,e)=>{if(!Bn(t.contentDOM,t.observer.selectionRange))return!1;let{text:O,ranges:i,linewise:n}=my(t.state);if(!O&&!n)return!1;Jl=n?O:null,e.type=="cut"&&!t.state.readOnly&&t.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=E$?null:e.clipboardData;return r?(r.clearData(),r.setData("text/plain",O),!0):(py(t,O),!1)};var I$=Ee.define();function M$(t,e){let O=[];for(let i of t.facet(k$)){let n=i(t,e);n&&O.push(n)}return O.length?t.update({effects:O,annotations:I$.of(!0)}):null}function D$(t){setTimeout(()=>{let e=t.hasFocus;if(e!=t.inputState.notifiedFocused){let O=M$(t.state,e);O?t.dispatch(O):t.update([])}},10)}Ke.focus=t=>{t.inputState.lastFocusTime=Date.now(),!t.scrollDOM.scrollTop&&(t.inputState.lastScrollTop||t.inputState.lastScrollLeft)&&(t.scrollDOM.scrollTop=t.inputState.lastScrollTop,t.scrollDOM.scrollLeft=t.inputState.lastScrollLeft),D$(t)};Ke.blur=t=>{t.observer.clearSelectionRange(),D$(t)};Ke.compositionstart=Ke.compositionupdate=(t,e)=>{if(!t.observer.editContext&&(t.inputState.compositionFirstChange==null&&(t.inputState.compositionFirstChange=!0),t.inputState.composing<0)){let{main:O}=t.state.selection;!O.empty&&t.lineBlockAt(O.from).from!=t.lineBlockAt(O.to).from&&!t.state.readOnly&&t.dispatch({changes:t.state.selection.ranges.filter(i=>!i.empty).map(i=>({from:i.from,to:i.to})),userEvent:"input"}),t.inputState.composing=0}};Ke.compositionend=t=>{t.observer.editContext||(t.inputState.composing=-1,t.inputState.compositionEndedAt=Date.now(),t.inputState.compositionPendingKey=!0,t.inputState.compositionPendingChange=t.observer.pendingRecords().length>0,t.inputState.compositionFirstChange=null,V.chrome&&V.android?t.observer.flushSoon():t.inputState.compositionPendingChange?Promise.resolve().then(()=>t.observer.flush()):setTimeout(()=>{t.inputState.composing<0&&t.docView.hasComposition&&t.update([])},50))};Ke.contextmenu=t=>{t.inputState.lastContextMenu=Date.now()};Rt.beforeinput=(t,e)=>{var O,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(t.inputState.insertingText=e.data,t.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&t.observer.editContext){let r=(O=e.dataTransfer)===null||O===void 0?void 0:O.getData("text/plain"),a=e.getTargetRanges();if(r&&a.length){let o=a[0],s=t.posAtDOM(o.startContainer,o.startOffset),l=t.posAtDOM(o.endContainer,o.endOffset);return Zc(t,{from:s,to:l,insert:t.state.toText(r)},null),!0}}let n;if(V.chrome&&V.android&&(n=G$.find(r=>r.inputType==e.inputType))&&(t.observer.delayAndroidKey(n.key,n.keyCode),n.key=="Backspace"||n.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var a;(((a=window.visualViewport)===null||a===void 0?void 0:a.height)||0)>r+10&&t.hasFocus&&(t.contentDOM.blur(),t.focus())},100)}return V.ios&&e.inputType=="deleteContentForward"&&t.observer.flushSoon(),V.safari&&e.inputType=="insertText"&&t.inputState.composing>=0&&setTimeout(()=>Ke.compositionend(t,e),20),!1};var UQ=new Set;function gy(t){UQ.has(t)||(UQ.add(t),t.addEventListener("copy",()=>{}),t.addEventListener("cut",()=>{}))}var VQ=["pre-wrap","normal","pre-line","break-spaces"],ci=!1;function ec(){ci=!1}var La=class{constructor(e){this.lineWrapping=e,this.doc=K.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,O){let i=this.doc.lineAt(O).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((O-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return VQ.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let O=!1;for(let i=0;i-1,s=Math.abs(O-this.lineHeight)>.3||this.lineWrapping!=o;if(this.lineWrapping=o,this.lineHeight=O,this.charWidth=i,this.textHeight=n,this.lineLength=r,s){this.heightSamples={};for(let l=0;l0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>za&&(ci=!0),this.height=e)}replace(e,O,i){return t.of(i)}decomposeLeft(e,O){O.push(this)}decomposeRight(e,O){O.push(this)}applyChanges(e,O,i,n){let r=this,a=i.doc;for(let o=n.length-1;o>=0;o--){let{fromA:s,toA:l,fromB:c,toB:h}=n[o],f=r.lineAt(s,pe.ByPosNoHeight,i.setDoc(O),0,0),d=f.to>=l?f:r.lineAt(l,pe.ByPosNoHeight,i,0,0);for(h+=d.to-l,l=d.to;o>0&&f.from<=n[o-1].toA;)s=n[o-1].fromA,c=n[o-1].fromB,o--,sr*2){let o=e[O-1];o.break?e.splice(--O,1,o.left,null,o.right):e.splice(--O,1,o.left,o.right),i+=1+o.break,n-=o.size}else if(r>n*2){let o=e[i];o.break?e.splice(i,1,o.left,null,o.right):e.splice(i,1,o.left,o.right),i+=2+o.break,r-=o.size}else break;else if(n=r&&a(this.lineAt(0,pe.ByPos,i,n,r))}setMeasuredHeight(e){let O=e.heights[e.index++];O<0?(this.spaceAbove=-O,O=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(O)}updateHeight(e,O=0,i=!1,n){return n&&n.from<=O&&n.more&&this.setMeasuredHeight(n),this.outdated=!1,this}toString(){return`block(${this.length})`}},St=class t extends Da{constructor(e,O,i){super(e,O,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,O){return new bt(O,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,O,i){let n=i[0];return i.length==1&&(n instanceof t||n instanceof vO&&n.flags&4)&&Math.abs(this.length-n.length)<10?(n instanceof vO?n=new t(n.length,this.height,this.spaceAbove):n.height=this.height,this.outdated||(n.outdated=!1),n):it.of(i)}updateHeight(e,O=0,i=!1,n){return n&&n.from<=O&&n.more?this.setMeasuredHeight(n):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},vO=class t extends it{constructor(e){super(e,0)}heightMetrics(e,O){let i=e.doc.lineAt(O).number,n=e.doc.lineAt(O+this.length).number,r=n-i+1,a,o=0;if(e.lineWrapping){let s=Math.min(this.height,e.lineHeight*r);a=s/r,this.length>r+1&&(o=(this.height-s)/(this.length-r-1))}else a=this.height/r;return{firstLine:i,lastLine:n,perLine:a,perChar:o}}blockAt(e,O,i,n){let{firstLine:r,lastLine:a,perLine:o,perChar:s}=this.heightMetrics(O,n);if(O.lineWrapping){let l=n+(e0){let r=i[i.length-1];r instanceof t?i[i.length-1]=new t(r.length+n):i.push(null,new t(n-1))}if(e>0){let r=i[0];r instanceof t?i[0]=new t(e+r.length):i.unshift(new t(e-1),null)}return it.of(i)}decomposeLeft(e,O){O.push(new t(e-1),null)}decomposeRight(e,O){O.push(null,new t(this.length-e-1))}updateHeight(e,O=0,i=!1,n){let r=O+this.length;if(n&&n.from<=O+this.length&&n.more){let a=[],o=Math.max(O,n.from),s=-1;for(n.from>O&&a.push(new t(n.from-O-1).updateHeight(e,O));o<=r&&n.more;){let c=e.doc.lineAt(o).length;a.length&&a.push(null);let h=n.heights[n.index++],f=0;h<0&&(f=-h,h=n.heights[n.index++]),s==-1?s=h:Math.abs(h-s)>=za&&(s=-2);let d=new St(c,h,f);d.outdated=!1,a.push(d),o+=c+1}o<=r&&a.push(null,new t(r-o).updateHeight(e,o));let l=it.of(a);return(s<0||Math.abs(l.height-this.height)>=za||Math.abs(s-this.heightMetrics(e,O).perLine)>=za)&&(ci=!0),Ma(this,l)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(O,O+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},tc=class extends it{constructor(e,O,i){super(e.length+(O?1:0)+i.length,e.height+i.height,(O?1:0)|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,O,i,n){let r=i+this.left.height;return eo))return l;let c=O==pe.ByPosNoHeight?pe.ByPosNoHeight:pe.ByPos;return s?l.join(this.right.lineAt(o,c,i,a,o)):this.left.lineAt(o,c,i,n,r).join(l)}forEachLine(e,O,i,n,r,a){let o=n+this.left.height,s=r+this.left.length+this.break;if(this.break)e=s&&this.right.forEachLine(e,O,i,o,s,a);else{let l=this.lineAt(s,pe.ByPos,i,n,r);e=e&&l.from<=O&&a(l),O>l.to&&this.right.forEachLine(Math.max(e,l.to+1),O,i,o,s,a)}}replace(e,O,i){let n=this.left.length+this.break;if(Othis.left.length)return this.balanced(this.left,this.right.replace(e-n,O-n,i));let r=[];e>0&&this.decomposeLeft(e,r);let a=r.length;for(let o of i)r.push(o);if(e>0&&WQ(r,a-1),O=i&&O.push(null)),e>i&&this.right.decomposeLeft(e-i,O)}decomposeRight(e,O){let i=this.left.length,n=i+this.break;if(e>=n)return this.right.decomposeRight(e-n,O);e2*O.size||O.size>2*e.size?it.of(this.break?[e,null,O]:[e,O]):(this.left=Ma(this.left,e),this.right=Ma(this.right,O),this.setHeight(e.height+O.height),this.outdated=e.outdated||O.outdated,this.size=e.size+O.size,this.length=e.length+this.break+O.length,this)}updateHeight(e,O=0,i=!1,n){let{left:r,right:a}=this,o=O+r.length+this.break,s=null;return n&&n.from<=O+r.length&&n.more?s=r=r.updateHeight(e,O,i,n):r.updateHeight(e,O,i),n&&n.from<=o+a.length&&n.more?s=a=a.updateHeight(e,o,i,n):a.updateHeight(e,o,i),s?this.balanced(r,a):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function WQ(t,e){let O,i;t[e]==null&&(O=t[e-1])instanceof vO&&(i=t[e+1])instanceof vO&&t.splice(e-1,3,new vO(O.length+1+i.length))}var Sy=5,Oc=class t{constructor(e,O){this.pos=e,this.oracle=O,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,O){if(this.lineStart>-1){let i=Math.min(O,this.lineEnd),n=this.nodes[this.nodes.length-1];n instanceof St?n.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new St(i-this.pos,-1,0)),this.writtenTo=i,O>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=O}point(e,O,i){if(e=Sy)&&this.addLineDeco(n,r,a)}else O>e&&this.span(e,O);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:O}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=O,this.writtenToe&&this.nodes.push(new St(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,O){let i=new vO(O-e);return this.oracle.doc.lineAt(e).to==O&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof St)return e;let O=new St(0,-1,0);return this.nodes.push(O),O}addBlock(e){this.enterLine();let O=e.deco;O&&O.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,O&&O.endSide>0&&(this.covering=e)}addLineDeco(e,O,i){let n=this.ensureLine();n.length+=i,n.collapsed+=i,n.widgetHeight=Math.max(n.widgetHeight,e),n.breaks+=O,this.writtenTo=this.pos=this.pos+i}finish(e){let O=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(O instanceof St)&&!this.isCovered?this.nodes.push(new St(0,-1,0)):(this.writtenTol.clientHeight||l.scrollWidth>l.clientWidth)&&c.overflow!="visible"){let h=l.getBoundingClientRect();r=Math.max(r,h.left),a=Math.min(a,h.right),o=Math.max(o,h.top),s=Math.min(l==t.parentNode?n.innerHeight:s,h.bottom)}l=c.position=="absolute"||c.position=="fixed"?l.offsetParent:l.parentNode}else if(l.nodeType==11)l=l.host;else break;return{left:r-O.left,right:Math.max(r,a)-O.left,top:o-(O.top+e),bottom:Math.max(o,s)-(O.top+e)}}function xy(t){let e=t.getBoundingClientRect(),O=t.ownerDocument.defaultView||window;return e.left0&&e.top0}function ky(t,e){let O=t.getBoundingClientRect();return{left:0,right:O.right-O.left,top:e,bottom:O.bottom-(O.top+e)}}var Or=class{constructor(e,O,i,n){this.from=e,this.to=O,this.size=i,this.displaySize=n}static same(e,O){if(e.length!=O.length)return!1;for(let i=0;itypeof n!="function"&&n.class=="cm-lineWrapping");this.heightOracle=new La(i),this.stateDeco=GQ(O),this.heightMap=it.empty().applyChanges(this.stateDeco,K.empty,this.heightOracle.setDoc(O.doc),[new xt(0,0,0,O.doc.length)]);for(let n=0;n<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());n++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=W.set(this.lineGaps.map(n=>n.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:O}=this.state.selection;for(let i=0;i<=1;i++){let n=i?O.head:O.anchor;if(!e.some(({from:r,to:a})=>n>=r&&n<=a)){let{from:r,to:a}=this.lineBlockAt(n);e.push(new Ji(r,a))}}return this.viewports=e.sort((i,n)=>i.from-n.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?jQ:new rc(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(Dn(e,this.scaler))})}update(e,O=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=GQ(this.state);let n=e.changedRanges,r=xt.extendWithRanges(n,Xy(i,this.stateDeco,e?e.changes:Ye.empty(this.state.doc.length))),a=this.heightMap.height,o=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);ec(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=a||ci)&&(e.flags|=2),o?(this.scrollAnchorPos=e.changes.mapPos(o.from,-1),this.scrollAnchorHeight=o.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=a);let s=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(O&&(O.range.heads.to)||!this.viewportIsAppropriate(s))&&(s=this.getViewport(0,O));let l=s.from!=this.viewport.from||s.to!=this.viewport.to;this.viewport=s,e.flags|=this.updateForViewport(),(l||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),O&&(this.scrollTarget=O),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(w$)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,O=e.contentDOM,i=window.getComputedStyle(O),n=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?ne.RTL:ne.LTR;let a=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent==="refresh",o=O.getBoundingClientRect(),s=a||this.mustMeasureContent||this.contentDOMHeight!=o.height;this.contentDOMHeight=o.height,this.mustMeasureContent=!1;let l=0,c=0;if(o.width&&o.height){let{scaleX:k,scaleY:T}=r$(O,o);(k>.005&&Math.abs(this.scaleX-k)>.005||T>.005&&Math.abs(this.scaleY-T)>.005)&&(this.scaleX=k,this.scaleY=T,l|=16,a=s=!0)}let h=(parseInt(i.paddingTop)||0)*this.scaleY,f=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=h||this.paddingBottom!=f)&&(this.paddingTop=h,this.paddingBottom=f,l|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(n.lineWrapping&&(s=!0),this.editorWidth=e.scrollDOM.clientWidth,l|=16);let d=a$(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let Q=this.getScrollOffset();this.scrollOffset!=Q&&(this.scrollAnchorHeight=-1,this.scrollOffset=Q),this.scrolledToBottom=c$(this.scrollParent||e.win);let $=(this.printing?ky:by)(O,this.paddingTop),p=$.top-this.pixelViewport.top,m=$.bottom-this.pixelViewport.bottom;this.pixelViewport=$;let P=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(P!=this.inView&&(this.inView=P,P&&(s=!0)),!this.inView&&!this.scrollTarget&&!xy(e.dom))return 0;let S=o.width;if((this.contentDOMWidth!=S||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=o.width,this.editorHeight=e.scrollDOM.clientHeight,l|=16),s){let k=e.docView.measureVisibleLineHeights(this.viewport);if(n.mustRefreshForHeights(k)&&(a=!0),a||n.lineWrapping&&Math.abs(S-this.contentDOMWidth)>n.charWidth){let{lineHeight:T,charWidth:v,textHeight:j}=e.docView.measureTextSize();a=T>0&&n.refresh(r,T,v,j,Math.max(5,S/v),k),a&&(e.docView.minWidth=0,l|=16)}p>0&&m>0?c=Math.max(p,m):p<0&&m<0&&(c=Math.min(p,m)),ec();for(let T of this.viewports){let v=T.from==this.viewport.from?k:e.docView.measureVisibleLineHeights(T);this.heightMap=(a?it.empty().applyChanges(this.stateDeco,K.empty,this.heightOracle,[new xt(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(n,0,a,new Ia(T.from,v))}ci&&(l|=2)}let y=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return y&&(l&2&&(l|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),l|=this.updateForViewport()),(l&2||y)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(a?[]:this.lineGaps,e)),l|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),l}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,O){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),n=this.heightMap,r=this.heightOracle,{visibleTop:a,visibleBottom:o}=this,s=new Ji(n.lineAt(a-i*1e3,pe.ByHeight,r,0,0).from,n.lineAt(o+(1-i)*1e3,pe.ByHeight,r,0,0).to);if(O){let{head:l}=O.range;if(ls.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),h=n.lineAt(l,pe.ByPos,r,0,0),f;O.y=="center"?f=(h.top+h.bottom)/2-c/2:O.y=="start"||O.y=="nearest"&&l=o+Math.max(10,Math.min(i,250)))&&n>a-2*1e3&&r>1,a=n<<1;if(this.defaultTextDirection!=ne.LTR&&!i)return[];let o=[],s=(c,h,f,d)=>{if(h-cc&&mm.from>=f.from&&m.to<=f.to&&Math.abs(m.from-c)m.fromP));if(!p){if(hS.from<=h&&S.to>=h)){let S=O.moveToLineBoundary(X.cursor(h),!1,!0).head;S>c&&(h=S)}let m=this.gapSize(f,c,h,d),P=i||m<2e6?m:2e6;p=new Or(c,h,m,P)}o.push(p)},l=c=>{if(c.length2e6)for(let T of e)T.from>=c.from&&T.fromc.from&&s(c.from,d,c,h),QO.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let O=this.stateDeco;this.lineGaps.length&&(O=O.concat(this.lineGapDeco));let i=[];te.spans(O,this.viewport.from,this.viewport.to,{span(r,a){i.push({from:r,to:a})},point(){}},20);let n=0;if(i.length!=this.visibleRanges.length)n=12;else for(let r=0;r=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(O=>O.from<=e&&O.to>=e)||Dn(this.heightMap.lineAt(e,pe.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(O=>O.top<=e&&O.bottom>=e)||Dn(this.heightMap.lineAt(this.scaler.fromDOM(e),pe.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop*this.scaleY:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top}scrollAnchorAt(e){let O=this.lineBlockAtHeight(e+8);return O.from>=this.viewport.from||this.viewportLines[0].top-e>200?O:this.viewportLines[0]}elementAtHeight(e){return Dn(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},Ji=class{constructor(e,O){this.from=e,this.to=O}};function yy(t,e,O){let i=[],n=t,r=0;return te.spans(O,t,e,{span(){},point(a,o){a>n&&(i.push({from:n,to:a}),r+=a-n),n=o}},20),n=1)return e[e.length-1].to;let i=Math.floor(t*O);for(let n=0;;n++){let{from:r,to:a}=e[n],o=a-r;if(i<=o)return r+i;i-=o}}function va(t,e){let O=0;for(let{from:i,to:n}of t.ranges){if(e<=n){O+=e-i;break}O+=n-i}return O/t.total}function wy(t,e){for(let O of t)if(e(O))return O}var jQ={toDOM(t){return t},fromDOM(t){return t},scale:1,eq(t){return t==this}};function GQ(t){let e=t.facet(Oo).filter(i=>typeof i!="function"),O=t.facet(vc).filter(i=>typeof i!="function");return O.length&&e.push(te.join(O)),e}var rc=class t{constructor(e,O,i){let n=0,r=0,a=0;this.viewports=i.map(({from:o,to:s})=>{let l=O.lineAt(o,pe.ByPos,e,0,0).top,c=O.lineAt(s,pe.ByPos,e,0,0).bottom;return n+=c-l,{from:o,to:s,top:l,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-n)/(O.height-n);for(let o of this.viewports)o.domTop=a+(o.top-r)*this.scale,a=o.domBottom=o.domTop+(o.bottom-o.top),r=o.bottom}toDOM(e){for(let O=0,i=0,n=0;;O++){let r=OO.from==e.viewports[i].from&&O.to==e.viewports[i].to):!1}};function Dn(t,e){if(e.scale==1)return t;let O=e.toDOM(t.top),i=e.toDOM(t.bottom);return new bt(t.from,t.length,O,i-O,Array.isArray(t._content)?t._content.map(n=>Dn(n,e)):t._content)}var _a=z.define({combine:t=>t.join(" ")}),ac=z.define({combine:t=>t.indexOf(!0)>-1}),oc=Pt.newName(),N$=Pt.newName(),B$=Pt.newName(),F$={"&light":"."+N$,"&dark":"."+B$};function sc(t,e,O){return new Pt(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,n=>{if(n=="&")return t;if(!O||!O[n])throw new RangeError(`Unsupported selector: ${n}`);return O[n]}):t+" "+i}})}var Ty=sc("."+oc,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{userSelect:"none",position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},".cm-panels-top":{top:"0"},".cm-panels-bottom":{bottom:"0"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"baseline",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{background:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 0) no-repeat",backgroundSize:".4em",backgroundPosition:"calc(min(50%, 0px)) center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},F$),vy={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},xl=V.ie&&V.ie_version<=11,lc=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Rl,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(O=>{for(let i of O)this.queue.push(i);(V.ie&&V.ie_version<=11||V.ios&&e.composing)&&O.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&V.android&&e.constructor.EDIT_CONTEXT!==!1&&!(V.chrome&&V.chrome_version<126)&&(this.editContext=new cc(e),e.state.facet(OO)&&(e.contentDOM.editContext=this.editContext.editContext)),xl&&(this.onCharData=O=>{this.queue.push({target:O.target,type:"characterData",oldValue:O.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var O;((O=this.view.docView)===null||O===void 0?void 0:O.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),O.length>0&&O[O.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(O=>{O.length>0&&O[O.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((O,i)=>O!=e[i]))){this.gapIntersection.disconnect();for(let O of e)this.gapIntersection.observe(O);this.gaps=e}}onSelectionChange(e){let O=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,n=this.selectionRange;if(i.state.facet(OO)?i.root.activeElement!=this.dom:!Bn(this.dom,n))return;let r=n.anchorNode&&i.docView.tile.nearest(n.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){O||(this.selectionChanged=!1);return}(V.ie&&V.ie_version<=11||V.android&&V.chrome)&&!i.state.selection.main.empty&&n.focusNode&&Hn(n.focusNode,n.focusOffset,n.anchorNode,n.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,O=lr(e.root);if(!O)return!1;let i=V.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&_y(this.view,O)||O;if(!i||this.selectionRange.eq(i))return!1;let n=Bn(this.dom,i);return n&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&nn(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(n)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:O,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let O=-1,i=-1,n=!1;for(let r of e){let a=this.readMutation(r);a&&(a.typeOver&&(n=!0),O==-1?{from:O,to:i}=a:(O=Math.min(a.from,O),i=Math.max(a.to,i)))}return{from:O,to:i,typeOver:n}}readChange(){let{from:e,to:O,typeOver:i}=this.processRecords(),n=this.selectionChanged&&Bn(this.dom,this.selectionRange);if(e<0&&!n)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new Bl(this.view,e,O,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let O=this.selectionChanged,i=this.readChange();if(!i)return this.view.requestMeasure(),!1;let n=this.view.state,r=W$(this.view,i);return this.view.state==n&&(i.domChanged||O)&&this.view.update([]),r}readMutation(e){let O=this.view.docView.tile.nearest(e.target);if(!O||O.isWidget())return null;if(O.markDirty(e.type=="attributes"),e.type=="childList"){let i=CQ(O,e.previousSibling||e.target.previousSibling,-1),n=CQ(O,e.nextSibling||e.target.nextSibling,1);return{from:i?O.posAfter(i):O.posAtStart,to:n?O.posBefore(n):O.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:O.posAtStart,to:O.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(OO)!=e.state.facet(OO)&&(e.view.contentDOM.editContext=e.state.facet(OO)?this.editContext.editContext:null))}destroy(){var e,O,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(O=this.gapIntersection)===null||O===void 0||O.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let n of this.scrollTargets)n.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function CQ(t,e,O){for(;e;){let i=Se.get(e);if(i&&i.parent==t)return i;let n=e.parentNode;e=n!=t.dom?n:O>0?e.nextSibling:e.previousSibling}return null}function EQ(t,e){let O=e.startContainer,i=e.startOffset,n=e.endContainer,r=e.endOffset,a=t.docView.domAtPos(t.state.selection.main.anchor,1);return Hn(a.node,a.offset,n,r)&&([O,i,n,r]=[n,r,O,i]),{anchorNode:O,anchorOffset:i,focusNode:n,focusOffset:r}}function _y(t,e){if(e.getComposedRanges){let n=e.getComposedRanges(t.root)[0];if(n)return EQ(t,n)}let O=null;function i(n){n.preventDefault(),n.stopImmediatePropagation(),O=n.getTargetRanges()[0]}return t.contentDOM.addEventListener("beforeinput",i,!0),t.dom.ownerDocument.execCommand("indent"),t.contentDOM.removeEventListener("beforeinput",i,!0),O?EQ(t,O):null}var cc=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let O=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let n=e.state.selection.main,{anchor:r,head:a}=n,o=this.toEditorPos(i.updateRangeStart),s=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:o,drifted:!1});let l=s-o>i.text.length;o==this.from&&rthis.to&&(s=r);let c=j$(e.state.sliceDoc(o,s),i.text,(l?n.from:n.to)-o,l?"end":null);if(!c){let f=X.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Fl(f,n)||e.dispatch({selection:f,userEvent:"select"});return}let h={from:c.from+o,to:c.toA+o,insert:K.of(i.text.slice(c.from,c.toB).split(` +`))};if((V.mac||V.android)&&h.from==a-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(h={from:o,to:s,insert:K.of([i.text.replace("."," ")])}),this.pendingContextChange=h,!e.state.readOnly){let f=this.to-this.from+(h.to-h.from+h.insert.length);Zc(e,h,X.single(this.toEditorPos(i.selectionStart,f),this.toEditorPos(i.selectionEnd,f)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),h.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(O.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(O.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let n=[],r=null;for(let a=this.toEditorPos(i.rangeStart),o=this.toEditorPos(i.rangeEnd);a{let n=[];for(let r of i.getTextFormats()){let a=r.underlineStyle,o=r.underlineThickness;if(!/none/i.test(a)&&!/none/i.test(o)){let s=this.toEditorPos(r.rangeStart),l=this.toEditorPos(r.rangeEnd);if(s{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)O.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{let n=lr(i.root);n&&n.rangeCount&&this.editContext.updateSelectionBounds(n.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let O=0,i=!1,n=this.pendingContextChange;return e.changes.iterChanges((r,a,o,s,l)=>{if(i)return;let c=l.length-(a-r);if(n&&a>=n.to)if(n.from==r&&n.to==a&&n.insert.eq(l)){n=this.pendingContextChange=null,O+=c,this.to+=c;return}else n=null,this.revertPending(e.state);if(r+=O,a+=O,a<=this.from)this.from+=c,this.to+=c;else if(rthis.to||this.to-this.from+l.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(a),l.toString()),this.to+=c}O+=c}),n&&!i&&this.revertPending(e.state),!i}update(e){let O=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(n=>!n.isUserEvent("input.type")&&n.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||O)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:O}=e.selection.main;this.from=Math.max(0,O-1e4),this.to=Math.min(e.doc.length,O+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let O=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(O.from),this.toContextPos(O.from+O.insert.length),e.doc.sliceString(O.from,O.to))}setSelection(e){let{main:O}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,O.anchor))),n=this.toContextPos(O.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=n)&&this.editContext.updateSelection(i,n)}rangeIsValid(e){let{head:O}=e.selection.main;return!(this.from>0&&O-this.from<500||this.to1e4*3)}toEditorPos(e,O=this.to-this.from){e=Math.min(e,O);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let O=this.composing;return O&&O.drifted?O.contextBase+(e-O.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},_=class t{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var O;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.clearAnnouncement=-1,this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(n=>n.forEach(r=>i(r,this)))||(n=>this.update(n)),this.dispatch=this.dispatch.bind(this),this._root=e.root||kk(e.parent)||document,this.viewState=new Na(this,e.state||$e.create(e)),e.scrollTo&&e.scrollTo.is(ka)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ki).map(n=>new Jn(n));for(let n of this.plugins)n.update(this);this.observer=new lc(this),this.inputState=new Hl(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Ea(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((O=document.fonts)===null||O===void 0)&&O.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let O=e.length==1&&e[0]instanceof Pe?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(O,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let O=!1,i=!1,n,r=this.state;for(let f of e){if(f.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=f.state}if(this.destroyed){this.viewState.state=r;return}let a=this.hasFocus,o=0,s=null;e.some(f=>f.annotation(I$))?(this.inputState.notifiedFocused=a,o=1):a!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=a,s=M$(r,a),s||(o=1));let l=this.observer.delayedAndroidKey,c=null;if(l?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(c=null)):this.observer.clear(),r.facet($e.phrases)!=this.state.facet($e.phrases))return this.setState(r);n=fr.create(this,r,e),n.flags|=o;let h=this.viewState.scrollTarget;try{this.updateState=2;for(let f of e){if(h&&(h=h.map(f.changes)),f.scrollIntoView){let{main:d}=f.state.selection,{x:Q,y:$}=this.state.facet(t.cursorScrollMargin);h=new Kn(d.empty?d:X.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",$,Q)}for(let d of f.effects)d.is(ka)&&(h=d.value.clip(this.state))}this.viewState.update(n,h),this.bidiCache=Ba.update(this.bidiCache,n.changes),n.empty||(this.updatePlugins(n),this.inputState.update(n)),O=this.docView.update(n),this.state.facet(Mn)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(O,e.some(f=>f.isUserEvent("select.pointer")))}finally{this.updateState=0}if(n.startState.facet(_a)!=n.state.facet(_a)&&(this.viewState.mustMeasureContent=!0),(O||i||h||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),O&&this.docViewUpdate(),!n.empty)for(let f of this.state.facet(Ul))try{f(n)}catch(d){qe(this.state,d,"update listener")}(s||c)&&Promise.resolve().then(()=>{s&&this.state==s.startState&&this.dispatch(s),c&&!W$(this,c)&&l.force&&nn(this.contentDOM,l.key,l.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let O=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new Na(this,e),this.plugins=e.facet(Ki).map(i=>new Jn(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new Ea(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}O&&this.focus(),this.requestMeasure()}updatePlugins(e){let O=e.startState.facet(Ki),i=e.state.facet(Ki);if(O!=i){let n=[];for(let r of i){let a=O.indexOf(r);if(a<0)n.push(new Jn(r));else{let o=this.plugins[a];o.mustUpdate=e,n.push(o)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=n,this.pluginMap.clear()}else for(let n of this.plugins)n.mustUpdate=e;for(let n=0;n-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let O=null,i=this.viewState.scrollParent,n=this.viewState.getScrollOffset(),{scrollAnchorPos:r,scrollAnchorHeight:a,scaleY:o}=this.viewState;Math.abs(n-this.viewState.scrollOffset)>1&&(a=-1),this.viewState.scrollAnchorHeight=-1;try{for(let s=0;;s++){if(a<0){if(c$(i||this.win))r=-1,a=this.viewState.heightMap.height/this.viewState.scaleY;else{let Q=this.viewState.scrollAnchorAt(n);r=Q.from,a=Q.top}o=this.viewState.scaleY}this.updateState=1;let l=this.viewState.measure();if(!l&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(s>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let c=[];l&4||([this.measureRequests,c]=[c,this.measureRequests]);let h=c.map(Q=>{try{return Q.read(this)}catch($){return qe(this.state,$),AQ}}),f=fr.create(this,this.state,[]),d=!1;f.flags|=l,O?O.flags|=l:O=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),d=this.docView.update(f),d&&this.docViewUpdate());for(let Q=0;Q1||$<-1)&&!(V.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){n=n+$,i?r<0?i.scrollTop=i.scrollHeight:i.scrollTop+=$:this.win.scrollBy(0,$),a=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(O&&!O.empty)for(let s of this.state.facet(Ul))s(O)}get themeClasses(){return oc+" "+(this.state.facet(ac)?B$:N$)+" "+this.state.facet(_a)}updateAttrs(){let e=LQ(this,_$,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),O={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(OO)?"true":"false",class:"cm-content",style:`${V.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(O["aria-readonly"]="true"),LQ(this,to,O);let i=this.observer.ignore(()=>{let n=bQ(this.contentDOM,this.contentAttrs,O),r=bQ(this.dom,this.editorAttrs,e);return n||r});return this.editorAttrs=e,this.contentAttrs=O,i}showAnnouncements(e){let O=!0;for(let i of e)for(let n of i.effects)if(n.is(t.announce)){O&&(this.announceDOM.textContent="",this.win.clearTimeout(this.clearAnnouncement),this.clearAnnouncement=this.win.setTimeout(()=>{this.announceDOM.textContent="\xA0"},200),O=!1);let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=n.value}}mountStyles(){this.styleModules=this.state.facet(Mn);let e=this.state.facet(t.cspNonce);Pt.mount(this.root,this.styleModules.concat(Ty).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let O=0;Oi.plugin==e)||null),O&&O.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,O,i){return bl(this,e,vQ(this,e,O,i))}moveByGroup(e,O){return bl(this,e,vQ(this,e,O,i=>Kk(this,e.head,i)))}visualLineSide(e,O){return O?X.cursor(e.to,1):X.cursor(e.from,-1)}moveToLineBoundary(e,O,i=!0){return Hk(this,e,O,i)}moveVertically(e,O,i){return bl(this,e,Jk(this,e,O,i))}domAtPos(e,O=1){return this.docView.domAtPos(e,O)}posAtDOM(e,O=0){return this.docView.posFromDOM(e,O)}posAtCoords(e,O=!0){this.readMeasured();let i=Ml(this,e,O);return i&&i.pos}posAndSideAtCoords(e,O=!0){return this.readMeasured(),Ml(this,e,O)}coordsAtPos(e,O=1){this.readMeasured();let i=this.state.doc.lineAt(e),n=this.bidiSpans(i),r=n[ht.find(n,e-i.from,-1,O)];return i.length&&(e==i.from&&O<0||e==i.to&&O>0)&&r.dir!=this.textDirectionAt(i.from)&&(e==i.to?(e=i.from+r.from,O=1):(e=i.from+r.to,O=-1)),this.docView.coordsAt(e,O,r.dir==ne.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(y$)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>Zy)return p$(e.length);let O=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==O&&(r.fresh||Q$(r.isolates,i=yQ(this,e))))return r.order;i||(i=yQ(this,e));let n=$$(e.text,O,i);return this.bidiCache.push(new Ba(e.from,e.to,O,i,!0,n)),n}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||V.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{l$(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.win.clearTimeout(this.clearAnnouncement),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,O={}){var i,n,r,a;return ka.of(new Kn(typeof e=="number"?X.cursor(e):e,(i=O.y)!==null&&i!==void 0?i:"nearest",(n=O.x)!==null&&n!==void 0?n:"nearest",(r=O.yMargin)!==null&&r!==void 0?r:5,(a=O.xMargin)!==null&&a!==void 0?a:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:O}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return ka.of(new Kn(X.cursor(i.from),"start","start",i.top-e,O,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return Oe.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return Oe.define(()=>({}),{eventObservers:e})}static theme(e,O){let i=Pt.newName(),n=[_a.of(i),Mn.of(sc(`.${i}`,e))];return O&&O.dark&&n.push(ac.of(!0)),n}static baseTheme(e){return Ie.lowest(Mn.of(sc("."+oc,e,F$)))}static findFromDOM(e){var O;let i=e.querySelector(".cm-content"),n=i&&Se.get(i)||Se.get(e);return((O=n?.root)===null||O===void 0?void 0:O.view)||null}};_.styleModule=Mn;_.inputHandler=x$;_.clipboardInputFilter=wc;_.clipboardOutputFilter=Tc;_.scrollHandler=T$;_.focusChangeEffect=k$;_.perLineTextDirection=y$;_.exceptionSink=b$;_.updateListener=Ul;_.editable=OO;_.mouseSelectionStyle=X$;_.dragMovesSelection=S$;_.clickAddsSelectionRange=P$;_.decorations=Oo;_.blockWrappers=Z$;_.outerDecorations=vc;_.atomicRanges=dr;_.bidiIsolatedRanges=R$;_.cursorScrollMargin=z.define({combine:t=>{let e=5,O=5;for(let i of t)typeof i=="number"?e=O=i:{x:e,y:O}=i;return{x:e,y:O}}});_.scrollMargins=Y$;_.darkTheme=ac;_.cspNonce=z.define({combine:t=>t.length?t[0]:""});_.contentAttributes=to;_.editorAttributes=_$;_.lineWrapping=_.contentAttributes.of({class:"cm-lineWrapping"});_.announce=A.define();var Zy=4096,AQ={},Ba=class t{constructor(e,O,i,n,r,a){this.from=e,this.to=O,this.dir=i,this.isolates=n,this.fresh=r,this.order=a}static update(e,O){if(O.empty&&!e.some(r=>r.fresh))return e;let i=[],n=e.length?e[e.length-1].dir:ne.LTR;for(let r=Math.max(0,e.length-10);r=0;n--){let r=i[n],a=typeof r=="function"?r(t):r;a&&xc(a,O)}return O}var Ry=V.mac?"mac":V.windows?"win":V.linux?"linux":"key";function Yy(t,e){let O=t.split(/-(?!$)/),i=O[O.length-1];i=="Space"&&(i=" ");let n,r,a,o;for(let s=0;si.concat(n),[]))),O}function Rc(t,e,O){return K$(H$(t.state),e,t,O)}var TO=null,qy=4e3;function Uy(t,e=Ry){let O=Object.create(null),i=Object.create(null),n=(a,o)=>{let s=i[a];if(s==null)i[a]=o;else if(s!=o)throw new Error("Key binding "+a+" is used both as a regular binding and as a multi-stroke prefix")},r=(a,o,s,l,c)=>{var h,f;let d=O[a]||(O[a]=Object.create(null)),Q=o.split(/ (?!$)/).map(m=>Yy(m,e));for(let m=1;m{let y=TO={view:S,prefix:P,scope:a};return setTimeout(()=>{TO==y&&(TO=null)},qy),!0}]})}let $=Q.join(" ");n($,!1);let p=d[$]||(d[$]={preventDefault:!1,stopPropagation:!1,run:((f=(h=d._any)===null||h===void 0?void 0:h.run)===null||f===void 0?void 0:f.slice())||[]});s&&p.run.push(s),l&&(p.preventDefault=!0),c&&(p.stopPropagation=!0)};for(let a of t){let o=a.scope?a.scope.split(" "):["editor"];if(a.any)for(let l of o){let c=O[l]||(O[l]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:h}=a;for(let f in c)c[f].run.push(d=>h(d,hc))}let s=a[e]||a.key;if(s)for(let l of o)r(l,s,a.run,a.preventDefault,a.stopPropagation),a.shift&&r(l,"Shift-"+s,a.shift,a.preventDefault,a.stopPropagation)}return O}var hc=null;function K$(t,e,O,i){hc=e;let n=mQ(e),r=ze(n,0),a=tt(r)==n.length&&n!=" ",o="",s=!1,l=!1,c=!1;TO&&TO.view==O&&TO.scope==i&&(o=TO.prefix+" ",C$.indexOf(e.keyCode)<0&&(l=!0,TO=null));let h=new Set,f=p=>{if(p){for(let m of p.run)if(!h.has(m)&&(h.add(m),m(O)))return p.stopPropagation&&(c=!0),!0;p.preventDefault&&(p.stopPropagation&&(c=!0),l=!0)}return!1},d=t[i],Q,$;return d&&(f(d[o+Za(n,e,!a)])?s=!0:a&&(e.altKey||e.metaKey||e.ctrlKey)&&!(V.windows&&e.ctrlKey&&e.altKey)&&!(V.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(Q=tO[e.keyCode])&&Q!=n?(f(d[o+Za(Q,e,!0)])||e.shiftKey&&($=Fi[e.keyCode])!=n&&$!=Q&&f(d[o+Za($,e,!1)]))&&(s=!0):a&&e.shiftKey&&f(d[o+Za(n,e,!0)])&&(s=!0),!s&&f(d._any)&&(s=!0)),l&&(s=!0),s&&c&&e.stopPropagation(),hc=null,s}var _O=class t{constructor(e,O,i,n,r){this.className=e,this.left=O,this.top=i,this.width=n,this.height=r}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,O){return O.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,O,i){if(i.empty){let n=e.coordsAtPos(i.head,i.assoc||1);if(!n)return[];let r=J$(e);return[new t(O,n.left-r.left,n.top-r.top,null,n.bottom-n.top)]}else return Vy(e,O,i)}};function J$(t){let e=t.scrollDOM.getBoundingClientRect();return{left:(t.textDirection==ne.LTR?e.left:e.right-t.scrollDOM.clientWidth*t.scaleX)-t.scrollDOM.scrollLeft*t.scaleX,top:e.top-t.scrollDOM.scrollTop*t.scaleY}}function MQ(t,e,O,i){let n=t.coordsAtPos(e,O*2);if(!n)return i;let r=t.dom.getBoundingClientRect(),a=(n.top+n.bottom)/2,o=t.posAtCoords({x:r.left+1,y:a}),s=t.posAtCoords({x:r.right-1,y:a});return o==null||s==null?i:{from:Math.max(i.from,Math.min(o,s)),to:Math.min(i.to,Math.max(o,s))}}function Vy(t,e,O){if(O.to<=t.viewport.from||O.from>=t.viewport.to)return[];let i=Math.max(O.from,t.viewport.from),n=Math.min(O.to,t.viewport.to),r=t.textDirection==ne.LTR,a=t.contentDOM,o=a.getBoundingClientRect(),s=J$(t),l=a.querySelector(".cm-line"),c=l&&window.getComputedStyle(l),h=o.left+(c?parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)):0),f=o.right-(c?parseInt(c.paddingRight):0),d=Il(t,i,1),Q=Il(t,n,-1),$=d.type==Ue.Text?d:null,p=Q.type==Ue.Text?Q:null;if($&&(t.lineWrapping||d.widgetLineBreaks)&&($=MQ(t,i,1,$)),p&&(t.lineWrapping||Q.widgetLineBreaks)&&(p=MQ(t,n,-1,p)),$&&p&&$.from==p.from&&$.to==p.to)return P(S(O.from,O.to,$));{let k=$?S(O.from,null,$):y(d,!1),T=p?S(null,O.to,p):y(Q,!0),v=[];return($||d).to<(p||Q).from-($&&p?1:0)||d.widgetLineBreaks>1&&k.bottom+t.defaultLineHeight/2R&&g.from=b)break;mt>x&&Z(Math.max(ye,x),k==null&&ye<=R,Math.min(mt,b),T==null&&mt>=w,ge.dir)}if(x=C.to+1,x>=b)break}return q.length==0&&Z(R,k==null,w,T==null,t.textDirection),{top:j,bottom:M,horizontal:q}}function y(k,T){let v=o.top+(T?k.top:k.bottom);return{top:v,bottom:v,horizontal:[]}}}function Wy(t,e){return t.constructor==e.constructor&&t.eq(e)}var fc=class{constructor(e,O){this.view=e,this.layer=O,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),O.above&&this.dom.classList.add("cm-layer-above"),O.class&&this.dom.classList.add(O.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),O.mount&&O.mount(this.dom,e)}update(e){e.startState.facet(qa)!=e.state.facet(qa)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let O=0,i=e.facet(qa);for(;O!Wy(O,this.drawn[i]))){let O=this.dom.firstChild,i=0;for(let n of e)n.update&&O&&n.constructor&&this.drawn[i].constructor&&n.update(O,this.drawn[i])?(O=O.nextSibling,i++):this.dom.insertBefore(n.draw(),O);for(;O;){let n=O.nextSibling;O.remove(),O=n}this.drawn=e,V.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},qa=z.define();function Yc(t){return[Oe.define(e=>new fc(e,t)),qa.of(t)]}var uc=!V.ios,hi=z.define({combine(t){return xe(t,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,O)=>Math.min(e,O),drawRangeCursor:(e,O)=>e||O})}});function jy(t={}){return[hi.of(t),Cy,Ey,Ly,w$.of(!0)]}function Gy(t){return t.facet(hi)}function ep(t){return t.startState.facet(hi)!=t.state.facet(hi)}var Cy=Yc({above:!0,markers(t){let{state:e}=t,O=e.facet(hi),i=[];for(let n of e.selection.ranges){let r=n==e.selection.main;if(n.empty||O.drawRangeCursor&&!(r&&V.ios&&O.iosSelectionHandles)){let a=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",o=n.empty?n:X.cursor(n.head,n.assoc);for(let s of _O.forRange(t,a,o))i.push(s)}}return i},update(t,e){t.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let O=ep(t);return O&&DQ(t.state,e),t.docChanged||t.selectionSet||O},mount(t,e){DQ(e.state,t)},class:"cm-cursorLayer"});function DQ(t,e){e.style.animationDuration=t.facet(hi).cursorBlinkRate+"ms"}var Ey=Yc({above:!1,markers(t){let e=[],{main:O,ranges:i}=t.state.selection;for(let n of i)if(!n.empty&&(uc||n!=O))for(let r of _O.forRange(t,"cm-selectionBackground",n))e.push(r);if(V.ios&&!O.empty&&t.state.facet(hi).iosSelectionHandles){for(let n of _O.forRange(t,"cm-selectionHandle cm-selectionHandle-start",X.cursor(O.from,1)))e.push(n);for(let n of _O.forRange(t,"cm-selectionHandle cm-selectionHandle-end",X.cursor(O.to,1)))e.push(n)}return e},update(t,e){return t.docChanged||t.selectionSet||t.viewportChanged||ep(t)},class:"cm-selectionLayer"}),Ay=V.gecko&&V.gecko_version==153?"#ffffff01":"transparent",Ly=Ie.highest(_.theme({".cm-line":{...uc?{"& ::selection, &::selection":{backgroundColor:`${Ay} !important`}}:{},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important",...uc?{"&::selection, & ::selection":{backgroundColor:"Highlight !important"}}:{}}}})),tp=A.define({map(t,e){return t==null?null:e.mapPos(t)}}),Nn=Qe.define({create(){return null},update(t,e){return t!=null&&(t=e.changes.mapPos(t)),e.effects.reduce((O,i)=>i.is(tp)?i.value:O,t)}}),Iy=Oe.fromClass(class{constructor(t){this.view=t,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(t){var e;let O=t.state.field(Nn);O==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(t.startState.field(Nn)!=O||t.docChanged||t.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:t}=this,e=t.state.field(Nn),O=e!=null&&t.coordsAtPos(e);if(!O)return null;let i=t.scrollDOM.getBoundingClientRect();return{left:O.left-i.left+t.scrollDOM.scrollLeft*t.scaleX,top:O.top-i.top+t.scrollDOM.scrollTop*t.scaleY,height:O.bottom-O.top}}drawCursor(t){if(this.cursor){let{scaleX:e,scaleY:O}=this.view;t?(this.cursor.style.left=t.left/e+"px",this.cursor.style.top=t.top/O+"px",this.cursor.style.height=t.height/O+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(t){this.view.state.field(Nn)!=t&&this.view.dispatch({effects:tp.of(t)})}},{eventObservers:{dragover(t){this.setDropPos(this.view.posAtCoords({x:t.clientX,y:t.clientY}))},dragleave(t){(t.target==this.view.contentDOM||!this.view.contentDOM.contains(t.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function My(){return[Nn,Iy]}function NQ(t,e,O,i,n){e.lastIndex=0;for(let r=t.iterRange(O,i),a=O,o;!r.next().done;a+=r.value.length)if(!r.lineBreak)for(;o=e.exec(r.value);)n(a+o.index,o)}function Dy(t,e){let O=t.visibleRanges;if(O.length==1&&O[0].from==t.viewport.from&&O[0].to==t.viewport.to)return O;let i=[];for(let{from:n,to:r}of O)n=Math.max(t.state.doc.lineAt(n).from,n-e),r=Math.min(t.state.doc.lineAt(r).to,r+e),i.length&&i[i.length-1].to>=n?i[i.length-1].to=r:i.push({from:n,to:r});return i}var cn=class{constructor(e){let{regexp:O,decoration:i,decorate:n,boundary:r,maxLength:a=1e3}=e;if(!O.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=O,n)this.addMatch=(o,s,l,c)=>n(c,l,l+o[0].length,o,s);else if(typeof i=="function")this.addMatch=(o,s,l,c)=>{let h=i(o,s,l);h&&c(l,l+o[0].length,h)};else if(i)this.addMatch=(o,s,l,c)=>c(l,l+o[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=r,this.maxLength=a}createDeco(e){let O=new Re,i=O.add.bind(O);for(let{from:n,to:r}of Dy(e,this.maxLength))NQ(e.state.doc,this.regexp,n,r,(a,o)=>this.addMatch(o,e,a,i));return O.finish()}updateDeco(e,O){let i=1e9,n=-1;return e.docChanged&&e.changes.iterChanges((r,a,o,s)=>{s>=e.view.viewport.from&&o<=e.view.viewport.to&&(i=Math.min(o,i),n=Math.max(s,n))}),e.viewportMoved||n-i>1e3?this.createDeco(e.view):n>-1?this.updateRange(e.view,O.map(e.changes),i,n):O}updateRange(e,O,i,n){for(let r of e.visibleRanges){let a=Math.max(r.from,i),o=Math.min(r.to,n);if(o>=a){let s=e.state.doc.lineAt(a),l=s.tos.from;a--)if(this.boundary.test(s.text[a-1-s.from])){c=a;break}for(;of.push(m.range($,p));if(s==l)for(this.regexp.lastIndex=c-s.from;(d=this.regexp.exec(s.text))&&d.indexthis.addMatch(p,e,$,Q));O=O.update({filterFrom:c,filterTo:h,filter:($,p)=>$h,add:f})}}return O}},dc=/x/.unicode!=null?"gu":"g",Ny=new RegExp(`[\0-\b +-\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,dc),By={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},kl=null;function Fy(){var t;if(kl==null&&typeof document<"u"&&document.body){let e=document.body.style;kl=((t=e.tabSize)!==null&&t!==void 0?t:e.MozTabSize)!=null}return kl||!1}var Ua=z.define({combine(t){let e=xe(t,{render:null,specialChars:Ny,addSpecialChars:null});return(e.replaceTabs=!Fy())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,dc)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,dc)),e}});function Hy(t={}){return[Ua.of(t),Ky()]}var BQ=null;function Ky(){return BQ||(BQ=Oe.fromClass(class{constructor(t){this.view=t,this.decorations=W.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(t.state.facet(Ua)),this.decorations=this.decorator.createDeco(t)}makeDecorator(t){return new cn({regexp:t.specialChars,decoration:(e,O,i)=>{let{doc:n}=O.state,r=ze(e[0],0);if(r==9){let a=n.lineAt(i),o=O.state.tabSize,s=Me(a.text,o,i-a.from);return W.replace({widget:new $c((o-s%o)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[r]||(this.decorationCache[r]=W.replace({widget:new Qc(t,r)}))},boundary:t.replaceTabs?void 0:/[^]/})}update(t){let e=t.state.facet(Ua);t.startState.facet(Ua)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(t.view)):this.decorations=this.decorator.updateDeco(t,this.decorations)}},{decorations:t=>t.decorations}))}var Jy="\u2022";function ew(t){return t>=32?Jy:t==10?"\u2424":String.fromCharCode(9216+t)}var Qc=class extends Ae{constructor(e,O){super(),this.options=e,this.code=O}eq(e){return e.code==this.code}toDOM(e){let O=ew(this.code),i=e.state.phrase("Control character")+" "+(By[this.code]||"0x"+this.code.toString(16)),n=this.options.render&&this.options.render(this.code,i,O);if(n)return n;let r=document.createElement("span");return r.textContent=O,r.title=i,r.setAttribute("aria-label",i),r.className="cm-specialChar",r}ignoreEvent(){return!1}},$c=class extends Ae{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}},FQ=Oe.fromClass(class{constructor(){this.height=1e3,this.attrs={style:"padding-bottom: 1000px"}}update(t){let{view:e}=t,O=e.viewState.editorHeight-e.defaultLineHeight-e.documentPadding.top-.5;O>=0&&O!=this.height&&(this.height=O,this.attrs={style:`padding-bottom: ${O}px`})}});function tw(){return[FQ,to.of(t=>{var e;return((e=t.plugin(FQ))===null||e===void 0?void 0:e.attrs)||null})]}function Ow(){return nw}var iw=W.line({class:"cm-activeLine"}),nw=Oe.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.docChanged||t.selectionSet)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=-1,O=[];for(let i of t.state.selection.ranges){let n=t.lineBlockAt(i.head);n.from>e&&(O.push(iw.range(n.from)),e=n.from)}return W.set(O)}},{decorations:t=>t.decorations}),pc=class extends Ae{constructor(e){super(),this.content=e}toDOM(e){let O=document.createElement("span");return O.className="cm-placeholder",O.style.pointerEvents="none",O.appendChild(typeof this.content=="string"?document.createTextNode(this.content):typeof this.content=="function"?this.content(e):this.content.cloneNode(!0)),O.setAttribute("aria-hidden","true"),O}coordsAt(e){let O=e.firstChild?Fn(e.firstChild):[];if(!O.length)return null;let i=window.getComputedStyle(e.parentNode),n=cr(O[0],i.direction!="rtl"),r=parseInt(i.lineHeight);return n.bottom-n.top>r*1.5?{left:n.left,right:n.right,top:n.top,bottom:n.top+r}:n}ignoreEvent(){return!1}};function rw(t){let e=Oe.fromClass(class{constructor(O){this.view=O,this.placeholder=t?W.set([W.widget({widget:new pc(t),side:1}).range(0)]):W.none}get decorations(){return this.view.state.doc.length?W.none:this.placeholder}},{decorations:O=>O.decorations});return typeof t=="string"?[e,_.contentAttributes.of({"aria-placeholder":t})]:e}var mc=2e3;function aw(t,e,O){let i=Math.min(e.line,O.line),n=Math.max(e.line,O.line),r=[];if(e.off>mc||O.off>mc||e.col<0||O.col<0){let a=Math.min(e.off,O.off),o=Math.max(e.off,O.off);for(let s=i;s<=n;s++){let l=t.doc.line(s);l.length<=o&&r.push(X.range(l.from+a,l.to+o))}}else{let a=Math.min(e.col,O.col),o=Math.max(e.col,O.col);for(let s=i;s<=n;s++){let l=t.doc.line(s),c=In(l.text,a,t.tabSize,!0);if(c<0)r.push(X.cursor(l.to));else{let h=In(l.text,o,t.tabSize);r.push(X.range(l.from+c,l.from+h))}}}return r}function ow(t,e){let O=t.coordsAtPos(t.viewport.from);return O?Math.round(Math.abs((O.left-e)/t.defaultCharacterWidth)):-1}function HQ(t,e){let O=t.posAtCoords({x:e.clientX,y:e.clientY},!1),i=t.state.doc.lineAt(O),n=O-i.from,r=n>mc?-1:n==i.length?ow(t,e.clientX):Me(i.text,t.state.tabSize,O-i.from);return{line:i.number,col:r,off:n}}function sw(t,e){let O=HQ(t,e),i=t.state.selection;return O?{update(n){if(n.docChanged){let r=n.changes.mapPos(n.startState.doc.line(O.line).from),a=n.state.doc.lineAt(r);O={line:a.number,col:O.col,off:Math.min(O.off,a.length)},i=i.map(n.changes)}},get(n,r,a){let o=HQ(t,n);if(!o)return i;let s=aw(t.state,O,o);return s.length?a?X.create(s.concat(i.ranges)):X.create(s):i}}:null}function lw(t){let e=t?.eventFilter||(O=>O.altKey&&O.button==0);return _.mouseSelectionStyle.of((O,i)=>e(i)?sw(O,i):null)}var cw={Alt:[18,t=>!!t.altKey],Control:[17,t=>!!t.ctrlKey],Shift:[16,t=>!!t.shiftKey],Meta:[91,t=>!!t.metaKey]},hw={style:"cursor: crosshair"};function fw(t={}){let[e,O]=cw[t.key||"Alt"],i=Oe.fromClass(class{constructor(n){this.view=n,this.isDown=!1}set(n){this.isDown!=n&&(this.isDown=n,this.view.update([]))}},{eventObservers:{keydown(n){this.set(n.keyCode==e||O(n))},keyup(n){(n.keyCode==e||!O(n))&&this.set(!1)},mousemove(n){this.set(O(n))}}});return[i,_.contentAttributes.of(n=>{var r;return!((r=n.plugin(i))===null||r===void 0)&&r.isDown?hw:null})]}var Ra="-10000px",Fa=class{constructor(e,O,i,n){this.facet=O,this.createTooltipView=i,this.removeTooltipView=n,this.input=e.state.facet(O),this.tooltips=this.input.filter(a=>a);let r=null;this.tooltipViews=this.tooltips.map(a=>r=i(a,r))}update(e,O){var i;let n=e.state.facet(this.facet),r=n.filter(s=>s);if(n===this.input){for(let s of this.tooltipViews)s.update&&s.update(e);return!1}let a=[],o=O?[]:null;for(let s=0;sO[l]=s),O.length=o.length),this.input=n,this.tooltips=r,this.tooltipViews=a,!0}};function uw(t={}){return Va.of(t)}function Op(t){let e=t.dom.ownerDocument.documentElement,O=e.clientWidth,i=getComputedStyle(e);if(!/stable/.test(i.scrollbarGutter||""))return{left:0,right:O};let n=e.getBoundingClientRect(),r=t.win.scrollX;return{left:Math.max(0,n.left+r-parseFloat(i.marginLeft)),right:Math.min(O,n.right+r+parseFloat(i.marginRight))}}function dw(t){let{left:e,right:O}=Op(t);return{top:0,left:e,right:O,bottom:t.dom.ownerDocument.documentElement.clientHeight}}var Va=z.define({combine:t=>{var e,O,i;return{position:V.ios?"absolute":((e=t.find(n=>n.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((O=t.find(n=>n.parent))===null||O===void 0?void 0:O.parent)||null,tooltipSpace:((i=t.find(n=>n.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||dw}}}),KQ=new WeakMap,no=Oe.fromClass(class{constructor(t){this.view=t,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=t.state.facet(Va);this.position=e.position,this.parent=e.parent,this.classes=t.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new Fa(t,hn,(O,i)=>this.createTooltip(O,i),O=>{this.resizeObserver&&this.resizeObserver.unobserve(O.dom),O.dom.remove()}),this.above=this.manager.tooltips.map(O=>!!O.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(O=>{Date.now()>this.lastTransaction-50&&O.length>0&&O[O.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),t.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let t of this.manager.tooltipViews)this.intersectionObserver.observe(t.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(t){t.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(t,this.above);e&&this.observeIntersection();let O=e||t.geometryChanged,i=t.state.facet(Va);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let n of this.manager.tooltipViews)n.dom.style.position=this.position;O=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let n of this.manager.tooltipViews)this.container.appendChild(n.dom);O=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);O&&this.maybeMeasure()}createTooltip(t,e){let O=t.create(this.view),i=e?e.dom:null;if(O.dom.classList.add("cm-tooltip"),t.arrow&&!O.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let n=document.createElement("div");n.className="cm-tooltip-arrow",O.dom.appendChild(n)}return O.dom.style.position=this.position,O.dom.style.top=Ra,O.dom.style.left="0px",this.container.insertBefore(O.dom,i),O.mount&&O.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(O.dom),O}destroy(){var t,e,O;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(t=i.destroy)===null||t===void 0||t.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(O=this.intersectionObserver)===null||O===void 0||O.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let t=1,e=1,O=!1,i=0;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:a}=this.manager.tooltipViews[0];if(V.safari){let o=a.getBoundingClientRect();O=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else O=!!a.offsetParent&&a.offsetParent!=this.container.ownerDocument.body}if(O||this.position=="absolute")if(this.parent){let a=this.parent.getBoundingClientRect();a.width&&a.height&&(t=a.width/this.parent.offsetWidth,e=a.height/this.parent.offsetHeight)}else({scaleX:t,scaleY:e}=this.view.viewState);else i=Op(this.view).left;let n=this.view.scrollDOM.getBoundingClientRect(),r=_c(this.view);return{visible:{left:n.left+r.left,top:n.top+r.top,right:n.right-r.right,bottom:n.bottom-r.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((a,o)=>{let s=this.manager.tooltipViews[o];return s.getCoords?s.getCoords(a.pos):this.view.coordsAtPos(a.pos)}),size:this.manager.tooltipViews.map(({dom:a})=>a.getBoundingClientRect()),space:this.view.state.facet(Va).tooltipSpace(this.view),scaleX:t,scaleY:e,makeAbsolute:O,fixedLeft:i}}writeMeasure(t){var e;if(t.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let o of this.manager.tooltipViews)o.dom.style.position="absolute"}let{visible:O,space:i,scaleX:n,scaleY:r}=t,a=[];for(let o=0;o=Math.min(O.bottom,i.bottom)||h.rightMath.min(O.right,i.right)+.1)){c.style.top=Ra;continue}let d=s.arrow?l.dom.querySelector(".cm-tooltip-arrow"):null,Q=d?7:0,$=f.right-f.left,p=(e=KQ.get(l))!==null&&e!==void 0?e:f.bottom-f.top,m=l.offset||$w,P=this.view.textDirection==ne.LTR,S=f.width>i.right-i.left?P?i.left:i.right-f.width:P?Math.max(i.left,Math.min(h.left-(d?14:0)+m.x,i.right-$)):Math.min(Math.max(i.left,h.left-$+(d?14:0)-m.x),i.right-$),y=this.above[o];!s.strictSide&&(y?h.top-p-Q-m.yi.bottom)&&y==i.bottom-h.bottom>h.top-i.top&&(y=this.above[o]=!y);let k=(y?h.top-i.top:i.bottom-h.bottom)-Q;if(kS&&j.topT&&(T=y?j.top-p-2-Q:j.bottom+Q+2);if(this.position=="absolute"?(c.style.top=(T-t.parent.top)/r+"px",JQ(c,(S-t.parent.left)/n)):(c.style.top=T/r+"px",JQ(c,(S-t.fixedLeft)/n)),d){let j=h.left+(P?m.x:-m.x)-(S+14-7);d.style.left=j/n+"px"}l.overlap!==!0&&a.push({left:S,top:T,right:v,bottom:T+p}),c.classList.toggle("cm-tooltip-above",y),c.classList.toggle("cm-tooltip-below",!y),l.positioned&&l.positioned(t.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let t of this.manager.tooltipViews)t.dom.style.top=Ra}},{eventObservers:{scroll(){this.maybeMeasure()}}});function JQ(t,e){let O=parseInt(t.style.left,10);(isNaN(O)||Math.abs(e-O)>1)&&(t.style.left=e+"px")}var Qw=_.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),$w={x:0,y:0},hn=z.define({enables:[no,Qw]}),ur=z.define({combine:t=>t.reduce((e,O)=>e.concat(O),[])}),Ha=class t{static create(e){return new t(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new Fa(e,ur,(O,i)=>this.createHostedView(O,i),O=>O.dom.remove())}createHostedView(e,O){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,O?O.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let O of this.manager.tooltipViews)O.mount&&O.mount(e);this.mounted=!0}positioned(e){for(let O of this.manager.tooltipViews)O.positioned&&O.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let O of this.manager.tooltipViews)(e=O.destroy)===null||e===void 0||e.call(O)}passProp(e){let O;for(let i of this.manager.tooltipViews){let n=i[e];if(n!==void 0){if(O===void 0)O=n;else if(O!==n)return}}return O}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}},pw=hn.compute([ur],t=>{let e=t.facet(ur);return e.length===0?null:{pos:Math.min(...e.map(O=>O.pos)),end:Math.max(...e.map(O=>{var i;return(i=O.end)!==null&&i!==void 0?i:O.pos})),create:Ha.create,above:e[0].above,arrow:e.some(O=>O.arrow)}}),ip=z.define(),gc=class{constructor(e,O,i,n,r,a){this.view=e,this.source=O,this.field=i,this.locked=n,this.setHover=r,this.hoverTime=a,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(e){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;ea.bottom||O.xa.right+e.defaultCharacterWidth)return;let o=e.bidiSpans(e.state.doc.lineAt(n)).find(l=>l.from<=n&&l.to>=n),s=o&&o.dir==ne.RTL?-1:1;r=O.x{if(o&&!(Array.isArray(o)&&!o.length)){let s=Array.isArray(o)?o:[o];n&&this.locked.set(s,n),e.dispatch({effects:this.setHover.of(s)})}};if(r&&"then"in r){let o=this.pending={pos:O};r.then(s=>{this.pending==o&&(this.pending=null,a(s))},s=>qe(e.state,s,"hover tooltip"))}else a(r)}get tooltip(){let e=this.view.plugin(no),O=e?e.manager.tooltips.findIndex(i=>i.create==Ha.create):-1;return O>-1?e.manager.tooltipViews[O]:null}mousemove(e){var O,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:n,tooltip:r}=this;if(n.length&&!this.locked.has(n)&&r&&!mw(r.dom,e)||this.pending){let{pos:a}=n[0]||this.pending,o=(i=(O=n[0])===null||O===void 0?void 0:O.end)!==null&&i!==void 0?i:a;(a==o?this.view.posAtCoords(this.lastMove)!=a:!gw(this.view,a,o,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:O}=this;if(O.length&&!this.locked.has(O)){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let O=i=>{e.removeEventListener("mouseleave",O);let{active:n}=this;n.length&&!this.locked.has(n)&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",O)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}},Ya=4;function mw(t,e){let{left:O,right:i,top:n,bottom:r}=t.getBoundingClientRect(),a;if(a=t.querySelector(".cm-tooltip-arrow")){let o=a.getBoundingClientRect();n=Math.min(o.top,n),r=Math.max(o.bottom,r)}return e.clientX>=O-Ya&&e.clientX<=i+Ya&&e.clientY>=n-Ya&&e.clientY<=r+Ya}function gw(t,e,O,i,n,r){let a=t.scrollDOM.getBoundingClientRect(),o=t.documentTop+t.documentPadding.top+t.contentHeight;if(a.left>i||a.rightn||Math.min(a.bottom,o)=e&&s<=O}function np(t,e={}){let O=A.define(),i=new WeakMap,n=Qe.define({create(){return[]},update(a,o){let s=i.get(a);if(a.length&&(e.hideOnChange&&(o.docChanged||o.selection)?a=[]:s&&s(o)?a=[]:e.hideOn&&(a=a.filter(l=>!e.hideOn(o,l)))),o.docChanged&&a.length){let l=[];for(let c of a){let h=o.changes.mapPos(c.pos,-1,Te.TrackDel);if(h!=null){let f=Object.assign(Object.create(null),c);f.pos=h,f.end!=null&&(f.end=o.changes.mapPos(f.end)),l.push(f)}}a=l}for(let l of o.effects)l.is(O)&&(a=l.value,s=void 0),(l.is(zc)&&!l.value||l.value==n)&&(a=[]);return a.length&&s&&i.set(a,s),a},provide:a=>ur.from(a)}),r=Oe.define(a=>new gc(a,t,n,i,O,e.hoverTime||300));return{active:n,extension:[n,r,ip.of(r),pw]}}function rp(t,e,O,i={}){var n;let r=t.state.facet(ip).map(a=>t.plugin(a)).filter(a=>!!a);if(i.tooltip&&i.tooltip.active){let a=r.find(o=>o.field==i.tooltip.active);a&&(r=[a])}for(let a of r)a.activateHover(t,e,O,(n=i.until)!==null&&n!==void 0?n:(()=>!1))}function ro(t,e){let O=t.plugin(no);if(!O)return null;let i=O.manager.tooltips.indexOf(e);return i<0?null:O.manager.tooltipViews[i]}function Pw(t){return t.facet(ur).some(e=>e)}var zc=A.define(),Sw=zc.of(null);function Xw(t){return zc.of(t.active)}function bw(t){let e=t.plugin(no);e&&e.maybeMeasure()}var Pc=z.define({combine(t){let e,O;for(let i of t)e=e||i.topContainer,O=O||i.bottomContainer;return{topContainer:e,bottomContainer:O}}});function xw(t){return t?[Pc.of(t)]:[]}function fn(t,e){let O=t.plugin(ap),i=O?O.specs.indexOf(e):-1;return i>-1?O.panels[i]:null}var ap=Oe.fromClass(class{constructor(t){this.input=t.state.facet(YO),this.specs=this.input.filter(O=>O),this.panels=this.specs.map(O=>O(t));let e=t.state.facet(Pc);this.top=new en(t,!0,e.topContainer),this.bottom=new en(t,!1,e.bottomContainer),this.top.sync(this.panels.filter(O=>O.top)),this.bottom.sync(this.panels.filter(O=>!O.top));for(let O of this.panels)O.dom.classList.add("cm-panel"),O.mount&&O.mount()}update(t){let e=t.state.facet(Pc);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new en(t.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new en(t.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let O=t.state.facet(YO);if(O!=this.input){let i=O.filter(s=>s),n=[],r=[],a=[],o=[];for(let s of i){let l=this.specs.indexOf(s),c;l<0?(c=s(t.view),o.push(c)):(c=this.panels[l],c.update&&c.update(t)),n.push(c),(c.top?r:a).push(c)}this.specs=i,this.panels=n,this.top.sync(r),this.bottom.sync(a);for(let s of o)s.dom.classList.add("cm-panel"),s.mount&&s.mount()}else for(let i of this.panels)i.update&&i.update(t)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:t=>_.scrollMargins.of(e=>{let O=e.plugin(t);return O&&{top:O.top.scrollMargin(),bottom:O.bottom.scrollMargin()}})}),en=class{constructor(e,O,i){this.view=e,this.top=O,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let O of this.panels)O.destroy&&e.indexOf(O)<0&&O.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom";let O=this.container||this.view.dom;O.insertBefore(this.dom,this.top?O.firstChild:null)}let e=this.dom.firstChild;for(let O of this.panels)if(O.dom.parentNode==this.dom){for(;e!=O.dom;)e=e$(e);e=e.nextSibling}else this.dom.insertBefore(O.dom,e);for(;e;)e=e$(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}};function e$(t){let e=t.nextSibling;return t.remove(),e}var YO=z.define({enables:ap});function qc(t,e){let O,i=new Promise(a=>O=a),n=a=>kw(a,e,O);t.state.field(Wa,!1)?t.dispatch({effects:op.of(n)}):t.dispatch({effects:A.appendConfig.of(Wa.init(()=>[n]))});let r=sp.of(n);return{close:r,result:i.then(a=>((t.win.queueMicrotask||(s=>t.win.setTimeout(s,10)))(()=>{t.state.field(Wa).indexOf(n)>-1&&t.dispatch({effects:r})}),a))}}function Uc(t,e){let O=t.state.field(Wa,!1)||[];for(let i of O){let n=fn(t,i);if(n&&n.dom.classList.contains(e))return n}return null}var Wa=Qe.define({create(){return[]},update(t,e){for(let O of e.effects)O.is(op)?t=[O.value].concat(t):O.is(sp)&&(t=t.filter(i=>i!=O.value));return t},provide:t=>YO.computeN([t],e=>e.field(t))}),op=A.define(),sp=A.define();function kw(t,e,O){let i=e.content?e.content(t,()=>a(null)):null;if(!i){if(i=J("form"),e.input){let o=J("input",e.input);/^(text|password|number|email|tel|url)$/.test(o.type)&&o.classList.add("cm-textfield"),o.name||(o.name="input"),i.appendChild(J("label",(e.label||"")+": ",o))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(J("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let n=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let o=0;o{l.keyCode==27?(l.preventDefault(),a(null)):l.keyCode==13&&(l.preventDefault(),a(s))}),s.addEventListener("submit",l=>{l.preventDefault(),a(s)})}let r=J("div",i,J("button",{onclick:()=>a(null),"aria-label":t.state.phrase("close"),class:"cm-dialog-close",type:"button"},["\xD7"]));e.class&&(r.className=e.class),r.classList.add("cm-dialog");function a(o){r.contains(r.ownerDocument.activeElement)&&t.focus(),O(o)}return{dom:r,top:e.top,mount:()=>{if(e.focus){let o;typeof e.focus=="string"?o=i.querySelector(e.focus):o=i.querySelector("input")||i.querySelector("button"),o&&"select"in o?o.select():o&&"focus"in o&&o.focus()}}}}var nt=class extends ct{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};nt.prototype.elementClass="";nt.prototype.toDOM=void 0;nt.prototype.mapMode=Te.TrackBefore;nt.prototype.startSide=nt.prototype.endSide=-1;nt.prototype.point=!0;var ir=z.define(),lp=z.define(),yw={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>te.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},nr=z.define();function ao(t){return[Vc(),nr.of({...yw,...t})]}var Sc=z.define({combine:t=>t.some(e=>e)});function Vc(t){let e=[ww];return t&&t.fixed===!1&&e.push(Sc.of(!0)),e}var ww=Oe.fromClass(class{constructor(t){this.view=t,this.domAfter=null,this.prevViewport=t.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=t.state.facet(nr).map(e=>new Ka(t,e)),this.fixed=!t.state.facet(Sc);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),t.scrollDOM.insertBefore(this.dom,t.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(t){if(this.updateGutters(t)){let e=this.prevViewport,O=t.view.viewport,i=Math.min(e.to,O.to)-Math.max(e.from,O.from);this.syncGutters(i<(O.to-O.from)*.8)}if(t.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(Sc)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=t.view.viewport}syncGutters(t){let e=this.dom.nextSibling;t&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let O=te.iter(this.view.state.facet(ir),this.view.viewport.from),i=[],n=this.gutters.map(r=>new bc(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let a=!0;for(let o of r.type)if(o.type==Ue.Text&&a){Xc(O,i,o.from);for(let s of n)s.line(this.view,o,i);a=!1}else if(o.widget)for(let s of n)s.widget(this.view,o)}else if(r.type==Ue.Text){Xc(O,i,r.from);for(let a of n)a.line(this.view,r,i)}else if(r.widget)for(let a of n)a.widget(this.view,r);for(let r of n)r.finish();t&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(t){let e=t.startState.facet(nr),O=t.state.facet(nr),i=t.docChanged||t.heightChanged||t.viewportChanged||!te.eq(t.startState.facet(ir),t.state.facet(ir),t.view.viewport.from,t.view.viewport.to);if(e==O)for(let n of this.gutters)n.update(t)&&(i=!0);else{i=!0;let n=[];for(let r of O){let a=e.indexOf(r);a<0?n.push(new Ka(this.view,r)):(this.gutters[a].update(t),n.push(this.gutters[a]))}for(let r of this.gutters)r.dom.remove(),n.indexOf(r)<0&&r.destroy();for(let r of n)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=n}return i}destroy(){for(let t of this.gutters)t.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:t=>_.scrollMargins.of(e=>{let O=e.plugin(t);if(!O||O.gutters.length==0||!O.fixed)return null;let i=O.dom.offsetWidth*e.scaleX,n=O.domAfter?O.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==ne.LTR?{left:i,right:n}:{right:i,left:n}})});function t$(t){return Array.isArray(t)?t:[t]}function Xc(t,e,O){for(;t.value&&t.from<=O;)t.from==O&&e.push(t.value),t.next()}var bc=class{constructor(e,O,i){this.gutter=e,this.height=i,this.i=0,this.cursor=te.iter(e.markers,O.from)}addElement(e,O,i){let{gutter:n}=this,r=(O.top-this.height)/e.scaleY,a=O.height/e.scaleY;if(this.i==n.elements.length){let o=new Ja(e,a,r,i);n.elements.push(o),n.dom.appendChild(o.dom)}else n.elements[this.i].update(e,a,r,i);this.height=O.bottom,this.i++}line(e,O,i){let n=[];Xc(this.cursor,n,O.from),i.length&&(n=n.concat(i));let r=this.gutter.config.lineMarker(e,O,n);r&&n.unshift(r);let a=this.gutter;n.length==0&&!a.config.renderEmptyElements||this.addElement(e,O,n)}widget(e,O){let i=this.gutter.config.widgetMarker(e,O.widget,O),n=i?[i]:null;for(let r of e.state.facet(lp)){let a=r(e,O.widget,O);a&&(n||(n=[])).push(a)}n&&this.addElement(e,O,n)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let O=e.elements.pop();e.dom.removeChild(O.dom),O.destroy()}}},Ka=class{constructor(e,O){this.view=e,this.config=O,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in O.domEventHandlers)this.dom.addEventListener(i,n=>{let r=n.target,a;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let s=r.getBoundingClientRect();a=(s.top+s.bottom)/2}else a=n.clientY;let o=e.lineBlockAtHeight(a-e.documentTop);O.domEventHandlers[i](e,o,n)&&n.preventDefault()});this.markers=t$(O.markers(e)),O.initialSpacer&&(this.spacer=new Ja(e,0,0,[O.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let O=this.markers;if(this.markers=t$(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let n=this.config.updateSpacer(this.spacer.markers[0],e);n!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[n])}let i=e.view.viewport;return!te.eq(this.markers,O,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},Ja=class{constructor(e,O,i,n){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,O,i,n)}update(e,O,i,n){this.height!=O&&(this.height=O,this.dom.style.height=O+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),Tw(this.markers,n)||this.setMarkers(e,n)}setMarkers(e,O){let i="cm-gutterElement",n=this.dom.firstChild;for(let r=0,a=0;;){let o=a,s=rr(o,s,l)||a(o,s,l):a}return i}})}}),rr=class extends nt{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function yl(t,e){return t.state.facet(tn).formatNumber(e,t.state)}var vw=nr.compute([tn],t=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(cp)},lineMarker(e,O,i){return i.some(n=>n.toDOM)?null:new rr(yl(e,e.state.doc.lineAt(O.from).number))},widgetMarker:(e,O,i)=>{for(let n of e.state.facet(hp)){let r=n(e,O,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(tn)!=e.state.facet(tn),initialSpacer(e){return new rr(yl(e,O$(e.state.doc.lines)))},updateSpacer(e,O){let i=yl(O.view,O$(O.view.state.doc.lines));return i==e.number?e:new rr(i)},domEventHandlers:t.facet(tn).domEventHandlers,side:"before"}));function _w(t={}){return[tn.of(t),Vc(),vw]}function O$(t){let e=9;for(;e{let e=[],O=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.head).from;n>O&&(O=n,e.push(Zw.range(n)))}return te.of(e)});function Yw(){return Rw}function fp(t){return Oe.define(e=>({decorations:t.createDeco(e),update(O){this.decorations=t.updateDeco(O,this.decorations)}}),{decorations:e=>e.decorations})}var zw=W.mark({class:"cm-highlightTab"}),qw=W.mark({class:"cm-highlightSpace"}),Uw=fp(new cn({regexp:/\t| /g,decoration:t=>t[0]==" "?zw:qw,boundary:/\S/}));function Vw(){return Uw}var Ww=fp(new cn({regexp:/\s+$/g,decoration:W.mark({class:"cm-trailingSpace"})}));function jw(){return Ww}var Gw={HeightMap:it,HeightOracle:La,MeasuredHeights:Ia,QueryType:pe,ChangedRange:xt,computeOrder:$$,moveVisually:g$,clearHeightChangeFlag:ec,getHeightChangeFlag:()=>ci};var bg={};ei(bg,{addCursorAbove:()=>eg,addCursorBelow:()=>tg,blockComment:()=>DT,blockUncomment:()=>NT,canRedoSelection:()=>Ov,canUndoSelection:()=>tv,copyLineDown:()=>Qg,copyLineUp:()=>dg,cursorCharBackward:()=>hv,cursorCharBackwardLogical:()=>uv,cursorCharForward:()=>cv,cursorCharForwardLogical:()=>fv,cursorCharLeft:()=>Zh,cursorCharRight:()=>Rh,cursorDocEnd:()=>xh,cursorDocStart:()=>bh,cursorGroupBackward:()=>Qv,cursorGroupForward:()=>dv,cursorGroupForwardWin:()=>$v,cursorGroupLeft:()=>Pm,cursorGroupRight:()=>Sm,cursorLineBoundaryBackward:()=>_m,cursorLineBoundaryForward:()=>vm,cursorLineBoundaryLeft:()=>Zm,cursorLineBoundaryRight:()=>Rm,cursorLineDown:()=>Uh,cursorLineEnd:()=>zm,cursorLineStart:()=>Ym,cursorLineUp:()=>qh,cursorMatchingBracket:()=>Um,cursorPageDown:()=>yo,cursorPageUp:()=>Ph,cursorSubwordBackward:()=>mv,cursorSubwordForward:()=>pv,cursorSyntaxLeft:()=>xm,cursorSyntaxRight:()=>km,defaultKeymap:()=>jv,deleteCharBackward:()=>wo,deleteCharBackwardStrict:()=>_v,deleteCharForward:()=>Eh,deleteGroupBackward:()=>Ah,deleteGroupForward:()=>ng,deleteGroupForwardWin:()=>Zv,deleteLine:()=>$g,deleteLineBoundaryBackward:()=>ag,deleteLineBoundaryForward:()=>og,deleteToLineEnd:()=>rg,deleteToLineStart:()=>Rv,deleteTrailingWhitespace:()=>Yv,emacsStyleKeymap:()=>Sg,history:()=>HT,historyField:()=>KT,historyKeymap:()=>lv,indentLess:()=>Ih,indentMore:()=>Uo,indentSelection:()=>gg,indentWithTab:()=>Gv,insertBlankLine:()=>pg,insertNewline:()=>zv,insertNewlineAndIndent:()=>wh,insertNewlineKeepIndent:()=>qv,insertTab:()=>Wv,invertedEffects:()=>hm,isolateHistory:()=>cm,lineComment:()=>IT,lineUncomment:()=>MT,moveLineDown:()=>fg,moveLineUp:()=>hg,redo:()=>xo,redoDepth:()=>ev,redoSelection:()=>dm,selectAll:()=>Fm,selectCharBackward:()=>Xv,selectCharBackwardLogical:()=>xv,selectCharForward:()=>Sv,selectCharForwardLogical:()=>bv,selectCharLeft:()=>Vh,selectCharRight:()=>Wh,selectDocEnd:()=>yh,selectDocStart:()=>kh,selectGroupBackward:()=>yv,selectGroupForward:()=>kv,selectGroupForwardWin:()=>wv,selectGroupLeft:()=>Vm,selectGroupRight:()=>Wm,selectLine:()=>Hm,selectLineBoundaryBackward:()=>Im,selectLineBoundaryForward:()=>Lm,selectLineBoundaryLeft:()=>Mm,selectLineBoundaryRight:()=>Dm,selectLineDown:()=>Gh,selectLineEnd:()=>Bm,selectLineStart:()=>Nm,selectLineUp:()=>jh,selectMatchingBracket:()=>Pv,selectPageDown:()=>Xh,selectPageUp:()=>Sh,selectParentSyntax:()=>Km,selectSubwordBackward:()=>vv,selectSubwordForward:()=>Tv,selectSyntaxLeft:()=>Gm,selectSyntaxRight:()=>Cm,simplifySelection:()=>Og,splitLine:()=>sg,standardKeymap:()=>Xg,temporarilySetTabFocusMode:()=>Vv,toggleBlockComment:()=>sm,toggleBlockCommentByLine:()=>lm,toggleComment:()=>am,toggleLineComment:()=>om,toggleTabFocusMode:()=>Pg,transposeChars:()=>lg,undo:()=>_h,undoDepth:()=>JT,undoSelection:()=>um});var nm={};ei(nm,{DocInput:()=>mo,HighlightStyle:()=>Xr,IndentContext:()=>oO,LRLanguage:()=>fe,Language:()=>Ze,LanguageDescription:()=>dn,LanguageSupport:()=>oe,ParseContext:()=>WO,StreamLanguage:()=>oh,StringStream:()=>pi,TreeIndentContext:()=>go,bidiIsolates:()=>CT,bracketMatching:()=>ZT,bracketMatchingHandle:()=>pn,codeFolding:()=>dh,continuedIndent:()=>ue,defaultHighlightStyle:()=>xT,defineLanguageFacet:()=>mi,delimitedIndent:()=>We,ensureSyntaxTree:()=>Up,flatIndent:()=>cO,foldAll:()=>Ip,foldCode:()=>Ap,foldEffect:()=>GO,foldGutter:()=>PT,foldInside:()=>we,foldKeymap:()=>pT,foldNodeProp:()=>le,foldService:()=>Xo,foldState:()=>sO,foldable:()=>Qn,foldedRanges:()=>hh,forceParsing:()=>tT,getIndentUnit:()=>wt,getIndentation:()=>$n,highlightingFor:()=>Qh,indentNodeProp:()=>se,indentOnInput:()=>hT,indentRange:()=>iT,indentService:()=>jp,indentString:()=>jO,indentUnit:()=>lO,language:()=>Yt,languageDataProp:()=>Nt,matchBrackets:()=>yt,sublanguageProp:()=>xr,syntaxHighlighting:()=>XT,syntaxParserRunning:()=>OT,syntaxTree:()=>N,syntaxTreeAvailable:()=>eT,toggleFold:()=>$T,unfoldAll:()=>Mp,unfoldCode:()=>Lp,unfoldEffect:()=>hO});var Cw=0,rt=class{constructor(e,O){this.from=e,this.to=O}},L=class{constructor(e={}){this.id=Cw++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=ke.match(e)),O=>{let i=e(O);return i===void 0?null:[this,i]}}};L.closedBy=new L({deserialize:t=>t.split(" ")});L.openedBy=new L({deserialize:t=>t.split(" ")});L.group=new L({deserialize:t=>t.split(" ")});L.isolate=new L({deserialize:t=>{if(t&&t!="rtl"&&t!="ltr"&&t!="auto")throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}});L.contextHash=new L({perNode:!0});L.lookAhead=new L({perNode:!0});L.mounted=new L({perNode:!0});var zO=class{constructor(e,O,i,n=!1){this.tree=e,this.overlay=O,this.parser=i,this.bracketed=n}static get(e){return e&&e.props&&e.props[L.mounted.id]}},Ew=Object.create(null),ke=class t{constructor(e,O,i,n=0){this.name=e,this.props=O,this.id=i,this.flags=n}static define(e){let O=e.props&&e.props.length?Object.create(null):Ew,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),n=new t(e.name||"",O,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(n)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");O[r[0].id]=r[1]}}return n}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let O=this.prop(L.group);return O?O.indexOf(e)>-1:!1}return this.id==e}static match(e){let O=Object.create(null);for(let i in e)for(let n of i.split(" "))O[n]=e[i];return i=>{for(let n=i.prop(L.group),r=-1;r<(n?n.length:0);r++){let a=O[r<0?i.name:n[r]];if(a)return a}}}};ke.none=new ke("",Object.create(null),0,8);var rO=class t{constructor(e){this.types=e;for(let O=0;O0;for(let s=this.cursor(a|F.IncludeAnonymous);;){let l=!1;if(s.from<=r&&s.to>=n&&(!o&&s.type.isAnonymous||O(s)!==!1)){if(s.firstChild())continue;l=!0}for(;l&&i&&(o||!s.type.isAnonymous)&&i(s),!s.nextSibling();){if(!s.parent())return;l=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let O in this.props)e.push([+O,this.props[O]]);return e}balance(e={}){return this.children.length<=8?this:Nc(ke.none,this.children,this.positions,0,this.children.length,0,this.length,(O,i,n)=>new t(this.type,O,i,n,this.propValues),e.makeTree||((O,i,n)=>new t(ke.none,O,i,n)))}static build(e){return Lw(e)}};H.empty=new H(ke.none,[],[],0);var Wc=class t{constructor(e,O){this.buffer=e,this.index=O}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new t(this.buffer,this.index)}},qO=class t{constructor(e,O,i){this.buffer=e,this.length=O,this.set=i}get type(){return ke.none}toString(){let e=[];for(let O=0;O0));s=a[s+3]);return o}slice(e,O,i){let n=this.buffer,r=new Uint16Array(O-e),a=0;for(let o=e,s=0;o=e&&Oe;case 1:return O<=e&&i>e;case 2:return i>e;case 4:return!0}}function Qr(t,e,O,i){for(var n;t.from==t.to||(O<1?t.from>=e:t.from>e)||(O>-1?t.to<=e:t.to0?o.length:-1;e!=l;e+=O){let c=o[e],h=s[e]+a.from,f;if(!(!(r&F.EnterBracketed&&c instanceof H&&(f=zO.get(c))&&!f.overlay&&f.bracketed&&i>=h&&i<=h+c.length)&&!Sp(n,i,h,h+c.length))){if(c instanceof qO){if(r&F.ExcludeBuffers)continue;let d=c.findChild(0,c.buffer.length,O,i-h,n);if(d>-1)return new ui(new Gc(a,c,e,h),null,d)}else if(r&F.IncludeAnonymous||!c.type.isAnonymous||Dc(c)){let d;if(!(r&F.IgnoreMounts)&&(d=zO.get(c))&&!d.overlay)return new t(d.tree,h,e,a);let Q=new t(c,h,e,a);return r&F.IncludeAnonymous||!Q.type.isAnonymous?Q:Q.nextChild(O<0?c.children.length-1:0,O,i,n,r)}}}if(r&F.IncludeAnonymous||!a.type.isAnonymous||(a.index>=0?e=a.index+O:e=O<0?-1:a._parent._tree.children.length,a=a._parent,!a))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,O,i=0){let n;if(!(i&F.IgnoreOverlays)&&(n=zO.get(this._tree))&&n.overlay){let r=e-this.from,a=i&F.EnterBracketed&&n.bracketed;for(let{from:o,to:s}of n.overlay)if((O>0||a?o<=r:o=r:s>r))return new t(n.tree,n.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,O,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function Qp(t,e,O,i){let n=t.cursor(),r=[];if(!n.firstChild())return r;if(O!=null){for(let a=!1;!a;)if(a=n.type.is(O),!n.nextSibling())return r}for(;;){if(i!=null&&n.type.is(i))return r;if(n.type.is(e)&&r.push(n.node),!n.nextSibling())return i==null?r:[]}}function jc(t,e,O=e.length-1){for(let i=t;O>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[O]&&e[O]!=i.name)return!1;O--}}return!0}var Gc=class{constructor(e,O,i,n){this.parent=e,this.buffer=O,this.index=i,this.start=n}},ui=class t extends lo{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,O,i){super(),this.context=e,this._parent=O,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,O,i){let{buffer:n}=this.context,r=n.findChild(this.index+4,n.buffer[this.index+3],e,O-this.context.start,i);return r<0?null:new t(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,O,i=0){if(i&F.ExcludeBuffers)return null;let{buffer:n}=this.context,r=n.findChild(this.index+4,n.buffer[this.index+3],O>0?1:-1,e-this.context.start,O);return r<0?null:new t(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,O=e.buffer[this.index+3];return O<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new t(this.context,this._parent,O):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,O=this._parent?this._parent.index+4:0;return this.index==O?this.externalSibling(-1):new t(this.context,this._parent,e.findChild(O,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],O=[],{buffer:i}=this.context,n=this.index+4,r=i.buffer[this.index+3];if(r>n){let a=i.buffer[this.index+1];e.push(i.slice(n,r,a)),O.push(0)}return new H(this.type,e,O,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function Xp(t){if(!t.length)return null;let e=0,O=t[0];for(let r=1;rO.from||a.to=e){let o=new at(a.tree,a.overlay[0].from+r.from,-1,r);(n||(n=[i])).push(Qr(o,e,O,!1))}}return n?Xp(n):i}var un=class{get name(){return this.type.name}constructor(e,O=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=O&~F.EnterBracketed,e instanceof at)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,O){this.index=e;let{start:i,buffer:n}=this.buffer;return this.type=O||n.set.types[n.buffer[e]],this.from=i+n.buffer[e+1],this.to=i+n.buffer[e+2],!0}yield(e){return e?e instanceof at?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,O,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,O,i,this.mode));let{buffer:n}=this.buffer,r=n.findChild(this.index+4,n.buffer[this.index+3],e,O-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,O,i=this.mode){return this.buffer?i&F.ExcludeBuffers?!1:this.enterChild(1,e,O):this.yield(this._tree.enter(e,O,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&F.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&F.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:O}=this.buffer,i=this.stack.length-1;if(e<0){let n=i<0?0:this.stack[i]+4;if(this.index!=n)return this.yieldBuf(O.findChild(n,this.index,-1,0,4))}else{let n=O.buffer[this.index+3];if(n<(i<0?O.buffer.length:O.buffer[this.stack[i]+3]))return this.yieldBuf(n)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let O,i,{buffer:n}=this;if(n){if(e>0){if(this.index-1)for(let r=O+e,a=e<0?-1:i._tree.children.length;r!=a;r+=e){let o=i._tree.children[r];if(this.mode&F.IncludeAnonymous||o instanceof qO||!o.type.isAnonymous||Dc(o))return!1}return!0}move(e,O){if(O&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,O=0){for(;(this.from==this.to||(O<1?this.from>=e:this.from>e)||(O>-1?this.to<=e:this.to=0;){for(let a=e;a;a=a._parent)if(a.index==n){if(n==this.index)return a;O=a,i=r+1;break e}n=this.stack[--r]}for(let n=i;n=0;r--){if(r<0)return jc(this._tree,e,n);let a=i[O.buffer[this.stack[r]]];if(!a.isAnonymous){if(e[n]&&e[n]!=a.name)return!1;n--}}return!0}};function Dc(t){return t.children.some(e=>e instanceof qO||!e.type.isAnonymous||Dc(e))}function Lw(t){var e;let{buffer:O,nodeSet:i,maxBufferLength:n=1024,reused:r=[],minRepeatType:a=i.types.length}=t,o=Array.isArray(O)?new Wc(O,O.length):O,s=i.types,l=0,c=0;function h(k,T,v,j,M,q){let{id:Z,start:R,end:w,size:g}=o,x=c,b=l;if(g<0)if(o.next(),g==-1){let eO=r[Z];v.push(eO),j.push(R-k);return}else if(g==-3){l=Z;return}else if(g==-4){c=Z;return}else throw new RangeError(`Unrecognized record size: ${g}`);let C=s[Z],ge,ye,mt=R-k;if(w-R<=n&&(ye=p(o.pos-T,M))){let eO=new Uint16Array(ye.size-ye.skip),gt=o.pos-ye.size,Gt=eO.length;for(;o.pos>gt;)Gt=m(ye.start,eO,Gt);ge=new qO(eO,w-ye.start,i),mt=ye.start-k}else{let eO=o.pos-g;o.next();let gt=[],Gt=[],JO=Z>=a?Z:-1,Ei=0,ca=w;for(;o.pos>eO;)JO>=0&&o.id==JO&&o.size>=0?(o.end<=ca-n&&(Q(gt,Gt,R,Ei,o.end,ca,JO,x,b),Ei=gt.length,ca=o.end),o.next()):q>2500?f(R,eO,gt,Gt):h(R,eO,gt,Gt,JO,q+1);if(JO>=0&&Ei>0&&Ei-1&&Ei>0){let Ld=d(C,b);ge=Nc(C,gt,Gt,0,gt.length,0,w-R,Ld,Ld)}else ge=$(C,gt,Gt,w-R,x-w,b)}v.push(ge),j.push(mt)}function f(k,T,v,j){let M=[],q=0,Z=-1;for(;o.pos>T;){let{id:R,start:w,end:g,size:x}=o;if(x>4)o.next();else{if(Z>-1&&w=0;g-=3)R[x++]=M[g],R[x++]=M[g+1]-w,R[x++]=M[g+2]-w,R[x++]=x;v.push(new qO(R,M[2]-w,i)),j.push(w-k)}}function d(k,T){return(v,j,M)=>{let q=0,Z=v.length-1,R,w;if(Z>=0&&(R=v[Z])instanceof H){if(!Z&&R.type==k&&R.length==M)return R;(w=R.prop(L.lookAhead))&&(q=j[Z]+R.length+w)}return $(k,v,j,M,q,T)}}function Q(k,T,v,j,M,q,Z,R,w){let g=[],x=[];for(;k.length>j;)g.push(k.pop()),x.push(T.pop()+v-M);k.push($(i.types[Z],g,x,q-M,R-q,w)),T.push(M-v)}function $(k,T,v,j,M,q,Z){if(q){let R=[L.contextHash,q];Z=Z?[R].concat(Z):[R]}if(M>25){let R=[L.lookAhead,M];Z=Z?[R].concat(Z):[R]}return new H(k,T,v,j,Z)}function p(k,T){let v=o.fork(),j=0,M=0,q=0,Z=v.end-n,R={size:0,start:0,skip:0};e:for(let w=v.pos-k;v.pos>w;){let g=v.size;if(v.id==T&&g>=0){R.size=j,R.start=M,R.skip=q,q+=4,j+=4,v.next();continue}let x=v.pos-g;if(g<0||x=a?4:0,C=v.start;for(v.next();v.pos>x;){if(v.size<0)if(v.size==-3||v.size==-4)b+=4;else break e;else v.id>=a&&(b+=4);v.next()}M=C,j+=g,q+=b}return(T<0||j==k)&&(R.size=j,R.start=M,R.skip=q),R.size>4?R:void 0}function m(k,T,v){let{id:j,start:M,end:q,size:Z}=o;if(o.next(),Z>=0&&j4){let w=o.pos-(Z-4);for(;o.pos>w;)v=m(k,T,v)}T[--v]=R,T[--v]=q-k,T[--v]=M-k,T[--v]=j}else Z==-3?l=j:Z==-4&&(c=j);return v}let P=[],S=[];for(;o.pos>0;)h(t.start||0,t.bufferStart||0,P,S,-1,0);let y=(e=t.length)!==null&&e!==void 0?e:P.length?S[0]+P[0].length:0;return new H(s[t.topID],P.reverse(),S.reverse(),y)}var $p=new WeakMap;function so(t,e){if(!t.isAnonymous||e instanceof qO||e.type!=t)return 1;let O=$p.get(e);if(O==null){O=1;for(let i of e.children){if(i.type!=t||!(i instanceof H)){O=1;break}O+=so(t,i)}$p.set(e,O)}return O}function Nc(t,e,O,i,n,r,a,o,s){let l=0;for(let Q=i;Q=c)break;T+=v}if(S==y+1){if(T>c){let v=Q[y];d(v.children,v.positions,0,v.children.length,$[y]+P);continue}h.push(Q[y])}else{let v=$[S-1]+Q[S-1].length-k;h.push(Nc(t,Q,$,y,S,k,v,null,s))}f.push(k+P-r)}}return d(e,O,i,n,0),(o||s)(h,f,a)}var Lt=class{constructor(){this.map=new WeakMap}setBuffer(e,O,i){let n=this.map.get(e);n||this.map.set(e,n=new Map),n.set(O,i)}getBuffer(e,O){let i=this.map.get(e);return i&&i.get(O)}set(e,O){e instanceof ui?this.setBuffer(e.context.buffer,e.index,O):e instanceof at&&this.map.set(e.tree,O)}get(e){return e instanceof ui?this.getBuffer(e.context.buffer,e.index):e instanceof at?this.map.get(e.tree):void 0}cursorSet(e,O){e.buffer?this.setBuffer(e.buffer.buffer,e.index,O):this.map.set(e.tree,O)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}},kt=class t{constructor(e,O,i,n,r=!1,a=!1){this.from=e,this.to=O,this.tree=i,this.offset=n,this.open=(r?1:0)|(a?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,O=[],i=!1){let n=[new t(0,e.length,e,0,!1,i)];for(let r of O)r.to>e.length&&n.push(r);return n}static applyChanges(e,O,i=128){if(!O.length)return e;let n=[],r=1,a=e.length?e[0]:null;for(let o=0,s=0,l=0;;o++){let c=o=i)for(;a&&a.from=f.from||h<=f.to||l){let d=Math.max(f.from,s)-l,Q=Math.min(f.to,h)-l;f=d>=Q?null:new t(d,Q,f.tree,f.offset+l,o>0,!!c)}if(f&&n.push(f),a.to>h)break;a=rnew rt(n.from,n.to)):[new rt(0,0)]:[new rt(0,e.length)],this.createParse(e,O||[],i)}parse(e,O,i){let n=this.startParse(e,O,i);for(;;){let r=n.advance();if(r)return r}}},Ec=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,O){return this.string.slice(e,O)}};function di(t){return(e,O,i,n)=>new Ic(e,t,O,i,n)}var co=class{constructor(e,O,i,n,r,a){this.parser=e,this.parse=O,this.overlay=i,this.bracketed=n,this.target=r,this.from=a}};function pp(t){if(!t.length||t.some(e=>e.from>=e.to))throw new RangeError("Invalid inner parse ranges given: "+JSON.stringify(t))}var Ac=class{constructor(e,O,i,n,r,a,o,s){this.parser=e,this.predicate=O,this.mounts=i,this.index=n,this.start=r,this.bracketed=a,this.target=o,this.prev=s,this.depth=0,this.ranges=[]}},Lc=new L({perNode:!0}),Ic=class{constructor(e,O,i,n,r){this.nest=O,this.input=i,this.fragments=n,this.ranges=r,this.inner=[],this.innerDone=0,this.baseTree=null,this.stoppedAt=null,this.baseParse=e}advance(){if(this.baseParse){let i=this.baseParse.advance();if(!i)return null;if(this.baseParse=null,this.baseTree=i,this.startInner(),this.stoppedAt!=null)for(let n of this.inner)n.parse.stopAt(this.stoppedAt)}if(this.innerDone==this.inner.length){let i=this.baseTree;return this.stoppedAt!=null&&(i=new H(i.type,i.children,i.positions,i.length,i.propValues.concat([[Lc,this.stoppedAt]]))),i}let e=this.inner[this.innerDone],O=e.parse.advance();if(O){this.innerDone++;let i=Object.assign(Object.create(null),e.target.props);i[L.mounted.id]=new zO(O,e.overlay,e.parser,e.bracketed),e.target.props=i}return null}get parsedPos(){if(this.baseParse)return 0;let e=this.input.length;for(let O=this.innerDone;O=this.stoppedAt)o=!1;else if(e.hasNode(n)){if(O){let l=O.mounts.find(c=>c.frag.from<=n.from&&c.frag.to>=n.to&&c.mount.overlay);if(l)for(let c of l.mount.overlay){let h=c.from+l.pos,f=c.to+l.pos;h>=n.from&&f<=n.to&&!O.ranges.some(d=>d.fromh)&&O.ranges.push({from:h,to:f})}}o=!1}else if(i&&(a=Iw(i.ranges,n.from,n.to)))o=a!=2;else if(!n.type.isAnonymous&&(r=this.nest(n,this.input))&&(n.fromnew rt(h.from-n.from,h.to-n.from)):null,!!r.bracketed,n.tree,c.length?c[0].from:n.from)),r.overlay?c.length&&(i={ranges:c,depth:0,prev:i}):o=!1}}else if(O&&(s=O.predicate(n))&&(s===!0&&(s=new rt(n.from,n.to)),s.from=0&&O.ranges[l].to==s.from?O.ranges[l]={from:O.ranges[l].from,to:s.to}:O.ranges.push(s)}if(o&&n.firstChild())O&&O.depth++,i&&i.depth++;else for(;!n.nextSibling();){if(!n.parent())break e;if(O&&!--O.depth){let l=gp(this.ranges,O.ranges);l.length&&(pp(l),this.inner.splice(O.index,0,new co(O.parser,O.parser.startParse(this.input,Pp(O.mounts,l),l),O.ranges.map(c=>new rt(c.from-O.start,c.to-O.start)),O.bracketed,O.target,l[0].from))),O=O.prev}i&&!--i.depth&&(i=i.prev)}}}};function Iw(t,e,O){for(let i of t){if(i.from>=O)break;if(i.to>e)return i.from<=e&&i.to>=O?2:1}return 0}function mp(t,e,O,i,n,r){if(e=i&&O.enter(i,1,F.IncludeAnonymous|F.IgnoreOverlays|F.ExcludeBuffers)))if(O.to<=i)O.next(!1)||(this.done=!0);else break}hasNode(e){if(this.moveTo(e.from),!this.done&&this.cursor.from+this.offset==e.from&&this.cursor.tree)for(let O=this.cursor.tree;;){if(O==e.tree)return!0;if(O.children.length&&O.positions[0]==0&&O.children[0]instanceof H)O=O.children[0];else break}return!1}},Mc=class{constructor(e){var O;if(this.fragments=e,this.curTo=0,this.fragI=0,e.length){let i=this.curFrag=e[0];this.curTo=(O=i.tree.prop(Lc))!==null&&O!==void 0?O:i.to,this.inner=new ho(i.tree,-i.offset)}else this.curFrag=this.inner=null}hasNode(e){for(;this.curFrag&&e.from>=this.curTo;)this.nextFrag();return this.curFrag&&this.curFrag.from<=e.from&&this.curTo>=e.to&&this.inner.hasNode(e)}nextFrag(){var e;if(this.fragI++,this.fragI==this.fragments.length)this.curFrag=this.inner=null;else{let O=this.curFrag=this.fragments[this.fragI];this.curTo=(e=O.tree.prop(Lc))!==null&&e!==void 0?e:O.to,this.inner=new ho(O.tree,-O.offset)}}findMounts(e,O){var i;let n=[];if(this.inner){this.inner.cursor.moveTo(e,1);for(let r=this.inner.cursor.node;r;r=r.parent){let a=(i=r.tree)===null||i===void 0?void 0:i.prop(L.mounted);if(a&&a.parser==O)for(let o=this.fragI;o=r.to)break;s.tree==this.curFrag.tree&&n.push({frag:s,pos:r.from-s.offset,mount:a})}}}return n}};function gp(t,e){let O=null,i=e;for(let n=1,r=0;n=o)break;s.to<=a||(O||(i=O=e.slice()),s.fromo&&O.splice(r+1,0,new rt(o,s.to))):s.to>o?O[r--]=new rt(o,s.to):O.splice(r--,1))}}return i}function Dw(t,e,O,i){let n=0,r=0,a=!1,o=!1,s=-1e9,l=[];for(;;){let c=n==t.length?1e9:a?t[n].to:t[n].from,h=r==e.length?1e9:o?e[r].to:e[r].from;if(a!=o){let f=Math.max(s,O),d=Math.min(c,h,i);fnew rt(f.from+i,f.to+i)),h=Dw(e,c,s,l);for(let f=0,d=s;;f++){let Q=f==h.length,$=Q?l:h[f].from;if($>d&&O.push(new kt(d,$,n.tree,-a,r.from>=d||r.openStart,r.to<=$||r.openEnd)),Q)break;d=h[f].to}}else O.push(new kt(s,l,n.tree,-a,r.from>=a||r.openStart,r.to<=o||r.openEnd))}return O}var Nw=0,ft=class t{constructor(e,O,i,n){this.name=e,this.set=O,this.base=i,this.modified=n,this.id=Nw++}toString(){let{name:e}=this;for(let O of this.modified)O.name&&(e=`${O.name}(${e})`);return e}static define(e,O){let i=typeof e=="string"?e:"?";if(e instanceof t&&(O=e),O?.base)throw new Error("Can not derive from a modified tag");let n=new t(i,[],null,[]);if(n.set.push(n),O)for(let r of O.set)n.set.push(r);return n}static defineModifier(e){let O=new $o(e);return i=>i.modified.indexOf(O)>-1?i:$o.get(i.base||i,i.modified.concat(O).sort((n,r)=>n.id-r.id))}},Bw=0,$o=class t{constructor(e){this.name=e,this.instances=[],this.id=Bw++}static get(e,O){if(!O.length)return e;let i=O[0].instances.find(o=>o.base==e&&Fw(O,o.modified));if(i)return i;let n=[],r=new ft(e.name,n,e,O);for(let o of O)o.instances.push(r);let a=Hw(O);for(let o of e.set)if(!o.modified.length)for(let s of a)n.push(t.get(o,s));return r}};function Fw(t,e){return t.length==e.length&&t.every((O,i)=>O==e[i])}function Hw(t){let e=[[]];for(let O=0;Oi.length-O.length)}function re(t){let e=Object.create(null);for(let O in t){let i=t[O];Array.isArray(i)||(i=[i]);for(let n of O.split(" "))if(n){let r=[],a=2,o=n;for(let h=0;;){if(o=="..."&&h>0&&h+3==n.length){a=1;break}let f=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(o);if(!f)throw new RangeError("Invalid path: "+n);if(r.push(f[0]=="*"?"":f[0][0]=='"'?JSON.parse(f[0]):f[0]),h+=f[0].length,h==n.length)break;let d=n[h++];if(h==n.length&&d=="!"){a=0;break}if(d!="/")throw new RangeError("Invalid path: "+n);o=n.slice(h)}let s=r.length-1,l=r[s];if(!l)throw new RangeError("Invalid path: "+n);let c=new $i(i,a,s>0?r.slice(0,s):null);e[l]=c.sort(e[l])}}return kp.add(e)}var kp=new L({combine(t,e){let O,i,n;for(;t||e;){if(!t||e&&t.depth<=e.depth?(n=e,e=e.next):(n=t,t=t.next),O&&O.mode==n.mode&&!n.context&&!O.context)continue;let r=new $i(n.tags,n.mode,n.context);O?O.next=r:i=r,O=r}return i}}),$i=class{constructor(e,O,i,n){this.tags=e,this.mode=O,this.context=i,this.next=n}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let a=n;for(let o of r)for(let s of o.set){let l=O[s.id];if(l){a=a?a+" "+l:l;break}}return a},scope:i}}function Kw(t,e){let O=null;for(let i of t){let n=i.style(e);n&&(O=O?O+" "+n:n)}return O}function pr(t,e,O,i=0,n=t.length){let r=new Fc(i,Array.isArray(e)?e:[e],O);r.highlightRange(t.cursor(),i,n,"",r.highlighters),r.flush(n)}var Fc=class{constructor(e,O,i){this.at=e,this.highlighters=O,this.span=i,this.class=""}startSpan(e,O){O!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=O)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,O,i,n,r){let{type:a,from:o,to:s}=e;if(o>=i||s<=O)return;a.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(a)));let l=n,c=Jw(e)||$i.empty,h=Kw(r,c.tags);if(h&&(l&&(l+=" "),l+=h,c.mode==1&&(n+=(n?" ":"")+h)),this.startSpan(Math.max(O,o),l),c.opaque)return;let f=e.tree&&e.tree.prop(L.mounted);if(f&&f.overlay){let d=e.node.enter(f.overlay[0].from+o,1),Q=this.highlighters.filter(p=>!p.scope||p.scope(f.tree.type)),$=e.firstChild();for(let p=0,m=o;;p++){let P=p=S||!e.nextSibling())););if(!P||S>i)break;m=P.to+o,m>O&&(this.highlightRange(d.cursor(),Math.max(O,P.from+o),Math.min(i,m),"",Q),this.startSpan(Math.min(i,m),l))}$&&e.parent()}else if(e.firstChild()){f&&(n="");do if(!(e.to<=O)){if(e.from>=i)break;this.highlightRange(e,O,i,n,r),this.startSpan(Math.min(i,e.to),l)}while(e.nextSibling());e.parent()}}};function Jw(t){let e=t.type.prop(kp);for(;e&&e.context&&!t.matchContext(e.context);)e=e.next;return e||null}var U=ft.define,fo=U(),UO=U(),bp=U(UO),xp=U(UO),VO=U(),uo=U(VO),Bc=U(VO),Dt=U(),Qi=U(Dt),It=U(),Mt=U(),Hc=U(),$r=U(Hc),Qo=U(),u={comment:fo,lineComment:U(fo),blockComment:U(fo),docComment:U(fo),name:UO,variableName:U(UO),typeName:bp,tagName:U(bp),propertyName:xp,attributeName:U(xp),className:U(UO),labelName:U(UO),namespace:U(UO),macroName:U(UO),literal:VO,string:uo,docString:U(uo),character:U(uo),attributeValue:U(uo),number:Bc,integer:U(Bc),float:U(Bc),bool:U(VO),regexp:U(VO),escape:U(VO),color:U(VO),url:U(VO),keyword:It,self:U(It),null:U(It),atom:U(It),unit:U(It),modifier:U(It),operatorKeyword:U(It),controlKeyword:U(It),definitionKeyword:U(It),moduleKeyword:U(It),operator:Mt,derefOperator:U(Mt),arithmeticOperator:U(Mt),logicOperator:U(Mt),bitwiseOperator:U(Mt),compareOperator:U(Mt),updateOperator:U(Mt),definitionOperator:U(Mt),typeOperator:U(Mt),controlOperator:U(Mt),punctuation:Hc,separator:U(Hc),bracket:$r,angleBracket:U($r),squareBracket:U($r),paren:U($r),brace:U($r),content:Dt,heading:Qi,heading1:U(Qi),heading2:U(Qi),heading3:U(Qi),heading4:U(Qi),heading5:U(Qi),heading6:U(Qi),contentSeparator:U(Dt),list:U(Dt),quote:U(Dt),emphasis:U(Dt),strong:U(Dt),link:U(Dt),monospace:U(Dt),strikethrough:U(Dt),inserted:U(),deleted:U(),changed:U(),invalid:U(),meta:Qo,documentMeta:U(Qo),annotation:U(Qo),processingInstruction:U(Qo),definition:ft.defineModifier("definition"),constant:ft.defineModifier("constant"),function:ft.defineModifier("function"),standard:ft.defineModifier("standard"),local:ft.defineModifier("local"),special:ft.defineModifier("special")};for(let t in u){let e=u[t];e instanceof ft&&(e.name=t)}var m8=Kc([{tag:u.link,class:"tok-link"},{tag:u.heading,class:"tok-heading"},{tag:u.emphasis,class:"tok-emphasis"},{tag:u.strong,class:"tok-strong"},{tag:u.keyword,class:"tok-keyword"},{tag:u.atom,class:"tok-atom"},{tag:u.bool,class:"tok-bool"},{tag:u.url,class:"tok-url"},{tag:u.labelName,class:"tok-labelName"},{tag:u.inserted,class:"tok-inserted"},{tag:u.deleted,class:"tok-deleted"},{tag:u.literal,class:"tok-literal"},{tag:u.string,class:"tok-string"},{tag:u.number,class:"tok-number"},{tag:[u.regexp,u.escape,u.special(u.string)],class:"tok-string2"},{tag:u.variableName,class:"tok-variableName"},{tag:u.local(u.variableName),class:"tok-variableName tok-local"},{tag:u.definition(u.variableName),class:"tok-variableName tok-definition"},{tag:u.special(u.variableName),class:"tok-variableName2"},{tag:u.definition(u.propertyName),class:"tok-propertyName tok-definition"},{tag:u.typeName,class:"tok-typeName"},{tag:u.namespace,class:"tok-namespace"},{tag:u.className,class:"tok-className"},{tag:u.macroName,class:"tok-macroName"},{tag:u.propertyName,class:"tok-propertyName"},{tag:u.operator,class:"tok-operator"},{tag:u.comment,class:"tok-comment"},{tag:u.meta,class:"tok-meta"},{tag:u.invalid,class:"tok-invalid"},{tag:u.punctuation,class:"tok-punctuation"}]);function yp(t,e,O,i=0,n=0){e==null&&(e=t.search(/[^\s\u00a0]/),e==-1&&(e=t.length));let r=n;for(let a=i;a=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.posO}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let O=this.string.indexOf(e,this.pos);if(O>-1)return this.pos=O,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosi?a.toLowerCase():a,r=this.string.substr(this.pos,e.length);return n(r)==n(e)?(O!==!1&&(this.pos+=e.length),!0):null}else{let n=this.string.slice(this.pos).match(e);return n&&n.index>0?null:(n&&O!==!1&&(this.pos+=n[0].length),n)}}current(){return this.string.slice(this.start,this.pos)}};var Jc,Nt=new L;function mi(t){return z.define({combine:t?e=>e.concat(t):void 0})}var xr=new L,Ze=class{constructor(e,O,i=[],n=""){this.data=e,this.name=n,$e.prototype.hasOwnProperty("tree")||Object.defineProperty($e.prototype,"tree",{get(){return N(this)}}),this.parser=O,this.extension=[Yt.of(this),$e.languageData.of((r,a,o)=>{let s=wp(r,a,o),l=s.type.prop(Nt);if(!l)return[];let c=r.facet(l),h=s.type.prop(xr);if(h){let f=s.resolve(a-s.from,o);for(let d of h)if(d.test(f,r)){let Q=r.facet(d.facet);return d.type=="replace"?Q:Q.concat(c)}}return c})].concat(i)}isActiveAt(e,O,i=-1){return wp(e,O,i).type.prop(Nt)==this.data}findRegions(e){let O=e.facet(Yt);if(O?.data==this.data)return[{from:0,to:e.doc.length}];if(!O||!O.allowsNesting)return[];let i=[],n=(r,a)=>{if(r.prop(Nt)==this.data){i.push({from:a,to:a+r.length});return}let o=r.prop(L.mounted);if(o){if(o.tree.prop(Nt)==this.data){if(o.overlay)for(let s of o.overlay)i.push({from:s.from+a,to:s.to+a});else i.push({from:a,to:a+r.length});return}else if(o.overlay){let s=i.length;if(n(o.tree,o.overlay[0].from+a),i.length>s)return}}for(let s=0;si.isTop?O:void 0)]}),e.name)}configure(e,O){return new t(this.data,this.parser.configure(e),O||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function N(t){let e=t.field(Ze.state,!1);return e?e.tree:H.empty}function Up(t,e,O=50){var i;let n=(i=t.field(Ze.state,!1))===null||i===void 0?void 0:i.context;if(!n)return null;let r=n.viewport;n.updateViewport({from:0,to:e});let a=n.isDone(e)||n.work(O,e)?n.tree:null;return n.updateViewport(r),a}function eT(t,e=t.doc.length){var O;return((O=t.field(Ze.state,!1))===null||O===void 0?void 0:O.context.isDone(e))||!1}function tT(t,e=t.viewport.to,O=100){let i=Up(t.state,e,O);return i!=N(t.state)&&t.dispatch({}),!!i}function OT(t){var e;return((e=t.plugin(Wp))===null||e===void 0?void 0:e.isWorking())||!1}var mo=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,O){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,O):this.string.slice(e-i,O-i)}},mr=null,WO=class t{constructor(e,O,i=[],n,r,a,o,s){this.parser=e,this.state=O,this.fragments=i,this.tree=n,this.treeLen=r,this.viewport=a,this.skipped=o,this.scheduleOn=s,this.parse=null,this.tempSkipped=[]}static create(e,O,i){return new t(e,O,[],H.empty,0,i,[],null)}startParse(){return this.parser.startParse(new mo(this.state.doc),this.fragments)}work(e,O){return O!=null&&O>=this.state.doc.length&&(O=void 0),this.tree!=H.empty&&this.isDone(O??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let n=Date.now()+e;e=()=>Date.now()>n}for(this.parse||(this.parse=this.startParse()),O!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>O)&&O=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(O=this.parse.advance()););}),this.treeLen=e,this.tree=O,this.fragments=this.withoutTempSkipped(kt.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let O=mr;mr=this;try{return e()}finally{mr=O}}withoutTempSkipped(e){for(let O;O=this.tempSkipped.pop();)e=Tp(e,O.from,O.to);return e}changes(e,O){let{fragments:i,tree:n,treeLen:r,viewport:a,skipped:o}=this;if(this.takeTree(),!e.empty){let s=[];if(e.iterChangedRanges((l,c,h,f)=>s.push({fromA:l,toA:c,fromB:h,toB:f})),i=kt.applyChanges(i,s),n=H.empty,r=0,a={from:e.mapPos(a.from,-1),to:e.mapPos(a.to,1)},this.skipped.length){o=[];for(let l of this.skipped){let c=e.mapPos(l.from,1),h=e.mapPos(l.to,-1);ce.from&&(this.fragments=Tp(this.fragments,n,r),this.skipped.splice(i--,1))}return this.skipped.length>=O?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,O){this.skipped.push({from:e,to:O})}static getSkippingParser(e){return new class extends aO{createParse(O,i,n){let r=n[0].from,a=n[n.length-1].to;return{parsedPos:r,advance(){let s=mr;if(s){for(let l of n)s.tempSkipped.push(l);e&&(s.scheduleOn=s.scheduleOn?Promise.all([s.scheduleOn,e]):e)}return this.parsedPos=a,new H(ke.none,[],[],a-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let O=this.fragments;return this.treeLen>=e&&O.length&&O[0].from==0&&O[0].to>=e}static get(){return mr}};function Tp(t,e,O){return kt.applyChanges(t,[{fromA:e,toA:O,fromB:e,toB:O}])}var Pr=class t{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let O=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),O.viewport.to);return O.work(20,i)||O.takeTree(),new t(O)}static init(e){let O=Math.min(3e3,e.doc.length),i=WO.create(e.facet(Yt).parser,e,{from:0,to:O});return i.work(20,O)||i.takeTree(),new t(i)}};Ze.state=Qe.define({create:Pr.init,update(t,e){for(let O of e.effects)if(O.is(Ze.setState))return O.value;return e.startState.facet(Yt)!=e.state.facet(Yt)?Pr.init(e.state):t.apply(e)}});var Vp=t=>{let e=setTimeout(()=>t(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Vp=t=>{let e=-1,O=setTimeout(()=>{e=requestIdleCallback(t,{timeout:400})},100);return()=>e<0?clearTimeout(O):cancelIdleCallback(e)});var eh=typeof navigator<"u"&&(!((Jc=navigator.scheduling)===null||Jc===void 0)&&Jc.isInputPending)?()=>navigator.scheduling.isInputPending():null,Wp=Oe.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let O=this.view.state.field(Ze.state).context;(O.updateViewport(e.view.viewport)||this.view.viewport.to>O.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(O)}scheduleWork(){if(this.working)return;let{state:e}=this.view,O=e.field(Ze.state);(O.tree!=O.context.tree||!O.context.isDone(e.doc.length))&&(this.working=Vp(this.work))}work(e){this.working=null;let O=Date.now();if(this.chunkEndn+1e3,s=r.context.work(()=>eh&&eh()||Date.now()>a,n+(o?0:1e5));this.chunkBudget-=Date.now()-O,(s||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:Ze.setState.of(new Pr(r.context))})),this.chunkBudget>0&&!(s&&!o)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(O=>qe(this.view.state,O)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Yt=z.define({combine(t){return t.length?t[0]:null},enables:t=>[Ze.state,Wp,_.contentAttributes.compute([t],e=>{let O=e.facet(t);return O&&O.name?{"data-language":O.name}:{}})]}),oe=class{constructor(e,O=[]){this.language=e,this.support=O,this.extension=[e,O]}},dn=class t{constructor(e,O,i,n,r,a=void 0){this.name=e,this.alias=O,this.extensions=i,this.filename=n,this.loadFunc=r,this.support=a,this.loading=null}load(){return this.loading||(this.loading=this.loadFunc().then(e=>this.support=e,e=>{throw this.loading=null,e}))}static of(e){let{load:O,support:i}=e;if(!O){if(!i)throw new RangeError("Must pass either 'load' or 'support' to LanguageDescription.of");O=()=>Promise.resolve(i)}return new t(e.name,(e.alias||[]).concat(e.name).map(n=>n.toLowerCase()),e.extensions||[],e.filename,O,i)}static matchFilename(e,O){for(let n of e)if(n.filename&&n.filename.test(O))return n;let i=/\.([^.]+)$/.exec(O);if(i){for(let n of e)if(n.extensions.indexOf(i[1])>-1)return n}return null}static matchLanguageName(e,O,i=!0){O=O.toLowerCase();for(let n of e)if(n.alias.some(r=>r==O))return n;if(i)for(let n of e)for(let r of n.alias){let a=O.indexOf(r);if(a>-1&&(r.length>2||!/\w/.test(O[a-1])&&!/\w/.test(O[a+r.length])))return n}return null}},jp=z.define(),lO=z.define({combine:t=>{if(!t.length)return" ";let e=t[0];if(!e||/\S/.test(e)||Array.from(e).some(O=>O!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(t[0]));return e}});function wt(t){let e=t.facet(lO);return e.charCodeAt(0)==9?t.tabSize*e.length:e.length}function jO(t,e){let O="",i=t.tabSize,n=t.facet(lO)[0];if(n==" "){for(;e>=i;)O+=" ",e-=i;n=" "}for(let r=0;r=e?nT(t,O,e):null}function iT(t,e,O){let i=Object.create(null),n=new oO(t,{overrideIndentation:a=>{var o;return(o=i[a])!==null&&o!==void 0?o:-1}}),r=[];for(let a=e;a<=O;){let o=t.doc.lineAt(a);a=o.to+1;let s=$n(n,o.from);if(s==null)continue;/\S/.test(o.text)||(s=0);let l=/^\s*/.exec(o.text)[0],c=jO(t,s);l!=c&&(i[o.from]=s,r.push({from:o.from,to:o.from+l.length,insert:c}))}return t.changes(r)}var oO=class{constructor(e,O={}){this.state=e,this.options=O,this.unit=wt(e)}lineAt(e,O=1){let i=this.state.doc.lineAt(e),{simulateBreak:n,simulateDoubleBreak:r}=this.options;return n!=null&&n>=i.from&&n<=i.to?r&&n==e?{text:"",from:e}:(O<0?n-1&&(r+=a-this.countColumn(i,i.search(/\S|$/))),r}countColumn(e,O=e.length){return Me(e,this.state.tabSize,O)}lineIndent(e,O=1){let{text:i,from:n}=this.lineAt(e,O),r=this.options.overrideIndentation;if(r){let a=r(n);if(a>-1)return a}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},se=new L;function nT(t,e,O){let i=e.resolveStack(O),n=e.resolveInner(O,-1).resolve(O,0).enterUnfinishedNodesBefore(O);if(n!=i.node){let r=[];for(let a=n;a&&!(a.fromi.node.to||a.from==i.node.from&&a.type==i.node.type);a=a.parent)r.push(a);for(let a=r.length-1;a>=0;a--)i={node:r[a],next:i}}return Gp(i,t,O)}function Gp(t,e,O){for(let i=t;i;i=i.next){let n=aT(i.node);if(n)return n(go.create(e,O,i))}return 0}function rT(t){return t.pos==t.options.simulateBreak&&t.options.simulateDoubleBreak}function aT(t){let e=t.type.prop(se);if(e)return e;let O=t.firstChild,i;if(O&&(i=O.type.prop(L.closedBy))){let n=t.lastChild,r=n&&i.indexOf(n.name)>-1;return a=>Cp(a,!0,1,void 0,r&&!rT(a)?n.from:void 0)}return t.parent==null?oT:null}function oT(){return 0}var go=class t extends oO{constructor(e,O,i){super(e.state,e.options),this.base=e,this.pos=O,this.context=i}get node(){return this.context.node}static create(e,O,i){return new t(e,O,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let O=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(O.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(sT(i,e))break;O=this.state.doc.lineAt(i.from)}return this.lineIndent(O.from)}continue(){return Gp(this.context.next,this.base,this.pos)}};function sT(t,e){for(let O=e;O;O=O.parent)if(t==O)return!0;return!1}function lT(t){let e=t.node,O=e.childAfter(e.from),i=e.lastChild;if(!O)return null;let n=t.options.simulateBreak,r=t.state.doc.lineAt(O.from),a=n==null||n<=r.from?r.to:Math.min(r.to,n);for(let o=O.to;;){let s=e.childAfter(o);if(!s||s==i)return null;if(!s.type.isSkipped){if(s.from>=a)return null;let l=/^ */.exec(r.text.slice(O.to-r.from))[0].length;return{from:O.from,to:O.to+l}}o=s.to}}function We({closing:t,align:e=!0,units:O=1}){return i=>Cp(i,e,O,t)}function Cp(t,e,O,i,n){let r=t.textAfter,a=r.match(/^\s*/)[0].length,o=i&&r.slice(a,a+i.length)==i||n==t.pos+a,s=e?lT(t):null;return s?o?t.column(s.from):t.column(s.to):t.baseIndent+(o?0:t.unit*O)}var cO=t=>t.baseIndent;function ue({except:t,units:e=1}={}){return O=>{let i=t&&t.test(O.textAfter);return O.baseIndent+(i?0:e*O.unit)}}var cT=200;function hT(){return $e.transactionFilter.of(t=>{if(!t.docChanged||!t.isUserEvent("input.type")&&!t.isUserEvent("input.complete"))return t;let e=t.startState.languageDataAt("indentOnInput",t.startState.selection.main.head);if(!e.length)return t;let O=t.newDoc,{head:i}=t.newSelection.main,n=O.lineAt(i);if(i>n.from+cT)return t;let r=O.sliceString(n.from,i);if(!e.some(l=>l.test(r)))return t;let{state:a}=t,o=-1,s=[];for(let{head:l}of a.selection.ranges){let c=a.doc.lineAt(l);if(c.from==o)continue;o=c.from;let h=$n(a,c.from);if(h==null)continue;let f=/^\s*/.exec(c.text)[0],d=jO(a,h);f!=d&&s.push({from:c.from,to:c.from+f.length,insert:d})}return s.length?[t,{changes:s,sequential:!0}]:t})}var Xo=z.define(),le=new L;function we(t){let e=t.firstChild,O=t.lastChild;return e&&e.toO)continue;if(r&&o.from=e&&l.to>O&&(r=l)}}return r}function uT(t){let e=t.lastChild;return e&&e.to==t.to&&e.type.isError}function Qn(t,e,O){for(let i of t.facet(Xo)){let n=i(t,e,O);if(n)return n}return fT(t,e,O)}function Ep(t,e){let O=e.mapPos(t.from,1),i=e.mapPos(t.to,-1);return O>=i?void 0:{from:O,to:i}}var GO=A.define({map:Ep}),hO=A.define({map:Ep});function ch(t){let e=[];for(let{head:O}of t.state.selection.ranges)e.some(i=>i.from<=O&&i.to>=O)||e.push(t.lineBlockAt(O));return e}var sO=Qe.define({create(){return W.none},update(t,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((i,n)=>t=vp(t,i,n)),t=t.map(e.changes);let O=[];for(let i of e.effects)i.is(GO)&&!dT(t,i.value.from,i.value.to)?O.push(i.value):i.is(hO)&&(t=t.update({filter:(n,r)=>i.value.from!=n||i.value.to!=r,filterFrom:i.value.from,filterTo:i.value.to}));if(O.length){let{preparePlaceholder:i}=e.state.facet(uh),n=O.map(r=>(i?W.replace({widget:new Oh(i(e.state,r))}):_p).range(r.from,r.to));t=t.update({add:n})}return e.selection&&(t=vp(t,e.selection.main.head)),t},provide:t=>_.decorations.from(t),toJSON(t,e){let O=[];return t.between(0,e.doc.length,(i,n)=>{O.push(i,n)}),O},fromJSON(t){if(!Array.isArray(t)||t.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let O=0;O{ne&&(i=!0)}),i?t.update({filterFrom:e,filterTo:O,filter:(n,r)=>n>=O||r<=e}):t}function hh(t){return t.field(sO,!1)||te.empty}function Sr(t,e,O){var i;let n=null;return(i=t.field(sO,!1))===null||i===void 0||i.between(e,O,(r,a)=>{(!n||n.from>r)&&(n={from:r,to:a})}),n}function dT(t,e,O){let i=!1;return t.between(e,e,(n,r)=>{n==e&&r==O&&(i=!0)}),i}function fh(t,e){return t.field(sO,!1)?e:e.concat(A.appendConfig.of(dh()))}var Ap=t=>{for(let e of ch(t)){let O=Qn(t.state,e.from,e.to);if(O)return t.dispatch({effects:fh(t.state,[GO.of(O),Po(t,O)])}),!0}return!1},Lp=t=>{if(!t.state.field(sO,!1))return!1;let e=[];for(let O of ch(t)){let i=Sr(t.state,O.from,O.to);i&&e.push(hO.of(i),Po(t,i,!1))}return e.length&&t.dispatch({effects:e}),e.length>0};function Po(t,e,O=!0){let i=t.state.doc.lineAt(e.from).number,n=t.state.doc.lineAt(e.to).number;return _.announce.of(`${t.state.phrase(O?"Folded lines":"Unfolded lines")} ${i} ${t.state.phrase("to")} ${n}.`)}var Ip=t=>{let{state:e}=t,O=[];for(let i=0;i{let e=t.state.field(sO,!1);if(!e||!e.size)return!1;let O=[];return e.between(0,t.state.doc.length,(i,n)=>{O.push(hO.of({from:i,to:n}))}),t.dispatch({effects:O}),!0};function QT(t,e){for(let O=e;;){let i=Qn(t.state,O.from,O.to);if(i&&i.to>e.from)return i;if(!O.from)return null;O=t.lineBlockAt(O.from-1)}}var $T=t=>{let e=[];for(let O of ch(t)){let i=Sr(t.state,O.from,O.to);if(i)e.push(hO.of(i),Po(t,i,!1));else{let n=QT(t,O);n&&e.push(GO.of(n),Po(t,n))}}return e.length>0&&t.dispatch({effects:fh(t.state,e)}),!!e.length},pT=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:Ap},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:Lp},{key:"Ctrl-Alt-[",run:Ip},{key:"Ctrl-Alt-]",run:Mp}],mT={placeholderDOM:null,preparePlaceholder:null,placeholderText:"\u2026"},uh=z.define({combine(t){return xe(t,mT)}});function dh(t){let e=[sO,ST];return t&&e.push(uh.of(t)),e}function Dp(t,e){let{state:O}=t,i=O.facet(uh),n=a=>{let o=t.lineBlockAt(t.posAtDOM(a.target)),s=Sr(t.state,o.from,o.to);s&&t.dispatch({effects:hO.of(s)}),a.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(t,n,e);let r=document.createElement("span");return r.textContent=i.placeholderText,r.setAttribute("aria-label",O.phrase("folded code")),r.title=O.phrase("unfold"),r.className="cm-foldPlaceholder",r.onclick=n,r}var _p=W.replace({widget:new class extends Ae{toDOM(t){return Dp(t,null)}}}),Oh=class extends Ae{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return Dp(e,this.value)}},gT={openText:"\u2304",closedText:"\u203A",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1},gr=class extends nt{constructor(e,O){super(),this.config=e,this.open=O}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let O=document.createElement("span");return O.textContent=this.open?this.config.openText:this.config.closedText,O.title=e.state.phrase(this.open?"Fold line":"Unfold line"),O}};function PT(t={}){let e={...gT,...t},O=new gr(e,!0),i=new gr(e,!1),n=Oe.fromClass(class{constructor(a){this.from=a.viewport.from,this.markers=this.buildMarkers(a)}update(a){(a.docChanged||a.viewportChanged||a.startState.facet(Yt)!=a.state.facet(Yt)||a.startState.field(sO,!1)!=a.state.field(sO,!1)||N(a.startState)!=N(a.state)||e.foldingChanged(a))&&(this.markers=this.buildMarkers(a.view))}buildMarkers(a){let o=new Re;for(let s of a.viewportLineBlocks){let l=Sr(a.state,s.from,s.to)?i:Qn(a.state,s.from,s.to)?O:null;l&&o.add(s.from,s.from,l)}return o.finish()}}),{domEventHandlers:r}=e;return[n,ao({class:"cm-foldGutter",markers(a){var o;return((o=a.plugin(n))===null||o===void 0?void 0:o.markers)||te.empty},initialSpacer(){return new gr(e,!1)},domEventHandlers:{...r,click:(a,o,s)=>{if(r.click&&r.click(a,o,s))return!0;let l=Sr(a.state,o.from,o.to);if(l)return a.dispatch({effects:hO.of(l)}),!0;let c=Qn(a.state,o.from,o.to);return c?(a.dispatch({effects:GO.of(c)}),!0):!1}}}),dh()]}var ST=_.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}}),Xr=class t{constructor(e,O){this.specs=e;let i;function n(o){let s=Pt.newName();return(i||(i=Object.create(null)))["."+s]=o,s}let r=typeof O.all=="string"?O.all:O.all?n(O.all):void 0,a=O.scope;this.scope=a instanceof Ze?o=>o.prop(Nt)==a.data:a?o=>o==a:void 0,this.style=Kc(e.map(o=>({tag:o.tag,class:o.class||n(Object.assign({},o,{tag:null}))})),{all:r}).style,this.module=i?new Pt(i):null,this.themeType=O.themeType}static define(e,O){return new t(e,O||{})}},ih=z.define(),Np=z.define({combine(t){return t.length?[t[0]]:null}});function po(t){let e=t.facet(ih);return e.length?e:t.facet(Np)}function XT(t,e){let O=[bT],i;return t instanceof Xr&&(t.module&&O.push(_.styleModule.of(t.module)),i=t.themeType),e?.fallback?O.push(Np.of(t)):i?O.push(ih.computeN([_.darkTheme],n=>n.facet(_.darkTheme)==(i=="dark")?[t]:[])):O.push(ih.of(t)),O}function Qh(t,e,O){let i=po(t),n=null;if(i){for(let r of i)if(!r.scope||O&&r.scope(O)){let a=r.style(e);a&&(n=n?n+" "+a:a)}}return n}var nh=class{constructor(e){this.markCache=Object.create(null),this.tree=N(e.state),this.decorations=this.buildDeco(e,po(e.state)),this.decoratedTo=e.viewport.to}update(e){let O=N(e.state),i=po(e.state),n=i!=po(e.startState),{viewport:r}=e.view,a=e.changes.mapPos(this.decoratedTo,1);O.length=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=a):(O!=this.tree||e.viewportChanged||n)&&(this.tree=O,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,O){if(!O||!this.tree.length)return W.none;let i=new Re;for(let{from:n,to:r}of e.visibleRanges)pr(this.tree,O,(a,o,s)=>{i.add(a,o,this.markCache[s]||(this.markCache[s]=W.mark({class:s})))},n,r);return i.finish()}},bT=Ie.high(Oe.fromClass(nh,{decorations:t=>t.decorations})),xT=Xr.define([{tag:u.meta,color:"#404740"},{tag:u.link,textDecoration:"underline"},{tag:u.heading,textDecoration:"underline",fontWeight:"bold"},{tag:u.emphasis,fontStyle:"italic"},{tag:u.strong,fontWeight:"bold"},{tag:u.strikethrough,textDecoration:"line-through"},{tag:u.keyword,color:"#708"},{tag:[u.atom,u.bool,u.url,u.contentSeparator,u.labelName],color:"#219"},{tag:[u.literal,u.inserted],color:"#164"},{tag:[u.string,u.deleted],color:"#a11"},{tag:[u.regexp,u.escape,u.special(u.string)],color:"#e40"},{tag:u.definition(u.variableName),color:"#00f"},{tag:u.local(u.variableName),color:"#30a"},{tag:[u.typeName,u.namespace],color:"#085"},{tag:u.className,color:"#167"},{tag:[u.special(u.variableName),u.macroName],color:"#256"},{tag:u.definition(u.propertyName),color:"#00c"},{tag:u.comment,color:"#940"},{tag:u.invalid,color:"#f00"}]),kT=_.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Bp=1e4,Fp="()[]{}",Hp=z.define({combine(t){return xe(t,{afterCursor:!0,brackets:Fp,maxScanDistance:Bp,renderMatch:TT})}}),yT=W.mark({class:"cm-matchingBracket"}),wT=W.mark({class:"cm-nonmatchingBracket"});function TT(t){let e=[],O=t.matched?yT:wT;return e.push(O.range(t.start.from,t.start.to)),t.end&&e.push(O.range(t.end.from,t.end.to)),e}function Zp(t){let e=[],O=t.facet(Hp);for(let i of t.selection.ranges){if(!i.empty)continue;let n=yt(t,i.head,-1,O)||i.head>0&&yt(t,i.head-1,1,O)||O.afterCursor&&(yt(t,i.head,1,O)||i.headt.decorations}),_T=[vT,kT];function ZT(t={}){return[Hp.of(t),_T]}var pn=new L;function rh(t,e,O){let i=t.prop(e<0?L.openedBy:L.closedBy);if(i)return i;if(t.name.length==1){let n=O.indexOf(t.name);if(n>-1&&n%2==(e<0?1:0))return[O[n+e]]}return null}function ah(t){let e=t.type.prop(pn);return e?e(t.node):t}function yt(t,e,O,i={}){let n=i.maxScanDistance||Bp,r=i.brackets||Fp,a=N(t),o=a.resolveInner(e,O);for(let s=o;s;s=s.parent){let l=rh(s.type,O,r);if(l&&s.from0?e>=c.from&&ec.from&&e<=c.to))return RT(t,e,O,s,c,l,r)}}return YT(t,e,O,a,o.type,n,r)}function RT(t,e,O,i,n,r,a){let o=i.parent,s={from:n.from,to:n.to},l=0,c=o?.cursor();if(c&&(O<0?c.childBefore(i.from):c.childAfter(i.to)))do if(O<0?c.to<=i.from:c.from>=i.to){if(l==0&&r.indexOf(c.type.name)>-1&&c.from0)return null;let l={from:O<0?e-1:e,to:O>0?e+1:e},c=t.doc.iterRange(e,O>0?t.doc.length:0),h=0;for(let f=0;!c.next().done&&f<=r;){let d=c.value;O<0&&(f+=d.length);let Q=e+f*O;for(let $=O>0?0:d.length-1,p=O>0?d.length:-1;$!=p;$+=O){let m=a.indexOf(d[$]);if(!(m<0||i.resolveInner(Q+$,1).type!=n))if(m%2==0==O>0)h++;else{if(h==1)return{start:l,end:{from:Q+$,to:Q+$+1},matched:m>>1==s>>1};h--}}O>0&&(f+=d.length)}return c.done?{start:l,matched:!1}:null}function zT(t){return{name:t.name||"",token:t.token,blankLine:t.blankLine||(()=>{}),startState:t.startState||(()=>!0),copyState:t.copyState||qT,indent:t.indent||(()=>null),languageData:t.languageData||{},tokenTable:t.tokenTable||ph,mergeTokens:t.mergeTokens!==!1}}function qT(t){if(typeof t!="object")return t;let e={};for(let O in t){let i=t[O];e[O]=i instanceof Array?i.slice():i}return e}var Rp=new WeakMap,oh=class t extends Ze{constructor(e){let O=mi(e.languageData),i=zT(e),n,r=new class extends aO{createParse(a,o,s){return new sh(n,a,o,s)}};super(O,r,[],e.name),this.topNode=jT(O,this),n=this,this.streamParser=i,this.stateAfter=new L({perNode:!0}),this.tokenTable=e.tokenTable?new So(i.tokenTable):WT}static define(e){return new t(e)}getIndent(e){let O,{overrideIndentation:i}=e.options;i&&(O=Rp.get(e.state),O!=null&&O1e4)return null;for(;r=i&&O+e.length<=n&&e.prop(t.stateAfter);if(r)return{state:t.streamParser.copyState(r),pos:O+e.length};for(let a=e.children.length-1;a>=0;a--){let o=e.children[a],s=O+e.positions[a],l=o instanceof H&&s=e.length)return e;!n&&O==0&&e.type==t.topNode&&(n=!0);for(let r=e.children.length-1;r>=0;r--){let a=e.positions[r],o=e.children[r],s;if(aO&&$h(t,r.tree,0-r.offset,O,o),l;if(s&&s.pos<=i&&(l=Kp(t,r.tree,O+r.offset,s.pos+r.offset,!1)))return{state:s.state,tree:l}}return{state:t.streamParser.startState(n?wt(n):4),tree:H.empty}}var sh=class{constructor(e,O,i,n){this.lang=e,this.input=O,this.fragments=i,this.ranges=n,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=n[n.length-1].to;let r=WO.get(),a=n[0].from,{state:o,tree:s}=UT(e,i,a,this.to,r?.state);this.state=o,this.parsedPos=this.chunkStart=a+s.length;for(let l=0;ll.from<=r.viewport.from&&l.to>=r.viewport.from)&&(this.state=this.lang.streamParser.startState(wt(r.state)),r.skipUntilInView(this.parsedPos,r.viewport.from),this.parsedPos=r.viewport.from),this.moveRangeIndex()}advance(){let e=WO.get(),O=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(O,this.chunkStart+512);for(e&&(i=Math.min(i,e.viewport.to));this.parsedPos=O?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,O),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let O=this.input.chunk(e);if(this.input.lineChunks)O==` +`&&(O="");else{let i=O.indexOf(` +`);i>-1&&(O=O.slice(0,i))}return e+O.length<=this.to?O:O.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,O=this.lineAfter(e),i=e+O.length;for(let n=this.rangeIndex;;){let r=this.ranges[n].to;if(r>=i||(O=O.slice(0,r-(i-O.length)),n++,n==this.ranges.length))break;let a=this.ranges[n].from,o=this.lineAfter(a);O+=o,i=a+o.length}return{line:O,end:i}}skipGapsTo(e,O,i){for(;;){let n=this.ranges[this.rangeIndex].to,r=e+O;if(i>0?n>r:n>=r)break;let a=this.ranges[++this.rangeIndex].from;O+=a-n}return O}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){n=this.skipGapsTo(O,n,1),O+=n;let o=this.chunk.length;n=this.skipGapsTo(i,n,-1),i+=n,r+=this.chunk.length-o}let a=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&r==4&&a>=0&&this.chunk[a]==e&&this.chunk[a+2]==O?this.chunk[a+2]=i:this.chunk.push(e,O,i,r),n}parseLine(e){let{line:O,end:i}=this.nextLine(),n=0,{streamParser:r}=this.lang,a=new pi(O,e?e.state.tabSize:4,e?wt(e.state):2);if(a.eol())r.blankLine(this.state,a.indentUnit);else for(;!a.eol();){let o=Jp(r.token,a,this.state);if(o&&(n=this.emitToken(this.lang.tokenTable.resolve(o),this.parsedPos+a.start,this.parsedPos+a.pos,n)),a.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPose.start)return n}throw new Error("Stream parser failed to advance stream.")}var ph=Object.create(null),br=[ke.none],VT=new rO(br),Yp=[],zp=Object.create(null),em=Object.create(null);for(let[t,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])em[t]=tm(ph,e);var So=class{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),em)}resolve(e){return e?this.table[e]||(this.table[e]=tm(this.extra,e)):0}},WT=new So(ph);function th(t,e){Yp.indexOf(t)>-1||(Yp.push(t),console.warn(e))}function tm(t,e){let O=[];for(let o of e.split(" ")){let s=[];for(let l of o.split(".")){let c=t[l]||u[l];c?typeof c=="function"?s.length?s=s.map(c):th(l,`Modifier ${l} used at start of tag`):s.length?th(l,`Tag ${l} used as modifier`):s=Array.isArray(c)?c:[c]:th(l,`Unknown highlighting tag ${l}`)}for(let l of s)O.push(l)}if(!O.length)return 0;let i=e.replace(/ /g,"_"),n=i+" "+O.map(o=>o.id),r=zp[n];if(r)return r.id;let a=zp[n]=ke.define({id:br.length,name:i,props:[re({[i]:O})]});return br.push(a),a.id}function jT(t,e){let O=ke.define({id:br.length,name:"Document",props:[Nt.add(()=>t),se.add(()=>i=>e.getIndent(i))],top:!0});return br.push(O),O}function Om(t){return t.length<=4096&&/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac\ufb50-\ufdff]/.test(t)}function im(t){for(let e=t.iter();!e.next().done;)if(Om(e.value))return!0;return!1}function GT(t){let e=!1;return t.iterChanges((O,i,n,r,a)=>{!e&&im(a)&&(e=!0)}),e}var lh=z.define({combine:t=>t.some(e=>e)});function CT(t={}){let e=[ET];return t.alwaysIsolate&&e.push(lh.of(!0)),e}var ET=Oe.fromClass(class{constructor(t){this.always=t.state.facet(lh)||t.textDirection!=ne.LTR||t.state.facet(_.perLineTextDirection),this.hasRTL=!this.always&&im(t.state.doc),this.tree=N(t.state),this.decorations=this.always||this.hasRTL?qp(t,this.tree,this.always):W.none}update(t){let e=t.state.facet(lh)||t.view.textDirection!=ne.LTR||t.state.facet(_.perLineTextDirection);if(!e&&!this.hasRTL&>(t.changes)&&(this.hasRTL=!0),!e&&!this.hasRTL)return;let O=N(t.state);(e!=this.always||O!=this.tree||t.docChanged||t.viewportChanged)&&(this.tree=O,this.always=e,this.decorations=qp(t.view,O,e))}},{provide:t=>{function e(O){var i,n;return(n=(i=O.plugin(t))===null||i===void 0?void 0:i.decorations)!==null&&n!==void 0?n:W.none}return[_.outerDecorations.of(e),Ie.lowest(_.bidiIsolatedRanges.of(e))]}});function qp(t,e,O){let i=new Re,n=t.visibleRanges;O||(n=AT(n,t.state.doc));for(let{from:r,to:a}of n)e.iterate({enter:o=>{let s=o.type.prop(L.isolate);s&&i.add(o.from,o.to,LT[s])},from:r,to:a});return i.finish()}function AT(t,e){let O=e.iter(),i=0,n=[],r=null;for(let{from:a,to:o}of t)if(!(r&&r.to>a&&(a=r.to,a>=o)))for(i+O.value.lengths-10?r.to=Math.min(o,l):n.push(r={from:s,to:Math.min(o,l)})),l>=o)break;i=l,O.next()}return n}var LT={rtl:W.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:ne.RTL}),ltr:W.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:ne.LTR}),auto:W.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var am=t=>{let{state:e}=t,O=e.doc.lineAt(e.selection.main.from),i=Th(t.state,O.from);return i.line?om(t):i.block?lm(t):!1};function Pi(t,e){return({state:O,dispatch:i})=>{if(O.readOnly)return!1;let n=t(e,O);return n?(i(O.update(n)),!0):!1}}var om=Pi(vh,0),IT=Pi(vh,1),MT=Pi(vh,2),sm=Pi(To,0),DT=Pi(To,1),NT=Pi(To,2),lm=Pi((t,e)=>To(t,e,FT(e)),0);function Th(t,e){let O=t.languageDataAt("commentTokens",e,1);return O.length?O[0]:{}}var kr=50;function BT(t,{open:e,close:O},i,n){let r=t.sliceDoc(i-kr,i),a=t.sliceDoc(n,n+kr),o=/\s*$/.exec(r)[0].length,s=/^\s*/.exec(a)[0].length,l=r.length-o;if(r.slice(l-e.length,l)==e&&a.slice(s,s+O.length)==O)return{open:{pos:i-o,margin:o&&1},close:{pos:n+s,margin:s&&1}};let c,h;n-i<=2*kr?c=h=t.sliceDoc(i,n):(c=t.sliceDoc(i,i+kr),h=t.sliceDoc(n-kr,n));let f=/^\s*/.exec(c)[0].length,d=/\s*$/.exec(h)[0].length,Q=h.length-d-O.length;return c.slice(f,f+e.length)==e&&h.slice(Q,Q+O.length)==O?{open:{pos:i+f+e.length,margin:/\s/.test(c.charAt(f+e.length))?1:0},close:{pos:n-d-O.length,margin:/\s/.test(h.charAt(Q-1))?1:0}}:null}function FT(t){let e=[];for(let O of t.selection.ranges){let i=t.doc.lineAt(O.from),n=O.to<=i.to?i:t.doc.lineAt(O.to);n.from>i.from&&n.from==O.to&&(n=O.to==i.to+1?i:t.doc.lineAt(O.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=n.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:n.to})}return e}function To(t,e,O=e.selection.ranges){let i=O.map(r=>Th(e,r.from).block);if(!i.every(r=>r))return null;let n=O.map((r,a)=>BT(e,i[a],r.from,r.to));if(t!=2&&!n.every(r=>r))return{changes:e.changes(O.map((r,a)=>n[a]?[]:[{from:r.from,insert:i[a].open+" "},{from:r.to,insert:" "+i[a].close}]))};if(t!=1&&n.some(r=>r)){let r=[];for(let a=0,o;an&&(r==a||a>h.from)){n=h.from;let f=/^\s*/.exec(h.text)[0].length,d=f==h.length,Q=h.text.slice(f,f+l.length)==l?f:-1;fr.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:o,token:s,indent:l,empty:c,single:h}of i)(h||!c)&&r.push({from:o.from+l,insert:s+" "});let a=e.changes(r);return{changes:a,selection:e.selection.map(a,1)}}else if(t!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:a,comment:o,token:s}of i)if(o>=0){let l=a.from+o,c=l+s.length;a.text[c-a.from]==" "&&c++,r.push({from:l,to:c})}return{changes:r}}return null}var gh=Ee.define(),cm=Ee.define(),hm=z.define(),fm=z.define({combine(t){return xe(t,{minDepth:100,newGroupDelay:500,joinToEvent:(e,O)=>O},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,O)=>(i,n)=>e(i,n)||O(i,n)})}}),yr=Qe.define({create(){return gi.empty},update(t,e){let O=e.state.facet(fm),i=e.annotation(gh);if(i){let s=zt.fromTransaction(e,i.selection),l=i.side,c=l==0?t.undone:t.done;return s?c=ko(c,c.length,O.minDepth,s):c=mm(c,e.startState.selection),new gi(l==0?i.rest:c,l==0?c:i.rest)}let n=e.annotation(cm);if((n=="full"||n=="before")&&(t=t.isolate()),e.annotation(Pe.addToHistory)===!1)return e.changes.empty?t:t.addMapping(e.changes.desc);let r=zt.fromTransaction(e),a=e.annotation(Pe.time),o=e.annotation(Pe.userEvent);return r?t=t.addChanges(r,a,o,O,e):e.selection&&(t=t.addSelection(e.startState.selection,a,o,O.newGroupDelay)),(n=="full"||n=="after")&&(t=t.isolate()),t},toJSON(t){return{done:t.done.map(e=>e.toJSON()),undone:t.undone.map(e=>e.toJSON())}},fromJSON(t){return new gi(t.done.map(zt.fromJSON),t.undone.map(zt.fromJSON))}});function HT(t={}){return[yr,fm.of(t),_.domEventHandlers({beforeinput(e,O){let i=e.inputType=="historyUndo"?_h:e.inputType=="historyRedo"?xo:null;return i?(e.preventDefault(),i(O)):!1}})]}var KT=yr;function vo(t,e){return function({state:O,dispatch:i}){if(!e&&O.readOnly)return!1;let n=O.field(yr,!1);if(!n)return!1;let r=n.pop(t,O,e);return r?(i(r),!0):!1}}var _h=vo(0,!1),xo=vo(1,!1),um=vo(0,!0),dm=vo(1,!0);function Qm(t){return function(e){let O=e.field(yr,!1);if(!O)return 0;let i=t==0?O.done:O.undone;return i.length-(i.length&&!i[0].changes?1:0)}}var JT=Qm(0),ev=Qm(1);function $m(t){return function(e){let O=e.field(yr,!1);if(!O)return!1;let i=t==0?O.done:O.undone;return i.length>0&&i[0].selectionsAfter.length>0}}var tv=$m(0),Ov=$m(0),zt=class t{constructor(e,O,i,n,r){this.changes=e,this.effects=O,this.mapped=i,this.startSelection=n,this.selectionsAfter=r}setSelAfter(e){return new t(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,O,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(O=this.mapped)===null||O===void 0?void 0:O.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(n=>n.toJSON())}}static fromJSON(e){return new t(e.changes&&Ye.fromJSON(e.changes),[],e.mapped&&Ct.fromJSON(e.mapped),e.startSelection&&X.fromJSON(e.startSelection),e.selectionsAfter.map(X.fromJSON))}static fromTransaction(e,O){let i=Tt;for(let n of e.startState.facet(hm)){let r=n(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new t(e.changes.invert(e.startState.doc),i,void 0,O||e.startState.selection,Tt)}static selection(e){return new t(void 0,Tt,void 0,void 0,e)}};function ko(t,e,O,i){let n=e+1>O+20?e-O-1:0,r=t.slice(n,e);return r.push(i),r}function iv(t,e){let O=[],i=!1;return t.iterChangedRanges((n,r)=>O.push(n,r)),e.iterChangedRanges((n,r,a,o)=>{for(let s=0;s=l&&a<=c&&(i=!0)}}),i}function nv(t,e){return t.ranges.length==e.ranges.length&&t.ranges.filter((O,i)=>O.empty!=e.ranges[i].empty).length===0}function pm(t,e){return t.length?e.length?t.concat(e):t:e}var Tt=[],rv=200;function mm(t,e){if(t.length){let O=t[t.length-1],i=O.selectionsAfter.slice(Math.max(0,O.selectionsAfter.length-rv));return i.length&&i[i.length-1].eq(e)?t:(i.push(e),ko(t,t.length-1,1e9,O.setSelAfter(i)))}else return[zt.selection([e])]}function av(t){let e=t[t.length-1],O=t.slice();return O[t.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),O}function mh(t,e){if(!t.length)return t;let O=t.length,i=Tt;for(;O;){let n=ov(t[O-1],e,i);if(n.changes&&!n.changes.empty||n.effects.length){let r=t.slice(0,O);return r[O-1]=n,r}else e=n.mapped,O--,i=n.selectionsAfter}return i.length?[zt.selection(i)]:Tt}function ov(t,e,O){let i=pm(t.selectionsAfter.length?t.selectionsAfter.map(o=>o.map(e)):Tt,O);if(!t.changes)return zt.selection(i);let n=t.changes.map(e),r=e.mapDesc(t.changes,!0),a=t.mapped?t.mapped.composeDesc(r):r;return new zt(n,A.mapEffects(t.effects,e),a,t.startSelection.map(r),i)}var sv=/^(input\.type|delete)($|\.)/,gi=class t{constructor(e,O,i=0,n=void 0){this.done=e,this.undone=O,this.prevTime=i,this.prevUserEvent=n}isolate(){return this.prevTime?new t(this.done,this.undone):this}addChanges(e,O,i,n,r){let a=this.done,o=a[a.length-1];return o&&o.changes&&!o.changes.empty&&e.changes&&(!i||sv.test(i))&&(!o.selectionsAfter.length&&O-this.prevTime0&&O-this.prevTimeO.empty?t.moveByChar(O,e):Si(O,e))}function De(t){return t.textDirectionAt(t.state.selection.main.head)==ne.LTR}var Zh=t=>_o(t,!De(t)),Rh=t=>_o(t,De(t)),cv=t=>_o(t,!0),hv=t=>_o(t,!1);function Yh(t,e,O){let i=e.head,n=t.doc.lineAt(i);return i==(O?n.to:n.from)?i=O?Math.min(t.doc.length,n.to+1):Math.max(0,n.from-1):i=n.from+be(n.text,i-n.from,O),X.cursor(i,O?-1:1)}function gm(t,e){return ot(t,O=>O.empty?Yh(t.state,O,e):Si(O,e))}var fv=t=>gm(t,!0),uv=t=>gm(t,!1);function Zo(t,e){return ot(t,O=>O.empty?t.moveByGroup(O,e):Si(O,e))}var Pm=t=>Zo(t,!De(t)),Sm=t=>Zo(t,De(t)),dv=t=>Zo(t,!0),Qv=t=>Zo(t,!1);function zh(t,e,O){let i=t.state.charCategorizer(e),n=i(O),r=n!=ee.Space;return a=>{let o=i(a);return o!=ee.Space?r&&o==n:(r=!1,!0)}}var $v=t=>ot(t,e=>e.empty?t.moveByChar(e,!0,O=>zh(t,e.head,O)):Si(e,!0)),rm=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function Xm(t,e,O){let i=t.state.charCategorizer(e.from),n=ee.Space,r=e.from,a=0,o=!1,s=!1,l=!1,c=f=>{if(o)return!1;r+=O?f.length:-f.length;let d=i(f),Q;if(d==ee.Word&&f.charCodeAt(0)<128&&/[\W_]/.test(f)&&(d=-1),n==ee.Space&&(n=d),n!=d)return!1;if(n==ee.Word)if(f.toLowerCase()==f){if(!O&&s)return!1;l=!0}else if(l){if(O)return!1;o=!0}else{if(s&&O&&i(Q=t.state.sliceDoc(r,r+1))==ee.Word&&Q.toLowerCase()==Q)return!1;s=!0}return a++,!0},h=t.moveByChar(e,O,f=>(c(f),c));if(rm&&n==ee.Word&&h.from==e.from+a*(O?1:-1)){let f=Math.min(e.head,h.head),d=Math.max(e.head,h.head),Q=t.state.sliceDoc(f,d);if(Q.length>1&&/[\u4E00-\uffff]/.test(Q)){let $=Array.from(rm.segment(Q));if($.length>1)return O?X.cursor(e.head+$[1].index,-1):X.cursor(h.head+$[$.length-1].index,1)}}return h}function bm(t,e){return ot(t,O=>O.empty?Xm(t,O,e):Si(O,e))}var pv=t=>bm(t,!0),mv=t=>bm(t,!1);function gv(t,e,O){if(e.type.prop(O))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(t.sliceDoc(e.from,e.to)))||e.firstChild}function Ro(t,e,O){let i=N(t).resolveInner(e.head),n=O?L.closedBy:L.openedBy;for(let s=e.head;;){let l=O?i.childAfter(s):i.childBefore(s);if(!l)break;gv(t,l,n)?i=l:s=O?l.to:l.from}let r=i.type.prop(n),a,o;return r&&(a=O?yt(t,i.from,1):yt(t,i.to,-1))&&a.matched?o=O?a.end.to:a.end.from:o=O?i.to:i.from,X.cursor(o,O?-1:1)}var xm=t=>ot(t,e=>Ro(t.state,e,!De(t))),km=t=>ot(t,e=>Ro(t.state,e,De(t)));function ym(t,e){return ot(t,O=>{if(!O.empty)return Si(O,e);let i=t.moveVertically(O,e);return i.head!=O.head?i:t.moveToLineBoundary(O,e)})}var qh=t=>ym(t,!1),Uh=t=>ym(t,!0);function wm(t){let e=t.scrollDOM.clientHeighta.empty?t.moveVertically(a,e,O.height):Si(a,e));if(n.eq(i.selection))return!1;let r;if(O.selfScroll){let a=t.coordsAtPos(i.selection.main.head),o=t.scrollDOM.getBoundingClientRect(),s=o.top+O.marginTop,l=o.bottom-O.marginBottom;a&&a.top>s&&a.bottomTm(t,!1),yo=t=>Tm(t,!0);function CO(t,e,O){let i=t.lineBlockAt(e.head),n=t.moveToLineBoundary(e,O);if(n.head==e.head&&n.head!=(O?i.to:i.from)&&(n=t.moveToLineBoundary(e,O,!1)),!O&&n.head==i.from&&i.length){let r=/^\s*/.exec(t.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(n=X.cursor(i.from+r))}return n}var vm=t=>ot(t,e=>CO(t,e,!0)),_m=t=>ot(t,e=>CO(t,e,!1)),Zm=t=>ot(t,e=>CO(t,e,!De(t))),Rm=t=>ot(t,e=>CO(t,e,De(t))),Ym=t=>ot(t,e=>t.moveToLineBoundary(e,!1,!1)),zm=t=>ot(t,e=>t.moveToLineBoundary(e,!0,!1));function qm(t,e,O){let i=!1,n=mn(t.selection,r=>{let a=yt(t,r.head,-1)||yt(t,r.head,1)||r.head>0&&yt(t,r.head-1,1)||r.headqm(t,e,!1),Pv=({state:t,dispatch:e})=>qm(t,e,!0);function Ne(t,e,O){let i=mn(t.state.selection,n=>{n.undirectional&&n.head>=n.anchor!=e&&(n=X.range(n.head,n.anchor));let r=O(n);return X.range(n.anchor,r.head,r.goalColumn,r.bidiLevel||void 0,r.assoc)});return i.eq(t.state.selection)?!1:(t.dispatch(qt(t.state,i)),!0)}function Yo(t,e){return Ne(t,e,O=>t.moveByChar(O,e))}var Vh=t=>Yo(t,!De(t)),Wh=t=>Yo(t,De(t)),Sv=t=>Yo(t,!0),Xv=t=>Yo(t,!1),bv=t=>Ne(t,!0,e=>Yh(t.state,e,!0)),xv=t=>Ne(t,!1,e=>Yh(t.state,e,!1));function zo(t,e){return Ne(t,e,O=>t.moveByGroup(O,e))}var Vm=t=>zo(t,!De(t)),Wm=t=>zo(t,De(t)),kv=t=>zo(t,!0),yv=t=>zo(t,!1),wv=t=>Ne(t,!0,e=>t.moveByChar(e,!0,O=>zh(t,e.head,O)));function jm(t,e){return Ne(t,e,O=>Xm(t,O,e))}var Tv=t=>jm(t,!0),vv=t=>jm(t,!1),Gm=t=>{let e=!De(t);return Ne(t,e,O=>Ro(t.state,O,e))},Cm=t=>{let e=De(t);return Ne(t,e,O=>Ro(t.state,O,e))};function Em(t,e){return Ne(t,e,O=>t.moveVertically(O,e))}var jh=t=>Em(t,!1),Gh=t=>Em(t,!0);function Am(t,e){return Ne(t,e,O=>t.moveVertically(O,e,wm(t).height))}var Sh=t=>Am(t,!1),Xh=t=>Am(t,!0),Lm=t=>Ne(t,!0,e=>CO(t,e,!0)),Im=t=>Ne(t,!1,e=>CO(t,e,!1)),Mm=t=>{let e=!De(t);return Ne(t,e,O=>CO(t,O,e))},Dm=t=>{let e=De(t);return Ne(t,e,O=>CO(t,O,e))},Nm=t=>Ne(t,!1,e=>X.cursor(t.lineBlockAt(e.head).from)),Bm=t=>Ne(t,!0,e=>X.cursor(t.lineBlockAt(e.head).to)),bh=({state:t,dispatch:e})=>(e(qt(t,{anchor:0})),!0),xh=({state:t,dispatch:e})=>(e(qt(t,{anchor:t.doc.length})),!0),kh=({state:t,dispatch:e})=>(e(qt(t,{anchor:t.selection.main.anchor,head:0})),!0),yh=({state:t,dispatch:e})=>(e(qt(t,{anchor:t.selection.main.anchor,head:t.doc.length})),!0),Fm=({state:t,dispatch:e})=>(e(t.update({selection:{anchor:0,head:t.doc.length},userEvent:"select"})),!0),Hm=({state:t,dispatch:e})=>{let O=qo(t).map(({from:i,to:n})=>X.undirectionalRange(i,Math.min(n+1,t.doc.length)));return e(t.update({selection:X.create(O),userEvent:"select"})),!0},Km=({state:t,dispatch:e})=>{let O=mn(t.selection,i=>{let n=N(t),r=n.resolveStack(i.from,1);if(i.empty){let a=n.resolveStack(i.from,-1);a.node.from>=r.node.from&&a.node.to<=r.node.to&&(r=a)}for(let a=r;a;a=a.next){let{node:o}=a;if((o.from=i.to||o.to>i.to&&o.from<=i.from)&&a.next)return X.undirectionalRange(o.from,o.to)}return i});return O.eq(t.selection)?!1:(e(qt(t,O)),!0)};function Jm(t,e){let{state:O}=t,i=O.selection,n=O.selection.ranges.slice();for(let r of O.selection.ranges){let a=O.doc.lineAt(r.head);if(e?a.to0)for(let o=r;;){let s=t.moveVertically(o,e);if(s.heada.to){n.some(l=>l.head==s.head)||n.push(s);break}else{if(s.head==o.head)break;o=s}}}return n.length==i.ranges.length?!1:(t.dispatch(qt(O,X.create(n,n.length-1))),!0)}var eg=t=>Jm(t,!1),tg=t=>Jm(t,!0),Og=({state:t,dispatch:e})=>{let O=t.selection,i=null;return O.ranges.length>1?i=X.create([O.main]):O.main.empty||(i=X.create([X.cursor(O.main.head)])),i?(e(qt(t,i)),!0):!1};function Xi(t,e){if(t.state.readOnly)return!1;let O="delete.selection",{state:i}=t,n=i.changeByRange(r=>{let{from:a,to:o}=r;if(a==o){let s=e(r);sa&&(O="delete.forward",s=bo(t,s,!0)),a=Math.min(a,s),o=Math.max(o,s)}else a=bo(t,a,!1),o=bo(t,o,!0);return a==o?{range:r}:{changes:{from:a,to:o},range:X.cursor(a,an(t)))i.between(e,e,(n,r)=>{ne&&(e=O?r:n)});return e}var Ch=(t,e,O)=>Xi(t,i=>{let n=i.from,{state:r}=t,a=r.doc.lineAt(n),o,s;if(O&&!e&&n>a.from&&nCh(t,!1,!0),_v=t=>Ch(t,!1,!1),Eh=t=>Ch(t,!0,!1),ig=(t,e)=>Xi(t,O=>{let i=O.head,{state:n}=t,r=n.doc.lineAt(i),a=n.charCategorizer(i);for(let o=null;;){if(i==(e?r.to:r.from)){i==O.head&&r.number!=(e?n.doc.lines:1)&&(i+=e?1:-1);break}let s=be(r.text,i-r.from,e)+r.from,l=r.text.slice(Math.min(i,s)-r.from,Math.max(i,s)-r.from),c=a(l);if(o!=null&&c!=o)break;(l!=" "||i!=O.head)&&(o=c),i=s}return i}),Ah=t=>ig(t,!1),ng=t=>ig(t,!0),Zv=t=>Xi(t,e=>t.moveByChar(e,!0,O=>zh(t,e.head,O)).head),rg=t=>Xi(t,e=>{let O=t.lineBlockAt(e.head).to;return e.headXi(t,e=>{let O=t.lineBlockAt(e.head).from;return e.head>O?O:Math.max(0,e.head-1)}),ag=t=>Xi(t,e=>{let O=t.moveToLineBoundary(e,!1).head;return e.head>O?O:Math.max(0,e.head-1)}),og=t=>Xi(t,e=>{let O=t.moveToLineBoundary(e,!0).head;return e.head{if(t.readOnly)return!1;let O=[];for(let i=0,n="",r=t.doc.iter();;){if(r.next(),r.lineBreak||r.done){let a=n.search(/\s+$/);if(a>-1&&O.push({from:i-(n.length-a),to:i}),r.done)break;n=""}else n=r.value;i+=r.value.length}return O.length?(e(t.update({changes:O,userEvent:"delete"})),!0):!1},sg=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let O=t.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:K.of(["",""])},range:X.cursor(i.from)}));return e(t.update(O,{scrollIntoView:!0,userEvent:"input"})),!0},lg=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let O=t.changeByRange(i=>{if(!i.empty||i.from==0||i.from==t.doc.length)return{range:i};let n=i.from,r=t.doc.lineAt(n),a=n==r.from?n-1:be(r.text,n-r.from,!1)+r.from,o=n==r.to?n+1:be(r.text,n-r.from,!0)+r.from;return{changes:{from:a,to:o,insert:t.doc.slice(n,o).append(t.doc.slice(a,n))},range:X.cursor(o)}});return O.changes.empty?!1:(e(t.update(O,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function qo(t){let e=[],O=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.from),r=t.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=t.doc.lineAt(i.to-1)),O>=n.number){let a=e[e.length-1];a.to=r.to,a.ranges.push(i)}else e.push({from:n.from,to:r.to,ranges:[i]});O=r.number+1}return e}function cg(t,e,O){if(t.readOnly)return!1;let i=[],n=[];for(let r of qo(t)){if(O?r.to==t.doc.length:r.from==0)continue;let a=t.doc.lineAt(O?r.to+1:r.from-1),o=a.length+1;if(O){i.push({from:r.to,to:a.to},{from:r.from,insert:a.text+t.lineBreak});for(let s of r.ranges)n.push(X.range(Math.min(t.doc.length,s.anchor+o),Math.min(t.doc.length,s.head+o)))}else{i.push({from:a.from,to:r.from},{from:r.to,insert:t.lineBreak+a.text});for(let s of r.ranges)n.push(X.range(s.anchor-o,s.head-o))}}return i.length?(e(t.update({changes:i,scrollIntoView:!0,selection:X.create(n,t.selection.mainIndex),userEvent:"move.line"})),!0):!1}var hg=({state:t,dispatch:e})=>cg(t,e,!1),fg=({state:t,dispatch:e})=>cg(t,e,!0);function ug(t,e,O){if(t.readOnly)return!1;let i=[];for(let r of qo(t))O?i.push({from:r.from,insert:t.doc.slice(r.from,r.to)+t.lineBreak}):i.push({from:r.to,insert:t.lineBreak+t.doc.slice(r.from,r.to)});let n=t.changes(i);return e(t.update({changes:n,selection:t.selection.map(n,O?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var dg=({state:t,dispatch:e})=>ug(t,e,!1),Qg=({state:t,dispatch:e})=>ug(t,e,!0),$g=t=>{if(t.state.readOnly)return!1;let{state:e}=t,O=e.changes(qo(e).map(({from:n,to:r})=>(n>0?n--:r{let r;if(t.lineWrapping){let a=t.lineBlockAt(n.head),o=t.coordsAtPos(n.head,n.assoc||1);o&&(r=a.bottom+t.documentTop-o.bottom+t.defaultLineHeight/2)}return t.moveVertically(n,!0,r)}).map(O);return t.dispatch({changes:O,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0},zv=({state:t,dispatch:e})=>(e(t.update(t.replaceSelection(t.lineBreak),{scrollIntoView:!0,userEvent:"input"})),!0),qv=({state:t,dispatch:e})=>(e(t.update(t.changeByRange(O=>{let i=/^\s*/.exec(t.doc.lineAt(O.from).text)[0];return{changes:{from:O.from,to:O.to,insert:t.lineBreak+i},range:X.cursor(O.from+i.length+1)}}),{scrollIntoView:!0,userEvent:"input"})),!0);function Uv(t,e){if(/\(\)|\[\]|\{\}/.test(t.sliceDoc(e-1,e+1)))return{from:e,to:e};let O=N(t).resolveInner(e),i=O.childBefore(e),n=O.childAfter(e),r;return i&&n&&i.to<=e&&n.from>=e&&(r=i.type.prop(L.closedBy))&&r.indexOf(n.name)>-1&&t.doc.lineAt(i.to).from==t.doc.lineAt(n.from).from&&!/\S/.test(t.sliceDoc(i.to,n.from))?{from:i.to,to:n.from}:null}var wh=mg(!1),pg=mg(!0);function mg(t){return({state:e,dispatch:O})=>{if(e.readOnly)return!1;let i=e.changeByRange(n=>{let{from:r,to:a}=n,o=e.doc.lineAt(r),s=!t&&r==a&&Uv(e,r);t&&(r=a=(a<=o.to?o:e.doc.lineAt(a)).to);let l=new oO(e,{simulateBreak:r,simulateDoubleBreak:!!s}),c=$n(l,r);for(c==null&&(c=Me(/^\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));ao.from&&r{let n=[];for(let a=i.from;a<=i.to;){let o=t.doc.lineAt(a);o.number>O&&(i.empty||i.to>o.from)&&(e(o,n,i),O=o.number),a=o.to+1}let r=t.changes(n);return{changes:n,range:X.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}var gg=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let O=Object.create(null),i=new oO(t,{overrideIndentation:r=>{let a=O[r];return a??-1}}),n=Lh(t,(r,a,o)=>{let s=$n(i,r.from);if(s==null)return;/\S/.test(r.text)||(s=0);let l=/^\s*/.exec(r.text)[0],c=jO(t,s);(l!=c||o.fromt.readOnly?!1:(e(t.update(Lh(t,(O,i)=>{i.push({from:O.from,insert:t.facet(lO)})}),{userEvent:"input.indent"})),!0),Ih=({state:t,dispatch:e})=>t.readOnly?!1:(e(t.update(Lh(t,(O,i)=>{let n=/^\s*/.exec(O.text)[0];if(!n)return;let r=Me(n,t.tabSize),a=0,o=jO(t,Math.max(0,r-wt(t)));for(;a(t.setTabFocusMode(),!0),Vv=t=>(t.setTabFocusMode(2e3),!0),Wv=({state:t,dispatch:e})=>t.selection.ranges.some(O=>!O.empty)?Uo({state:t,dispatch:e}):(e(t.update(t.replaceSelection(" "),{scrollIntoView:!0,userEvent:"input"})),!0),Sg=[{key:"Ctrl-b",run:Zh,shift:Vh,preventDefault:!0},{key:"Ctrl-f",run:Rh,shift:Wh},{key:"Ctrl-p",run:qh,shift:jh},{key:"Ctrl-n",run:Uh,shift:Gh},{key:"Ctrl-a",run:Ym,shift:Nm},{key:"Ctrl-e",run:zm,shift:Bm},{key:"Ctrl-d",run:Eh},{key:"Ctrl-h",run:wo},{key:"Ctrl-k",run:rg},{key:"Ctrl-Alt-h",run:Ah},{key:"Ctrl-o",run:sg},{key:"Ctrl-t",run:lg},{key:"Ctrl-v",run:yo}],Xg=[{key:"ArrowLeft",run:Zh,shift:Vh,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:Pm,shift:Vm,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:Zm,shift:Mm,preventDefault:!0},{key:"ArrowRight",run:Rh,shift:Wh,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:Sm,shift:Wm,preventDefault:!0},{mac:"Cmd-ArrowRight",run:Rm,shift:Dm,preventDefault:!0},{key:"ArrowUp",run:qh,shift:jh,preventDefault:!0},{mac:"Cmd-ArrowUp",run:bh,shift:kh},{mac:"Ctrl-ArrowUp",run:Ph,shift:Sh},{key:"ArrowDown",run:Uh,shift:Gh,preventDefault:!0},{mac:"Cmd-ArrowDown",run:xh,shift:yh},{mac:"Ctrl-ArrowDown",run:yo,shift:Xh},{key:"PageUp",run:Ph,shift:Sh},{key:"PageDown",run:yo,shift:Xh},{key:"Home",run:_m,shift:Im,preventDefault:!0},{key:"Mod-Home",run:bh,shift:kh},{key:"End",run:vm,shift:Lm,preventDefault:!0},{key:"Mod-End",run:xh,shift:yh},{key:"Enter",run:wh,shift:wh},{key:"Mod-a",run:Fm},{key:"Backspace",run:wo,shift:wo,preventDefault:!0},{key:"Delete",run:Eh,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Ah,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:ng,preventDefault:!0},{mac:"Mod-Backspace",run:ag,preventDefault:!0},{mac:"Mod-Delete",run:og,preventDefault:!0}].concat(Sg.map(t=>({mac:t.key,run:t.run,shift:t.shift}))),jv=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:xm,shift:Gm},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:km,shift:Cm},{key:"Alt-ArrowUp",run:hg},{key:"Shift-Alt-ArrowUp",run:dg},{key:"Alt-ArrowDown",run:fg},{key:"Shift-Alt-ArrowDown",run:Qg},{key:"Mod-Alt-ArrowUp",run:eg},{key:"Mod-Alt-ArrowDown",run:tg},{key:"Escape",run:Og},{key:"Mod-Enter",run:pg},{key:"Alt-l",mac:"Ctrl-l",run:Hm},{key:"Mod-i",run:Km,preventDefault:!0},{key:"Mod-[",run:Ih},{key:"Mod-]",run:Uo},{key:"Mod-Alt-\\",run:gg},{key:"Shift-Mod-k",run:$g},{key:"Shift-Mod-\\",run:Um},{key:"Mod-/",run:am},{key:"Alt-A",mac:"Ctrl-A",run:sm},{key:"Ctrl-m",mac:"Shift-Alt-m",run:Pg}].concat(Xg),Gv={key:"Tab",run:Uo,shift:Ih};var qg={};ei(qg,{RegExpCursor:()=>Tr,SearchCursor:()=>fO,SearchQuery:()=>vr,closeSearchPanel:()=>Of,findNext:()=>_r,findPrevious:()=>Zr,getSearchQuery:()=>O0,gotoLine:()=>wg,highlightSelectionMatches:()=>Av,openSearchPanel:()=>tf,replaceAll:()=>Rg,replaceNext:()=>Bh,search:()=>Hv,searchKeymap:()=>o0,searchPanelOpen:()=>i0,selectMatches:()=>_g,selectNextOccurrence:()=>vg,selectSelectionMatches:()=>Zg,setSearchQuery:()=>Sn});var xg=typeof String.prototype.normalize=="function"?t=>t.normalize("NFKD"):t=>t,fO=class{constructor(e,O,i=0,n=e.length,r,a){this.test=a,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,n),this.bufferStart=i,this.normalize=r?o=>r(xg(o)):xg,this.query=this.normalize(O)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return ze(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let O=Bi(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=tt(e);let n=this.normalize(O);if(n.length)for(let r=0,a=i,o=!0;;r++){let s=n.charCodeAt(r),l=this.match(s,a,o,this.bufferPos+this.bufferStart,r==n.length-1);if(l)return this.value=l,this;if(r==n.length-1)break;o&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let O=this.matchPos<=this.to&&this.re.exec(this.curLine);if(O){let i=this.curLineStart+O.index,n=i+O[0].length;if(this.matchPos=Co(this.text,n+(i==n?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,n,O)))return this.value={from:i,to:n,precise:!0,match:O},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||n.to<=O){let o=new t(O,e.sliceString(O,i));return Mh.set(e,o),o}if(n.from==O&&n.to==i)return n;let{text:r,from:a}=n;return a>O&&(r=e.sliceString(O,a)+r,a=O),n.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,O=this.re.exec(this.flat.text);if(O&&!O[0]&&O.index==e&&(this.re.lastIndex=e+1,O=this.re.exec(this.flat.text)),O){let i=this.flat.from+O.index,n=i+O[0].length;if((this.flat.to>=this.to||O.index+O[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,n,O)))return this.value={from:i,to:n,precise:!0,match:O},this.matchPos=Co(this.text,n+(i==n?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=jo.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};typeof Symbol<"u"&&(Tr.prototype[Symbol.iterator]=Go.prototype[Symbol.iterator]=function(){return this});function Cv(t){try{return new RegExp(t,Kh),!0}catch{return!1}}function Co(t,e){if(e>=t.length)return e;let O=t.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}var wg=t=>{let e=Uc(t,"cm-goto-line");if(e){let a=e.dom.querySelector("input[type=text]");return a&&a.select(),!0}let{state:O}=t,i=String(O.doc.lineAt(t.state.selection.main.head).number),{close:n,result:r}=qc(t,{class:"cm-goto-line",label:O.phrase("Go to line"),input:{type:"text",name:"line",value:i},focus:!0,submitLabel:O.phrase("go")});return r.then(a=>{let o=a&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(a.elements.line.value);if(!o){t.dispatch({effects:n});return}let s=O.doc.lineAt(O.selection.main.head),[,l,c,h,f]=o,d=h?+h.slice(1):0,Q=c?+c:s.number;if(c&&f){let m=Q/100;l&&(m=m*(l=="-"?-1:1)+s.number/O.doc.lines),Q=Math.round(O.doc.lines*m)}else c&&l&&(Q=Q*(l=="-"?-1:1)+s.number);let $=O.doc.line(Math.max(1,Math.min(O.doc.lines,Q))),p=X.cursor($.from+Math.max(0,Math.min(d,$.length)));t.dispatch({effects:[n,_.scrollIntoView(p.from,{y:"center"})],selection:p})}),!0},Ev={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},Tg=z.define({combine(t){return xe(t,Ev,{highlightWordAroundCursor:(e,O)=>e||O,minSelectionLength:Math.min,maxMatches:Math.min})}});function Av(t){let e=[Nv,Dv];return t&&e.push(Tg.of(t)),e}var Lv=W.mark({class:"cm-selectionMatch"}),Iv=W.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function kg(t,e,O,i){return(O==0||t(e.sliceDoc(O-1,O))!=ee.Word)&&(i==e.doc.length||t(e.sliceDoc(i,i+1))!=ee.Word)}function Mv(t,e,O,i){return t(e.sliceDoc(O,O+1))==ee.Word&&t(e.sliceDoc(i-1,i))==ee.Word}var Dv=Oe.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.selectionSet||t.docChanged||t.viewportChanged)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=t.state.facet(Tg),{state:O}=t,i=O.selection;if(i.ranges.length>1)return W.none;let n=i.main,r,a=null;if(n.empty){if(!e.highlightWordAroundCursor)return W.none;let s=O.wordAt(n.head);if(!s)return W.none;a=O.charCategorizer(n.head),r=O.sliceDoc(s.from,s.to)}else{let s=n.to-n.from;if(s200)return W.none;if(e.wholeWords){if(r=O.sliceDoc(n.from,n.to),a=O.charCategorizer(n.head),!(kg(a,O,n.from,n.to)&&Mv(a,O,n.from,n.to)))return W.none}else if(r=O.sliceDoc(n.from,n.to),!r)return W.none}let o=[];for(let s of t.visibleRanges){let l=new fO(O.doc,r,s.from,s.to);for(;!l.next().done;){let{from:c,to:h}=l.value;if((!a||kg(a,O,c,h))&&(n.empty&&c<=n.from&&h>=n.to?o.push(Iv.range(c,h)):(c>=n.to||h<=n.from)&&o.push(Lv.range(c,h)),o.length>e.maxMatches))return W.none}}return W.set(o)}},{decorations:t=>t.decorations}),Nv=_.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),Bv=({state:t,dispatch:e})=>{let{selection:O}=t,i=X.create(O.ranges.map(n=>t.wordAt(n.head)||X.cursor(n.head)),O.mainIndex);return i.eq(O)?!1:(e(t.update({selection:i})),!0)};function Fv(t,e){let{main:O,ranges:i}=t.selection,n=t.wordAt(O.head),r=n&&n.from==O.from&&n.to==O.to;for(let a=!1,o=new fO(t.doc,e,i[i.length-1].to);;)if(o.next(),o.done){if(a)return null;o=new fO(t.doc,e,0,Math.max(0,i[i.length-1].from-1)),a=!0}else{if(a&&i.some(s=>s.from==o.value.from))continue;if(r){let s=t.wordAt(o.value.from);if(!s||s.from!=o.value.from||s.to!=o.value.to)continue}return o.value}}var vg=({state:t,dispatch:e})=>{let{ranges:O}=t.selection;if(O.some(r=>r.from===r.to))return Bv({state:t,dispatch:e});let i=t.sliceDoc(O[0].from,O[0].to);if(t.selection.ranges.some(r=>t.sliceDoc(r.from,r.to)!=i))return!1;let n=Fv(t,i);return n?(e(t.update({selection:t.selection.addRange(X.range(n.from,n.to),!1),effects:_.scrollIntoView(n.to)})),!0):!1},bi=z.define({combine(t){return xe(t,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Fh(e),scrollToMatch:e=>_.scrollIntoView(e)})}});function Hv(t){return t?[bi.of(t),Hh]:Hh}var vr=class{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||Cv(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(O,i)=>i=="n"?` +`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Nh(this):new Dh(this)}getCursor(e,O=0,i){let n=e.doc?e:$e.create({doc:e});return i==null&&(i=n.doc.length),this.regexp?Pn(this,n,O,i):gn(this,n,O,i)}},Eo=class{constructor(e){this.spec=e}};function Kv(t,e,O){return(i,n,r,a)=>{if(O&&!O(i,n,r,a))return!1;let o=i>=a&&n<=a+r.length?r.slice(i-a,n-a):e.doc.sliceString(i,n);return t(o,e,i,n)}}function gn(t,e,O,i){let n;return t.wholeWord&&(n=Jv(e.doc,e.charCategorizer(e.selection.main.head))),t.test&&(n=Kv(t.test,e,n)),new fO(e.doc,t.unquoted,O,i,t.caseSensitive?void 0:r=>r.toLowerCase(),n)}function Jv(t,e){return(O,i,n,r)=>((r>O||r+n.length=O)return null;n.push(i.value)}return n}highlight(e,O,i,n){let r=gn(this.spec,e,Math.max(0,O-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)n(r.value.from,r.value.to)}};function e0(t,e,O){return(i,n,r)=>(!O||O(i,n,r))&&t(r[0],e,i,n)}function Pn(t,e,O,i){let n;return t.wholeWord&&(n=t0(e.charCategorizer(e.selection.main.head))),t.test&&(n=e0(t.test,e,n)),new Tr(e.doc,t.search,{ignoreCase:!t.caseSensitive,test:n},O,i)}function Ao(t,e){return t.slice(be(t,e,!1),e)}function Lo(t,e){return t.slice(e,be(t,e))}function t0(t){return(e,O,i)=>!i[0].length||(t(Ao(i.input,i.index))!=ee.Word||t(Lo(i.input,i.index))!=ee.Word)&&(t(Lo(i.input,i.index+i[0].length))!=ee.Word||t(Ao(i.input,i.index+i[0].length))!=ee.Word)}var Nh=class extends Eo{nextMatch(e,O,i){let n=Pn(this.spec,e,i,e.doc.length).next();return n.done&&(n=Pn(this.spec,e,0,O).next()),n.done?null:n.value}prevMatchInRange(e,O,i){for(let n=1;;n++){let r=Math.max(O,i-n*1e4),a=Pn(this.spec,e,r,i),o=null;for(;!a.next().done;)o=a.value;if(o&&(r==O||o.from>r+10))return o;if(r==O)return null}}prevMatch(e,O,i){return this.prevMatchInRange(e,0,O)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(O,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let n=i.length;n>0;n--){let r=+i.slice(0,n);if(r>0&&r=O)return null;n.push(i.value)}return n}highlight(e,O,i,n){let r=Pn(this.spec,e,Math.max(0,O-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)n(r.value.from,r.value.to)}},Sn=A.define(),Jh=A.define(),Bt=Qe.define({create(t){return new wr(Io(t).create(),null)},update(t,e){for(let O of e.effects)O.is(Sn)?t=new wr(O.value.create(),t.panel):O.is(Jh)&&(t=new wr(t.query,O.value?ef:null));return t},provide:t=>YO.from(t,e=>e.panel)});function O0(t){let e=t.field(Bt,!1);return e?e.query.spec:Io(t)}function i0(t){var e;return((e=t.field(Bt,!1))===null||e===void 0?void 0:e.panel)!=null}var wr=class{constructor(e,O){this.query=e,this.panel=O}},n0=W.mark({class:"cm-searchMatch"}),r0=W.mark({class:"cm-searchMatch cm-searchMatch-selected"}),a0=Oe.fromClass(class{constructor(t){this.view=t,this.decorations=this.highlight(t.state.field(Bt))}update(t){let e=t.state.field(Bt);(e!=t.startState.field(Bt)||t.docChanged||t.selectionSet||t.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:t,panel:e}){if(!e||!t.spec.valid)return W.none;let{view:O}=this,i=new Re;for(let n=0,r=O.visibleRanges,a=r.length;nr[n+1].from-500;)s=r[++n].to;t.highlight(O.state,o,s,(l,c)=>{let h=O.state.selection.ranges.some(f=>f.from==l&&f.to==c);i.add(l,c,h?r0:n0)})}return i.finish()}},{decorations:t=>t.decorations});function Rr(t){return e=>{let O=e.state.field(Bt,!1);return O&&O.query.spec.valid?t(e,O):tf(e)}}var _r=Rr((t,{query:e})=>{let{to:O}=t.state.selection.main,i=e.nextMatch(t.state,O,O);if(!i)return!1;let n=X.single(i.from,i.to),r=t.state.facet(bi);return t.dispatch({selection:n,effects:[nf(t,i),r.scrollToMatch(n.main,t)],userEvent:"select.search"}),zg(t),!0}),Zr=Rr((t,{query:e})=>{let{state:O}=t,{from:i}=O.selection.main,n=e.prevMatch(O,i,i);if(!n)return!1;let r=X.single(n.from,n.to),a=t.state.facet(bi);return t.dispatch({selection:r,effects:[nf(t,n),a.scrollToMatch(r.main,t)],userEvent:"select.search"}),zg(t),!0}),_g=Rr((t,{query:e})=>{let O=e.matchAll(t.state,1e3);return!O||!O.length?!1:(t.dispatch({selection:X.create(O.map(i=>X.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),Zg=({state:t,dispatch:e})=>{let O=t.selection;if(O.ranges.length>1||O.main.empty)return!1;let{from:i,to:n}=O.main,r=[],a=0;for(let o=new fO(t.doc,t.sliceDoc(i,n));!o.next().done;){if(r.length>1e3)return!1;o.value.from==i&&(a=r.length),r.push(X.range(o.value.from,o.value.to))}return e(t.update({selection:X.create(r,a),userEvent:"select.search.matches"})),!0},Bh=Rr((t,{query:e})=>{let{state:O}=t,{from:i,to:n}=O.selection.main;if(O.readOnly)return!1;let r=e.nextMatch(O,i,i);if(!r)return!1;let a=r,o=[],s,l,c=[];a.precise?a.from==i&&a.to==n&&(l=O.toText(e.getReplacement(a)),o.push({from:a.from,to:a.to,insert:l}),a=e.nextMatch(O,a.from,a.to),c.push(_.announce.of(O.phrase("replaced match on line $",O.doc.lineAt(i).number)+"."))):a=e.nextMatch(O,a.from,a.to);let h=t.state.changes(o);return a&&(s=X.single(a.from,a.to).map(h),c.push(nf(t,a)),c.push(O.facet(bi).scrollToMatch(s.main,t))),t.dispatch({changes:h,selection:s,effects:c,userEvent:"input.replace"}),!0}),Rg=Rr((t,{query:e})=>{if(t.state.readOnly)return!1;let O=[];for(let n of e.matchAll(t.state,1e9)){let{from:r,to:a,precise:o}=n;o&&O.push({from:r,to:a,insert:e.getReplacement(n)})}if(!O.length)return!1;let i=t.state.phrase("replaced $ matches",O.length)+".";return t.dispatch({changes:O,effects:_.announce.of(i),userEvent:"input.replace.all"}),!0});function ef(t){return t.state.facet(bi).createPanel(t)}function Io(t,e){var O,i,n,r,a;let o=t.selection.main,s=o.empty||o.to>o.from+100?"":t.sliceDoc(o.from,o.to);if(e&&!s)return e;let l=t.facet(bi);return new vr({search:((O=e?.literal)!==null&&O!==void 0?O:l.literal)?s:s.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:l.caseSensitive,literal:(n=e?.literal)!==null&&n!==void 0?n:l.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:l.regexp,wholeWord:(a=e?.wholeWord)!==null&&a!==void 0?a:l.wholeWord})}function Yg(t){let e=fn(t,ef);return e&&e.dom.querySelector("[main-field]")}function zg(t){let e=Yg(t);e&&e==t.root.activeElement&&e.select()}var tf=t=>{let e=t.state.field(Bt,!1);if(e&&e.panel){let O=Yg(t);if(O&&O!=t.root.activeElement){let i=Io(t.state,e.query.spec);i.valid&&t.dispatch({effects:Sn.of(i)}),O.focus(),O.select()}}else t.dispatch({effects:[Jh.of(!0),e?Sn.of(Io(t.state,e.query.spec)):A.appendConfig.of(Hh)]});return!0},Of=t=>{let e=t.state.field(Bt,!1);if(!e||!e.panel)return!1;let O=fn(t,ef);return O&&O.dom.contains(t.root.activeElement)&&t.focus(),t.dispatch({effects:Jh.of(!1)}),!0},o0=[{key:"Mod-f",run:tf,scope:"editor search-panel"},{key:"F3",run:_r,shift:Zr,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:_r,shift:Zr,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Of,scope:"editor search-panel"},{key:"Mod-Shift-l",run:Zg},{key:"Mod-Alt-g",run:wg},{key:"Mod-d",run:vg,preventDefault:!0}],Fh=class{constructor(e){this.view=e;let O=this.query=e.state.field(Bt).query.spec;this.commit=this.commit.bind(this),this.searchField=J("input",{value:O.search,placeholder:ut(e,"Find"),"aria-label":ut(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=J("input",{value:O.replace,placeholder:ut(e,"Replace"),"aria-label":ut(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=J("input",{type:"checkbox",name:"case",form:"",checked:O.caseSensitive,onchange:this.commit}),this.reField=J("input",{type:"checkbox",name:"re",form:"",checked:O.regexp,onchange:this.commit}),this.wordField=J("input",{type:"checkbox",name:"word",form:"",checked:O.wholeWord,onchange:this.commit});function i(n,r,a){return J("button",{class:"cm-button",name:n,onclick:r,type:"button"},a)}this.dom=J("div",{onkeydown:n=>this.keydown(n),class:"cm-search"},[this.searchField,i("next",()=>_r(e),[ut(e,"next")]),i("prev",()=>Zr(e),[ut(e,"previous")]),i("select",()=>_g(e),[ut(e,"all")]),J("label",null,[this.caseField,ut(e,"match case")]),J("label",null,[this.reField,ut(e,"regexp")]),J("label",null,[this.wordField,ut(e,"by word")]),...e.state.readOnly?[]:[J("br"),this.replaceField,i("replace",()=>Bh(e),[ut(e,"replace")]),i("replaceAll",()=>Rg(e),[ut(e,"replace all")])],J("button",{name:"close",onclick:()=>Of(e),"aria-label":ut(e,"close"),type:"button"},["\xD7"])])}commit(){let e=new vr({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Sn.of(e)}))}keydown(e){Rc(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?Zr:_r)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),Bh(this.view))}update(e){for(let O of e.transactions)for(let i of O.effects)i.is(Sn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(bi).top}};function ut(t,e){return t.state.phrase(e)}var Vo=30,Wo=/[\s\.,:;?!]/;function nf(t,{from:e,to:O}){let i=t.state.doc.lineAt(e),n=t.state.doc.lineAt(O).to,r=Math.max(i.from,e-Vo),a=Math.min(n,O+Vo),o=t.state.sliceDoc(r,a);if(r!=i.from){for(let s=0;so.length-Vo;s--)if(!Wo.test(o[s-1])&&Wo.test(o[s])){o=o.slice(0,s);break}}return _.announce.of(`${t.state.phrase("current match")}. ${o} ${t.state.phrase("on line")} ${i.number}.`)}var s0=_.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Hh=[Bt,Ie.low(a0),s0];var fP={};ei(fP,{CompletionContext:()=>yi,acceptCompletion:()=>Fg,autocompletion:()=>N0,clearSnippet:()=>tP,closeBrackets:()=>j0,closeBracketsKeymap:()=>E0,closeCompletion:()=>Hg,completeAnyWord:()=>W0,completeFromList:()=>Ft,completionKeymap:()=>hP,completionStatus:()=>F0,currentCompletions:()=>H0,deleteBracketPair:()=>sP,hasNextSnippetField:()=>Z0,hasPrevSnippetField:()=>R0,ifIn:()=>c0,ifNotIn:()=>dO,insertBracket:()=>lP,insertCompletionText:()=>Ng,moveCompletionSelection:()=>Yr,nextSnippetField:()=>OP,pickedCompletion:()=>Fo,prevSnippetField:()=>iP,selectedCompletion:()=>K0,selectedCompletionIndex:()=>J0,setSelectedCompletion:()=>e_,snippet:()=>Jg,snippetCompletion:()=>B,snippetKeymap:()=>$f,startCompletion:()=>Mo});var yi=class{constructor(e,O,i,n){this.state=e,this.pos=O,this.explicit=i,this.view=n,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let O=N(this.state).resolveInner(this.pos,-1);for(;O&&e.indexOf(O.name)<0;)O=O.parent;return O?{from:O.from,to:this.pos,text:this.state.sliceDoc(O.from,this.pos),type:O.type}:null}matchBefore(e){let O=this.state.doc.lineAt(this.pos),i=Math.max(O.from,this.pos-250),n=O.text.slice(i-O.from,this.pos-O.from),r=n.search(Dg(e,!1));return r<0?null:{from:i+r,to:this.pos,text:n.slice(r)}}get aborted(){return this.abortListeners==null}addEventListener(e,O,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(O),i&&i.onDocChange&&(this.abortOnDocChange=!0))}};function Ug(t){let e=Object.keys(t).join(""),O=/\w/.test(e);return O&&(e=e.replace(/\w/g,"")),`[${O?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function l0(t){let e=Object.create(null),O=Object.create(null);for(let{label:n}of t){e[n[0]]=!0;for(let r=1;rtypeof n=="string"?{label:n}:n),[O,i]=e.every(n=>/^\w+$/.test(n.label))?[/\w*$/,/\w+$/]:l0(e);return n=>{let r=n.matchBefore(i);return r||n.explicit?{from:r?r.from:n.pos,options:e,validFor:O}:null}}function c0(t,e){return O=>{for(let i=N(O.state).resolveInner(O.pos,-1);i;i=i.parent){if(t.indexOf(i.name)>-1)return e(O);if(i.type.isTop)break}return null}}function dO(t,e){return O=>{for(let i=N(O.state).resolveInner(O.pos,-1);i;i=i.parent){if(t.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(O)}}var Do=class{constructor(e,O,i,n){this.completion=e,this.source=O,this.match=i,this.score=n}};function ki(t){return t.selection.main.from}function Dg(t,e){var O;let{source:i}=t,n=e&&i[0]!="^",r=i[i.length-1]!="$";return!n&&!r?t:new RegExp(`${n?"^":""}(?:${i})${r?"$":""}`,(O=t.flags)!==null&&O!==void 0?O:t.ignoreCase?"i":"")}var Fo=Ee.define();function Ng(t,e,O,i){let{main:n}=t.selection,r=O-n.from,a=i-n.from;return{...t.changeByRange(o=>{if(o!=n&&O!=i&&t.sliceDoc(o.from+r,o.from+a)!=t.sliceDoc(O,i))return{range:o};let s=t.toText(e);return{changes:{from:o.from+r,to:i==n.from?o.to:o.from+a,insert:s},range:X.cursor(o.from+r+s.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}var Vg=new WeakMap;function h0(t){if(!Array.isArray(t))return t;let e=Vg.get(t);return e||Vg.set(t,e=Ft(t)),e}var No=A.define(),zr=A.define(),of=class{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let O=0;O=48&&k<=57||k>=97&&k<=122?2:k>=65&&k<=90?1:0:(T=Bi(k))!=T.toLowerCase()?1:T!=T.toUpperCase()?2:0;(!P||v==1&&p||y==0&&v!=0)&&(O[h]==k||i[h]==k&&(f=!0)?a[h++]=P:a.length&&(m=!1)),y=v,P+=tt(k)}return h==s&&a[0]==0&&m?this.result(-100+(f?-200:0),a,e):d==s&&Q==0?this.ret(-200-e.length+($==e.length?0:-100),[0,$]):o>-1?this.ret(-700-e.length,[o,o+this.pattern.length]):d==s?this.ret(-900-e.length,[Q,$]):h==s?this.result(-100+(f?-200:0)+-700+(m?0:-1100),a,e):O.length==2?null:this.result((n[0]?-700:0)+-200+-1100,n,e)}result(e,O,i){let n=[],r=0;for(let a of O){let o=a+(this.astral?tt(ze(i,a)):1);r&&n[r-1]==a?n[r-1]=o:(n[r++]=a,n[r++]=o)}return this.ret(e-i.length,n)}},sf=class{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:f0,filterStrict:!1,compareCompletions:(e,O)=>(e.sortText||e.label).localeCompare(O.sortText||O.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,O)=>e&&O,closeOnBlur:(e,O)=>e&&O,icons:(e,O)=>e&&O,tooltipClass:(e,O)=>i=>Wg(e(i),O(i)),optionClass:(e,O)=>i=>Wg(e(i),O(i)),addToOptions:(e,O)=>e.concat(O),filterStrict:(e,O)=>e||O})}});function Wg(t,e){return t?e?t+" "+e:t:e}function f0(t,e,O,i,n,r){let a=t.textDirection==ne.RTL,o=a,s=!1,l="top",c,h,f=e.left-n.left,d=n.right-e.right,Q=i.right-i.left,$=i.bottom-i.top;if(o&&f=$||P>e.top?c=O.bottom-e.top:(l="bottom",c=e.bottom-O.top)}let p=(e.bottom-e.top)/r.offsetHeight,m=(e.right-e.left)/r.offsetWidth;return{style:`${l}: ${c/p}px; max-width: ${h/m}px`,class:"cm-completionInfo-"+(s?a?"left-narrow":"right-narrow":o?"left":"right")}}var Ho=A.define();function u0(t){let e=t.addToOptions.slice();return t.icons&&e.push({render(O){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),O.type&&i.classList.add(...O.type.split(/\s+/g).map(n=>"cm-completionIcon-"+n)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(O,i,n,r){let a=document.createElement("span");a.className="cm-completionLabel";let o=O.displayLabel||O.label,s=0;for(let l=0;ls&&a.appendChild(document.createTextNode(o.slice(s,c)));let f=a.appendChild(document.createElement("span"));f.appendChild(document.createTextNode(o.slice(c,h))),f.className="cm-completionMatchedText",s=h}return sO.position-i.position).map(O=>O.render)}function rf(t,e,O){if(t<=O)return{from:0,to:t};if(e<0&&(e=0),e<=t>>1){let n=Math.floor(e/O);return{from:n*O,to:(n+1)*O}}let i=Math.ceil((t-e)/O);return{from:t-i*O,to:t-(i-1)*O}}var lf=class{constructor(e,O,i){this.view=e,this.stateField=O,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:s=>this.placeInfo(s),key:this},this.space=null,this.currentClass="";let n=e.state.field(O),{options:r,selected:a}=n.open,o=e.state.facet(Ge);this.optionContent=u0(o),this.optionClass=o.optionClass,this.tooltipClass=o.tooltipClass,this.range=rf(r.length,a,o.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",s=>{let{options:l}=e.state.field(O).open;for(let c=s.target,h;c&&c!=this.dom;c=c.parentNode)if(c.nodeName=="LI"&&(h=/-(\d+)$/.exec(c.id))&&+h[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;c!=null&&(e.dispatch({effects:Ho.of(c)}),s.preventDefault())}}),this.dom.addEventListener("focusout",s=>{let l=e.state.field(this.stateField,!1);l&&l.tooltip&&e.state.facet(Ge).closeOnBlur&&s.relatedTarget!=e.contentDOM&&e.dispatch({effects:zr.of(null)})}),this.showOptions(r,n.id)}mount(){this.updateSel()}showOptions(e,O){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,O,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var O;let i=e.state.field(this.stateField),n=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=n){let{options:r,selected:a,disabled:o}=i.open;(!n.open||n.open.options!=r)&&(this.range=rf(r.length,a,e.state.facet(Ge).maxRenderedOptions),this.showOptions(r,i.id)),this.updateSel(),o!=((O=n.open)===null||O===void 0?void 0:O.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!o)}}updateTooltipClass(e){let O=this.tooltipClass(e);if(O!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of O.split(" "))i&&this.dom.classList.add(i);this.currentClass=O}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),O=e.open;(O.selected>-1&&O.selected=this.range.to)&&(this.range=rf(O.options.length,O.selected,this.view.state.facet(Ge).maxRenderedOptions),this.showOptions(O.options,e.id));let i=this.updateSelectedOption(O.selected);if(i){this.destroyInfo();let{completion:n}=O.options[O.selected],{info:r}=n;if(!r)return;let a=typeof r=="string"?document.createTextNode(r):r(n);if(!a)return;"then"in a?a.then(o=>{o&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(o,n)}).catch(o=>qe(this.view.state,o,"completion info")):(this.addInfoPane(a,n),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,O){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:n,destroy:r}=e;i.appendChild(n),this.infoDestroy=r||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let O=null;for(let i=this.list.firstChild,n=this.range.from;i;i=i.nextSibling,n++)i.nodeName!="LI"||!i.id?n--:n==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),O=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return O&&Q0(this.list,O),O}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let O=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),n=e.getBoundingClientRect(),r=this.space;if(!r){let a=this.dom.ownerDocument.documentElement;r={left:0,top:0,right:a.clientWidth,bottom:a.clientHeight}}return n.top>Math.min(r.bottom,O.bottom)-10||n.bottom{a.target==n&&a.preventDefault()});let r=null;for(let a=i.from;ai.from||i.from==0))if(r=f,typeof l!="string"&&l.header)n.appendChild(l.header(l));else{let d=n.appendChild(document.createElement("completion-section"));d.textContent=f}}let c=n.appendChild(document.createElement("li"));c.id=O+"-"+a,c.setAttribute("role","option");let h=this.optionClass(o);h&&(c.className=h);for(let f of this.optionContent){let d=f(o,this.view.state,this.view,s);d&&c.appendChild(d)}}return i.from&&n.classList.add("cm-completionListIncompleteTop"),i.tonew lf(O,t,e)}function Q0(t,e){let O=t.getBoundingClientRect(),i=e.getBoundingClientRect(),n=O.height/t.offsetHeight;i.topO.bottom&&(t.scrollTop+=(i.bottom-O.bottom)/n)}function jg(t){return(t.boost||0)*100+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}function $0(t,e){let O=[],i=null,n=null,r=c=>{O.push(c);let{section:h}=c.completion;if(h){i||(i=[]);let f=typeof h=="string"?h:h.name;i.some(d=>d.name==f)||i.push(typeof h=="string"?{name:f}:h)}},a=e.facet(Ge);for(let c of t)if(c.hasResult()){let h=c.result.getMatch;if(c.result.filter===!1)for(let f of c.result.options)r(new Do(f,c.source,h?h(f):[],1e9-O.length));else{let f=e.sliceDoc(c.from,c.to),d,Q=a.filterStrict?new sf(f):new of(f);for(let $ of c.result.options)if(d=Q.match($.label)){let p=$.displayLabel?h?h($,d.matched):[]:d.matched,m=d.score+($.boost||0);if(r(new Do($,c.source,p,m)),typeof $.section=="object"&&$.section.rank==="dynamic"){let{name:P}=$.section;n||(n=Object.create(null)),n[P]=Math.max(m,n[P]||-1e9)}}}}if(i){let c=Object.create(null),h=0,f=(d,Q)=>(d.rank==="dynamic"&&Q.rank==="dynamic"?n[Q.name]-n[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof Q.rank=="number"?Q.rank:1e9)||(d.namef.score-h.score||l(h.completion,f.completion))){let h=c.completion;!s||s.label!=h.label||s.detail!=h.detail||s.type!=null&&h.type!=null&&s.type!=h.type||s.apply!=h.apply||s.boost!=h.boost?o.push(c):jg(c.completion)>jg(s)&&(o[o.length-1]=c),s=c.completion}return o}var cf=class t{constructor(e,O,i,n,r,a){this.options=e,this.attrs=O,this.tooltip=i,this.timestamp=n,this.selected=r,this.disabled=a}setSelected(e,O){return e==this.selected||e>=this.options.length?this:new t(this.options,Gg(O,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,O,i,n,r,a){if(n&&!a&&e.some(l=>l.isPending))return n.setDisabled();let o=$0(e,O);if(!o.length)return n&&e.some(l=>l.isPending)?n.setDisabled():null;let s=O.facet(Ge).selectOnOpen?0:-1;if(n&&n.selected!=s&&n.selected!=-1){let l=n.options[n.selected].completion;for(let c=0;cc.hasResult()?Math.min(l,c.from):l,1e8),create:X0,above:r.aboveCursor},n?n.timestamp:Date.now(),s,!1)}map(e){return new t(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new t(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}},hf=class t{constructor(e,O,i){this.active=e,this.id=O,this.open=i}static start(){return new t(P0,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:O}=e,i=O.facet(Ge),r=(i.override||O.languageDataAt("autocomplete",ki(O)).map(h0)).map(s=>(this.active.find(c=>c.source==s)||new uO(s,this.active.some(c=>c.state!=0)?1:0)).update(e,i));r.length==this.active.length&&r.every((s,l)=>s==this.active[l])&&(r=this.active);let a=this.open,o=e.effects.some(s=>s.is(pf));a&&e.docChanged&&(a=a.map(e.changes)),e.selection||r.some(s=>s.hasResult()&&e.changes.touchesRange(s.from,s.to))||!p0(r,this.active)||o?a=cf.build(r,O,this.id,a,i,o):a&&a.disabled&&!r.some(s=>s.isPending)&&(a=null),!a&&r.every(s=>!s.isPending)&&r.some(s=>s.hasResult())&&(r=r.map(s=>s.hasResult()?new uO(s.source,0):s));for(let s of e.effects)s.is(Ho)&&(a=a&&a.setSelected(s.value,this.id));return r==this.active&&a==this.open?this:new t(r,this.id,a)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?m0:g0}};function p0(t,e){if(t==e)return!0;for(let O=0,i=0;;){for(;O-1&&(O["aria-activedescendant"]=t+"-"+e),O}var P0=[];function Bg(t,e){if(t.isUserEvent("input.complete")){let i=t.annotation(Fo);if(i&&e.activateOnCompletion(i))return 12}let O=t.isUserEvent("input.type");return O&&e.activateOnTyping?5:O?1:t.isUserEvent("delete.backward")?2:t.selection?8:t.docChanged?16:0}var uO=class t{constructor(e,O,i=!1){this.source=e,this.state=O,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,O){let i=Bg(e,O),n=this;(i&8||i&16&&this.touches(e))&&(n=new t(n.source,0)),i&4&&n.state==0&&(n=new t(this.source,1)),n=n.updateFor(e,i);for(let r of e.effects)if(r.is(No))n=new t(n.source,1,r.value);else if(r.is(zr))n=new t(n.source,0);else if(r.is(pf))for(let a of r.value)a.source==n.source&&(n=a);return n}updateFor(e,O){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(ki(e.state))}},Bo=class t extends uO{constructor(e,O,i,n,r,a){super(e,3,O),this.limit=i,this.result=n,this.from=r,this.to=a}hasResult(){return!0}updateFor(e,O){var i;if(!(O&3))return this.map(e.changes);let n=this.result;n.map&&!e.changes.empty&&(n=n.map(n,e.changes));let r=e.changes.mapPos(this.from),a=e.changes.mapPos(this.to,1),o=ki(e.state);if(o>a||!n||O&2&&(ki(e.startState)==this.from||oO.map(e))}}),je=Qe.define({create(){return hf.start()},update(t,e){return t.update(e)},provide:t=>[hn.from(t,e=>e.tooltip),_.contentAttributes.from(t,e=>e.attrs)]});function mf(t,e){let O=e.completion.apply||e.completion.label,i=t.state.field(je).active.find(n=>n.source==e.source);return i instanceof Bo?(typeof O=="string"?t.dispatch({...Ng(t.state,O,i.from,i.to),annotations:Fo.of(e.completion)}):O(t,e.completion,i.from,i.to),!0):!1}var X0=d0(je,mf);function Yr(t,e="option"){return O=>{let i=O.state.field(je,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+n*(t?1:-1):t?0:a-1;return o<0?o=e=="page"?0:a-1:o>=a&&(o=e=="page"?a-1:0),O.dispatch({effects:Ho.of(o)}),!0}}var Fg=t=>{let e=t.state.field(je,!1);return t.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampt.state.field(je,!1)?(t.dispatch({effects:No.of(!0)}),!0):!1,Hg=t=>{let e=t.state.field(je,!1);return!e||!e.active.some(O=>O.state!=0)?!1:(t.dispatch({effects:zr.of(null)}),!0)},ff=class{constructor(e,O){this.active=e,this.context=O,this.time=Date.now(),this.updates=[],this.done=void 0}},b0=50,x0=1e3,k0=Oe.fromClass(class{constructor(t){this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of t.state.field(je).active)e.isPending&&this.startQuery(e)}update(t){let e=t.state.field(je),O=t.state.facet(Ge);if(!t.selectionSet&&!t.docChanged&&t.startState.field(je)==e)return;let i=t.transactions.some(r=>{let a=Bg(r,O);return a&8||(r.selection||r.docChanged)&&!(a&3)});for(let r=0;rb0&&Date.now()-a.time>x0){for(let o of a.context.abortListeners)try{o()}catch(s){qe(this.view.state,s)}a.context.abortListeners=null,this.running.splice(r--,1)}else a.updates.push(...t.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),t.transactions.some(r=>r.effects.some(a=>a.is(No)))&&(this.pendingStart=!0);let n=this.pendingStart?50:O.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(r=>r.isPending&&!this.running.some(a=>a.active.source==r.source))?setTimeout(()=>this.startUpdate(),n):-1,this.composing!=0)for(let r of t.transactions)r.isUserEvent("input.type")?this.composing=2:this.composing==2&&r.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:t}=this.view,e=t.field(je);for(let O of e.active)O.isPending&&!this.running.some(i=>i.active.source==O.source)&&this.startQuery(O);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}startQuery(t){let{state:e}=this.view,O=ki(e),i=new yi(e,O,t.explicit,this.view),n=new ff(t,i);this.running.push(n),Promise.resolve(t.source(i)).then(r=>{n.context.aborted||(n.done=r||null,this.scheduleAccept())},r=>{this.view.dispatch({effects:zr.of(null)}),qe(this.view.state,r)})}scheduleAccept(){this.running.every(t=>t.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],O=this.view.state.facet(Ge),i=this.view.state.field(je);for(let n=0;no.source==r.active.source);if(a&&a.isPending)if(r.done==null){let o=new uO(r.active.source,0);for(let s of r.updates)o=o.update(s,O);o.isPending||e.push(o)}else this.startQuery(a)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:pf.of(e)})}},{eventHandlers:{blur(t){let e=this.view.state.field(je,!1);if(e&&e.tooltip&&this.view.state.facet(Ge).closeOnBlur){let O=e.open&&ro(this.view,e.open.tooltip);(!O||!O.dom.contains(t.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:zr.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:No.of(!1)}),20),this.composing=0}}}),y0=typeof navigator=="object"&&/Win/.test(navigator.platform),w0=Ie.highest(_.domEventHandlers({keydown(t,e){let O=e.state.field(je,!1);if(!O||!O.open||O.open.disabled||O.open.selected<0||t.key.length>1||t.ctrlKey&&!(y0&&t.altKey)||t.metaKey)return!1;let i=O.open.options[O.open.selected],n=O.active.find(a=>a.source==i.source),r=i.completion.commitCharacters||n.result.commitCharacters;return r&&r.indexOf(t.key)>-1&&mf(e,i),!1}})),Kg=_.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center",cursor:"pointer"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}}),uf=class{constructor(e,O,i,n){this.field=e,this.line=O,this.from=i,this.to=n}},df=class t{constructor(e,O,i){this.field=e,this.from=O,this.to=i}map(e){let O=e.mapPos(this.from,-1,Te.TrackDel),i=e.mapPos(this.to,1,Te.TrackDel);return O==null||i==null?null:new t(this.field,O,i)}},Qf=class t{constructor(e,O){this.lines=e,this.fieldPositions=O}instantiate(e,O){let i=[],n=[O],r=e.doc.lineAt(O),a=/^\s*/.exec(r.text)[0];for(let s of this.lines){if(i.length){let l=a,c=/^\t*/.exec(s)[0].length;for(let h=0;hnew df(s.field,n[s.line]+s.from,n[s.line]+s.to));return{text:i,ranges:o}}static parse(e){let O=[],i=[],n=[],r;for(let a of e.split(/\r\n?|\n/)){for(;r=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(a);){let o=r[1]?+r[1]:null,s=r[2]||r[3]||"",l=-1;o===0&&(o=1e9);let c=s.replace(/\\[{}]/g,h=>h[1]);for(let h=0;h=l&&f.field++}for(let h of n)if(h.line==i.length&&h.from>r.index){let f=r[2]?3+(r[1]||"").length:2;h.from-=f,h.to-=f}n.push(new uf(l,i.length,r.index,r.index+c.length)),a=a.slice(0,r.index)+s+a.slice(r.index+r[0].length)}a=a.replace(/\\([{}])/g,(o,s,l)=>{for(let c of n)c.line==i.length&&c.from>l&&(c.from--,c.to--);return s}),i.push(a)}return new t(i,n)}},T0=W.widget({widget:new class extends Ae{toDOM(){let t=document.createElement("span");return t.className="cm-snippetFieldPosition",t}ignoreEvent(){return!1}}}),v0=W.mark({class:"cm-snippetField"}),Xn=class t{constructor(e,O){this.ranges=e,this.active=O,this.deco=W.set(e.map(i=>(i.from==i.to?T0:v0).range(i.from,i.to)),!0)}map(e){let O=[];for(let i of this.ranges){let n=i.map(e);if(!n)return null;O.push(n)}return new t(O,this.active)}selectionInsideField(e){return e.ranges.every(O=>this.ranges.some(i=>i.field==this.active&&i.from<=O.from&&i.to>=O.to))}},Ur=A.define({map(t,e){return t&&t.map(e)}}),_0=A.define(),wi=Qe.define({create(){return null},update(t,e){for(let O of e.effects){if(O.is(Ur))return O.value;if(O.is(_0)&&t)return new Xn(t.ranges,O.value)}return t&&e.docChanged&&(t=t.map(e.changes)),t&&e.selection&&!t.selectionInsideField(e.selection)&&(t=null),t},provide:t=>_.decorations.from(t,e=>e?e.deco:W.none)});function gf(t,e){return X.create(t.filter(O=>O.field==e).map(O=>X.range(O.from,O.to)))}function Jg(t){let e=Qf.parse(t);return(O,i,n,r)=>{let{text:a,ranges:o}=e.instantiate(O.state,n),{main:s}=O.state.selection,l={changes:{from:n,to:r==s.from?s.to:r,insert:K.of(a)},scrollIntoView:!0,annotations:i?[Fo.of(i),Pe.userEvent.of("input.complete")]:void 0};if(o.length&&(l.selection=gf(o,0)),o.some(c=>c.field>0)){let c=new Xn(o,0),h=l.effects=[Ur.of(c)];O.state.field(wi,!1)===void 0&&h.push(A.appendConfig.of([wi,z0,q0,Kg]))}O.dispatch(O.state.update(l))}}function eP(t){return({state:e,dispatch:O})=>{let i=e.field(wi,!1);if(!i||t<0&&i.active==0)return!1;let n=i.active+t,r=t>0&&!i.ranges.some(a=>a.field==n+t);return O(e.update({selection:gf(i.ranges,n),effects:Ur.of(r?null:new Xn(i.ranges,n)),scrollIntoView:!0})),!0}}var tP=({state:t,dispatch:e})=>t.field(wi,!1)?(e(t.update({effects:Ur.of(null)})),!0):!1,OP=eP(1),iP=eP(-1);function Z0(t){let e=t.field(wi,!1);return!!(e&&e.ranges.some(O=>O.field==e.active+1))}function R0(t){let e=t.field(wi,!1);return!!(e&&e.active>0)}var Y0=[{key:"Tab",run:OP,shift:iP},{key:"Escape",run:tP}],$f=z.define({combine(t){return t.length?t[0]:Y0}}),z0=Ie.highest(fi.compute([$f],t=>t.facet($f)));function B(t,e){return{...e,apply:Jg(t)}}var q0=_.domEventHandlers({mousedown(t,e){let O=e.state.field(wi,!1),i;if(!O||(i=e.posAtCoords({x:t.clientX,y:t.clientY}))==null)return!1;let n=O.ranges.find(r=>r.from<=i&&r.to>=i);return!n||n.field==O.active?!1:(e.dispatch({selection:gf(O.ranges,n.field),effects:Ur.of(O.ranges.some(r=>r.field>n.field)?new Xn(O.ranges,n.field):null),scrollIntoView:!0}),!0)}});function U0(t){let e=t.replace(/[\]\-\\]/g,"\\$&");try{return new RegExp(`[\\p{Alphabetic}\\p{Number}_${e}]+`,"ug")}catch{return new RegExp(`[w${e}]`,"g")}}function Cg(t,e){return new RegExp(e(t.source),t.unicode?"u":"")}var Eg=Object.create(null);function V0(t){return Eg[t]||(Eg[t]=new WeakMap)}function Ag(t,e,O,i,n){for(let r=t.iterLines(),a=0;!r.next().done;){let{value:o}=r,s;for(e.lastIndex=0;s=e.exec(o);)if(!i[s[0]]&&a+s.index!=n&&(O.push({type:"text",label:s[0]}),i[s[0]]=!0,O.length>=2e3))return;a+=o.length+1}}function nP(t,e,O,i,n){let r=t.length>=1e3,a=r&&e.get(t);if(a)return a;let o=[],s=Object.create(null);if(t.children){let l=0;for(let c of t.children){if(c.length>=1e3)for(let h of nP(c,e,O,i-l,n-l))s[h.label]||(s[h.label]=!0,o.push(h));else Ag(c,O,o,s,n-l);l+=c.length+1}}else Ag(t,O,o,s,n);return r&&o.length<2e3&&e.set(t,o),o}var W0=t=>{var e;let O=(e=t.state.languageDataAt("wordChars",t.pos)[0])!==null&&e!==void 0?e:"",i=U0(O),n=t.matchBefore(Cg(i,o=>o+"$"));if(!n&&!t.explicit)return null;let r=n?n.from:t.pos,a=nP(t.state.doc,V0(O),i,5e4,r);return{from:r,options:a,validFor:Cg(i,o=>"^"+o)}},qr={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},xi=A.define({map(t,e){let O=e.mapPos(t,-1,Te.TrackAfter);return O??void 0}}),Pf=new class extends ct{};Pf.startSide=1;Pf.endSide=-1;var rP=Qe.define({create(){return te.empty},update(t,e){if(t=t.map(e.changes),e.selection){let O=e.state.doc.lineAt(e.selection.main.head);t=t.update({filter:i=>i>=O.from&&i<=O.to})}for(let O of e.effects)O.is(xi)&&(t=t.update({add:[Pf.range(O.value,O.value+1)]}));return t}});function j0(){return[C0,rP]}var af="()[]{}<>\xAB\xBB\xBB\xAB\uFF3B\uFF3D\uFF5B\uFF5D";function aP(t){for(let e=0;e{if((G0?t.composing:t.compositionStarted)||t.state.readOnly)return!1;let n=t.state.selection.main;if(i.length>2||i.length==2&&tt(ze(i,0))==1||e!=n.from||O!=n.to)return!1;let r=lP(t.state,i);return r?(t.dispatch(r),!0):!1}),sP=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=oP(t,t.selection.main.head).brackets||qr.brackets,n=null,r=t.changeByRange(a=>{if(a.empty){let o=A0(t.doc,a.head);for(let s of i)if(s==o&&Ko(t.doc,a.head)==aP(ze(s,0)))return{changes:{from:a.head-s.length,to:a.head+s.length},range:X.cursor(a.head-s.length)}}return{range:n=a}});return n||e(t.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!n},E0=[{key:"Backspace",run:sP}];function lP(t,e){let O=oP(t,t.selection.main.head),i=O.brackets||qr.brackets;for(let n of i){let r=aP(ze(n,0));if(e==n)return r==n?M0(t,n,i.indexOf(n+n+n)>-1,O):L0(t,n,r,O.before||qr.before);if(e==r&&cP(t,t.selection.main.from))return I0(t,n,r)}return null}function cP(t,e){let O=!1;return t.field(rP).between(0,t.doc.length,i=>{i==e&&(O=!0)}),O}function Ko(t,e){let O=t.sliceString(e,e+2);return O.slice(0,tt(ze(O,0)))}function A0(t,e){let O=t.sliceString(e-2,e);return tt(ze(O,0))==O.length?O:O.slice(1)}function L0(t,e,O,i){let n=null,r=t.changeByRange(a=>{if(!a.empty)return{changes:[{insert:e,from:a.from},{insert:O,from:a.to}],effects:xi.of(a.to+e.length),range:X.range(a.anchor+e.length,a.head+e.length)};let o=Ko(t.doc,a.head);return!o||/\s/.test(o)||i.indexOf(o)>-1?{changes:{insert:e+O,from:a.head},effects:xi.of(a.head+e.length),range:X.cursor(a.head+e.length)}:{range:n=a}});return n?null:t.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function I0(t,e,O){let i=null,n=t.changeByRange(r=>r.empty&&Ko(t.doc,r.head)==O?{changes:{from:r.head,to:r.head+O.length,insert:O},range:X.cursor(r.head+O.length)}:i={range:r});return i?null:t.update(n,{scrollIntoView:!0,userEvent:"input.type"})}function M0(t,e,O,i){let n=i.stringPrefixes||qr.stringPrefixes,r=null,a=t.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:e,from:o.to}],effects:xi.of(o.to+e.length),range:X.range(o.anchor+e.length,o.head+e.length)};let s=o.head,l=Ko(t.doc,s),c;if(l==e){if(Lg(t,s))return{changes:{insert:e+e,from:s},effects:xi.of(s+e.length),range:X.cursor(s+e.length)};if(cP(t,s)){let f=O&&t.sliceDoc(s,s+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:s,to:s+f.length,insert:f},range:X.cursor(s+f.length)}}}else{if(O&&t.sliceDoc(s-2*e.length,s)==e+e&&(c=Ig(t,s-2*e.length,n))>-1&&Lg(t,c))return{changes:{insert:e+e+e+e,from:s},effects:xi.of(s+e.length),range:X.cursor(s+e.length)};if(t.charCategorizer(s)(l)!=ee.Word&&Ig(t,s,n)>-1&&!D0(t,s,e,n))return{changes:{insert:e+e,from:s},effects:xi.of(s+e.length),range:X.cursor(s+e.length)}}return{range:r=o}});return r?null:t.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function Lg(t,e){let O=N(t).resolveInner(e+1);return O.parent&&O.from==e}function D0(t,e,O,i){let n=N(t).resolveInner(e,-1),r=i.reduce((a,o)=>Math.max(a,o.length),0);for(let a=0;a<5;a++){let o=t.sliceDoc(n.from,Math.min(n.to,n.from+O.length+r)),s=o.indexOf(O);if(!s||s>-1&&i.indexOf(o.slice(0,s))>-1){let c=n.firstChild;for(;c&&c.from==n.from&&c.to-c.from>O.length+s;){if(t.sliceDoc(c.to-O.length,c.to)==O)return!1;c=c.firstChild}return!0}let l=n.to==e&&n.parent;if(!l)break;n=l}return!1}function Ig(t,e,O){let i=t.charCategorizer(e);if(i(t.sliceDoc(e-1,e))!=ee.Word)return e;for(let n of O){let r=e-n.length;if(t.sliceDoc(r,e)==n&&i(t.sliceDoc(r-1,r))!=ee.Word)return r}return-1}function N0(t={}){return[w0,je,Ge.of(t),k0,B0,Kg]}var hP=[{key:"Ctrl-Space",run:Mo},{mac:"Alt-`",run:Mo},{mac:"Alt-i",run:Mo},{key:"Escape",run:Hg},{key:"ArrowDown",run:Yr(!0)},{key:"ArrowUp",run:Yr(!1)},{key:"PageDown",run:Yr(!0,"page")},{key:"PageUp",run:Yr(!1,"page")},{key:"Enter",run:Fg}],B0=Ie.highest(fi.computeN([Ge],t=>t.facet(Ge).defaultKeymap?[hP]:[]));function F0(t){let e=t.field(je,!1);return e&&e.active.some(O=>O.isPending)?"pending":e&&e.active.some(O=>O.state!=0)?"active":null}var Mg=new WeakMap;function H0(t){var e;let O=(e=t.field(je,!1))===null||e===void 0?void 0:e.open;if(!O||O.disabled)return[];let i=Mg.get(O.options);return i||Mg.set(O.options,i=O.options.map(n=>n.completion)),i}function K0(t){var e;let O=(e=t.field(je,!1))===null||e===void 0?void 0:e.open;return O&&!O.disabled&&O.selected>=0?O.options[O.selected].completion:null}function J0(t){var e;let O=(e=t.field(je,!1))===null||e===void 0?void 0:e.open;return O&&!O.disabled&&O.selected>=0?O.selected:null}function e_(t){return Ho.of(t)}var uP={};ei(uP,{collab:()=>t_,getClientID:()=>r_,getSyncedVersion:()=>n_,rebaseUpdates:()=>a_,receiveUpdates:()=>O_,sendableUpdates:()=>i_});var Jo=class{constructor(e,O,i,n){this.origin=e,this.changes=O,this.effects=i,this.clientID=n}},bn=class{constructor(e,O){this.version=e,this.unconfirmed=O}},Vr=z.define({combine(t){let e=xe(t,{startVersion:0,clientID:null,sharedEffects:()=>[]},{generatedID:O=>O});return e.clientID==null&&(e.clientID=t.length&&t[0].generatedID||""),e}}),Sf=Ee.define(),es=Qe.define({create(t){return new bn(t.facet(Vr).startVersion,[])},update(t,e){let O=e.annotation(Sf);if(O)return O;let{sharedEffects:i,clientID:n}=e.startState.facet(Vr),r=i(e);return r.length||!e.changes.empty?new bn(t.version,t.unconfirmed.concat(new Jo(e,e.changes,r,n))):t}});function t_(t={}){return[es,Vr.of(Object.assign({generatedID:Math.floor(Math.random()*1e9).toString(36)},t))]}function O_(t,e){let{version:O,unconfirmed:i}=t.field(es),{clientID:n}=t.facet(Vr);O+=e.length;let r=[],a=null,o=0;for(let s of e){let l=o{let l=s.changes.map(a);return a=a.map(s.changes,!0),new Jo(s.origin,l,A.mapEffects(s.effects,a),n)})),r.length)){let s=i.reduce((l,c)=>l.compose(c.changes),Ye.empty(i[0].changes.length));r=A.mapEffects(r,s)}return a?t.update({changes:a,effects:r,annotations:[Pe.addToHistory.of(!1),Pe.remote.of(!0),Sf.of(new bn(O,i))],filter:!1}):t.update({annotations:[Sf.of(new bn(O,i))]})}function i_(t){return t.field(es).unconfirmed}function n_(t){return t.field(es).version}function r_(t){return t.facet(Vr).clientID}function a_(t,e){if(!e.length||!t.length)return t;let O=null,i=0;for(let n of e){let r=i{let r=n.changes.map(O);return O=O.mapDesc(n.changes,!0),{changes:r,effects:n.effects&&A.mapEffects(n.effects,O),clientID:n.clientID}}):t}var ts=class{constructor(e,O,i){this.from=e,this.to=O,this.diagnostic=i}},Ti=class t{constructor(e,O,i){this.diagnostics=e,this.panel=O,this.selected=i}static init(e,O,i){let n=i.facet(Xf).markerFilter;n&&(e=n(e,i));let r=e.slice().sort((d,Q)=>d.from-Q.from||d.to-Q.to),a=new Re,o=[],s=0,l=i.doc.iter(),c=0,h=i.doc.length;for(let d=0;;){let Q=d==r.length?null:r[d];if(!Q&&!o.length)break;let $,p;if(o.length)$=s,p=o.reduce((S,y)=>Math.min(S,y.to),Q&&Q.from>$?Q.from:1e8);else{if($=Q.from,$>h)break;p=Q.to,o.push(Q),d++}for(;dS.from||S.to==$))o.push(S),d++,p=Math.min(S.to,p);else{p=Math.min(S.from,p);break}}p=Math.min(p,h);let m=!1;if(o.some(S=>S.from==$&&(S.to==p||p==h))&&(m=$==p,!m&&p-$<10)){let S=$-(c+l.value.length);S>0&&(l.next(S),c=$);for(let y=$;;){if(y>=p){m=!0;break}if(!l.lineBreak&&c+l.value.length>y)break;y=c+l.value.length,c+=l.value.length,l.next()}}let P=l_(o);if(m)a.add($,$,W.widget({widget:new bf(P),diagnostics:o.slice()}));else{let S=o.reduce((y,k)=>k.markClass?y+" "+k.markClass:y,"");a.add($,p,W.mark({class:"cm-lintRange cm-lintRange-"+P+S,diagnostics:o.slice(),inclusiveEnd:o.some(y=>y.to>p)}))}if(s=p,s==h)break;for(let S=0;S{if(!(e&&a.diagnostics.indexOf(e)<0))if(!i)i=new ts(n,r,e||a.diagnostics[0]);else{if(a.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new ts(i.from,r,i.diagnostic)}}),i}var xf=A.define(),$P=A.define(),pP=A.define(),EO=Qe.define({create(){return new Ti(W.none,null,null)},update(t,e){if(e.docChanged&&t.diagnostics.size){let O=t.diagnostics.map(e.changes),i=null,n=t.panel;if(t.selected){let r=e.changes.mapPos(t.selected.from,1);i=xn(O,t.selected.diagnostic,r)||xn(O,null,r)}!O.size&&n&&e.state.facet(Xf).autoPanel&&(n=null),t=new Ti(O,n,i)}for(let O of e.effects)if(O.is(xf)){let i=e.state.facet(Xf).autoPanel?O.value.length?is.open:null:t.panel;t=Ti.init(O.value,i,e.state)}else O.is($P)?t=new Ti(t.diagnostics,O.value?is.open:null,t.selected):O.is(pP)&&(t=new Ti(t.diagnostics,t.panel,O.value));return t},provide:t=>[YO.from(t,e=>e.panel),_.decorations.from(t,e=>e.diagnostics)]});function mP(t){let e=t.field(EO,!1);return e?e.diagnostics.size:0}var dP=t=>{let e=t.state.field(EO,!1);return!e||!e.panel?!1:(t.dispatch({effects:$P.of(!1)}),!0)};var Xf=z.define({combine(t){return{sources:t.map(e=>e.source).filter(e=>e!=null),...xe(t.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:QP,tooltipFilter:QP,needsRefresh:(e,O)=>e?O?i=>e(i)||O(i):e:O,hideOn:(e,O)=>e?O?(i,n,r)=>e(i,n,r)||O(i,n,r):e:O,autoPanel:(e,O)=>e||O})}}});function QP(t,e){return t?e?(O,i)=>e(t(O,i),i):t:e}function gP(t){let e=[];if(t)e:for(let{name:O}of t){for(let i=0;ir.toLowerCase()==n.toLowerCase())){e.push(n);continue e}}e.push("")}return e}function o_(t,e,O){var i;let n=O?gP(e.actions):[];return J("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},J("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(t):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,a)=>{let o=!1,s=d=>{if(d.preventDefault(),o)return;o=!0;let Q=xn(t.state.field(EO).diagnostics,e);Q&&r.apply(t,Q.from,Q.to)},{name:l}=r,c=n[a]?l.indexOf(n[a]):-1,h=c<0?l:[l.slice(0,c),J("u",l.slice(c,c+1)),l.slice(c+1)],f=r.markClass?" "+r.markClass:"";return J("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:s,onmousedown:s,"aria-label":` Action: ${l}${c<0?"":` (access key "${n[a]})"`}.`},h)}),e.source&&J("div",{class:"cm-diagnosticSource"},e.source))}var bf=class extends Ae{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return J("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}},Os=class{constructor(e,O){this.diagnostic=O,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=o_(e,O,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}},is=class t{constructor(e){this.view=e,this.items=[];let O=n=>{if(!(n.ctrlKey||n.altKey||n.metaKey)){if(n.keyCode==27)dP(this.view),this.view.focus();else if(n.keyCode==38||n.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(n.keyCode==40||n.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(n.keyCode==36)this.moveSelection(0);else if(n.keyCode==35)this.moveSelection(this.items.length-1);else if(n.keyCode==13)this.view.focus();else if(n.keyCode>=65&&n.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],a=gP(r.actions);for(let o=0;o{for(let r=0;rdP(this.view)},"\xD7")),this.update()}get selectedIndex(){let e=this.view.state.field(EO).selected;if(!e)return-1;for(let O=0;O{for(let c of l.diagnostics){if(a.has(c))continue;a.add(c);let h=-1,f;for(let d=i;di&&(this.items.splice(i,h-i),n=!0)),O&&f.diagnostic==O.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),r=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:o,panel:s})=>{let l=s.height/this.list.offsetHeight;o.tops.bottom&&(this.list.scrollTop+=(o.bottom-s.bottom)/l)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),n&&this.sync()}sync(){let e=this.list.firstChild;function O(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)O();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)O()}moveSelection(e){if(this.selectedIndex<0)return;let O=this.view.state.field(EO),i=xn(O.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:pP.of(i)})}static open(e){return new t(e)}};function s_(t){return t=="error"?4:t=="warning"?3:t=="info"?2:1}function l_(t){let e="hint",O=1;for(let i of t){let n=s_(i.severity);n>O&&(O=n,e=i.severity)}return e}function PP(t,e){let O=t.field(EO,!1);if(O&&O.diagnostics.size){let i=[],n=[],r=-1;for(let a=te.iter([O.diagnostics]);;a.next()){for(let o=0;o{let e=[];for(let O of t){if(!O)continue;let{create:i,gutters:n}=O,r=c_(O,["create","gutters"]);e.push(Object.assign(Object.assign({},r),{enabled:!0,gutters:n?n.filter(a=>Object.keys(a).length>0):void 0}))}return xe(e,{enabled:e.length>0,displayText:"characters",eventHandlers:{},showOverlay:"always",gutters:[]})}}),dt={PixelMultiplier:2,SizeRatio:4,MaxWidth:120},h_=_.theme({".cm-minimap-overlay-container":{position:"absolute",top:0,height:"100%",width:"100%","&.cm-minimap-overlay-mouse-over":{opacity:0,transition:"visibility 0s linear 300ms, opacity 300ms"},"&.cm-minimap-overlay-mouse-over:hover":{opacity:1,transition:"visibility 0s linear 0ms, opacity 300ms"},"&.cm-minimap-overlay-off":{display:"none"},"& .cm-minimap-overlay":{background:"rgb(121, 121, 121)",opacity:"0.2",position:"absolute",right:0,top:0,width:"100%",transition:"top 0s ease-in 0ms","&:hover":{opacity:"0.3"}},"&.cm-minimap-overlay-active":{opacity:1,visibility:"visible",transition:"visibility 0s linear 0ms, opacity 300ms","& .cm-minimap-overlay":{opacity:"0.4"}}}}),AO=dt.PixelMultiplier*dt.SizeRatio,f_=Oe.fromClass(class{constructor(t){this.view=t,this._isDragging=!1,t.state.facet(Je).enabled&&this.create(t)}create(t){this.container=J("div",{class:"cm-minimap-overlay-container"}),this.dom=J("div",{class:"cm-minimap-overlay"}),this.container.appendChild(this.dom),this.container.addEventListener("mousedown",this.onMouseDown.bind(this)),window.addEventListener("mouseup",this.onMouseUp.bind(this)),window.addEventListener("mousemove",this.onMouseMove.bind(this));let e=t.dom.querySelector(".cm-minimap-inner");e&&e.appendChild(this.container),this.computeShowOverlay(),this.computeHeight(),this.computeTop()}remove(){this.container&&(this.container.removeEventListener("mousedown",this.onMouseDown),window.removeEventListener("mouseup",this.onMouseUp),window.removeEventListener("mousemove",this.onMouseMove),this.container.remove())}update(t){let e=t.startState.facet(Je).enabled,O=t.state.facet(Je).enabled;if(e&&!O){this.remove();return}!e&&O&&this.create(t.view),O&&(this.computeShowOverlay(),t.geometryChanged&&(this.computeHeight(),this.computeTop()))}computeHeight(){if(!this.dom)return;let t=this.view.dom.clientHeight/AO;this.dom.style.height=t+"px"}computeTop(){if(!this._isDragging&&this.dom){let{clientHeight:t,scrollHeight:e,scrollTop:O}=this.view.scrollDOM,i=e-t,n=O/AO,r=t/AO,a=t-r,o=O/i;isNaN(o)&&(o=0);let s=a*o,l=Math.min(s,n);this.dom.style.top=l+"px"}}computeShowOverlay(){if(!this.container)return;let{showOverlay:t}=this.view.state.facet(Je);t==="mouse-over"?this.container.classList.add("cm-minimap-overlay-mouse-over"):this.container.classList.remove("cm-minimap-overlay-mouse-over");let{clientHeight:e,scrollHeight:O}=this.view.scrollDOM;e===O?this.container.classList.add("cm-minimap-overlay-off"):this.container.classList.remove("cm-minimap-overlay-off")}onMouseDown(t){if(!this.container||t.button===2)return;let{clientY:e,target:O}=t;if(O===this.dom){this._dragStartY=t.clientY,this._isDragging=!0,this.container.classList.add("cm-minimap-overlay-active");return}let{clientHeight:i,scrollHeight:n,scrollTop:r}=this.view.scrollDOM,a=O.getBoundingClientRect().top,o=(e-a)*AO,s=r/(n-i),c=(i*AO-i)*s,h=Math.max(0,r-c);this.view.scrollDOM.scrollTop=h+o-i/2}onMouseUp(t){this._isDragging&&this.container&&(this._dragStartY=void 0,this._isDragging=!1,this.container.classList.remove("cm-minimap-overlay-active"))}onMouseMove(t){if(!this._isDragging||!this.dom)return;if(t.preventDefault(),t.stopPropagation(),!this._dragStartY){this._dragStartY=t.clientY;return}let e=t.clientY-this._dragStartY,O=e<0,i=e>0;this._dragStartY=t.clientY;let n=this.dom.getBoundingClientRect().height,r=this.dom.getBoundingClientRect().y,a=r+n,o=parseFloat(this.dom.style.top),s=this.view.scrollDOM.scrollTop,l=this.view.scrollDOM.clientHeight,c=this.view.scrollDOM.scrollHeight,h=s===0,f=Math.round(s)>=Math.round(c-l);if(h&&O||h&&t.clientYa)return;let d=this.view.scrollDOM.scrollHeight,Q=this.view.scrollDOM.clientHeight,$=(d-Q)/AO,p=Q-Q/AO,m=o+e,P=m/p,S=(d-Q)*P,y=m*AO;this.view.scrollDOM.scrollTop=Math.max(S,y);let k=Math.min(Math.max(0,m),Math.min(p,$));this.dom.style.top=k+"px"}destroy(){this.remove()}},{eventHandlers:{scroll(){requestAnimationFrame(()=>this.computeTop())}}}),u_=[h_,f_],jr=class{constructor(e){this.map=new Map,this.view=e}get(e){return this.map.get(e)}set(e,O){this.map.set(e,O)}};function SP(t){var e;if(!t.facet(Je).enabled)return[];let O=[],i=t.doc.iterLines(),n=hh(t).iter(),r=0;for(i.next();!i.done;){let a=i.value,o=r,s=o+a.length;for(;n.value&&n.to=l&&ol&&s<=c;if(h){let d=(e=O.pop())!==null&&e!==void 0?e:[],Q=d.pop();Q&&Q.folded&&(Q.to=c),Q&&d.push(Q),(!Q||!Q.folded)&&d.push({from:l,to:c,folded:!0}),f||d.push({from:c,to:s,folded:!1}),O.push(d)}else f?O.push([{from:o,to:l,folded:!1},{from:l,to:c,folded:!0}]):O.push([{from:o,to:s,folded:!1}]);r=s+1,i.next()}return O}var kn=Qe.define({create:t=>SP(t),update:(t,e)=>ns([e])||e.docChanged?SP(e.state):t});function ns(t){return t.find(e=>e.effects.find(O=>O.is(GO)||O.is(hO)))}var kf=class extends jr{constructor(e){super(e),this.count=void 0}shouldUpdate(e){if(!e.state.facet(Je).enabled)return!1;if(e.docChanged)return!0;for(let O of e.transactions)for(let i of O.effects)if(i.is(xf))return!0;return!!(ns(e.transactions)||this.count===void 0)}update(e){if(!this.shouldUpdate(e))return;this.map.clear();let O=e.state.field(kn);this.count=mP(e.state),PP(e.state,(i,n,r)=>{let a=this.findLine(n,O),o=this.findLine(r,O),s=i.severity;for(let l=a;l<=o;l++){let c=this.get(l);c&&(s=[s,c].sort(this.sort.bind(this)).slice(0,1)[0]),this.set(l,s)}})}drawLine(e,O){let{context:i,lineHeight:n,offsetX:r,offsetY:a}=e,o=this.get(O);o&&(i.globalAlpha=.65,i.beginPath(),i.rect(r,a,i.canvas.width-r,n),i.fillStyle=this.color(o),i.fill())}findLine(e,O){return O.findIndex(n=>{let r=n.slice(0,1)[0],a=n.slice(-1)[0];return!r||!a?!1:r.from<=e&&e<=a.to})+1}color(e){return e==="error"?"#d11":e==="warning"?"orange":"#999"}sort(e,O){return this.score(O)-this.score(e)}score(e){switch(e){case"error":return 3;case"warning":return 2;default:return 1}}};function d_(t){return new kf(t)}var yf=class extends jr{constructor(e){super(e),this.getDrawInfo(),this._themeClasses=e.dom.classList.value}shouldUpdate(e){return e.state.facet(Je).enabled?!!(e.docChanged||e.selectionSet||this._themeClasses!==this.view.dom.classList.value||ns(e.transactions)):!1}update(e){if(!this.shouldUpdate(e))return;this.map.clear(),this._themeClasses!==this.view.dom.classList.value&&(this._drawInfo=void 0,this._themeClasses=this.view.dom.classList.value);let{ranges:O}=e.state.selection,i=0;for(let[n,r]of e.state.field(kn).entries()){let a=[],o=0;for(let l of r){do{if(i>=O.length||l.tol.to},f=a.slice(-1)[0];if(f&&f.to===h.from){let{to:d}=h;l.folded&&h.extends?d=h.from+1:l.folded&&!h.extends&&(d=f.to),a[a.length-1]=Object.assign(Object.assign({},f),{to:d,extends:h.extends})}else l.folded||a.push(h);if(h.extends)break;i++}while(i=O[i].from);o+=l.folded?1:l.to-l.from}if(a.length===0)continue;let s=n+1;this.map.set(s,a)}}drawLine(e,O){let{context:i,lineHeight:n,charWidth:r,offsetX:a,offsetY:o}=e,s=this.get(O);if(s)for(let l of s){let c=a+l.from*r,h=(l.to-l.from)*r,f=i.canvas.width-c;l.extends&&(i.globalAlpha=.65,i.beginPath(),i.rect(c,o,f,n),i.fillStyle=this.getDrawInfo().backgroundColor,i.fill()),i.globalAlpha=1,i.beginPath(),i.rect(c,o,h,n),i.fillStyle=this.getDrawInfo().backgroundColor,i.fill()}}getDrawInfo(){if(this._drawInfo)return this._drawInfo;let e=document.createElement("span");e.setAttribute("class","cm-selectionBackground"),this.view.dom.appendChild(e);let i={backgroundColor:window.getComputedStyle(e).backgroundColor};return this._drawInfo=i,this.view.dom.removeChild(e),i}};function Q_(t){return new yf(t)}var wf=class extends jr{constructor(e){super(e),this._fontInfoMap=new Map,this._themeClasses=new Set(e.dom.classList.values()),e.state.facet(Je).enabled&&this.updateImpl(e.state)}shouldUpdate(e){return!!(e.docChanged||e.state.facet(Je)!==e.startState.facet(Je)||this.themeChanged()||ns(e.transactions))}update(e){this.shouldUpdate(e)&&(this._highlightingCallbackId&&(typeof window.requestIdleCallback<"u"?cancelIdleCallback(this._highlightingCallbackId):clearTimeout(this._highlightingCallbackId)),this.updateImpl(e.state,e.changes))}updateImpl(e,O){var i;this.map.clear(),this._displayText=e.facet(Je).displayText,this.themeChanged()&&this._fontInfoMap.clear();let n;if(this._previousTree&&O){let h=kt.addTree(this._previousTree),f=[];O.iterChangedRanges((d,Q,$,p)=>f.push({fromA:d,toA:Q,fromB:$,toB:p})),n=kt.applyChanges(h,f)}let r=e.doc.toString(),a=(i=e.facet(Yt))===null||i===void 0?void 0:i.parser,o=a?a.parse(r,n):void 0;this._previousTree=o;let s={style:h=>Qh(e,h)},l=[];if(o){let h=e.doc.lineAt(this.view.viewport.from).number,f=e.doc.lineAt(this.view.viewport.to).number,d=f-h,Q=h/(e.doc.lines-d),{SizeRatio:$,PixelMultiplier:p}=dt,m=d*$*p,P=Q*m,S=Math.max(1,Math.floor(h-P)),y=Math.min(f+Math.floor(m-P),e.doc.lines);pr(o,s,(k,T,v)=>{l.push({from:k,to:T,tags:v})},e.doc.line(S).from,e.doc.line(y).to)}this.updateMapImpl(e,l),l=[];let c=()=>{o&&(pr(o,s,(h,f,d)=>{l.push({from:h,to:f,tags:d})}),this.updateMapImpl(e,l),this._highlightingCallbackId=void 0)};this._highlightingCallbackId=typeof window.requestIdleCallback<"u"?requestIdleCallback(c):setTimeout(c)}updateMapImpl(e,O){this.map.clear();let i=e.doc.toString(),n=O.values(),r=n.next();for(let[a,o]of e.field(kn).entries()){let s=[];for(let c of o){if(c.from===c.to)continue;if(c.folded){s.push({text:"\u2026",tags:""});continue}let h=c.from;for(;!r.done&&r.value.fromh&&s.push({text:i.slice(h,f),tags:""});let $=Math.max(f,c.from),p=Math.min(d,c.to);if(s.push({text:i.slice($,p),tags:Q}),h=p,d>p)break;r=n.next()}h!==c.to&&s.push({text:i.slice(h,c.to),tags:""})}let l=a+1;this.map.set(l,s)}}measure(e){let{color:O,font:i,lineHeight:n}=this.getFontInfo("");return e.textBaseline="ideographic",e.fillStyle=O,e.font=i,{charWidth:e.measureText("_").width,lineHeight:n}}beforeDraw(){this._fontInfoMap.clear()}drawLine(e,O){let i=this.get(O);if(!i)return;let{context:n,charWidth:r,lineHeight:a,offsetX:o,offsetY:s}=e,l;n.textBaseline="ideographic";for(let c of i){let h=this.getFontInfo(c.tags);switch((!l||l.color!==h.color)&&(n.fillStyle=h.color),(!l||l.font!==h.font)&&(n.font=h.font),l=h,a=Math.max(a,h.lineHeight),this._displayText){case"characters":{n.fillText(c.text,o,s+a),o+=c.text.length*r;break}case"blocks":{let f=/\S+/g,d;for(;(d=f.exec(c.text))!==null;){let Q=o+d.index*r,$=(f.lastIndex-d.index)*r;if(Q>n.canvas.width)break;Q+$>n.canvas.width&&($=n.canvas.width-Q);let p=2/dt.SizeRatio,m=a-p;n.fillStyle=h.color,n.globalAlpha=.65,n.beginPath(),n.rect(Q,s,$,m),n.fill()}o+=c.text.length*r;break}}}}getFontInfo(e){let O=this._fontInfoMap.get(e);if(O)return O;let i=J("span",{class:e}),n=J("div",{class:"cm-line",style:"display: none"},i);this.view.contentDOM.appendChild(n);let r=window.getComputedStyle(i),a=parseFloat(r.lineHeight)/dt.SizeRatio,o={color:r.color,font:`${r.fontStyle} ${r.fontWeight} ${a}px ${r.fontFamily}`,lineHeight:a};return this._fontInfoMap.set(e,o),this.view.contentDOM.removeChild(n),o}themeChanged(){let e=this._themeClasses,O=new Set(this.view.dom.classList.values());if(this._themeClasses=O,!e||(e.delete("cm-focused"),O.delete("cm-focused"),e.size!==O.size))return!0;let i=!0;return e.forEach(n=>{O.has(n)||(i=!1)}),!i}};function $_(t){return new wf(t)}var bP=4;function p_(t,e,O){let i=t[O];i&&(e.context.fillStyle=i,e.context.globalAlpha=1,e.context.beginPath(),e.context.rect(e.offsetX,e.offsetY,bP,e.lineHeight),e.context.fill())}var m_=_.theme({"&":{height:"100%",overflowY:"auto"},"& .cm-minimap-gutter":{borderRight:0,flexShrink:0,left:"unset",position:"sticky",right:0,top:0},"& .cm-minimap-inner":{height:"100%",position:"absolute",right:0,top:0,overflowY:"hidden","& canvas":{display:"block"}},"& .cm-minimap-box-shadow":{boxShadow:"12px 0px 20px 5px #6c6c6c"}}),XP=6,g_=Oe.fromClass(class{constructor(t){this.view=t,this.text=$_(t),this.selection=Q_(t),this.diagnostic=d_(t),t.state.facet(Wr)&&this.create(t)}create(t){let e=t.state.facet(Wr);if(!e)throw Error("Expected nonnull");this.inner=J("div",{class:"cm-minimap-inner"}),this.canvas=J("canvas"),this.dom=e.create(t).dom,this.dom.classList.add("cm-gutters"),this.dom.classList.add("cm-minimap-gutter"),this.inner.appendChild(this.canvas),this.dom.appendChild(this.inner),this.view.scrollDOM.insertBefore(this.dom,this.view.contentDOM.nextSibling);for(let O in this.view.state.facet(Je).eventHandlers){let i=this.view.state.facet(Je).eventHandlers[O];i&&this.dom.addEventListener(O,n=>i(n,this.view))}}remove(){this.dom&&this.dom.remove()}update(t){let e=t.startState.facet(Wr),O=t.state.facet(Wr);if(e&&!O){this.remove();return}!e&&O&&this.create(t.view),O&&(this.text.update(t),this.selection.update(t),this.diagnostic.update(t),this.render())}getWidth(){let t=this.view.dom.clientWidth;if(t<=dt.MaxWidth*XP){let e=t/(dt.MaxWidth*XP);return dt.MaxWidth*e}return dt.MaxWidth}render(){if(!this.dom||!this.canvas||!this.inner)return;this.text.beforeDraw(),this.updateBoxShadow(),this.dom.style.width=this.getWidth()+"px",this.canvas.style.maxWidth=this.getWidth()+"px",this.canvas.width=this.getWidth()*dt.PixelMultiplier;let t=this.view.dom.getBoundingClientRect().height;this.inner.style.minHeight=t+"px",this.canvas.height=t*dt.PixelMultiplier,this.canvas.style.height=t+"px";let e=this.canvas.getContext("2d");if(!e)return;e.clearRect(0,0,this.canvas.width,this.canvas.height);let{charWidth:O,lineHeight:i}=this.text.measure(e),{startIndex:n,endIndex:r,offsetY:a}=this.canvasStartAndEndIndex(e,i),o=this.view.state.facet(Je).gutters;for(let s=n;s=l.length)break;let c={offsetX:0,offsetY:a,context:e,lineHeight:i,charWidth:O};if(o.length){c.offsetX+=2;for(let h of o)p_(h,c,s+1),c.offsetX+=bP;c.offsetX+=2}this.text.drawLine(c,s+1),this.selection.drawLine(c,s+1),this.diagnostic.drawLine(c,s+1),a+=i}e.restore()}canvasStartAndEndIndex(t,e){let{top:O,bottom:i}=this.view.documentPadding;O/=dt.SizeRatio,i/=dt.SizeRatio;let n=t.canvas.height,{clientHeight:r,scrollHeight:a,scrollTop:o}=this.view.scrollDOM,s=o/(a-r);isNaN(s)&&(s=0);let l=this.view.state.field(kn).length,c=O+i+l*e,h=Math.max(0,s*(c-n)),f=Math.max(0,O-h),d=Math.round(Math.max(0,h-O)/e),Q=Math.round((n-f)/e);return{startIndex:d,endIndex:d+Q,offsetY:f}}updateBoxShadow(){if(!this.canvas)return;let{clientWidth:t,scrollWidth:e,scrollLeft:O}=this.view.scrollDOM;t+Othis.render())}},provide:t=>_.scrollMargins.of(e=>{var O;let i=(O=e.plugin(t))===null||O===void 0?void 0:O.getWidth();return i?{right:i}:null})}),Wr=z.define({combine:t=>{var e;return(e=t.find(O=>O!==null))!==null&&e!==void 0?e:null},enables:t=>[[Je.compute([t],e=>e.facet(t)),m_,kn,g_,u_]]});function P_(t,e=t.state){let O=new Set;for(let{from:i,to:n}of t.visibleRanges){let r=i;for(;r<=n;){let a=e.doc.lineAt(r);O.has(a)||O.add(a),r=a.to+1}}return O}function Tf(t){let e=t.selection.main.head;return t.doc.lineAt(e)}function xP(t,e){let O=0;e:for(let i=0;i=r.level&&this.markerType!=="codeOnly"?this.set(e,0,n.level):n.empty&&n.level===0&&r.level!==0?this.set(e,0,0):r.level>n.level?this.set(e,0,n.level+1):this.set(e,0,r.level)}let O=xP(e.text,this.state.tabSize),i=Math.floor(O/this.unitWidth);return this.set(e,O,i)}closestNonEmpty(e,O){let i=e.number+O;for(;O===-1?i>=1:i<=this.state.doc.lines;){if(this.has(i)){let a=this.get(i);if(!a.empty)return a}let r=this.state.doc.line(i);if(r.text.trim().length){let a=xP(r.text,this.state.tabSize),o=Math.floor(a/this.unitWidth);return this.set(r,a,o)}i+=O}let n=this.state.doc.line(O===-1?1:this.state.doc.lines);return this.set(n,0,0)}findAndSetActiveLines(){let e=Tf(this.state);if(!this.has(e))return;let O=this.get(e);if(this.has(O.line.number+1)){let r=this.get(O.line.number+1);r.level>O.level&&(O=r)}if(this.has(O.line.number-1)){let r=this.get(O.line.number-1);r.level>O.level&&(O=r)}if(O.level===0)return;O.active=O.level;let i,n;for(i=O.line.number;i>1;i--){if(!this.has(i-1))continue;let r=this.get(i-1);if(r.level0&&s.push(rs("--indent-marker-bg-color",i,e,o,l)),s.push(rs("--indent-marker-active-bg-color",n,e,a-1,1)),a!==r&&s.push(rs("--indent-marker-bg-color",i,e,a,r-a))}else s.push(rs("--indent-marker-bg-color",i,e,o,r-o));return s.join(",")}var _f=class{constructor(e){this.view=e,this.unitWidth=wt(e.state),this.currentLineNumber=Tf(e.state).number,this.generate(e.state)}update(e){let O=wt(e.state),i=O!==this.unitWidth;i&&(this.unitWidth=O);let n=Tf(e.state).number,r=n!==this.currentLineNumber;this.currentLineNumber=n;let a=e.state.facet(as).highlightActiveBlock&&r;(e.docChanged||e.viewportChanged||i||a)&&this.generate(e.state)}generate(e){let O=new Re,i=P_(this.view,e),{hideFirstIndent:n,markerType:r,thickness:a,activeThickness:o}=e.facet(as),s=new vf(i,e,this.unitWidth,r);for(let l of i){let c=s.get(l.number);if(!c?.level)continue;let h=X_(c,this.unitWidth,n,a,o);O.add(l.from,l.from,W.line({class:"cm-indent-markers",attributes:{style:`--indent-markers: ${h}`}}))}this.decorations=O.finish()}};function b_(t={}){return[as.of(t),S_(t.colors),Oe.fromClass(_f,{decorations:e=>e.decorations})]}var Yf=class t{constructor(e,O,i,n,r,a,o,s,l,c=0,h){this.p=e,this.stack=O,this.state=i,this.reducePos=n,this.pos=r,this.score=a,this.buffer=o,this.bufferBase=s,this.curContext=l,this.lookAhead=c,this.parent=h}toString(){return`[${this.stack.filter((e,O)=>O%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,O,i=0){let n=e.parser.context;return new t(e,[],O,i,i,0,[],0,n?new os(n,n.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,O){this.stack.push(this.state,O,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var O;let i=e>>19,n=e&65535,{parser:r}=this.p,a=this.reducePos=2e3&&!(!((O=this.p.parser.nodeSet.types[n])===null||O===void 0)&&O.isAnonymous)&&(l==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSizes;)this.stack.pop();this.reduceContext(n,l)}storeNode(e,O,i,n=4,r=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[a-4]==0&&this.buffer[a-1]>-1){if(O==i)return;if(this.buffer[a-2]>=O){this.buffer[a-2]=i;return}}}if(!r||this.pos==i)this.buffer.push(e,O,i,n);else{let a=this.buffer.length;if(a>0&&(this.buffer[a-4]!=0||this.buffer[a-1]<0)){let o=!1;for(let s=a;s>0&&this.buffer[s-2]>i;s-=4)if(this.buffer[s-1]>=0){o=!0;break}if(o)for(;a>0&&this.buffer[a-2]>i;)this.buffer[a]=this.buffer[a-4],this.buffer[a+1]=this.buffer[a-3],this.buffer[a+2]=this.buffer[a-2],this.buffer[a+3]=this.buffer[a-1],a-=4,n>4&&(n-=4)}this.buffer[a]=e,this.buffer[a+1]=O,this.buffer[a+2]=i,this.buffer[a+3]=n}}shift(e,O,i,n){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let r=e,{parser:a}=this.p;this.pos=n;let o=a.stateFlag(r,1);!o&&(n>i||O<=a.maxNode)&&(this.reducePos=n),this.pushState(r,o?i:Math.min(i,this.reducePos)),this.shiftContext(O,i),O<=a.maxNode&&this.buffer.push(O,i,n,4)}else this.pos=n,this.shiftContext(O,i),O<=this.p.parser.maxNode&&this.buffer.push(O,i,n,4)}apply(e,O,i,n){e&65536?this.reduce(e):this.shift(e,O,i,n)}useNode(e,O,i){let n=this.p.reused.length-1;(n<0||this.p.reused[n]!=e)&&(this.p.reused.push(e),n++);let r=this.reducePos=this.pos=i+e.length;this.pushState(O,i),this.buffer.push(n,i,r,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,O=e.buffer.length;for(O&&e.buffer[O-4]==0&&(O-=4);O>0&&e.buffer[O-2]>e.reducePos;)O-=4;let i=e.buffer.slice(O),n=e.bufferBase+O;for(;e&&n==e.bufferBase;)e=e.parent;return new t(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,n,this.curContext,this.lookAhead,e)}recoverByDelete(e,O){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,O,4),this.storeNode(0,this.pos,O,i?8:4),this.pos=this.reducePos=O,this.score-=190}canShift(e){for(let O=new zf(this);;){let i=this.p.parser.stateSlot(O.state,4)||this.p.parser.hasAction(O.state,e);if(i==0)return!1;if((i&65536)==0)return!0;O.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let O=this.p.parser.nextStates(this.state);if(O.length>8||this.stack.length>=120){let n=[];for(let r=0,a;rs&1&&o==a)||n.push(O[r],a)}O=n}let i=[];for(let n=0;n>19,n=O&65535,r=this.stack.length-i*3;if(r<0||e.getGoto(this.stack[r],n,!1)<0){let a=this.findForcedReduction();if(a==null)return!1;O=a}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(O),!0}findForcedReduction(){let{parser:e}=this.p,O=[],i=(n,r)=>{if(!O.includes(n))return O.push(n),e.allActions(n,a=>{if(!(a&393216))if(a&65536){let o=(a>>19)-r;if(o>1){let s=a&65535,l=this.stack.length-o*3;if(l>=0&&e.getGoto(this.stack[l],s,!1)>=0)return o<<19|65536|s}}else{let o=i(a,r+1);if(o!=null)return o}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let O=0;O0&&this.emitLookAhead()}},os=class{constructor(e,O){this.tracker=e,this.context=O,this.hash=e.strict?e.hash(O):0}},zf=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let O=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let n=this.start.p.parser.getGoto(this.stack[this.base-3],O,!0);this.state=n}},qf=class t{constructor(e,O,i){this.stack=e,this.pos=O,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,O=e.bufferBase+e.buffer.length){return new t(e,O,O-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new t(this.stack,this.pos,this.index)}};function Gr(t,e=Uint16Array){if(typeof t!="string")return t;let O=null;for(let i=0,n=0;i=92&&a--,a>=34&&a--;let s=a-32;if(s>=46&&(s-=46,o=!0),r+=s,o)break;r*=46}O?O[n++]=r:O=new e(r)}return O}var yn=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},kP=new yn,Uf=class{constructor(e,O){this.input=e,this.ranges=O,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=kP,this.rangeIndex=0,this.pos=this.chunkPos=O[0].from,this.range=O[0],this.end=O[O.length-1].to,this.readNext()}resolveOffset(e,O){let i=this.range,n=this.rangeIndex,r=this.pos+e;for(;ri.to:r>=i.to;){if(n==this.ranges.length-1)return null;let a=this.ranges[++n];r+=a.from-i.to,i=a}return r}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,O.from);return this.end}peek(e){let O=this.chunkOff+e,i,n;if(O>=0&&O=this.chunk2Pos&&io.to&&(this.chunk2=this.chunk2.slice(0,o.to-i)),n=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),n}acceptToken(e,O=0){let i=O?this.resolveOffset(O,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,O){if(O?(this.token=O,O.start=e,O.lookAhead=e+1,O.value=O.extended=-1):this.token=kP,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&O<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,O-this.chunkPos);if(e>=this.chunk2Pos&&O<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,O-this.chunk2Pos);if(e>=this.range.from&&O<=this.range.to)return this.input.read(e,O);let i="";for(let n of this.ranges){if(n.from>=O)break;n.to>e&&(i+=this.input.read(Math.max(n.from,e),Math.min(n.to,O)))}return i}},LO=class{constructor(e,O){this.data=e,this.id=O}token(e,O){let{parser:i}=O.p;_P(this.data,e,O,this.id,i.data,i.tokenPrecTable)}};LO.prototype.contextual=LO.prototype.fallback=LO.prototype.extend=!1;var vt=class{constructor(e,O,i){this.precTable=O,this.elseToken=i,this.data=typeof e=="string"?Gr(e):e}token(e,O){let i=e.pos,n=0;for(;;){let r=e.next<0,a=e.resolveOffset(1,1);if(_P(this.data,e,O,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(r||n++,a==null)break;e.reset(a,e.token)}n&&(e.reset(i,e.token),e.acceptToken(this.elseToken,n))}};vt.prototype.contextual=LO.prototype.fallback=LO.prototype.extend=!1;var D=class{constructor(e,O={}){this.token=e,this.contextual=!!O.contextual,this.fallback=!!O.fallback,this.extend=!!O.extend}};function _P(t,e,O,i,n,r){let a=0,o=1<0){let Q=t[d];if(s.allows(Q)&&(e.token.value==-1||e.token.value==Q||k_(Q,e.token.value,n,r))){e.acceptToken(Q);break}}let c=e.next,h=0,f=t[a+2];if(e.next<0&&f>h&&t[l+f*3-3]==65535){a=t[l+f*3-1];continue e}for(;h>1,Q=l+d+(d<<1),$=t[Q],p=t[Q+1]||65536;if(c<$)f=d;else if(c>=p)h=d+1;else{a=t[Q+2],e.advance();continue e}}break}}function yP(t,e,O){for(let i=e,n;(n=t[i])!=65535;i++)if(n==O)return i-e;return-1}function k_(t,e,O,i){let n=yP(O,i,e);return n<0||yP(O,i,t)e)&&!i.type.isError)return O<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(t.length,Math.max(i.from+1,e+25));if(O<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return O<0?0:t.length}}var Vf=class{constructor(e,O){this.fragments=e,this.minRepeat=O,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.lastRepeat=null,this.lastRepeatPos=-1,this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?wP(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?wP(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=a,null;if(r instanceof H){let o=a>this.lastRepeatPos&&r.type.id>=this.minRepeat;if(a==e||o){let s=a+r.length,l;if(a>=this.safeFrom&&s<=this.safeTo&&(!(l=r.prop(L.lookAhead))||s+l=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(a),this.index.push(0))}else this.index[O]++,this.nextStart=a+r.length}}},Wf=class{constructor(e,O){this.stream=O,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new yn)}getActions(e){let O=0,i=null,{parser:n}=e.p,{tokenizers:r}=n,a=n.stateSlot(e.state,3),o=e.curContext?e.curContext.hash:0,s=0;for(let l=0;lh.end+25&&(s=Math.max(h.lookAhead,s)),h.value!=0)){let f=O;if(h.extended>-1&&(O=this.addActions(e,h.extended,h.end,O)),O=this.addActions(e,h.value,h.end,O),!c.extend&&(i=h,O>f))break}}for(;this.actions.length>O;)this.actions.pop();return s&&e.setLookAhead(s),!i&&e.pos==this.stream.end&&(i=new yn,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,O=this.addActions(e,i.value,i.end,O)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let O=new yn,{pos:i,p:n}=e;return O.start=i,O.end=Math.min(i+1,n.stream.end),O.value=i==n.stream.end?n.parser.eofTerm:0,O}updateCachedToken(e,O,i){let n=this.stream.clipPos(i.pos);if(O.token(this.stream.reset(n,e),i),e.value>-1){let{parser:r}=i.p;for(let a=0;a=0&&i.p.parser.dialect.allows(o>>1)){(o&1)==0?e.value=o>>1:e.extended=o>>1;break}}}else e.value=0,e.end=this.stream.clipPos(n+1)}putAction(e,O,i,n){for(let r=0;re.bufferLength*4?new Vf(i,e.minRepeatTerm):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,O=this.minStackPos,i=this.stacks=[],n,r;if(this.bigReductionCount>300&&e.length==1){let[a]=e;for(;a.forceReduce()&&a.stack.length&&a.stack[a.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let a=0;aO)i.push(o);else{if(this.advanceStack(o,i,e))continue;{n||(n=[],r=[]),n.push(o);let s=this.tokens.getMainToken(o);r.push(s.value,s.end)}}break}}if(!i.length){let a=n&&y_(n);if(a)return Qt&&console.log("Finish with "+this.stackID(a)),this.stackToTree(a);if(this.parser.strict)throw Qt&&n&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+O);this.recovering||(this.recovering=5)}if(this.recovering&&n){let a=this.stoppedAt!=null&&n[0].pos>this.stoppedAt?n[0]:this.runRecovery(n,r,i);if(a)return Qt&&console.log("Force-finish "+this.stackID(a)),this.stackToTree(a.forceAll())}if(this.recovering){let a=this.recovering==1?1:this.recovering*3;if(i.length>a)for(i.sort((o,s)=>s.score-o.score);i.length>a;)i.pop();i.some(o=>o.reducePos>O)&&this.recovering--}else if(i.length>1){e:for(let a=0;a500&&l.buffer.length>500)if((o.score-l.score||o.buffer.length-l.buffer.length)>0)i.splice(s--,1);else{i.splice(a--,1);continue e}}}i.length>12&&(i.sort((a,o)=>o.score-a.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let a=1;a-1&&i.length&&(!r||(i.prop(L.contextHash)||0)==a))return e.useNode(i,o,O),i;if(i.children.length==0||i.positions[0]>0)break;let s=i.children[0];if(s instanceof H&&(!n||s.type.id>=this.parser.minRepeatTerm))i=s;else break}return null}advanceStack(e,O,i){let n=e.pos,{parser:r}=this,a=Qt?this.stackID(e)+" -> ":"";if(this.stoppedAt!=null&&n>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let l=e.reducePos0)return e.reduce(o),Qt&&console.log(a+this.stackID(e)+` (via always-reduce ${r.getName(o&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let s=this.tokens.getActions(e);for(let l=0;ln?O.push(Q):i.push(Q)}return!1}advanceFully(e,O){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return TP(e,O),!0}}runRecovery(e,O,i){let n=null,r=!1;for(let a=0;a ":"";if(o.deadEnd&&(r||(r=!0,o.restart(),Qt&&console.log(c+this.stackID(o)+" (restarted)"),this.advanceFully(o,i))))continue;let h=o.split(),f=c;for(let d=0;d<10&&h.forceReduce()&&(Qt&&console.log(f+this.stackID(h)+" (via force-reduce)"),!this.advanceFully(h,i));d++)Qt&&(f=this.stackID(h)+" -> ");for(let d of o.recoverByInsert(s))Qt&&console.log(c+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>o.pos?(l==o.pos&&(l++,s=0),o.recoverByDelete(s,l),Qt&&console.log(c+this.stackID(o)+` (via recover-delete ${this.parser.getName(s)})`),TP(o,i)):(!n||n.scoret,st=class{constructor(e){this.start=e.start,this.shift=e.shift||Rf,this.reduce=e.reduce||Rf,this.reuse=e.reuse||Rf,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}},de=class t extends aO{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let O=e.nodeNames.split(" ");this.minRepeatTerm=O.length;for(let o=0;oe.topRules[o][1]),n=[];for(let o=0;o=0)r(c,s,o[l++]);else{let h=o[l+-c];for(let f=-c;f>0;f--)r(o[l++],s,h);l++}}}this.nodeSet=new rO(O.map((o,s)=>ke.define({name:s>=this.minRepeatTerm?void 0:o,id:s,props:n[s],top:i.indexOf(s)>-1,error:s==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(s)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let a=Gr(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let o=0;otypeof o=="number"?new LO(a,o):o),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,O,i){let n=new jf(this,e,O,i);for(let r of this.wrappers)n=r(n,e,O,i);return n}getGoto(e,O,i=!1){let n=this.goto;if(O>=n[0])return-1;for(let r=n[O+1];;){let a=n[r++],o=a&1,s=n[r++];if(o&&i)return s;for(let l=r+(a>>1);r0}validAction(e,O){return!!this.allActions(e,i=>i==O?!0:null)}allActions(e,O){let i=this.stateSlot(e,4),n=i?O(i):void 0;for(let r=this.stateSlot(e,1);n==null;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=QO(this.data,r+2);else break;n=O(QO(this.data,r+1))}return n}nextStates(e){let O=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=QO(this.data,i+2);else break;if((this.data[i+2]&1)==0){let n=this.data[i+1];O.some((r,a)=>a&1&&r==n)||O.push(this.data[i],n)}}return O}configure(e){let O=Object.assign(Object.create(t.prototype),this);if(e.props&&(O.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);O.top=i}return e.tokenizers&&(O.tokenizers=this.tokenizers.map(i=>{let n=e.tokenizers.find(r=>r.from==i);return n?n.to:i})),e.specializers&&(O.specializers=this.specializers.slice(),O.specializerSpecs=this.specializerSpecs.map((i,n)=>{let r=e.specializers.find(o=>o.from==i.external);if(!r)return i;let a=Object.assign(Object.assign({},i),{external:r.to});return O.specializers[n]=vP(a),a})),e.contextTracker&&(O.context=e.contextTracker),e.dialect&&(O.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(O.strict=e.strict),e.wrap&&(O.wrappers=O.wrappers.concat(e.wrap)),e.bufferLength!=null&&(O.bufferLength=e.bufferLength),O}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let O=this.dynamicPrecedences;return O==null?0:O[e]||0}parseDialect(e){let O=Object.keys(this.dialects),i=O.map(()=>!1);if(e)for(let r of e.split(" ")){let a=O.indexOf(r);a>=0&&(i[a]=!0)}let n=null;for(let r=0;ri)&&O.p.parser.stateFlag(O.state,2)&&(!e||e.scoret.external(O,i)<<1|e}return t.get}var w_=re({String:u.string,Number:u.number,"True False":u.bool,PropertyName:u.propertyName,Null:u.null,", :":u.separator,"[ ]":u.squareBracket,"{ }":u.brace}),ZP=de.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"\u26A0 JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[w_],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var T_=fe.define({name:"json",parser:ZP.configure({props:[se.add({Object:ue({except:/^\s*\}/}),Array:ue({except:/^\s*\]/})}),le.add({"Object Array":we})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function RP(){return new oe(T_)}var wn=63,YP=64,v_=1,__=2,UP=3,Z_=4,VP=5,R_=6,Y_=7,WP=65,z_=66,q_=8,U_=9,V_=10,W_=11,j_=12,jP=13,G_=19,C_=20,E_=29,A_=33,L_=34,I_=47,M_=0,Mf=1,Ef=2,Er=3,Af=4,$O=class{constructor(e,O,i){this.parent=e,this.depth=O,this.type=i,this.hash=(e?e.hash+e.hash<<8:0)+O+(O<<4)+i}};$O.top=new $O(null,-1,M_);function Cr(t,e){for(let O=0,i=e-t.pos-1;;i--,O++){let n=t.peek(i);if(pO(n)||n==-1)return O}}function Lf(t){return t==32||t==9}function pO(t){return t==10||t==13}function GP(t){return Lf(t)||pO(t)}function vi(t){return t<0||GP(t)}var D_=new st({start:$O.top,reduce(t,e){return t.type==Er&&(e==C_||e==L_)?t.parent:t},shift(t,e,O,i){if(e==UP)return new $O(t,Cr(i,i.pos),Mf);if(e==WP||e==VP)return new $O(t,Cr(i,i.pos),Ef);if(e==wn)return t.parent;if(e==G_||e==A_)return new $O(t,0,Er);if(e==jP&&t.type==Af)return t.parent;if(e==I_){let n=/[1-9]/.exec(i.read(i.pos,O.pos));if(n)return new $O(t,t.depth+ +n[0],Af)}return t},hash(t){return t.hash}});function Tn(t,e,O=0){return t.peek(O)==e&&t.peek(O+1)==e&&t.peek(O+2)==e&&vi(t.peek(O+3))}var N_=new D((t,e)=>{if(t.next==-1&&e.canShift(YP))return t.acceptToken(YP);let O=t.peek(-1);if((pO(O)||O<0)&&e.context.type!=Er){if(Tn(t,45))if(e.canShift(wn))t.acceptToken(wn);else return t.acceptToken(v_,3);if(Tn(t,46))if(e.canShift(wn))t.acceptToken(wn);else return t.acceptToken(__,3);let i=0;for(;t.next==32;)i++,t.advance();(i{if(e.context.type==Er){t.next==63&&(t.advance(),vi(t.next)&&t.acceptToken(Y_));return}if(t.next==45)t.advance(),vi(t.next)&&t.acceptToken(e.context.type==Mf&&e.context.depth==Cr(t,t.pos-1)?Z_:UP);else if(t.next==63)t.advance(),vi(t.next)&&t.acceptToken(e.context.type==Ef&&e.context.depth==Cr(t,t.pos-1)?R_:VP);else{let O=t.pos;for(;;)if(Lf(t.next)){if(t.pos==O)return;t.advance()}else if(t.next==33)CP(t);else if(t.next==38)If(t);else if(t.next==42){If(t);break}else if(t.next==39||t.next==34){if(Df(t,!0))break;return}else if(t.next==91||t.next==123){if(!H_(t))return;break}else{EP(t,!0,!1,0);break}for(;Lf(t.next);)t.advance();if(t.next==58){if(t.pos==O&&e.canShift(E_))return;let i=t.peek(1);vi(i)&&t.acceptTokenTo(e.context.type==Ef&&e.context.depth==Cr(t,O)?z_:WP,O)}}},{contextual:!0});function F_(t){return t>32&&t<127&&t!=34&&t!=37&&t!=44&&t!=60&&t!=62&&t!=92&&t!=94&&t!=96&&t!=123&&t!=124&&t!=125}function zP(t){return t>=48&&t<=57||t>=97&&t<=102||t>=65&&t<=70}function qP(t,e){return t.next==37?(t.advance(),zP(t.next)&&t.advance(),zP(t.next)&&t.advance(),!0):F_(t.next)||e&&t.next==44?(t.advance(),!0):!1}function CP(t){if(t.advance(),t.next==60){for(t.advance();;)if(!qP(t,!0)){t.next==62&&t.advance();break}}else for(;qP(t,!1););}function If(t){for(t.advance();!vi(t.next)&&ss(t.next)!="f";)t.advance()}function Df(t,e){let O=t.next,i=!1,n=t.pos;for(t.advance();;){let r=t.next;if(r<0)break;if(t.advance(),r==O)if(r==39)if(t.next==39)t.advance();else break;else break;else if(r==92&&O==34)t.next>=0&&t.advance();else if(pO(r)){if(e)return!1;i=!0}else if(e&&t.pos>=n+1024)return!1}return!i}function H_(t){for(let e=[],O=t.pos+1024;;)if(t.next==91||t.next==123)e.push(t.next),t.advance();else if(t.next==39||t.next==34){if(!Df(t,!0))return!1}else if(t.next==93||t.next==125){if(e[e.length-1]!=t.next-2)return!1;if(e.pop(),t.advance(),!e.length)return!0}else{if(t.next<0||t.pos>O||pO(t.next))return!1;t.advance()}}var K_="iiisiiissisfissssssssssssisssiiissssssssssssssssssssssssssfsfssissssssssssssssssssssssssssfif";function ss(t){return t<33?"u":t>125?"s":K_[t-33]}function Cf(t,e){let O=ss(t);return O!="u"&&!(e&&O=="f")}function EP(t,e,O,i){if(ss(t.next)=="s"||(t.next==63||t.next==58||t.next==45)&&Cf(t.peek(1),O))t.advance();else return!1;let n=t.pos;for(;;){let r=t.next,a=0,o=i+1;for(;GP(r);){if(pO(r)){if(e)return!1;o=0}else o++;r=t.peek(++a)}if(!(r>=0&&(r==58?Cf(t.peek(a+1),O):r==35?t.peek(a-1)!=32:Cf(r,O)))||!O&&o<=i||o==0&&!O&&(Tn(t,45,a)||Tn(t,46,a)))break;if(e&&ss(r)=="f")return!1;for(let l=a;l>=0;l--)t.advance();if(e&&t.pos>n+1024)return!1}return!0}var J_=new D((t,e)=>{if(t.next==33)CP(t),t.acceptToken(j_);else if(t.next==38||t.next==42){let O=t.next==38?V_:W_;If(t),t.acceptToken(O)}else t.next==39||t.next==34?(Df(t,!1),t.acceptToken(U_)):EP(t,!1,e.context.type==Er,e.context.depth)&&t.acceptToken(q_)}),eZ=new D((t,e)=>{let O=e.context.type==Af?e.context.depth:-1,i=t.pos;e:for(;;){let n=0,r=t.next;for(;r==32;)r=t.peek(++n);if(!n&&(Tn(t,45,n)||Tn(t,46,n))||!pO(r)&&(O<0&&(O=Math.max(e.context.depth+1,n)),nYAN>Y",stateData:";S~O!fOS!gOS^OS~OP_OQbORSOTUOWROXROYYOZZO[XOcPOqQO!PVO!V[O!cTO~O`cO~P]OVkOWROXROYeOZfO[dOcPOmhOqQO~OboO~P!bOVtOWROXROYeOZfO[dOcPOmrOqQO~OpwO~P#WORSOTUOWROXROYYOZZO[XOcPOqQO!PVO!cTO~OSvP!avP!bvP~P#|OWROXROYeOZfO[dOcPOqQO~OmzO~P%OOm!OOUzP!azP!bzP!dzP~P#|O^!SO!b!QO!f!TO!g!RO~ORSOTUOWROXROcPOqQO!PVO!cTO~OY!UOP!QXQ!QX!V!QX!`!QXS!QX!a!QX!b!QXU!QXm!QX!d!QX~P&aO[!WOP!SXQ!SX!V!SX!`!SXS!SX!a!SX!b!SXU!SXm!SX!d!SX~P&aO^!ZO!W![O!b!YO!f!]O!g!YO~OP!_O!V[OQaX!`aX~OPaXQaX!VaX!`aX~P#|OP!bOQ!cO!V[O~OP_O!V[O~P#|OWROXROY!fOcPOqQObfXmfXofXpfX~OWROXRO[!hOcPOqQObhXmhXohXphX~ObeXmlXoeX~ObkXokX~P%OOm!kO~Om!lObnPonP~P%OOb!pOo!oO~Ob!pO~P!bOm!sOosXpsX~OosXpsX~P%OOm!uOotPptP~P%OOo!xOp!yO~Op!yO~P#WOS!|O!a#OO!b#OO~OUyX!ayX!byX!dyX~P#|Om#QO~OU#SO!a#UO!b#UO!d#RO~Om#WOUzX!azX!bzX!dzX~O]#XO~O!b#XO!g#YO~O^#ZO!b#XO!g#YO~OP!RXQ!RX!V!RX!`!RXS!RX!a!RX!b!RXU!RXm!RX!d!RX~P&aOP!TXQ!TX!V!TX!`!TXS!TX!a!TX!b!TXU!TXm!TX!d!TX~P&aO!b#^O!g#^O~O^#_O!b#^O!f#`O!g#^O~O^#_O!W#aO!b#^O!g#^O~OPaaQaa!Vaa!`aa~P#|OP#cO!V[OQ!XX!`!XX~OP!XXQ!XX!V!XX!`!XX~P#|OP_O!V[OQ!_X!`!_X~P#|OWROXROcPOqQObgXmgXogXpgX~OWROXROcPOqQObiXmiXoiXpiX~Obkaoka~P%OObnXonX~P%OOm#kO~Ob#lOo!oO~Oosapsa~P%OOotXptX~P%OOm#pO~Oo!xOp#qO~OSwP!awP!bwP~P#|OS!|O!a#vO!b#vO~OUya!aya!bya!dya~P#|Om#xO~P%OOm#{OU}P!a}P!b}P!d}P~P#|OU#SO!a$OO!b$OO!d#RO~O]$QO~O!b$QO!g$RO~O!b$SO!g$SO~O^$TO!b$SO!g$SO~O^$TO!b$SO!f$UO!g$SO~OP!XaQ!Xa!V!Xa!`!Xa~P#|Obnaona~P%OOotapta~P%OOo!xO~OU|X!a|X!b|X!d|X~P#|Om$ZO~Om$]OU}X!a}X!b}X!d}X~O]$^O~O!b$_O!g$_O~O^$`O!b$_O!g$_O~OU|a!a|a!b|a!d|a~P#|O!b$cO!g$cO~O",goto:",]!mPPPPPPPPPPPPPPPPP!nPP!v#v#|$`#|$c$f$j$nP%VPPP!v%Y%^%a%{&O%a&R&U&X&_&b%aP&e&{&e'O'RPP']'a'g'm's'y(XPPPPPPPP(_)e*X+c,VUaObcR#e!c!{ROPQSTUXY_bcdehknrtvz!O!U!W!_!b!c!f!h!k!l!s!u!|#Q#R#S#W#c#k#p#x#{$Z$]QmPR!qnqfPQThknrtv!k!l!s!u#R#k#pR!gdR!ieTlPnTjPnSiPnSqQvQ{TQ!mkQ!trQ!vtR#y#RR!nkTsQvR!wt!RWOSUXY_bcz!O!U!W!_!b!c!|#Q#S#W#c#x#{$Z$]RySR#t!|R|TR|UQ!PUR#|#SR#z#RR#z#SyZOSU_bcz!O!_!b!c!|#Q#S#W#c#x#{$Z$]R!VXR!XYa]O^abc!a!c!eT!da!eQnPR!rnQvQR!{vQ!}yR#u!}Q#T|R#}#TW^Obc!cS!^^!aT!aa!eQ!eaR#f!eW`Obc!cQxSS}U#SQ!`_Q#PzQ#V!OQ#b!_Q#d!bQ#s!|Q#w#QQ$P#WQ$V#cQ$Y#xQ$[#{Q$a$ZR$b$]xZOSU_bcz!O!_!b!c!|#Q#S#W#c#x#{$Z$]Q!VXQ!XYQ#[!UR#]!W!QWOSUXY_bcz!O!U!W!_!b!c!|#Q#S#W#c#x#{$Z$]pfPQThknrtv!k!l!s!u#R#k#pQ!gdQ!ieQ#g!fR#h!hSgPn^pQTkrtv#RQ!jhQ#i!kQ#j!lQ#n!sQ#o!uQ$W#kR$X#pQuQR!zv",nodeNames:"\u26A0 DirectiveEnd DocEnd - - ? ? ? Literal QuotedLiteral Anchor Alias Tag BlockLiteralContent Comment Stream BOM Document ] [ FlowSequence Item Tagged Anchored Anchored Tagged FlowMapping Pair Key : Pair , } { FlowMapping Pair Pair BlockSequence Item Item BlockMapping Pair Pair Key Pair Pair BlockLiteral BlockLiteralHeader Tagged Anchored Anchored Tagged Directive DirectiveName DirectiveContent Document",maxTerm:74,context:D_,nodeProps:[["isolate",-3,8,9,14,""],["openedBy",18,"[",32,"{"],["closedBy",19,"]",33,"}"]],propSources:[tZ],skippedNodes:[0],repeatNodeCount:6,tokenData:"-Y~RnOX#PXY$QYZ$]Z]#P]^$]^p#Ppq$Qqs#Pst$btu#Puv$yv|#P|}&e}![#P![!]'O!]!`#P!`!a'i!a!}#P!}#O*g#O#P#P#P#Q+Q#Q#o#P#o#p+k#p#q'i#q#r,U#r;'S#P;'S;=`#z<%l?HT#P?HT?HU,o?HUO#PQ#UU!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PQ#kTOY#PZs#Pt;'S#P;'S;=`#z<%lO#PQ#}P;=`<%l#P~$VQ!f~XY$Qpq$Q~$bO!g~~$gS^~OY$bZ;'S$b;'S;=`$s<%lO$b~$vP;=`<%l$bR%OX!WQOX%kXY#PZ]%k]^#P^p%kpq#hq;'S%k;'S;=`&_<%lO%kR%rX!WQ!VPOX%kXY#PZ]%k]^#P^p%kpq#hq;'S%k;'S;=`&_<%lO%kR&bP;=`<%l%kR&lUoP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR'VUmP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR'p[!PP!WQOY#PZp#Ppq#hq{#P{|(f|}#P}!O(f!O!R#P!R![)p![;'S#P;'S;=`#z<%lO#PR(mW!PP!WQOY#PZp#Ppq#hq!R#P!R![)V![;'S#P;'S;=`#z<%lO#PR)^U!PP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR)wY!PP!WQOY#PZp#Ppq#hq{#P{|)V|}#P}!O)V!O;'S#P;'S;=`#z<%lO#PR*nUcP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR+XUbP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR+rUqP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR,]UpP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR,vU`P!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#P",tokenizers:[N_,B_,J_,eZ,0,1],topRules:{Stream:[0,15]},tokenPrec:0});var OZ=de.deserialize({version:14,states:"!vOQOPOOO]OPO'#C_OhOPO'#C^OOOO'#Cc'#CcOpOPO'#CaQOOOOOO{OPOOOOOO'#Cb'#CbO!WOPO'#C`O!`OPO,58xOOOO-E6a-E6aOOOO-E6`-E6`OOOO'#C_'#C_OOOO1G.d1G.d",stateData:"!h~OXPOYROWTP~OWVXXRXYRX~OYVOXSP~OXROYROWTX~OXROYROWTP~OYVOXSX~OX[O~OXY~",goto:"vWPPX[beioRUOQQOR]XRXQTTOUQWQRZWSSOURYS",nodeNames:"\u26A0 Document Frontmatter DashLine FrontmatterContent Body",maxTerm:10,skippedNodes:[0],repeatNodeCount:2,tokenData:"$z~RXOYnYZ!^Z]n]^!^^}n}!O!i!O;'Sn;'S;=`!c<%lOn~qXOYnYZ!^Z]n]^!^^;'Sn;'S;=`!c<%l~n~On~~!^~!cOY~~!fP;=`<%ln~!lZOYnYZ!^Z]n]^!^^}n}!O#_!O;'Sn;'S;=`!c<%l~n~On~~!^~#bZOYnYZ!^Z]n]^!^^}n}!O$T!O;'Sn;'S;=`!c<%l~n~On~~!^~$WXOYnYZ$sZ]n]^$s^;'Sn;'S;=`!c<%l~n~On~~$s~$zOX~Y~",tokenizers:[0],topRules:{Document:[0,1]},tokenPrec:67}),iZ=fe.define({name:"yaml",parser:AP.configure({props:[se.add({Stream:t=>{for(let e=t.node.resolve(t.pos,-1);e&&e.to>=t.pos;e=e.parent){if(e.name=="BlockLiteralContent"&&e.fromt.pos)return null}}return null},FlowMapping:We({closing:"}"}),FlowSequence:We({closing:"]"})}),le.add({"FlowMapping FlowSequence":we,"Item Pair BlockLiteral":(t,e)=>({from:e.doc.lineAt(t.from).to,to:t.to})})]}),languageData:{commentTokens:{line:"#"},indentOnInput:/^\s*[\]\}]$/}});function LP(){return new oe(iZ)}var Z4=fe.define({name:"yaml-frontmatter",parser:OZ.configure({props:[re({DashLine:u.meta})]})});var nZ=317,rZ=318,IP=1,aZ=2,oZ=3,sZ=4,lZ=319,cZ=321,hZ=322,fZ=5,uZ=6,dZ=0,Bf=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],MP=125,QZ=59,Ff=47,$Z=42,pZ=43,mZ=45,gZ=60,PZ=44,SZ=63,XZ=46,bZ=91,xZ=new st({start:!1,shift(t,e){return e==fZ||e==uZ||e==cZ?t:e==hZ},strict:!1}),kZ=new D((t,e)=>{let{next:O}=t;(O==MP||O==-1||e.context)&&t.acceptToken(lZ)},{contextual:!0,fallback:!0}),yZ=new D((t,e)=>{let{next:O}=t,i;Bf.indexOf(O)>-1||O==Ff&&((i=t.peek(1))==Ff||i==$Z)||O!=MP&&O!=QZ&&O!=-1&&!e.context&&t.acceptToken(nZ)},{contextual:!0}),wZ=new D((t,e)=>{t.next==bZ&&!e.context&&t.acceptToken(rZ)},{contextual:!0}),TZ=new D((t,e)=>{let{next:O}=t;if(O==pZ||O==mZ){if(t.advance(),O==t.next){t.advance();let i=!e.context&&e.canShift(IP);t.acceptToken(i?IP:aZ)}}else O==SZ&&t.peek(1)==XZ&&(t.advance(),t.advance(),(t.next<48||t.next>57)&&t.acceptToken(oZ))},{contextual:!0});function Nf(t,e){return t>=65&&t<=90||t>=97&&t<=122||t==95||t>=192||!e&&t>=48&&t<=57}var vZ=new D((t,e)=>{if(t.next!=gZ||!e.dialectEnabled(dZ)||(t.advance(),t.next==Ff))return;let O=0;for(;Bf.indexOf(t.next)>-1;)t.advance(),O++;if(Nf(t.next,!0)){for(t.advance(),O++;Nf(t.next,!1);)t.advance(),O++;for(;Bf.indexOf(t.next)>-1;)t.advance(),O++;if(t.next==PZ)return;for(let i=0;;i++){if(i==7){if(!Nf(t.next,!0))return;break}if(t.next!="extends".charCodeAt(i))break;t.advance(),O++}}t.acceptToken(sZ,-O)}),_Z=re({"get set async static":u.modifier,"for while do if else switch try catch finally return throw break continue default case defer":u.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":u.operatorKeyword,"let var const using function class extends":u.definitionKeyword,"import export from":u.moduleKeyword,"with debugger new":u.keyword,TemplateString:u.special(u.string),super:u.atom,BooleanLiteral:u.bool,this:u.self,null:u.null,Star:u.modifier,VariableName:u.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":u.function(u.variableName),VariableDefinition:u.definition(u.variableName),Label:u.labelName,PropertyName:u.propertyName,PrivatePropertyName:u.special(u.propertyName),"CallExpression/MemberExpression/PropertyName":u.function(u.propertyName),"FunctionDeclaration/VariableDefinition":u.function(u.definition(u.variableName)),"ClassDeclaration/VariableDefinition":u.definition(u.className),"NewExpression/VariableName":u.className,PropertyDefinition:u.definition(u.propertyName),PrivatePropertyDefinition:u.definition(u.special(u.propertyName)),UpdateOp:u.updateOperator,"LineComment Hashbang":u.lineComment,BlockComment:u.blockComment,Number:u.number,String:u.string,Escape:u.escape,ArithOp:u.arithmeticOperator,LogicOp:u.logicOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,RegExp:u.regexp,Equals:u.definitionOperator,Arrow:u.function(u.punctuation),": Spread":u.punctuation,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace,"InterpolationStart InterpolationEnd":u.special(u.brace),".":u.derefOperator,", ;":u.separator,"@":u.meta,TypeName:u.typeName,TypeDefinition:u.definition(u.typeName),"type enum interface implements namespace module declare":u.definitionKeyword,"abstract global Privacy readonly override":u.modifier,"is keyof unique infer asserts":u.operatorKeyword,JSXAttributeValue:u.attributeValue,JSXText:u.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":u.angleBracket,"JSXIdentifier JSXNameSpacedName":u.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":u.attributeName,"JSXBuiltin/JSXIdentifier":u.standard(u.tagName)}),ZZ={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:237,private:237,protected:237,readonly:239,instanceof:258,satisfies:261,import:294,keyof:351,unique:355,infer:361,asserts:397,is:399,abstract:419,implements:421,type:423,let:426,var:428,using:431,interface:437,enum:441,namespace:447,module:449,declare:453,global:457,defer:473,for:478,of:487,while:490,with:494,do:498,if:502,else:504,switch:508,case:514,try:520,catch:524,finally:528,return:532,throw:536,break:540,continue:544,debugger:548},RZ={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:403},YZ={__proto__:null,"<":193},DP=de.deserialize({version:14,states:"$GSQ%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Im'#ImO1XQ`O'#GtO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JsO6[Q!0MxO'#JtO6uQ`O'#F^O6zQ,UO'#FuOOQ!0Lf'#Fg'#FgO7VO7dO'#FgO9XQMhO'#F}O9`Q`O'#F|OOQ!0Lf'#Jt'#JtOOQ!0Lb'#Js'#JsO9eQ`O'#GxOOQ['#K`'#K`O9pQ`O'#IZO9uQ!0LrO'#I[OOQ['#Ja'#JaOOQ['#I`'#I`Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GtO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EzO;hQMhO'#FfO;xQ`O'#GtOOQO'#Ka'#KaO;}Q`O'#KaO<]Q`O'#G|O<]Q`O'#G}O<]Q`O'#HPO9kQ`O'#HSO=SQ`O'#HVO>kQ`O'#CeO>{Q`O'#HdO?TQ`O'#HjO?TQ`O'#HlO`QlO'#HnO?TQ`O'#HpO?TQ`O'#HsO?YQ`O'#HyO?_Q!0LsO'#IPO%[QlO'#IRO?jQ!0LsO'#ITO?uQ!0LsO'#IVO9uQ!0LrO'#IXO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FfOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jw'#JwO%[QlO'#JwOOQO'#Jz'#JzOOQO'#Ii'#IiOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#KO'#KOOC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jy'#JyODlQpO'#JzOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CEO)CEOOOOO'#Ia'#IaOFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ib'#IbOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Id'#IdOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IeOGyQ`O'#JuOIxQ!fO'#JuO+}QlO'#JuOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KUOKPQ`O'#KTOKPQ`O'#KTOKXQ`O,5;^OK^Q`O'#KSOOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KRONtQ`O'#KQO9eQ`O'#KQO! YQ`O'#KQO! bQ`O,5;]O! gQ`O'#KQO!#lQ!fO'#JtOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#J{'#J{OOQO-EuOOQ['#Ji'#JiOOQ[,5>v,5>vOOQ[-E<^-E<^O!OO!LOQ`O,5>OO`QlO,5>UO`QlO,5>WO!LTQ`O,5>YO`QlO,5>[O!LYQ`O,5>_O!L_QlO,5>eOOQ[,5>k,5>kO%[QlO,5>kO9uQ!0LrO,5>mOOQ[,5>o,5>oO#!iQ`O,5>oOOQ[,5>q,5>qO#!iQ`O,5>qOOQ[,5>s,5>sO##VQpO'#D_O%[QlO'#JwO##aQpO'#JwO##{QpO'#DmO#$^QpO'#DmO#&oQlO'#DmO#&vQ`O'#JvO#'OQ`O,5:WO#'TQ`O'#EtO#'`Q`O'#EtO#'eQ`O'#KVO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CZQpO,5;YO!CcQMhO,5;YO:dQMhO,5;YO#(`Q`O,5@cO#(eQ07dO,5:sOOQO-EQO$6lQ`O,5>QOOQ[1G3j1G3jO`QlO1G3jOOQ[1G3p1G3pOOQ[1G3r1G3rO?TQ`O1G3tO$6qQlO1G3vO$:uQlO'#HuOOQ[1G3y1G3yO$;SQ`O'#H{O?YQ`O'#H}OOQ[1G4P1G4PO$;[QlO1G4PO9uQ!0LrO1G4VOOQ[1G4X1G4XOOQ!0Lb'#G`'#G`O9uQ!0LrO1G4ZO9uQ!0LrO1G4]O$?cQ`O,5@cO9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CZQpO,5:XO$?hQ?MtO,5:XOOQO,5;`,5;`O$?rQpO'#IfO$@YQ`O,5@bOOQ!0Lf1G/r1G/rO!)[QlO,5;`O$@bQpO'#IlO$@lQ`O,5@qOOQ!0Lb1G0y1G0yO#$^QpO,5:XOOQO'#Ih'#IhO$@tQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CZQpO1G0tO!CcQMhO1G0tOOQ!0Lb1G5}1G5}O!COQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@{Q!0LrO1G0mO$AWQ!0LrO1G0mO!CZQpO1G0^ODWQpO1G0^O$AfQ!0LrO1G0mOOQO1G0^1G0^O$AzQ!0MxO1G0mPOOO-E<]-E<]POOO1G.h1G.hOOOO1G/i1G/iO$BUQ!bO,5WQ`O,5AOO%>`QpO,5AOOOQ!0Lb1G3d1G3dOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>kQ`O7+$VO%[QlO1G6mO%[QlO1G6nO%>pQ!0LrO1G6mO%>zQlO1G3lO%?RQ`O1G3lO%?WQlO1G3lOOQ[7+)U7+)UO9uQ!0LrO7+)`O`QlO7+)bOOQ['#Ki'#KiOOQ['#JT'#JTO%?_QlO,5>aOOQ[,5>a,5>aO%[QlO'#HvO%?lQ`O'#HxOOQ[,5>g,5>gO9eQ`O,5>gOOQ[,5>i,5>iOOQ[7+)k7+)kOOQ[7+)q7+)qOOQ[7+)u7+)uOOQ[7+)w7+)wO%?qQpO1G5}O%@]Q`O1G0zOOQO1G/s1G/sO%@hQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?Q,5?QOOQO-EXQ`O1G6jO9uQ!0LrO<aQ`O7+,XO&>fQ`O7+,YO%[QlO7+,XO%[QlO7+,YOOQ[7+)W7+)WO&>kQ`O7+)WO&>pQlO7+)WO&>wQ`O7+)WOOQ[<|Q`O,5>bOOQ[,5>d,5>dO&?RQ`O1G4RO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&?WQ?MtO1G6[O?YQ`O7+%_OOQ!0Lf<WO!l$xO#k<{O$X%`O$uSOe!iOpkOrQO(U)^O(WTO(ZUO(bVO(p[O~O!]$_Oa$ra'{$ra'x$ra!k$ra!Y$ra!_$ra%j$ra!g$ra~Ol)eO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#k%cO$X%`O$u%^O$w%_O$z%aO(U(wO(WTO(ZUO(b$uO(z$}O({%PO~Og(qP~P!,TO!Q)jO!g)iO!_$_X$[$_X$^$_X$`$_X$g$_X~O!g)iO!_(|X$[(|X$^(|X$`(|X$g(|X~O!Q)jO~P!.^O!Q)jO!_(|X$[(|X$^(|X$`(|X$g(|X~O!_)lO$[)pO$^)kO$`)kO$g)qO~O![)tO~P!)[O$^$hO$`$gO$g)xO~On${X!Q${X#S${X'z${X(z${X({${X~OgmXg${XnmX!]mX#`mX~P!0SOx)zO(c){O(d)}O~On*WO!Q*PO'z*QO(z$}O({%PO~Og*OO~P!1WOg*XO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OWO!l$xO#k<{O$X%`O$uWO!l$xO#k<{O$X%`O$uSOe!iOpkOrQO(WTO(ZUO(bVO(p[O~O(U=RO~P#$oO!]-^O!^(jX~O!^-`O~O#`-aO!]#hX!^#hX~O!g-WO~O!]-bO!^(yX~O!^-dO~O!c-eO!d-eO(V!lO~P#$^O!^-hO~P'_On-kO!_'aO~O!Y-pO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(V!{a(W!{a(Z!{a(f!{a(p!{a~P!#vO!p-uO#`-sO~PChO!c-wO!d-wO(V!lO~PDWOa%nO#`-sO'{%nO~Oa%nO!g#vO#`-sO'{%nO~Oa%nO!g#vO!p-uO#`-sO'{%nO(s'qO~O(Q'yO(R'yO(S-|O~Ov-}O~O!Y'Xa!]'Xa~P!:tO![.RO!Y'XX!]'XX~P%[O!](WO!Y(ia~O!Y(ia~PHRO!](_O!Y(wa~O!S%hO![.VO!_%iO(U%gO!Y'_X!]'_X~O#`.XO!](ua!k(uaa(ua'{(ua~O!g#vO~P#,wO!](kO!k(ta~O!S%hO!_%iO#k.]O(U%gO~Op.bO!S%hO![._O!_%iO!|]O#j.aO#k._O(U%gO!]'bX!k'bX~OR.fO!l#xO~Oh%VOn.iO!_'aO%j.hO~Oa#ci!]#ci'{#ci'x#ci!Y#ci!k#civ#ci!_#ci%j#ci!g#ci~P!:tOn>^O!Q*PO'z*QO(z$}O({%PO~O#l#_aa#_a#`#_a'{#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#l(aXP(aXR(aX[(aXa(aXj(aXr(aX!S(aX!l(aX!p(aX#R(aX#o(aX#p(aX#q(aX#r(aX#s(aX#t(aX#u(aX#v(aX#w(aX#y(aX#{(aX#|(aX'{(aX(b(aX(s(aX!k(aX!Y(aX'x(aXv(aX!_(aX%j(aX!g(aX~P!6kO!].vO!k(lX~P!:tO!k.yO~O!Y.{O~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(bVO[#nia#nij#nir#ni!]#ni#R#ni#p#ni#q#ni#r#ni#s#ni#t#ni#u#ni#v#ni#w#ni#y#ni#{#ni#|#ni'{#ni(s#ni(z#ni({#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#o#ni~P#3cO#o$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#o$OO#p$PO#q$PO#r$PO(bVO[#nia#nij#ni!]#ni#R#ni#t#ni#u#ni#v#ni#w#ni#y#ni#{#ni#|#ni'{#ni(s#ni(z#ni({#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#s#ni~P#6QO#s$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#o$OO#p$PO#q$PO#r$PO#s$QO#t$RO#u$RO#v$bO(bVOa#ni!]#ni#y#ni#{#ni#|#ni'{#ni(s#ni(z#ni({#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#w#ni~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#o$OO#p$PO#q$PO#r$PO#s$QO#t$RO#u$RO#v$bO#w$SO(bVO({#}Oa#ni!]#ni#{#ni#|#ni'{#ni(s#ni(z#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#y$UO~P#;VO#y#ni~P#;VO#w$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#o$OO#p$PO#q$PO#r$PO#s$QO#t$RO#u$RO#v$bO#w$SO#y$UO(bVO(z#|O({#}Oa#ni!]#ni#|#ni'{#ni(s#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#{#ni~P#={O#{$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#lfX#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#w]X#y]X#{]X#|]X$R]X(b]X(s]X(z]X({]X!]]X!^]X~O$P]X~P#@jOP$[OR#zO[^O!Q*PO'z*QO(z$}O({%POP#niR#ni!S#ni!l#ni!p#ni#o#ni#p#ni#q#ni#r#ni(b#ni~P#EyO!]/ROg(qX~P!1WOg/TO~Oa$Qi!]$Qi'{$Qi'x$Qi!Y$Qi!k$Qiv$Qi!_$Qi%j$Qi!g$Qi~P!:tO$^/UO$`/UO~O$^/VO$`/VO~O!g)iO#`/WO!_$dX$[$dX$^$dX$`$dX$g$dX~O![/XO~O!_)lO$[/ZO$^)kO$`)kO$g/[O~O!]WO!l$xO#k<{O$X%`O$u_O!Q*PO'z*QO(z$}O({%POP#niR#ni!S#ni!l#ni!p#ni#o#ni#p#ni#q#ni#r#ni(b#ni~P&,`O#S$dOP(aXR(aX[(aXj(aXn(aXr(aX!Q(aX!S(aX!l(aX!p(aX#R(aX#o(aX#p(aX#q(aX#r(aX#s(aX#t(aX#u(aX#v(aX#w(aX#y(aX#{(aX#|(aX$P(aX'z(aX(b(aX(s(aX(z(aX({(aX!](aX!^(aX~O$P$Qi!]$Qi!^$Qi~P#BwO$P!ri!^!ri~P$+}Og'^a!]'^a~P!1WO!^7pO~O!]'ea!^'ea~P#BwO!Y7qO~P#/sO!g#vO(s'qO!]'fa!k'fa~O!]/rO!k)Pi~O!]/rO!g#vO!k)Pi~Og$}q!]$}q#`$}q$P$}q~P!1WO!Y'ha!]'ha~P#/sO!g7xO~O!]/{O!Y)Qi~P#/sO!]/{O!Y)Qi~O!Y7{O~Oh%VOr8QO!l%eO(s'qO~Oj8SO!g#vO~Or8VO!g#vO(s'qO~O!Q*PO'z*QO({%POn'ka(z'ka!]'ka#`'ka~Og'ka$P'ka~P&5aO!Q*PO'z*QOn'ma(z'ma({'ma!]'ma#`'ma~Og'ma$P'ma~P&6SOg(`q!](`q~P!1WO#`8XOg(`q!](`q~P!1WO!Y8YO~Og%Pq!]%Pq#`%Pq$P%Pq~P!1WOa$py!]$py'{$py'x$py!Y$py!k$pyv$py!_$py%j$py!g$py~P!:tO!g6tO~O!]5^O!_)Ra~O!_'aOP$UaR$Ua[$Uaj$Uar$Ua!Q$Ua!S$Ua!]$Ua!l$Ua!p$Ua#R$Ua#o$Ua#p$Ua#q$Ua#r$Ua#s$Ua#t$Ua#u$Ua#v$Ua#w$Ua#y$Ua#{$Ua#|$Ua(b$Ua(s$Ua(z$Ua({$Ua~O%j7YO~P&8tO%_8^Oa%]i!_%]i'{%]i!]%]i~Oa#cy!]#cy'{#cy'x#cy!Y#cy!k#cyv#cy!_#cy%j#cy!g#cy~P!:tO[8`O~Ob8bO(U+sO(WTO(ZUO~O!]1VO!^)Yi~O`8fO~O(f(}O!]'qX!^'qX~O!]5wO!^)Va~O!^8pO~P%;sO(p!sO~P$&YO#[8qO~O!_1qO~O!_1qO%j8sO~On8vO!_1qO%j8sO~O[8{O!]'ta!^'ta~O!]1|O!^)Wi~O!k9PO~O!k9QO~O!k9TO~O!k9TO~P%[Oa9VO~O!g9WO~O!k9XO~O!](xi!^(xi~P#BwOa%nO#`9aO'{%nO~O!](uy!k(uya(uy'{(uy~P!:tO!](kO!k(ty~O%j9dO~P&8tO!_'aO%j9dO~O#l$}qP$}qR$}q[$}qa$}qj$}qr$}q!S$}q!]$}q!l$}q!p$}q#R$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#v$}q#w$}q#y$}q#{$}q#|$}q'{$}q(b$}q(s$}q!k$}q!Y$}q'x$}q#`$}qv$}q!_$}q%j$}q!g$}q~P#/sO#l'kaP'kaR'ka['kaa'kaj'kar'ka!S'ka!l'ka!p'ka#R'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#w'ka#y'ka#{'ka#|'ka'{'ka(b'ka(s'ka!k'ka!Y'ka'x'kav'ka!_'ka%j'ka!g'ka~P&5aO#l'maP'maR'ma['maa'maj'mar'ma!S'ma!l'ma!p'ma#R'ma#o'ma#p'ma#q'ma#r'ma#s'ma#t'ma#u'ma#v'ma#w'ma#y'ma#{'ma#|'ma'{'ma(b'ma(s'ma!k'ma!Y'ma'x'mav'ma!_'ma%j'ma!g'ma~P&6SO#l%PqP%PqR%Pq[%Pqa%Pqj%Pqr%Pq!S%Pq!]%Pq!l%Pq!p%Pq#R%Pq#o%Pq#p%Pq#q%Pq#r%Pq#s%Pq#t%Pq#u%Pq#v%Pq#w%Pq#y%Pq#{%Pq#|%Pq'{%Pq(b%Pq(s%Pq!k%Pq!Y%Pq'x%Pq#`%Pqv%Pq!_%Pq%j%Pq!g%Pq~P#/sO!]'Zi!k'Zi~P!:tO$P#cq!]#cq!^#cq~P#BwO(z$}OP%baR%ba[%baj%bar%ba!S%ba!l%ba!p%ba#R%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#v%ba#w%ba#y%ba#{%ba#|%ba$P%ba(b%ba(s%ba!]%ba!^%ba~On%ba!Q%ba'z%ba({%ba~P&JXO({%POP%daR%da[%daj%dar%da!S%da!l%da!p%da#R%da#o%da#p%da#q%da#r%da#s%da#t%da#u%da#v%da#w%da#y%da#{%da#|%da$P%da(b%da(s%da!]%da!^%da~On%da!Q%da'z%da(z%da~P&L`On>_O!Q*PO'z*QO({%PO~P&JXOn>_O!Q*PO'z*QO(z$}O~P&L`OR0mO!Q0mO!S0nO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#w}a#y}a#{}a#|}a$P}a'z}a(b}a(s}a(z}a({}a!]}a!^}a~O!Q*PO'z*QOP$taR$ta[$taj$tan$tar$ta!S$ta!l$ta!p$ta#R$ta#o$ta#p$ta#q$ta#r$ta#s$ta#t$ta#u$ta#v$ta#w$ta#y$ta#{$ta#|$ta$P$ta(b$ta(s$ta(z$ta({$ta!]$ta!^$ta~O!Q*PO'z*QOP$vaR$va[$vaj$van$var$va!S$va!l$va!p$va#R$va#o$va#p$va#q$va#r$va#s$va#t$va#u$va#v$va#w$va#y$va#{$va#|$va$P$va(b$va(s$va(z$va({$va!]$va!^$va~On>_O!Q*PO'z*QO(z$}O({%PO~OP%UaR%Ua[%Uaj%Uar%Ua!S%Ua!l%Ua!p%Ua#R%Ua#o%Ua#p%Ua#q%Ua#r%Ua#s%Ua#t%Ua#u%Ua#v%Ua#w%Ua#y%Ua#{%Ua#|%Ua$P%Ua(b%Ua(s%Ua!]%Ua!^%Ua~P''eO$P$nq!]$nq!^$nq~P#BwO$P$pq!]$pq!^$pq~P#BwO!^9qO~O$P9rO~P!1WO!g#vO!]'fi!k'fi~O!g#vO(s'qO!]'fi!k'fi~O!]/rO!k)Pq~O!Y'hi!]'hi~P#/sO!]/{O!Y)Qq~Or9yO!g#vO(s'qO~O[9{O!Y9zO~P#/sO!Y9zO~Oj:RO!g#vO~Og(`y!](`y~P!1WO!]'oa!_'oa~P#/sOa%]q!_%]q'{%]q!]%]q~P#/sO[:WO~O!]1VO!^)Yq~O`:[O~O#`:]O!]'qa!^'qa~O!]5wO!^)Vi~P#BwO!S:_O~O!_1qO%j:bO~O(WTO(ZUO(f:gO~O!]1|O!^)Wq~O!k:jO~O!k:kO~O!k:lO~O!k:lO~P%[O#`:oO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%j:tO~P&8tO!_'aO%j:tO~O$P#}y!]#}y!^#}y~P#BwOP$}iR$}i[$}ij$}ir$}i!S$}i!l$}i!p$}i#R$}i#o$}i#p$}i#q$}i#r$}i#s$}i#t$}i#u$}i#v$}i#w$}i#y$}i#{$}i#|$}i$P$}i(b$}i(s$}i!]$}i!^$}i~P''eO!Q*PO'z*QO({%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#w'ja#y'ja#{'ja#|'ja$P'ja(b'ja(s'ja(z'ja!]'ja!^'ja~O!Q*PO'z*QOP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#w'la#y'la#{'la#|'la$P'la(b'la(s'la(z'la({'la!]'la!^'la~O(z$}OP%biR%bi[%bij%bin%bir%bi!Q%bi!S%bi!l%bi!p%bi#R%bi#o%bi#p%bi#q%bi#r%bi#s%bi#t%bi#u%bi#v%bi#w%bi#y%bi#{%bi#|%bi$P%bi'z%bi(b%bi(s%bi({%bi!]%bi!^%bi~O({%POP%diR%di[%dij%din%dir%di!Q%di!S%di!l%di!p%di#R%di#o%di#p%di#q%di#r%di#s%di#t%di#u%di#v%di#w%di#y%di#{%di#|%di$P%di'z%di(b%di(s%di(z%di!]%di!^%di~O$P$py!]$py!^$py~P#BwO$P#cy!]#cy!^#cy~P#BwO!g#vO!]'fq!k'fq~O!]/rO!k)Py~O!Y'hq!]'hq~P#/sOr;OO!g#vO(s'qO~O[;SO!Y;RO~P#/sO!Y;RO~Og(`!R!](`!R~P!1WOa%]y!_%]y'{%]y!]%]y~P#/sO!]1VO!^)Yy~O!]5wO!^)Vq~O(U;ZO~O!_1qO%j;^O~O!k;aO~O%j;fO~P&8tOP$}qR$}q[$}qj$}qr$}q!S$}q!l$}q!p$}q#R$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#v$}q#w$}q#y$}q#{$}q#|$}q$P$}q(b$}q(s$}q!]$}q!^$}q~P''eO!Q*PO'z*QO({%POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#w'ka#y'ka#{'ka#|'ka$P'ka(b'ka(s'ka(z'ka!]'ka!^'ka~O!Q*PO'z*QOP'maR'ma['maj'man'mar'ma!S'ma!l'ma!p'ma#R'ma#o'ma#p'ma#q'ma#r'ma#s'ma#t'ma#u'ma#v'ma#w'ma#y'ma#{'ma#|'ma$P'ma(b'ma(s'ma(z'ma({'ma!]'ma!^'ma~OP%PqR%Pq[%Pqj%Pqr%Pq!S%Pq!l%Pq!p%Pq#R%Pq#o%Pq#p%Pq#q%Pq#r%Pq#s%Pq#t%Pq#u%Pq#v%Pq#w%Pq#y%Pq#{%Pq#|%Pq$P%Pq(b%Pq(s%Pq!]%Pq!^%Pq~P''eOg%f!Z!]%f!Z#`%f!Z$P%f!Z~P!1WO!Y;jO~P#/sOr;kO!g#vO(s'qO~O[;mO!Y;jO~P#/sO!]'qq!^'qq~P#BwO!]#h!Z!^#h!Z~P#BwO#l%f!ZP%f!ZR%f!Z[%f!Za%f!Zj%f!Zr%f!Z!S%f!Z!]%f!Z!l%f!Z!p%f!Z#R%f!Z#o%f!Z#p%f!Z#q%f!Z#r%f!Z#s%f!Z#t%f!Z#u%f!Z#v%f!Z#w%f!Z#y%f!Z#{%f!Z#|%f!Z'{%f!Z(b%f!Z(s%f!Z!k%f!Z!Y%f!Z'x%f!Z#`%f!Zv%f!Z!_%f!Z%j%f!Z!g%f!Z~P#/sOr;vO!g#vO(s'qO~O!Y;wO~P#/sOrSOe!iOpkOrQO(U)^O(WTO(ZUO(bVO(p[O~O!]XO!l$xO#k<|O$X%`O$uf!>nPPP!>tIZPPPPPPPPP!BTP!CbPPIZ!DsPIZPIZIZIZIZIZPIZ!FVP!IaP!LgP!Lk!Lu!Ly!LyP!I^P!L}!L}P#!TP#!XIZPIZ#!_#%dCiA]PA]PA]A]P#&qA]A]#)TA]#+{A]#.XA]A]#.w#1]#1]#1b#1k#1]#1vPP#1]PA]#2`A]#6_A]A]6lPPP#:dPPP#:}#:}P#:}P#;e#:}PP#;kP#;bP#;b#O#>U#>[#>b#>p#>v#?Q#?W#?b#?h#?x#@O#@p#AS#AY#A`#An#BT#Cx#DW#D_#Ey#FX#Gy#HX#H_#He#Hk#Hu#H{#IR#I]#Io#IuPPPPPPPPPPP#I{PPPPPPP#Jp#M}$ g$ n$ vPPP$'bP$'k$*d$0}$1Q$1T$2S$2V$2^$2fP$2l$2oP$3]$3a$4X$5g$5l$6SPP$6X$6_$6c$6f$6j$6n$7j$8R$8j$8n$8q$8t$9O$9R$9V$9ZR!|RoqOXst!Z#d%m&r&t&u&w,u,z2^2aY!vQ'a-g1q5}Q%tvQ%|yQ&T|Q&j!VS'W!e-^Q'g!iS'm!r!yU*l$|*[*pQ+q%}S,O&V&WQ,f&dQ-e'`Q-o'hQ-w'nQ0^*rQ1d,QQ1{,gR<}<[%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_,r,u,z-k-s.R.X.v.}/p0_0n0t1U1t2U2V2X2Z2^2a2c3S3Y3n4|6V6g6h6k7O8v9V9aS#q]TU+Q%]T!S!nQ!r!v!y!z$|'W'`'a'm'n'o*l*p*r*s-^-e-g-w0^0a1q5}6P%[$ti#v$b$c$d$x${%O%Q%^%_%c)z*S*U*W*Z*b*h*x*y+h+k,U,X.h/R/f/o/z/{/}0b0d0k0l0q1h1k1s3e4`4a4l4q5S5^5a6U7Y7x8S8X8^8s9d9r9{:R:b:t;S;^;f;mQ>Y>Z>^>_Q&X|S'U!e*[S']%i-bQ+v&PQ,R&WQ,h&gQ0p+TQ1[+wQ1a+}Q2S,lQ2T,mQ5h1VQ5q1cQ6^1|Q6a2OQ6b2RQ8b5iQ8e5nQ9O6dQ:Z8fQ:h8{R;X:[rnOXst!V!Z#d%m&i&r&t&u&w,u,z2^2aR,j&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'c's(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-a-k-s.R.X.i.v.}/X/p0_0n0t1U1t2U2V2X2Z2^2a2c2q3S3Y3f3n4V4|5y6V6g6h6k6u7O7^8v9V9a:]:oS>T[#]WZ#W#Z'X(U!b%jm#h#i#l$x%e%h(_(i(j(k*Z*_*c+[+^+`,q-W.V.].^._.a/o/r2f3^3_4c6t7VQ%wxQ%{yW&Q|&V&W,QQ&_!TQ'd!hQ'f!iQ(r#sS+p%|%}Q+t&PQ,a&bQ,e&dS-n'g'hQ.k(sQ1T+qQ1Z+wQ1]+xQ1`+|Q1v,bS1z,f,gQ3O-oQ5g1VQ5k1YQ5p1bQ6]1{Q8a5iQ8d5mQ8h5rQ:V8`R;V:W!U$zi$d%O%Q%^%_%c*S*U*b*x*y/R/z0b0d0k0l0q4a5S8X9r>Q>Y>Z!^%yy!i!u%{%|%}'V'f'g'h'l'v*k+p+q-Z-n-o-v0T0W1T2w3O3V4t4u4x8P9}Q+j%wQ,V&[Q,Y&]Q,d&dQ.j(rQ1u,aU1y,e,f,gQ3g.kQ6W1vS6[1z1{Q8z6]#f>U#v$b$c$x${)z*W*Z*h+h+k,U,X.h/f/o/{/}1h1k1s3e4`4l4q5^5a6U7Y7x8S8^8s9d9{:R:b:t;S;^;f;m^>_o>VQS&[!Q&iQ&]!RQ&^!SU+O%[%d=tR,T&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)z*S*U*W*Z*b*h*x*y+h+k,U,X.h/R/f/o/z/{/}0b0d0k0l0q1h1k1s3e4`4a4l4q5S5^5a6U7Y7x8S8X8^8s9d9r9{:R:b:t;S;^;f;mQ>Y>Z>^>_T){$u)|V+Q%]T$i$^c#Y#e%q%s%u(T(Z(u(z)S)T)U)V)W)X)Y)Z)[)])_)a)c)h)r+f+z-[-z.P.U.W.u.x.|/O/P/Q/d0r2o2t3Q3X3m3r3s3t3u3v3w3x3y3z3{3|3}4O4R4S4Z5Z5e6w6}7S7c7d7m7n8m9Z9_9i9o9p:q;Y;bTQ'Y!eR2r-^!W!nQ!e!r!v!y!z$|'W'`'a'm'n'o*[*l*p*r*s-^-e-g-w0^0a1q5}6PR1n,]nqOXst!Z#d%m&r&t&u&w,u,z2^2aQ&y!^Q'w!xS(t#u<`Q+n%zQ,_&_Q,`&aQ-l'eQ-y'pS.t(y=QS0s+Y=[Q1R+oQ1p,^Q2e,|Q2g,}Q2n-XQ2|-mQ3P-qS5[0t=fQ5c1SS5f1U=gQ6v2pQ6z2}Q7P3UQ8_5dQ9[6xQ9]6{Q9`7QR:n9X$d$]c#Y#e%s%u(T(Z(u(z)S)T)U)V)W)X)Y)Z)[)])_)a)c)h)r+f+z-[-z.P.U.W.u.x.|/P/Q/d0r2o2t3Q3X3m3r3s3t3u3v3w3x3y3z3{3|3}4O4R4S4Z5Z5e6w6}7S7c7d7m7n8m9Z9_9i9o9p:q;Y;bTS#q]TU$fd)`,oS(q#p'jU*w%R(x4QU0o+P.p7iQ5`0zQ7X3bQ9f7[R:u9gm!tQ!r!v!y!z'a'm'n'o-g-w1q5}6PQ'u!uS(g#g2WS-u'l'xQ/u*^Q0T*kQ3W-xQ4h/vQ4t0VQ4u0WQ4z0`Q7t4bS8P4v4xS8T4{4}Q9t7uQ9x7{Q9}8QQ:S8VS:}9y9zS;i;O;RS;u;j;kS;};v;wSTR=p>S%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_+i,r,u,z-k-s.R.X.i.v.}/p0_0n0t1U1t2U2V2X2Z2^2a2c3S3Y3f3n4|6V6g6h6k7O7^8v9V9aQ%fj!^%xy!i!u%{%|%}'V'f'g'h'l'v*k+p+q-Z-n-o-v0T0W1T2w3O3V4t4u4x8P9}S&Oz!jQ+m%yQ,c&dW1x,d,e,f,gU6Z1y1z1{S8y6[6]Q:f8z!r=k$Z$n'X)t-Y-a/X2q4V5y6u:]:oTQ=u>RR=v>S%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'c's(W(^(e(y({)P*O*j+Y+_+i,r,u,z-k-s.R.X.i.v.}/p0_0n0t1U1t2U2V2X2Z2^2a2c3S3Y3f3n4|6V6g6h6k7O7^8v9V9aY#bWZ#W#Z(U!b%jm#h#i#l$x%e%h(_(i(j(k*Z*_*c+[+^+`,q-W.V.].^._.a/o/r2f3^3_4c6t7VQ,p&o!p=l$Z$n)t-Y-a/X2q4V5y6u:]:oTR=o'XU'^!e%i*[R2u-bX'[!e%i*[-b%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_,r,u,z-k-s.R.X.v.}/p0_0n0t1U1t2U2V2X2Z2^2a2c3S3Y3n4|6V6g6h6k7O8v9V9a!r)`$Z$n'X)t-Y-a/X2q4V5y6u:]:oTQ,o&oQ0z+iQ3b.iQ7[3fR9g7^!b$Tc#Y%q(T(Z(u(z)[)])a)h+z-z.P.U.W.u.x/d0r3Q3X3m3}5Z5e6}7S7c9_:qT)_)r-[/O2o2t3r4R4Z6w7d7m7n8m9Z9i9o9p;Y;b=wQ>Y>[R>Z>]'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-a-k-s.R.X.i.v.}/X/p0_0n0t1U1t2U2V2X2Z2^2a2c2q3S3Y3f3n4V4|5y6V6g6h6k6u7O7^8v9V9a:]:oTS$oh$pR4W/W'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-a-k-s.R.X.i.v.}/W/X/p0_0n0t1U1t2U2V2X2Z2^2a2c2q3S3Y3f3n4V4|5y6V6g6h6k6u7O7^8v9V9a:]:oTT$kf$qQ$ifS)k$l)oR)w$qT$jf$qT)m$l)o'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-a-k-s.R.X.i.v.}/W/X/p0_0n0t1U1t2U2V2X2Z2^2a2c2q3S3Y3f3n4V4|5y6V6g6h6k6u7O7^8v9V9a:]:oTT$oh$pQ$rhR)v$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_+i,r,u,z-k-s.R.X.i.v.}/p0_0n0t1U1t2U2V2X2Z2^2a2c3S3Y3f3n4|6V6g6h6k7O7^8v9V9a!s>R$Z$n'X)t-Y-a/X2q4V5y6u:]:oT#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'c)P)t*j+_+i,r,u,z-k.i/X/p0_0n1t2U2V2X2Z2^2a2c3f4V4|6V6g6h6k7^8v9V!U%Ri$d%O%Q%^%_%c*S*U*b*x*y/R/z0b0d0k0l0q4a5S8X9r>Q>Y>Z#f(x#v$b$c$x${)z*W*Z*h+h+k,U,X.h/f/o/{/}1h1k1s3e4`4l4q5^5a6U7Y7x8S8^8s9d9{:R:b:t;S;^;f;m^>_Q+U%aQ/e*Po4QQ>Y>ZQ*d$zU*m$|*[*pQ+V%bQ0Y*n#f=r#v$b$c$x${)z*W*Z*h+h+k,U,X.h/f/o/{/}1h1k1s3e4`4l4q5^5a6U7Y7x8S8^8s9d9{:R:b:t;S;^;f;m^>_n=sUQ=y>VQ=z>WR={>X!U%Ri$d%O%Q%^%_%c*S*U*b*x*y/R/z0b0d0k0l0q4a5S8X9r>Q>Y>Z#f(x#v$b$c$x${)z*W*Z*h+h+k,U,X.h/f/o/{/}1h1k1s3e4`4l4q5^5a6U7Y7x8S8^8s9d9{:R:b:t;S;^;f;m^>_o4QQ>Y>Z>^>_Q,W&]Q1j,YQ5u1iR8j5vV*o$|*[*pU*o$|*[*pT5|1q5}S0R*j/pQ4y0_T8U4|:_Q+l%xQ0X*mQ1Q+mQ1w,cQ6Y1xQ8x6ZQ:e8yR;`:f!U%Oi$d%O%Q%^%_%c*S*U*b*x*y/R/z0b0d0k0l0q4a5S8X9r>Q>Y>Zx*S$v)f*T*v+W/x0f0g4T4i5T5U5Y7r8W:T:z=q>O>PS0b*u0c#f^>_n[>]`=U4P7e7h7l9j:v:y;{S=`.n3kT=a7g9m!U%Qi$d%O%Q%^%_%c*S*U*b*x*y/R/z0b0d0k0l0q4a5S8X9r>Q>Y>Z|*U$v)f*V*u+W/i/x0f0g4T4i5O5T5U5Y7r8W:T:z=q>O>PS0d*v0e#f^>_n[>]d=W4P7f7g7l9j9k:v:w:y;{S=b.o3lT=c7h9nrnOXst!V!Z#d%m&i&r&t&u&w,u,z2^2aQ&f!UR,r&ornOXst!V!Z#d%m&i&r&t&u&w,u,z2^2aR&f!UQ,[&^R1f,TsnOXst!V!Z#d%m&i&r&t&u&w,u,z2^2aQ1r,aS6T1u1vU8r6R6S6WS:a8t8uS;[:`:cQ;o;]R;y;pQ&m!VR,k&iR6a2OR:h8{W&Q|&V&W,QR1]+xQ&r!WR,u&sR,{&xT2_,z2aR-P&yQ-O&yR2h-PQ'z!{R-{'zSsOtQ#dXT%ps#dQ#OTR'|#OQ#RUR(O#RQ)|$uR/b)|Q#UVR(R#UQ#XWU(X#X(Y.SQ(Y#YR.S(ZQ-_'YR2s-_Q.w(zS3o.w3pR3p.xQ-g'aR2x-gY!rQ'a-g1q5}R'k!rQ/S)fR4U/SU#_W%h*ZU(`#_(a.TQ(a#`R.T([Q-c'^R2v-ct`OXst!V!Z#d%m&i&k&r&t&u&w,u,z2^2aS#hZ%eU#r`#h.^R.^(kQ(l#jQ.Z(hW.c(l.Z3Z7TQ3Z.[R7T3[Q)o$lR/Y)oQ$phR)u$pQ$`cU)b$`.OO>P>[>]Q/|*fU4m/|4o7zQ4o0OR7z4nS*p$|*[R0[*px*T$v)f*u*v+W/x0f0g4T4i5T5U5Y7r8W:T:z=q>O>P!d.l(v)d*]*f.n.o.s/a/m0O0x1g3j4^4j4n5t7_7b7y7|8Z8]9v:O:U;P;T;g;l;x>[>]U/j*T.l7ea7e4P7g7h7l9j:v:y;{Q0c*uQ3k.nU5P0c3k9mR9m7g|*V$v)f*u*v+W/i/x0f0g4T4i5O5T5U5Y7r8W:T:z=q>O>P!h.m(v)d*]*f.n.o.s/a/m0O0x1g3h3j4^4j4n5t7_7`7b7y7|8Z8]9v:O:U;P;T;g;l;x>[>]U/l*V.m7fe7f4P7g7h7l9j9k:v:w:y;{Q0e*vQ3l.oU5R0e3l9nR9n7hQ*{%UR0i*{Q5_0xR8[5_Q+a%kR0w+aQ5x1lS8l5x:^R:^8mQ,^&_R1o,^Q5}1qR8o5}Q1},hS6_1}8|R8|6aQ1W+tW5j1W5l8c:XQ5l1ZQ8c5kR:X8dQ+y&QR1^+yQ2a,zR6o2aYrOXst#dQ&v!ZQ+c%mQ,t&rQ,v&tQ,w&uQ,y&wQ2[,uS2_,z2aR6n2^Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'r!uQ+b%lQ+n%zQ,S&XQ,j&mQ-R&|W-r'l't'u'xQ-y'pQ0Z*oQ1R+oQ1e,RS2Q,k,nQ2i-QQ2j-TQ2k-UQ3P-qW3R-t-u-x-zQ5c1SQ5o1aQ5s1gQ6X1wQ6c2SQ6m2]U6|3Q3T3WQ7P3UQ8_5dQ8g5qQ8i5tQ8n5|Q8w6YQ8}6bS9^6}7RQ9`7QQ:Y8eQ:d8xQ:i9OQ:p9_Q;W:ZQ;_:eQ;c:qQ;n;XR;q;`Q%zyQ'e!iQ'p!uU+o%{%|%}Q-X'VU-m'f'g'hS-q'l'vQ0S*kS1S+p+qQ2p-ZS2}-n-oQ3U-vS4r0T0WQ5d1TQ6x2wQ6{3OQ7Q3VU7}4t4u4xQ9|8PR;Q9}S$wi>QR*|%VU%Ui%V>QR0h*zQ$viS(v#v+kS)d$b$cQ)f$dQ*]$xS*f${*ZQ*u%OQ*v%QQ+R%^Q+S%_Q+W%cQ.nQQ>O>YQ>P>ZQ>[>^R>]>_Q+P%]Q.pTR#[WR'Z!el!tQ!r!v!y!z'a'm'n'o-g-w1q5}6PS'V!e-^U*k$|*[*pS-Z'W'`S0W*l*rQ0`*sQ2w-eQ4x0^R4}0aR(|#xQ!fQT-f'a-g]!qQ!r'a-g1q5}Q#p]R'j < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty VariableDefinition Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",maxTerm:381,context:xZ,nodeProps:[["isolate",-8,5,6,14,37,39,51,53,55,""],["group",-26,9,17,19,68,208,212,216,217,219,222,225,235,238,244,246,248,250,253,259,265,267,269,271,273,275,276,"Statement",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,121,122,137,140,142,143,144,145,146,148,149,168,170,172,"Expression",-23,31,33,37,41,43,45,174,176,178,179,181,182,183,185,186,187,189,190,191,202,204,206,207,"Type",-3,88,103,109,"ClassItem"],["openedBy",23,"<",38,"InterpolationStart",56,"[",60,"{",73,"(",161,"JSXStartCloseTag"],["closedBy",-2,24,169,">",40,"InterpolationEnd",50,"]",61,"}",74,")",166,"JSXEndTag"]],propSources:[_Z],skippedNodes:[0,5,6,279],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$j&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$j&j([!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU([!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$j&j(XpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(XpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Xp([!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$j&j(Xp([!b'}0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(Y#S$j&j(O0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$j&j(Xp([!b(O0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$j&j!p),Q(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#w(Ch$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#w(Ch$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(W':f$j&j([!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$j&j([!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$j&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$e`$j&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$e``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$e`$j&j([!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ([!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$e`([!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$j&j(Xp([!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$j&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS([!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$j&j(XpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(XpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Xp([!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$j&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$j&j([!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ([!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse([!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX([!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$j&j([!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$j&j$P)Lv(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$j&j(Xp([!b'}0/l$^#t(U,2j(f$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$j&j(Xp([!b(O0/l$^#t(U,2j(f$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[yZ,wZ,TZ,vZ,2,3,4,5,6,7,8,9,10,11,12,13,14,kZ,new vt("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(d~~",141,341),new vt("j~RQYZXz{^~^O(R~~aP!P!Qd~iO(S~~",25,324)],topRules:{Script:[0,7],SingleExpression:[1,277],SingleClassItem:[2,278]},dialects:{jsx:0,ts:15179},dynamicPrecedences:{80:1,82:1,94:1,170:1,200:1},specialized:[{term:328,get:t=>ZZ[t]||-1},{term:344,get:t=>RZ[t]||-1},{term:95,get:t=>YZ[t]||-1}],tokenPrec:15205});var HP=[B("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),B("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),B("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),B("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),B("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),B(`try { + \${} +} catch (\${error}) { + \${} +}`,{label:"try",detail:"/ catch block",type:"keyword"}),B("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),B(`if (\${}) { + \${} +} else { + \${} +}`,{label:"if",detail:"/ else block",type:"keyword"}),B(`class \${name} { + constructor(\${params}) { + \${} + } +}`,{label:"class",detail:"definition",type:"keyword"}),B('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),B('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],zZ=HP.concat([B("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),B("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),B("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),NP=new Lt,KP=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function Ar(t){return(e,O)=>{let i=e.node.getChild("VariableDefinition");return i&&O(i,t),!0}}var qZ=["FunctionDeclaration"],UZ={FunctionDeclaration:Ar("function"),ClassDeclaration:Ar("class"),ClassExpression:()=>!0,EnumDeclaration:Ar("constant"),TypeAliasDeclaration:Ar("type"),NamespaceDeclaration:Ar("namespace"),VariableDefinition(t,e){t.matchContext(qZ)||e(t,"variable")},TypeDefinition(t,e){e(t,"type")},__proto__:null};function JP(t,e){let O=NP.get(e);if(O)return O;let i=[],n=!0;function r(a,o){let s=t.sliceString(a.from,a.to);i.push({label:s,type:o})}return e.cursor(F.IncludeAnonymous).iterate(a=>{if(n)n=!1;else if(a.name){let o=UZ[a.name];if(o&&o(a,r)||KP.has(a.name))return!1}else if(a.to-a.from>8192){for(let o of JP(t,a.node))i.push(o);return!1}}),NP.set(e,i),i}var BP=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,eS=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function VZ(t){let e=N(t.state).resolveInner(t.pos,-1);if(eS.indexOf(e.name)>-1)return null;let O=e.name=="VariableName"||e.to-e.from<20&&BP.test(t.state.sliceDoc(e.from,e.to));if(!O&&!t.explicit)return null;let i=[];for(let n=e;n;n=n.parent)KP.has(n.name)&&(i=i.concat(JP(t.state.doc,n)));return{options:i,from:O?e.from:t.pos,validFor:BP}}var Ut=fe.define({name:"javascript",parser:DP.configure({props:[se.add({IfStatement:ue({except:/^\s*({|else\b)/}),TryStatement:ue({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:cO,SwitchBody:t=>{let e=t.textAfter,O=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return t.baseIndent+(O?0:i?1:2)*t.unit},Block:We({closing:"}"}),ArrowFunction:t=>t.baseIndent+t.unit,"TemplateString BlockComment":()=>null,"Statement Property":ue({except:/^\s*{/}),JSXElement(t){let e=/^\s*<\//.test(t.textAfter);return t.lineIndent(t.node.from)+(e?0:t.unit)},JSXEscape(t){let e=/\s*\}/.test(t.textAfter);return t.lineIndent(t.node.from)+(e?0:t.unit)},"JSXOpenTag JSXSelfClosingTag"(t){return t.column(t.node.from)+t.unit}}),le.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":we,BlockComment(t){return{from:t.from+2,to:t.to-2}},JSXElement(t){let e=t.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let O=t.lastChild;return{from:e.to,to:O.type.isError?t.to:O.from}},"JSXSelfClosingTag JSXOpenTag"(t){var e;let O=(e=t.firstChild)===null||e===void 0?void 0:e.nextSibling,i=t.lastChild;return!O||O.type.isError?null:{from:O.to,to:i.type.isError?t.to:i.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),tS={test:t=>/^JSX/.test(t.name),facet:mi({commentTokens:{block:{open:"{/*",close:"*/}"}}})},Hf=Ut.configure({dialect:"ts"},"typescript"),Kf=Ut.configure({dialect:"jsx",props:[xr.add(t=>t.isTop?[tS]:void 0)]}),Jf=Ut.configure({dialect:"jsx ts",props:[xr.add(t=>t.isTop?[tS]:void 0)]},"typescript"),OS=t=>({label:t,type:"keyword"}),iS="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(OS),WZ=iS.concat(["declare","implements","private","protected","public"].map(OS));function ls(t={}){let e=t.jsx?t.typescript?Jf:Kf:t.typescript?Hf:Ut,O=t.typescript?zZ.concat(WZ):HP.concat(iS);return new oe(e,[Ut.data.of({autocomplete:dO(eS,Ft(O))}),Ut.data.of({autocomplete:VZ}),t.jsx?CZ:[]])}function jZ(t){for(;;){if(t.name=="JSXOpenTag"||t.name=="JSXSelfClosingTag"||t.name=="JSXFragmentTag")return t;if(t.name=="JSXEscape"||!t.parent)return null;t=t.parent}}function FP(t,e,O=t.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name=="JSXIdentifier"||i.name=="JSXBuiltin"||i.name=="JSXNamespacedName"||i.name=="JSXMemberExpression")return t.sliceString(i.from,Math.min(i.to,O));return""}var GZ=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),CZ=_.inputHandler.of((t,e,O,i,n)=>{if((GZ?t.composing:t.compositionStarted)||t.state.readOnly||e!=O||i!=">"&&i!="/"||!Ut.isActiveAt(t.state,e,-1))return!1;let r=n(),{state:a}=r,o=a.changeByRange(s=>{var l;let{head:c}=s,h=N(a).resolveInner(c-1,-1),f;if(h.name=="JSXStartTag"&&(h=h.parent),!(a.doc.sliceString(c-1,c)!=i||h.name=="JSXAttributeValue"&&h.to>c)){if(i==">"&&h.name=="JSXFragmentTag")return{range:s,changes:{from:c,insert:""}};if(i=="/"&&h.name=="JSXStartCloseTag"){let d=h.parent,Q=d.parent;if(Q&&d.from==c-2&&((f=FP(a.doc,Q.firstChild,c))||((l=Q.firstChild)===null||l===void 0?void 0:l.name)=="JSXFragmentTag")){let $=`${f}>`;return{range:X.cursor(c+$.length,-1),changes:{from:c,insert:$}}}}else if(i==">"){let d=jZ(h);if(d&&d.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(a.doc.sliceString(c,c+2))&&(f=FP(a.doc,d,c)))return{range:s,changes:{from:c,insert:``}}}}return{range:s}});return o.changes.empty?!1:(t.dispatch([r,a.update(o,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var EZ=1,lS=194,cS=195,AZ=196,nS=197,LZ=198,IZ=199,MZ=200,DZ=2,hS=3,rS=201,NZ=24,BZ=25,FZ=49,HZ=50,KZ=55,JZ=56,eR=57,tR=59,OR=60,iR=61,nR=62,rR=63,aR=65,oR=238,sR=71,lR=241,cR=242,hR=243,fR=244,uR=245,dR=246,QR=247,$R=248,fS=72,pR=249,mR=250,gR=251,PR=252,SR=253,XR=254,bR=255,xR=256,kR=73,yR=77,wR=263,TR=112,vR=130,_R=151,ZR=152,RR=155,_i=10,Lr=13,iu=32,fs=9,nu=35,YR=40,zR=46,Ou=123,aS=125,uS=39,dS=34,oS=92,qR=111,UR=120,VR=78,WR=117,jR=85,GR=new Set([BZ,FZ,HZ,wR,aR,vR,JZ,eR,oR,nR,rR,fS,kR,yR,OR,iR,_R,ZR,RR,TR]);function eu(t){return t==_i||t==Lr}function tu(t){return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}var CR=new D((t,e)=>{let O;if(t.next<0)t.acceptToken(IZ);else if(e.context.flags&cs)eu(t.next)&&t.acceptToken(LZ,1);else if(((O=t.peek(-1))<0||eu(O))&&e.canShift(nS)){let i=0;for(;t.next==iu||t.next==fs;)t.advance(),i++;(t.next==_i||t.next==Lr||t.next==nu)&&t.acceptToken(nS,-i)}else eu(t.next)&&t.acceptToken(AZ,1)},{contextual:!0}),ER=new D((t,e)=>{let O=e.context;if(O.flags)return;let i=t.peek(-1);if(i==_i||i==Lr){let n=0,r=0;for(;;){if(t.next==iu)n++;else if(t.next==fs)n+=8-n%8;else break;t.advance(),r++}n!=O.indent&&t.next!=_i&&t.next!=Lr&&t.next!=nu&&(n[t,e|QS])),IR=new st({start:AR,reduce(t,e,O,i){return t.flags&cs&&GR.has(e)||(e==sR||e==fS)&&t.flags&QS?t.parent:t},shift(t,e,O,i){return e==lS?new hs(t,LR(i.read(i.pos,O.pos)),0):e==cS?t.parent:e==NZ||e==KZ||e==tR||e==hS?new hs(t,0,cs):sS.has(e)?new hs(t,0,sS.get(e)|t.flags&cs):t},hash(t){return t.hash}}),MR=new D(t=>{for(let e=0;e<5;e++){if(t.next!="print".charCodeAt(e))return;t.advance()}if(!/\w/.test(String.fromCharCode(t.next)))for(let e=0;;e++){let O=t.peek(e);if(!(O==iu||O==fs)){O!=YR&&O!=zR&&O!=_i&&O!=Lr&&O!=nu&&t.acceptToken(EZ);return}}}),DR=new D((t,e)=>{let{flags:O}=e.context,i=O&mO?dS:uS,n=(O&gO)>0,r=!(O&PO),a=(O&SO)>0,o=t.pos;for(;!(t.next<0);)if(a&&t.next==Ou)if(t.peek(1)==Ou)t.advance(2);else{if(t.pos==o){t.acceptToken(hS,1);return}break}else if(r&&t.next==oS){if(t.pos==o){t.advance();let s=t.next;s>=0&&(t.advance(),NR(t,s)),t.acceptToken(DZ);return}break}else if(t.next==oS&&!r&&t.peek(1)>-1)t.advance(2);else if(t.next==i&&(!n||t.peek(1)==i&&t.peek(2)==i)){if(t.pos==o){t.acceptToken(rS,n?3:1);return}break}else if(t.next==_i){if(n)t.advance();else if(t.pos==o){t.acceptToken(rS);return}break}else t.advance();t.pos>o&&t.acceptToken(MZ)});function NR(t,e){if(e==qR)for(let O=0;O<2&&t.next>=48&&t.next<=55;O++)t.advance();else if(e==UR)for(let O=0;O<2&&tu(t.next);O++)t.advance();else if(e==WR)for(let O=0;O<4&&tu(t.next);O++)t.advance();else if(e==jR)for(let O=0;O<8&&tu(t.next);O++)t.advance();else if(e==VR&&t.next==Ou){for(t.advance();t.next>=0&&t.next!=aS&&t.next!=uS&&t.next!=dS&&t.next!=_i;)t.advance();t.next==aS&&t.advance()}}var BR=re({'async "*" "**" FormatConversion FormatSpec':u.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":u.controlKeyword,"in not and or is del":u.operatorKeyword,"from def class global nonlocal lambda":u.definitionKeyword,import:u.moduleKeyword,"with as print":u.keyword,Boolean:u.bool,None:u.null,VariableName:u.variableName,"CallExpression/VariableName":u.function(u.variableName),"FunctionDefinition/VariableName":u.function(u.definition(u.variableName)),"ClassDefinition/VariableName":u.definition(u.className),PropertyName:u.propertyName,"CallExpression/MemberExpression/PropertyName":u.function(u.propertyName),Comment:u.lineComment,Number:u.number,String:u.string,FormatString:u.special(u.string),Escape:u.escape,UpdateOp:u.updateOperator,"ArithOp!":u.arithmeticOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,AssignOp:u.definitionOperator,Ellipsis:u.punctuation,At:u.meta,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace,".":u.derefOperator,", ;":u.separator}),FR={__proto__:null,await:44,or:54,and:56,in:60,not:62,is:64,if:70,else:72,lambda:76,yield:94,from:96,async:102,for:104,None:162,True:164,False:164,del:178,pass:182,break:186,continue:190,return:194,raise:202,import:206,as:208,global:212,nonlocal:214,assert:218,type:223,elif:236,while:240,try:246,except:248,finally:250,with:254,def:258,class:268,match:279,case:285},$S=de.deserialize({version:14,states:"##jQ`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5TQdO'#DoOOQS,5:Y,5:YO5hQdO'#HdOOQS,5:],5:]O5uQ!fO,5:]O5zQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8jQdO,59bO8oQdO,59bO8vQdO,59jO8}QdO'#HTO:TQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:lQdO,59aO'vQdO,59aO:zQdO,59aOOQS,59y,59yO;PQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;_QdO,5:QO;dQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;uQdO,5:UO;zQdO,5:WOOOW'#Fy'#FyOOOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/[QtO1G.|O!/cQtO1G.|O1lQdO1G.|O!0OQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!0VQdO1G/eO!0gQdO1G/eO!0oQdO1G/fO'vQdO'#H[O!0tQdO'#H[O!0yQtO1G.{O!1ZQdO,59iO!2aQdO,5=zO!2qQdO,5=zO!2yQdO1G/mO!3OQtO1G/mOOQS1G/l1G/lO!3`QdO,5=uO!4VQdO,5=uO0rQdO1G/qO!4tQdO1G/sO!4yQtO1G/sO!5ZQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5kQdO'#HxO0rQdO'#HxO!5|QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6[Q#xO1G2zO!6{QtO1G2zO'vQdO,5kOOQS1G1`1G1`O!8RQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!8WQdO'#FrO!8cQdO,59oO!8kQdO1G/XO!8uQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9fQdO'#GtOOQS,5jO!;ZQdO,5>jO1XQdO,5>jO!;lQdO,5>iOOQS-E:R-E:RO!;qQdO1G0lO!;|QdO1G0lO!lO!lO!hO!=VQdO,5>hO!=hQdO'#EpO0rQdO1G0tO!=sQdO1G0tO!=xQgO1G0zO!AvQgO1G0}O!EqQdO,5>oO!E{QdO,5>oO!FTQtO,5>oO0rQdO1G1PO!F_QdO1G1PO4iQdO1G1UO!!vQdO1G1WOOQV,5;a,5;aO!FdQfO,5;aO!FiQgO1G1QO!JjQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JzQdO,5>pO!KXQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KaQdO'#FSO!KrQ!fO1G1WO!KzQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!LPQdO1G1]O!LXQdO'#F^OOQV1G1b1G1bO!#ZQtO1G1bPOOO1G2v1G2vP!L^OSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LfQdO,5=|O!LyQdO,5=|OOQS1G/u1G/uO!MRQdO,5>PO!McQdO,5>PO!MkQdO,5>PO!NOQdO,5>PO!N`QdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8kQdO7+$pO#!RQdO1G.|O#!YQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!aQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!qQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!vQdO7+%PO##OQdO7+%QO##TQdO1G3fOOQS7+%X7+%XO##eQdO1G3fO##mQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##rQdO1G3aOOQS-E9q-E9qO#$iQdO7+%]OOQS7+%_7+%_O#$wQdO1G3aO#%fQdO7+%_O#%kQdO1G3gO#%{QdO1G3gO#&TQdO7+%]O#&YQdO,5>dO#&sQdO,5>dO#&sQdO,5>dOOQS'#Dx'#DxO#'UO&jO'#DzO#'aO`O'#HyOOOW1G3}1G3}O#'fQdO1G3}O#'nQdO1G3}O#'yQ#xO7+(fO#(jQtO1G2UP#)TQdO'#GOOOQS,5nQdO,5sQdO1G4OOOQS-E9y-E9yO#?^QdO1G4OO<[QdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?oO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?zQdO7+)iO#@SQdO1G2zO#@mQdO1G2zP'vQdO'#FuO0rQdO<mO#BQQdO,5>mOOQS1G0v1G0vOOQS<rO#KgQdO,5>rO#KrQdO,5>rO#K}QdO,5>qO#L`QdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<VAN>VO$ oQdO<cAN>cO0rQdO1G1|O$!PQtO1G1|P$!ZQdO'#FvOOQS1G2R1G2RP$!hQdO'#F{O$!uQdO7+)jO$#`QdO,5>gOOOO-E9z-E9zOOOW<tO$4{QdO,5>tO1XQdO,5vO$)nQdO,5>vOOQS1G1p1G1pOOQS,5<[,5<[OOQU7+'P7+'PO$+zQdO1G/iO$)nQdO,5wO$8zQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)nQdO'#GdO$9SQdO1G4bO$9^QdO1G4bO$9fQdO1G4bOOQS7+%T7+%TO$9tQdO1G1tO$:SQtO'#FaO$:ZQdO,5<}OOQS,5<},5<}O$:iQdO1G4cOOQS-E:a-E:aO$)nQdO,5<|O$:pQdO,5<|O$:uQdO7+)|OOQS-E:`-E:`O$;PQdO7+)|O$)nQdO,5S~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%_$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEcO%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO%_'hO~OS'iO%['hO%_'hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#uO%kWi~P!#uOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&pO%mWi%nWi~P!&pOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)nOVWi_Wi%qWi%rWi%sWi~P!)nO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.aOlji~P!.aOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/jOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEcOV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO%_*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!NkOlji~P!NkOV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~O{#{Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/jOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/jO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$-bO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)zOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/jOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)nOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$-bOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)nOz/zO#[/OO%j.yO!['Oa~Og'Pa~P$)nOz0SOg'Pa~Oa0UO!['Oi~P$)zOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$-bO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)nO{0^O~Oa0UO!['Oq~P$)zOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)zOa0UO!['Oy~P$)zO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/jO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~",goto:"!=j'QPPPPPP'RP'Z*s+[+t,_,y-fP.SP'Z.r.r'ZPPP'Z2[PPPPPP2[5PPP5PP7b7k=sPP=v>h>kPP'Z'ZPP>zPP'Z'ZPP'Z'Z'Z'Z'Z?O?w'ZP?zP@QDXGuGyPG|HWH['ZPPPH_Hk'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHqH}IVPI^IdPI^PI^I^PPPI^PKrPK{LVL]KrPI^LfPI^PLmLsPLwM]MzNeLwLwNkNxLwLwLwLw! ^! d! g! l! o! y!!P!!]!!o!!u!#P!#V!#s!#y!$P!$Z!$a!$g!$y!%T!%Z!%a!%k!%q!%w!%}!&T!&Z!&e!&k!&u!&{!'U!'[!'k!'s!'}!(UPPPPPPPPPPP!([!(_!(e!(n!(x!)TPPPPPPPPPPPP!-u!/Z!3^!6oPP!6w!7W!7a!8Y!8P!8c!8i!8l!8o!8r!8z!9jPPPPPPPPPPPPPPPPP!9m!9q!9wP!:]!:a!:m!:v!;S!;j!;m!;p!;v!;|!_![!]Do!]!^Es!^!_FZ!_!`Gk!`!aHX!a!b%T!b!cIf!c!dJU!d!eK^!e!hJU!h!i!#f!i!tJU!t!u!,|!u!wJU!w!x!.t!x!}JU!}#O!0S#O#P&o#P#Q!0j#Q#R!1Q#R#SJU#S#T%T#T#UJU#U#VK^#V#YJU#Y#Z!#f#Z#fJU#f#g!,|#g#iJU#i#j!.t#j#oJU#o#p!1n#p#q!1s#q#r!2a#r#s!2f#s$g%T$g;'SJU;'S;=`KW<%lOJU`%YT&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T`%lP;=`<%l%To%v]&n`%c_OX%TXY%oY[%T[]%o]p%Tpq%oq#O%T#O#P&o#P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To&tX&n`OY%TYZ%oZ]%T]^%o^#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc'f[&n`O!_%T!_!`([!`#T%T#T#U(r#U#f%T#f#g(r#g#h(r#h#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(cTmR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(yT!mR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk)aV&n`&[ZOr%Trs)vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk){V&n`Or%Trs*bs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk*iT&n`&^ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To+PZS_&n`OY*xYZ%TZ]*x]^%T^#o*x#o#p+r#p#q*x#q#r+r#r;'S*x;'S;=`,^<%lO*x_+wTS_OY+rZ]+r^;'S+r;'S;=`,W<%lO+r_,ZP;=`<%l+ro,aP;=`<%l*xj,kV%rQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-XT!xY&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-oV%lQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.]V&n`&ZZOw%Twx.rx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.wV&n`Ow%Twx/^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/eT&n`&]ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/{ThZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc0cTgR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk0yXVZ&n`Oz%Tz{1f{!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk1mVaR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk2ZV%oZ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc2wTzR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To3_W%pZ&n`O!_%T!_!`-Q!`!a3w!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Td4OT&{S&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk4fX!fQ&n`O!O%T!O!P5R!P!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5WV&n`O!O%T!O!P5m!P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5tT!rZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti6[a!hX&n`O!Q%T!Q![6T![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S6T#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti7fZ&n`O{%T{|8X|}%T}!O8X!O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8^V&n`O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8z]!hX&n`O!Q%T!Q![8s![!l%T!l!m9s!m#R%T#R#S8s#S#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti9zT!hX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk:bX%qR&n`O!P%T!P!Q:}!Q!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj;UV%sQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti;ro!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!d%T!d!e?q!e!g%T!g!h7a!h!l%T!l!m9s!m!q%T!q!rA]!r!z%T!z!{Bq!{#R%T#R#S>_#S#U%T#U#V?q#V#X%T#X#Y7a#Y#^%T#^#_9s#_#c%T#c#dA]#d#l%T#l#mBq#m#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti=xV&n`O!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti>fc!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S>_#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti?vY&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti@mY!hX&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiAbX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBUX!hX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBv]&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiCv]!hX&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToDvV{_&n`O!_%T!_!`E]!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TcEdT%{R&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkEzT#gZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkFbXmR&n`O!^%T!^!_F}!_!`([!`!a([!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjGUV%mQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkGrV%zZ&n`O!_%T!_!`([!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkH`WmR&n`O!_%T!_!`([!`!aHx!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjIPV%nQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkIoV_Q#}P&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToJ_]&n`&YS%uZO!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoKZP;=`<%lJUoKge&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!tJU!t!uLx!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#gLx#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoMRa&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUkN_V&n`&`ZOr%TrsNts#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkNyV&n`Or%Trs! `s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! gT&n`&bZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! }V&n`&_ZOw%Twx!!dx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!!iV&n`Ow%Twx!#Ox#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!#VT&n`&aZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!#oe&n`&YS%uZOr%Trs!%Qsw%Twx!&px!Q%T!Q![JU![!c%T!c!tJU!t!u!(`!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#g!(`#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!%XV&n`&dZOr%Trs!%ns#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!%sV&n`Or%Trs!&Ys#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&aT&n`&fZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&wV&n`&cZOw%Twx!'^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!'cV&n`Ow%Twx!'xx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!(PT&n`&eZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!(ia&n`&YS%uZOr%Trs!)nsw%Twx!+^x!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!)uV&n`&hZOr%Trs!*[s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*aV&n`Or%Trs!*vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*}T&n`&jZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!+eV&n`&gZOw%Twx!+zx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,PV&n`Ow%Twx!,fx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,mT&n`&iZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!-Vi&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!dJU!d!eLx!e!hJU!h!i!(`!i!}JU!}#R%T#R#SJU#S#T%T#T#UJU#U#VLx#V#YJU#Y#Z!(`#Z#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUo!.}a&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!0ZT!XZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc!0qT!WR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj!1XV%kQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!1sO!]~k!1zV%jR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!2fO![~i!2mT%tX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T",tokenizers:[MR,ER,CR,DR,0,1,2,3,4],topRules:{Script:[0,5]},specialized:[{term:221,get:t=>FR[t]||-1}],tokenPrec:7668});var pS=new Lt,gS=new Set(["Script","Body","FunctionDefinition","ClassDefinition","LambdaExpression","ForStatement","MatchClause"]);function us(t){return(e,O,i)=>{if(i)return!1;let n=e.node.getChild("VariableName");return n&&O(n,t),!0}}var HR={FunctionDefinition:us("function"),ClassDefinition:us("class"),ForStatement(t,e,O){if(O){for(let i=t.node.firstChild;i;i=i.nextSibling)if(i.name=="VariableName")e(i,"variable");else if(i.name=="in")break}},ImportStatement(t,e){var O,i;let{node:n}=t,r=((O=n.firstChild)===null||O===void 0?void 0:O.name)=="from";for(let a=n.getChild("import");a;a=a.nextSibling)a.name=="VariableName"&&((i=a.nextSibling)===null||i===void 0?void 0:i.name)!="as"&&e(a,r?"variable":"namespace")},AssignStatement(t,e){for(let O=t.node.firstChild;O;O=O.nextSibling)if(O.name=="VariableName")e(O,"variable");else if(O.name==":"||O.name=="AssignOp")break},ParamList(t,e){for(let O=null,i=t.node.firstChild;i;i=i.nextSibling)i.name=="VariableName"&&(!O||!/\*|AssignOp/.test(O.name))&&e(i,"variable"),O=i},CapturePattern:us("variable"),AsPattern:us("variable"),__proto__:null};function PS(t,e){let O=pS.get(e);if(O)return O;let i=[],n=!0;function r(a,o){let s=t.sliceString(a.from,a.to);i.push({label:s,type:o})}return e.cursor(F.IncludeAnonymous).iterate(a=>{if(a.name){let o=HR[a.name];if(o&&o(a,r,n)||!n&&gS.has(a.name))return!1;n=!1}else if(a.to-a.from>8192){for(let o of PS(t,a.node))i.push(o);return!1}}),pS.set(e,i),i}var mS=/^[\w\xa1-\uffff][\w\d\xa1-\uffff]*$/,SS=["String","FormatString","Comment","PropertyName"];function KR(t){let e=N(t.state).resolveInner(t.pos,-1);if(SS.indexOf(e.name)>-1)return null;let O=e.name=="VariableName"||e.to-e.from<20&&mS.test(t.state.sliceDoc(e.from,e.to));if(!O&&!t.explicit)return null;let i=[];for(let n=e;n;n=n.parent)gS.has(n.name)&&(i=i.concat(PS(t.state.doc,n)));return{options:i,from:O?e.from:t.pos,validFor:mS}}var JR=["__annotations__","__builtins__","__debug__","__doc__","__import__","__name__","__loader__","__package__","__spec__","False","None","True"].map(t=>({label:t,type:"constant"})).concat(["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EncodingWarning","EnvironmentError","Exception","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","ModuleNotFoundError","NameError","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError"].map(t=>({label:t,type:"type"}))).concat(["bool","bytearray","bytes","classmethod","complex","float","frozenset","int","list","map","memoryview","object","range","set","staticmethod","str","super","tuple","type"].map(t=>({label:t,type:"class"}))).concat(["abs","aiter","all","anext","any","ascii","bin","breakpoint","callable","chr","compile","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","format","getattr","globals","hasattr","hash","help","hex","id","input","isinstance","issubclass","iter","len","license","locals","max","min","next","oct","open","ord","pow","print","property","quit","repr","reversed","round","setattr","slice","sorted","sum","vars","zip"].map(t=>({label:t,type:"function"}))),e5=[B("def ${name}(${params}):\n ${}",{label:"def",detail:"function",type:"keyword"}),B("for ${name} in ${collection}:\n ${}",{label:"for",detail:"loop",type:"keyword"}),B("while ${}:\n ${}",{label:"while",detail:"loop",type:"keyword"}),B("try:\n ${}\nexcept ${error}:\n ${}",{label:"try",detail:"/ except block",type:"keyword"}),B(`if \${}: + +`,{label:"if",detail:"block",type:"keyword"}),B("if ${}:\n ${}\nelse:\n ${}",{label:"if",detail:"/ else block",type:"keyword"}),B("class ${name}:\n def __init__(self, ${params}):\n ${}",{label:"class",detail:"definition",type:"keyword"}),B("import ${module}",{label:"import",detail:"statement",type:"keyword"}),B("from ${module} import ${names}",{label:"from",detail:"import",type:"keyword"})],t5=dO(SS,Ft(JR.concat(e5)));function ru(t){let{node:e,pos:O}=t,i=t.lineIndent(O,-1),n=null;for(;;){let r=e.childBefore(O);if(r)if(r.name=="Comment")O=r.from;else if(r.name=="Body"||r.name=="MatchBody")t.baseIndentFor(r)+t.unit<=i&&(n=r),e=r;else if(r.name=="MatchClause")e=r;else if(r.type.is("Statement"))e=r;else break;else break}return n}function au(t,e){let O=t.baseIndentFor(e),i=t.lineAt(t.pos,-1),n=i.from+i.text.length;return/^\s*($|#)/.test(i.text)&&t.node.toO?null:O+t.unit}var ou=fe.define({name:"python",parser:$S.configure({props:[se.add({Body:t=>{var e;let O=/^\s*(#|$)/.test(t.textAfter)&&ru(t)||t.node;return(e=au(t,O))!==null&&e!==void 0?e:t.continue()},MatchBody:t=>{var e;let O=ru(t);return(e=au(t,O||t.node))!==null&&e!==void 0?e:t.continue()},IfStatement:t=>/^\s*(else:|elif )/.test(t.textAfter)?t.baseIndent:t.continue(),"ForStatement WhileStatement":t=>/^\s*else:/.test(t.textAfter)?t.baseIndent:t.continue(),TryStatement:t=>/^\s*(except[ :]|finally:|else:)/.test(t.textAfter)?t.baseIndent:t.continue(),MatchStatement:t=>/^\s*case /.test(t.textAfter)?t.baseIndent+t.unit:t.continue(),"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression":We({closing:")"}),"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression":We({closing:"}"}),"ArrayExpression ArrayComprehensionExpression":We({closing:"]"}),MemberExpression:t=>t.baseIndent+t.unit,"String FormatString":()=>null,Script:t=>{var e;let O=ru(t);return(e=O&&au(t,O))!==null&&e!==void 0?e:t.continue()}}),le.add({"ArrayExpression DictionaryExpression SetExpression TupleExpression":we,Body:(t,e)=>({from:t.from+1,to:t.to-(t.to==e.doc.length?0:1)}),"String FormatString":(t,e)=>({from:e.doc.lineAt(t.from).to,to:t.to})})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"'''",'"""'],stringPrefixes:["f","fr","rf","r","u","b","br","rb","F","FR","RF","R","U","B","BR","RB"]},commentTokens:{line:"#"},indentOnInput:/^\s*([\}\]\)]|else:|elif |except |finally:|case\s+[^:]*:?)$/}});function XS(){return new oe(ou,[ou.data.of({autocomplete:KR}),ou.data.of({autocomplete:t5})])}var $s=class t{static create(e,O,i,n,r){let a=n+(n<<8)+e+(O<<4)|0;return new t(e,O,i,a,r,[],[])}constructor(e,O,i,n,r,a,o){this.type=e,this.value=O,this.from=i,this.hash=n,this.end=r,this.children=a,this.positions=o,this.hashProp=[[L.contextHash,n]]}addChild(e,O){e.prop(L.contextHash)!=this.hash&&(e=new H(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(O)}toTree(e,O=this.end){let i=this.children.length-1;return i>=0&&(O=Math.max(O,this.positions[i]+this.children[i].length+this.from)),new H(e.types[this.type],this.children,this.positions,O-this.from).balance({makeTree:(n,r,a)=>new H(ke.none,n,r,a,this.hashProp)})}},Y;(function(t){t[t.Document=1]="Document",t[t.CodeBlock=2]="CodeBlock",t[t.FencedCode=3]="FencedCode",t[t.Blockquote=4]="Blockquote",t[t.HorizontalRule=5]="HorizontalRule",t[t.BulletList=6]="BulletList",t[t.OrderedList=7]="OrderedList",t[t.ListItem=8]="ListItem",t[t.ATXHeading1=9]="ATXHeading1",t[t.ATXHeading2=10]="ATXHeading2",t[t.ATXHeading3=11]="ATXHeading3",t[t.ATXHeading4=12]="ATXHeading4",t[t.ATXHeading5=13]="ATXHeading5",t[t.ATXHeading6=14]="ATXHeading6",t[t.SetextHeading1=15]="SetextHeading1",t[t.SetextHeading2=16]="SetextHeading2",t[t.HTMLBlock=17]="HTMLBlock",t[t.LinkReference=18]="LinkReference",t[t.Paragraph=19]="Paragraph",t[t.CommentBlock=20]="CommentBlock",t[t.ProcessingInstructionBlock=21]="ProcessingInstructionBlock",t[t.Escape=22]="Escape",t[t.Entity=23]="Entity",t[t.HardBreak=24]="HardBreak",t[t.Emphasis=25]="Emphasis",t[t.StrongEmphasis=26]="StrongEmphasis",t[t.Link=27]="Link",t[t.Image=28]="Image",t[t.InlineCode=29]="InlineCode",t[t.HTMLTag=30]="HTMLTag",t[t.Comment=31]="Comment",t[t.ProcessingInstruction=32]="ProcessingInstruction",t[t.Autolink=33]="Autolink",t[t.HeaderMark=34]="HeaderMark",t[t.QuoteMark=35]="QuoteMark",t[t.ListMark=36]="ListMark",t[t.LinkMark=37]="LinkMark",t[t.EmphasisMark=38]="EmphasisMark",t[t.CodeMark=39]="CodeMark",t[t.CodeText=40]="CodeText",t[t.CodeInfo=41]="CodeInfo",t[t.LinkTitle=42]="LinkTitle",t[t.LinkLabel=43]="LinkLabel",t[t.URL=44]="URL"})(Y||(Y={}));var cu=class{constructor(e,O){this.start=e,this.content=O,this.marks=[],this.parsers=[]}},hu=class{constructor(){this.text="",this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return Mr(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,O=0,i=0){for(let n=O;n=e.stack[O.depth+1].value+O.baseIndent)return!0;if(O.indent>=O.baseIndent+4)return!1;let i=(t.type==Y.OrderedList?bu:Xu)(O,e,!1);return i>0&&(t.type!=Y.BulletList||Su(O,e,!1)<0)&&O.text.charCodeAt(O.pos+i-1)==t.value}var zS={[Y.Blockquote](t,e,O){return O.next!=62?!1:(O.markers.push(ie(Y.QuoteMark,e.lineStart+O.pos,e.lineStart+O.pos+1)),O.moveBase(O.pos+(_t(O.text.charCodeAt(O.pos+1))?2:1)),t.end=e.lineStart+O.text.length,!0)},[Y.ListItem](t,e,O){return O.indent-1?!1:(O.moveBaseColumn(O.baseIndent+t.value),!0)},[Y.OrderedList]:bS,[Y.BulletList]:bS,[Y.Document](){return!0}};function _t(t){return t==32||t==9||t==10||t==13}function Mr(t,e=0){for(;eO&&_t(t.charCodeAt(e-1));)e--;return e}function qS(t){if(t.next!=96&&t.next!=126)return-1;let e=t.pos+1;for(;e-1&&t.depth==e.stack.length&&e.parser.leafBlockParsers.indexOf(AS.SetextHeading)>-1||i<3?-1:1}function VS(t,e){for(let O=t.stack.length-1;O>=0;O--)if(t.stack[O].type==e)return!0;return!1}function Xu(t,e,O){return(t.next==45||t.next==43||t.next==42)&&(t.pos==t.text.length-1||_t(t.text.charCodeAt(t.pos+1)))&&(!O||VS(e,Y.BulletList)||t.skipSpace(t.pos+2)=48&&n<=57;){i++;if(i==t.text.length)return-1;n=t.text.charCodeAt(i)}return i==t.pos||i>t.pos+9||n!=46&&n!=41||it.pos+1||t.next!=49)?-1:i+1-t.pos}function WS(t){if(t.next!=35)return-1;let e=t.pos+1;for(;e6?-1:O}function jS(t){if(t.next!=45&&t.next!=61||t.indent>=t.baseIndent+4)return-1;let e=t.pos+1;for(;e/,CS=/\?>/,uu=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/i.exec(i);if(r)return t.append(ie(Y.Comment,O,O+1+r[0].length));let a=/^\?[^]*?\?>/.exec(i);if(a)return t.append(ie(Y.ProcessingInstruction,O,O+1+a[0].length));let o=/^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(i);return o?t.append(ie(Y.HTMLTag,O,O+1+o[0].length)):-1},Emphasis(t,e,O){if(e!=95&&e!=42)return-1;let i=O+1;for(;t.char(i)==e;)i++;let n=t.slice(O-1,O),r=t.slice(i,i+1),a=Br.test(n),o=Br.test(r),s=/\s|^$/.test(n),l=/\s|^$/.test(r),c=!l&&(!o||s||a),h=!s&&(!a||l||o),f=c&&(e==42||!h||a),d=h&&(e==42||!c||o);return t.append(new et(e==95?xu:ku,O,i,(f?1:0)|(d?2:0)))},HardBreak(t,e,O){if(e==92&&t.char(O+1)==10)return t.append(ie(Y.HardBreak,O,O+2));if(e==32){let i=O+1;for(;t.char(i)==32;)i++;if(t.char(i)==10&&i>=O+2)return t.append(ie(Y.HardBreak,O,i+1))}return-1},Link(t,e,O){return e==91?t.append(new et(Zi,O,O+1,1)):-1},Image(t,e,O){return e==33&&t.char(O+1)==91?t.append(new et(gs,O,O+2,1)):-1},LinkEnd(t,e,O){if(e!=93)return-1;for(let i=t.parts.length-1;i>=0;i--){let n=t.parts[i];if(n instanceof et&&(n.type==Zi||n.type==gs)){if(!n.side||t.skipSpace(n.to)==O&&!/[(\[]/.test(t.slice(O+1,O+2)))return t.parts[i]=null,-1;let r=t.takeContent(i),a=t.parts[i]=n5(t,r,n.type==Zi?Y.Link:Y.Image,n.from,O+1);if(n.type==Zi)for(let o=0;oe?ie(Y.URL,e+O,r+O):r==t.length?null:!1}}function DS(t,e,O){let i=t.charCodeAt(e);if(i!=39&&i!=34&&i!=40)return!1;let n=i==40?41:i;for(let r=e+1,a=!1;r=this.end?-1:this.text.charCodeAt(e-this.offset)}get end(){return this.offset+this.text.length}slice(e,O){return this.text.slice(e-this.offset,O-this.offset)}append(e){return this.parts.push(e),e.to}addDelimiter(e,O,i,n,r){return this.append(new et(e,O,i,(n?1:0)|(r?2:0)))}get hasOpenLink(){for(let e=this.parts.length-1;e>=0;e--){let O=this.parts[e];if(O instanceof et&&(O.type==Zi||O.type==gs))return!0}return!1}addElement(e){return this.append(e)}resolveMarkers(e){for(let i=e;i=e;s--){let $=this.parts[s];if($ instanceof et&&$.side&1&&$.type==n.type&&!(r&&(n.side&1||$.side&2)&&($.size+n.size)%3==0&&($.size%3||n.size%3))){o=$;break}}if(!o)continue;let l=n.type.resolve,c=[],h=o.from,f=n.to;if(r){let $=Math.min(2,o.to-o.from,a);h=o.to-$,f=n.from+$,l=$==1?"Emphasis":"StrongEmphasis"}o.type.mark&&c.push(this.elt(o.type.mark,h,o.to));for(let $=s+1;$=0;O--){let i=this.parts[O];if(i instanceof et&&i.type==e&&i.side&1)return O}return null}takeContent(e){let O=this.resolveMarkers(e);return this.parts.length=e,O}getDelimiterAt(e){let O=this.parts[e];return O instanceof et?O:null}skipSpace(e){return Mr(this.text,e-this.offset)+this.offset}elt(e,O,i,n){return typeof e=="string"?ie(this.parser.getNodeType(e),O,i,n):new ms(e,O)}};Yi.linkStart=Zi;Yi.imageStart=gs;Yi.emphasisAsterisk=ku;Yi.emphasisUnderscore=xu;function mu(t,e){if(!e.length)return t;if(!t.length)return e;let O=t.slice(),i=0;for(let n of e){for(;i(e?e-1:0))return!1;if(this.fragmentEnd<0){let r=this.fragment.to;for(;r>0&&this.input.read(r-1,r)!=` +`;)r--;this.fragmentEnd=r?r-1:0}let i=this.cursor;i||(i=this.cursor=this.fragment.tree.cursor(),i.firstChild());let n=e+this.fragment.offset;for(;i.to<=n;)if(!i.parent())return!1;for(;;){if(i.from>=n)return this.fragment.from<=O;if(!i.childAfter(n))return!1}}matches(e){let O=this.cursor.tree;return O&&O.prop(L.contextHash)==e}takeNodes(e){let O=this.cursor,i=this.fragment.offset,n=this.fragmentEnd-(this.fragment.openEnd?1:0),r=e.absoluteLineStart,a=r,o=e.block.children.length,s=a,l=o;for(;;){if(O.to-i>n||O.to-i>e.to){if(O.type.isAnonymous&&O.firstChild())continue;break}let c=BS(O.from-i,e.ranges);if(O.to-i<=e.ranges[e.rangeI].to)e.addNode(O.tree,c);else{let h=new H(e.parser.nodeSet.types[Y.Paragraph],[],[],0,e.block.hashProp);e.reusePlaceholders.set(h,O.tree),e.addNode(h,c)}if(O.type.is("Block")&&(r5.indexOf(O.type.id)<0?(a=O.to-i,o=e.block.children.length):(a=s,o=l),s=O.to-i,l=e.block.children.length),!O.nextSibling())break}for(;e.block.children.length>o;)e.block.children.pop(),e.block.positions.pop();return a-r}};function BS(t,e){let O=t;for(let i=1;ids[t]),Object.keys(ds).map(t=>AS[t]),Object.keys(ds),O5,zS,Object.keys(lu).map(t=>lu[t]),Object.keys(lu),[]);function o5(t,e,O){let i=[];for(let n=t.firstChild,r=e;;n=n.nextSibling){let a=n?n.from:O;if(a>r&&i.push({from:r,to:a}),!n)break;r=n.to}return i}function HS(t){let{codeParser:e,htmlParser:O}=t;return{wrap:di((n,r)=>{let a=n.type.id;if(e&&(a==Y.CodeBlock||a==Y.FencedCode)){let o="";if(a==Y.FencedCode){let l=n.node.getChild(Y.CodeInfo);l&&(o=r.read(l.from,l.to))}let s=e(o);if(s)return{parser:s,overlay:l=>l.type.id==Y.CodeText,bracketed:a==Y.FencedCode}}else if(O&&(a==Y.HTMLBlock||a==Y.HTMLTag||a==Y.CommentBlock))return{parser:O,overlay:o5(n.node,n.from,n.to)};return null})}}var s5={resolve:"Strikethrough",mark:"StrikethroughMark"},l5={defineNodes:[{name:"Strikethrough",style:{"Strikethrough/...":u.strikethrough}},{name:"StrikethroughMark",style:u.processingInstruction}],parseInline:[{name:"Strikethrough",parse(t,e,O){if(e!=126||t.char(O+1)!=126||t.char(O+2)==126)return-1;let i=t.slice(O-1,O),n=t.slice(O+2,O+3),r=/\s|^$/.test(i),a=/\s|^$/.test(n),o=Br.test(i),s=Br.test(n);return t.addDelimiter(s5,O,O+2,!a&&(!s||r||o),!r&&(!o||a||s))},after:"Emphasis"}]};function Dr(t,e,O=0,i,n=0){let r=0,a=!0,o=-1,s=-1,l=!1,c=()=>{i.push(t.elt("TableCell",n+o,n+s,t.parser.parseInline(e.slice(o,s),n+o)))};for(let h=O;h-1)&&r++,a=!1,i&&(o>-1&&c(),i.push(t.elt("TableDelimiter",h+n,h+n+1))),o=s=-1):(l||f!=32&&f!=9)&&(o<0&&(o=h),s=h+1),l=!l&&f==92}return o>-1&&(r++,i&&c()),r}function wS(t,e){for(let O=e;O\s]*\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/,Ps=class{constructor(){this.rows=null}nextLine(e,O,i){if(this.rows==null){this.rows=!1;let n;if((O.next==45||O.next==58||O.next==124)&&KS.test(n=O.text.slice(O.pos))){let r=[];Dr(e,i.content,0,r,i.start)==Dr(e,n,0)&&(this.rows=[e.elt("TableHeader",i.start,i.start+i.content.length,r),e.elt("TableDelimiter",e.lineStart+O.pos,e.lineStart+O.text.length)])}}else if(this.rows){let n=[];Dr(e,O.text,O.pos,n,e.lineStart),this.rows.push(e.elt("TableRow",e.lineStart+O.pos,e.lineStart+O.text.length,n))}return!1}finish(e,O){return this.rows?(e.addLeafElement(O,e.elt("Table",O.start,O.start+O.content.length,this.rows)),!0):!1}},c5={defineNodes:[{name:"Table",block:!0},{name:"TableHeader",style:{"TableHeader/...":u.heading}},"TableRow",{name:"TableCell",style:u.content},{name:"TableDelimiter",style:u.processingInstruction}],parseBlock:[{name:"Table",leaf(t,e){return wS(e.content,0)?new Ps:null},endLeaf(t,e,O){if(O.parsers.some(n=>n instanceof Ps)||!wS(e.text,e.basePos))return!1;let i=t.peekLine();return KS.test(i)&&Dr(t,e.text,e.basePos)==Dr(t,i,e.basePos)},before:"SetextHeading"}]},Pu=class{nextLine(){return!1}finish(e,O){return e.addLeafElement(O,e.elt("Task",O.start,O.start+O.content.length,[e.elt("TaskMarker",O.start,O.start+3),...e.parser.parseInline(O.content.slice(3),O.start+3)])),!0}},h5={defineNodes:[{name:"Task",block:!0,style:u.list},{name:"TaskMarker",style:u.atom}],parseBlock:[{name:"TaskList",leaf(t,e){return/^\[[ xX]\][ \t]/.test(e.content)&&t.parentType().name=="ListItem"?new Pu:null},after:"SetextHeading"}]},TS=/(www\.)|(https?:\/\/)|([\w.+-]{1,100}@)|(mailto:|xmpp:)/gy,vS=/[\w-]+(\.[\w-]+)+(:\d+)?(\/[^\s<]*)?/gy,f5=/[\w-]+\.[\w-]+($|[/:])/,_S=/[\w.+-]+@[\w-]+(\.[\w.-]+)+/gy,ZS=/\/[a-zA-Z\d@.]+/gy;function RS(t,e,O,i){let n=0;for(let r=e;r-1)return-1;let i=e+O[0].length;for(;;){let n=t[i-1],r;if(/[?!.,:*_~]/.test(n)||n==")"&&RS(t,e,i,")")>RS(t,e,i,"("))i--;else if(n==";"&&(r=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(t.slice(e,i))))i=e+r.index;else break}return i}function YS(t,e){_S.lastIndex=e;let O=_S.exec(t);if(!O)return-1;let i=O[0][O[0].length-1];return i=="_"||i=="-"?-1:e+O[0].length-(i=="."?1:0)}var d5={parseInline:[{name:"Autolink",parse(t,e,O){let i=O-t.offset;if(i&&/\w/.test(t.text[i-1]))return-1;TS.lastIndex=i;let n=TS.exec(t.text),r=-1;if(!n)return-1;if(n[1]||n[2]){if(r=u5(t.text,i+n[0].length),r>-1&&t.hasOpenLink){let a=/([^\[\]]|\[[^\]]*\])*/.exec(t.text.slice(i,r));r=i+a[0].length}}else n[3]?r=YS(t.text,i):(r=YS(t.text,i+n[0].length),r>-1&&n[0]=="xmpp:"&&(ZS.lastIndex=r,n=ZS.exec(t.text),n&&(r=n.index+n[0].length)));return r<0?-1:(t.addElement(t.elt("URL",O,r+t.offset)),r+t.offset)}}]},JS=[c5,h5,l5,d5];function eX(t,e,O){return(i,n,r)=>{if(n!=t||i.char(r+1)==t)return-1;let a=[i.elt(O,r,r+1)];for(let o=r+1;o=65&&t<=90||t==95||t>=97&&t<=122||t>=161}var oX=null,sX=null,lX=0;function vu(t,e){let O=t.pos+e;if(lX==O&&sX==t)return oX;let i=t.peek(e),n="";for(;W5(i);)n+=String.fromCharCode(i),i=t.peek(++e);return sX=t,lX=O,oX=n?n.toLowerCase():i==j5||i==G5?void 0:null}var gX=60,Ss=62,Zu=47,j5=63,G5=33,C5=45;function cX(t,e){this.name=t,this.parent=e}var E5=[_u,QX,fX,uX,dX],A5=new st({start:null,shift(t,e,O,i){return E5.indexOf(e)>-1?new cX(vu(i,1)||"",t):t},reduce(t,e){return e==$X&&t?t.parent:t},reuse(t,e,O,i){let n=e.type.id;return n==_u||n==R5?new cX(vu(i,1)||"",t):t},strict:!1}),L5=new D((t,e)=>{if(t.next!=gX){t.next<0&&e.context&&t.acceptToken(yu);return}t.advance();let O=t.next==Zu;O&&t.advance();let i=vu(t,0);if(i===void 0)return;if(!i)return t.acceptToken(O?y5:k5);let n=e.context?e.context.name:null;if(O){if(i==n)return t.acceptToken(X5);if(n&&V5[n])return t.acceptToken(yu,-2);if(e.dialectEnabled(z5))return t.acceptToken(b5);for(let r=e.context;r;r=r.parent)if(r.name==i)return;t.acceptToken(x5)}else{if(i=="script")return t.acceptToken(fX);if(i=="style")return t.acceptToken(uX);if(i=="textarea")return t.acceptToken(dX);if(U5.hasOwnProperty(i))return t.acceptToken(QX);n&&aX[n]&&aX[n][i]?t.acceptToken(yu,-1):t.acceptToken(_u)}},{contextual:!0}),I5=new D(t=>{for(let e=0,O=0;;O++){if(t.next<0){O&&t.acceptToken(rX);break}if(t.next==C5)e++;else if(t.next==Ss&&e>=2){O>=3&&t.acceptToken(rX,-2);break}else e=0;t.advance()}});function M5(t){for(;t;t=t.parent)if(t.name=="svg"||t.name=="math")return!0;return!1}var D5=new D((t,e)=>{if(t.next==Zu&&t.peek(1)==Ss){let O=e.dialectEnabled(q5)||M5(e.context);t.acceptToken(O?S5:nX,2)}else t.next==Ss&&t.acceptToken(nX,1)});function Ru(t,e,O){let i=2+t.length;return new D(n=>{for(let r=0,a=0,o=0;;o++){if(n.next<0){o&&n.acceptToken(e);break}if(r==0&&n.next==gX||r==1&&n.next==Zu||r>=2&&ra?n.acceptToken(e,-a):n.acceptToken(O,-(a-2));break}else if((n.next==10||n.next==13)&&o){n.acceptToken(e,1);break}else r=a=0;n.advance()}})}var N5=Ru("script",Q5,$5),B5=Ru("style",p5,m5),F5=Ru("textarea",g5,P5),H5=re({"Text RawText IncompleteTag IncompleteCloseTag":u.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/TagName":[u.tagName,u.invalid],AttributeName:u.attributeName,"AttributeValue UnquotedAttributeValue":u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta}),PX=de.deserialize({version:14,states:",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[",stateData:",c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~",goto:"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:"\u26A0 StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl",maxTerm:68,context:A5,nodeProps:[["closedBy",-10,1,2,3,7,8,9,10,11,12,13,"EndTag",6,"EndTag SelfClosingEndTag",-4,22,31,34,37,"CloseTag"],["openedBy",4,"StartTag StartCloseTag",5,"StartTag",-4,30,33,36,38,"OpenTag"],["group",-10,14,15,18,19,20,21,40,41,42,43,"Entity",17,"Entity TextContent",-3,29,32,35,"TextContent Entity"],["isolate",-11,22,30,31,33,34,36,37,38,39,42,43,"ltr",-3,27,28,40,""]],propSources:[H5],skippedNodes:[0],repeatNodeCount:9,tokenData:"!]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VP<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!{let l=o.type.id;if(l==v5)return wu(o,s,O);if(l==_5)return wu(o,s,i);if(l==Z5)return wu(o,s,n);if(l==$X&&r.length){let c=o.node,h=c.firstChild,f=h&&hX(h,s),d;if(f){for(let Q of r)if(Q.tag==f&&(!Q.attrs||Q.attrs(d||(d=SX(h,s))))){let $=c.lastChild,p=$.type.id==Y5?$.from:c.to;if(p>h.to)return{parser:Q.parser,overlay:[{from:h.to,to:p}]}}}}if(a&&l==pX){let c=o.node,h;if(h=c.firstChild){let f=a[s.read(h.from,h.to)];if(f)for(let d of f){if(d.tagName&&d.tagName!=hX(c.parent,s))continue;let Q=c.lastChild;if(Q.type.id==Tu){let $=Q.from+1,p=Q.lastChild,m=Q.to-(p&&p.isError?0:1);if(m>$)return{parser:d.parser,overlay:[{from:$,to:m}],bracketed:!0}}else if(Q.type.id==mX)return{parser:d.parser,overlay:[{from:Q.from,to:Q.to}]}}}}return null})}var K5=148,XX=1,J5=149,eY=150,kX=2,tY=151,OY=3,iY=4,nY=152,yX=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],rY=58,aY=40,wX=95,oY=91,Xs=45,sY=46,lY=35,cY=37,hY=38,fY=92,uY=10,dY=42;function Fr(t){return t>=65&&t<=90||t>=97&&t<=122||t>=161}function zu(t){return t>=48&&t<=57}function bX(t){return zu(t)||t>=97&&t<=102||t>=65&&t<=70}var TX=(t,e,O)=>(i,n)=>{for(let r=!1,a=0,o=0;;o++){let{next:s}=i;if(Fr(s)||s==Xs||s==wX||r&&zu(s))!r&&(s!=Xs||o>0)&&(r=!0),a===o&&s==Xs&&a++,i.advance();else if(s==fY&&i.peek(1)!=uY){if(i.advance(),bX(i.next)){do i.advance();while(bX(i.next));i.next==32&&i.advance()}else i.next>-1&&i.advance();r=!0}else{r&&i.acceptToken(a>=2&&n.canShift(kX)?e:s==aY?O:t);break}}},QY=new D(TX(J5,kX,eY),{contextual:!0}),$Y=new D(TX(tY,OY,iY),{contextual:!0}),pY=new D(t=>{if(yX.includes(t.peek(-1))){let{next:e}=t;(Fr(e)||e==wX||e==lY||e==sY||e==dY||e==oY||e==rY&&Fr(t.peek(1))||e==Xs||e==hY)&&t.acceptToken(K5)}}),mY=new D(t=>{if(!yX.includes(t.peek(-1))){let{next:e}=t;if(e==cY&&(t.advance(),t.acceptToken(XX)),Fr(e)){do t.advance();while(Fr(t.next)||zu(t.next));t.acceptToken(XX)}}});function xX(t){let e=t.length;return(e==4||e==5||e==7||e==9)&&/^#[a-f\d]+$/i.test(t)?nY:-1}var gY=re({"AtKeyword import charset namespace keyframes media supports font-feature-values":u.definitionKeyword,"from to selector scope MatchFlag":u.keyword,NamespaceName:u.namespace,KeyframeName:u.labelName,KeyframeRangeName:u.operatorKeyword,TagName:u.tagName,ClassName:u.className,PseudoClassName:u.constant(u.className),IdName:u.labelName,"FeatureName PropertyName":u.propertyName,AttributeName:u.attributeName,NumberLiteral:u.number,KeywordQuery:u.keyword,UnaryQueryOp:u.operatorKeyword,"CallTag ValueName FontName":u.atom,VariableName:u.variableName,Callee:u.operatorKeyword,Unit:u.unit,"UniversalSelector NestingSelector":u.definitionOperator,"MatchOp CompareOp":u.compareOperator,"ChildOp SiblingOp, LogicOp":u.logicOperator,BinOp:u.arithmeticOperator,Important:u.modifier,Comment:u.blockComment,ColorLiteral:u.color,"ParenthesizedContent StringLiteral":u.string,":":u.punctuation,PseudoOp:u.derefOperator,"; , |":u.separator,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace}),PY={__proto__:null,lang:44,"nth-child":44,"nth-last-child":44,"nth-of-type":44,"nth-last-of-type":44,dir:44,"host-context":44,if:88,url:158,"url-prefix":158,domain:158,regexp:158},SY={__proto__:null,or:102,and:102,not:112,only:112,layer:212},XY={__proto__:null,selector:118,style:124,layer:208},bY={__proto__:null,"@import":204,"@media":216,"@charset":220,"@namespace":224,"@keyframes":230,"@supports":242,"@scope":246,"@font-feature-values":252},xY={__proto__:null,to:249},vX=de.deserialize({version:14,states:"MrQYQdOOO$TQdOOP$[O`OOO%XQaO'#CfOOQP'#Ce'#CeO%`QdO'#CgO%eQ`O'#CgO%jQaO'#FrO&eQdO'#CkO'XQaO'#CcO'cQdO'#CnOOQP'#ES'#ESOOQP'#ER'#ERO'nQdO'#ETO'yQdO'#E[O'yQdO'#E_OOQP'#Fr'#FrO)`QhO'#FQOOQS'#Fq'#FqOOQS'#FT'#FTQYQdOOO)gQdO'#EeO*vQhO'#EkO)gQdO'#EmO*}QdO'#EoO+YQdO'#ErO*[QhO'#ExO+bQdO'#EzO+mQdO'#E}O+rQaO'#CfO+yQ`O'#EbO,OQ`O'#GPO,ZQdO'#GPQOQ`OOP,eO&jO'#CaPOOO)CAa)CAaOOQP'#Ci'#CiOOQP,59R,59RO%`QdO,59ROOQP'#Cm'#CmOOQP,59V,59VO&eQdO,59VO,pQdO,59YOOQP,5:m,5:mO'nQdO,5:oO'yQdO,5:vO'yQdO,5:xO'yQdO,5:yO'yQdO'#F[O,{Q`O,58}O-TQdO'#EaOOQS,58},58}OOQP'#Cq'#CqOOQO'#EP'#EPOOQP,59Y,59YO-[Q`O,59YO-aQ`O,59YO-fQpO'#EUO-qQdO'#EVO-vQ`O'#EVO-{QpO,5:oO.iQaO,5:vO/PQaO,5:yOOQW'#D]'#D]O0OQhO'#DgO0cQhO,5;lO*[QhO'#DeO0pQ`O'#DnO0uQhO'#D{OOQW'#Fx'#FxOOQS,5;l,5;lO0zQ`O'#DhO1PQ`O'#DkOOQS-E9R-E9ROOQ['#Cv'#CvO1UQdO'#CwO1iQdO'#C|O1|QdO'#DPOOQ['#DQ'#DQO2aQ!pO'#DRO4jQ!jO,5;POOQO'#DW'#DWO-aQ`O'#DVO4zQ!nO'#FuO6}Q`O'#DXO7SQ`O'#D|OOQ['#Fu'#FuO7XQhO'#GSO7gQ`O,5;VO7lQ!bO,5;XOOQS'#Eq'#EqO7tQ`O,5;ZO7yQdO,5;ZOOQO'#Et'#EtO8RQ`O,5;^O8WQhO,5;dO'yQdO'#DjOOQS,5;f,5;fO0zQ`O,5;fO8`QdO,5;fOOQS'#Fc'#FcO8hQdO'#FPO7gQ`O,5;iO8pQdO,5:|O9QQdO'#F^O9_Q`O,5mQhO'#DoOOQW,5:Y,5:YOOQW,5:g,5:gOOQW,5:S,5:SO>wQhO,5:VO?cQ!fO'#FvOOQS'#Fv'#FvOOQS'#FV'#FVO@pQdO,59cOOQ[,59c,59cOATQdO,59hOOQ[,59h,59hOAhQdO,59kOOQ[,59k,59kOOQ[,59m,59mO)gQdO,59oOA{QhO'#EgOOQW'#Eg'#EgOBjQ`O1G0kO4sQhO1G0kOOQ[,59q,59qO*[QhO'#DZOOQ[,59s,59sOBoQ#tO,5:hOBzQhO'#F`OCXQ`O,5wQhO'#DmOISQhO'#DsOI[QhO'#DuOIaQ!jO'#F{OOQO'#F{'#F{OIlQ`O'#DxOItQ!bO'#DzOOQO'#Fz'#FzOIyQ`O1G/qOOQS-E9T-E9TOOQ[1G.}1G.}OOQ[1G/S1G/SOOQ[1G/V1G/VOOQ[1G/Z1G/ZOJOQdO,5;ROOQS7+&V7+&VOJTQ`O7+&VOJYQhO'#D[OJbQ`O,59uO*[QhO,59uOOQ[1G0S1G0SOJjQ`O1G0SOJoQhO,5;zOOQO-E9^-E9^OOQS7+&a7+&aOJ}QbO'#DROOQO'#Ew'#EwOK]Q`O'#EvOOQO'#Ev'#EvOKhQ`O'#FaOKpQdO,5;aOOQS,5;a,5;aOOQ[1G/p1G/pOOQS7+&l7+&lO7gQ`O7+&lOK{Q!fO'#F]O)gQdO'#F]OMSQdO7+&SOOQO7+&S7+&SOOQO,5;O,5;OOOQO1G1d1G1dOMgQ!bO<wQhO'#DtOOQO,5:_,5:_O! hQhO,5:aO! pQhO,5:fO)gQdO,5:dOOQW7+%]7+%]OOQO'#Ei'#EiO! wQ`O1G0mOOQS<{AN>{O!$RQ`OAN>{O!$WQaO,5;uOOQO-E9X-E9XO!$bQdO,5;tOOQO-E9W-E9WOOQW<wQhO'#DwOOQO1G/{1G/{O!&UQ!bO1G0QO!&^QdO1G0OOJOQdO'#F_O!&eQ`O7+&XOOQW7+&X7+&XO!&mQ!bO1G/bOOQ[7+${7+${O!&xQhO7+${P!'PQ`O'#FWOOQO,5;|,5;|OOQO-E9`-E9`OOQS1G1g1G1gOOQPG24gG24gO!'UQ`OAN>YO)gQdO1G1_O!'ZQ`O7+'nOOQO1G/z1G/zO!'cQ`O,5:cO!'hQhO7+%lOOQO,5;y,5;yOOQO-E9]-E9]OOQW<^!a!b%Z!b!c?_!c!k%Z!k!lAl!l!u%Z!u!vAl!v!}%Z!}#OA}#O#P%Z#P#QB`#Q#R/w#R#]%Z#]#^Bq#^#g%Z#g#hAl#h#o%Z#o#pGU#p#qGg#q#rHO#r#sHa#s#y%Z#y#z&R#z$f%Z$f$g&R$g#BY%Z#BY#BZ&R#BZ$IS%Z$IS$I_&R$I_$I|%Z$I|$JO&R$JO$JT%Z$JT$JU&R$JU$KV%Z$KV$KW&R$KW&FU%Z&FU&FV&R&FV;'S%Z;'S;=`Hx<%lO%Z`%^SOy%jz;'S%j;'S;=`%{<%lO%j`%oS!r`Oy%jz;'S%j;'S;=`%{<%lO%j`&OP;=`<%l%j~&Wh$`~OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%j~'yh$`~!r`OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%jj)jS$uYOy%jz;'S%j;'S;=`%{<%lO%j~)yWOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d<%lO)v~*hOv~~*kRO;'S)v;'S;=`*t;=`O)v~*wXOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d;=`<%l)v<%lO)v~+gP;=`<%l)vj+maOy%jz}%j}!O,r!O!Q%j!Q![,r![!c%j!c!},r!}#O%j#O#P.O#P#R%j#R#S,r#S#T%j#T#o,r#o$g%j$g;'S,r;'S;=`/q<%lO,rj,ya$rY!r`Oy%jz}%j}!O,r!O!Q%j!Q![,r![!c%j!c!},r!}#O%j#O#P.O#P#R%j#R#S,r#S#T%j#T#o,r#o$g%j$g;'S,r;'S;=`/q<%lO,rj.TV!r`OY,rYZ%jZy,ryz.jz;'S,r;'S;=`/q<%lO,rY.oX$rY}!O.j!Q![.j!c!}.j#O#P/[#R#S.j#T#o.j$g;'S.j;'S;=`/k<%lO.jY/_SOY.jZ;'S.j;'S;=`/k<%lO.jY/nP;=`<%l.jj/tP;=`<%l,rd/zUOy%jz!_%j!_!`0^!`;'S%j;'S;=`%{<%lO%jd0eS!|S!r`Oy%jz;'S%j;'S;=`%{<%lO%jb0vS^QOy%jz;'S%j;'S;=`%{<%lO%j~1VWOY1SZw1Swx*cx#O1S#O#P1o#P;'S1S;'S;=`2k<%lO1S~1rRO;'S1S;'S;=`1{;=`O1S~2OXOY1SZw1Swx*cx#O1S#O#P1o#P;'S1S;'S;=`2k;=`<%l1S<%lO1S~2nP;=`<%l1Sj2vShYOy%jz;'S%j;'S;=`%{<%lO%j~3XOg~n3`UWQxWOy%jz!_%j!_!`0^!`;'S%j;'S;=`%{<%lO%jj3yWxW#SQOy%jz!O%j!O!P4c!P!Q%j!Q![7h![;'S%j;'S;=`%{<%lO%jj4hU!r`Oy%jz!Q%j!Q![4z![;'S%j;'S;=`%{<%lO%jj5RY!r`$kYOy%jz!Q%j!Q![4z![!g%j!g!h5q!h#X%j#X#Y5q#Y;'S%j;'S;=`%{<%lO%jj5vY!r`Oy%jz{%j{|6f|}%j}!O6f!O!Q%j!Q![6}![;'S%j;'S;=`%{<%lO%jj6kU!r`Oy%jz!Q%j!Q![6}![;'S%j;'S;=`%{<%lO%jj7UU!r`$kYOy%jz!Q%j!Q![6}![;'S%j;'S;=`%{<%lO%jj7o[!r`$kYOy%jz!O%j!O!P4z!P!Q%j!Q![7h![!g%j!g!h5q!h#X%j#X#Y5q#Y;'S%j;'S;=`%{<%lO%jj8jS!eYOy%jz;'S%j;'S;=`%{<%lO%jj8{WxWOy%jz!O%j!O!P4c!P!Q%j!Q![7h![;'S%j;'S;=`%{<%lO%jj9jU`YOy%jz!Q%j!Q![4z![;'S%j;'S;=`%{<%lO%j~:RTxWOy%jz{:b{;'S%j;'S;=`%{<%lO%j~:iS!r`$a~Oy%jz;'S%j;'S;=`%{<%lO%jj:z[$kYOy%jz!O%j!O!P4z!P!Q%j!Q![7h![!g%j!g!h5q!h#X%j#X#Y5q#Y;'S%j;'S;=`%{<%lO%jj;uUcYOy%jz![%j![!]QS!WW!|SOy%jz;'S%j;'S;=`%{<%lO%jj>eV#PQ!WWOy%jz!_%j!_!`=f!`!a>z!a;'S%j;'S;=`%{<%lO%jb?RS#PQ!r`Oy%jz;'S%j;'S;=`%{<%lO%jj?bYOy%jz}%j}!O@Q!O!c%j!c!}@o!}#T%j#T#o@o#o;'S%j;'S;=`%{<%lO%jj@VW!r`Oy%jz!c%j!c!}@o!}#T%j#T#o@o#o;'S%j;'S;=`%{<%lO%jj@v[lY!r`Oy%jz}%j}!O@o!O!Q%j!Q![@o![!c%j!c!}@o!}#T%j#T#o@o#o;'S%j;'S;=`%{<%lO%jhAqS!}WOy%jz;'S%j;'S;=`%{<%lO%jjBSSoYOy%jz;'S%j;'S;=`%{<%lO%jnBeSn^Oy%jz;'S%j;'S;=`%{<%lO%jjBvU!}WOy%jz#a%j#a#bCY#b;'S%j;'S;=`%{<%lO%jbC_U!r`Oy%jz#d%j#d#eCq#e;'S%j;'S;=`%{<%lO%jbCvU!r`Oy%jz#c%j#c#dDY#d;'S%j;'S;=`%{<%lO%jbD_U!r`Oy%jz#f%j#f#gDq#g;'S%j;'S;=`%{<%lO%jbDvU!r`Oy%jz#h%j#h#iEY#i;'S%j;'S;=`%{<%lO%jbE_U!r`Oy%jz#T%j#T#UEq#U;'S%j;'S;=`%{<%lO%jbEvU!r`Oy%jz#b%j#b#cFY#c;'S%j;'S;=`%{<%lO%jbF_U!r`Oy%jz#h%j#h#iFq#i;'S%j;'S;=`%{<%lO%jbFxS$tQ!r`Oy%jz;'S%j;'S;=`%{<%lO%jjGZSrYOy%jz;'S%j;'S;=`%{<%lO%jfGlU$gUOy%jz!_%j!_!`0^!`;'S%j;'S;=`%{<%lO%jjHTSqYOy%jz;'S%j;'S;=`%{<%lO%jfHfU#SQOy%jz!_%j!_!`0^!`;'S%j;'S;=`%{<%lO%j`H{P;=`<%l%Z",tokenizers:[pY,mY,QY,$Y,1,2,3,4,new vt("m~RRYZ[z{a~~g~aO$c~~dP!P!Qg~lO$d~~",28,156)],topRules:{StyleSheet:[0,6],Styles:[1,129]},dynamicPrecedences:{97:1},specialized:[{term:172,get:(t,e)=>xX(t)<<1,external:xX},{term:150,get:t=>PY[t]||-1},{term:151,get:t=>SY[t]||-1},{term:4,get:t=>XY[t]||-1},{term:28,get:t=>bY[t]||-1},{term:149,get:t=>xY[t]||-1}],tokenPrec:2433});var qu=null;function Uu(){if(!qu&&typeof document=="object"&&document.body){let{style:t}=document.body,e=[],O=new Set;for(let i in t)i!="cssText"&&i!="cssFloat"&&typeof t[i]=="string"&&(/[A-Z]/.test(i)&&(i=i.replace(/[A-Z]/g,n=>"-"+n.toLowerCase())),O.has(i)||(e.push(i),O.add(i)));qu=e.sort().map(i=>({type:"property",label:i,apply:i+": "}))}return qu||[]}var _X=["active","after","any-link","autofill","backdrop","before","checked","cue","default","defined","disabled","empty","enabled","file-selector-button","first","first-child","first-letter","first-line","first-of-type","focus","focus-visible","focus-within","fullscreen","has","host","host-context","hover","in-range","indeterminate","invalid","is","lang","last-child","last-of-type","left","link","marker","modal","not","nth-child","nth-last-child","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","part","placeholder","placeholder-shown","read-only","read-write","required","right","root","scope","selection","slotted","target","target-text","valid","visited","where"].map(t=>({type:"class",label:t})),ZX=["above","absolute","activeborder","additive","activecaption","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","antialiased","appworkspace","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","axis-pan","background","backwards","baseline","below","bidi-override","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic-abegede-gez","ethiopic-halehame-aa-er","ethiopic-halehame-gez","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fill-box","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","graytext","grid","groove","hand","hard-light","help","hidden","hide","higher","highlight","highlighttext","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","justify","keep-all","landscape","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-hexadecimal","lower-latin","lower-norwegian","lowercase","ltr","luminosity","manipulation","match","matrix","matrix3d","medium","menu","menutext","message-box","middle","min-intrinsic","mix","monospace","move","multiple","multiple_mask_images","multiply","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","opacity","open-quote","optimizeLegibility","optimizeSpeed","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","perspective","pinch-zoom","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","start","static","status-bar","stretch","stroke","stroke-box","sub","subpixel-antialiased","svg_masks","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","text","text-bottom","text-top","textarea","textfield","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","to","top","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unidirectional-pan","unset","up","upper-latin","uppercase","url","var","vertical","vertical-text","view-box","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"].map(t=>({type:"keyword",label:t})).concat(["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","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","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","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","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","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"].map(t=>({type:"constant",label:t}))),kY=["a","abbr","address","article","aside","b","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","dd","del","details","dfn","dialog","div","dl","dt","em","figcaption","figure","footer","form","header","hgroup","h1","h2","h3","h4","h5","h6","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","main","meter","nav","ol","output","p","pre","ruby","section","select","small","source","span","strong","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","tr","u","ul"].map(t=>({type:"type",label:t})),yY=["@charset","@color-profile","@container","@counter-style","@font-face","@font-feature-values","@font-palette-values","@import","@keyframes","@layer","@media","@namespace","@page","@position-try","@property","@scope","@starting-style","@supports","@view-transition"].map(t=>({type:"keyword",label:t})),XO=/^(\w[\w-]*|-\w[\w-]*|)$/,wY=/^-(-[\w-]*)?$/;function TY(t,e){var O;if((t.name=="("||t.type.isError)&&(t=t.parent||t),t.name!="ArgList")return!1;let i=(O=t.parent)===null||O===void 0?void 0:O.firstChild;return i?.name!="Callee"?!1:e.sliceString(i.from,i.to)=="var"}var RX=new Lt,vY=["Declaration"];function _Y(t){for(let e=t;;){if(e.type.isTop)return e;if(!(e=e.parent))return t}}function YX(t,e,O){if(e.to-e.from>4096){let i=RX.get(e);if(i)return i;let n=[],r=new Set,a=e.cursor(F.IncludeAnonymous);if(a.firstChild())do for(let o of YX(t,a.node,O))r.has(o.label)||(r.add(o.label),n.push(o));while(a.nextSibling());return RX.set(e,n),n}else{let i=[],n=new Set;return e.cursor().iterate(r=>{var a;if(O(r)&&r.matchContext(vY)&&((a=r.node.nextSibling)===null||a===void 0?void 0:a.name)==":"){let o=t.sliceString(r.from,r.to);n.has(o)||(n.add(o),i.push({label:o,type:"variable"}))}}),i}}var ZY=t=>e=>{let{state:O,pos:i}=e,n=N(O).resolveInner(i,-1),r=n.type.isError&&n.from==n.to-1&&O.doc.sliceString(n.from,n.to)=="-";if(n.name=="PropertyName"||(r||n.name=="TagName")&&/^(Block|Styles)$/.test(n.resolve(n.to).name))return{from:n.from,options:Uu(),validFor:XO};if(n.name=="ValueName")return{from:n.from,options:ZX,validFor:XO};if(n.name=="PseudoClassName")return{from:n.from,options:_X,validFor:XO};if(t(n)||(e.explicit||r)&&TY(n,O.doc))return{from:t(n)||r?n.from:i,options:YX(O.doc,_Y(n),t),validFor:wY};if(n.name=="TagName"){for(let{parent:s}=n;s;s=s.parent)if(s.name=="Block")return{from:n.from,options:Uu(),validFor:XO};return{from:n.from,options:kY,validFor:XO}}if(n.name=="AtKeyword")return{from:n.from,options:yY,validFor:XO};if(!e.explicit)return null;let a=n.resolve(i),o=a.childBefore(i);return o&&o.name==":"&&a.name=="PseudoClassSelector"?{from:i,options:_X,validFor:XO}:o&&o.name==":"&&a.name=="Declaration"||a.name=="ArgList"?{from:i,options:ZX,validFor:XO}:a.name=="Block"||a.name=="Styles"?{from:i,options:Uu(),validFor:XO}:null},RY=ZY(t=>t.name=="VariableName"),Hr=fe.define({name:"css",parser:vX.configure({props:[se.add({Declaration:ue()}),le.add({"Block KeyframeList":we})]}),languageData:{commentTokens:{block:{open:"/*",close:"*/"}},indentOnInput:/^\s*\}$/,wordChars:"-"}});function bs(){return new oe(Hr,Hr.data.of({autocomplete:RY}))}var Kr=["_blank","_self","_top","_parent"],Vu=["ascii","utf-8","utf-16","latin1","latin1"],Wu=["get","post","put","delete"],ju=["application/x-www-form-urlencoded","multipart/form-data","text/plain"],$t=["true","false"],E={},YY={a:{attrs:{href:null,ping:null,type:null,media:null,target:Kr,hreflang:null}},abbr:E,address:E,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:["default","rect","circle","poly"]}},article:E,aside:E,audio:{attrs:{src:null,mediagroup:null,crossorigin:["anonymous","use-credentials"],preload:["none","metadata","auto"],autoplay:["autoplay"],loop:["loop"],controls:["controls"]}},b:E,base:{attrs:{href:null,target:Kr}},bdi:E,bdo:E,blockquote:{attrs:{cite:null}},body:E,br:E,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:["autofocus"],disabled:["autofocus"],formenctype:ju,formmethod:Wu,formnovalidate:["novalidate"],formtarget:Kr,type:["submit","reset","button"]}},canvas:{attrs:{width:null,height:null}},caption:E,center:E,cite:E,code:E,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:["command","checkbox","radio"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:["disabled"],checked:["checked"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:["disabled"],multiple:["multiple"]}},datalist:{attrs:{data:null}},dd:E,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:["open"]}},dfn:E,div:E,dl:E,dt:E,em:E,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:["disabled"],form:null,name:null}},figcaption:E,figure:E,footer:E,form:{attrs:{action:null,name:null,"accept-charset":Vu,autocomplete:["on","off"],enctype:ju,method:Wu,novalidate:["novalidate"],target:Kr}},h1:E,h2:E,h3:E,h4:E,h5:E,h6:E,head:{children:["title","base","link","style","meta","script","noscript","command"]},header:E,hgroup:E,hr:E,html:{attrs:{manifest:null}},i:E,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:["allow-top-navigation","allow-same-origin","allow-forms","allow-scripts"],seamless:["seamless"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:["anonymous","use-credentials"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:["audio/*","video/*","image/*"],autocomplete:["on","off"],autofocus:["autofocus"],checked:["checked"],disabled:["disabled"],formenctype:ju,formmethod:Wu,formnovalidate:["novalidate"],formtarget:Kr,multiple:["multiple"],readonly:["readonly"],required:["required"],type:["hidden","text","search","tel","url","email","password","datetime","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]}},ins:{attrs:{cite:null,datetime:null}},kbd:E,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:["autofocus"],disabled:["disabled"],keytype:["RSA"]}},label:{attrs:{for:null,form:null}},legend:E,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:["all","16x16","16x16 32x32","16x16 32x32 64x64"]}},map:{attrs:{name:null}},mark:E,menu:{attrs:{label:null,type:["list","context","toolbar"]}},meta:{attrs:{content:null,charset:Vu,name:["viewport","application-name","author","description","generator","keywords"],"http-equiv":["content-language","content-type","default-style","refresh"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:E,noscript:E,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:["typemustmatch"]}},ol:{attrs:{reversed:["reversed"],start:null,type:["1","a","A","i","I"]},children:["li","script","template","ul","ol"]},optgroup:{attrs:{disabled:["disabled"],label:null}},option:{attrs:{disabled:["disabled"],label:null,selected:["selected"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:E,param:{attrs:{name:null,value:null}},pre:E,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:E,rt:E,ruby:E,samp:E,script:{attrs:{type:["text/javascript"],src:null,async:["async"],defer:["defer"],charset:Vu}},section:E,select:{attrs:{form:null,name:null,size:null,autofocus:["autofocus"],disabled:["disabled"],multiple:["multiple"]}},slot:{attrs:{name:null}},small:E,source:{attrs:{src:null,type:null,media:null}},span:E,strong:E,style:{attrs:{type:["text/css"],media:null,scoped:null}},sub:E,summary:E,sup:E,table:E,tbody:E,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:E,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:["autofocus"],disabled:["disabled"],readonly:["readonly"],required:["required"],wrap:["soft","hard"]}},tfoot:E,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:["row","col","rowgroup","colgroup"]}},thead:E,time:{attrs:{datetime:null}},title:E,tr:E,track:{attrs:{src:null,label:null,default:null,kind:["subtitles","captions","descriptions","chapters","metadata"],srclang:null}},ul:{children:["li","script","template","ul","ol"]},var:E,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:["anonymous","use-credentials"],preload:["auto","metadata","none"],autoplay:["autoplay"],mediagroup:["movie"],muted:["muted"],controls:["controls"]}},wbr:E},VX={accesskey:null,class:null,contenteditable:$t,contextmenu:null,dir:["ltr","rtl","auto"],draggable:["true","false","auto"],dropzone:["copy","move","link","string:","file:"],hidden:["hidden"],id:null,inert:["inert"],itemid:null,itemprop:null,itemref:null,itemscope:["itemscope"],itemtype:null,lang:["ar","bn","de","en-GB","en-US","es","fr","hi","id","ja","pa","pt","ru","tr","zh"],spellcheck:$t,autocorrect:$t,autocapitalize:$t,style:null,tabindex:null,title:null,translate:["yes","no"],rel:["stylesheet","alternate","author","bookmark","help","license","next","nofollow","noreferrer","prefetch","prev","search","tag"],role:"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer".split(" "),"aria-activedescendant":null,"aria-atomic":$t,"aria-autocomplete":["inline","list","both","none"],"aria-busy":$t,"aria-checked":["true","false","mixed","undefined"],"aria-controls":null,"aria-describedby":null,"aria-disabled":$t,"aria-dropeffect":null,"aria-expanded":["true","false","undefined"],"aria-flowto":null,"aria-grabbed":["true","false","undefined"],"aria-haspopup":$t,"aria-hidden":$t,"aria-invalid":["true","false","grammar","spelling"],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":["off","polite","assertive"],"aria-multiline":$t,"aria-multiselectable":$t,"aria-owns":null,"aria-posinset":null,"aria-pressed":["true","false","mixed","undefined"],"aria-readonly":$t,"aria-relevant":null,"aria-required":$t,"aria-selected":["true","false","undefined"],"aria-setsize":null,"aria-sort":["ascending","descending","none","other"],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},WX="beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload".split(" ").map(t=>"on"+t);for(let t of WX)VX[t]=null;var zi=class{constructor(e,O){this.tags={...YY,...e},this.globalAttrs={...VX,...O},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};zi.default=new zi;function qi(t,e,O=t.length){if(!e)return"";let i=e.firstChild,n=i&&i.getChild("TagName");return n?t.sliceString(n.from,Math.min(n.to,O)):""}function _n(t,e=!1){for(;t;t=t.parent)if(t.name=="Element")if(e)e=!1;else return t;return null}function jX(t,e,O){let i=O.tags[qi(t,_n(e))];return i?.children||O.allTags}function Gu(t,e){let O=[];for(let i=_n(e);i&&!i.type.isTop;i=_n(i.parent)){let n=qi(t,i);if(n&&i.lastChild.name=="CloseTag")break;n&&O.indexOf(n)<0&&(e.name=="EndTag"||e.from>=i.firstChild.to)&&O.push(n)}return O}var GX=/^[:\-\.\w\u00b7-\uffff]*$/;function zX(t,e,O,i,n){let r=/\s*>/.test(t.sliceDoc(n,n+5))?"":">",a=_n(O,O.name=="StartTag"||O.name=="TagName");return{from:i,to:n,options:jX(t.doc,a,e).map(o=>({label:o,type:"type"})).concat(Gu(t.doc,O).map((o,s)=>({label:"/"+o,apply:"/"+o+r,type:"type",boost:99-s}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function qX(t,e,O,i){let n=/\s*>/.test(t.sliceDoc(i,i+5))?"":">";return{from:O,to:i,options:Gu(t.doc,e).map((r,a)=>({label:r,apply:r+n,type:"type",boost:99-a})),validFor:GX}}function zY(t,e,O,i){let n=[],r=0;for(let a of jX(t.doc,O,e))n.push({label:"<"+a,type:"type"});for(let a of Gu(t.doc,O))n.push({label:"",type:"type",boost:99-r++});return{from:i,to:i,options:n,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function qY(t,e,O,i,n){let r=_n(O),a=r?e.tags[qi(t.doc,r)]:null,o=a&&a.attrs?Object.keys(a.attrs):[],s=a&&a.globalAttrs===!1?o:o.length?o.concat(e.globalAttrNames):e.globalAttrNames;return{from:i,to:n,options:s.map(l=>({label:l,type:"property"})),validFor:GX}}function UY(t,e,O,i,n){var r;let a=(r=O.parent)===null||r===void 0?void 0:r.getChild("AttributeName"),o=[],s;if(a){let l=t.sliceDoc(a.from,a.to),c=e.globalAttrs[l];if(!c){let h=_n(O),f=h?e.tags[qi(t.doc,h)]:null;c=f?.attrs&&f.attrs[l]}if(c){let h=t.sliceDoc(i,n).toLowerCase(),f='"',d='"';/^['"]/.test(h)?(s=h[0]=='"'?/^[^"]*$/:/^[^']*$/,f="",d=t.sliceDoc(n,n+1)==h[0]?"":h[0],h=h.slice(1),i++):s=/^[^\s<>='"]*$/;for(let Q of c)o.push({label:Q,apply:f+Q+d,type:"constant"})}}return{from:i,to:n,options:o,validFor:s}}function CX(t,e){let{state:O,pos:i}=e,n=N(O).resolveInner(i,-1),r=n.resolve(i);for(let a=i,o;r==n&&(o=n.childBefore(a));){let s=o.lastChild;if(!s||!s.type.isError||s.fromCX(i,n)}var WY=Ut.parser.configure({top:"SingleExpression"}),AX=[{tag:"script",attrs:t=>t.type=="text/typescript"||t.lang=="ts",parser:Hf.parser},{tag:"script",attrs:t=>t.type=="text/babel"||t.type=="text/jsx",parser:Kf.parser},{tag:"script",attrs:t=>t.type=="text/typescript-jsx",parser:Jf.parser},{tag:"script",attrs(t){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(t.type)},parser:WY},{tag:"script",attrs(t){return!t.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(t.type)},parser:Ut.parser},{tag:"style",attrs(t){return(!t.lang||t.lang=="css")&&(!t.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(t.type))},parser:Hr.parser}],LX=[{name:"style",parser:Hr.parser.configure({top:"Styles"})}].concat(WX.map(t=>({name:t,parser:Ut.parser}))),IX=fe.define({name:"html",parser:PX.configure({props:[se.add({Element(t){let e=/^(\s*)(<\/)?/.exec(t.textAfter);return t.node.to<=t.pos+e[0].length?t.continue():t.lineIndent(t.node.from)+(e[2]?0:t.unit)},"OpenTag CloseTag SelfClosingTag"(t){return t.column(t.node.from)+t.unit},Document(t){if(t.pos+/\s*/.exec(t.textAfter)[0].lengtht.getChild("TagName")})]}),languageData:{commentTokens:{block:{open:""}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:"-_"}}),xs=IX.configure({wrap:Yu(AX,LX)});function Zn(t={}){let e="",O;t.matchClosingTags===!1&&(e="noMatch"),t.selfClosingTags===!0&&(e=(e?e+" ":"")+"selfClosing"),(t.nestedLanguages&&t.nestedLanguages.length||t.nestedAttributes&&t.nestedAttributes.length)&&(O=Yu((t.nestedLanguages||[]).concat(AX),(t.nestedAttributes||[]).concat(LX)));let i=O?IX.configure({wrap:O,dialect:e}):e?xs.configure({dialect:e}):xs;return new oe(i,[xs.data.of({autocomplete:VY(t)}),t.autoCloseTags!==!1?GY:[],ls().support,bs().support])}var UX=new Set("area base br col command embed frame hr img input keygen link meta param source track wbr menuitem".split(" "));function jY(t,e,O){for(var i;;){if(((i=e.lastChild)===null||i===void 0?void 0:i.name)!="CloseTag")return!1;let n=e.parent;if(!n||qi(t,n)!=O)return!0;e=n}}var GY=_.inputHandler.of((t,e,O,i,n)=>{if(t.composing||t.state.readOnly||e!=O||i!=">"&&i!="/"||!xs.isActiveAt(t.state,e,-1))return!1;let r=n(),{state:a}=r,o=a.changeByRange(s=>{var l;let c=a.doc.sliceString(s.from-1,s.to)==i,{head:h}=s,f=N(a).resolveInner(h,-1),d;if(c&&i==">"&&f.name=="EndTag"){let Q=f.parent;if((d=qi(a.doc,Q.parent,h))&&!UX.has(d)&&!jY(a.doc,Q.parent,d)){let $=h+(a.doc.sliceString(h,h+1)===">"?1:0),p=``;return{range:s,changes:{from:h,to:$,insert:p}}}}else if(c&&i=="/"&&f.name=="IncompleteCloseTag"){let Q=f.parent;if(f.from==h-2&&((l=Q.lastChild)===null||l===void 0?void 0:l.name)!="CloseTag"&&(d=qi(a.doc,Q,h))&&!UX.has(d)){let $=h+(a.doc.sliceString(h,h+1)===">"?1:0),p=`${d}>`;return{range:X.cursor(h+p.length,-1),changes:{from:h,to:$,insert:p}}}}return{range:s}});return o.changes.empty?!1:(t.dispatch([r,a.update(o,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var NX=mi({commentTokens:{block:{open:""}}}),BX=new L,FX=FS.configure({props:[le.add(t=>!t.is("Block")||t.is("Document")||Au(t)!=null||CY(t)?void 0:(e,O)=>({from:O.doc.lineAt(e.from).to,to:e.to})),BX.add(Au),se.add({Document:()=>null}),Nt.add({Document:NX})]});function Au(t){let e=/^(?:ATX|Setext)Heading(\d)$/.exec(t.name);return e?+e[1]:void 0}function CY(t){return t.name=="OrderedList"||t.name=="BulletList"}function EY(t,e){let O=t;for(;;){let i=O.nextSibling,n;if(!i||(n=Au(i.type))!=null&&n<=e)break;O=i}return O.to}var AY=Xo.of((t,e,O)=>{for(let i=N(t).resolveInner(O,-1);i&&!(i.fromO)return{from:O,to:r}}return null});function Lu(t){return new Ze(NX,t,[],"markdown")}var LY=Lu(FX),IY=FX.configure([JS,OX,tX,iX,{props:[le.add({Table:(t,e)=>({from:e.doc.lineAt(t.from).to,to:t.to})})]}]),ks=Lu(IY);function MY(t,e){return O=>{if(O&&t){let i=null;if(O=/\S*/.exec(O)[0],typeof t=="function"?i=t(O):i=dn.matchLanguageName(t,O,!0),i instanceof dn)return i.support?i.support.language.parser:WO.getSkippingParser(i.load());if(i)return i.parser}return e?e.parser:null}}var Jr=class{constructor(e,O,i,n,r,a,o){this.node=e,this.from=O,this.to=i,this.spaceBefore=n,this.spaceAfter=r,this.type=a,this.item=o}blank(e,O=!0){let i=this.spaceBefore+(this.node.name=="Blockquote"?">":"");if(e!=null){for(;i.length0;n--)i+=" ";return i+(O?this.spaceAfter:"")}}marker(e,O){let i=this.node.name=="OrderedList"?String(+KX(this.item,e)[2]+O):"";return this.spaceBefore+i+this.type+this.spaceAfter}};function HX(t,e){let O=[],i=[];for(let n=t;n;n=n.parent){if(n.name=="FencedCode")return i;(n.name=="ListItem"||n.name=="Blockquote")&&O.push(n)}for(let n=O.length-1;n>=0;n--){let r=O[n],a,o=e.lineAt(r.from),s=r.from-o.from;if(r.name=="Blockquote"&&(a=/^ *>( ?)/.exec(o.text.slice(s))))i.push(new Jr(r,s,s+a[0].length,"",a[1],">",null));else if(r.name=="ListItem"&&r.parent.name=="OrderedList"&&(a=/^( *)\d+([.)])( *)/.exec(o.text.slice(s)))){let l=a[3],c=a[0].length;l.length>=4&&(l=l.slice(0,l.length-4),c-=4),i.push(new Jr(r.parent,s,s+c,a[1],l,a[2],r))}else if(r.name=="ListItem"&&r.parent.name=="BulletList"&&(a=/^( *)([-+*])( {1,4}\[[ xX]\])?( +)/.exec(o.text.slice(s)))){let l=a[4],c=a[0].length;l.length>4&&(l=l.slice(0,l.length-4),c-=4);let h=a[2];a[3]&&(h+=a[3].replace(/[xX]/," ")),i.push(new Jr(r.parent,s,s+c,a[1],l,h,r))}}return i}function KX(t,e){return/^(\s*)(\d+)(?=[.)])/.exec(e.sliceString(t.from,t.from+10))}function Cu(t,e,O,i=0){for(let n=-1,r=t;;){if(r.name=="ListItem"){let o=KX(r,e),s=+o[2];if(n>=0){if(s!=n+1)return;O.push({from:r.from+o[1].length,to:r.from+o[0].length,insert:String(n+2+i)})}n=s}let a=r.nextSibling;if(!a)break;r=a}}function Iu(t,e){let O=/^[ \t]*/.exec(t)[0].length;if(!O||e.facet(lO)!=" ")return t;let i=Me(t,4,O),n="";for(let r=i;r>0;)r>=4?(n+=" ",r-=4):(n+=" ",r--);return n+t.slice(O)}var DY=(t={})=>({state:e,dispatch:O})=>{let i=N(e),{doc:n}=e,r=null,a=e.changeByRange(o=>{if(!o.empty||!ks.isActiveAt(e,o.from,-1)&&!ks.isActiveAt(e,o.from,1))return r={range:o};let s=o.from,l=n.lineAt(s),c=HX(i.resolveInner(s,-1),n);for(;c.length&&c[c.length-1].from>s-l.from;)c.pop();if(!c.length)return r={range:o};let h=c[c.length-1];if(h.to-h.spaceAfter.length>s-l.from)return r={range:o};let f=s>=h.to-h.spaceAfter.length&&!/\S/.test(l.text.slice(h.to));if(h.item&&f){if(h.item.from]*$/.test(l.text.slice(0,h.to)))return r={range:o};let m=h.node.firstChild,P=h.node.getChild("ListItem","ListItem");if(m.to>=s||P&&P.to0&&!/[^\s>]/.test(n.lineAt(l.from-1).text)||t.nonTightLists===!1){let S=c.length>1?c[c.length-2]:null,y,k="";S&&S.item?(y=l.from+S.from,k=S.marker(n,1)):y=l.from+(S?S.to:0);let T=[{from:y,to:s,insert:k}];return h.node.name=="OrderedList"&&Cu(h.item,n,T,-2),S&&S.node.name=="OrderedList"&&Cu(S.item,n,T),{range:X.cursor(y+k.length),changes:T}}else{let S=DX(c,e,l);return{range:X.cursor(s+S.length+1),changes:{from:l.from,insert:S+e.lineBreak}}}}if(h.node.name=="Blockquote"&&f&&l.from){let m=n.lineAt(l.from-1),P=/>\s*$/.exec(m.text);if(P&&P.index==h.from){let S=e.changes([{from:m.from+P.index,to:m.to},{from:l.from+h.from,to:l.to}]);return{range:o.map(S),changes:S}}}let d=[];h.node.name=="OrderedList"&&Cu(h.item,n,d);let Q=h.item&&h.item.from]*/.exec(l.text)[0].length>=h.to)for(let m=0,P=c.length-1;m<=P;m++)$+=m==P&&!Q?c[m].marker(n,1):c[m].blank(ml.from&&/\s/.test(l.text.charAt(p-l.from-1));)p--;return $=Iu($,e),BY(h.node,e.doc)&&($=DX(c,e,l)+e.lineBreak+$),d.push({from:p,to:s,insert:e.lineBreak+$}),{range:X.cursor(p+$.length+1),changes:d}});return r?!1:(O(e.update(a,{scrollIntoView:!0,userEvent:"input"})),!0)},NY=DY();function MX(t){return t.name=="QuoteMark"||t.name=="ListMark"}function BY(t,e){if(t.name!="OrderedList"&&t.name!="BulletList")return!1;let O=t.firstChild,i=t.getChild("ListItem","ListItem");if(!i)return!1;let n=e.lineAt(O.to),r=e.lineAt(i.from),a=/^[\s>]*$/.test(n.text);return n.number+(a?0:1){let O=N(t),i=null,n=t.changeByRange(r=>{let a=r.from,{doc:o}=t;if(r.empty&&ks.isActiveAt(t,r.from)){let s=o.lineAt(a),l=HX(FY(O,a),o);if(l.length){let c=l[l.length-1],h=c.to-c.spaceAfter.length+(c.spaceAfter?1:0);if(a-s.from>h&&!/\S/.test(s.text.slice(h,a-s.from)))return{range:X.cursor(s.from+h),changes:{from:s.from+h,to:a}};if(a-s.from==h&&(c.item&&s.from<=c.item.from||/^[\s>]*$/.test(s.text.slice(0,c.to)))){let f=s.from+c.from;if(c.item&&c.node.from{var O;let{main:i}=e.state.selection;if(i.empty)return!1;let n=(O=t.clipboardData)===null||O===void 0?void 0:O.getData("text/plain");if(!n||!/^(https?:\/\/|mailto:|xmpp:|www\.)/.test(n)||(/^www\./.test(n)&&(n="https://"+n),!ks.isActiveAt(e.state,i.from,1)))return!1;let r=N(e.state),a=!1;return r.iterate({from:i.from,to:i.to,enter:o=>{(o.from>i.from||tz.test(o.name))&&(a=!0)},leave:o=>{o.to=65&&t<=90||t==95||t>=97&&t<=122||t>=161}function uz(t){return t==9||t==10||t==13||t==32}var tb=null,Ob=null,ib=0;function Du(t,e){let O=t.pos+e;if(Ob==t&&ib==O)return tb;for(;uz(t.peek(e));)e++;let i="";for(;;){let n=t.peek(e);if(!fz(n))break;i+=String.fromCharCode(n),e++}return Ob=t,ib=O,tb=i||null}function nb(t,e){this.name=t,this.parent=e}var dz=new st({start:null,shift(t,e,O,i){return e==Mu?new nb(Du(i,1)||"",t):t},reduce(t,e){return e==cz&&t?t.parent:t},reuse(t,e,O,i){let n=e.type.id;return n==Mu||n==hz?new nb(Du(i,1)||"",t):t},strict:!1}),Qz=new D((t,e)=>{if(t.next==60){if(t.advance(),t.next==47){t.advance();let O=Du(t,0);if(!O)return t.acceptToken(az);if(e.context&&O==e.context.name)return t.acceptToken(iz);for(let i=e.context;i;i=i.parent)if(i.name==O)return t.acceptToken(nz,-2);t.acceptToken(rz)}else if(t.next!=33&&t.next!=63)return t.acceptToken(Mu)}},{contextual:!0});function Nu(t,e){return new D(O=>{let i=0,n=e.charCodeAt(0);e:for(;!(O.next<0);O.advance(),i++)if(O.next==n){for(let r=1;r"),pz=Nu(sz,"?>"),mz=Nu(lz,"]]>"),gz=re({Text:u.content,"StartTag StartCloseTag EndTag SelfCloseEndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/TagName":[u.tagName,u.invalid],AttributeName:u.attributeName,AttributeValue:u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta,Cdata:u.special(u.string)}),rb=de.deserialize({version:14,states:",lOQOaOOOrOxO'#CfOzOpO'#CiO!tOaO'#CgOOOP'#Cg'#CgO!{OrO'#CrO#TOtO'#CsO#]OpO'#CtOOOP'#DT'#DTOOOP'#Cv'#CvQQOaOOOOOW'#Cw'#CwO#eOxO,59QOOOP,59Q,59QOOOO'#Cx'#CxO#mOpO,59TO#uO!bO,59TOOOP'#C|'#C|O$TOaO,59RO$[OpO'#CoOOOP,59R,59ROOOQ'#C}'#C}O$dOrO,59^OOOP,59^,59^OOOS'#DO'#DOO$lOtO,59_OOOP,59_,59_O$tOpO,59`O$|OpO,59`OOOP-E6t-E6tOOOW-E6u-E6uOOOP1G.l1G.lOOOO-E6v-E6vO%UO!bO1G.oO%UO!bO1G.oO%dOpO'#CkO%lO!bO'#CyO%zO!bO1G.oOOOP1G.o1G.oOOOP1G.w1G.wOOOP-E6z-E6zOOOP1G.m1G.mO&VOpO,59ZO&_OpO,59ZOOOQ-E6{-E6{OOOP1G.x1G.xOOOS-E6|-E6|OOOP1G.y1G.yO&gOpO1G.zO&gOpO1G.zOOOP1G.z1G.zO&oO!bO7+$ZO&}O!bO7+$ZOOOP7+$Z7+$ZOOOP7+$c7+$cO'YOpO,59VO'bOpO,59VO'mO!bO,59eOOOO-E6w-E6wO'{OpO1G.uO'{OpO1G.uOOOP1G.u1G.uO(TOpO7+$fOOOP7+$f7+$fO(]O!bO<c!|;'S(o;'S;=`)]<%lO(oi>jX|W!O`Or(ors&osv(owx'}x!r(o!r!s?V!s;'S(o;'S;=`)]<%lO(oi?^X|W!O`Or(ors&osv(owx'}x!g(o!g!h?y!h;'S(o;'S;=`)]<%lO(oi@QY|W!O`Or?yrs@psv?yvwA[wxBdx!`?y!`!aCr!a;'S?y;'S;=`Db<%lO?ya@uV!O`Ov@pvxA[x!`@p!`!aAy!a;'S@p;'S;=`B^<%lO@pPA_TO!`A[!`!aAn!a;'SA[;'S;=`As<%lOA[PAsOiPPAvP;=`<%lA[aBQSiP!O`Ov&ox;'S&o;'S;=`'Q<%lO&oaBaP;=`<%l@pXBiX|WOrBdrsA[svBdvwA[w!`Bd!`!aCU!a;'SBd;'S;=`Cl<%lOBdXC]TiP|WOr'}sv'}w;'S'};'S;=`(c<%lO'}XCoP;=`<%lBdiC{ViP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiDeP;=`<%l?yiDoZ|W!O`Or(ors&osv(owx'}x!e(o!e!fEb!f#V(o#V#WIr#W;'S(o;'S;=`)]<%lO(oiEiX|W!O`Or(ors&osv(owx'}x!f(o!f!gFU!g;'S(o;'S;=`)]<%lO(oiF]X|W!O`Or(ors&osv(owx'}x!c(o!c!dFx!d;'S(o;'S;=`)]<%lO(oiGPX|W!O`Or(ors&osv(owx'}x!v(o!v!wGl!w;'S(o;'S;=`)]<%lO(oiGsX|W!O`Or(ors&osv(owx'}x!c(o!c!dH`!d;'S(o;'S;=`)]<%lO(oiHgX|W!O`Or(ors&osv(owx'}x!}(o!}#OIS#O;'S(o;'S;=`)]<%lO(oiI]V|W!O`yPOr(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiIyX|W!O`Or(ors&osv(owx'}x#W(o#W#XJf#X;'S(o;'S;=`)]<%lO(oiJmX|W!O`Or(ors&osv(owx'}x#T(o#T#UKY#U;'S(o;'S;=`)]<%lO(oiKaX|W!O`Or(ors&osv(owx'}x#h(o#h#iK|#i;'S(o;'S;=`)]<%lO(oiLTX|W!O`Or(ors&osv(owx'}x#T(o#T#UH`#U;'S(o;'S;=`)]<%lO(oiLwX|W!O`Or(ors&osv(owx'}x#c(o#c#dMd#d;'S(o;'S;=`)]<%lO(oiMkX|W!O`Or(ors&osv(owx'}x#V(o#V#WNW#W;'S(o;'S;=`)]<%lO(oiN_X|W!O`Or(ors&osv(owx'}x#h(o#h#iNz#i;'S(o;'S;=`)]<%lO(oi! RX|W!O`Or(ors&osv(owx'}x#m(o#m#n! n#n;'S(o;'S;=`)]<%lO(oi! uX|W!O`Or(ors&osv(owx'}x#d(o#d#e!!b#e;'S(o;'S;=`)]<%lO(oi!!iX|W!O`Or(ors&osv(owx'}x#X(o#X#Y?y#Y;'S(o;'S;=`)]<%lO(oi!#_V!SP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(ok!$PXaQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qo!$wX[UVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!%mZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!&`!a;'S$q;'S;=`)c<%lO$qk!&kX!RQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!'aZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_#P$q#P#Q!(S#Q;'S$q;'S;=`)c<%lO$qk!(]ZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!)O!a;'S$q;'S;=`)c<%lO$qk!)ZXxQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$q",tokenizers:[Qz,$z,pz,mz,0,1,2,3,4],topRules:{Document:[0,6]},tokenPrec:0});function ys(t,e){let O=e&&e.getChild("TagName");return O?t.sliceString(O.from,O.to):""}function Bu(t,e){let O=e&&e.firstChild;return!O||O.name!="OpenTag"?"":ys(t,O)}function Pz(t,e,O){let i=e&&e.getChildren("Attribute").find(r=>r.from<=O&&r.to>=O),n=i&&i.getChild("AttributeName");return n?t.sliceString(n.from,n.to):""}function Fu(t){for(let e=t&&t.parent;e;e=e.parent)if(e.name=="Element")return e;return null}function Sz(t,e){var O;let i=N(t).resolveInner(e,-1),n=null;for(let r=i;!n&&r.parent;r=r.parent)(r.name=="OpenTag"||r.name=="CloseTag"||r.name=="SelfClosingTag"||r.name=="MismatchedCloseTag")&&(n=r);if(n&&(n.to>e||n.lastChild.type.isError)){let r=n.parent;if(i.name=="TagName")return n.name=="CloseTag"||n.name=="MismatchedCloseTag"?{type:"closeTag",from:i.from,context:r}:{type:"openTag",from:i.from,context:Fu(r)};if(i.name=="AttributeName")return{type:"attrName",from:i.from,context:n};if(i.name=="AttributeValue")return{type:"attrValue",from:i.from,context:n};let a=i==n||i.name=="Attribute"?i.childBefore(e):i;return a?.name=="StartTag"?{type:"openTag",from:e,context:Fu(r)}:a?.name=="StartCloseTag"&&a.to<=e?{type:"closeTag",from:e,context:r}:a?.name=="Is"?{type:"attrValue",from:e,context:n}:a?{type:"attrName",from:e,context:n}:null}else if(i.name=="StartCloseTag")return{type:"closeTag",from:e,context:i.parent};for(;i.parent&&i.to==e&&!(!((O=i.lastChild)===null||O===void 0)&&O.type.isError);)i=i.parent;return i.name=="Element"||i.name=="Text"||i.name=="Document"?{type:"tag",from:e,context:i.name=="Element"?i:Fu(i)}:null}var Ku=class{constructor(e,O,i){this.attrs=O,this.attrValues=i,this.children=[],this.name=e.name,this.completion=Object.assign(Object.assign({type:"type"},e.completion||{}),{label:this.name}),this.openCompletion=Object.assign(Object.assign({},this.completion),{label:"<"+this.name}),this.closeCompletion=Object.assign(Object.assign({},this.completion),{label:"",boost:2}),this.closeNameCompletion=Object.assign(Object.assign({},this.completion),{label:this.name+">"}),this.text=e.textContent?e.textContent.map(n=>({label:n,type:"text"})):[]}},Hu=/^[:\-\.\w\u00b7-\uffff]*$/;function ab(t){return Object.assign(Object.assign({type:"property"},t.completion||{}),{label:t.name})}function ob(t){return typeof t=="string"?{label:`"${t}"`,type:"constant"}:/^"/.test(t.label)?t:Object.assign(Object.assign({},t),{label:`"${t.label}"`})}function Xz(t,e){let O=[],i=[],n=Object.create(null);for(let s of e){let l=ab(s);O.push(l),s.global&&i.push(l),s.values&&(n[s.name]=s.values.map(ob))}let r=[],a=[],o=Object.create(null);for(let s of t){let l=i,c=n;s.attributes&&(l=l.concat(s.attributes.map(f=>typeof f=="string"?O.find(d=>d.label==f)||{label:f,type:"property"}:(f.values&&(c==n&&(c=Object.create(c)),c[f.name]=f.values.map(ob)),ab(f)))));let h=new Ku(s,l,c);o[h.name]=h,r.push(h),s.top&&a.push(h)}a.length||(a=r);for(let s=0;s{var l;let{doc:c}=s.state,h=Sz(s.state,s.pos);if(!h||h.type=="tag"&&!s.explicit)return null;let{type:f,from:d,context:Q}=h;if(f=="openTag"){let $=a,p=Bu(c,Q);if(p){let m=o[p];$=m?.children||r}return{from:d,options:$.map(m=>m.completion),validFor:Hu}}else if(f=="closeTag"){let $=Bu(c,Q);return $?{from:d,to:s.pos+(c.sliceString(s.pos,s.pos+1)==">"?1:0),options:[((l=o[$])===null||l===void 0?void 0:l.closeNameCompletion)||{label:$+">",type:"type"}],validFor:Hu}:null}else if(f=="attrName"){let $=o[ys(c,Q)];return{from:d,options:$?.attrs||i,validFor:Hu}}else if(f=="attrValue"){let $=Pz(c,Q,d);if(!$)return null;let p=o[ys(c,Q)],m=(p?.attrValues||n)[$];return!m||!m.length?null:{from:d,to:s.pos+(c.sliceString(s.pos,s.pos+1)=='"'?1:0),options:m,validFor:/^"[^"]*"?$/}}else if(f=="tag"){let $=Bu(c,Q),p=o[$],m=[],P=Q&&Q.lastChild;$&&(!P||P.name!="CloseTag"||ys(c,P)!=$)&&m.push(p?p.closeCompletion:{label:"",type:"type",boost:2});let S=m.concat((p?.children||(Q?r:a)).map(y=>y.openCompletion));if(Q&&p?.text.length){let y=Q.firstChild;y.to>s.pos-20&&!/\S/.test(s.state.sliceDoc(y.to,s.pos))&&(S=S.concat(p.text))}return{from:d,options:S,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}else return null}}var Ju=fe.define({name:"xml",parser:rb.configure({props:[se.add({Element(t){let e=/^\s*<\//.test(t.textAfter);return t.lineIndent(t.node.from)+(e?0:t.unit)},"OpenTag CloseTag SelfClosingTag"(t){return t.column(t.node.from)+t.unit}}),le.add({Element(t){let e=t.firstChild,O=t.lastChild;return!e||e.name!="OpenTag"?null:{from:e.to,to:O.name=="CloseTag"?O.from:t.to}}}),pn.add({"OpenTag CloseTag":t=>t.getChild("TagName")})]}),languageData:{commentTokens:{block:{open:""}},indentOnInput:/^\s*<\/$/}});function lb(t={}){let e=[Ju.data.of({autocomplete:Xz(t.elements||[],t.attributes||[])})];return t.autoCloseTags!==!1&&e.push(bz),new oe(Ju,e)}function sb(t,e,O=t.length){if(!e)return"";let i=e.firstChild,n=i&&i.getChild("TagName");return n?t.sliceString(n.from,Math.min(n.to,O)):""}var bz=_.inputHandler.of((t,e,O,i,n)=>{if(t.composing||t.state.readOnly||e!=O||i!=">"&&i!="/"||!Ju.isActiveAt(t.state,e,-1))return!1;let r=n(),{state:a}=r,o=a.changeByRange(s=>{var l,c,h;let{head:f}=s,d=a.doc.sliceString(f-1,f)==i,Q=N(a).resolveInner(f,-1),$;if(d&&i==">"&&Q.name=="EndTag"){let p=Q.parent;if(((c=(l=p.parent)===null||l===void 0?void 0:l.lastChild)===null||c===void 0?void 0:c.name)!="CloseTag"&&($=sb(a.doc,p.parent,f))){let m=f+(a.doc.sliceString(f,f+1)===">"?1:0),P=``;return{range:s,changes:{from:f,to:m,insert:P}}}}else if(d&&i=="/"&&Q.name=="StartCloseTag"){let p=Q.parent;if(Q.from==f-2&&((h=p.lastChild)===null||h===void 0?void 0:h.name)!="CloseTag"&&($=sb(a.doc,p,f))){let m=f+(a.doc.sliceString(f,f+1)===">"?1:0),P=`${$}>`;return{range:X.cursor(f+P.length,-1),changes:{from:f,to:m,insert:P}}}}return{range:s}});return o.changes.empty?!1:(t.dispatch([r,a.update(o,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var xz=36,cb=1,kz=2,Rn=3,ed=4,yz=5,wz=6,Tz=7,vz=8,_z=9,Zz=10,Rz=11,Yz=12,zz=13,qz=14,Uz=15,Vz=16,Wz=17,hb=18,jz=19,gb=20,Pb=21,fb=22,Gz=23,Cz=24;function Od(t){return t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57}function Ez(t){return t>=48&&t<=57||t>=97&&t<=102||t>=65&&t<=70}function Vi(t,e,O){for(let i=!1;;){if(t.next<0)return;if(t.next==e&&!i){t.advance();return}i=O&&!i&&t.next==92,t.advance()}}function Az(t,e){e:for(;;){if(t.next<0)return;if(t.next==36){t.advance();for(let O=0;O)".charCodeAt(O);for(;;){if(t.next<0)return;if(t.next==i&&t.peek(1)==39){t.advance(2);return}t.advance()}}function id(t,e){for(;!(t.next!=95&&!Od(t.next));)e!=null&&(e+=String.fromCharCode(t.next)),t.advance();return e}function Iz(t){if(t.next==39||t.next==34||t.next==96){let e=t.next;t.advance(),Vi(t,e,!1)}else id(t)}function ub(t,e){for(;t.next==48||t.next==49;)t.advance();e&&t.next==e&&t.advance()}function db(t,e){for(;;){if(t.next==46){if(e)break;e=!0}else if(t.next<48||t.next>57)break;t.advance()}if(t.next==69||t.next==101)for(t.advance(),(t.next==43||t.next==45)&&t.advance();t.next>=48&&t.next<=57;)t.advance()}function Qb(t){for(;!(t.next<0||t.next==10);)t.advance()}function Ui(t,e){for(let O=0;O!=&|~^/",specialVar:"?",identifierQuotes:'"',caseInsensitiveIdentifiers:!1,words:Sb(ji,Wi)};function Mz(t,e,O,i){let n={};for(let r in nd)n[r]=(t.hasOwnProperty(r)?t:nd)[r];return e&&(n.words=Sb(e,O||"",i)),n}function Xb(t){return new D(e=>{var O;let{next:i}=e;if(e.advance(),Ui(i,td)){for(;Ui(e.next,td);)e.advance();e.acceptToken(xz)}else if(i==36&&t.doubleDollarQuotedStrings){let n=id(e,"");e.next==36&&(e.advance(),Az(e,n),e.acceptToken(Rn))}else if(i==39||i==34&&t.doubleQuotedStrings)Vi(e,i,t.backslashEscapes),e.acceptToken(Rn);else if(i==35&&t.hashComments||i==47&&e.next==47&&t.slashComments)Qb(e),e.acceptToken(cb);else if(i==45&&e.next==45&&(!t.spaceAfterDashes||e.peek(1)==32))Qb(e),e.acceptToken(cb);else if(i==47&&e.next==42){e.advance();for(let n=1;;){let r=e.next;if(e.next<0)break;if(e.advance(),r==42&&e.next==47){if(n--,e.advance(),!n)break}else r==47&&e.next==42&&(n++,e.advance())}e.acceptToken(kz)}else if((i==101||i==69)&&e.next==39)e.advance(),Vi(e,39,!0),e.acceptToken(Rn);else if((i==110||i==78)&&e.next==39&&t.charSetCasts)e.advance(),Vi(e,39,t.backslashEscapes),e.acceptToken(Rn);else if(i==95&&t.charSetCasts)for(let n=0;;n++){if(e.next==39&&n>1){e.advance(),Vi(e,39,t.backslashEscapes),e.acceptToken(Rn);break}if(!Od(e.next))break;e.advance()}else if(t.plsqlQuotingMechanism&&(i==113||i==81)&&e.next==39&&e.peek(1)>0&&!Ui(e.peek(1),td)){let n=e.peek(1);e.advance(2),Lz(e,n),e.acceptToken(Rn)}else if(Ui(i,t.identifierQuotes)){let n=i==91?93:i;Vi(e,n,!1),e.acceptToken(jz)}else if(i==40)e.acceptToken(Tz);else if(i==41)e.acceptToken(vz);else if(i==123)e.acceptToken(_z);else if(i==125)e.acceptToken(Zz);else if(i==91)e.acceptToken(Rz);else if(i==93)e.acceptToken(Yz);else if(i==59)e.acceptToken(zz);else if(t.unquotedBitLiterals&&i==48&&e.next==98)e.advance(),ub(e),e.acceptToken(fb);else if((i==98||i==66)&&(e.next==39||e.next==34)){let n=e.next;e.advance(),t.treatBitsAsBytes?(Vi(e,n,t.backslashEscapes),e.acceptToken(Gz)):(ub(e,n),e.acceptToken(fb))}else if(i==48&&(e.next==120||e.next==88)||(i==120||i==88)&&e.next==39){let n=e.next==39;for(e.advance();Ez(e.next);)e.advance();n&&e.next==39&&e.advance(),e.acceptToken(ed)}else if(i==46&&e.next>=48&&e.next<=57)db(e,!0),e.acceptToken(ed);else if(i==46)e.acceptToken(qz);else if(i>=48&&i<=57)db(e,!1),e.acceptToken(ed);else if(Ui(i,t.operatorChars)){for(;Ui(e.next,t.operatorChars);)e.advance();e.acceptToken(Uz)}else if(Ui(i,t.specialVar))e.next==i&&e.advance(),Iz(e),e.acceptToken(Wz);else if(i==58||i==44)e.acceptToken(Vz);else if(Od(i)){let n=id(e,String.fromCharCode(i));e.acceptToken(e.next==46||e.peek(-n.length-1)==46?hb:(O=t.words[n.toLowerCase()])!==null&&O!==void 0?O:hb)}})}var bb=Xb(nd),Dz=de.deserialize({version:14,states:"%vQ]QQOOO#wQRO'#DSO$OQQO'#CwO%eQQO'#CxO%lQQO'#CyO%sQQO'#CzOOQQ'#DS'#DSOOQQ'#C}'#C}O'UQRO'#C{OOQQ'#Cv'#CvOOQQ'#C|'#C|Q]QQOOQOQQOOO'`QQO'#DOO(xQRO,59cO)PQQO,59cO)UQQO'#DSOOQQ,59d,59dO)cQQO,59dOOQQ,59e,59eO)jQQO,59eOOQQ,59f,59fO)qQQO,59fOOQQ-E6{-E6{OOQQ,59b,59bOOQQ-E6z-E6zOOQQ,59j,59jOOQQ-E6|-E6|O+VQRO1G.}O+^QQO,59cOOQQ1G/O1G/OOOQQ1G/P1G/POOQQ1G/Q1G/QP+kQQO'#C}O+rQQO1G.}O)PQQO,59cO,PQQO'#Cw",stateData:",[~OtOSPOSQOS~ORUOSUOTUOUUOVROXSOZTO]XO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O^]ORvXSvXTvXUvXVvXXvXZvX]vX_vX`vXavXbvXcvXdvXevXfvXgvXhvX~OsvX~P!jOa_Ob_Oc_O~ORUOSUOTUOUUOVROXSOZTO^tO_UO`UOa`Ob`Oc`OdUOeUOfUOgUOhUO~OWaO~P$ZOYcO~P$ZO[eO~P$ZORUOSUOTUOUUOVROXSOZTO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O]hOsoX~P%zOajObjOcjO~O^]ORkaSkaTkaUkaVkaXkaZka]ka_ka`kaakabkackadkaekafkagkahka~Oska~P'kO^]O~OWvXYvX[vX~P!jOWnO~P$ZOYoO~P$ZO[pO~P$ZO^]ORkiSkiTkiUkiVkiXkiZki]ki_ki`kiakibkickidkiekifkigkihki~Oski~P)xOWkaYka[ka~P'kO]hO~P$ZOWkiYki[ki~P)xOasObsOcsO~O",goto:"#hwPPPPPPPPPPPPPPPPPPPPPPPPPPx||||!Y!^!d!xPPP#[TYOZeUORSTWZbdfqT[OZQZORiZSWOZQbRQdSQfTZgWbdfqQ^PWk^lmrQl_Qm`RrseVORSTWZbdfq",nodeNames:"\u26A0 LineComment BlockComment String Number Bool Null ( ) { } [ ] ; . Operator Punctuation SpecialVar Identifier QuotedIdentifier Keyword Type Bits Bytes Builtin Script Statement CompositeIdentifier Parens Braces Brackets Statement",maxTerm:38,nodeProps:[["isolate",-4,1,2,3,19,""]],skippedNodes:[0,1,2],repeatNodeCount:3,tokenData:"RORO",tokenizers:[0,bb],topRules:{Script:[0,25]},tokenPrec:0});function rd(t){let e=t.cursor().moveTo(t.from,-1);for(;/Comment/.test(e.name);)e.moveTo(e.from,-1);return e.node}function ea(t,e){let O=t.sliceString(e.from,e.to),i=/^([`'"\[])(.*)([`'"\]])$/.exec(O);return i?i[2]:O}function ws(t){return t&&(t.name=="Identifier"||t.name=="QuotedIdentifier")}function Nz(t,e){if(e.name=="CompositeIdentifier"){let O=[];for(let i=e.firstChild;i;i=i.nextSibling)ws(i)&&O.push(ea(t,i));return O}return[ea(t,e)]}function $b(t,e){for(let O=[];;){if(!e||e.name!=".")return O;let i=rd(e);if(!ws(i))return O;O.unshift(ea(t,i)),e=rd(i)}}function Bz(t,e){let O=N(t).resolveInner(e,-1),i=Hz(t.doc,O);return O.name=="Identifier"||O.name=="QuotedIdentifier"||O.name=="Keyword"?{from:O.from,quoted:O.name=="QuotedIdentifier"?t.doc.sliceString(O.from,O.from+1):null,parents:$b(t.doc,rd(O)),aliases:i}:O.name=="."?{from:e,quoted:null,parents:$b(t.doc,O),aliases:i}:{from:e,quoted:null,parents:[],empty:!0,aliases:i}}var Fz=new Set("where group having order union intersect except all distinct limit offset fetch for".split(" "));function Hz(t,e){let O;for(let n=e;!O;n=n.parent){if(!n)return null;n.name=="Statement"&&(O=n)}let i=null;for(let n=O.firstChild,r=!1,a=null;n;n=n.nextSibling){let o=n.name=="Keyword"?t.sliceString(n.from,n.to).toLowerCase():null,s=null;if(!r)r=o=="from";else if(o=="as"&&a&&ws(n.nextSibling))s=ea(t,n.nextSibling);else{if(o&&Fz.has(o))break;a&&ws(n)&&(s=ea(t,n))}s&&(i||(i=Object.create(null)),i[s]=Nz(t,a)),a=/Identifier$/.test(n.name)?n:null}return i}function Kz(t,e,O){return O.map(i=>({...i,label:i.label[0]==t?i.label:t+i.label+e,apply:void 0}))}var Jz=/^\w*$/,eq=/^[`'"\[]?\w*[`'"\]]?$/;function pb(t){return t.self&&typeof t.self.label=="string"}var ad=class t{constructor(e,O){this.idQuote=e,this.idCaseInsensitive=O,this.list=[],this.children=void 0}child(e){let O=this.children||(this.children=Object.create(null)),i=O[e];return i||(e&&!this.list.some(n=>n.label==e)&&this.list.push(mb(e,"type",this.idQuote,this.idCaseInsensitive)),O[e]=new t(this.idQuote,this.idCaseInsensitive))}maybeChild(e){return this.children?this.children[e]:null}addCompletion(e){let O=this.list.findIndex(i=>i.label==e.label);O>-1?this.list[O]=e:this.list.push(e)}addCompletions(e){for(let O of e)this.addCompletion(typeof O=="string"?mb(O,"property",this.idQuote,this.idCaseInsensitive):O)}addNamespace(e){Array.isArray(e)?this.addCompletions(e):pb(e)?this.addNamespace(e.children):this.addNamespaceObject(e)}addNamespaceObject(e){for(let O of Object.keys(e)){let i=e[O],n=null,r=O.replace(/\\?\./g,o=>o=="."?"\0":o).split("\0"),a=this;pb(i)&&(n=i.self,i=i.children);for(let o=0;o{let{parents:h,from:f,quoted:d,empty:Q,aliases:$}=Bz(c.state,c.pos);if(Q&&!c.explicit)return null;$&&h.length==1&&(h=$[h[0]]||h);let p=s;for(let P of h){for(;!p.children||!p.children[P];)if(p==s&&l)p=l;else if(p==l&&i)p=p.child(i);else return null;let S=p.maybeChild(P);if(!S)return null;p=S}let m=p.list;if(p==s&&$&&(m=m.concat(Object.keys($).map(P=>({label:P,type:"constant"})))),d){let P=d[0],S=xb(P),y=c.state.sliceDoc(c.pos,c.pos+1)==S;return{from:f,to:y?c.pos+1:void 0,options:Kz(P,S,m),validFor:eq}}else return{from:f,options:m,validFor:Jz}}}function Oq(t){return t==Pb?"type":t==gb?"keyword":"variable"}function iq(t,e,O){let i=Object.keys(t).map(n=>O(e?n.toUpperCase():n,Oq(t[n])));return dO(["QuotedIdentifier","String","LineComment","BlockComment","."],Ft(i))}var nq=Dz.configure({props:[se.add({Statement:ue()}),le.add({Statement(t,e){return{from:Math.min(t.from+100,e.doc.lineAt(t.from).to),to:t.to}},BlockComment(t){return{from:t.from+2,to:t.to-2}}}),re({Keyword:u.keyword,Type:u.typeName,Builtin:u.standard(u.name),Bits:u.number,Bytes:u.string,Bool:u.bool,Null:u.null,Number:u.number,String:u.string,Identifier:u.name,QuotedIdentifier:u.special(u.string),SpecialVar:u.special(u.name),LineComment:u.lineComment,BlockComment:u.blockComment,Operator:u.operator,"Semi Punctuation":u.punctuation,"( )":u.paren,"{ }":u.brace,"[ ]":u.squareBracket})]}),Ht=class t{constructor(e,O,i){this.dialect=e,this.language=O,this.spec=i}get extension(){return this.language.extension}configureLanguage(e,O){return new t(this.dialect,this.language.configure(e,O),this.spec)}static define(e){let O=Mz(e,e.keywords,e.types,e.builtin),i=fe.define({name:"sql",parser:nq.configure({tokenizers:[{from:bb,to:Xb(O)}]}),languageData:{commentTokens:{line:"--",block:{open:"/*",close:"*/"}},closeBrackets:{brackets:["(","[","{","'",'"',"`"]}}});return new t(O,i,e)}};function rq(t,e){return{label:t,type:e,boost:-1}}function aq(t,e=!1,O){return iq(t.dialect.words,e,O||rq)}function oq(t){return t.schema?tq(t.schema,t.tables,t.schemas,t.defaultTable,t.defaultSchema,t.dialect||od):()=>null}function sq(t){return t.schema?(t.dialect||od).language.data.of({autocomplete:oq(t)}):[]}function kb(t={}){let e=t.dialect||od;return new oe(e.language,[sq(t),e.language.data.of({autocomplete:aq(e,t.upperCaseKeywords,t.keywordCompletion)})])}var od=Ht.define({}),WG=Ht.define({charSetCasts:!0,doubleDollarQuotedStrings:!0,operatorChars:"+-*/<>=~!@#%^&|`?",specialVar:"",keywords:ji+"abort abs absent access according ada admin aggregate alias also always analyse analyze array_agg array_max_cardinality asensitive assert assignment asymmetric atomic attach attribute attributes avg backward base64 begin_frame begin_partition bernoulli bit_length blocked bom cache called cardinality catalog_name ceil ceiling chain char_length character_length character_set_catalog character_set_name character_set_schema characteristics characters checkpoint class class_origin cluster coalesce cobol collation_catalog collation_name collation_schema collect column_name columns command_function command_function_code comment comments committed concurrently condition_number configuration conflict connection_name constant constraint_catalog constraint_name constraint_schema contains content control conversion convert copy corr cost covar_pop covar_samp csv cume_dist current_catalog current_row current_schema cursor_name database datalink datatype datetime_interval_code datetime_interval_precision db debug defaults defined definer degree delimiter delimiters dense_rank depends derived detach detail dictionary disable discard dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue document dump dynamic_function dynamic_function_code element elsif empty enable encoding encrypted end_frame end_partition endexec enforced enum errcode error event every exclude excluding exclusive exp explain expression extension extract family file filter final first_value flag floor following force foreach fortran forward frame_row freeze fs functions fusion generated granted greatest groups handler header hex hierarchy hint id ignore ilike immediately immutable implementation implicit import include including increment indent index indexes info inherit inherits inline insensitive instance instantiable instead integrity intersection invoker isnull key_member key_type label lag last_value lead leakproof least length library like_regex link listen ln load location lock locked log logged lower mapping matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text min minvalue mod mode more move multiset mumps name namespace nfc nfd nfkc nfkd nil normalize normalized nothing notice notify notnull nowait nth_value ntile nullable nullif nulls number occurrences_regex octet_length octets off offset oids operator options ordering others over overlay overriding owned owner parallel parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partition pascal passing passthrough password percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding prepared print_strict_params procedural procedures program publication query quote raise range rank reassign recheck recovery refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex rename repeatable replace replica requiring reset respect restart restore result_oid returned_cardinality returned_length returned_octet_length returned_sqlstate returning reverse routine_catalog routine_name routine_schema routines row_count row_number rowtype rule scale schema_name schemas scope scope_catalog scope_name scope_schema security selective self sensitive sequence sequences serializable server server_name setof share show simple skip slice snapshot source specific_name sqlcode sqlerror sqrt stable stacked standalone statement statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time table_name tables tablesample tablespace temp template ties token top_level_count transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex trigger_catalog trigger_name trigger_schema trim trim_array truncate trusted type types uescape unbounded uncommitted unencrypted unlink unlisten unlogged unnamed untyped upper uri use_column use_variable user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema vacuum valid validate validator value_of var_pop var_samp varbinary variable_conflict variadic verbose version versioning views volatile warning whitespace width_bucket window within wrapper xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate yes",types:Wi+"bigint int8 bigserial serial8 varbit bool box bytea cidr circle precision float8 inet int4 json jsonb line lseg macaddr macaddr8 money numeric pg_lsn point polygon float4 int2 smallserial serial2 serial serial4 text timetz timestamptz tsquery tsvector txid_snapshot uuid xml"}),yb="accessible algorithm analyze asensitive authors auto_increment autocommit avg avg_row_length binlog btree cache catalog_name chain change changed checkpoint checksum class_origin client_statistics coalesce code collations columns comment committed completion concurrent consistent contains contributors convert database databases day_hour day_microsecond day_minute day_second delay_key_write delayed delimiter des_key_file dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile enable enclosed ends engine engines enum errors escaped even event events every explain extended fast field fields flush force found_rows fulltext grants handler hash high_priority hosts hour_microsecond hour_minute hour_second ignore ignore_server_ids import index index_statistics infile innodb insensitive insert_method install invoker iterate keys kill linear lines list load lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modify mutex mysql_errno no_write_to_binlog offline offset one online optimize optionally outfile pack_keys parser partition partitions password phase plugin plugins prev processlist profile profiles purge query quick range read_write rebuild recover regexp relaylog remove rename reorganize repair repeatable replace require resume rlike row_format rtree schedule schema_name schemas second_microsecond security sensitive separator serializable server share show slave slow snapshot soname spatial sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result ssl starting starts std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace terminated triggers truncate uncommitted uninstall unlock upgrade use use_frm user_resources user_statistics utc_date utc_time utc_timestamp variables views warnings xa xor year_month zerofill",wb=Wi+"bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int1 int2 int3 int4 int8 float4 float8 varbinary varcharacter precision datetime unsigned signed",Tb="charset clear edit ego help nopager notee nowarning pager print prompt quit rehash source status system tee",jG=Ht.define({operatorChars:"*+-%<>!=&|^",charSetCasts:!0,doubleQuotedStrings:!0,unquotedBitLiterals:!0,hashComments:!0,spaceAfterDashes:!0,specialVar:"@?",identifierQuotes:"`",keywords:ji+"group_concat "+yb,types:wb,builtin:Tb}),GG=Ht.define({operatorChars:"*+-%<>!=&|^",charSetCasts:!0,doubleQuotedStrings:!0,unquotedBitLiterals:!0,hashComments:!0,spaceAfterDashes:!0,specialVar:"@?",identifierQuotes:"`",keywords:ji+"always generated groupby_concat hard persistent shutdown soft virtual "+yb,types:wb,builtin:Tb}),lq="approx_count_distinct approx_percentile_cont approx_percentile_disc avg checksum_agg count count_big grouping grouping_id max min product stdev stdevp sum var varp ai_generate_embeddings ai_generate_chunks cume_dist first_value lag last_value lead percentile_cont percentile_disc percent_rank left_shift right_shift bit_count get_bit set_bit collationproperty tertiary_weights @@datefirst @@dbts @@langid @@language @@lock_timeout @@max_connections @@max_precision @@nestlevel @@options @@remserver @@servername @@servicename @@spid @@textsize @@version cast convert parse try_cast try_convert try_parse asymkey_id asymkeyproperty certproperty cert_id crypt_gen_random decryptbyasymkey decryptbycert decryptbykey decryptbykeyautoasymkey decryptbykeyautocert decryptbypassphrase encryptbyasymkey encryptbycert encryptbykey encryptbypassphrase hashbytes is_objectsigned key_guid key_id key_name signbyasymkey signbycert symkeyproperty verifysignedbycert verifysignedbyasymkey @@cursor_rows @@fetch_status cursor_status datalength ident_current ident_incr ident_seed identity sql_variant_property @@datefirst current_timestamp current_timezone current_timezone_id date_bucket dateadd datediff datediff_big datefromparts datename datepart datetime2fromparts datetimefromparts datetimeoffsetfromparts datetrunc day eomonth getdate getutcdate isdate month smalldatetimefromparts switchoffset sysdatetime sysdatetimeoffset sysutcdatetime timefromparts todatetimeoffset year edit_distance edit_distance_similarity jaro_winkler_distance jaro_winkler_similarity edge_id_from_parts graph_id_from_edge_id graph_id_from_node_id node_id_from_parts object_id_from_edge_id object_id_from_node_id json isjson json_array json_contains json_modify json_object json_path_exists json_query json_value regexp_like regexp_replace regexp_substr regexp_instr regexp_count regexp_matches regexp_split_to_table abs acos asin atan atn2 ceiling cos cot degrees exp floor log log10 pi power radians rand round sign sin sqrt square tan choose greatest iif least @@procid app_name applock_mode applock_test assemblyproperty col_length col_name columnproperty databasepropertyex db_id db_name file_id file_idex file_name filegroup_id filegroup_name filegroupproperty fileproperty filepropertyex fulltextcatalogproperty fulltextserviceproperty index_col indexkey_property indexproperty next value for object_definition object_id object_name object_schema_name objectproperty objectpropertyex original_db_name parsename schema_id schema_name scope_identity serverproperty stats_date type_id type_name typeproperty dense_rank ntile rank row_number publishingservername certenclosed certprivatekey current_user database_principal_id has_dbaccess has_perms_by_name is_member is_rolemember is_srvrolemember loginproperty original_login permissions pwdencrypt pwdcompare session_user sessionproperty suser_id suser_name suser_sid suser_sname system_user user user_id user_name ascii char charindex concat concat_ws difference format left len lower ltrim nchar patindex quotename replace replicate reverse right rtrim soundex space str string_agg string_escape stuff substring translate trim unicode upper $partition @@error @@identity @@pack_received @@rowcount @@trancount binary_checksum checksum compress connectionproperty context_info current_request_id current_transaction_id decompress error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big session_context xact_state @@connections @@cpu_busy @@idle @@io_busy @@pack_sent @@packet_errors @@timeticks @@total_errors @@total_read @@total_write textptr textvalid columns_updated eventdata trigger_nestlevel vector_distance vectorproperty vector_search generate_series opendatasource openjson openquery openrowset openxml predict string_split coalesce nullif apply catch filter force include keep keepfixed modify optimize parameterization parameters partition recompile sequence set",CG=Ht.define({keywords:ji+"add external procedure all fetch public alter file raiserror and fillfactor read any for readtext as foreign reconfigure asc freetext references authorization freetexttable replication backup from restore begin full restrict between function return break goto revert browse grant revoke bulk group right by having rollback cascade holdlock rowcount case identity rowguidcol check identity_insert rule checkpoint identitycol save close if schema clustered in securityaudit coalesce index select collate inner semantickeyphrasetable column insert semanticsimilaritydetailstable commit intersect semanticsimilaritytable compute into session_user constraint is set contains join setuser containstable key shutdown continue kill some convert left statistics create like system_user cross lineno table current load tablesample current_date merge textsize current_time national then current_timestamp nocheck to current_user nonclustered top cursor not tran database null transaction dbcc nullif trigger deallocate of truncate declare off try_convert default offsets tsequal delete on union deny open unique desc opendatasource unpivot disk openquery update distinct openrowset updatetext distributed openxml use double option user drop or values dump order varying else outer view end over waitfor errlvl percent when escape pivot where except plan while exec precision with execute primary within group exists print writetext exit proc noexpand index forceseek forcescan holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot spatial_window_max_cells tablock tablockx updlock xlock keepidentity keepdefaults ignore_constraints ignore_triggers",types:Wi+"smalldatetime datetimeoffset datetime2 datetime bigint smallint smallmoney tinyint money real text nvarchar ntext varbinary image hierarchyid uniqueidentifier sql_variant xml",builtin:lq,operatorChars:"*+-%<>!=^&|/",specialVar:"@",identifierQuotes:'"['}),EG=Ht.define({keywords:ji+"abort analyze attach autoincrement conflict database detach exclusive fail glob ignore index indexed instead isnull notnull offset plan pragma query raise regexp reindex rename replace temp vacuum virtual",types:Wi+"bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int2 int8 unsigned signed real",builtin:"auth backup bail changes clone databases dbinfo dump echo eqp explain fullschema headers help import imposter indexes iotrace lint load log mode nullvalue once print prompt quit restore save scanstats separator shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width",operatorChars:"*+-%<>!=&|/~",identifierQuotes:'`"',specialVar:"@:?$"}),AG=Ht.define({keywords:"add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime infinity NaN",types:Wi+"ascii bigint blob counter frozen inet list map static text timeuuid tuple uuid varint",slashComments:!0}),LG=Ht.define({keywords:ji+"abort accept access add all alter and any arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body by case cast char_base check close cluster clusters colauth column comment commit compress connected constant constraint crash create current currval cursor data_base database dba deallocate debugoff debugon declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry exception exception_init exchange exclusive exists external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base of off offline on online only option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw rebuild record ref references refresh rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work",builtin:"appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define echo editfile embedded feedback flagger flush heading headsep instance linesize lno loboffset logsource longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar repfooter repheader serveroutput shiftinout show showmode spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout timing trimout trimspool ttitle underline verify version wrap",types:Wi+"ascii bfile bfilename bigserial bit blob dec long number nvarchar nvarchar2 serial smallint string text uid varchar2 xml",operatorChars:"*/+-%<>!=~",doubleQuotedStrings:!0,charSetCasts:!0,plsqlQuotingMechanism:!0});var cq=1,hq=2,fq=3,uq=4,dq=5,vb=301,_b=98,Qq=101,$q=102,Zb=114,pq=69,Ts=48,Rb=46,mq=43,gq=45,Yb=35,zb=34,Pq=124,Sq=60,Xq=62,bq=61,qb=38;function sd(t){return t>=48&&t<=57}function vs(t){return sd(t)||t==95}var xq=new D((t,e)=>{if(sd(t.next)){let O=!1;do t.advance();while(vs(t.next));if(t.next==Rb){if(O=!0,t.advance(),sd(t.next))do t.advance();while(vs(t.next));else if(t.next==Rb||t.next>127||/\w/.test(String.fromCharCode(t.next)))return}if(t.next==Qq||t.next==pq){if(O=!0,t.advance(),(t.next==mq||t.next==gq)&&t.advance(),!vs(t.next))return;do t.advance();while(vs(t.next))}if(t.next==$q){let i=t.peek(1);if(i==Ts+3&&t.peek(2)==Ts+2||i==Ts+6&&t.peek(2)==Ts+4)t.advance(3),O=!0;else return}O&&t.acceptToken(dq)}else if(t.next==_b||t.next==Zb){if(t.next==_b&&t.advance(),t.next!=Zb)return;t.advance();let O=0;for(;t.next==Yb;)O++,t.advance();if(t.next!=zb)return;t.advance();e:for(;;){if(t.next<0)return;let i=t.next==zb;if(t.advance(),i){for(let n=0;n{t.next==Pq&&t.acceptToken(cq,1)}),yq=new D(t=>{t.next==Sq&&t.peek(1)!=bq?t.acceptToken(hq,1):t.next==Xq&&t.acceptToken(fq,1)}),wq=new D((t,e)=>{t.next==qb&&t.peek(1)==qb&&e.canShift(vb)&&t.acceptToken(vb,2)},{contextual:!0}),Tq=re({"const macro_rules struct union enum type fn impl trait let static":u.definitionKeyword,"mod use crate":u.moduleKeyword,"pub unsafe async mut extern default move":u.modifier,"for if else loop while match continue break return await":u.controlKeyword,"as in ref":u.operatorKeyword,"where _ crate super dyn":u.keyword,self:u.self,String:u.string,Char:u.character,RawString:u.special(u.string),Boolean:u.bool,Identifier:u.variableName,"CallExpression/Identifier":u.function(u.variableName),BoundIdentifier:u.definition(u.variableName),"FunctionItem/BoundIdentifier":u.function(u.definition(u.variableName)),LoopLabel:u.labelName,FieldIdentifier:u.propertyName,"CallExpression/FieldExpression/FieldIdentifier":u.function(u.propertyName),Lifetime:u.special(u.variableName),ScopeIdentifier:u.namespace,TypeIdentifier:u.typeName,"MacroInvocation/Identifier MacroInvocation/ScopedIdentifier/Identifier":u.macroName,"MacroInvocation/TypeIdentifier MacroInvocation/ScopedIdentifier/TypeIdentifier":u.macroName,'"!"':u.macroName,UpdateOp:u.updateOperator,"LineComment Shebang":u.lineComment,BlockComment:u.blockComment,Integer:u.integer,Float:u.float,ArithOp:u.arithmeticOperator,LogicOp:u.logicOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,"=":u.definitionOperator,".. ... => ->":u.punctuation,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace,". DerefOp":u.derefOperator,"&":u.operator,", ; ::":u.separator,"Attribute/...":u.meta}),vq={__proto__:null,self:26,super:30,crate:32,impl:44,true:76,false:76,pub:94,in:98,const:102,_:106,unsafe:114,try:120,async:124,move:126,if:130,let:136,ref:160,mut:162,else:222,match:226,raw:247,as:272,return:276,await:286,break:294,continue:298,while:334,loop:338,for:342,macro:349,macro_rules:353,mod:360,extern:368,safe:375,fn:376,where:400,static:410,struct:416,union:427,enum:430,type:438,default:443,trait:448,use:456,dyn:522},Ub=de.deserialize({version:14,states:"%#tQ%WQgOOP%_O`OOO'^QhO'#CmO)wQhO'#JOOOQX'#JO'#JOOOQO'#JT'#JTO*[OpO'#DPOOQZ'#JY'#JYOOQ_'#De'#DeO*gQ`O'#DdO*lQ`O'#JgOOQO'#IU'#IUO*qQ`O'#DyOOQZ'#Ji'#JiO*qQ`O'#DyO+SQ`O'#DyOOQO'#Jh'#JhO,{QhO'#KSO-SQ`O'#EtOOQV'#I['#I[O-XQgO'#GYOOQV'#Ew'#EwOOQV'#Ex'#ExOOQV'#Ey'#EyO0|QgO'#EvO3[QgO'#EzO5pQhOOO7ZQoO'#F]O:}QhO'#KSO;eQgO'#FiO=|QgO'#FlOOQW'#Fk'#FkOAxQgO'#FnOBSQgO'#FmODeQ`O'#FrOOQW'#KS'#KSOOQ_'#Jb'#JbOEnQoO'#JaOIkQhO'#JaOOQV'#GU'#GUOJvQ`O'#KiOK{Q`O'#GZOOQO'#Ik'#IkOLeQ`O'#HQOOQV'#J`'#J`OOQV'#J_'#J_OOQV'#IT'#ITQ-XQgOOOLlQgO'#DXOLvQbO'#CpOOQX'#I}'#I}ONWQbO'#CgOOQV'#IP'#IPQLoQgOOQLoQgOOQ]QgOOONrQhO'#JOO!!yQbO'#D[O!$qQ`O'#KiO!%dQ`O'#KiO!%kQ`O'#DiO!%pQaO'#KiO!%}QgO'#DnO!(mQ`O'#FWO!(rQoO'#FZO!,fQoO'#FdO!0YQhO'#FfO!2`QaO'#FmO!2eQgO'#EpO!%}QgO'#FxO!%kQ`O'#FzO!5QQfO'#F|O!5XQ`O'#GPO!5^Q`O'#GRO!5XQ`O'#GVO!6QQ`O'#K[O!6XQ`O'#GsO!6XQ`O'#GxO!6XQ`O'#GzO!6XQ`O'#HVOOQO'#Ki'#KiO!6^Q`O'#HQO!7sQbO'#HSO!6XQ`O'#HTO!7zQfO'#HWO!8RQ`O'#HXO!8mQ`O'#HbP!8xO!bO'#CcPOOO)CDl)CDlOOOO'#IS'#ISO!9TOpO,59kOOQ_,59k,59kO!9`Q`O,5:OO!9nQbO,5@ROOQO-EaQhO,5=}OOQV,5YQkO'#CsO#@xQ`O'#IQO#@}QbO'#HgO#ASQ`O'#HfO#AXQ`O'#HfO#A^Q`O'#HfO#AfQbO'#CqO#BSQ`O'#HsOOQZ'#Hy'#HyO#AfQbO'#HzO#CYQaO'#CmO#CgQaO'#JOO#DqQ`O'#CnO#DqQ`O'#CnO#ESQ`O'#CnO#EXQ`O'#ChO#EjQ`O,59RO#CgQaO'#JOO#EoQ`O'#ChOOQV-E;}-E;}O#EtQ`O,59vOOQ_,5:Q,5:QO#FSQ`O,5OOOQ_1G/_1G/_O%(TQ`O1G/_O%(YQgO1G/_O%(aQkO'#JTOOQO-EQO!:SQ`O,5>cO#9QQ`O,59bO#9QQ`O,59bO#QO%-xQ`O'#CvO#ASQ`O,5>QO%-}Q`O,5>QO%.SQ`O,5>QO%.[QkO,5>^O%0nQbO,5>^OLvQbO,5>^O%0xQ`O'#KvO%1TQ`O,5>`OOQZ,5>a,5>aO%1YQ`O,5>bOLvQbO,5>hO%1eQbO,5>hOOQO1G.v1G.vOLvQbO1G.vOOQO,5>l,5>lO%2XQbO,5>RO%3wQbO'#HkO%6_QkO'#JRO%6lQkO'#JRO#AfQbO'#HoO#AfQbO'#HqOOQZ'#JR'#JRO%6vQbO'#GoO%6{Q`O'#HpO%7QQ`O'#HpO#AfQbO'#HpOOQZ,59],59]OLvQbO,5>_OOQZ,5>f,5>fO#DqQ`O,59YO#DqQ`O,59YOOQ_'#Jr'#JrO0|QgO,59SOOQO,59S,59SOOQV1G.m1G.mO%7VQ`O1G/bO%7[QbO1G/bO$%uQbO1G3YO%7fQ`O1G3YO%7tQbO1G3YOLvQbO1G/aOOQ_1G/q1G/qO%8nQgO1G1sO%;PQhO1G1sOOQW1G1s1G1sOLvQbO1G1sO%;jQhO,5:[O%;rQgO'#IYO%>fQgO,5:[O%>mQ`O,5:]O%>uQoO1G/tO%DUQhO1G1jO%DoQfO'#ErOOQ_1G0v1G0vOOQ_1G2O1G2OO!2eQgO1G2SOOQP,5:t,5:tOOQV1G2V1G2VO%EPQ`O1G2VOOQQ'#Cm'#CmO%EUQ`O1G2XO%G^QbO'#GXOOQV1G2]1G2]O%GeQ`O'#CmO%GmQ`O1G3gO%GrQ`O1G3gO%GwQbO'#GaO%H]Q`O'#GuO%JUQbO'#GwO%J]QbO'#GkOOQV1G2y1G2yO%K`Q`O1G2yO%KeQ`O1G2yO%'PQ`O1G2yOOQV1G3O1G3OO%K`Q`O1G3OO$#YQ`O1G3OO%KmQ`O'#G|OOQV1G3Q1G3QO%LOQ`O1G3QO$#eQ`O1G3QO%LTQbO'#C|OLvQbO1G3UO%LtQ`O1G3]O%L|Q`O1G3]OOQV1G3]1G3]O%MSQ`O1G3]O%N{QfO'#GfO& VQ`O1G3WO$$RQ`O1G3WO& eQbO,5<{O& oQ`O,5<{O&!QQbO,5<{O&!tQbO,5<{O&#UQbO,5<{OOQQ,5<{,5<{O!5XQ`O'#GdO&#aQbO,5<{O&#iQ`O1G3YOOQV1G3Y1G3YO&#qQ`O1G3YOLvQbO1G3YOOQV1G3Z1G3ZO&#qQ`O1G3ZO$'bQ`O1G3ZO$'_Q`O1G3ZOOQV1G3^1G3^O0|QgO1G3^OLvQbO1G3^O&#vQ`O1G3^OOQO,5?W,5?WOOQO-EwO&-pQhO,5>wOOQO-ExOOQO-E<[-E<[OOQW7+'[7+'[O&.uQ`O7+'[OOQW7+'c7+'cOOQP1G0a1G0aO&.}QaO1G/}O#)PQ`O1G/}O&0RQaO1G0]O&0yQfO'#IVO&1ZQ`O,5@VOOQP1G0O1G0OO&1fQ`O1G0OO&1kQ`O'#DbOOQO'#D}'#D}O&1vQ`O'#D}O&1{Q`O'#JmOOQO'#Jl'#JlO&2TQ`O,5:hO&2YQ`O'#D}O&2_Q`O'#D}OOQP1G0[1G0[OOQP1G0^1G0^OOQP1G0c1G0cO&2gQaO1G1uO&2rQaO'#FpOOQP,5>y,5>yO!5QQfO'#FpOOQP-E<]-E<]OLvQbO1G1uOOQW7+'_7+'_OOQO,5<`,5<`O&3QQ`O,5SOLvQbO1G3lOOQZ1G3}1G3}OOQZ1G.|1G.|O#9QQ`O1G.|O&6yQkO1G3lO#ASQ`O1G3lO&9`Q`O1G3lO&9eQkO1G3xOLvQbO1G3xO&;wQbO'#IrO&VO&=kQ`O'#HyOOQZ,5>Z,5>ZO&=yQ`O,5>]O%GwQbO,5>ROLvQbO,5=ZO&>OQ`O,5>[O#AfQbO,5>[OOQZ,5>[,5>[O&>TQkO1G3yO#DqQ`O1G.tO&@gQhO1G.nOOQQ7+$|7+$|O&@nQ`O7+$|O&@sQ`O7+(tOOQV7+(t7+(tO&#qQ`O7+(tOLvQbO7+(tO$%uQbO7+(tO&@{Q`O7+(tO&AZQ`O7+${O&AfQhO7+'_OLvQbO7+'_O%!WQ`O7+'_OOQW-EtO!5QQfO'#DqOOQW,5>t,5>tO&BZQhO1G/vO!2eQgO1G/wO&BcQ`O7+%`O&BkQ`O'#EsO&BvQfO'#EsOOQU'#IZ'#IZO&BvQfO,5;^OOQ_,5;^,5;^O&CQQ`O,5;^O&CVQfO,5;^O&CgQhO7+'nO&FdQ$QO7+'sO&FkQ$QO7+'sO&FrQ$QO7+'sO&FyQbO'#GYOOQQ'#Ib'#IbO&HsQbO,5qOOQO-Ez,5>zOOQO-E<^-E<^O'/rQ`O1G2UOOQQ1G2U1G2UOOQV7+'}7+'}O!6^Q`O1G2dO'/wQ`O1G2vO$$OQbO1G2dO'0PQ`O1G2vO!5XQ`O1G2vO'0UQ`O<iOOQO<WO':_QbO'#IqO'8hQ`O,5AaOOQZ1G3q1G3qOOQZ1G3w1G3wO&IZQbO,5<{O':iQkO1G2uO#AfQbO1G3vOOQZ1G3v1G3vOOQQ<r,5>rOOQO-ERAN>RO0|QgOAN>RO(&PQ`OANBXOOQVANA{ANA{O&#qQ`OANA{O$'bQ`OANA{OOQVANAkANAkO(&UQ`OANAkOOQVANApANApOOQVANArANArOOQVANAvANAvO(&ZQ`OANAvO(&`Q`OANAvOLvQbOANAvO(&kQ`OANAxOOQVANBYANBYO0|QgOANBYO(&yQ`OANBYOLvQbOANBYO('UQ`O'#HjOOQO,5?[,5?[OOQO-EROOQWAN@eAN@eO!2eQgO1G/wO(*zQhO1G1}O(.^QnO1G0yO0|QgO1G0yOOQO,5;a,5;aO(.hQ`O1G0yP(.mQ`O'#E]P&BvQfO'#I[OOQ_7+&d7+&dO(.xQ`O7+&dO!:SQ`O,5{,5>{O(.}Q`OAN@yO(/SQ`OAN@yOOQ[-E<_-E<_OOQVAN@yAN@yO(/[Q`OAN@yO(/dQ`OAN@yOOQV7+'y7+'yOOQVANBXANBXO(/lQ`O1G6jO(/tQ`O1G2|OLvQbO1G2|O&ItQ`O,5?SOOQO,5?S,5?SOOQO-Em,5>mOOQQ-EcQ`O,5;_P(>hQ`O,5;_OOQ_<sQ`OG26eP'A]Q`O'#IaO(>xQ`O7+(hOOQO1G4n1G4nO(?TQ`O7+,WO(?]Q`O1G4oOLvQbO1G4oO'CfQ`O'#IfO(?hQ`O,5@|O(?yQhO7+(oO0|QgO7+(oOOQO1G4p1G4pOOQO7+(Y7+(YOOQO1G4k1G4kO(@TQ`O1G4kO(@cQ`O7+(XOOQO7+(X7+(XO(AVQdO<tO)ExQhO1G/vO(CoQgO1G/wO)FQQ$QO,5:{O)HsQhO7+%bO)H{QhO7+%cO(CoQgO1G/wO)IVQhO7+%cO)IaQ`O'#DyO)IfQ`O'#FWO!2`QaO'#FmO)IkQaO'#DkO)IvQhO,5;fO)JQQ`O,5;fO#FhQaO,5:VO)JYQhO'#DpO)J_QhO,5:[O)JgQgO,5:[O)JnQ`O,5:]O)JvQ`O,5:]O!5QQfO'#DqO!5QQfO'#Dq",stateData:")K_~O'kOSUOS'lPQ~OPpOQ!ROSVOTVOX!WO]RO^RO_RO`!YOc^Of!tOuVOvVOwVOz!QO|wO!P!ZO!QnO!T!]O!V!aO!Z![O!^!^O!`!_O!a!eO!c!`O!f!vO!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO$t!jO$v!kO$z!lO%O!mO%S!sO%e!xO%h!nO%m!oO%o!pO%s!qO%u!rO%x!uO%|!wO'p!TO'sQO'zWO(OUO(QeO(ckO(rbO(tfO~O'o!XO~P]O'l!yO~OcaXciXckXoaXziX!QaX!uaX!waX!{aX#OaX#RaX#ZaX#[aX#|aX'iaX'{aX(QaX(caX(daX(kaX(laX(maX(naX(oaX(paX(qaX(taX(uaX~O|aXYaX!naX!SaXyaX#caX#^aX~P%dOc'rXc'wXc(]Xo'rXz(]X|'rX!Q'rX!u'rX!w'rX!{'rX#O'rX#R'rX#Z'rX#['rX#|'rX'i'rX'{'rX(Q'rX(c'rX(d'rX(k'rX(l'rX(m'rX(n'rX(o'rX(p'rX(q'rX(t'rX(u'rXy'rX~OY'rX!n'rX!S'rX#c'rX#^'rX~P'wOt!{O'}!}O(P!{O~Oq#OO~Oc#PO~O]RO^RO_RO`RO'sQO~Oc#UO~Oc#WOo(vX|(vX!Q(vX!u(vX!w(vX!{(vX#O(vX#Z(vX#[(vX#|(vX'i(vX'{(vX(Q(vX(c(vX(d(vX(k(vX(l(vX(m(vX(n(vX(o(vX(p(vX(q(vX(t(vX(u(vXy(vX~O#R#VO~P+XO!w#XO~OPpOQ!ROSVOTVO]RO^RO_RO`!YOc^Of!tOuVOvVOwVOz!QO|wO!P!ZO!QnO!T!]O!V!aO!Z![O!^!^O!`!_O!a!eO!c!`O!f!vO!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO$t!jO$v!kO$z!lO%O!mO%S!sO%e!xO%h!nO%m!oO%o!pO%s!qO%u!rO%x!uO%|!wO'sQO'zWO(OUO(QeO(ckO(rbO(tfO~OPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(tfO~P*qOPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!s#eO!ukO!wmO!{iO#OkO#RgO#e!fO#o#fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(tfO~P*qOo#yO!Q#{O!u#zO!w$OO!{#kO#O#zO#Z#yO#[#vO#|$PO'i#nO'{#hO(Q#hO(c#zO(d#mO(k#iO(l#iO(m#jO(n#jO(o#lO(p#oO(q#}O(t#iO(u#gO~OPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUOo$PX|$PX!Q$PX!u$PX!w$PX!{$PX#O$PX#Z$PX#[$PX#|$PX'i$PX'{$PX(Q$PX(c$PX(d$PX(k$PX(l$PX(m$PX(n$PX(o$PX(p$PX(q$PX(t$PX(u$PXY$PX!n$PX!S$PXy$PX#c$PX#^$PX~P*qOY(vX!n(vX!S(vXz(vX#c(vX#^(vX~P+XOPpOQ!ROSVOTVOY$TOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'p!TO'zWO(OUO(QeO(ckO(rbO(tfO~P*qOPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!S$YO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'p!TO'zWO(OUO(QeO(ckO(tfO~P*qOQ!ROSVOTVO]$tO^$[O_>qO`>qOc$bOuVOvVOwVO!Q$fO!V$pO!r$uO!u$kO!w$hO!{$iO's$ZO(OUO(Q$]O(c$lO(d$mO~O!s$vOP(yP~P@bOPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#]$yO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(tfO~P*qOc$|Oz$zO~Oo(TX#Z(TX#[(TX#|(TX'i(TX'{(TX(d(TX(k(TX(l(TX(m(TX(n(TX(o(TX(p(TX(q(TX(u(TX~OP&VXQ&VXS&VXT&VX]&VX^&VX_&VX`&VXc&VXf&VXu&VXv&VXw&VXz&VX|&VX!P&VX!Q&VX!T&VX!V&VX!Z&VX!^&VX!`&VX!a&VX!c&VX!f&VX!u&VX!w&VX!{&VX#O&VX#R&VX#e&VX$O&VX$X&VX$Z&VX$m&VX$o&VX$q&VX$t&VX$v&VX$z&VX%O&VX%S&VX%e&VX%h&VX%m&VX%o&VX%s&VX%u&VX%x&VX%|&VX'h&VX's&VX'z&VX(O&VX(Q&VX(c&VX(r&VX(t&VXy&VX~PDmO|$}O!Q(TX!u(TX!w(TX!{(TX#O(TX(Q(TX(c(TX(t(TXy(TX~PDmOz%OO!T)]X!Z)]X!`)]X%O)]X%S)]X%u)]X~O|%PO~PJ_O!T%SO!`!rO$t%TO$z%UO%O%VO%S%]O%e%`O%h%XO%m%YO%o%ZO%s%[O%u!rO%x%^O%|%_O~O!Z%WO~PJ}O!T!rO!Z!rO!`!rO%O%bO%u!rO~O%S%]O~PLSOy%gO'p!TO~P-XOQ!RO]%|O^%jO_TO`TOc%oOf&SO!Q%vO!V&UO!Z&RO!w%wO!{%uO#R%xO$q&OO%O%bO%S&PO&o&VO's%kO'z%mO(t&TO~OQ!RO]&XO^&XO_&XO`&_Oc&ZO!Z&`O's&WO~O!T!OX!Z!OX!`!OX$t!OX$z!OX%O!OX%S!OX%e!OX%h!OX%m!OX%o!OX%s!OX%u!OX%x!OX%|!OX~P'wO!T!OX!Z!OX!`!OX$t!OX$z!OX%O!OX%S!OX%e!OX%h!OX%m!OX%o!OX%s!OX%u!OX%x!OX%|!OX%R!OX~O!Q&bO's!OXQ!OX]!OX^!OX_!OX`!OXc!OXf!OX!V!OX!w!OX!{!OX#R!OX$q!OX&o!OX'z!OX(t!OX~P! uOf&eO%O%bO%x%^O!T)]X!Z)]X!`)]X%O)]X%S)]X%u)]X~Oz!QO~P!$SO!V&hO's&fO!T)]X!Z)]X!`)]X%O)]X%S)]X%u)]X~Oz!QO~P!$xOz!QO~OPpOz!QO!a&kO~PJbOPpOQ!ROSVOTVO]>iO^>iO_>iO`>iOc>lOuVOvVOwVOz!QO!QnO!T#bO!V?wO!Z#aO!^!^O!`?yO!a?xO!c!`O!f&pO!u>oO!wmO!{>nO#O>oO#RgO#e!fO$O>rO$X>sO$Z!dO$m!gO$o!hO$q!iO's>gO'zWO(OUO(QeO(c>oO(tfO~Oo#yO~OPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(tfOo#}X|#}X#Z#}X#[#}X#|#}X'i#}X'{#}X(d#}X(k#}X(l#}X(m#}X(n#}X(o#}X(p#}X(q#}X(u#}XY#}X!n#}X!S#}Xy#}X#c#}X#^#}X~P*qOPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(tfOo$WX|$WX#Z$WX#[$WX#|$WX'i$WX'{$WX(d$WX(k$WX(l$WX(m$WX(n$WX(o$WX(p$WX(q$WX(u$WXY$WX!n$WX!S$WXy$WX#c$WX#^$WX~P*qO'zWOo$YX|$YX!Q$YX!u$YX!w$YX!{$YX#O$YX#Z$YX#[$YX#|$YX'i$YX'{$YX(Q$YX(c$YX(d$YX(k$YX(l$YX(m$YX(n$YX(o$YX(p$YX(q$YX(t$YX(u$YXY$YX!n$YX!S$YXy$YXz$YX#c$YX#^$YX~OPpO~OPpOQ!ROSVOTVO]>iO^>iO_>iO`>iOc>lOuVOvVOwVOz!QO!QnO!T#bO!V?wO!Z#aO!^!^O!`?yO!a?xO!c!`O!u>oO!wmO!{>nO#O>oO#RgO#e!fO$O>rO$X>sO$Z!dO$m!gO$o!hO$q!iO's>gO'zWO(OUO(QeO(c>oO(tfO~O!s&zO~P@bO's&fO~O#R&|O~O(OUOz)OX|)OX!T)OX!Z)OX!`)OX%O)OX%S)OX%u)OX~O`'PO~P!5cO's'QO~O^'VO's&fO~OQ'XO]%|O^%jO_TO`TOc%oOf&SO!Q%vO!V&UO!Z&RO!w%wO!{%uO$q&OO%O%bO%S&PO&o&VO's%kO'z%mO(t&TO~O#R'YO~P!6fO!s'_O~P@bO]'aO^'aO_'aO`'aOc'iOz'fO's'`O(t'gO~O!r'nO!s'mO's&fO~O'l!yO'm'oO'n'qO~Ot!{O'}'sO(P!{O~Oz!QO$m'uO$o'vO$q'wO~OQ'yO](Za^(Za_(Za`(Za's(Za~Oz(QO!Q(OO!w(PO~OQ'yO~OP&VaQ&VaS&VaT&Va]&Va^&Va_&Va`&Vac&Vaf&Vau&Vav&Vaw&Vaz&Va|&Va!P&Va!Q&Va!T&Va!V&Va!Z&Va!^&Va!`&Va!a&Va!c&Va!f&Va!u&Va!w&Va!{&Va#O&Va#R&Va#e&Va$O&Va$X&Va$Z&Va$m&Va$o&Va$q&Va$t&Va$v&Va$z&Va%O&Va%S&Va%e&Va%h&Va%m&Va%o&Va%s&Va%u&Va%x&Va%|&Va'h&Va's&Va'z&Va(O&Va(Q&Va(c&Va(r&Va(t&Vay&Va~PDmO|(WO!Q(TX!u(TX!w(TX!{(TX#O(TX(Q(TX(c(TX(t(TXy(TX~PDmO#R(XOY(vX!n(vX!S(vXz(vX#c(vX#^(vX~P+XO!Q#{O!w$OO(q#}O(u#gOo#ja|#ja!u#ja!{#ja#O#ja#Z#ja#[#ja#|#ja'i#ja'{#ja(Q#ja(c#ja(d#ja(k#ja(l#ja(m#ja(n#ja(o#ja(p#ja(t#jaY#ja!n#ja!S#jay#jaz#ja#c#ja#^#ja~OPpOz!QO!a&kO~O|#naY#na!n#na!S#nay#na#c#na#^#na~P5pO!T(ZO!s(ZO~OPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUOo$Pa|$Pa!Q$Pa!u$Pa!w$Pa!{$Pa#O$Pa#Z$Pa#[$Pa#|$Pa'i$Pa'{$Pa(Q$Pa(c$Pa(d$Pa(k$Pa(l$Pa(m$Pa(n$Pa(o$Pa(p$Pa(q$Pa(t$Pa(u$PaY$Pa!n$Pa!S$Pay$Pa#c$Pa#^$Pa~P*qOPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(rbO(tfO!S(wP~P*qOw(lO$T(mO's(kO~O!Q#{O!w$OO!{#kO'i#nO'{#hO(Q#hO(d#mO(k#iO(l#iO(m#jO(n#jO(o#lO(p#oO(q#}O(t#iO(u#gO!u$Pa#O$Pa#|$Pa(c$Pa~Oo#yO#Z#yO#[#vO|$PaY$Pa!n$Pa!S$Pay$Pa#c$Pa#^$Pa~P!ISOPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(rbO(tfO~P*qO|(sO!n(qOY(xX~P5pOY(tO~OPpOQ!ROSVOTVOY(tOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'p!TO'zWO(OUO(QeO(ckO(rbO(tfO~P*qO!S(zO!n(xO~P5pOPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'p!TO'zWO(OUO(QeO(ckO(tfO~P*qOckXziX!QiX!uaX#OaX#RaX(caX~OP!UXq!UX!n!UX(b!UX(d!UX!R!UXo!UX|!UX!S!UXY!UX!c!UX#^!UXy!UX~P#%POc'wXz(]X!Q(]X!u'rX#O'rX#R'rX(c'rX~OP!iXq!iX!n!iX(d!iX!R!iXo!iX|!iX!S!iXY!iX!c!iX#^!iXy!iX~P#&eOT(|Ow(|O~O!u(}O#O(}O(c(}OP!gXq!gX!n!gX(d!gX!R!gXo!gX|!gX!S!gXY!gX!c!gX#^!gXy!gX~O]>jO^>jO_>qO`>qO's>hO~Oc)QO~O(b)ROP(YXq(YX!n(YX(d(YX!R(YXo(YX|(YX!S(YXY(YX!c(YX#^(YXy(YX~O!s&zO!S(^P~P@bOz)WO!Q)VO~O!s&zOY(^P~P@bO!s)[O~P@bO!u(}O#O(}O#R(XO(c(}O~OQ!ROSVOTVO]&XO^&XO_&XO`&_Oc&ZOuVOvVOwVO's&WO(OUO(Q$]O~OP(WXq(WX!n(WX(d(WX!R(WXo(WX|(WX!S(WXY(WX!c(WX#^(WXy(WX~P#+eOq)`O(d)_OP$cX!n$cX~O!n)aOP(zX~OP)cO~OP!jXq!jX!n!jX(d!jX!R!jXo!jX|!jX!S!jXY!jX!c!jX#^!jXy!jX~P#&eO|$aaY$aa!n$aa!S$aay$aa#c$aa#^$aa~P5pOw)jO!u)kO's)gO(rbOy({P~OQ!RO]&XO^&XO_&XO`)xOc&ZOf!tO|wO!P!ZO!T)yO!Z){O!`!rO!f!vO$t!jO$v!kO$z!lO%O!mO%R)zO%S!sO%e!xO%h!nO%m!oO%o!pO%s!qO%u!rO%x!uO%|!wO'p!TO's&WO(rbO~Oy)uO~P#/nO|)|O~PJ_O%S)}O~PLSO!V*OO's&fO~PJbO`*RO~P!5cO%O%bO%x*TO~PJbO!r*_O!s*^O's&fO~Oy&WX~P5pOy*aO~P-XOy*aO~Oy*aO'p!TO~P-XOQhXchXc'wX!QhX#RhX#|hX'{hX~ORhXzhX$qhX%`hXohX|hX!uhX!whX!{hX#OhX#ZhX#[hX'ihX(QhX(chX(dhX(khX(lhX(mhX(nhX(ohX(phX(qhX(thX(uhX!ShX!nhXYhXPhXyhXqhX#chX#^hX~P#3jOQiXciXckX!QiX#RiX'{iX!SiX!niX~ORiX#|iXziX$qiX%`iXoiX|iX!uiX!wiX!{iX#OiX#ZiX#[iX'iiX(QiX(ciX(diX(kiX(liX(miX(niX(oiX(piX(qiX(tiX(uiXYiXqiXPiXyiX#ciX#^iX~P#6^O]*dO^*dO_*dO`*dO's%kO~OR'tX#|'tX'{'tXz'tX$q'tX%`'tXo'tX|'tX!u'tX!w'tX!{'tX#O'tX#Z'tX#['tX'i'tX(Q'tX(c'tX(d'tX(k'tX(l'tX(m'tX(n'tX(o'tX(p'tX(q'tX(t'tX(u'tX!S'tX!n'tXY'tXP'tXy'tXq'tX#c'tX#^'tX~OQ'yOc*hO!Q*iO#R*kO~P#9cOc*mO~Oc*nO!Q'tX~P#9cO]]O^]O_]O`]O's'QO~OQ!RO]%|O^%jO_TO`TOc%oO%O%bO's%kO~O!Z*sO%S*qO~P#}O#|$PO'{#hO(Q#hO(c?RO(d#mO(k#iO(l#iO(m#jO(n#jO(o#lO(p#oO(q#}O(t#iO(u#gO~O'i+sOz(VX~P#IWO|#}aY#}a!n#}a!S#}ay#}a#c#}a#^#}a~P5pOPpOQ!ROSVOTVOc^Oq#OOuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(tfOo$Wa|$Wa#Z$Wa#[$Wa#|$Wa'i$Wa'{$Wa(d$Wa(k$Wa(l$Wa(m$Wa(n$Wa(o$Wa(p$Wa(q$Wa(u$WaY$Wa!n$Wa!S$Way$Wa#c$Wa#^$Wa~P*qO|$WaY$Wa!n$Wa!S$Way$Wa#c$Wa#^$Wa~P5pOz+wO'i#nO~P#IWO!R+zO(d)_O~Oz(QO!Q(OO~O's,OO~Oz,QO|,RO~O],UO's,SO~OQ,VOz,WO|,ZO!Q,XO%`,YO~OQ,VOz,WO%`,YO~OQ,VOz,bO%`,YO~OQ,VOo,gOq,fO|,jO%`,YO~OQ,VO!Q,lO~OQ!RO]%|O_TO`TOc%oOf&SO!Q%vO!V&UO!Z&RO!w%wO!{%uO#R%xO$q&OO%O%bO%S&PO&o&VO's%kO'z%mO(t&TO~OR,tO^,oO!T,uO(rbO~P$$WOz&lX%`&lX'{&lX~PLvOz,QO$q,zO%`,YO'{*|O~Of&SO!Q%vO!V&UO!Z&RO!w%wO!{%uO#R+hO$q&OO%S&PO&o&VO'z%mO(t&TO~P#qO`>qOc$bOuVOvVOwVO!Q$fO!r$uO!s2xO!u$kO!w$hO!{2pO#O2sO's$ZO'z%mO(OUO(Q$]O(c$lO(d$mO(rbO~O!V2yO!S)QP~P%M[Oz!QO|2{O#]2}O%`,YO~OR3QO!n3OO~P#3jO^3UO!T,uO's'QO'z%mO(rbO~OR3QOq,fO!n3OO'{*{O~Oq,fOQ'vXc'vX!Q'vX#R'vX'{'vX~OR3QOo3WO!n3OO#|'vX~P&!`OR3QOo3WO!n3OO~OR3QO!n3OO~O$q1ZO'{*|O~Oz,QO~Oo3^Oq3_O|3]O(d)_O~O!n3`Oy)bX~Oy3bO~O]&XO^&XO_&XO`&_Oz'fO's'`O(t3fO~O!V3gO's&fO~O!R3jO(d)_O~Oo3kOR'vX!n'vX~P&!`Oc*nOo3kOq,fOR'tX!n'tX'{'tX~O!n3mO'{*|OR'xX~O!n3mOR'xX~O!n3mO'{*{OR'xX~OT3oOw3oO~OR3pO~Oq3qOS(jXT(jX^(jXc(jXo(jXu(jXw(jXz(jX|(jX!Q(jX!S(jX!n(jX!u(jX!w(jX!{(jX#O(jX#R(jX#U(jX#Z(jX#[(jX#](jX#^(jX'i(jX'z(jX'{(jX(O(jX(Q(jX(b(jX(d(jX(i(jX(k(jX(l(jX(m(jX(n(jX(o(jX(p(jX(q(jX(r(jX(s(jX(t(jX(u(jXY(jXy(jX~O!Q3rO~O!S3tO~P$*nOY3uO~P$*nOy3vO~P$*nO|#nqY#nq!n#nq!S#nqy#nq#c#nq#^#nq~P5pO!n(qO!S(xa~P5pO!n(qOY(xi!S(xi~OPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V3xO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(tfO~P*qOY'Pa!n'Pa!S'Pa~P5pOY3zO~P5pOY3zOo#yO~O|3{O!n(qOY(xa~P5pO!S'Qa!n'Qa~P5pO!S3|O!n(xO~OP!kiq!ki!n!ki!ubi#Obi#Rbi(cbi(d!ki!R!kio!ki|!ki!S!kiY!ki!c!ki#^!kiy!ki~O(d)_OP!yiq!yi!n!yi!R!yio!yi|!yi!S!yiY!yi!c!yi#^!yiy!yi~O!s&zO!S&yX!n&yXY&yX~P@bO!n.kO!S(_aY(_a~O!S4QO~Oq!tXy!UX!n!UX~Oq4RO~O!n4SOy(aX~Oy4UO~O's.oO~O!s4XO's.oO~O'{*|OP$ci!n$ci~Oq4YO(d)_OP$dX!n$dX~Oq4]O~Oy$ja!n$ja~P5pOw)jO!u)kO's)gO(rbOy'SX!n'SX~O!n/VOy(|a~Oy4cO~P%#YO%S4dO%e4eO~O%O%bO%e4eO%x*TO~PJbO!s4hO's&fO~O|4mO~O#|4nO~O|4sO%`,YO~Oz,WO|4sO!Q,XO%`,YO~Oo4|O~Oo4|O%`,YO~Oz!QO|5OO#]5QO%`,YO~Oq5SO~Oy5UO~Oc5VO~O'{*|O!S&]X!n&]X~O!n5WO!S)gX~O!S5YO~O#]5]OR&Yi#|&Yi'{&Yiz&Yi$q&Yi%`&Yio&Yi|&Yi!Q&Yi!u&Yi!w&Yi!{&Yi#O&Yi#Z&Yi#[&Yi'i&Yi(Q&Yi(c&Yi(d&Yi(k&Yi(l&Yi(m&Yi(n&Yi(o&Yi(p&Yi(q&Yi(t&Yi(u&Yi!S&Yi!n&YiY&YiP&Yiy&Yiq&Yi#c&Yi#^&Yi~O%S5_O~O'{*|OR&fi#|&fiz&fi$q&fi%`&fio&fi|&fi!Q&fi!u&fi!w&fi!{&fi#O&fi#Z&fi#[&fi'i&fi(Q&fi(c&fi(d&fi(k&fi(l&fi(m&fi(n&fi(o&fi(p&fi(q&fi(t&fi(u&fi!S&fi!n&fiY&fiP&fiy&fiq&fi#c&fi#^&fi~O!S'fX!n'fX~PLvO!n0fO!S)ja~OQ5dO~OR5eO'{*|O~O!n5fOR)eX~OR5hO~Oq!UX~P#6^O'{*|O!S&`X!n&`X~Oq5jO~O!n5kO!S)iX~O!S5mO~Oq5jO!S&mX!n&mX'{&mX~O!S5nO~OY5qO~O'{*|OR&gi#|&giz&gi$q&gi%`&gio&gi|&gi!Q&gi!u&gi!w&gi!{&gi#O&gi#Z&gi#[&gi'i&gi(Q&gi(c&gi(d&gi(k&gi(l&gi(m&gi(n&gi(o&gi(p&gi(q&gi(t&gi(u&gi!S&gi!n&giY&giP&giy&giq&gi#c&gi#^&gi~OY[i~P5pO!S5sO~O$q5tO'{*|O~Oz,QO$q5tO%`,YO'{*|O~Oo5zO|5yO'{*|O~O|$aqY$aq!n$aq!S$aqy$aq#c$aq#^$aq~P5pOz&|a'i&|a~P#IWO'i+rOz!di~Oz!QO!c!`O~O!c6TO#^6RO(d)_O~O!s&zO(rbO~P@bOy6XO~Oy6XO!s&zO'p!TO(rbO~P@bOz!QO'i#nO~P#IWOS-vOT-vO^6[Oc-vOo-vOq-vOu-vOw-vOz(QO|-vO!Q(OO!n-vO!u-vO!w(PO!{-tO#O-vO#R-vO#U-vO#Z-vO#[-vO#]-vO#^-vO'i-uO'z%mO'{-xO(OUO(Q-sO(b-vO(d-tO(i-wO(k-sO(l-sO(m-tO(n-tO(o-tO(p-uO(q-vO(r-vO(s-vO(t-xO(u-yO~O!S6`O~P&CqOY6`O~P&CqOy6eO~P&CqOQ!RO]&XO^&XO_&XO`)xOc&ZOf!tO|wO!P!ZO!T)yO!Z1yO!`!rO!f!vO$t!jO$v!kO$z!lO%O!mO%S!sO%e!xO%h!nO%m!oO%o!pO%s!qO%u!rO%x!uO%|!wO's&WO(rbO~Oy6gO~P&FyOy6gO~P%EaO!V6iO's&fO~OR3QOq,fO!n3OO~OR3QOo3WOq,fO!n3OO~O`2UO!P!ZO's(kO(rbO~Oq6kO~O!n6mOy)WX~Oy6oO~O!n6rO'{*|O!S)YX~O!S6tO~Oq6uO'{*{O~Oq,fO~Oq,fO'{*|O~O!n6wOz)TXo)TX|)TX~O|4sO~O`2UO!P!ZO's,OO(rbO~Oo6zOz,WO!Q,XOy%qX!n%qX~O!n6}Oy)[X~Oy7PO~O'{7QO|'yX%`'yXz'yXR'yXo'yX!n'yX~O|7SO%`,YO'{*|O~Oo4|O|7UO~O|7UO%`,YO~OQ!ROSVOTVO]7WO^$[O_>qO`>qOc$bOuVOvVOwVO!Q$fO!V$pO!r$uO!u$kO!w$hO!{$iO's$ZO(OUO(Q$]O(c$lO(d$mO~O!s7XO'z%mO~P&MrOq7ZO(d)_O~O!V7]O~P%M[O!n7^O!S)RX~O!S7`O~Oq!jX!S%[X!n%[X(d!jX~P#&eO!s&zO~P&MrO!n7^Oq(WX!S)RX(d(WX~O]7bO!s7cO~Oz!QO|5OO~O^7iO!T,uO's'QO'z%mO(rbOR'WX!n'WX~OR7kO!n3OO~OR7kOq,fO!n3OO~OR7kOo3WOq,fO!n3OO~OR7kOo3WO!n3OO~Oq7nO~Oz,QO%`,YO'{*|O~O|7oO#c7pO~P5pOo7qO|7oO'{*|O~Oy'aX!n'aX~P!8RO!n3`Oy)ba~Oo7wO|7vO'{*|O~OSVOTVOuVOvVOwVOz!QO(OUO(Q7zOR'bX!n'bX~PLvO!n3mOR'xa~OS-vOT-vO^-rOc-vOo-vOq-vOu-vOw-vOz(QO|-vO!Q(OO!n-vO!u-vO!w(PO!{-tO#O-vO#R-vO#Z-vO#[-vO#]-vO#^-vO'i-uO'z%mO'{-xO(OUO(Q-sO(b-vO(d-tO(i-wO(k-sO(l-sO(m-tO(n-tO(o-tO(p-uO(q-vO(r-vO(s-vO(t-xO(u-yO~O#U8RO~P''OO!S8TO~P$*nOY8VO~P5pOY8VOo#yO~OY'Pi!n'Pi!S'Pi~P5pOPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V8XO!Z#aO!^!^O!`#cO!a!eO!c!`O!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(tfO~P*qOP!kqq!kq!n!kq!ubq#Obq#Rbq(cbq(d!kq!R!kqo!kq|!kq!S!kqY!kq!c!kq#^!kqy!kq~O(d)_O!S&ya!n&yaY&ya~O!r.vO!s.uO!u8ZO's.oOy&zX!n&zX~O!n4SOy(aa~Oq8]O~Oq8aO(d)_OP$da!n$da~O'{*|OP$cq!n$cq~Oy$ii!n$ii~P5pO|.RO~O!s8eO's&fO~Oq8hO~Oz!QO|8iO#]8kO%`,YO~Oo8nO|8mO'{*|O~O!V8oO's&fO~O|8sO~O|8sO%`,YO~O|8wO%`,YO'{*|O~Oo8zO~Oz!QO|8iO~Oo8}O|8|O'{*|O~Oq9PO~O!S'dX!n'dX~PLvO!n5WO!S)ga~OR&Yq#|&Yqz&Yq$q&Yq%`&Yqo&Yq|&Yq!Q&Yq!u&Yq!w&Yq!{&Yq#O&Yq#Z&Yq#[&Yq'i&Yq(Q&Yq(c&Yq(d&Yq(k&Yq(l&Yq(m&Yq(n&Yq(o&Yq(p&Yq(q&Yq(t&Yq(u&Yq!S&Yq!n&YqY&YqP&Yqy&Yqq&Yq#c&Yq#^&Yq~O'{*|O~P'2bO#]9UO'{&Yq~P'2bO'{*|OR&fq#|&fqz&fq$q&fq%`&fqo&fq|&fq!Q&fq!u&fq!w&fq!{&fq#O&fq#Z&fq#[&fq'i&fq(Q&fq(c&fq(d&fq(k&fq(l&fq(m&fq(n&fq(o&fq(p&fq(q&fq(t&fq(u&fq!S&fq!n&fqY&fqP&fqy&fqq&fq#c&fq#^&fq~O'{*|O!S'fa!n'fa~OY9WO~P5pO's,OO'z%mOR)kP~O'z%mOR'cX!n'cX~O!n5fOR)ea~O!n5kO!S)ia~O#O9`O~PLvOQ!RO]%|O^%jO_TO`TOc%oOf&SO!Q%vO!V0yO!Z&RO!w%wO!{%uO#O9bO#R%xO$q&OO%O%bO%S&PO&o&VO's0qO'z%mO(rbO(t&TO~O!S'eX!n'eX~P'8wO'{*|OR%ci#|%ciz%ci$q%ci%`%cio%ci|%ci!Q%ci!u%ci!w%ci!{%ci#O%ci#Z%ci#[%ci'i%ci(Q%ci(c%ci(d%ci(k%ci(l%ci(m%ci(n%ci(o%ci(p%ci(q%ci(t%ci(u%ci!S%ci!n%ciY%ciq%ciP%ciy%ci#c%ci#^%ci~O$q9iO'{*|O~Oo9lO(d)_O~O'i+rOz!dq~Oz#bq'i!eq~P#IWO#^9oO~OPpOQ!ROSVOTVOc^OuVOvVOwVOz!QO!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!f@SO!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'zWO(OUO(QeO(ckO(tfO~P*qO!c6TO#^9oO(d)_O~Oy9tO~Oq?qO#^(jX~O#^9vO~O|9wO!S9xO~O!S9xO~P&CqO|9{O~OY9xO|9wO~OY9xO~P&CqOy9{O|9wO~Oy9{O~P&CqOy:OO~P&FyO|:PO~O!n6mOy)Wa~Oq:SO~O`2UO!P!ZO's(kO(rbOy'[X!n'[X~O!n6rO'{*|O!S)Ya~O!S']X!n']X~P%HnO!n6rO!S)Ya~O'z%mO~Of&SO!Q%vO!V&UO!Z&RO!w%wO!{%uO#R%xO$q+XO%S&PO&o&VO'z%mO(t&TOz'ZX!n'ZXo'ZX|'ZX~P#qO`>qOc$bOuVOvVOwVO!Q$fO!V$pO!r$uO!s&zO!u$kO!w$hO!{$iO's$ZO(OUO(Q$]O(c$lO(d$mO~O]:lO~P'G^O]:mO!s:nO~O#O:pO~PLvO!n7^O!S)Ra~O!n7^Oq(WX!S)Ra(d(WX~OQ!ROSVOTVO]2wO^$[O_>qO`>qOc$bOuVOvVOwVO!Q$fO!r$uO!s2xO!u$kO!w$hO!{2pO#O:sO's$ZO'z%mO(OUO(Q$]O(c$lO(d$mO(rbO~O!V:uO!S'XX!n'XX~P'IrOq:wO(d)_O~O]:mO~Oz!QO|8iO%`,YO'{*|O~O^:{O!T,uO's'QO'z%mO(rbO~Oq,fOR'Wa!n'Wa~Oo3WOq,fOR'Wa!n'Wa~Oo3WOR'Wa!n'Wa~OR:|O!n3OO~O'{*|OR%Vi!n%Vi~O|;QO#c;RO~P5pOo;SO|;QO'{*|O~O'{*|ORni!nni~O'{*|OR'ba!n'ba~O'{*{OR'ba!n'ba~OT;VOw;VO~O!n3mOR'xi~OS-vOT-vO^-vOc-vOo-vOq-vOu-vOw-vO|-vO!n-vO!u-vO!{-tO#O-vO#R-vO#U-vO#Z-vO#[-vO#]-vO#^-vO'i-uO'z%mO(OUO(Q-sO(b-vO(d-tO(k-sO(l-sO(m-tO(n-tO(o-tO(p-uO(q-vO(r-vO(s-vO~O'{;WO(t;WO(u;WO~P( aO!S;YO~P$*nOY;ZO~P5pOY;ZOo#yO~O(d)_Oy!qi!n!qi~Oq;]O~O'{*|OP$di!n$di~Oy$iq!n$iq~P5pOq;aO~O|;cO#];eO%`,YO~Oz!QO|;gO~Oz!QO|;gO#];jO%`,YO~O|;lO~O|;oO~O|;pO~O|;pO%`,YO'{*|O~Oz!QO|;gO%`,YO'{*|O~Oo;uO|;tO'{*|O~O'{*|O!S&^X!n&^X~OR&Yy#|&Yyz&Yy$q&Yy%`&Yyo&Yy|&Yy!Q&Yy!u&Yy!w&Yy!{&Yy#O&Yy#Z&Yy#[&Yy'i&Yy(Q&Yy(c&Yy(d&Yy(k&Yy(l&Yy(m&Yy(n&Yy(o&Yy(p&Yy(q&Yy(t&Yy(u&Yy!S&Yy!n&YyY&YyP&Yyy&Yyq&Yy#c&Yy#^&Yy~O'{*|O~P('aO#];xO'{&Yy~P('aO!n;yOR)lX~OR;{O~O!n5kO!S)ii~O'{*|O!S&`i!n&`i~O|POy$ky!Q(TX!u(TX!w(TX!{(TX#O(TX(Q(TX(c(TX(t(TX~PDmO!n>POo(TX#O(TX#Z(TX#[(TX#|(TX'i(TX'{(TX(k(TX(l(TX(m(TX(n(TX(o(TX(p(TX(q(TX(t(TX(u(TX~P(HZO!n>QO!Q(TX!u(TX!w(TX!{(TX#O(TX(Q(TX(c(TX(t(TX~PDmO!n>QO~P(+nO#^>TO~O'{*|O!S']q!n']q~Oy%qy!n%qy~P5pOT>UOw>UO~O|>VO~O|>XO%`,YO'{*|O~O|>XO~O|>[O'{*|O~Oz!QO|>]O~O|>^O~P5pOQ#g!RS#g!RT#g!R]#g!R^#g!R_#g!R`#g!Rc#g!Ru#g!Rv#g!Rw#g!Ry$k!R!Q#g!R!V#g!R!r#g!R!s#g!R!u#g!R!w#g!R!{#g!R's#g!R(O#g!R(Q#g!R(c#g!R(d#g!R(r#g!R~O!n>_O!Q(TX!u(TX!w(TX!{(TX#O(TX(Q(TX(c(TX(t(TX~PDmOo(TX#O(TX#Z(TX#[(TX#|(TX'i(TX'{(TX(k(TX(l(TX(m(TX(n(TX(o(TX(p(TX(q(TX(t(TX(u(TX~O!n>_OQ#gqS#gqT#gq]#gq^#gq_#gq`#gqc#gqu#gqv#gqw#gq!Q#gq!V#gq!r#gq!s#gq!u#gq!w#gq!{#gq's#gq(O#gq(Q#gq(c#gq(d#gq(r#gq~P)!qO|>bO~O|>cO~O|>cO%`,YO'{*|O~O!n>eO!Q(TX!u(TX!w(TX!{(TX(Q(TX(c(TX(d(TX~P)!qO!n>eOQ#gyS#gyT#gy]#gy^#gy_#gy`#gyc#gyu#gyv#gyw#gy!Q#gy!V#gy!r#gy!s#gy!u#gy!w#gy!{#gy's#gy(O#gy(Q#gy(c#gy(d#gy(r#gy~P)!qO|>fO~OzaX~P%dOziX!QiX!uaX#OaX(caX~P#B[Oc'wXo'rXz(]X!u'rX#O'rX#R'rX(c'rX(d'rX~Oc'rXc(]Xz'rX!Q'rX!w'rX!{'rX#Z'rX#['rX#|'rX'i'rX'{'rX(Q'rX(k'rX(l'rX(m'rX(n'rX(o'rX(p'rX(q'rX(t'rX(u'rX~P)(}OP'rXq'rX!Q(]X!n'rX!R'rX|'rX!S'rXY'rX!c'rX#^'rXy'rX~P)(}O]>iO^>iO_>iO`>iO's>gO~O!s>vO#o?{O~P!2eOPpOQ!ROSVOTVOc>lOuVOvVOwVO!T#bO!V?wO!Z#aO!^!^O!`?yO!a?xO!c!`O#RgO#e!fO$O>rO$X>sO$Z!dO$m!gO$o!hO$q!iO'zWO(OUOo$PXz$PX!Q$PX!u$PX!w$PX!{$PX#O$PX#Z$PX#[$PX#|$PX'i$PX'{$PX(Q$PX(c$PX(d$PX(k$PX(l$PX(m$PX(n$PX(o$PX(p$PX(q$PX(t$PX(u$PX~P)+uO#]$yO~P!2eO!Q(]XP'rXq'rX!n'rX!R'rX|'rX!S'rXY'rX!c'rX#^'rXy'rX~P)(}Oo#}X#Z#}X#[#}X#|#}X'i#}X'{#}X(d#}X(k#}X(l#}X(m#}X(n#}X(o#}X(p#}X(q#}X(u#}X~P!2eOo$WX#Z$WX#[$WX#|$WX'i$WX'{$WX(d$WX(k$WX(l$WX(m$WX(n$WX(o$WX(p$WX(q$WX(u$WX~P!2eOPpOQ!ROSVOTVOc>lOuVOvVOwVO!T#bO!V?wO!Z#aO!^!^O!`?yO!a?xO!c!`O#RgO#e!fO$O>rO$X>sO$Z!dO$m!gO$o!hO$q!iO'zWO(OUOo$Paz$Pa!Q$Pa!u$Pa!w$Pa!{$Pa#O$Pa#Z$Pa#[$Pa#|$Pa'i$Pa'{$Pa(Q$Pa(c$Pa(d$Pa(k$Pa(l$Pa(m$Pa(n$Pa(o$Pa(p$Pa(q$Pa(t$Pa(u$Pa~P)+uOo?QO#Z?QO#[>}Oz$Pa~P!ISO'i#nOz$aa~P#IWO#]+pO~P!2eOo#yO!Q#{O!u#zO!w$OO!{#kO#O#zO#Z#yO#[#vO#|$PO'{#hO(Q#hO(c#zO(d#mO(k#iO(l#iO(m#jO(n#jO(o#lO(p#oO(q#}O(t#iO(u#gO~O'i@PO#^(VX~P)6sO'i#nOz#}a~P#IWOq#OOo$Wa#Z$Wa#[$Wa#|$Wa'i$Wa'{$Wa(d$Wa(k$Wa(l$Wa(m$Wa(n$Wa(o$Wa(p$Wa(q$Wa(u$Wa~P!2eO'i#nOz$Wa~P#IWO'i#nOz#ni~P#IWO!Q#{O!w$OO(k#iO(l#iO(q#}O(t#iO(u#gOo#qiz#qi!u#qi!{#qi#O#qi#Z#qi#[#qi#|#qi'i#qi(c#qi(d#qi(m#qi(n#qi(o#qi(p#qi~O'{#qi(Q#qi~P):ZO'{#hO(Q#hO~P):ZO!Q#{O!w$OO'{#hO(Q#hO(k#iO(l#iO(m#jO(n#jO(q#}O(t#iO(u#gOo#qiz#qi!u#qi#O#qi#Z#qi#[#qi#|#qi'i#qi(c#qi(d#qi(o#qi(p#qi~O!{#qi~P)OO(d#mO~P)>OO!Q#{O!w$OO!{#kO#[>}O'{#hO(Q#hO(d#mO(k#iO(l#iO(m#jO(n#jO(o#lO(q#}O(t#iO(u#gOo#qiz#qi!u#qi#O#qi#Z#qi#|#qi(c#qi(p#qi~O'i#qi~P)?wO'i#nO~P)?wOo?QO#Z?QO#[>}Oz#zi~P$?`Oo?QO#Z?QO#[>}Oz$Pi~P$AdO#]1`O~P!2eO'i#nOz$ai~P#IWOPpOQ!RO]RO^RO_RO`ROc^O!QnO!T#bO!V!aO!Z#aO!^!^O!`#cO!a!eO!c!`O!f@TO!ukO!wmO!{iO#OkO#RgO#e!fO$O!bO$X!cO$Z!dO$m!gO$o!hO$q!iO'sQO'zWO(QeO(ckO(tfO~P(@nO'i#nOz$Wi~P#IWO'i#nOz#nq~P#IWO'i#nOz$aq~P#IWO#^&|a'i&|a~P)6sO'i?jO#^!di~OS-vOT-vO^6[Oc-vOo-vOq-vOu-vOw-vOz(QO|-vO!Q(OO!n-vO!u-vO!w(PO!{-tO#O-vO#R-vO#U8RO#Z-vO#[-vO#]-vO#^-vO'i-uO'z%mO'{-xO(OUO(Q-sO(b-vO(d-tO(i-wO(k-sO(l-sO(m-tO(n-tO(o-tO(p-uO(q-vO(r-vO(s-vO(t-xO(u-yO~O'i?jO#^!dq~O#^#bq'i!eq~P)6sO#^!eq'i!eq~P)6sOc>uO~Oo?QO~OPpOz!QO!a?|O~O'i#nOz#na~P#IWO!T?]O!s?]O~O'i?jO~O'i?jO#^!da~O!f@TO~P%;yOo?pO(d)_O~Oo?tO(d)_O~O'pX^(i(rU(k(Ou#U'z'n'm's~",goto:"%?Y)mPPPPPPP)nPPP)u*XPPPP*_/YP2t8kP:e:eT!>WPP!>^P!8VP!8V!8V!8VP!8V!8VP!8V!8VP!>|!?sP!?s!&g!&g!&gPPPP!?s!@V!@s!7mP!0^P!Ak!An!At!CY!Cf!Ew!Ew!HW!JkP!Cf!Cf!Lx!Nu#!t#$o#&h#(_#*S#+m!Cf!CfP!CfP!Cf!Cf#-[!CfP#/Z!Cf!CfP!CfP!Cf!Jk!Jk!Cf!Jk!Cf#1l#4`#4c!Jk!Cf#4f#4l#4l#4l#4p!0^P!0^P!0^P!+p!+pP!+pP#4z!+p!+pP#5^#6l!+pP#7T#7_PP#7h#8s#9R#9R#9a#9d#9|#9|#:Y#:S#:`P#=f#=f#=l#7_P#=|!+pP#>S#>x#?U!+pP!+pP#?f#?u!+pP!+pP!+p!+pP!+p!+p!+pP#@R#@R#@X#@_#@R#@R!+p!+p#@l#@w#AR#AU#C[#E`#Eg#Ej#Em#Ey#FV#FP#CO#CO#CO8k8k8k8k8k8k8k8k8kP8k#F]#F`#Ff#GW#Ih#In#It#JV#No#Nu#N{$ _$ q$ {$$_$$m$$w$$}$%T$%c$%m$%w$&]$&i$&o$&u$'P$'_$'i$(Y$(g$(m$(y$)Q$)W$)b$)hPPPPPPPPP$)n$-hP$2R$7V$7u$:O$@c$@fPP$@iPPPP$DR$D^$D{$KU$Mw$NT%!Y!8V%#[%'[%*h%.f%.o%.t%.wPPP%.z%2W%2w!?sP%3_PPPPPPPPPPP%3w%6j%6m%6v%6y%6|%7P%7S%7Y%:_%:n%:q%:t%:w%:z%:}%;Q%;T%;W%;Z%;^%;a%;|#@R%k%>o%>s%>v%>y%>|%?P%?S%?VQ!zPT'o!y'pq!UOmn!Q!V!W!X$V$X%O%i)v+w,Q1o1xQ&^!TR(V#X)YSO[^dhikmnpq!P!Q!T!V!W!X!`!b!c!f!g!i!v!w#T#U#X#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X$a$b$f$h$i$k$l$m$u$v%O%_%d%f%i&Y&Z&l&p&s&z'_'d'f'i'u'w'}(Z(g(q(s(u(x(})P)Q)R)V)[)_)a)k)q)t)v*c+`+a+c+g+m+r+w+z,Q,l-Q-^.Y.Z.i.k.}/T/_0j1S1d1g1j1l1o1t1v1x2p2r2x3^3`3j3{4R4]5z6R6T6Y6h6z7X7^7q7w8]8n8}9l9o9s:d:r;S;];uT>k>l>m>n>o>p>r>s>t>u>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?Z?]?h?j?p?t@S@TS)i$z/VQ,P&|Q,U'PQ/R)hQ/j*RW2d,b2c6}:fQ6|2eQ9X5dQ=[;yR=mT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t@S@T$^_Odhikmnq!P!Q!V!W!X!b!c#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X%d%f%i&l&s(Z(g(q(s(u(x)k*c+c+m-Q.Y.Z/T0j3^3{4]5z6R6T6z7q7w8n8}9o:d;S;uT?j?p?t!p$cp!i!v$f$h$i$m$u$v&p&z'_'w)R)V)[)_)a+w,l.k.}1d1j1l1o2p2r2x4R6Y7X7^8]9s:r;]@S@T%U%p!R!t$P$y%t%u%v%w&S&V&e'X'Y'['y)`*i*u*v*{*|+O+R+U+V+[+^+h+j+k+p,X,Y,f,g,z-R-a/P/e/w0R0]0e0f0r0}1P1Z1[1`2V2X2}3W3_3k3m4Y4|5Q5S5W5]5j5k5q5t6k6q6r6w7Q7Z7n8a8h8k8z9P9U9a9i:S:Y:[:w;a;e;j;xm>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h$o%{!R!t$P$y%u%v%w&e'X'Y'['y)`*i*u*v*{+O+R+^+h+j+k+p,X,Y,g,z-R-a/P/e/w0R0]0e0f0r0}1Z1[1`2V2X2}3W3_3k3m4Y4|5Q5S5W5]5j5k5t6k6q6r6w7Z7n8a8h8k8z9P9U9a9i:S:Y:[:w;a;e;j;xT>k>l>m>n>o>p>r>s>t>u>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?Z?]?h?j?p?t@S@T%O%s!R!t$P$y%t%u%v%w&S&V&e'Y'[)`*i*u*v*{*|+O+R+U+V+[+^+h+j+k+p,X,Y,f,g,z-R-a/P/e/w0R0]0e0f0r0}1P1Z1[1`2V2X2}3W3_3k4Y4|5Q5S5W5]5j5k5q5t6k6q6r6w7Q7Z7n8a8h8k8z9P9U9a9i:S:Y:[:w;a;e;j;xT>k>l>m>n>o>p>r>s>t>u>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?Z?]?h?j?p?t@S@T$j%q!R!t$P$y%u%v%w&e'X'Y'[)`*i*u*v*{+O+R+^+h+j+k+p,X,Y,g,z-R-a/P/e/w0R0]0e0f0r0}1Z1[1`2V2X2}3W3_3k4Y4|5Q5S5W5]5j5k5t6k6q6r6w7Z7n8a8h8k8z9P9U9a9i:S:Y:[:w;a;e;j;xT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t@S@TU'O!m%V%bu-v(O(P(Q-{-}.P1q1r1s3q3r6_6b6d8T8U;Y?qR-n'y%^tOdhikmn!P!Q!V!W!X!`!b!c!f!g#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X%d%f%i&s'u(Z(g(q(s(u(x)k*c+c+r+z-Q.Y.Z/T0j1g3^3j3{4]5z6R6T6z7q7w8n8}9l9o:d;S;uT>m>n>r>s>v>w>x>y>z>{>|>}?O?P?Q?X?]?j?p?tS$xq>pS&c![#aS&g!]#bQ&i!^U&j!_#c?yQ&x!hQ't#OS+l&k?|S+o&l?UQ+u&qQ+y&wQ-e'vQ-l'yU/Q)f+m?hQ2{,mQ3i-dS5O/z2|Q5|1aQ6Q1hQ6Z1pQ7|3mU8i4i5P7dQ9k5{Q;O7pQ;U7xU;g8j8l8{QW=qR>]=z{|Od!P!Q!V!W!X%O%d%f%i)q)t)v*c,Q/_1t1v1x6hpyOd!P!Q!V!W!X%d%f%i*c,Q1t1v1x6hY)w%O)q)t)v/_W2Q,W2O6m:TQ2X,XW2e,b2c6}:fQ6q2VQ:[6rRT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t%jXOdhikmnq!P!Q!V!W!X!`!b!f!g#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X%d%f%i&l&s'u(Z(g(q(s(u(x)k*c+c+m+r+z-Q.Y.Z/T0j1g3^3j3{4]5z6R6T6z7q7w8n8}9l9o:d;S;uT>m>n>o>p>r>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?tQ&s!cQ&u!dR?X>s%ntOdhikmnq!P!Q!V!W!X!`!b!c!f!g#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X%d%f%i&l&s'u(Z(g(q(s(u(x)k*c+c+m+r+z-Q.Y.Z/T0j1g3^3j3{4]5z6R6T6z7q7w8n8}9l9o:d;S;uT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?tR6Q1hX&o!`!g'u6TU&m!`!g'uS1e+r?jQ1f+sQ?o@PR?}6T!q$pp!i!v$f$h$i$m$u$v&p&z'_'w)R)V)[)_)a+w,l.k.}1d1j1l1o2p2r2x4R6Y7X7^8]9s:r;]@S@T!w$_p!i!v$f$h$i$k$l$m$u$v&p&z'_'w(})R)V)[)_)a+w,l.k.}1d1j1l1o2p2r2x4R6Y7X7^8]9s:r;]@S@T!q$dp!i!v$f$h$i$m$u$v&p&z'_'w)R)V)[)_)a+w,l.k.}1d1j1l1o2p2r2x4R6Y7X7^8]9s:r;]@S@T'a`Odhikmnpq!P!Q!V!W!X!`!b!c!f!g!i!v#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X$f$h$i$m$u$v%d%f%i&l&p&s&z'_'u'w(Z(g(q(s(u(x)R)V)[)_)a)k*c+c+m+r+w+z,l-Q.Y.Z.k.}/T0j1d1g1j1l1o2p2r2x3^3j3{4R4]5z6R6T6Y6z7X7^7q7w8]8n8}9l9o9s:d:r;S;];uT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t@S@TR)X$gQ.r)WR8Z4SQ(l#}S)j$z/VS.q)W4SQ/S)hW2P,W2O6m:TS4W.u.vQ6l2QR8_4XQ(R#Vx+b&](O(P(Q(X*k-{-}.P1q1r1s3q3r6_6b6d8U9v?qQ+d&`Q+}&{Q/g*PR4a/[q-y(O(P(Q-{-}.P1q1r1s3q3r6_6b6d8U?qQ(R#Vx+b&](O(P(Q(X*k-{-}.P1q1r1s3q3r6_6b6d8U9v?qR4a/[Q(S#Vx+b&](O(P(Q(X*k-{-}.P1q1r1s3q3r6_6b6d8U9v?qQ+|&{S/f*P+}Q4b/[R4l/gR+x&vX1k+w1l1o6Y#ucOdm!P!Q!V!W!X#{$R$V$z%O%d%f%i'X(g(q(u)h)q)t)v*c+R+w,Q,V,W,X,b,l,p.Z/V/_0r0|1j1l1o1t1v1x2O2V2c2r3O5k6Y6h6m6r6}7^7e9a9s:T:Y:f:rQ6S1iQ9q6UQT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t$YhOdhimnq!P!Q!V!W!X!b!c#e#p#q#r#s#t#u#v#w#x#y#{$O$R$V$X%d%f%i&l&s(Z(g(q(s(u(x)k*c+c+m-Q.Y.Z/T0j3^3{4]5z6R6T6z7q7w8n8}9o:d;S;uT?j?p?t!]>m!`!f!g'u+r+z1g3j9l>m>n>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?U?X?]?h$^hOdhikmnq!P!Q!V!W!X!b!c#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X%d%f%i&l&s(Z(g(q(s(u(x)k*c+c+m-Q.Y.Z/T0j3^3{4]5z6R6T6z7q7w8n8}9o:d;S;uT?j?p?t!a>m!`!f!g'u+r+z1g3j9l>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h%gsOdhimnq!P!Q!V!W!X!`!b!c!f!g#e#p#q#r#s#t#u#v#w#x#y#{$O$R$V$X%d%f%i&l&s'u(Z(g(q(s(u(x)k*c+c+m+r+z-Q.Y.Z/T0j1g3^3j3{4]5z6R6T6z7q7w8n8}9l9o:d;S;uT>m>n>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?U?X?]?h?j?p?t#j#pj#d$Q$S$W$w%e&r&t(Y(^(_(`(a(b(c(d(e(f(h(n(p(v({*`+n+v.T.U.[.^.`.b/U1T1_3Z3w3y4^5c7r8W8b9j:c;P;T;k;sw&n&v1c1p6P7xx&n&v1c1p6P7xy&n&v1c1p6P7xz&n&v1c1p6P7x{&n&v1c1p6P7x|&n&v1c1p6P7xT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t$^qOdhikmnq!P!Q!V!W!X!b!c#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X%d%f%i&l&s(Z(g(q(s(u(x)k*c+c+m-Q.Y.Z/T0j3^3{4]5z6R6T6z7q7w8n8}9o:d;S;uT?j?p?tU&l!_!e#cQ+m&k!`>p!`!f!g'u+r+z1g3j9l>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?hS?U?x?yR?h?|R$qpR.|)aQ${rR/Y)pT)l$z/VQ1n+wS6W1l1oR9u6YQ6^1qQ6a1rQ6c1sQ9y6_Q9|6bR9}6dQ,R&}Q,x'ZQ,{']Q/h*QW/|*Z,|,}-OS1X+i,yW4o/l/}0O0PU5u1Y1]3YU8p4p4q4rS9g5v5xS;m8q8rS;}9f9hQ=T;nS=^O=_b}O!P!Q!V!W!X%f%i*cW)s%O)t)v/_X1u,Q1v1x6hQ%PxS)|%Q&dR/k*SW)s%O)t)v/_R/Z)qQ'[!tQ+j&eQ,^'RQ,a'SQ,e'TQ,i'UQ,n'WQ-O']Q/p*UQ/s*VQ/v*WQ/y*XQ/{*YQ0P*ZQ0}+XQ4j/dQ4r/lQ8g4fR;`8cU,s'X,V0|Q3T,pQ7h3OR:z7eU,v'X,V0|Q3U,pQ7i3OR:{7eR=nY=tR>d>ZQ2_,YR:`6wd+W&S&V*|+U+V+[,f1P5q7QT2],Y6wX)s%O)t)v/_Q,Z'RQ,_'SU/m*U,[,^U/q*V,`,aS4s/n/pS4w/r/sQ6{2dQ8s4uQ8u4xR:e6|Q2R,WQ6j2OQ:U6mRT?j?p?th#Q[#T$a&Y'})P+`.i1S>k>t?ZQ#T^!p$ap!i!v$f$h$i$m$u$v&p&z'_'w)R)V)[)_)a+w,l.k.}1d1j1l1o2p2r2x4R6Y7X7^8]9s:r;]@S@Tp&Y!T#X$k$l%O(})q)t)v+g,Q/_1t1v1x6hQ'}#UQ)P$bQ+`&ZQ.i)QQ1S+a!`>k!`!f!g'u+r+z1g3j9l>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?hQ>t>lR?Z>uQ.l)SR4P.lQ4T.rR8[4TQ-{(OQ-}(PQ.P(QW3s-{-}.P8UR8U3rQ+q&mW1b+q6O?r@OQ6O1fQ?r?oR@O?}Q1l+wS6V1l6YR6Y1oYdO!P!V!W!X!O#Yd$R%d(g(u)h)q,p.Z0r1j1t2O2V2c2r7e9a9s:T:Y:f:rQ$RmW%d!Q%f%i*cQ(g#{Q(u$VS)h$z/VW)q%O)t)v/_U,p'X,V0|Q.Z(qQ0r+RW1j+w1l1o6YW1t,Q1v1x6hQ2O,WQ2V,XQ2c,bQ2r,lQ7e3OQ9a5kQ:T6mQ:Y6rQ:f6}R:r7^U(r$S(h(vU.X(p.U.`T.](r.XQ(y$WS.c(y.eR.e({Q)b$qR/O)bQ/W)mR4`/WQ6_1qQ6b1rQ6d1sV9z6_6b6dQ1v,QS6f1v6hR6h1xQ)t%OS/])t/_R/_)v`3P,o,q,r,s,v1|1}5oS7j3P7lX7l3R3S3T3US7_2t2yS:q7[7]T:v7_:qQT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t!p$jp!i!v$f$h$i$m$u$v&p&z'_'w)R)V)[)_)a+w,l.k.}1d1j1l1o2p2r2x4R6Y7X7^8]9s:r;]@S@TS&]!T#XS)]$k$ld)r%O)q)t)v,Q/_1t1v1x6hQ.g(}R1V+g(Q!SOdhikmnpq!P!Q!T!V!W!X!`!b!c!f!g!i!v#X#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X$f$h$i$k$l$m$u$v%O%d%f%i&l&p&s&z'_'u'w(Z(g(q(s(u(x(})R)V)[)_)a)k)q)t)v*c+c+g+m+r+w+z,Q,l-Q.Y.Z.k.}/T/_0j1d1g1j1l1o1t1v1x2p2r2x3^3j3{4R4]5z6R6T6Y6h6z7X7^7q7w8]8n8}9l9o9s:d:r;S;];uT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t@S@T[#S[^&Y&Z>k>lW'e!w%_'f3`['|#T#U+`+a>t>uS)O$a$bS-W'd'iU-q'}1S?ZS.h)P)QQ3d-^R3}.iS%z!R'XQ'Z!tQ(o$PQ)f$yQ*t%uQ*w%vQ*z%wS+i&e'[Q,w'YQ-k'yQ.z)`Q0X*iS0d*u*vQ0k*{Q0m+OW0s+R0r5k9aQ1R+^Q1W+hQ1]+jQ1^+kQ1a+pQ2W,XS2^,Y6wQ2k,gQ3Y,zQ3[-RQ3h-aQ4[/PQ4k/eQ4{/wQ5R0RQ5Z0]Q5`0eQ5a0fQ5p0}Q5v1ZQ5w1[Q5{1`S6p2V2XQ7d2}Q7m3WQ7s3_Q7y3kQ7{3mQ8`4YQ8y4|Q8{5QQ9O5SQ9Q5WQ9T5]Q9_5jQ9f5tQ:R6kQ:X6qQ:Z6rQ:o7ZQ:}7nQ;^8aQ;f8hQ;h8kQ;r8zQ;v9PQ;w9UQZ=vQ+]&SQ+_&VQ0k*|Q0z+UQ0{+VQ1Q+[Q2i,fQ5r1PQ9e5qR:i7Q$n%n!R!t$P$y%u%v%w&e'X'Y'['y)`*i*u*v*{+O+R+^+h+j+k+p,X,Y,g,z-R-a/P/e/w0R0]0e0f0r0}1Z1[1`2V2X2}3W3_3k3m4Y4|5Q5S5W5]5j5k5t6k6q6r6w7Z7n8a8h8k8z9P9U9a9i:S:Y:[:w;a;e;j;xT>k>l>m>n>o>p>r>s>t>u>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?Z?]?h?j?p?t@S@T%`%}!R!t$P$y%l%o%t%u%v%w&S&V&e'X'Y'['y)`*i*l*m*u*v*{*|+O+R+U+V+[+^+h+j+k+p,X,Y,f,g,z-R-a/P/e/w0R0]0`0e0f0r0}1P1Z1[1`2V2X2}3W3_3k3m4Y4|5Q5S5W5]5j5k5q5t6k6q6r6w7Q7Z7n8a8h8k8z9P9U9a9i:S:Y:[:w;a;e;j;xT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t!v$^p!i!v$f$h$i$k$l$m$u$v&p&z'_'w(})R)V)[)_)a+w,l.k.}1d1j1l1o2p2r2x4R6Y7X7^8]9s:r;]@S@TQ-l'yQ7|3mR=mTS#_h>mQ#diQ$QkQ$SmQ$WnQ$wqW%e!Q%f%i*cU&n!`!g'uQ&r!bQ&t!cQ&v!fQ(Y#eQ([#pS(]#q>xQ(^#rQ(_#sQ(`#tQ(a#uQ(b#vQ(c#wQ(d#xQ(e#yQ(f#zQ(h#{Q(n$OQ(p$RQ(v$VQ({$XQ*`%dQ+n&lQ+v&sQ.T(ZQ.U(gQ.[(qQ.^(sQ.`(uQ.b(xQ/U)kQ1T+cQ1_+mQ1c+rQ1p+zQ3Z-QQ3w.YQ3y.ZQ4^/TQ5c0jQ6P1gQ7r3^Q7x3jQ8W3{Q8b4]Q9j5zQ:c6zQ;P7qQ;T7wQ;k8nQ;s8}QoQ?T>pQ?V6TQ?W>rQ?Y>sQ?[>vQ?^>wQ?_>yQ?`>zQ?a>{Q?b>|Q?c>}Q?d?OQ?e?PQ?f?QQ?g?RQ?i?UQ?k?XQ?l?]Q?m?hQ?n?jQ?s?pQ?u?tR?z>nbuO!P!Q!V!W!X%f%i*cS#Zd%d$z#`hikmnq!`!b!c!f!g#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X&l&s'u(Z(g(q(s(u(x)k+c+m+r+z-Q.Y.Z/T0j1g3^3j3{4]5z6T6z7q7w8n8}9l:d;S;um>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?tQ9n6RQS=eR>a>TQ&q!`Q&w!gQ-d'uR9p6TQ$npQ&y!iQ'^!vU)S$f$h)VS)Z$i2pQ)^$mQ)d$uQ)e$vQ+t&pQ+{&zQ-S'_Q-f'wQ.j)RS.x)[7XQ.y)_Q.{)aW1i+w1l1o6YW2q,l2r7^:rQ4O.kQ4Z.}Q5}1dQ6U1jQ7a2xQ8Y4RQ;[8]QT>k>l>m>n>o>p>r>s>t>u>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?Z?]?h?j?p?t@S@T%nrOdhikmnq!P!Q!V!W!X!`!b!c!f!g#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X%d%f%i&l&s'u(Z(g(q(s(u(x)k*c+c+m+r+z-Q.Y.Z/T0j1g3^3j3{4]5z6R6T6z7q7w8n8}9l9o:d;S;uT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t!q$gp!i!v$f$h$i$m$u$v&p&z'_'w)R)V)[)_)a+w,l.k.}1d1j1l1o2p2r2x4R6Y7X7^8]9s:r;]@S@T'``Odhikmnpq!P!Q!V!W!X!`!b!c!f!g!i!v#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X$f$h$i$m$u$v%d%f%i&l&p&s&z'_'u'w(Z(g(q(s(u(x)R)V)[)_)a)k*c+c+m+r+w+z,l-Q.Y.Z.k.}/T0j1d1g1j1l1o2p2r2x3^3j3{4R4]5z6R6T6Y6z7X7^7q7w8]8n8}9l9o9s:d:r;S;];uT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t@S@T[#R[^$a$b>k>l['{#T#U)P)Q>t>uU*f%l%o%rU-p'}.i?ZU0_*l*m*nR5[0`Q)U$fQ)Y$hR.n)VV)T$f$h)VR.t)WR.s)W%noOdhikmnq!P!Q!V!W!X!`!b!c!f!g#e#p#q#r#s#t#u#v#w#x#y#z#{$O$R$V$X%d%f%i&l&s'u(Z(g(q(s(u(x)k*c+c+m+r+z-Q.Y.Z/T0j1g3^3j3{4]5z6R6T6z7q7w8n8}9l9o:d;S;uT>m>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?t!q$op!i!v$f$h$i$m$u$v&p&z'_'w)R)V)[)_)a+w,l.k.}1d1j1l1o2p2r2x4R6Y7X7^8]9s:r;]@S@TS(T#V(XQ+d&]p-y(O(P(Q-{-}.P1q1r1s3q3r6_6b6d8U?qQ0^*kR<[9v`-z(O(P(Q-{-}.P3r8U[6]1q1r1s6_6b6dT8S3q?qp-y(O(P(Q-{-}.P1q1r1s3q3r6_6b6d8U?qQ;X8TRm>n>o>p>r>s>v>w>x>y>z>{>|>}?O?P?Q?R?U?X?]?h?j?p?tQ9m6RQR=eR>`>TR(j#{Q$UmQ(i#{R(w$VR$spR$rpR)o$zR)n$zQ)m$zR4_/VzxOd!P!Q!V!W!X%O%d%f%i)q)t)v*c,Q/_1t1v1x6hS!r{%RS%Qy)w%S&Q!R!t$P$y%u%v%w&S&V&e'X'Y'['y)`*i*u*v*{*|+O+R+U+V+[+^+h+j+k+p,X,Y,f,g,z-R-a/P/e/w0R0]0e0f0r0}1P1Z1[1`2V2X2}3W3_3k3m4Y4|5Q5S5W5]5j5k5q5t6k6q6r6w7Q7Z7n8a8h8k8z9P9U9a9i:S:Y:[:w;a;e;j;x RawString Float LineComment BlockComment SourceFile Shebang ] InnerAttribute MetaItem self Metavariable super crate Identifier ScopedIdentifier :: QualifiedScope AbstractType impl SelfType MetaType TypeIdentifier ScopedTypeIdentifier ScopeIdentifier GenericType TypeArgList TypeBinding = TraitBounds : Lifetime String Escape Char Boolean Integer ArithOp } { Block ; ConstItem Vis pub ( in ) const BoundIdentifier _ LabeledBlock LoopLabel UnsafeBlock unsafe ConstBlock TryBlock try AsyncBlock async move IfExpression if LetChain LetDeclaration let LiteralPattern ArithOp MetaPattern SelfPattern ScopedIdentifier TuplePattern ScopedTypeIdentifier , StructPattern FieldPatternList FieldPattern ref mut FieldIdentifier .. RefPattern [ SlicePattern CapturedPattern ReferencePattern & MutPattern RangePattern ... OrPattern MacroPattern ! ParenthesizedTokens TokenBinding Identifier TokenRepetition ArithOp BitOp LogicOp UpdateOp CompareOp -> => ArithOp BracketedTokens BracedTokens LetDeclaration else MatchExpression match MatchBlock MatchArm Attribute Guard UnaryExpression ArithOp DerefOp LogicOp ReferenceExpression raw TryExpression BinaryExpression ArithOp ArithOp BitOp BitOp BitOp BitOp LogicOp LogicOp AssignmentExpression TypeCastExpression as ReturnExpression return RangeExpression CallExpression ArgList AwaitExpression await FieldExpression GenericFunction BreakExpression break ContinueExpression continue IndexExpression ArrayExpression TupleExpression MacroInvocation UnitExpression ClosureExpression ParamList Parameter Parameter ParenthesizedExpression StructExpression FieldInitializerList ShorthandFieldInitializer FieldInitializer BaseFieldInitializer MatchArm WhileExpression while LoopExpression loop ForExpression for MacroInvocation DeclarativeMacroItem macro MacroDefinition macro_rules MacroRule EmptyStatement ModItem mod DeclarationList AttributeItem ForeignModItem extern DeclarationList FunctionItem safe fn TypeParamList ConstrainedTypeParameter OptionalTypeParameter ConstParameter ArithOp ParamList Parameter SelfParameter VariadicParameter VariadicParameter WhereClause where LifetimeClause TypeBoundClause HigherRankedTraitBound StaticItem static AttributeItem StructItem struct FieldDeclarationList FieldDeclaration OrderedFieldDeclarationList UnionItem union EnumItem enum EnumVariantList EnumVariant TypeItem type FunctionItem default ImplItem TraitItem trait AssociatedType LetDeclaration UseDeclaration use ScopedIdentifier UseAsClause ScopedIdentifier UseList ScopedUseList UseWildcard ExternCrateDeclaration StaticItem ExpressionStatement ExpressionStatement ArithOp FunctionType ForLifetimes ParamList Parameter Parameter ParamList Parameter VariadicParameter VariadicParameter RemovedTraitBound ConstTraitBound ParenthesizedTraitBound ReferenceType PointerType TupleType UnitType ArrayType MacroInvocation EmptyType InferredType DynamicType dyn BoundedType UseBound",maxTerm:396,nodeProps:[["isolate",-4,4,6,7,35,""],["group",-45,4,5,13,14,15,16,17,18,35,37,38,39,43,54,56,58,59,61,64,112,118,122,124,125,134,135,137,139,140,142,144,145,146,148,150,151,152,153,154,155,159,160,166,168,170,"Expression",-17,21,23,24,25,26,28,240,252,253,254,255,256,257,258,259,260,262,"Type",-21,45,172,173,175,178,179,182,183,207,212,214,218,220,222,223,225,226,227,235,236,237,"Statement",-17,52,53,69,71,72,73,74,77,83,84,86,87,88,90,91,93,94,"Pattern"],["openedBy",10,"[",41,"{",50,"("],["closedBy",42,"}",48,")",85,"]"]],propSources:[Tq],skippedNodes:[0,6,7,264],repeatNodeCount:36,tokenData:"$7T_R!dOX%aXY.hYZ/jZ^.h^p%apq.hqr0Yrs2dst3StuDruvHevwJowxKwxy!7jyz!8lz{!9n{|!;t|}!<|}!O!>O!O!P!@]!P!Q!Dq!Q!R#!c!R![#$^![!]#9]!]!^#;g!^!_#|!`!a#AZ!a!b#Cn!b!c#Dp!c!}#Er!}#O#Go#O#P#Hq#P#Q$!|#Q#R$$O#R#S#Er#S#T%a#T#U#Er#U#V$%W#V#W$(}#W#f#Er#f#g$*z#g#o#Er#o#p$0k#p#q$1m#q#r$3}#r#s$5P#s#y%a#y#z.h#z${%a${$|#Er$|4w%a4w5b#Er5b5i%a5i6S#Er6S$Ib%a$Ib$Ic.h$Ic$Id.h$Id$I|%a$I|$I}.h$I}$JO.h$JO;'S%a;'S;=`-t<%l?HT%a?HT?HU$6R?HUO%aU%h](PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%aU&hV(PQ'mSOz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}S'SV'mSOz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}S'lVOz(Rz{'i{!P(R!P!Q)^!Q;'S(R;'S;=`)Q<%lO(RS(UVOz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}S(nUOz(R{!P(R!P!Q(k!Q;'S(R;'S;=`)Q<%lO(RS)TP;=`<%l(RS)ZP;=`<%l&}S)cO'nSU)h](PQOY*aYZ,]Zr*ars(Rsz*az{)c{!P*a!P!Q-z!Q#O*a#O#P(R#P;'S*a;'S;=`-n<%lO*aU*f](PQOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%aU+d](PQOY*aYZ,]Zr*ars(Rsz*az{,w{!P*a!P!Q+_!Q#O*a#O#P(R#P;'S*a;'S;=`-n<%lO*aU,bV(PQOz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}Q,|V(PQOY,wYZ-cZr,ws#O,w#P;'S,w;'S;=`-h<%lO,wQ-hO(PQQ-kP;=`<%l,wU-qP;=`<%l*aU-wP;=`<%l%aU.RV(PQ'nSOY,wYZ-cZr,ws#O,w#P;'S,w;'S;=`-h<%lO,w_.q](PQ'kX'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_/sV(PQ'kX'mSOz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}_0c_#RX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!_%a!_!`1b!`#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_1k]#[X(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_2mV'}Q(OX'mSOz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}_3]^(PQ(rX'mSOY%aYZ&aZq%aqr4Xrs&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%aV4bj(PQXP'mSOX6SXY4XYZ@QZ^4X^p6Spq4Xqr6Srs7Usz6Sz{;U{!P6S!P!Q=U!Q!}6S!}#OCn#O#P7U#P#y6S#y#z4X#z$Ib6S$Ib$Ic4X$Ic$Id4X$Id$I|6S$I|$I}4X$I}$JO4X$JO;'S6S;'S;=`?U<%lO6SV6]](PQXP'mSOY6SYZ&aZr6Srs7Usz6Sz{;U{!P6S!P!Q=U!Q#O6S#O#P7U#P;'S6S;'S;=`?U<%lO6ST7]XXP'mSOY7UYZ&}Zz7Uz{7x{!P7U!P!Q9[!Q;'S7U;'S;=`:k<%lO7UT7}XXPOY8jYZ(RZz8jz{7x{!P8j!P!Q:q!Q;'S8j;'S;=`:e<%lO8jT8oXXPOY7UYZ&}Zz7Uz{7x{!P7U!P!Q9[!Q;'S7U;'S;=`:k<%lO7UT9aXXPOY8jYZ(RZz8jz{9|{!P8j!P!Q9[!Q;'S8j;'S;=`:e<%lO8jP:RSXPOY9|Z;'S9|;'S;=`:_<%lO9|P:bP;=`<%l9|T:hP;=`<%l8jT:nP;=`<%l7UT:xSXP'nSOY9|Z;'S9|;'S;=`:_<%lO9|V;]](PQXPOYU{!P]X(PQXPOY>UYZ-cZr>Urs9|s#O>U#O#P9|#P;'S>U;'S;=`>x<%lO>UR>{P;=`<%l>UV?RP;=`<%lUYZ-cZr>Urs9|s#O>U#O#P9|#P;'S>U;'S;=`>x<%lO>UV@Xe(PQ'mSOX&}X^Aj^p&}pqAjqz&}z{'i{!P&}!P!Q(k!Q!}&}!}#OCQ#O#y&}#y#zAj#z$Ib&}$Ib$IcAj$Ic$IdAj$Id$I|&}$I|$I}Aj$I}$JOAj$JO;'S&};'S;=`)W<%lO&}TAoe'mSOX&}X^Aj^p&}pqAjqz&}z{'i{!P&}!P!Q(k!Q!}&}!}#OCQ#O#y&}#y#zAj#z$Ib&}$Ib$IcAj$Ic$IdAj$Id$I|&}$I|$I}Aj$I}$JOAj$JO;'S&};'S;=`)W<%lO&}TCXV'pP'mSOz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}VCy](PQ'pPXP'mSOY6SYZ&aZr6Srs7Usz6Sz{;U{!P6S!P!Q=U!Q#O6S#O#P7U#P;'S6S;'S;=`?U<%lO6S_D{i(PQ(iW'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!c%a!c!}Fj!}#O%a#O#P&}#P#R%a#R#SFj#S#T%a#T#oFj#o${%a${$|Fj$|4w%a4w5bFj5b5i%a5i6SFj6S;'S%a;'S;=`-t<%lO%a_Fsj(PQ^X'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q![Fj![!c%a!c!}Fj!}#O%a#O#P&}#P#R%a#R#SFj#S#T%a#T#oFj#o${%a${$|Fj$|4w%a4w5bFj5b5i%a5i6SFj6S;'S%a;'S;=`-t<%lO%a_Hn_(lX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!_%a!_!`Im!`#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_Iv]#ZX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_Jx_!{X(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!_%a!_!`Im!`#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_LOm(PQ'mSOYMyYZ!!RZrMyrs!#cswMywx! PxzMyz{!$T{!PMy!P!Q!&X!Q!cMy!c!}!']!}#OMy#O#P!+X#P#RMy#R#S!']#S#TMy#T#f!']#f#g!3j#g#o!']#o${My${$|!']$|4wMy4w5b!']5b5iMy5i6S!']6S;'SMy;'S;=`!7d<%lOMy_NQ_(PQ'mSOY%aYZ&aZr%ars&}sw%awx! Pxz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_! Y](PQuX'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!!YX(PQ'mSOw&}wx!!uxz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}]!!|VuX'mSOz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}]!#hX'mSOw&}wx!!uxz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}_!$Y_(PQOY*aYZ,]Zr*ars(Rsw*awx!%Xxz*az{)c{!P*a!P!Q-z!Q#O*a#O#P(R#P;'S*a;'S;=`-n<%lO*a_!%`](PQuXOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!&^_(PQOY*aYZ,]Zr*ars(Rsw*awx!%Xxz*az{,w{!P*a!P!Q+_!Q#O*a#O#P(R#P;'S*a;'S;=`-n<%lO*a_!'fl(PQ'zX'mSOY%aYZ&aZr%ars&}sw%awx! Pxz%az{)c{!P%a!P!Q+_!Q![!)^![!c%a!c!}!)^!}#O%a#O#P&}#P#R%a#R#S!)^#S#T%a#T#o!)^#o${%a${$|!)^$|4w%a4w5b!)^5b5i%a5i6S!)^6S;'S%a;'S;=`-t<%lO%a_!)gj(PQ'zX'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q![!)^![!c%a!c!}!)^!}#O%a#O#P&}#P#R%a#R#S!)^#S#T%a#T#o!)^#o${%a${$|!)^$|4w%a4w5b!)^5b5i%a5i6S!)^6S;'S%a;'S;=`-t<%lO%a]!+^Z'mSOz!#cz{!,P{!P!#c!P!Q!-Z!Q#i!#c#i#j!-v#j#l!#c#l#m!/r#m;'S!#c;'S;=`!3d<%lO!#c]!,SXOw(Rwx!,oxz(Rz{'i{!P(R!P!Q)^!Q;'S(R;'S;=`)Q<%lO(R]!,tVuXOz&}z{'i{!P&}!P!Q(k!Q;'S&};'S;=`)W<%lO&}]!-^WOw(Rwx!,oxz(R{!P(R!P!Q(k!Q;'S(R;'S;=`)Q<%lO(R]!-{^'mSOz&}z{'i{!P&}!P!Q(k!Q![!.w![!c&}!c!i!.w!i#T&}#T#Z!.w#Z#o&}#o#p!1h#p;'S&};'S;=`)W<%lO&}]!.|['mSOz&}z{'i{!P&}!P!Q(k!Q![!/r![!c&}!c!i!/r!i#T&}#T#Z!/r#Z;'S&};'S;=`)W<%lO&}]!/w['mSOz&}z{'i{!P&}!P!Q(k!Q![!0m![!c&}!c!i!0m!i#T&}#T#Z!0m#Z;'S&};'S;=`)W<%lO&}]!0r['mSOz&}z{'i{!P&}!P!Q(k!Q![!#c![!c&}!c!i!#c!i#T&}#T#Z!#c#Z;'S&};'S;=`)W<%lO&}]!1m['mSOz&}z{'i{!P&}!P!Q(k!Q![!2c![!c&}!c!i!2c!i#T&}#T#Z!2c#Z;'S&};'S;=`)W<%lO&}]!2h^'mSOz&}z{'i{!P&}!P!Q(k!Q![!2c![!c&}!c!i!2c!i#T&}#T#Z!2c#Z#q&}#q#r!#c#r;'S&};'S;=`)W<%lO&}]!3gP;=`<%l!#c_!3sm(PQ'zX'mSOY%aYZ&aZr%ars&}st!5ntw%awx! Pxz%az{)c{!P%a!P!Q+_!Q![!)^![!c%a!c!}!)^!}#O%a#O#P&}#P#R%a#R#S!)^#S#T%a#T#o!)^#o${%a${$|!)^$|4w%a4w5b!)^5b5i%a5i6S!)^6S;'S%a;'S;=`-t<%lO%a_!5ui(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!c%a!c!}!)^!}#O%a#O#P&}#P#R%a#R#S!)^#S#T%a#T#o!)^#o${%a${$|!)^$|4w%a4w5b!)^5b5i%a5i6S!)^6S;'S%a;'S;=`-t<%lO%a_!7gP;=`<%lMy_!7s]!QX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!8u]!SX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!9u_(tX(PQOY*aYZ,]Zr*ars(Rsz*az{)c{!P*a!P!Q-z!Q!_*a!_!`!:t!`#O*a#O#P(R#P;'S*a;'S;=`-n<%lO*a_!:{]#ZX(PQOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!;}_'{X(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!_%a!_!`Im!`#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!=V]!nX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!>X`(QX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!_%a!_!`Im!`!a!?Z!a#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!?d]#]X(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!@f^(qX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!O%a!O!P!Ab!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!Ak`!uX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!O%a!O!P!Bm!P!Q+_!Q!_%a!_!`!Co!`#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!Bv]#OX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%aV!Cx](cP(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_!Dx_(PQ(kXOY*aYZ,]Zr*ars(Rsz*az{!Ew{!P*a!P!Q!Fe!Q!_*a!_!`!:t!`#O*a#O#P(R#P;'S*a;'S;=`-n<%lO*a_!FOV'l](PQOY,wYZ-cZr,ws#O,w#P;'S,w;'S;=`-h<%lO,w_!Fl](PQUXOY!GeYZ,]Zr!Gers!J{sz!Gez{# ]{!P!Ge!P!Q!Fe!Q#O!Ge#O#P!J{#P;'S!Ge;'S;=`#!V<%lO!Ge_!Gl](PQUXOY!HeYZ&aZr!Hers!Igsz!Hez{!Mg{!P!He!P!Q!Fe!Q#O!He#O#P!Ig#P;'S!He;'S;=`#!]<%lO!He_!Hn](PQUX'mSOY!HeYZ&aZr!Hers!Igsz!Hez{!Mg{!P!He!P!Q!Fe!Q#O!He#O#P!Ig#P;'S!He;'S;=`#!]<%lO!He]!InXUX'mSOY!IgYZ&}Zz!Igz{!JZ{!P!Ig!P!Q!Km!Q;'S!Ig;'S;=`!L|<%lO!Ig]!J`XUXOY!J{YZ(RZz!J{z{!JZ{!P!J{!P!Q!MS!Q;'S!J{;'S;=`!Lv<%lO!J{]!KQXUXOY!IgYZ&}Zz!Igz{!JZ{!P!Ig!P!Q!Km!Q;'S!Ig;'S;=`!L|<%lO!Ig]!KrXUXOY!J{YZ(RZz!J{z{!L_{!P!J{!P!Q!Km!Q;'S!J{;'S;=`!Lv<%lO!J{X!LdSUXOY!L_Z;'S!L_;'S;=`!Lp<%lO!L_X!LsP;=`<%l!L_]!LyP;=`<%l!J{]!MPP;=`<%l!Ig]!MZSUX'nSOY!L_Z;'S!L_;'S;=`!Lp<%lO!L__!Mn](PQUXOY!GeYZ,]Zr!Gers!J{sz!Gez{!Mg{!P!Ge!P!Q!Ng!Q#O!Ge#O#P!J{#P;'S!Ge;'S;=`#!V<%lO!Ge_!NpX(PQUX'nSOY# ]YZ-cZr# ]rs!L_s#O# ]#O#P!L_#P;'S# ];'S;=`#!P<%lO# ]Z# dX(PQUXOY# ]YZ-cZr# ]rs!L_s#O# ]#O#P!L_#P;'S# ];'S;=`#!P<%lO# ]Z#!SP;=`<%l# ]_#!YP;=`<%l!Ge_#!`P;=`<%l!He_#!ljwX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q![#$^![#O%a#O#P&}#P#R%a#R#S#$^#S#U%a#U#V#0i#V#]%a#]#^#%u#^#c%a#c#d#3a#d#i%a#i#j#%u#j#l%a#l#m#6R#m;'S%a;'S;=`-t<%lO%a_#$gdwX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q![#$^![#O%a#O#P&}#P#R%a#R#S#$^#S#]%a#]#^#%u#^#i%a#i#j#%u#j;'S%a;'S;=`-t<%lO%a_#%|g(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!R%a!R!S#'e!S!T%a!T!U#*y!U!W%a!W!X#,P!X!Y%a!Y!Z#)w!Z#O%a#O#P&}#P#g%a#g#h#-V#h;'S%a;'S;=`-t<%lO%a_#'la(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!S%a!S!T#(q!T!W%a!W!X#)w!X#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_#(x_(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!Y%a!Y!Z#)w!Z#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_#*Q]wX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_#+Q_(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!S%a!S!T#)w!T#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_#,W_(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!U%a!U!V#)w!V#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_#-^_(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P#]%a#]#^#.]#^;'S%a;'S;=`-t<%lO%a_#.d_(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P#n%a#n#o#/c#o;'S%a;'S;=`-t<%lO%a_#/j_(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P#X%a#X#Y#)w#Y;'S%a;'S;=`-t<%lO%a_#0pa(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!R#1u!R!S#1u!S#O%a#O#P&}#P#R%a#R#S#1u#S;'S%a;'S;=`-t<%lO%a_#2OewX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!R#1u!R!S#1u!S#O%a#O#P&}#P#R%a#R#S#1u#S#]%a#]#^#%u#^#i%a#i#j#%u#j;'S%a;'S;=`-t<%lO%a_#3h`(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!Y#4j!Y#O%a#O#P&}#P#R%a#R#S#4j#S;'S%a;'S;=`-t<%lO%a_#4sdwX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q!Y#4j!Y#O%a#O#P&}#P#R%a#R#S#4j#S#]%a#]#^#%u#^#i%a#i#j#%u#j;'S%a;'S;=`-t<%lO%a_#6Yd(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q![#7h![!c%a!c!i#7h!i#O%a#O#P&}#P#R%a#R#S#7h#S#T%a#T#Z#7h#Z;'S%a;'S;=`-t<%lO%a_#7qhwX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q![#7h![!c%a!c!i#7h!i#O%a#O#P&}#P#R%a#R#S#7h#S#T%a#T#Z#7h#Z#]%a#]#^#%u#^#i%a#i#j#%u#j;'S%a;'S;=`-t<%lO%a_#9f_qX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q![%a![!]#:e!]#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_#:n]cX(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_#;p]|X(PQ'mSOY%aYZ&aZr%ars&}sz%az{)c{!P%a!P!Q+_!Q#O%a#O#P&}#P;'S%a;'S;=`-t<%lO%a_#vq[t]||-1}],tokenPrec:18860});var _q=fe.define({name:"rust",parser:Ub.configure({props:[se.add({IfExpression:ue({except:/^\s*({|else\b)/}),"String BlockComment":()=>null,AttributeItem:t=>t.continue(),"Statement MatchArm":ue()}),le.add(t=>{if(/(Block|edTokens|List)$/.test(t.name))return we;if(t.name=="BlockComment")return e=>({from:e.from+2,to:e.to-2})})]}),languageData:{commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:\{|\})$/,closeBrackets:{stringPrefixes:["b","r","br"]}}});function Vb(){return new oe(_q)}var Zq=177,Rq=179,Yq=184,zq=12,qq=13,Uq=17,Vq=20,Wq=25,jq=53,Gq=95,Cq=142,Eq=144,Aq=145,Lq=148,Iq=10,Mq=13,Dq=32,Nq=9,Wb=47,Bq=41,Fq=125,Hq=new D((t,e)=>{for(let O=0,i=t.next;(e.context&&(i<0||i==Iq||i==Mq||i==Wb&&t.peek(O+1)==Wb)||i==Bq||i==Fq)&&t.acceptToken(Zq),!(i!=Dq&&i!=Nq);)i=t.peek(++O)},{contextual:!0}),Kq=new Set([Gq,Yq,Vq,zq,Uq,Eq,Aq,Cq,Lq,qq,jq,Wq]),Jq=new st({start:!1,shift:(t,e)=>e==Rq?t:Kq.has(e)}),eU=re({"func interface struct chan map const type var":u.definitionKeyword,"import package":u.moduleKeyword,"switch for go select return break continue goto fallthrough case if else defer":u.controlKeyword,range:u.keyword,Bool:u.bool,String:u.string,Rune:u.character,Number:u.number,Nil:u.null,VariableName:u.variableName,DefName:u.definition(u.variableName),TypeName:u.typeName,LabelName:u.labelName,FieldName:u.propertyName,"FunctionDecl/DefName":u.function(u.definition(u.variableName)),"TypeSpec/DefName":u.definition(u.typeName),"CallExpr/VariableName":u.function(u.variableName),LineComment:u.lineComment,BlockComment:u.blockComment,LogicOp:u.logicOperator,ArithOp:u.arithmeticOperator,BitOp:u.bitwiseOperator,"DerefOp .":u.derefOperator,"UpdateOp IncDecOp":u.updateOperator,CompareOp:u.compareOperator,"= :=":u.definitionOperator,"<-":u.operator,'~ "*"':u.modifier,"; ,":u.separator,"... :":u.punctuation,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace}),tU={__proto__:null,package:10,import:18,true:380,false:380,nil:383,struct:48,func:68,interface:78,chan:94,map:118,make:157,new:159,const:204,type:212,var:224,if:236,else:238,switch:242,case:248,default:250,for:260,range:266,go:270,select:274,return:284,break:288,continue:290,goto:292,fallthrough:296,defer:300},jb=de.deserialize({version:14,states:"!=xO#{QQOOP$SOQOOO&UQTO'#CbO&]QRO'#FlO]QQOOOOQP'#Cn'#CnOOQP'#Co'#CoO&eQQO'#C|O(kQQO'#C{O)]QRO'#GiO+tQQO'#D_OOQP'#Ge'#GeO+{QQO'#GeO.aQTO'#GaO.hQQO'#D`OOQP'#Gm'#GmO.mQRO'#GdO/hQQO'#DgOOQP'#Gd'#GdO/uQQO'#DrO2bQQO'#DsO4QQTO'#GqO,^QTO'#GaO4XQQO'#DxO4^QQO'#D{OOQO'#EQ'#EQOOQO'#ER'#EROOQO'#ES'#ESOOQO'#ET'#ETO4cQQO'#EPO5}QQO'#EPOOQP'#Ga'#GaO6UQQO'#E`O6^QQO'#EcOOQP'#G`'#G`O6cQQO'#EsOOQP'#G_'#G_O&]QRO'#FnOOQO'#Fn'#FnO9QQQO'#G^QOQQOOO&]QROOO9XQQO'#C`O9^QSO'#CdO9lQQO'#C}O9tQQO'#DSO9yQQO'#D[O:kQQO'#CsO:pQQO'#DhO:uQQO'#EeO:}QQO'#EiO;VQQO'#EoO;_QQO'#EuOPQSO7+%hOOQP7+%h7+%hO4cQQO7+%hOOQP1G0Q1G0QO!>^QQO1G0QOOQP1G0U1G0UO!>fQQO1G0UOF|QQO1G0UOOQO,5nAN>nO4cQQOAN>nO!IsQSOAN>nOOQP<nQQO'#FrOOQO,5vAN>vO!LtQQOAN>vP.hQQO'#F|OOQPG25XG25XO!LyQQOG25bO!MOQQO'#FPOOQPG25bG25bO!MZQQOG25bOOQPLD)tLD)tOOQPG24bG24bO!JqQQOLD*|O!9OQQO'#GQO!McQQO,5;kOOQP,5;k,5;kO?tQQO'#FQO!MnQQO'#FQO!MsQQOLD*|OOQP!$'Nh!$'NhOOQO,5VO^!hOh!POr-TOw}O!P-_O!Q-`O!W-^O!]-eO%O!eO%Y!fO~OZ!sO~O^#uO~O!P$xO~On!lO#W%]aV%]a^%]ah%]ar%]aw%]a!P%]a!Q%]a!W%]a!]%]a#T%]a$w%]a%O%]a%Y%]au%]a~O]${O^#QO~OZ#RO^#VO!W#SO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[O%q#]O~O]$|O!|,WO~PBROj!qOn%QO!QnOi%cP~P*aO!V%WO!|#`O~PBRO!V%YO~OV!}O[oO^YOaoOdoOh!POjcOr!pOw}O!P!OO!QnO!WaO!]!QO!phO!qhO#Y!RO#^!SO#d!TO#j!UO#m!VO#v!WO#{!XO#}!YO$S!ZO$U![O$V![O$W!]O$Y!^O$[!_O%OQO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~Oi%dX#p%dX#q%dX~PDQOi%]O~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!Q-QO!WaO!]!QO!phO!qhO%O+{O%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O^%aO%O%_O~O!QnO!a%cO~P*aO!QnOn$mX#T$mX#U$mXV$mX$w$mX!a$mX~P*aOn#TO#T%ea#U%eaV%ea$w%ea!a%ea~O]%fO~PF|OV#ga$w#ga~PDTO[%sO~OZ#rO[#qO]%vO%O#oO~O^!hOh!POn%zOr-TOu%xOw}O!P-_O!Q-`O!W-^O!]-eO%O,dO%Y!fO]%[P~O^&OOh!POr!jOw}O!P!OO!Q!kO!WaO!]!QO%Y!fO^%ZXj%ZX~O%O%}O~PKfOjcO^qa]qanqa!Vqa~O^#uO!W&SO~O^!hOh!POr-TOw}O{&WO!P-_O!Q-`O!W-^O!]-eO%O,xO%Y!fO~Oi&^O~PL{O^!hOh!POr!jOw}O!Q!kO!WaO!]!QO%O!eO%Y!fO~O!P#hO~PMwOi&eO%O,yO%Y!fO~O#T&gOV#ZX$w#ZX~P?tO]&kO%O#oO~O^!hOh!POr-TOw}O!P-_O!Q-`O!]-eO%O!eO%Y!fO~O!W&lO#T&mO~P! _O]&qO%O#oO~O#T&sOV#eX$w#eX~P?tO]&vO%O#oO~OjeX~P$XOjcO!|,XO~P2gOn!lO#W&yO#W%]X~O^#VOn#TO!Q#cO!W#SO!|,XO#R#dO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[O%q#]OV`X#T%eX#U%eX~OZ&zOj$`O$w`X~P!#cOi'OO#p'PO#q'QO~OZ#ROjcO~P!#cO#T'TO#U#iO~O#W'UO~OV'WO!QnO~P*aOV'XO~OjcO~O!|#`OV#za$w#za~PBROi'[O#p']O#q'^O~On#TO!|#`OV%eX$w%eX!a%eX~PBRO!|#`OV$Za$w$Za~PBRO${$rO$|$rO$}'`O~O]${O~O%O!eO]%ZXn%ZX!V%ZX~PKfO!|#`Oi!_Xn!_X!a!`X~PBROi!_Xn!_X!a!`X~O!a'aO~On'bOi%cX~Oi'dO~On'eO!V%bX!a%bX~O!V'gO~O]'jOn'kO!|,YO~PBROn'nO!V'mO!a'oO!|#`O~PBRO!QnO!V'qO!a'rO~P*aO!|#`On$ma#T$ma#U$maV$ma$w$ma!a$ma~PBRO]'sOu'tO~O%Y#XO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOV!xiZ!xi^!xin!xi!Q!xi!W!xi!|!xi#R!xi#T!xi#U!xi$w!xi%`!xi%f!xi%g!xi%i!xi%p!xi%q!xi~O!V!xii!xi!a!xi~P!+YO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOV!xiZ!xi^!xin!xi!Q!xi!W!xi#R!xi#T!xi#U!xi$w!xi%p!xi%q!xi!V!xii!xi!a!xi~O!|!xi~P!-TO!|#`O~P!-TO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[OV!xiZ!xi^!xin!xi!Q!xi!W!xi#R!xi#T!xi#U!xi$w!xi%q!xi~O!|#`O!V!xii!xi!a!xi~P!/VO!|#`OV#Pi$w#Pi!a#Pi~PBRO]'uOn'wOu'vO~OZ#rO[#qO]'zO%O#oO~Ou'|O~P?tOn'}O]%[X~O](PO~OZeX^mX^!TXj!TX!W!TX~OjcOV$]i$w$]i~O%`(ZOV%^X$w%^Xn%^X!V%^X~Oi(`O~PL{O[(aO!W!tOVlX$wlX~On(bO~P?tO[(aOVlX$wlX~Oi(hO%O,yO%Y!fO~O!V(iO~O#T(kO~O](nO%O#oO~O[oO^YOaoOdoOh!POr!pOu-bOw}O!P!OO!QnO!V-UO!WaO!]!QO!phO!qhO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O%O+zO~P!4vO](sO%O#oO~O#T(tOV#ea$w#ea~O](xO%O#oO~O#k(yOV#ii$w#ii~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!Q-PO!WaO!]!QO!phO!qhO%O+xO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O^(|O%O%_O~O#p%dP#q%dP~P/uOi)PO#p'PO#q'QO~O!a)RO~O!QnO#y)VO~P*aOV)WO!|#`O~PBROj#wa~P;_OV)WO!QnO~P*aOi)]O#p']O#q'^O~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!QnO!WaO!]!QO!phO!qhO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O%O,eO~P!:lO!a)bO~Oj!qO!QnO~P*aOj!qO!QnOi%ca~P*aOn)iOi%ca~O!V%ba!a%ba~P?tOn)lO!V%ba!a%ba~O])nO~O])oO~O!V)pO~O!QnO!V)rO!a)sO~P*aO!V)rO!a)sO!|#`O~PBRO])uOn)vO~O])wOn)xO~O^!hOh!POr-TOu%xOw}O!P-_O!Q-`O!W-^O!]-eO%O,dO%Y!fO~O]%[a~P!>nOn)|O]%[a~O]${O]tXntX~OjcOV$^q$w$^q~On*PO{&WO~P?tOn*SO!V%rX~O!V*UO~OjcOV$]q$w$]q~O%`(ZOV|a$w|an|a!V|a~O[*]OVla$wla~O[*]O!W!tOVla$wla~On*PO{&WO!W*`O^%WXj%WX~P! _OjcO#j!UO~OjcO!|,XO~PBROZ*dO^#VO!W#SO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[O%q#]O~O!|#`O~P!BoO#^*eO~P?tO!a*fO~Oj$`O!|,XO~P!BoO#W*hO~Oj#wi~P;_OV*kO!|#`O~PBROn#TO!Q#cO!|#`O!a$QX#T%eX~PBRO#T*lO~O#W*lO~O!a*mO~O!|#`Oi!_in!_i~PBRO!|#`Oi!bXn!bX!a!cX~PBROi!bXn!bX!a!cX~O!a*nO~Oj!qO!QnOi%ci~P*aO!V%bi!a%bi~P?tO!V*qO!a*rO!|#`O~PBRO!V*qO!|#`O~PBRO]*tO~O]*uO~O]*uOu*vO~O]%[i~P!>nO%O!eO!V%ra~On*|O!V%ra~O[+OOVli$wli~O%O+yO~P!4vO#k+QOV#iy$w#iy~O^+RO%O%_O~O]+SO~O!|,XOj#xq~PBROj#wq~P;_O!V+ZO!|#`O~PBRO]+[On+]O~O%O!eO!V%ri~O^#QOn'eO!V%bX~O#^+`O~P?tOj+aO~O^#VO!W#SO!|#`O%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[O%q#]O~OZ+cO~P!JvO!|#`O!a$Qi~PBRO!|#`Oi!bin!bi~PBRO!V+dO!|#`O~PBRO]+eO~O]+fO~Oi+iO#p+jO#q+kO~O^+lO%O%_O~Oi+pO#p+jO#q+kO~O!a+rO~O#^+sO~P?tO!a+tO~O]+uO~OZeX^eX^!TXj!TX!WeX!W!TX!|eX%YeX%`eX%feX%geX%ieX%jeX%keX%leX%meX%neX%oeX%peX%qeXVeXneX!QeX#ReX#TeX#UeX$weX~O]eX]!TX!VeXieX!aeX~P!NUOjeX~P!NUOZeX^eX^!TXj!TX!WeX!W!TX!|eX%YeX%`eX%feX%geX%ieX%jeX%keX%leX%meX%neX%oeX%peX%qeXn!TX!VeX~O]eX!V!TX~P#!gOh!TXr!TXw!TX{!TX!P!TX!Q!TX!]!TX%O!TX%Y!TX~P#!gOZeX^eX^!TXj!TXneX!WeX!W!TX!|eX%YeX%`eX%feX%geX%ieX%jeX%keX%leX%meX%neX%oeX%peX%qeX~O]eXueX~P#$xO]$mXn$mXu$mX~PF|Oj$mXn$mX~P!7`On+|O]%eau%ea~On+}Oj%ea~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!Q-OO!WaO!]!QO!phO!qhO%O+yO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~OZeX]!TX^UXhUXnUXn!TXrUXuUXwUX!PUX!QUX!WUX!W!TX!]UX%OUX%YUX~OnUX!QeX!aeX#TeX#WUX~P#$xOn+|O!|,YO]%eXu%eX~PBROn+}O!|,XOj%eX~PBRO^&OOV%ZXj%ZX$w%ZX]%ZXn%ZX!V%ZXu%ZX%`%ZX#T%ZX[%ZX!a%ZX~P?wO!|,YO]$man$mau$ma~PBRO!|,XOj$man$ma~PBRO%Y#XO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOZ!xi]!xi^!xi!W!xi!|!xi%`!xi%f!xi%g!xi%i!xi%p!xi%q!xi~Oj!xi~P!+YOn!xiu!xi~P#,hO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOZ!xi]!xi^!xi!W!xi!|!xi%p!xi%q!xi~O%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOV!xiZ!xi^!xij!xin!xi!Q!xi!W!xi#R!xi#T!xi#U!xi$w!xi%p!xi%q!xi~O!|!xi~P#/_On!xiu!xi~P#.TO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOZ!xi]!xi^!xi!W!xi%p!xi%q!xi~O!|,WO~P#1^O!|,XO~P#/_O!|,YOn!xiu!xi~P#1^O%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[OZ!xi]!xi^!xi!W!xi%q!xi~O!|,WO~P#3QO!|,XOj!xi~P!/VO!|,YOn!xiu!xi~P#3QO!|,XOj#Pi~PBROV!TXZeX^mX!W!TX$w!TX~O%`!TX~P#5RO[!TXhmXnmXrmXwmX!PmX!QmX!WmX!]mX%OmX%YmX~P#5ROn#TO!Q,aO!|,XO#R#dOj`X#T%eX#U%eX~PBRO[oO^YOaoOdoOh!POr!pOw}O!P#hO!WaO!]!QO!phO!qhO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O!Q-OO%O+yO~P#6{O!Q-PO%O+xO~P#6{O!Q-QO%O+{O~P#6{O#T,bO#U,bO~O#W,cO~O^!hOh!POr-TOw}O!P-_O!Q-WO!W-^O!]-eO%O!eO%Y!fO~O^!hOh!POr-TOw}O!Q-`O!W-^O!]-eO%O!eO%Y!fO~O!P-VO~P#9zO%O+wO~P!4vO!P-XO~O!V-YO!|#`O~PBRO!V-ZO~O!V-[O~O!W-dO~OP%ka%Oa~",goto:"!FW%sPP%tP%wP%zP'SP'XPPPP'`'cP'u'uP)w'u-_PPP0j0m0qP1V4b1VP7s8WP1VP8a8d8hP8p8w1VPP1V8{<`?vPPCY-_-_-_PCdCuCxPC{DQ'u'uDV'uES'u'u'u'uGUIW'uPPJR'uJUMjMjMj'u! r! r!#SP!$`!%d!&d'cP'cPP'cP!&yP!'V!'^!&yP!'a!'h!'n!'w!&yP!'z!(R!&y!(U!(fPP!&yP!(x!)UPP!&y!)Y!)c!&yP!)g!)gP!&yP!&yP!)j!)m!&v!&yP!&yPPP!&yP!&yP!)q!)q!)w!)}!*U!*[!*d!*j!*p!*w!*}!+T!+Z!.q!.x!/O!/X!/m!/s!/z!0Q!0W!0^!0d!0jPPPPPPPPP!0p!1f!1k!1{!2kPP!7P!:^P!>u!?Z!?_!@Z!@fP!@p!D_!Df!Di!DuPPPPPPPPPPPP!FSR!aPRyO!WXOScw!R!T!U!W#O#k#n#u$R$X&O&j&u&|'W'Y']'})W)|*k*w+gQ#pzU#r{#s%uQ#x|U$T!S$U&pQ$^!VQ$y!lR)U'RVROS#nQ#t{T%t#s%uR#t{qrOScw!U!V!W#O#k#n&|'W'Y)W*k+g%PoOSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^%O]OSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^#u!iW^!O!h!t!z#e#h#u#v#y#|#}$P$Q$T$W$v$x%W%Y%a%x%y&O&S&W&]&`&b&d&m'e'|'}(S([(c(i(o(|)l)|*P*Q*S*p*w*|+R+^+j+l,h-U-V-W-X-Y-Z-[-]-_-d'cbOSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&W&]&`&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*Q*`*h*k*l*n*o*p*r*w+R+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dR$O!PT&c#}&dW%`#R&z*d+cQ&Q#vS&V#y&]S&`#}&dR*Y(b'cZOSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&W&]&`&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*Q*`*h*k*l*n*o*p*r*w+R+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-d%fWOSWYacmnw!O!U!V!W!X!Z!_!q!z#O#Q#S#T#V#^#_#`#a#b#c#h#i#j#k#n#v#|$f$v$x%W%Y%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(i(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^S&b#}&d!{-]!h!t#e#u#y$P$Q$T$W%a%x%y&O&W&]&`&m'e'|'}(S([(c(o(|)l)|*Q*p*w+R+j+l,h-U-V-W-X-Y-Z-[-]-_-dQ#v|S$v!j!pU&P#v$v,hZ,h#x&Q&U&V-TS%{#u&OV){'})|*wR#z}T&[#y&]]&X#y&](S([(o*QZ&Z#y&](S(o*QT([&Y(]'s_OSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|#}$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&S&W&]&`&b&d&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*P*Q*S*`*h*k*l*n*o*p*r*w*|+R+^+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-d'r_OSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|#}$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&S&W&]&`&b&d&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*P*Q*S*`*h*k*l*n*o*p*r*w*|+R+^+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dR!w^'bbOSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&W&]&`&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*Q*`*h*k*l*n*o*p*r*w+R+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dS&a#}&dR(d&bS!u]fX!x`&_(e(oQ!r[Q%O!qQ)d'aU)f'b)i*oR+X*nR%R!qR%P!qV)h'b)i*oV)g'b)i*odtOScw#O#k#n&|'Y+gQ$h!WQ&R#wQ&w$[S'S$c$iQ(V&TQ*O(RQ*V(WQ*b(yQ*c(zR+_+Q%PfOSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^%PgOSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^!q#Weg!o!y$[$_$c$j$m$q$}%^%b%d%m'V'p(z({)S)Y)^)c)e)q)t*i*s+T+V+W+Y,f,g,i,j,w,z-aR#fh#^mOSacmnw!X!Z!_!q#O#S#T#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&y&|'P'T'U'X'Y']'a'b'o'r(k(t)i)s*`*h*l*n*o*r+g-^!W#_e!y$j$m$q$}%b%d%j%k%l%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aW,T!o,n,q,tj,U$[$_$c(z)S*i,g,j,o,r,u,w,z[,V%^,f,i,p,s,v`,{Y,Q,T,W,Z,^,{-Ox,|!U!V!W&x'R'W)V)W*k+},R,U,X,[,_,a,b,c,|-Pg,}#Q#V'w+|,S,V,Y,],`,}-Q#^mOSacmnw!X!Z!_!q#O#S#T#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&y&|'P'T'U'X'Y']'a'b'o'r(k(t)i)s*`*h*l*n*o*r+g-^`,{Y,Q,T,W,Z,^,{-Ox,|!U!V!W&x'R'W)V)W*k+},R,U,X,[,_,a,b,c,|-Pg,}#Q#V'w+|,S,V,Y,],`,}-Q!Y#^e!y$j$m$q$}%b%d%i%j%k%l%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aY,Q!o,k,n,q,tl,R$[$_$c(z)S*i,g,j,l,o,r,u,w,z_,S%^,f,i,m,p,s,v!W#_e!y$j$m$q$}%b%d%j%k%l%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aW,T!o,n,q,tj,U$[$_$c(z)S*i,g,j,o,r,u,w,z],V%^,f,i,p,s,v!S#ae!y$j$m$q$}%b%d%l%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aS,Z!o,tf,[$[$_$c(z)S*i,g,j,u,w,zX,]%^,f,i,v!Q#be!y$j$m$q$}%b%d%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aQ,^!od,_$[$_$c(z)S*i,g,j,w,zV,`%^,f,iprOScw!U!V!W#O#k#n&|'W'Y)W*k+gR)a']etOScw#O#k#n&|'Y+gQ$S!RT&i$R&jR$S!RQ$V!ST&o$U&pQ&U#xR&m$TS(T&S&lV*{*S*|+^R$V!SQ$Y!TT&t$X&uR$Y!TdsOScw#O#k#n&|'Y+gT$p![!]dtOScw#O#k#n&|'Y+gQ*b(yR+_+QQ$a!VQ&{$_Q)T'RR*g)ST&|$`&}Q+b+SQ+m+fR+v+uT+g+a+hR$i!WR$l!YT'Y$k'ZXuOSw#nQ$s!`R'_$sSSO#nR!dSQ%u#sR'y%uUwOS#nR#mwQ&d#}R(g&dQ(c&`R*Z(cS!mX$^R$z!mQ(O%{R)}(OQ&]#yR(_&]Q(]&YR*X(]'r^OSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|#}$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&S&W&]&`&b&d&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*P*Q*S*`*h*k*l*n*o*p*r*w*|+R+^+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dR!v^S'f%T+PR)m'fQ'c%RR)j'cW#Oc&|'Y+gR%[#O^#Ue$[$_$c$m)^,zU%e#U,O,PQ,O,fR,P,gQ&j$RR(m&jS*Q(S(oR*y*QQ*T(TR*}*TQ&p$UR(r&pQ&u$XR(w&uQ&}$`R)O&}Q+h+aR+o+hQ'Z$kR)['ZQ!cRQ#luQ#nyQ%Z!|Q&x$]Q'R$bQ'x%tQ(^&[Q(f&cQ(l&iQ(q&oR(v&tVxOS#nWuOSw#nY!|c#O&|'Y+gR%r#kdtOScw#O#k#n&|'Y+gQ$]!UQ$b!VQ$g!WQ)X'WQ*j)WR+U*kdeOScw#O#k#n&|'Y+gQ!oYQ!ya`#gmn,{,|,}-O-P-QQ$[!UQ$_!VQ$c!WQ$j!Xd$m!Z#i#j&g&s'P'T'U(k(tQ$q!_Q$}!qQ%^#QQ%b#SQ%d#TW%h#^,Q,R,SQ%i#_Q%j#`Q%k#aQ%l#bQ%m#cQ'V$fQ'p%cQ(z&xQ({&yQ)S'RQ)Y'XQ)^']Q)c'aU)e'b)i*oQ)q'oQ)t'rQ*i)VQ*s)sQ+T*hQ+V*lQ+W*nQ+Y*rS,f#V'wS,g,b,cQ,i+|Q,j+}Q,k,TQ,l,UQ,m,VQ,n,WQ,o,XQ,p,YQ,q,ZQ,r,[Q,s,]Q,t,^Q,u,_Q,v,`Q,w,aU,z'W)W*kV-a&l*`-^#bZW!O!h!t!z#e#h#u#v#y#|$P$Q$T$W$v$x%W%Y%a%x%y&O&W&]&`&m'e'|'}(S([(c(i(o(|)l)|*Q*p*w+R+j+l,h-U-V-W-X-Y-Z-[-]-_-d%P[OSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^$zdOSacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^S!gW-]Q!nYS#{!O-_Q$u!hS%T!t+jS%X!z-UQ%n#e[%o#h#|$x-V-W-XW%w#u'})|*wU&P#v$v,h[&X#y&](S([(o*QQ&f$PQ&h$QQ&n$TQ&r$WS'h%W-YS'i%Y-ZW'l%a(|+R+lS'{%x%yQ(Q&OQ(Y&WQ(d&`Q(p&mU)k'e)l*pQ)z'|Q*[(cS*^(i-[Q+P*`R-c-dS#w|!pS$w!j-TQ&T#xQ(R&QQ(W&UR(X&VT%|#u&OhqOScw!U!V#O#k#n&|'Y+gU$Q!R$R&jU$W!T$X&uQ$e!WY%y#u&O'})|*wQ)`']V-S'W)W*kS&[#y&]S*R(S(oR*z*QY&Y#y&](S(o*QR*W(['``OSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&W&]&`&g&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*Q*`*h*k*l*n*o*p*r*w+R+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dS&_#}&dW(S&S*S*|+^Q(e&bQ(o&lR*x*PS%U!t*`R+q+jR%S!qQ#PcQ(}&|Q)Z'YR+n+ghpOScw!U!V#O#k#n&|'Y+gQ$d!WQ$n!ZQ%g#VU%p#i'T,bU%q#j'U,cQ(j&gQ(u&sQ)Q'PQ)_']Q)y'wQ*_(kQ*a(tV-R'W)W*kT(U&S&l",nodeNames:"\u26A0 LineComment BlockComment SourceFile PackageClause package DefName ; ImportDecl import ImportSpec . String ) ( SpecList ExprStatement Number Bool Nil Rune VariableName TypedLiteral StructType struct } { StructBody FieldDecl FieldName , PointerType * FunctionType func Parameters Parameter ... InterfaceType interface InterfaceBody MethodElem UnderlyingType ~ TypeElem LogicOp ChannelType chan <- ParenthesizedType QualifiedType TypeName ParameterizedType ] [ TypeArgs ArrayType SliceType MapType map LiteralValue Element Key : Element Key ParenthesizedExpr FunctionLiteral Block Conversion SelectorExpr IndexExpr SliceExpr TypeAssertion CallExpr ParameterizedExpr Arguments CallExpr make new Arguments UnaryExp ArithOp LogicOp BitOp DerefOp BinaryExp ArithOp BitOp BitOp CompareOp LogicOp LogicOp SendStatement IncDecStatement IncDecOp Assignment = UpdateOp VarDecl := ConstDecl const ConstSpec SpecList TypeDecl type TypeSpec TypeParams TypeParam SpecList VarDecl var VarSpec SpecList LabeledStatement LabelName IfStatement if else SwitchStatement switch SwitchBlock Case case default TypeSwitchStatement SwitchBlock Case ForStatement for ForClause RangeClause range GoStatement go SelectStatement select SelectBlock Case ReceiveStatement ReturnStatement return GotoStatement break continue goto FallthroughStatement fallthrough DeferStatement defer FunctionDecl MethodDecl",maxTerm:218,context:Jq,nodeProps:[["isolate",-3,2,12,20,""],["group",-18,12,17,18,19,20,21,22,66,67,69,70,71,72,73,74,77,81,86,"Expr",-20,16,68,93,94,96,99,101,105,111,115,117,120,126,129,134,136,141,143,147,149,"Statement",-12,23,31,33,38,46,49,50,51,52,56,57,58,"Type"],["openedBy",13,"(",25,"{",53,"["],["closedBy",14,")",26,"}",54,"]"]],propSources:[eU],skippedNodes:[0,1,2,153],repeatNodeCount:23,tokenData:":b~RvXY#iYZ#i]^#ipq#iqr#zrs$Xuv&Pvw&^wx&yxy(qyz(vz{({{|)T|})e}!O)j!O!P)u!P!Q+}!Q!R,y!R![-t![!]2^!]!^2k!^!_2p!_!`3]!`!a3e!c!}3x!}#O4j#P#Q4o#Q#R4t#R#S4|#S#T9X#T#o3x#o#p9q#p#q9v#q#r:W#r#s:]$g;'S3x;'S;=`4d<%lO3x~#nS$y~XY#iYZ#i]^#ipq#iU$PP%hQ!_!`$SS$XO!|S~$^W[~OY$XZr$Xrs$vs#O$X#O#P${#P;'S$X;'S;=`%y<%lO$X~${O[~~%ORO;'S$X;'S;=`%X;=`O$X~%^X[~OY$XZr$Xrs$vs#O$X#O#P${#P;'S$X;'S;=`%y;=`<%l$X<%lO$X~%|P;=`<%l$X~&UP%l~!_!`&X~&^O#U~~&cR%j~vw&l!_!`&X#Q#R&q~&qO%p~~&vP%o~!_!`&X~'OWd~OY&yZw&ywx'hx#O&y#O#P'm#P;'S&y;'S;=`(k<%lO&y~'mOd~~'pRO;'S&y;'S;=`'y;=`O&y~(OXd~OY&yZw&ywx'hx#O&y#O#P'm#P;'S&y;'S;=`(k;=`<%l&y<%lO&y~(nP;=`<%l&y~(vO^~~({O]~~)QP%Y~!_!`&X~)YQ%f~{|)`!_!`&X~)eO#R~~)jOn~~)oQ%g~}!O)`!_!`&X~)zRZS!O!P*T!Q![*`#R#S+w~*WP!O!P*Z~*`Ou~Q*eTaQ!Q![*`!g!h*t#R#S+w#X#Y*t#]#^+rQ*wS{|+T}!O+T!Q![+^#R#S+lQ+WQ!Q![+^#R#S+lQ+cRaQ!Q![+^#R#S+l#]#^+rQ+oP!Q![+^Q+wOaQQ+zP!Q![*`~,SR%k~z{,]!P!Q,b!_!`&X~,bO$z~~,gSP~OY,bZ;'S,b;'S;=`,s<%lO,b~,vP;=`<%l,bQ-O[aQ!O!P*`!Q![-t!d!e.c!g!h*t!q!r/Z!z!{/x#R#S.]#U#V.c#X#Y*t#]#^+r#c#d/Z#l#m/xQ-yUaQ!O!P*`!Q![-t!g!h*t#R#S.]#X#Y*t#]#^+rQ.`P!Q![-tQ.fR!Q!R.o!R!S.o#R#S/QQ.tSaQ!Q!R.o!R!S.o#R#S/Q#]#^+rQ/TQ!Q!R.o!R!S.oQ/^Q!Q!Y/d#R#S/rQ/iRaQ!Q!Y/d#R#S/r#]#^+rQ/uP!Q!Y/dQ/{T!O!P0[!Q![1c!c!i1c#R#S2Q#T#Z1cQ0_S!Q![0k!c!i0k#R#S1V#T#Z0kQ0pVaQ!Q![0k!c!i0k!r!s*t#R#S1V#T#Z0k#]#^+r#d#e*tQ1YR!Q![0k!c!i0k#T#Z0kQ1hWaQ!O!P0k!Q![1c!c!i1c!r!s*t#R#S2Q#T#Z1c#]#^+r#d#e*tQ2TR!Q![1c!c!i1c#T#Z1c~2cP!a~!_!`2f~2kO#W~~2pOV~~2uR!|S}!O3O!^!_3T!_!`$S~3TO!Q~~3YP%m~!_!`&X~3bP#T~!_!`$S~3jQ!|S!_!`$S!`!a3p~3uP%n~!_!`&X~3}V%O~!Q![3x!c!}3x#R#S3x#T#o3x$g;'S3x;'S;=`4d<%lO3x~4gP;=`<%l3x~4oO!W~~4tO!V~~4yP%i~!_!`&X~5RV%O~!Q![5h!c!}3x#R#S3x#T#o3x$g;'S3x;'S;=`4d<%lO3x~5o^aQ%O~!O!P*`!Q![5h!c!g3x!g!h6k!h!}3x#R#S4|#T#X3x#X#Y6k#Y#]3x#]#^8k#^#o3x$g;'S3x;'S;=`4d<%lO3x~6pX%O~{|+T}!O+T!Q![7]!c!}3x#R#S8P#T#o3x$g;'S3x;'S;=`4d<%lO3x~7dXaQ%O~!Q![7]!c!}3x#R#S8P#T#]3x#]#^8k#^#o3x$g;'S3x;'S;=`4d<%lO3x~8UV%O~!Q![7]!c!}3x#R#S3x#T#o3x$g;'S3x;'S;=`4d<%lO3x~8rVaQ%O~!Q![3x!c!}3x#R#S3x#T#o3x$g;'S3x;'S;=`4d<%lO3x~9[TO#S9X#S#T$v#T;'S9X;'S;=`9k<%lO9X~9nP;=`<%l9X~9vOj~~9{Q%`~!_!`&X#p#q:R~:WO%q~~:]Oi~~:bO{~",tokenizers:[Hq,1,2,new vt("j~RQYZXz{^~^O$|~~aP!P!Qd~iO$}~~",25,181)],topRules:{SourceFile:[0,3]},dynamicPrecedences:{19:1,51:-1,55:2,69:-1,108:-1},specialized:[{term:184,get:t=>tU[t]||-1}],tokenPrec:5451});var OU=[B("func ${name}(${params}) ${type} {\n ${}\n}",{label:"func",detail:"declaration",type:"keyword"}),B("func (${receiver}) ${name}(${params}) ${type} {\n ${}\n}",{label:"func",detail:"method declaration",type:"keyword"}),B("var ${name} = ${value}",{label:"var",detail:"declaration",type:"keyword"}),B("type ${name} ${type}",{label:"type",detail:"declaration",type:"keyword"}),B("const ${name} = ${value}",{label:"const",detail:"declaration",type:"keyword"}),B("type ${name} = ${type}",{label:"type",detail:"alias declaration",type:"keyword"}),B("for ${init}; ${test}; ${update} {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),B("for ${i} := range ${value} {\n ${}\n}",{label:"for",detail:"range",type:"keyword"}),B(`select { + \${} +}`,{label:"select",detail:"statement",type:"keyword"}),B("case ${}:\n${}",{label:"case",type:"keyword"}),B("switch ${} {\n ${}\n}",{label:"switch",detail:"statement",type:"keyword"}),B("switch ${}.(${type}) {\n ${}\n}",{label:"switch",detail:"type statement",type:"keyword"}),B("if ${} {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),B(`if \${} { + \${} +} else { + \${} +}`,{label:"if",detail:"/ else block",type:"keyword"}),B('import ${name} "${module}"\n${}',{label:"import",detail:"declaration",type:"keyword"})],Gb=new Lt,Eb=new Set(["SourceFile","Block","FunctionDecl","MethodDecl","FunctionLiteral","ForStatement","SwitchStatement","TypeSwitchStatement","IfStatement"]);function Yn(t,e){return(O,i)=>{e:for(let n=O.node.firstChild,r=0,a=null;;){for(;!n;){if(!r)break e;r--,n=a.nextSibling,a=a.parent}e&&n.name==e||n.name=="SpecList"?(r++,a=n,n=n.firstChild):(n.name=="DefName"&&i(n,t),n=n.nextSibling)}return!0}}var iU={FunctionDecl:Yn("function"),VarDecl:Yn("var","VarSpec"),ConstDecl:Yn("constant","ConstSpec"),TypeDecl:Yn("type","TypeSpec"),ImportDecl:Yn("constant","ImportSpec"),Parameter:Yn("var"),__proto__:null};function Ab(t,e){let O=Gb.get(e);if(O)return O;let i=[],n=!0;function r(a,o){let s=t.sliceString(a.from,a.to);i.push({label:s,type:o})}return e.cursor(F.IncludeAnonymous).iterate(a=>{if(n)n=!1;else if(a.name){let o=iU[a.name];if(o&&o(a,r)||Eb.has(a.name))return!1}else if(a.to-a.from>8192){for(let o of Ab(t,a.node))i.push(o);return!1}}),Gb.set(e,i),i}var Cb=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,Lb=["String","LineComment","BlockComment","DefName","LabelName","FieldName",".","?."],nU=t=>{let e=N(t.state).resolveInner(t.pos,-1);if(Lb.indexOf(e.name)>-1)return null;let O=e.name=="VariableName"||e.to-e.from<20&&Cb.test(t.state.sliceDoc(e.from,e.to));if(!O&&!t.explicit)return null;let i=[];for(let n=e;n;n=n.parent)Eb.has(n.name)&&(i=i.concat(Ab(t.state.doc,n)));return{options:i,from:O?e.from:t.pos,validFor:Cb}},ld=fe.define({name:"go",parser:jb.configure({props:[se.add({IfStatement:ue({except:/^\s*({|else\b)/}),LabeledStatement:cO,"SwitchBlock SelectBlock":t=>{let e=t.textAfter,O=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return t.baseIndent+(O||i?0:t.unit)},Block:We({closing:"}"}),BlockComment:()=>null,Statement:ue({except:/^{/})}),le.add({"Block SwitchBlock SelectBlock LiteralValue InterfaceType StructType SpecList":we,BlockComment(t){return{from:t.from+2,to:t.to-2}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case\b|default\b|\})$/}}),rU=t=>({label:t,type:"keyword"}),aU="interface struct chan map package go return break continue goto fallthrough else defer range true false nil".split(" ").map(rU);function Ib(){let t=OU.concat(aU);return new oe(ld,[ld.data.of({autocomplete:dO(Lb,Ft(t))}),ld.data.of({autocomplete:nU})])}var oU=re({null:u.null,instanceof:u.operatorKeyword,this:u.self,"new super assert open to with void":u.keyword,"class interface extends implements enum var":u.definitionKeyword,"module package import":u.moduleKeyword,"switch while for if else case default do break continue return try catch finally throw":u.controlKeyword,"requires exports opens uses provides public private protected static transitive abstract final strictfp synchronized native transient volatile throws":u.modifier,IntegerLiteral:u.integer,FloatingPointLiteral:u.float,"StringLiteral TextBlock":u.string,CharacterLiteral:u.character,LineComment:u.lineComment,BlockComment:u.blockComment,BooleanLiteral:u.bool,PrimitiveType:u.standard(u.typeName),TypeName:u.typeName,Identifier:u.variableName,"MethodName/Identifier":u.function(u.variableName),Definition:u.definition(u.variableName),ArithOp:u.arithmeticOperator,LogicOp:u.logicOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,AssignOp:u.definitionOperator,UpdateOp:u.updateOperator,Asterisk:u.punctuation,Label:u.labelName,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace,".":u.derefOperator,", ;":u.separator}),sU={__proto__:null,void:34,byte:36,short:36,int:36,long:36,char:36,float:36,double:36,boolean:36,extends:50,super:52,this:64,public:70,protected:72,private:74,abstract:76,static:78,final:80,strictfp:82,default:84,synchronized:86,native:88,transient:90,volatile:92,sealed:95,non:97,instanceof:140,true:158,false:158,null:166,class:170,new:176,throws:196,implements:204,permits:211,record:215,interface:226,enum:236,open:289,module:291,requires:296,transitive:298,exports:300,to:302,opens:304,uses:306,provides:308,with:310,package:314,import:318,if:330,else:332,while:336,for:340,var:347,assert:354,switch:358,case:366,throw:370,do:374,break:378,continue:382,return:386,try:392,catch:396,finally:404},Mb=de.deserialize({version:14,states:"#5QQ]QPOOQ%QQPOOO(wQQO'#HlO+OQQO'#CbOOQO'#Cb'#CbO+VQPO'#CaOOQO'#Co'#CoO,{QPO'#DOO-iQQO'#HvOOQO'#Hv'#HvO0^QQO'#HqO0eQQO'#HqOOQO'#Hq'#HqOOQO'#Hp'#HpOOQO'#Hz'#HzO0lQPO'#GwO2`QPO'#DOO2gQPO'#CkO4vQPO'#DfO4}QPO'#CiO6ZQQO'#FsO6bQPO'#DyO7rOSO'#EQOOQO'#IW'#IWO+VQPO'#EzO8iQPO'#EzOOQO'#EV'#EVO:QQQO'#ITOnQPO'#HzO>uQPO'#EcO>uQPO'#EjO>uQPO'#EuO>uQPO'#EpO>}QPO'#I[O?cQQO'#FRO+VQPO'#C`O?kQPO'#C`O+VQPO'#FnO?pQPO'#FpO@OQPO'#FvO@OQPO'#FyO>uQPO'#GOO@TQPO'#F{O6bQPO'#GSO6bQPO'#G[O@OQPO'#GUO]QPO'#G^O@YQPO'#G`O@eQPO'#GbO@pQPO'#GdO@wQPO'#GgOAeQQO'#CjOBTQQO'#CjOB_QPO'#I`OCzQPO'#DOODbQPO'#E]OBbQPO'#E^OESQPO'#I`OEeQPO'#E]OEmQPO'#IhOErQPO'#FOOOQO'#I^'#I^OOQO'#G}'#G}Q%QQPOOOGhQPO'#HzOOQO'#Hl'#HlOHZQQO,58{OOQO'#Hj'#HjOOQO'#Hr'#HrOJtQPO,59_OLSQPO,59jOOQO-E:r-E:rO+VQPO,58zOLyQPO,58zO+VQPO,5uQPO,5:}O>uQPO,5;UO>uQPO,5;aO>uQPO,5;[O>uQPO,5gO6bQPO'#EUO@zQPO,5=QO!0rQPO,5:}O!1TQPO,5;UO!1]QPO,5;aO!1eQPO,5;[O!-SQPO,5>vO!1sQPO,5>vO!-SQPO,5>vO!2OQPO,5;mO!2aQQO,58zO!2iQQO,5zOB_QPO,5:vO!;WQPO,5:wOErQPO,5;jO!;`QPO'#E_OBbQPO'#E_O!;kQPO'#IaO!;sQPO,5:xOB_QPO,5>zO!-SQPO,5>zOEmQPO,5?SOOQO,5:w,5:wO!+VQPO'#CkOOQO,5?S,5?SO!?pQPO'#FPOOQO,5;j,5;jO!?wQPO,5;jO!-SQPO'#EaOOQO-E:{-E:{OOQO,5;i,5;iO+VQPO,58}O!?|QPO'#ChOOQO1G.k1G.kO!2aQQO1G.fO+VQPO1G.fO!@WQQO1G1tOOQO,59f,59fO!@`QPO,59fOOQO-E:t-E:tO!@eQPO,5>iO!@|QPO,59zO>uQPO'#HOO!ATQPO,5>yOOQO1G2U1G2UOOQO1G0Y1G0YO!AnQPO'#CsO!B^QPO'#HvO!BkQPO'#CtO!ByQPO'#HuO!CRQPO,59^OOQO1G.v1G.vO!#aQPO1G.vO!CiQPO,59_O!CvQQO'#HlO!DXQQO'#CbO!DjQPO,59yOOQO,59i,59iO>uQPO,59yOOQO,59W,59WO!DuQQO,59WO!DzQPO,59iO!,oQPO'#GyO!E]QPO,5>eOOQO1G.q1G.qO!EeQPO'#C}O!EvQPO1G.qO>uQPO'#GzO!E{QPO,5>mOOQO1G/k1G/kOOQO1G0[1G0[O!-SQPO'#HPO!FTQPO1G1cO6bQPO1G1cOOQO1G/l1G/lO!F]QQO1G.oOOQO1G.o1G.oO!HZQQO1G/mO!IxQQO1G/mO!KgQQO1G/mO!KnQQO1G/mO!KuQQO1G/mO!MdQQO1G/mO!MkQQO1G/mO# YQQO1G/mO# aQQO1G/mO# kQQO1G/mO# rQQO1G/|O!)dQPO'#DOO# yQQO'#HvO!*jQPO'#DuOOQO1G/y1G/yO##`QQO1G1dOOOO-E:y-E:yOOQO1G0W1G0WO##vQPO'#E{OOQO1G1Q1G1QO#$jQPO1G2UO!-{QPO1G1QO!0rQPO1G0iO!1TQPO1G0pO!1]QPO1G0{O!1eQPO1G0vOOQO1G0]1G0]O#$oQQO1G1XO}QPO'#I[OOQO1G1X1G1XO#&iQQO1G1XO#&qQQO1G1YOOQO1G1]1G1]O#&xQPO1G1]O#'TQQO'#I]O#'bQPO,5:sOOQO1G1z1G1zOOQO1G4R1G4ROOQO1G2l1G2lO#'gQPO'#EYO!-SQPO'#EdO!-SQPO'#EeO!-SQPO'#EhOOQO1G0i1G0iO#'nQPO1G0iO#'sQPO1G0iO#'{QPO1G0iO#(WQPO1G0iO#(fQPO'#ElO#(|QPO1G0pO#)UQPO1G0pO#)ZQPO'#EwOOQO1G0{1G0{O#)nQPO1G0{O#)sQPO'#EsO!-SQPO'#ErOOQO1G0v1G0vO#*pQPO1G0vO#*uQPO1G0vO#*}QPO1G0vO!1sQPO1G4bO#+YQPO'#FXO#+aQPO'#FXOOQO'#HX'#HXO#+iQQO1G1^O#-fQQO1G4bO!-SQPO1G4bO|OOQO1G0b1G0bOOQO1G4f1G4fO#DXQPO1G0bOOQO1G0c1G0cOOQO1G1U1G1UO!?wQPO1G1UOOQO,5:y,5:yO!-SQPO'#E`O#D^QPO,5:yOBbQPO'#HQO#DiQPO,5>{OOQO1G0d1G0dOEmQPO'#IbO#DqQPO1G4fOB_QPO1G4fOOQO1G4n1G4nO!)tQPO'#C}O!)dQPO'#DOOOQO,5;k,5;kO#D|QPO,5;kO#ETQPO,5;kO#E[QQO'#ITO#EcQQO'#IVO#EjQQO'#FQO#EuQPO'#FQO#E}QPO'#IcOOQO,5:{,5:{OOQO1G.i1G.iO#F]QQO'#HnO#FmQQO'#FUO#HTQPO'#F`OOQO'#Hn'#HnO#H_QPO'#HnO#H|QPO'#IkO#IUQPO,59SOOQO7+$Q7+$QO!2aQQO7+$QOOQO7+'`7+'`OOQO1G/Q1G/QO#IZQPO'#DdO#IeQQO'#IPOOQO'#IP'#IPOOQO1G/f1G/fOOQO,5=j,5=jOOQO-E:|-E:|O#IuQWO,58{O#I|QPO,59`OOQO,59`,59`O!-SQPO'#HxO!!tQPO'#GuO#J[QPO,5>aOOQO1G.x1G.xOOQO7+$b7+$bOOQO1G.r1G.rO#JdQQO1G.rO>uQPO1G/eOOQO1G/e1G/eO#JiQPO1G.rO#JnQPO1G/eOOQO1G/T1G/TOOQO,5=e,5=eOOQO-E:w-E:wOOQO7+$]7+$]OOQO,5=f,5=fOOQO-E:x-E:xOOQO,5=k,5=kOOQO-E:}-E:}O6bQPO7+&}O#JyQQO7+&}O6bQPO7+%hO#LgQQO,59_OOQO,5:a,5:aOB_QPO,5:aO#MvQPO'#EtO#NUQPO'#EtOOQO'#HW'#HWO#NpQPO,5;gOOQO,5;g,5;gOOQO7+'p7+'pOOQO7+&l7+&lOOQO7+&T7+&TO#'nQPO7+&TO#'sQPO7+&TO#'{QPO7+&TO#(WQPO7+&TO#(|QPO7+&[O#)UQPO7+&[OOQO7+&g7+&gO#)nQPO7+&gOOQO7+&b7+&bO#*pQPO7+&bO#*uQPO7+&bO#*}QPO7+&bOOQO7+&u7+&uOOQO'#FU'#FUOvOvO$ dQPO7+&sO$ rQPO7+&wOOQO7+&t7+&tOOQO7+&w7+&wO6bQPO'#G|O$!QQPO,5>wOOQO1G0_1G0_O$!]QPO,5:tOOQO,5:t,5:tOOQO,5;O,5;OOOQO'#Eg'#EgOOQO,5;P,5;POOQO,5;S,5;SO$!dQPO'#EmO!*jQPO'#EmO$!uQPO'#IdO$!}QPO,5;WO$#SQPO'#EnOOQO7+&[7+&[O$#ZQPO7+&[O$#`QPO'#ExO>uQPO'#ExO$#qQPO'#IfO$#|QPO,5;cOB_QPO'#I`O!-SQPO'#I`O$$UQPO'#E]OOQO'#HU'#HUO$$]QPO,5;_OOQO,5;_,5;_OOQO,5;^,5;^O$%YQQO7+&xO$'VQQO7+)|O$)PQQO,5;sOOQO,5;s,5;sO$)WQPO,5;sOOQO-E;V-E;VOOQO7+&x7+&xOOQO7+)|7+)|O}O$4VQPO,5;{O$4^QPO'#IjO$4fQPO,5;zO+VQPO'#HZO$4kQPO,5?VOOQO1G.n1G.nOOQO<d,5>dOOQO,5=a,5=aOOQO-E:s-E:sO$5QQPO7+$^OOQO7+%P7+%POOQO7+$^7+$^O>uQPO7+%PO$5VQQO<uQPO,5;XOOQO,5;X,5;XO$;zQPO,5;XO!,oQPO'#HSO$<]QPO,5?OOOQO1G0r1G0rODbQPO'#E]O$WQPO'#EyOOQO1G0}1G0}O$>_QPO1G0}OB_QPO,5;`OOQO-E;S-E;SOOQO1G0y1G0yOOQO<dQQO1G1_O$>kQQO<uQPO,5=VO!*jQPO,5=VOOQO1G2o1G2oOOQO<lOOQO1G/j1G/jOOQO<uQPO1G0sOOQO1G0s1G0sO$HSQPO1G0sOOQO,5=n,5=nOOQO-E;Q-E;QO$uQPO1G2qOOQO<uQPO7+&_OOQO1G0u1G0uOOQO7+&j7+&jOOQO7+'V7+'VO+VQPO'#H^O$JtQPO,5?XO$J|QPO7+'VO$KRQQO'#InOOQOAN@yAN@yO$K^QQOAN@yOOQOAN@uAN@uO$KeQPOAN@uO$KjQQO<`!>cP!=^!>{!=^P!=^P!?O!?R!?VP!{#?U#?XP0oP#?]!)]PPP#Ae#Cm#C|#DY#Dr#ET#EW#Ed#El#Eo#EsP#EvP#FU#FX#F[#F`#Ff#FiwuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u)usOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%q%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h)r){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-[-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u/}0T0j0u1S1V1Z1]1^1j2Q2R2X2Z2[2e2i2k2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n$xlOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nv!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rQ$ShS&_#`)dQ'V$UU']$[$n-VQ'd$^W(w%U,n/i1]U)o%p(^,]Q)q%qS*[&W-RU+U'_.W/vQ+]'eQ-s*oQ.T+YQ.X+ZQ0Q-_Q0]-tR0g.Yw!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rT%r!s*R${rOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n$OcObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3n^!lP!h!p'k+a.p0u|#RW!Y#`$T$Z%{&]&`&d(d(u)d*]*o+g,`,m-l-t.a/n1aS#ea3mQ$g|Q$h}Q$i!OQ$j!PW%Y!f%]+r.sS%`!i)]Q%f!jQ'W$VQ'X$WQ'Y$XQ'Z$YQ)[%aS)`%d)bQ*e&fQ*m&|S+n'w.nQ-o*nS.f+k.iQ.m+oQ0i._Q0m.eQ1r0hQ2^1sw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nU%i!l.f0mS)R%Y)`Q)c%fw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3iV#da%h3m'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ&U#YQ*Y&VX/k,s/o1^2R'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/k,s/o1^2R'fZOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/l,s/o1^2RS#XY/kS$m!Q'`S'_$[$nQ'e$^S)l%j)hQ.W+YQ.Y+ZR/v-V%mXOabepy![!]!_!b#W#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|$]$_$b$e$t$u$v$w$x%U%j%m%q%z&j&l'l'm'n'{(R(f(k(m)Z)g)h)r){*U*V*i*k+^+},^,b,c,g,j,n-T-U-Y-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ&S#WR-g*V'c]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n!w#PW!f!v#Q#R#`$O$T%X%Y%]%d%y&Q&W&`&d&|(d(u)R)b)d*l*n*o+g+r,`,m,x-R-t.a.s/m1j2Q2X2[2e2kW#ba#d%h3mR*b&aviOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u[!hP!p'k+a.p0uY#aa#d%h&a3mQ&}#{Q(e$vW(y%U,n/i1]S*p'S*rS+h't.bS+o'w.nS+t'z+vS.e+k.iR/o,sh#TW!Y!f$T$Z%](d*o+r,`-t.sQ*P%{Q*^&]Q-j*]R0X-lU)}%z){0TQ,P(UR.v+y$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3ivwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uQ%V!cQ%g!kQ%o!qS&o#k2wQ'j$fQ)Q%WQ)V%^Q,u)OQ/p,tQ0n.fQ1W/^R1t0m${qOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n!^#od#g$y$z%S&n&p&r&s&t&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lg2y/b3U3V3X3Y3Z3[3]3a3e3f!Y#rd#g$y$z%S&n&r&s&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lc2|/b3U3X3Y3[3]3a3e3fR'O#{%TgOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%ToOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%SoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ$f{Q$t!WQ$u!XQ${!^R,k(oQ$`mS(V$l+XQ+T'^S+z(Q(XS-W)j)kQ.S+VQ.l+nQ.z,RQ/y-XQ0e.VQ0r.mQ1d/wQ1q0fR2V1cQ'o$gY*v'W'p'q'r'sQ,Q(VW-w*w*x*y*zQ.k+nQ.w+zU0^-x-y-zS0q.l.mQ0x.zS1m0_0`Q1u0rR2]1na!nP!p'k+a+k.i.p0u`!nP!p'k+a+k.i.p0uT+u'z+vd!jP!h!p'k+a+k.e.i.p0uQ's$gQ'v$hQ(P$jQ*z'WQ*|'XQ+S'ZV+s'z+t+vQ%b!iR,})]Q)Y%`R,|)[Q%l!mQ)T%[Q)X%_Q-P)aR/s-QvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uS*q'S*rT+u'z+vQ'r$gS*y'W'sR-z*zQ'q$gQ'y$iU*x'W'r'sQ+O'YQ+m'uS-y*y*zQ-|*{Q0`-zR0b-}Q+e'mQ+f'nR+x'{Q'p$gQ'}$jW*w'W'q'r'sU+Q'Z(O(PU-x*x*y*zS.Q+R+SS0_-y-zQ0d.RR1n0`Q'u$hS*{'X'vR-}*|Q+i'tR0k.bQ+l'uS-{*{+mS0a-|-}R1o0bT.g+k.iQ(O$jS+R'Z(PR.R+SQ'|$jW+P'Z'}(O(PU.P+Q+R+SS0c.Q.RR1p0dvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uT+u'z+vQ'x$iS*}'Y'yR.O+OQ+p'wR0s.nR.r+qQ'T$SR*u'VT*q'S*rQ%k!mS)W%_%lR,z)XQ)g%jR-U)h$zoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nX(x%U,n/i1]%SmOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nU'^$[$n-VS+V'_/vQ.V+YR0f.WX(T$l(Q(U+y_)s%q)r-[/}2Z2i2nQ)u%qR0R-_Q([$oQ)w%sR-b)xT,S(Z,TvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR1W/^wwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uvvOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uQ%P!`R%R!aR$w!ZvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR(f$vR$x!ZR(n${T,f(m,gT,e(m,gX({%V(|)Q,vR,t(}Q/n,sR1a/oQ)P%VQ,r(|Q,w)QR/q,vR%W!cQ(z%UV/g,n/i1]QyOQ#jbY$cy#j)h-T/uQ)h%jQ-T)gR/u-UvVOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uv!gP!p#d&a'S'k't'w'z*r+a+k+v,s.b.i.n.p0u|!xV!g#O#Z#_#}$k%a%e&P&V&Z&{(S(W)e*`+W.^0j2R3`!f#OW!f!v#R$O$T%Y%]%d%y&Q&W&|(d(u)R)b*l*n*o+r,`,m,x-R-t.s/m1j2Q2X2[2e2kQ#Z_S#_a3m$`#}ep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%m%q%z&j&l'l'm'n'{(R(f(k)Z)r){*U*i*k+^+},b,c,j-Y-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$k!QS%a!i)]S%e!j+sS&P#W*VQ&V#YU&Z#`&d)dQ&{#{W(S$l(Q(U+yQ(W$mQ)e%hQ*`&`Q+W'`Q.^+gQ0j.aQ2R1^Z3`$v%U,n/i1]Q*W&SR-h*W^#QW#`$O&|(d(u*l!Q%X!f!v$T%]%d&Q&W&`&d)b)d*n*o+g+r,`,m-R-t.a.s/m2Q2e[%x#Q%X%y,x2X2kS%y#R%YQ,x)RQ2X1jR2k2[#Q`OPaby!_!p#d#j#{$b$t$u$v$w$x%U%h%j&a'S'k't'w'z(m)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3m[!wV!g#_&{)e3`T#[`!wQ0U-cR1i0UQ&b#bR*c&bQ&g#eR*f&gQ$QfR'Q$QQ+_'fS.[+_1XR1X/bQ!pPU%n!p+a0uQ+a'kR0u.pQ%|#TR*Q%|Q&k#hU*h&k/r3kQ/r,{R3k3jQ)^%bR-O)^Q-Z)mR/{-ZQ.c+iR0l.cQ.i+kR0o.iQ+v'zR.t+vQ.o+pR0t.oQ*r'SR-u*rQ(U$lQ+y(QT,O(U+yQ0O-]R1g0OQ-`)uR0S-`Q,T(ZR.{,TQ/P,VR0{/PQ1x0|S2`1x2bR2b1zQ,g(mR/`,gQ(|%VS,q(|,vR,v)QQ1_/mR2S1_Q,o(zR/j,odxOby#j%j)g)h-T-U/uQ$|!_Q'h$bQ(b$tQ(c$uQ(h$wQ(i$xS,f(m,gR/V,^)ftOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u0T0j0u1S1V1Z1]1^1j2Q2R2X2[2e2k2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n_)t%q)r-[/}2Z2i2nQ!sTQ$o!SQ$p!UQ$q!VQ%s!yQ%u!{Q(`$rQ(a$sQ)x%tQ*R2rS.},V,XQ/R,WQ/S,YQ0z/PS0|/R1OQ1z1PR2_1w&{SOTabehpy!S!U!V![!]!_!b!y!{#`#j#k#n#o#p#q#r#s#t#u#v#w#x#|$U$[$]$^$_$b$e$n$r$s$t$u$v$w$x%U%j%p%q%t%z&W&l'_'e(R(^(f(k(m)d)g)h)r){*i*k*o+Y+Z+^+},V,W,X,Y,],^,b,c,g,j,n-R-T-U-V-[-_-t.W.Y/P/R/W/Y/^/e/i/u/v/}0T1O1P1S1V1Z1]1w2Z2i2n2r2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ)v%qQ-])rQ/|-[Q1f/}Q2j2ZQ2l2iR2p2nxdOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/^/uU#ga$e3mS#ye3hS$ap3iQ$y![Q$z!]Q%S!bQ&n#kQ&p#nQ&q#oQ&r#pQ&s#qQ&t#rQ&u#sQ&v#tQ&w#uS&x#v3QQ&y#wQ&z#xQ'P#|Q'c$]Y'f$_$v,b/Y1V^)p%q)r-[/}2Z2i2nU)|%z){0TS*j&l3TQ+{(RQ,a(fQ,d(kS-m*i3bQ-n*kQ.Z+^Q.y+}Q/[,cQ/b,jQ1R/WQ1Y/eQ1|1SQ2P1ZQ3U2wQ3V2xQ3W2yQ3X2zQ3Y2{Q3Z2|Q3[2}Q3]3OQ3^3PQ3_3RQ3a3SQ3e3cQ3f3dR3l3nvWOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!fP!p'k+a+k.i.p0uW!vV#}&P3`S#`a3m#|$Oep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%q%z&l(R(f(k)r){*i*k+^+},b,c,j-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$TiS%]!h.eS%d!j+sf&Q#W%m&j'l'm'n'{)Z*U*V-YQ&W#_Q&`#aS&d#d&aQ&|#{Q(d$vW(u%U,n/i1]Q)b%eQ)d%hQ*l&{Q*n&}S*o'S*rS+g't.bS+r'z+vQ,`(eQ,m(yQ-R)eQ-t*pQ.a+hQ.s+tS/m,s/oQ2Q1^R2e2R'b]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ$l!QQ(Q$kS(X$m+WQ+X'`R,R(W'sUOPVabeipy!Q![!]!_!b!h!j!p#W#Y#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&V&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nR&T#W%OnObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ#haQ&S#WQ'O#{W)m%m'm'n'{Q*g&jQ+c'lQ,{)ZQ-f*UQ-g*VQ/z-YR3j3mQ*T&RR-e*SU#ca%h3mR&e#d#c_OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3m#c^OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3ml#SW!Y!f$T$Z%]%{&]*]*o+r-l-t.sU&[#`&d)dQ*a&`Q,_(dQ,l(uQ.`+gQ/X,`Q/f,mQ0i.aQ1`/nR2U1aQ*O%zQ-c){R1h0TR-d){T#fa3m$vkOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%q%z&l(R(f(k(m)g)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nW(v%U,n/i1]T)i%j)h%SjOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nT'[$[-VQ'g$_Q(g$vQ/Z,bQ1T/YR2O1V[!oP!p'k+a.p0uT.g+k.iU#UW!Y(dQ%Z!fU'U$T$Z,`Q)U%]S-r*o+rT0[-t.sd!kP!p'k'z+a+k+v.i.p0uV%^!h+t.eR%c!iW%[!f%]+r.sQ)a%dR-Q)bQ)n%mV+d'm'n'{R+j'tT.h+k.iR+q'w`!mP!p'k+a+k.i.p0uT%_!h.eR-^)rR)v%qT/O,V/PQ0}/RR1y1OR1y1PR/c,j",nodeNames:"\u26A0 LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList LambdaExpression Definition FormalParameters ReceiverParameter void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ this FormalParameter Modifiers public protected private abstract static final strictfp default synchronized native transient volatile sealed non SpreadParameter VariableDeclarator AssignOp } { ArrayInitializer InferredParameters Block BinaryExpression CompareOp CompareOp CompareOp LogicOp LogicOp BitOp BitOp BitOp ArithOp ArithOp BitOp InstanceofExpression instanceof TypePattern TernaryExpression LogicOp : UpdateExpression UpdateOp IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral class ParenthesizedExpression ObjectCreationExpression new ArgumentList ClassBody ; FieldDeclaration MethodDeclaration TypeParameters TypeParameter TypeBound Throws throws ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList Permits permits RecordDeclaration record RecordHeader RecordComponent RecordBody CompactConstructorDeclaration InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation FieldAccess ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension UnaryExpression LogicOp BitOp CastExpression AssignmentExpression AssignOp ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchRule SwitchLabel case ThrowStatement throw DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource ClassContent",maxTerm:296,nodeProps:[["isolate",-4,1,2,80,81,""],["group",-27,4,56,91,99,106,112,117,122,156,158,161,162,164,167,169,172,174,176,178,184,186,188,190,192,194,195,203,"Statement",-25,6,13,32,57,69,72,75,77,78,79,80,81,82,83,84,86,87,129,130,131,133,134,136,139,140,"Expression",-7,17,18,19,20,21,23,28,"Type"],["openedBy",10,"(",52,"{"],["closedBy",11,")",53,"}"]],propSources:[oU],skippedNodes:[0,1,2],repeatNodeCount:30,tokenData:"#$g_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu2zuv4avw5qwx7Xxy?pyz@^z{@z{|Ap|}CW}!OCt!O!PEa!P!QNZ!Q!R!+P!R![!.k![!]!;T!]!^!osw<}wx9}x#O<}#O#P&Z#P;'S<};'S;=`?d<%lO<}P>rVOY>oZw>owx?Xx#O>o#P;'S>o;'S;=`?^<%lO>oP?^O!rPP?aP;=`<%l>oT?gP;=`<%l<}T?mP;=`<%l8P_?wVZZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV@eVYR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVATX$fP&}S!eQOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVAwZ!dR&}SOY%QYZ%lZr%Qrs%qs{%Q{|Bj|!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVBqV!nR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVC_VkR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_C}[&pW!dR&}SOY%QYZ%lZr%Qrs%qs}%Q}!OBj!O!_%Q!_!`5T!`!aDs!a;'S%Q;'S;=`&s<%lO%QVDzV&vR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_EhZWY&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PFZ!P!Q%Q!Q![Gi![;'S%Q;'S;=`&s<%lO%QVF`X&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PF{!P;'S%Q;'S;=`&s<%lO%QVGSV&rR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTGpc&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#R%Q#R#SMc#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTISV&}S!pPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTIn]&}SOY%QYZ%lZr%Qrs%qs{%Q{|Jg|}%Q}!OJg!O!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTJlX&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTK`c&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![!f%Q!f!gH{!g!h%Q!h!iH{!i#R%Q#R#SLk#S#W%Q#W#XH{#X#Y%Q#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTLpZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![#R%Q#R#SLk#S;'S%Q;'S;=`&s<%lO%QTMhZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![#R%Q#R#SMc#S;'S%Q;'S;=`&s<%lO%Q_Nb]&}S!eQOY%QYZ%lZr%Qrs%qsz%Qz{! Z{!P%Q!P!Q!'|!Q!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%Q_! `X&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!!QT&}SOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!dTOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!vVOz!!az{!!s{!P!!a!P!Q!#]!Q;'S!!a;'S;=`!#b<%lO!!aZ!#bOQZZ!#eP;=`<%l!!a_!#kXOY!$WYZ! {Zr!$Wrs!&bsz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!$ZXOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!${Z&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!%uV&}SQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!&_P;=`<%l! Z_!&eXOY!$WYZ! {Zr!$Wrs!!asz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!'TZOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!'yP;=`<%l!$W_!(TV&}SPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!(oVPZOY!)UYZ%lZr!)Urs!)vs;'S!)U;'S;=`!*y<%lO!)U_!)ZVPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!)sP;=`<%l!'|_!){VPZOY!)UYZ%lZr!)Urs!*bs;'S!)U;'S;=`!*y<%lO!)UZ!*gSPZOY!*bZ;'S!*b;'S;=`!*s<%lO!*bZ!*vP;=`<%l!*b_!*|P;=`<%l!)UT!+Wq&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!d%Q!d!e!1u!e!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o!z%Q!z!{!3s!{#R%Q#R#S!0}#S#U%Q#U#V!1u#V#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a#l%Q#l#m!3s#m;'S%Q;'S;=`&s<%lO%QT!-fa&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QT!.ri&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o#R%Q#R#S!0}#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!0hV&}S!oPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!1SZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!.k![#R%Q#R#S!0}#S;'S%Q;'S;=`&s<%lO%QT!1zY&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S;'S%Q;'S;=`&s<%lO%QT!2q`&}S!oPOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S!n%Q!n!o!0a!o#R%Q#R#S!1u#S#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!3x_&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!P!4w!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QT!4|]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i#T%Q#T#Z!5u#Z;'S%Q;'S;=`&s<%lO%QT!5zc&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#R%Q#R#S!4w#S#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!7^i&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8{!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i!n%Q!n!o!0a!o!r%Q!r!sIi!s#R%Q#R#S!:V#S#T%Q#T#Z!7V#Z#`%Q#`#a!0a#a#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!9Qa&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!:[]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QV!;[X!lR&}SOY%QYZ%lZr%Qrs%qs![%Q![!]!;w!];'S%Q;'S;=`&s<%lO%QV!l!`;'S%Q;'S;=`&s<%lO%QU!>PX!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU!>sV!]Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!?aX!TR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!@TY&gR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`!>l!`!a!@s!a;'S%Q;'S;=`&s<%lO%QU!@zY!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`!a!=x!a;'S%Q;'S;=`&s<%lO%Q_!AsV&kX!kQ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!BaX&]Z&}SOY%QYZ%lZr%Qrs%qs#]%Q#]#^!B|#^;'S%Q;'S;=`&s<%lO%QV!CRX&}SOY%QYZ%lZr%Qrs%qs#b%Q#b#c!Cn#c;'S%Q;'S;=`&s<%lO%QV!CsX&}SOY%QYZ%lZr%Qrs%qs#h%Q#h#i!D`#i;'S%Q;'S;=`&s<%lO%QV!DeX&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!EQ#Y;'S%Q;'S;=`&s<%lO%QV!EVX&}SOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Er#g;'S%Q;'S;=`&s<%lO%QV!EwX&}SOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!Fd#Z;'S%Q;'S;=`&s<%lO%QV!FiX&}SOY%QYZ%lZr%Qrs%qs#T%Q#T#U!GU#U;'S%Q;'S;=`&s<%lO%QV!GZX&}SOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Gv#W;'S%Q;'S;=`&s<%lO%QV!G{X&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Hh#Y;'S%Q;'S;=`&s<%lO%QV!HoV'ZR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!I]b&aZ&}SOY%QYZ%lZr%Qrs%qst%Qtu!IUu!Q%Q!Q![!IU![!c%Q!c!}!IU!}#R%Q#R#S!IU#S#T%Q#T#o!IU#o$g%Q$g;'S!IU;'S;=`!Je<%lO!IU_!JhP;=`<%l!IU_!JrVoZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!K`VmR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!K|X!cQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QV!LpV!VR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!M`Z'dX!bQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`#p%Q#p#q!NR#q;'S%Q;'S;=`&s<%lO%QU!NYV!`Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!NvV!UR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT# dV$OP&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#!Su&}S&XZ&_ZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qst%Qtu2zu!Q%Q!Q![2z![!c%Q!c!}2z!}#R%Q#R#S2z#S#T%Q#T#o2z#o#y%Q#y#z'f#z$f%Q$f$g'f$g#BY2z#BY#BZ# y#BZ$IS2z$IS$I_# y$I_$I|2z$I|$JO# y$JO$JT2z$JT$JU# y$JU$KV2z$KV$KW# y$KW&FU2z&FU&FV# y&FV;'S2z;'S;=`4Z<%lO2z",tokenizers:[0,1,2,3],topRules:{Program:[0,3],ClassContent:[1,206]},dynamicPrecedences:{21:1,246:-1,252:-1},specialized:[{term:245,get:t=>sU[t]||-1}],tokenPrec:9164});var lU=fe.define({name:"java",parser:Mb.configure({props:[se.add({IfStatement:ue({except:/^\s*({|else\b)/}),TryStatement:ue({except:/^\s*({|catch|finally)\b/}),LabeledStatement:cO,SwitchBlock:t=>{let e=t.textAfter,O=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return t.baseIndent+(O?0:i?1:2)*t.unit},Block:We({closing:"}"}),BlockComment:()=>null,Statement:ue({except:/^{/})}),le.add({"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ConstructorBody InterfaceBody ArrayInitializer":we,BlockComment(t){return{from:t.from+2,to:t.to-2}}})]}),languageData:{commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\})$/}});function Db(){return new oe(lU)}var Nb=1,cU=2,hU=3,fU=82,uU=76,dU=117,QU=85,$U=97,pU=122,mU=65,gU=90,PU=95,cd=48,Bb=34,SU=40,Fb=41,XU=32,Hb=62,bU=new D(t=>{if(t.next==uU||t.next==QU?t.advance():t.next==dU&&(t.advance(),t.next==cd+8&&t.advance()),t.next!=fU||(t.advance(),t.next!=Bb))return;t.advance();let e="";for(;t.next!=SU;){if(t.next==XU||t.next<=13||t.next==Fb)return;e+=String.fromCharCode(t.next),t.advance()}for(t.advance();;){if(t.next<0)return t.acceptToken(Nb);if(t.next==Fb){let O=!0;for(let i=0;O&&i{if(t.next==Hb)t.peek(1)==Hb&&t.acceptToken(cU,1);else{let e=!1,O=0;for(;;O++){if(t.next>=mU&&t.next<=gU)e=!0;else{if(t.next>=$U&&t.next<=pU)return;if(t.next!=PU&&!(t.next>=cd&&t.next<=cd+9))break}t.advance()}e&&O>1&&t.acceptToken(hU)}},{extend:!0}),kU=re({"typedef struct union enum class typename decltype auto template operator friend noexcept namespace using requires concept import export module __attribute__ __declspec __based":u.definitionKeyword,"extern MsCallModifier MsPointerModifier extern static register thread_local inline const volatile restrict _Atomic mutable constexpr constinit consteval virtual explicit VirtualSpecifier Access":u.modifier,"if else switch for while do case default return break continue goto throw try catch":u.controlKeyword,"co_return co_yield co_await":u.controlKeyword,"new sizeof delete static_assert":u.operatorKeyword,"NULL nullptr":u.null,this:u.self,"True False":u.bool,"TypeSize PrimitiveType":u.standard(u.typeName),TypeIdentifier:u.typeName,FieldIdentifier:u.propertyName,"CallExpression/FieldExpression/FieldIdentifier":u.function(u.propertyName),"ModuleName/Identifier":u.namespace,PartitionName:u.labelName,StatementIdentifier:u.labelName,"Identifier DestructorName":u.variableName,"CallExpression/Identifier":u.function(u.variableName),"CallExpression/ScopedIdentifier/Identifier":u.function(u.variableName),"FunctionDeclarator/Identifier FunctionDeclarator/DestructorName":u.function(u.definition(u.variableName)),NamespaceIdentifier:u.namespace,OperatorName:u.operator,ArithOp:u.arithmeticOperator,LogicOp:u.logicOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,AssignOp:u.definitionOperator,UpdateOp:u.updateOperator,LineComment:u.lineComment,BlockComment:u.blockComment,Number:u.number,String:u.string,"RawString SystemLibString":u.special(u.string),CharLiteral:u.character,EscapeSequence:u.escape,"UserDefinedLiteral/Identifier":u.literal,PreprocArg:u.meta,"PreprocDirectiveName #include #ifdef #ifndef #if #define #else #endif #elif":u.processingInstruction,MacroName:u.special(u.name),"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace,"< >":u.angleBracket,". ->":u.derefOperator,", ;":u.separator}),yU={__proto__:null,bool:36,char:36,int:36,float:36,double:36,void:36,size_t:36,ssize_t:36,intptr_t:36,uintptr_t:36,charptr_t:36,int8_t:36,int16_t:36,int32_t:36,int64_t:36,uint8_t:36,uint16_t:36,uint32_t:36,uint64_t:36,char8_t:36,char16_t:36,char32_t:36,char64_t:36,const:70,volatile:72,restrict:74,_Atomic:76,mutable:78,constexpr:80,constinit:82,consteval:84,struct:88,__declspec:92,final:148,override:148,public:152,private:152,protected:152,virtual:154,extern:160,static:162,register:164,inline:166,thread_local:168,__attribute__:172,__based:178,__restrict:180,__uptr:180,__sptr:180,_unaligned:180,__unaligned:180,noexcept:194,requires:198,TRUE:798,true:798,FALSE:800,false:800,typename:218,class:220,template:234,throw:248,__cdecl:256,__clrcall:256,__stdcall:256,__fastcall:256,__thiscall:256,__vectorcall:256,try:260,catch:264,export:282,import:286,case:296,default:298,if:308,else:314,switch:318,do:322,while:324,for:330,return:334,break:338,continue:342,goto:346,co_return:350,co_yield:354,using:362,typedef:366,namespace:380,new:398,delete:400,co_await:402,concept:406,enum:410,static_assert:414,friend:422,union:424,explicit:430,operator:444,module:456,signed:518,unsigned:518,long:518,short:518,decltype:528,auto:530,sizeof:566,NULL:572,nullptr:586,this:588},wU={__proto__:null,"<":767},TU={__proto__:null,">":135},vU={__proto__:null,operator:388,new:576,delete:582},Kb=de.deserialize({version:14,states:"$<[Q!QQVOOP'gOUOOO([OWO'#CdO,UQUO'#CgO,`QUO'#FjO-vQbO'#CxO.XQUO'#CxO0WQUO'#KaO0_QUO'#CwO0jOpO'#DvO0rQ!dO'#D]OOQR'#JP'#JPO5[QVO'#GUO5iQUO'#JWOOQQ'#JW'#JWO8}QUO'#KtOxQVO'#IbO!(}QVO'#IdO!?SQUO'#IgO!?ZQVO'#IjP!AQO!LQO'#CaP!A]{,UO'#CbP!6q{,UO'#CbP!Ah{7[O'#CbP!6q{,UO'#CbP!Am{,UO'#CbP!AxOSO'#IzPOOO)CEp)CEpOOOO'#I}'#I}O!BSOWO,59OOOQR,59O,59OO!(}QVO,59VOOQQ,59X,59XOOQR'#Do'#DoO!(}QVO,5;ROOQR,5qOOQR'#IX'#IXOOQR'#IY'#IYOOQR'#IZ'#IZOOQR'#I['#I[O!(}QVO,5>rO!(}QVO,5>rO!(}QVO,5>rO!(}QVO,5>rO!(}QVO,5>rO!(}QVO,5>rO!(}QVO,5>rO!(}QVO,5>rO!(}QVO,5>rO!(}QVO,5>rO!D^QVO,5>zOOQQ,5?W,5?WO!FPQVO'#CjO!IxQUO'#CzOOQQ,59d,59dOOQQ,59c,59cOOQQ,5<},5<}O!JVQ&lO,5=mO!?SQUO,5?RO!LyQVO,5?UO!MQQbO,59dO!M]QVO'#FYOOQQ,5?P,5?PO!MmQVO,59WO!MtO`O,5:bO!MyQbO'#D^O!N[QbO'#KeO!NjQbO,59wO!NrQbO'#CxO# TQUO'#CxO# YQUO'#KaO# dQUO'#CwOOQR-E<}-E<}O# oQUO,5AvO# vQVO'#EfO@[QVO'#EiOBXQUO,5;kOOQR,5l,5>lO#3uQUO'#CgO#4kQUO,5>pO#6^QUO'#IeOOQR'#JO'#JOO#6fQUO,5:xO#7SQUO,5:xO#7sQUO,5:xO#8hQUO'#CuO!0TQUO'#CmOOQQ'#JX'#JXO#7SQUO,5:xO#8pQUO,5;QO!4{QUO'#DOO#9yQUO,5;QO#:OQUO,5>QO#;[QUO'#DOO#;rQUO,5>{O#;wQUO'#LOO#=QQUO,5;TO#=YQVO,5;TO#=dQUO,5;TOOQQ,5;T,5;TO#?]QUO'#LdO#?dQUO,5>UO#?iQbO'#CxO#?tQUO'#GcO#?yQUO'#E^O#@jQUO,5;kO#ARQUO'#LUO#AZQUO,5;rOKnQUO'#HfOBXQUO'#HgO#A`QUO'#KxO!6qQUO'#HjO#BWQUO'#CuO!0wQVO,5PO$(fQUO'#E[O$(sQUO,5>ROOQQ,5>S,5>SO$,aQVO'#C|OOQQ-E=q-E=qOOQQ,5>d,5>dOOQQ,59a,59aO$,kQUO,5>wO$.kQUO,5>zO!6qQUO,59uO$/OQUO,5;qO$/]QUO,5<{O!0TQUO,5:oOOQQ,5:r,5:rO$/hQUO,5;mO$/mQUO'#KtOBXQUO,5;kOOQR,5;x,5;xO$0^QUO'#FbO$0lQUO'#FbO$0qQUO,5;zO$4[QVO'#FmO!0wQVO,5sQUO'#L^O$>{QUO,5T,5>TO$FxQUO,5>TO$GSQUO,5>TO$GXQUO,5>TO$G^QUO,5>TO!6qQUO,5>TO$I[QUO'#KaO$IcQUO,5=oO$InQUO,5=aOKnQUO,5=oO$JhQUO,5=sOOQR,5=s,5=sO$JpQUO,5=sO$L{QVO'#H[OOQQ,5=u,5=uO!;`QUO,5=uO%#vQUO'#KqO%#}QUO'#KbO%$cQUO'#KqO%$mQUO'#DyO%%OQUO'#D|O%'{QUO'#KbOOQQ'#Kb'#KbO%)nQUO'#KbO%#}QUO'#KbO%)sQUO'#KbOOQQ,59s,59sOOQQ,5>a,5>aOOQQ,5>b,5>bO%){QUO'#HzO%*TQUO,5>cOOQQ,5>c,5>cO%-oQUO,5>cO%-zQUO,5>hO%1fQVO,5>iO%1mQUO,5>|O# vQVO'#EfO%4sQUO,5>|OOQQ,5>|,5>|O%5dQUO,5?OO%7hQUO,5?RO!<_QUO,5?RO%9dQUO,5?UO%=PQVO,5?UPOOO'#I|'#I|P%=WO!LQO,58{POOO,58{,58{P!Am{,UO,58|P%=c{,UO,58|P%=q{7[O,58|PO{O'#Jw'#JwP%>S{,UO'#LkPOOO'#Lk'#LkP%>Y{,UO'#LkPOOO,58|,58|POOO,5?f,5?fP%>_OSO,5?fOOOO-E<{-E<{OOQR1G.j1G.jO%>fQUO1G.qO%?lQUO1G0mOOQQ1G0m1G0mO%@xQUO'#CpO%CXQbO'#CxO%CdQUO'#CsO%CiQUO'#CsO%CnQUO1G.uO#BWQUO'#CrOOQQ1G.u1G.uO%EqQUO1G4]O%FwQUO1G4^O%HjQUO1G4^O%J]QUO1G4^O%LOQUO1G4^O%MqQUO1G4^O& dQUO1G4^O&#VQUO1G4^O&$xQUO1G4^O&&kQUO1G4^O&(^QUO1G4^O&*PQUO1G4^O&+rQUO'#KVO&,{QUO'#KVO&-TQUO,59UOOQQ,5=P,5=PO&/]QUO,5=PO&/gQUO,5=PO&/lQUO,5=PO&/qQUO,5=PO!6qQUO,5=PO#NsQUO1G3XO&/{QUO1G4mO!<_QUO1G4mO&1wQUO1G4pO&3jQVO1G4pOOQQ1G/O1G/OOOQQ1G.}1G.}OOQQ1G2i1G2iO!JVQ&lO1G3XO&3qQUO'#LVO@[QVO'#EiO&4zQUO'#F]OOQQ'#Jb'#JbO&5PQUO'#FZO&5[QUO'#LVO&5dQUO,5;tO&5iQUO1G.rOOQQ1G.r1G.rOOQR1G/|1G/|O&7[Q!dO'#JQO&7aQbO,59xO&9rQ!eO'#D`O&9yQ!dO'#JSO&:OQbO,5APO&:OQbO,5APOOQR1G/c1G/cO&:ZQbO1G/cO&:`Q&lO'#GeO&;^QbO,59dOOQR1G7b1G7bO#@jQUO1G1VO&;iQUO1G1^OBXQUO1G1VO&=zQUO'#CzO#+VQbO,59dO&AmQUO1G6zOOQR-E<|-E<|O&CPQUO1G0dO#6fQUO1G0dOOQQ-E=V-E=VO#7SQUO1G0dOOQQ1G0l1G0lO&CtQUO,59jOOQQ1G3l1G3lO&D[QUO,59jO&DrQUO,59jO!MmQVO1G4gO!(}QVO'#JZO&E^QUO,5AjOOQQ1G0o1G0oO!(}QVO1G0oO!6qQUO'#JpO&EfQUO,5BOOOQQ1G3p1G3pOOQR1G1V1G1VO&IcQVO'#FOO!MmQVO,5;sOOQQ,5;s,5;sOBXQUO'#JdO&K_QUO,5ApO&KgQVO'#E[OOQR1G1^1G1^O&NUQUO'#LdOOQR1G1n1G1nOOQR-E=h-E=hOOQR1G7e1G7eO#DvQUO1G7eOGYQUO1G7eO#DvQUO1G7gOOQR1G7g1G7gO&N^QUO'#G}O&NfQUO'#L`OOQQ,5=h,5=hO&NtQUO,5=jO&NyQUO,5=kOOQR1G7h1G7hO#EtQVO1G7hO' OQUO1G7hO'!UQVO,5=kOOQR1G1U1G1UO$/UQUO'#E]O'!zQUO'#E]OOQQ'#LQ'#LQO'#eQUO'#LPO'#pQUO,5;UO'#xQUO'#ElO'$]QUO'#ElO'$pQUO'#EtOOQQ'#J]'#J]O'$uQUO,5;cO'%lQUO,5;cO'&gQUO,5;dO''mQVO,5;dOOQQ,5;d,5;dO''wQVO,5;dO''mQVO,5;dO'(OQUO,5;bO'({QUO,5;eO')WQUO'#KwO')`QUO,5:vO')eQUO,5;fOOQQ1G0n1G0nOOQQ'#J^'#J^O'(OQUO,5;bO!4{QUO'#E}OOQQ,5;b,5;bO'*`QUO'#E`O',YQUO'#E{OHuQUO1G0nO',_QUO'#EbOOQQ'#JY'#JYO'-wQUO'#KyOOQQ'#Ky'#KyO'.qQUO1G0eO'/iQUO1G3kO'0oQVO1G3kOOQQ1G3k1G3kO'0yQVO1G3kO'1QQUO'#LgO'2^QUO'#K_O'2lQUO'#K^O'2wQUO,59hO'3PQUO1G/aO'3UQUO'#FPOOQR1G1]1G1]OOQR1G2g1G2gO$?]QUO1G2gO'3`QUO1G2gO'3kQUO1G0ZOOQR'#Ja'#JaO'3pQVO1G1XO'9iQUO'#FTO'9nQUO1G1VO!6qQUO'#JeO'9|QUO,5;|O$0lQUO,5;|OOQQ'#Fc'#FcOOQQ,5;|,5;|O':[QUO1G1fOOQR1G1f1G1fO':dQUO,5fO(*vQUO'#LeOOQQ1G3}1G3}O(.mQUO1G3}O(.tQUO1G3}O(.{QUO1G4TO(0RQUO1G4TO(0WQUO,5BUO!6qQUO1G4hO!(}QVO'#IiOOQQ1G4m1G4mO(0]QUO1G4mO(2`QVO1G4pPOOO-Em,5>mO$)hQVO'#JuO)+xQUO,5@xOOQQ1G/S1G/SOOQQ7+${7+${O),TQUO7+(RO),YQUO7+(ROOQR7+(R7+(RO$?]QUO7+(ROOQQ7+%u7+%uOOQR-E=_-E=_O!0YQUO,5;oOOQQ,5@P,5@POOQQ-E=c-E=cO$0lQUO1G1hOOQQ1G1h1G1hOOQR7+'Q7+'QOOQR1G1s1G1sOBXQUO,5;rO),vQUO,5yQUO7+(`O)@PQUO7+(dO)@UQVO7+(dOOQQ7+(l7+(lOOQQ7+)Z7+)ZO)@^QUO'#KqO)@hQUO'#KqOOQR,5=b,5=bO)@uQUO,5=bO!;eQUO,5=bO!;eQUO,5=bO!;eQUO,5=bOOQR7+(g7+(gOOQR7+(u7+(uOOQR7+(y7+(yOOQR,5=w,5=wO)@zQUO,5=zO)BQQUO,5=yOOQR,5A},5A}OOQR-E=k-E=kOOQQ1G3b1G3bO)CWQUO,5=xO)C]QVO'#EfOOQQ1G6h1G6hO%)nQUO1G6hO%)sQUO1G6hOOQQ1G0P1G0POOQQ-E=R-E=RO)EtQUO,5A^O(&jQUO'#JUO)FPQUO,5A^O)FPQUO,5A^O)FXQUO,5:iO8}QUO,5:iOOQQ,5>],5>]O)FcQUO,5AyO)FjQUO'#EVO)GtQUO'#EVO)H_QUO,5:iO)HiQUO'#HlO)HiQUO'#HmOOQQ'#Kv'#KvO)IWQUO'#KvO!(}QVO'#HnOOQQ,5:i,5:iO)IxQUO,5:iO!MmQVO,5:iOOQQ-E=T-E=TOOQQ1G0S1G0SOOQQ,5>`,5>`O)I}QUO1G6hO!(}QVO,5>gO)MlQUO'#JtO)MwQUO,5BQOOQQ1G4Q1G4QO)NPQUO,5BPOOQQ,5BP,5BPOOQQ7+)i7+)iO*#nQUO7+)iOOQQ7+)o7+)oO*(mQVO1G7pO**oQUO7+*SO**tQUO,5?TO*+zQUO7+*[POOO7+$S7+$SP*-mQUO'#LnP*-uQUO,5BXP!Am{,UO7+$SPOOO1G7q1G7qO*-zQUO<_QUO1G0xOOQQ1G0y1G0yO*>pQUO'#ElOOQQ1G0z1G0zOOQQ7+&j7+&jO*?UQUO7+&jO*@[QVO7+&jOOQQ7+&h7+&hOOQQ,5@],5@]OOQQ-E=o-E=oO*AWQUO1G1TO*AbQUO1G1TO*A{QUO1G0fOOQQ1G0f1G0fO*CRQUO'#LSO*CZQUO1G1ROOQQ<VO)HiQUO'#JrO*N}QUO1G0TO+ `QVO1G0TOOQQ1G3u1G3uO+ gQUO,5>WO+ rQUO,5>XO+!aQUO,5>YO+#gQUO1G0TO%)sQUO7+,SO+$mQUO1G4ROOQQ,5@`,5@`OOQQ-E=r-E=rOOQQ<n,5>nO+0fQUOANAXOOQRANAXANAXO+0kQUO7+'`OOQRAN@cAN@cO+1wQVOAN@nO+2OQUOAN@nO!0wQVOAN@nO+3XQUOAN@nO+3^QUOAN@}O+3iQUOAN@}O+4oQUOAN@}OOQRAN@nAN@nO!MmQVOAN@}OOQRANAOANAOO+4tQUO7+'|O)8XQUO7+'|OOQQ7+(O7+(OO+5VQUO7+(OO+6]QVO7+(OO+6dQVO7+'hO+6kQUOANAjOOQR7+(h7+(hOOQR7+)P7+)PO+6pQUO7+)PO+6uQUO7+)POOQQ<= n<= nO+6}QUO7+,dO+7VQUO1G5[OOQQ1G5[1G5[O+7bQUO7+%oOOQQ7+%o7+%oO+7sQUO7+%oO+ `QVO7+%oOOQQ7+)a7+)aO+7xQUO7+%oO+9OQUO7+%oO!MmQVO7+%oO+9YQUO1G0]O*MhQUO1G0]O)FjQUO1G0]OOQQ1G0a1G0aO+9wQUO1G3qO+:}QVO1G3qOOQQ1G3q1G3qO+;XQVO1G3qO+;`QUO,5@^OOQQ-E=p-E=pOOQQ1G3r1G3rO%)nQUO<= nOOQQ7+*Z7+*ZPOQQ,5@d,5@dPOQQ-E=v-E=vOOQQ1G/}1G/}OOQQ,5?y,5?yOOQQ-E=]-E=]OOQRG26sG26sO+;wQUOG26YO!0wQVOG26YO+=QQUOG26YOOQRG26YG26YO!MmQVOG26iO!0wQVOG26iO+=VQUOG26iO+>]QUOG26iO+>bQUO<sQUO<xQUO<}QUO<uAN>uO+CmQUOAN>uO+DsQUOAN>uO!MmQVOAN>uO+DxQUO<VQUO'#CzO,>eQbO,59dO,5^QUO7+&OO,;hQUO7+&OO,>pQUO'#EwO,?cQUO'#EzO,@SQUO'#E^O,@XQUO'#GcO,@^QUO'#CwO,@cQUO'#CxO,@hQUO'#CxO,@mQUO'#GcO,@rQUO'#CwO,@wQUO'#KaO,AeQUO'#KaO,AoQUO'#CwO,AzQUO'#CwO,BVQUO'#CwO,;hQUO,5:xO,6xQUO,5:xO,6xQUO,5:xO,BbQUO'#KaO,BuQbO'#CxO,CQQUO'#CsO,CVQUO'#E^",stateData:",C{~O(pOSSOSRPQVPQ'ePQ'gPQ'hPQ'iPQ'jPQ'kPQ'lPQ'mPQ(qPQ~O*cOS~OPmO]eOb!]Oe!POmTOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!TxO!VfO!X!XO!Y!WO!i!YO!opO!r!`O!s!aO!t!aO!u!bO!v!aO!x!cO!{!dO#V#QO#a#VO#b#TO#i#OO#p!xO#t!fO#v!eO$R!gO$T!hO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO${!tO$}!uO%U!yO%_#ZO%`#[O%a#YO%c!zO%e#UO%g!{O%l#SO%o!|O%v!}O%|#PO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(vQO(xRO)WYO)ZaO)]|O)^{O)`iO)a!ZO)cXO)ocO)pdO~OR#cOV#^O'e#_O'g#`O'h#aO'i#aO'j#bO'k#bO'l#`O'm#`O(q#]O~OX#eO(u#gO(w#eO~O]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!TjX!VZX!VjX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!eZX!fZX!gZX!hZX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(xjX({ZX(|$]X(}ZX)OZX)ZZX)ZjX)[ZX)]ZX)]jX)^ZX)^jX)_ZX)`ZX)aZX)qZX~O)`jX!UZX~P(gO]$PO!V#nO!X#}O!Y#sO![#tO!^#wO!_#xO!a#zO!b#{O!e#{O!f#|O!h#kO({#hO(}#mO)O#mO)Z#oO)[#qO)]#pO)^#rO)_#jO)`#lO)a$OO~Oe$TO%Y$UO'[$VO'_$WO)P$QO~Om$XO~O!T$YO])TXe)TXs)TXt)TXu)TXv)TXw)TXx)TXy)TXz)TX!O)TX!V)TX!r)TX!s)TX!t)TX!u)TX!v)TX!x)TX!{)TX%v)TX&r)TX&s)TX(x)TX)Z)TX)])TX)^)TX)`)TX~Om$XO~P.^Om$XO!g$[O)q$[O~OX$]O)d$]O~O!R$^O)V)XP)a)XP~OPmO]$gOb!]Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!TxO!V$hO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$oO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(vQO)WYO)Z$mO)^$mO)`iO)a!ZO)cXO)ocO)pdO~Om$aO#t$nO(xRO~P0}O](_Xb'zXe(_Xm'zXm(_Xs'zXs(_Xt'zXt(_Xu'zXu(_Xv'zXv(_Xw'zXw(_Xx'zXx(_Xy'zXy(_Xz'zXz(_X|'zX!O'zX!V(_X!o(_X!r'zX!r(_X!s'zX!s(_X!t'zX!t(_X!u'zX!u(_X!v'zX!v(_X!x'zX!x(_X!{(_X#a'zX#b'zX%e'zX%l'zX%o(_X%v(_X&m'zX&r'zX&s'zX(x'zX(x(_X)Z(_X)](_X)^(_X~Ob!TOm$qOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(x$pO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO&r#WO&s$yO])hXe)hXm)hX!V)hX!{)hX%v)hX(x)hX)Z)hX)])hX)^)hX~O)`$xO~P:qOPmO]eOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!VfO!X!XO!Y!WO!i!YO!{!dO#V#QO%_#ZO%`#[O%a#YO%v$oO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(vQO)ZaO)]|O)^{O)a!ZO)cXO)ocO)pdO~Ob%SOm;UO!|%TO(x$zO~PfP?P?c?wFpMq!&v!-_P!4Y!4}!5rP!6^PPPPPPPP!6wP!8aP!9r!;[P!;bPPPPPP!;eP!;ePP!;ePP!;qPPPPPP!=s!AZP!A^PP!Az!BoPPPPP!BsP?S!DUPP?S!F]!H^!Hl!JR!KrP!K}P!L^!L^# n#$}#&e#)q#,{!H^#-VPP!H^#-^#-d#-V#-V#-gP#-k#.Y#.Y#.Y#.Y!KrP#.s#/U#1kP#2PP#3lP#3p#3x#4m#4x#7W#7`#7`#3pP#3pP#7g#7mP#7wPP#8d#9R#9s#8dP#:e#:qP#8dP#8dPP#8d#8dP#8dP#8dP#8dP#8dP#8dP#8dP#:t#7w#;bP#;wP#<^#<^#<^#<^#S$@Y$@`$@v$AQ$A]$Al$Ar$CQ$DP$DW$D_$De$Dm$Dw$D}$EY$E`$Ei$Eq$E|$FS$F^$Fd$Fn$Ft$F{$G[$Gb$GhP$Gn$Gv$G}$H]$Iy$JP$JV$J^$JjPPPPPPPPPPPP$Jp$JtPPPPP%#v$*i%#y%'R%)ZPP%)h%)kPPPPPPPPPP%)w%*z%+Q%+U%,{%.Y%.{%/S%1c%1iPPP%1s%2O%2R%2X%3`%3c%3m%3w%3{%5P%5r%5x#CeP%6c%6i%6y%6|%7^%7j%7n%7t%7z$*i$*l$*l%7}%8QP%8a%8dQ#dPa(s#b(p(q(r(t/]/_4rR#dP'`mO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#h#k#n#s#t#u#v#w#x#y#z#{#|#}$P$W$Y$[$g$h$m%_%o&S&U&Y&d&h&z&{'O'Q'R'e'l'm'|(c(e(l)q)w*m*n*q*v*w*{+]+_+m+o+p,U,W,s,v,|-d-e-h-n.W.X.]/U/X/d/k/t/v/{/}0p1T1Y1i1j1t1x2S2U2k2n2q3P3U3X3s4Y4]4b4k5d5o5{6i6m6p6r6t7O7Q7V7l7t7w8o8q8w8}9O9]9a9g9i9v9y9z:V:Y:`:b:g:l:pU%qm%r7[Q&o!`Q(p#^d0X*S0U0V0W0Z5X5Y5Z5^8[R7[3_b}Oaewx{!g&U*v&v$k[!W!X!k!n!r!s!v!x#X#Y#[#h#k#n#s#t#u#v#w#x#y#z#{#|#}$P$W$Y$[$g$h$m%_%o&S&Y&d&h&z&{'O'Q'R'e'l'm'|(c(e(l)q)w*m*n*q*w*{+]+_+m+o+p,U,W,s,v,|-d-e-h-n.W.X.]/U/X/d/k/t/v/{/}1T1i1j1t1x2S2U2k2n2q3P3U3X3s4Y4]4b4k5d5o5{6i6m6p6r6t7O7Q7V7l7t7w8o8q8w8}9O9]9a9g9i9v9y9z:V:Y:`:b:g:l:pS%bf0p#d%lgnp|#O$i%O%P%U%f%j%k%y&u'w'x(T*_*e*g*y+b,q,{-f-w.O.m.t.v0e1R1S1W1[2g2r5k6q;b;c;d;j;k;l;y;z;{;| MacroName LineComment BlockComment PreprocDirective #include String EscapeSequence SystemLibString Identifier ) ( ArgumentList ConditionalExpression AssignmentExpression CallExpression PrimitiveType FieldExpression FieldIdentifier DestructorName TemplateMethod ScopedFieldIdentifier NamespaceIdentifier TemplateType TypeIdentifier ScopedTypeIdentifier ScopedNamespaceIdentifier :: NamespaceIdentifier TypeIdentifier TemplateArgumentList < TypeDescriptor const volatile restrict _Atomic mutable constexpr constinit consteval StructSpecifier struct MsDeclspecModifier __declspec Attribute AttributeName Identifier AttributeArgs { } [ ] UpdateOp ArithOp ArithOp ArithOp LogicOp BitOp BitOp BitOp CompareOp CompareOp CompareOp > CompareOp BitOp UpdateOp , Number CharLiteral AttributeArgs VirtualSpecifier BaseClassClause Access virtual FieldDeclarationList FieldDeclaration extern static register inline thread_local AttributeSpecifier __attribute__ PointerDeclarator MsBasedModifier __based MsPointerModifier FunctionDeclarator ParameterList ParameterDeclaration PointerDeclarator FunctionDeclarator Noexcept noexcept RequiresClause requires True False ParenthesizedExpression CommaExpression LambdaExpression LambdaCaptureSpecifier TemplateParameterList OptionalParameterDeclaration TypeParameterDeclaration typename class VariadicParameterDeclaration VariadicDeclarator ReferenceDeclarator OptionalTypeParameterDeclaration VariadicTypeParameterDeclaration TemplateTemplateParameterDeclaration template AbstractFunctionDeclarator AbstractPointerDeclarator AbstractArrayDeclarator AbstractParenthesizedDeclarator AbstractReferenceDeclarator ThrowSpecifier throw TrailingReturnType CompoundStatement FunctionDefinition MsCallModifier TryStatement try CatchClause catch LinkageSpecification Declaration InitDeclarator InitializerList InitializerPair SubscriptDesignator FieldDesignator ExportDeclaration export ImportDeclaration import ModuleName PartitionName HeaderName CaseStatement case default LabeledStatement StatementIdentifier ExpressionStatement IfStatement if ConditionClause Declaration else SwitchStatement switch DoStatement do while WhileStatement ForStatement for ReturnStatement return BreakStatement break ContinueStatement continue GotoStatement goto CoReturnStatement co_return CoYieldStatement co_yield AttributeStatement ForRangeLoop AliasDeclaration using TypeDefinition typedef PointerDeclarator FunctionDeclarator ArrayDeclarator ParenthesizedDeclarator ThrowStatement NamespaceDefinition namespace ScopedIdentifier Identifier OperatorName operator ArithOp BitOp CompareOp LogicOp new delete co_await ConceptDefinition concept UsingDeclaration enum StaticAssertDeclaration static_assert ConcatenatedString TemplateDeclaration FriendDeclaration friend union FunctionDefinition ExplicitFunctionSpecifier explicit FieldInitializerList FieldInitializer DefaultMethodClause DeleteMethodClause FunctionDefinition OperatorCast operator TemplateInstantiation FunctionDefinition FunctionDefinition Declaration ModuleDeclaration module RequiresExpression RequirementList SimpleRequirement TypeRequirement CompoundRequirement ReturnTypeRequirement ConstraintConjuction LogicOp ConstraintDisjunction LogicOp ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator TemplateFunction OperatorName StructuredBindingDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator BitfieldClause FunctionDefinition FunctionDefinition Declaration FunctionDefinition Declaration AccessSpecifier UnionSpecifier ClassSpecifier EnumSpecifier SizedTypeSpecifier TypeSize EnumeratorList Enumerator DependentType Decltype decltype auto PlaceholderTypeSpecifier ParameterPackExpansion ParameterPackExpansion FieldIdentifier PointerExpression SubscriptExpression BinaryExpression ArithOp LogicOp LogicOp BitOp UnaryExpression LogicOp BitOp UpdateExpression CastExpression SizeofExpression sizeof CoAwaitExpression CompoundLiteralExpression NULL NewExpression new NewDeclarator DeleteExpression delete ParameterPackExpansion nullptr this UserDefinedLiteral ParamPack #define PreprocArg #if #ifdef #ifndef #else #endif #elif PreprocDirectiveName Macro Program",maxTerm:433,nodeProps:[["group",-35,1,8,11,15,16,17,19,71,72,100,101,102,104,191,208,229,242,243,270,271,272,277,280,281,282,284,285,286,287,290,292,293,294,295,296,"Expression",-13,18,25,26,27,43,255,256,257,258,262,263,265,266,"Type",-19,126,129,147,150,152,153,158,160,163,164,166,168,170,172,174,176,178,179,188,"Statement"],["isolate",-4,4,5,8,10,""],["openedBy",12,"(",52,"{",54,"["],["closedBy",13,")",51,"}",53,"]"]],propSources:[kU],skippedNodes:[0,3,4,5,6,7,10,297,298,299,300,301,302,303,304,305,306,308,349,350],repeatNodeCount:43,tokenData:"&AbMfR!UOX$eXY/]YZ5gZ]$e]^1g^p$epq/]qr5}rs8Zst:Ttu$euv!AWvw!Cbwx!Eqxy!Flyz!Gmz{!Hn{|!Iw|}!LX}!O!MY!O!P# m!P!Q#8a!Q!R#@T!R![$'k![!]$@f!]!^$Bn!^!_$Co!_!`%C`!`!a%Dg!a!b%HP!b!c$e!c!n%IQ!n!o%Jl!o!w%IQ!w!x%Jl!x!}%IQ!}#O%Mx#O#P& }#P#Q&3[#Q#R&5a#R#S%IQ#S#T$e#T#i%IQ#i#j&6j#j#o%IQ#o#p&8[#p#q&9]#q#r&;o#r#s&|#Y#o;x#o;'S$e;'S;=`/V<%lO$eGz?Xe)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#Y;x#Y#Z@j#Z#o;x#o;'S$e;'S;=`/V<%lO$eGz@ue)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#];x#]#^BW#^#o;x#o;'S$e;'S;=`/V<%lO$eGzBce)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#b;x#b#cCt#c#o;x#o;'S$e;'S;=`/V<%lO$eGzDPe)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#X;x#X#YEb#Y#o;x#o;'S$e;'S;=`/V<%lO$eGzEoc)d`(wS'e<`'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#o;x#o;'S$e;'S;=`/V<%lO$eGzGVg)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#`;x#`#aHn#a#b;x#b#c!!n#c#o;x#o;'S$e;'S;=`/V<%lO$eGzHyg)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#];x#]#^Jb#^#g;x#g#hMh#h#o;x#o;'S$e;'S;=`/V<%lO$eGzJme)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#Y;x#Y#ZLO#Z#o;x#o;'S$e;'S;=`/V<%lO$eGzL]c)d`(wS'f,U'l<`'m<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#o;x#o;'S$e;'S;=`/V<%lO$eGzMse)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#X;x#X#Y! U#Y#o;x#o;'S$e;'S;=`/V<%lO$eGz! cc)d`(wS'j<`'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#o;x#o;'S$e;'S;=`/V<%lO$eGz!!ye)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#W;x#W#X!$[#X#o;x#o;'S$e;'S;=`/V<%lO$eGz!$ge)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#];x#]#^!%x#^#o;x#o;'S$e;'S;=`/V<%lO$eGz!&Te)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#Y;x#Y#Z!'f#Z#o;x#o;'S$e;'S;=`/V<%lO$eGz!'sc)d`(wS'f,U'k<`'m<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#o;x#o;'S$e;'S;=`/V<%lO$eGz!)Zg)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#Y;x#Y#Z!*r#Z#b;x#b#c!7l#c#o;x#o;'S$e;'S;=`/V<%lO$eGz!+Pg)d`(wS'g<`'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#W;x#W#X!,h#X#b;x#b#c!1[#c#o;x#o;'S$e;'S;=`/V<%lO$eGz!,se)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#X;x#X#Y!.U#Y#o;x#o;'S$e;'S;=`/V<%lO$eGz!.ae)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#Y;x#Y#Z!/r#Z#o;x#o;'S$e;'S;=`/V<%lO$eGz!0Pc)d`(wS'h<`'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#o;x#o;'S$e;'S;=`/V<%lO$eGz!1ge)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#W;x#W#X!2x#X#o;x#o;'S$e;'S;=`/V<%lO$eGz!3Te)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#X;x#X#Y!4f#Y#o;x#o;'S$e;'S;=`/V<%lO$eGz!4qe)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#Y;x#Y#Z!6S#Z#o;x#o;'S$e;'S;=`/V<%lO$eGz!6ac)d`(wS'i<`'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#o;x#o;'S$e;'S;=`/V<%lO$eGz!7we)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#V;x#V#W!9Y#W#o;x#o;'S$e;'S;=`/V<%lO$eGz!9ee)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#`;x#`#a!:v#a#o;x#o;'S$e;'S;=`/V<%lO$eGz!;Re)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#i;x#i#j!Q#X#o;x#o;'S$e;'S;=`/V<%lO$eGz!>]e)d`(wS'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#X;x#X#Y!?n#Y#o;x#o;'S$e;'S;=`/V<%lO$eGz!?{c)d`(wSV<`'f,U'm<`OY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![;x![!c$e!c!};x!}#O$e#O#P'b#P#R$e#R#S;x#S#T$e#T#o;x#o;'S$e;'S;=`/V<%lO$eF`!Ae^)d`(wS%Z#t![8O'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q!_$e!_!`!Ba!`#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eF`!Bl[!g:t)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eF`!Co_)^8O)d`(wS%[#t'f,UOY$eZr$ers%dsv$evw!Dnwx*mx!P$e!P!Q-V!Q!_$e!_!`!Ba!`#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eF`!D{[)]8O%^#t)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eCb!E|Y)bW(wS)c8O'f,UOY*mZr*mrs&Zs!P*m!P!Q+d!Q#O*m#O#P'b#P;'S*m;'S;=`-P<%lO*mLS!Fw[)d`(wS]Kn'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$e-^!Gx[[r)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eF`!H{^)Z8O)d`(wS%Z#t'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q!_$e!_!`!Ba!`#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eF`!JU`)d`(wS%Z#t!Y8O'f,UOY$eZr$ers%dsw$ewx*mx{$e{|!KW|!P$e!P!Q-V!Q!_$e!_!`!Ba!`#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eF`!Kc[)d`!X:t(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eCr!Ld[!h8W)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eF`!Mga)d`(wS%Z#t!Y8O'f,UOY$eZr$ers%dsw$ewx*mx}$e}!O!KW!O!P$e!P!Q-V!Q!_$e!_!`!Ba!`!a!Nl!a#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eF`!Nw[)O:t)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eCr# x^)d`(wS'f,U(}8OOY$eZr$ers%dsw$ewx*mx!O$e!O!P#!t!P!Q-V!Q![#$w![#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eCr#!}])d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!O$e!O!P##v!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eCr#$R[)a8W)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eCj#%So)d`(wS!i8O'f,UOY$eZr$ers%dsw$ewx#'Tx!P$e!P!Q-V!Q![#$w![!g$e!g!h#1O!h!i#6j!i!n$e!n!o#6j!o!r$e!r!s#1O!s!w$e!w!x#6j!x#O$e#O#P'b#P#X$e#X#Y#1O#Y#Z#6j#Z#`$e#`#a#6j#a#d$e#d#e#1O#e#i$e#i#j#6j#j;'S$e;'S;=`/V<%lO$eCY#'[Z(wS'f,UOY*mZr*mrs&Zs!P*m!P!Q+d!Q![#'}![#O*m#O#P'b#P;'S*m;'S;=`-P<%lO*mCY#(Wo(wS!i8O'f,UOY*mZr*mrs&Zsw*mwx#'Tx!P*m!P!Q+d!Q![#'}![!g*m!g!h#*X!h!i#/a!i!n*m!n!o#/a!o!r*m!r!s#*X!s!w*m!w!x#/a!x#O*m#O#P'b#P#X*m#X#Y#*X#Y#Z#/a#Z#`*m#`#a#/a#a#d*m#d#e#*X#e#i*m#i#j#/a#j;'S*m;'S;=`-P<%lO*mCY#*bm(wS!i8O'f,UOY*mZr*mrs&Zs{*m{|#,]|}*m}!O#,]!O!P*m!P!Q+d!Q![#-c![!c*m!c!h#-c!h!i#-c!i!n*m!n!o#/a!o!w*m!w!x#/a!x#O*m#O#P'b#P#T*m#T#Y#-c#Y#Z#-c#Z#`*m#`#a#/a#a#i*m#i#j#/a#j;'S*m;'S;=`-P<%lO*mCY#,d_(wS'f,UOY*mZr*mrs&Zs!P*m!P!Q+d!Q![#-c![!c*m!c!i#-c!i#O*m#O#P'b#P#T*m#T#Z#-c#Z;'S*m;'S;=`-P<%lO*mCY#-lk(wS!i8O'f,UOY*mZr*mrs&Zsw*mwx#,]x!P*m!P!Q+d!Q![#-c![!c*m!c!h#-c!h!i#-c!i!n*m!n!o#/a!o!w*m!w!x#/a!x#O*m#O#P'b#P#T*m#T#Y#-c#Y#Z#-c#Z#`*m#`#a#/a#a#i*m#i#j#/a#j;'S*m;'S;=`-P<%lO*mCY#/jf(wS!i8O'f,UOY*mZr*mrs&Zs!P*m!P!Q+d!Q!h*m!h!i#/a!i!n*m!n!o#/a!o!w*m!w!x#/a!x#O*m#O#P'b#P#Y*m#Y#Z#/a#Z#`*m#`#a#/a#a#i*m#i#j#/a#j;'S*m;'S;=`-P<%lO*mCj#1Zo)d`(wS!i8O'f,UOY$eZr$ers%dsw$ewx*mx{$e{|#3[|}$e}!O#3[!O!P$e!P!Q-V!Q![#4j![!c$e!c!h#4j!h!i#4j!i!n$e!n!o#6j!o!w$e!w!x#6j!x#O$e#O#P'b#P#T$e#T#Y#4j#Y#Z#4j#Z#`$e#`#a#6j#a#i$e#i#j#6j#j;'S$e;'S;=`/V<%lO$eCj#3ea)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![#4j![!c$e!c!i#4j!i#O$e#O#P'b#P#T$e#T#Z#4j#Z;'S$e;'S;=`/V<%lO$eCj#4uk)d`(wS!i8O'f,UOY$eZr$ers%dsw$ewx#,]x!P$e!P!Q-V!Q![#4j![!c$e!c!h#4j!h!i#4j!i!n$e!n!o#6j!o!w$e!w!x#6j!x#O$e#O#P'b#P#T$e#T#Y#4j#Y#Z#4j#Z#`$e#`#a#6j#a#i$e#i#j#6j#j;'S$e;'S;=`/V<%lO$eCj#6uh)d`(wS!i8O'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q!h$e!h!i#6j!i!n$e!n!o#6j!o!w$e!w!x#6j!x#O$e#O#P'b#P#Y$e#Y#Z#6j#Z#`$e#`#a#6j#a#i$e#i#j#6j#j;'S$e;'S;=`/V<%lO$eMf#8la)d`(wS%Z#t![8OOY$eYZ&ZZr$ers%dsw$ewx*mxz$ez{#9q{!P$e!P!Q#:g!Q!_$e!_!`!Ba!`#O$e#O#P&Z#P;'S$e;'S;=`/V<%lO$eMf#9zX)d`(wS(qMQOY.]Zr.]rs)xsw.]wx,bx#O.]#P;'S.];'S;=`/P<%lO.]Mf#:pY)d`(wSSMQOY#:gZr#:grs#;`sw#:gwx#?Wx#O#:g#O#P#z<%lO#z<%lO#z<%lO#]#P;'S#z<%lO#bWSMQOY#z<%lO#}P;=`<%l#Ov)d`(wS!i8O'f,UOY$eZr$ers%dsw$ewx$3hx!O$e!O!P#NV!P!Q-V!Q![$1R![!c$e!c!g$1R!g!h$9o!h!i$1R!i!n$e!n!o#6j!o!r$e!r!s#1O!s!w$e!w!x#6j!x#O$e#O#P'b#P#T$e#T#U$1R#U#V$1R#V#X$1R#X#Y$9o#Y#Z$1R#Z#`$e#`#a#6j#a#d$e#d#e#1O#e#i$e#i#j#6j#j#l$e#l#m$/s#m;'S$e;'S;=`/V<%lO$eGz$@q^(|9b)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![$e![!]$Am!]#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eFh$Ax[m:|)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eCj$By[)`8O)d`(wS'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q#O$e#O#P'b#P;'S$e;'S;=`/V<%lO$eM^$C|aq8O%]#t)d`(wS'f,UOY$ERYZ$FZZr$ERrs$Fxsw$ERwx%4^x!P$ER!P!Q%8|!Q!^$ER!^!_%=a!_!`%?z!`!a%B_!a#O$ER#O#P%.w#P;'S$ER;'S;=`%=Z<%lO$ER3h$E[_)d`(wS'f,UOY$ERYZ$FZZr$ERrs$Fxsw$ERwx%4^x!P$ER!P!Q%8|!Q!`$ER!`!a%p!`!a%{_!g:t)d`(wS'f,UOY$ERYZ$FZZr$ERrs$Fxsw$ERwx%4^x!P$ER!P!Q%8|!Q!`$ER!`!a%`Zp$epq&>`qr$ers%dsw$ewx*mx!P$e!P!Q-V!Q!c$e!c!}&?z!}#O$e#O#P'b#P#R$e#R#S&?z#S#T$e#T#o&?z#o;'S$e;'S;=`/V<%lO$e,t&>ie)d`(wS'f,UOX$eXY&>`Zp$epq&>`qr$ers%dsw$ewx*mx!P$e!P!Q-V!Q!c$e!c!}&?z!}#O$e#O#P'b#P#R$e#R#S&?z#S#T$e#T#o&?z#o;'S$e;'S;=`/V<%lO$e,t&@Vc)d`(wSeY'f,UOY$eZr$ers%dsw$ewx*mx!P$e!P!Q-V!Q![&?z![!c$e!c!}&?z!}#O$e#O#P'b#P#R$e#R#S&?z#S#T$e#T#o&?z#o;'S$e;'S;=`/V<%lO$e",tokenizers:[bU,xU,1,2,3,4,5,6,7,8,9,10,new vt("j~RQYZXz{^~^O(s~~aP!P!Qd~iO(t~~",25,356)],topRules:{Program:[0,307]},dynamicPrecedences:{17:1,65:1,87:1,94:1,119:1,184:1,187:-10,240:-10,241:1,244:-1,246:-10,247:1,262:-1,267:2,268:2,306:-10,371:3,425:1,426:3,427:1,428:1},specialized:[{term:362,get:t=>yU[t]||-1},{term:33,get:t=>wU[t]||-1},{term:66,get:t=>TU[t]||-1},{term:369,get:t=>vU[t]||-1}],tokenPrec:24852});var _U=fe.define({name:"cpp",parser:Kb.configure({props:[se.add({IfStatement:ue({except:/^\s*({|else\b)/}),TryStatement:ue({except:/^\s*({|catch)\b/}),LabeledStatement:cO,CaseStatement:t=>t.baseIndent+t.unit,BlockComment:()=>null,CompoundStatement:We({closing:"}"}),Statement:ue({except:/^{/})}),le.add({"DeclarationList CompoundStatement EnumeratorList FieldDeclarationList InitializerList":we,BlockComment(t){return{from:t.from+2,to:t.to-2}}})]}),languageData:{commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\})$/,closeBrackets:{stringPrefixes:["L","u","U","u8","LR","UR","uR","u8R","R"]}}});function Jb(){return new oe(_U)}var ZU=1,RU=2,YU=276,zU=3,qU=277,e1=278,UU=279,VU=4,WU=5,jU=6,GU=7,t1=8,CU=9,EU=10,AU=11,LU=12,IU=13,MU=14,DU=15,NU=16,BU=17,FU=18,HU=19,KU=20,JU=21,eV=22,tV=23,OV=24,iV=25,nV=26,rV=27,aV=28,oV=29,sV=30,lV=31,cV=32,hV=33,fV=34,uV=35,dV=36,QV=37,$V=38,pV=39,mV=40,gV=41,PV=42,SV=43,XV=44,bV=45,xV=46,kV=47,yV=48,wV=49,TV=50,vV=51,_V=52,ZV=53,RV=54,YV=55,zV=56,qV=57,UV=58,VV=59,WV=60,jV=61,GV=62,hd=63,CV=64,EV=65,AV=66,LV={abstract:VU,and:WU,array:jU,as:GU,true:t1,false:t1,break:CU,case:EU,catch:AU,clone:LU,const:IU,continue:MU,declare:NU,default:DU,do:BU,echo:FU,else:HU,elseif:KU,enddeclare:JU,endfor:eV,endforeach:tV,endif:OV,endswitch:iV,endwhile:nV,enum:rV,extends:aV,final:oV,finally:sV,fn:lV,for:cV,foreach:hV,from:fV,function:uV,global:dV,goto:QV,if:$V,implements:pV,include:mV,include_once:gV,instanceof:PV,insteadof:SV,interface:XV,list:bV,match:xV,namespace:kV,new:yV,null:wV,or:TV,print:vV,readonly:_V,require:ZV,require_once:RV,return:YV,switch:zV,throw:qV,trait:UV,try:VV,unset:WV,use:jV,var:GV,public:hd,private:hd,protected:hd,while:CV,xor:EV,yield:AV,__proto__:null};function O1(t){let e=LV[t.toLowerCase()];return e??-1}function i1(t){return t==9||t==10||t==13||t==32}function n1(t){return t>=97&&t<=122||t>=65&&t<=90}function ta(t){return t==95||t>=128||n1(t)}function fd(t){return t>=48&&t<=55||t>=97&&t<=102||t>=65&&t<=70}var IV={int:!0,integer:!0,bool:!0,boolean:!0,float:!0,double:!0,real:!0,string:!0,array:!0,object:!0,unset:!0,__proto__:null},MV=new D(t=>{if(t.next==40){t.advance();let e=0;for(;i1(t.peek(e));)e++;let O="",i;for(;n1(i=t.peek(e));)O+=String.fromCharCode(i),e++;for(;i1(t.peek(e));)e++;t.peek(e)==41&&IV[O.toLowerCase()]&&t.acceptToken(ZU)}else if(t.next==60&&t.peek(1)==60&&t.peek(2)==60){for(let i=0;i<3;i++)t.advance();for(;t.next==32||t.next==9;)t.advance();let e=t.next==39;if(e&&t.advance(),!ta(t.next))return;let O=String.fromCharCode(t.next);for(;t.advance(),!(!ta(t.next)&&!(t.next>=48&&t.next<=55));)O+=String.fromCharCode(t.next);if(e){if(t.next!=39)return;t.advance()}if(t.next!=10&&t.next!=13)return;for(;;){let i=t.next==10||t.next==13;if(t.advance(),t.next<0)return;if(i){for(;t.next==32||t.next==9;)t.advance();let n=!0;for(let r=0;r{t.next<0&&t.acceptToken(UU)}),NV=new D((t,e)=>{t.next==63&&e.canShift(e1)&&t.peek(1)==62&&t.acceptToken(e1)});function BV(t){let e=t.peek(1);if(e==110||e==114||e==116||e==118||e==101||e==102||e==92||e==36||e==34||e==123)return 2;if(e>=48&&e<=55){let O=2,i;for(;O<5&&(i=t.peek(O))>=48&&i<=55;)O++;return O}if(e==120&&fd(t.peek(2)))return fd(t.peek(3))?4:3;if(e==117&&t.peek(2)==123)for(let O=3;;O++){let i=t.peek(O);if(i==125)return O==2?0:O+1;if(!fd(i))break}return 0}var FV=new D((t,e)=>{let O=!1;for(;!(t.next==34||t.next<0||t.next==36&&(ta(t.peek(1))||t.peek(1)==123)||t.next==123&&t.peek(1)==36);O=!0){if(t.next==92){let i=BV(t);if(i){if(O)break;return t.acceptToken(zU,i)}}else if(!O&&(t.next==91||t.next==45&&t.peek(1)==62&&ta(t.peek(2))||t.next==63&&t.peek(1)==45&&t.peek(2)==62&&ta(t.peek(3)))&&e.canShift(qU))break;t.advance()}O&&t.acceptToken(YU)}),HV=re({"Visibility abstract final static":u.modifier,"for foreach while do if else elseif switch try catch finally return throw break continue default case":u.controlKeyword,"endif endfor endforeach endswitch endwhile declare enddeclare goto match":u.controlKeyword,"and or xor yield unset clone instanceof insteadof":u.operatorKeyword,"function fn class trait implements extends const enum global interface use var":u.definitionKeyword,"include include_once require require_once namespace":u.moduleKeyword,"new from echo print array list as":u.keyword,null:u.null,Boolean:u.bool,VariableName:u.variableName,"NamespaceName/...":u.namespace,"NamedType/...":u.typeName,Name:u.name,"CallExpression/Name":u.function(u.variableName),"LabelStatement/Name":u.labelName,"MemberExpression/Name":u.propertyName,"MemberExpression/VariableName":u.special(u.propertyName),"ScopedExpression/ClassMemberName/Name":u.propertyName,"ScopedExpression/ClassMemberName/VariableName":u.special(u.propertyName),"CallExpression/MemberExpression/Name":u.function(u.propertyName),"CallExpression/ScopedExpression/ClassMemberName/Name":u.function(u.propertyName),"MethodDeclaration/Name":u.function(u.definition(u.variableName)),"FunctionDefinition/Name":u.function(u.definition(u.variableName)),"ClassDeclaration/Name":u.definition(u.className),UpdateOp:u.updateOperator,ArithOp:u.arithmeticOperator,"LogicOp IntersectionType/&":u.logicOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,ControlOp:u.controlOperator,AssignOp:u.definitionOperator,"$ ConcatOp":u.operator,LineComment:u.lineComment,BlockComment:u.blockComment,Integer:u.integer,Float:u.float,String:u.string,ShellExpression:u.special(u.string),"=> ->":u.punctuation,"( )":u.paren,"#[ [ ]":u.squareBracket,"${ { }":u.brace,"-> ?->":u.derefOperator,", ; :: : \\":u.separator,"PhpOpen PhpClose":u.processingInstruction}),KV={__proto__:null,static:325,STATIC:325,class:351,CLASS:351},r1=de.deserialize({version:14,states:"%$dQ`OWOOQhQaOOP%oO`OOOOO#t'#Hh'#HhO%tO#|O'#DuOOO#u'#Dx'#DxQ&SOWO'#DxO&XO$VOOOOQ#u'#Dy'#DyO&lQaO'#D}O'[QdO'#EQO+QQdO'#IrO+_QdO'#ERO-RQaO'#EXO/bQ`O'#EUO/gQ`O'#E_O2UQaO'#E_O2]Q`O'#EgO2bQ`O'#EqO-RQaO'#EqO2mQpO'#FOO2rQ`O'#FOOOQS'#Ir'#IrO2wQ`O'#ExOOQS'#Ii'#IiO5SQdO'#IfO9UQeO'#F]O-RQaO'#FlO-RQaO'#FmO-RQaO'#FnO-RQaO'#FoO-RQaO'#FoO-RQaO'#FrOOQO'#Is'#IsO9cQ`O'#FxOOQO'#Ht'#HtO9kQ`O'#HXO:VQ`O'#FsO:bQ`O'#HfO:mQ`O'#GPO:uQaO'#GQO-RQaO'#G`O-RQaO'#GcO;bOrO'#GfOOQS'#JR'#JROOQS'#JQ'#JQOOQS'#If'#IfO/bQ`O'#GmO/bQ`O'#GoO/bQ`O'#GtOhQaO'#GvO;iQ`O'#GwO;nQ`O'#GzO:]Q`O'#G}O;sQeO'#HOO;sQeO'#HPO;sQeO'#HQO;}Q`O'#HROhQ`O'#HVO:]Q`O'#HWO>mQ`O'#HWO;}Q`O'#HXO:]Q`O'#HZO:]Q`O'#H[O:]Q`O'#H]O>rQ`O'#H`O>}Q`O'#HaOQO!$gQ`O,5POOQ#u-E;h-E;hO!1TQ`O,5=tOOO#u,5:_,5:_O!1`O#|O,5:_OOO#u-E;g-E;gOOOO,5>},5>}OOQ#y1G0T1G0TO!1hQ`O1G0YO-RQaO1G0YO!2zQ`O1G0qOOQS1G0q1G0qOOQS'#Eo'#EoOOQS'#Im'#ImO-RQaO'#ImOOQS1G0r1G0rO!4^Q`O'#IpO!5sQ`O'#IrO!6QQaO'#EwOOQO'#Ip'#IpO!6[Q`O'#IoO!6dQ`O,5;aO-RQaO'#FXOOQS'#FW'#FWOOQS1G1[1G1[O!6iQdO1G1dO!8nQdO1G1dO!:ZQdO1G1dO!;vQdO1G1dO!=cQdO1G1dO!?OQdO1G1dO!@kQdO1G1dO!BWQdO1G1dO!CsQdO1G1dO!E`QdO1G1dO!F{QdO1G1dO!HhQdO1G1dO!JTQdO1G1dO!KpQdO1G1dO!M]QdO1G1dO!NxQdO1G1dOOQT1G0_1G0_O!#_Q`O,5<_O#!eQaO'#EYOOQS1G0[1G0[O#!lQ`O,5:zOEdQaO,5:zO#!qQaO,5;OO#!xQdO,5:|O#$wQdO,5?VO#&vQaO'#HmO#'WQ`O,5?UOOQS1G0e1G0eO#'`Q`O1G0eO#'eQ`O'#IlO#(}Q`O'#IlO#)VQ`O,5;SOG|QaO,5;SOOQS1G0w1G0wOOQO,5>^,5>^OOQO-E;p-E;pOOQS1G1U1G1UO#)sQdO'#FQO#+xQ`O'#HsOJ}QpO1G1UO2wQ`O'#HpO#+}QtO,5;eO2wQ`O'#HqO#,lQtO,5;gO#-ZQaO1G1OOOQS,5;h,5;hO#/jQtO'#FQO#/wQdO1G0dO-RQaO1G0dO#1dQdO1G1aO#3PQdO1G1cOOQO,5X,5>XOOQO-E;k-E;kOOQS7+&P7+&PO!+lQaO,5;TO$$mQaO'#HnO$$wQ`O,5?WOOQS1G0n1G0nO$%PQ`O1G0nPOQO'#FQ'#FQOOQO,5>_,5>_OOQO-E;q-E;qOOQS7+&p7+&pOOQS,5>[,5>[OOQS-E;n-E;nO$%UQtO,5>]OOQS-E;o-E;oO$%sQdO7+&jO$'xQtO'#FQO$(VQdO7+&OOOQS1G0j1G0jOOQO,5>a,5>aOOQO-E;s-E;sOOQ#u7+(x7+(xO!$_QdO7+(xOOQ#u7+(}7+(}O#JuQ`O7+(}O#JzQ`O7+(}OOQ#u7+(z7+(zO!.`Q`O7+(zO!1WQ`O7+(zO!1TQ`O7+(zO$)rQ`O,5j,5>jOOQS-E;|-E;|O$/]QdO7+'qO$/mQpO7+'qO$/xQdO'#IzOOQO,5qOOQ#u,5>q,5>qOOQ#u-EpOOQS-EvQdO1G2^OOQS,5>i,5>iOOQS-E;{-E;{OOQ#u7+({7+({O$@`Q`O'#GXO:]Q`O'#H_OOQO'#IW'#IWO$AVQ`O,5=xOOQ#u,5=x,5=xO$BSQ!bO'#EQO$BkQ!bO7+(}O$ByQpO7+)RO#KbQpO7+)RO$CRQ`O'#HbO!$_QdO7+)RO$CaQdO,5>sOOQS-EVOOQS-E;i-E;iO$ElQdO<Z,5>ZOOQO-E;m-E;mOOQS1G1_1G1_O$9cQaO,5:uO$HnQaO'#HlO$H{Q`O,5?ROOQS1G0`1G0`OOQS7+&Q7+&QO$ITQ`O7+&UO$JjQ`O1G0oO$LPQ`O,5>YOOQO,5>Y,5>YOOQO-E;l-E;lOOQS7+&Y7+&YOOQS7+&U7+&UOOQ#u<d,5>dOOQO-E;v-E;vOOQS<mOOQ#u-EnOOQO-EW,5>WOOQO-E;j-E;jO!+lQaO,5;UOOQ#uANBTANBTO#JuQ`OANBTOOQ#uANBQANBQO!.`Q`OANBQO!+lQaO7+'hOOQO7+'l7+'lO%.^Q`O7+'hO%/sQ`O7+'hO%0OQ`O7+'lO%0TQ`O7+'mO!+lQaO7+'mOOQO7+'m7+'mO%0cQdO'#F}OOQO'#Hw'#HwO%0tQ`O,5f,5>fOOQS-E;x-E;xOOQO1G2_1G2_O$1yQdO1G2_O$0ZQpO1G2_O#JzQ`O1G2]O!.pQdO1G2aO%%`Q!bO1G2]O!$_QdO1G2]OOQO1G2a1G2aOOQO1G2]1G2]O%4PQaO'#G]OOQO1G2b1G2bOOQSAN@xAN@xO!.`Q`OAN@xOOOQ<]O%7|Q!bO'#FQO!$_QdOANBXOOQ#uANBXANBXO:]Q`O,5=}O%8bQ`O,5=}O%8mQ`O'#IYO%9RQ`O,5?tOOQS1G3h1G3hOOQS7+)y7+)yP%+zQpOANBXO%9ZQ`O1G0pOOQ#uG27oG27oOOQ#uG27lG27lO%:pQ`O<e,5>eO%=tQ`O,5>eOOQO-E;w-E;wO%=yQ`O1G5POOQSG26VG26VO$,bQpOG26VO2wQ`OG26VO%>RQdOG26cO-RQaOG26cOOQO7+'y7+'yO$1yQdO7+'yO%%`Q!bO7+'wO!$_QdO7+'wOOQO7+'{7+'{OOQO7+'w7+'wO%>cQ`OLD+}O%?rQ`O'#IrO%?|Q`O'#IiO!$_QdO'#IPO%AvQaO,5t,5>tOOQO-Ek,5>kOOQP-E;}-E;}OOQO1G2c1G2cOOQ#uLD,kLD,kOOQTG27[G27[O!$_QdOLD-RO!$_QdO<OO%HaQ`O,5>OPOQ#uLD-_LD-_OOQO7+'o7+'oO+_QdO7+'oOOQS!$( ]!$( ]OOQOAN@}AN@}OOQS1G2d1G2dOOQS1G2e1G2eO%HlQdO1G2eOOQ#u!$(!m!$(!mOOQOANBVANBVOOQO1G3j1G3jO:]Q`O1G3jOOQO<dQdO1G1dO&@YQdO1G1dO&BOQdO1G1dO&CtQdO1G1dO&EjQdO1G1dO&G`QdO,5:|O&IUQdO,5?VO&JzQdO1G0dO#-ZQaO1G0dO&LpQdO1G1aO&NfQdO1G1cO#-ZQaO1G2VO#-ZQaO7+%tO'![QdO7+%tO'$QQdO7+&OO#-ZQaO7+'qO'%vQdO7+'qO''lQdO<`Q`O1G2VO'>hQ`O7+'qO'>pQpO7+'qO'>{QpO<WQdO1G1dO(@]QdO1G1dO(BbQdO,5:|O(DgQdO,5?VO(FlQdO1G0dO'2gQaO1G0dO(HqQdO1G1aO(JvQdO1G1cO'2gQaO1G2VO'2gQaO7+%tO(L{QdO7+%tO) QQdO7+&OO'2gQaO7+'qO)#VQdO7+'qO)%[QdO<aQdO,5rQdO1G1cOpO*JUQ`O,5>VO*KkQdO<zQ`O,5<}O+@aQ`O1G0YO!+lQaO1G0YO+AsQ`O1G1dO+CYQ`O1G1dO+DoQ`O1G1dO+FUQ`O1G1dO+GkQ`O1G1dO+IQQ`O1G1dO+JgQ`O1G1dO+K|Q`O1G1dO+McQ`O1G1dO+NxQ`O1G1dO,!_Q`O1G1dO,#tQ`O1G1dO,%ZQ`O1G1dO,&pQ`O1G1dO,(VQ`O1G1dO,)lQ`O1G0dO!+lQaO1G0dO,+RQ`O1G1aO,,hQ`O1G1cO,-}Q`O1G2VO$9cQaO,5mQ`O'#FsO!+lQaO'#EbO!+lQaO'#IkO,>uQaO,5:xO,>|QaO,5:xO$9cQaO,5;uO+2^QaO,5;uO$9cQaO,5;wO,@{QdO,5cQ`O,5SQaO,5;OO.>ZQaO,5;OO$9cQaO1G0jO+2^QaO1G0jO.@YQ`O'#IkO.AlQdO'#IkO.ERQ`O'#IfO.E`Q`O'#GPO.EhQaO,5:nO.EoQ`O,5`O~P$9cOP8QOU_O[:{Oo?}Os#fOx:{Oy:{O}aO!O^O!QaO#X`O#dhO#fbO#gcO#sdO$[<_O$d:{O$e<_O$hqO%TyO~P$9cOP8QOU_O[:{Oo?}Os#fOx:{Oy:{O}aO!O^O!QzO#X`O#dhO#fbO#gcO#sdO$[<_O$d:{O$e<_O$hqO%TxO#T#PO$R8]O$S8aO$T8bO$U8cO$V8dO$X8fO$Y8gO$Z8hO$[8iO$]8jO$^8kO$_8kO%T#cO~P!%dOT8^Oz8[O!S8_O!c8`O!w:hO#P>wO#T#PO$R8]O$S8aO$T8bO$U8cO$V8dO$X8fO$Y8gO$Z8hO$[8iO$]8jO$^8kO$_8kO%T#cO!n'_X!r'_X!o'_X#O'_X!p'_X'Q'_X~P!%dOT'YXz'YX!S'YX!c'YX!w'YX!z'YX#O'YX#T'YX#X'YX#a'YX#b'YX#y'YX$R'YX$S'YX$T'YX$U'YX$V'YX$X'YX$Y'YX$Z'YX$['YX$]'YX$^'YX$_'YX%T'YX~O#|;OO$O;PO!y'YX~P.CbO!z$hO#T?TO~O!r;]O~PeO~O!r@TO#P:{O~OT8^Oz8[O!S8_O!c8`O!r>fO!w:hO#T#PO$R8]O$S8aO$T8bO$U8cO$V8dO$X8fO$Y8gO$Z8hO$[8iO$]8jO$^8kO$_8kO%T#cO~P!%dOT8^Oz8[O!S8_O!c8`O!r>gO!w:hO#T#PO$R8]O$S8aO$T8bO$U8cO$V8dO$X8fO$Y8gO$Z8hO$[8iO$]8jO$^8kO$_8kO%T#cO~P!%dO!r@UO#P>lO~O!r@VO#P>qO~O#P>qO#T'ZO#n'XO~O#P:{O#T'ZO#n'XO~O#P>rO#T'ZO#n'XO~O#P>uO#T'ZO#n'XO~O!z$hO#T?wO~Oo?QOs$lO~O!z$hO#T?xO~O#O?ZO!n'rX!p'rX'Q'rX~O!z$hO#T@PO~O!z$hO#T@QO~O!z$hO#T@RO~Oo?uOs$lO~Oo@OOs$lO~Oo?}Os$lO~O%X$]%W$k!e$^#d%`#g'w'X#f~",goto:"%2U'}PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP(OP(VPP(](`PPP(xP(`*q(`6gP6gPP>hGOGRPP6gGX! YP! ]P! ]PPGX! l! o! sGXGXPP! vP! yPPGX!)}!0z!0zGX!1OP!1O!1O!1O!2ZP!;s!X#>_#>e#>o#>u#>{#?Z#?a#?k#?q#?w#?}#@T#@_#@i#@o#@u#APPPPPPPPP#AV#AZP#BP$)^$)a$)k$1x$2U$2k$2qP$2t$2w$2}$6U$@U$Ho$Hr$Hx$H{$IS$Lf$Li$Lr$Lz$MU$Mm$NT% O%)SPP%1U%1Y%1f%1{%2RQ!nQT!qV!rQUOR%x!mRVO}!hPVX!S!j!r!s!w%O%Q%T%V(j,U,X.z.|/U1T1U1^2e|!hPVX!S!j!r!s!w%O%Q%T%V(j,U,X.z.|/U1T1U1^2eQ%_!ZQ%h!aQ%m!eQ'k$cQ'z$iQ)f%lQ+['}Q,o)SU.T+X+Z+aQ.o+tQ/e,nS0g.Y.ZQ0w.iQ1v0]S2P0f0jQ2Y0tQ2z1xQ2}2QR3e3O|ZPVX!S!j!r!s!w%O%Q%T%V(j,U,X.z.|/U1T1U1^2e2pf]`cgjklmnoprxyz!W!X!Y!]!e!f!g!y!z#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r#}$Q$R$T$h$z%S%U%d%r%}&S&W&[&q&t&u&x'P'X'Z']'a'e'p'v'{(T(X(Y([(](^(v)V)Z)b)e)i)p)w){*X*]*^*t*y+O+P+U+]+`+b+c+n+q+u+x,^,g,i,k,m,y,|-S-d-e-x-z.P.X.[.a.b.c.g/^/s0O0T0Z0h0k1X1Y1h1q1s1w2R2T2s2{3w3y3|3}4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7r7s7t7x8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:V:W:X:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?]?^?c?g?h?y?z?{@S@T@U@VS$ku$`Q%W!V^%e!_$a'j)[.k0u2WQ%i!bQ%j!cQ%k!dQ%v!kS&V!|)}Q&]#OQ'l$dQ'm$eS(O$j'hQ)U%`Q*x'nQ,O(dQ,S(fQ-W)kU.l+r.h0sQ.v,PQ.w,QQ/i,zS0].O0_Q1_/hQ1k/wS2]0y2`Q2p1fQ3_2qQ3g3TQ3h3UQ3l3`Q3o3iR3p3m0}!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(T(X(j(v)V)Z)p)w){)}*X*]*^+P+b,U,X,^,g,i,k-d-e-x.P.a.z.|/U/^0O0T0Z0k0y1T1U1X1Y1^1q1s1w2T2`2e2{3y4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?h0|!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(T(X(j(v)V)Z)p)w){)}*X*]*^+P+b,U,X,^,g,i,k-d-e-x.P.a.z.|/U/^0O0T0Z0k0y1T1U1X1Y1^1q1s1w2T2`2e2{3y4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?hQ#h^Q%O!PQ%P!QQ%Q!RQ,f(uQ.z,VR/O,YR&r#hQ*S&qR/|-e0}hPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(T(X(j(v)V)Z)p)w){)}*X*]*^+P+b,U,X,^,g,i,k-d-e-x.P.a.z.|/U/^0O0T0Z0k0y1T1U1X1Y1^1q1s1w2T2`2e2{3y4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?hR#j_k#n`j#i#q&t&x5m5n9a:Z:[:]:^R#saT&}#r'PR-l*^R&R!{0|hPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(T(X(j(v)V)Z)p)w){)}*X*]*^+P+b,U,X,^,g,i,k-d-e-x.P.a.z.|/U/^0O0T0Z0k0y1T1U1X1Y1^1q1s1w2T2`2e2{3y4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?hR#tb-z!}[#e#k#u$U$V$W$X$Y$Z$v$w%X%Z%]%a%s%|&O&U&_&`&a&b&c&d&e&f&g&h&i&j&k&l&m&n&v&w&|'`'b'c(g(z)x)z)|*Q*W*j*l+e+h,r,u-[-^-`-i-j-k-}._/T/a/{0V0a0l1m1p1u2S2[2h2w2x2y3P3d4f4g4m4n4o4p4q4r4s4u4v4w4x4y4z4{4|4}5O5P5Q5R5S5T5U5V5W5Y5Z5^5_5a5b5c5f5g5i5}6n6o6p6q6r6s6t6v6w6x6y6z6{6|6}7O7P7Q7R7S7T7U7V7W7X7Z7[7_7`7b7c7d7g7h7j7v7z8r8s8t8u8v8w8y8z8{8}9O9P9Q9R9S9T9U9V9W9X9Y9Z9[9]9_9`9c9e9f9m9n9p9r9s9t9u9v9w9z9{9}:Q:y;R;S;T;U;V;W;Z;[;^;_;`;a;b;c;d;e;f;g;h;i;j;k;l;m;o;p;u;v;y;{;|O>P>Q>R>S>T>U>V>W>X>Y>Z>[>]>^>_>b>c>d>h>i>j>k>m>n>o>p>s>t>v>{>|?U?V?W?`?k?lQ'd$[Y(Z$s8x;Y=g=hS(_3x7uQ(b$tR+}(cT&X!|)}#c$Pg#}$h'X'Z'p'v'{(Y(^)b)e*t*y+O+U+]+`+c+n+q+r+x,m,y,|-z.X.[.b.g.h0h0s2R3w3|3}7r7s7t8Q:V:W:X?]?^?c?y?z?{@S@T@U@V3}fPVX]`cgjklmnoprxyz!S!W!X!Y!]!e!f!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r#}$Q$R$T$h$z%O%Q%S%T%U%V%d%r%}&S&W&[&q&t&u&x'P'X'Z']'a'e'p'v'{(T(X(Y([(](^(j(v)V)Z)b)e)i)p)w){)}*X*]*^*t*y+O+P+U+]+`+b+c+n+q+r+u+x,U,X,^,g,i,k,m,y,|-S-d-e-x-z.P.X.[.a.b.c.g.h.z.|/U/^/s0O0T0Z0h0k0s0y1T1U1X1Y1^1h1q1s1w2R2T2`2e2s2{3w3y3|3}4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7r7s7t7x8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:V:W:X:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?]?^?c?g?h?y?z?{@S@T@U@V[#wd#x3q3r3s3th'V#z'W)h-R-Y/p/z1l3u3v3z3{Q)g%nR-X)mY#yd%n)m3q3rV'T#x3s3t1fePVX]`cjklmnoprxyz!S!W!X!Y!]!e!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a'e(T(X([(](j(v)V)Z)i)p)w){)}*X*]*^+P+b+u,U,X,^,g,i,k-S-d-e-x.P.a.c.z.|/U/^/s0O0T0Z0k0y1T1U1X1Y1^1h1q1s1w2T2`2e2s2{3y4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?hQ%o!fQ)n%r#Q4Pg#}$h'X'Z'p'v'{(Y(^)b*y+O+U+]+`+c+n+q+x,m,y,|-z.X.[.b.g0h2R7r7s7t8Q:V:W:X?]?^?c?y?z?{@S@T@U@Va4Q)e*t+r.h0s3w3|3}Y'T#z)h-Y3u3vZ*e'W-R/z3z3{0xhPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(T(X(j(v)V)Z)p)w){)}*X*]*^+P+b,U,X,^,g,i,k-d-e-x.P.a.z.|/U/^0O0T0Z0k1T1U1X1Y1^1q1s1w2T2e2{3y4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?hT2^0y2`R&^#OR&]#O!r#Z[#e#u$U$V$W$X$Z$s$w%X%Z%]&`&a&b&c&d&e&f&g'`'b'c(g)x)z*Q*l+h-^._0l2S2h2y3P3d9_9`!Y4_3x4m4n4o4p4r4s4u4v4w4x4y4z4{4|5U5V5W5Y5Z5^5_5a5b5c5f5g5i!^6b4g6n6o6p6q6s6t6v6w6x6y6z6{6|6}7V7W7X7Z7[7_7`7b7c7d7g7h7j7u7v#b8e#k%a%s%|&O&v&w&|(z*W+e,r,u-[-i-k/a4f5}7z8r8s8t8u8w8x8y8}9O9P9Q9R9S9T9U9c9e9f9m9p9r9u9w9z9{9}:Q:y;[{>|?U?k?l#O:r&U)|-`-j-}0V0a1m1p1u2w2x8z8{9n9s9t9v;R;S;T;U;W;Y;Z;^;_;`;a;b;c;d;e;m;o;p;u;v;y;{;|[>]!`^>b>d>h>j>m>n>p>s>t>v?V?W?`o_>c>i>k>oS$iu#fQ$qwU'}$j$l&pQ(P$kS(R$m$rQ+_(OQ+a(QQ+d(SQ1x0]Q5|7mS6P7o7pQ6Q7qQ7y:RS7{:S:TQ7|:UQ;X?OS;q?Q?TQ;x?YQ?S?sS?X?u?wQ?_?xQ?i?|S?j?}@QS?m@O@PR?n@RT'w$h+U!csPVXt!S!j!r!s!w$h%O%Q%T%V'p(^(j)b+U+n+x,U,X,y,|.z.|/U1T1U1^2eQ$]rR*n'eQ.Q+TQ.n+sQ0[-|Q0p.eQ1t0YQ2U0qR3Q2VT0^.O0_Q+Z'|Q.Z+^R0j.^Q(a$tQ)`%iQ)u%vQ*w'mS+|(b(cQ-u*xR.u+}Q(`$tQ)d%kQ)t%vQ*s'lS*v'm)uU+{(a(b(cS-t*w*xS.t+|+}Q/n-PQ0Q-rQ0S-uR0|.uQ(_$tQ)_%iQ)a%jQ)s%vU*u'm)t)uW+z(`(a(b(cQ,x)`U-s*v*w*xU.s+{+|+}S0R-t-uS0{.t.uQ1o0SR2b0|X+v(^)b+x,|b%f!_$a'j+r.h.k0s0u2WR,v)[Q$ovS+f(U?Zg?v(^)b+m+n+q+x,y,|.f.g0rR0z.pT2_0y2`1P|PVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(T(X(j(v)V)Z)p)w){)}*X*]*^+P+b,U,X,^,g,i,k,q-d-e-x.P.a.z.|/U/^0O0T0Z0k0y1T1U1X1Y1^1q1s1w2T2`2e2{3y4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?hT$y{$|Q,S(fR.w,QT${{$|Q(l%OQ(t%QQ(y%TQ(|%VQ/S,]Q1Q/OQ1R/RR2k1^R(o%PX,`(m(n,a,cR(p%PX(r%Q%T%V1^R%T!T_%b!]%S(v,g,i/^1XR%V!UR/b,kR,n)RQ)c%kS*r'l)dS-q*s-PS0P-r/nR1n0QT,{)b,|Q-T)hU/q-Q-R-YU1d/p/y/zR2v1lR/t-SR2t1hSSO!mR!oSQ!rVR%y!rQ!jPS!sV!rQ!wX[%u!j!s!w,U1U2eQ,U(jQ1U/UR2e1TQ)q%sS-])q9kR9k8{Q-f*SR/}-fQ&y#oS*Z&y9bR9b:}S*_&|&}R-m*_Q*O&YR-b*O!l'Y#|'o*h*|+R+X+i+m-{.Y.].`.f/d0f0i0m0r2Q3O6R6S6T7n7}8O8P;z;}w>xQ+e(TQ+h(XQ,r)VQ,u)ZQ-[)pQ-^)wQ-`){Q-i*XQ-j*]Q-k*^^-o4O5k7l:Py>zQ-}+PQ._+bQ/T,^Q/a,kQ/{-dQ0V-xQ0a.PQ0l.aQ1m0OQ1p0TQ1u0ZQ2S0kU2[0y2`:{Q2h1YQ2w1qQ2x1sQ2y1wQ3P2TQ3d2{Q3x4RQ4fjQ4g5nQ4m5oQ4n5qQ4o5sQ4p5uQ4q5wQ4r5yQ4s4TQ4u4VQ4v4WQ4w4XQ4x4YQ4y4ZQ4z4[Q4{4]Q4|4^Q4}4_Q5O4`Q5P4aQ5Q4bQ5R4cQ5S4dQ5T4eQ5U4hQ5V4iQ5W4jQ5Y4kQ5Z4lQ5^4tQ5_5XQ5a5[Q5b5]Q5c5`Q5f5dQ5g5eQ5i5hQ5}5{Q6n5pQ6o5rQ6p5tQ6q5vQ6r5xQ6s5zQ6t6WQ6v6YQ6w6ZQ6x6[Q6y6]Q6z6^Q6{6_Q6|6`Q6}6aQ7O6bQ7P6cQ7Q6dQ7R6eQ7S6fQ7T6gQ7U6hQ7V6iQ7W6jQ7X6kQ7Z6lQ7[6mQ7_6uQ7`7YQ7b7]Q7c7^Q7d7aQ7g7eQ7h7fQ7j7iQ7u6UQ7v5mQ7z7xQ8r8RQ8s8SQ8t8TQ8u8UQ8v8VQ8w8WQ8x8XQ8y8ZU8z,g/^1XQ8{%dQ8}8]Q9O8^Q9P8_Q9Q8`Q9R8aQ9S8bQ9T8cQ9U8dQ9V8eQ9W8fQ9X8gQ9Y8hQ9Z8iQ9[8jQ9]8kQ9_8mQ9`8nQ9c8oQ9e8pQ9f8qQ9m8|Q9n9^Q9p9dQ9r9gQ9s9hQ9t9jQ9u9lQ9v9oQ9w9qQ9z9xQ9{9yQ9}9|Q:Q:ZU:y#i&t9aQ;R:_Q;S:`Q;T:aQ;U:bQ;V:cQ;W:dQ;Y:eQ;Z:gQ;[:hQ;^:jQ;_:kQ;`:lQ;a:mQ;b:nQ;c:oQ;d:pQ;e:qQ;f:rQ;g:sQ;h:tQ;i:uQ;j:vQ;k:wQ;l:xQ;m;OQ;o;PQ;p;QQ;u;]Q;v;nQ;y;sQ;{;tQ;|;wQOP<{Q>Q<|Q>R<}Q>S=OQ>T=PQ>U=QQ>V=RQ>W=SQ>X=TQ>Y=UQ>Z=VQ>[=XQ>]=YQ>^=ZQ>_=[Q>b=]Q>c=^Q>d=_Q>h=jQ>i=kQ>j>`Q>k>aQ>m>eQ>n>fQ>o>gQ>p>lQ>s>qQ>t>rQ>v>uQ>{:]Q>|:[Q?U?PQ?V:zQ?W:|Q?`;rQ?k?gR?l?hR*T&qQ%t!gQ)Y%dT*R&q-e$WiPVX]cklmnopxyz!S!W!X!Y!j!r!s!w#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a$Q$R$T$z%O%Q%T%V%}&S&['a(X(j)w+b,U,X.a.z.|/U0k1T1U1Y1^1w2T2e2{3y4O8m8n!t5l']4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5o5q5s5u5w5y7k7l!x7w5j5k5m5n5p5r5t5v5x5z6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i$`:Y`j!]!g!y!z#i#l#m#q#r%S%U&q&t&u&x'P(T(v)V)Z)p*X*^,i,k-e5{7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8o8p8q8|9a9d9g9l9q9x9y9|:O:P:Z:[:]:^:h?P?g?h#n>}!|%d&W){)}*]+P,g-x.P/^0O0T0Z1X1q1s9^9h9j9o:_:`:a:b:c:d:e:f:g:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x;O;P;Q;];n;s;t;w`>e>f>l>q>r>u>w>y!]?f0y2`:{<_a>g>x>zQ#p`Q&s#iQ&{#qR*V&tS#o`#q^$Sj5m5n:Z:[:]:^S*Y&x9aT:}#i&tQ'O#rR*a'PR&T!{R&Z!|Q&Y!|R-a)}Q#|gS'^#}3wS'o$h+US*f'X3|U*h'Z*y-zQ*|'pQ+R'vQ+X'{Q+i(YW+m(^)b+x,|Q-P)eQ-r*tQ-{+OQ.Y+]Q.]+`Q.`+cU.f+n+q,yQ.k+rQ/d,mQ0f.XQ0i.[Q0m.bQ0r.gQ0u.hQ1b3}Q2Q0hQ2W0sQ3O2RQ6R7rQ6S7sQ6T7tQ7n8QQ7}:VQ8O:WQ8P:XQ;z?]Q;}?^Q`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?h#b$Og#}$h'X'Z'p'v'{(Y(^)b)e*t*y+O+U+]+`+c+n+q+r+x,m,y,|-z.X.[.b.g.h0h0s2R3w3|3}7r7s7t8Q:V:W:X?]?^?c?y?z?{@S@T@U@VS$[r'eQ%l!eS%p!f%rU+j([(]+uQ-U)iQ/r-SQ0n.cQ1g/sQ2r1hR3a2s|vPVX!S!j!r!s!w%O%Q%T%V(j,U,X.z.|/U1T1U1^2e#Y#g]cklmnopxyz!W!X!Y#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a$Q$R$T$z%}&S&['a(X)w+b.a0k1Y1w2T2{3y4O8m8n`+o(^)b+n+q+x,y,|.g!t8l']4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5o5q5s5u5w5y7k7l!x=W5j5k5m5n5p5r5t5v5x5z6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i$`?t`j!]!g!y!z#i#l#m#q#r%S%U&q&t&u&x'P(T(v)V)Z)p*X*^,i,k-e5{7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8o8p8q8|9a9d9g9l9q9x9y9|:O:P:Z:[:]:^:h?P?g?h#n@W!|%d&W){)}*]+P,g-x.P/^0O0T0Z1X1q1s9^9h9j9o:_:`:a:b:c:d:e:f:g:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x;O;P;Q;];n;s;t;w`>e>f>l>q>r>u>w>y!]@Y0y2`:{<_a>g>x>zR'y$hQ'x$hR.R+UR$^rZ'u$h'p'v+O+UQ#d[Q%Y!WQ%[!XQ%^!YQ(W$pQ(}%WQ)O%XQ)P%ZQ)Q%]Q)X%cQ)^%gQ)f%lQ)l%qQ)r%tQ*p'iQ-Z)oQ-p*qQ.n+sQ.o+tQ.},[Q/X,dQ/Y,eQ/Z,fQ/`,jQ/c,lQ/g,tQ/v-TQ0p.eQ0w.iQ0x.mQ0z.pQ1P/QQ1`/iQ1e/qQ1v0]Q2U0qQ2Y0tQ2Z0vQ2d1SQ2l1_Q2o1dQ3Q2VQ3S2XQ3V2_Q3Y2cQ3^2nQ3b2vQ3c2yQ3f3RQ3j3[Q3k3]R3n3dR.W+YQ+k([Q+l(]R.p+uS+w(^+xT,{)b,|a+p(^)b+n+q+x,y,|.gQ%g!_Q'i$aQ*q'jQ.m+rS0v.h.kS2X0s0uR3R2WQ$pvW+s(^)b+x,|W.e+m+n+q,yS0q.f.gR2V0r|!aPVX!S!j!r!s!w%O%Q%T%V(j,U,X.z.|/U1T1U1^2eQ$ctW+t(^)b+x,|U.i+n+q,yR0t.g0|!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(T(X(j(v)V)Z)p)w){)}*X*]*^+P+b,U,X,^,g,i,k-d-e-x.P.a.z.|/U/^0O0T0Z0k0y1T1U1X1Y1^1q1s1w2T2`2e2{3y4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?hR/f,q1P}PVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(T(X(j(v)V)Z)p)w){)}*X*]*^+P+b,U,X,^,g,i,k,q-d-e-x.P.a.z.|/U/^0O0T0Z0k0y1T1U1X1Y1^1q1s1w2T2`2e2{3y4O4R4S4T4U4V4W4X4Y4Z4[4]4^4_4`4a4b4c4d4e4h4i4j4k4l4t5X5[5]5`5d5e5h5j5k5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{6O6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6u7Y7]7^7a7e7f7i7k7l7x8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8m8n8o8p8q8|9^9a9d9g9h9j9l9o9q9x9y9|:O:P:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:z:{:|;O;P;Q;];n;r;s;t;w`>a>e>f>g>l>q>r>u>w>x>y>z?P?g?hT$x{$|Q(s%QQ(x%TQ({%VR2j1^Q%c!]Q(w%SQ,h(vQ/],gQ/_,iQ1W/^R2g1XQ%q!fR)o%rR/u-S",nodeNames:"\u26A0 ( HeredocString EscapeSequence abstract LogicOp array as Boolean break case catch clone const continue default declare do echo else elseif enddeclare endfor endforeach endif endswitch endwhile enum extends final finally fn for foreach from function global goto if implements include include_once LogicOp insteadof interface list match namespace new null LogicOp print readonly require require_once return switch throw trait try unset use var Visibility while LogicOp yield LineComment BlockComment TextInterpolation PhpClose Text PhpOpen Template TextInterpolation EmptyStatement ; } { Block : LabelStatement Name ExpressionStatement ConditionalExpression LogicOp MatchExpression ) ( ParenthesizedExpression MatchBlock MatchArm , => AssignmentExpression ArrayExpression ValueList & VariadicUnpacking ... Pair [ ] ListExpression ValueList Pair Pair SubscriptExpression MemberExpression -> ?-> Name VariableName DynamicVariable $ ${ CallExpression ArgList NamedArgument SpreadArgument CastExpression UnionType LogicOp IntersectionType OptionalType NamedType QualifiedName \\ NamespaceName Name NamespaceName Name ScopedExpression :: ClassMemberName DynamicMemberName AssignOp UpdateExpression UpdateOp YieldExpression BinaryExpression LogicOp LogicOp LogicOp BitOp BitOp BitOp CompareOp CompareOp BitOp ArithOp ConcatOp ArithOp ArithOp IncludeExpression RequireExpression CloneExpression UnaryExpression ControlOp LogicOp PrintIntrinsic FunctionExpression static ParamList Parameter #[ Attributes Attribute VariadicParameter PropertyParameter PropertyHooks PropertyHook UseList ArrowFunction NewExpression class BaseClause ClassInterfaceClause DeclarationList ConstDeclaration VariableDeclarator PropertyDeclaration VariableDeclarator MethodDeclaration UseDeclaration UseList UseInsteadOfClause UseAsClause UpdateExpression ArithOp ShellExpression ThrowExpression Integer Float String MemberExpression SubscriptExpression UnaryExpression ArithOp Interpolation String IfStatement ColonBlock SwitchStatement Block CaseStatement DefaultStatement ColonBlock WhileStatement EmptyStatement DoStatement ForStatement ForSpec SequenceExpression ForeachStatement ForSpec Pair GotoStatement ContinueStatement BreakStatement ReturnStatement TryStatement CatchDeclarator DeclareStatement EchoStatement UnsetStatement ConstDeclaration FunctionDefinition ClassDeclaration InterfaceDeclaration TraitDeclaration EnumDeclaration EnumBody EnumCase NamespaceDefinition NamespaceUseDeclaration UseGroup UseClause UseClause GlobalDeclaration FunctionStaticDeclaration Program",maxTerm:320,nodeProps:[["group",-36,2,8,49,82,84,86,89,94,95,103,107,108,112,113,116,120,126,132,137,139,140,154,155,156,157,160,161,173,174,188,190,191,192,193,194,200,"Expression",-28,75,79,81,83,201,203,208,210,211,214,217,218,219,220,221,223,224,225,226,227,228,229,230,231,234,235,239,240,"Statement",-4,121,123,124,125,"Type"],["isolate",-4,67,68,71,200,""],["openedBy",70,"phpOpen",77,"{",87,"(",102,"#["],["closedBy",72,"phpClose",78,"}",88,")",165,"]"]],propSources:[HV],skippedNodes:[0],repeatNodeCount:33,tokenData:"!GQ_R!]OX$zXY&^YZ'sZ]$z]^&^^p$zpq&^qr)Rrs+Pst+otu2buv5evw6rwx8Vxy>]yz>yz{?g{|@}|}Bb}!OCO!O!PDh!P!QKT!Q!R!!o!R![!$q![!]!,P!]!^!-a!^!_!-}!_!`!1S!`!a!2d!a!b!3t!b!c!7^!c!d!7z!d!e!9Y!e!}!7z!}#O!;b#O#P!V<%lO8VR9WV'UP%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ9rV%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ:^O%`QQ:aRO;'S9m;'S;=`:j;=`O9mQ:oW%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l9m<%lO9mQ;[P;=`<%l9mR;fV'UP%`QOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRV<%l~8V~O8V~~%fR=OW'UPOY8VYZ9PZ!^8V!^!_;{!_;'S8V;'S;=`=h;=`<%l9m<%lO8VR=mW%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l8V<%lO9mR>YP;=`<%l8VR>dV!zQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV?QV!yU'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR?nY'UP$^QOY$zYZ%fZz$zz{@^{!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR@eW$_Q'UPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRAUY$[Q'UPOY$zYZ%fZ{$z{|At|!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRA{V%TQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRBiV#OQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_CXZ$[Q%^W'UPOY$zYZ%fZ}$z}!OAt!O!^$z!^!_%k!_!`6U!`!aCz!a;'S$z;'S;=`&W<%lO$zVDRV#aU'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVDo['UP$]QOY$zYZ%fZ!O$z!O!PEe!P!Q$z!Q![Fs![!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zVEjX'UPOY$zYZ%fZ!O$z!O!PFV!P!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVF^V#VU'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRFz_'UP%XQOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#SJc#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zRHO]'UPOY$zYZ%fZ{$z{|Hw|}$z}!OHw!O!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRH|X'UPOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRIpZ'UP%XQOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_#R$z#R#SHw#S;'S$z;'S;=`&W<%lO$zRJhX'UPOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_K[['UP$^QOY$zYZ%fZz$zz{LQ{!P$z!P!Q,o!Q!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$z_LVX'UPOYLQYZLrZzLQz{N_{!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQ_LwT'UPOzMWz{Mj{;'SMW;'S;=`NX<%lOMW^MZTOzMWz{Mj{;'SMW;'S;=`NX<%lOMW^MmVOzMWz{Mj{!PMW!P!QNS!Q;'SMW;'S;=`NX<%lOMW^NXO!f^^N[P;=`<%lMW_NdZ'UPOYLQYZLrZzLQz{N_{!PLQ!P!Q! V!Q!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQ_! ^V!f^'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_! vZOYLQYZLrZzLQz{N_{!aLQ!a!bMW!b;'SLQ;'S;=`!!i<%l~LQ~OLQ~~%f_!!lP;=`<%lLQZ!!vm'UP%WYOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!d$z!d!e!&o!e!g$z!g!hGy!h!q$z!q!r!(a!r!z$z!z!{!){!{#R$z#R#S!%}#S#U$z#U#V!&o#V#X$z#X#YGy#Y#c$z#c#d!(a#d#l$z#l#m!){#m;'S$z;'S;=`&W<%lO$zZ!$xa'UP%WYOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#S!%}#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zZ!&SX'UPOY$zYZ%fZ!Q$z!Q![!$q![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!&tY'UPOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!'k['UP%WYOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_#R$z#R#S!&o#S;'S$z;'S;=`&W<%lO$zZ!(fX'UPOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!)YZ'UP%WYOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_#R$z#R#S!(a#S;'S$z;'S;=`&W<%lO$zZ!*Q]'UPOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zZ!+Q_'UP%WYOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#R$z#R#S!){#S#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zR!,WX!rQ'UPOY$zYZ%fZ![$z![!]!,s!]!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!,zV#yQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!-hV!nU'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!.S[$YQOY$zYZ%fZ!^$z!^!_!.x!_!`!/i!`!a*c!a!b!0]!b;'S$z;'S;=`&W<%l~$z~O$z~~%fR!/PW$ZQ'UPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!/pX$YQ'UPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a*c!a;'S$z;'S;=`&W<%lO$zP!0bR!jP!_!`!0k!r!s!0p#d#e!0pP!0pO!jPP!0sQ!j!k!0y#[#]!0yP!0|Q!r!s!0k#d#e!0k_!1ZX#|Y'UPOY$zYZ%fZ!^$z!^!_%k!_!`)r!`!a!1v!a;'S$z;'S;=`&W<%lO$zV!1}V#PU'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!2kX$YQ'UPOY$zYZ%fZ!^$z!^!_%k!_!`!3W!`!a!.x!a;'S$z;'S;=`&W<%lO$zR!3_V$YQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!3{[!wQ'UPOY$zYZ%fZ}$z}!O!4q!O!^$z!^!_%k!_!`$z!`!a!6P!a!b!6m!b;'S$z;'S;=`&W<%lO$zV!4vX'UPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a!5c!a;'S$z;'S;=`&W<%lO$zV!5jV#bU'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!6WV!h^'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!6tW$RQ'UPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!7eV$dQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!8Ta'bS'UP'XYOY$zYZ%fZ!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$z_!9ce'bS'UP'XYOY$zYZ%fZr$zrs!:tsw$zwx8Vx!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$zR!:{V'UP'wQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!;iV#XU'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!OZ'UPOY!=yYZ!>qZ!^!=y!^!_!@y!_#O!=y#O#P!Au#P#S!=y#S#T!CP#T;'S!=y;'S;=`!Cm<%lO!=yR!>vV'UPO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s<%lO!?]Q!?`VO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s<%lO!?]Q!?xRO;'S!?];'S;=`!@R;=`O!?]Q!@UWO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s;=`<%l!?]<%lO!?]Q!@sO%UQQ!@vP;=`<%l!?]R!@|]OY!=yYZ!>qZ!a!=y!a!b!?]!b#O!=y#O#P!Au#P#S!=y#S#T!CP#T;'S!=y;'S;=`!Cm<%l~!=y~O!=y~~%fR!AzW'UPOY!=yYZ!>qZ!^!=y!^!_!@y!_;'S!=y;'S;=`!Bd;=`<%l!?]<%lO!=yR!BgWO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s;=`<%l!=y<%lO!?]R!CWV%UQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!CpP;=`<%l!=y_!CzV!p^'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!DjY$UQ#n['UPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`#p$z#p#q!EY#q;'S$z;'S;=`&W<%lO$zR!EaV$SQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!E}V!oQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!FkV$eQ'UPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z",tokenizers:[MV,FV,NV,0,1,2,3,DV],topRules:{Template:[0,73],Program:[1,241]},dynamicPrecedences:{299:1},specialized:[{term:285,get:(t,e)=>O1(t)<<1,external:O1},{term:285,get:t=>KV[t]||-1}],tokenPrec:30012});var JV=fe.define({name:"php",parser:r1.configure({props:[se.add({IfStatement:ue({except:/^\s*({|else\b|elseif\b|endif\b)/}),TryStatement:ue({except:/^\s*({|catch\b|finally\b)/}),SwitchBody:t=>{let e=t.textAfter,O=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return t.baseIndent+(O?0:i?1:2)*t.unit},ColonBlock:t=>t.baseIndent+t.unit,"Block EnumBody DeclarationList":We({closing:"}"}),ArrowFunction:t=>t.baseIndent+t.unit,"String BlockComment":()=>null,Statement:ue({except:/^({|end(for|foreach|switch|while)\b)/})}),le.add({"Block EnumBody DeclarationList SwitchBody ArrayExpression ValueList":we,ColonBlock(t){return{from:t.from+1,to:t.to}},BlockComment(t){return{from:t.from+2,to:t.to-2}}})]}),languageData:{commentTokens:{block:{open:"/*",close:"*/"},line:"//"},indentOnInput:/^\s*(?:case |default:|end(?:if|for(?:each)?|switch|while)|else(?:if)?|\{|\})$/,wordChars:"$",closeBrackets:{stringPrefixes:["b","B"]}}});function a1(t={}){let e=[],O;if(t.baseLanguage!==null)if(t.baseLanguage)O=t.baseLanguage;else{let i=Zn({matchClosingTags:!1});e.push(i.support),O=i.language}return new oe(JV.configure({wrap:O&&di(i=>i.type.isTop?{parser:O.parser,overlay:n=>n.name=="Text"}:null),top:t.plain?"Program":"Template"}),e)}var o1={name:"toml",startState:function(){return{inString:!1,stringType:"",lhs:!0,inArray:0}},token:function(t,e){let O;if(!e.inString&&(O=t.match(/^('''|"""|'|")/))&&(e.stringType=O[0],e.inString=!0),t.sol()&&!e.inString&&e.inArray===0&&(e.lhs=!0),e.inString){for(;e.inString;)if(t.match(e.stringType))e.inString=!1;else if(t.peek()==="\\")t.next(),t.next();else{if(t.eol())break;t.match(/^.[^\\\"\']*/)}return e.lhs?"property":"string"}else{if(e.inArray&&t.peek()==="]")return t.next(),e.inArray--,"bracket";if(e.lhs&&t.peek()==="["&&t.skipTo("]"))return t.next(),t.peek()==="]"&&t.next(),"atom";if(t.peek()==="#")return t.skipToEnd(),"comment";if(t.eatSpace())return null;if(e.lhs&&t.eatWhile(function(i){return i!="="&&i!=" "}))return"property";if(e.lhs&&t.peek()==="=")return t.next(),e.lhs=!1,null;if(!e.lhs&&t.match(/^\d\d\d\d[\d\-\:\.T]*Z/))return"atom";if(!e.lhs&&(t.match("true")||t.match("false")))return"atom";if(!e.lhs&&t.peek()==="[")return e.inArray++,t.next(),"bracket";if(!e.lhs&&t.match(/^\-?\d+(?:\.\d+)?/))return"number";t.eatSpace()||t.next()}return null},languageData:{commentTokens:{line:"#"}}};var ud={};function dd(t,e){for(var O=0;O1&&t.eat("$");var O=t.next();return/['"({]/.test(O)?(e.tokens[0]=_s(O,O=="("?"quote":O=="{"?"def":"string"),zn(t,e)):(/\d/.test(O)||t.eatWhile(/\w/),e.tokens.shift(),"def")};function O2(t){return function(e,O){return e.sol()&&e.string==t&&O.tokens.shift(),e.skipToEnd(),"string.special"}}function zn(t,e){return(e.tokens[0]||e2)(t,e)}var f1={name:"shell",startState:function(){return{tokens:[]}},token:function(t,e){return zn(t,e)},languageData:{autocomplete:s1.concat(l1,c1),closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"#"}}};function u1(t){d1(t,"start");var e={},O=t.languageData||{},i=!1;for(var n in t)if(n!=O&&t.hasOwnProperty(n))for(var r=e[n]=[],a=t[n],o=0;o2&&a.token&&typeof a.token!="string"){O.pending=[];for(var l=2;l-1)return null;var n=O.indent.length-1,r=t[O.state];e:for(;;){for(var a=0;a]/)?(t.eat(/[\<\>]/),"atom"):t.eat(/[\+\-\*\/\&\|\:\!]/)?"atom":t.eat(/[a-zA-Z$@_\xa1-\uffff]/)?(t.eatWhile(/[\w$\xa1-\uffff]/),t.eat(/[\?\!\=]/),"atom"):"operator";if(O=="@"&&t.match(/^@?[a-zA-Z_\xa1-\uffff]/))return t.eat("@"),t.eatWhile(/[\w\xa1-\uffff]/),"propertyName";if(O=="$")return t.eat(/[a-zA-Z_]/)?t.eatWhile(/[\w]/):t.eat(/\d/)?t.eat(/\d/):t.next(),"variableName.special";if(/[a-zA-Z_\xa1-\uffff]/.test(O))return t.eatWhile(/[\w\xa1-\uffff]/),t.eat(/[\?\!]/),t.eat(":")?"atom":"variable";if(O=="|"&&(e.varList||e.lastTok=="{"||e.lastTok=="do"))return Vt="|",null;if(/[\(\)\[\]{}\\;]/.test(O))return Vt=O,null;if(O=="-"&&t.eat(">"))return"operator";if(/[=+\-\/*:\.^%<>~|]/.test(O)){var o=t.eatWhile(/[=+\-\/*:\.^%<>~|]/);return O=="."&&!o&&(Vt="."),"operator"}else return null}}}function y2(t){for(var e=t.pos,O=0,i,n=!1,r=!1;(i=t.next())!=null;)if(r)r=!1;else{if("[{(".indexOf(i)>-1)O++;else if("]})".indexOf(i)>-1){if(O--,O<0)break}else if(i=="/"&&O==0){n=!0;break}r=i=="\\"}return t.backUp(t.pos-e),n}function $d(t){return t||(t=1),function(e,O){if(e.peek()=="}"){if(t==1)return O.tokenize.pop(),O.tokenize[O.tokenize.length-1](e,O);O.tokenize[O.tokenize.length-1]=$d(t-1)}else e.peek()=="{"&&(O.tokenize[O.tokenize.length-1]=$d(t+1));return Rs(e,O)}}function w2(){var t=!1;return function(e,O){return t?(O.tokenize.pop(),O.tokenize[O.tokenize.length-1](e,O)):(t=!0,Rs(e,O))}}function Oa(t,e,O,i){return function(n,r){var a=!1,o;for(r.context.type==="read-quoted-paused"&&(r.context=r.context.prev,n.eat("}"));(o=n.next())!=null;){if(o==t&&(i||!a)){r.tokenize.pop();break}if(O&&o=="#"&&!a){if(n.eat("{")){t=="}"&&(r.context={prev:r.context,type:"read-quoted-paused"}),r.tokenize.push($d());break}else if(/[@\$]/.test(n.peek())){r.tokenize.push(w2());break}}a=!a&&o=="\\"}return e}}function T2(t,e){return function(O,i){return e&&O.eatSpace(),O.match(t)?i.tokenize.pop():O.skipToEnd(),"string"}}function v2(t,e){return t.sol()&&t.match("=end")&&t.eol()&&e.tokenize.pop(),t.skipToEnd(),"comment"}var T1={name:"ruby",startState:function(t){return{tokenize:[Rs],indented:0,context:{type:"top",indented:-t},continuedLine:!1,lastTok:null,varList:!1}},token:function(t,e){Vt=null,t.sol()&&(e.indented=t.indentation());var O=e.tokenize[e.tokenize.length-1](t,e),i,n=Vt;if(O=="variable"){var r=t.current();O=e.lastTok=="."?"property":X2.propertyIsEnumerable(t.current())?"keyword":/^[A-Z]/.test(r)?"tag":e.lastTok=="def"||e.lastTok=="class"||e.varList?"def":"variable",O=="keyword"&&(n=r,b2.propertyIsEnumerable(r)?i="indent":x2.propertyIsEnumerable(r)?i="dedent":((r=="if"||r=="unless")&&t.column()==t.indentation()||r=="do"&&e.context.indented~^?!",q2=":;,.(){}[]",U2=/^\-?0b[01][01_]*/,V2=/^\-?0o[0-7][0-7_]*/,W2=/^\-?0x[\dA-Fa-f][\dA-Fa-f_]*(?:(?:\.[\dA-Fa-f][\dA-Fa-f_]*)?[Pp]\-?\d[\d_]*)?/,j2=/^\-?\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee]\-?\d[\d_]*)?/,G2=/^\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1/,C2=/^\.(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/,E2=/^\#[A-Za-z]+/,A2=/^@(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/;function v1(t,e,O){if(t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;var i=t.peek();if(i=="/"){if(t.match("//"))return t.skipToEnd(),"comment";if(t.match("/*"))return e.tokenize.push(md),md(t,e)}if(t.match(E2))return"builtin";if(t.match(A2))return"attribute";if(t.match(U2)||t.match(V2)||t.match(W2)||t.match(j2))return"number";if(t.match(C2))return"property";if(z2.indexOf(i)>-1)return t.next(),"operator";if(q2.indexOf(i)>-1)return t.next(),t.match(".."),"punctuation";var n;if(n=t.match(/("""|"|')/)){var r=I2.bind(null,n[0]);return e.tokenize.push(r),r(t,e)}if(t.match(G2)){var a=t.current();return Y2.hasOwnProperty(a)?"type":R2.hasOwnProperty(a)?"atom":_2.hasOwnProperty(a)?(Z2.hasOwnProperty(a)&&(e.prev="define"),"keyword"):O=="define"?"def":"variable"}return t.next(),null}function L2(){var t=0;return function(e,O,i){var n=v1(e,O,i);if(n=="punctuation"){if(e.current()=="(")++t;else if(e.current()==")"){if(t==0)return e.backUp(1),O.tokenize.pop(),O.tokenize[O.tokenize.length-1](e,O);--t}}return n}}function I2(t,e,O){for(var i=t.length==1,n,r=!1;n=e.peek();)if(r){if(e.next(),n=="(")return O.tokenize.push(L2()),"string";r=!1}else{if(e.match(t))return O.tokenize.pop(),"string";e.next(),r=n=="\\"}return i&&O.tokenize.pop(),"string"}function md(t,e){for(var O;O=t.next();)if(O==="/"&&t.eat("*"))e.tokenize.push(md);else if(O==="*"&&t.eat("/")){e.tokenize.pop();break}return"comment"}function M2(t,e,O){this.prev=t,this.align=e,this.indented=O}function D2(t,e){var O=e.match(/^\s*($|\/[\/\*]|[)}\]])/,!1)?null:e.column()+1;t.context=new M2(t.context,O,t.indented)}function N2(t){t.context&&(t.indented=t.context.indented,t.context=t.context.prev)}var _1={name:"swift",startState:function(){return{prev:null,context:null,indented:0,tokenize:[]}},token:function(t,e){var O=e.prev;e.prev=null;var i=e.tokenize[e.tokenize.length-1]||v1,n=i(t,e,O);if(!n||n=="comment"?e.prev=O:e.prev||(e.prev=n),n=="punctuation"){var r=/[\(\[\{]|([\]\)\}])/.exec(t.current());r&&(r[1]?N2:D2)(e,t)}return n},indent:function(t,e,O){var i=t.context;if(!i)return 0;var n=/^[\]\}\)]/.test(e);return i.align!=null?i.align-(n?1:0):i.indented+(n?0:O.unit)},languageData:{indentOnInput:/^\s*[\)\}\]]$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}},closeBrackets:{brackets:["(","[","{","'",'"',"`"]}}};function Ce(t,e){return t.string.charAt(t.pos+(e||0))}function Z1(t,e){if(e){var O=t.pos-e;return t.string.substr(O>=0?O:0,e)}else return t.string.substr(0,t.pos-1)}function gd(t,e){var O=t.string.length,i=O-t.pos+1;return t.string.substr(t.pos,e&&e=(i=t.string.length-1)?t.pos=i:t.pos=O}var ia={"->":4,"++":4,"--":4,"**":4,"=~":4,"!~":4,"*":4,"/":4,"%":4,x:4,"+":4,"-":4,".":4,"<<":4,">>":4,"<":4,">":4,"<=":4,">=":4,lt:4,gt:4,le:4,ge:4,"==":4,"!=":4,"<=>":4,eq:4,ne:4,cmp:4,"~~":4,"&":4,"|":4,"^":4,"&&":4,"||":4,"//":4,"..":4,"...":4,"?":4,":":4,"=":4,"+=":4,"-=":4,"*=":4,",":4,"=>":4,"::":4,not:4,and:4,or:4,xor:4,BEGIN:[5,1],END:[5,1],PRINT:[5,1],PRINTF:[5,1],GETC:[5,1],READ:[5,1],READLINE:[5,1],DESTROY:[5,1],TIE:[5,1],TIEHANDLE:[5,1],UNTIE:[5,1],STDIN:5,STDIN_TOP:5,STDOUT:5,STDOUT_TOP:5,STDERR:5,STDERR_TOP:5,$ARG:5,$_:5,"@ARG":5,"@_":5,$LIST_SEPARATOR:5,'$"':5,$PROCESS_ID:5,$PID:5,$$:5,$REAL_GROUP_ID:5,$GID:5,"$(":5,$EFFECTIVE_GROUP_ID:5,$EGID:5,"$)":5,$PROGRAM_NAME:5,$0:5,$SUBSCRIPT_SEPARATOR:5,$SUBSEP:5,"$;":5,$REAL_USER_ID:5,$UID:5,"$<":5,$EFFECTIVE_USER_ID:5,$EUID:5,"$>":5,$a:5,$b:5,$COMPILING:5,"$^C":5,$DEBUGGING:5,"$^D":5,"${^ENCODING}":5,$ENV:5,"%ENV":5,$SYSTEM_FD_MAX:5,"$^F":5,"@F":5,"${^GLOBAL_PHASE}":5,"$^H":5,"%^H":5,"@INC":5,"%INC":5,$INPLACE_EDIT:5,"$^I":5,"$^M":5,$OSNAME:5,"$^O":5,"${^OPEN}":5,$PERLDB:5,"$^P":5,$SIG:5,"%SIG":5,$BASETIME:5,"$^T":5,"${^TAINT}":5,"${^UNICODE}":5,"${^UTF8CACHE}":5,"${^UTF8LOCALE}":5,$PERL_VERSION:5,"$^V":5,"${^WIN32_SLOPPY_STAT}":5,$EXECUTABLE_NAME:5,"$^X":5,$1:5,$MATCH:5,"$&":5,"${^MATCH}":5,$PREMATCH:5,"$`":5,"${^PREMATCH}":5,$POSTMATCH:5,"$'":5,"${^POSTMATCH}":5,$LAST_PAREN_MATCH:5,"$+":5,$LAST_SUBMATCH_RESULT:5,"$^N":5,"@LAST_MATCH_END":5,"@+":5,"%LAST_PAREN_MATCH":5,"%+":5,"@LAST_MATCH_START":5,"@-":5,"%LAST_MATCH_START":5,"%-":5,$LAST_REGEXP_CODE_RESULT:5,"$^R":5,"${^RE_DEBUG_FLAGS}":5,"${^RE_TRIE_MAXBUF}":5,$ARGV:5,"@ARGV":5,ARGV:5,ARGVOUT:5,$OUTPUT_FIELD_SEPARATOR:5,$OFS:5,"$,":5,$INPUT_LINE_NUMBER:5,$NR:5,"$.":5,$INPUT_RECORD_SEPARATOR:5,$RS:5,"$/":5,$OUTPUT_RECORD_SEPARATOR:5,$ORS:5,"$\\":5,$OUTPUT_AUTOFLUSH:5,"$|":5,$ACCUMULATOR:5,"$^A":5,$FORMAT_FORMFEED:5,"$^L":5,$FORMAT_PAGE_NUMBER:5,"$%":5,$FORMAT_LINES_LEFT:5,"$-":5,$FORMAT_LINE_BREAK_CHARACTERS:5,"$:":5,$FORMAT_LINES_PER_PAGE:5,"$=":5,$FORMAT_TOP_NAME:5,"$^":5,$FORMAT_NAME:5,"$~":5,"${^CHILD_ERROR_NATIVE}":5,$EXTENDED_OS_ERROR:5,"$^E":5,$EXCEPTIONS_BEING_CAUGHT:5,"$^S":5,$WARNING:5,"$^W":5,"${^WARNING_BITS}":5,$OS_ERROR:5,$ERRNO:5,"$!":5,"%OS_ERROR":5,"%ERRNO":5,"%!":5,$CHILD_ERROR:5,"$?":5,$EVAL_ERROR:5,"$@":5,$OFMT:5,"$#":5,"$*":5,$ARRAY_BASE:5,"$[":5,$OLD_PERL_VERSION:5,"$]":5,if:[1,1],elsif:[1,1],else:[1,1],while:[1,1],unless:[1,1],for:[1,1],foreach:[1,1],abs:1,accept:1,alarm:1,atan2:1,bind:1,binmode:1,bless:1,bootstrap:1,break:1,caller:1,chdir:1,chmod:1,chomp:1,chop:1,chown:1,chr:1,chroot:1,close:1,closedir:1,connect:1,continue:[1,1],cos:1,crypt:1,dbmclose:1,dbmopen:1,default:1,defined:1,delete:1,die:1,do:1,dump:1,each:1,endgrent:1,endhostent:1,endnetent:1,endprotoent:1,endpwent:1,endservent:1,eof:1,eval:1,exec:1,exists:1,exit:1,exp:1,fcntl:1,fileno:1,flock:1,fork:1,format:1,formline:1,getc:1,getgrent:1,getgrgid:1,getgrnam:1,gethostbyaddr:1,gethostbyname:1,gethostent:1,getlogin:1,getnetbyaddr:1,getnetbyname:1,getnetent:1,getpeername:1,getpgrp:1,getppid:1,getpriority:1,getprotobyname:1,getprotobynumber:1,getprotoent:1,getpwent:1,getpwnam:1,getpwuid:1,getservbyname:1,getservbyport:1,getservent:1,getsockname:1,getsockopt:1,given:1,glob:1,gmtime:1,goto:1,grep:1,hex:1,import:1,index:1,int:1,ioctl:1,join:1,keys:1,kill:1,last:1,lc:1,lcfirst:1,length:1,link:1,listen:1,local:2,localtime:1,lock:1,log:1,lstat:1,m:null,map:1,mkdir:1,msgctl:1,msgget:1,msgrcv:1,msgsnd:1,my:2,new:1,next:1,no:1,oct:1,open:1,opendir:1,ord:1,our:2,pack:1,package:1,pipe:1,pop:1,pos:1,print:1,printf:1,prototype:1,push:1,q:null,qq:null,qr:null,quotemeta:null,qw:null,qx:null,rand:1,read:1,readdir:1,readline:1,readlink:1,readpipe:1,recv:1,redo:1,ref:1,rename:1,require:1,reset:1,return:1,reverse:1,rewinddir:1,rindex:1,rmdir:1,s:null,say:1,scalar:1,seek:1,seekdir:1,select:1,semctl:1,semget:1,semop:1,send:1,setgrent:1,sethostent:1,setnetent:1,setpgrp:1,setpriority:1,setprotoent:1,setpwent:1,setservent:1,setsockopt:1,shift:1,shmctl:1,shmget:1,shmread:1,shmwrite:1,shutdown:1,sin:1,sleep:1,socket:1,socketpair:1,sort:1,splice:1,split:1,sprintf:1,sqrt:1,srand:1,stat:1,state:1,study:1,sub:1,substr:1,symlink:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,tell:1,telldir:1,tie:1,tied:1,time:1,times:1,tr:null,truncate:1,uc:1,ucfirst:1,umask:1,undef:1,unlink:1,unpack:1,unshift:1,untie:1,use:1,utime:1,values:1,vec:1,wait:1,waitpid:1,wantarray:1,warn:1,when:1,write:1,y:null},ce="string.special",he=/[goseximacplud]/;function I(t,e,O,i,n){return e.chain=null,e.style=null,e.tail=null,e.tokenize=function(r,a){for(var o=!1,s,l=0;s=r.next();){if(s===O[l]&&!o)return O[++l]!==void 0?(a.chain=O[l],a.style=i,a.tail=n):n&&r.eatWhile(n),a.tokenize=zs,i;o=!o&&s=="\\"}return i},e.tokenize(t,e)}function Pd(t,e,O){return e.tokenize=function(i,n){return i.string==O&&(n.tokenize=zs),i.skipToEnd(),"string"},e.tokenize(t,e)}function zs(t,e){if(t.eatSpace())return null;if(e.chain)return I(t,e,e.chain,e.style,e.tail);if(t.match(/^(\-?((\d[\d_]*)?\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F_]+|0b[01_]+|\d[\d_]*(e[+-]?\d+)?)/))return"number";if(t.match(/^<<(?=[_a-zA-Z])/))return t.eatWhile(/\w/),Pd(t,e,t.current().substr(2));if(t.sol()&&t.match(/^\=item(?!\w)/))return Pd(t,e,"=cut");var O=t.next();if(O=='"'||O=="'"){if(Z1(t,3)=="<<"+O){var i=t.pos;t.eatWhile(/\w/);var n=t.current().substr(1);if(n&&t.eat(O))return Pd(t,e,n);t.pos=i}return I(t,e,[O],"string")}if(O=="q"){var r=Ce(t,-2);if(!(r&&/\w/.test(r))){if(r=Ce(t,0),r=="x"){if(r=Ce(t,1),r=="(")return Xe(t,2),I(t,e,[")"],ce,he);if(r=="[")return Xe(t,2),I(t,e,["]"],ce,he);if(r=="{")return Xe(t,2),I(t,e,["}"],ce,he);if(r=="<")return Xe(t,2),I(t,e,[">"],ce,he);if(/[\^'"!~\/]/.test(r))return Xe(t,1),I(t,e,[t.eat(r)],ce,he)}else if(r=="q"){if(r=Ce(t,1),r=="(")return Xe(t,2),I(t,e,[")"],"string");if(r=="[")return Xe(t,2),I(t,e,["]"],"string");if(r=="{")return Xe(t,2),I(t,e,["}"],"string");if(r=="<")return Xe(t,2),I(t,e,[">"],"string");if(/[\^'"!~\/]/.test(r))return Xe(t,1),I(t,e,[t.eat(r)],"string")}else if(r=="w"){if(r=Ce(t,1),r=="(")return Xe(t,2),I(t,e,[")"],"bracket");if(r=="[")return Xe(t,2),I(t,e,["]"],"bracket");if(r=="{")return Xe(t,2),I(t,e,["}"],"bracket");if(r=="<")return Xe(t,2),I(t,e,[">"],"bracket");if(/[\^'"!~\/]/.test(r))return Xe(t,1),I(t,e,[t.eat(r)],"bracket")}else if(r=="r"){if(r=Ce(t,1),r=="(")return Xe(t,2),I(t,e,[")"],ce,he);if(r=="[")return Xe(t,2),I(t,e,["]"],ce,he);if(r=="{")return Xe(t,2),I(t,e,["}"],ce,he);if(r=="<")return Xe(t,2),I(t,e,[">"],ce,he);if(/[\^'"!~\/]/.test(r))return Xe(t,1),I(t,e,[t.eat(r)],ce,he)}else if(/[\^'"!~\/(\[{<]/.test(r)){if(r=="(")return Xe(t,1),I(t,e,[")"],"string");if(r=="[")return Xe(t,1),I(t,e,["]"],"string");if(r=="{")return Xe(t,1),I(t,e,["}"],"string");if(r=="<")return Xe(t,1),I(t,e,[">"],"string");if(/[\^'"!~\/]/.test(r))return I(t,e,[t.eat(r)],"string")}}}if(O=="m"){var r=Ce(t,-2);if(!(r&&/\w/.test(r))&&(r=t.eat(/[(\[{<\^'"!~\/]/),r)){if(/[\^'"!~\/]/.test(r))return I(t,e,[r],ce,he);if(r=="(")return I(t,e,[")"],ce,he);if(r=="[")return I(t,e,["]"],ce,he);if(r=="{")return I(t,e,["}"],ce,he);if(r=="<")return I(t,e,[">"],ce,he)}}if(O=="s"){var r=/[\/>\]})\w]/.test(Ce(t,-2));if(!r&&(r=t.eat(/[(\[{<\^'"!~\/]/),r))return r=="["?I(t,e,["]","]"],ce,he):r=="{"?I(t,e,["}","}"],ce,he):r=="<"?I(t,e,[">",">"],ce,he):r=="("?I(t,e,[")",")"],ce,he):I(t,e,[r,r],ce,he)}if(O=="y"){var r=/[\/>\]})\w]/.test(Ce(t,-2));if(!r&&(r=t.eat(/[(\[{<\^'"!~\/]/),r))return r=="["?I(t,e,["]","]"],ce,he):r=="{"?I(t,e,["}","}"],ce,he):r=="<"?I(t,e,[">",">"],ce,he):r=="("?I(t,e,[")",")"],ce,he):I(t,e,[r,r],ce,he)}if(O=="t"){var r=/[\/>\]})\w]/.test(Ce(t,-2));if(!r&&(r=t.eat("r"),r&&(r=t.eat(/[(\[{<\^'"!~\/]/),r)))return r=="["?I(t,e,["]","]"],ce,he):r=="{"?I(t,e,["}","}"],ce,he):r=="<"?I(t,e,[">",">"],ce,he):r=="("?I(t,e,[")",")"],ce,he):I(t,e,[r,r],ce,he)}if(O=="`")return I(t,e,[O],"builtin");if(O=="/")return/~\s*$/.test(Z1(t))?I(t,e,[O],ce,he):"operator";if(O=="$"){var i=t.pos;if(t.eatWhile(/\d/)||t.eat("{")&&t.eatWhile(/\d/)&&t.eat("}"))return"builtin";t.pos=i}if(/[$@%]/.test(O)){var i=t.pos;if(t.eat("^")&&t.eat(/[A-Z]/)||!/[@$%&]/.test(Ce(t,-2))&&t.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){var r=t.current();if(ia[r])return"builtin"}t.pos=i}if(/[$@%&]/.test(O)&&(t.eatWhile(/[\w$]/)||t.eat("{")&&t.eatWhile(/[\w$]/)&&t.eat("}"))){var r=t.current();return ia[r]?"builtin":"variable"}if(O=="#"&&Ce(t,-2)!="$")return t.skipToEnd(),"comment";if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(O)){var i=t.pos;if(t.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/),ia[t.current()])return"operator";t.pos=i}if(O=="_"&&t.pos==1){if(gd(t,6)=="_END__")return I(t,e,["\0"],"comment");if(gd(t,7)=="_DATA__")return I(t,e,["\0"],"builtin");if(gd(t,7)=="_C__")return I(t,e,["\0"],"string")}if(/\w/.test(O)){var i=t.pos;if(Ce(t,-2)=="{"&&(Ce(t,0)=="}"||t.eatWhile(/\w/)&&Ce(t,0)=="}"))return"string";t.pos=i}if(/[A-Z]/.test(O)){var a=Ce(t,-2),i=t.pos;if(t.eatWhile(/[A-Z_]/),/[\da-z]/.test(Ce(t,0)))t.pos=i;else{var r=ia[t.current()];return r?(r[1]&&(r=r[0]),a!=":"?r==1?"keyword":r==2?"def":r==3?"atom":r==4?"operator":r==5?"builtin":"meta":"meta"):"meta"}}if(/[a-zA-Z_]/.test(O)){var a=Ce(t,-2);t.eatWhile(/\w/);var r=ia[t.current()];return r?(r[1]&&(r=r[0]),a!=":"?r==1?"keyword":r==2?"def":r==3?"atom":r==4?"operator":r==5?"builtin":"meta":"meta"):"meta"}return null}var R1={name:"perl",startState:function(){return{tokenize:zs,chain:null,style:null,tail:null}},token:function(t,e){return(e.tokenize||zs)(t,e)},languageData:{commentTokens:{line:"#"},wordChars:"$"}};function Us(t){for(var e={},O=0;O=!&|~$:]/,Wt;function xd(t,e){Wt=null;var O=t.next();if(O=="#")return t.skipToEnd(),"comment";if(O=="0"&&t.eat("x"))return t.eatWhile(/[\da-f]/i),"number";if(O=="."&&t.eat(/\d/))return t.match(/\d*(?:e[+\-]?\d+)?/),"number";if(/\d/.test(O))return t.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/),"number";if(O=="'"||O=='"')return e.tokenize=eW(O),"string";if(O=="`")return t.match(/[^`]+`/),"string.special";if(O=="."&&t.match(/.(?:[.]|\d+)/))return"keyword";if(/[a-zA-Z\.]/.test(O)){t.eatWhile(/[\w\.]/);var i=t.current();return F2.propertyIsEnumerable(i)?"atom":K2.propertyIsEnumerable(i)?(J2.propertyIsEnumerable(i)&&!t.match(/\s*if(\s+|$)/,!1)&&(Wt="block"),"keyword"):H2.propertyIsEnumerable(i)?"builtin":"variable"}else return O=="%"?(t.skipTo("%")&&t.next(),"variableName.special"):O=="<"&&t.eat("-")||O=="<"&&t.match("<-")||O=="-"&&t.match(/>>?/)||O=="="&&e.ctx.argList?"operator":Y1.test(O)?(O=="$"||t.eatWhile(Y1),"operator"):/[\(\){}\[\];]/.test(O)?(Wt=O,O==";"?"punctuation":null):null}function eW(t){return function(e,O){if(e.eat("\\")){var i=e.next();return i=="x"?e.match(/^[a-f0-9]{2}/i):(i=="u"||i=="U")&&e.eat("{")&&e.skipTo("}")?e.next():i=="u"?e.match(/^[a-f0-9]{4}/i):i=="U"?e.match(/^[a-f0-9]{8}/i):/[0-7]/.test(i)&&e.match(/^[0-7]{1,2}/),"string.special"}else{for(var n;(n=e.next())!=null;){if(n==t){O.tokenize=xd;break}if(n=="\\"){e.backUp(1);break}}return"string"}}}var z1=1,Sd=2,Xd=4;function qs(t,e,O){t.ctx={type:e,indent:t.indent,flags:0,column:O.column(),prev:t.ctx}}function q1(t,e){var O=t.ctx;t.ctx={type:O.type,indent:O.indent,flags:O.flags|e,column:O.column,prev:O.prev}}function bd(t){t.indent=t.ctx.indent,t.ctx=t.ctx.prev}var j1={name:"r",startState:function(t){return{tokenize:xd,ctx:{type:"top",indent:-t,flags:Sd},indent:0,afterIdent:!1}},token:function(t,e){if(t.sol()&&((e.ctx.flags&3)==0&&(e.ctx.flags|=Sd),e.ctx.flags&Xd&&bd(e),e.indent=t.indentation()),t.eatSpace())return null;var O=e.tokenize(t,e);return O!="comment"&&(e.ctx.flags&Sd)==0&&q1(e,z1),(Wt==";"||Wt=="{"||Wt=="}")&&e.ctx.type=="block"&&bd(e),Wt=="{"?qs(e,"}",t):Wt=="("?(qs(e,")",t),e.afterIdent&&(e.ctx.argList=!0)):Wt=="["?qs(e,"]",t):Wt=="block"?qs(e,"block",t):Wt==e.ctx.type?bd(e):e.ctx.type=="block"&&O!="comment"&&q1(e,Xd),e.afterIdent=O=="variable"||O=="keyword",O},indent:function(t,e,O){if(t.tokenize!=xd)return 0;var i=e&&e.charAt(0),n=t.ctx,r=i==n.type;return n.flags&Xd&&(n=n.prev),n.type=="block"?n.indent+(i=="{"?0:O.unit):n.flags&z1?n.column+(r?0:1):n.indent+(r?0:O.unit)},languageData:{wordChars:".",commentTokens:{line:"#"},autocomplete:U1.concat(V1,W1)}};function kd(t){for(var e={},O=t.split(" "),i=0;i*\/]/.test(i)?Zt(null,"select-op"):/[;{}:\[\]]/.test(i)?Zt(null,i):(t.eatWhile(/[\w\\\-]/),Zt("variable","variable"))}function G1(t,e){for(var O=!1,i;(i=t.next())!=null;){if(O&&i=="/"){e.tokenize=Vs;break}O=i=="*"}return Zt("comment","comment")}function C1(t,e){for(var O=0,i;(i=t.next())!=null;){if(O>=2&&i==">"){e.tokenize=Vs;break}O=i=="-"?O+1:0}return Zt("comment","comment")}function nW(t){return function(e,O){for(var i=!1,n;(n=e.next())!=null&&!(n==t&&!i);)i=!i&&n=="\\";return i||(O.tokenize=Vs),Zt("string","string")}}var E1={name:"nginx",startState:function(){return{tokenize:Vs,baseIndent:0,stack:[]}},token:function(t,e){if(t.eatSpace())return null;MO=null;var O=e.tokenize(t,e),i=e.stack[e.stack.length-1];return MO=="hash"&&i=="rule"?O="atom":O=="variable"&&(i=="rule"?O="number":(!i||i=="@media{")&&(O="tag")),i=="rule"&&/^[\{\};]$/.test(MO)&&e.stack.pop(),MO=="{"?i=="@media"?e.stack[e.stack.length-1]="@media{":e.stack.push("{"):MO=="}"?e.stack.pop():MO=="@media"?e.stack.push("@media"):i=="{"&&MO!="comment"&&e.stack.push("rule"),O},indent:function(t,e,O){var i=t.stack.length;return/^\}/.test(e)&&(i-=t.stack[t.stack.length-1]=="rule"?2:1),t.baseIndent+i*O.unit},languageData:{indentOnInput:/^\s*\}$/}};function rW(t){return new RegExp("^(("+t.join(")|(")+"))\\b","i")}var A1=["package","message","import","syntax","required","optional","repeated","reserved","default","extensions","packed","bool","bytes","double","enum","float","string","int32","int64","uint32","uint64","sint32","sint64","fixed32","fixed64","sfixed32","sfixed64","option","service","rpc","returns"],aW=rW(A1),oW=new RegExp("^[_A-Za-z\xA1-\uFFFF][_A-Za-z0-9\xA1-\uFFFF]*");function sW(t){return t.eatSpace()?null:t.match("//")?(t.skipToEnd(),"comment"):t.match(/^[0-9\.+-]/,!1)&&(t.match(/^[+-]?0x[0-9a-fA-F]+/)||t.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)||t.match(/^[+-]?\d+([EeDd][+-]?\d+)?/))?"number":t.match(/^"([^"]|(""))*"/)||t.match(/^'([^']|(''))*'/)?"string":t.match(aW)?"keyword":t.match(oW)?"variable":(t.next(),null)}var L1={name:"protobuf",token:sW,languageData:{autocomplete:A1}};function Un(t,e){e=e||{};for(var O=e.prefix!==void 0?e.prefix:"^",i=e.suffix!==void 0?e.suffix:"\\b",n=0;n/,uW=Un([hW,fW],{suffix:""}),dW=/^((0x[\da-f]+)|((\d+\.\d+|\d\.|\.\d+|\d+)(e[\+\-]?\d+)?))[ld]?([kmgtp]b)?/i,QW=/^[A-Za-z\_][A-Za-z\-\_\d]*\b/,$W=/[A-Z]:|%|\?/i,pW=Un([/Add-(Computer|Content|History|Member|PSSnapin|Type)/,/Checkpoint-Computer/,/Clear-(Content|EventLog|History|Host|Item(Property)?|Variable)/,/Compare-Object/,/Complete-Transaction/,/Connect-PSSession/,/ConvertFrom-(Csv|Json|SecureString|StringData)/,/Convert-Path/,/ConvertTo-(Csv|Html|Json|SecureString|Xml)/,/Copy-Item(Property)?/,/Debug-Process/,/Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/,/Disconnect-PSSession/,/Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/,/(Enter|Exit)-PSSession/,/Export-(Alias|Clixml|Console|Counter|Csv|FormatData|ModuleMember|PSSession)/,/ForEach-Object/,/Format-(Custom|List|Table|Wide)/,new RegExp("Get-(Acl|Alias|AuthenticodeSignature|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Counter|Credential|Culture|Date|Event|EventLog|EventSubscriber|ExecutionPolicy|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job|Location|Member|Module|PfxCertificate|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|Verb|WinEvent|WmiObject)"),/Group-Object/,/Import-(Alias|Clixml|Counter|Csv|LocalizedData|Module|PSSession)/,/ImportSystemModules/,/Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)/,/Join-Path/,/Limit-EventLog/,/Measure-(Command|Object)/,/Move-Item(Property)?/,new RegExp("New-(Alias|Event|EventLog|Item(Property)?|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy|WinEvent)"),/Out-(Default|File|GridView|Host|Null|Printer|String)/,/Pause/,/(Pop|Push)-Location/,/Read-Host/,/Receive-(Job|PSSession)/,/Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)/,/Remove-(Computer|Event|EventLog|Item(Property)?|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)/,/Rename-(Computer|Item(Property)?)/,/Reset-ComputerMachinePassword/,/Resolve-Path/,/Restart-(Computer|Service)/,/Restore-Computer/,/Resume-(Job|Service)/,/Save-Help/,/Select-(Object|String|Xml)/,/Send-MailMessage/,new RegExp("Set-(Acl|Alias|AuthenticodeSignature|Content|Date|ExecutionPolicy|Item(Property)?|Location|PSBreakpoint|PSDebug|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)"),/Show-(Command|ControlPanelItem|EventLog)/,/Sort-Object/,/Split-Path/,/Start-(Job|Process|Service|Sleep|Transaction|Transcript)/,/Stop-(Computer|Job|Process|Service|Transcript)/,/Suspend-(Job|Service)/,/TabExpansion2/,/Tee-Object/,/Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)/,/Trace-Command/,/Unblock-File/,/Undo-Transaction/,/Unregister-(Event|PSSessionConfiguration)/,/Update-(FormatData|Help|List|TypeData)/,/Use-Transaction/,/Wait-(Event|Job|Process)/,/Where-Object/,/Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning)/,/cd|help|mkdir|more|oss|prompt/,/ac|asnp|cat|cd|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|dnsn|ebp/,/echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps/,/group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md/,/measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri/,/rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls/,/sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|where|wjb|write/],{prefix:"",suffix:""}),mW=Un([/[$?^_]|Args|ConfirmPreference|ConsoleFileName|DebugPreference|Error|ErrorActionPreference|ErrorView|ExecutionContext/,/FormatEnumerationLimit|Home|Host|Input|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount/,/MaximumHistoryCount|MaximumVariableCount|MyInvocation|NestedPromptLevel|OutputEncoding|Pid|Profile|ProgressPreference/,/PSBoundParameters|PSCommandPath|PSCulture|PSDefaultParameterValues|PSEmailServer|PSHome|PSScriptRoot|PSSessionApplicationName/,/PSSessionConfigurationName|PSSessionOption|PSUICulture|PSVersionTable|Pwd|ShellId|StackTrace|VerbosePreference/,/WarningPreference|WhatIfPreference/,/Event|EventArgs|EventSubscriber|Sender/,/Matches|Ofs|ForEach|LastExitCode|PSCmdlet|PSItem|PSSenderInfo|This/,/true|false|null/],{prefix:"\\$",suffix:""}),gW=Un([$W,pW,mW],{suffix:N1}),I1={keyword:lW,number:dW,operator:uW,builtin:gW,punctuation:cW,variable:QW};function bO(t,e){var O=e.returnStack[e.returnStack.length-1];if(O&&O.shouldReturnFrom(e))return e.tokenize=O.tokenize,e.returnStack.pop(),e.tokenize(t,e);if(t.eatSpace())return null;if(t.eat("("))return e.bracketNesting+=1,"punctuation";if(t.eat(")"))return e.bracketNesting-=1,"punctuation";for(var i in I1)if(t.match(I1[i]))return i;var n=t.next();if(n==="'")return PW(t,e);if(n==="$")return wd(t,e);if(n==='"')return B1(t,e);if(n==="<"&&t.eat("#"))return e.tokenize=M1,M1(t,e);if(n==="#")return t.skipToEnd(),"comment";if(n==="@"){var r=t.eat(/["']/);if(r&&t.eol())return e.tokenize=Ws,e.startQuote=r[0],Ws(t,e);if(t.eol())return"error";if(t.peek().match(/[({]/))return"punctuation";if(t.peek().match(yd))return wd(t,e)}return"error"}function PW(t,e){for(var O;(O=t.peek())!=null;)if(t.next(),O==="'"&&!t.eat("'"))return e.tokenize=bO,"string";return"error"}function B1(t,e){for(var O;(O=t.peek())!=null;){if(O==="$")return e.tokenize=SW,"string";if(t.next(),O==="`"){t.next();continue}if(O==='"'&&!t.eat('"'))return e.tokenize=bO,"string"}return"error"}function SW(t,e){return F1(t,e,B1)}function XW(t,e){return e.tokenize=Ws,e.startQuote='"',Ws(t,e)}function bW(t,e){return F1(t,e,XW)}function F1(t,e,O){if(t.match("$(")){var i=e.bracketNesting;return e.returnStack.push({shouldReturnFrom:function(n){return n.bracketNesting===i},tokenize:O}),e.tokenize=bO,e.bracketNesting+=1,"punctuation"}else return t.next(),e.returnStack.push({shouldReturnFrom:function(){return!0},tokenize:O}),e.tokenize=wd,e.tokenize(t,e)}function M1(t,e){for(var O=!1,i;(i=t.next())!=null;){if(O&&i==">"){e.tokenize=bO;break}O=i==="#"}return"comment"}function wd(t,e){var O=t.peek();return t.eat("{")?(e.tokenize=D1,D1(t,e)):O!=null&&O.match(yd)?(t.eatWhile(yd),e.tokenize=bO,"variable"):(e.tokenize=bO,"error")}function D1(t,e){for(var O;(O=t.next())!=null;)if(O==="}"){e.tokenize=bO;break}return"variable"}function Ws(t,e){var O=e.startQuote;if(t.sol()&&t.match(new RegExp(O+"@")))e.tokenize=bO;else if(O==='"')for(;!t.eol();){var i=t.peek();if(i==="$")return e.tokenize=bW,"string";t.next(),i==="`"&&t.next()}else t.skipToEnd();return"string"}var H1={name:"powershell",startState:function(){return{returnStack:[],bracketNesting:0,tokenize:bO}},token:function(t,e){return e.tokenize(t,e)},languageData:{commentTokens:{line:"#",block:{open:"<#",close:"#>"}}}};function _d(t,e,O,i,n,r){this.indented=t,this.column=e,this.type=O,this.info=i,this.align=n,this.prev=r}function js(t,e,O,i){var n=t.indented;return t.context&&t.context.type=="statement"&&O!="statement"&&(n=t.context.indented),t.context=new _d(n,e,O,i,null,t.context)}function na(t){var e=t.context.type;return(e==")"||e=="]"||e=="}")&&(t.indented=t.context.indented),t.context=t.context.prev}function K1(t,e,O){if(e.prevToken=="variable"||e.prevToken=="type"||/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(t.string.slice(0,O))||e.typeAtEndOfLine&&t.column()==t.indentation())return!0}function Td(t){for(;;){if(!t||t.type=="top")return!0;if(t.type=="}"&&t.prev.info!="namespace")return!1;t=t.prev}}function pt(t){var e=t.statementIndentUnit,O=t.dontAlignCalls,i=t.keywords||{},n=t.types||{},r=t.builtin||{},a=t.blockKeywords||{},o=t.defKeywords||{},s=t.atoms||{},l=t.hooks||{},c=t.multiLineStrings,h=t.indentStatements!==!1,f=t.indentSwitch!==!1,d=t.namespaceSeparator,Q=t.isPunctuationChar||/[\[\]{}\(\),;\:\.]/,$=t.numberStart||/[\d\.]/,p=t.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,m=t.isOperatorChar||/[+\-*&%=<>!?|\/]/,P=t.isIdentifierChar||/[\w\$_\xa1-\uffff]/,S=t.isReservedIdentifier||!1,y,k;function T(q,Z){var R=q.next();if(l[R]){var w=l[R](q,Z);if(w!==!1)return w}if(R=='"'||R=="'")return Z.tokenize=v(R),Z.tokenize(q,Z);if($.test(R)){if(q.backUp(1),q.match(p))return"number";q.next()}if(Q.test(R))return y=R,null;if(R=="/"){if(q.eat("*"))return Z.tokenize=j,j(q,Z);if(q.eat("/"))return q.skipToEnd(),"comment"}if(m.test(R)){for(;!q.match(/^\/[\/*]/,!1)&&q.eat(m););return"operator"}if(q.eatWhile(P),d)for(;q.match(d);)q.eatWhile(P);var g=q.current();return xO(i,g)?(xO(a,g)&&(y="newstatement"),xO(o,g)&&(k=!0),"keyword"):xO(n,g)?"type":xO(r,g)||S&&S(g)?(xO(a,g)&&(y="newstatement"),"builtin"):xO(s,g)?"atom":"variable"}function v(q){return function(Z,R){for(var w=!1,g,x=!1;(g=Z.next())!=null;){if(g==q&&!w){x=!0;break}w=!w&&g=="\\"}return(x||!(w||c))&&(R.tokenize=null),"string"}}function j(q,Z){for(var R=!1,w;w=q.next();){if(w=="/"&&R){Z.tokenize=null;break}R=w=="*"}return"comment"}function M(q,Z){t.typeFirstDefinitions&&q.eol()&&Td(Z.context)&&(Z.typeAtEndOfLine=K1(q,Z,q.pos))}return{name:t.name,startState:function(q){return{tokenize:null,context:new _d(-q,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(q,Z){var R=Z.context;if(q.sol()&&(R.align==null&&(R.align=!1),Z.indented=q.indentation(),Z.startOfLine=!0),q.eatSpace())return M(q,Z),null;y=k=null;var w=(Z.tokenize||T)(q,Z);if(w=="comment"||w=="meta")return w;if(R.align==null&&(R.align=!0),y==";"||y==":"||y==","&&q.match(/^\s*(?:\/\/.*)?$/,!1))for(;Z.context.type=="statement";)na(Z);else if(y=="{")js(Z,q.column(),"}");else if(y=="[")js(Z,q.column(),"]");else if(y=="(")js(Z,q.column(),")");else if(y=="}"){for(;R.type=="statement";)R=na(Z);for(R.type=="}"&&(R=na(Z));R.type=="statement";)R=na(Z)}else y==R.type?na(Z):h&&((R.type=="}"||R.type=="top")&&y!=";"||R.type=="statement"&&y=="newstatement")&&js(Z,q.column(),"statement",q.current());if(w=="variable"&&(Z.prevToken=="def"||t.typeFirstDefinitions&&K1(q,Z,q.start)&&Td(Z.context)&&q.match(/^\s*\(/,!1))&&(w="def"),l.token){var g=l.token(q,Z,w);g!==void 0&&(w=g)}return w=="def"&&t.styleDefs===!1&&(w="variable"),Z.startOfLine=!1,Z.prevToken=k?"def":w||y,M(q,Z),w},indent:function(q,Z,R){if(q.tokenize!=T&&q.tokenize!=null||q.typeAtEndOfLine&&Td(q.context))return null;var w=q.context,g=Z&&Z.charAt(0),x=g==w.type;if(w.type=="statement"&&g=="}"&&(w=w.prev),t.dontIndentStatements)for(;w.type=="statement"&&t.dontIndentStatements.test(w.info);)w=w.prev;if(l.indent){var b=l.indent(q,w,Z,R.unit);if(typeof b=="number")return b}var C=w.prev&&w.prev.info=="switch";if(t.allmanIndentation&&/[{(]/.test(g)){for(;w.type!="top"&&w.type!="}";)w=w.prev;return w.indented}return w.type=="statement"?w.indented+(g=="{"?0:e||R.unit):w.align&&(!O||w.type!=")")?w.column+(x?0:1):w.type==")"&&!x?w.indented+(e||R.unit):w.indented+(x?0:R.unit)+(!x&&C&&!/^(?:case|default)\b/.test(Z)?R.unit:0)},languageData:{indentOnInput:f?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}},autocomplete:Object.keys(i).concat(Object.keys(n)).concat(Object.keys(r)).concat(Object.keys(s)),...t.languageData}}}function G(t){for(var e={},O=t.split(" "),i=0;i!?|\/#:@]/,hooks:{"@":function(t){return t.eatWhile(/[\w\$_]/),"meta"},'"':function(t,e){return t.match('""')?(e.tokenize=ox,e.tokenize(t,e)):!1},"'":function(t){return t.match(/^(\\[^'\s]+|[^\\'])'/)?"character":(t.eatWhile(/[\w\$_\xa1-\uffff]/),"atom")},"=":function(t,e){var O=e.context;return O.type=="}"&&O.align&&t.eat(">")?(e.context=new _d(O.indented,O.column,O.type,O.info,null,O.prev),"operator"):!1},"/":function(t,e){return t.eat("*")?(e.tokenize=ra(1),e.tokenize(t,e)):!1}},languageData:{closeBrackets:{brackets:["(","[","{","'",'"','"""']}}});function yW(t){return function(e,O){for(var i=!1,n,r=!1;!e.eol();){if(!t&&!i&&e.match('"')){r=!0;break}if(t&&e.match('"""')){r=!0;break}n=e.next(),!i&&n=="$"&&e.match("{")&&e.skipTo("}"),i=!i&&n=="\\"&&!t}return(r||!t)&&(O.tokenize=null),"string"}}var lx=pt({name:"kotlin",keywords:G("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam"),types:G("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(ul?|l|f)?/i,blockKeywords:G("catch class do else finally for if where try while enum"),defKeywords:G("class val var object interface fun"),atoms:G("true false null this"),hooks:{"@":function(t){return t.eatWhile(/[\w\$_]/),"meta"},"*":function(t,e){return e.prevToken=="."?"variable":"operator"},'"':function(t,e){return e.tokenize=yW(t.match('""')),e.tokenize(t,e)},"/":function(t,e){return t.eat("*")?(e.tokenize=ra(1),e.tokenize(t,e)):!1},indent:function(t,e,O,i){var n=O&&O.charAt(0);if((t.prevToken=="}"||t.prevToken==")")&&O=="")return t.indented;if(t.prevToken=="operator"&&O!="}"&&t.context.type!="}"||t.prevToken=="variable"&&n=="."||(t.prevToken=="}"||t.prevToken==")")&&n==".")return i*2+e.indented;if(e.align&&e.type=="}")return e.indented+(t.context.type==(O||"").charAt(0)?0:i)}},languageData:{closeBrackets:{brackets:["(","[","{","'",'"','"""']}}}),LC=pt({name:"shader",keywords:G("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:G("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:G("for while do if else struct"),builtin:G("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:G("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":NO}}),IC=pt({name:"nesc",keywords:G(aa+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:oa,blockKeywords:G(sa),atoms:G("null true false"),hooks:{"#":NO}}),cx=pt({name:"objectivec",keywords:G(aa+" "+Ox),types:nx,builtin:G(ix),blockKeywords:G(sa+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:G(Cs+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:G("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:As,hooks:{"#":NO,"*":Es}}),MC=pt({name:"objectivecpp",keywords:G(aa+" "+Ox+" "+tx),types:nx,builtin:G(ix),blockKeywords:G(sa+" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),defKeywords:G(Cs+" @interface @implementation @protocol @class class namespace"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:G("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:As,hooks:{"#":NO,"*":Es,u:DO,U:DO,L:DO,R:DO,0:_e,1:_e,2:_e,3:_e,4:_e,5:_e,6:_e,7:_e,8:_e,9:_e,token:function(t,e,O){if(O=="variable"&&t.peek()=="("&&(e.prevToken==";"||e.prevToken==null||e.prevToken=="}")&&rx(t.current()))return"def"}},namespaceSeparator:"::"}),DC=pt({name:"squirrel",keywords:G("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:oa,blockKeywords:G("case catch class else for foreach if switch try while"),defKeywords:G("function local class"),typeFirstDefinitions:!0,atoms:G("true false null"),hooks:{"#":NO}}),Gs=null;function hx(t){return function(e,O){for(var i=!1,n,r=!1;!e.eol();){if(!i&&e.match('"')&&(t=="single"||e.match('""'))){r=!0;break}if(!i&&e.match("``")){Gs=hx(t),r=!0;break}n=e.next(),i=t=="single"&&!i&&n=="\\"}return r&&(O.tokenize=null),"string"}}var NC=pt({name:"ceylon",keywords:G("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(t){var e=t.charAt(0);return e===e.toUpperCase()&&e!==e.toLowerCase()},blockKeywords:G("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:G("class dynamic function interface module object package value"),builtin:G("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:G("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(t){return t.eatWhile(/[\w\$_]/),"meta"},'"':function(t,e){return e.tokenize=hx(t.match('""')?"triple":"single"),e.tokenize(t,e)},"`":function(t,e){return!Gs||!t.match("`")?!1:(e.tokenize=Gs,Gs=null,e.tokenize(t,e))},"'":function(t){return t.match(/^(\\[^'\s]+|[^\\'])'/)?"string.special":(t.eatWhile(/[\w\$_\xa1-\uffff]/),"atom")},token:function(t,e,O){if((O=="variable"||O=="type")&&e.prevToken==".")return"variableName.special"}},languageData:{closeBrackets:{brackets:["(","[","{","'",'"','"""']}}});function wW(t){(t.interpolationStack||(t.interpolationStack=[])).push(t.tokenize)}function fx(t){return(t.interpolationStack||(t.interpolationStack=[])).pop()}function TW(t){return t.interpolationStack?t.interpolationStack.length:0}function vd(t,e,O,i){var n=!1;if(e.eat(t))if(e.eat(t))n=!0;else return"string";function r(a,o){for(var s=!1;!a.eol();){if(!i&&!s&&a.peek()=="$")return wW(o),o.tokenize=vW,"string";var l=a.next();if(l==t&&!s&&(!n||a.match(t+t))){o.tokenize=null;break}s=!i&&!s&&l=="\\"}return"string"}return O.tokenize=r,r(e,O)}function vW(t,e){return t.eat("$"),t.eat("{")?e.tokenize=null:e.tokenize=_W,null}function _W(t,e){return t.eatWhile(/[\w_]/),e.tokenize=fx(e),"variable"}var ux=pt({name:"dart",keywords:G("this super static final const abstract class extends external factory implements mixin get native set typedef with enum throw rethrow assert break case continue default in return new deferred async await covariant try catch finally do else for if switch while import library export part of show hide is as extension on yield late required sealed base interface when inline"),blockKeywords:G("try catch finally do else for if switch while"),builtin:G("void bool num int double dynamic var String Null Never"),atoms:G("true false null"),number:/^(?:0x[a-f\d_]+|(?:[\d_]+\.?[\d_]*|\.[\d_]+)(?:e[-+]?[\d_]+)?)/i,hooks:{"@":function(t){return t.eatWhile(/[\w\$_\.]/),"meta"},"'":function(t,e){return vd("'",t,e,!1)},'"':function(t,e){return vd('"',t,e,!1)},r:function(t,e){var O=t.peek();return O=="'"||O=='"'?vd(t.next(),t,e,!0):!1},"}":function(t,e){return TW(e)>0?(e.tokenize=fx(e),null):!1},"/":function(t,e){return t.eat("*")?(e.tokenize=ra(1),e.tokenize(t,e)):!1},token:function(t,e,O){if(O=="variable"){var i=RegExp("^[_$]*[A-Z][a-zA-Z0-9_$]*$","g");if(i.test(t.current()))return"type"}}}});function Yd(t,e,O){return e(O),O(t,e)}var ZW=/[a-z_]/,RW=/[A-Z]/,Zd=/\d/,YW=/[0-9A-Fa-f]/,zW=/[0-7]/,dx=/[a-z_A-Z0-9'\xa1-\uffff]/,Rd=/[-!#$%&*+.\/<=>?@\\^|~:]/,qW=/[(),;[\]`{}]/,$x=/[ \t\v\f]/;function Vn(t,e){if(t.eatWhile($x))return null;var O=t.next();if(qW.test(O)){if(O=="{"&&t.eat("-")){var i="comment";return t.eat("#")&&(i="meta"),Yd(t,e,px(i,1))}return null}if(O=="'")return t.eat("\\"),t.next(),t.eat("'")?"string":"error";if(O=='"')return Yd(t,e,mx);if(RW.test(O))return t.eatWhile(dx),t.eat(".")?"qualifier":"type";if(ZW.test(O))return t.eatWhile(dx),"variable";if(Zd.test(O)){if(O=="0"){if(t.eat(/[xX]/))return t.eatWhile(YW),"integer";if(t.eat(/[oO]/))return t.eatWhile(zW),"number"}t.eatWhile(Zd);var i="number";return t.match(/^\.\d+/)&&(i="number"),t.eat(/[eE]/)&&(i="number",t.eat(/[-+]/),t.eatWhile(Zd)),i}return O=="."&&t.eat(".")?"keyword":Rd.test(O)?O=="-"&&t.eat(/-/)&&(t.eatWhile(/-/),!t.eat(Rd))?(t.skipToEnd(),"comment"):(t.eatWhile(Rd),"variable"):"error"}function px(t,e){return e==0?Vn:function(O,i){for(var n=e;!O.eol();){var r=O.next();if(r=="{"&&O.eat("-"))++n;else if(r=="-"&&O.eat("}")&&(--n,n==0))return i(Vn),t}return i(px(t,n)),t}}function mx(t,e){for(;!t.eol();){var O=t.next();if(O=='"')return e(Vn),"string";if(O=="\\"){if(t.eol()||t.eat($x))return e(UW),"string";t.eat("&")||t.next()}}return e(Vn),"error"}function UW(t,e){return t.eat("\\")?Yd(t,e,mx):(t.next(),e(Vn),"error")}var Qx=(function(){var t={};function e(O){return function(){for(var i=0;i","@","~","=>"),e("builtin")("!!","$!","$","&&","+","++","-",".","/","/=","<","<*","<=","<$>","<*>","=<<","==",">",">=",">>",">>=","^","^^","||","*","*>","**"),e("builtin")("Applicative","Bool","Bounded","Char","Double","EQ","Either","Enum","Eq","False","FilePath","Float","Floating","Fractional","Functor","GT","IO","IOError","Int","Integer","Integral","Just","LT","Left","Maybe","Monad","Nothing","Num","Ord","Ordering","Rational","Read","ReadS","Real","RealFloat","RealFrac","Right","Show","ShowS","String","True"),e("builtin")("abs","acos","acosh","all","and","any","appendFile","asTypeOf","asin","asinh","atan","atan2","atanh","break","catch","ceiling","compare","concat","concatMap","const","cos","cosh","curry","cycle","decodeFloat","div","divMod","drop","dropWhile","either","elem","encodeFloat","enumFrom","enumFromThen","enumFromThenTo","enumFromTo","error","even","exp","exponent","fail","filter","flip","floatDigits","floatRadix","floatRange","floor","fmap","foldl","foldl1","foldr","foldr1","fromEnum","fromInteger","fromIntegral","fromRational","fst","gcd","getChar","getContents","getLine","head","id","init","interact","ioError","isDenormalized","isIEEE","isInfinite","isNaN","isNegativeZero","iterate","last","lcm","length","lex","lines","log","logBase","lookup","map","mapM","mapM_","max","maxBound","maximum","maybe","min","minBound","minimum","mod","negate","not","notElem","null","odd","or","otherwise","pi","pred","print","product","properFraction","pure","putChar","putStr","putStrLn","quot","quotRem","read","readFile","readIO","readList","readLn","readParen","reads","readsPrec","realToFrac","recip","rem","repeat","replicate","return","reverse","round","scaleFloat","scanl","scanl1","scanr","scanr1","seq","sequence","sequence_","show","showChar","showList","showParen","showString","shows","showsPrec","significand","signum","sin","sinh","snd","span","splitAt","sqrt","subtract","succ","sum","tail","take","takeWhile","tan","tanh","toEnum","toInteger","toRational","truncate","uncurry","undefined","unlines","until","unwords","unzip","unzip3","userError","words","writeFile","zip","zip3","zipWith","zipWith3"),t})(),gx={name:"haskell",startState:function(){return{f:Vn}},copyState:function(t){return{f:t.f}},token:function(t,e){var O=e.f(t,function(n){e.f=n}),i=t.current();return Qx.hasOwnProperty(i)?Qx[i]:O},languageData:{commentTokens:{line:"--",block:{open:"{-",close:"-}"}}}};var VW=["-type","-spec","-export_type","-opaque"],WW=["after","begin","catch","case","cond","end","fun","if","let","of","query","receive","try","when"],jW=/[\->,;]/,GW=["->",";",","],CW=["and","andalso","band","bnot","bor","bsl","bsr","bxor","div","not","or","orelse","rem","xor"],EW=/[\+\-\*\/<>=\|:!]/,AW=["=","+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-","!"],LW=/[<\(\[\{]/,qd=["<<","(","[","{"],IW=/[>\)\]\}]/,xx=["}","]",")",">>"],MW=["is_atom","is_binary","is_bitstring","is_boolean","is_float","is_function","is_integer","is_list","is_number","is_pid","is_port","is_record","is_reference","is_tuple","atom","binary","bitstring","boolean","function","integer","list","number","pid","port","record","reference","tuple"],DW=["abs","adler32","adler32_combine","alive","apply","atom_to_binary","atom_to_list","binary_to_atom","binary_to_existing_atom","binary_to_list","binary_to_term","bit_size","bitstring_to_list","byte_size","check_process_code","contact_binary","crc32","crc32_combine","date","decode_packet","delete_module","disconnect_node","element","erase","exit","float","float_to_list","garbage_collect","get","get_keys","group_leader","halt","hd","integer_to_list","internal_bif","iolist_size","iolist_to_binary","is_alive","is_atom","is_binary","is_bitstring","is_boolean","is_float","is_function","is_integer","is_list","is_number","is_pid","is_port","is_process_alive","is_record","is_reference","is_tuple","length","link","list_to_atom","list_to_binary","list_to_bitstring","list_to_existing_atom","list_to_float","list_to_integer","list_to_pid","list_to_tuple","load_module","make_ref","module_loaded","monitor_node","node","node_link","node_unlink","nodes","notalive","now","open_port","pid_to_list","port_close","port_command","port_connect","port_control","pre_loaded","process_flag","process_info","processes","purge_module","put","register","registered","round","self","setelement","size","spawn","spawn_link","spawn_monitor","spawn_opt","split_binary","statistics","term_to_binary","time","throw","tl","trunc","tuple_size","tuple_to_list","unlink","unregister","whereis"],Ls=/[\w@Ø-ÞÀ-Öß-öø-ÿ]/,NW=/[0-7]{1,3}|[bdefnrstv\\"']|\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/;function BW(t,e){if(e.in_string)return e.in_string=!Xx(t),ae(e,t,"string");if(e.in_atom)return e.in_atom=!bx(t),ae(e,t,"atom");if(t.eatSpace())return ae(e,t,"whitespace");if(!la(e)&&t.match(/-\s*[a-zß-öø-ÿ][\wØ-ÞÀ-Öß-öø-ÿ]*/))return Be(t.current(),VW)?ae(e,t,"type"):ae(e,t,"attribute");var O=t.next();if(O=="%")return t.skipToEnd(),ae(e,t,"comment");if(O==":")return ae(e,t,"colon");if(O=="?")return t.eatSpace(),t.eatWhile(Ls),ae(e,t,"macro");if(O=="#")return t.eatSpace(),t.eatWhile(Ls),ae(e,t,"record");if(O=="$")return t.next()=="\\"&&!t.match(NW)?ae(e,t,"error"):ae(e,t,"number");if(O==".")return ae(e,t,"dot");if(O=="'"){if(!(e.in_atom=!bx(t))){if(t.match(/\s*\/\s*[0-9]/,!1))return t.match(/\s*\/\s*[0-9]/,!0),ae(e,t,"fun");if(t.match(/\s*\(/,!1)||t.match(/\s*:/,!1))return ae(e,t,"function")}return ae(e,t,"atom")}if(O=='"')return e.in_string=!Xx(t),ae(e,t,"string");if(/[A-Z_Ø-ÞÀ-Ö]/.test(O))return t.eatWhile(Ls),ae(e,t,"variable");if(/[a-z_ß-öø-ÿ]/.test(O)){if(t.eatWhile(Ls),t.match(/\s*\/\s*[0-9]/,!1))return t.match(/\s*\/\s*[0-9]/,!0),ae(e,t,"fun");var i=t.current();return Be(i,WW)?ae(e,t,"keyword"):Be(i,CW)?ae(e,t,"operator"):t.match(/\s*\(/,!1)?Be(i,DW)&&(la(e).token!=":"||la(e,2).token=="erlang")?ae(e,t,"builtin"):Be(i,MW)?ae(e,t,"guard"):ae(e,t,"function"):FW(t)==":"?i=="erlang"?ae(e,t,"builtin"):ae(e,t,"function"):Be(i,["true","false"])?ae(e,t,"boolean"):ae(e,t,"atom")}var n=/[0-9]/,r=/[0-9a-zA-Z]/;return n.test(O)?(t.eatWhile(n),t.eat("#")?t.eatWhile(r)||t.backUp(1):t.eat(".")&&(t.eatWhile(n)?t.eat(/[eE]/)&&(t.eat(/[-+]/)?t.eatWhile(n)||t.backUp(2):t.eatWhile(n)||t.backUp(1)):t.backUp(1)),ae(e,t,"number")):Px(t,LW,qd)?ae(e,t,"open_paren"):Px(t,IW,xx)?ae(e,t,"close_paren"):Sx(t,jW,GW)?ae(e,t,"separator"):Sx(t,EW,AW)?ae(e,t,"operator"):ae(e,t,null)}function Px(t,e,O){if(t.current().length==1&&e.test(t.current())){for(t.backUp(1);e.test(t.peek());)if(t.next(),Be(t.current(),O))return!0;t.backUp(t.current().length-1)}return!1}function Sx(t,e,O){if(t.current().length==1&&e.test(t.current())){for(;e.test(t.peek());)t.next();for(;01&&t[e].type==="fun"&&t[e-1].token==="fun")return t.slice(0,e-1);switch(t[e].token){case"}":return jt(t,{g:["{"]});case"]":return jt(t,{i:["["]});case")":return jt(t,{i:["("]});case">>":return jt(t,{i:["<<"]});case"end":return jt(t,{i:["begin","case","fun","if","receive","try"]});case",":return jt(t,{e:["begin","try","when","->",",","(","[","{","<<"]});case"->":return jt(t,{r:["when"],m:["try","if","case","receive"]});case";":return jt(t,{E:["case","fun","if","receive","try","when"]});case"catch":return jt(t,{e:["try"]});case"of":return jt(t,{e:["case"]});case"after":return jt(t,{e:["receive","try"]});default:return t}}function jt(t,e){for(var O in e)for(var i=t.length-1,n=e[O],r=i-1;-1"?Be(a.token,["receive","case","if","try"])?a.column+O.unit+O.unit:a.column+O.unit:Be(r.token,qd)?r.column+r.token.length:(i=rj(t),Gi(i)?i.column+O.unit:0):0}function ij(t){var e=t.match(/,|[a-z]+|\}|\]|\)|>>|\|+|\(/);return Gi(e)&&e.index===0?e[0]:""}function nj(t){var e=t.tokenStack.slice(0,-1),O=Is(e,"type",["open_paren"]);return Gi(e[O])?e[O]:!1}function rj(t){var e=t.tokenStack,O=Is(e,"type",["open_paren","separator","keyword"]),i=Is(e,"type",["operator"]);return Gi(O)&&Gi(i)&&O"))return Fe="->",null;if(/[+\-*&%=<>!?|\/~]/.test(O))return t.eatWhile(/[+\-*&%=<>|~]/),"operator";if(t.eatWhile(/[\w\$_]/),O=="@")return t.eatWhile(/[\w\$_\.]/),"meta";if(e.lastToken==".")return"property";if(t.eat(":"))return Fe="proplabel","property";var i=t.current();return lj.propertyIsEnumerable(i)?"atom":aj.propertyIsEnumerable(i)?(oj.propertyIsEnumerable(i)?Fe="newstatement":sj.propertyIsEnumerable(i)&&(Fe="standalone"),"keyword"):"variable"}Vd.isBase=!0;function Tx(t,e,O){var i=!1;if(t!="/"&&e.eat(t))if(e.eat(t))i=!0;else return"string";function n(r,a){for(var o=!1,s,l=!i;(s=r.next())!=null;){if(s==t&&!o){if(!i)break;if(r.match(t+t)){l=!0;break}}if(t=='"'&&s=="$"&&!o){if(r.eat("{"))return a.tokenize.push(cj()),"string";if(r.match(/^\w/,!1))return a.tokenize.push(hj),"string"}o=!o&&s=="\\"}return l&&a.tokenize.pop(),"string"}return O.tokenize.push(n),n(e,O)}function cj(){var t=1;function e(O,i){if(O.peek()=="}"){if(t--,t==0)return i.tokenize.pop(),i.tokenize[i.tokenize.length-1](O,i)}else O.peek()=="{"&&t++;return Vd(O,i)}return e.isBase=!0,e}function hj(t,e){var O=t.match(/^(\.|[\w\$_]+)/);return(!O||!t.match(O[0]=="."?/^[\w$_]/:/^\./))&&e.tokenize.pop(),O?O[0]=="."?null:"variable":e.tokenize[e.tokenize.length-1](t,e)}function vx(t,e){for(var O=!1,i;i=t.next();){if(i=="/"&&O){e.tokenize.pop();break}O=i=="*"}return"comment"}function Ud(t,e){return!t||t=="operator"||t=="->"||/[\.\[\{\(,;:]/.test(t)||t=="newstatement"||t=="keyword"||t=="proplabel"||t=="standalone"&&!e}function _x(t,e,O,i,n){this.indented=t,this.column=e,this.type=O,this.align=i,this.prev=n}function Ms(t,e,O){return t.context=new _x(t.indented,e,O,null,t.context)}function Ci(t){var e=t.context.type;return(e==")"||e=="]"||e=="}")&&(t.indented=t.context.indented),t.context=t.context.prev}var Zx={name:"groovy",startState:function(t){return{tokenize:[Vd],context:new _x(-t,0,"top",!1),indented:0,startOfLine:!0,lastToken:null}},token:function(t,e){var O=e.context;if(t.sol()&&(O.align==null&&(O.align=!1),e.indented=t.indentation(),e.startOfLine=!0,O.type=="statement"&&!Ud(e.lastToken,!0)&&(Ci(e),O=e.context)),t.eatSpace())return null;Fe=null;var i=e.tokenize[e.tokenize.length-1](t,e);if(i=="comment")return i;if(O.align==null&&(O.align=!0),(Fe==";"||Fe==":")&&O.type=="statement")Ci(e);else if(Fe=="->"&&O.type=="statement"&&O.prev.type=="}")Ci(e),e.context.align=!1;else if(Fe=="{")Ms(e,t.column(),"}");else if(Fe=="[")Ms(e,t.column(),"]");else if(Fe=="(")Ms(e,t.column(),")");else if(Fe=="}"){for(;O.type=="statement";)O=Ci(e);for(O.type=="}"&&(O=Ci(e));O.type=="statement";)O=Ci(e)}else Fe==O.type?Ci(e):(O.type=="}"||O.type=="top"||O.type=="statement"&&Fe=="newstatement")&&Ms(e,t.column(),"statement");return e.startOfLine=!1,e.lastToken=Fe||i,i},indent:function(t,e,O){if(!t.tokenize[t.tokenize.length-1].isBase)return null;var i=e&&e.charAt(0),n=t.context;n.type=="statement"&&!Ud(t.lastToken,!0)&&(n=n.prev);var r=i==n.type;return n.type=="statement"?n.indented+(i=="{"?0:O.unit):n.align?n.column+(r?0:1):n.indented+(r?0:O.unit)},languageData:{indentOnInput:/^\s*[{}]$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}},closeBrackets:{brackets:["(","[","{","'",'"',"'''",'"""']}}};function BO(t,e,O){return typeof O>"u"&&(O=""),typeof e>"u"&&(e="\\b"),new RegExp("^"+O+"(("+t.join(")|(")+"))"+e)}var fj="\\\\[0-7]{1,3}",uj="\\\\x[A-Fa-f0-9]{1,2}",dj=`\\\\[abefnrtv0%?'"\\\\]`,Qj="([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])",zx=["[<>]:","[<>=]=","<<=?",">>>?=?","=>","--?>","<--[->]?","\\/\\/","\\.{2,3}","[\\.\\\\%*+\\-<>!\\/^|&]=?","\\?","\\$","~",":"],$j=BO(["[<>]:","[<>=]=","[!=]==","<<=?",">>>?=?","=>?","--?>","<--[->]?","\\/\\/","[\\\\%*+\\-<>!\\/^|&\\u00F7\\u22BB]=?","\\?","\\$","~",":","\\u00D7","\\u2208","\\u2209","\\u220B","\\u220C","\\u2218","\\u221A","\\u221B","\\u2229","\\u222A","\\u2260","\\u2264","\\u2265","\\u2286","\\u2288","\\u228A","\\u22C5","\\b(in|isa)\\b(?!.?\\()"],""),pj=/^[;,()[\]{}]/,mj=/^[_A-Za-z\u00A1-\u2217\u2219-\uFFFF][\w\u00A1-\u2217\u2219-\uFFFF]*!*/,gj=BO([fj,uj,dj,Qj],"'"),Pj=["begin","function","type","struct","immutable","let","macro","for","while","quote","if","else","elseif","try","finally","catch","do"],Sj=["end","else","elseif","catch","finally"],qx=["if","else","elseif","while","for","begin","let","end","do","try","catch","finally","return","break","continue","global","local","const","export","import","importall","using","function","where","macro","module","baremodule","struct","type","mutable","immutable","quote","typealias","abstract","primitive","bitstype"],Ux=["true","false","nothing","NaN","Inf"],Xj=BO(Pj),bj=BO(Sj),xj=BO(qx),kj=BO(Ux),yj=/^@[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/,wj=/^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/,Tj=/^(`|([_A-Za-z\u00A1-\uFFFF]*"("")?))/,vj=BO(zx,"","@"),_j=BO(zx,"",":");function Rx(t){return t.nestedArrays>0}function Zj(t){return t.nestedGenerators>0}function Yx(t,e){return typeof e>"u"&&(e=0),t.scopes.length<=e?null:t.scopes[t.scopes.length-(e+1)]}function Wn(t,e){if(t.match("#=",!1))return e.tokenize=Yj,e.tokenize(t,e);var O=e.leavingExpr;if(t.sol()&&(O=!1),e.leavingExpr=!1,O&&t.match(/^'+/))return"operator";if(t.match(/\.{4,}/))return"error";if(t.match(/\.{1,3}/))return"operator";if(t.eatSpace())return null;var i=t.peek();if(i==="#")return t.skipToEnd(),"comment";if(i==="["&&(e.scopes.push("["),e.nestedArrays++),i==="("&&(e.scopes.push("("),e.nestedGenerators++),Rx(e)&&i==="]"){for(;e.scopes.length&&Yx(e)!=="[";)e.scopes.pop();e.scopes.pop(),e.nestedArrays--,e.leavingExpr=!0}if(Zj(e)&&i===")"){for(;e.scopes.length&&Yx(e)!=="(";)e.scopes.pop();e.scopes.pop(),e.nestedGenerators--,e.leavingExpr=!0}if(Rx(e)){if(e.lastToken=="end"&&t.match(":"))return"operator";if(t.match("end"))return"number"}var n;if((n=t.match(Xj,!1))&&e.scopes.push(n[0]),t.match(bj,!1)&&e.scopes.pop(),t.match(/^::(?![:\$])/))return e.tokenize=Rj,e.tokenize(t,e);if(!O&&(t.match(wj)||t.match(_j)))return"builtin";if(t.match($j))return"operator";if(t.match(/^\.?\d/,!1)){var r=RegExp(/^im\b/),a=!1;if(t.match(/^0x\.[0-9a-f_]+p[\+\-]?[_\d]+/i)&&(a=!0),t.match(/^0x[0-9a-f_]+/i)&&(a=!0),t.match(/^0b[01_]+/i)&&(a=!0),t.match(/^0o[0-7_]+/i)&&(a=!0),t.match(/^(?:(?:\d[_\d]*)?\.(?!\.)(?:\d[_\d]*)?|\d[_\d]*\.(?!\.)(?:\d[_\d]*))?([Eef][\+\-]?[_\d]+)?/i)&&(a=!0),t.match(/^\d[_\d]*(e[\+\-]?\d+)?/i)&&(a=!0),a)return t.match(r),e.leavingExpr=!0,"number"}if(t.match("'"))return e.tokenize=zj,e.tokenize(t,e);if(t.match(Tj))return e.tokenize=qj(t.current()),e.tokenize(t,e);if(t.match(yj)||t.match(vj))return"meta";if(t.match(pj))return null;if(t.match(xj))return"keyword";if(t.match(kj))return"builtin";var o=e.isDefinition||e.lastToken=="function"||e.lastToken=="macro"||e.lastToken=="type"||e.lastToken=="struct"||e.lastToken=="immutable";return t.match(mj)?o?t.peek()==="."?(e.isDefinition=!0,"variable"):(e.isDefinition=!1,"def"):(e.leavingExpr=!0,"variable"):(t.next(),"error")}function Rj(t,e){return t.match(/.*?(?=[,;{}()=\s]|$)/),t.match("{")?e.nestedParameters++:t.match("}")&&e.nestedParameters>0&&e.nestedParameters--,e.nestedParameters>0?t.match(/.*?(?={|})/)||t.next():e.nestedParameters==0&&(e.tokenize=Wn),"builtin"}function Yj(t,e){return t.match("#=")&&e.nestedComments++,t.match(/.*?(?=(#=|=#))/)||t.skipToEnd(),t.match("=#")&&(e.nestedComments--,e.nestedComments==0&&(e.tokenize=Wn)),"comment"}function zj(t,e){var O=!1,i;if(t.match(gj))O=!0;else if(i=t.match(/\\u([a-f0-9]{1,4})(?=')/i)){var n=parseInt(i[1],16);(n<=55295||n>=57344)&&(O=!0,t.next())}else if(i=t.match(/\\U([A-Fa-f0-9]{5,8})(?=')/)){var n=parseInt(i[1],16);n<=1114111&&(O=!0,t.next())}return O?(e.leavingExpr=!0,e.tokenize=Wn,"string"):(t.match(/^[^']+(?=')/)||t.skipToEnd(),t.match("'")&&(e.tokenize=Wn),"error")}function qj(t){t.substr(-3)==='"""'?t='"""':t.substr(-1)==='"'&&(t='"');function e(O,i){if(O.eat("\\"))O.next();else{if(O.match(t))return i.tokenize=Wn,i.leavingExpr=!0,"string";O.eat(/[`"]/)}return O.eatWhile(/[^\\`"]/),"string"}return e}var Vx={name:"julia",startState:function(){return{tokenize:Wn,scopes:[],lastToken:null,leavingExpr:!1,isDefinition:!1,nestedArrays:0,nestedComments:0,nestedGenerators:0,nestedParameters:0,firstParenPos:-1}},token:function(t,e){var O=e.tokenize(t,e),i=t.current();return i&&O&&(e.lastToken=i),O},indent:function(t,e,O){var i=0;return(e==="]"||e===")"||/^end\b/.test(e)||/^else/.test(e)||/^catch\b/.test(e)||/^elseif\b/.test(e)||/^finally/.test(e))&&(i=-1),(t.scopes.length+i)*O.unit},languageData:{indentOnInput:/^\s*(end|else|catch|finally)\b$/,commentTokens:{line:"#",block:{open:"#=",close:"=#"}},closeBrackets:{brackets:["(","[","{",'"']},autocomplete:qx.concat(Ux)}};var Uj=/({)?[a-zA-Z0-9_]+(})?/;function Wx(t,e){for(var O,i,n=!1;!t.eol()&&(O=t.next())!=e.pending;){if(O==="$"&&i!="\\"&&e.pending=='"'){n=!0;break}i=O}return n&&t.backUp(1),O==e.pending?e.continueString=!1:e.continueString=!0,"string"}function Vj(t,e){var O=t.next();return O==="$"?t.match(Uj)?"variableName.special":"variable":e.continueString?(t.backUp(1),Wx(t,e)):t.match(/(\s+)?\w+\(/)||t.match(/(\s+)?\w+\ \(/)?(t.backUp(1),"def"):O=="#"?(t.skipToEnd(),"comment"):O=="'"||O=='"'?(e.pending=O,Wx(t,e)):O=="("||O==")"?"bracket":O.match(/[0-9]/)?"number":(t.eatWhile(/[\w-]/),null)}var jx={name:"cmake",startState:function(){var t={};return t.inDefinition=!1,t.inInclude=!1,t.continueString=!1,t.pending=!1,t},token:function(t,e){return t.eatSpace()?null:Vj(t,e)}};function Ns(t){t={...jj,...t};var e=t.inline,O=t.tokenHooks,i=t.documentTypes||{},n=t.mediaTypes||{},r=t.mediaFeatures||{},a=t.mediaValueKeywords||{},o=t.propertyKeywords||{},s=t.nonStandardPropertyKeywords||{},l=t.fontProperties||{},c=t.counterDescriptors||{},h=t.colorKeywords||{},f=t.valueKeywords||{},d=t.allowNested,Q=t.lineComment,$=t.supportsAtComponent===!0,p=t.highlightNonStandardPropertyKeywords!==!1,m,P;function S(g,x){return m=x,g}function y(g,x){var b=g.next();if(O[b]){var C=O[b](g,x);if(C!==!1)return C}if(b=="@")return g.eatWhile(/[\w\\\-]/),S("def",g.current());if(b=="="||(b=="~"||b=="|")&&g.eat("="))return S(null,"compare");if(b=='"'||b=="'")return x.tokenize=k(b),x.tokenize(g,x);if(b=="#")return g.eatWhile(/[\w\\\-]/),S("atom","hash");if(b=="!")return g.match(/^\s*\w*/),S("keyword","important");if(/\d/.test(b)||b=="."&&g.eat(/\d/))return g.eatWhile(/[\w.%]/),S("number","unit");if(b==="-"){if(/[\d.]/.test(g.peek()))return g.eatWhile(/[\w.%]/),S("number","unit");if(g.match(/^-[\w\\\-]*/))return g.eatWhile(/[\w\\\-]/),g.match(/^\s*:/,!1)?S("def","variable-definition"):S("variableName","variable");if(g.match(/^\w+-/))return S("meta","meta")}else return/[,+>*\/]/.test(b)?S(null,"select-op"):b=="."&&g.match(/^-?[_a-z][_a-z0-9-]*/i)?S("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(b)?S(null,b):g.match(/^[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(g.current())&&(x.tokenize=T),S("variableName.function","variable")):/[\w\\\-]/.test(b)?(g.eatWhile(/[\w\\\-]/),S("property","word")):S(null,null)}function k(g){return function(x,b){for(var C=!1,ge;(ge=x.next())!=null;){if(ge==g&&!C){g==")"&&x.backUp(1);break}C=!C&&ge=="\\"}return(ge==g||!C&&g!=")")&&(b.tokenize=null),S("string","string")}}function T(g,x){return g.next(),g.match(/^\s*[\"\')]/,!1)?x.tokenize=null:x.tokenize=k(")"),S(null,"(")}function v(g,x,b){this.type=g,this.indent=x,this.prev=b}function j(g,x,b,C){return g.context=new v(b,x.indentation()+(C===!1?0:x.indentUnit),g.context),b}function M(g){return g.context.prev&&(g.context=g.context.prev),g.context.type}function q(g,x,b){return w[b.context.type](g,x,b)}function Z(g,x,b,C){for(var ge=C||1;ge>0;ge--)b.context=b.context.prev;return q(g,x,b)}function R(g){var x=g.current().toLowerCase();f.hasOwnProperty(x)?P="atom":h.hasOwnProperty(x)?P="keyword":P="variable"}var w={};return w.top=function(g,x,b){if(g=="{")return j(b,x,"block");if(g=="}"&&b.context.prev)return M(b);if($&&/@component/i.test(g))return j(b,x,"atComponentBlock");if(/^@(-moz-)?document$/i.test(g))return j(b,x,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(g))return j(b,x,"atBlock");if(/^@(font-face|counter-style)/i.test(g))return b.stateArg=g,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(g))return"keyframes";if(g&&g.charAt(0)=="@")return j(b,x,"at");if(g=="hash")P="builtin";else if(g=="word")P="tag";else{if(g=="variable-definition")return"maybeprop";if(g=="interpolation")return j(b,x,"interpolation");if(g==":")return"pseudo";if(d&&g=="(")return j(b,x,"parens")}return b.context.type},w.block=function(g,x,b){if(g=="word"){var C=x.current().toLowerCase();return o.hasOwnProperty(C)?(P="property","maybeprop"):s.hasOwnProperty(C)?(P=p?"string.special":"property","maybeprop"):d?(P=x.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(P="error","maybeprop")}else return g=="meta"?"block":!d&&(g=="hash"||g=="qualifier")?(P="error","block"):w.top(g,x,b)},w.maybeprop=function(g,x,b){return g==":"?j(b,x,"prop"):q(g,x,b)},w.prop=function(g,x,b){if(g==";")return M(b);if(g=="{"&&d)return j(b,x,"propBlock");if(g=="}"||g=="{")return Z(g,x,b);if(g=="(")return j(b,x,"parens");if(g=="hash"&&!/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(x.current()))P="error";else if(g=="word")R(x);else if(g=="interpolation")return j(b,x,"interpolation");return"prop"},w.propBlock=function(g,x,b){return g=="}"?M(b):g=="word"?(P="property","maybeprop"):b.context.type},w.parens=function(g,x,b){return g=="{"||g=="}"?Z(g,x,b):g==")"?M(b):g=="("?j(b,x,"parens"):g=="interpolation"?j(b,x,"interpolation"):(g=="word"&&R(x),"parens")},w.pseudo=function(g,x,b){return g=="meta"?"pseudo":g=="word"?(P="variableName.constant",b.context.type):q(g,x,b)},w.documentTypes=function(g,x,b){return g=="word"&&i.hasOwnProperty(x.current())?(P="tag",b.context.type):w.atBlock(g,x,b)},w.atBlock=function(g,x,b){if(g=="(")return j(b,x,"atBlock_parens");if(g=="}"||g==";")return Z(g,x,b);if(g=="{")return M(b)&&j(b,x,d?"block":"top");if(g=="interpolation")return j(b,x,"interpolation");if(g=="word"){var C=x.current().toLowerCase();C=="only"||C=="not"||C=="and"||C=="or"?P="keyword":n.hasOwnProperty(C)?P="attribute":r.hasOwnProperty(C)?P="property":a.hasOwnProperty(C)?P="keyword":o.hasOwnProperty(C)?P="property":s.hasOwnProperty(C)?P=p?"string.special":"property":f.hasOwnProperty(C)?P="atom":h.hasOwnProperty(C)?P="keyword":P="error"}return b.context.type},w.atComponentBlock=function(g,x,b){return g=="}"?Z(g,x,b):g=="{"?M(b)&&j(b,x,d?"block":"top",!1):(g=="word"&&(P="error"),b.context.type)},w.atBlock_parens=function(g,x,b){return g==")"?M(b):g=="{"||g=="}"?Z(g,x,b,2):w.atBlock(g,x,b)},w.restricted_atBlock_before=function(g,x,b){return g=="{"?j(b,x,"restricted_atBlock"):g=="word"&&b.stateArg=="@counter-style"?(P="variable","restricted_atBlock_before"):q(g,x,b)},w.restricted_atBlock=function(g,x,b){return g=="}"?(b.stateArg=null,M(b)):g=="word"?(b.stateArg=="@font-face"&&!l.hasOwnProperty(x.current().toLowerCase())||b.stateArg=="@counter-style"&&!c.hasOwnProperty(x.current().toLowerCase())?P="error":P="property","maybeprop"):"restricted_atBlock"},w.keyframes=function(g,x,b){return g=="word"?(P="variable","keyframes"):g=="{"?j(b,x,"top"):q(g,x,b)},w.at=function(g,x,b){return g==";"?M(b):g=="{"||g=="}"?Z(g,x,b):(g=="word"?P="tag":g=="hash"&&(P="builtin"),"at")},w.interpolation=function(g,x,b){return g=="}"?M(b):g=="{"||g==";"?Z(g,x,b):(g=="word"?P="variable":g!="variable"&&g!="("&&g!=")"&&(P="error"),"interpolation")},{name:t.name,startState:function(){return{tokenize:null,state:e?"block":"top",stateArg:null,context:new v(e?"block":"top",0,null)}},token:function(g,x){if(!x.tokenize&&g.eatSpace())return null;var b=(x.tokenize||y)(g,x);return b&&typeof b=="object"&&(m=b[1],b=b[0]),P=b,m!="comment"&&(x.state=w[x.state](m,g,x)),P},indent:function(g,x,b){var C=g.context,ge=x&&x.charAt(0),ye=C.indent;return C.type=="prop"&&(ge=="}"||ge==")")&&(C=C.prev),C.prev&&(ge=="}"&&(C.type=="block"||C.type=="top"||C.type=="interpolation"||C.type=="restricted_atBlock")?(C=C.prev,ye=C.indent):(ge==")"&&(C.type=="parens"||C.type=="atBlock_parens")||ge=="{"&&(C.type=="at"||C.type=="atBlock"))&&(ye=Math.max(0,C.indent-b.unit))),ye},languageData:{indentOnInput:/^\s*\}$/,commentTokens:{line:Q,block:{open:"/*",close:"*/"}},autocomplete:Nx}}}function Kt(t){for(var e={},O=0;O","<","==",">=","<=","\\+","-","\\!=","/","\\*","%","and","or","not",";","\\{","\\}",":"],Fx=Aj(Ij),Mj=/^::?[a-zA-Z_][\w\-]*/,kO;function Jt(t){return!t.peek()||t.match(/\s+$/,!1)}function Hx(t,e){let O=t.peek();return O===")"?(t.next(),e.tokenizer=KO,"operator"):O==="("?(t.next(),t.eatSpace(),"operator"):O==="'"||O==='"'?(e.tokenizer=Ad(t.next()),"string"):(e.tokenizer=Ad(")",!1),"string")}function Kx(t,e){return function(O,i){return O.sol()&&O.indentation()<=t?(i.tokenizer=KO,KO(O,i)):(e&&O.skipTo("*/")?(O.next(),O.next(),i.tokenizer=KO):O.skipToEnd(),"comment")}}function Ad(t,e){e==null&&(e=!0);function O(i,n){let r=i.next(),a=i.peek(),o=i.string.charAt(i.pos-2);return r!=="\\"&&a===t||r===t&&o!=="\\"?(r!==t&&e&&i.next(),Jt(i)&&(n.cursorHalf=0),n.tokenizer=KO,"string"):r==="#"&&a==="{"?(n.tokenizer=Jx(O),i.next(),"operator"):"string"}return O}function Jx(t){return function(e,O){return e.peek()==="}"?(e.next(),O.tokenizer=t,"operator"):KO(e,O)}}function HO(t,e){if(t.indentCount==0){t.indentCount++;let i=t.scopes[0].offset+e.indentUnit;t.scopes.unshift({offset:i})}}function ek(t){t.scopes.length!=1&&t.scopes.shift()}function KO(t,e){let O=t.peek();if(t.match("/*"))return e.tokenizer=Kx(t.indentation(),!0),e.tokenizer(t,e);if(t.match("//"))return e.tokenizer=Kx(t.indentation(),!1),e.tokenizer(t,e);if(t.match("#{"))return e.tokenizer=Jx(KO),"operator";if(O==='"'||O==="'")return t.next(),e.tokenizer=Ad(O),"string";if(e.cursorHalf){if(O==="#"&&(t.next(),t.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/))||t.match(/^-?[0-9\.]+/))return Jt(t)&&(e.cursorHalf=0),"number";if(t.match(/^(px|em|in)\b/))return Jt(t)&&(e.cursorHalf=0),"unit";if(t.match(Bx))return Jt(t)&&(e.cursorHalf=0),"keyword";if(t.match(/^url/)&&t.peek()==="(")return e.tokenizer=Hx,Jt(t)&&(e.cursorHalf=0),"atom";if(O==="$")return t.next(),t.eatWhile(/[\w-]/),Jt(t)&&(e.cursorHalf=0),"variable-2";if(O==="!")return t.next(),e.cursorHalf=0,t.match(/^[\w]+/)?"keyword":"operator";if(t.match(Fx))return Jt(t)&&(e.cursorHalf=0),"operator";if(t.eatWhile(/[\w-]/))return Jt(t)&&(e.cursorHalf=0),kO=t.current().toLowerCase(),Cj.has(kO)?"atom":Gj.has(kO)?"keyword":Ed.has(kO)?(e.prevProp=t.current().toLowerCase(),"property"):"tag";if(Jt(t))return e.cursorHalf=0,null}else{if(O==="-"&&t.match(/^-\w+-/))return"meta";if(O==="."){if(t.next(),t.match(/^[\w-]+/))return HO(e,t),"qualifier";if(t.peek()==="#")return HO(e,t),"tag"}if(O==="#"){if(t.next(),t.match(/^[\w-]+/))return HO(e,t),"builtin";if(t.peek()==="#")return HO(e,t),"tag"}if(O==="$")return t.next(),t.eatWhile(/[\w-]/),"variable-2";if(t.match(/^-?[0-9\.]+/))return"number";if(t.match(/^(px|em|in)\b/))return"unit";if(t.match(Bx))return"keyword";if(t.match(/^url/)&&t.peek()==="(")return e.tokenizer=Hx,"atom";if(O==="="&&t.match(/^=[\w-]+/))return HO(e,t),"meta";if(O==="+"&&t.match(/^\+[\w-]+/))return"meta";if(O==="@"&&t.match("@extend")&&(t.match(/\s*[\w]/)||ek(e)),t.match(/^@(else if|if|media|else|for|each|while|mixin|function)/))return HO(e,t),"def";if(O==="@")return t.next(),t.eatWhile(/[\w-]/),"def";if(t.eatWhile(/[\w-]/))if(t.match(/ *: *[\w-\+\$#!\("']/,!1)){kO=t.current().toLowerCase();let i=e.prevProp+"-"+kO;return Ed.has(i)?"property":Ed.has(kO)?(e.prevProp=kO,"property"):Ej.has(kO)?"property":"tag"}else return t.match(/ *:/,!1)?(HO(e,t),e.cursorHalf=1,e.prevProp=t.current().toLowerCase(),"property"):(t.match(/ *,/,!1)||HO(e,t),"tag");if(O===":")return t.match(Mj)?"type":(t.next(),e.cursorHalf=1,"operator")}return t.match(Fx)?"operator":(t.next(),null)}function Dj(t,e){t.sol()&&(e.indentCount=0);let O=e.tokenizer(t,e),i=t.current();if((i==="@return"||i==="}")&&ek(e),O!==null){let r=t.pos-i.length+t.indentUnit*e.indentCount,a=[];for(let o=0;o SENSITIVE_DIRS.has(part))) return true; + const name = parts[parts.length - 1] ?? ''; + return SENSITIVE_NAME.test(name) && !TEMPLATE_NAME.test(name); +} + +/** @param {string} path */ +function assertAgentAccessible(path) { + if (isSensitivePath(path)) { + throw new EditorError('SENSITIVE_FILE', `出于安全考虑,Agent 工具不能读写凭据类文件:${basename(path)}。如需修改,请让用户在编辑器中自行处理。`, 403); + } +} + +export const DEFAULT_SETTINGS = Object.freeze({ + theme: 'system', + codeFont: 'system', + fontFamily: '', + fontSize: 14, + lineHeight: 1.6, + tabSize: 4, + insertSpaces: true, + wordWrap: false, + minimap: true, + indentGuides: true, + showWhitespace: false, + lineNumbers: true, + sidebarVisible: true, + sidebarWidth: 248, + highlightsVisible: true, + // Off: an Agent highlight disappears once its code is edited or its file is closed. + // On: it stays (also across restarts) until the user or the Agent clears it. + highlightsPersist: false, +}); + +const isBool = (v) => typeof v === 'boolean'; +/** @type {Record boolean>} */ +const SETTING_RULES = { + theme: (v) => v === 'system' || v === 'dark' || v === 'light', + codeFont: (v) => v === 'system' || v === 'menlo' || v === 'jetbrains-mono' || v === 'custom', + fontFamily: (v) => typeof v === 'string' && v.length <= 200 && !/[;{}<>\\]/.test(v), + fontSize: (v) => Number.isInteger(v) && Number(v) >= 8 && Number(v) <= 40, + lineHeight: (v) => typeof v === 'number' && v >= 1 && v <= 2.5, + tabSize: (v) => Number.isInteger(v) && Number(v) >= 1 && Number(v) <= 8, + insertSpaces: isBool, + wordWrap: isBool, + minimap: isBool, + indentGuides: isBool, + showWhitespace: isBool, + lineNumbers: isBool, + sidebarVisible: isBool, + sidebarWidth: (v) => Number.isInteger(v) && Number(v) >= 160 && Number(v) <= 640, + highlightsVisible: isBool, + highlightsPersist: isBool, +}; + +export class EditorError extends Error { + /** + * @param {string} code + * @param {string} message + * @param {number} [status] + * @param {Record} [extra] + */ + constructor(code, message, status = 400, extra) { + super(message); + this.code = code; + this.status = status; + this.extra = extra; + } +} + +/** @param {any} error */ +export function mapFsError(error) { + if (error instanceof EditorError) return error; + switch (error?.code) { + case 'ENOENT': + return new EditorError('NOT_FOUND', '文件或文件夹不存在', 404); + case 'EACCES': + case 'EPERM': + return new EditorError('PERMISSION', '没有访问权限', 403); + case 'ENOTDIR': + return new EditorError('NOT_DIRECTORY', '路径不是文件夹', 400); + case 'EISDIR': + return new EditorError('IS_DIRECTORY', '这是一个文件夹', 400); + case 'EEXIST': + return new EditorError('EXISTS', '已存在同名文件', 409); + default: + return error; + } +} + +const sha1 = (/** @type {string} */ s) => createHash('sha1').update(s).digest('hex'); +const toText = (/** @type {string} */ s) => Text.of(s.split(/\r\n|\r|\n/)); +const normalizeNewlines = (/** @type {string} */ s) => s.replace(/\r\n?/g, '\n'); +const diskOf = (/** @type {import('node:fs').Stats} */ st) => ({ mtimeMs: st.mtimeMs, size: st.size }); +/** @param {{mtimeMs:number,size:number}|null|undefined} a @param {{mtimeMs:number,size:number}|null|undefined} b */ +const sameDisk = (a, b) => !!a && !!b && a.mtimeMs === b.mtimeMs && a.size === b.size; + +/** @param {Buffer} buf */ +function decodeFile(buf) { + if (buf.subarray(0, 8192).includes(0)) { + throw new EditorError('BINARY', '这是二进制文件,编辑器只能打开文本文件', 415); + } + const bom = buf.length >= 3 && buf[0] === 0xef && buf[1] === 0xbb && buf[2] === 0xbf; + let text; + try { + text = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bom ? buf.subarray(3) : buf); + } catch { + throw new EditorError('ENCODING', '文件不是 UTF-8 编码,暂不支持打开', 415); + } + return { text, bom, eol: text.includes('\r\n') ? '\r\n' : '\n' }; +} + +/** Minimal single-range diff, so remote edits keep the user's cursor and undo history stable. */ +function diffChange(/** @type {string} */ a, /** @type {string} */ b) { + const max = Math.min(a.length, b.length); + let start = 0; + while (start < max && a.charCodeAt(start) === b.charCodeAt(start)) start++; + let endA = a.length; + let endB = b.length; + while (endA > start && endB > start && a.charCodeAt(endA - 1) === b.charCodeAt(endB - 1)) { + endA--; + endB--; + } + if (start === endA && start === endB) return null; + return { from: start, to: endA, insert: b.slice(start, endB) }; +} + +/** @param {string} name */ +function splitName(name) { + if (typeof name !== 'string' || !name.trim() || name.length > 1024) { + throw new EditorError('INVALID_NAME', '请输入文件名'); + } + const segments = name.trim().split('/').filter((s) => s !== ''); + if (!segments.length) throw new EditorError('INVALID_NAME', '请输入文件名'); + for (const s of segments) { + if (s === '.' || s === '..' || s.length > 255 || /[\0\\]/.test(s)) { + throw new EditorError('INVALID_NAME', `文件名无效:${s}`); + } + } + return segments; +} + +async function exists(/** @type {string} */ p) { + return stat(p).then(() => true, () => false); +} + +/** + * Save a user file without ever leaving it half-written: write a temp file beside the real target + * (symlinks are followed, so a link stays a link), give it the original permission bits, then rename it + * over the target. Hard links to the old file keep the old content. If the directory itself is not + * writable, fall back to writing the file in place so such files stay editable. + * @param {string} path @param {Buffer} data @param {import('node:fs').Stats|null} st @param {number} seq + */ +async function writeAtomic(path, data, st, seq) { + const target = st ? await realpath(path) : path; + const mode = st ? st.mode & 0o7777 : 0o666; + const tmp = join(dirname(target), `.${basename(target)}.${process.pid}.${seq}.tmp`); + try { + await writeFile(tmp, data, { flag: 'wx', mode }); + } catch (error) { + const code = /** @type {any} */ (error)?.code; + if (st && (code === 'EACCES' || code === 'EPERM' || code === 'EROFS')) { + await writeFile(target, data); + return; + } + throw error; + } + try { + if (st) await chmod(tmp, mode); // writeFile's mode is filtered by the umask + await rename(tmp, target); + } catch (error) { + await rm(tmp, { force: true }).catch(() => undefined); + throw error; + } +} + +async function uniquePath(/** @type {string} */ target) { + if (!(await exists(target))) return target; + const dir = dirname(target); + const name = basename(target); + const dot = name.lastIndexOf('.'); + const stem = dot > 0 ? name.slice(0, dot) : name; + const ext = dot > 0 ? name.slice(dot) : ''; + for (let n = 1; n < 1000; n++) { + const candidate = join(dir, `${stem} (${n})${ext}`); + if (!(await exists(candidate))) return candidate; + } + throw new EditorError('EXISTS', '同名文件过多', 409); +} + +/** + * @typedef {{mtimeMs:number,size:number}} DiskMeta + * @typedef {{ + * path: string, text: any, savedText: any, eol: string, bom: boolean, + * disk: DiskMeta|null, conflictDisk: DiskMeta|null, diskChanged: boolean, deleted: boolean, + * version: number, base: number, log: {clientID:string, changes:unknown}[], + * hotTimer: NodeJS.Timeout|null, saving: Promise|null, + * }} Doc + * Review highlight placed by the Agent. from/to are offsets into the loaded document; while the file is + * closed (kept highlights only) text/startLine/endLine identify the code so it can be re-anchored. + * @typedef {{ + * id: string, from: number, to: number, lines: boolean, kind: string, note: string, at: number, + * text?: string, startLine?: number, endLine?: number, + * }} Highlight + */ + +export class EditorService { + /** + * @param {{ dataDir: string, pluginId: string, logger: import('./miniapp-api.js').MiniAppLogger, signal: AbortSignal }} options + */ + constructor({ dataDir, pluginId, logger, signal }) { + this.logger = logger; + this.signal = signal; + this.statePath = join(dataDir, 'state.json'); + this.highlightsPath = join(dataDir, 'highlights.json'); + this.hotDir = join(dataDir, 'hot'); + this.draftsDir = join(dataDir, 'drafts'); + // Written by hooks/record-workspace.* into the Plugin Hook data directory, which the Host keeps + // next to this Mini App's data directory (plugin-data/hooks/ beside plugin-data/liveboards/). + this.followFile = join(dirname(dirname(dataDir)), 'hooks', pluginId, 'active-workspace'); + /** Folders added automatically because a conversation used them; dropped again when unused. */ + /** @type {Set} */ this.autoFolders = new Set(); + this.followedAt = 0; + this.pageOpenedAt = 0; + this.following = false; + /** @type {string[]} */ this.folders = []; + /** @type {string[]} */ this.tabs = []; + /** @type {string|null} */ this.active = null; + this.settings = { ...DEFAULT_SETTINGS }; + /** @type {Map} */ this.docs = new Map(); + /** @type {Map>} */ this.loading = new Map(); + /** @type {Set} */ this.hotPaths = new Set(); + /** @type {Map} */ this.highlights = new Map(); + this.highlightSeq = 0; + /** @type {NodeJS.Timeout|null} */ this.highlightTimer = null; + /** @type {Set<(event: any) => void>} */ this.listeners = new Set(); + /** @type {Map} */ this.indexCache = new Map(); + /** @type {any} */ this.view = null; + this.pageCount = 0; + this.persistChain = Promise.resolve(); + this.stateQueued = false; + this.polling = false; + this.tmpCounter = 0; + } + + async init() { + await mkdir(this.hotDir, { recursive: true }); + await mkdir(this.draftsDir, { recursive: true }); + /** @type {any} */ + let saved = null; + try { + saved = JSON.parse(await readFile(this.statePath, 'utf8')); + } catch { + saved = null; + } + if (saved && Array.isArray(saved.folders)) { + this.folders = [...new Set(saved.folders.filter((p) => typeof p === 'string' && isAbsolute(p)).map((p) => resolve(p)))]; + } else { + this.folders = [this.draftsDir]; + } + if (saved && Array.isArray(saved.autoFolders)) { + this.autoFolders = new Set(saved.autoFolders.filter((p) => typeof p === 'string' && this.folders.includes(p))); + } + if (saved && Number.isFinite(saved.followedAt)) this.followedAt = saved.followedAt; + if (saved && Array.isArray(saved.tabs)) { + this.tabs = saved.tabs.filter((p) => typeof p === 'string' && isAbsolute(p) && this.inFolders(p)); + } + this.active = saved && typeof saved.active === 'string' && this.tabs.includes(saved.active) ? saved.active : (this.tabs[0] ?? null); + if (saved && saved.settings && typeof saved.settings === 'object') { + for (const [key, value] of Object.entries(saved.settings)) { + if (SETTING_RULES[key]?.(value)) /** @type {any} */ (this.settings)[key] = value; + } + // 1.0.0 stored only a free-form font name; keep it as a custom choice. + if (saved.settings.codeFont === undefined && this.settings.fontFamily) this.settings.codeFont = 'custom'; + } + for (const name of await readdir(this.hotDir)) { + if (!name.endsWith('.json')) continue; + try { + const hot = JSON.parse(await readFile(join(this.hotDir, name), 'utf8')); + if (typeof hot.path === 'string' && this.tabs.includes(hot.path)) this.hotPaths.add(hot.path); + else await rm(join(this.hotDir, name), { force: true }); + } catch { + await rm(join(this.hotDir, name), { force: true }); + } + } + if (this.settings.highlightsPersist) await this.loadHighlights(); + } + + // ---- events ------------------------------------------------------------------------------- + + /** @param {(event: any) => void} listener */ + subscribe(listener) { + this.listeners.add(listener); + return () => this.listeners.delete(listener); + } + + /** @param {any} event */ + emit(event) { + for (const listener of this.listeners) { + try { + listener(event); + } catch { + // A broken page connection must not block other listeners. + } + } + } + + emitState() { + if (this.stateQueued) return; + this.stateQueued = true; + queueMicrotask(() => { + this.stateQueued = false; + this.emit({ type: 'state', state: this.snapshot() }); + }); + } + + /** @param {Doc} doc */ + emitStatus(doc) { + this.emit({ type: 'doc.status', path: doc.path, ...this.status(doc.path) }); + } + + /** @param {'info'|'warn'|'error'} level @param {string} message */ + notice(level, message) { + this.emit({ type: 'notice', level, message }); + } + + persist() { + const data = JSON.stringify({ + folders: this.folders, autoFolders: [...this.autoFolders], followedAt: this.followedAt, + tabs: this.tabs, active: this.active, settings: this.settings, + }); + this.persistChain = this.persistChain + .then(async () => { + const tmp = `${this.statePath}.${process.pid}.${++this.tmpCounter}.tmp`; + await writeFile(tmp, data); + await rename(tmp, this.statePath); + }) + .catch((error) => this.logger.warn('editor.state.persist_failed', { code: String(error?.code ?? 'unknown') })); + return this.persistChain; + } + + snapshot() { + return { + folders: this.folders.map((p) => ({ + path: p, name: p === this.draftsDir ? '草稿' : basename(p) || p, drafts: p === this.draftsDir, auto: this.autoFolders.has(p), + })), + tabs: this.tabs.map((p) => ({ path: p, name: basename(p), ...this.status(p) })), + active: this.active, + settings: this.settings, + highlights: this.highlightTotal(), + }; + } + + /** @param {string} path */ + status(path) { + const doc = this.docs.get(path); + if (doc) return { dirty: this.isDirty(doc), diskChanged: doc.diskChanged, deleted: doc.deleted }; + return { dirty: this.hotPaths.has(path), diskChanged: false, deleted: false }; + } + + /** @param {Doc} doc */ + isDirty(doc) { + return doc.deleted || !doc.text.eq(doc.savedText); + } + + // ---- paths and folders --------------------------------------------------------------------- + + /** @param {string} p */ + inFolders(p) { + return this.folders.some((f) => p === f || p.startsWith(f.endsWith(sep) ? f : f + sep)); + } + + /** @param {string} p */ + folderOf(p) { + let best = null; + for (const f of this.folders) { + if ((p === f || p.startsWith(f + sep)) && (!best || f.length > best.length)) best = f; + } + return best; + } + + /** @param {unknown} input */ + expand(input) { + if (typeof input !== 'string' || !input.trim() || input.includes('\0') || input.length > 4096) { + throw new EditorError('INVALID_PATH', '路径无效'); + } + let p = input.trim(); + if (p === '~' || p.startsWith('~/')) p = join(homedir(), p.slice(1)); + return p; + } + + /** + * Resolve a path and require it to be inside one of the sidebar folders. + * @param {unknown} input + * @param {{ relativeToPrimary?: boolean }} [options] + */ + resolvePath(input, { relativeToPrimary = false } = {}) { + let p = this.expand(input); + if (!isAbsolute(p)) { + if (!relativeToPrimary || !this.folders.length) throw new EditorError('INVALID_PATH', '需要绝对路径'); + p = resolve(this.folders[0], p); + } + p = resolve(p); + if (!this.inFolders(p)) { + throw new EditorError('OUTSIDE_FOLDERS', `路径不在编辑器侧边栏的文件夹内:${p}`, 403, { folders: this.folders }); + } + return p; + } + + /** @param {unknown} input @param {{ top?: boolean }} [options] */ + async addFolder(input, { top = false } = {}) { + const raw = this.expand(input); + if (!isAbsolute(raw)) throw new EditorError('INVALID_PATH', '请填写绝对路径,例如 /Users/you/project'); + const p = resolve(raw); + if (p === dirname(p)) throw new EditorError('INVALID_PATH', '不能添加文件系统根目录'); + const st = await stat(p).catch(() => null); + if (!st) throw new EditorError('NOT_FOUND', `文件夹不存在:${p}`, 404); + if (!st.isDirectory()) throw new EditorError('NOT_DIRECTORY', `不是文件夹:${p}`); + const index = this.folders.indexOf(p); + let changed = false; + if (index === -1) { + if (top) this.folders.unshift(p); + else this.folders.push(p); + changed = true; + } else if (top && index > 0) { + this.folders.splice(index, 1); + this.folders.unshift(p); + changed = true; + } + // A folder the user or Agent adds explicitly is pinned: it is no longer removed automatically. + if (this.autoFolders.delete(p)) changed = true; + if (changed) { + this.indexCache.delete(p); + await this.persist(); + this.emitState(); + } + return { path: p, added: index === -1 }; + } + + /** @param {unknown} input */ + async removeFolder(input) { + const p = resolve(this.expand(input)); + if (!this.folders.includes(p)) throw new EditorError('NOT_FOUND', '该文件夹不在侧边栏中', 404); + const remaining = this.folders.filter((f) => f !== p); + const covered = (/** @type {string} */ q) => remaining.some((f) => q === f || q.startsWith(f + sep)); + const affected = this.tabs.filter((t) => (t === p || t.startsWith(p + sep)) && !covered(t)); + const dirty = affected.filter((t) => this.status(t).dirty); + if (dirty.length) { + throw new EditorError('HAS_UNSAVED', `该文件夹中还有 ${dirty.length} 个未保存的文件,请先保存或关闭`, 409); + } + for (const t of affected) this.dropDoc(t); + this.tabs = this.tabs.filter((t) => !affected.includes(t)); + if (this.active && affected.includes(this.active)) this.active = this.tabs[0] ?? null; + this.folders = remaining; + this.autoFolders.delete(p); + this.indexCache.delete(p); + await this.persist(); + this.emitState(); + } + + /** + * Put the workspace of the most recently active conversation first in the sidebar. + * Each recorded workspace is applied once; earlier automatic folders without open tabs are dropped. + */ + async followWorkspace() { + if (this.following) return; + this.following = true; + try { + const st = await stat(this.followFile).catch(() => null); + if (!st || st.mtimeMs <= this.followedAt) return; + const raw = (await readFile(this.followFile, 'utf8').catch(() => '')).trim(); + this.followedAt = st.mtimeMs; + const ws = isAbsolute(raw) ? resolve(raw) : null; + const dir = ws ? await stat(ws).catch(() => null) : null; + // Skip conversations without a real project directory (filesystem root or the home folder). + if (!ws || !dir?.isDirectory() || ws === dirname(ws) || ws === homedir()) { + await this.persist(); + return; + } + const moved = this.folders[0] !== ws; + if (moved) { + const index = this.folders.indexOf(ws); + if (index === -1) this.autoFolders.add(ws); + else this.folders.splice(index, 1); + this.folders.unshift(ws); + } + for (const f of [...this.autoFolders]) { + if (f === ws || this.tabs.some((t) => t === f || t.startsWith(f + sep))) continue; + this.folders = this.folders.filter((x) => x !== f); + this.autoFolders.delete(f); + this.indexCache.delete(f); + } + await this.persist(); + this.emitState(); + if (moved) this.emit({ type: 'workspace.follow', path: ws }); + } finally { + this.following = false; + } + } + + /** @param {unknown} input */ + async listDir(input) { + const path = this.resolvePath(input); + const dirents = await readdir(path, { withFileTypes: true }).catch((e) => { + throw mapFsError(e); + }); + const entries = []; + for (const d of dirents) { + if (HIDDEN_NAMES.has(d.name)) continue; + let kind = d.isDirectory() ? 'dir' : d.isFile() ? 'file' : null; + const link = d.isSymbolicLink(); + if (link) { + const target = await stat(join(path, d.name)).catch(() => null); + kind = target ? (target.isDirectory() ? 'dir' : 'file') : 'broken'; + } + if (kind) entries.push({ name: d.name, kind, link }); + } + const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }); + entries.sort((a, b) => (a.kind === 'dir') !== (b.kind === 'dir') ? (a.kind === 'dir' ? -1 : 1) : collator.compare(a.name, b.name)); + return { path, entries: entries.slice(0, MAX_LIST_ENTRIES), truncated: entries.length > MAX_LIST_ENTRIES }; + } + + /** File list for quick open; uses git when available so ignored files stay out. @param {unknown} input */ + async fileIndex(input) { + const root = this.resolvePath(input); + if (!this.folders.includes(root)) throw new EditorError('INVALID_PATH', '只能索引侧边栏中的文件夹'); + const cached = this.indexCache.get(root); + if (cached && Date.now() - cached.at < 30_000) return cached.result; + let files = await this.gitFiles(root); + if (!files) files = await this.walkFiles(root); + const result = { root, files: files.slice(0, MAX_INDEX_FILES), truncated: files.length > MAX_INDEX_FILES }; + this.indexCache.set(root, { at: Date.now(), result }); + return result; + } + + /** @param {string} root @returns {Promise} */ + gitFiles(root) { + return new Promise((resolvePromise) => { + execFile( + 'git', + ['-C', root, 'ls-files', '-co', '--exclude-standard', '-z'], + { timeout: 5000, maxBuffer: 64 * 1024 * 1024, signal: this.signal, encoding: 'utf8' }, + (error, stdout) => { + if (error) return resolvePromise(null); + resolvePromise(stdout.split('\0').filter((f) => f && !f.endsWith('/'))); + }, + ); + }); + } + + /** @param {string} root */ + async walkFiles(root) { + const deadline = Date.now() + 3000; + /** @type {string[]} */ + const files = []; + const stack = ['']; + while (stack.length && files.length <= MAX_INDEX_FILES && Date.now() < deadline) { + const rel = /** @type {string} */ (stack.pop()); + const dirents = await readdir(join(root, rel), { withFileTypes: true }).catch(() => []); + for (const d of dirents) { + const child = rel ? `${rel}/${d.name}` : d.name; + if (d.isDirectory()) { + if (!INDEX_SKIP_DIRS.has(d.name)) stack.push(child); + } else if (d.isFile() || d.isSymbolicLink()) { + if (!HIDDEN_NAMES.has(d.name)) files.push(child); + } + } + } + return files; + } + + // ---- documents ----------------------------------------------------------------------------- + + /** @param {string} path @param {Partial} fields @returns {Doc} */ + newDoc(path, fields) { + return /** @type {Doc} */ ({ + path, eol: '\n', bom: false, disk: null, conflictDisk: null, diskChanged: false, deleted: false, + version: 0, base: 0, log: [], hotTimer: null, saving: null, ...fields, + }); + } + + /** @param {unknown} input @param {{ tab?: boolean, focus?: boolean }} [options] */ + async openDoc(input, { tab = true, focus = false } = {}) { + const path = this.resolvePath(input); + let doc = this.docs.get(path); + if (!doc) { + let pending = this.loading.get(path); + if (!pending) { + pending = this.loadDoc(path); + this.loading.set(path, pending); + pending.finally(() => this.loading.delete(path)).catch(() => undefined); + } + doc = await pending; + } + if (tab) await this.addTab(path, focus); + return doc; + } + + /** @param {string} path @returns {Promise} */ + async loadDoc(path) { + const st = await stat(path).catch(() => null); + const hot = this.hotPaths.has(path) ? await this.readHot(path) : null; + /** @type {Doc} */ + let doc; + if (!st) { + if (!hot) throw new EditorError('NOT_FOUND', `文件不存在:${basename(path)}`, 404); + doc = this.newDoc(path, { text: toText(hot.text), savedText: Text.empty, eol: hot.eol === '\r\n' ? '\r\n' : '\n', bom: !!hot.bom, deleted: true }); + } else { + if (st.isDirectory()) throw new EditorError('IS_DIRECTORY', '这是一个文件夹'); + if (st.size > MAX_FILE_BYTES) throw new EditorError('TOO_LARGE', '文件超过 32 MB,无法打开', 413); + const decoded = decodeFile(await readFile(path).catch((e) => { throw mapFsError(e); })); + const savedText = toText(decoded.text); + let text = savedText; + let diskChanged = false; + if (hot) { + const hotText = toText(hot.text); + if (!hotText.eq(savedText)) { + text = hotText; + diskChanged = !sameDisk(hot.disk, diskOf(st)); + } + } + doc = this.newDoc(path, { text, savedText, eol: decoded.eol, bom: decoded.bom, disk: diskOf(st), diskChanged }); + } + if (!this.isDirty(doc)) await this.removeHot(path); + this.docs.set(path, doc); + this.attachHighlights(doc); + return doc; + } + + /** @param {Doc} doc */ + docPayload(doc) { + return { + path: doc.path, + text: doc.text.toString(), + version: doc.version, + eol: doc.eol === '\r\n' ? 'CRLF' : 'LF', + bom: doc.bom, + highlights: this.highlightItems(doc.path), + ...this.status(doc.path), + }; + } + + /** @param {unknown} input @param {unknown} version @param {unknown} updates */ + pushUpdates(input, version, updates) { + const path = this.resolvePath(input); + const doc = this.docs.get(path); + if (!doc) throw new EditorError('NOT_OPEN', '文档未打开', 409); + if (!Number.isInteger(version)) throw new EditorError('INVALID_UPDATE', '缺少版本号'); + if (!Array.isArray(updates) || updates.length === 0 || updates.length > 2000) throw new EditorError('INVALID_UPDATE', '编辑数据无效'); + if (version !== doc.version) return { ok: false, version: doc.version }; + let text = doc.text; + const applied = []; + for (const update of updates) { + if (!update || typeof update.clientID !== 'string' || update.clientID.length > 100) { + throw new EditorError('INVALID_UPDATE', '编辑数据无效'); + } + let changes; + try { + changes = ChangeSet.fromJSON(update.changes); + } catch { + throw new EditorError('INVALID_UPDATE', '编辑数据无效'); + } + if (changes.length !== text.length) throw new EditorError('DESYNC', '文档状态不同步,请重新加载', 409); + text = changes.apply(text); + applied.push({ clientID: update.clientID, changes }); + } + this.commit(doc, text, applied); + return { ok: true, version: doc.version }; + } + + /** @param {Doc} doc @param {any} text @param {{clientID:string, changes:any}[]} applied */ + commit(doc, text, applied) { + const start = doc.version; + doc.text = text; + const wire = applied.map((u) => ({ clientID: u.clientID, changes: u.changes.toJSON() })); + doc.log.push(...wire); + doc.version += applied.length; + if (doc.log.length > MAX_UPDATE_LOG) { + const drop = doc.log.length - MAX_UPDATE_LOG; + doc.log.splice(0, drop); + doc.base += drop; + } + this.scheduleHot(doc); + this.emit({ type: 'doc.updates', path: doc.path, version: start, updates: wire, ...this.status(doc.path) }); + this.mapHighlights(doc, applied); + } + + /** @param {unknown} input @param {unknown} version */ + pullUpdates(input, version) { + const path = this.resolvePath(input); + const doc = this.docs.get(path); + if (!doc || !Number.isInteger(version) || Number(version) < doc.base || Number(version) > doc.version) return { reset: true }; + return { version, updates: doc.log.slice(Number(version) - doc.base) }; + } + + /** Apply a whole-content replacement as one collab update. @param {Doc} doc @param {string} content @param {string} clientID */ + applyServerString(doc, content, clientID) { + const change = diffChange(doc.text.toString(), normalizeNewlines(content)); + if (!change) return false; + const changes = ChangeSet.of(change, doc.text.length); + this.commit(doc, changes.apply(doc.text), [{ clientID, changes }]); + return true; + } + + /** @param {unknown} input @param {{ overwrite?: boolean }} [options] */ + async saveDoc(input, { overwrite = false } = {}) { + const path = this.resolvePath(input); + let doc = this.docs.get(path); + if (!doc) { + if (!this.hotPaths.has(path)) return { saved: false, reason: 'not_modified' }; + doc = await this.openDoc(path, { tab: true }); + } + while (doc.saving) await doc.saving.catch(() => undefined); + const run = this.writeDoc(doc, overwrite); + doc.saving = run; + try { + return await run; + } finally { + if (doc.saving === run) doc.saving = null; + } + } + + /** @param {Doc} doc @param {boolean} overwrite */ + async writeDoc(doc, overwrite) { + const st = await stat(doc.path).catch(() => null); + if (st?.isDirectory()) throw new EditorError('IS_DIRECTORY', '目标路径是一个文件夹'); + if (!overwrite && st && !sameDisk(diskOf(st), doc.disk)) { + let same = false; + try { + same = toText(decodeFile(await readFile(doc.path)).text).eq(doc.savedText); + } catch { + same = false; + } + if (!same) { + if (!doc.diskChanged) { + doc.diskChanged = true; + doc.conflictDisk = diskOf(st); + this.emitStatus(doc); + } + throw new EditorError('CONFLICT', '文件已在磁盘上被其他程序修改,保存会覆盖这些修改', 409); + } + } + if (!st) await mkdir(dirname(doc.path), { recursive: true }); + const snapshot = doc.text; + const body = Buffer.from(snapshot.sliceString(0, snapshot.length, doc.eol), 'utf8'); + const data = doc.bom ? Buffer.concat([BOM, body]) : body; + await writeAtomic(doc.path, data, st, ++this.tmpCounter).catch((e) => { + throw mapFsError(e); + }); + const written = await stat(doc.path); + doc.savedText = snapshot; + doc.disk = diskOf(written); + doc.conflictDisk = null; + doc.diskChanged = false; + doc.deleted = false; + if (this.isDirty(doc)) { + this.scheduleHot(doc); + } else { + if (doc.hotTimer) clearTimeout(doc.hotTimer); + doc.hotTimer = null; + await this.removeHot(doc.path); + } + if (!st) { + this.indexCache.clear(); + this.emit({ type: 'fs.changed', dir: dirname(doc.path) }); + } + this.emitStatus(doc); + return { saved: true, bytes: data.length }; + } + + /** Reload from disk, discarding unsaved edits. @param {unknown} input */ + async revertDoc(input) { + const path = this.resolvePath(input); + const doc = this.docs.get(path); + if (!doc) throw new EditorError('NOT_OPEN', '文档未打开', 409); + const st = await stat(path).catch(() => null); + if (!st) throw new EditorError('NOT_FOUND', '磁盘上的文件已不存在', 404); + if (st.size > MAX_FILE_BYTES) throw new EditorError('TOO_LARGE', '文件超过 32 MB,无法打开', 413); + const decoded = decodeFile(await readFile(path)); + this.applyServerString(doc, decoded.text, 'disk'); + doc.savedText = doc.text; + doc.eol = decoded.eol; + doc.bom = decoded.bom; + doc.disk = diskOf(st); + doc.conflictDisk = null; + doc.diskChanged = false; + doc.deleted = false; + if (doc.hotTimer) clearTimeout(doc.hotTimer); + doc.hotTimer = null; + await this.removeHot(path); + this.emitStatus(doc); + } + + /** Detect changes made on disk by other programs (including the Agent's own file tools). */ + async pollDisk() { + if (this.polling) return; + this.polling = true; + try { + for (const doc of [...this.docs.values()]) { + if (doc.saving || this.docs.get(doc.path) !== doc) continue; + const st = await stat(doc.path).catch(() => null); + if (!st) { + if (!doc.deleted) { + doc.deleted = true; + doc.disk = null; + this.scheduleHot(doc); + this.emitStatus(doc); + this.notice('warn', `${basename(doc.path)} 已在磁盘上被删除,保存可重新创建`); + } + continue; + } + if (st.isDirectory()) continue; + const meta = diskOf(st); + if (sameDisk(meta, doc.disk)) continue; + if (doc.diskChanged && sameDisk(meta, doc.conflictDisk)) continue; + if (st.size > MAX_FILE_BYTES) continue; + let decoded; + try { + decoded = decodeFile(await readFile(doc.path)); + } catch { + continue; + } + if (this.docs.get(doc.path) !== doc || doc.saving) continue; + const diskText = toText(decoded.text); + const wasDeleted = doc.deleted; + doc.deleted = false; + if (diskText.eq(doc.savedText) && !wasDeleted) { + doc.disk = meta; + continue; + } + if (!this.isDirty(doc) || wasDeleted && doc.text.eq(diskText)) { + if (!doc.text.eq(diskText)) this.applyServerString(doc, decoded.text, 'disk'); + this.markClean(doc, decoded, meta); + if (!wasDeleted) this.notice('info', `已从磁盘重新加载 ${basename(doc.path)}`); + } else if (diskText.eq(doc.text)) { + this.markClean(doc, decoded, meta); + } else { + doc.conflictDisk = meta; + if (!doc.diskChanged) { + doc.diskChanged = true; + this.emitStatus(doc); + this.notice('warn', `${basename(doc.path)} 已在磁盘上被修改,而编辑器中有未保存的更改`); + } + } + } + } finally { + this.polling = false; + } + } + + /** @param {Doc} doc @param {{eol:string,bom:boolean}} decoded @param {DiskMeta} meta */ + markClean(doc, decoded, meta) { + doc.savedText = doc.text; + doc.eol = decoded.eol; + doc.bom = decoded.bom; + doc.disk = meta; + doc.conflictDisk = null; + doc.diskChanged = false; + if (doc.hotTimer) clearTimeout(doc.hotTimer); + doc.hotTimer = null; + void this.removeHot(doc.path); + this.emitStatus(doc); + } + + // ---- tabs ---------------------------------------------------------------------------------- + + /** @param {string} path @param {boolean} focus */ + async addTab(path, focus) { + let changed = false; + if (!this.tabs.includes(path)) { + this.tabs.push(path); + changed = true; + } + if ((focus || !this.active) && this.active !== path) { + this.active = path; + changed = true; + } + if (changed) { + await this.persist(); + this.emitState(); + } + } + + /** @param {unknown} input */ + async activateTab(input) { + const path = resolve(this.expand(input)); + if (!this.tabs.includes(path)) throw new EditorError('NOT_FOUND', '标签不存在', 404); + if (this.active !== path) { + this.active = path; + await this.persist(); + this.emitState(); + } + } + + /** @param {unknown} input @param {{ discard?: boolean }} [options] */ + async closeTab(input, { discard = false } = {}) { + const path = resolve(this.expand(input)); + const index = this.tabs.indexOf(path); + if (index === -1) return; + if (this.status(path).dirty && !discard) throw new EditorError('UNSAVED', '文件有未保存的更改', 409); + this.tabs.splice(index, 1); + if (this.active === path) this.active = this.tabs[Math.min(index, this.tabs.length - 1)] ?? null; + this.dropDoc(path); + await this.removeHot(path); + await this.persist(); + this.emitState(); + } + + /** @param {string} path */ + dropDoc(path) { + const doc = this.docs.get(path); + if (doc?.hotTimer) clearTimeout(doc.hotTimer); + const list = this.highlights.get(path); + if (doc && list) { + if (this.settings.highlightsPersist) for (const h of list) Object.assign(h, this.anchorOf(doc, h)); + else this.highlights.delete(path); + this.emitState(); + this.scheduleHighlightSave(); + } + this.docs.delete(path); + } + + // ---- file system --------------------------------------------------------------------------- + + /** + * @param {{ dir?: unknown, name: unknown, kind?: unknown, content?: unknown, unique?: unknown, open?: unknown, focus?: unknown }} request + */ + async createEntry({ dir, name, kind = 'file', content = '', unique = false, open = true, focus = true }) { + if (kind !== 'file' && kind !== 'dir') throw new EditorError('INVALID_KIND', '只能创建文件或文件夹'); + if (typeof content !== 'string') throw new EditorError('INVALID_CONTENT', '文件内容必须是文本'); + if (Buffer.byteLength(content) > MAX_FILE_BYTES) throw new EditorError('TOO_LARGE', '文件超过 32 MB', 413); + const base = dir === undefined || dir === null || dir === '' ? this.folders[0] : this.resolvePath(dir); + if (!base) throw new EditorError('NO_FOLDER', '请先在侧边栏添加一个文件夹'); + const baseStat = await stat(base).catch(() => null); + if (!baseStat?.isDirectory()) throw new EditorError('NOT_DIRECTORY', '目标文件夹不存在', 404); + let target = resolve(base, ...splitName(String(name))); + if (target === base || !this.inFolders(target)) throw new EditorError('INVALID_NAME', '文件名无效'); + await mkdir(dirname(target), { recursive: true }).catch((e) => { + throw mapFsError(e); + }); + if (unique) target = await uniquePath(target); + try { + if (kind === 'dir') await mkdir(target); + else await writeFile(target, content, { flag: 'wx' }); + } catch (error) { + if (/** @type {any} */ (error)?.code === 'EEXIST') throw new EditorError('EXISTS', `已存在同名文件:${basename(target)}`, 409); + throw mapFsError(error); + } + this.indexCache.clear(); + this.emit({ type: 'fs.changed', dir: dirname(target) }); + if (kind === 'file' && open) await this.openDoc(target, { tab: true, focus: !!focus }); + return { path: target, kind }; + } + + // ---- hot exit ------------------------------------------------------------------------------ + + /** @param {string} path */ + hotFile(path) { + return join(this.hotDir, `${sha1(path)}.json`); + } + + /** @param {string} path */ + async readHot(path) { + try { + const hot = JSON.parse(await readFile(this.hotFile(path), 'utf8')); + return hot.path === path && typeof hot.text === 'string' ? hot : null; + } catch { + return null; + } + } + + /** @param {Doc} doc */ + scheduleHot(doc) { + if (doc.hotTimer) clearTimeout(doc.hotTimer); + doc.hotTimer = setTimeout(() => void this.flushHot(doc), 1000); + } + + /** @param {Doc} doc */ + async flushHot(doc) { + if (doc.hotTimer) clearTimeout(doc.hotTimer); + doc.hotTimer = null; + try { + if (this.docs.get(doc.path) !== doc) return; + if (this.isDirty(doc)) { + const file = this.hotFile(doc.path); + const tmp = `${file}.${process.pid}.${++this.tmpCounter}.tmp`; + await writeFile(tmp, JSON.stringify({ path: doc.path, text: doc.text.toString(), disk: doc.disk, eol: doc.eol, bom: doc.bom, at: Date.now() })); + await rename(tmp, file); + this.hotPaths.add(doc.path); + } else { + await this.removeHot(doc.path); + } + } catch (error) { + this.logger.warn('editor.hot.write_failed', { code: String(/** @type {any} */ (error)?.code ?? 'unknown') }); + } + } + + /** @param {string} path */ + async removeHot(path) { + this.hotPaths.delete(path); + await rm(this.hotFile(path), { force: true }).catch(() => undefined); + } + + async flushAll() { + for (const doc of [...this.docs.values()]) await this.flushHot(doc); + if (this.highlightTimer) { + clearTimeout(this.highlightTimer); + this.highlightTimer = null; + this.saveHighlights(); + } + await this.persistChain; + } + + // ---- review highlights --------------------------------------------------------------------- + // Agent highlights are editor overlays: they never touch the buffer or the file. Positions follow edits + // the way a cursor does. The user's highlightsPersist switch decides their lifetime (see DEFAULT_SETTINGS). + + /** @param {string} path */ + highlightItems(path) { + return (this.highlights.get(path) ?? []).map(({ id, from, to, lines, kind, note }) => ({ id, from, to, lines, kind, note })); + } + + highlightTotal() { + let total = 0; + for (const list of this.highlights.values()) total += list.length; + return total; + } + + /** Broadcast a file's list after highlights were added or removed (pure mapping needs no event). @param {string} path */ + highlightsChanged(path) { + const doc = this.docs.get(path); + if (doc) this.emit({ type: 'highlights', path, version: doc.version, items: this.highlightItems(path) }); + this.emitState(); + this.scheduleHighlightSave(); + } + + /** @param {string} path @param {Highlight[]} list */ + setHighlightList(path, list) { + if (list.length) this.highlights.set(path, list); + else this.highlights.delete(path); + } + + /** Map highlights through committed changes; without persistence, touched ones are dropped. @param {Doc} doc @param {{changes:any}[]} applied */ + mapHighlights(doc, applied) { + const list = this.highlights.get(doc.path); + if (!list) return; + const keep = this.settings.highlightsPersist; + const next = list.filter((h) => { + let { from, to } = h; + for (const { changes } of applied) { + if (!keep && changes.touchesRange(from, to)) return false; + const mappedFrom = changes.mapPos(from, 1); + const mappedTo = Math.max(mappedFrom, changes.mapPos(to, -1)); + if (to > from && mappedTo === mappedFrom) return false; // all highlighted text was deleted + from = mappedFrom; + to = mappedTo; + } + h.from = from; + h.to = to; + return true; + }); + if (next.length !== list.length) { + this.setHighlightList(doc.path, next); + this.highlightsChanged(doc.path); + } else { + this.scheduleHighlightSave(); + } + } + + /** What identifies a kept highlight while its file is closed. @param {Doc} doc @param {Highlight} h */ + anchorOf(doc, h) { + return { + text: doc.text.sliceString(h.from, h.to), + startLine: doc.text.lineAt(h.from).number, + endLine: doc.text.lineAt(h.lines ? h.to : Math.max(h.from, h.to - 1)).number, + }; + } + + /** + * A closed file was loaded again. A kept highlight stays where its code still is; if the file changed in the + * meantime it moves to the only other place that code occurs, otherwise it is dropped. + * @param {Doc} doc + */ + attachHighlights(doc) { + const list = this.highlights.get(doc.path); + if (!list) return; + /** @type {string|null} */ + let source = null; + const kept = list.filter((h) => { + const code = h.text ?? ''; + if (h.to <= doc.text.length && doc.text.sliceString(h.from, h.to) === code) return true; + if (!code) return false; + source ??= doc.text.toString(); + const at = source.indexOf(code); + if (at === -1 || source.indexOf(code, at + 1) !== -1) return false; + h.from = at; + h.to = at + code.length; + return true; + }); + for (const h of kept) { + if (h.lines) { + h.from = doc.text.lineAt(h.from).from; + h.to = doc.text.lineAt(h.to).to; + } + delete h.text; + delete h.startLine; + delete h.endLine; + } + this.scheduleHighlightSave(); + if (kept.length === list.length) return; + this.setHighlightList(doc.path, kept); + this.notice('info', `${basename(doc.path)} 在关闭期间被修改,${list.length - kept.length} 个 Agent 高亮已失效`); + this.emitState(); + } + + highlightLifetimeChanged() { + if (this.settings.highlightsPersist) { + this.saveHighlights(); + return; + } + // Back to temporary highlights: those of closed files are dropped, nothing is kept on disk. + for (const path of [...this.highlights.keys()]) if (!this.docs.has(path)) this.highlights.delete(path); + if (this.highlightTimer) clearTimeout(this.highlightTimer); + this.highlightTimer = null; + this.persistChain = this.persistChain.then(() => rm(this.highlightsPath, { force: true })).catch(() => undefined); + this.emitState(); + } + + scheduleHighlightSave() { + if (!this.settings.highlightsPersist || this.highlightTimer) return; + this.highlightTimer = setTimeout(() => { + this.highlightTimer = null; + this.saveHighlights(); + }, 1000); + } + + saveHighlights() { + const files = [...this.highlights].map(([path, list]) => { + const doc = this.docs.get(path); + return { path, items: list.map((h) => (doc ? { ...h, ...this.anchorOf(doc, h) } : { ...h })) }; + }); + const data = JSON.stringify({ seq: this.highlightSeq, files }); + this.persistChain = this.persistChain + .then(async () => { + const tmp = `${this.highlightsPath}.${process.pid}.${++this.tmpCounter}.tmp`; + await writeFile(tmp, data); + await rename(tmp, this.highlightsPath); + }) + .catch((error) => this.logger.warn('editor.highlights.persist_failed', { code: String(error?.code ?? 'unknown') })); + } + + async loadHighlights() { + /** @type {any} */ + let saved; + try { + saved = JSON.parse(await readFile(this.highlightsPath, 'utf8')); + } catch { + return; + } + if (!saved || !Array.isArray(saved.files)) return; + if (Number.isInteger(saved.seq)) this.highlightSeq = Math.max(this.highlightSeq, saved.seq); + const int = (/** @type {unknown} */ v) => Number.isInteger(v) && Number(v) >= 0; + for (const file of saved.files) { + if (!file || typeof file.path !== 'string' || !isAbsolute(file.path) || !this.inFolders(file.path) || !Array.isArray(file.items)) continue; + const items = file.items + .filter((h) => h && typeof h.id === 'string' && /^h\d+$/.test(h.id) && int(h.from) && int(h.to) && h.to >= h.from + && typeof h.lines === 'boolean' && HIGHLIGHT_KINDS.has(h.kind) && typeof h.note === 'string' && h.note.length <= MAX_NOTE_CHARS + && typeof h.text === 'string' && int(h.startLine) && int(h.endLine)) + .slice(0, MAX_HIGHLIGHTS_PER_FILE) + .map(({ id, from, to, lines, kind, note, at, text, startLine, endLine }) => ({ + id, from, to, lines, kind, note, at: Number.isFinite(at) ? at : 0, text, startLine, endLine, + })); + if (items.length) this.highlights.set(resolve(file.path), items); + } + } + + /** Remove by ids, by file, or everything. @param {{ ids?: unknown, path?: unknown, all?: unknown }} target */ + clearHighlights({ ids, path, all }) { + /** @type {Set} */ + const touched = new Set(); + let removed = 0; + const filterAll = (/** @type {(h: Highlight) => boolean} */ drop) => { + for (const [p, list] of [...this.highlights]) { + const next = list.filter((h) => !drop(h)); + if (next.length === list.length) continue; + removed += list.length - next.length; + this.setHighlightList(p, next); + touched.add(p); + } + }; + if (Array.isArray(ids)) { + const wanted = new Set(ids.filter((id) => typeof id === 'string')); + filterAll((h) => wanted.has(h.id)); + } else if (typeof path === 'string' && path) { + const p = resolve(this.expand(path)); + const list = this.highlights.get(p); + if (list) { + removed = list.length; + this.highlights.delete(p); + touched.add(p); + } + } else if (all === true) { + filterAll(() => true); + } else { + throw new EditorError('INVALID_ARGUMENT', '请指定要清除的高亮'); + } + for (const p of touched) this.highlightsChanged(p); + return removed; + } + + /** @param {unknown} input */ + highlightsPayload(input) { + const doc = this.docs.get(resolve(this.expand(input))); + return doc ? { version: doc.version, items: this.highlightItems(doc.path) } : { version: -1, items: [] }; + } + + /** + * Turn one highlight_code entry into document offsets (validated before anything is added). + * @param {any} text @param {() => string} source @param {any} spec @param {number} index + */ + resolveHighlight(text, source, spec, index) { + const where = `highlights[${index}]`; + if (!spec || typeof spec !== 'object' || Array.isArray(spec)) throw new EditorError('INVALID_ARGUMENT', `${where} 必须是对象`); + const kind = spec.kind ?? 'info'; + if (!HIGHLIGHT_KINDS.has(kind)) throw new EditorError('INVALID_ARGUMENT', `${where}.kind 只能是 info、warning、error 或 success`); + const note = spec.note ?? ''; + if (typeof note !== 'string' || note.length > MAX_NOTE_CHARS) throw new EditorError('INVALID_ARGUMENT', `${where}.note 必须是不超过 ${MAX_NOTE_CHARS} 字的文本`); + const positional = ['start_line', 'end_line', 'start_column', 'end_column'].filter((k) => spec[k] !== undefined); + const isLine = (/** @type {unknown} */ v) => Number.isInteger(v) && Number(v) >= 1; + + if (spec.text !== undefined) { + if (positional.length) throw new EditorError('INVALID_ARGUMENT', `${where} 不能同时使用 text 和 ${positional.join('/')}`); + if (typeof spec.text !== 'string' || !spec.text) throw new EditorError('INVALID_ARGUMENT', `${where}.text 不能为空`); + const needle = normalizeNewlines(spec.text); + const content = source(); + const hits = []; + for (let i = content.indexOf(needle); i !== -1 && hits.length < 11; i = content.indexOf(needle, i + 1)) hits.push(i); + if (!hits.length) throw new EditorError('NOT_FOUND', `${where}.text 未在文件当前内容中找到(当前内容包含未保存的修改)`, 404); + if (hits.length > 1) { + const lines = hits.slice(0, 10).map((i) => text.lineAt(i).number).join('、'); + throw new EditorError('AMBIGUOUS', `${where}.text 匹配到多处(第 ${lines} 行${hits.length > 10 ? ' 等' : ''}),请提供更长的片段,或改用 start_line/end_line`, 409); + } + return { from: hits[0], to: hits[0] + needle.length, lines: false, kind, note }; + } + + if (!isLine(spec.start_line)) throw new EditorError('INVALID_ARGUMENT', `${where} 需要 text,或从 1 开始的 start_line`); + const startLine = Number(spec.start_line); + const endLine = spec.end_line === undefined ? startLine : spec.end_line; + if (!isLine(endLine) || endLine < startLine) throw new EditorError('INVALID_ARGUMENT', `${where}.end_line 必须 ≥ start_line`); + if (endLine > text.lines) throw new EditorError('OUT_OF_RANGE', `${where} 超出文件范围:文件只有 ${text.lines} 行`); + const first = text.line(startLine); + const last = text.line(endLine); + if (spec.start_column === undefined && spec.end_column === undefined) { + return { from: first.from, to: last.to, lines: true, kind, note }; + } + const startColumn = spec.start_column ?? 1; + if (!isLine(startColumn) || (spec.end_column !== undefined && !isLine(spec.end_column))) { + throw new EditorError('INVALID_ARGUMENT', `${where} 的列号必须是从 1 开始的整数`); + } + const from = first.from + Math.min(startColumn - 1, first.length); + const to = spec.end_column === undefined ? last.to : last.from + Math.min(spec.end_column, last.length); + if (to <= from) throw new EditorError('INVALID_ARGUMENT', `${where} 的范围为空`); + return { from, to, lines: false, kind, note }; + } + + /** Human-oriented position of a highlight (1-based lines; columns inclusive). @param {Doc|null} doc @param {Highlight} h */ + describeHighlight(doc, h) { + const base = { id: h.id, kind: h.kind, note: h.note }; + if (!doc) return { ...base, startLine: h.startLine, endLine: h.endLine, lines: true, fileClosed: true }; + const first = doc.text.lineAt(h.from); + const last = doc.text.lineAt(h.lines ? h.to : Math.max(h.from, h.to - 1)); + if (h.lines) return { ...base, startLine: first.number, endLine: last.number, lines: true }; + return { + ...base, lines: false, startLine: first.number, endLine: last.number, + startColumn: h.from - first.from + 1, endColumn: h.to - last.from, text: doc.text.sliceString(h.from, Math.min(h.to, h.from + 200)), + }; + } + + // ---- page view and settings ---------------------------------------------------------------- + + /** @param {unknown} patch */ + async updateSettings(patch) { + if (!patch || typeof patch !== 'object' || Array.isArray(patch)) throw new EditorError('INVALID_SETTING', '设置格式无效'); + const next = { ...this.settings }; + for (const [key, value] of Object.entries(patch)) { + const rule = SETTING_RULES[key]; + if (!rule) throw new EditorError('INVALID_SETTING', `未知设置项:${key}`); + if (!rule(value)) throw new EditorError('INVALID_SETTING', `设置项取值无效:${key}`); + /** @type {any} */ (next)[key] = value; + } + const lifetimeChanged = next.highlightsPersist !== this.settings.highlightsPersist; + this.settings = next; + if (lifetimeChanged) this.highlightLifetimeChanged(); + await this.persist(); + this.emitState(); + return this.settings; + } + + /** The page reports what the user is looking at, so the Agent can act on "this selection". @param {any} body */ + setView(body) { + if (!body || typeof body.path !== 'string' || !this.tabs.includes(body.path)) return; + const selections = Array.isArray(body.selections) + ? body.selections.slice(0, 50).filter((s) => s && Number.isInteger(s.anchor?.line) && Number.isInteger(s.head?.line)) + .map((s) => ({ anchor: { line: s.anchor.line, col: s.anchor.col }, head: { line: s.head.line, col: s.head.col } })) + : []; + const selectedText = typeof body.selectedText === 'string' ? body.selectedText.slice(0, 8000) : ''; + this.view = { path: body.path, selections, selectedText, at: Date.now() }; + } + + // ---- Agent operations (MCP) ---------------------------------------------------------------- + + editorState() { + const view = this.view && this.view.path === this.active && !isSensitivePath(this.view.path) ? this.view : null; + return { + folders: this.folders, + primaryFolder: this.folders[0] ?? null, + draftsFolder: this.draftsDir, + openEditorPages: this.pageCount, + activeFile: this.active, + tabs: this.tabs.map((p) => ({ path: p, active: p === this.active, ...this.status(p), highlights: this.highlights.get(p)?.length ?? 0 })), + selection: view ? { file: view.path, ranges: view.selections, selectedText: view.selectedText } : null, + highlights: { + total: this.highlightTotal(), + visible: this.settings.highlightsVisible, + keepUntilCleared: this.settings.highlightsPersist, + }, + }; + } + + /** @param {unknown} input */ + async agentList(input) { + const path = input === undefined || input === null || input === '' ? this.folders[0] : this.resolvePath(input, { relativeToPrimary: true }); + if (!path) throw new EditorError('NO_FOLDER', '编辑器侧边栏中还没有文件夹'); + return this.listDir(path); + } + + /** @param {unknown} input @param {unknown} startLine @param {unknown} endLine */ + async agentRead(input, startLine, endLine) { + const path = this.resolvePath(input, { relativeToPrimary: true }); + assertAgentAccessible(path); + let doc = this.docs.get(path); + if (!doc && this.hotPaths.has(path)) doc = await this.openDoc(path, { tab: true }); + let text; + let source; + let dirty = false; + if (doc) { + text = doc.text; + source = 'editor buffer'; + dirty = this.isDirty(doc); + } else { + const st = await stat(path).catch((e) => { + throw mapFsError(e); + }); + if (st.isDirectory()) throw new EditorError('IS_DIRECTORY', '这是一个文件夹,请使用 list_directory'); + if (st.size > MAX_FILE_BYTES) throw new EditorError('TOO_LARGE', '文件超过 32 MB', 413); + text = toText(decodeFile(await readFile(path)).text); + source = 'disk'; + } + const total = text.lines; + const from = Number.isInteger(startLine) ? Math.min(Math.max(1, Number(startLine)), total) : 1; + let to = Number.isInteger(endLine) ? Math.min(Math.max(from, Number(endLine)), total) : Math.min(total, from + AGENT_READ_MAX_LINES - 1); + to = Math.min(to, from + AGENT_READ_MAX_LINES - 1); + let content = text.sliceString(text.line(from).from, text.line(to).to); + let clipped = false; + if (content.length > AGENT_READ_MAX_CHARS) { + content = content.slice(0, AGENT_READ_MAX_CHARS); + clipped = true; + } + return { path, source, dirty, totalLines: total, startLine: from, endLine: to, clipped, content }; + } + + /** @param {unknown} input @param {unknown} content @param {unknown} open */ + async agentCreate(input, content, open) { + const path = this.resolvePath(input, { relativeToPrimary: true }); + const folder = this.folderOf(path); + if (!folder || folder === path) throw new EditorError('INVALID_PATH', '请提供文件路径'); + const result = await this.createEntry({ + dir: folder, name: relative(folder, path).split(sep).join('/'), kind: 'file', + content: typeof content === 'string' ? content : '', open: open !== false, focus: false, + }); + this.emit({ type: 'agent.activity', action: 'create', path: result.path }); + return result; + } + + /** @param {unknown} input @param {unknown} content @param {unknown} save */ + async agentWrite(input, content, save) { + if (typeof content !== 'string') throw new EditorError('INVALID_CONTENT', 'content 必须是字符串'); + if (Buffer.byteLength(content) > MAX_FILE_BYTES) throw new EditorError('TOO_LARGE', '内容超过 32 MB', 413); + const path = this.resolvePath(input, { relativeToPrimary: true }); + assertAgentAccessible(path); + const doc = await this.openDoc(path, { tab: true }); + const changed = this.applyServerString(doc, content, 'agent'); + const saveResult = save === true ? await this.saveDoc(doc.path) : null; + this.emit({ type: 'agent.activity', action: 'write', path: doc.path }); + return { path: doc.path, changed, saved: !!saveResult?.saved, ...this.status(doc.path) }; + } + + /** @param {unknown} input @param {unknown} oldText @param {unknown} newText @param {unknown} replaceAll @param {unknown} save */ + async agentEdit(input, oldText, newText, replaceAll, save) { + if (typeof oldText !== 'string' || oldText === '') throw new EditorError('INVALID_ARGUMENT', 'old_text 不能为空'); + if (typeof newText !== 'string') throw new EditorError('INVALID_ARGUMENT', 'new_text 必须是字符串'); + const path = this.resolvePath(input, { relativeToPrimary: true }); + assertAgentAccessible(path); + const doc = await this.openDoc(path, { tab: true }); + const source = doc.text.toString(); + const needle = normalizeNewlines(oldText); + const insert = normalizeNewlines(newText); + const positions = []; + for (let i = source.indexOf(needle); i !== -1; i = source.indexOf(needle, i + needle.length)) positions.push(i); + if (!positions.length) throw new EditorError('NOT_FOUND', 'old_text 未在文件当前内容中找到(当前内容包含未保存的修改)', 404); + if (positions.length > 1 && replaceAll !== true) { + throw new EditorError('AMBIGUOUS', `old_text 匹配到 ${positions.length} 处,请提供更多上下文,或设置 replace_all: true`, 409); + } + const targets = replaceAll === true ? positions : positions.slice(0, 1); + const changes = ChangeSet.of(targets.map((from) => ({ from, to: from + needle.length, insert })), doc.text.length); + this.commit(doc, changes.apply(doc.text), [{ clientID: 'agent', changes }]); + const saveResult = save === true ? await this.saveDoc(doc.path) : null; + this.emit({ type: 'agent.activity', action: 'write', path: doc.path }); + return { path: doc.path, replacements: targets.length, saved: !!saveResult?.saved, ...this.status(doc.path) }; + } + + /** @param {unknown} input @param {unknown} overwrite */ + async agentSave(input, overwrite) { + const path = this.resolvePath(input, { relativeToPrimary: true }); + const result = await this.saveDoc(path, { overwrite: overwrite === true }); + return { path, ...result }; + } + + /** @param {unknown} input @param {unknown} line */ + async agentOpen(input, line) { + let p = this.expand(input); + if (!isAbsolute(p)) { + if (!this.folders.length) throw new EditorError('INVALID_PATH', '需要绝对路径'); + p = resolve(this.folders[0], p); + } + p = resolve(p); + const st = await stat(p).catch(() => null); + if (st?.isDirectory()) { + const result = await this.addFolder(p, { top: true }); + this.emit({ type: 'agent.activity', action: 'folder', path: result.path }); + return { kind: 'folder', ...result, primary: true }; + } + const doc = await this.openDoc(this.resolvePath(p), { tab: true, focus: true }); + const lineNumber = Number.isInteger(line) && Number(line) >= 1 ? Math.min(Number(line), doc.text.lines) : null; + this.emit({ type: 'agent.activity', action: 'open', path: doc.path, line: lineNumber }); + return { kind: 'file', path: doc.path, line: lineNumber }; + } + + /** @param {unknown} input @param {unknown} specs @param {{ replace?: unknown, reveal?: unknown }} options */ + async agentHighlight(input, specs, { replace, reveal }) { + if (!Array.isArray(specs) || !specs.length) throw new EditorError('INVALID_ARGUMENT', 'highlights 至少需要一项'); + if (specs.length > MAX_HIGHLIGHTS_PER_CALL) throw new EditorError('INVALID_ARGUMENT', `一次最多添加 ${MAX_HIGHLIGHTS_PER_CALL} 个高亮`); + const path = this.resolvePath(input, { relativeToPrimary: true }); + assertAgentAccessible(path); + const doc = await this.openDoc(path, { tab: true }); + /** @type {string|null} */ + let source = null; + const content = () => (source ??= doc.text.toString()); + const resolved = specs.map((spec, i) => this.resolveHighlight(doc.text, content, spec, i)); + const existing = replace === true ? [] : (this.highlights.get(path) ?? []); + const replaced = replace === true ? (this.highlights.get(path)?.length ?? 0) : 0; + if (existing.length + resolved.length > MAX_HIGHLIGHTS_PER_FILE) { + throw new EditorError('TOO_MANY', `每个文件最多 ${MAX_HIGHLIGHTS_PER_FILE} 个高亮,请先用 clear_highlights 清除一些`, 409); + } + const at = Date.now(); + /** @type {Highlight[]} */ + const items = resolved.map((r) => ({ id: `h${++this.highlightSeq}`, ...r, at })); + this.highlights.set(path, [...existing, ...items]); + this.highlightsChanged(path); + if (reveal !== false) { + const first = items.reduce((a, b) => (b.from < a.from ? b : a)); + this.emit({ type: 'agent.activity', action: 'reveal', path, line: doc.text.lineAt(first.from).number }); + } + return { path, replaced, items: items.map((h) => this.describeHighlight(doc, h)) }; + } + + /** @param {unknown} input */ + agentListHighlights(input) { + const only = input === undefined || input === null || input === '' ? null : this.resolvePath(input, { relativeToPrimary: true }); + const files = []; + for (const [path, list] of this.highlights) { + if (only && path !== only) continue; + const doc = this.docs.get(path) ?? null; + const items = [...list].sort((a, b) => (doc ? a.from - b.from : Number(a.startLine) - Number(b.startLine))); + files.push({ path, items: items.map((h) => this.describeHighlight(doc, h)) }); + } + return { files, total: this.highlightTotal(), visible: this.settings.highlightsVisible, keepUntilCleared: this.settings.highlightsPersist }; + } + + /** @param {unknown} ids @param {unknown} input */ + agentClearHighlights(ids, input) { + if (ids !== undefined) { + if (!Array.isArray(ids) || !ids.length) throw new EditorError('INVALID_ARGUMENT', 'ids 必须是非空数组'); + return this.clearHighlights({ ids }); + } + if (input !== undefined && input !== null && input !== '') return this.clearHighlights({ path: this.resolvePath(input, { relativeToPrimary: true }) }); + return this.clearHighlights({ all: true }); + } +} diff --git a/plugins/trentchou/text-editor/miniapp/node/mcp.mjs b/plugins/trentchou/text-editor/miniapp/node/mcp.mjs new file mode 100644 index 0000000..250429e --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/node/mcp.mjs @@ -0,0 +1,331 @@ +// @ts-check +// Mini App-managed Streamable HTTP MCP endpoint: lets the Agent read, write, create and save +// files through the same buffers the user sees in the editor. +import { EditorError } from './editor-service.mjs'; + +const SUPPORTED_PROTOCOLS = ['2025-06-18', '2025-03-26', '2024-11-05']; + +const pathProp = { + type: 'string', + description: 'Absolute path inside one of the editor folders (preferred), or a path relative to the primary (first) folder. The primary folder follows the most recently active conversation, so it may not be your workspace; use absolute paths.', +}; + +const TOOLS = [ + { + name: 'get_editor_state', + description: + 'Get the text editor state shared with the user: sidebar folders (the only locations these tools can access; the first is the primary folder), open tabs with unsaved/conflict flags and highlight counts, the active file, the user\'s current selection, and the user\'s highlight settings. Call this first to learn which file the user is looking at.', + inputSchema: { type: 'object', properties: {}, additionalProperties: false }, + }, + { + name: 'list_directory', + description: 'List files and subdirectories of a directory inside the editor folders.', + inputSchema: { + type: 'object', + properties: { path: { ...pathProp, description: `${pathProp.description} Defaults to the primary folder.` } }, + additionalProperties: false, + }, + }, + { + name: 'read_file', + description: + 'Read a UTF-8 text file. If the file is open in the editor, this returns the live buffer including the user\'s unsaved edits; otherwise it reads from disk. Returns at most 2000 lines per call; use start_line/end_line (1-based, inclusive) for other ranges.', + inputSchema: { + type: 'object', + properties: { + path: pathProp, + start_line: { type: 'integer', minimum: 1 }, + end_line: { type: 'integer', minimum: 1 }, + }, + required: ['path'], + additionalProperties: false, + }, + }, + { + name: 'create_file', + description: + 'Create a new file on disk inside the editor folders (fails if it already exists; missing parent directories are created) and open it in an editor tab.', + inputSchema: { + type: 'object', + properties: { + path: pathProp, + content: { type: 'string', description: 'Initial content. Defaults to empty.' }, + }, + required: ['path'], + additionalProperties: false, + }, + }, + { + name: 'write_file', + description: + 'Replace the whole content of an existing file in its editor buffer. The user sees the change live; it stays unsaved until save_file is called or save is true. Prefer edit_file for small changes.', + inputSchema: { + type: 'object', + properties: { + path: pathProp, + content: { type: 'string' }, + save: { type: 'boolean', description: 'Also save to disk after writing. Defaults to false.' }, + }, + required: ['path', 'content'], + additionalProperties: false, + }, + }, + { + name: 'edit_file', + description: + 'Replace an exact text snippet in the editor buffer of a file (the buffer includes unsaved edits). old_text must match exactly once unless replace_all is true. The change stays unsaved unless save is true.', + inputSchema: { + type: 'object', + properties: { + path: pathProp, + old_text: { type: 'string' }, + new_text: { type: 'string' }, + replace_all: { type: 'boolean', description: 'Replace every occurrence. Defaults to false.' }, + save: { type: 'boolean', description: 'Also save to disk after editing. Defaults to false.' }, + }, + required: ['path', 'old_text', 'new_text'], + additionalProperties: false, + }, + }, + { + name: 'save_file', + description: + 'Save a file\'s editor buffer to disk. Fails with CONFLICT if another program changed the file on disk since it was loaded, unless overwrite_external_changes is true.', + inputSchema: { + type: 'object', + properties: { + path: pathProp, + overwrite_external_changes: { type: 'boolean' }, + }, + required: ['path'], + additionalProperties: false, + }, + }, + { + name: 'open_in_editor', + description: + 'Show something to the user. For a file inside the editor folders: open and focus its tab, optionally at a line. For a directory: add it to the sidebar as the primary folder so the other tools can access it. Call this with your workspace directory to bind the editor to your project.', + inputSchema: { + type: 'object', + properties: { + path: { type: 'string', description: 'Absolute file or directory path.' }, + line: { type: 'integer', minimum: 1 }, + }, + required: ['path'], + additionalProperties: false, + }, + }, + { + name: 'highlight_code', + description: + 'Highlight code for the user, e.g. findings during a code review. Highlights are editor overlays only: they never change the buffer or the file on disk. ' + + 'Each entry targets whole lines (start_line/end_line), a character range (add start_column/end_column; 1-based, end inclusive), or an exact snippet (text) that must occur exactly once in the current buffer. ' + + 'An optional note is shown as a comment under the highlighted code, coloured by kind. Opens the file in a tab; reveal (default true) scrolls the editor to the first new highlight. ' + + 'Lifetime is the user\'s choice: by default a highlight disappears once its code is edited or the file is closed; if the user keeps highlights, they stay until cleared. Use list_highlights to see which remain.', + inputSchema: { + type: 'object', + properties: { + path: pathProp, + highlights: { + type: 'array', + minItems: 1, + maxItems: 50, + items: { + type: 'object', + properties: { + start_line: { type: 'integer', minimum: 1 }, + end_line: { type: 'integer', minimum: 1, description: 'Last highlighted line. Defaults to start_line.' }, + start_column: { type: 'integer', minimum: 1, description: 'Highlight characters instead of whole lines, starting at this column of start_line.' }, + end_column: { type: 'integer', minimum: 1, description: 'Last highlighted column of end_line (inclusive). Defaults to the end of that line.' }, + text: { type: 'string', description: 'Exact snippet to highlight instead of line numbers; must match exactly once.' }, + kind: { type: 'string', enum: ['info', 'warning', 'error', 'success'], description: 'Colour / severity. Defaults to info.' }, + note: { type: 'string', maxLength: 2000, description: 'Plain-text comment shown under the highlighted code.' }, + }, + additionalProperties: false, + }, + }, + replace: { type: 'boolean', description: 'Remove this file\'s existing highlights first. Defaults to false.' }, + reveal: { type: 'boolean', description: 'Scroll the editor to the first new highlight. Defaults to true.' }, + }, + required: ['path', 'highlights'], + additionalProperties: false, + }, + }, + { + name: 'list_highlights', + description: 'List the code highlights that still exist (the user may have dismissed some, or edited the code so they disappeared), with ids and current line ranges.', + inputSchema: { + type: 'object', + properties: { path: { ...pathProp, description: `${pathProp.description} Omit to list every file.` } }, + additionalProperties: false, + }, + }, + { + name: 'clear_highlights', + description: 'Remove code highlights: the given ids, or all highlights of one file (path), or every highlight when neither is given.', + inputSchema: { + type: 'object', + properties: { + ids: { type: 'array', items: { type: 'string' }, minItems: 1 }, + path: pathProp, + }, + additionalProperties: false, + }, + }, +]; + +const INSTRUCTIONS = + 'Text editor shared live with the user. Tools can only access files inside the editor sidebar folders (see get_editor_state; add your workspace with open_in_editor). Credential files such as .env, .secrets/ and private keys are not readable or writable through these tools. write_file and edit_file change the buffer the user sees and stay unsaved until save_file. To point the user at code (reviews, explanations), use highlight_code: highlights never modify files.'; + +/** @param {unknown} value */ +const text = (value) => ({ content: [{ type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) }] }); + +/** @param {import('./editor-service.mjs').EditorService} service */ +function pageNote(service) { + return service.pageCount === 0 + ? '\nNote: no editor page is open, so the user cannot see this yet. Ask the host to open the text-editor Mini App.' + : ''; +} + +/** @param {import('./editor-service.mjs').EditorService} service */ +function highlightNote(service) { + const { highlightsVisible, highlightsPersist } = service.settings; + const lifetime = highlightsPersist + ? 'The user keeps highlights until they or you clear them.' + : 'With the user\'s current setting, a highlight disappears once its code is edited or its file is closed.'; + return `${lifetime}${highlightsVisible ? '' : ' The user has hidden highlights right now; they are kept and reappear when the user shows them again.'}`; +} + +/** @param {ReturnType} h */ +function describe(h) { + const where = h.lines + ? (h.startLine === h.endLine ? `line ${h.startLine}` : `lines ${h.startLine}-${h.endLine}`) + : `${h.startLine}:${h.startColumn}-${h.endLine}:${h.endColumn} (line:column)`; + const note = h.note ? ` — ${h.note.length > 160 ? `${h.note.slice(0, 160)}…` : h.note}`.replace(/\n/g, ' ') : ''; + return `- ${h.id} [${h.kind}] ${where}${h.fileClosed ? ' (file closed)' : ''}${note}`; +} + +/** + * @param {import('./editor-service.mjs').EditorService} service + * @param {string} name + * @param {any} args + */ +async function callTool(service, name, args) { + const a = args && typeof args === 'object' && !Array.isArray(args) ? args : {}; + switch (name) { + case 'get_editor_state': + return text(service.editorState()); + case 'list_directory': { + const result = await service.agentList(a.path); + const lines = result.entries.map((e) => `${e.kind === 'dir' ? 'dir ' : e.kind === 'file' ? 'file' : e.kind} ${e.name}${e.kind === 'dir' ? '/' : ''}`); + return text(`${result.path}\n${lines.join('\n') || '(empty directory)'}${result.truncated ? '\n(list truncated)' : ''}`); + } + case 'read_file': { + const r = await service.agentRead(a.path, a.start_line, a.end_line); + const more = r.endLine < r.totalLines ? ` Use start_line=${r.endLine + 1} to continue.` : ''; + const header = `File: ${r.path}\nSource: ${r.source}${r.dirty ? ' (has unsaved edits)' : ''}\nLines ${r.startLine}-${r.endLine} of ${r.totalLines}.${more}${r.clipped ? ' Output clipped by size.' : ''}`; + return text(`${header}\n----\n${r.content}`); + } + case 'create_file': { + const r = await service.agentCreate(a.path, a.content, true); + return text(`Created ${r.path} and opened it in the editor.${pageNote(service)}`); + } + case 'write_file': { + const r = await service.agentWrite(a.path, a.content, a.save); + const state = r.saved ? 'saved to disk' : r.dirty ? 'unsaved in the editor (call save_file to persist)' : 'identical to disk'; + return text(`${r.changed ? 'Updated' : 'No change to'} ${r.path}; now ${state}.${pageNote(service)}`); + } + case 'edit_file': { + const r = await service.agentEdit(a.path, a.old_text, a.new_text, a.replace_all, a.save); + const state = r.saved ? 'saved to disk' : r.dirty ? 'unsaved in the editor (call save_file to persist)' : 'identical to disk'; + return text(`Replaced ${r.replacements} occurrence(s) in ${r.path}; now ${state}.${pageNote(service)}`); + } + case 'save_file': { + const r = await service.agentSave(a.path, a.overwrite_external_changes); + return text(r.saved ? `Saved ${r.path} (${r.bytes} bytes).` : `${r.path} has no unsaved changes; nothing to save.`); + } + case 'open_in_editor': { + const r = await service.agentOpen(a.path, a.line); + const message = r.kind === 'folder' + ? `${r.added ? 'Added' : 'Moved'} ${r.path} as the primary editor folder.` + : `Opened ${r.path}${r.line ? ` at line ${r.line}` : ''}.`; + return text(`${message}${pageNote(service)}`); + } + case 'highlight_code': { + const r = await service.agentHighlight(a.path, a.highlights, { replace: a.replace, reveal: a.reveal }); + const replaced = r.replaced ? ` (removed ${r.replaced} earlier highlight(s) first)` : ''; + return text(`Highlighted ${r.items.length} range(s) in ${r.path}${replaced}:\n${r.items.map(describe).join('\n')}\n${highlightNote(service)}${pageNote(service)}`); + } + case 'list_highlights': { + const r = service.agentListHighlights(a.path); + if (!r.files.length) return text(`No highlights${a.path ? ' in this file' : ''}. ${highlightNote(service)}`); + const body = r.files.map((f) => `${f.path}\n${f.items.map(describe).join('\n')}`).join('\n\n'); + return text(`${body}\n\n${highlightNote(service)}`); + } + case 'clear_highlights': { + const removed = service.agentClearHighlights(a.ids, a.path); + return text(`Removed ${removed} highlight(s).`); + } + default: + return null; + } +} + +/** @param {string} name @param {{ version: string }} info @param {import('./editor-service.mjs').EditorService} service */ +export function createMcpHandler(service, name, info) { + /** @param {any} msg */ + async function handleMessage(msg) { + const hasId = msg && typeof msg === 'object' && 'id' in msg && msg.id !== null && msg.id !== undefined; + if (!msg || typeof msg !== 'object' || msg.jsonrpc !== '2.0' || typeof msg.method !== 'string') { + return hasId ? rpcError(msg.id, -32600, 'Invalid Request') : null; + } + if (!hasId) return null; // notifications (initialized, cancelled, ...) need no response + switch (msg.method) { + case 'initialize': { + const requested = msg.params?.protocolVersion; + const protocolVersion = SUPPORTED_PROTOCOLS.includes(requested) ? requested : SUPPORTED_PROTOCOLS[0]; + return rpcResult(msg.id, { + protocolVersion, + capabilities: { tools: { listChanged: false } }, + serverInfo: { name, version: info.version }, + instructions: INSTRUCTIONS, + }); + } + case 'ping': + return rpcResult(msg.id, {}); + case 'tools/list': + return rpcResult(msg.id, { tools: TOOLS }); + case 'tools/call': { + const toolName = msg.params?.name; + if (!TOOLS.some((t) => t.name === toolName)) return rpcError(msg.id, -32602, `Unknown tool: ${toolName}`); + try { + return rpcResult(msg.id, await callTool(service, toolName, msg.params?.arguments)); + } catch (error) { + if (error instanceof EditorError) { + const extra = error.extra?.folders ? `\nEditor folders: ${JSON.stringify(error.extra.folders)}` : ''; + return rpcResult(msg.id, { ...text(`${error.code}: ${error.message}${extra}`), isError: true }); + } + throw error; + } + } + default: + return rpcError(msg.id, -32601, `Method not found: ${msg.method}`); + } + } + + /** @param {unknown} body @returns {Promise<{ status: number, payload?: unknown }>} */ + return async function handle(body) { + if (Array.isArray(body)) { + if (!body.length) return { status: 400, payload: rpcError(null, -32600, 'Empty batch') }; + const responses = (await Promise.all(body.map(handleMessage))).filter(Boolean); + return responses.length ? { status: 200, payload: responses } : { status: 202 }; + } + const response = await handleMessage(body); + return response ? { status: 200, payload: response } : { status: 202 }; + }; +} + +/** @param {unknown} id @param {unknown} result */ +const rpcResult = (id, result) => ({ jsonrpc: '2.0', id, result }); +/** @param {unknown} id @param {number} code @param {string} message */ +const rpcError = (id, code, message) => ({ jsonrpc: '2.0', id, error: { code, message } }); diff --git a/plugins/trentchou/text-editor/miniapp/node/miniapp-api.ts b/plugins/trentchou/text-editor/miniapp/node/miniapp-api.ts new file mode 100644 index 0000000..7a0e0fd --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/node/miniapp-api.ts @@ -0,0 +1,109 @@ +/** + * Agent-facing Mini App runtime authoring declarations. + * + * Copy this file into a generated plugin for type checking. It contains no Host implementation; + * the Host injects runtime values through start(context). + * Keep the .ts filename: Electron packaging excludes .d.ts files from dependency assets. + */ +export type JsonPrimitive = null | boolean | number | string; +export type JsonValue = JsonPrimitive | JsonObject | readonly JsonValue[]; +export type JsonObject = { readonly [key: string]: JsonValue }; + +declare const HOST_CONNECTOR_TOOL_REF: unique symbol; +export type HostConnectorToolRef = string & { + readonly [HOST_CONNECTOR_TOOL_REF]: 'HostConnectorToolRef'; +}; + +export interface HostConnectorTool { + readonly toolRef: HostConnectorToolRef; + readonly provider: string; + readonly name: string; + readonly description?: string; + readonly inputSchema: JsonValue; + readonly outputSchema?: JsonValue; +} + +export interface HostConnectorListResult { + readonly tools: readonly HostConnectorTool[]; + readonly partial: boolean; +} + +export interface HostConnectorCallOptions { + readonly signal?: AbortSignal; +} + +export interface HostConnectorCallResult { + readonly invocationId: string; + /** + * Raw provider result; it is not normalized by the Host and may be an object, array, or primitive. + * A single text-block array is one provider shape, not a global Host transport contract. + * Decode only a probe-observed envelope; preserve every other value, including direct strings. + */ + readonly value: JsonValue; +} + +export interface HostConnectorClient { + /** Candidate-safe inventory only; available before and after activation. */ + list(options?: HostConnectorCallOptions): Promise; + /** Activation-only business dispatch; call from request handling, never start(context). */ + call( + toolRef: HostConnectorToolRef, + arguments_: JsonObject, + options?: HostConnectorCallOptions, + ): Promise; +} + +export type HostConnectorErrorDisposition = + | 'not_dispatched' + | 'provider_reported' + | 'unknown_after_dispatch'; + +export type HostConnectorErrorCode = + | 'TOOL_REF_STALE' + | 'SERVICE_RESTARTED' + | 'REQUEST_CANCELLED' + | 'CONNECTOR_TIMEOUT' + | 'INVALID_ARGUMENTS' + | 'CONNECTOR_PROVIDER_ERROR' + | 'CONNECTOR_UNAVAILABLE' + | 'CONNECTOR_OUTCOME_UNKNOWN'; + +export interface HostConnectorError extends Error { + readonly code: HostConnectorErrorCode; + readonly disposition: HostConnectorErrorDisposition; + readonly retryable: boolean; + readonly invocationId?: string; + readonly diagnostic?: { + readonly issues: readonly { + readonly path: string; + readonly constraint: string; + readonly limit?: number; + }[]; + }; +} + +export interface MiniAppLogger { + debug(message: string, fields?: JsonObject): void; + info(message: string, fields?: JsonObject): void; + warn(message: string, fields?: JsonObject): void; + error(message: string, fields?: JsonObject): void; +} + +export interface MiniAppLifecycle { + dispose(): void | Promise; +} + +export interface MiniAppContext { + readonly pluginId: string; + readonly pluginRoot: string; + readonly dataDir: string; + readonly listen: Readonly<{ readonly host: '127.0.0.1'; readonly port: number }>; + readonly signal: AbortSignal; + readonly logger: MiniAppLogger; + readonly hostConnector?: HostConnectorClient; +} + +export interface MiniAppModule { + /** Resolve only after the listener accepts connections and every route is installed. */ + start(context: MiniAppContext): Promise; +} diff --git a/plugins/trentchou/text-editor/miniapp/node/server.mjs b/plugins/trentchou/text-editor/miniapp/node/server.mjs new file mode 100644 index 0000000..4b819f2 --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/node/server.mjs @@ -0,0 +1,303 @@ +// @ts-check +// Node entry of the text editor Mini App: static Client, JSON API, SSE events and the MCP endpoint. +import { readFile } from 'node:fs/promises'; +import { createServer } from 'node:http'; +import { extname, join, normalize, sep } from 'node:path'; +import { EditorError, EditorService, FOLLOW_WINDOW_MS, mapFsError, MAX_FILE_BYTES } from './editor-service.mjs'; +import { createMcpHandler } from './mcp.mjs'; + +/** @typedef {import('./miniapp-api.js').MiniAppContext} MiniAppContext */ +/** @typedef {import('./miniapp-api.js').MiniAppLifecycle} MiniAppLifecycle */ + +const VERSION = '1.3.1'; +const SURFACE_PATH = '/editor'; +const MCP_PATH = '/mcp/editor'; +const SMALL_BODY = 1024 * 1024; +const LARGE_BODY = MAX_FILE_BYTES * 2 + SMALL_BODY; +const CONTENT_TYPES = { + '.html': 'text/html; charset=utf-8', + '.js': 'text/javascript; charset=utf-8', + '.css': 'text/css; charset=utf-8', + '.txt': 'text/plain; charset=utf-8', + '.svg': 'image/svg+xml', + '.png': 'image/png', + '.woff2': 'font/woff2', +}; + +/** + * @param {MiniAppContext} context + * @returns {Promise} + */ +export async function start(context) { + const clientDir = join(context.pluginRoot, 'miniapp/client'); + const service = new EditorService({ dataDir: context.dataDir, pluginId: context.pluginId, logger: context.logger, signal: context.signal }); + await service.init(); + const handleMcp = createMcpHandler(service, 'text-editor', { version: VERSION }); + + /** @type {Set} */ + const pages = new Set(); + const unsubscribe = service.subscribe((event) => { + const frame = `data: ${JSON.stringify(event)}\n\n`; + for (const page of pages) page.write(frame); + }); + const allowedHosts = new Set([`127.0.0.1:${context.listen.port}`, `localhost:${context.listen.port}`]); + + /** @param {import('node:http').IncomingMessage} req */ + function crossSite(req) { + const site = req.headers['sec-fetch-site']; + if (site && site !== 'same-origin' && site !== 'none') return true; + const host = req.headers.host; + return !!host && !allowedHosts.has(host); + } + + /** Browsers always send Origin; reject MCP calls coming from any other web page. @param {string|undefined} origin */ + function foreignOrigin(origin) { + if (!origin) return false; + try { + return !allowedHosts.has(new URL(origin).host); + } catch { + return true; + } + } + + + /** @param {import('node:http').IncomingMessage} req @param {import('node:http').ServerResponse} res */ + async function route(req, res) { + const url = new URL(req.url ?? '/', 'http://editor.local'); + const { pathname } = url; + const method = req.method ?? 'GET'; + + if (method === 'GET' && (pathname === '/' || pathname === SURFACE_PATH)) { + if (pathname === '/') { + res.writeHead(302, { location: `${SURFACE_PATH}${url.search}` }); + res.end(); + return; + } + service.pageOpenedAt = Date.now(); + await service.followWorkspace().catch(() => undefined); + return sendFile(res, join(clientDir, 'index.html')); + } + if (method === 'GET' && pathname.startsWith('/static/')) { + let rel; + try { + rel = normalize(decodeURIComponent(pathname.slice('/static/'.length))); + } catch { + throw new EditorError('NOT_FOUND', '资源不存在', 404); + } + const file = join(clientDir, rel); + if (rel.startsWith('..') || !file.startsWith(clientDir + sep)) throw new EditorError('NOT_FOUND', '资源不存在', 404); + return sendFile(res, file); + } + + if (pathname === MCP_PATH) { + if (crossSite(req) || foreignOrigin(req.headers.origin)) throw new EditorError('FORBIDDEN', 'Forbidden', 403); + if (method !== 'POST') { + res.writeHead(405, { allow: 'POST' }); + res.end(); + return; + } + const result = await handleMcp(await readJson(req, LARGE_BODY)); + if (result.status === 202) { + res.writeHead(202); + res.end(); + return; + } + return sendJson(res, result.status, result.payload); + } + + if (!pathname.startsWith('/api/')) throw new EditorError('NOT_FOUND', '页面不存在', 404); + if (crossSite(req)) throw new EditorError('FORBIDDEN', '拒绝跨站请求', 403); + + if (method === 'GET') { + switch (pathname) { + case '/api/events': + return openEvents(req, res); + case '/api/state': + return sendJson(res, 200, service.snapshot()); + case '/api/list': + return sendJson(res, 200, await service.listDir(url.searchParams.get('path'))); + case '/api/quick-open': + return sendJson(res, 200, await service.fileIndex(url.searchParams.get('folder'))); + case '/api/doc/pull': + return sendJson(res, 200, service.pullUpdates(url.searchParams.get('path'), Number(url.searchParams.get('version')))); + case '/api/highlights': + return sendJson(res, 200, service.highlightsPayload(url.searchParams.get('path'))); + default: + throw new EditorError('NOT_FOUND', '接口不存在', 404); + } + } + if (method !== 'POST') throw new EditorError('METHOD', '不支持的请求方法', 405); + if (!String(req.headers['content-type'] ?? '').startsWith('application/json')) { + throw new EditorError('UNSUPPORTED', '请求必须是 JSON', 415); + } + const large = pathname === '/api/doc/push' || pathname === '/api/fs/create'; + const body = await readJson(req, large ? LARGE_BODY : SMALL_BODY); + switch (pathname) { + case '/api/folders/add': + return sendJson(res, 200, await service.addFolder(body.path, { top: body.top === true })); + case '/api/folders/remove': + await service.removeFolder(body.path); + return sendJson(res, 200, { ok: true }); + case '/api/doc/open': { + const doc = await service.openDoc(body.path, { tab: body.tab !== false, focus: body.focus === true }); + return sendJson(res, 200, service.docPayload(doc)); + } + case '/api/doc/push': + return sendJson(res, 200, service.pushUpdates(body.path, body.version, body.updates)); + case '/api/doc/save': + return sendJson(res, 200, await service.saveDoc(body.path, { overwrite: body.overwrite === true })); + case '/api/doc/revert': + await service.revertDoc(body.path); + return sendJson(res, 200, { ok: true }); + case '/api/tabs/activate': + await service.activateTab(body.path); + return sendJson(res, 200, { ok: true }); + case '/api/tabs/close': + await service.closeTab(body.path, { discard: body.discard === true }); + return sendJson(res, 200, { ok: true }); + case '/api/fs/create': + return sendJson(res, 200, await service.createEntry({ + dir: body.dir, name: body.name, kind: body.kind, content: body.content ?? '', + unique: body.unique === true, open: body.open !== false, focus: body.focus !== false, + })); + case '/api/settings': + return sendJson(res, 200, await service.updateSettings(body.patch)); + case '/api/highlights/remove': + return sendJson(res, 200, { removed: service.clearHighlights(body) }); + case '/api/view': + service.setView(body); + return sendJson(res, 200, { ok: true }); + default: + throw new EditorError('NOT_FOUND', '接口不存在', 404); + } + } + + /** @param {import('node:http').IncomingMessage} req @param {import('node:http').ServerResponse} res */ + function openEvents(req, res) { + res.writeHead(200, { + 'content-type': 'text/event-stream; charset=utf-8', + 'cache-control': 'no-cache, no-transform', + connection: 'keep-alive', + }); + res.write('retry: 2000\n\n'); + res.write(`data: ${JSON.stringify({ type: 'hello' })}\n\n`); + res.write(`data: ${JSON.stringify({ type: 'state', state: service.snapshot() })}\n\n`); + pages.add(res); + service.pageCount = pages.size; + req.on('close', () => { + pages.delete(res); + service.pageCount = pages.size; + }); + } + + const server = createServer((req, res) => { + route(req, res).catch((raw) => { + const error = mapFsError(raw); + if (res.headersSent) { + res.destroy(); + return; + } + if (error instanceof EditorError) { + sendJson(res, error.status, { error: { code: error.code, message: error.message, ...(error.extra ? { extra: error.extra } : {}) } }); + return; + } + context.logger.error('editor.request.failed', { code: String(error?.code ?? error?.name ?? 'unknown') }); + sendJson(res, 500, { error: { code: 'INTERNAL', message: '编辑器服务内部错误' } }); + }); + }); + + await new Promise((resolve, reject) => { + const onError = (/** @type {Error} */ error) => reject(error); + server.once('error', onError); + server.listen(context.listen.port, context.listen.host, () => { + server.off('error', onError); + resolve(undefined); + }); + }); + + const pollTimer = setInterval(() => { + service.pollDisk().catch((error) => context.logger.warn('editor.poll.failed', { code: String(error?.code ?? 'unknown') })); + if (Date.now() - service.pageOpenedAt < FOLLOW_WINDOW_MS) service.followWorkspace().catch(() => undefined); + }, 1500); + const keepAlive = setInterval(() => { + for (const page of pages) page.write(': keep-alive\n\n'); + }, 20_000); + context.logger.info('editor.runtime.listening'); + + /** @type {Promise|undefined} */ + let disposal; + const dispose = () => { + if (disposal) return disposal; + context.signal.removeEventListener('abort', onAbort); + disposal = (async () => { + clearInterval(pollTimer); + clearInterval(keepAlive); + unsubscribe(); + for (const page of pages) page.end(); + pages.clear(); + await service.flushAll().catch(() => undefined); + await new Promise((resolve) => { + server.close(() => resolve(undefined)); + server.closeAllConnections(); + }); + })(); + return disposal; + }; + const onAbort = () => { + void dispose().catch(() => undefined); + }; + context.signal.addEventListener('abort', onAbort, { once: true }); + if (context.signal.aborted) await dispose(); + + return { dispose }; +} + +/** @param {import('node:http').ServerResponse} res @param {number} status @param {unknown} payload */ +function sendJson(res, status, payload) { + const body = JSON.stringify(payload); + res.writeHead(status, { 'content-type': 'application/json; charset=utf-8', 'cache-control': 'no-store' }); + res.end(body); +} + +/** @param {import('node:http').ServerResponse} res @param {string} file */ +async function sendFile(res, file) { + const data = await readFile(file).catch(() => { + throw new EditorError('NOT_FOUND', '资源不存在', 404); + }); + const type = CONTENT_TYPES[/** @type {keyof typeof CONTENT_TYPES} */ (extname(file))] ?? 'application/octet-stream'; + res.writeHead(200, { 'content-type': type, 'cache-control': 'no-cache', 'x-content-type-options': 'nosniff' }); + res.end(data); +} + +/** @param {import('node:http').IncomingMessage} req @param {number} limit @returns {Promise} */ +function readJson(req, limit) { + return new Promise((resolve, reject) => { + let size = 0; + /** @type {Buffer[]} */ + const chunks = []; + let failed = false; + req.on('data', (chunk) => { + if (failed) return; + size += chunk.length; + if (size > limit) { + failed = true; + reject(new EditorError('TOO_LARGE', '请求内容过大', 413)); + req.resume(); + return; + } + chunks.push(chunk); + }); + req.on('end', () => { + if (failed) return; + try { + const raw = Buffer.concat(chunks).toString('utf8'); + resolve(raw ? JSON.parse(raw) : {}); + } catch { + reject(new EditorError('BAD_JSON', '请求格式错误', 400)); + } + }); + req.on('error', (error) => { + if (!failed) reject(error); + }); + }); +} diff --git a/plugins/trentchou/text-editor/miniapp/node/vendor/THIRD_PARTY_LICENSES.txt b/plugins/trentchou/text-editor/miniapp/node/vendor/THIRD_PARTY_LICENSES.txt new file mode 100644 index 0000000..89af3e4 --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/node/vendor/THIRD_PARTY_LICENSES.txt @@ -0,0 +1,1034 @@ +Third-party software bundled in vendor/codemirror.js and vendor/cm-state.mjs + +==== @codemirror/autocomplete@6.20.3 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/collab@6.1.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/commands@6.11.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-cpp@6.0.3 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-css@6.3.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-go@6.0.1 (MIT) +MIT License + +Copyright (C) 2024 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-html@6.4.12 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-java@6.0.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-javascript@6.2.5 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-json@6.0.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-markdown@6.5.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-php@6.0.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-python@6.2.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-rust@6.0.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-sql@6.10.0 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-xml@6.1.0 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lang-yaml@6.1.3 (MIT) +MIT License + +Copyright (C) 2024 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/language@6.13.1 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/legacy-modes@6.5.5 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/lint@6.9.7 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/search@6.7.2 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/state@6.7.6 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/streamparser@6.0.0 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @codemirror/view@6.43.14 (MIT) +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/common@1.5.3 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/cpp@1.1.6 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/css@1.3.9 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/go@1.0.1 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/highlight@1.2.5 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/html@1.3.13 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/java@1.1.5 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/javascript@1.5.6 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/json@1.0.3 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke , Arun Srinivasan , and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/lr@1.4.11 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/markdown@1.8.0 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/php@1.0.6 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/python@1.1.19 (MIT) +MIT License + +Copyright (C) 2020 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/rust@1.0.3 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/xml@1.0.6 (MIT) +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @lezer/yaml@1.0.4 (MIT) +MIT License + +Copyright (C) 2024 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @marijn/find-cluster-break@1.0.4 (MIT) +MIT License + +Copyright (C) 2024 by Marijn Haverbeke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== @replit/codemirror-indentation-markers@6.5.3 (MIT) +MIT License + +Copyright (c) 2022 Replit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +==== @replit/codemirror-minimap@0.5.2 (MIT) +License: MIT + +==== crelt@1.0.7 (MIT) +Copyright (C) 2020 by Marijn Haverbeke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== style-mod@4.1.4 (MIT) +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +==== w3c-keyname@2.2.8 (MIT) +Copyright (C) 2016 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/plugins/trentchou/text-editor/miniapp/node/vendor/cm-state.mjs b/plugins/trentchou/text-editor/miniapp/node/vendor/cm-state.mjs new file mode 100644 index 0000000..eec3d0c --- /dev/null +++ b/plugins/trentchou/text-editor/miniapp/node/vendor/cm-state.mjs @@ -0,0 +1,6 @@ +/*! Vendored CodeMirror 6 bundle (MIT). See THIRD_PARTY_LICENSES.txt. */ +var ae=[],Re=[];(()=>{let s="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,1n,9,16,o,,x,1i,3,,i,,7,a,2,t,3,1k,,,7,2,2,2,3,9,,a,2,q,,2,3,1k,,,5,4,2,2,3,3,,u,2,3,,b,3,1k,,,8,,3,,3,k,2,m,6,,3,1k,,,7,2,2,2,3,7,3,a,2,u,,1n,5,3,3,,4,9,,14,5,1j,,,7,,3,,4,7,2,b,2,t,3,1k,,,7,,3,,4,7,2,b,2,f,,c,4,1j,2,,7,,3,,4,9,,a,2,t,3,1y,,4,6,,,,8,i,2,1p,,,8,c,8,2q,,,a,b,7,21,2,r,,,,,,4,2,1d,k,,2,5,b,,10,9,,2u,b,,6,n,4,4,3,g,4,d,,,3,6,,f,,jj,3,qa,4,s,3,t,2,u,2,1s,w,9,,19,3,,,39,2,y,,3a,c,4,c,63,5,1l,a,,,,,2,o,2,,1c,1a,2,c,k,5,1b,h,12,9,c,3,u,d,1k,e,1c,k,48,3,,l,4,,6,,2,3,5i,1s,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,n,5,4,,2b,2,1e,i,q,i,d,,12,8,p,d,18,4,1b,e,10,,1v,e,c,,8,2,1a,,1f,,,3,2,2,5,2,,,15,5,5,2,6k,8,,2,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,1t,5,8t,2,25,6,1y,b,1d,4,3e,3,1h,f,15,,2,2,a,4,19,b,7,,1p,3,10,e,g,2,18,,c,3,1c,e,8,4,,2,2k,c,6,,2,,4d,c,l,4,1j,2,,7,2,2,2,3,9,,a,2,2,7,3,5,1v,9,,,2,,,4,,5,,,e,2,2a,i,n,,29,k,6j,7,2,9,r,2,2a,h,2y,d,2t,3,2,a,74,f,6t,6,,2,2,4,,,,2,3x,7,2,7,3,,s,a,14,7,,4,8,,9,b,1a,g,5i,8,5j,8,,8,2a,m,,e,3e,6,3,,,2,,7,,,1u,5,,2,,5,9n,4,9,2,,,1c,7,3,5,n,,44l,,6,f,8ug,i,1xc,5,1n,7,t4,,,1j,7,4,29,,b,2,f57,2,3mp,1a,2,n,f2,5,3,6,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,2s,,4g,7,af,,1p,4,e4,4,72,2,6r,,2,,7,2,5,,d6,7,31,7,240,5".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(s=Re[n])e=n+1;else return!0;if(e==t)return!1}}function be(s){return s>=127462&&s<=127487}var Ce=8205;function Te(s,e,t=!0,n=!0){return(t?Me:Ye)(s,e,n)}function Me(s,e,t){if(e==s.length)return e;e&&Be(s.charCodeAt(e))&&Fe(s.charCodeAt(e-1))&&e--;let n=oe(s,e);for(e+=Oe(n);e=0&&be(oe(s,l));)r++,l-=2;if(r%2==0)break;e+=2}else break}return e}function Ye(s,e,t){for(;e>1;){let n=Me(s,e-2,t);if(n=56320&&s<57344}function Fe(s){return s>=55296&&s<56320}function Oe(s){return s<65536?1:2}var w=class s{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){[e,t]=q(this,e,t);let i=[];return this.decompose(0,e,i,2),n.length&&n.decompose(0,n.length,i,3),this.decompose(t,this.length,i,1),V.from(i,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=q(this,e,t);let n=[];return this.decompose(e,t,n,0),V.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),i=new F(this),r=new F(e);for(let l=t,h=t;;){if(i.next(l),r.next(l),l=0,i.lineBreak!=r.lineBreak||i.done!=r.done||i.value!=r.value)return!1;if(h+=i.value.length,i.done||h>=n)return!0}}iter(e=1){return new F(this,e)}iterRange(e,t=this.length){return new te(this,e,t)}iterLines(e,t){let n;if(e==null)n=this.iter();else{t==null&&(t=this.lines+1);let i=this.line(e).from;n=this.iterRange(i,Math.max(i,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new ne(n)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?s.empty:e.length<=32?new S(e):V.from(S.split(e,[]))}},S=class s extends w{constructor(e,t=_e(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,n,i){for(let r=0;;r++){let l=this.text[r],h=i+l.length;if((t?n:h)>=e)return new ue(i,h,n,l);i=h+1,n++}}decompose(e,t,n,i){let r=e<=0&&t>=this.length?this:new s(Le(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(i&1){let l=n.pop(),h=ee(r.text,l.text.slice(),0,r.length);if(h.length<=32)n.push(new s(h,l.length+r.length));else{let o=h.length>>1;n.push(new s(h.slice(0,o)),new s(h.slice(o)))}}else n.push(r)}replace(e,t,n){if(!(n instanceof s))return super.replace(e,t,n);[e,t]=q(this,e,t);let i=ee(this.text,ee(n.text,Le(this.text,0,e)),t),r=this.length+n.length-(t-e);return i.length<=32?new s(i,r):V.from(s.split(i,[]),r)}sliceString(e,t=this.length,n=` +`){[e,t]=q(this,e,t);let i="";for(let r=0,l=0;r<=t&&le&&l&&(i+=n),er&&(i+=h.slice(Math.max(0,e-r),t-r)),r=o+1}return i}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let n=[],i=-1;for(let r of e)n.push(r),i+=r.length+1,n.length==32&&(t.push(new s(n,i)),n=[],i=-1);return i>-1&&t.push(new s(n,i)),t}},V=class s extends w{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let n of e)this.lines+=n.lines}lineInner(e,t,n,i){for(let r=0;;r++){let l=this.children[r],h=i+l.length,o=n+l.lines-1;if((t?o:h)>=e)return l.lineInner(e,t,n,i);i=h+1,n=o+1}}decompose(e,t,n,i){for(let r=0,l=0;l<=t&&r=l){let a=i&((l<=e?1:0)|(o>=t?2:0));l>=e&&o<=t&&!a?n.push(h):h.decompose(e-l,t-l,n,a)}l=o+1}}replace(e,t,n){if([e,t]=q(this,e,t),n.lines=r&&t<=h){let o=l.replace(e-r,t-r,n),a=this.lines-l.lines+o.lines;if(o.lines
    >4&&o.lines>a>>6){let f=this.children.slice();return f[i]=o,new s(f,this.length-(t-e)+n.length)}return super.replace(r,h,o)}r=h+1}return super.replace(e,t,n)}sliceString(e,t=this.length,n=` +`){[e,t]=q(this,e,t);let i="";for(let r=0,l=0;re&&r&&(i+=n),el&&(i+=h.sliceString(e-l,t-l,n)),l=o+1}return i}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof s))return 0;let n=0,[i,r,l,h]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;i+=t,r+=t){if(i==l||r==h)return n;let o=this.children[i],a=e.children[r];if(o!=a)return n+o.scanIdentical(a,t);n+=o.length+1}}static from(e,t=e.reduce((n,i)=>n+i.length+1,-1)){let n=0;for(let d of e)n+=d.lines;if(n<32){let d=[];for(let g of e)g.flatten(d);return new S(d,t)}let i=Math.max(32,n>>5),r=i<<1,l=i>>1,h=[],o=0,a=-1,f=[];function u(d){let g;if(d.lines>r&&d instanceof s)for(let m of d.children)u(m);else d.lines>l&&(o>l||!o)?(c(),h.push(d)):d instanceof S&&o&&(g=f[f.length-1])instanceof S&&d.lines+g.lines<=32?(o+=d.lines,a+=d.length+1,f[f.length-1]=new S(g.text.concat(d.text),g.length+1+d.length)):(o+d.lines>i&&c(),o+=d.lines,a+=d.length+1,f.push(d))}function c(){o!=0&&(h.push(f.length==1?f[0]:s.from(f,a)),a=-1,o=f.length=0)}for(let d of e)u(d);return c(),h.length==1?h[0]:new s(h,t)}};w.empty=new S([""],0);function _e(s){let e=-1;for(let t of s)e+=t.length+1;return e}function ee(s,e,t=0,n=1e9){for(let i=0,r=0,l=!0;r=t&&(o>n&&(h=h.slice(0,n-i)),i0?1:(e instanceof S?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,i=this.nodes[n],r=this.offsets[n],l=r>>1,h=i instanceof S?i.text.length:i.children.length;if(l==(t>0?h:0)){if(n==0)return this.done=!0,this.value="",this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[n]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(i instanceof S){let o=i.text[l+(t<0?-1:0)];if(this.offsets[n]+=t,o.length>Math.max(0,e))return this.value=e==0?o:t>0?o.slice(e):o.slice(0,o.length-e),this;e-=o.length}else{let o=i.children[l+(t<0?-1:0)];e>o.length?(e-=o.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(o),this.offsets.push(t>0?1:(o instanceof S?o.text.length:o.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},te=class{constructor(e,t,n){this.value="",this.done=!1,this.cursor=new F(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;let{value:i}=this.cursor.next(e);return this.pos+=(i.length+e)*t,this.value=i.length<=n?i:t<0?i.slice(i.length-n):i.slice(0,n),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},ne=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:n,value:i}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):n?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=i,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(w.prototype[Symbol.iterator]=function(){return this.iter()},F.prototype[Symbol.iterator]=te.prototype[Symbol.iterator]=ne.prototype[Symbol.iterator]=function(){return this});var ue=class{constructor(e,t,n,i){this.from=e,this.to=t,this.number=n,this.text=i}get length(){return this.to-this.from}};function q(s,e,t){return e=Math.max(0,Math.min(s.length,e)),[e,Math.max(e,Math.min(s.length,t))]}function De(s,e,t=!0,n=!0){return Te(s,e,t,n)}var ce=/\r\n?|\n/,b=(function(s){return s[s.Simple=0]="Simple",s[s.TrackDel=1]="TrackDel",s[s.TrackBefore=2]="TrackBefore",s[s.TrackAfter=3]="TrackAfter",s})(b||(b={})),L=class s{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-i);r+=h}else{if(n!=b.Simple&&a>=e&&(n==b.TrackDel&&ie||n==b.TrackBefore&&ie))return null;if(a>e||a==e&&t<0&&!h)return e==i||t<0?r:r+o;r+=o}i=a}if(e>i)throw new RangeError(`Position ${e} is out of range for changeset of length ${i}`);return r}touchesRange(e,t=e){for(let n=0,i=0;n=0&&i<=t&&h>=e)return it?"cover":!0;i=h}return!1}toString(){let e="";for(let t=0;t=0?":"+i:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new s(e)}static create(e){return new s(e)}},P=class s extends L{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return de(this,(t,n,i,r,l)=>e=e.replace(i,i+(n-t),l),!1),e}mapDesc(e,t=!1){return ge(this,e,t,!0)}invert(e){let t=this.sections.slice(),n=[];for(let i=0,r=0;i=0){t[i]=h,t[i+1]=l;let o=i>>1;for(;n.length0&&C(n,t,r.text),r.forward(f),h+=f}let a=e[l++];for(;h>1].toJSON()))}return e}static of(e,t,n){let i=[],r=[],l=0,h=null;function o(f=!1){if(!f&&!i.length)return;lc||u<0||c>t)throw new RangeError(`Invalid change range ${u} to ${c} (in doc of length ${t})`);let g=d?typeof d=="string"?w.of(d.split(n||ce)):d:w.empty,m=g.length;if(u==c&&m==0)return;ul&&x(i,u-l,-1),x(i,c-u,m),C(r,i,g),l=c}}return a(e),o(!h),h}static empty(e){return new s(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],n=[];for(let i=0;ih&&typeof l!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;n.length=0&&t<=0&&t==s[i+1]?s[i]+=e:i>=0&&e==0&&s[i]==0?s[i+1]+=t:n?(s[i]+=e,s[i+1]+=t):s.push(e,t)}function C(s,e,t){if(t.length==0)return;let n=e.length-2>>1;if(n>1])),!(t||l==s.sections.length||s.sections[l+1]<0);)h=s.sections[l++],o=s.sections[l++];e(i,a,r,f,u),i=a,r=f}}}function ge(s,e,t,n=!1){let i=[],r=n?[]:null,l=new D(s),h=new D(e);for(let o=-1;;){if(l.done&&h.len||h.done&&l.len)throw new Error("Mismatched change set lengths");if(l.ins==-1&&h.ins==-1){let a=Math.min(l.len,h.len);x(i,a,-1),l.forward(a),h.forward(a)}else if(h.ins>=0&&(l.ins<0||o==l.i||l.off==0&&(h.len=0&&o=0){let a=0,f=l.len;for(;f;)if(h.ins==-1){let u=Math.min(f,h.len);a+=u,f-=u,h.forward(u)}else if(h.ins==0&&h.leno||l.ins>=0&&l.len>o)&&(h||n.length>a),r.forward2(o),l.forward(o)}}}}var D=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?w.empty:e[t]}textBit(e){let{inserted:t}=this.set,n=this.i-2>>1;return n>=t.length&&!e?w.empty:t[n].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},T=class s{constructor(e,t,n,i){this.from=e,this.to=t,this.flags=n,this.goalColumn=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let n,i;return this.empty?n=i=e.mapPos(this.from,t):(n=e.mapPos(this.from,1),i=e.mapPos(this.to,-1)),n==this.from&&i==this.to?this:new s(n,i,this.flags,this.goalColumn)}extend(e,t=e,n=0){if(e<=this.anchor&&t>=this.anchor)return y.range(e,t,void 0,void 0,n);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return y.range(this.anchor,i,void 0,void 0,n)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return y.range(e.anchor,e.head)}static create(e,t,n,i){return new s(e,t,n,i)}},y=class s{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:s.create(this.ranges.map(n=>n.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let n=0;ne.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new s(e.ranges.map(t=>T.fromJSON(t)),e.main)}static single(e,t=e){return new s([s.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let n=0,i=0;ii.from-r.from),t=e.indexOf(n);for(let i=1;ir.head?s.range(o,h):s.range(h,o))}}return new s(e,t)}};function qe(s,e){for(let t of s.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}var Ae=0,I=class s{constructor(e,t,n,i,r){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=i,this.id=Ae++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new s(e.combine||(t=>t),e.compareInput||((t,n)=>t===n),e.compare||(e.combine?(t,n)=>t===n:Pe),!!e.static,e.enables)}of(e){return new $([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new $(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new $(e,this,2,t)}from(e,t){return t||(t=n=>n),this.compute([e],n=>t(n.field(e)))}};function Pe(s,e){return s==e||s.length==e.length&&s.every((t,n)=>t===e[n])}var $=class{constructor(e,t,n,i){this.dependencies=e,this.facet=t,this.type=n,this.value=i,this.id=Ae++}dynamicSlot(e){var t;let n=this.value,i=this.facet.compareInput,r=this.id,l=e[r]>>1,h=this.type==2,o=!1,a=!1,f=[];for(let u of this.dependencies)u=="doc"?o=!0:u=="selection"?a=!0:(((t=e[u.id])!==null&&t!==void 0?t:1)&1)==0&&f.push(e[u.id]);return{create(u){return u.values[l]=n(u),1},update(u,c){if(o&&c.docChanged||a&&(c.docChanged||c.selection)||pe(u,f)){let d=n(u);if(h?!Je(d,u.values[l],i):!i(d,u.values[l]))return u.values[l]=d,1}return 0},reconfigure:(u,c)=>{let d,g=c.config.address[r];if(g!=null){let m=le(c,g);if(this.dependencies.every(p=>p instanceof I?c.facet(p)===u.facet(p):p instanceof W?c.field(p,!1)==u.field(p,!1):!0)||(h?Je(d=n(u),m,i):i(d=n(u),m)))return u.values[l]=m,0}else d=n(u);return u.values[l]=d,1}}}get extension(){return this}};function Je(s,e,t){if(s.length!=e.length)return!1;for(let n=0;ns[o.id]),i=t.map(o=>o.type),r=n.filter(o=>!(o&1)),l=s[e.id]>>1;function h(o){let a=[];for(let f=0;fn===i),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(X).find(n=>n.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:n=>(n.values[t]=this.create(n),1),update:(n,i)=>{let r=n.values[t],l=this.updateF(r,i);return this.compareF(r,l)?0:(n.values[t]=l,1)},reconfigure:(n,i)=>{let r=n.facet(X),l=i.facet(X),h;return(h=r.find(o=>o.field==this))&&h!=l.find(o=>o.field==this)?(n.values[t]=h.create(n),1):i.config.address[this.id]!=null?(n.values[t]=i.field(this),0):(n.values[t]=this.create(n),1)}}}init(e){return[this,X.of({field:this,create:e})]}get extension(){return this}},M={lowest:4,low:3,default:2,high:1,highest:0};function U(s){return e=>new ie(e,s)}var ct={highest:U(M.highest),high:U(M.high),default:U(M.default),low:U(M.low),lowest:U(M.lowest)},ie=class{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}},se=class s{of(e){return new Z(this,e)}reconfigure(e){return s.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},Z=class{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}},re=class s{constructor(e,t,n,i,r,l){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=i,this.staticValues=r,this.facets=l,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,n){let i=[],r=Object.create(null),l=new Map;for(let c of tt(e,t,l))c instanceof W?i.push(c):(r[c.facet.id]||(r[c.facet.id]=[])).push(c);let h=Object.create(null),o=[],a=[];for(let c of i)h[c.id]=a.length<<1,a.push(d=>c.slot(d));let f=n?.config.facets;for(let c in r){let d=r[c],g=d[0].facet,m=f&&f[c]||[];if(d.every(p=>p.type==0))if(h[g.id]=o.length<<1|1,Pe(m,d))o.push(n.facet(g));else{let p=g.combine(d.map(v=>v.value));o.push(n&&g.compare(p,n.facet(g))?n.facet(g):p)}else{for(let p of d)p.type==0?(h[p.id]=o.length<<1|1,o.push(p.value)):(h[p.id]=a.length<<1,a.push(v=>p.dynamicSlot(v)));h[g.id]=a.length<<1,a.push(p=>et(p,g,d))}}let u=a.map(c=>c(h));return new s(e,l,u,h,o,r)}};function tt(s,e,t){let n=[[],[],[],[],[]],i=new Map;function r(l,h){let o=i.get(l);if(o!=null){if(o<=h)return;let a=n[o].indexOf(l);a>-1&&n[o].splice(a,1),l instanceof Z&&t.delete(l.compartment)}if(i.set(l,h),Array.isArray(l))for(let a of l)r(a,h);else if(l instanceof Z){if(t.has(l.compartment))throw new RangeError("Duplicate use of compartment in extensions");let a=e.get(l.compartment)||l.inner;t.set(l.compartment,a),r(a,h)}else if(l instanceof ie)r(l.inner,l.prec);else if(l instanceof W)n[h].push(l),l.provides&&r(l.provides,h);else if(l instanceof $)n[h].push(l),l.facet.extensions&&r(l.facet.extensions,M.default);else{let a=l.extension;if(!a)throw new Error(`Unrecognized extension value in extension set (${l}).`);if(a==l)throw new Error(`Unrecognized extension value in extension set (${l}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(a,h)}}return r(s,M.default),n.reduce((l,h)=>l.concat(h))}function G(s,e){if(e&1)return 2;let t=e>>1,n=s.status[t];if(n==4)throw new Error("Cyclic dependency between fields and/or facets");if(n&2)return n;s.status[t]=4;let i=s.computeSlot(s,s.config.dynamicSlots[t]);return s.status[t]=2|i}function le(s,e){return e&1?s.config.staticValues[e>>1]:s.values[e>>1]}var We=I.define(),me=I.define({combine:s=>s.some(e=>e),static:!0}),je=I.define({combine:s=>s.length?s[0]:void 0,static:!0}),Ue=I.define(),Ge=I.define(),He=I.define(),Ze=I.define({combine:s=>s.length?s[0]:!1}),J=class{constructor(e,t){this.type=e,this.value=t}static define(){return new we}},we=class{of(e){return new J(this,e)}},ve=class{constructor(e){this.map=e}of(e){return new k(this,e)}},k=class s{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new s(this.type,t)}is(e){return this.type==e}static define(e={}){return new ve(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let n=[];for(let i of e){let r=i.map(t);r&&n.push(r)}return n}};k.reconfigure=k.define();k.appendConfig=k.define();var A=class s{constructor(e,t,n,i,r,l){this.startState=e,this.changes=t,this.selection=n,this.effects=i,this.annotations=r,this.scrollIntoView=l,this._doc=null,this._state=null,n&&qe(n,t.newLength),r.some(h=>h.type==s.time)||(this.annotations=r.concat(s.time.of(Date.now())))}static create(e,t,n,i,r,l){return new s(e,t,n,i,r,l)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(s.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}};A.time=J.define();A.userEvent=J.define();A.addToHistory=J.define();A.remote=J.define();function nt(s,e){let t=[];for(let n=0,i=0;;){let r,l;if(n=s[n]))r=s[n++],l=s[n++];else if(i=0;i--){let r=n[i](s);r instanceof A?s=r:Array.isArray(r)&&r.length==1&&r[0]instanceof A?s=r[0]:s=Qe(e,z(r),!1)}return s}function st(s){let e=s.startState,t=e.facet(He),n=s;for(let i=t.length-1;i>=0;i--){let r=t[i](s);r&&Object.keys(r).length&&(n=Ke(n,xe(e,r,s.changes.newLength),!0))}return n==s?s:A.create(e,s.changes,s.selection,n.effects,n.annotations,n.scrollIntoView)}var rt=[];function z(s){return s==null?rt:Array.isArray(s)?s:[s]}var O=(function(s){return s[s.Word=0]="Word",s[s.Space=1]="Space",s[s.Other=2]="Other",s})(O||(O={})),lt=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,ke;try{ke=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function ht(s){if(ke)return ke.test(s);for(let e=0;e"\x80"&&(t.toUpperCase()!=t.toLowerCase()||lt.test(t)))return!0}return!1}function ot(s){return e=>{if(!/\S/.test(e))return O.Space;if(ht(e))return O.Word;for(let t=0;t-1)return O.Word;return O.Other}}var E=class s{constructor(e,t,n,i,r,l){this.config=e,this.doc=t,this.selection=n,this.values=i,this.status=e.statusTemplate.slice(),this.computeSlot=r,l&&(l._state=this);for(let h=0;hi.set(a,o)),t=null),i.set(h.value.compartment,h.value.extension)):h.is(k.reconfigure)?(t=null,n=h.value):h.is(k.appendConfig)&&(t=null,n=z(n).concat(h.value));let r;t?r=e.startState.values.slice():(t=re.resolve(n,i,this),r=new s(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(o,a)=>a.reconfigure(o,this),null).values);let l=e.startState.facet(me)?e.newSelection:e.newSelection.asSingle();new s(t,e.newDoc,l,r,(h,o)=>o.update(h,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:y.cursor(t.from+e.length,-1)}))}changeByRange(e){let t=this.selection,n=e(t.ranges[0]),i=this.changes(n.changes),r=[n.range],l=z(n.effects);for(let h=1;hl.spec.fromJSON(h,o)))}}return s.create({doc:e.doc,selection:y.fromJSON(e.selection),extensions:t.extensions?i.concat([t.extensions]):i})}static create(e={}){let t=re.resolve(e.extensions||[],new Map),n=e.doc instanceof w?e.doc:w.of((e.doc||"").split(t.staticFacet(s.lineSeparator)||ce)),i=e.selection?e.selection instanceof y?e.selection:y.single(e.selection.anchor,e.selection.head):y.single(0);return qe(i,n.length),t.staticFacet(me)||(i=i.asSingle()),new s(t,n,i,t.dynamicSlots.map(()=>null),(r,l)=>l.create(r),null)}get tabSize(){return this.facet(s.tabSize)}get lineBreak(){return this.facet(s.lineSeparator)||` +`}get readOnly(){return this.facet(Ze)}phrase(e,...t){for(let n of this.facet(s.phrases))if(Object.prototype.hasOwnProperty.call(n,e)){e=n[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(n,i)=>{if(i=="$")return"$";let r=+(i||1);return!r||r>t.length?n:t[r-1]})),e}languageDataAt(e,t,n=-1){let i=[];for(let r of this.facet(We))for(let l of r(this,t,n))Object.prototype.hasOwnProperty.call(l,e)&&i.push(l[e]);return i}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return ot(t.length?t[0]:"")}wordAt(e){let{text:t,from:n,length:i}=this.doc.lineAt(e),r=this.charCategorizer(e),l=e-n,h=e-n;for(;l>0;){let o=De(t,l,!1);if(r(t.slice(o,l))!=O.Word)break;l=o}for(;hs.length?s[0]:4});E.lineSeparator=je;E.readOnly=Ze;E.phrases=I.define({compare(s,e){let t=Object.keys(s),n=Object.keys(e);return t.length==n.length&&t.every(i=>s[i]==e[i])}});E.languageData=We;E.changeFilter=Ue;E.transactionFilter=Ge;E.transactionExtender=He;se.reconfigure=k.define();var j=class{eq(e){return this==e}range(e,t=e){return K.create(e,t,this)}};j.prototype.startSide=j.prototype.endSide=0;j.prototype.point=!1;j.prototype.mapMode=b.TrackDel;function Ee(s,e){return s==e||s.constructor==e.constructor&&s.eq(e)}var K=class s{constructor(e,t,n){this.from=e,this.to=t,this.value=n}static create(e,t,n){return new s(e,t,n)}};function ye(s,e){return s.from-e.from||s.value.startSide-e.value.startSide}var Se=class s{constructor(e,t,n,i){this.from=e,this.to=t,this.value=n,this.maxPoint=i}get length(){return N(this.to)}findIndex(e,t,n,i=0){let r=n?this.to:this.from;for(let l=i,h=r.length;;){if(l==h)return l;let o=l+h>>1,a=r[o]-e||(n?this.value[o].endSide:this.value[o].startSide)-t;if(o==l)return a>=0?l:h;a>=0?h=o:l=o+1}}between(e,t,n,i){for(let r=this.findIndex(t,-1e9,!0),l=this.findIndex(n,1e9,!1,r);rp||m==p&&c.startSide>0&&c.endSide<=0)continue;if(!((p-m||c.endSide-c.startSide)<0))if(a<0&&(a=m),c.point&&(f=Math.max(f,p-m)),(m-n||c.startSide-i)>=0)l.push(c),h.push(m-a),o.push(p-a),n=p,i=c.endSide;else{if(m==p)for(let v=l.length;v>0;v--){if((m-(o[v-1]+a)||c.startSide-l[v-1].endSide)>=0){l.splice(v,0,c),h.splice(v,0,m-a),o.splice(v,0,p-a);continue e}if((m-(h[v-1]+a)||c.endSide-l[v-1].startSide)>0)break}r(m,p,c)}}return{mapped:l.length?new s(h,o,l,f):null,pos:a}}},R=class s{constructor(e,t,n,i){this.chunkPos=e,this.chunk=t,this.nextLayer=n,this.maxPoint=i}static create(e,t,n,i){return new s(e,t,n,i)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:n=!1,filterFrom:i=0,filterTo:r=this.length}=e,l=e.filter;if(t.length==0&&!l)return this;if(n&&(t=t.slice().sort(ye)),this.isEmpty)return t.length?s.of(t):this;let h=new he(this,null,-1).goto(0),o=0,a=[],f=new H;for(;h.value||o=0){let u=t[o++];f.addInner(u.from,u.to,u.value,!1)||a.push(u)}else h.rangeIndex==1&&h.chunkIndexthis.chunkEnd(h.chunkIndex)||rh.to||r{r||(r=new H),r.addRange(o,a,f,!1)};for(let o=0;o=r&&e<=r+l.length&&l.between(r,e-r,t-r,n)===!1)return}this.nextLayer.between(e,t,n)}}iter(e=0){return Q.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Q.from(e).goto(t)}static compare(e,t,n,i,r=-1){let l=e.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=r),h=t.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=r),o=Ne(l,h,n),a=new B(l,o,r),f=new B(h,o,r);n.iterGaps((u,c,d)=>Ve(a,u,f,c,d,i)),n.empty&&n.length==0&&Ve(a,0,f,0,0,i)}static eq(e,t,n=0,i){i==null&&(i=999999999);let r=e.filter(f=>!f.isEmpty&&t.indexOf(f)<0),l=t.filter(f=>!f.isEmpty&&e.indexOf(f)<0);if(r.length!=l.length)return!1;if(!r.length)return!0;let h=Ne(r,l),o=new B(r,h,0).goto(n),a=new B(l,h,0).goto(n);for(;;){if(o.to!=a.to||!Ie(o.active,a.active)||o.point&&(!a.point||!Ee(o.point,a.point)))return!1;if(o.to>i)return!0;o.next(),a.next()}}static spans(e,t,n,i,r=-1){let l=new B(e,null,r).goto(t),h=t,o=l.openStart;for(;;){let a=Math.min(l.to,n);if(l.point){let f=l.activeForPoint(l.to),u=l.pointFromh&&(i.span(h,a,l.active,o),o=l.openEnd(a));if(l.to>n)return o+(l.point&&l.to>n?1:0);h=l.to,l.next()}}static of(e,t=!1){let n=new H;for(let i of e instanceof K?[e]:t?at(e):e)n.add(i.from,i.to,i.value);return n.finish()}static join(e){if(!e.length)return s.empty;let t=N(e);for(let n=e.length-2;n>=0;n--)for(let i=e[n];i!=s.empty;i=i.nextLayer)t=new s(i.chunkPos,i.chunk,t,Math.max(i.maxPoint,t.maxPoint));return t}};R.empty=new R([],[],null,-1);function N(s){return s[s.length-1]}function at(s){if(s.length>1)for(let e=s[0],t=1;t0)return s.slice().sort(ye);e=n}return s}R.empty.nextLayer=R.empty;var H=class s{finishChunk(e){this.chunks.push(new Se(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,n){this.addRange(e,t,n,!0)}addRange(e,t,n,i){this.addInner(e,t,n,i)||(this.nextLayer||(this.nextLayer=new s)).addRange(e,t,n,i)}addInner(e,t,n,i){let r=e-this.lastTo||n.startSide-this.last.endSide;if(i&&r<=0&&(e-this.lastFrom||n.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=n,this.lastFrom=e,this.lastTo=t,this.value.push(n),n.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let n=t.value.length-1;return this.last=t.value[n],this.lastFrom=t.from[n]+e,this.lastTo=t.to[n]+e,!0}finish(){return this.finishInner(R.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=R.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function Ne(s,e,t){let n=new Map;for(let r of s)for(let l=0;l=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=n&&i.push(new he(l,t,n,r));return i.length==1?i[0]:new s(i)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let n of this.heap)n.goto(e,t);for(let n=this.heap.length>>1;n>=0;n--)fe(this.heap,n);return this.next(),this}forward(e,t){for(let n of this.heap)n.forward(e,t);for(let n=this.heap.length>>1;n>=0;n--)fe(this.heap,n);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),fe(this.heap,0)}}};function fe(s,e){for(let t=s[e];;){let n=(e<<1)+1;if(n>=s.length)break;let i=s[n];if(n+1=0&&(i=s[n+1],n++),t.compare(i)<0)break;s[n]=t,s[e]=i,e=n}}var B=class{constructor(e,t,n){this.minPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Q.from(e,t,n)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Y(this.active,e),Y(this.activeTo,e),Y(this.activeRank,e),this.minActive=$e(this.active,this.activeTo)}addActive(e){let t=0,{value:n,to:i,rank:r}=this.cursor;for(;t0;)t++;_(this.active,t,n),_(this.activeTo,t,i),_(this.activeRank,t,r),e&&_(e,t,this.cursor.from),this.minActive=$e(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let n=this.openStart<0?[]:null;for(;;){let i=this.minActive;if(i>-1&&(this.activeTo[i]-this.cursor.from||this.active[i].endSide-this.cursor.startSide)<0){if(this.activeTo[i]>e){this.to=this.activeTo[i],this.endSide=this.active[i].endSide;break}this.removeActive(i),n&&Y(n,i)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(n),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&n[i]=0&&!(this.activeRank[n]e||this.activeTo[n]==e&&this.active[n].endSide>=this.point.endSide)&&t.push(this.active[n]);return t.reverse()}openEnd(e){let t=0;for(let n=this.activeTo.length-1;n>=0&&this.activeTo[n]>e;n--)t++;return t}};function Ve(s,e,t,n,i,r){s.goto(e),t.goto(n);let l=n+i,h=n,o=n-e,a=!!r.boundChange;for(let f=!1;;){let u=s.to+o-t.to,c=u||s.endSide-t.endSide,d=c<0?s.to+o:t.to,g=Math.min(d,l);if(s.point||t.point?(s.point&&t.point&&Ee(s.point,t.point)&&Ie(s.activeForPoint(s.to),t.activeForPoint(t.to))||r.comparePoint(h,g,s.point,t.point),f=!1):(f&&(r.boundChange(h),f=!1),g>h&&!Ie(s.active,t.active)&&r.compareRange(h,g,s.active,t.active),a&&gl)break;h=d,c<=0&&s.next(),c>=0&&t.next()}}function Ie(s,e){if(s.length!=e.length)return!1;for(let t=0;t=e;n--)s[n+1]=s[n];s[e]=t}function $e(s,e){let t=-1,n=1e9;for(let i=0;i +import { build } from 'esbuild'; +import { copyFile, mkdir, readdir, readFile, writeFile } from 'node:fs/promises'; +import { join, resolve } from 'node:path'; + +const miniappDir = resolve(process.argv[2] ?? '../miniapp'); +const banner = '/*! Vendored CodeMirror 6 bundle (MIT). See THIRD_PARTY_LICENSES.txt. */'; + +await build({ + entryPoints: ['client-entry.js'], + outfile: join(miniappDir, 'client/vendor/codemirror.js'), + bundle: true, + format: 'esm', + minify: true, + target: 'es2022', + legalComments: 'none', + banner: { js: banner }, +}); + +await build({ + entryPoints: ['node-entry.js'], + outfile: join(miniappDir, 'node/vendor/cm-state.mjs'), + bundle: true, + format: 'esm', + platform: 'node', + minify: true, + target: 'node20', + legalComments: 'none', + banner: { js: banner }, +}); + +// Collect license texts of every bundled runtime package (build tools excluded). +const skip = new Set(['esbuild', '@fontsource-variable/jetbrains-mono']); +const packages = []; +for (const entry of await readdir('node_modules')) { + if (entry.startsWith('.')) continue; + const scoped = entry.startsWith('@'); + const names = scoped ? (await readdir(join('node_modules', entry))).map((n) => `${entry}/${n}`) : [entry]; + for (const name of names) { + if (skip.has(name) || name.startsWith('@esbuild/')) continue; + packages.push(name); + } +} +packages.sort(); +let out = 'Third-party software bundled in vendor/codemirror.js and vendor/cm-state.mjs\n\n'; +for (const name of packages) { + const dir = join('node_modules', name); + const pkg = JSON.parse(await readFile(join(dir, 'package.json'), 'utf8')); + const files = (await readdir(dir)).filter((f) => /^(license|licence|copying)/i.test(f)); + const text = files.length ? await readFile(join(dir, files[0]), 'utf8') : `License: ${pkg.license ?? 'unknown'}\n`; + out += `==== ${name}@${pkg.version} (${pkg.license ?? 'unknown'})\n${text.trim()}\n\n`; +} +await writeFile(join(miniappDir, 'client/vendor/THIRD_PARTY_LICENSES.txt'), out); +await writeFile(join(miniappDir, 'node/vendor/THIRD_PARTY_LICENSES.txt'), out); +console.log(`bundled ${packages.length} packages`); + +// JetBrains Mono (OFL-1.1), the font MiniMax Code bundles as its "JetBrains Mono" code font option. +// Served from the Mini App itself so it renders the same on machines without the font installed. +const fontPkg = 'node_modules/@fontsource-variable/jetbrains-mono'; +const fontDir = join(miniappDir, 'client/fonts'); +await mkdir(join(fontDir, 'jetbrains-mono'), { recursive: true }); +for (const file of await readdir(join(fontPkg, 'files'))) { + if (file.endsWith('.woff2')) await copyFile(join(fontPkg, 'files', file), join(fontDir, 'jetbrains-mono', file)); +} +let fontCss = '/* JetBrains Mono variable font via @fontsource-variable/jetbrains-mono (OFL-1.1, see OFL.txt). */\n'; +for (const sheet of ['wght.css', 'wght-italic.css']) { + fontCss += (await readFile(join(fontPkg, sheet), 'utf8')).replaceAll('url(./files/', 'url(./jetbrains-mono/'); +} +await writeFile(join(fontDir, 'jetbrains-mono.css'), fontCss); +await copyFile(join(fontPkg, 'LICENSE'), join(fontDir, 'OFL.txt')); +console.log('copied JetBrains Mono font files'); diff --git a/plugins/trentchou/text-editor/vendor-src/client-entry.js b/plugins/trentchou/text-editor/vendor-src/client-entry.js new file mode 100644 index 0000000..52fbf0c --- /dev/null +++ b/plugins/trentchou/text-editor/vendor-src/client-entry.js @@ -0,0 +1,55 @@ +// Client-side CodeMirror bundle for the text-editor Mini App. +// Namespaced re-exports avoid ambiguous star exports across packages. +export * as state from '@codemirror/state'; +export * as view from '@codemirror/view'; +export * as commands from '@codemirror/commands'; +export * as language from '@codemirror/language'; +export * as search from '@codemirror/search'; +export * as autocomplete from '@codemirror/autocomplete'; +export * as collab from '@codemirror/collab'; +export { tags } from '@lezer/highlight'; +export { showMinimap } from '@replit/codemirror-minimap'; +export { indentationMarkers } from '@replit/codemirror-indentation-markers'; + +import { json } from '@codemirror/lang-json'; +import { yaml } from '@codemirror/lang-yaml'; +import { javascript } from '@codemirror/lang-javascript'; +import { python } from '@codemirror/lang-python'; +import { markdown } from '@codemirror/lang-markdown'; +import { html } from '@codemirror/lang-html'; +import { css } from '@codemirror/lang-css'; +import { xml } from '@codemirror/lang-xml'; +import { sql } from '@codemirror/lang-sql'; +import { rust } from '@codemirror/lang-rust'; +import { go } from '@codemirror/lang-go'; +import { java } from '@codemirror/lang-java'; +import { cpp } from '@codemirror/lang-cpp'; +import { php } from '@codemirror/lang-php'; + +export const langs = { json, yaml, javascript, python, markdown, html, css, xml, sql, rust, go, java, cpp, php }; + +import { toml } from '@codemirror/legacy-modes/mode/toml'; +import { shell } from '@codemirror/legacy-modes/mode/shell'; +import { dockerFile } from '@codemirror/legacy-modes/mode/dockerfile'; +import { properties } from '@codemirror/legacy-modes/mode/properties'; +import { diff } from '@codemirror/legacy-modes/mode/diff'; +import { lua } from '@codemirror/legacy-modes/mode/lua'; +import { ruby } from '@codemirror/legacy-modes/mode/ruby'; +import { swift } from '@codemirror/legacy-modes/mode/swift'; +import { perl } from '@codemirror/legacy-modes/mode/perl'; +import { r } from '@codemirror/legacy-modes/mode/r'; +import { nginx } from '@codemirror/legacy-modes/mode/nginx'; +import { protobuf } from '@codemirror/legacy-modes/mode/protobuf'; +import { powerShell } from '@codemirror/legacy-modes/mode/powershell'; +import { csharp, scala, kotlin, dart, objectiveC } from '@codemirror/legacy-modes/mode/clike'; +import { haskell } from '@codemirror/legacy-modes/mode/haskell'; +import { erlang } from '@codemirror/legacy-modes/mode/erlang'; +import { groovy } from '@codemirror/legacy-modes/mode/groovy'; +import { julia } from '@codemirror/legacy-modes/mode/julia'; +import { cmake } from '@codemirror/legacy-modes/mode/cmake'; +import { sass } from '@codemirror/legacy-modes/mode/sass'; + +export const legacy = { + toml, shell, dockerFile, properties, diff, lua, ruby, swift, perl, r, nginx, protobuf, powerShell, + csharp, scala, kotlin, dart, objectiveC, haskell, erlang, groovy, julia, cmake, sass, +}; diff --git a/plugins/trentchou/text-editor/vendor-src/node-entry.js b/plugins/trentchou/text-editor/vendor-src/node-entry.js new file mode 100644 index 0000000..67698ac --- /dev/null +++ b/plugins/trentchou/text-editor/vendor-src/node-entry.js @@ -0,0 +1,2 @@ +// Node-side bundle: the authoritative document model shared with the Client collab extension. +export { Text, ChangeSet } from '@codemirror/state'; diff --git a/plugins/trentchou/text-editor/vendor-src/package-lock.json b/plugins/trentchou/text-editor/vendor-src/package-lock.json new file mode 100644 index 0000000..e6092b3 --- /dev/null +++ b/plugins/trentchou/text-editor/vendor-src/package-lock.json @@ -0,0 +1,1011 @@ +{ + "name": "text-editor-vendor", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "text-editor-vendor", + "dependencies": { + "@codemirror/autocomplete": "6.20.3", + "@codemirror/collab": "6.1.1", + "@codemirror/commands": "6.11.1", + "@codemirror/lang-cpp": "6.0.3", + "@codemirror/lang-css": "6.3.1", + "@codemirror/lang-go": "6.0.1", + "@codemirror/lang-html": "6.4.12", + "@codemirror/lang-java": "6.0.2", + "@codemirror/lang-javascript": "6.2.5", + "@codemirror/lang-json": "6.0.2", + "@codemirror/lang-markdown": "6.5.2", + "@codemirror/lang-php": "6.0.2", + "@codemirror/lang-python": "6.2.1", + "@codemirror/lang-rust": "6.0.2", + "@codemirror/lang-sql": "6.10.0", + "@codemirror/lang-xml": "6.1.0", + "@codemirror/lang-yaml": "6.1.3", + "@codemirror/language": "6.13.1", + "@codemirror/legacy-modes": "6.5.5", + "@codemirror/search": "6.7.2", + "@codemirror/state": "6.7.6", + "@codemirror/view": "6.43.14", + "@fontsource-variable/jetbrains-mono": "5.3.0", + "@lezer/highlight": "1.2.5", + "@replit/codemirror-indentation-markers": "6.5.3", + "@replit/codemirror-minimap": "0.5.2", + "esbuild": "0.28.2" + } + }, + "node_modules/@codemirror/autocomplete": { + "version": "6.20.3", + "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.20.3.tgz", + "integrity": "sha512-tlosUqb+3BbxCxZdu4tKeRghPFC+QM7q4X5YhKV2eCmPG+1r2F3f4AaSz5sCrFqUtX4Jh20VFTKecl16MgiV9g==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/collab": { + "version": "6.1.1", + "resolved": "https://registry.npmmirror.com/@codemirror/collab/-/collab-6.1.1.tgz", + "integrity": "sha512-tkIn9Jguh98ie12dbBuba3lE8LHUkaMrIFuCVeVGhncSczFdKmX25vC12+58+yqQW5AXi3py6jWY0W+jelyglA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.11.1", + "resolved": "https://registry.npmmirror.com/@codemirror/commands/-/commands-6.11.1.tgz", + "integrity": "sha512-O/4hG3SC1YwcmQ0d2UVNDs+AsaNWd1iHVxbTeEBuqH+6bExAiPK3iS/BvpY6rZGURALv4ZD3sIgcCmRvw3ehBg==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.7.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/lang-cpp": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-cpp/-/lang-cpp-6.0.3.tgz", + "integrity": "sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/cpp": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-css": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-css/-/lang-css-6.3.1.tgz", + "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.1.7" + } + }, + "node_modules/@codemirror/lang-go": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-go/-/lang-go-6.0.1.tgz", + "integrity": "sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/go": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-html": { + "version": "6.4.12", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-html/-/lang-html-6.4.12.tgz", + "integrity": "sha512-pw2ReWKUqSkbvh76RAT4NYxiogRu+PWkR2ukAwO9uOgrm8uipkzjtKKtNpyeAQwHOqxEeSvAXZ6vr3AfyB9y/w==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.12" + } + }, + "node_modules/@codemirror/lang-java": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-java/-/lang-java-6.0.2.tgz", + "integrity": "sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/java": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-javascript": { + "version": "6.2.5", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-javascript/-/lang-javascript-6.2.5.tgz", + "integrity": "sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-json": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-json/-/lang-json-6.0.2.tgz", + "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-markdown": { + "version": "6.5.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-markdown/-/lang-markdown-6.5.2.tgz", + "integrity": "sha512-AwBOdkWYuA//WcM0xO5PfHPUcmz/O2i5o0Nsg1U69SII/loCJlFI1Romd9xp2HYb1kYJRGZotyqRghuHH5n8Kw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.7.1", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.3.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/markdown": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-php": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-php/-/lang-php-6.0.2.tgz", + "integrity": "sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/php": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-python": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-python/-/lang-python-6.2.1.tgz", + "integrity": "sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.3.2", + "@codemirror/language": "^6.8.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/python": "^1.1.4" + } + }, + "node_modules/@codemirror/lang-rust": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-rust/-/lang-rust-6.0.2.tgz", + "integrity": "sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/rust": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-sql": { + "version": "6.10.0", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-sql/-/lang-sql-6.10.0.tgz", + "integrity": "sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-xml": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz", + "integrity": "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/xml": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-yaml": { + "version": "6.1.3", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-yaml/-/lang-yaml-6.1.3.tgz", + "integrity": "sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.2.0", + "@lezer/lr": "^1.0.0", + "@lezer/yaml": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.13.1", + "resolved": "https://registry.npmmirror.com/@codemirror/language/-/language-6.13.1.tgz", + "integrity": "sha512-zfvU2r3TyylQLMj/te+5CnQ0rSqZi8B1oTCBbQkagcLW4Xc6imab6qN+pEJhsuNOLaJqiRyBXp9UhWA1DhVvDw==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/streamparser": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.5.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/legacy-modes": { + "version": "6.5.5", + "resolved": "https://registry.npmmirror.com/@codemirror/legacy-modes/-/legacy-modes-6.5.5.tgz", + "integrity": "sha512-9ltT214oMb3Y1w5eAZMSigzrjzZnMI2Wa3Feq73rU/i4C56MkwrpfswfQYOr28C5pXr6dWwspNTMyeHXlzWMxg==", + "license": "MIT", + "dependencies": { + "@codemirror/streamparser": "^6.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/@codemirror/lint/-/lint-6.9.7.tgz", + "integrity": "sha512-28/+iWLYxKxsvGYhSYL7zaCZqLz5+FFFDq9tVsvGv9kv8RY4fFAchJ5WX9M3YrrRlTIsECjsXPqeNgnSmNP2dg==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.42.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.7.2", + "resolved": "https://registry.npmmirror.com/@codemirror/search/-/search-6.7.2.tgz", + "integrity": "sha512-gUYkYhT2+n/+VGZ+8EzE5WFkYZUZYm1VOKDudIsNqh42uRVQJ0a6Yss9sdKT3MeOYfuL1N6AZA57oza0Oyr0LA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.37.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.7.6", + "resolved": "https://registry.npmmirror.com/@codemirror/state/-/state-6.7.6.tgz", + "integrity": "sha512-kAz+AncRtKuIknedxT1bq4XwXv4UowhbkHU1myPrtVb/jZtImWuV5BXzv5vK6i3kYACsdiZiQKFQQ5Mq7elW8w==", + "license": "MIT", + "dependencies": { + "@marijn/find-cluster-break": "^1.0.0" + } + }, + "node_modules/@codemirror/streamparser": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/@codemirror/streamparser/-/streamparser-6.0.0.tgz", + "integrity": "sha512-JTFPF6xrfjt0mnfGPgzcLiMwYmvIyNaoizp8BYzv8FE8KrT6GBGDZ190rtt+O7Wke3gG/MFHyiY9YGNeimof4w==", + "license": "MIT" + }, + "node_modules/@codemirror/view": { + "version": "6.43.14", + "resolved": "https://registry.npmmirror.com/@codemirror/view/-/view-6.43.14.tgz", + "integrity": "sha512-hC45YnmJNR1rz42OF57BLoQNFMV12/13drnvibDsR2quNDmldcb4WvYVV81hFQg56i9lcqQMEDqilhX2QDcGQQ==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.7.0", + "crelt": "^1.0.6", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fontsource-variable/jetbrains-mono": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.3.0.tgz", + "integrity": "sha512-F32xpS2NsGYoQi2ADSkKTgpJj7ozajsGgDJ8woTnqjmIB+dxDIqImjl4pXZVEExu8UFZ2ndhmX18EBS/hdz3Lw==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@lezer/common": { + "version": "1.5.3", + "resolved": "https://registry.npmmirror.com/@lezer/common/-/common-1.5.3.tgz", + "integrity": "sha512-H0iErY4e43LpXbYDyBci5W4v/RwTgGV3YzYOlJPiGZ8RY8w51kVE+xLn1tg3Z6UmSfyETvtsUK3r7YsgDQEI7Q==", + "license": "MIT" + }, + "node_modules/@lezer/cpp": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/@lezer/cpp/-/cpp-1.1.6.tgz", + "integrity": "sha512-vh9gWWJOXFVY8HBHK3Twzq8MgwG2iN4GSyzBP9sCGTe37P15x2R14VaBQk0VA0ezTRN1KHYBBsHhvpGZ2Xy/pA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/css": { + "version": "1.3.9", + "resolved": "https://registry.npmmirror.com/@lezer/css/-/css-1.3.9.tgz", + "integrity": "sha512-ZmzgvTOBdJWGIsY/ItAfN7UW8DV802oZG+jeG6E508SwEzz5YhuAajptpWPICvIyqYAD2+VjMdOS40GgGkyEOQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/go": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@lezer/go/-/go-1.0.1.tgz", + "integrity": "sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/highlight": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/@lezer/highlight/-/highlight-1.2.5.tgz", + "integrity": "sha512-O1GMVKgtf5YspFaRzpmqkVgMtIk2HG9uMAbH6wdAIdNh3TVzCsch/+cRi+6l2//UGDKe6NB9BW3cvuR5ezMQ0w==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.3.0" + } + }, + "node_modules/@lezer/html": { + "version": "1.3.13", + "resolved": "https://registry.npmmirror.com/@lezer/html/-/html-1.3.13.tgz", + "integrity": "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/java": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@lezer/java/-/java-1.1.5.tgz", + "integrity": "sha512-JppTd1iKHpeNlLYw/Zl8JX7zSY5HqAzK4zZ05lpn8l8Sk7Fo5KAKiDiMiezKoT5lfeC2xZf8HeKp1tSctj4G6Q==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/javascript": { + "version": "1.5.6", + "resolved": "https://registry.npmmirror.com/@lezer/javascript/-/javascript-1.5.6.tgz", + "integrity": "sha512-sEvOqpl4vJQca0NugSQK02vQPbc5KrvoojnYGoqqFgFO0MtcYhwGiHKVEB+LuXYJnfyXo4QPA8ztbrEa4Fw5NA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/json": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@lezer/json/-/json-1.0.3.tgz", + "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.11", + "resolved": "https://registry.npmmirror.com/@lezer/lr/-/lr-1.4.11.tgz", + "integrity": "sha512-UwgZcl1R66H2hDzBrA7kWyYmX6s8p5TQ+e/t7CuvgCtBEPxbEPaHYHu+pJBvTvDotEJpuQkJjbXuHiw5Cixxgw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/markdown": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/@lezer/markdown/-/markdown-1.8.0.tgz", + "integrity": "sha512-X6w3A2NpyhdtGqTWRJB8gR4QDXBaFMbTOs780ZdZ15KKCfBXOQTKcB3Vr+W6tqJHVlealt53tLmHRvOqPTQgYA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.5.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@lezer/php": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@lezer/php/-/php-1.0.6.tgz", + "integrity": "sha512-QJ2xNXPmsm/Z3IpThq8fnJrEIVpxhsIoj6GZBW0JYEd/l9zxpJZW216X4fzqQY4vgpdGIumypvI4uQjd4tnYtw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.1.0" + } + }, + "node_modules/@lezer/python": { + "version": "1.1.19", + "resolved": "https://registry.npmmirror.com/@lezer/python/-/python-1.1.19.tgz", + "integrity": "sha512-MhQIURHRytsNzP/YXnqpYKW6la6voAH3kyplTOOiCdjyFY6cWWGFVmYVdHIPrElqSDf4iCDktQCockB9FxuhzQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/rust": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@lezer/rust/-/rust-1.0.3.tgz", + "integrity": "sha512-XxErOjZzQ7yJt1agUT4fu9qQvESZ3acgoxpPaPTPOiUx+duCjaVAtZGFIgphkHxlN05djdVAIOy/wItShMEjqQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/xml": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@lezer/xml/-/xml-1.0.6.tgz", + "integrity": "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/yaml": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/@lezer/yaml/-/yaml-1.0.4.tgz", + "integrity": "sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.4.0" + } + }, + "node_modules/@marijn/find-cluster-break": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.4.tgz", + "integrity": "sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==", + "license": "MIT" + }, + "node_modules/@replit/codemirror-indentation-markers": { + "version": "6.5.3", + "resolved": "https://registry.npmmirror.com/@replit/codemirror-indentation-markers/-/codemirror-indentation-markers-6.5.3.tgz", + "integrity": "sha512-hL5Sfvw3C1vgg7GolLe/uxX5T3tmgOA3ZzqlMv47zjU1ON51pzNWiVbS22oh6crYhtVhv8b3gdXwoYp++2ilHw==", + "license": "MIT", + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "node_modules/@replit/codemirror-minimap": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/@replit/codemirror-minimap/-/codemirror-minimap-0.5.2.tgz", + "integrity": "sha512-eNAtpr0hOG09/5zqAQ5PkgZEb3V/MHi30zentCxiR73r+utR2m9yVMCpBmfsWbb8mWxUWhMGPiHxM5hFtnscQA==", + "license": "MIT", + "dependencies": { + "crelt": "^1.0.5" + }, + "peerDependencies": { + "@codemirror/language": "^6.9.1", + "@codemirror/lint": "^6.4.2", + "@codemirror/state": "^6.3.1", + "@codemirror/view": "^6.21.3", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.1.6" + } + }, + "node_modules/crelt": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.7.tgz", + "integrity": "sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/style-mod": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.1.4.tgz", + "integrity": "sha512-XXWIQt633/EpAFx8aZDOTjBzrCaGmhvEQlQo6MVPfa2OzO2cWo+4hV9h+6UkHYlXGfy+ODXKUdP7Pthmcu5ATw==", + "license": "MIT" + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + } + } +} diff --git a/plugins/trentchou/text-editor/vendor-src/package.json b/plugins/trentchou/text-editor/vendor-src/package.json new file mode 100644 index 0000000..51f1b46 --- /dev/null +++ b/plugins/trentchou/text-editor/vendor-src/package.json @@ -0,0 +1,35 @@ +{ + "name": "text-editor-vendor", + "private": true, + "type": "module", + "description": "Build recipe for the vendored CodeMirror bundles used by the text-editor Mini App.", + "dependencies": { + "@codemirror/autocomplete": "6.20.3", + "@codemirror/collab": "6.1.1", + "@codemirror/commands": "6.11.1", + "@codemirror/lang-cpp": "6.0.3", + "@codemirror/lang-css": "6.3.1", + "@codemirror/lang-go": "6.0.1", + "@codemirror/lang-html": "6.4.12", + "@codemirror/lang-java": "6.0.2", + "@codemirror/lang-javascript": "6.2.5", + "@codemirror/lang-json": "6.0.2", + "@codemirror/lang-markdown": "6.5.2", + "@codemirror/lang-php": "6.0.2", + "@codemirror/lang-python": "6.2.1", + "@codemirror/lang-rust": "6.0.2", + "@codemirror/lang-sql": "6.10.0", + "@codemirror/lang-xml": "6.1.0", + "@codemirror/lang-yaml": "6.1.3", + "@codemirror/language": "6.13.1", + "@codemirror/legacy-modes": "6.5.5", + "@codemirror/search": "6.7.2", + "@codemirror/state": "6.7.6", + "@codemirror/view": "6.43.14", + "@fontsource-variable/jetbrains-mono": "5.3.0", + "@lezer/highlight": "1.2.5", + "@replit/codemirror-indentation-markers": "6.5.3", + "@replit/codemirror-minimap": "0.5.2", + "esbuild": "0.28.2" + } +}