From bc02b146c221f697a16432238088774bc88d8100 Mon Sep 17 00:00:00 2001 From: dazhi Date: Thu, 12 Nov 2026 16:46:03 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(minimax-pet):=200.7.0=20=E5=9B=9E?= =?UTF-8?q?=E5=A4=8D=E6=8C=89=20Markdown=20=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 markdown.mjs:把任务最近回复的 mdast 转成 DOM 节点,覆盖标题、强调、 行内代码、围栏代码块、列表与任务清单、表格、引用、分隔线、链接; 通知卡片与提醒预览使用压平后的纯文本。 - 原始 HTML 只作为文本显示,链接只显示可读地址、不打开,图片不发起请求。 渲染全程使用 createElement/createTextNode,不拼 HTML 字符串。 - vendor/markdown.mjs 由 tools/build-markdown.mjs 打包 unified 11.0.5 + remark-parse 11.0.0 + remark-gfm 4.0.1(esbuild 0.25.12),并生成 markdown.LICENSE.txt(59 个 MIT 包);npm run build:markdown 可逐字节重建。 - 面板详情、桌面卡片详情按同一套 --mcode-* 变量排版,窄卡片降一档字号。 - 新增 dev/markdown.test.mjs,补充桌面卡片与面板接线测试,更新 README(中英)、 DEVELOPMENT、PROVENANCE 与根 README 表格。 --- README.md | 2 +- README.zh-CN.md | 2 +- .../minimax-pet/.minimax-plugin/plugin.json | 2 +- plugins/minimax-ai/minimax-pet/PROVENANCE.md | 4 +- plugins/minimax-ai/minimax-pet/README.md | 7 +- .../minimax-ai/minimax-pet/README.zh-CN.md | 8 +- .../miniapp/client/compact-pet-view.mjs | 15 +- .../minimax-pet/miniapp/client/index.html | 4 +- .../minimax-pet/miniapp/client/markdown.mjs | 352 ++++ .../minimax-pet/miniapp/client/pet-app.js | 10 +- .../minimax-pet/miniapp/client/pet.css | 183 +- .../client/vendor/markdown.LICENSE.txt | 1392 +++++++++++++ .../miniapp/client/vendor/markdown.mjs | 32 + .../minimax-pet/.minimax-plugin/plugin.json | 2 +- sources/minimax-ai/minimax-pet/DEVELOPMENT.md | 3 + sources/minimax-ai/minimax-pet/PROVENANCE.md | 4 +- sources/minimax-ai/minimax-pet/README.md | 7 +- .../minimax-ai/minimax-pet/README.zh-CN.md | 8 +- .../minimax-pet/dev/compact-pet-view.test.mjs | 18 + .../minimax-pet/dev/markdown.test.mjs | 152 ++ .../dev/panel-page-wiring.test.mjs | 3 +- .../minimax-ai/minimax-pet/dev/smoke-api.mjs | 2 +- .../miniapp/client/compact-pet-view.mjs | 15 +- .../minimax-pet/miniapp/client/index.html | 4 +- .../minimax-pet/miniapp/client/markdown.mjs | 352 ++++ .../minimax-pet/miniapp/client/pet-app.js | 10 +- .../minimax-pet/miniapp/client/pet.css | 183 +- .../client/vendor/markdown.LICENSE.txt | 1392 +++++++++++++ .../miniapp/client/vendor/markdown.mjs | 32 + .../minimax-ai/minimax-pet/package-lock.json | 1854 ++++++++++++++++- sources/minimax-ai/minimax-pet/package.json | 9 +- .../scripts/markdown-vendor-header.txt | 10 + .../minimax-pet/tools/build-markdown.mjs | 92 + 33 files changed, 6024 insertions(+), 141 deletions(-) create mode 100644 plugins/minimax-ai/minimax-pet/miniapp/client/markdown.mjs create mode 100644 plugins/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.LICENSE.txt create mode 100644 plugins/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.mjs create mode 100644 sources/minimax-ai/minimax-pet/dev/markdown.test.mjs create mode 100644 sources/minimax-ai/minimax-pet/miniapp/client/markdown.mjs create mode 100644 sources/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.LICENSE.txt create mode 100644 sources/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.mjs create mode 100644 sources/minimax-ai/minimax-pet/scripts/markdown-vendor-header.txt create mode 100644 sources/minimax-ai/minimax-pet/tools/build-markdown.mjs diff --git a/README.md b/README.md index 6be57429..e9da0f73 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ The MiniMax Code Agent communicates through the host MCP client. Business reques | [MiniMax Bot Team](plugins/antianqi/minimax-bot-team/) | Today's bot is one person wearing several masks, taking turns with you. MiniMax Bot Team gives you a team instead: members with different skills and temperaments, each guarding one field, and they can argue about the same question from different angles | [antianqi](https://github.com/antianqi) | | [Agent Flow](plugins/huixin615/agent-flow/) | Import this plugin's Hook event file to inspect native task calls and sub-agent lifecycles, with exact task-to-child links when IDs are available. Choose a recorded chat or the latest imported record; no Host session files are opened. Requires MiniMax Code 3.1.4 or later | [Huixin615](https://github.com/Huixin615) | | [蹬王之王 · Expiry Guardian](plugins/hylouis233/expiry-guardian/) | Track credit and reset-card expiry from a local ledger you maintain, and get a "spend the card or let the credits burn first" recommendation with the reasoning spelled out | [Hylouis](https://github.com/Hylouis233) | -| [MiniMax Pet](plugins/minimax-ai/minimax-pet/) | A lightweight companion with appearance, task and settings tabs, visible-session activity, answer-needed reminders, a one-click jump to a task's conversation (3.1.11 or later) and a transparent desktop pet. Requires MiniMax Code 3.1.6 or later | [MiniMax](https://github.com/MiniMax-AI) | +| [MiniMax Pet](plugins/minimax-ai/minimax-pet/) | A lightweight companion with appearance, task and settings tabs, visible-session activity, answer-needed reminders, Markdown-rendered replies, a one-click jump to a task's conversation (3.1.11 or later) and a transparent desktop pet. Requires MiniMax Code 3.1.6 or later | [MiniMax](https://github.com/MiniMax-AI) | | [MCP OAuth Console](plugins/microbiosis/mcp-oauth-console/) | Sign in to MCP servers that require OAuth: device-code or authorization-code + PKCE flow, the `Authorization` header written into the MCP configuration, and an opt-in refresh before expiry | [Microbiosis](https://github.com/Microbiosis) | | [本机大盘 · Local Market Board](plugins/jzlikewei/kurumi-monitor/) | Watch your own machine as a stock terminal: CPU, GPU, temperature, memory, disk, network and every running process become listed stocks with live candlesticks, moving averages, a watchlist, a leaderboard and a trade tape, on macOS and Windows. Requires minimax Code 3.1.2 or later | [jzlikewei](https://github.com/jzlikewei) | | [Quota Bottle](plugins/7723qqq/quota-bottle/) | An octopus-shaped glass bottle that floats on your desktop and shows the remaining Token Plan quota from a login you configure yourself, with the liquid level and opacity following the remaining share, and a device-code login plus an opt-in local token-usage estimate as fallbacks | [7723qqq](https://github.com/7723qqq) | diff --git a/README.zh-CN.md b/README.zh-CN.md index 22324812..7968bf62 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -85,7 +85,7 @@ MiniMax Code Agent 通过宿主 MCP 客户端与 MiniApp 协作。业务请求 | [MiniMax Bot 团队](plugins/antianqi/minimax-bot-team/) | 现在的 bot 像一个人轮流带着几个面具跟你聊天;MiniMax Bot Team 给你一支真正各有能力、各有性格的团队,还能围坐一起从不同角度讨论同一个问题 | [antianqi](https://github.com/antianqi) | | [Agent 协作透视](plugins/huixin615/agent-flow/README.zh-CN.md) | 手动导入插件 Hook 记录,查看原生 task 调用与子 Agent 运行区间;有明确 ID 时关联父子任务。可选择记录会话或一键查看最近导入的记录,不读取宿主会话文件。需要 MiniMax Code 3.1.4 或更高版本 | [Huixin615](https://github.com/Huixin615) | | [蹬王之王](plugins/hylouis233/expiry-guardian/README.md) | 看你自己维护的本地账本,算出「该用卡还是该留积分」,并把理由说清楚 | [Hylouis](https://github.com/Hylouis233) | -| [MiniMax Pet](plugins/minimax-ai/minimax-pet/README.zh-CN.md) | 提供外观/任务/设置、可见会话状态、需要回答提醒、一键打开任务对话(3.1.11 起)和透明桌宠;需要 MiniMax Code 3.1.6 或更高版本 | [MiniMax](https://github.com/MiniMax-AI) | +| [MiniMax Pet](plugins/minimax-ai/minimax-pet/README.zh-CN.md) | 提供外观/任务/设置、可见会话状态、需要回答提醒、按 Markdown 渲染的回复、一键打开任务对话(3.1.11 起)和透明桌宠;需要 MiniMax Code 3.1.6 或更高版本 | [MiniMax](https://github.com/MiniMax-AI) | | [MCP OAuth 令牌台](plugins/microbiosis/mcp-oauth-console/README.zh-CN.md) | 给需要 OAuth 的 MCP 服务器完成登录:设备码或授权码 + PKCE 流程,把 `Authorization` 头写入 MCP 配置,并可选择在到期前自动续期 | [Microbiosis](https://github.com/Microbiosis) | | [本机大盘](plugins/jzlikewei/kurumi-monitor/README.zh-CN.md) | 把本机当成行情终端来看:CPU、GPU、温度、内存、磁盘、网络与每个运行中的进程都是一只个股,实时 K 线、均线、自选行情、主力动向与逐笔成交,支持 macOS 与 Windows。需要 minimax Code 3.1.2 或更高版本 | [jzlikewei](https://github.com/jzlikewei) | | [额度瓶](plugins/7723qqq/quota-bottle/README.zh-CN.md) | 一只悬浮在桌面上的章鱼形玻璃瓶,用你自己配置的登录读取 Token Plan 剩余额度;液面与透明度按剩余占比走,拿不到实时额度时回退到设备码登录或手填总额与可选的本机本月用量 | [7723qqq](https://github.com/7723qqq) | diff --git a/plugins/minimax-ai/minimax-pet/.minimax-plugin/plugin.json b/plugins/minimax-ai/minimax-pet/.minimax-plugin/plugin.json index 588f806d..d2e449ae 100644 --- a/plugins/minimax-ai/minimax-pet/.minimax-plugin/plugin.json +++ b/plugins/minimax-ai/minimax-pet/.minimax-plugin/plugin.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "name": "minimax-pet", "displayName": "MiniMax Pet", - "version": "0.6.0", + "version": "0.7.0", "description": "轻量桌宠,聚合主窗口可见会话的任务状态、需要回答的提醒和最新结果,支持外观切换及图集导入。", "author": "MiniMax", "icon": "icon.png", diff --git a/plugins/minimax-ai/minimax-pet/PROVENANCE.md b/plugins/minimax-ai/minimax-pet/PROVENANCE.md index f664087a..f6fb038c 100644 --- a/plugins/minimax-ai/minimax-pet/PROVENANCE.md +++ b/plugins/minimax-ai/minimax-pet/PROVENANCE.md @@ -1,6 +1,6 @@ # Source and distribution -Author: MiniMax ([MiniMax-AI](https://github.com/MiniMax-AI)). This is the 0.6.0 open-source edition of the MiniMax Pet MiniApp. It uses public MiniApp page APIs and contains no Host implementation. Public documentation, dependency URLs, and license notices have been prepared for this repository; private development references and acceptance records are not part of the package. +Author: MiniMax ([MiniMax-AI](https://github.com/MiniMax-AI)). This is the 0.7.0 open-source edition of the MiniMax Pet MiniApp. It uses public MiniApp page APIs and contains no Host implementation. Public documentation, dependency URLs, and license notices have been prepared for this repository; private development references and acceptance records are not part of the package. ## Layout @@ -27,7 +27,7 @@ The root `npm run check` validates package contracts through the repository's ex ## Dependencies and artwork -Production JavaScript uses relative modules and Node built-ins. `jsdom` 24.1.3 is used only for DOM tests; the lockfile pins public npm registry URLs and integrity values. No dependency install or build step is required by the installed plugin. +Production JavaScript uses relative modules and Node built-ins, plus the vendored `miniapp/client/vendor/markdown.mjs` (unified 11.0.5, remark-parse 11.0.0, remark-gfm 4.0.1 and their MIT dependency tree, built with esbuild 0.25.12). `npm run build:markdown` reproduces it from the pinned dev dependencies; the output is byte-stable, so `npm run check:package` compares it like any other file. Its notices live in `miniapp/client/vendor/markdown.LICENSE.txt`, generated from the same build. `jsdom` 24.1.3 is used only for DOM tests; the lockfile pins public npm registry URLs and integrity values. No dependency install or build step is required by the installed plugin. The bundled mint robot atlas is original geometric artwork generated by `scripts/generate-pet-art.mjs` from Node built-ins. `npm run generate:art` reproduces the atlas without external images or fonts and preserves `icon.png`. The purple octopus icon is a separate transparent PNG generated with OpenAI imagegen from a user-provided visual reference; model generation is not deterministic, and that reference image is not bundled. The `minimax-tako` octopus girl atlas was generated with MiniMax image generation from user-provided visual references and assembled by a local script; it is not reproducible from a command, and the reference images are not bundled. These assets use the same MiniMax [MIT License](LICENSE) as the original code and documentation; see [ARTWORK.md](ARTWORK.md). The `mmx-octopus` MMX octopus girl atlas was generated with a locally hosted open-weight diffusion model and assembled by a local script from source videos that are not shipped; it is not reproducible from a command. Its character and artwork are contributed by antianqi under the [MIT License](LICENSE); see [ARTWORK.md](ARTWORK.md). No externally sourced pet spritesheet is bundled. diff --git a/plugins/minimax-ai/minimax-pet/README.md b/plugins/minimax-ai/minimax-pet/README.md index 5ff6d8e6..3f1508ed 100644 --- a/plugins/minimax-ai/minimax-pet/README.md +++ b/plugins/minimax-ai/minimax-pet/README.md @@ -7,7 +7,7 @@ A lightweight desktop companion for MiniMax Code, by **MiniMax**. It shows visib ## Features - **Appearance:** preview and select pets, import compatible pet JSON and spritesheets, and remove imported pets. -- **Tasks:** recent reminders, visible user conversations, and a scrollable latest reply. Desktop cards preview up to five lines. Clicking a card keeps the pet visible; observed `ask_user` calls show “需要你回答” (needs your answer). +- **Tasks:** recent reminders, visible user conversations, and a scrollable latest reply rendered as Markdown. Desktop cards preview up to five lines. Clicking a card keeps the pet visible; observed `ask_user` calls show “需要你回答” (needs your answer). - **Open the conversation:** on MiniMax Code 3.1.11 or later, a task's detail, in the panel and on the desktop, has a **打开对话** (open conversation) button, labelled **去回答** (go answer) while the task needs an answer. It brings the MiniMax Code main window forward on that conversation. Older clients do not show the button. - **Settings:** pet size, page-local reminder dismissal and mute, connection status, and reconnect. - **Desktop window:** a draggable transparent pet with compact notification cards. Return it to the main panel to use the three tabs. @@ -15,6 +15,8 @@ A lightweight desktop companion for MiniMax Code, by **MiniMax**. It shows visib The pet does not run Agent turns, create independent chats, write to chat inputs, comment on every session, stop tasks, or answer questionnaires. Selecting a task only reads its details; the main window switches only when you click **打开对话** or **去回答**. +Version **0.7.0** renders each task's latest reply as Markdown: headings, emphasis, lists, task lists, fenced code, tables, quotes and links, with raw HTML shown as inert text and images as a label instead of a remote request. Notification cards and reminder previews stay plain text. Parsing uses a vendored bundle of unified, remark-parse and remark-gfm (MIT) built by `npm run build:markdown`; the page never builds an HTML string from model output. The bundle makes no network request and runs entirely in the page. + Version **0.6.0** removes the **打招呼** (wave) and **跳一下** (jump) actions from the menu and the appearance page, and removes the original-chat draft with its voice input; the package no longer requests the microphone. It adds **打开对话** / **去回答** and the client theme. The supported baseline stays MiniMax Code 3.1.6: both additions are feature-detected and need no new access. ## Install and open @@ -43,6 +45,7 @@ Earlier local prototypes use a different plugin ID. The Host gives `minimax-pet` - **Observations:** one global observer aggregates visible task lifecycle events. Up to three detailed observers follow active tasks and detect new ask tool events. A completed/removed task releases its detailed slot; another task enters only after the previous subscription settles. The initial snapshot contains up to 50 recent visible conversations; observed tasks remain while the Host confirms visibility. - **Coverage limits:** observers are tail-only. They cannot reconstruct questionnaires opened before subscribing or during a disconnect. More than three active tasks means only three receive detailed ask coverage. No observed ask does not prove no pending question. Historical idle tasks are not presented as newly completed. - **Local files:** the Node service serves packaged assets and stores preferences and user-imported JSON/WebP/PNG spritesheets under opaque `context.dataDir`. Imports, replacement recovery and deletion are limited to that plugin data. Browser storage is used only to migrate old view preferences. +- **Rendered replies:** the latest reply is parsed as Markdown by the vendored parser and rebuilt as DOM nodes under the page's own stylesheet. Raw HTML in a reply is displayed as literal text, never executed or inserted as markup; links show their target on hover and are not opened; images are not fetched and appear as a text label. - **Host navigation:** only when you click **打开对话** or **去回答**, the page calls `host.navigation.open({ id: 'session', sessionId, source: 'local' })` for a conversation it already lists through `session.read`. It does not declare `hostAccess` and never reads which page of MiniMax Code you are on. It writes nothing to chat inputs and sends no message. - **Display preferences:** `host.ui.subscribe` reports the client theme, which the page applies; the reported language is ignored. No grant is involved. - **Network:** the plugin has no hard-coded external runtime endpoint; its own HTTP requests use its assigned loopback origin. @@ -66,3 +69,5 @@ The complete editable source is at `sources/minimax-ai/minimax-pet/`. The instal ## License Original code, documentation, the robot, minimax-tako pet and icon: [MIT](LICENSE), Copyright 2026 MiniMax. Maiyatang artwork: MIT, Copyright 2026 Fectivnfy112357. The minimax-tako atlas was generated with MiniMax image generation. The default atlas is generated from editable geometric drawing code; the octopus icon and Maiyatang were generated with imagegen from supplied visual references. See [ARTWORK.md](ARTWORK.md). No externally sourced pet spritesheet is bundled. User-imported artwork keeps its own license. + +`miniapp/client/vendor/markdown.mjs` bundles 59 MIT-licensed packages from the unified, remark-parse and remark-gfm dependency trees. Each package keeps its own copyright notice in `miniapp/client/vendor/markdown.LICENSE.txt`, which `npm run build:markdown` regenerates from the packages esbuild actually includes. diff --git a/plugins/minimax-ai/minimax-pet/README.zh-CN.md b/plugins/minimax-ai/minimax-pet/README.zh-CN.md index ded2d144..8e567068 100644 --- a/plugins/minimax-ai/minimax-pet/README.zh-CN.md +++ b/plugins/minimax-ai/minimax-pet/README.zh-CN.md @@ -8,7 +8,7 @@ 将仓库 `plugins/minimax-ai/minimax-pet/` 完整复制到 `/plugins/minimax-pet/`,包括隐藏的 `.minimax-plugin`;默认 `` 为 `~/.minimax`,自定义数据目录时采用实际配置。不要复制外层作者目录。重启 MiniMax Code、确认插件启用后,从 MiniApp 列表打开“MiniMax Pet”,或对 Agent 说“打开 MiniMax Pet”。点击“放到桌面”显示透明桌宠窗口。 -外观页支持选择、导入预览和删除已导入宠物;任务页显示提醒、全部可见任务和最近回复;设置页提供大小、提醒管理和重连。桌面通知最多预览五行,点击后可滚动读完整内容,桌宠保持可见。观察到 ask 时显示“需要你回答”。 +外观页支持选择、导入预览和删除已导入宠物;任务页显示提醒、全部可见任务和按 Markdown 渲染的最近回复;设置页提供大小、提醒管理和重连。桌面通知最多预览五行,点击后可滚动读完整内容,桌宠保持可见。观察到 ask 时显示“需要你回答”。 在 MiniMax Code 3.1.11 及以上版本,面板和桌面上的任务详情都有“打开对话”按钮,任务需要回答时显示为“去回答”;点一下会把 MiniMax Code 主窗口切到这个对话。面板和桌面卡片的明暗也跟随 MiniMax Code 的主题。旧版本客户端不显示该按钮,明暗跟随系统设置。 @@ -16,6 +16,8 @@ **0.5.11** 新增可选内置宠物 **MMX 章鱼娘**,是一位橙发、白背心、棕格纹短裙的 Q 版全身章鱼娘。在“外观 → 选择宠物”中选择她即可;薄荷色机器人仍为默认宠物。她采用 v1 图集,包含九种动作,不含十六个视线方向,因此鼠标跟随对她不生效;沿用六帧、6.6 秒一轮的慢速待机,不新增权限或改变播放器。图集已通过校验。创作流程和贡献者许可见[素材说明](ARTWORK.md)。 +**0.7.0** 把任务最近回复按 Markdown 渲染:标题、强调、列表、任务清单、代码块、表格、引用和链接;回复里的原始 HTML 只作为文本显示,图片显示为文字标签而不发起网络请求。通知卡片和提醒预览仍为纯文本。解析使用 `npm run build:markdown` 打包的 unified + remark-parse + remark-gfm(MIT);页面不会把模型输出拼成 HTML 字符串。 + **0.6.0** 删除了菜单和外观页里的“打招呼”“跳一下”,删除了原属聊天草稿及其语音输入,不再申请麦克风权限;新增“打开对话/去回答”和主题跟随。支持基线仍为 MiniMax Code 3.1.6:两项新功能都先检测客户端能力,不需要新增权限。 旧的本地原型使用不同插件 ID。`minimax-pet` 会有独立的 Host 数据目录,安装本包不会自动搬迁旧插件的宠物和偏好;需要的素材先导出,保留旧安装和数据。 @@ -36,6 +38,8 @@ 偏好和用户导入素材写入独立的 `context.dataDir`;导入替换有中断恢复,删除限于本插件数据。不创建独立聊天、不写入聊天输入框、不逐会话点评、不自动调用模型、不发送或停止用户会话、不代答问卷。 +回复由随包 vendor 的解析器转为 Markdown 结构,再在页面里用 DOM 节点重建:原始 HTML 只按文本显示,不会插入页面或执行;链接只显示地址不打开;图片不请求,只显示文字标签。 + 只有在你点击“打开对话”或“去回答”时,页面才调用 `host.navigation.open({ id: 'session', sessionId, source: 'local' })`,目标是已通过 `session.read` 列出的会话。未声明 `hostAccess`,不读取你在 MiniMax Code 里停留的页面。`host.ui.subscribe` 只用来读取并应用主题,返回的语言不使用,无需授权。不使用也不声明麦克风、摄像头或系统通知。插件本身没有硬编码的外部服务地址,只使用分配的 loopback 源,不启动额外子进程或 shell。 ## Agent Skill @@ -46,6 +50,8 @@ 保留源码/分发双目录,构建与完整字节对比步骤见 [PROVENANCE.md](PROVENANCE.md)。原创代码、文档、两只内置宠物和图标均按 [MIT](LICENSE) 开源,作者为 MiniMax。默认的薄荷色机器人图集由可编辑的几何绘图代码生成;第二只内置宠物“MiniMax Code 章鱼娘”(`minimax-tako`)粉发、戴眼镜、酒红触手,由 MiniMax 图像生成根据用户提供的参考图绘制后拼成 v2 图集,无法用命令重新生成;紫色章鱼图标由 imagegen 根据用户提供的视觉参考生成,重新生成图集不会覆盖图标。详见[素材说明](ARTWORK.md);参考图和外部宠物图集不随包分发,用户自行导入的素材保留其各自许可。 +`miniapp/client/vendor/markdown.mjs` 打包了 unified、remark-parse、remark-gfm 依赖树里 59 个 MIT 许可的包,各自的版权声明保留在 `miniapp/client/vendor/markdown.LICENSE.txt`,该文件由 `npm run build:markdown` 按 esbuild 实际打包的包清单生成。 + 麦芽糖素材由 Fectivnfy112357 贡献,同样采用 MIT 许可。麦芽糖通过 MiniMax 章鱼娘工坊工作流创作,使用 OpenAI imagegen 生成,再裁切、等比缩放和组装为透明图集;重新生成默认图集不会覆盖她。 MMX 章鱼娘素材由 antianqi 贡献,同样采用 MIT 许可。她通过本机部署的开源扩散模型出图与出视频,再由本地脚本抽帧、抠透明、落格拼成 v1 图集,无法用命令重新生成;重新生成默认图集不会覆盖她。 diff --git a/plugins/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs b/plugins/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs index 6d8cebee..7f9651d2 100644 --- a/plugins/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs +++ b/plugins/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs @@ -1,3 +1,5 @@ +import { markdownToPlainText, renderMarkdown, resetMarkdown } from './markdown.mjs'; + const STATUS = { running: '进行中', error: '异常', completed: '已完成', aborted: '已停止', idle: '空闲', needs_answer: '需要你回答' }; const textOf = (value) => typeof value === 'string' ? value : ''; const failureCode = (error) => textOf(error?.code) || textOf(error?.message) || textOf(error) || 'result_unknown'; @@ -66,7 +68,7 @@ export function createCompactPetView({ const detailPane = element('div', 'compact-detail compact-body'); const detailTitle = element('strong', 'compact-detail-title'); const detailStatus = element('span', 'compact-detail-status'); detailStatus.setAttribute('role', 'status'); - const detailReply = element('p', 'compact-detail-reply'); + const detailReply = element('div', 'compact-detail-reply md'); detailReply.setAttribute('aria-label', '任务最近回复'); detailReply.tabIndex = 0; const detailFooter = element('div', 'compact-footer'); const back = button('返回任务', 'compact-detail-back compact-link', () => api.open(detailBackView)); @@ -112,7 +114,7 @@ export function createCompactPetView({ row.item = item; setText(row.title, textOf(item.title) || '未命名任务'); row.title.setAttribute('aria-label', `查看任务:${textOf(item.title) || '未命名任务'}`); - setText(row.preview, item.needsAnswer === true ? '需要你回答' : textOf(item.previewText)); row.preview.hidden = !row.preview.textContent; + setText(row.preview, item.needsAnswer === true ? '需要你回答' : markdownToPlainText(textOf(item.previewText))); row.preview.hidden = !row.preview.textContent; const status = taskStatus(item); setText(row.status, STATUS[status] || '待查看'); row.status.dataset.status = status; row.title.disabled = typeof onSelectTask !== 'function'; @@ -140,7 +142,14 @@ export function createCompactPetView({ else if (!id) text = '选择任务后查看回复。'; else if (!detail) text = '正在读取任务…'; else text = (detail.status === 'error' && textOf(detail.error)) || textOf(detail.lastAssistantText) || '该任务暂时没有可读取的最后回复。'; - setText(detailReply, text); + // Status copy stays plain text; an actual reply is markdown. renderMarkdown keeps + // the DOM when the text is unchanged, so a background refresh cannot reset the + // reader's scroll position. + if (needsAnswer || !available || taskSelection.detailLoading && !detail) { + if (detailReply.dataset.mdSource !== text) { resetMarkdown(detailReply); setText(detailReply, text); } + } else { + renderMarkdown(detailReply, text); + } detailPane.setAttribute('aria-busy', String(available && !needsAnswer && taskSelection.detailLoading === true)); if (paintedDetailId !== id) { detailReply.scrollTop = 0; detailPane.scrollTop = 0; paintedDetailId = id; diff --git a/plugins/minimax-ai/minimax-pet/miniapp/client/index.html b/plugins/minimax-ai/minimax-pet/miniapp/client/index.html index 60ea288c..7f1f2176 100644 --- a/plugins/minimax-ai/minimax-pet/miniapp/client/index.html +++ b/plugins/minimax-ai/minimax-pet/miniapp/client/index.html @@ -116,7 +116,7 @@

任务概览

-

+                
@@ -157,7 +157,7 @@

任务连接

版本与帮助
-

MiniMax Pet 0.6.0

+

MiniMax Pet 0.7.0

diff --git a/plugins/minimax-ai/minimax-pet/miniapp/client/markdown.mjs b/plugins/minimax-ai/minimax-pet/miniapp/client/markdown.mjs new file mode 100644 index 00000000..0d4237e6 --- /dev/null +++ b/plugins/minimax-ai/minimax-pet/miniapp/client/markdown.mjs @@ -0,0 +1,352 @@ +// MiniMax Pet — render an Agent reply as DOM. Parsing is delegated to the vendored +// unified + remark parser; this module decides which nodes reach the page and how. +// Nothing here builds an HTML string: every node is created with createElement or +// createTextNode, so model output can never inject markup. +import { parseMarkdown } from './vendor/markdown.mjs'; + +// A reply is at most a few thousand characters in practice. Keep a ceiling so one +// pathological response cannot stall the page, and bound the parse cache. +const MAX_SOURCE = 200_000; +const MAX_CACHE = 8; +const TRUNCATED_NOTE = '\n…(内容过长,已截断显示)'; +const HEADING_LEVEL_BASE = 2; + +const parses = new Map(); +const flats = new Map(); + +function remember(map, key, value) { + if (map.size >= MAX_CACHE) map.delete(map.keys().next().value); + map.set(key, value); + return value; +} + +function tree(text) { + const source = text.length > MAX_SOURCE ? text.slice(0, MAX_SOURCE) + TRUNCATED_NOTE : text; + const hit = parses.get(source); + if (hit) return hit; + let parsed; + try { + parsed = parseMarkdown(source); + } catch (error) { + console.warn('[pet] markdown_parse_failed:', error?.message ?? error); + parsed = { type: 'root', children: [{ type: 'paragraph', children: [{ type: 'text', value: source }] }] }; + } + return remember(parses, source, parsed); +} + +// --------------------------------------------------------------------------- +// Inline nodes +// --------------------------------------------------------------------------- + +function inlineNode(doc, node) { + switch (node.type) { + case 'text': + return doc.createTextNode(typeof node.value === 'string' ? node.value : ''); + case 'break': + return doc.createElement('br'); + case 'inlineCode': { + const code = doc.createElement('code'); + code.className = 'md-code-inline'; + code.textContent = typeof node.value === 'string' ? node.value : ''; + return code; + } + case 'inlineMath': + case 'math': { + const span = doc.createElement('span'); + span.className = 'md-formula'; + span.textContent = typeof node.value === 'string' ? node.value : ''; + return span; + } + case 'inlineHtml': + // Inline HTML tags are dropped: their text stays, the tag never renders. + return doc.createTextNode(''); + case 'html': + // A single-line HTML block cannot be laid out as a block; keep it as text. + return doc.createTextNode(typeof node.value === 'string' ? node.value : ''); + case 'image': { + // Images are not fetched; the alt text keeps the meaning without a network + // request. Rendering the URL would expose remote hosts to the reply. + const span = doc.createElement('span'); + span.className = 'md-image'; + span.textContent = `[图片${node.alt ? `:${node.alt}` : ''}]`; + return span; + } + case 'link': { + // The page cannot open external URLs; keep the label and show the target on hover. + // Only sane web targets are exposed, so a reply cannot hang a javascript: URL on + // a hover label where a reader might copy it. + const span = doc.createElement('span'); + span.className = 'md-link'; + const url = typeof node.url === 'string' ? node.url : ''; + if (/^(?:https?:|mailto:)/iu.test(url)) span.title = url; + else if (url) span.classList.add('md-link-blocked'); + appendInline(doc, span, node.children); + return span; + } + case 'strong': + case 'emphasis': + case 'delete': { + const tag = node.type === 'strong' ? 'strong' : node.type === 'emphasis' ? 'em' : 'del'; + const el = doc.createElement(tag); + appendInline(doc, el, node.children); + return el; + } + default: { + const span = doc.createElement('span'); + appendInline(doc, span, node.children); + return span; + } + } +} + +function appendInline(doc, parent, children) { + for (const child of Array.isArray(children) ? children : []) parent.append(inlineNode(doc, child)); +} + +// --------------------------------------------------------------------------- +// Block nodes +// --------------------------------------------------------------------------- + +function blockNode(doc, node) { + switch (node.type) { + case 'paragraph': { + const p = doc.createElement('p'); + p.className = 'md-p'; + appendInline(doc, p, node.children); + return p; + } + case 'heading': { + // A reply sits inside a page that already owns its h1/h2, so keep the visual + // levels without adding competing document headings. + const div = doc.createElement('div'); + div.className = 'md-heading'; + div.dataset.depth = String(Math.min(Math.max(Number(node.depth) || 1, 1), 6)); + div.setAttribute('role', 'heading'); + div.setAttribute('aria-level', String(Math.min((Number(node.depth) || 1) + HEADING_LEVEL_BASE, 6))); + appendInline(doc, div, node.children); + return div; + } + case 'list': { + const list = doc.createElement(node.ordered ? 'ol' : 'ul'); + list.className = 'md-list'; + if (node.ordered && Number.isInteger(node.start) && node.start !== 1) list.start = node.start; + for (const item of Array.isArray(node.children) ? node.children : []) { + if (item.type !== 'listItem') continue; + const li = doc.createElement('li'); + li.className = 'md-li'; + if (item.checked === true || item.checked === false) { + li.classList.add('md-task'); + li.dataset.checked = String(item.checked); + } + appendBlocks(doc, li, item.children, { tight: !item.spread }); + list.append(li); + } + return list; + } + case 'code': { + const pre = doc.createElement('pre'); + pre.className = 'md-pre'; + const code = doc.createElement('code'); + if (typeof node.lang === 'string' && node.lang) pre.dataset.lang = node.lang; + code.textContent = typeof node.value === 'string' ? node.value : ''; + pre.append(code); + return pre; + } + case 'blockquote': { + const quote = doc.createElement('blockquote'); + quote.className = 'md-quote'; + appendBlocks(doc, quote, node.children, {}); + return quote; + } + case 'thematicBreak': { + const rule = doc.createElement('hr'); + rule.className = 'md-rule'; + return rule; + } + case 'table': { + const wrap = doc.createElement('div'); + wrap.className = 'md-table'; + // Wide tables scroll inside the card instead of widening the page. + wrap.tabIndex = 0; + wrap.setAttribute('role', 'region'); + wrap.setAttribute('aria-label', '任务回复中的表格'); + const table = doc.createElement('table'); + const rows = Array.isArray(node.children) ? node.children : []; + const header = rows.find((row) => row.type === 'tableRow'); + if (header) { + const thead = doc.createElement('thead'); + thead.append(tableRow(doc, header, 'th')); + table.append(thead); + } + const body = rows.filter((row) => row.type === 'tableRow' && row !== header); + if (body.length) { + const tbody = doc.createElement('tbody'); + for (const row of body) tbody.append(tableRow(doc, row, 'td')); + table.append(tbody); + } + wrap.append(table); + return wrap; + } + case 'html': { + // Raw HTML is shown as its literal source, never parsed: the author meant it + // to be a block, so dropping it silently would hide half the reply. + const p = doc.createElement('p'); + p.className = 'md-p md-raw'; + p.textContent = typeof node.value === 'string' ? node.value : ''; + return p; + } + case 'tableRow': + case 'tableCell': + // Only reachable through a table; a stray cell keeps its inline content. + return textParagraph(doc, inlineText(node)); + default: { + // Unknown block types (footnote definitions, definition lists, math blocks) + // degrade to their text rather than disappearing. + const container = doc.createElement('div'); + container.className = 'md-block'; + appendBlocks(doc, container, node.children, {}); + if (!container.childNodes.length) container.textContent = inlineText(node); + return container; + } + } +} + +function textParagraph(doc, text) { + const p = doc.createElement('p'); + p.className = 'md-p'; + p.textContent = text; + return p; +} + +function tableRow(doc, row, cellTag) { + const tr = doc.createElement('tr'); + for (const cell of Array.isArray(row.children) ? row.children : []) { + if (cell.type !== 'tableCell') continue; + const td = doc.createElement(cellTag); + if (cellTag === 'th') td.scope = 'col'; + if (typeof cell.align === 'string') td.dataset.align = cell.align; + appendInline(doc, td, cell.children); + tr.append(td); + } + return tr; +} + +function appendBlocks(doc, parent, children, { tight = false } = {}) { + for (const child of Array.isArray(children) ? children : []) { + if (!child || child.type === 'footnoteDefinition') continue; + const node = blockNode(doc, child); + // A list item that holds only paragraphs becomes plain inline content when the + // list is tight, matching how markdown renders without paragraph spacing. + if (tight && child.type === 'paragraph' && node.classList?.contains('md-p')) { + const fragment = doc.createDocumentFragment(); + appendInline(doc, fragment, child.children); + parent.append(fragment); + } else if (node) { + parent.append(node); + } + } +} + +// --------------------------------------------------------------------------- +// Public API +// --------------------------------------------------------------------------- + +/** Renders markdown into `target`, replacing its content only when the text changed. */ +export function renderMarkdown(target, text) { + const source = typeof text === 'string' ? text : ''; + if (target.dataset.mdSource === source) return false; + const doc = target.ownerDocument; + const fragment = doc.createDocumentFragment(); + for (const child of tree(source).children) { + if (!child || child.type === 'footnoteDefinition') continue; + const node = blockNode(doc, child); + if (node) fragment.append(node); + } + target.replaceChildren(fragment); + target.dataset.mdSource = source; + target.classList.add('md'); + return true; +} + +/** Drops the cached render so the next call repaints (used when the target is reused). */ +export function resetMarkdown(target) { + delete target.dataset.mdSource; +} + +// --------------------------------------------------------------------------- +// Plain text, for the five-line previews +// --------------------------------------------------------------------------- + +function inlineText(node) { + switch (node.type) { + case 'text': + case 'inlineCode': + return typeof node.value === 'string' ? node.value : ''; + case 'inlineMath': + case 'math': + return typeof node.value === 'string' ? `$${node.value}$` : ''; + case 'break': + return ' '; + case 'html': + case 'inlineHtml': + return typeof node.value === 'string' ? node.value : ''; + case 'image': + return node.alt ? `[图片:${node.alt}]` : '[图片]'; + case 'link': + case 'strong': + case 'emphasis': + case 'delete': + default: + return (Array.isArray(node.children) ? node.children : []).map(inlineText).join(''); + } +} + +function blockText(node, depth = 0) { + switch (node.type) { + case 'paragraph': + case 'heading': + return inlineText(node); + case 'code': + return typeof node.value === 'string' ? node.value : ''; + case 'thematicBreak': + return '—'; + case 'html': + return typeof node.value === 'string' ? node.value : ''; + case 'list': { + const items = Array.isArray(node.children) ? node.children : []; + return items.map((item, index) => { + const marker = item.checked === true ? '[x] ' : item.checked === false ? '[ ] ' + : node.ordered ? `${(Number.isInteger(node.start) ? node.start : 1) + index}. ` : '• '; + // A nested list carries no depth of its own, so collect the item's blocks + // here and indent every continuation line under the marker text. + const body = (Array.isArray(item.children) ? item.children : []).map((child) => blockText(child, depth)).join('\n'); + const indent = `${' '.repeat(depth)}${' '.repeat(marker.length)}`; + const indented = body.split('\n').filter((line, lineIndex) => lineIndex === 0 || line).join(`\n${indent}`); + return `${' '.repeat(depth)}${marker}${indented}`; + }).join('\n'); + } + case 'table': { + const rows = Array.isArray(node.children) ? node.children : []; + return rows.map((row) => (Array.isArray(row.children) ? row.children : []).map((cell) => (Array.isArray(cell.children) ? cell.children : []).map(inlineText).join('')).join('\t')).join('\n'); + } + case 'blockquote': + return (Array.isArray(node.children) ? node.children : []).map((child) => blockText(child, depth)).join('\n'); + default: + return (Array.isArray(node.children) ? node.children : []).map((child) => blockText(child, depth)).join('\n'); + } +} + +/** Flattens markdown to text for previews, which only ever show a few lines. */ +export function markdownToPlainText(text) { + const source = typeof text === 'string' ? text : ''; + if (!source.trim()) return ''; + const hit = flats.get(source); + if (hit !== undefined) return hit; + const flat = tree(source).children + .filter((child) => child && child.type !== 'footnoteDefinition') + .map((child) => blockText(child)) + .join('\n') + .replace(/\n{3,}/g, '\n\n') + .trim(); + return remember(flats, source, flat); +} diff --git a/plugins/minimax-ai/minimax-pet/miniapp/client/pet-app.js b/plugins/minimax-ai/minimax-pet/miniapp/client/pet-app.js index a6bbb345..960620b4 100644 --- a/plugins/minimax-ai/minimax-pet/miniapp/client/pet-app.js +++ b/plugins/minimax-ai/minimax-pet/miniapp/client/pet-app.js @@ -9,6 +9,7 @@ import { createWorkbenchWindow } from './workbench-window.mjs'; import { createNotificationPreviews } from './notification-previews.mjs'; import { createAskObserver } from './ask-observer.mjs'; import { createPanelNavigation } from './panel-navigation.mjs'; +import { markdownToPlainText, renderMarkdown } from './markdown.mjs'; // --------------------------------------------------------------------------- // Constants @@ -985,7 +986,8 @@ function renderNotificationStack() { } const open = node.children[0]; open.children[0].textContent = item.title; - open.children[1].textContent = notificationText(item, previews); + // A notification shows a five-line preview, so markdown is flattened, not rendered. + open.children[1].textContent = markdownToPlainText(notificationText(item, previews)); open.setAttribute('aria-label', `查看通知:${item.title}`); node.children[1].setAttribute('aria-label', `关闭通知:${item.title}`); return node; @@ -1762,7 +1764,9 @@ function renderDetail() { els.detailError.textContent = detail?.error || app.detailError || ''; els.detailError.hidden = !els.detailError.textContent; const reply = needsAnswer ? '需要你回答' : detail?.lastAssistantText || ''; - if (els.detailReply.textContent !== reply) els.detailReply.textContent = reply; + // The reply is markdown; renderMarkdown keeps the DOM when the text is unchanged, + // so a background refresh cannot disturb the reading position. + renderMarkdown(els.detailReply, reply); if (panelDetailId !== app.selectedSessionId) { els.detailReply.scrollTop = 0; panelDetailId = app.selectedSessionId; } renderDetailOpen(needsAnswer); els.detailNote.textContent = app.source === 'demo' ? '资源动作预览,不提供真实任务概览。' @@ -1802,7 +1806,7 @@ function renderCompactView() { const notice = reminders.getState(); notificationPreviews?.update({ availability: app.availability, items: notificationItems(notice.items) }); const previews = notificationPreviews?.getState().previews ?? {}; - workbenchView?.update({ reminders: { ...notice, items: notice.items.map((item) => ({ ...item, previewText: item.needsAnswer ? '需要你回答' : previews[item.sessionId] || '' })) }, allSessions: app.sessions, + workbenchView?.update({ reminders: { ...notice, items: notice.items.map((item) => ({ ...item, previewText: item.needsAnswer ? '需要你回答' : markdownToPlainText(previews[item.sessionId] || '') })) }, allSessions: app.sessions, taskSelection: { availability: app.availability, selectedSessionId: app.selectedSessionId, session: app.sessions.find((row) => row.sessionId === app.selectedSessionId), detail: app.detail, detailLoading: app.detailLoading, detailError: app.detailError } }); } diff --git a/plugins/minimax-ai/minimax-pet/miniapp/client/pet.css b/plugins/minimax-ai/minimax-pet/miniapp/client/pet.css index dd35b03b..409b8a1d 100644 --- a/plugins/minimax-ai/minimax-pet/miniapp/client/pet.css +++ b/plugins/minimax-ai/minimax-pet/miniapp/client/pet.css @@ -794,7 +794,6 @@ html.mode-window .pet-sprite:focus-visible { .last-reply { max-height: 20rem; overflow: auto; - white-space: pre-wrap; overflow-wrap: anywhere; font: inherit; user-select: text; @@ -850,7 +849,18 @@ html.mode-window .pet-sprite:focus-visible { .pet-notice-preview { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 5; overflow: hidden; color: var(--mcode-text-muted); overflow-wrap: anywhere; } .compact-detail-title { margin: 0; font-size: 12px; line-height: 18px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .compact-detail-status { margin: 2px 0 2px 6px; font-size: 11px; line-height: 16px; color: var(--mcode-text-muted); } -.compact-detail-reply { margin: 5px 0; max-height: 126px; overflow: auto; overscroll-behavior: contain; white-space: pre-wrap; overflow-wrap: anywhere; user-select: text; -webkit-user-select: text; } +.compact-detail-reply { margin: 5px 0; max-height: 126px; overflow: auto; overscroll-behavior: contain; overflow-wrap: anywhere; user-select: text; -webkit-user-select: text; } +/* The desktop card is 280px wide; keep the same structure at a tighter scale. */ +.compact-detail-reply.md { font-size: 12px; line-height: 17px; text-align: left; } +.compact-detail-reply.md .md-p, +.compact-detail-reply.md .md-list, +.compact-detail-reply.md .md-pre, +.compact-detail-reply.md .md-table, +.compact-detail-reply.md .md-quote { margin-bottom: 5px; } +.compact-detail-reply.md .md-heading { margin: 8px 0 4px; font-size: 13px; line-height: 18px; } +.compact-detail-reply.md .md-pre { padding: 6px 8px; } +.compact-detail-reply.md .md-table th, +.compact-detail-reply.md .md-table td { padding: 3px 6px; font-size: 11px; } .compact-detail-back { color: var(--mcode-text-muted); font-size: 11px; } .compact-open { font-size: 11px; font-weight: 600; } .pet-notice-dismiss { flex: none; border: 0; background: transparent; color: var(--mcode-text-muted); cursor: pointer; font-size: 15px; padding: 0 2px 0 6px; } @@ -866,6 +876,174 @@ summary { cursor: pointer; color: var(--mcode-text-muted); font-size: 12px; } +/* ------------------------------------------------------------------ */ +/* Markdown replies (markdown.mjs) */ +/* ------------------------------------------------------------------ */ + +/* Only structure the parser emitted lives in here; every value comes from the + --mcode-* roles the page already defines, so both themes stay readable. */ +.md { + font-size: 14px; + line-height: 22px; + color: var(--mcode-text); + overflow-wrap: anywhere; +} + +.md > :first-child { margin-top: 0; } +.md > :last-child { margin-bottom: 0; } + +.md .md-p { + margin: 0 0 8px; + white-space: pre-wrap; +} + +.md .md-heading { + margin: 16px 0 8px; + font-weight: 600; + color: var(--mcode-text); + line-height: 24px; +} + +.md .md-heading[data-depth='1'], +.md .md-heading[data-depth='2'] { font-size: 16px; } +.md .md-heading[data-depth='3'] { font-size: 15px; } +.md .md-heading[data-depth='4'], +.md .md-heading[data-depth='5'], +.md .md-heading[data-depth='6'] { font-size: 14px; } + +.md .md-list { + margin: 0 0 8px; + padding-left: 20px; +} + +.md .md-li { margin: 2px 0; } + +.md .md-task { + list-style: none; + margin-left: -20px; + padding-left: 20px; + position: relative; +} + +.md .md-task::before { + position: absolute; + left: 0; + content: '☐'; + color: var(--mcode-text-muted); +} + +.md .md-task[data-checked='true']::before { + content: '☑'; + color: var(--mcode-accent); +} + +.md .md-code-inline { + padding: 1px 4px; + border-radius: 4px; + background: var(--mcode-surface-muted); + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 12px; + overflow-wrap: anywhere; +} + +.md .md-pre { + margin: 0 0 8px; + padding: 8px 10px; + border: 1px solid var(--mcode-border); + border-radius: 8px; + background: var(--mcode-surface-muted); + overflow: auto; + overscroll-behavior: contain; +} + +.md .md-pre code { + display: block; + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 12px; + line-height: 18px; + white-space: pre; +} + +.md .md-pre[data-lang]::after { + display: block; + margin-top: 6px; + color: var(--mcode-text-subtle); + content: attr(data-lang); + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 11px; + line-height: 16px; +} + +.md .md-quote { + margin: 0 0 8px; + padding: 0 0 0 10px; + border-left: 2px solid var(--mcode-border); + color: var(--mcode-text-muted); +} + +.md .md-rule { + height: 1px; + margin: 12px 0; + border: 0; + background: var(--mcode-border); +} + +.md .md-table { + margin: 0 0 8px; + overflow-x: auto; + overscroll-behavior: contain; +} + +.md .md-table table { + border-collapse: collapse; + font-size: 12px; + line-height: 18px; +} + +.md .md-table th, +.md .md-table td { + padding: 4px 8px; + border: 1px solid var(--mcode-border); + text-align: left; + vertical-align: top; +} + +.md .md-table th { + background: var(--mcode-surface-muted); + font-weight: 600; + white-space: nowrap; +} + +.md .md-table td[data-align='center'] { text-align: center; } +.md .md-table td[data-align='right'] { text-align: right; } + +.md .md-link { + color: var(--mcode-accent); + text-decoration: underline; + text-underline-offset: 2px; + cursor: help; +} + +.md .md-link-blocked { color: var(--mcode-text); cursor: text; } + +.md .md-image { color: var(--mcode-text-muted); } + +.md .md-formula { + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 12px; +} + +.md .md-raw { + color: var(--mcode-text-muted); + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 12px; +} + +.md .md-block { margin: 0 0 8px; } + +.md strong { font-weight: 600; } +.md del { color: var(--mcode-text-muted); } + /* Main panel: appearance, task reading, and settings share one quiet surface. All selectors are panel-scoped so the desktop companion keeps its layout. */ html.mode-inline, @@ -1347,7 +1525,6 @@ html.mode-inline body { overflow: auto; overscroll-behavior: contain; scrollbar-gutter: stable; - line-height: 1.7; } #panel #session-msg { diff --git a/plugins/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.LICENSE.txt b/plugins/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.LICENSE.txt new file mode 100644 index 00000000..cd351662 --- /dev/null +++ b/plugins/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.LICENSE.txt @@ -0,0 +1,1392 @@ +# Third-party notices: vendored markdown parser + +miniapp/client/vendor/markdown.mjs bundles the packages below into one module. Each is +redistributed unmodified in bundled form; only these packages are included. + +### bail@2.0.2 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### ccount@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### character-entities@2.0.2 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### decode-named-character-reference@1.3.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### devlop@1.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2023 Titus Wormer + +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. +### escape-string-regexp@5.0.0 — MIT — Sindre Sorhus + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +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. +### extend@3.0.2 — MIT — Stefan Thomas (http://www.justmoon.net) + +The MIT License (MIT) + +Copyright (c) 2014 Stefan Thomas + +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. +### is-plain-obj@4.1.0 — MIT — Sindre Sorhus + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +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. +### longest-streak@3.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### markdown-table@3.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-find-and-replace@3.0.4 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-from-markdown@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm@3.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-autolink-literal@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-footnote@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-strikethrough@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-table@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-task-list-item@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-phrasing@4.1.0 — MIT — Victor Felder (https://draft.li) + +(The MIT License) + +Copyright (c) 2017 Titus Wormer +Copyright (c) 2017 Victor Felder + +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. +### mdast-util-to-markdown@2.2.3 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-to-string@4.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### micromark@4.0.3 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-core-commonmark@2.0.4 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-extension-gfm@3.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-extension-gfm-autolink-literal@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-extension-gfm-footnote@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2021 Titus Wormer + +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. +### micromark-extension-gfm-strikethrough@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-extension-gfm-table@2.1.2 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-extension-gfm-tagfilter@2.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-extension-gfm-task-list-item@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-factory-destination@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-factory-label@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-factory-space@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-factory-title@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-factory-whitespace@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-character@2.1.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-chunked@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-classify-character@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-combine-extensions@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-decode-numeric-character-reference@2.0.2 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-decode-string@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-edit-map@1.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-encode@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-html-tag-name@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-normalize-identifier@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-resolve-all@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-sanitize-uri@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-subtokenize@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### remark-gfm@4.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### remark-parse@11.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2014 Titus Wormer + +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. +### trough@2.2.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +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. +### unified@11.0.5 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### unist-util-is@6.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT license) + +Copyright (c) 2015 Titus Wormer + +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. +### unist-util-stringify-position@4.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +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. +### unist-util-visit@5.2.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### unist-util-visit-parents@6.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### vfile@6.0.3 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### vfile-message@4.0.4 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### zwitch@2.0.4 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +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/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.mjs b/plugins/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.mjs new file mode 100644 index 00000000..30a5f90d --- /dev/null +++ b/plugins/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.mjs @@ -0,0 +1,32 @@ +/* + * Generated by tools/build-markdown.mjs — do not edit by hand. + * + * Bundles unified, remark-parse and remark-gfm into one browser ESM module. + * unified MIT, Copyright (c) Titus Wormer + * remark-parse MIT, Copyright (c) Titus Wormer + * remark-gfm MIT, Copyright (c) Titus Wormer + * See vendor/markdown.LICENSE.txt and the package's PROVENANCE.md. Rebuild with + * `npm run build:markdown`; the committed file is the distributable source of truth. + */ +var Zi=Object.create;var Ot=Object.defineProperty;var Ki=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames;var Ji=Object.getPrototypeOf,Xi=Object.prototype.hasOwnProperty;var eo=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),to=(e,n)=>{for(var t in n)Ot(e,t,{get:n[t],enumerable:!0})},no=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of $i(n))!Xi.call(e,i)&&i!==t&&Ot(e,i,{get:()=>n[i],enumerable:!(r=Ki(n,i))||r.enumerable});return e};var ro=(e,n,t)=>(t=e!=null?Zi(Ji(e)):{},no(n||!e||!e.__esModule?Ot(t,"default",{value:e,enumerable:!0}):t,e));var mr=eo((Lu,hr)=>{"use strict";var st=Object.prototype.hasOwnProperty,pr=Object.prototype.toString,ar=Object.defineProperty,lr=Object.getOwnPropertyDescriptor,ur=function(n){return typeof Array.isArray=="function"?Array.isArray(n):pr.call(n)==="[object Array]"},sr=function(n){if(!n||pr.call(n)!=="[object Object]")return!1;var t=st.call(n,"constructor"),r=n.constructor&&n.constructor.prototype&&st.call(n.constructor.prototype,"isPrototypeOf");if(n.constructor&&!t&&!r)return!1;var i;for(i in n);return typeof i>"u"||st.call(n,i)},cr=function(n,t){ar&&t.name==="__proto__"?ar(n,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):n[t.name]=t.newValue},fr=function(n,t){if(t==="__proto__")if(st.call(n,t)){if(lr)return lr(n,t).value}else return;return n[t]};hr.exports=function e(){var n,t,r,i,a,o,l=arguments[0],u=1,s=arguments.length,c=!1;for(typeof l=="boolean"&&(c=l,l=arguments[1]||{},u=2),(l==null||typeof l!="object"&&typeof l!="function")&&(l={});uo.length,u;l&&o.push(i);try{u=e.apply(this,o)}catch(s){let c=s;if(l&&t)throw c;return i(c)}l||(u&&u.then&&typeof u.then=="function"?u.then(a,i):u instanceof Error?i(u):a(u))}function i(o,...l){t||(t=!0,n(o,...l))}function a(o){i(null,o)}}function ke(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?dr(e.position):"start"in e||"end"in e?dr(e):"line"in e||"column"in e?Ut(e):""}function Ut(e){return xr(e&&e.line)+":"+xr(e&&e.column)}function dr(e){return Ut(e&&e.start)+"-"+Ut(e&&e.end)}function xr(e){return e&&typeof e=="number"?e:1}var Re=class extends Error{constructor(n,t,r){super(),typeof t=="string"&&(r=t,t=void 0);let i="",a={},o=!1;if(t&&("line"in t&&"column"in t?a={place:t}:"start"in t&&"end"in t?a={place:t}:"type"in t?a={ancestors:[t],place:t.position}:a={...t}),typeof n=="string"?i=n:!a.cause&&n&&(o=!0,i=n.message,a.cause=n),!a.ruleId&&!a.source&&typeof r=="string"){let u=r.indexOf(":");u===-1?a.ruleId=r:(a.source=r.slice(0,u),a.ruleId=r.slice(u+1))}if(!a.place&&a.ancestors){let u=a.ancestors[a.ancestors.length-1];u&&(a.place=u.position)}let l=a.place&&"start"in a.place?a.place.start:a.place;this.ancestors=a.ancestors||void 0,this.cause=a.cause||void 0,this.column=l?l.column:void 0,this.fatal=void 0,this.file="",this.message=i,this.line=l?l.line:void 0,this.name=ke(a.place)||"1:1",this.place=a.place||void 0,this.reason=this.message,this.ruleId=a.ruleId||void 0,this.source=a.source||void 0,this.stack=o&&a.cause&&typeof a.cause.stack=="string"?a.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};Object.defineProperties(Re.prototype,{file:{configurable:!0,enumerable:!0,value:"",writable:!0},name:{configurable:!0,enumerable:!0,value:"",writable:!0},reason:{configurable:!0,enumerable:!0,value:"",writable:!0},message:{configurable:!0,enumerable:!0,value:"",writable:!0},stack:{configurable:!0,enumerable:!0,value:"",writable:!0},column:{configurable:!0,enumerable:!0,writable:!0},line:{configurable:!0,enumerable:!0,writable:!0},ancestors:{configurable:!0,enumerable:!0,writable:!0},cause:{configurable:!0,enumerable:!0,writable:!0},fatal:{configurable:!0,enumerable:!0,writable:!0},place:{configurable:!0,enumerable:!0,writable:!0},ruleId:{configurable:!0,enumerable:!0,writable:!0},source:{configurable:!0,enumerable:!0,writable:!0}});var oe={basename:io,dirname:oo,extname:ao,join:lo,sep:"/"};function io(e,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');Ze(e);let t=0,r=-1,i=e.length,a;if(n===void 0||n.length===0||n.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){t=i+1;break}}else r<0&&(a=!0,r=i+1);return r<0?"":e.slice(t,r)}if(n===e)return"";let o=-1,l=n.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){t=i+1;break}}else o<0&&(a=!0,o=i+1),l>-1&&(e.codePointAt(i)===n.codePointAt(l--)?l<0&&(r=i):(l=-1,r=o));return t===r?r=o:r<0&&(r=e.length),e.slice(t,r)}function oo(e){if(Ze(e),e.length===0)return".";let n=-1,t=e.length,r;for(;--t;)if(e.codePointAt(t)===47){if(r){n=t;break}}else r||(r=!0);return n<0?e.codePointAt(0)===47?"/":".":n===1&&e.codePointAt(0)===47?"//":e.slice(0,n)}function ao(e){Ze(e);let n=e.length,t=-1,r=0,i=-1,a=0,o;for(;n--;){let l=e.codePointAt(n);if(l===47){if(o){r=n+1;break}continue}t<0&&(o=!0,t=n+1),l===46?i<0?i=n:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||t<0||a===0||a===1&&i===t-1&&i===r+1?"":e.slice(i,t)}function lo(...e){let n=-1,t;for(;++n0&&e.codePointAt(e.length-1)===47&&(t+="/"),n?"/"+t:t}function so(e,n){let t="",r=0,i=-1,a=0,o=-1,l,u;for(;++o<=e.length;){if(o2){if(u=t.lastIndexOf("/"),u!==t.length-1){u<0?(t="",r=0):(t=t.slice(0,u),r=t.length-1-t.lastIndexOf("/")),i=o,a=0;continue}}else if(t.length>0){t="",r=0,i=o,a=0;continue}}n&&(t=t.length>0?t+"/..":"..",r=2)}else t.length>0?t+="/"+e.slice(i+1,o):t=e.slice(i+1,o),r=o-i-1;i=o,a=0}else l===46&&a>-1?a++:a=-1}return t}function Ze(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}var kr={cwd:co};function co(){return"/"}function Be(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function br(e){if(typeof e=="string")e=new URL(e);else if(!Be(e)){let n=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw n.code="ERR_INVALID_ARG_TYPE",n}if(e.protocol!=="file:"){let n=new TypeError("The URL must be of scheme file");throw n.code="ERR_INVALID_URL_SCHEME",n}return fo(e)}function fo(e){if(e.hostname!==""){let r=new TypeError('File URL host must be "localhost" or empty on darwin');throw r.code="ERR_INVALID_FILE_URL_HOST",r}let n=e.pathname,t=-1;for(;++t0){let[p,...d]=c,S=r[h][1];Ye(S)&&Ye(p)&&(p=(0,ft.default)(!0,S,p)),r[h]=[s,p,...d]}}}},$t=new Kt().freeze();function Qt(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Yt(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Zt(e,n){if(n)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Sr(e){if(!Ye(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Er(e,n,t){if(!t)throw new Error("`"+e+"` finished async. Use `"+n+"` instead")}function ct(e){return mo(e)?e:new Ke(e)}function mo(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function go(e){return typeof e=="string"||xo(e)}function xo(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}var ko={};function ge(e,n){let t=n||ko,r=typeof t.includeImageAlt=="boolean"?t.includeImageAlt:!0,i=typeof t.includeHtml=="boolean"?t.includeHtml:!0;return Cr(e,r,i)}function Cr(e,n,t){if(bo(e)){if("value"in e)return e.type==="html"&&!t?"":e.value;if(n&&"alt"in e&&e.alt)return e.alt;if("children"in e)return Ar(e.children,n,t)}return Array.isArray(e)?Ar(e,n,t):""}function Ar(e,n,t){let r=[],i=-1;for(;++i",Gamma:"\u0393",Gammad:"\u03DC",Gbreve:"\u011E",Gcedil:"\u0122",Gcirc:"\u011C",Gcy:"\u0413",Gdot:"\u0120",Gfr:"\u{1D50A}",Gg:"\u22D9",Gopf:"\u{1D53E}",GreaterEqual:"\u2265",GreaterEqualLess:"\u22DB",GreaterFullEqual:"\u2267",GreaterGreater:"\u2AA2",GreaterLess:"\u2277",GreaterSlantEqual:"\u2A7E",GreaterTilde:"\u2273",Gscr:"\u{1D4A2}",Gt:"\u226B",HARDcy:"\u042A",Hacek:"\u02C7",Hat:"^",Hcirc:"\u0124",Hfr:"\u210C",HilbertSpace:"\u210B",Hopf:"\u210D",HorizontalLine:"\u2500",Hscr:"\u210B",Hstrok:"\u0126",HumpDownHump:"\u224E",HumpEqual:"\u224F",IEcy:"\u0415",IJlig:"\u0132",IOcy:"\u0401",Iacute:"\xCD",Icirc:"\xCE",Icy:"\u0418",Idot:"\u0130",Ifr:"\u2111",Igrave:"\xCC",Im:"\u2111",Imacr:"\u012A",ImaginaryI:"\u2148",Implies:"\u21D2",Int:"\u222C",Integral:"\u222B",Intersection:"\u22C2",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",Iogon:"\u012E",Iopf:"\u{1D540}",Iota:"\u0399",Iscr:"\u2110",Itilde:"\u0128",Iukcy:"\u0406",Iuml:"\xCF",Jcirc:"\u0134",Jcy:"\u0419",Jfr:"\u{1D50D}",Jopf:"\u{1D541}",Jscr:"\u{1D4A5}",Jsercy:"\u0408",Jukcy:"\u0404",KHcy:"\u0425",KJcy:"\u040C",Kappa:"\u039A",Kcedil:"\u0136",Kcy:"\u041A",Kfr:"\u{1D50E}",Kopf:"\u{1D542}",Kscr:"\u{1D4A6}",LJcy:"\u0409",LT:"<",Lacute:"\u0139",Lambda:"\u039B",Lang:"\u27EA",Laplacetrf:"\u2112",Larr:"\u219E",Lcaron:"\u013D",Lcedil:"\u013B",Lcy:"\u041B",LeftAngleBracket:"\u27E8",LeftArrow:"\u2190",LeftArrowBar:"\u21E4",LeftArrowRightArrow:"\u21C6",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27E6",LeftDownTeeVector:"\u2961",LeftDownVector:"\u21C3",LeftDownVectorBar:"\u2959",LeftFloor:"\u230A",LeftRightArrow:"\u2194",LeftRightVector:"\u294E",LeftTee:"\u22A3",LeftTeeArrow:"\u21A4",LeftTeeVector:"\u295A",LeftTriangle:"\u22B2",LeftTriangleBar:"\u29CF",LeftTriangleEqual:"\u22B4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVector:"\u21BF",LeftUpVectorBar:"\u2958",LeftVector:"\u21BC",LeftVectorBar:"\u2952",Leftarrow:"\u21D0",Leftrightarrow:"\u21D4",LessEqualGreater:"\u22DA",LessFullEqual:"\u2266",LessGreater:"\u2276",LessLess:"\u2AA1",LessSlantEqual:"\u2A7D",LessTilde:"\u2272",Lfr:"\u{1D50F}",Ll:"\u22D8",Lleftarrow:"\u21DA",Lmidot:"\u013F",LongLeftArrow:"\u27F5",LongLeftRightArrow:"\u27F7",LongRightArrow:"\u27F6",Longleftarrow:"\u27F8",Longleftrightarrow:"\u27FA",Longrightarrow:"\u27F9",Lopf:"\u{1D543}",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",Lscr:"\u2112",Lsh:"\u21B0",Lstrok:"\u0141",Lt:"\u226A",Map:"\u2905",Mcy:"\u041C",MediumSpace:"\u205F",Mellintrf:"\u2133",Mfr:"\u{1D510}",MinusPlus:"\u2213",Mopf:"\u{1D544}",Mscr:"\u2133",Mu:"\u039C",NJcy:"\u040A",Nacute:"\u0143",Ncaron:"\u0147",Ncedil:"\u0145",Ncy:"\u041D",NegativeMediumSpace:"\u200B",NegativeThickSpace:"\u200B",NegativeThinSpace:"\u200B",NegativeVeryThinSpace:"\u200B",NestedGreaterGreater:"\u226B",NestedLessLess:"\u226A",NewLine:` +`,Nfr:"\u{1D511}",NoBreak:"\u2060",NonBreakingSpace:"\xA0",Nopf:"\u2115",Not:"\u2AEC",NotCongruent:"\u2262",NotCupCap:"\u226D",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226F",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226B\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2A7E\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224E\u0338",NotHumpEqual:"\u224F\u0338",NotLeftTriangle:"\u22EA",NotLeftTriangleBar:"\u29CF\u0338",NotLeftTriangleEqual:"\u22EC",NotLess:"\u226E",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226A\u0338",NotLessSlantEqual:"\u2A7D\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2AA2\u0338",NotNestedLessLess:"\u2AA1\u0338",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2AAF\u0338",NotPrecedesSlantEqual:"\u22E0",NotReverseElement:"\u220C",NotRightTriangle:"\u22EB",NotRightTriangleBar:"\u29D0\u0338",NotRightTriangleEqual:"\u22ED",NotSquareSubset:"\u228F\u0338",NotSquareSubsetEqual:"\u22E2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22E3",NotSubset:"\u2282\u20D2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2AB0\u0338",NotSucceedsSlantEqual:"\u22E1",NotSucceedsTilde:"\u227F\u0338",NotSuperset:"\u2283\u20D2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",Nscr:"\u{1D4A9}",Ntilde:"\xD1",Nu:"\u039D",OElig:"\u0152",Oacute:"\xD3",Ocirc:"\xD4",Ocy:"\u041E",Odblac:"\u0150",Ofr:"\u{1D512}",Ograve:"\xD2",Omacr:"\u014C",Omega:"\u03A9",Omicron:"\u039F",Oopf:"\u{1D546}",OpenCurlyDoubleQuote:"\u201C",OpenCurlyQuote:"\u2018",Or:"\u2A54",Oscr:"\u{1D4AA}",Oslash:"\xD8",Otilde:"\xD5",Otimes:"\u2A37",Ouml:"\xD6",OverBar:"\u203E",OverBrace:"\u23DE",OverBracket:"\u23B4",OverParenthesis:"\u23DC",PartialD:"\u2202",Pcy:"\u041F",Pfr:"\u{1D513}",Phi:"\u03A6",Pi:"\u03A0",PlusMinus:"\xB1",Poincareplane:"\u210C",Popf:"\u2119",Pr:"\u2ABB",Precedes:"\u227A",PrecedesEqual:"\u2AAF",PrecedesSlantEqual:"\u227C",PrecedesTilde:"\u227E",Prime:"\u2033",Product:"\u220F",Proportion:"\u2237",Proportional:"\u221D",Pscr:"\u{1D4AB}",Psi:"\u03A8",QUOT:'"',Qfr:"\u{1D514}",Qopf:"\u211A",Qscr:"\u{1D4AC}",RBarr:"\u2910",REG:"\xAE",Racute:"\u0154",Rang:"\u27EB",Rarr:"\u21A0",Rarrtl:"\u2916",Rcaron:"\u0158",Rcedil:"\u0156",Rcy:"\u0420",Re:"\u211C",ReverseElement:"\u220B",ReverseEquilibrium:"\u21CB",ReverseUpEquilibrium:"\u296F",Rfr:"\u211C",Rho:"\u03A1",RightAngleBracket:"\u27E9",RightArrow:"\u2192",RightArrowBar:"\u21E5",RightArrowLeftArrow:"\u21C4",RightCeiling:"\u2309",RightDoubleBracket:"\u27E7",RightDownTeeVector:"\u295D",RightDownVector:"\u21C2",RightDownVectorBar:"\u2955",RightFloor:"\u230B",RightTee:"\u22A2",RightTeeArrow:"\u21A6",RightTeeVector:"\u295B",RightTriangle:"\u22B3",RightTriangleBar:"\u29D0",RightTriangleEqual:"\u22B5",RightUpDownVector:"\u294F",RightUpTeeVector:"\u295C",RightUpVector:"\u21BE",RightUpVectorBar:"\u2954",RightVector:"\u21C0",RightVectorBar:"\u2953",Rightarrow:"\u21D2",Ropf:"\u211D",RoundImplies:"\u2970",Rrightarrow:"\u21DB",Rscr:"\u211B",Rsh:"\u21B1",RuleDelayed:"\u29F4",SHCHcy:"\u0429",SHcy:"\u0428",SOFTcy:"\u042C",Sacute:"\u015A",Sc:"\u2ABC",Scaron:"\u0160",Scedil:"\u015E",Scirc:"\u015C",Scy:"\u0421",Sfr:"\u{1D516}",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",Sigma:"\u03A3",SmallCircle:"\u2218",Sopf:"\u{1D54A}",Sqrt:"\u221A",Square:"\u25A1",SquareIntersection:"\u2293",SquareSubset:"\u228F",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",Sscr:"\u{1D4AE}",Star:"\u22C6",Sub:"\u22D0",Subset:"\u22D0",SubsetEqual:"\u2286",Succeeds:"\u227B",SucceedsEqual:"\u2AB0",SucceedsSlantEqual:"\u227D",SucceedsTilde:"\u227F",SuchThat:"\u220B",Sum:"\u2211",Sup:"\u22D1",Superset:"\u2283",SupersetEqual:"\u2287",Supset:"\u22D1",THORN:"\xDE",TRADE:"\u2122",TSHcy:"\u040B",TScy:"\u0426",Tab:" ",Tau:"\u03A4",Tcaron:"\u0164",Tcedil:"\u0162",Tcy:"\u0422",Tfr:"\u{1D517}",Therefore:"\u2234",Theta:"\u0398",ThickSpace:"\u205F\u200A",ThinSpace:"\u2009",Tilde:"\u223C",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",Topf:"\u{1D54B}",TripleDot:"\u20DB",Tscr:"\u{1D4AF}",Tstrok:"\u0166",Uacute:"\xDA",Uarr:"\u219F",Uarrocir:"\u2949",Ubrcy:"\u040E",Ubreve:"\u016C",Ucirc:"\xDB",Ucy:"\u0423",Udblac:"\u0170",Ufr:"\u{1D518}",Ugrave:"\xD9",Umacr:"\u016A",UnderBar:"_",UnderBrace:"\u23DF",UnderBracket:"\u23B5",UnderParenthesis:"\u23DD",Union:"\u22C3",UnionPlus:"\u228E",Uogon:"\u0172",Uopf:"\u{1D54C}",UpArrow:"\u2191",UpArrowBar:"\u2912",UpArrowDownArrow:"\u21C5",UpDownArrow:"\u2195",UpEquilibrium:"\u296E",UpTee:"\u22A5",UpTeeArrow:"\u21A5",Uparrow:"\u21D1",Updownarrow:"\u21D5",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",Upsi:"\u03D2",Upsilon:"\u03A5",Uring:"\u016E",Uscr:"\u{1D4B0}",Utilde:"\u0168",Uuml:"\xDC",VDash:"\u22AB",Vbar:"\u2AEB",Vcy:"\u0412",Vdash:"\u22A9",Vdashl:"\u2AE6",Vee:"\u22C1",Verbar:"\u2016",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200A",Vfr:"\u{1D519}",Vopf:"\u{1D54D}",Vscr:"\u{1D4B1}",Vvdash:"\u22AA",Wcirc:"\u0174",Wedge:"\u22C0",Wfr:"\u{1D51A}",Wopf:"\u{1D54E}",Wscr:"\u{1D4B2}",Xfr:"\u{1D51B}",Xi:"\u039E",Xopf:"\u{1D54F}",Xscr:"\u{1D4B3}",YAcy:"\u042F",YIcy:"\u0407",YUcy:"\u042E",Yacute:"\xDD",Ycirc:"\u0176",Ycy:"\u042B",Yfr:"\u{1D51C}",Yopf:"\u{1D550}",Yscr:"\u{1D4B4}",Yuml:"\u0178",ZHcy:"\u0416",Zacute:"\u0179",Zcaron:"\u017D",Zcy:"\u0417",Zdot:"\u017B",ZeroWidthSpace:"\u200B",Zeta:"\u0396",Zfr:"\u2128",Zopf:"\u2124",Zscr:"\u{1D4B5}",aacute:"\xE1",abreve:"\u0103",ac:"\u223E",acE:"\u223E\u0333",acd:"\u223F",acirc:"\xE2",acute:"\xB4",acy:"\u0430",aelig:"\xE6",af:"\u2061",afr:"\u{1D51E}",agrave:"\xE0",alefsym:"\u2135",aleph:"\u2135",alpha:"\u03B1",amacr:"\u0101",amalg:"\u2A3F",amp:"&",and:"\u2227",andand:"\u2A55",andd:"\u2A5C",andslope:"\u2A58",andv:"\u2A5A",ang:"\u2220",ange:"\u29A4",angle:"\u2220",angmsd:"\u2221",angmsdaa:"\u29A8",angmsdab:"\u29A9",angmsdac:"\u29AA",angmsdad:"\u29AB",angmsdae:"\u29AC",angmsdaf:"\u29AD",angmsdag:"\u29AE",angmsdah:"\u29AF",angrt:"\u221F",angrtvb:"\u22BE",angrtvbd:"\u299D",angsph:"\u2222",angst:"\xC5",angzarr:"\u237C",aogon:"\u0105",aopf:"\u{1D552}",ap:"\u2248",apE:"\u2A70",apacir:"\u2A6F",ape:"\u224A",apid:"\u224B",apos:"'",approx:"\u2248",approxeq:"\u224A",aring:"\xE5",ascr:"\u{1D4B6}",ast:"*",asymp:"\u2248",asympeq:"\u224D",atilde:"\xE3",auml:"\xE4",awconint:"\u2233",awint:"\u2A11",bNot:"\u2AED",backcong:"\u224C",backepsilon:"\u03F6",backprime:"\u2035",backsim:"\u223D",backsimeq:"\u22CD",barvee:"\u22BD",barwed:"\u2305",barwedge:"\u2305",bbrk:"\u23B5",bbrktbrk:"\u23B6",bcong:"\u224C",bcy:"\u0431",bdquo:"\u201E",becaus:"\u2235",because:"\u2235",bemptyv:"\u29B0",bepsi:"\u03F6",bernou:"\u212C",beta:"\u03B2",beth:"\u2136",between:"\u226C",bfr:"\u{1D51F}",bigcap:"\u22C2",bigcirc:"\u25EF",bigcup:"\u22C3",bigodot:"\u2A00",bigoplus:"\u2A01",bigotimes:"\u2A02",bigsqcup:"\u2A06",bigstar:"\u2605",bigtriangledown:"\u25BD",bigtriangleup:"\u25B3",biguplus:"\u2A04",bigvee:"\u22C1",bigwedge:"\u22C0",bkarow:"\u290D",blacklozenge:"\u29EB",blacksquare:"\u25AA",blacktriangle:"\u25B4",blacktriangledown:"\u25BE",blacktriangleleft:"\u25C2",blacktriangleright:"\u25B8",blank:"\u2423",blk12:"\u2592",blk14:"\u2591",blk34:"\u2593",block:"\u2588",bne:"=\u20E5",bnequiv:"\u2261\u20E5",bnot:"\u2310",bopf:"\u{1D553}",bot:"\u22A5",bottom:"\u22A5",bowtie:"\u22C8",boxDL:"\u2557",boxDR:"\u2554",boxDl:"\u2556",boxDr:"\u2553",boxH:"\u2550",boxHD:"\u2566",boxHU:"\u2569",boxHd:"\u2564",boxHu:"\u2567",boxUL:"\u255D",boxUR:"\u255A",boxUl:"\u255C",boxUr:"\u2559",boxV:"\u2551",boxVH:"\u256C",boxVL:"\u2563",boxVR:"\u2560",boxVh:"\u256B",boxVl:"\u2562",boxVr:"\u255F",boxbox:"\u29C9",boxdL:"\u2555",boxdR:"\u2552",boxdl:"\u2510",boxdr:"\u250C",boxh:"\u2500",boxhD:"\u2565",boxhU:"\u2568",boxhd:"\u252C",boxhu:"\u2534",boxminus:"\u229F",boxplus:"\u229E",boxtimes:"\u22A0",boxuL:"\u255B",boxuR:"\u2558",boxul:"\u2518",boxur:"\u2514",boxv:"\u2502",boxvH:"\u256A",boxvL:"\u2561",boxvR:"\u255E",boxvh:"\u253C",boxvl:"\u2524",boxvr:"\u251C",bprime:"\u2035",breve:"\u02D8",brvbar:"\xA6",bscr:"\u{1D4B7}",bsemi:"\u204F",bsim:"\u223D",bsime:"\u22CD",bsol:"\\",bsolb:"\u29C5",bsolhsub:"\u27C8",bull:"\u2022",bullet:"\u2022",bump:"\u224E",bumpE:"\u2AAE",bumpe:"\u224F",bumpeq:"\u224F",cacute:"\u0107",cap:"\u2229",capand:"\u2A44",capbrcup:"\u2A49",capcap:"\u2A4B",capcup:"\u2A47",capdot:"\u2A40",caps:"\u2229\uFE00",caret:"\u2041",caron:"\u02C7",ccaps:"\u2A4D",ccaron:"\u010D",ccedil:"\xE7",ccirc:"\u0109",ccups:"\u2A4C",ccupssm:"\u2A50",cdot:"\u010B",cedil:"\xB8",cemptyv:"\u29B2",cent:"\xA2",centerdot:"\xB7",cfr:"\u{1D520}",chcy:"\u0447",check:"\u2713",checkmark:"\u2713",chi:"\u03C7",cir:"\u25CB",cirE:"\u29C3",circ:"\u02C6",circeq:"\u2257",circlearrowleft:"\u21BA",circlearrowright:"\u21BB",circledR:"\xAE",circledS:"\u24C8",circledast:"\u229B",circledcirc:"\u229A",circleddash:"\u229D",cire:"\u2257",cirfnint:"\u2A10",cirmid:"\u2AEF",cirscir:"\u29C2",clubs:"\u2663",clubsuit:"\u2663",colon:":",colone:"\u2254",coloneq:"\u2254",comma:",",commat:"@",comp:"\u2201",compfn:"\u2218",complement:"\u2201",complexes:"\u2102",cong:"\u2245",congdot:"\u2A6D",conint:"\u222E",copf:"\u{1D554}",coprod:"\u2210",copy:"\xA9",copysr:"\u2117",crarr:"\u21B5",cross:"\u2717",cscr:"\u{1D4B8}",csub:"\u2ACF",csube:"\u2AD1",csup:"\u2AD0",csupe:"\u2AD2",ctdot:"\u22EF",cudarrl:"\u2938",cudarrr:"\u2935",cuepr:"\u22DE",cuesc:"\u22DF",cularr:"\u21B6",cularrp:"\u293D",cup:"\u222A",cupbrcap:"\u2A48",cupcap:"\u2A46",cupcup:"\u2A4A",cupdot:"\u228D",cupor:"\u2A45",cups:"\u222A\uFE00",curarr:"\u21B7",curarrm:"\u293C",curlyeqprec:"\u22DE",curlyeqsucc:"\u22DF",curlyvee:"\u22CE",curlywedge:"\u22CF",curren:"\xA4",curvearrowleft:"\u21B6",curvearrowright:"\u21B7",cuvee:"\u22CE",cuwed:"\u22CF",cwconint:"\u2232",cwint:"\u2231",cylcty:"\u232D",dArr:"\u21D3",dHar:"\u2965",dagger:"\u2020",daleth:"\u2138",darr:"\u2193",dash:"\u2010",dashv:"\u22A3",dbkarow:"\u290F",dblac:"\u02DD",dcaron:"\u010F",dcy:"\u0434",dd:"\u2146",ddagger:"\u2021",ddarr:"\u21CA",ddotseq:"\u2A77",deg:"\xB0",delta:"\u03B4",demptyv:"\u29B1",dfisht:"\u297F",dfr:"\u{1D521}",dharl:"\u21C3",dharr:"\u21C2",diam:"\u22C4",diamond:"\u22C4",diamondsuit:"\u2666",diams:"\u2666",die:"\xA8",digamma:"\u03DD",disin:"\u22F2",div:"\xF7",divide:"\xF7",divideontimes:"\u22C7",divonx:"\u22C7",djcy:"\u0452",dlcorn:"\u231E",dlcrop:"\u230D",dollar:"$",dopf:"\u{1D555}",dot:"\u02D9",doteq:"\u2250",doteqdot:"\u2251",dotminus:"\u2238",dotplus:"\u2214",dotsquare:"\u22A1",doublebarwedge:"\u2306",downarrow:"\u2193",downdownarrows:"\u21CA",downharpoonleft:"\u21C3",downharpoonright:"\u21C2",drbkarow:"\u2910",drcorn:"\u231F",drcrop:"\u230C",dscr:"\u{1D4B9}",dscy:"\u0455",dsol:"\u29F6",dstrok:"\u0111",dtdot:"\u22F1",dtri:"\u25BF",dtrif:"\u25BE",duarr:"\u21F5",duhar:"\u296F",dwangle:"\u29A6",dzcy:"\u045F",dzigrarr:"\u27FF",eDDot:"\u2A77",eDot:"\u2251",eacute:"\xE9",easter:"\u2A6E",ecaron:"\u011B",ecir:"\u2256",ecirc:"\xEA",ecolon:"\u2255",ecy:"\u044D",edot:"\u0117",ee:"\u2147",efDot:"\u2252",efr:"\u{1D522}",eg:"\u2A9A",egrave:"\xE8",egs:"\u2A96",egsdot:"\u2A98",el:"\u2A99",elinters:"\u23E7",ell:"\u2113",els:"\u2A95",elsdot:"\u2A97",emacr:"\u0113",empty:"\u2205",emptyset:"\u2205",emptyv:"\u2205",emsp13:"\u2004",emsp14:"\u2005",emsp:"\u2003",eng:"\u014B",ensp:"\u2002",eogon:"\u0119",eopf:"\u{1D556}",epar:"\u22D5",eparsl:"\u29E3",eplus:"\u2A71",epsi:"\u03B5",epsilon:"\u03B5",epsiv:"\u03F5",eqcirc:"\u2256",eqcolon:"\u2255",eqsim:"\u2242",eqslantgtr:"\u2A96",eqslantless:"\u2A95",equals:"=",equest:"\u225F",equiv:"\u2261",equivDD:"\u2A78",eqvparsl:"\u29E5",erDot:"\u2253",erarr:"\u2971",escr:"\u212F",esdot:"\u2250",esim:"\u2242",eta:"\u03B7",eth:"\xF0",euml:"\xEB",euro:"\u20AC",excl:"!",exist:"\u2203",expectation:"\u2130",exponentiale:"\u2147",fallingdotseq:"\u2252",fcy:"\u0444",female:"\u2640",ffilig:"\uFB03",fflig:"\uFB00",ffllig:"\uFB04",ffr:"\u{1D523}",filig:"\uFB01",fjlig:"fj",flat:"\u266D",fllig:"\uFB02",fltns:"\u25B1",fnof:"\u0192",fopf:"\u{1D557}",forall:"\u2200",fork:"\u22D4",forkv:"\u2AD9",fpartint:"\u2A0D",frac12:"\xBD",frac13:"\u2153",frac14:"\xBC",frac15:"\u2155",frac16:"\u2159",frac18:"\u215B",frac23:"\u2154",frac25:"\u2156",frac34:"\xBE",frac35:"\u2157",frac38:"\u215C",frac45:"\u2158",frac56:"\u215A",frac58:"\u215D",frac78:"\u215E",frasl:"\u2044",frown:"\u2322",fscr:"\u{1D4BB}",gE:"\u2267",gEl:"\u2A8C",gacute:"\u01F5",gamma:"\u03B3",gammad:"\u03DD",gap:"\u2A86",gbreve:"\u011F",gcirc:"\u011D",gcy:"\u0433",gdot:"\u0121",ge:"\u2265",gel:"\u22DB",geq:"\u2265",geqq:"\u2267",geqslant:"\u2A7E",ges:"\u2A7E",gescc:"\u2AA9",gesdot:"\u2A80",gesdoto:"\u2A82",gesdotol:"\u2A84",gesl:"\u22DB\uFE00",gesles:"\u2A94",gfr:"\u{1D524}",gg:"\u226B",ggg:"\u22D9",gimel:"\u2137",gjcy:"\u0453",gl:"\u2277",glE:"\u2A92",gla:"\u2AA5",glj:"\u2AA4",gnE:"\u2269",gnap:"\u2A8A",gnapprox:"\u2A8A",gne:"\u2A88",gneq:"\u2A88",gneqq:"\u2269",gnsim:"\u22E7",gopf:"\u{1D558}",grave:"`",gscr:"\u210A",gsim:"\u2273",gsime:"\u2A8E",gsiml:"\u2A90",gt:">",gtcc:"\u2AA7",gtcir:"\u2A7A",gtdot:"\u22D7",gtlPar:"\u2995",gtquest:"\u2A7C",gtrapprox:"\u2A86",gtrarr:"\u2978",gtrdot:"\u22D7",gtreqless:"\u22DB",gtreqqless:"\u2A8C",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\uFE00",gvnE:"\u2269\uFE00",hArr:"\u21D4",hairsp:"\u200A",half:"\xBD",hamilt:"\u210B",hardcy:"\u044A",harr:"\u2194",harrcir:"\u2948",harrw:"\u21AD",hbar:"\u210F",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22B9",hfr:"\u{1D525}",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21FF",homtht:"\u223B",hookleftarrow:"\u21A9",hookrightarrow:"\u21AA",hopf:"\u{1D559}",horbar:"\u2015",hscr:"\u{1D4BD}",hslash:"\u210F",hstrok:"\u0127",hybull:"\u2043",hyphen:"\u2010",iacute:"\xED",ic:"\u2063",icirc:"\xEE",icy:"\u0438",iecy:"\u0435",iexcl:"\xA1",iff:"\u21D4",ifr:"\u{1D526}",igrave:"\xEC",ii:"\u2148",iiiint:"\u2A0C",iiint:"\u222D",iinfin:"\u29DC",iiota:"\u2129",ijlig:"\u0133",imacr:"\u012B",image:"\u2111",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",imof:"\u22B7",imped:"\u01B5",in:"\u2208",incare:"\u2105",infin:"\u221E",infintie:"\u29DD",inodot:"\u0131",int:"\u222B",intcal:"\u22BA",integers:"\u2124",intercal:"\u22BA",intlarhk:"\u2A17",intprod:"\u2A3C",iocy:"\u0451",iogon:"\u012F",iopf:"\u{1D55A}",iota:"\u03B9",iprod:"\u2A3C",iquest:"\xBF",iscr:"\u{1D4BE}",isin:"\u2208",isinE:"\u22F9",isindot:"\u22F5",isins:"\u22F4",isinsv:"\u22F3",isinv:"\u2208",it:"\u2062",itilde:"\u0129",iukcy:"\u0456",iuml:"\xEF",jcirc:"\u0135",jcy:"\u0439",jfr:"\u{1D527}",jmath:"\u0237",jopf:"\u{1D55B}",jscr:"\u{1D4BF}",jsercy:"\u0458",jukcy:"\u0454",kappa:"\u03BA",kappav:"\u03F0",kcedil:"\u0137",kcy:"\u043A",kfr:"\u{1D528}",kgreen:"\u0138",khcy:"\u0445",kjcy:"\u045C",kopf:"\u{1D55C}",kscr:"\u{1D4C0}",lAarr:"\u21DA",lArr:"\u21D0",lAtail:"\u291B",lBarr:"\u290E",lE:"\u2266",lEg:"\u2A8B",lHar:"\u2962",lacute:"\u013A",laemptyv:"\u29B4",lagran:"\u2112",lambda:"\u03BB",lang:"\u27E8",langd:"\u2991",langle:"\u27E8",lap:"\u2A85",laquo:"\xAB",larr:"\u2190",larrb:"\u21E4",larrbfs:"\u291F",larrfs:"\u291D",larrhk:"\u21A9",larrlp:"\u21AB",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21A2",lat:"\u2AAB",latail:"\u2919",late:"\u2AAD",lates:"\u2AAD\uFE00",lbarr:"\u290C",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298B",lbrksld:"\u298F",lbrkslu:"\u298D",lcaron:"\u013E",lcedil:"\u013C",lceil:"\u2308",lcub:"{",lcy:"\u043B",ldca:"\u2936",ldquo:"\u201C",ldquor:"\u201E",ldrdhar:"\u2967",ldrushar:"\u294B",ldsh:"\u21B2",le:"\u2264",leftarrow:"\u2190",leftarrowtail:"\u21A2",leftharpoondown:"\u21BD",leftharpoonup:"\u21BC",leftleftarrows:"\u21C7",leftrightarrow:"\u2194",leftrightarrows:"\u21C6",leftrightharpoons:"\u21CB",leftrightsquigarrow:"\u21AD",leftthreetimes:"\u22CB",leg:"\u22DA",leq:"\u2264",leqq:"\u2266",leqslant:"\u2A7D",les:"\u2A7D",lescc:"\u2AA8",lesdot:"\u2A7F",lesdoto:"\u2A81",lesdotor:"\u2A83",lesg:"\u22DA\uFE00",lesges:"\u2A93",lessapprox:"\u2A85",lessdot:"\u22D6",lesseqgtr:"\u22DA",lesseqqgtr:"\u2A8B",lessgtr:"\u2276",lesssim:"\u2272",lfisht:"\u297C",lfloor:"\u230A",lfr:"\u{1D529}",lg:"\u2276",lgE:"\u2A91",lhard:"\u21BD",lharu:"\u21BC",lharul:"\u296A",lhblk:"\u2584",ljcy:"\u0459",ll:"\u226A",llarr:"\u21C7",llcorner:"\u231E",llhard:"\u296B",lltri:"\u25FA",lmidot:"\u0140",lmoust:"\u23B0",lmoustache:"\u23B0",lnE:"\u2268",lnap:"\u2A89",lnapprox:"\u2A89",lne:"\u2A87",lneq:"\u2A87",lneqq:"\u2268",lnsim:"\u22E6",loang:"\u27EC",loarr:"\u21FD",lobrk:"\u27E6",longleftarrow:"\u27F5",longleftrightarrow:"\u27F7",longmapsto:"\u27FC",longrightarrow:"\u27F6",looparrowleft:"\u21AB",looparrowright:"\u21AC",lopar:"\u2985",lopf:"\u{1D55D}",loplus:"\u2A2D",lotimes:"\u2A34",lowast:"\u2217",lowbar:"_",loz:"\u25CA",lozenge:"\u25CA",lozf:"\u29EB",lpar:"(",lparlt:"\u2993",lrarr:"\u21C6",lrcorner:"\u231F",lrhar:"\u21CB",lrhard:"\u296D",lrm:"\u200E",lrtri:"\u22BF",lsaquo:"\u2039",lscr:"\u{1D4C1}",lsh:"\u21B0",lsim:"\u2272",lsime:"\u2A8D",lsimg:"\u2A8F",lsqb:"[",lsquo:"\u2018",lsquor:"\u201A",lstrok:"\u0142",lt:"<",ltcc:"\u2AA6",ltcir:"\u2A79",ltdot:"\u22D6",lthree:"\u22CB",ltimes:"\u22C9",ltlarr:"\u2976",ltquest:"\u2A7B",ltrPar:"\u2996",ltri:"\u25C3",ltrie:"\u22B4",ltrif:"\u25C2",lurdshar:"\u294A",luruhar:"\u2966",lvertneqq:"\u2268\uFE00",lvnE:"\u2268\uFE00",mDDot:"\u223A",macr:"\xAF",male:"\u2642",malt:"\u2720",maltese:"\u2720",map:"\u21A6",mapsto:"\u21A6",mapstodown:"\u21A7",mapstoleft:"\u21A4",mapstoup:"\u21A5",marker:"\u25AE",mcomma:"\u2A29",mcy:"\u043C",mdash:"\u2014",measuredangle:"\u2221",mfr:"\u{1D52A}",mho:"\u2127",micro:"\xB5",mid:"\u2223",midast:"*",midcir:"\u2AF0",middot:"\xB7",minus:"\u2212",minusb:"\u229F",minusd:"\u2238",minusdu:"\u2A2A",mlcp:"\u2ADB",mldr:"\u2026",mnplus:"\u2213",models:"\u22A7",mopf:"\u{1D55E}",mp:"\u2213",mscr:"\u{1D4C2}",mstpos:"\u223E",mu:"\u03BC",multimap:"\u22B8",mumap:"\u22B8",nGg:"\u22D9\u0338",nGt:"\u226B\u20D2",nGtv:"\u226B\u0338",nLeftarrow:"\u21CD",nLeftrightarrow:"\u21CE",nLl:"\u22D8\u0338",nLt:"\u226A\u20D2",nLtv:"\u226A\u0338",nRightarrow:"\u21CF",nVDash:"\u22AF",nVdash:"\u22AE",nabla:"\u2207",nacute:"\u0144",nang:"\u2220\u20D2",nap:"\u2249",napE:"\u2A70\u0338",napid:"\u224B\u0338",napos:"\u0149",napprox:"\u2249",natur:"\u266E",natural:"\u266E",naturals:"\u2115",nbsp:"\xA0",nbump:"\u224E\u0338",nbumpe:"\u224F\u0338",ncap:"\u2A43",ncaron:"\u0148",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2A6D\u0338",ncup:"\u2A42",ncy:"\u043D",ndash:"\u2013",ne:"\u2260",neArr:"\u21D7",nearhk:"\u2924",nearr:"\u2197",nearrow:"\u2197",nedot:"\u2250\u0338",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",nexist:"\u2204",nexists:"\u2204",nfr:"\u{1D52B}",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2A7E\u0338",nges:"\u2A7E\u0338",ngsim:"\u2275",ngt:"\u226F",ngtr:"\u226F",nhArr:"\u21CE",nharr:"\u21AE",nhpar:"\u2AF2",ni:"\u220B",nis:"\u22FC",nisd:"\u22FA",niv:"\u220B",njcy:"\u045A",nlArr:"\u21CD",nlE:"\u2266\u0338",nlarr:"\u219A",nldr:"\u2025",nle:"\u2270",nleftarrow:"\u219A",nleftrightarrow:"\u21AE",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2A7D\u0338",nles:"\u2A7D\u0338",nless:"\u226E",nlsim:"\u2274",nlt:"\u226E",nltri:"\u22EA",nltrie:"\u22EC",nmid:"\u2224",nopf:"\u{1D55F}",not:"\xAC",notin:"\u2209",notinE:"\u22F9\u0338",notindot:"\u22F5\u0338",notinva:"\u2209",notinvb:"\u22F7",notinvc:"\u22F6",notni:"\u220C",notniva:"\u220C",notnivb:"\u22FE",notnivc:"\u22FD",npar:"\u2226",nparallel:"\u2226",nparsl:"\u2AFD\u20E5",npart:"\u2202\u0338",npolint:"\u2A14",npr:"\u2280",nprcue:"\u22E0",npre:"\u2AAF\u0338",nprec:"\u2280",npreceq:"\u2AAF\u0338",nrArr:"\u21CF",nrarr:"\u219B",nrarrc:"\u2933\u0338",nrarrw:"\u219D\u0338",nrightarrow:"\u219B",nrtri:"\u22EB",nrtrie:"\u22ED",nsc:"\u2281",nsccue:"\u22E1",nsce:"\u2AB0\u0338",nscr:"\u{1D4C3}",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22E2",nsqsupe:"\u22E3",nsub:"\u2284",nsubE:"\u2AC5\u0338",nsube:"\u2288",nsubset:"\u2282\u20D2",nsubseteq:"\u2288",nsubseteqq:"\u2AC5\u0338",nsucc:"\u2281",nsucceq:"\u2AB0\u0338",nsup:"\u2285",nsupE:"\u2AC6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20D2",nsupseteq:"\u2289",nsupseteqq:"\u2AC6\u0338",ntgl:"\u2279",ntilde:"\xF1",ntlg:"\u2278",ntriangleleft:"\u22EA",ntrianglelefteq:"\u22EC",ntriangleright:"\u22EB",ntrianglerighteq:"\u22ED",nu:"\u03BD",num:"#",numero:"\u2116",numsp:"\u2007",nvDash:"\u22AD",nvHarr:"\u2904",nvap:"\u224D\u20D2",nvdash:"\u22AC",nvge:"\u2265\u20D2",nvgt:">\u20D2",nvinfin:"\u29DE",nvlArr:"\u2902",nvle:"\u2264\u20D2",nvlt:"<\u20D2",nvltrie:"\u22B4\u20D2",nvrArr:"\u2903",nvrtrie:"\u22B5\u20D2",nvsim:"\u223C\u20D2",nwArr:"\u21D6",nwarhk:"\u2923",nwarr:"\u2196",nwarrow:"\u2196",nwnear:"\u2927",oS:"\u24C8",oacute:"\xF3",oast:"\u229B",ocir:"\u229A",ocirc:"\xF4",ocy:"\u043E",odash:"\u229D",odblac:"\u0151",odiv:"\u2A38",odot:"\u2299",odsold:"\u29BC",oelig:"\u0153",ofcir:"\u29BF",ofr:"\u{1D52C}",ogon:"\u02DB",ograve:"\xF2",ogt:"\u29C1",ohbar:"\u29B5",ohm:"\u03A9",oint:"\u222E",olarr:"\u21BA",olcir:"\u29BE",olcross:"\u29BB",oline:"\u203E",olt:"\u29C0",omacr:"\u014D",omega:"\u03C9",omicron:"\u03BF",omid:"\u29B6",ominus:"\u2296",oopf:"\u{1D560}",opar:"\u29B7",operp:"\u29B9",oplus:"\u2295",or:"\u2228",orarr:"\u21BB",ord:"\u2A5D",order:"\u2134",orderof:"\u2134",ordf:"\xAA",ordm:"\xBA",origof:"\u22B6",oror:"\u2A56",orslope:"\u2A57",orv:"\u2A5B",oscr:"\u2134",oslash:"\xF8",osol:"\u2298",otilde:"\xF5",otimes:"\u2297",otimesas:"\u2A36",ouml:"\xF6",ovbar:"\u233D",par:"\u2225",para:"\xB6",parallel:"\u2225",parsim:"\u2AF3",parsl:"\u2AFD",part:"\u2202",pcy:"\u043F",percnt:"%",period:".",permil:"\u2030",perp:"\u22A5",pertenk:"\u2031",pfr:"\u{1D52D}",phi:"\u03C6",phiv:"\u03D5",phmmat:"\u2133",phone:"\u260E",pi:"\u03C0",pitchfork:"\u22D4",piv:"\u03D6",planck:"\u210F",planckh:"\u210E",plankv:"\u210F",plus:"+",plusacir:"\u2A23",plusb:"\u229E",pluscir:"\u2A22",plusdo:"\u2214",plusdu:"\u2A25",pluse:"\u2A72",plusmn:"\xB1",plussim:"\u2A26",plustwo:"\u2A27",pm:"\xB1",pointint:"\u2A15",popf:"\u{1D561}",pound:"\xA3",pr:"\u227A",prE:"\u2AB3",prap:"\u2AB7",prcue:"\u227C",pre:"\u2AAF",prec:"\u227A",precapprox:"\u2AB7",preccurlyeq:"\u227C",preceq:"\u2AAF",precnapprox:"\u2AB9",precneqq:"\u2AB5",precnsim:"\u22E8",precsim:"\u227E",prime:"\u2032",primes:"\u2119",prnE:"\u2AB5",prnap:"\u2AB9",prnsim:"\u22E8",prod:"\u220F",profalar:"\u232E",profline:"\u2312",profsurf:"\u2313",prop:"\u221D",propto:"\u221D",prsim:"\u227E",prurel:"\u22B0",pscr:"\u{1D4C5}",psi:"\u03C8",puncsp:"\u2008",qfr:"\u{1D52E}",qint:"\u2A0C",qopf:"\u{1D562}",qprime:"\u2057",qscr:"\u{1D4C6}",quaternions:"\u210D",quatint:"\u2A16",quest:"?",questeq:"\u225F",quot:'"',rAarr:"\u21DB",rArr:"\u21D2",rAtail:"\u291C",rBarr:"\u290F",rHar:"\u2964",race:"\u223D\u0331",racute:"\u0155",radic:"\u221A",raemptyv:"\u29B3",rang:"\u27E9",rangd:"\u2992",range:"\u29A5",rangle:"\u27E9",raquo:"\xBB",rarr:"\u2192",rarrap:"\u2975",rarrb:"\u21E5",rarrbfs:"\u2920",rarrc:"\u2933",rarrfs:"\u291E",rarrhk:"\u21AA",rarrlp:"\u21AC",rarrpl:"\u2945",rarrsim:"\u2974",rarrtl:"\u21A3",rarrw:"\u219D",ratail:"\u291A",ratio:"\u2236",rationals:"\u211A",rbarr:"\u290D",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298C",rbrksld:"\u298E",rbrkslu:"\u2990",rcaron:"\u0159",rcedil:"\u0157",rceil:"\u2309",rcub:"}",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201D",rdquor:"\u201D",rdsh:"\u21B3",real:"\u211C",realine:"\u211B",realpart:"\u211C",reals:"\u211D",rect:"\u25AD",reg:"\xAE",rfisht:"\u297D",rfloor:"\u230B",rfr:"\u{1D52F}",rhard:"\u21C1",rharu:"\u21C0",rharul:"\u296C",rho:"\u03C1",rhov:"\u03F1",rightarrow:"\u2192",rightarrowtail:"\u21A3",rightharpoondown:"\u21C1",rightharpoonup:"\u21C0",rightleftarrows:"\u21C4",rightleftharpoons:"\u21CC",rightrightarrows:"\u21C9",rightsquigarrow:"\u219D",rightthreetimes:"\u22CC",ring:"\u02DA",risingdotseq:"\u2253",rlarr:"\u21C4",rlhar:"\u21CC",rlm:"\u200F",rmoust:"\u23B1",rmoustache:"\u23B1",rnmid:"\u2AEE",roang:"\u27ED",roarr:"\u21FE",robrk:"\u27E7",ropar:"\u2986",ropf:"\u{1D563}",roplus:"\u2A2E",rotimes:"\u2A35",rpar:")",rpargt:"\u2994",rppolint:"\u2A12",rrarr:"\u21C9",rsaquo:"\u203A",rscr:"\u{1D4C7}",rsh:"\u21B1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22CC",rtimes:"\u22CA",rtri:"\u25B9",rtrie:"\u22B5",rtrif:"\u25B8",rtriltri:"\u29CE",ruluhar:"\u2968",rx:"\u211E",sacute:"\u015B",sbquo:"\u201A",sc:"\u227B",scE:"\u2AB4",scap:"\u2AB8",scaron:"\u0161",sccue:"\u227D",sce:"\u2AB0",scedil:"\u015F",scirc:"\u015D",scnE:"\u2AB6",scnap:"\u2ABA",scnsim:"\u22E9",scpolint:"\u2A13",scsim:"\u227F",scy:"\u0441",sdot:"\u22C5",sdotb:"\u22A1",sdote:"\u2A66",seArr:"\u21D8",searhk:"\u2925",searr:"\u2198",searrow:"\u2198",sect:"\xA7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",sfr:"\u{1D530}",sfrown:"\u2322",sharp:"\u266F",shchcy:"\u0449",shcy:"\u0448",shortmid:"\u2223",shortparallel:"\u2225",shy:"\xAD",sigma:"\u03C3",sigmaf:"\u03C2",sigmav:"\u03C2",sim:"\u223C",simdot:"\u2A6A",sime:"\u2243",simeq:"\u2243",simg:"\u2A9E",simgE:"\u2AA0",siml:"\u2A9D",simlE:"\u2A9F",simne:"\u2246",simplus:"\u2A24",simrarr:"\u2972",slarr:"\u2190",smallsetminus:"\u2216",smashp:"\u2A33",smeparsl:"\u29E4",smid:"\u2223",smile:"\u2323",smt:"\u2AAA",smte:"\u2AAC",smtes:"\u2AAC\uFE00",softcy:"\u044C",sol:"/",solb:"\u29C4",solbar:"\u233F",sopf:"\u{1D564}",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\uFE00",sqcup:"\u2294",sqcups:"\u2294\uFE00",sqsub:"\u228F",sqsube:"\u2291",sqsubset:"\u228F",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",squ:"\u25A1",square:"\u25A1",squarf:"\u25AA",squf:"\u25AA",srarr:"\u2192",sscr:"\u{1D4C8}",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22C6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03F5",straightphi:"\u03D5",strns:"\xAF",sub:"\u2282",subE:"\u2AC5",subdot:"\u2ABD",sube:"\u2286",subedot:"\u2AC3",submult:"\u2AC1",subnE:"\u2ACB",subne:"\u228A",subplus:"\u2ABF",subrarr:"\u2979",subset:"\u2282",subseteq:"\u2286",subseteqq:"\u2AC5",subsetneq:"\u228A",subsetneqq:"\u2ACB",subsim:"\u2AC7",subsub:"\u2AD5",subsup:"\u2AD3",succ:"\u227B",succapprox:"\u2AB8",succcurlyeq:"\u227D",succeq:"\u2AB0",succnapprox:"\u2ABA",succneqq:"\u2AB6",succnsim:"\u22E9",succsim:"\u227F",sum:"\u2211",sung:"\u266A",sup1:"\xB9",sup2:"\xB2",sup3:"\xB3",sup:"\u2283",supE:"\u2AC6",supdot:"\u2ABE",supdsub:"\u2AD8",supe:"\u2287",supedot:"\u2AC4",suphsol:"\u27C9",suphsub:"\u2AD7",suplarr:"\u297B",supmult:"\u2AC2",supnE:"\u2ACC",supne:"\u228B",supplus:"\u2AC0",supset:"\u2283",supseteq:"\u2287",supseteqq:"\u2AC6",supsetneq:"\u228B",supsetneqq:"\u2ACC",supsim:"\u2AC8",supsub:"\u2AD4",supsup:"\u2AD6",swArr:"\u21D9",swarhk:"\u2926",swarr:"\u2199",swarrow:"\u2199",swnwar:"\u292A",szlig:"\xDF",target:"\u2316",tau:"\u03C4",tbrk:"\u23B4",tcaron:"\u0165",tcedil:"\u0163",tcy:"\u0442",tdot:"\u20DB",telrec:"\u2315",tfr:"\u{1D531}",there4:"\u2234",therefore:"\u2234",theta:"\u03B8",thetasym:"\u03D1",thetav:"\u03D1",thickapprox:"\u2248",thicksim:"\u223C",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223C",thorn:"\xFE",tilde:"\u02DC",times:"\xD7",timesb:"\u22A0",timesbar:"\u2A31",timesd:"\u2A30",tint:"\u222D",toea:"\u2928",top:"\u22A4",topbot:"\u2336",topcir:"\u2AF1",topf:"\u{1D565}",topfork:"\u2ADA",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",triangle:"\u25B5",triangledown:"\u25BF",triangleleft:"\u25C3",trianglelefteq:"\u22B4",triangleq:"\u225C",triangleright:"\u25B9",trianglerighteq:"\u22B5",tridot:"\u25EC",trie:"\u225C",triminus:"\u2A3A",triplus:"\u2A39",trisb:"\u29CD",tritime:"\u2A3B",trpezium:"\u23E2",tscr:"\u{1D4C9}",tscy:"\u0446",tshcy:"\u045B",tstrok:"\u0167",twixt:"\u226C",twoheadleftarrow:"\u219E",twoheadrightarrow:"\u21A0",uArr:"\u21D1",uHar:"\u2963",uacute:"\xFA",uarr:"\u2191",ubrcy:"\u045E",ubreve:"\u016D",ucirc:"\xFB",ucy:"\u0443",udarr:"\u21C5",udblac:"\u0171",udhar:"\u296E",ufisht:"\u297E",ufr:"\u{1D532}",ugrave:"\xF9",uharl:"\u21BF",uharr:"\u21BE",uhblk:"\u2580",ulcorn:"\u231C",ulcorner:"\u231C",ulcrop:"\u230F",ultri:"\u25F8",umacr:"\u016B",uml:"\xA8",uogon:"\u0173",uopf:"\u{1D566}",uparrow:"\u2191",updownarrow:"\u2195",upharpoonleft:"\u21BF",upharpoonright:"\u21BE",uplus:"\u228E",upsi:"\u03C5",upsih:"\u03D2",upsilon:"\u03C5",upuparrows:"\u21C8",urcorn:"\u231D",urcorner:"\u231D",urcrop:"\u230E",uring:"\u016F",urtri:"\u25F9",uscr:"\u{1D4CA}",utdot:"\u22F0",utilde:"\u0169",utri:"\u25B5",utrif:"\u25B4",uuarr:"\u21C8",uuml:"\xFC",uwangle:"\u29A7",vArr:"\u21D5",vBar:"\u2AE8",vBarv:"\u2AE9",vDash:"\u22A8",vangrt:"\u299C",varepsilon:"\u03F5",varkappa:"\u03F0",varnothing:"\u2205",varphi:"\u03D5",varpi:"\u03D6",varpropto:"\u221D",varr:"\u2195",varrho:"\u03F1",varsigma:"\u03C2",varsubsetneq:"\u228A\uFE00",varsubsetneqq:"\u2ACB\uFE00",varsupsetneq:"\u228B\uFE00",varsupsetneqq:"\u2ACC\uFE00",vartheta:"\u03D1",vartriangleleft:"\u22B2",vartriangleright:"\u22B3",vcy:"\u0432",vdash:"\u22A2",vee:"\u2228",veebar:"\u22BB",veeeq:"\u225A",vellip:"\u22EE",verbar:"|",vert:"|",vfr:"\u{1D533}",vltri:"\u22B2",vnsub:"\u2282\u20D2",vnsup:"\u2283\u20D2",vopf:"\u{1D567}",vprop:"\u221D",vrtri:"\u22B3",vscr:"\u{1D4CB}",vsubnE:"\u2ACB\uFE00",vsubne:"\u228A\uFE00",vsupnE:"\u2ACC\uFE00",vsupne:"\u228B\uFE00",vzigzag:"\u299A",wcirc:"\u0175",wedbar:"\u2A5F",wedge:"\u2227",wedgeq:"\u2259",weierp:"\u2118",wfr:"\u{1D534}",wopf:"\u{1D568}",wp:"\u2118",wr:"\u2240",wreath:"\u2240",wscr:"\u{1D4CC}",xcap:"\u22C2",xcirc:"\u25EF",xcup:"\u22C3",xdtri:"\u25BD",xfr:"\u{1D535}",xhArr:"\u27FA",xharr:"\u27F7",xi:"\u03BE",xlArr:"\u27F8",xlarr:"\u27F5",xmap:"\u27FC",xnis:"\u22FB",xodot:"\u2A00",xopf:"\u{1D569}",xoplus:"\u2A01",xotime:"\u2A02",xrArr:"\u27F9",xrarr:"\u27F6",xscr:"\u{1D4CD}",xsqcup:"\u2A06",xuplus:"\u2A04",xutri:"\u25B3",xvee:"\u22C1",xwedge:"\u22C0",yacute:"\xFD",yacy:"\u044F",ycirc:"\u0177",ycy:"\u044B",yen:"\xA5",yfr:"\u{1D536}",yicy:"\u0457",yopf:"\u{1D56A}",yscr:"\u{1D4CE}",yucy:"\u044E",yuml:"\xFF",zacute:"\u017A",zcaron:"\u017E",zcy:"\u0437",zdot:"\u017C",zeetrf:"\u2128",zeta:"\u03B6",zfr:"\u{1D537}",zhcy:"\u0436",zigrarr:"\u21DD",zopf:"\u{1D56B}",zscr:"\u{1D4CF}",zwj:"\u200D",zwnj:"\u200C"};var wo={}.hasOwnProperty;function _e(e){return wo.call(Jt,e)?Jt[e]:!1}function Q(e,n,t,r){let i=e.length,a=0,o;if(n<0?n=-n>i?0:i+n:n=n>i?i:n,t=t>0?t:0,r.length<1e4)o=Array.from(r),o.unshift(n,t),e.splice(...o);else for(t&&e.splice(n,t);a0?(Q(e,e.length,0,n),e):n}var Tr={}.hasOwnProperty;function pt(e){let n={},t=-1;for(;++t13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||(t&65535)===65535||(t&65535)===65534||t>1114111?"\uFFFD":String.fromCodePoint(t)}function Z(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}var j=we(/[A-Za-z]/),G=we(/[\dA-Za-z]/),Ir=we(/[#-'*+\--9=?A-Z^-~]/);function Ce(e){return e!==null&&(e<32||e===127)}var $e=we(/\d/),Lr=we(/[\dA-Fa-f]/),mt=we(/[!-/:-@[-`{-~]/);function T(e){return e!==null&&e<-2}function B(e){return e!==null&&(e<0||e===32)}function z(e){return e===-2||e===-1||e===32}var be=we(new RegExp("\\p{P}|\\p{S}","u")),ue=we(/\s/);function we(e){return n;function n(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function q(e,n,t,r){let i=r?r-1:1/0,a=0;return o;function o(u){return z(u)?(e.enter(t),l(u)):n(u)}function l(u){return z(u)&&a++0&&z(c)?(e.enter(r),u(c)):s(c)}function u(c){return z(c)&&o=i?n(c):t(c)}}var zr={tokenize:Eo};function Eo(e){let n=e.attempt(this.parser.constructs.contentInitial,r,i),t;return n;function r(l){if(l===null){e.consume(l);return}return e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),q(e,n,"linePrefix")}function i(l){return e.enter("paragraph"),a(l)}function a(l){let u=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=u),t=u,o(l)}function o(l){if(l===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(l);return}return T(l)?(e.consume(l),e.exit("chunkText"),a):(e.consume(l),o)}}var de=class{constructor(){this.index=new Map,this.map=[]}add(n,t,r){qr(this,n,t,r,!1)}addBefore(n,t,r){qr(this,n,t,r,!0)}consume(n){if(this.map.sort(function(a,o){return a[0]-o[0]}),this.map.length===0)return;let t=this.map.length,r=[];for(;t>0;)t-=1,r.push(n.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),n.length=this.map[t][0];r.push(n.slice()),n.length=0;let i=r.pop();for(;i;){for(let a of i)n.push(a);i=r.pop()}this.map.length=0,this.index.clear()}};function qr(e,n,t,r,i){if(t===0&&r.length===0)return;let a=e.index.get(n);if(a){a[1]+=t,i?(r.push(...a[2]),a[2]=r):a[2].push(...r);return}let o=[n,t,r];e.map.push(o),e.index.set(n,o)}var Fr={tokenize:Ao},Dr={tokenize:Co};function Ao(e){let n=this,t=[],r=0,i,a,o;return l;function l(y){if(ro))return;let F=n.events.length,M=F,V,k;for(;M--;)if(n.events[M][0]==="exit"&&n.events[M][1].type==="chunkFlow"){if(V){k=n.events[M][1].end;break}V=!0}for(x(r),w=F;wy;){let v=t[I];n.containerState=v[1],v[0].exit.call(n,e)}t.length=y}function C(){i.write([null]),a=void 0,i=void 0,n.containerState._closeFlow=void 0}}function Co(e,n,t){return q(e,e.attempt(this.parser.constructs.document,n,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function re(e){if(e===null||B(e)||ue(e))return 1;if(be(e))return 2}function ye(e,n,t){let r=[],i=-1;for(;++i1&&e[t][1].end.offset-e[t][1].start.offset>1?2:1,o={...e[i][1].end},l={...e[t][1].start};vr(o,-a),vr(l,a);let u={type:a>1?"strongSequence":"emphasisSequence",start:o,end:{...e[i][1].end}},s={type:a>1?"strongSequence":"emphasisSequence",start:{...e[t][1].start},end:l},c={type:a>1?"strongText":"emphasisText",start:{...e[i][1].end},end:{...e[t][1].start}},f={type:a>1?"strong":"emphasis",start:{...u.start},end:{...s.end}};e[i][1].end={...u.start},e[t][1].start={...s.end},r=[],e[i][1].end.offset-e[i][1].start.offset&&(r=$(r,[["enter",e[i][1],n],["exit",e[i][1],n]])),r=$(r,[["enter",f,n],["enter",u,n],["exit",u,n],["enter",c,n]]),r=$(r,ye(n.parser.constructs.insideSpan.null,e.slice(i+1,t),n)),r=$(r,[["exit",c,n],["enter",s,n],["exit",s,n],["exit",f,n]]);let h=0;e[t][1].end.offset-e[t][1].start.offset&&(h=2,r=$(r,[["enter",e[t][1],n],["exit",e[t][1],n]])),Q(e,i-1,t-i+3,r),t=i+r.length-h-2;break}}for(t=-1;++t0&&z(w)?q(e,C,"linePrefix",a+1)(w):C(w)}function C(w){return w===null||T(w)?e.check(Xe,S,I)(w):(e.enter("codeFlowValue"),y(w))}function y(w){return w===null||T(w)?(e.exit("codeFlowValue"),C(w)):(e.consume(w),y)}function I(w){return e.exit("codeFenced"),n(w)}function v(w,F,M){let V=0;return k;function k(R){return w.enter("lineEnding"),w.consume(R),w.exit("lineEnding"),N}function N(R){return w.enter("codeFencedFence"),z(R)?q(w,O,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):O(R)}function O(R){return R===l?(w.enter("codeFencedFenceSequence"),L(R)):M(R)}function L(R){return R===l?(V++,w.consume(R),L):V>=o?(w.exit("codeFencedFenceSequence"),z(R)?q(w,_,"whitespace")(R):_(R)):M(R)}function _(R){return R===null||T(R)?(w.exit("codeFencedFence"),F(R)):M(R)}}}var et={name:"codeIndented",tokenize:Mo},_o={partial:!0,tokenize:No};function Mo(e,n,t){return r;function r(l){return e.enter("codeIndented"),Xt(e,i,t,"linePrefix",4,4)(l)}function i(l){return l===null?o(l):T(l)?e.attempt(_o,i,o)(l):(e.enter("codeFlowValue"),a(l))}function a(l){return l===null||T(l)?(e.exit("codeFlowValue"),i(l)):(e.consume(l),a)}function o(l){return e.exit("codeIndented"),n(l)}}function No(e,n,t){let r=this;return i;function i(o){return r.parser.lazy[r.now().line]?t(o):T(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),i):Xt(e,n,a,"linePrefix",4,4)(o)}function a(o){return T(o)?i(o):t(o)}}var tn={name:"codeText",previous:Ho,resolve:Oo,tokenize:Vo};function Oo(e){let n=e.length-4,t=3,r,i;if((e[t][1].type==="lineEnding"||e[t][1].type==="space")&&(e[n][1].type==="lineEnding"||e[n][1].type==="space")){for(r=t;++r=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+n+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return nthis.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-n+this.left.length).reverse():this.left.slice(n).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(n,t,r){let i=t||0;this.setCursor(Math.trunc(n));let a=this.right.splice(this.right.length-i,Number.POSITIVE_INFINITY);return r&&tt(this.left,r),a.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(n){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(n)}pushMany(n){this.setCursor(Number.POSITIVE_INFINITY),tt(this.left,n)}unshift(n){this.setCursor(0),this.right.push(n)}unshiftMany(n){this.setCursor(0),tt(this.right,n.reverse())}setCursor(n){if(!(n===this.left.length||n>this.left.length&&this.right.length===0||n<0&&this.left.length===0))if(n=4?n(o):e.interrupt(r.parser.constructs.flow,t,n)(o)}}function yt(e,n,t,r,i,a,o,l,u){let s=u||Number.POSITIVE_INFINITY,c=0;return f;function f(x){return x===60?(e.enter(r),e.enter(i),e.enter(a),e.consume(x),e.exit(a),h):x===null||x===32||x===41||Ce(x)?t(x):(e.enter(r),e.enter(o),e.enter(l),e.enter("chunkString",{contentType:"string"}),S(x))}function h(x){return x===62?(e.enter(a),e.consume(x),e.exit(a),e.exit(i),e.exit(r),n):(e.enter(l),e.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===62?(e.exit("chunkString"),e.exit(l),h(x)):x===null||x===60||T(x)?t(x):(e.consume(x),x===92?d:p)}function d(x){return x===60||x===62||x===92?(e.consume(x),p):p(x)}function S(x){return!c&&(x===null||x===41||B(x))?(e.exit("chunkString"),e.exit(l),e.exit(o),e.exit(r),n(x)):c999||p===null||p===91||p===93&&!u||p===94&&!l&&"_hiddenFootnoteSupport"in o.parser.constructs?t(p):p===93?(e.exit(a),e.enter(i),e.consume(p),e.exit(i),e.exit(r),n):T(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),c):(e.enter("chunkString",{contentType:"string"}),f(p))}function f(p){return p===null||p===91||p===93||T(p)||l++>999?(e.exit("chunkString"),c(p)):(e.consume(p),u||(u=!z(p)),p===92?h:f)}function h(p){return p===91||p===92||p===93?(e.consume(p),l++,f):f(p)}}function Et(e,n,t,r,i,a){let o;return l;function l(h){return h===34||h===39||h===40?(e.enter(r),e.enter(i),e.consume(h),e.exit(i),o=h===40?41:h,u):t(h)}function u(h){return h===o?(e.enter(i),e.consume(h),e.exit(i),e.exit(r),n):(e.enter(a),s(h))}function s(h){return h===o?(e.exit(a),u(o)):h===null?t(h):T(h)?(e.enter("lineEnding"),e.consume(h),e.exit("lineEnding"),q(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),c(h))}function c(h){return h===o||h===null||T(h)?(e.exit("chunkString"),s(h)):(e.consume(h),h===92?f:c)}function f(h){return h===o||h===92?(e.consume(h),c):c(h)}}function Te(e,n){let t;return r;function r(i){return T(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t=!0,r):z(i)?q(e,r,t?"linePrefix":"lineSuffix")(i):n(i)}}var rn={name:"definition",tokenize:Zo},Yo={partial:!0,tokenize:Ko};function Zo(e,n,t){let r=this,i;return a;function a(p){return e.enter("definition"),o(p)}function o(p){return St.call(r,e,l,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function l(p){return i=Z(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),u):t(p)}function u(p){return B(p)?Te(e,s)(p):s(p)}function s(p){return yt(e,c,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function c(p){return e.attempt(Yo,f,f)(p)}function f(p){return z(p)?q(e,h,"whitespace")(p):h(p)}function h(p){return p===null||T(p)?(e.exit("definition"),r.parser.defined.push(i),n(p)):t(p)}}function Ko(e,n,t){return r;function r(l){return B(l)?Te(e,i)(l):t(l)}function i(l){return Et(e,a,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(l)}function a(l){return z(l)?q(e,o,"whitespace")(l):o(l)}function o(l){return l===null||T(l)?n(l):t(l)}}var on={name:"hardBreakEscape",tokenize:$o};function $o(e,n,t){return r;function r(a){return e.enter("hardBreakEscape"),e.consume(a),i}function i(a){return T(a)?(e.exit("hardBreakEscape"),n(a)):t(a)}}var an={name:"headingAtx",resolve:Jo,tokenize:Xo};function Jo(e,n){let t=e.length-2,r=3;if(e[r][1].type==="whitespace"&&(r+=2),t-2>r&&e[t][1].type==="whitespace"&&(t-=2),e[t][1].type==="atxHeadingSequence"&&(r===t-1||t-4>r&&e[t-2][1].type==="whitespace")&&(t-=r+1===t?2:4),t>r){let i={type:"atxHeadingText",start:e[r][1].start,end:e[t][1].end},a={type:"chunkText",start:e[r][1].start,end:e[t][1].end,contentType:"text"};Q(e,r,t-r+1,[["enter",i,n],["enter",a,n],["exit",a,n],["exit",i,n]])}return e}function Xo(e,n,t){let r=0;return i;function i(c){return e.enter("atxHeading"),a(c)}function a(c){return e.enter("atxHeadingSequence"),o(c)}function o(c){return c===35&&r++<6?(e.consume(c),o):c===null||B(c)?(e.exit("atxHeadingSequence"),l(c)):t(c)}function l(c){return c===35?(e.enter("atxHeadingSequence"),u(c)):c===null||T(c)?(e.exit("atxHeading"),n(c)):z(c)?q(e,l,"whitespace")(c):(e.enter("atxHeadingText"),s(c))}function u(c){return c===35?(e.consume(c),u):(e.exit("atxHeadingSequence"),l(c))}function s(c){return c===null||c===35||B(c)?(e.exit("atxHeadingText"),l(c)):(e.consume(c),s)}}var At=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],nt=["pre","script","style","textarea"];var ln={concrete:!0,name:"htmlFlow",resolveTo:ta,tokenize:na},ea={partial:!0,tokenize:ra};function ta(e){let n=e.length;for(;n--&&!(e[n][0]==="enter"&&e[n][1].type==="htmlFlow"););return n>1&&e[n-2][1].type==="linePrefix"&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2)),e}function na(e,n,t){let r=this,i,a,o,l,u;return s;function s(g){return c(g)}function c(g){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(g),f}function f(g){return g===33?(e.consume(g),h):g===47?(e.consume(g),a=!0,S):g===63?(e.consume(g),i=3,r.interrupt?n:m):j(g)?(e.consume(g),o=String.fromCharCode(g),E):t(g)}function h(g){return g===45?(e.consume(g),i=2,p):g===91?(e.consume(g),i=5,l=0,d):j(g)?(e.consume(g),i=4,r.interrupt?n:m):t(g)}function p(g){return g===45?(e.consume(g),r.interrupt?n:m):t(g)}function d(g){let ee="CDATA[";return g===ee.charCodeAt(l++)?(e.consume(g),l===ee.length?r.interrupt?n:O:d):t(g)}function S(g){return j(g)?(e.consume(g),o=String.fromCharCode(g),E):t(g)}function E(g){if(g===null||g===47||g===62||B(g)){let ee=g===47,Fe=o.toLowerCase();return!ee&&!a&&nt.includes(Fe)?(i=1,r.interrupt?n(g):O(g)):At.includes(o.toLowerCase())?(i=6,ee?(e.consume(g),x):r.interrupt?n(g):O(g)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?t(g):a?C(g):y(g))}return g===45||G(g)?(e.consume(g),o+=String.fromCharCode(g),E):t(g)}function x(g){return g===62?(e.consume(g),r.interrupt?n:O):t(g)}function C(g){return z(g)?(e.consume(g),C):k(g)}function y(g){return g===47?(e.consume(g),k):g===58||g===95||j(g)?(e.consume(g),I):z(g)?(e.consume(g),y):k(g)}function I(g){return g===45||g===46||g===58||g===95||G(g)?(e.consume(g),I):v(g)}function v(g){return g===61?(e.consume(g),w):z(g)?(e.consume(g),v):y(g)}function w(g){return g===null||g===60||g===61||g===62||g===96?t(g):g===34||g===39?(e.consume(g),u=g,F):z(g)?(e.consume(g),w):M(g)}function F(g){return g===u?(e.consume(g),u=null,V):g===null||T(g)?t(g):(e.consume(g),F)}function M(g){return g===null||g===34||g===39||g===47||g===60||g===61||g===62||g===96||B(g)?v(g):(e.consume(g),M)}function V(g){return g===47||g===62||z(g)?y(g):t(g)}function k(g){return g===62?(e.consume(g),N):t(g)}function N(g){return g===null||T(g)?O(g):z(g)?(e.consume(g),N):t(g)}function O(g){return g===45&&i===2?(e.consume(g),U):g===60&&i===1?(e.consume(g),W):g===62&&i===4?(e.consume(g),ne):g===63&&i===3?(e.consume(g),m):g===93&&i===5?(e.consume(g),ae):T(g)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(ea,pe,L)(g)):g===null||T(g)?(e.exit("htmlFlowData"),L(g)):(e.consume(g),O)}function L(g){return e.check(Xe,_,pe)(g)}function _(g){return e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),R}function R(g){return g===null||T(g)?L(g):(e.enter("htmlFlowData"),O(g))}function U(g){return g===45?(e.consume(g),m):O(g)}function W(g){return g===47?(e.consume(g),o="",ie):O(g)}function ie(g){if(g===62){let ee=o.toLowerCase();return nt.includes(ee)?(e.consume(g),ne):O(g)}return j(g)&&o.length<8?(e.consume(g),o+=String.fromCharCode(g),ie):O(g)}function ae(g){return g===93?(e.consume(g),m):O(g)}function m(g){return g===62?(e.consume(g),ne):g===45&&i===2?(e.consume(g),m):O(g)}function ne(g){return g===null||T(g)?(e.exit("htmlFlowData"),pe(g)):(e.consume(g),ne)}function pe(g){return e.exit("htmlFlow"),n(g)}}function ra(e,n,t){return r;function r(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(se,n,t)}}var un={name:"htmlText",tokenize:ia};function ia(e,n,t){let r=this,i,a,o;return l;function l(m){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(m),u}function u(m){return m===33?(e.consume(m),s):m===47?(e.consume(m),v):m===63?(e.consume(m),y):j(m)?(e.consume(m),M):t(m)}function s(m){return m===45?(e.consume(m),c):m===91?(e.consume(m),a=0,d):j(m)?(e.consume(m),C):t(m)}function c(m){return m===45?(e.consume(m),p):t(m)}function f(m){return m===null?t(m):m===45?(e.consume(m),h):T(m)?(o=f,W(m)):(e.consume(m),f)}function h(m){return m===45?(e.consume(m),p):f(m)}function p(m){return m===62?U(m):m===45?h(m):f(m)}function d(m){let ne="CDATA[";return m===ne.charCodeAt(a++)?(e.consume(m),a===ne.length?S:d):t(m)}function S(m){return m===null?t(m):m===93?(e.consume(m),E):T(m)?(o=S,W(m)):(e.consume(m),S)}function E(m){return m===93?(e.consume(m),x):S(m)}function x(m){return m===62?U(m):m===93?(e.consume(m),x):S(m)}function C(m){return m===null||m===62?U(m):T(m)?(o=C,W(m)):(e.consume(m),C)}function y(m){return m===null?t(m):m===63?(e.consume(m),I):T(m)?(o=y,W(m)):(e.consume(m),y)}function I(m){return m===62?U(m):y(m)}function v(m){return j(m)?(e.consume(m),w):t(m)}function w(m){return m===45||G(m)?(e.consume(m),w):F(m)}function F(m){return T(m)?(o=F,W(m)):z(m)?(e.consume(m),F):U(m)}function M(m){return m===45||G(m)?(e.consume(m),M):m===47||m===62||B(m)?V(m):t(m)}function V(m){return m===47?(e.consume(m),U):m===58||m===95||j(m)?(e.consume(m),k):T(m)?(o=V,W(m)):z(m)?(e.consume(m),V):U(m)}function k(m){return m===45||m===46||m===58||m===95||G(m)?(e.consume(m),k):N(m)}function N(m){return m===61?(e.consume(m),O):T(m)?(o=N,W(m)):z(m)?(e.consume(m),N):V(m)}function O(m){return m===null||m===60||m===61||m===62||m===96?t(m):m===34||m===39?(e.consume(m),i=m,L):T(m)?(o=O,W(m)):z(m)?(e.consume(m),O):(e.consume(m),_)}function L(m){return m===i?(e.consume(m),i=void 0,R):m===null?t(m):T(m)?(o=L,W(m)):(e.consume(m),L)}function _(m){return m===null||m===34||m===39||m===60||m===61||m===96?t(m):m===47||m===62||B(m)?V(m):(e.consume(m),_)}function R(m){return m===47||m===62||B(m)?V(m):t(m)}function U(m){return m===62?(e.consume(m),e.exit("htmlTextData"),e.exit("htmlText"),n):t(m)}function W(m){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),ie}function ie(m){return z(m)?q(e,ae,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(m):ae(m)}function ae(m){return e.enter("htmlTextData"),o(m)}}var Ie={name:"labelEnd",resolveAll:ua,resolveTo:sa,tokenize:ca},oa={tokenize:fa},aa={tokenize:pa},la={tokenize:ha};function ua(e){let n=-1,t=[];for(;++n0&&i[i.length-1]._balanced;)i.pop();a=i[i.length-1]}return l;function l(h){return a?a._inactive?f(h):(o=r.parser.defined.includes(Z(r.sliceSerialize({start:a.end,end:r.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(h),e.exit("labelMarker"),e.exit("labelEnd"),u):t(h)}function u(h){return h===40?e.attempt(oa,c,o?c:f)(h):h===91?e.attempt(aa,c,o?s:f)(h):o?c(h):f(h)}function s(h){return e.attempt(la,c,f)(h)}function c(h){return i.pop(),n(h)}function f(h){return a._balanced=!0,t(h)}}function fa(e,n,t){return r;function r(f){return e.enter("resource"),e.enter("resourceMarker"),e.consume(f),e.exit("resourceMarker"),i}function i(f){return B(f)?Te(e,a)(f):a(f)}function a(f){return f===41?c(f):yt(e,o,l,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(f)}function o(f){return B(f)?Te(e,u)(f):c(f)}function l(f){return t(f)}function u(f){return f===34||f===39||f===40?Et(e,s,t,"resourceTitle","resourceTitleMarker","resourceTitleString")(f):c(f)}function s(f){return B(f)?Te(e,c)(f):c(f)}function c(f){return f===41?(e.enter("resourceMarker"),e.consume(f),e.exit("resourceMarker"),e.exit("resource"),n):t(f)}}function pa(e,n,t){let r=this;return i;function i(l){return St.call(r,e,a,o,"reference","referenceMarker","referenceString")(l)}function a(l){return r.parser.defined.includes(Z(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?n(l):t(l)}function o(l){return t(l)}}function ha(e,n,t){return r;function r(a){return e.enter("reference"),e.enter("referenceMarker"),e.consume(a),e.exit("referenceMarker"),i}function i(a){return a===93?(e.enter("referenceMarker"),e.consume(a),e.exit("referenceMarker"),e.exit("reference"),n):t(a)}}var sn={name:"labelStartImage",resolveAll:Ie.resolveAll,tokenize:ma};function ma(e,n,t){let r=this,i;return a;function a(u){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(u),e.exit("labelImageMarker"),o}function o(u){return u===91?(e.enter("labelMarker"),e.consume(u),e.exit("labelMarker"),i=e.exit("labelImage"),l):t(u)}function l(u){return u===94&&"_hiddenFootnoteSupport"in r.parser.constructs?t(u):(r._labelStarts=r._labelStarts||[],r._labelStarts.push(i),n(u))}}var cn={name:"labelStartLink",resolveAll:Ie.resolveAll,tokenize:ga};function ga(e,n,t){let r=this,i;return a;function a(l){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(l),e.exit("labelMarker"),i=e.exit("labelLink"),o}function o(l){return l===94&&"_hiddenFootnoteSupport"in r.parser.constructs?t(l):(r._labelStarts=r._labelStarts||[],r._labelStarts.push(i),n(l))}}var rt={name:"lineEnding",tokenize:da};function da(e,n){return t;function t(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),q(e,n,"linePrefix")}}var Le={name:"thematicBreak",tokenize:xa};function xa(e,n,t){let r=0,i;return a;function a(s){return e.enter("thematicBreak"),o(s)}function o(s){return i=s,l(s)}function l(s){return s===i?(e.enter("thematicBreakSequence"),u(s)):r>=3&&(s===null||T(s))?(e.exit("thematicBreak"),n(s)):t(s)}function u(s){return s===i?(e.consume(s),r++,u):(e.exit("thematicBreakSequence"),z(s)?q(e,l,"whitespace")(s):l(s))}}var K={continuation:{tokenize:ya},exit:Ea,name:"list",tokenize:wa},ka={partial:!0,tokenize:Aa},ba={partial:!0,tokenize:Sa};function wa(e,n,t){let r=this,i=r.events[r.events.length-1],a=i&&i[1].type==="linePrefix"?i[2].sliceSerialize(i[1],!0).length:0,o=0;return l;function l(p){let d=r.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(d==="listUnordered"?!r.containerState.marker||p===r.containerState.marker:$e(p)){if(r.containerState.type||(r.containerState.type=d,e.enter(d,{_container:!0})),d==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Le,t,s)(p):s(p);if(!r.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),u(p)}return t(p)}function u(p){return $e(p)&&++o<10?(e.consume(p),u):(!r.interrupt||o<2)&&(r.containerState.marker?p===r.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),s(p)):t(p)}function s(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||p,e.check(se,r.interrupt?t:c,e.attempt(ka,h,f))}function c(p){return r.containerState.initialBlankLine=!0,a++,h(p)}function f(p){return z(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),h):t(p)}function h(p){return r.containerState.size=a+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(p)}}function ya(e,n,t){let r=this;return r.containerState._closeFlow=void 0,e.check(se,i,a);function i(l){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,q(e,n,"listItemIndent",r.containerState.size+1)(l)}function a(l){return r.containerState.furtherBlankLines||!z(l)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(l)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(ba,n,o)(l))}function o(l){return r.containerState._closeFlow=!0,r.interrupt=void 0,q(e,e.attempt(K,n,t),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(l)}}function Sa(e,n,t){let r=this;return q(e,i,"listItemIndent",r.containerState.size+1);function i(a){let o=r.events[r.events.length-1];return o&&o[1].type==="listItemIndent"&&o[2].sliceSerialize(o[1],!0).length===r.containerState.size?n(a):t(a)}}function Ea(e){e.exit(this.containerState.type)}function Aa(e,n,t){let r=this;return q(e,i,"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function i(a){let o=r.events[r.events.length-1];return!z(a)&&o&&o[1].type==="listItemPrefixWhitespace"?n(a):t(a)}}var Ct={name:"setextUnderline",resolveTo:Ca,tokenize:Ta};function Ca(e,n){let t=new de,r=e.length,i,a,o;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){i=r;break}e[r][1].type==="paragraph"&&(a=r)}else e[r][1].type==="content"&&t.add(r,1,[]),!o&&e[r][1].type==="definition"&&(o=r);let l={type:"setextHeading",start:{...e[i][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",o?(t.add(a,0,[["enter",l,n]]),t.add(o+1,0,[["exit",e[i][1],n]]),e[i][1].end={...e[o][1].end}):e[i][1]=l,t.add(e.length,0,[["exit",l,n]]),t.consume(e),e}function Ta(e,n,t){let r=this,i;return a;function a(s){let c=r.events.length,f;for(;c--;)if(r.events[c][1].type!=="lineEnding"&&r.events[c][1].type!=="linePrefix"&&r.events[c][1].type!=="content"){f=r.events[c][1].type==="paragraph";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||f)?(e.enter("setextHeadingLine"),i=s,o(s)):t(s)}function o(s){return e.enter("setextHeadingLineSequence"),l(s)}function l(s){return s===i?(e.consume(s),l):(e.exit("setextHeadingLineSequence"),z(s)?q(e,u,"lineSuffix")(s):u(s))}function u(s){return s===null||T(s)?(e.exit("setextHeadingLine"),n(s)):t(s)}}var Pr={tokenize:Ia};function Ia(e){let n=this,t=e.attempt(se,r,e.attempt(this.parser.constructs.flowInitial,i,q(e,e.attempt(this.parser.constructs.flow,i,e.attempt(nn,i)),"linePrefix")));return t;function r(a){if(a===null){e.consume(a);return}return e.enter("lineEndingBlank"),e.consume(a),e.exit("lineEndingBlank"),n.currentConstruct=void 0,t}function i(a){if(a===null){e.consume(a);return}return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),n.currentConstruct=void 0,t}}var Rr={resolveAll:Nr()},Br=Mr("string"),_r=Mr("text");function Mr(e){return{resolveAll:Nr(e==="text"?La:void 0),tokenize:n};function n(t){let r=this,i=this.parser.constructs[e],a=t.attempt(i,o,l);return o;function o(c){return s(c)?a(c):l(c)}function l(c){if(c===null){t.consume(c);return}return t.enter("data"),t.consume(c),u}function u(c){return s(c)?(t.exit("data"),a(c)):(t.consume(c),u)}function s(c){if(c===null)return!0;let f=i[c],h=-1;if(f)for(;++hBa,contentInitial:()=>qa,disable:()=>_a,document:()=>za,flow:()=>Fa,flowInitial:()=>Da,insideSpan:()=>Ra,string:()=>va,text:()=>Pa});var za={42:K,43:K,45:K,48:K,49:K,50:K,51:K,52:K,53:K,54:K,55:K,56:K,57:K,62:gt},qa={91:rn},Da={[-2]:et,[-1]:et,32:et},Fa={35:an,42:Le,45:[Ct,Le],60:ln,61:Ct,95:Le,96:kt,126:kt},va={38:xt,92:dt},Pa={[-5]:rt,[-4]:rt,[-3]:rt,33:sn,38:xt,42:Je,60:[en,un],91:cn,92:[on,dt],93:Ie,95:Je,96:tn},Ra={null:[Je,Rr]},Ba={null:[42,95]},_a={null:[]};function Or(e,n,t){let r={_bufferIndex:-1,_index:0,line:t&&t.line||1,column:t&&t.column||1,offset:t&&t.offset||0},i={},a=[],o=[],l=[],u=!0,s={attempt:V(F),check:V(M),consume:I,enter:v,exit:w,interrupt:V(M,{interrupt:!0})},c={code:null,containerState:{},defineSkip:x,events:[],now:E,parser:e,previous:null,sliceSerialize:d,sliceStream:S,write:p},f=n.tokenize.call(c,s),h;return n.resolveAll&&a.push(n),c;function p(L){return o=$(o,L),C(),o[o.length-1]!==null?[]:(k(n,0),c.events=ye(a,c.events,c),c.events)}function d(L,_){return Na(S(L),_)}function S(L){return Ma(o,L)}function E(){let{_bufferIndex:L,_index:_,line:R,column:U,offset:W}=r;return{_bufferIndex:L,_index:_,line:R,column:U,offset:W}}function x(L){i[L.line]=L.column,O()}function C(){for(;r._index-1){let l=o[0];typeof l=="string"?o[0]=l.slice(r):o.shift()}a>0&&o.push(e[i].slice(0,a))}return o}function Na(e,n){let t=-1,r=[],i;for(;++t0&&i(n.beforeEnter,{...D,sliceSerialize:b[H][2].sliceSerialize},b[H][1]),jr.call(X,b[H][1].type)&&X[b[H][1].type].call({...D,sliceSerialize:b[H][2].sliceSerialize},b[H][1]),b[H][0]==="exit"&&n.afterExit.length>0&&i(n.afterExit,{...D,sliceSerialize:b[H][2].sliceSerialize},b[H][1])}if(D.tokenStack.length>0){let X=D.tokenStack[D.tokenStack.length-1];(X[1]||Ur).call(D,void 0,X[0])}for(A.position={start:Se(b.length>0?b[0][1].start:{line:1,column:1,offset:0}),end:Se(b.length>0?b[b.length-2][1].end:{line:1,column:1,offset:0})},H=-1;++H":""))+")"})}return E;function E(){let x=!a||s(h,p,d[d.length-1]||void 0),C=Qr;if(l&&x&&(C=Wr(l(h,d,p)),C[0]===ce))return C;if("children"in h&&h.children){let y=h;if(y.children&&C[0]!==ze){let I=(i?-1:y.children.length)+c,v=[...d,y];for(;I>-1&&I0?{type:"text",value:w}:void 0),w===!1)p.lastIndex=I+1;else{if(S!==I&&y({type:"text",value:s.value.slice(S,I)}),Array.isArray(w))for(let F of w)y(F);else w&&y(w);S=I+C[0].length,E=!0}if(!p.global)break;C=p.exec(s.value)}return E?(S0;){let o=e.charCodeAt(n-1);if(o===33||o===34||o===38||o===39||o===41||o===44||o===46||o===58||o===59||o===60||o===62||o===63||o===93||o===125)n--;else break}if(n===e.length)return[e,void 0];let t=e.slice(n);e=e.slice(0,n);let r=t.indexOf(")"),i=dn(e,"("),a=dn(e,")");for(;r!==-1&&i>a;)e+=t.slice(0,r+1),t=t.slice(r+1),r=t.indexOf(")"),a++;return[e,t]}function cl(e){let n=e.input.charCodeAt(e.index-1);return e.index===0||ue(n)||be(n)}Yr.peek=bl;function fl(){this.buffer()}function pl(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function hl(){this.buffer()}function ml(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function gl(e){let n=this.resume(),t=this.stack[this.stack.length-1];t.type,t.identifier=Z(this.sliceSerialize(e)).toLowerCase(),t.label=n}function dl(e){this.exit(e)}function xl(e){let n=this.resume(),t=this.stack[this.stack.length-1];t.type,t.identifier=Z(this.sliceSerialize(e)).toLowerCase(),t.label=n}function kl(e){this.exit(e)}function bl(){return"["}function Yr(e,n,t,r){let i=t.createTracker(r),a=i.move("[^"),o=t.enter("footnoteReference"),l=t.enter("reference");return a+=i.move(t.safe(t.associationId(e),{after:"]",before:a})),l(),o(),a+=i.move("]"),a}function An(){return{enter:{gfmFootnoteCallString:fl,gfmFootnoteCall:pl,gfmFootnoteDefinitionLabelString:hl,gfmFootnoteDefinition:ml},exit:{gfmFootnoteCallString:gl,gfmFootnoteCall:dl,gfmFootnoteDefinitionLabelString:xl,gfmFootnoteDefinition:kl}}}function Cn(e){let n=!1;return e&&e.firstLineBlank&&(n=!0),{handlers:{footnoteDefinition:t,footnoteReference:Yr},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function t(r,i,a,o){let l=a.createTracker(o),u=l.move("[^"),s=a.enter("footnoteDefinition"),c=a.enter("label");return u+=l.move(a.safe(a.associationId(r),{before:u,after:"]"})),c(),u+=l.move("]:"),r.children&&r.children.length>0&&(l.shift(4),u+=l.move((n?` +`:" ")+a.indentLines(a.containerFlow(r,l.current()),n?Zr:wl))),s(),u}}function wl(e,n,t){return n===0?e:Zr(e,n,t)}function Zr(e,n,t){return(t?"":" ")+e}var yl=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Ln.attention=Al;Ln.peek=Cl;function Tn(){return{canContainEols:["delete"],enter:{strikethrough:Sl},exit:{strikethrough:El}}}function In(){return{handlers:{delete:Ln},unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:yl}]}}function Sl(e){this.enter({type:"delete",children:[],position:void 0},e)}function El(e){this.exit(e)}function Ln(e,n,t,r){let i=t.createTracker(r),a=t.stack.includes("strikethrough")?"~":"~~",o=t.enter("strikethrough"),l=i.move(a);return l+=t.containerPhrasing(e,{...i.current(),before:l,after:"~"}),l+=i.move(a),o(),l}function Al(){return{construct:"strikethrough",markers:["~"],sizes:[2,1]}}function Cl(){return"~"}function Tl(e){return e.length}function $r(e,n){let t=n||{},r=(t.align||[]).concat(),i=t.stringLength||Tl,a=[],o=[],l=[],u=[],s=0,c=-1;for(;++cs&&(s=e[c].length);++xu[x])&&(u[x]=y)}S.push(C)}o[c]=S,l[c]=E}let f=-1;if(typeof r=="object"&&"length"in r)for(;++fu[f]&&(u[f]=C),p[f]=C),h[f]=y}o.splice(1,0,h),l.splice(1,0,p),c=-1;let d=[];for(;++c "),a.shift(2);let o=t.indentLines(t.containerFlow(e,a.current()),Ll);return i(),o}function Ll(e,n,t){return">"+(t?"":" ")+e}function ei(e,n){return Xr(e,n.inConstruct,!0)&&!Xr(e,n.notInConstruct,!1)}function Xr(e,n,t){if(typeof n=="string"&&(n=[n]),!n||n.length===0)return t;let r=-1;for(;++ro&&(o=a):a=1,i=r+n.length,r=t.indexOf(n,i);return o}function ni(e,n){return!!(n.options.fences===!1&&e.value&&!e.lang&&/[^\n\r ]/.test(e.value)&&!/^[\t ]*(?:[\n\r]|$)|(?:^|[\n\r])[\t ]*$/.test(e.value))}function ri(e){let n=e.options.fence||"`";if(n!=="`"&&n!=="~")throw new Error("Cannot serialize code with `"+n+"` for `options.fence`, expected `` ` `` or `~`");return n}function ii(e,n,t,r){let i=ri(t),a=e.value||"";if(ni(e,t)){let f=t.enter("codeIndented"),h=t.indentLines(a,zl);return f(),h}let o=t.createTracker(r),l=i.repeat(Math.max(ti(a,i)+1,3)),u=t.enter("codeFenced"),s=i==="`"?"GraveAccent":"Tilde",c=o.move(l);if(e.lang){let f=t.enter(`codeFencedLang${s}`);c+=o.move(t.safe(e.lang,{before:c,after:" ",encode:["`"],...o.current()})),f()}if(e.lang&&e.meta){let f=t.enter(`codeFencedMeta${s}`);c+=o.move(" "),c+=o.move(t.safe(e.meta,{before:c,after:` +`,encode:["`"],...o.current()})),f()}return c+=o.move(` +`),a&&(c+=o.move(a+` +`)),c+=o.move(l),u(),c}function zl(e,n,t){return(t?"":" ")+e}function Ne(e){let n=e.options.quote||'"';if(n!=='"'&&n!=="'")throw new Error("Cannot serialize title with `"+n+"` for `options.quote`, expected `\"`, or `'`");return n}function oi(e,n,t,r){let i=Ne(t),a=i==='"'?"Quote":"Apostrophe",o=t.enter("definition"),l=t.enter("label"),u=t.createTracker(r),s=u.move("[");return s+=u.move(t.safe(t.associationId(e),{before:s,after:"]",...u.current()})),s+=u.move("]: "),l(),!e.url||/[\0- \u007F]/.test(e.url)?(l=t.enter("destinationLiteral"),s+=u.move("<"),s+=u.move(t.safe(e.url,{before:s,after:">",...u.current()})),s+=u.move(">")):(l=t.enter("destinationRaw"),s+=u.move(t.safe(e.url,{before:s,after:e.title?" ":` +`,...u.current()}))),l(),e.title&&(l=t.enter(`title${a}`),s+=u.move(" "+i),s+=u.move(t.safe(e.title,{before:s,after:i,...u.current()})),s+=u.move(i),l()),o(),s}function ai(e){let n=e.options.emphasis||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize emphasis with `"+n+"` for `options.emphasis`, expected `*`, or `_`");return n}function it(e){let n=e.codePointAt(0);return n===void 0?"":String.fromCodePoint(n)}function qe(e){let n=e.codePointAt(e.length-2);return n!==void 0&&n>65535?e.slice(-2):e.slice(-1)}function zt(e){return"&#x"+e.toString(16).toUpperCase()+";"}function Dn(e,n,t){let r=re(e),i=re(n);return r===void 0?i===void 0?t==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}function li(e){if(e.charCodeAt(0)!==60)return;let n=e.charCodeAt(1);if(n===33){let l=e.charCodeAt(2);return l===45?2:l===91?5:j(l)?4:void 0}if(n===63)return 3;let t=n===47,r=t?2:1,i=r,a=e.charCodeAt(i);if(!j(a))return;for(;a===45||G(a);)a=e.charCodeAt(++i);let o=e.slice(r,i).toLowerCase();return!t&&a!==47&&nt.includes(o)?1:At.includes(o)?6:7}var si=new Map([["*",!1],["_",!0]]);function ql(e,n,t){let r=new Set;for(let a of e){let o=t.get(a);if(o&&a.attention&&n.some(l=>l.attention===a.attention))for(let l of o.tokens)r.add(l.attention)}let i=[];for(let a of e)a.attention&&r.delete(a.attention)&&i.push(a.attention);return i.reverse(),i}function ci(e,n,t){let r=[],i=new Map,a=new Map,o=0;for(;ot.index)return{chosen:u,mistake:c,tokens:s}}}}function Fl(e,n){let t=new Map;for(let r of e){let i=r.tokens[0].value.charAt(0),a=t.get(i);a||(a=[],t.set(i,a));let o=r.close?a.length:0;for(;o--&&r.start1&&s>1?2:1:s,f=l.markers.slice(l.end-c,l.end),h=r.markers.slice(r.start,r.start+c),p=f[0],d=h[0];if(p===f[c-1]&&p.value.length===c&&d===h[c-1]&&d.value.length===c&&p.attention===d.attention)n.delete(p),n.delete(d);else{let S=[...new Set([...f,...h])];for(let E of S){let x=n.get(E);x&&x.push(...S)}}l.end-=c,r.start+=c,l.start===l.end&&a.splice(o,1),o=a.length}r.open&&r.startt.length})||o.sequences[0];u!==o.sequences[0]&&n.set(o,u),fi(o.children,n,u,u),i=u}}function Dt(e,n,t,r){let i=[],a,o=qe(t),l=-1;for(;++l0?ui(e,r,n,t):void 0)||ui(e,new Map,n,t)||Dt(e,new Map,n,t),a="";for(let o of i)a+=o.value;return a}Ft.attention=pi;Ft.peek=Rl;function Ft(e,n,t,r){let i=t.enter("phrasing"),a=ot(e,pi,t,t.createTracker(r)),o=a?Oe([a],r.before,r.after):"";return i(),o}function pi(e,n){return{construct:"emphasis",markers:ai(n)==="*"?["*","_"]:["_","*"],sizes:[1]}}function Rl(e,n,t){return t.options.emphasis||"*"}function at(e,n,t,r){let i,a,o;typeof t=="function"||t&&typeof t=="object"?(i=n,a=t,o=r):(a=n,o=t),typeof a=="function"?Me(e,i,Fn(a),o):Me(e,i,Bl(a),o)}function Bl(e){return!e||typeof e!="object"?e:{enter:typeof e.enter=="function"?Fn(e.enter):e.enter,exit:typeof e.exit=="function"?Fn(e.exit):e.exit}}function Fn(e){return n;function n(t,r,i){return e(t,i,r[r.length-1])}}function hi(e,n){let t=!1;return at(e,function(r){if("value"in r&&/\r?\n|\r/.test(r.value)||r.type==="break")return t=!0,ce}),!!((!e.depth||e.depth<3)&&ge(e)&&(n.options.setext||t))}function mi(e,n,t,r){let i=Math.max(Math.min(6,e.depth||1),1),a=t.createTracker(r);if(hi(e,t)){let f=t.enter("headingSetext"),h=t.enter("phrasing"),p=t.containerPhrasing(e,{...a.current(),before:` +`,after:` +`});return h(),f(),p+` +`+(i===1?"=":"-").repeat(p.length-(Math.max(p.lastIndexOf("\r"),p.lastIndexOf(` +`))+1))}let o="#".repeat(i),l=t.enter("headingAtx"),u=t.enter("phrasing");a.move(o+" ");let s=t.containerPhrasing(e,{before:"# ",after:` +`,...a.current()}),c=s.charCodeAt(0);return(c===9||c===32)&&(s=zt(c)+s.slice(1)),s=s?o+" "+s:o,t.options.closeAtx&&(s+=" "+o),u(),l(),s}vn.peek=_l;function vn(e){return e.value||""}function _l(){return"<"}Pn.peek=Ml;function Pn(e,n,t,r){let i=Ne(t),a=i==='"'?"Quote":"Apostrophe",o=t.enter("image"),l=t.enter("label"),u=t.createTracker(r),s=u.move("![");return s+=u.move(t.safe(e.alt,{before:s,after:"]",...u.current()})),s+=u.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=t.enter("destinationLiteral"),s+=u.move("<"),s+=u.move(t.safe(e.url,{before:s,after:">",...u.current()})),s+=u.move(">")):(l=t.enter("destinationRaw"),s+=u.move(t.safe(e.url,{before:s,after:e.title?" ":")",...u.current()}))),l(),e.title&&(l=t.enter(`title${a}`),s+=u.move(" "+i),s+=u.move(t.safe(e.title,{before:s,after:i,...u.current()})),s+=u.move(i),l()),s+=u.move(")"),o(),s}function Ml(){return"!"}Rn.peek=Nl;function Rn(e,n,t,r){let i=e.referenceType,a=t.enter("imageReference"),o=t.enter("label"),l=t.createTracker(r),u=l.move("!["),s=t.safe(e.alt,{before:u,after:"]",...l.current()});u+=l.move(s+"]["),o();let c=t.stack;t.stack=c.filter(function(h){return h!=="phrasing"}),o=t.enter("reference");let f=t.safe(t.associationId(e),{before:u,after:"]",...l.current()});return o(),t.stack=c,a(),i==="full"||!s||s!==f?u+=l.move(f+"]"):i==="shortcut"?u=u.slice(0,-1):u+=l.move("]"),u}function Nl(){return"!"}Bn.peek=Ol;function Bn(e,n,t){let r=e.value||"",i="`",a=-1;for(;new RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^\n\r ]/.test(r)&&(/^[\n\r ]/.test(r)&&/[\n\r ]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++a\u007F]/.test(e.url))}Mn.peek=Hl;function Mn(e,n,t,r){let i=Ne(t),a=i==='"'?"Quote":"Apostrophe",o=t.createTracker(r);if(_n(e,t)){let d=t.stack;t.stack=d.filter(function(x){return x!=="phrasing"});let S=t.enter("autolink"),E=o.move("<");return E+=o.move(t.containerPhrasing(e,{before:E,after:">",...o.current()})),E+=o.move(">"),S(),t.stack=d,E}let l=t.enter("link"),u=t.enter("label"),s=o.move("["),c=t.containerPhrasing(e,{before:s,after:"](",...o.current()});s+=o.move(c),u(),s+=o.move("](");let f=/[\0- \u007F]/.test(e.url),h=r.before.charAt(r.before.length-1),p=e.title||void 0;if(!p&&!f&&(h===` +`||h==="\r")){let d=0;for(;d",...o.current()})),s+=o.move(">")):(u=t.enter("destinationRaw"),s+=o.move(t.safe(e.url,{before:s,after:typeof p=="string"?" ":")",...o.current()}))),u(),typeof p=="string"&&(u=t.enter(`title${a}`),s+=o.move(" "+i),s+=o.move(t.safe(p,{before:s,after:i,...o.current()})),s+=o.move(i),u()),s+=o.move(")"),l(),s}function Hl(e,n,t){return _n(e,t)?"<":"["}Nn.peek=Vl;function Nn(e,n,t,r){let i=e.referenceType,a=t.enter("linkReference"),o=t.enter("label"),l=t.createTracker(r),u=l.move("["),s=t.containerPhrasing(e,{before:u,after:"]",...l.current()});u+=l.move(s+"]["),o();let c=t.stack;t.stack=c.filter(function(h){return h!=="phrasing"}),o=t.enter("reference");let f=t.safe(t.associationId(e),{before:u,after:"]",...l.current()});return o(),t.stack=c,a(),i==="full"||!s||s!==f?u+=l.move(f+"]"):i==="shortcut"?u=u.slice(0,-1):u+=l.move("]"),u}function Vl(){return"["}function He(e){let n=e.options.bullet||"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bullet`, expected `*`, `+`, or `-`");return n}function gi(e){let n=He(e),t=e.options.bulletOther;if(!t)return n==="*"?"-":"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(t===n)throw new Error("Expected `bullet` (`"+n+"`) and `bulletOther` (`"+t+"`) to be different");return t}function di(e){let n=e.options.bulletOrdered||".";if(n!=="."&&n!==")")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOrdered`, expected `.` or `)`");return n}function vt(e){let n=e.options.rule||"*";if(n!=="*"&&n!=="-"&&n!=="_")throw new Error("Cannot serialize rules with `"+n+"` for `options.rule`, expected `*`, `-`, or `_`");return n}function xi(e,n,t,r){let i=t.enter("list"),a=t.bulletCurrent,o=e.ordered?di(t):He(t),l=e.ordered?o==="."?")":".":gi(t),u=n&&t.bulletLastUsed?o===t.bulletLastUsed:!1;if(!e.ordered){let c=e.children?e.children[0]:void 0;if((o==="*"||o==="-")&&c&&(!c.children||!c.children[0])&&t.stack[t.stack.length-1]==="list"&&t.stack[t.stack.length-2]==="listItem"&&t.stack[t.stack.length-3]==="list"&&t.stack[t.stack.length-4]==="listItem"&&t.indexStack[t.indexStack.length-1]===0&&t.indexStack[t.indexStack.length-2]===0&&t.indexStack[t.indexStack.length-3]===0&&(u=!0),vt(t)===o&&c){let f=-1;for(;++f-1?n.start:1)+(t.options.incrementListMarker===!1?0:n.children.indexOf(e))+a);let o=a.length+1;(i==="tab"||i==="mixed"&&(n&&n.type==="list"&&n.spread||e.spread))&&(o=Math.ceil(o/4)*4);let l=t.createTracker(r);l.move(a+" ".repeat(o-a.length)),l.shift(o);let u=t.enter("listItem"),s=t.indentLines(t.containerFlow(e,l.current()),c);return u(),s;function c(f,h,p){return h?(p?"":" ".repeat(o))+f:(p?a:a+" ".repeat(o-a.length))+f}}function wi(e,n,t,r){let i=t.enter("paragraph"),a=t.enter("phrasing"),o=t.containerPhrasing(e,r);return a(),i(),o}function yi(e,n,t,r){if(!e.children.some(function(l){return zn(l)}))return t.containerFlow(e,r);let a=t.enter("phrasing"),o=t.containerPhrasing(e,r);return a(),o}function Si(e){let n=e.options.strong||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize strong with `"+n+"` for `options.strong`, expected `*`, or `_`");return n}Pt.attention=Ei;Pt.peek=Ul;function Pt(e,n,t,r){let i=t.enter("phrasing"),a=ot(e,Ei,t,t.createTracker(r)),o=a?Oe([a],r.before,r.after):"";return i(),o}function Ei(e,n){return{construct:"strong",markers:Si(n)==="*"?["*","_"]:["_","*"],sizes:[2]}}function Ul(e,n,t){return t.options.strong||"*"}function Ai(e,n,t,r){let i=n?n.children:[],a=t.indexStack[t.indexStack.length-1];return t.safe(e.value,{...r,afterNode:i[a+1],beforeNode:i[a-1]})}function Ci(e){let n=e.options.ruleRepetition||3;if(n<3)throw new Error("Cannot serialize rules with repetition `"+n+"` for `options.ruleRepetition`, expected `3` or more");return n}function Ti(e,n,t){let r=(vt(t)+(t.options.ruleSpaces?" ":"")).repeat(Ci(t));return t.options.ruleSpaces?r.slice(0,-1):r}var Ve={blockquote:Jr,break:qn,code:ii,definition:oi,emphasis:Ft,hardBreak:qn,heading:mi,html:vn,image:Pn,imageReference:Rn,inlineCode:Bn,link:Mn,linkReference:Nn,list:xi,listItem:bi,paragraph:wi,root:yi,strong:Pt,text:Ai,thematicBreak:Ti};function Hn(){return{enter:{table:jl,tableData:Ii,tableHeader:Ii,tableRow:Wl},exit:{codeText:Ql,table:Gl,tableData:On,tableHeader:On,tableRow:On}}}function jl(e){let n=e._align;this.enter({type:"table",align:n.map(function(t){return t==="none"?null:t}),children:[],position:void 0},e),this.data.inTable=!0}function Gl(e){this.exit(e),this.data.inTable=void 0}function Wl(e){this.enter({type:"tableRow",children:[],position:void 0},e)}function On(e){this.exit(e)}function Ii(e){this.enter({type:"tableCell",children:[],position:void 0},e)}function Ql(e){let n=this.resume();this.data.inTable&&(n=n.replace(/\\([\\|])/g,Yl));let t=this.stack[this.stack.length-1];t.type,t.value=n,this.exit(e)}function Yl(e,n){return n==="|"?n:e}function Vn(e){let n=e||{},{tableCellPadding:t,tablePipeAlign:r,stringLength:i}=n,a=t?" ":"|";return{handlers:{inlineCode:h,table:o,tableCell:u,tableRow:l},join:[Zl],unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` +`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}]};function o(p,d,S,E){let x=c(p,S,E),C=x[0];if(C){let y=p.align?p.align.length:0,I=-1;if(!y)for(;++Iy&&(y=x[I].length);for(;C.lengthC&&E.charCodeAt(I-1)===92;)I--;x.push(E.slice(C,y)),(y-I)%2===0&&x.push("\\"),C=y,y=E.indexOf("|",y+1)}return x.push(E.slice(C)),x.join("")}}function Zl(e,n,t,r){if(e.type==="table"&&t.type==="listItem"&&t.spread===!1&&(n.type==="definition"||n.type==="heading"&&Kl(n,r)||n.type==="paragraph"||n.type==="table"))return 1}function Kl(e,n){let t=!1;return at(e,function(r){if(r.type==="break"||"value"in r&&/\r?\n|\r/.test(r.value))return t=!0,ce}),!!((!e.depth||e.depth<3)&&ge(e)&&(n.options.setext||t))}function Un(){return{exit:{taskListCheckValueChecked:Li,taskListCheckValueUnchecked:Li,paragraph:$l}}}function jn(){return{handlers:{paragraph:Jl},join:[Xl]}}function Li(e){let n=this.stack[this.stack.length-2];n.type,n.checked=e.type==="taskListCheckValueChecked"}function $l(e){let n=this.stack[this.stack.length-2];if(n&&n.type==="listItem"&&typeof n.checked=="boolean"){let t=this.stack[this.stack.length-1];t.type;let r=t.children[0];if(r&&r.type==="text"){let i=n.children,a=-1,o;for(;++a0?e:{type:"paragraph",children:[{type:"text",value:" "}]},n,t,{...r,...a.current()});return i+o}function Xl(e,n,t){if(!(e.type==="definition"&&t.type==="listItem"))return;let r=zi(t);if(r&&t.children.indexOf(e)0&&!t&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),t}var cu={tokenize:xu,partial:!0};function Kn(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:mu,continuation:{tokenize:gu},exit:du}},text:{91:{name:"gfmFootnoteCall",tokenize:hu},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:fu,resolveTo:pu}}}}function fu(e,n,t){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let u=r.events[i][1];if(u.type==="labelImage"){o=u;break}if(u.type==="gfmFootnoteCall"||u.type==="labelLink"||u.type==="label"||u.type==="image"||u.type==="link")break}return l;function l(u){if(!o||!o._balanced)return t(u);let s=Z(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?t(u):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(u),e.exit("gfmFootnoteCallLabelMarker"),n(u))}}function pu(e,n){let t=e.length,r;for(;t--;)if(e[t][1].type==="labelImage"&&e[t][0]==="enter"){r=e[t][1];break}e[t+1][1].type="data",e[t+3][1].type="gfmFootnoteCallLabelMarker";let i={type:"gfmFootnoteCall",start:Object.assign({},e[t+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[t+3][1].end),end:Object.assign({},e[t+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;let o={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},l={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},u=[e[t+1],e[t+2],["enter",i,n],e[t+3],e[t+4],["enter",a,n],["exit",a,n],["enter",o,n],["enter",l,n],["exit",l,n],["exit",o,n],e[e.length-2],e[e.length-1],["exit",i,n]];return e.splice(t,e.length-t+1,...u),e}function hu(e,n,t){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return l;function l(f){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),u}function u(f){return f!==94?t(f):(e.enter("gfmFootnoteCallMarker"),e.consume(f),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",s)}function s(f){if(a>999||f===93&&!o||f===null||f===91||B(f))return t(f);if(f===93){e.exit("chunkString");let h=e.exit("gfmFootnoteCallString");return i.includes(Z(r.sliceSerialize(h)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),n):t(f)}return B(f)||(o=!0),a++,e.consume(f),f===92?c:s}function c(f){return f===91||f===92||f===93?(e.consume(f),a++,s):s(f)}}function mu(e,n,t){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,l;return u;function u(d){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(d),e.exit("gfmFootnoteDefinitionLabelMarker"),s}function s(d){return d===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(d),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",c):t(d)}function c(d){if(o>999||d===93&&!l||d===null||d===91||B(d))return t(d);if(d===93){e.exit("chunkString");let S=e.exit("gfmFootnoteDefinitionLabelString");return a=Z(r.sliceSerialize(S)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(d),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),h}return B(d)||(l=!0),o++,e.consume(d),d===92?f:c}function f(d){return d===91||d===92||d===93?(e.consume(d),o++,c):c(d)}function h(d){return d===58?(e.enter("definitionMarker"),e.consume(d),e.exit("definitionMarker"),i.includes(a)||i.push(a),q(e,p,"gfmFootnoteDefinitionWhitespace")):t(d)}function p(d){return n(d)}}function gu(e,n,t){return e.check(se,n,e.attempt(cu,n,t))}function du(e){e.exit("gfmFootnoteDefinition")}function xu(e,n,t){let r=this;return q(e,i,"gfmFootnoteDefinitionIndent",5);function i(a){let o=r.events[r.events.length-1];return o&&o[1].type==="gfmFootnoteDefinitionIndent"&&o[2].sliceSerialize(o[1],!0).length===4?n(a):t(a)}}function $n(e){let t=(e||{}).singleTilde,r={name:"strikethrough",tokenize:a,resolveAll:i};return t==null&&(t=!0),{text:{126:r},insideSpan:{null:[r]},attentionMarkers:{null:[126]}};function i(o,l){let u=-1;for(;++u1?u(d):(o.consume(d),f++,p);if(f<2&&!t)return u(d);let E=o.exit("strikethroughSequenceTemporary"),x=re(d);return E._open=!x||x===2&&!!S,E._close=!S||S===2&&!!x,l(d)}}}var Rt=class{constructor(){this.map=[],this.index=new Map}add(n,t,r){ku(this,n,t,r)}consume(n){if(this.map.sort(function(a,o){return a[0]-o[0]}),this.map.length===0)return;let t=this.map.length,r=[];for(;t>0;)t-=1,r.push(n.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),n.length=this.map[t][0];r.push(n.slice()),n.length=0;let i=r.pop();for(;i;){for(let a of i)n.push(a);i=r.pop()}this.map.length=0,this.index.clear()}};function ku(e,n,t,r){if(t===0&&r.length===0)return;let i=e.index.get(n);if(i){i[1]+=t,i[2].push(...r);return}let a=[n,t,r];e.map.push(a),e.index.set(n,a)}function Mi(e,n){let t=!1,r=[];for(;n-1;){let{type:_}=r.events[N][1];if(_==="lineEnding"||_==="linePrefix")N--;else break}let O=N>-1?r.events[N][1].type:null,L=O==="tableHead"||O==="tableRow"?w:u;return L===w&&r.parser.lazy[r.now().line]?t(k):L(k)}function u(k){return e.enter("tableHead"),e.enter("tableRow"),s(k)}function s(k){return k===124||(o=!0,a+=1),c(k)}function c(k){return k===null?t(k):T(k)?a>1?(a=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(k),e.exit("lineEnding"),p):t(k):z(k)?q(e,c,"whitespace")(k):(a+=1,o&&(o=!1,i+=1),k===124?(e.enter("tableCellDivider"),e.consume(k),e.exit("tableCellDivider"),o=!0,c):(e.enter("data"),f(k)))}function f(k){return k===null||k===124||B(k)?(e.exit("data"),c(k)):(e.consume(k),k===92?h:f)}function h(k){return k===92||k===124?(e.consume(k),f):f(k)}function p(k){return r.interrupt=!1,r.parser.lazy[r.now().line]?t(k):(e.enter("tableDelimiterRow"),o=!1,z(k)?q(e,d,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(k):d(k))}function d(k){return k===45||k===58?E(k):k===124?(o=!0,e.enter("tableCellDivider"),e.consume(k),e.exit("tableCellDivider"),S):v(k)}function S(k){return z(k)?q(e,E,"whitespace")(k):E(k)}function E(k){return k===58?(a+=1,o=!0,e.enter("tableDelimiterMarker"),e.consume(k),e.exit("tableDelimiterMarker"),x):k===45?(a+=1,x(k)):k===null||T(k)?I(k):v(k)}function x(k){return k===45?(e.enter("tableDelimiterFiller"),C(k)):v(k)}function C(k){return k===45?(e.consume(k),C):k===58?(o=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(k),e.exit("tableDelimiterMarker"),y):(e.exit("tableDelimiterFiller"),y(k))}function y(k){return z(k)?q(e,I,"whitespace")(k):I(k)}function I(k){return k===124?d(k):k===null||T(k)?!o||i!==a?v(k):(e.exit("tableDelimiterRow"),e.exit("tableHead"),n(k)):v(k)}function v(k){return t(k)}function w(k){return e.enter("tableRow"),F(k)}function F(k){return k===124?(e.enter("tableCellDivider"),e.consume(k),e.exit("tableCellDivider"),F):k===null||T(k)?(e.exit("tableRow"),n(k)):z(k)?q(e,F,"whitespace")(k):(e.enter("data"),M(k))}function M(k){return k===null||k===124||B(k)?(e.exit("data"),F(k)):(e.consume(k),k===92?V:M)}function V(k){return k===92||k===124?(e.consume(k),M):M(k)}}function wu(e,n){let t=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],l=!1,u=0,s,c,f,h=new Rt;for(;++tt[2]+1){let d=t[2]+1,S=t[3]-t[2]-1;e.add(d,S,[])}}e.add(t[3]+1,0,[["exit",f,n]])}return i!==void 0&&(a.end=Object.assign({},Ue(n.events,i)),e.add(i,0,[["exit",a,n]]),a=void 0),a}function Ni(e,n,t,r,i){let a=[],o=Ue(n.events,t);i&&(i.end=Object.assign({},o),a.push(["exit",i,n])),r.end=Object.assign({},o),a.push(["exit",r,n]),e.add(t+1,0,a)}function Ue(e,n){let t=e[n],r=t[0]==="enter"?"start":"end";return t[1][r]}var yu={name:"tasklistCheck",tokenize:Su};function Xn(){return{text:{91:yu}}}function Su(e,n,t){let r=this;return i;function i(u){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?t(u):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(u),e.exit("taskListCheckMarker"),a)}function a(u){return B(u)?(e.enter("taskListCheckValueUnchecked"),e.consume(u),e.exit("taskListCheckValueUnchecked"),o):u===88||u===120?(e.enter("taskListCheckValueChecked"),e.consume(u),e.exit("taskListCheckValueChecked"),o):t(u)}function o(u){return u===93?(e.enter("taskListCheckMarker"),e.consume(u),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),l):t(u)}function l(u){return T(u)?n(u):z(u)?e.check({tokenize:Eu},n,t)(u):t(u)}}function Eu(e,n,t){return q(e,r,"whitespace");function r(i){return i===null?t(i):n(i)}}function Oi(e){return pt([Yn(),Kn(),$n(e),Jn(),Xn()])}var Au={};function _t(e){let n=this,t=e||Au,r=n.data(),i=r.micromarkExtensions||(r.micromarkExtensions=[]),a=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),o=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);i.push(Oi(t)),a.push(Gn()),o.push(Wn(t))}var Ad={remarkParse:"11.0.0",remarkGfm:"4.0.1",unified:"11.0.5"},Cu=$t().use(Tt).use(_t);function Cd(e){return typeof e!="string"||!e?{type:"root",children:[]}:Cu.parse(e)}export{Ad as MARKDOWN_VERSIONS,Cd as parseMarkdown}; diff --git a/sources/minimax-ai/minimax-pet/.minimax-plugin/plugin.json b/sources/minimax-ai/minimax-pet/.minimax-plugin/plugin.json index 588f806d..d2e449ae 100644 --- a/sources/minimax-ai/minimax-pet/.minimax-plugin/plugin.json +++ b/sources/minimax-ai/minimax-pet/.minimax-plugin/plugin.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "name": "minimax-pet", "displayName": "MiniMax Pet", - "version": "0.6.0", + "version": "0.7.0", "description": "轻量桌宠,聚合主窗口可见会话的任务状态、需要回答的提醒和最新结果,支持外观切换及图集导入。", "author": "MiniMax", "icon": "icon.png", diff --git a/sources/minimax-ai/minimax-pet/DEVELOPMENT.md b/sources/minimax-ai/minimax-pet/DEVELOPMENT.md index e1ef78b8..cab72173 100644 --- a/sources/minimax-ai/minimax-pet/DEVELOPMENT.md +++ b/sources/minimax-ai/minimax-pet/DEVELOPMENT.md @@ -10,6 +10,8 @@ npm run package npm run check:package ``` +`npm run build:markdown` rebuilds `miniapp/client/vendor/markdown.mjs` and its license file from the pinned `unified` / `remark-parse` / `remark-gfm` versions; run it only when those versions change, and commit both outputs. + `npm run dev -- --port 8080 --data-dir /tmp/minimax-pet-local-data` starts an isolated local resource/API server. Outside a supported MiniMax Code Host, the read/observe, desktop-window, Host navigation, and theme bridges are unavailable. This launcher does not emulate them or send Agent messages. Never use a real Host data directory for smoke tests. ## Behavior to preserve @@ -19,6 +21,7 @@ npm run check:package - Wide task views show list and detail together; narrow views provide a return action with focus/scroll restoration. Reading a reply must survive background polls without scroll reset. - The desktop pet uses compact five-line notification cards and keeps the pet visible while reading. Completed status and answer-needed state must agree across notification, list and detail. - One global observation plus three detailed observations share the Host budget. Cancellation does not free a slot until its subscription settles. Global reconnect also waits for the previous observation. +- A task's latest reply renders through `markdown.mjs`: the vendored parser produces an mdast tree and the module builds DOM nodes from it. Never assign parsed HTML to `innerHTML`; raw HTML in a reply is inert text, links are not opened, and images are not fetched. Notification cards and reminder previews use the flat-text output, which must stay one line per logical line. - **打开对话** / **去回答** calls `host.navigation.open` synchronously inside the click (the Host checks user activation), never retries automatically, and drops a late result once another task is selected. Without the API the button stays hidden. - The page follows `host.ui.subscribe` themes through `data-theme`; without it the CSS falls back to `prefers-color-scheme`. - Preference and imported-resource writes are local to `context.dataDir`. Interrupted replacements retain enough information to restore or finish safely before the next read/write. Legacy ambiguous trash is retained for recovery. diff --git a/sources/minimax-ai/minimax-pet/PROVENANCE.md b/sources/minimax-ai/minimax-pet/PROVENANCE.md index f664087a..f6fb038c 100644 --- a/sources/minimax-ai/minimax-pet/PROVENANCE.md +++ b/sources/minimax-ai/minimax-pet/PROVENANCE.md @@ -1,6 +1,6 @@ # Source and distribution -Author: MiniMax ([MiniMax-AI](https://github.com/MiniMax-AI)). This is the 0.6.0 open-source edition of the MiniMax Pet MiniApp. It uses public MiniApp page APIs and contains no Host implementation. Public documentation, dependency URLs, and license notices have been prepared for this repository; private development references and acceptance records are not part of the package. +Author: MiniMax ([MiniMax-AI](https://github.com/MiniMax-AI)). This is the 0.7.0 open-source edition of the MiniMax Pet MiniApp. It uses public MiniApp page APIs and contains no Host implementation. Public documentation, dependency URLs, and license notices have been prepared for this repository; private development references and acceptance records are not part of the package. ## Layout @@ -27,7 +27,7 @@ The root `npm run check` validates package contracts through the repository's ex ## Dependencies and artwork -Production JavaScript uses relative modules and Node built-ins. `jsdom` 24.1.3 is used only for DOM tests; the lockfile pins public npm registry URLs and integrity values. No dependency install or build step is required by the installed plugin. +Production JavaScript uses relative modules and Node built-ins, plus the vendored `miniapp/client/vendor/markdown.mjs` (unified 11.0.5, remark-parse 11.0.0, remark-gfm 4.0.1 and their MIT dependency tree, built with esbuild 0.25.12). `npm run build:markdown` reproduces it from the pinned dev dependencies; the output is byte-stable, so `npm run check:package` compares it like any other file. Its notices live in `miniapp/client/vendor/markdown.LICENSE.txt`, generated from the same build. `jsdom` 24.1.3 is used only for DOM tests; the lockfile pins public npm registry URLs and integrity values. No dependency install or build step is required by the installed plugin. The bundled mint robot atlas is original geometric artwork generated by `scripts/generate-pet-art.mjs` from Node built-ins. `npm run generate:art` reproduces the atlas without external images or fonts and preserves `icon.png`. The purple octopus icon is a separate transparent PNG generated with OpenAI imagegen from a user-provided visual reference; model generation is not deterministic, and that reference image is not bundled. The `minimax-tako` octopus girl atlas was generated with MiniMax image generation from user-provided visual references and assembled by a local script; it is not reproducible from a command, and the reference images are not bundled. These assets use the same MiniMax [MIT License](LICENSE) as the original code and documentation; see [ARTWORK.md](ARTWORK.md). The `mmx-octopus` MMX octopus girl atlas was generated with a locally hosted open-weight diffusion model and assembled by a local script from source videos that are not shipped; it is not reproducible from a command. Its character and artwork are contributed by antianqi under the [MIT License](LICENSE); see [ARTWORK.md](ARTWORK.md). No externally sourced pet spritesheet is bundled. diff --git a/sources/minimax-ai/minimax-pet/README.md b/sources/minimax-ai/minimax-pet/README.md index 5ff6d8e6..3f1508ed 100644 --- a/sources/minimax-ai/minimax-pet/README.md +++ b/sources/minimax-ai/minimax-pet/README.md @@ -7,7 +7,7 @@ A lightweight desktop companion for MiniMax Code, by **MiniMax**. It shows visib ## Features - **Appearance:** preview and select pets, import compatible pet JSON and spritesheets, and remove imported pets. -- **Tasks:** recent reminders, visible user conversations, and a scrollable latest reply. Desktop cards preview up to five lines. Clicking a card keeps the pet visible; observed `ask_user` calls show “需要你回答” (needs your answer). +- **Tasks:** recent reminders, visible user conversations, and a scrollable latest reply rendered as Markdown. Desktop cards preview up to five lines. Clicking a card keeps the pet visible; observed `ask_user` calls show “需要你回答” (needs your answer). - **Open the conversation:** on MiniMax Code 3.1.11 or later, a task's detail, in the panel and on the desktop, has a **打开对话** (open conversation) button, labelled **去回答** (go answer) while the task needs an answer. It brings the MiniMax Code main window forward on that conversation. Older clients do not show the button. - **Settings:** pet size, page-local reminder dismissal and mute, connection status, and reconnect. - **Desktop window:** a draggable transparent pet with compact notification cards. Return it to the main panel to use the three tabs. @@ -15,6 +15,8 @@ A lightweight desktop companion for MiniMax Code, by **MiniMax**. It shows visib The pet does not run Agent turns, create independent chats, write to chat inputs, comment on every session, stop tasks, or answer questionnaires. Selecting a task only reads its details; the main window switches only when you click **打开对话** or **去回答**. +Version **0.7.0** renders each task's latest reply as Markdown: headings, emphasis, lists, task lists, fenced code, tables, quotes and links, with raw HTML shown as inert text and images as a label instead of a remote request. Notification cards and reminder previews stay plain text. Parsing uses a vendored bundle of unified, remark-parse and remark-gfm (MIT) built by `npm run build:markdown`; the page never builds an HTML string from model output. The bundle makes no network request and runs entirely in the page. + Version **0.6.0** removes the **打招呼** (wave) and **跳一下** (jump) actions from the menu and the appearance page, and removes the original-chat draft with its voice input; the package no longer requests the microphone. It adds **打开对话** / **去回答** and the client theme. The supported baseline stays MiniMax Code 3.1.6: both additions are feature-detected and need no new access. ## Install and open @@ -43,6 +45,7 @@ Earlier local prototypes use a different plugin ID. The Host gives `minimax-pet` - **Observations:** one global observer aggregates visible task lifecycle events. Up to three detailed observers follow active tasks and detect new ask tool events. A completed/removed task releases its detailed slot; another task enters only after the previous subscription settles. The initial snapshot contains up to 50 recent visible conversations; observed tasks remain while the Host confirms visibility. - **Coverage limits:** observers are tail-only. They cannot reconstruct questionnaires opened before subscribing or during a disconnect. More than three active tasks means only three receive detailed ask coverage. No observed ask does not prove no pending question. Historical idle tasks are not presented as newly completed. - **Local files:** the Node service serves packaged assets and stores preferences and user-imported JSON/WebP/PNG spritesheets under opaque `context.dataDir`. Imports, replacement recovery and deletion are limited to that plugin data. Browser storage is used only to migrate old view preferences. +- **Rendered replies:** the latest reply is parsed as Markdown by the vendored parser and rebuilt as DOM nodes under the page's own stylesheet. Raw HTML in a reply is displayed as literal text, never executed or inserted as markup; links show their target on hover and are not opened; images are not fetched and appear as a text label. - **Host navigation:** only when you click **打开对话** or **去回答**, the page calls `host.navigation.open({ id: 'session', sessionId, source: 'local' })` for a conversation it already lists through `session.read`. It does not declare `hostAccess` and never reads which page of MiniMax Code you are on. It writes nothing to chat inputs and sends no message. - **Display preferences:** `host.ui.subscribe` reports the client theme, which the page applies; the reported language is ignored. No grant is involved. - **Network:** the plugin has no hard-coded external runtime endpoint; its own HTTP requests use its assigned loopback origin. @@ -66,3 +69,5 @@ The complete editable source is at `sources/minimax-ai/minimax-pet/`. The instal ## License Original code, documentation, the robot, minimax-tako pet and icon: [MIT](LICENSE), Copyright 2026 MiniMax. Maiyatang artwork: MIT, Copyright 2026 Fectivnfy112357. The minimax-tako atlas was generated with MiniMax image generation. The default atlas is generated from editable geometric drawing code; the octopus icon and Maiyatang were generated with imagegen from supplied visual references. See [ARTWORK.md](ARTWORK.md). No externally sourced pet spritesheet is bundled. User-imported artwork keeps its own license. + +`miniapp/client/vendor/markdown.mjs` bundles 59 MIT-licensed packages from the unified, remark-parse and remark-gfm dependency trees. Each package keeps its own copyright notice in `miniapp/client/vendor/markdown.LICENSE.txt`, which `npm run build:markdown` regenerates from the packages esbuild actually includes. diff --git a/sources/minimax-ai/minimax-pet/README.zh-CN.md b/sources/minimax-ai/minimax-pet/README.zh-CN.md index ded2d144..8e567068 100644 --- a/sources/minimax-ai/minimax-pet/README.zh-CN.md +++ b/sources/minimax-ai/minimax-pet/README.zh-CN.md @@ -8,7 +8,7 @@ 将仓库 `plugins/minimax-ai/minimax-pet/` 完整复制到 `/plugins/minimax-pet/`,包括隐藏的 `.minimax-plugin`;默认 `` 为 `~/.minimax`,自定义数据目录时采用实际配置。不要复制外层作者目录。重启 MiniMax Code、确认插件启用后,从 MiniApp 列表打开“MiniMax Pet”,或对 Agent 说“打开 MiniMax Pet”。点击“放到桌面”显示透明桌宠窗口。 -外观页支持选择、导入预览和删除已导入宠物;任务页显示提醒、全部可见任务和最近回复;设置页提供大小、提醒管理和重连。桌面通知最多预览五行,点击后可滚动读完整内容,桌宠保持可见。观察到 ask 时显示“需要你回答”。 +外观页支持选择、导入预览和删除已导入宠物;任务页显示提醒、全部可见任务和按 Markdown 渲染的最近回复;设置页提供大小、提醒管理和重连。桌面通知最多预览五行,点击后可滚动读完整内容,桌宠保持可见。观察到 ask 时显示“需要你回答”。 在 MiniMax Code 3.1.11 及以上版本,面板和桌面上的任务详情都有“打开对话”按钮,任务需要回答时显示为“去回答”;点一下会把 MiniMax Code 主窗口切到这个对话。面板和桌面卡片的明暗也跟随 MiniMax Code 的主题。旧版本客户端不显示该按钮,明暗跟随系统设置。 @@ -16,6 +16,8 @@ **0.5.11** 新增可选内置宠物 **MMX 章鱼娘**,是一位橙发、白背心、棕格纹短裙的 Q 版全身章鱼娘。在“外观 → 选择宠物”中选择她即可;薄荷色机器人仍为默认宠物。她采用 v1 图集,包含九种动作,不含十六个视线方向,因此鼠标跟随对她不生效;沿用六帧、6.6 秒一轮的慢速待机,不新增权限或改变播放器。图集已通过校验。创作流程和贡献者许可见[素材说明](ARTWORK.md)。 +**0.7.0** 把任务最近回复按 Markdown 渲染:标题、强调、列表、任务清单、代码块、表格、引用和链接;回复里的原始 HTML 只作为文本显示,图片显示为文字标签而不发起网络请求。通知卡片和提醒预览仍为纯文本。解析使用 `npm run build:markdown` 打包的 unified + remark-parse + remark-gfm(MIT);页面不会把模型输出拼成 HTML 字符串。 + **0.6.0** 删除了菜单和外观页里的“打招呼”“跳一下”,删除了原属聊天草稿及其语音输入,不再申请麦克风权限;新增“打开对话/去回答”和主题跟随。支持基线仍为 MiniMax Code 3.1.6:两项新功能都先检测客户端能力,不需要新增权限。 旧的本地原型使用不同插件 ID。`minimax-pet` 会有独立的 Host 数据目录,安装本包不会自动搬迁旧插件的宠物和偏好;需要的素材先导出,保留旧安装和数据。 @@ -36,6 +38,8 @@ 偏好和用户导入素材写入独立的 `context.dataDir`;导入替换有中断恢复,删除限于本插件数据。不创建独立聊天、不写入聊天输入框、不逐会话点评、不自动调用模型、不发送或停止用户会话、不代答问卷。 +回复由随包 vendor 的解析器转为 Markdown 结构,再在页面里用 DOM 节点重建:原始 HTML 只按文本显示,不会插入页面或执行;链接只显示地址不打开;图片不请求,只显示文字标签。 + 只有在你点击“打开对话”或“去回答”时,页面才调用 `host.navigation.open({ id: 'session', sessionId, source: 'local' })`,目标是已通过 `session.read` 列出的会话。未声明 `hostAccess`,不读取你在 MiniMax Code 里停留的页面。`host.ui.subscribe` 只用来读取并应用主题,返回的语言不使用,无需授权。不使用也不声明麦克风、摄像头或系统通知。插件本身没有硬编码的外部服务地址,只使用分配的 loopback 源,不启动额外子进程或 shell。 ## Agent Skill @@ -46,6 +50,8 @@ 保留源码/分发双目录,构建与完整字节对比步骤见 [PROVENANCE.md](PROVENANCE.md)。原创代码、文档、两只内置宠物和图标均按 [MIT](LICENSE) 开源,作者为 MiniMax。默认的薄荷色机器人图集由可编辑的几何绘图代码生成;第二只内置宠物“MiniMax Code 章鱼娘”(`minimax-tako`)粉发、戴眼镜、酒红触手,由 MiniMax 图像生成根据用户提供的参考图绘制后拼成 v2 图集,无法用命令重新生成;紫色章鱼图标由 imagegen 根据用户提供的视觉参考生成,重新生成图集不会覆盖图标。详见[素材说明](ARTWORK.md);参考图和外部宠物图集不随包分发,用户自行导入的素材保留其各自许可。 +`miniapp/client/vendor/markdown.mjs` 打包了 unified、remark-parse、remark-gfm 依赖树里 59 个 MIT 许可的包,各自的版权声明保留在 `miniapp/client/vendor/markdown.LICENSE.txt`,该文件由 `npm run build:markdown` 按 esbuild 实际打包的包清单生成。 + 麦芽糖素材由 Fectivnfy112357 贡献,同样采用 MIT 许可。麦芽糖通过 MiniMax 章鱼娘工坊工作流创作,使用 OpenAI imagegen 生成,再裁切、等比缩放和组装为透明图集;重新生成默认图集不会覆盖她。 MMX 章鱼娘素材由 antianqi 贡献,同样采用 MIT 许可。她通过本机部署的开源扩散模型出图与出视频,再由本地脚本抽帧、抠透明、落格拼成 v1 图集,无法用命令重新生成;重新生成默认图集不会覆盖她。 diff --git a/sources/minimax-ai/minimax-pet/dev/compact-pet-view.test.mjs b/sources/minimax-ai/minimax-pet/dev/compact-pet-view.test.mjs index c866fdf6..7294d144 100644 --- a/sources/minimax-ai/minimax-pet/dev/compact-pet-view.test.mjs +++ b/sources/minimax-ai/minimax-pet/dev/compact-pet-view.test.mjs @@ -296,3 +296,21 @@ domTest('switching tasks clears a pending open result and a throwing handler rep const failedHint = failing.container.querySelector('.compact-detail .compact-hint'); assert.match(failedHint.textContent, /host_unavailable/); assert.equal(failedHint.dataset.kind, 'error'); }); + +domTest('a markdown reply renders as structure in the detail, previews stay flat text', (t) => { + const h = harness(t); + const reply = '## 结论\n\n**留存** 41%\n\n- 次周 38%\n- 四周 27%\n\n```js\nconst x = 1\n```'; + h.update({ taskSelection: selection(1, reply), reminders: { items: [{ ...task(1), previewText: reply }] } }); + h.view.open('detail'); + const node = h.container.querySelector('.compact-detail-reply'); + assert.equal(node.querySelector('.md-heading').textContent, '结论'); + assert.equal(node.querySelector('strong').textContent, '留存'); + assert.equal(node.querySelectorAll('.md-li').length, 2); + assert.equal(node.querySelector('.md-pre code').textContent, 'const x = 1'); + assert.equal(h.container.querySelector('.compact-task-preview').textContent.includes('**'), false); + h.update({ taskSelection: { ...selection(1), session: { ...task(1), needsAnswer: true } } }); + assert.equal(node.textContent, '需要你回答'); + assert.equal(node.querySelector('.md-heading'), null); + h.update({ taskSelection: selection(1, reply) }); + assert.equal(node.querySelector('.md-heading').textContent, '结论'); +}); diff --git a/sources/minimax-ai/minimax-pet/dev/markdown.test.mjs b/sources/minimax-ai/minimax-pet/dev/markdown.test.mjs new file mode 100644 index 00000000..c446a489 --- /dev/null +++ b/sources/minimax-ai/minimax-pet/dev/markdown.test.mjs @@ -0,0 +1,152 @@ +import assert from 'node:assert/strict'; +import test from 'node:test'; +import { createRequire } from 'node:module'; +import { markdownToPlainText, renderMarkdown } from '../miniapp/client/markdown.mjs'; + +let JSDOM; +try { ({ JSDOM } = createRequire(import.meta.url)('jsdom')); } catch { /* Supplied through the existing workspace NODE_PATH. */ } +const domTest = JSDOM ? test : test.skip; + +test('plain text passes through with its line structure', () => { + assert.equal(markdownToPlainText('第一行\n第二行'), '第一行\n第二行'); + assert.equal(markdownToPlainText(''), ''); + assert.equal(markdownToPlainText(null), ''); + assert.equal(markdownToPlainText(' \n '), ''); +}); + +test('inline markup loses its syntax and keeps its words', () => { + assert.equal(markdownToPlainText('**粗体** 和 *斜体* 和 ~~删除~~ 和 `code`'), '粗体 和 斜体 和 删除 和 code'); + assert.equal(markdownToPlainText('请查看 [报告](https://example.com/report.md) 后继续'), '请查看 报告 后继续'); + // Inline HTML is inert: the tag text passes through, nothing swallows it. + assert.equal(markdownToPlainText('行内
标签'), '行内
标签'); +}); + +test('headings, lists, code and tables flatten to readable previews', () => { + const md = [ + '## 结论', + '', + '- 新增 1,204', + '- 留存 41%', + ' 1. 次周 38%', + ' 2. 四周 27%', + '', + '```js', + 'const total = 1204', + '```', + '', + '| 指标 | 数值 |', + '| --- | --- |', + '| 新增 | 1204 |', + ].join('\n'); + assert.equal(markdownToPlainText(md), [ + '结论', + '• 新增 1,204', + '• 留存 41%', + ' 1. 次周 38%', + ' 2. 四周 27%', + 'const total = 1204', + '指标\t数值', + '新增\t1204', + ].join('\n')); +}); + +test('task lists and quotes keep a visible marker', () => { + assert.equal(markdownToPlainText('- [ ] 跑测试\n- [x] 写文档'), '[ ] 跑测试\n[x] 写文档'); + assert.equal(markdownToPlainText('> 引用一句'), '引用一句'); + assert.equal(markdownToPlainText('---'), '—'); +}); + +test('only web targets survive as a hover label', (t) => { + const dom = new JSDOM('
'); + t.after(() => dom.window.close()); + const target = dom.window.document.getElementById('reply'); + renderMarkdown(target, '[网页](https://example.com/a?b=1) [邮件](mailto:a@b.c) [脚本](javascript:alert(1)) [数据](data:text/html,x)'); + const links = [...target.querySelectorAll('.md-link')]; + assert.deepEqual(links.map((node) => node.title), ['https://example.com/a?b=1', 'mailto:a@b.c', '', '']); + assert.deepEqual(links.map((node) => node.classList.contains('md-link-blocked')), [false, false, true, true]); + assert.equal(links[2].textContent, '脚本'); +}); + +test('nested list items align under their marker when flattened', () => { + assert.equal(markdownToPlainText('- 父项\n - 子项\n - 孙项'), '• 父项\n • 子项\n • 孙项'); + assert.equal(markdownToPlainText('1. 第一步\n - 细节'), '1. 第一步\n • 细节'); +}); + +test('images become a label instead of a remote request', () => { + assert.equal(markdownToPlainText('![架构图](https://example.com/a.png)'), '[图片:架构图]'); + assert.equal(markdownToPlainText('![](https://example.com/a.png)'), '[图片]'); +}); + +test('raw HTML is never interpreted as markup', () => { + assert.equal(markdownToPlainText(''), ''); + assert.equal(markdownToPlainText('前 粗 后'), '前 粗 后'); +}); + +test('malformed markdown falls back to text instead of throwing', () => { + const cases = ['**未闭合', '| a |\n| ---', '```\n未闭合的代码块', '[链接](', '> ', '#']; + for (const md of cases) assert.doesNotThrow(() => markdownToPlainText(md), JSON.stringify(md)); +}); + +test('very long input is truncated with a visible note', () => { + const flat = markdownToPlainText('字'.repeat(250_000)); + assert.ok(flat.endsWith('…(内容过长,已截断显示)')); + assert.ok(flat.length < 210_000); +}); + +domTest('a reply renders real DOM nodes and never injects HTML', (t) => { + const dom = new JSDOM('
'); + t.after(() => dom.window.close()); + const target = dom.window.document.getElementById('reply'); + const md = [ + '# 标题', + '', + '**粗** 和 [链接](https://example.com)', + '', + '- 一', + ' - 一.1', + '', + '```js', + 'const a = 1', + '```', + '', + '| a | b |', + '| - | - |', + '| 1 | 2 |', + '', + '', + ].join('\n'); + assert.equal(renderMarkdown(target, md), true); + assert.equal(target.querySelector('h1, h2, h3, script, img'), null); + assert.equal(target.querySelector('.md-heading').textContent, '标题'); + assert.equal(target.querySelector('.md-heading').getAttribute('aria-level'), '3'); + assert.equal(target.querySelector('strong').textContent, '粗'); + assert.equal(target.querySelector('.md-link').textContent, '链接'); + assert.equal(target.querySelector('.md-link').title, 'https://example.com'); + assert.equal(target.querySelectorAll('.md-list').length, 2); + assert.equal(target.querySelector('.md-pre code').textContent, 'const a = 1'); + assert.equal(target.querySelector('.md-pre').dataset.lang, 'js'); + assert.equal(target.querySelectorAll('.md-table th').length, 2); + assert.equal(target.querySelectorAll('.md-table tbody td').length, 2); + assert.equal(target.querySelector('.md-table').getAttribute('tabindex'), '0'); + // Raw HTML survives as inert text; nothing in it becomes an element or a handler. + assert.equal(target.querySelector('.md-raw').textContent, ''); + assert.equal(target.querySelector('[onerror]'), null); + assert.equal(target.innerHTML.includes('onerror=alert'), true); + assert.equal(target.querySelector('.md-raw').children.length, 0); + // The same text renders once; a new text replaces the old nodes. + const first = target.firstChild; + assert.equal(renderMarkdown(target, md), false); + assert.equal(target.firstChild, first); + assert.equal(renderMarkdown(target, '只有一句话'), true); + assert.equal(target.childNodes.length, 1); + assert.equal(target.textContent, '只有一句话'); +}); + +domTest('a task list keeps its checked state without form controls', (t) => { + const dom = new JSDOM('
'); + t.after(() => dom.window.close()); + const target = dom.window.document.getElementById('reply'); + renderMarkdown(target, '- [ ] 未完成\n- [x] 已完成'); + assert.equal(target.querySelector('input, checkbox'), null); + assert.deepEqual([...target.querySelectorAll('.md-task')].map((node) => node.dataset.checked), ['false', 'true']); +}); diff --git a/sources/minimax-ai/minimax-pet/dev/panel-page-wiring.test.mjs b/sources/minimax-ai/minimax-pet/dev/panel-page-wiring.test.mjs index 89eae0cf..7b7d7c2c 100644 --- a/sources/minimax-ai/minimax-pet/dev/panel-page-wiring.test.mjs +++ b/sources/minimax-ai/minimax-pet/dev/panel-page-wiring.test.mjs @@ -5,6 +5,7 @@ import { createRequire } from 'node:module'; import vm from 'node:vm'; import { createPanelNavigation } from '../miniapp/client/panel-navigation.mjs'; import { taskStatus } from '../miniapp/client/compact-pet-view.mjs'; +import { renderMarkdown } from '../miniapp/client/markdown.mjs'; const { JSDOM } = createRequire(import.meta.url)('jsdom'); const source = await readFile(new URL('../miniapp/client/pet-app.js', import.meta.url), 'utf8'); @@ -32,7 +33,7 @@ function harness(t, patch = {}) { openTaskPreview: (id) => compact.push(id), callBridge: (callback) => { try { return Promise.resolve(callback()); } catch (error) { return Promise.reject(error); } }, setMsg: (element, text, kind = 'info') => { reports.push(text); if (element) { element.textContent = text || ''; element.dataset.kind = kind; } }, - availabilityText: () => '连接不可用', console: { warn: (...args) => warnings.push(args) }, + availabilityText: () => '连接不可用', console: { warn: (...args) => warnings.push(args) }, renderMarkdown, STATUS_LABEL: { idle: '空闲', completed: '本次完成', running: '工作中', error: '异常' }, }); vm.runInContext(`${errCode}\n${select}\n${detail}\n${navigate}\n${hostOpen}\nglobalThis.handlers = { selectSession, renderDetail, focusFullPanel, openSelectedSession, openSessionInHost };`, context); diff --git a/sources/minimax-ai/minimax-pet/dev/smoke-api.mjs b/sources/minimax-ai/minimax-pet/dev/smoke-api.mjs index 02175d14..cb893706 100644 --- a/sources/minimax-ai/minimax-pet/dev/smoke-api.mjs +++ b/sources/minimax-ai/minimax-pet/dev/smoke-api.mjs @@ -276,7 +276,7 @@ try { }); await test('production activity, preferences and view modules are served as JavaScript', async () => { - for (const name of ['activity.mjs', 'preferences.mjs', 'window-position.mjs', 'pet-presentation.mjs', 'activity-reminders.mjs', 'compact-pet-view.mjs', 'notification-previews.mjs', 'ask-observer.mjs', 'workbench-window.mjs']) { + for (const name of ['activity.mjs', 'preferences.mjs', 'window-position.mjs', 'pet-presentation.mjs', 'activity-reminders.mjs', 'compact-pet-view.mjs', 'notification-previews.mjs', 'ask-observer.mjs', 'workbench-window.mjs', 'markdown.mjs', 'vendor/markdown.mjs']) { const r = await call(port, 'GET', `/assets/${name}`); assert.equal(r.status, 200); assert.match(r.headers['content-type'], /^text\/javascript/); diff --git a/sources/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs b/sources/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs index 6d8cebee..7f9651d2 100644 --- a/sources/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs +++ b/sources/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs @@ -1,3 +1,5 @@ +import { markdownToPlainText, renderMarkdown, resetMarkdown } from './markdown.mjs'; + const STATUS = { running: '进行中', error: '异常', completed: '已完成', aborted: '已停止', idle: '空闲', needs_answer: '需要你回答' }; const textOf = (value) => typeof value === 'string' ? value : ''; const failureCode = (error) => textOf(error?.code) || textOf(error?.message) || textOf(error) || 'result_unknown'; @@ -66,7 +68,7 @@ export function createCompactPetView({ const detailPane = element('div', 'compact-detail compact-body'); const detailTitle = element('strong', 'compact-detail-title'); const detailStatus = element('span', 'compact-detail-status'); detailStatus.setAttribute('role', 'status'); - const detailReply = element('p', 'compact-detail-reply'); + const detailReply = element('div', 'compact-detail-reply md'); detailReply.setAttribute('aria-label', '任务最近回复'); detailReply.tabIndex = 0; const detailFooter = element('div', 'compact-footer'); const back = button('返回任务', 'compact-detail-back compact-link', () => api.open(detailBackView)); @@ -112,7 +114,7 @@ export function createCompactPetView({ row.item = item; setText(row.title, textOf(item.title) || '未命名任务'); row.title.setAttribute('aria-label', `查看任务:${textOf(item.title) || '未命名任务'}`); - setText(row.preview, item.needsAnswer === true ? '需要你回答' : textOf(item.previewText)); row.preview.hidden = !row.preview.textContent; + setText(row.preview, item.needsAnswer === true ? '需要你回答' : markdownToPlainText(textOf(item.previewText))); row.preview.hidden = !row.preview.textContent; const status = taskStatus(item); setText(row.status, STATUS[status] || '待查看'); row.status.dataset.status = status; row.title.disabled = typeof onSelectTask !== 'function'; @@ -140,7 +142,14 @@ export function createCompactPetView({ else if (!id) text = '选择任务后查看回复。'; else if (!detail) text = '正在读取任务…'; else text = (detail.status === 'error' && textOf(detail.error)) || textOf(detail.lastAssistantText) || '该任务暂时没有可读取的最后回复。'; - setText(detailReply, text); + // Status copy stays plain text; an actual reply is markdown. renderMarkdown keeps + // the DOM when the text is unchanged, so a background refresh cannot reset the + // reader's scroll position. + if (needsAnswer || !available || taskSelection.detailLoading && !detail) { + if (detailReply.dataset.mdSource !== text) { resetMarkdown(detailReply); setText(detailReply, text); } + } else { + renderMarkdown(detailReply, text); + } detailPane.setAttribute('aria-busy', String(available && !needsAnswer && taskSelection.detailLoading === true)); if (paintedDetailId !== id) { detailReply.scrollTop = 0; detailPane.scrollTop = 0; paintedDetailId = id; diff --git a/sources/minimax-ai/minimax-pet/miniapp/client/index.html b/sources/minimax-ai/minimax-pet/miniapp/client/index.html index 60ea288c..7f1f2176 100644 --- a/sources/minimax-ai/minimax-pet/miniapp/client/index.html +++ b/sources/minimax-ai/minimax-pet/miniapp/client/index.html @@ -116,7 +116,7 @@

任务概览

-

+                
@@ -157,7 +157,7 @@

任务连接

版本与帮助
-

MiniMax Pet 0.6.0

+

MiniMax Pet 0.7.0

diff --git a/sources/minimax-ai/minimax-pet/miniapp/client/markdown.mjs b/sources/minimax-ai/minimax-pet/miniapp/client/markdown.mjs new file mode 100644 index 00000000..0d4237e6 --- /dev/null +++ b/sources/minimax-ai/minimax-pet/miniapp/client/markdown.mjs @@ -0,0 +1,352 @@ +// MiniMax Pet — render an Agent reply as DOM. Parsing is delegated to the vendored +// unified + remark parser; this module decides which nodes reach the page and how. +// Nothing here builds an HTML string: every node is created with createElement or +// createTextNode, so model output can never inject markup. +import { parseMarkdown } from './vendor/markdown.mjs'; + +// A reply is at most a few thousand characters in practice. Keep a ceiling so one +// pathological response cannot stall the page, and bound the parse cache. +const MAX_SOURCE = 200_000; +const MAX_CACHE = 8; +const TRUNCATED_NOTE = '\n…(内容过长,已截断显示)'; +const HEADING_LEVEL_BASE = 2; + +const parses = new Map(); +const flats = new Map(); + +function remember(map, key, value) { + if (map.size >= MAX_CACHE) map.delete(map.keys().next().value); + map.set(key, value); + return value; +} + +function tree(text) { + const source = text.length > MAX_SOURCE ? text.slice(0, MAX_SOURCE) + TRUNCATED_NOTE : text; + const hit = parses.get(source); + if (hit) return hit; + let parsed; + try { + parsed = parseMarkdown(source); + } catch (error) { + console.warn('[pet] markdown_parse_failed:', error?.message ?? error); + parsed = { type: 'root', children: [{ type: 'paragraph', children: [{ type: 'text', value: source }] }] }; + } + return remember(parses, source, parsed); +} + +// --------------------------------------------------------------------------- +// Inline nodes +// --------------------------------------------------------------------------- + +function inlineNode(doc, node) { + switch (node.type) { + case 'text': + return doc.createTextNode(typeof node.value === 'string' ? node.value : ''); + case 'break': + return doc.createElement('br'); + case 'inlineCode': { + const code = doc.createElement('code'); + code.className = 'md-code-inline'; + code.textContent = typeof node.value === 'string' ? node.value : ''; + return code; + } + case 'inlineMath': + case 'math': { + const span = doc.createElement('span'); + span.className = 'md-formula'; + span.textContent = typeof node.value === 'string' ? node.value : ''; + return span; + } + case 'inlineHtml': + // Inline HTML tags are dropped: their text stays, the tag never renders. + return doc.createTextNode(''); + case 'html': + // A single-line HTML block cannot be laid out as a block; keep it as text. + return doc.createTextNode(typeof node.value === 'string' ? node.value : ''); + case 'image': { + // Images are not fetched; the alt text keeps the meaning without a network + // request. Rendering the URL would expose remote hosts to the reply. + const span = doc.createElement('span'); + span.className = 'md-image'; + span.textContent = `[图片${node.alt ? `:${node.alt}` : ''}]`; + return span; + } + case 'link': { + // The page cannot open external URLs; keep the label and show the target on hover. + // Only sane web targets are exposed, so a reply cannot hang a javascript: URL on + // a hover label where a reader might copy it. + const span = doc.createElement('span'); + span.className = 'md-link'; + const url = typeof node.url === 'string' ? node.url : ''; + if (/^(?:https?:|mailto:)/iu.test(url)) span.title = url; + else if (url) span.classList.add('md-link-blocked'); + appendInline(doc, span, node.children); + return span; + } + case 'strong': + case 'emphasis': + case 'delete': { + const tag = node.type === 'strong' ? 'strong' : node.type === 'emphasis' ? 'em' : 'del'; + const el = doc.createElement(tag); + appendInline(doc, el, node.children); + return el; + } + default: { + const span = doc.createElement('span'); + appendInline(doc, span, node.children); + return span; + } + } +} + +function appendInline(doc, parent, children) { + for (const child of Array.isArray(children) ? children : []) parent.append(inlineNode(doc, child)); +} + +// --------------------------------------------------------------------------- +// Block nodes +// --------------------------------------------------------------------------- + +function blockNode(doc, node) { + switch (node.type) { + case 'paragraph': { + const p = doc.createElement('p'); + p.className = 'md-p'; + appendInline(doc, p, node.children); + return p; + } + case 'heading': { + // A reply sits inside a page that already owns its h1/h2, so keep the visual + // levels without adding competing document headings. + const div = doc.createElement('div'); + div.className = 'md-heading'; + div.dataset.depth = String(Math.min(Math.max(Number(node.depth) || 1, 1), 6)); + div.setAttribute('role', 'heading'); + div.setAttribute('aria-level', String(Math.min((Number(node.depth) || 1) + HEADING_LEVEL_BASE, 6))); + appendInline(doc, div, node.children); + return div; + } + case 'list': { + const list = doc.createElement(node.ordered ? 'ol' : 'ul'); + list.className = 'md-list'; + if (node.ordered && Number.isInteger(node.start) && node.start !== 1) list.start = node.start; + for (const item of Array.isArray(node.children) ? node.children : []) { + if (item.type !== 'listItem') continue; + const li = doc.createElement('li'); + li.className = 'md-li'; + if (item.checked === true || item.checked === false) { + li.classList.add('md-task'); + li.dataset.checked = String(item.checked); + } + appendBlocks(doc, li, item.children, { tight: !item.spread }); + list.append(li); + } + return list; + } + case 'code': { + const pre = doc.createElement('pre'); + pre.className = 'md-pre'; + const code = doc.createElement('code'); + if (typeof node.lang === 'string' && node.lang) pre.dataset.lang = node.lang; + code.textContent = typeof node.value === 'string' ? node.value : ''; + pre.append(code); + return pre; + } + case 'blockquote': { + const quote = doc.createElement('blockquote'); + quote.className = 'md-quote'; + appendBlocks(doc, quote, node.children, {}); + return quote; + } + case 'thematicBreak': { + const rule = doc.createElement('hr'); + rule.className = 'md-rule'; + return rule; + } + case 'table': { + const wrap = doc.createElement('div'); + wrap.className = 'md-table'; + // Wide tables scroll inside the card instead of widening the page. + wrap.tabIndex = 0; + wrap.setAttribute('role', 'region'); + wrap.setAttribute('aria-label', '任务回复中的表格'); + const table = doc.createElement('table'); + const rows = Array.isArray(node.children) ? node.children : []; + const header = rows.find((row) => row.type === 'tableRow'); + if (header) { + const thead = doc.createElement('thead'); + thead.append(tableRow(doc, header, 'th')); + table.append(thead); + } + const body = rows.filter((row) => row.type === 'tableRow' && row !== header); + if (body.length) { + const tbody = doc.createElement('tbody'); + for (const row of body) tbody.append(tableRow(doc, row, 'td')); + table.append(tbody); + } + wrap.append(table); + return wrap; + } + case 'html': { + // Raw HTML is shown as its literal source, never parsed: the author meant it + // to be a block, so dropping it silently would hide half the reply. + const p = doc.createElement('p'); + p.className = 'md-p md-raw'; + p.textContent = typeof node.value === 'string' ? node.value : ''; + return p; + } + case 'tableRow': + case 'tableCell': + // Only reachable through a table; a stray cell keeps its inline content. + return textParagraph(doc, inlineText(node)); + default: { + // Unknown block types (footnote definitions, definition lists, math blocks) + // degrade to their text rather than disappearing. + const container = doc.createElement('div'); + container.className = 'md-block'; + appendBlocks(doc, container, node.children, {}); + if (!container.childNodes.length) container.textContent = inlineText(node); + return container; + } + } +} + +function textParagraph(doc, text) { + const p = doc.createElement('p'); + p.className = 'md-p'; + p.textContent = text; + return p; +} + +function tableRow(doc, row, cellTag) { + const tr = doc.createElement('tr'); + for (const cell of Array.isArray(row.children) ? row.children : []) { + if (cell.type !== 'tableCell') continue; + const td = doc.createElement(cellTag); + if (cellTag === 'th') td.scope = 'col'; + if (typeof cell.align === 'string') td.dataset.align = cell.align; + appendInline(doc, td, cell.children); + tr.append(td); + } + return tr; +} + +function appendBlocks(doc, parent, children, { tight = false } = {}) { + for (const child of Array.isArray(children) ? children : []) { + if (!child || child.type === 'footnoteDefinition') continue; + const node = blockNode(doc, child); + // A list item that holds only paragraphs becomes plain inline content when the + // list is tight, matching how markdown renders without paragraph spacing. + if (tight && child.type === 'paragraph' && node.classList?.contains('md-p')) { + const fragment = doc.createDocumentFragment(); + appendInline(doc, fragment, child.children); + parent.append(fragment); + } else if (node) { + parent.append(node); + } + } +} + +// --------------------------------------------------------------------------- +// Public API +// --------------------------------------------------------------------------- + +/** Renders markdown into `target`, replacing its content only when the text changed. */ +export function renderMarkdown(target, text) { + const source = typeof text === 'string' ? text : ''; + if (target.dataset.mdSource === source) return false; + const doc = target.ownerDocument; + const fragment = doc.createDocumentFragment(); + for (const child of tree(source).children) { + if (!child || child.type === 'footnoteDefinition') continue; + const node = blockNode(doc, child); + if (node) fragment.append(node); + } + target.replaceChildren(fragment); + target.dataset.mdSource = source; + target.classList.add('md'); + return true; +} + +/** Drops the cached render so the next call repaints (used when the target is reused). */ +export function resetMarkdown(target) { + delete target.dataset.mdSource; +} + +// --------------------------------------------------------------------------- +// Plain text, for the five-line previews +// --------------------------------------------------------------------------- + +function inlineText(node) { + switch (node.type) { + case 'text': + case 'inlineCode': + return typeof node.value === 'string' ? node.value : ''; + case 'inlineMath': + case 'math': + return typeof node.value === 'string' ? `$${node.value}$` : ''; + case 'break': + return ' '; + case 'html': + case 'inlineHtml': + return typeof node.value === 'string' ? node.value : ''; + case 'image': + return node.alt ? `[图片:${node.alt}]` : '[图片]'; + case 'link': + case 'strong': + case 'emphasis': + case 'delete': + default: + return (Array.isArray(node.children) ? node.children : []).map(inlineText).join(''); + } +} + +function blockText(node, depth = 0) { + switch (node.type) { + case 'paragraph': + case 'heading': + return inlineText(node); + case 'code': + return typeof node.value === 'string' ? node.value : ''; + case 'thematicBreak': + return '—'; + case 'html': + return typeof node.value === 'string' ? node.value : ''; + case 'list': { + const items = Array.isArray(node.children) ? node.children : []; + return items.map((item, index) => { + const marker = item.checked === true ? '[x] ' : item.checked === false ? '[ ] ' + : node.ordered ? `${(Number.isInteger(node.start) ? node.start : 1) + index}. ` : '• '; + // A nested list carries no depth of its own, so collect the item's blocks + // here and indent every continuation line under the marker text. + const body = (Array.isArray(item.children) ? item.children : []).map((child) => blockText(child, depth)).join('\n'); + const indent = `${' '.repeat(depth)}${' '.repeat(marker.length)}`; + const indented = body.split('\n').filter((line, lineIndex) => lineIndex === 0 || line).join(`\n${indent}`); + return `${' '.repeat(depth)}${marker}${indented}`; + }).join('\n'); + } + case 'table': { + const rows = Array.isArray(node.children) ? node.children : []; + return rows.map((row) => (Array.isArray(row.children) ? row.children : []).map((cell) => (Array.isArray(cell.children) ? cell.children : []).map(inlineText).join('')).join('\t')).join('\n'); + } + case 'blockquote': + return (Array.isArray(node.children) ? node.children : []).map((child) => blockText(child, depth)).join('\n'); + default: + return (Array.isArray(node.children) ? node.children : []).map((child) => blockText(child, depth)).join('\n'); + } +} + +/** Flattens markdown to text for previews, which only ever show a few lines. */ +export function markdownToPlainText(text) { + const source = typeof text === 'string' ? text : ''; + if (!source.trim()) return ''; + const hit = flats.get(source); + if (hit !== undefined) return hit; + const flat = tree(source).children + .filter((child) => child && child.type !== 'footnoteDefinition') + .map((child) => blockText(child)) + .join('\n') + .replace(/\n{3,}/g, '\n\n') + .trim(); + return remember(flats, source, flat); +} diff --git a/sources/minimax-ai/minimax-pet/miniapp/client/pet-app.js b/sources/minimax-ai/minimax-pet/miniapp/client/pet-app.js index a6bbb345..960620b4 100644 --- a/sources/minimax-ai/minimax-pet/miniapp/client/pet-app.js +++ b/sources/minimax-ai/minimax-pet/miniapp/client/pet-app.js @@ -9,6 +9,7 @@ import { createWorkbenchWindow } from './workbench-window.mjs'; import { createNotificationPreviews } from './notification-previews.mjs'; import { createAskObserver } from './ask-observer.mjs'; import { createPanelNavigation } from './panel-navigation.mjs'; +import { markdownToPlainText, renderMarkdown } from './markdown.mjs'; // --------------------------------------------------------------------------- // Constants @@ -985,7 +986,8 @@ function renderNotificationStack() { } const open = node.children[0]; open.children[0].textContent = item.title; - open.children[1].textContent = notificationText(item, previews); + // A notification shows a five-line preview, so markdown is flattened, not rendered. + open.children[1].textContent = markdownToPlainText(notificationText(item, previews)); open.setAttribute('aria-label', `查看通知:${item.title}`); node.children[1].setAttribute('aria-label', `关闭通知:${item.title}`); return node; @@ -1762,7 +1764,9 @@ function renderDetail() { els.detailError.textContent = detail?.error || app.detailError || ''; els.detailError.hidden = !els.detailError.textContent; const reply = needsAnswer ? '需要你回答' : detail?.lastAssistantText || ''; - if (els.detailReply.textContent !== reply) els.detailReply.textContent = reply; + // The reply is markdown; renderMarkdown keeps the DOM when the text is unchanged, + // so a background refresh cannot disturb the reading position. + renderMarkdown(els.detailReply, reply); if (panelDetailId !== app.selectedSessionId) { els.detailReply.scrollTop = 0; panelDetailId = app.selectedSessionId; } renderDetailOpen(needsAnswer); els.detailNote.textContent = app.source === 'demo' ? '资源动作预览,不提供真实任务概览。' @@ -1802,7 +1806,7 @@ function renderCompactView() { const notice = reminders.getState(); notificationPreviews?.update({ availability: app.availability, items: notificationItems(notice.items) }); const previews = notificationPreviews?.getState().previews ?? {}; - workbenchView?.update({ reminders: { ...notice, items: notice.items.map((item) => ({ ...item, previewText: item.needsAnswer ? '需要你回答' : previews[item.sessionId] || '' })) }, allSessions: app.sessions, + workbenchView?.update({ reminders: { ...notice, items: notice.items.map((item) => ({ ...item, previewText: item.needsAnswer ? '需要你回答' : markdownToPlainText(previews[item.sessionId] || '') })) }, allSessions: app.sessions, taskSelection: { availability: app.availability, selectedSessionId: app.selectedSessionId, session: app.sessions.find((row) => row.sessionId === app.selectedSessionId), detail: app.detail, detailLoading: app.detailLoading, detailError: app.detailError } }); } diff --git a/sources/minimax-ai/minimax-pet/miniapp/client/pet.css b/sources/minimax-ai/minimax-pet/miniapp/client/pet.css index dd35b03b..409b8a1d 100644 --- a/sources/minimax-ai/minimax-pet/miniapp/client/pet.css +++ b/sources/minimax-ai/minimax-pet/miniapp/client/pet.css @@ -794,7 +794,6 @@ html.mode-window .pet-sprite:focus-visible { .last-reply { max-height: 20rem; overflow: auto; - white-space: pre-wrap; overflow-wrap: anywhere; font: inherit; user-select: text; @@ -850,7 +849,18 @@ html.mode-window .pet-sprite:focus-visible { .pet-notice-preview { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 5; overflow: hidden; color: var(--mcode-text-muted); overflow-wrap: anywhere; } .compact-detail-title { margin: 0; font-size: 12px; line-height: 18px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .compact-detail-status { margin: 2px 0 2px 6px; font-size: 11px; line-height: 16px; color: var(--mcode-text-muted); } -.compact-detail-reply { margin: 5px 0; max-height: 126px; overflow: auto; overscroll-behavior: contain; white-space: pre-wrap; overflow-wrap: anywhere; user-select: text; -webkit-user-select: text; } +.compact-detail-reply { margin: 5px 0; max-height: 126px; overflow: auto; overscroll-behavior: contain; overflow-wrap: anywhere; user-select: text; -webkit-user-select: text; } +/* The desktop card is 280px wide; keep the same structure at a tighter scale. */ +.compact-detail-reply.md { font-size: 12px; line-height: 17px; text-align: left; } +.compact-detail-reply.md .md-p, +.compact-detail-reply.md .md-list, +.compact-detail-reply.md .md-pre, +.compact-detail-reply.md .md-table, +.compact-detail-reply.md .md-quote { margin-bottom: 5px; } +.compact-detail-reply.md .md-heading { margin: 8px 0 4px; font-size: 13px; line-height: 18px; } +.compact-detail-reply.md .md-pre { padding: 6px 8px; } +.compact-detail-reply.md .md-table th, +.compact-detail-reply.md .md-table td { padding: 3px 6px; font-size: 11px; } .compact-detail-back { color: var(--mcode-text-muted); font-size: 11px; } .compact-open { font-size: 11px; font-weight: 600; } .pet-notice-dismiss { flex: none; border: 0; background: transparent; color: var(--mcode-text-muted); cursor: pointer; font-size: 15px; padding: 0 2px 0 6px; } @@ -866,6 +876,174 @@ summary { cursor: pointer; color: var(--mcode-text-muted); font-size: 12px; } +/* ------------------------------------------------------------------ */ +/* Markdown replies (markdown.mjs) */ +/* ------------------------------------------------------------------ */ + +/* Only structure the parser emitted lives in here; every value comes from the + --mcode-* roles the page already defines, so both themes stay readable. */ +.md { + font-size: 14px; + line-height: 22px; + color: var(--mcode-text); + overflow-wrap: anywhere; +} + +.md > :first-child { margin-top: 0; } +.md > :last-child { margin-bottom: 0; } + +.md .md-p { + margin: 0 0 8px; + white-space: pre-wrap; +} + +.md .md-heading { + margin: 16px 0 8px; + font-weight: 600; + color: var(--mcode-text); + line-height: 24px; +} + +.md .md-heading[data-depth='1'], +.md .md-heading[data-depth='2'] { font-size: 16px; } +.md .md-heading[data-depth='3'] { font-size: 15px; } +.md .md-heading[data-depth='4'], +.md .md-heading[data-depth='5'], +.md .md-heading[data-depth='6'] { font-size: 14px; } + +.md .md-list { + margin: 0 0 8px; + padding-left: 20px; +} + +.md .md-li { margin: 2px 0; } + +.md .md-task { + list-style: none; + margin-left: -20px; + padding-left: 20px; + position: relative; +} + +.md .md-task::before { + position: absolute; + left: 0; + content: '☐'; + color: var(--mcode-text-muted); +} + +.md .md-task[data-checked='true']::before { + content: '☑'; + color: var(--mcode-accent); +} + +.md .md-code-inline { + padding: 1px 4px; + border-radius: 4px; + background: var(--mcode-surface-muted); + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 12px; + overflow-wrap: anywhere; +} + +.md .md-pre { + margin: 0 0 8px; + padding: 8px 10px; + border: 1px solid var(--mcode-border); + border-radius: 8px; + background: var(--mcode-surface-muted); + overflow: auto; + overscroll-behavior: contain; +} + +.md .md-pre code { + display: block; + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 12px; + line-height: 18px; + white-space: pre; +} + +.md .md-pre[data-lang]::after { + display: block; + margin-top: 6px; + color: var(--mcode-text-subtle); + content: attr(data-lang); + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 11px; + line-height: 16px; +} + +.md .md-quote { + margin: 0 0 8px; + padding: 0 0 0 10px; + border-left: 2px solid var(--mcode-border); + color: var(--mcode-text-muted); +} + +.md .md-rule { + height: 1px; + margin: 12px 0; + border: 0; + background: var(--mcode-border); +} + +.md .md-table { + margin: 0 0 8px; + overflow-x: auto; + overscroll-behavior: contain; +} + +.md .md-table table { + border-collapse: collapse; + font-size: 12px; + line-height: 18px; +} + +.md .md-table th, +.md .md-table td { + padding: 4px 8px; + border: 1px solid var(--mcode-border); + text-align: left; + vertical-align: top; +} + +.md .md-table th { + background: var(--mcode-surface-muted); + font-weight: 600; + white-space: nowrap; +} + +.md .md-table td[data-align='center'] { text-align: center; } +.md .md-table td[data-align='right'] { text-align: right; } + +.md .md-link { + color: var(--mcode-accent); + text-decoration: underline; + text-underline-offset: 2px; + cursor: help; +} + +.md .md-link-blocked { color: var(--mcode-text); cursor: text; } + +.md .md-image { color: var(--mcode-text-muted); } + +.md .md-formula { + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 12px; +} + +.md .md-raw { + color: var(--mcode-text-muted); + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 12px; +} + +.md .md-block { margin: 0 0 8px; } + +.md strong { font-weight: 600; } +.md del { color: var(--mcode-text-muted); } + /* Main panel: appearance, task reading, and settings share one quiet surface. All selectors are panel-scoped so the desktop companion keeps its layout. */ html.mode-inline, @@ -1347,7 +1525,6 @@ html.mode-inline body { overflow: auto; overscroll-behavior: contain; scrollbar-gutter: stable; - line-height: 1.7; } #panel #session-msg { diff --git a/sources/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.LICENSE.txt b/sources/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.LICENSE.txt new file mode 100644 index 00000000..cd351662 --- /dev/null +++ b/sources/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.LICENSE.txt @@ -0,0 +1,1392 @@ +# Third-party notices: vendored markdown parser + +miniapp/client/vendor/markdown.mjs bundles the packages below into one module. Each is +redistributed unmodified in bundled form; only these packages are included. + +### bail@2.0.2 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### ccount@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### character-entities@2.0.2 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### decode-named-character-reference@1.3.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### devlop@1.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2023 Titus Wormer + +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. +### escape-string-regexp@5.0.0 — MIT — Sindre Sorhus + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +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. +### extend@3.0.2 — MIT — Stefan Thomas (http://www.justmoon.net) + +The MIT License (MIT) + +Copyright (c) 2014 Stefan Thomas + +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. +### is-plain-obj@4.1.0 — MIT — Sindre Sorhus + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +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. +### longest-streak@3.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### markdown-table@3.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-find-and-replace@3.0.4 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-from-markdown@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm@3.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-autolink-literal@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-footnote@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-strikethrough@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-table@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-gfm-task-list-item@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-phrasing@4.1.0 — MIT — Victor Felder (https://draft.li) + +(The MIT License) + +Copyright (c) 2017 Titus Wormer +Copyright (c) 2017 Victor Felder + +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. +### mdast-util-to-markdown@2.2.3 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### mdast-util-to-string@4.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### micromark@4.0.3 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-core-commonmark@2.0.4 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-extension-gfm@3.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-extension-gfm-autolink-literal@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-extension-gfm-footnote@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2021 Titus Wormer + +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. +### micromark-extension-gfm-strikethrough@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-extension-gfm-table@2.1.2 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-extension-gfm-tagfilter@2.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-extension-gfm-task-list-item@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +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. +### micromark-factory-destination@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-factory-label@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-factory-space@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-factory-title@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-factory-whitespace@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-character@2.1.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-chunked@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-classify-character@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-combine-extensions@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-decode-numeric-character-reference@2.0.2 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-decode-string@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-edit-map@1.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-encode@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-html-tag-name@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-normalize-identifier@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-resolve-all@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-sanitize-uri@2.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### micromark-util-subtokenize@2.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### remark-gfm@4.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### remark-parse@11.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2014 Titus Wormer + +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. +### trough@2.2.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +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. +### unified@11.0.5 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### unist-util-is@6.0.1 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT license) + +Copyright (c) 2015 Titus Wormer + +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. +### unist-util-stringify-position@4.0.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +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. +### unist-util-visit@5.2.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### unist-util-visit-parents@6.1.0 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### vfile@6.0.3 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +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. +### vfile-message@4.0.4 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) Titus Wormer + +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. +### zwitch@2.0.4 — MIT — Titus Wormer (https://wooorm.com) + +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +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/sources/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.mjs b/sources/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.mjs new file mode 100644 index 00000000..30a5f90d --- /dev/null +++ b/sources/minimax-ai/minimax-pet/miniapp/client/vendor/markdown.mjs @@ -0,0 +1,32 @@ +/* + * Generated by tools/build-markdown.mjs — do not edit by hand. + * + * Bundles unified, remark-parse and remark-gfm into one browser ESM module. + * unified MIT, Copyright (c) Titus Wormer + * remark-parse MIT, Copyright (c) Titus Wormer + * remark-gfm MIT, Copyright (c) Titus Wormer + * See vendor/markdown.LICENSE.txt and the package's PROVENANCE.md. Rebuild with + * `npm run build:markdown`; the committed file is the distributable source of truth. + */ +var Zi=Object.create;var Ot=Object.defineProperty;var Ki=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames;var Ji=Object.getPrototypeOf,Xi=Object.prototype.hasOwnProperty;var eo=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),to=(e,n)=>{for(var t in n)Ot(e,t,{get:n[t],enumerable:!0})},no=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of $i(n))!Xi.call(e,i)&&i!==t&&Ot(e,i,{get:()=>n[i],enumerable:!(r=Ki(n,i))||r.enumerable});return e};var ro=(e,n,t)=>(t=e!=null?Zi(Ji(e)):{},no(n||!e||!e.__esModule?Ot(t,"default",{value:e,enumerable:!0}):t,e));var mr=eo((Lu,hr)=>{"use strict";var st=Object.prototype.hasOwnProperty,pr=Object.prototype.toString,ar=Object.defineProperty,lr=Object.getOwnPropertyDescriptor,ur=function(n){return typeof Array.isArray=="function"?Array.isArray(n):pr.call(n)==="[object Array]"},sr=function(n){if(!n||pr.call(n)!=="[object Object]")return!1;var t=st.call(n,"constructor"),r=n.constructor&&n.constructor.prototype&&st.call(n.constructor.prototype,"isPrototypeOf");if(n.constructor&&!t&&!r)return!1;var i;for(i in n);return typeof i>"u"||st.call(n,i)},cr=function(n,t){ar&&t.name==="__proto__"?ar(n,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):n[t.name]=t.newValue},fr=function(n,t){if(t==="__proto__")if(st.call(n,t)){if(lr)return lr(n,t).value}else return;return n[t]};hr.exports=function e(){var n,t,r,i,a,o,l=arguments[0],u=1,s=arguments.length,c=!1;for(typeof l=="boolean"&&(c=l,l=arguments[1]||{},u=2),(l==null||typeof l!="object"&&typeof l!="function")&&(l={});uo.length,u;l&&o.push(i);try{u=e.apply(this,o)}catch(s){let c=s;if(l&&t)throw c;return i(c)}l||(u&&u.then&&typeof u.then=="function"?u.then(a,i):u instanceof Error?i(u):a(u))}function i(o,...l){t||(t=!0,n(o,...l))}function a(o){i(null,o)}}function ke(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?dr(e.position):"start"in e||"end"in e?dr(e):"line"in e||"column"in e?Ut(e):""}function Ut(e){return xr(e&&e.line)+":"+xr(e&&e.column)}function dr(e){return Ut(e&&e.start)+"-"+Ut(e&&e.end)}function xr(e){return e&&typeof e=="number"?e:1}var Re=class extends Error{constructor(n,t,r){super(),typeof t=="string"&&(r=t,t=void 0);let i="",a={},o=!1;if(t&&("line"in t&&"column"in t?a={place:t}:"start"in t&&"end"in t?a={place:t}:"type"in t?a={ancestors:[t],place:t.position}:a={...t}),typeof n=="string"?i=n:!a.cause&&n&&(o=!0,i=n.message,a.cause=n),!a.ruleId&&!a.source&&typeof r=="string"){let u=r.indexOf(":");u===-1?a.ruleId=r:(a.source=r.slice(0,u),a.ruleId=r.slice(u+1))}if(!a.place&&a.ancestors){let u=a.ancestors[a.ancestors.length-1];u&&(a.place=u.position)}let l=a.place&&"start"in a.place?a.place.start:a.place;this.ancestors=a.ancestors||void 0,this.cause=a.cause||void 0,this.column=l?l.column:void 0,this.fatal=void 0,this.file="",this.message=i,this.line=l?l.line:void 0,this.name=ke(a.place)||"1:1",this.place=a.place||void 0,this.reason=this.message,this.ruleId=a.ruleId||void 0,this.source=a.source||void 0,this.stack=o&&a.cause&&typeof a.cause.stack=="string"?a.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};Object.defineProperties(Re.prototype,{file:{configurable:!0,enumerable:!0,value:"",writable:!0},name:{configurable:!0,enumerable:!0,value:"",writable:!0},reason:{configurable:!0,enumerable:!0,value:"",writable:!0},message:{configurable:!0,enumerable:!0,value:"",writable:!0},stack:{configurable:!0,enumerable:!0,value:"",writable:!0},column:{configurable:!0,enumerable:!0,writable:!0},line:{configurable:!0,enumerable:!0,writable:!0},ancestors:{configurable:!0,enumerable:!0,writable:!0},cause:{configurable:!0,enumerable:!0,writable:!0},fatal:{configurable:!0,enumerable:!0,writable:!0},place:{configurable:!0,enumerable:!0,writable:!0},ruleId:{configurable:!0,enumerable:!0,writable:!0},source:{configurable:!0,enumerable:!0,writable:!0}});var oe={basename:io,dirname:oo,extname:ao,join:lo,sep:"/"};function io(e,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');Ze(e);let t=0,r=-1,i=e.length,a;if(n===void 0||n.length===0||n.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){t=i+1;break}}else r<0&&(a=!0,r=i+1);return r<0?"":e.slice(t,r)}if(n===e)return"";let o=-1,l=n.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){t=i+1;break}}else o<0&&(a=!0,o=i+1),l>-1&&(e.codePointAt(i)===n.codePointAt(l--)?l<0&&(r=i):(l=-1,r=o));return t===r?r=o:r<0&&(r=e.length),e.slice(t,r)}function oo(e){if(Ze(e),e.length===0)return".";let n=-1,t=e.length,r;for(;--t;)if(e.codePointAt(t)===47){if(r){n=t;break}}else r||(r=!0);return n<0?e.codePointAt(0)===47?"/":".":n===1&&e.codePointAt(0)===47?"//":e.slice(0,n)}function ao(e){Ze(e);let n=e.length,t=-1,r=0,i=-1,a=0,o;for(;n--;){let l=e.codePointAt(n);if(l===47){if(o){r=n+1;break}continue}t<0&&(o=!0,t=n+1),l===46?i<0?i=n:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||t<0||a===0||a===1&&i===t-1&&i===r+1?"":e.slice(i,t)}function lo(...e){let n=-1,t;for(;++n0&&e.codePointAt(e.length-1)===47&&(t+="/"),n?"/"+t:t}function so(e,n){let t="",r=0,i=-1,a=0,o=-1,l,u;for(;++o<=e.length;){if(o2){if(u=t.lastIndexOf("/"),u!==t.length-1){u<0?(t="",r=0):(t=t.slice(0,u),r=t.length-1-t.lastIndexOf("/")),i=o,a=0;continue}}else if(t.length>0){t="",r=0,i=o,a=0;continue}}n&&(t=t.length>0?t+"/..":"..",r=2)}else t.length>0?t+="/"+e.slice(i+1,o):t=e.slice(i+1,o),r=o-i-1;i=o,a=0}else l===46&&a>-1?a++:a=-1}return t}function Ze(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}var kr={cwd:co};function co(){return"/"}function Be(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function br(e){if(typeof e=="string")e=new URL(e);else if(!Be(e)){let n=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw n.code="ERR_INVALID_ARG_TYPE",n}if(e.protocol!=="file:"){let n=new TypeError("The URL must be of scheme file");throw n.code="ERR_INVALID_URL_SCHEME",n}return fo(e)}function fo(e){if(e.hostname!==""){let r=new TypeError('File URL host must be "localhost" or empty on darwin');throw r.code="ERR_INVALID_FILE_URL_HOST",r}let n=e.pathname,t=-1;for(;++t0){let[p,...d]=c,S=r[h][1];Ye(S)&&Ye(p)&&(p=(0,ft.default)(!0,S,p)),r[h]=[s,p,...d]}}}},$t=new Kt().freeze();function Qt(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Yt(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Zt(e,n){if(n)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Sr(e){if(!Ye(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Er(e,n,t){if(!t)throw new Error("`"+e+"` finished async. Use `"+n+"` instead")}function ct(e){return mo(e)?e:new Ke(e)}function mo(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function go(e){return typeof e=="string"||xo(e)}function xo(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}var ko={};function ge(e,n){let t=n||ko,r=typeof t.includeImageAlt=="boolean"?t.includeImageAlt:!0,i=typeof t.includeHtml=="boolean"?t.includeHtml:!0;return Cr(e,r,i)}function Cr(e,n,t){if(bo(e)){if("value"in e)return e.type==="html"&&!t?"":e.value;if(n&&"alt"in e&&e.alt)return e.alt;if("children"in e)return Ar(e.children,n,t)}return Array.isArray(e)?Ar(e,n,t):""}function Ar(e,n,t){let r=[],i=-1;for(;++i",Gamma:"\u0393",Gammad:"\u03DC",Gbreve:"\u011E",Gcedil:"\u0122",Gcirc:"\u011C",Gcy:"\u0413",Gdot:"\u0120",Gfr:"\u{1D50A}",Gg:"\u22D9",Gopf:"\u{1D53E}",GreaterEqual:"\u2265",GreaterEqualLess:"\u22DB",GreaterFullEqual:"\u2267",GreaterGreater:"\u2AA2",GreaterLess:"\u2277",GreaterSlantEqual:"\u2A7E",GreaterTilde:"\u2273",Gscr:"\u{1D4A2}",Gt:"\u226B",HARDcy:"\u042A",Hacek:"\u02C7",Hat:"^",Hcirc:"\u0124",Hfr:"\u210C",HilbertSpace:"\u210B",Hopf:"\u210D",HorizontalLine:"\u2500",Hscr:"\u210B",Hstrok:"\u0126",HumpDownHump:"\u224E",HumpEqual:"\u224F",IEcy:"\u0415",IJlig:"\u0132",IOcy:"\u0401",Iacute:"\xCD",Icirc:"\xCE",Icy:"\u0418",Idot:"\u0130",Ifr:"\u2111",Igrave:"\xCC",Im:"\u2111",Imacr:"\u012A",ImaginaryI:"\u2148",Implies:"\u21D2",Int:"\u222C",Integral:"\u222B",Intersection:"\u22C2",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",Iogon:"\u012E",Iopf:"\u{1D540}",Iota:"\u0399",Iscr:"\u2110",Itilde:"\u0128",Iukcy:"\u0406",Iuml:"\xCF",Jcirc:"\u0134",Jcy:"\u0419",Jfr:"\u{1D50D}",Jopf:"\u{1D541}",Jscr:"\u{1D4A5}",Jsercy:"\u0408",Jukcy:"\u0404",KHcy:"\u0425",KJcy:"\u040C",Kappa:"\u039A",Kcedil:"\u0136",Kcy:"\u041A",Kfr:"\u{1D50E}",Kopf:"\u{1D542}",Kscr:"\u{1D4A6}",LJcy:"\u0409",LT:"<",Lacute:"\u0139",Lambda:"\u039B",Lang:"\u27EA",Laplacetrf:"\u2112",Larr:"\u219E",Lcaron:"\u013D",Lcedil:"\u013B",Lcy:"\u041B",LeftAngleBracket:"\u27E8",LeftArrow:"\u2190",LeftArrowBar:"\u21E4",LeftArrowRightArrow:"\u21C6",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27E6",LeftDownTeeVector:"\u2961",LeftDownVector:"\u21C3",LeftDownVectorBar:"\u2959",LeftFloor:"\u230A",LeftRightArrow:"\u2194",LeftRightVector:"\u294E",LeftTee:"\u22A3",LeftTeeArrow:"\u21A4",LeftTeeVector:"\u295A",LeftTriangle:"\u22B2",LeftTriangleBar:"\u29CF",LeftTriangleEqual:"\u22B4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVector:"\u21BF",LeftUpVectorBar:"\u2958",LeftVector:"\u21BC",LeftVectorBar:"\u2952",Leftarrow:"\u21D0",Leftrightarrow:"\u21D4",LessEqualGreater:"\u22DA",LessFullEqual:"\u2266",LessGreater:"\u2276",LessLess:"\u2AA1",LessSlantEqual:"\u2A7D",LessTilde:"\u2272",Lfr:"\u{1D50F}",Ll:"\u22D8",Lleftarrow:"\u21DA",Lmidot:"\u013F",LongLeftArrow:"\u27F5",LongLeftRightArrow:"\u27F7",LongRightArrow:"\u27F6",Longleftarrow:"\u27F8",Longleftrightarrow:"\u27FA",Longrightarrow:"\u27F9",Lopf:"\u{1D543}",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",Lscr:"\u2112",Lsh:"\u21B0",Lstrok:"\u0141",Lt:"\u226A",Map:"\u2905",Mcy:"\u041C",MediumSpace:"\u205F",Mellintrf:"\u2133",Mfr:"\u{1D510}",MinusPlus:"\u2213",Mopf:"\u{1D544}",Mscr:"\u2133",Mu:"\u039C",NJcy:"\u040A",Nacute:"\u0143",Ncaron:"\u0147",Ncedil:"\u0145",Ncy:"\u041D",NegativeMediumSpace:"\u200B",NegativeThickSpace:"\u200B",NegativeThinSpace:"\u200B",NegativeVeryThinSpace:"\u200B",NestedGreaterGreater:"\u226B",NestedLessLess:"\u226A",NewLine:` +`,Nfr:"\u{1D511}",NoBreak:"\u2060",NonBreakingSpace:"\xA0",Nopf:"\u2115",Not:"\u2AEC",NotCongruent:"\u2262",NotCupCap:"\u226D",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226F",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226B\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2A7E\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224E\u0338",NotHumpEqual:"\u224F\u0338",NotLeftTriangle:"\u22EA",NotLeftTriangleBar:"\u29CF\u0338",NotLeftTriangleEqual:"\u22EC",NotLess:"\u226E",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226A\u0338",NotLessSlantEqual:"\u2A7D\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2AA2\u0338",NotNestedLessLess:"\u2AA1\u0338",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2AAF\u0338",NotPrecedesSlantEqual:"\u22E0",NotReverseElement:"\u220C",NotRightTriangle:"\u22EB",NotRightTriangleBar:"\u29D0\u0338",NotRightTriangleEqual:"\u22ED",NotSquareSubset:"\u228F\u0338",NotSquareSubsetEqual:"\u22E2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22E3",NotSubset:"\u2282\u20D2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2AB0\u0338",NotSucceedsSlantEqual:"\u22E1",NotSucceedsTilde:"\u227F\u0338",NotSuperset:"\u2283\u20D2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",Nscr:"\u{1D4A9}",Ntilde:"\xD1",Nu:"\u039D",OElig:"\u0152",Oacute:"\xD3",Ocirc:"\xD4",Ocy:"\u041E",Odblac:"\u0150",Ofr:"\u{1D512}",Ograve:"\xD2",Omacr:"\u014C",Omega:"\u03A9",Omicron:"\u039F",Oopf:"\u{1D546}",OpenCurlyDoubleQuote:"\u201C",OpenCurlyQuote:"\u2018",Or:"\u2A54",Oscr:"\u{1D4AA}",Oslash:"\xD8",Otilde:"\xD5",Otimes:"\u2A37",Ouml:"\xD6",OverBar:"\u203E",OverBrace:"\u23DE",OverBracket:"\u23B4",OverParenthesis:"\u23DC",PartialD:"\u2202",Pcy:"\u041F",Pfr:"\u{1D513}",Phi:"\u03A6",Pi:"\u03A0",PlusMinus:"\xB1",Poincareplane:"\u210C",Popf:"\u2119",Pr:"\u2ABB",Precedes:"\u227A",PrecedesEqual:"\u2AAF",PrecedesSlantEqual:"\u227C",PrecedesTilde:"\u227E",Prime:"\u2033",Product:"\u220F",Proportion:"\u2237",Proportional:"\u221D",Pscr:"\u{1D4AB}",Psi:"\u03A8",QUOT:'"',Qfr:"\u{1D514}",Qopf:"\u211A",Qscr:"\u{1D4AC}",RBarr:"\u2910",REG:"\xAE",Racute:"\u0154",Rang:"\u27EB",Rarr:"\u21A0",Rarrtl:"\u2916",Rcaron:"\u0158",Rcedil:"\u0156",Rcy:"\u0420",Re:"\u211C",ReverseElement:"\u220B",ReverseEquilibrium:"\u21CB",ReverseUpEquilibrium:"\u296F",Rfr:"\u211C",Rho:"\u03A1",RightAngleBracket:"\u27E9",RightArrow:"\u2192",RightArrowBar:"\u21E5",RightArrowLeftArrow:"\u21C4",RightCeiling:"\u2309",RightDoubleBracket:"\u27E7",RightDownTeeVector:"\u295D",RightDownVector:"\u21C2",RightDownVectorBar:"\u2955",RightFloor:"\u230B",RightTee:"\u22A2",RightTeeArrow:"\u21A6",RightTeeVector:"\u295B",RightTriangle:"\u22B3",RightTriangleBar:"\u29D0",RightTriangleEqual:"\u22B5",RightUpDownVector:"\u294F",RightUpTeeVector:"\u295C",RightUpVector:"\u21BE",RightUpVectorBar:"\u2954",RightVector:"\u21C0",RightVectorBar:"\u2953",Rightarrow:"\u21D2",Ropf:"\u211D",RoundImplies:"\u2970",Rrightarrow:"\u21DB",Rscr:"\u211B",Rsh:"\u21B1",RuleDelayed:"\u29F4",SHCHcy:"\u0429",SHcy:"\u0428",SOFTcy:"\u042C",Sacute:"\u015A",Sc:"\u2ABC",Scaron:"\u0160",Scedil:"\u015E",Scirc:"\u015C",Scy:"\u0421",Sfr:"\u{1D516}",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",Sigma:"\u03A3",SmallCircle:"\u2218",Sopf:"\u{1D54A}",Sqrt:"\u221A",Square:"\u25A1",SquareIntersection:"\u2293",SquareSubset:"\u228F",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",Sscr:"\u{1D4AE}",Star:"\u22C6",Sub:"\u22D0",Subset:"\u22D0",SubsetEqual:"\u2286",Succeeds:"\u227B",SucceedsEqual:"\u2AB0",SucceedsSlantEqual:"\u227D",SucceedsTilde:"\u227F",SuchThat:"\u220B",Sum:"\u2211",Sup:"\u22D1",Superset:"\u2283",SupersetEqual:"\u2287",Supset:"\u22D1",THORN:"\xDE",TRADE:"\u2122",TSHcy:"\u040B",TScy:"\u0426",Tab:" ",Tau:"\u03A4",Tcaron:"\u0164",Tcedil:"\u0162",Tcy:"\u0422",Tfr:"\u{1D517}",Therefore:"\u2234",Theta:"\u0398",ThickSpace:"\u205F\u200A",ThinSpace:"\u2009",Tilde:"\u223C",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",Topf:"\u{1D54B}",TripleDot:"\u20DB",Tscr:"\u{1D4AF}",Tstrok:"\u0166",Uacute:"\xDA",Uarr:"\u219F",Uarrocir:"\u2949",Ubrcy:"\u040E",Ubreve:"\u016C",Ucirc:"\xDB",Ucy:"\u0423",Udblac:"\u0170",Ufr:"\u{1D518}",Ugrave:"\xD9",Umacr:"\u016A",UnderBar:"_",UnderBrace:"\u23DF",UnderBracket:"\u23B5",UnderParenthesis:"\u23DD",Union:"\u22C3",UnionPlus:"\u228E",Uogon:"\u0172",Uopf:"\u{1D54C}",UpArrow:"\u2191",UpArrowBar:"\u2912",UpArrowDownArrow:"\u21C5",UpDownArrow:"\u2195",UpEquilibrium:"\u296E",UpTee:"\u22A5",UpTeeArrow:"\u21A5",Uparrow:"\u21D1",Updownarrow:"\u21D5",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",Upsi:"\u03D2",Upsilon:"\u03A5",Uring:"\u016E",Uscr:"\u{1D4B0}",Utilde:"\u0168",Uuml:"\xDC",VDash:"\u22AB",Vbar:"\u2AEB",Vcy:"\u0412",Vdash:"\u22A9",Vdashl:"\u2AE6",Vee:"\u22C1",Verbar:"\u2016",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200A",Vfr:"\u{1D519}",Vopf:"\u{1D54D}",Vscr:"\u{1D4B1}",Vvdash:"\u22AA",Wcirc:"\u0174",Wedge:"\u22C0",Wfr:"\u{1D51A}",Wopf:"\u{1D54E}",Wscr:"\u{1D4B2}",Xfr:"\u{1D51B}",Xi:"\u039E",Xopf:"\u{1D54F}",Xscr:"\u{1D4B3}",YAcy:"\u042F",YIcy:"\u0407",YUcy:"\u042E",Yacute:"\xDD",Ycirc:"\u0176",Ycy:"\u042B",Yfr:"\u{1D51C}",Yopf:"\u{1D550}",Yscr:"\u{1D4B4}",Yuml:"\u0178",ZHcy:"\u0416",Zacute:"\u0179",Zcaron:"\u017D",Zcy:"\u0417",Zdot:"\u017B",ZeroWidthSpace:"\u200B",Zeta:"\u0396",Zfr:"\u2128",Zopf:"\u2124",Zscr:"\u{1D4B5}",aacute:"\xE1",abreve:"\u0103",ac:"\u223E",acE:"\u223E\u0333",acd:"\u223F",acirc:"\xE2",acute:"\xB4",acy:"\u0430",aelig:"\xE6",af:"\u2061",afr:"\u{1D51E}",agrave:"\xE0",alefsym:"\u2135",aleph:"\u2135",alpha:"\u03B1",amacr:"\u0101",amalg:"\u2A3F",amp:"&",and:"\u2227",andand:"\u2A55",andd:"\u2A5C",andslope:"\u2A58",andv:"\u2A5A",ang:"\u2220",ange:"\u29A4",angle:"\u2220",angmsd:"\u2221",angmsdaa:"\u29A8",angmsdab:"\u29A9",angmsdac:"\u29AA",angmsdad:"\u29AB",angmsdae:"\u29AC",angmsdaf:"\u29AD",angmsdag:"\u29AE",angmsdah:"\u29AF",angrt:"\u221F",angrtvb:"\u22BE",angrtvbd:"\u299D",angsph:"\u2222",angst:"\xC5",angzarr:"\u237C",aogon:"\u0105",aopf:"\u{1D552}",ap:"\u2248",apE:"\u2A70",apacir:"\u2A6F",ape:"\u224A",apid:"\u224B",apos:"'",approx:"\u2248",approxeq:"\u224A",aring:"\xE5",ascr:"\u{1D4B6}",ast:"*",asymp:"\u2248",asympeq:"\u224D",atilde:"\xE3",auml:"\xE4",awconint:"\u2233",awint:"\u2A11",bNot:"\u2AED",backcong:"\u224C",backepsilon:"\u03F6",backprime:"\u2035",backsim:"\u223D",backsimeq:"\u22CD",barvee:"\u22BD",barwed:"\u2305",barwedge:"\u2305",bbrk:"\u23B5",bbrktbrk:"\u23B6",bcong:"\u224C",bcy:"\u0431",bdquo:"\u201E",becaus:"\u2235",because:"\u2235",bemptyv:"\u29B0",bepsi:"\u03F6",bernou:"\u212C",beta:"\u03B2",beth:"\u2136",between:"\u226C",bfr:"\u{1D51F}",bigcap:"\u22C2",bigcirc:"\u25EF",bigcup:"\u22C3",bigodot:"\u2A00",bigoplus:"\u2A01",bigotimes:"\u2A02",bigsqcup:"\u2A06",bigstar:"\u2605",bigtriangledown:"\u25BD",bigtriangleup:"\u25B3",biguplus:"\u2A04",bigvee:"\u22C1",bigwedge:"\u22C0",bkarow:"\u290D",blacklozenge:"\u29EB",blacksquare:"\u25AA",blacktriangle:"\u25B4",blacktriangledown:"\u25BE",blacktriangleleft:"\u25C2",blacktriangleright:"\u25B8",blank:"\u2423",blk12:"\u2592",blk14:"\u2591",blk34:"\u2593",block:"\u2588",bne:"=\u20E5",bnequiv:"\u2261\u20E5",bnot:"\u2310",bopf:"\u{1D553}",bot:"\u22A5",bottom:"\u22A5",bowtie:"\u22C8",boxDL:"\u2557",boxDR:"\u2554",boxDl:"\u2556",boxDr:"\u2553",boxH:"\u2550",boxHD:"\u2566",boxHU:"\u2569",boxHd:"\u2564",boxHu:"\u2567",boxUL:"\u255D",boxUR:"\u255A",boxUl:"\u255C",boxUr:"\u2559",boxV:"\u2551",boxVH:"\u256C",boxVL:"\u2563",boxVR:"\u2560",boxVh:"\u256B",boxVl:"\u2562",boxVr:"\u255F",boxbox:"\u29C9",boxdL:"\u2555",boxdR:"\u2552",boxdl:"\u2510",boxdr:"\u250C",boxh:"\u2500",boxhD:"\u2565",boxhU:"\u2568",boxhd:"\u252C",boxhu:"\u2534",boxminus:"\u229F",boxplus:"\u229E",boxtimes:"\u22A0",boxuL:"\u255B",boxuR:"\u2558",boxul:"\u2518",boxur:"\u2514",boxv:"\u2502",boxvH:"\u256A",boxvL:"\u2561",boxvR:"\u255E",boxvh:"\u253C",boxvl:"\u2524",boxvr:"\u251C",bprime:"\u2035",breve:"\u02D8",brvbar:"\xA6",bscr:"\u{1D4B7}",bsemi:"\u204F",bsim:"\u223D",bsime:"\u22CD",bsol:"\\",bsolb:"\u29C5",bsolhsub:"\u27C8",bull:"\u2022",bullet:"\u2022",bump:"\u224E",bumpE:"\u2AAE",bumpe:"\u224F",bumpeq:"\u224F",cacute:"\u0107",cap:"\u2229",capand:"\u2A44",capbrcup:"\u2A49",capcap:"\u2A4B",capcup:"\u2A47",capdot:"\u2A40",caps:"\u2229\uFE00",caret:"\u2041",caron:"\u02C7",ccaps:"\u2A4D",ccaron:"\u010D",ccedil:"\xE7",ccirc:"\u0109",ccups:"\u2A4C",ccupssm:"\u2A50",cdot:"\u010B",cedil:"\xB8",cemptyv:"\u29B2",cent:"\xA2",centerdot:"\xB7",cfr:"\u{1D520}",chcy:"\u0447",check:"\u2713",checkmark:"\u2713",chi:"\u03C7",cir:"\u25CB",cirE:"\u29C3",circ:"\u02C6",circeq:"\u2257",circlearrowleft:"\u21BA",circlearrowright:"\u21BB",circledR:"\xAE",circledS:"\u24C8",circledast:"\u229B",circledcirc:"\u229A",circleddash:"\u229D",cire:"\u2257",cirfnint:"\u2A10",cirmid:"\u2AEF",cirscir:"\u29C2",clubs:"\u2663",clubsuit:"\u2663",colon:":",colone:"\u2254",coloneq:"\u2254",comma:",",commat:"@",comp:"\u2201",compfn:"\u2218",complement:"\u2201",complexes:"\u2102",cong:"\u2245",congdot:"\u2A6D",conint:"\u222E",copf:"\u{1D554}",coprod:"\u2210",copy:"\xA9",copysr:"\u2117",crarr:"\u21B5",cross:"\u2717",cscr:"\u{1D4B8}",csub:"\u2ACF",csube:"\u2AD1",csup:"\u2AD0",csupe:"\u2AD2",ctdot:"\u22EF",cudarrl:"\u2938",cudarrr:"\u2935",cuepr:"\u22DE",cuesc:"\u22DF",cularr:"\u21B6",cularrp:"\u293D",cup:"\u222A",cupbrcap:"\u2A48",cupcap:"\u2A46",cupcup:"\u2A4A",cupdot:"\u228D",cupor:"\u2A45",cups:"\u222A\uFE00",curarr:"\u21B7",curarrm:"\u293C",curlyeqprec:"\u22DE",curlyeqsucc:"\u22DF",curlyvee:"\u22CE",curlywedge:"\u22CF",curren:"\xA4",curvearrowleft:"\u21B6",curvearrowright:"\u21B7",cuvee:"\u22CE",cuwed:"\u22CF",cwconint:"\u2232",cwint:"\u2231",cylcty:"\u232D",dArr:"\u21D3",dHar:"\u2965",dagger:"\u2020",daleth:"\u2138",darr:"\u2193",dash:"\u2010",dashv:"\u22A3",dbkarow:"\u290F",dblac:"\u02DD",dcaron:"\u010F",dcy:"\u0434",dd:"\u2146",ddagger:"\u2021",ddarr:"\u21CA",ddotseq:"\u2A77",deg:"\xB0",delta:"\u03B4",demptyv:"\u29B1",dfisht:"\u297F",dfr:"\u{1D521}",dharl:"\u21C3",dharr:"\u21C2",diam:"\u22C4",diamond:"\u22C4",diamondsuit:"\u2666",diams:"\u2666",die:"\xA8",digamma:"\u03DD",disin:"\u22F2",div:"\xF7",divide:"\xF7",divideontimes:"\u22C7",divonx:"\u22C7",djcy:"\u0452",dlcorn:"\u231E",dlcrop:"\u230D",dollar:"$",dopf:"\u{1D555}",dot:"\u02D9",doteq:"\u2250",doteqdot:"\u2251",dotminus:"\u2238",dotplus:"\u2214",dotsquare:"\u22A1",doublebarwedge:"\u2306",downarrow:"\u2193",downdownarrows:"\u21CA",downharpoonleft:"\u21C3",downharpoonright:"\u21C2",drbkarow:"\u2910",drcorn:"\u231F",drcrop:"\u230C",dscr:"\u{1D4B9}",dscy:"\u0455",dsol:"\u29F6",dstrok:"\u0111",dtdot:"\u22F1",dtri:"\u25BF",dtrif:"\u25BE",duarr:"\u21F5",duhar:"\u296F",dwangle:"\u29A6",dzcy:"\u045F",dzigrarr:"\u27FF",eDDot:"\u2A77",eDot:"\u2251",eacute:"\xE9",easter:"\u2A6E",ecaron:"\u011B",ecir:"\u2256",ecirc:"\xEA",ecolon:"\u2255",ecy:"\u044D",edot:"\u0117",ee:"\u2147",efDot:"\u2252",efr:"\u{1D522}",eg:"\u2A9A",egrave:"\xE8",egs:"\u2A96",egsdot:"\u2A98",el:"\u2A99",elinters:"\u23E7",ell:"\u2113",els:"\u2A95",elsdot:"\u2A97",emacr:"\u0113",empty:"\u2205",emptyset:"\u2205",emptyv:"\u2205",emsp13:"\u2004",emsp14:"\u2005",emsp:"\u2003",eng:"\u014B",ensp:"\u2002",eogon:"\u0119",eopf:"\u{1D556}",epar:"\u22D5",eparsl:"\u29E3",eplus:"\u2A71",epsi:"\u03B5",epsilon:"\u03B5",epsiv:"\u03F5",eqcirc:"\u2256",eqcolon:"\u2255",eqsim:"\u2242",eqslantgtr:"\u2A96",eqslantless:"\u2A95",equals:"=",equest:"\u225F",equiv:"\u2261",equivDD:"\u2A78",eqvparsl:"\u29E5",erDot:"\u2253",erarr:"\u2971",escr:"\u212F",esdot:"\u2250",esim:"\u2242",eta:"\u03B7",eth:"\xF0",euml:"\xEB",euro:"\u20AC",excl:"!",exist:"\u2203",expectation:"\u2130",exponentiale:"\u2147",fallingdotseq:"\u2252",fcy:"\u0444",female:"\u2640",ffilig:"\uFB03",fflig:"\uFB00",ffllig:"\uFB04",ffr:"\u{1D523}",filig:"\uFB01",fjlig:"fj",flat:"\u266D",fllig:"\uFB02",fltns:"\u25B1",fnof:"\u0192",fopf:"\u{1D557}",forall:"\u2200",fork:"\u22D4",forkv:"\u2AD9",fpartint:"\u2A0D",frac12:"\xBD",frac13:"\u2153",frac14:"\xBC",frac15:"\u2155",frac16:"\u2159",frac18:"\u215B",frac23:"\u2154",frac25:"\u2156",frac34:"\xBE",frac35:"\u2157",frac38:"\u215C",frac45:"\u2158",frac56:"\u215A",frac58:"\u215D",frac78:"\u215E",frasl:"\u2044",frown:"\u2322",fscr:"\u{1D4BB}",gE:"\u2267",gEl:"\u2A8C",gacute:"\u01F5",gamma:"\u03B3",gammad:"\u03DD",gap:"\u2A86",gbreve:"\u011F",gcirc:"\u011D",gcy:"\u0433",gdot:"\u0121",ge:"\u2265",gel:"\u22DB",geq:"\u2265",geqq:"\u2267",geqslant:"\u2A7E",ges:"\u2A7E",gescc:"\u2AA9",gesdot:"\u2A80",gesdoto:"\u2A82",gesdotol:"\u2A84",gesl:"\u22DB\uFE00",gesles:"\u2A94",gfr:"\u{1D524}",gg:"\u226B",ggg:"\u22D9",gimel:"\u2137",gjcy:"\u0453",gl:"\u2277",glE:"\u2A92",gla:"\u2AA5",glj:"\u2AA4",gnE:"\u2269",gnap:"\u2A8A",gnapprox:"\u2A8A",gne:"\u2A88",gneq:"\u2A88",gneqq:"\u2269",gnsim:"\u22E7",gopf:"\u{1D558}",grave:"`",gscr:"\u210A",gsim:"\u2273",gsime:"\u2A8E",gsiml:"\u2A90",gt:">",gtcc:"\u2AA7",gtcir:"\u2A7A",gtdot:"\u22D7",gtlPar:"\u2995",gtquest:"\u2A7C",gtrapprox:"\u2A86",gtrarr:"\u2978",gtrdot:"\u22D7",gtreqless:"\u22DB",gtreqqless:"\u2A8C",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\uFE00",gvnE:"\u2269\uFE00",hArr:"\u21D4",hairsp:"\u200A",half:"\xBD",hamilt:"\u210B",hardcy:"\u044A",harr:"\u2194",harrcir:"\u2948",harrw:"\u21AD",hbar:"\u210F",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22B9",hfr:"\u{1D525}",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21FF",homtht:"\u223B",hookleftarrow:"\u21A9",hookrightarrow:"\u21AA",hopf:"\u{1D559}",horbar:"\u2015",hscr:"\u{1D4BD}",hslash:"\u210F",hstrok:"\u0127",hybull:"\u2043",hyphen:"\u2010",iacute:"\xED",ic:"\u2063",icirc:"\xEE",icy:"\u0438",iecy:"\u0435",iexcl:"\xA1",iff:"\u21D4",ifr:"\u{1D526}",igrave:"\xEC",ii:"\u2148",iiiint:"\u2A0C",iiint:"\u222D",iinfin:"\u29DC",iiota:"\u2129",ijlig:"\u0133",imacr:"\u012B",image:"\u2111",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",imof:"\u22B7",imped:"\u01B5",in:"\u2208",incare:"\u2105",infin:"\u221E",infintie:"\u29DD",inodot:"\u0131",int:"\u222B",intcal:"\u22BA",integers:"\u2124",intercal:"\u22BA",intlarhk:"\u2A17",intprod:"\u2A3C",iocy:"\u0451",iogon:"\u012F",iopf:"\u{1D55A}",iota:"\u03B9",iprod:"\u2A3C",iquest:"\xBF",iscr:"\u{1D4BE}",isin:"\u2208",isinE:"\u22F9",isindot:"\u22F5",isins:"\u22F4",isinsv:"\u22F3",isinv:"\u2208",it:"\u2062",itilde:"\u0129",iukcy:"\u0456",iuml:"\xEF",jcirc:"\u0135",jcy:"\u0439",jfr:"\u{1D527}",jmath:"\u0237",jopf:"\u{1D55B}",jscr:"\u{1D4BF}",jsercy:"\u0458",jukcy:"\u0454",kappa:"\u03BA",kappav:"\u03F0",kcedil:"\u0137",kcy:"\u043A",kfr:"\u{1D528}",kgreen:"\u0138",khcy:"\u0445",kjcy:"\u045C",kopf:"\u{1D55C}",kscr:"\u{1D4C0}",lAarr:"\u21DA",lArr:"\u21D0",lAtail:"\u291B",lBarr:"\u290E",lE:"\u2266",lEg:"\u2A8B",lHar:"\u2962",lacute:"\u013A",laemptyv:"\u29B4",lagran:"\u2112",lambda:"\u03BB",lang:"\u27E8",langd:"\u2991",langle:"\u27E8",lap:"\u2A85",laquo:"\xAB",larr:"\u2190",larrb:"\u21E4",larrbfs:"\u291F",larrfs:"\u291D",larrhk:"\u21A9",larrlp:"\u21AB",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21A2",lat:"\u2AAB",latail:"\u2919",late:"\u2AAD",lates:"\u2AAD\uFE00",lbarr:"\u290C",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298B",lbrksld:"\u298F",lbrkslu:"\u298D",lcaron:"\u013E",lcedil:"\u013C",lceil:"\u2308",lcub:"{",lcy:"\u043B",ldca:"\u2936",ldquo:"\u201C",ldquor:"\u201E",ldrdhar:"\u2967",ldrushar:"\u294B",ldsh:"\u21B2",le:"\u2264",leftarrow:"\u2190",leftarrowtail:"\u21A2",leftharpoondown:"\u21BD",leftharpoonup:"\u21BC",leftleftarrows:"\u21C7",leftrightarrow:"\u2194",leftrightarrows:"\u21C6",leftrightharpoons:"\u21CB",leftrightsquigarrow:"\u21AD",leftthreetimes:"\u22CB",leg:"\u22DA",leq:"\u2264",leqq:"\u2266",leqslant:"\u2A7D",les:"\u2A7D",lescc:"\u2AA8",lesdot:"\u2A7F",lesdoto:"\u2A81",lesdotor:"\u2A83",lesg:"\u22DA\uFE00",lesges:"\u2A93",lessapprox:"\u2A85",lessdot:"\u22D6",lesseqgtr:"\u22DA",lesseqqgtr:"\u2A8B",lessgtr:"\u2276",lesssim:"\u2272",lfisht:"\u297C",lfloor:"\u230A",lfr:"\u{1D529}",lg:"\u2276",lgE:"\u2A91",lhard:"\u21BD",lharu:"\u21BC",lharul:"\u296A",lhblk:"\u2584",ljcy:"\u0459",ll:"\u226A",llarr:"\u21C7",llcorner:"\u231E",llhard:"\u296B",lltri:"\u25FA",lmidot:"\u0140",lmoust:"\u23B0",lmoustache:"\u23B0",lnE:"\u2268",lnap:"\u2A89",lnapprox:"\u2A89",lne:"\u2A87",lneq:"\u2A87",lneqq:"\u2268",lnsim:"\u22E6",loang:"\u27EC",loarr:"\u21FD",lobrk:"\u27E6",longleftarrow:"\u27F5",longleftrightarrow:"\u27F7",longmapsto:"\u27FC",longrightarrow:"\u27F6",looparrowleft:"\u21AB",looparrowright:"\u21AC",lopar:"\u2985",lopf:"\u{1D55D}",loplus:"\u2A2D",lotimes:"\u2A34",lowast:"\u2217",lowbar:"_",loz:"\u25CA",lozenge:"\u25CA",lozf:"\u29EB",lpar:"(",lparlt:"\u2993",lrarr:"\u21C6",lrcorner:"\u231F",lrhar:"\u21CB",lrhard:"\u296D",lrm:"\u200E",lrtri:"\u22BF",lsaquo:"\u2039",lscr:"\u{1D4C1}",lsh:"\u21B0",lsim:"\u2272",lsime:"\u2A8D",lsimg:"\u2A8F",lsqb:"[",lsquo:"\u2018",lsquor:"\u201A",lstrok:"\u0142",lt:"<",ltcc:"\u2AA6",ltcir:"\u2A79",ltdot:"\u22D6",lthree:"\u22CB",ltimes:"\u22C9",ltlarr:"\u2976",ltquest:"\u2A7B",ltrPar:"\u2996",ltri:"\u25C3",ltrie:"\u22B4",ltrif:"\u25C2",lurdshar:"\u294A",luruhar:"\u2966",lvertneqq:"\u2268\uFE00",lvnE:"\u2268\uFE00",mDDot:"\u223A",macr:"\xAF",male:"\u2642",malt:"\u2720",maltese:"\u2720",map:"\u21A6",mapsto:"\u21A6",mapstodown:"\u21A7",mapstoleft:"\u21A4",mapstoup:"\u21A5",marker:"\u25AE",mcomma:"\u2A29",mcy:"\u043C",mdash:"\u2014",measuredangle:"\u2221",mfr:"\u{1D52A}",mho:"\u2127",micro:"\xB5",mid:"\u2223",midast:"*",midcir:"\u2AF0",middot:"\xB7",minus:"\u2212",minusb:"\u229F",minusd:"\u2238",minusdu:"\u2A2A",mlcp:"\u2ADB",mldr:"\u2026",mnplus:"\u2213",models:"\u22A7",mopf:"\u{1D55E}",mp:"\u2213",mscr:"\u{1D4C2}",mstpos:"\u223E",mu:"\u03BC",multimap:"\u22B8",mumap:"\u22B8",nGg:"\u22D9\u0338",nGt:"\u226B\u20D2",nGtv:"\u226B\u0338",nLeftarrow:"\u21CD",nLeftrightarrow:"\u21CE",nLl:"\u22D8\u0338",nLt:"\u226A\u20D2",nLtv:"\u226A\u0338",nRightarrow:"\u21CF",nVDash:"\u22AF",nVdash:"\u22AE",nabla:"\u2207",nacute:"\u0144",nang:"\u2220\u20D2",nap:"\u2249",napE:"\u2A70\u0338",napid:"\u224B\u0338",napos:"\u0149",napprox:"\u2249",natur:"\u266E",natural:"\u266E",naturals:"\u2115",nbsp:"\xA0",nbump:"\u224E\u0338",nbumpe:"\u224F\u0338",ncap:"\u2A43",ncaron:"\u0148",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2A6D\u0338",ncup:"\u2A42",ncy:"\u043D",ndash:"\u2013",ne:"\u2260",neArr:"\u21D7",nearhk:"\u2924",nearr:"\u2197",nearrow:"\u2197",nedot:"\u2250\u0338",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",nexist:"\u2204",nexists:"\u2204",nfr:"\u{1D52B}",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2A7E\u0338",nges:"\u2A7E\u0338",ngsim:"\u2275",ngt:"\u226F",ngtr:"\u226F",nhArr:"\u21CE",nharr:"\u21AE",nhpar:"\u2AF2",ni:"\u220B",nis:"\u22FC",nisd:"\u22FA",niv:"\u220B",njcy:"\u045A",nlArr:"\u21CD",nlE:"\u2266\u0338",nlarr:"\u219A",nldr:"\u2025",nle:"\u2270",nleftarrow:"\u219A",nleftrightarrow:"\u21AE",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2A7D\u0338",nles:"\u2A7D\u0338",nless:"\u226E",nlsim:"\u2274",nlt:"\u226E",nltri:"\u22EA",nltrie:"\u22EC",nmid:"\u2224",nopf:"\u{1D55F}",not:"\xAC",notin:"\u2209",notinE:"\u22F9\u0338",notindot:"\u22F5\u0338",notinva:"\u2209",notinvb:"\u22F7",notinvc:"\u22F6",notni:"\u220C",notniva:"\u220C",notnivb:"\u22FE",notnivc:"\u22FD",npar:"\u2226",nparallel:"\u2226",nparsl:"\u2AFD\u20E5",npart:"\u2202\u0338",npolint:"\u2A14",npr:"\u2280",nprcue:"\u22E0",npre:"\u2AAF\u0338",nprec:"\u2280",npreceq:"\u2AAF\u0338",nrArr:"\u21CF",nrarr:"\u219B",nrarrc:"\u2933\u0338",nrarrw:"\u219D\u0338",nrightarrow:"\u219B",nrtri:"\u22EB",nrtrie:"\u22ED",nsc:"\u2281",nsccue:"\u22E1",nsce:"\u2AB0\u0338",nscr:"\u{1D4C3}",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22E2",nsqsupe:"\u22E3",nsub:"\u2284",nsubE:"\u2AC5\u0338",nsube:"\u2288",nsubset:"\u2282\u20D2",nsubseteq:"\u2288",nsubseteqq:"\u2AC5\u0338",nsucc:"\u2281",nsucceq:"\u2AB0\u0338",nsup:"\u2285",nsupE:"\u2AC6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20D2",nsupseteq:"\u2289",nsupseteqq:"\u2AC6\u0338",ntgl:"\u2279",ntilde:"\xF1",ntlg:"\u2278",ntriangleleft:"\u22EA",ntrianglelefteq:"\u22EC",ntriangleright:"\u22EB",ntrianglerighteq:"\u22ED",nu:"\u03BD",num:"#",numero:"\u2116",numsp:"\u2007",nvDash:"\u22AD",nvHarr:"\u2904",nvap:"\u224D\u20D2",nvdash:"\u22AC",nvge:"\u2265\u20D2",nvgt:">\u20D2",nvinfin:"\u29DE",nvlArr:"\u2902",nvle:"\u2264\u20D2",nvlt:"<\u20D2",nvltrie:"\u22B4\u20D2",nvrArr:"\u2903",nvrtrie:"\u22B5\u20D2",nvsim:"\u223C\u20D2",nwArr:"\u21D6",nwarhk:"\u2923",nwarr:"\u2196",nwarrow:"\u2196",nwnear:"\u2927",oS:"\u24C8",oacute:"\xF3",oast:"\u229B",ocir:"\u229A",ocirc:"\xF4",ocy:"\u043E",odash:"\u229D",odblac:"\u0151",odiv:"\u2A38",odot:"\u2299",odsold:"\u29BC",oelig:"\u0153",ofcir:"\u29BF",ofr:"\u{1D52C}",ogon:"\u02DB",ograve:"\xF2",ogt:"\u29C1",ohbar:"\u29B5",ohm:"\u03A9",oint:"\u222E",olarr:"\u21BA",olcir:"\u29BE",olcross:"\u29BB",oline:"\u203E",olt:"\u29C0",omacr:"\u014D",omega:"\u03C9",omicron:"\u03BF",omid:"\u29B6",ominus:"\u2296",oopf:"\u{1D560}",opar:"\u29B7",operp:"\u29B9",oplus:"\u2295",or:"\u2228",orarr:"\u21BB",ord:"\u2A5D",order:"\u2134",orderof:"\u2134",ordf:"\xAA",ordm:"\xBA",origof:"\u22B6",oror:"\u2A56",orslope:"\u2A57",orv:"\u2A5B",oscr:"\u2134",oslash:"\xF8",osol:"\u2298",otilde:"\xF5",otimes:"\u2297",otimesas:"\u2A36",ouml:"\xF6",ovbar:"\u233D",par:"\u2225",para:"\xB6",parallel:"\u2225",parsim:"\u2AF3",parsl:"\u2AFD",part:"\u2202",pcy:"\u043F",percnt:"%",period:".",permil:"\u2030",perp:"\u22A5",pertenk:"\u2031",pfr:"\u{1D52D}",phi:"\u03C6",phiv:"\u03D5",phmmat:"\u2133",phone:"\u260E",pi:"\u03C0",pitchfork:"\u22D4",piv:"\u03D6",planck:"\u210F",planckh:"\u210E",plankv:"\u210F",plus:"+",plusacir:"\u2A23",plusb:"\u229E",pluscir:"\u2A22",plusdo:"\u2214",plusdu:"\u2A25",pluse:"\u2A72",plusmn:"\xB1",plussim:"\u2A26",plustwo:"\u2A27",pm:"\xB1",pointint:"\u2A15",popf:"\u{1D561}",pound:"\xA3",pr:"\u227A",prE:"\u2AB3",prap:"\u2AB7",prcue:"\u227C",pre:"\u2AAF",prec:"\u227A",precapprox:"\u2AB7",preccurlyeq:"\u227C",preceq:"\u2AAF",precnapprox:"\u2AB9",precneqq:"\u2AB5",precnsim:"\u22E8",precsim:"\u227E",prime:"\u2032",primes:"\u2119",prnE:"\u2AB5",prnap:"\u2AB9",prnsim:"\u22E8",prod:"\u220F",profalar:"\u232E",profline:"\u2312",profsurf:"\u2313",prop:"\u221D",propto:"\u221D",prsim:"\u227E",prurel:"\u22B0",pscr:"\u{1D4C5}",psi:"\u03C8",puncsp:"\u2008",qfr:"\u{1D52E}",qint:"\u2A0C",qopf:"\u{1D562}",qprime:"\u2057",qscr:"\u{1D4C6}",quaternions:"\u210D",quatint:"\u2A16",quest:"?",questeq:"\u225F",quot:'"',rAarr:"\u21DB",rArr:"\u21D2",rAtail:"\u291C",rBarr:"\u290F",rHar:"\u2964",race:"\u223D\u0331",racute:"\u0155",radic:"\u221A",raemptyv:"\u29B3",rang:"\u27E9",rangd:"\u2992",range:"\u29A5",rangle:"\u27E9",raquo:"\xBB",rarr:"\u2192",rarrap:"\u2975",rarrb:"\u21E5",rarrbfs:"\u2920",rarrc:"\u2933",rarrfs:"\u291E",rarrhk:"\u21AA",rarrlp:"\u21AC",rarrpl:"\u2945",rarrsim:"\u2974",rarrtl:"\u21A3",rarrw:"\u219D",ratail:"\u291A",ratio:"\u2236",rationals:"\u211A",rbarr:"\u290D",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298C",rbrksld:"\u298E",rbrkslu:"\u2990",rcaron:"\u0159",rcedil:"\u0157",rceil:"\u2309",rcub:"}",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201D",rdquor:"\u201D",rdsh:"\u21B3",real:"\u211C",realine:"\u211B",realpart:"\u211C",reals:"\u211D",rect:"\u25AD",reg:"\xAE",rfisht:"\u297D",rfloor:"\u230B",rfr:"\u{1D52F}",rhard:"\u21C1",rharu:"\u21C0",rharul:"\u296C",rho:"\u03C1",rhov:"\u03F1",rightarrow:"\u2192",rightarrowtail:"\u21A3",rightharpoondown:"\u21C1",rightharpoonup:"\u21C0",rightleftarrows:"\u21C4",rightleftharpoons:"\u21CC",rightrightarrows:"\u21C9",rightsquigarrow:"\u219D",rightthreetimes:"\u22CC",ring:"\u02DA",risingdotseq:"\u2253",rlarr:"\u21C4",rlhar:"\u21CC",rlm:"\u200F",rmoust:"\u23B1",rmoustache:"\u23B1",rnmid:"\u2AEE",roang:"\u27ED",roarr:"\u21FE",robrk:"\u27E7",ropar:"\u2986",ropf:"\u{1D563}",roplus:"\u2A2E",rotimes:"\u2A35",rpar:")",rpargt:"\u2994",rppolint:"\u2A12",rrarr:"\u21C9",rsaquo:"\u203A",rscr:"\u{1D4C7}",rsh:"\u21B1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22CC",rtimes:"\u22CA",rtri:"\u25B9",rtrie:"\u22B5",rtrif:"\u25B8",rtriltri:"\u29CE",ruluhar:"\u2968",rx:"\u211E",sacute:"\u015B",sbquo:"\u201A",sc:"\u227B",scE:"\u2AB4",scap:"\u2AB8",scaron:"\u0161",sccue:"\u227D",sce:"\u2AB0",scedil:"\u015F",scirc:"\u015D",scnE:"\u2AB6",scnap:"\u2ABA",scnsim:"\u22E9",scpolint:"\u2A13",scsim:"\u227F",scy:"\u0441",sdot:"\u22C5",sdotb:"\u22A1",sdote:"\u2A66",seArr:"\u21D8",searhk:"\u2925",searr:"\u2198",searrow:"\u2198",sect:"\xA7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",sfr:"\u{1D530}",sfrown:"\u2322",sharp:"\u266F",shchcy:"\u0449",shcy:"\u0448",shortmid:"\u2223",shortparallel:"\u2225",shy:"\xAD",sigma:"\u03C3",sigmaf:"\u03C2",sigmav:"\u03C2",sim:"\u223C",simdot:"\u2A6A",sime:"\u2243",simeq:"\u2243",simg:"\u2A9E",simgE:"\u2AA0",siml:"\u2A9D",simlE:"\u2A9F",simne:"\u2246",simplus:"\u2A24",simrarr:"\u2972",slarr:"\u2190",smallsetminus:"\u2216",smashp:"\u2A33",smeparsl:"\u29E4",smid:"\u2223",smile:"\u2323",smt:"\u2AAA",smte:"\u2AAC",smtes:"\u2AAC\uFE00",softcy:"\u044C",sol:"/",solb:"\u29C4",solbar:"\u233F",sopf:"\u{1D564}",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\uFE00",sqcup:"\u2294",sqcups:"\u2294\uFE00",sqsub:"\u228F",sqsube:"\u2291",sqsubset:"\u228F",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",squ:"\u25A1",square:"\u25A1",squarf:"\u25AA",squf:"\u25AA",srarr:"\u2192",sscr:"\u{1D4C8}",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22C6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03F5",straightphi:"\u03D5",strns:"\xAF",sub:"\u2282",subE:"\u2AC5",subdot:"\u2ABD",sube:"\u2286",subedot:"\u2AC3",submult:"\u2AC1",subnE:"\u2ACB",subne:"\u228A",subplus:"\u2ABF",subrarr:"\u2979",subset:"\u2282",subseteq:"\u2286",subseteqq:"\u2AC5",subsetneq:"\u228A",subsetneqq:"\u2ACB",subsim:"\u2AC7",subsub:"\u2AD5",subsup:"\u2AD3",succ:"\u227B",succapprox:"\u2AB8",succcurlyeq:"\u227D",succeq:"\u2AB0",succnapprox:"\u2ABA",succneqq:"\u2AB6",succnsim:"\u22E9",succsim:"\u227F",sum:"\u2211",sung:"\u266A",sup1:"\xB9",sup2:"\xB2",sup3:"\xB3",sup:"\u2283",supE:"\u2AC6",supdot:"\u2ABE",supdsub:"\u2AD8",supe:"\u2287",supedot:"\u2AC4",suphsol:"\u27C9",suphsub:"\u2AD7",suplarr:"\u297B",supmult:"\u2AC2",supnE:"\u2ACC",supne:"\u228B",supplus:"\u2AC0",supset:"\u2283",supseteq:"\u2287",supseteqq:"\u2AC6",supsetneq:"\u228B",supsetneqq:"\u2ACC",supsim:"\u2AC8",supsub:"\u2AD4",supsup:"\u2AD6",swArr:"\u21D9",swarhk:"\u2926",swarr:"\u2199",swarrow:"\u2199",swnwar:"\u292A",szlig:"\xDF",target:"\u2316",tau:"\u03C4",tbrk:"\u23B4",tcaron:"\u0165",tcedil:"\u0163",tcy:"\u0442",tdot:"\u20DB",telrec:"\u2315",tfr:"\u{1D531}",there4:"\u2234",therefore:"\u2234",theta:"\u03B8",thetasym:"\u03D1",thetav:"\u03D1",thickapprox:"\u2248",thicksim:"\u223C",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223C",thorn:"\xFE",tilde:"\u02DC",times:"\xD7",timesb:"\u22A0",timesbar:"\u2A31",timesd:"\u2A30",tint:"\u222D",toea:"\u2928",top:"\u22A4",topbot:"\u2336",topcir:"\u2AF1",topf:"\u{1D565}",topfork:"\u2ADA",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",triangle:"\u25B5",triangledown:"\u25BF",triangleleft:"\u25C3",trianglelefteq:"\u22B4",triangleq:"\u225C",triangleright:"\u25B9",trianglerighteq:"\u22B5",tridot:"\u25EC",trie:"\u225C",triminus:"\u2A3A",triplus:"\u2A39",trisb:"\u29CD",tritime:"\u2A3B",trpezium:"\u23E2",tscr:"\u{1D4C9}",tscy:"\u0446",tshcy:"\u045B",tstrok:"\u0167",twixt:"\u226C",twoheadleftarrow:"\u219E",twoheadrightarrow:"\u21A0",uArr:"\u21D1",uHar:"\u2963",uacute:"\xFA",uarr:"\u2191",ubrcy:"\u045E",ubreve:"\u016D",ucirc:"\xFB",ucy:"\u0443",udarr:"\u21C5",udblac:"\u0171",udhar:"\u296E",ufisht:"\u297E",ufr:"\u{1D532}",ugrave:"\xF9",uharl:"\u21BF",uharr:"\u21BE",uhblk:"\u2580",ulcorn:"\u231C",ulcorner:"\u231C",ulcrop:"\u230F",ultri:"\u25F8",umacr:"\u016B",uml:"\xA8",uogon:"\u0173",uopf:"\u{1D566}",uparrow:"\u2191",updownarrow:"\u2195",upharpoonleft:"\u21BF",upharpoonright:"\u21BE",uplus:"\u228E",upsi:"\u03C5",upsih:"\u03D2",upsilon:"\u03C5",upuparrows:"\u21C8",urcorn:"\u231D",urcorner:"\u231D",urcrop:"\u230E",uring:"\u016F",urtri:"\u25F9",uscr:"\u{1D4CA}",utdot:"\u22F0",utilde:"\u0169",utri:"\u25B5",utrif:"\u25B4",uuarr:"\u21C8",uuml:"\xFC",uwangle:"\u29A7",vArr:"\u21D5",vBar:"\u2AE8",vBarv:"\u2AE9",vDash:"\u22A8",vangrt:"\u299C",varepsilon:"\u03F5",varkappa:"\u03F0",varnothing:"\u2205",varphi:"\u03D5",varpi:"\u03D6",varpropto:"\u221D",varr:"\u2195",varrho:"\u03F1",varsigma:"\u03C2",varsubsetneq:"\u228A\uFE00",varsubsetneqq:"\u2ACB\uFE00",varsupsetneq:"\u228B\uFE00",varsupsetneqq:"\u2ACC\uFE00",vartheta:"\u03D1",vartriangleleft:"\u22B2",vartriangleright:"\u22B3",vcy:"\u0432",vdash:"\u22A2",vee:"\u2228",veebar:"\u22BB",veeeq:"\u225A",vellip:"\u22EE",verbar:"|",vert:"|",vfr:"\u{1D533}",vltri:"\u22B2",vnsub:"\u2282\u20D2",vnsup:"\u2283\u20D2",vopf:"\u{1D567}",vprop:"\u221D",vrtri:"\u22B3",vscr:"\u{1D4CB}",vsubnE:"\u2ACB\uFE00",vsubne:"\u228A\uFE00",vsupnE:"\u2ACC\uFE00",vsupne:"\u228B\uFE00",vzigzag:"\u299A",wcirc:"\u0175",wedbar:"\u2A5F",wedge:"\u2227",wedgeq:"\u2259",weierp:"\u2118",wfr:"\u{1D534}",wopf:"\u{1D568}",wp:"\u2118",wr:"\u2240",wreath:"\u2240",wscr:"\u{1D4CC}",xcap:"\u22C2",xcirc:"\u25EF",xcup:"\u22C3",xdtri:"\u25BD",xfr:"\u{1D535}",xhArr:"\u27FA",xharr:"\u27F7",xi:"\u03BE",xlArr:"\u27F8",xlarr:"\u27F5",xmap:"\u27FC",xnis:"\u22FB",xodot:"\u2A00",xopf:"\u{1D569}",xoplus:"\u2A01",xotime:"\u2A02",xrArr:"\u27F9",xrarr:"\u27F6",xscr:"\u{1D4CD}",xsqcup:"\u2A06",xuplus:"\u2A04",xutri:"\u25B3",xvee:"\u22C1",xwedge:"\u22C0",yacute:"\xFD",yacy:"\u044F",ycirc:"\u0177",ycy:"\u044B",yen:"\xA5",yfr:"\u{1D536}",yicy:"\u0457",yopf:"\u{1D56A}",yscr:"\u{1D4CE}",yucy:"\u044E",yuml:"\xFF",zacute:"\u017A",zcaron:"\u017E",zcy:"\u0437",zdot:"\u017C",zeetrf:"\u2128",zeta:"\u03B6",zfr:"\u{1D537}",zhcy:"\u0436",zigrarr:"\u21DD",zopf:"\u{1D56B}",zscr:"\u{1D4CF}",zwj:"\u200D",zwnj:"\u200C"};var wo={}.hasOwnProperty;function _e(e){return wo.call(Jt,e)?Jt[e]:!1}function Q(e,n,t,r){let i=e.length,a=0,o;if(n<0?n=-n>i?0:i+n:n=n>i?i:n,t=t>0?t:0,r.length<1e4)o=Array.from(r),o.unshift(n,t),e.splice(...o);else for(t&&e.splice(n,t);a0?(Q(e,e.length,0,n),e):n}var Tr={}.hasOwnProperty;function pt(e){let n={},t=-1;for(;++t13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||(t&65535)===65535||(t&65535)===65534||t>1114111?"\uFFFD":String.fromCodePoint(t)}function Z(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}var j=we(/[A-Za-z]/),G=we(/[\dA-Za-z]/),Ir=we(/[#-'*+\--9=?A-Z^-~]/);function Ce(e){return e!==null&&(e<32||e===127)}var $e=we(/\d/),Lr=we(/[\dA-Fa-f]/),mt=we(/[!-/:-@[-`{-~]/);function T(e){return e!==null&&e<-2}function B(e){return e!==null&&(e<0||e===32)}function z(e){return e===-2||e===-1||e===32}var be=we(new RegExp("\\p{P}|\\p{S}","u")),ue=we(/\s/);function we(e){return n;function n(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function q(e,n,t,r){let i=r?r-1:1/0,a=0;return o;function o(u){return z(u)?(e.enter(t),l(u)):n(u)}function l(u){return z(u)&&a++0&&z(c)?(e.enter(r),u(c)):s(c)}function u(c){return z(c)&&o=i?n(c):t(c)}}var zr={tokenize:Eo};function Eo(e){let n=e.attempt(this.parser.constructs.contentInitial,r,i),t;return n;function r(l){if(l===null){e.consume(l);return}return e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),q(e,n,"linePrefix")}function i(l){return e.enter("paragraph"),a(l)}function a(l){let u=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=u),t=u,o(l)}function o(l){if(l===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(l);return}return T(l)?(e.consume(l),e.exit("chunkText"),a):(e.consume(l),o)}}var de=class{constructor(){this.index=new Map,this.map=[]}add(n,t,r){qr(this,n,t,r,!1)}addBefore(n,t,r){qr(this,n,t,r,!0)}consume(n){if(this.map.sort(function(a,o){return a[0]-o[0]}),this.map.length===0)return;let t=this.map.length,r=[];for(;t>0;)t-=1,r.push(n.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),n.length=this.map[t][0];r.push(n.slice()),n.length=0;let i=r.pop();for(;i;){for(let a of i)n.push(a);i=r.pop()}this.map.length=0,this.index.clear()}};function qr(e,n,t,r,i){if(t===0&&r.length===0)return;let a=e.index.get(n);if(a){a[1]+=t,i?(r.push(...a[2]),a[2]=r):a[2].push(...r);return}let o=[n,t,r];e.map.push(o),e.index.set(n,o)}var Fr={tokenize:Ao},Dr={tokenize:Co};function Ao(e){let n=this,t=[],r=0,i,a,o;return l;function l(y){if(ro))return;let F=n.events.length,M=F,V,k;for(;M--;)if(n.events[M][0]==="exit"&&n.events[M][1].type==="chunkFlow"){if(V){k=n.events[M][1].end;break}V=!0}for(x(r),w=F;wy;){let v=t[I];n.containerState=v[1],v[0].exit.call(n,e)}t.length=y}function C(){i.write([null]),a=void 0,i=void 0,n.containerState._closeFlow=void 0}}function Co(e,n,t){return q(e,e.attempt(this.parser.constructs.document,n,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function re(e){if(e===null||B(e)||ue(e))return 1;if(be(e))return 2}function ye(e,n,t){let r=[],i=-1;for(;++i1&&e[t][1].end.offset-e[t][1].start.offset>1?2:1,o={...e[i][1].end},l={...e[t][1].start};vr(o,-a),vr(l,a);let u={type:a>1?"strongSequence":"emphasisSequence",start:o,end:{...e[i][1].end}},s={type:a>1?"strongSequence":"emphasisSequence",start:{...e[t][1].start},end:l},c={type:a>1?"strongText":"emphasisText",start:{...e[i][1].end},end:{...e[t][1].start}},f={type:a>1?"strong":"emphasis",start:{...u.start},end:{...s.end}};e[i][1].end={...u.start},e[t][1].start={...s.end},r=[],e[i][1].end.offset-e[i][1].start.offset&&(r=$(r,[["enter",e[i][1],n],["exit",e[i][1],n]])),r=$(r,[["enter",f,n],["enter",u,n],["exit",u,n],["enter",c,n]]),r=$(r,ye(n.parser.constructs.insideSpan.null,e.slice(i+1,t),n)),r=$(r,[["exit",c,n],["enter",s,n],["exit",s,n],["exit",f,n]]);let h=0;e[t][1].end.offset-e[t][1].start.offset&&(h=2,r=$(r,[["enter",e[t][1],n],["exit",e[t][1],n]])),Q(e,i-1,t-i+3,r),t=i+r.length-h-2;break}}for(t=-1;++t0&&z(w)?q(e,C,"linePrefix",a+1)(w):C(w)}function C(w){return w===null||T(w)?e.check(Xe,S,I)(w):(e.enter("codeFlowValue"),y(w))}function y(w){return w===null||T(w)?(e.exit("codeFlowValue"),C(w)):(e.consume(w),y)}function I(w){return e.exit("codeFenced"),n(w)}function v(w,F,M){let V=0;return k;function k(R){return w.enter("lineEnding"),w.consume(R),w.exit("lineEnding"),N}function N(R){return w.enter("codeFencedFence"),z(R)?q(w,O,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):O(R)}function O(R){return R===l?(w.enter("codeFencedFenceSequence"),L(R)):M(R)}function L(R){return R===l?(V++,w.consume(R),L):V>=o?(w.exit("codeFencedFenceSequence"),z(R)?q(w,_,"whitespace")(R):_(R)):M(R)}function _(R){return R===null||T(R)?(w.exit("codeFencedFence"),F(R)):M(R)}}}var et={name:"codeIndented",tokenize:Mo},_o={partial:!0,tokenize:No};function Mo(e,n,t){return r;function r(l){return e.enter("codeIndented"),Xt(e,i,t,"linePrefix",4,4)(l)}function i(l){return l===null?o(l):T(l)?e.attempt(_o,i,o)(l):(e.enter("codeFlowValue"),a(l))}function a(l){return l===null||T(l)?(e.exit("codeFlowValue"),i(l)):(e.consume(l),a)}function o(l){return e.exit("codeIndented"),n(l)}}function No(e,n,t){let r=this;return i;function i(o){return r.parser.lazy[r.now().line]?t(o):T(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),i):Xt(e,n,a,"linePrefix",4,4)(o)}function a(o){return T(o)?i(o):t(o)}}var tn={name:"codeText",previous:Ho,resolve:Oo,tokenize:Vo};function Oo(e){let n=e.length-4,t=3,r,i;if((e[t][1].type==="lineEnding"||e[t][1].type==="space")&&(e[n][1].type==="lineEnding"||e[n][1].type==="space")){for(r=t;++r=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+n+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return nthis.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-n+this.left.length).reverse():this.left.slice(n).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(n,t,r){let i=t||0;this.setCursor(Math.trunc(n));let a=this.right.splice(this.right.length-i,Number.POSITIVE_INFINITY);return r&&tt(this.left,r),a.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(n){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(n)}pushMany(n){this.setCursor(Number.POSITIVE_INFINITY),tt(this.left,n)}unshift(n){this.setCursor(0),this.right.push(n)}unshiftMany(n){this.setCursor(0),tt(this.right,n.reverse())}setCursor(n){if(!(n===this.left.length||n>this.left.length&&this.right.length===0||n<0&&this.left.length===0))if(n=4?n(o):e.interrupt(r.parser.constructs.flow,t,n)(o)}}function yt(e,n,t,r,i,a,o,l,u){let s=u||Number.POSITIVE_INFINITY,c=0;return f;function f(x){return x===60?(e.enter(r),e.enter(i),e.enter(a),e.consume(x),e.exit(a),h):x===null||x===32||x===41||Ce(x)?t(x):(e.enter(r),e.enter(o),e.enter(l),e.enter("chunkString",{contentType:"string"}),S(x))}function h(x){return x===62?(e.enter(a),e.consume(x),e.exit(a),e.exit(i),e.exit(r),n):(e.enter(l),e.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===62?(e.exit("chunkString"),e.exit(l),h(x)):x===null||x===60||T(x)?t(x):(e.consume(x),x===92?d:p)}function d(x){return x===60||x===62||x===92?(e.consume(x),p):p(x)}function S(x){return!c&&(x===null||x===41||B(x))?(e.exit("chunkString"),e.exit(l),e.exit(o),e.exit(r),n(x)):c999||p===null||p===91||p===93&&!u||p===94&&!l&&"_hiddenFootnoteSupport"in o.parser.constructs?t(p):p===93?(e.exit(a),e.enter(i),e.consume(p),e.exit(i),e.exit(r),n):T(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),c):(e.enter("chunkString",{contentType:"string"}),f(p))}function f(p){return p===null||p===91||p===93||T(p)||l++>999?(e.exit("chunkString"),c(p)):(e.consume(p),u||(u=!z(p)),p===92?h:f)}function h(p){return p===91||p===92||p===93?(e.consume(p),l++,f):f(p)}}function Et(e,n,t,r,i,a){let o;return l;function l(h){return h===34||h===39||h===40?(e.enter(r),e.enter(i),e.consume(h),e.exit(i),o=h===40?41:h,u):t(h)}function u(h){return h===o?(e.enter(i),e.consume(h),e.exit(i),e.exit(r),n):(e.enter(a),s(h))}function s(h){return h===o?(e.exit(a),u(o)):h===null?t(h):T(h)?(e.enter("lineEnding"),e.consume(h),e.exit("lineEnding"),q(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),c(h))}function c(h){return h===o||h===null||T(h)?(e.exit("chunkString"),s(h)):(e.consume(h),h===92?f:c)}function f(h){return h===o||h===92?(e.consume(h),c):c(h)}}function Te(e,n){let t;return r;function r(i){return T(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t=!0,r):z(i)?q(e,r,t?"linePrefix":"lineSuffix")(i):n(i)}}var rn={name:"definition",tokenize:Zo},Yo={partial:!0,tokenize:Ko};function Zo(e,n,t){let r=this,i;return a;function a(p){return e.enter("definition"),o(p)}function o(p){return St.call(r,e,l,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function l(p){return i=Z(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),u):t(p)}function u(p){return B(p)?Te(e,s)(p):s(p)}function s(p){return yt(e,c,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function c(p){return e.attempt(Yo,f,f)(p)}function f(p){return z(p)?q(e,h,"whitespace")(p):h(p)}function h(p){return p===null||T(p)?(e.exit("definition"),r.parser.defined.push(i),n(p)):t(p)}}function Ko(e,n,t){return r;function r(l){return B(l)?Te(e,i)(l):t(l)}function i(l){return Et(e,a,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(l)}function a(l){return z(l)?q(e,o,"whitespace")(l):o(l)}function o(l){return l===null||T(l)?n(l):t(l)}}var on={name:"hardBreakEscape",tokenize:$o};function $o(e,n,t){return r;function r(a){return e.enter("hardBreakEscape"),e.consume(a),i}function i(a){return T(a)?(e.exit("hardBreakEscape"),n(a)):t(a)}}var an={name:"headingAtx",resolve:Jo,tokenize:Xo};function Jo(e,n){let t=e.length-2,r=3;if(e[r][1].type==="whitespace"&&(r+=2),t-2>r&&e[t][1].type==="whitespace"&&(t-=2),e[t][1].type==="atxHeadingSequence"&&(r===t-1||t-4>r&&e[t-2][1].type==="whitespace")&&(t-=r+1===t?2:4),t>r){let i={type:"atxHeadingText",start:e[r][1].start,end:e[t][1].end},a={type:"chunkText",start:e[r][1].start,end:e[t][1].end,contentType:"text"};Q(e,r,t-r+1,[["enter",i,n],["enter",a,n],["exit",a,n],["exit",i,n]])}return e}function Xo(e,n,t){let r=0;return i;function i(c){return e.enter("atxHeading"),a(c)}function a(c){return e.enter("atxHeadingSequence"),o(c)}function o(c){return c===35&&r++<6?(e.consume(c),o):c===null||B(c)?(e.exit("atxHeadingSequence"),l(c)):t(c)}function l(c){return c===35?(e.enter("atxHeadingSequence"),u(c)):c===null||T(c)?(e.exit("atxHeading"),n(c)):z(c)?q(e,l,"whitespace")(c):(e.enter("atxHeadingText"),s(c))}function u(c){return c===35?(e.consume(c),u):(e.exit("atxHeadingSequence"),l(c))}function s(c){return c===null||c===35||B(c)?(e.exit("atxHeadingText"),l(c)):(e.consume(c),s)}}var At=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],nt=["pre","script","style","textarea"];var ln={concrete:!0,name:"htmlFlow",resolveTo:ta,tokenize:na},ea={partial:!0,tokenize:ra};function ta(e){let n=e.length;for(;n--&&!(e[n][0]==="enter"&&e[n][1].type==="htmlFlow"););return n>1&&e[n-2][1].type==="linePrefix"&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2)),e}function na(e,n,t){let r=this,i,a,o,l,u;return s;function s(g){return c(g)}function c(g){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(g),f}function f(g){return g===33?(e.consume(g),h):g===47?(e.consume(g),a=!0,S):g===63?(e.consume(g),i=3,r.interrupt?n:m):j(g)?(e.consume(g),o=String.fromCharCode(g),E):t(g)}function h(g){return g===45?(e.consume(g),i=2,p):g===91?(e.consume(g),i=5,l=0,d):j(g)?(e.consume(g),i=4,r.interrupt?n:m):t(g)}function p(g){return g===45?(e.consume(g),r.interrupt?n:m):t(g)}function d(g){let ee="CDATA[";return g===ee.charCodeAt(l++)?(e.consume(g),l===ee.length?r.interrupt?n:O:d):t(g)}function S(g){return j(g)?(e.consume(g),o=String.fromCharCode(g),E):t(g)}function E(g){if(g===null||g===47||g===62||B(g)){let ee=g===47,Fe=o.toLowerCase();return!ee&&!a&&nt.includes(Fe)?(i=1,r.interrupt?n(g):O(g)):At.includes(o.toLowerCase())?(i=6,ee?(e.consume(g),x):r.interrupt?n(g):O(g)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?t(g):a?C(g):y(g))}return g===45||G(g)?(e.consume(g),o+=String.fromCharCode(g),E):t(g)}function x(g){return g===62?(e.consume(g),r.interrupt?n:O):t(g)}function C(g){return z(g)?(e.consume(g),C):k(g)}function y(g){return g===47?(e.consume(g),k):g===58||g===95||j(g)?(e.consume(g),I):z(g)?(e.consume(g),y):k(g)}function I(g){return g===45||g===46||g===58||g===95||G(g)?(e.consume(g),I):v(g)}function v(g){return g===61?(e.consume(g),w):z(g)?(e.consume(g),v):y(g)}function w(g){return g===null||g===60||g===61||g===62||g===96?t(g):g===34||g===39?(e.consume(g),u=g,F):z(g)?(e.consume(g),w):M(g)}function F(g){return g===u?(e.consume(g),u=null,V):g===null||T(g)?t(g):(e.consume(g),F)}function M(g){return g===null||g===34||g===39||g===47||g===60||g===61||g===62||g===96||B(g)?v(g):(e.consume(g),M)}function V(g){return g===47||g===62||z(g)?y(g):t(g)}function k(g){return g===62?(e.consume(g),N):t(g)}function N(g){return g===null||T(g)?O(g):z(g)?(e.consume(g),N):t(g)}function O(g){return g===45&&i===2?(e.consume(g),U):g===60&&i===1?(e.consume(g),W):g===62&&i===4?(e.consume(g),ne):g===63&&i===3?(e.consume(g),m):g===93&&i===5?(e.consume(g),ae):T(g)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(ea,pe,L)(g)):g===null||T(g)?(e.exit("htmlFlowData"),L(g)):(e.consume(g),O)}function L(g){return e.check(Xe,_,pe)(g)}function _(g){return e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),R}function R(g){return g===null||T(g)?L(g):(e.enter("htmlFlowData"),O(g))}function U(g){return g===45?(e.consume(g),m):O(g)}function W(g){return g===47?(e.consume(g),o="",ie):O(g)}function ie(g){if(g===62){let ee=o.toLowerCase();return nt.includes(ee)?(e.consume(g),ne):O(g)}return j(g)&&o.length<8?(e.consume(g),o+=String.fromCharCode(g),ie):O(g)}function ae(g){return g===93?(e.consume(g),m):O(g)}function m(g){return g===62?(e.consume(g),ne):g===45&&i===2?(e.consume(g),m):O(g)}function ne(g){return g===null||T(g)?(e.exit("htmlFlowData"),pe(g)):(e.consume(g),ne)}function pe(g){return e.exit("htmlFlow"),n(g)}}function ra(e,n,t){return r;function r(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(se,n,t)}}var un={name:"htmlText",tokenize:ia};function ia(e,n,t){let r=this,i,a,o;return l;function l(m){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(m),u}function u(m){return m===33?(e.consume(m),s):m===47?(e.consume(m),v):m===63?(e.consume(m),y):j(m)?(e.consume(m),M):t(m)}function s(m){return m===45?(e.consume(m),c):m===91?(e.consume(m),a=0,d):j(m)?(e.consume(m),C):t(m)}function c(m){return m===45?(e.consume(m),p):t(m)}function f(m){return m===null?t(m):m===45?(e.consume(m),h):T(m)?(o=f,W(m)):(e.consume(m),f)}function h(m){return m===45?(e.consume(m),p):f(m)}function p(m){return m===62?U(m):m===45?h(m):f(m)}function d(m){let ne="CDATA[";return m===ne.charCodeAt(a++)?(e.consume(m),a===ne.length?S:d):t(m)}function S(m){return m===null?t(m):m===93?(e.consume(m),E):T(m)?(o=S,W(m)):(e.consume(m),S)}function E(m){return m===93?(e.consume(m),x):S(m)}function x(m){return m===62?U(m):m===93?(e.consume(m),x):S(m)}function C(m){return m===null||m===62?U(m):T(m)?(o=C,W(m)):(e.consume(m),C)}function y(m){return m===null?t(m):m===63?(e.consume(m),I):T(m)?(o=y,W(m)):(e.consume(m),y)}function I(m){return m===62?U(m):y(m)}function v(m){return j(m)?(e.consume(m),w):t(m)}function w(m){return m===45||G(m)?(e.consume(m),w):F(m)}function F(m){return T(m)?(o=F,W(m)):z(m)?(e.consume(m),F):U(m)}function M(m){return m===45||G(m)?(e.consume(m),M):m===47||m===62||B(m)?V(m):t(m)}function V(m){return m===47?(e.consume(m),U):m===58||m===95||j(m)?(e.consume(m),k):T(m)?(o=V,W(m)):z(m)?(e.consume(m),V):U(m)}function k(m){return m===45||m===46||m===58||m===95||G(m)?(e.consume(m),k):N(m)}function N(m){return m===61?(e.consume(m),O):T(m)?(o=N,W(m)):z(m)?(e.consume(m),N):V(m)}function O(m){return m===null||m===60||m===61||m===62||m===96?t(m):m===34||m===39?(e.consume(m),i=m,L):T(m)?(o=O,W(m)):z(m)?(e.consume(m),O):(e.consume(m),_)}function L(m){return m===i?(e.consume(m),i=void 0,R):m===null?t(m):T(m)?(o=L,W(m)):(e.consume(m),L)}function _(m){return m===null||m===34||m===39||m===60||m===61||m===96?t(m):m===47||m===62||B(m)?V(m):(e.consume(m),_)}function R(m){return m===47||m===62||B(m)?V(m):t(m)}function U(m){return m===62?(e.consume(m),e.exit("htmlTextData"),e.exit("htmlText"),n):t(m)}function W(m){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),ie}function ie(m){return z(m)?q(e,ae,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(m):ae(m)}function ae(m){return e.enter("htmlTextData"),o(m)}}var Ie={name:"labelEnd",resolveAll:ua,resolveTo:sa,tokenize:ca},oa={tokenize:fa},aa={tokenize:pa},la={tokenize:ha};function ua(e){let n=-1,t=[];for(;++n0&&i[i.length-1]._balanced;)i.pop();a=i[i.length-1]}return l;function l(h){return a?a._inactive?f(h):(o=r.parser.defined.includes(Z(r.sliceSerialize({start:a.end,end:r.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(h),e.exit("labelMarker"),e.exit("labelEnd"),u):t(h)}function u(h){return h===40?e.attempt(oa,c,o?c:f)(h):h===91?e.attempt(aa,c,o?s:f)(h):o?c(h):f(h)}function s(h){return e.attempt(la,c,f)(h)}function c(h){return i.pop(),n(h)}function f(h){return a._balanced=!0,t(h)}}function fa(e,n,t){return r;function r(f){return e.enter("resource"),e.enter("resourceMarker"),e.consume(f),e.exit("resourceMarker"),i}function i(f){return B(f)?Te(e,a)(f):a(f)}function a(f){return f===41?c(f):yt(e,o,l,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(f)}function o(f){return B(f)?Te(e,u)(f):c(f)}function l(f){return t(f)}function u(f){return f===34||f===39||f===40?Et(e,s,t,"resourceTitle","resourceTitleMarker","resourceTitleString")(f):c(f)}function s(f){return B(f)?Te(e,c)(f):c(f)}function c(f){return f===41?(e.enter("resourceMarker"),e.consume(f),e.exit("resourceMarker"),e.exit("resource"),n):t(f)}}function pa(e,n,t){let r=this;return i;function i(l){return St.call(r,e,a,o,"reference","referenceMarker","referenceString")(l)}function a(l){return r.parser.defined.includes(Z(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?n(l):t(l)}function o(l){return t(l)}}function ha(e,n,t){return r;function r(a){return e.enter("reference"),e.enter("referenceMarker"),e.consume(a),e.exit("referenceMarker"),i}function i(a){return a===93?(e.enter("referenceMarker"),e.consume(a),e.exit("referenceMarker"),e.exit("reference"),n):t(a)}}var sn={name:"labelStartImage",resolveAll:Ie.resolveAll,tokenize:ma};function ma(e,n,t){let r=this,i;return a;function a(u){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(u),e.exit("labelImageMarker"),o}function o(u){return u===91?(e.enter("labelMarker"),e.consume(u),e.exit("labelMarker"),i=e.exit("labelImage"),l):t(u)}function l(u){return u===94&&"_hiddenFootnoteSupport"in r.parser.constructs?t(u):(r._labelStarts=r._labelStarts||[],r._labelStarts.push(i),n(u))}}var cn={name:"labelStartLink",resolveAll:Ie.resolveAll,tokenize:ga};function ga(e,n,t){let r=this,i;return a;function a(l){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(l),e.exit("labelMarker"),i=e.exit("labelLink"),o}function o(l){return l===94&&"_hiddenFootnoteSupport"in r.parser.constructs?t(l):(r._labelStarts=r._labelStarts||[],r._labelStarts.push(i),n(l))}}var rt={name:"lineEnding",tokenize:da};function da(e,n){return t;function t(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),q(e,n,"linePrefix")}}var Le={name:"thematicBreak",tokenize:xa};function xa(e,n,t){let r=0,i;return a;function a(s){return e.enter("thematicBreak"),o(s)}function o(s){return i=s,l(s)}function l(s){return s===i?(e.enter("thematicBreakSequence"),u(s)):r>=3&&(s===null||T(s))?(e.exit("thematicBreak"),n(s)):t(s)}function u(s){return s===i?(e.consume(s),r++,u):(e.exit("thematicBreakSequence"),z(s)?q(e,l,"whitespace")(s):l(s))}}var K={continuation:{tokenize:ya},exit:Ea,name:"list",tokenize:wa},ka={partial:!0,tokenize:Aa},ba={partial:!0,tokenize:Sa};function wa(e,n,t){let r=this,i=r.events[r.events.length-1],a=i&&i[1].type==="linePrefix"?i[2].sliceSerialize(i[1],!0).length:0,o=0;return l;function l(p){let d=r.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(d==="listUnordered"?!r.containerState.marker||p===r.containerState.marker:$e(p)){if(r.containerState.type||(r.containerState.type=d,e.enter(d,{_container:!0})),d==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Le,t,s)(p):s(p);if(!r.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),u(p)}return t(p)}function u(p){return $e(p)&&++o<10?(e.consume(p),u):(!r.interrupt||o<2)&&(r.containerState.marker?p===r.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),s(p)):t(p)}function s(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||p,e.check(se,r.interrupt?t:c,e.attempt(ka,h,f))}function c(p){return r.containerState.initialBlankLine=!0,a++,h(p)}function f(p){return z(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),h):t(p)}function h(p){return r.containerState.size=a+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(p)}}function ya(e,n,t){let r=this;return r.containerState._closeFlow=void 0,e.check(se,i,a);function i(l){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,q(e,n,"listItemIndent",r.containerState.size+1)(l)}function a(l){return r.containerState.furtherBlankLines||!z(l)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(l)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(ba,n,o)(l))}function o(l){return r.containerState._closeFlow=!0,r.interrupt=void 0,q(e,e.attempt(K,n,t),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(l)}}function Sa(e,n,t){let r=this;return q(e,i,"listItemIndent",r.containerState.size+1);function i(a){let o=r.events[r.events.length-1];return o&&o[1].type==="listItemIndent"&&o[2].sliceSerialize(o[1],!0).length===r.containerState.size?n(a):t(a)}}function Ea(e){e.exit(this.containerState.type)}function Aa(e,n,t){let r=this;return q(e,i,"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function i(a){let o=r.events[r.events.length-1];return!z(a)&&o&&o[1].type==="listItemPrefixWhitespace"?n(a):t(a)}}var Ct={name:"setextUnderline",resolveTo:Ca,tokenize:Ta};function Ca(e,n){let t=new de,r=e.length,i,a,o;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){i=r;break}e[r][1].type==="paragraph"&&(a=r)}else e[r][1].type==="content"&&t.add(r,1,[]),!o&&e[r][1].type==="definition"&&(o=r);let l={type:"setextHeading",start:{...e[i][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",o?(t.add(a,0,[["enter",l,n]]),t.add(o+1,0,[["exit",e[i][1],n]]),e[i][1].end={...e[o][1].end}):e[i][1]=l,t.add(e.length,0,[["exit",l,n]]),t.consume(e),e}function Ta(e,n,t){let r=this,i;return a;function a(s){let c=r.events.length,f;for(;c--;)if(r.events[c][1].type!=="lineEnding"&&r.events[c][1].type!=="linePrefix"&&r.events[c][1].type!=="content"){f=r.events[c][1].type==="paragraph";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||f)?(e.enter("setextHeadingLine"),i=s,o(s)):t(s)}function o(s){return e.enter("setextHeadingLineSequence"),l(s)}function l(s){return s===i?(e.consume(s),l):(e.exit("setextHeadingLineSequence"),z(s)?q(e,u,"lineSuffix")(s):u(s))}function u(s){return s===null||T(s)?(e.exit("setextHeadingLine"),n(s)):t(s)}}var Pr={tokenize:Ia};function Ia(e){let n=this,t=e.attempt(se,r,e.attempt(this.parser.constructs.flowInitial,i,q(e,e.attempt(this.parser.constructs.flow,i,e.attempt(nn,i)),"linePrefix")));return t;function r(a){if(a===null){e.consume(a);return}return e.enter("lineEndingBlank"),e.consume(a),e.exit("lineEndingBlank"),n.currentConstruct=void 0,t}function i(a){if(a===null){e.consume(a);return}return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),n.currentConstruct=void 0,t}}var Rr={resolveAll:Nr()},Br=Mr("string"),_r=Mr("text");function Mr(e){return{resolveAll:Nr(e==="text"?La:void 0),tokenize:n};function n(t){let r=this,i=this.parser.constructs[e],a=t.attempt(i,o,l);return o;function o(c){return s(c)?a(c):l(c)}function l(c){if(c===null){t.consume(c);return}return t.enter("data"),t.consume(c),u}function u(c){return s(c)?(t.exit("data"),a(c)):(t.consume(c),u)}function s(c){if(c===null)return!0;let f=i[c],h=-1;if(f)for(;++hBa,contentInitial:()=>qa,disable:()=>_a,document:()=>za,flow:()=>Fa,flowInitial:()=>Da,insideSpan:()=>Ra,string:()=>va,text:()=>Pa});var za={42:K,43:K,45:K,48:K,49:K,50:K,51:K,52:K,53:K,54:K,55:K,56:K,57:K,62:gt},qa={91:rn},Da={[-2]:et,[-1]:et,32:et},Fa={35:an,42:Le,45:[Ct,Le],60:ln,61:Ct,95:Le,96:kt,126:kt},va={38:xt,92:dt},Pa={[-5]:rt,[-4]:rt,[-3]:rt,33:sn,38:xt,42:Je,60:[en,un],91:cn,92:[on,dt],93:Ie,95:Je,96:tn},Ra={null:[Je,Rr]},Ba={null:[42,95]},_a={null:[]};function Or(e,n,t){let r={_bufferIndex:-1,_index:0,line:t&&t.line||1,column:t&&t.column||1,offset:t&&t.offset||0},i={},a=[],o=[],l=[],u=!0,s={attempt:V(F),check:V(M),consume:I,enter:v,exit:w,interrupt:V(M,{interrupt:!0})},c={code:null,containerState:{},defineSkip:x,events:[],now:E,parser:e,previous:null,sliceSerialize:d,sliceStream:S,write:p},f=n.tokenize.call(c,s),h;return n.resolveAll&&a.push(n),c;function p(L){return o=$(o,L),C(),o[o.length-1]!==null?[]:(k(n,0),c.events=ye(a,c.events,c),c.events)}function d(L,_){return Na(S(L),_)}function S(L){return Ma(o,L)}function E(){let{_bufferIndex:L,_index:_,line:R,column:U,offset:W}=r;return{_bufferIndex:L,_index:_,line:R,column:U,offset:W}}function x(L){i[L.line]=L.column,O()}function C(){for(;r._index-1){let l=o[0];typeof l=="string"?o[0]=l.slice(r):o.shift()}a>0&&o.push(e[i].slice(0,a))}return o}function Na(e,n){let t=-1,r=[],i;for(;++t0&&i(n.beforeEnter,{...D,sliceSerialize:b[H][2].sliceSerialize},b[H][1]),jr.call(X,b[H][1].type)&&X[b[H][1].type].call({...D,sliceSerialize:b[H][2].sliceSerialize},b[H][1]),b[H][0]==="exit"&&n.afterExit.length>0&&i(n.afterExit,{...D,sliceSerialize:b[H][2].sliceSerialize},b[H][1])}if(D.tokenStack.length>0){let X=D.tokenStack[D.tokenStack.length-1];(X[1]||Ur).call(D,void 0,X[0])}for(A.position={start:Se(b.length>0?b[0][1].start:{line:1,column:1,offset:0}),end:Se(b.length>0?b[b.length-2][1].end:{line:1,column:1,offset:0})},H=-1;++H":""))+")"})}return E;function E(){let x=!a||s(h,p,d[d.length-1]||void 0),C=Qr;if(l&&x&&(C=Wr(l(h,d,p)),C[0]===ce))return C;if("children"in h&&h.children){let y=h;if(y.children&&C[0]!==ze){let I=(i?-1:y.children.length)+c,v=[...d,y];for(;I>-1&&I0?{type:"text",value:w}:void 0),w===!1)p.lastIndex=I+1;else{if(S!==I&&y({type:"text",value:s.value.slice(S,I)}),Array.isArray(w))for(let F of w)y(F);else w&&y(w);S=I+C[0].length,E=!0}if(!p.global)break;C=p.exec(s.value)}return E?(S0;){let o=e.charCodeAt(n-1);if(o===33||o===34||o===38||o===39||o===41||o===44||o===46||o===58||o===59||o===60||o===62||o===63||o===93||o===125)n--;else break}if(n===e.length)return[e,void 0];let t=e.slice(n);e=e.slice(0,n);let r=t.indexOf(")"),i=dn(e,"("),a=dn(e,")");for(;r!==-1&&i>a;)e+=t.slice(0,r+1),t=t.slice(r+1),r=t.indexOf(")"),a++;return[e,t]}function cl(e){let n=e.input.charCodeAt(e.index-1);return e.index===0||ue(n)||be(n)}Yr.peek=bl;function fl(){this.buffer()}function pl(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function hl(){this.buffer()}function ml(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function gl(e){let n=this.resume(),t=this.stack[this.stack.length-1];t.type,t.identifier=Z(this.sliceSerialize(e)).toLowerCase(),t.label=n}function dl(e){this.exit(e)}function xl(e){let n=this.resume(),t=this.stack[this.stack.length-1];t.type,t.identifier=Z(this.sliceSerialize(e)).toLowerCase(),t.label=n}function kl(e){this.exit(e)}function bl(){return"["}function Yr(e,n,t,r){let i=t.createTracker(r),a=i.move("[^"),o=t.enter("footnoteReference"),l=t.enter("reference");return a+=i.move(t.safe(t.associationId(e),{after:"]",before:a})),l(),o(),a+=i.move("]"),a}function An(){return{enter:{gfmFootnoteCallString:fl,gfmFootnoteCall:pl,gfmFootnoteDefinitionLabelString:hl,gfmFootnoteDefinition:ml},exit:{gfmFootnoteCallString:gl,gfmFootnoteCall:dl,gfmFootnoteDefinitionLabelString:xl,gfmFootnoteDefinition:kl}}}function Cn(e){let n=!1;return e&&e.firstLineBlank&&(n=!0),{handlers:{footnoteDefinition:t,footnoteReference:Yr},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function t(r,i,a,o){let l=a.createTracker(o),u=l.move("[^"),s=a.enter("footnoteDefinition"),c=a.enter("label");return u+=l.move(a.safe(a.associationId(r),{before:u,after:"]"})),c(),u+=l.move("]:"),r.children&&r.children.length>0&&(l.shift(4),u+=l.move((n?` +`:" ")+a.indentLines(a.containerFlow(r,l.current()),n?Zr:wl))),s(),u}}function wl(e,n,t){return n===0?e:Zr(e,n,t)}function Zr(e,n,t){return(t?"":" ")+e}var yl=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Ln.attention=Al;Ln.peek=Cl;function Tn(){return{canContainEols:["delete"],enter:{strikethrough:Sl},exit:{strikethrough:El}}}function In(){return{handlers:{delete:Ln},unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:yl}]}}function Sl(e){this.enter({type:"delete",children:[],position:void 0},e)}function El(e){this.exit(e)}function Ln(e,n,t,r){let i=t.createTracker(r),a=t.stack.includes("strikethrough")?"~":"~~",o=t.enter("strikethrough"),l=i.move(a);return l+=t.containerPhrasing(e,{...i.current(),before:l,after:"~"}),l+=i.move(a),o(),l}function Al(){return{construct:"strikethrough",markers:["~"],sizes:[2,1]}}function Cl(){return"~"}function Tl(e){return e.length}function $r(e,n){let t=n||{},r=(t.align||[]).concat(),i=t.stringLength||Tl,a=[],o=[],l=[],u=[],s=0,c=-1;for(;++cs&&(s=e[c].length);++xu[x])&&(u[x]=y)}S.push(C)}o[c]=S,l[c]=E}let f=-1;if(typeof r=="object"&&"length"in r)for(;++fu[f]&&(u[f]=C),p[f]=C),h[f]=y}o.splice(1,0,h),l.splice(1,0,p),c=-1;let d=[];for(;++c "),a.shift(2);let o=t.indentLines(t.containerFlow(e,a.current()),Ll);return i(),o}function Ll(e,n,t){return">"+(t?"":" ")+e}function ei(e,n){return Xr(e,n.inConstruct,!0)&&!Xr(e,n.notInConstruct,!1)}function Xr(e,n,t){if(typeof n=="string"&&(n=[n]),!n||n.length===0)return t;let r=-1;for(;++ro&&(o=a):a=1,i=r+n.length,r=t.indexOf(n,i);return o}function ni(e,n){return!!(n.options.fences===!1&&e.value&&!e.lang&&/[^\n\r ]/.test(e.value)&&!/^[\t ]*(?:[\n\r]|$)|(?:^|[\n\r])[\t ]*$/.test(e.value))}function ri(e){let n=e.options.fence||"`";if(n!=="`"&&n!=="~")throw new Error("Cannot serialize code with `"+n+"` for `options.fence`, expected `` ` `` or `~`");return n}function ii(e,n,t,r){let i=ri(t),a=e.value||"";if(ni(e,t)){let f=t.enter("codeIndented"),h=t.indentLines(a,zl);return f(),h}let o=t.createTracker(r),l=i.repeat(Math.max(ti(a,i)+1,3)),u=t.enter("codeFenced"),s=i==="`"?"GraveAccent":"Tilde",c=o.move(l);if(e.lang){let f=t.enter(`codeFencedLang${s}`);c+=o.move(t.safe(e.lang,{before:c,after:" ",encode:["`"],...o.current()})),f()}if(e.lang&&e.meta){let f=t.enter(`codeFencedMeta${s}`);c+=o.move(" "),c+=o.move(t.safe(e.meta,{before:c,after:` +`,encode:["`"],...o.current()})),f()}return c+=o.move(` +`),a&&(c+=o.move(a+` +`)),c+=o.move(l),u(),c}function zl(e,n,t){return(t?"":" ")+e}function Ne(e){let n=e.options.quote||'"';if(n!=='"'&&n!=="'")throw new Error("Cannot serialize title with `"+n+"` for `options.quote`, expected `\"`, or `'`");return n}function oi(e,n,t,r){let i=Ne(t),a=i==='"'?"Quote":"Apostrophe",o=t.enter("definition"),l=t.enter("label"),u=t.createTracker(r),s=u.move("[");return s+=u.move(t.safe(t.associationId(e),{before:s,after:"]",...u.current()})),s+=u.move("]: "),l(),!e.url||/[\0- \u007F]/.test(e.url)?(l=t.enter("destinationLiteral"),s+=u.move("<"),s+=u.move(t.safe(e.url,{before:s,after:">",...u.current()})),s+=u.move(">")):(l=t.enter("destinationRaw"),s+=u.move(t.safe(e.url,{before:s,after:e.title?" ":` +`,...u.current()}))),l(),e.title&&(l=t.enter(`title${a}`),s+=u.move(" "+i),s+=u.move(t.safe(e.title,{before:s,after:i,...u.current()})),s+=u.move(i),l()),o(),s}function ai(e){let n=e.options.emphasis||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize emphasis with `"+n+"` for `options.emphasis`, expected `*`, or `_`");return n}function it(e){let n=e.codePointAt(0);return n===void 0?"":String.fromCodePoint(n)}function qe(e){let n=e.codePointAt(e.length-2);return n!==void 0&&n>65535?e.slice(-2):e.slice(-1)}function zt(e){return"&#x"+e.toString(16).toUpperCase()+";"}function Dn(e,n,t){let r=re(e),i=re(n);return r===void 0?i===void 0?t==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}function li(e){if(e.charCodeAt(0)!==60)return;let n=e.charCodeAt(1);if(n===33){let l=e.charCodeAt(2);return l===45?2:l===91?5:j(l)?4:void 0}if(n===63)return 3;let t=n===47,r=t?2:1,i=r,a=e.charCodeAt(i);if(!j(a))return;for(;a===45||G(a);)a=e.charCodeAt(++i);let o=e.slice(r,i).toLowerCase();return!t&&a!==47&&nt.includes(o)?1:At.includes(o)?6:7}var si=new Map([["*",!1],["_",!0]]);function ql(e,n,t){let r=new Set;for(let a of e){let o=t.get(a);if(o&&a.attention&&n.some(l=>l.attention===a.attention))for(let l of o.tokens)r.add(l.attention)}let i=[];for(let a of e)a.attention&&r.delete(a.attention)&&i.push(a.attention);return i.reverse(),i}function ci(e,n,t){let r=[],i=new Map,a=new Map,o=0;for(;ot.index)return{chosen:u,mistake:c,tokens:s}}}}function Fl(e,n){let t=new Map;for(let r of e){let i=r.tokens[0].value.charAt(0),a=t.get(i);a||(a=[],t.set(i,a));let o=r.close?a.length:0;for(;o--&&r.start1&&s>1?2:1:s,f=l.markers.slice(l.end-c,l.end),h=r.markers.slice(r.start,r.start+c),p=f[0],d=h[0];if(p===f[c-1]&&p.value.length===c&&d===h[c-1]&&d.value.length===c&&p.attention===d.attention)n.delete(p),n.delete(d);else{let S=[...new Set([...f,...h])];for(let E of S){let x=n.get(E);x&&x.push(...S)}}l.end-=c,r.start+=c,l.start===l.end&&a.splice(o,1),o=a.length}r.open&&r.startt.length})||o.sequences[0];u!==o.sequences[0]&&n.set(o,u),fi(o.children,n,u,u),i=u}}function Dt(e,n,t,r){let i=[],a,o=qe(t),l=-1;for(;++l0?ui(e,r,n,t):void 0)||ui(e,new Map,n,t)||Dt(e,new Map,n,t),a="";for(let o of i)a+=o.value;return a}Ft.attention=pi;Ft.peek=Rl;function Ft(e,n,t,r){let i=t.enter("phrasing"),a=ot(e,pi,t,t.createTracker(r)),o=a?Oe([a],r.before,r.after):"";return i(),o}function pi(e,n){return{construct:"emphasis",markers:ai(n)==="*"?["*","_"]:["_","*"],sizes:[1]}}function Rl(e,n,t){return t.options.emphasis||"*"}function at(e,n,t,r){let i,a,o;typeof t=="function"||t&&typeof t=="object"?(i=n,a=t,o=r):(a=n,o=t),typeof a=="function"?Me(e,i,Fn(a),o):Me(e,i,Bl(a),o)}function Bl(e){return!e||typeof e!="object"?e:{enter:typeof e.enter=="function"?Fn(e.enter):e.enter,exit:typeof e.exit=="function"?Fn(e.exit):e.exit}}function Fn(e){return n;function n(t,r,i){return e(t,i,r[r.length-1])}}function hi(e,n){let t=!1;return at(e,function(r){if("value"in r&&/\r?\n|\r/.test(r.value)||r.type==="break")return t=!0,ce}),!!((!e.depth||e.depth<3)&&ge(e)&&(n.options.setext||t))}function mi(e,n,t,r){let i=Math.max(Math.min(6,e.depth||1),1),a=t.createTracker(r);if(hi(e,t)){let f=t.enter("headingSetext"),h=t.enter("phrasing"),p=t.containerPhrasing(e,{...a.current(),before:` +`,after:` +`});return h(),f(),p+` +`+(i===1?"=":"-").repeat(p.length-(Math.max(p.lastIndexOf("\r"),p.lastIndexOf(` +`))+1))}let o="#".repeat(i),l=t.enter("headingAtx"),u=t.enter("phrasing");a.move(o+" ");let s=t.containerPhrasing(e,{before:"# ",after:` +`,...a.current()}),c=s.charCodeAt(0);return(c===9||c===32)&&(s=zt(c)+s.slice(1)),s=s?o+" "+s:o,t.options.closeAtx&&(s+=" "+o),u(),l(),s}vn.peek=_l;function vn(e){return e.value||""}function _l(){return"<"}Pn.peek=Ml;function Pn(e,n,t,r){let i=Ne(t),a=i==='"'?"Quote":"Apostrophe",o=t.enter("image"),l=t.enter("label"),u=t.createTracker(r),s=u.move("![");return s+=u.move(t.safe(e.alt,{before:s,after:"]",...u.current()})),s+=u.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=t.enter("destinationLiteral"),s+=u.move("<"),s+=u.move(t.safe(e.url,{before:s,after:">",...u.current()})),s+=u.move(">")):(l=t.enter("destinationRaw"),s+=u.move(t.safe(e.url,{before:s,after:e.title?" ":")",...u.current()}))),l(),e.title&&(l=t.enter(`title${a}`),s+=u.move(" "+i),s+=u.move(t.safe(e.title,{before:s,after:i,...u.current()})),s+=u.move(i),l()),s+=u.move(")"),o(),s}function Ml(){return"!"}Rn.peek=Nl;function Rn(e,n,t,r){let i=e.referenceType,a=t.enter("imageReference"),o=t.enter("label"),l=t.createTracker(r),u=l.move("!["),s=t.safe(e.alt,{before:u,after:"]",...l.current()});u+=l.move(s+"]["),o();let c=t.stack;t.stack=c.filter(function(h){return h!=="phrasing"}),o=t.enter("reference");let f=t.safe(t.associationId(e),{before:u,after:"]",...l.current()});return o(),t.stack=c,a(),i==="full"||!s||s!==f?u+=l.move(f+"]"):i==="shortcut"?u=u.slice(0,-1):u+=l.move("]"),u}function Nl(){return"!"}Bn.peek=Ol;function Bn(e,n,t){let r=e.value||"",i="`",a=-1;for(;new RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^\n\r ]/.test(r)&&(/^[\n\r ]/.test(r)&&/[\n\r ]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++a\u007F]/.test(e.url))}Mn.peek=Hl;function Mn(e,n,t,r){let i=Ne(t),a=i==='"'?"Quote":"Apostrophe",o=t.createTracker(r);if(_n(e,t)){let d=t.stack;t.stack=d.filter(function(x){return x!=="phrasing"});let S=t.enter("autolink"),E=o.move("<");return E+=o.move(t.containerPhrasing(e,{before:E,after:">",...o.current()})),E+=o.move(">"),S(),t.stack=d,E}let l=t.enter("link"),u=t.enter("label"),s=o.move("["),c=t.containerPhrasing(e,{before:s,after:"](",...o.current()});s+=o.move(c),u(),s+=o.move("](");let f=/[\0- \u007F]/.test(e.url),h=r.before.charAt(r.before.length-1),p=e.title||void 0;if(!p&&!f&&(h===` +`||h==="\r")){let d=0;for(;d",...o.current()})),s+=o.move(">")):(u=t.enter("destinationRaw"),s+=o.move(t.safe(e.url,{before:s,after:typeof p=="string"?" ":")",...o.current()}))),u(),typeof p=="string"&&(u=t.enter(`title${a}`),s+=o.move(" "+i),s+=o.move(t.safe(p,{before:s,after:i,...o.current()})),s+=o.move(i),u()),s+=o.move(")"),l(),s}function Hl(e,n,t){return _n(e,t)?"<":"["}Nn.peek=Vl;function Nn(e,n,t,r){let i=e.referenceType,a=t.enter("linkReference"),o=t.enter("label"),l=t.createTracker(r),u=l.move("["),s=t.containerPhrasing(e,{before:u,after:"]",...l.current()});u+=l.move(s+"]["),o();let c=t.stack;t.stack=c.filter(function(h){return h!=="phrasing"}),o=t.enter("reference");let f=t.safe(t.associationId(e),{before:u,after:"]",...l.current()});return o(),t.stack=c,a(),i==="full"||!s||s!==f?u+=l.move(f+"]"):i==="shortcut"?u=u.slice(0,-1):u+=l.move("]"),u}function Vl(){return"["}function He(e){let n=e.options.bullet||"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bullet`, expected `*`, `+`, or `-`");return n}function gi(e){let n=He(e),t=e.options.bulletOther;if(!t)return n==="*"?"-":"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(t===n)throw new Error("Expected `bullet` (`"+n+"`) and `bulletOther` (`"+t+"`) to be different");return t}function di(e){let n=e.options.bulletOrdered||".";if(n!=="."&&n!==")")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOrdered`, expected `.` or `)`");return n}function vt(e){let n=e.options.rule||"*";if(n!=="*"&&n!=="-"&&n!=="_")throw new Error("Cannot serialize rules with `"+n+"` for `options.rule`, expected `*`, `-`, or `_`");return n}function xi(e,n,t,r){let i=t.enter("list"),a=t.bulletCurrent,o=e.ordered?di(t):He(t),l=e.ordered?o==="."?")":".":gi(t),u=n&&t.bulletLastUsed?o===t.bulletLastUsed:!1;if(!e.ordered){let c=e.children?e.children[0]:void 0;if((o==="*"||o==="-")&&c&&(!c.children||!c.children[0])&&t.stack[t.stack.length-1]==="list"&&t.stack[t.stack.length-2]==="listItem"&&t.stack[t.stack.length-3]==="list"&&t.stack[t.stack.length-4]==="listItem"&&t.indexStack[t.indexStack.length-1]===0&&t.indexStack[t.indexStack.length-2]===0&&t.indexStack[t.indexStack.length-3]===0&&(u=!0),vt(t)===o&&c){let f=-1;for(;++f-1?n.start:1)+(t.options.incrementListMarker===!1?0:n.children.indexOf(e))+a);let o=a.length+1;(i==="tab"||i==="mixed"&&(n&&n.type==="list"&&n.spread||e.spread))&&(o=Math.ceil(o/4)*4);let l=t.createTracker(r);l.move(a+" ".repeat(o-a.length)),l.shift(o);let u=t.enter("listItem"),s=t.indentLines(t.containerFlow(e,l.current()),c);return u(),s;function c(f,h,p){return h?(p?"":" ".repeat(o))+f:(p?a:a+" ".repeat(o-a.length))+f}}function wi(e,n,t,r){let i=t.enter("paragraph"),a=t.enter("phrasing"),o=t.containerPhrasing(e,r);return a(),i(),o}function yi(e,n,t,r){if(!e.children.some(function(l){return zn(l)}))return t.containerFlow(e,r);let a=t.enter("phrasing"),o=t.containerPhrasing(e,r);return a(),o}function Si(e){let n=e.options.strong||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize strong with `"+n+"` for `options.strong`, expected `*`, or `_`");return n}Pt.attention=Ei;Pt.peek=Ul;function Pt(e,n,t,r){let i=t.enter("phrasing"),a=ot(e,Ei,t,t.createTracker(r)),o=a?Oe([a],r.before,r.after):"";return i(),o}function Ei(e,n){return{construct:"strong",markers:Si(n)==="*"?["*","_"]:["_","*"],sizes:[2]}}function Ul(e,n,t){return t.options.strong||"*"}function Ai(e,n,t,r){let i=n?n.children:[],a=t.indexStack[t.indexStack.length-1];return t.safe(e.value,{...r,afterNode:i[a+1],beforeNode:i[a-1]})}function Ci(e){let n=e.options.ruleRepetition||3;if(n<3)throw new Error("Cannot serialize rules with repetition `"+n+"` for `options.ruleRepetition`, expected `3` or more");return n}function Ti(e,n,t){let r=(vt(t)+(t.options.ruleSpaces?" ":"")).repeat(Ci(t));return t.options.ruleSpaces?r.slice(0,-1):r}var Ve={blockquote:Jr,break:qn,code:ii,definition:oi,emphasis:Ft,hardBreak:qn,heading:mi,html:vn,image:Pn,imageReference:Rn,inlineCode:Bn,link:Mn,linkReference:Nn,list:xi,listItem:bi,paragraph:wi,root:yi,strong:Pt,text:Ai,thematicBreak:Ti};function Hn(){return{enter:{table:jl,tableData:Ii,tableHeader:Ii,tableRow:Wl},exit:{codeText:Ql,table:Gl,tableData:On,tableHeader:On,tableRow:On}}}function jl(e){let n=e._align;this.enter({type:"table",align:n.map(function(t){return t==="none"?null:t}),children:[],position:void 0},e),this.data.inTable=!0}function Gl(e){this.exit(e),this.data.inTable=void 0}function Wl(e){this.enter({type:"tableRow",children:[],position:void 0},e)}function On(e){this.exit(e)}function Ii(e){this.enter({type:"tableCell",children:[],position:void 0},e)}function Ql(e){let n=this.resume();this.data.inTable&&(n=n.replace(/\\([\\|])/g,Yl));let t=this.stack[this.stack.length-1];t.type,t.value=n,this.exit(e)}function Yl(e,n){return n==="|"?n:e}function Vn(e){let n=e||{},{tableCellPadding:t,tablePipeAlign:r,stringLength:i}=n,a=t?" ":"|";return{handlers:{inlineCode:h,table:o,tableCell:u,tableRow:l},join:[Zl],unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` +`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}]};function o(p,d,S,E){let x=c(p,S,E),C=x[0];if(C){let y=p.align?p.align.length:0,I=-1;if(!y)for(;++Iy&&(y=x[I].length);for(;C.lengthC&&E.charCodeAt(I-1)===92;)I--;x.push(E.slice(C,y)),(y-I)%2===0&&x.push("\\"),C=y,y=E.indexOf("|",y+1)}return x.push(E.slice(C)),x.join("")}}function Zl(e,n,t,r){if(e.type==="table"&&t.type==="listItem"&&t.spread===!1&&(n.type==="definition"||n.type==="heading"&&Kl(n,r)||n.type==="paragraph"||n.type==="table"))return 1}function Kl(e,n){let t=!1;return at(e,function(r){if(r.type==="break"||"value"in r&&/\r?\n|\r/.test(r.value))return t=!0,ce}),!!((!e.depth||e.depth<3)&&ge(e)&&(n.options.setext||t))}function Un(){return{exit:{taskListCheckValueChecked:Li,taskListCheckValueUnchecked:Li,paragraph:$l}}}function jn(){return{handlers:{paragraph:Jl},join:[Xl]}}function Li(e){let n=this.stack[this.stack.length-2];n.type,n.checked=e.type==="taskListCheckValueChecked"}function $l(e){let n=this.stack[this.stack.length-2];if(n&&n.type==="listItem"&&typeof n.checked=="boolean"){let t=this.stack[this.stack.length-1];t.type;let r=t.children[0];if(r&&r.type==="text"){let i=n.children,a=-1,o;for(;++a0?e:{type:"paragraph",children:[{type:"text",value:" "}]},n,t,{...r,...a.current()});return i+o}function Xl(e,n,t){if(!(e.type==="definition"&&t.type==="listItem"))return;let r=zi(t);if(r&&t.children.indexOf(e)0&&!t&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),t}var cu={tokenize:xu,partial:!0};function Kn(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:mu,continuation:{tokenize:gu},exit:du}},text:{91:{name:"gfmFootnoteCall",tokenize:hu},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:fu,resolveTo:pu}}}}function fu(e,n,t){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let u=r.events[i][1];if(u.type==="labelImage"){o=u;break}if(u.type==="gfmFootnoteCall"||u.type==="labelLink"||u.type==="label"||u.type==="image"||u.type==="link")break}return l;function l(u){if(!o||!o._balanced)return t(u);let s=Z(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?t(u):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(u),e.exit("gfmFootnoteCallLabelMarker"),n(u))}}function pu(e,n){let t=e.length,r;for(;t--;)if(e[t][1].type==="labelImage"&&e[t][0]==="enter"){r=e[t][1];break}e[t+1][1].type="data",e[t+3][1].type="gfmFootnoteCallLabelMarker";let i={type:"gfmFootnoteCall",start:Object.assign({},e[t+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[t+3][1].end),end:Object.assign({},e[t+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;let o={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},l={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},u=[e[t+1],e[t+2],["enter",i,n],e[t+3],e[t+4],["enter",a,n],["exit",a,n],["enter",o,n],["enter",l,n],["exit",l,n],["exit",o,n],e[e.length-2],e[e.length-1],["exit",i,n]];return e.splice(t,e.length-t+1,...u),e}function hu(e,n,t){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return l;function l(f){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),u}function u(f){return f!==94?t(f):(e.enter("gfmFootnoteCallMarker"),e.consume(f),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",s)}function s(f){if(a>999||f===93&&!o||f===null||f===91||B(f))return t(f);if(f===93){e.exit("chunkString");let h=e.exit("gfmFootnoteCallString");return i.includes(Z(r.sliceSerialize(h)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),n):t(f)}return B(f)||(o=!0),a++,e.consume(f),f===92?c:s}function c(f){return f===91||f===92||f===93?(e.consume(f),a++,s):s(f)}}function mu(e,n,t){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,l;return u;function u(d){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(d),e.exit("gfmFootnoteDefinitionLabelMarker"),s}function s(d){return d===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(d),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",c):t(d)}function c(d){if(o>999||d===93&&!l||d===null||d===91||B(d))return t(d);if(d===93){e.exit("chunkString");let S=e.exit("gfmFootnoteDefinitionLabelString");return a=Z(r.sliceSerialize(S)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(d),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),h}return B(d)||(l=!0),o++,e.consume(d),d===92?f:c}function f(d){return d===91||d===92||d===93?(e.consume(d),o++,c):c(d)}function h(d){return d===58?(e.enter("definitionMarker"),e.consume(d),e.exit("definitionMarker"),i.includes(a)||i.push(a),q(e,p,"gfmFootnoteDefinitionWhitespace")):t(d)}function p(d){return n(d)}}function gu(e,n,t){return e.check(se,n,e.attempt(cu,n,t))}function du(e){e.exit("gfmFootnoteDefinition")}function xu(e,n,t){let r=this;return q(e,i,"gfmFootnoteDefinitionIndent",5);function i(a){let o=r.events[r.events.length-1];return o&&o[1].type==="gfmFootnoteDefinitionIndent"&&o[2].sliceSerialize(o[1],!0).length===4?n(a):t(a)}}function $n(e){let t=(e||{}).singleTilde,r={name:"strikethrough",tokenize:a,resolveAll:i};return t==null&&(t=!0),{text:{126:r},insideSpan:{null:[r]},attentionMarkers:{null:[126]}};function i(o,l){let u=-1;for(;++u1?u(d):(o.consume(d),f++,p);if(f<2&&!t)return u(d);let E=o.exit("strikethroughSequenceTemporary"),x=re(d);return E._open=!x||x===2&&!!S,E._close=!S||S===2&&!!x,l(d)}}}var Rt=class{constructor(){this.map=[],this.index=new Map}add(n,t,r){ku(this,n,t,r)}consume(n){if(this.map.sort(function(a,o){return a[0]-o[0]}),this.map.length===0)return;let t=this.map.length,r=[];for(;t>0;)t-=1,r.push(n.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),n.length=this.map[t][0];r.push(n.slice()),n.length=0;let i=r.pop();for(;i;){for(let a of i)n.push(a);i=r.pop()}this.map.length=0,this.index.clear()}};function ku(e,n,t,r){if(t===0&&r.length===0)return;let i=e.index.get(n);if(i){i[1]+=t,i[2].push(...r);return}let a=[n,t,r];e.map.push(a),e.index.set(n,a)}function Mi(e,n){let t=!1,r=[];for(;n-1;){let{type:_}=r.events[N][1];if(_==="lineEnding"||_==="linePrefix")N--;else break}let O=N>-1?r.events[N][1].type:null,L=O==="tableHead"||O==="tableRow"?w:u;return L===w&&r.parser.lazy[r.now().line]?t(k):L(k)}function u(k){return e.enter("tableHead"),e.enter("tableRow"),s(k)}function s(k){return k===124||(o=!0,a+=1),c(k)}function c(k){return k===null?t(k):T(k)?a>1?(a=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(k),e.exit("lineEnding"),p):t(k):z(k)?q(e,c,"whitespace")(k):(a+=1,o&&(o=!1,i+=1),k===124?(e.enter("tableCellDivider"),e.consume(k),e.exit("tableCellDivider"),o=!0,c):(e.enter("data"),f(k)))}function f(k){return k===null||k===124||B(k)?(e.exit("data"),c(k)):(e.consume(k),k===92?h:f)}function h(k){return k===92||k===124?(e.consume(k),f):f(k)}function p(k){return r.interrupt=!1,r.parser.lazy[r.now().line]?t(k):(e.enter("tableDelimiterRow"),o=!1,z(k)?q(e,d,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(k):d(k))}function d(k){return k===45||k===58?E(k):k===124?(o=!0,e.enter("tableCellDivider"),e.consume(k),e.exit("tableCellDivider"),S):v(k)}function S(k){return z(k)?q(e,E,"whitespace")(k):E(k)}function E(k){return k===58?(a+=1,o=!0,e.enter("tableDelimiterMarker"),e.consume(k),e.exit("tableDelimiterMarker"),x):k===45?(a+=1,x(k)):k===null||T(k)?I(k):v(k)}function x(k){return k===45?(e.enter("tableDelimiterFiller"),C(k)):v(k)}function C(k){return k===45?(e.consume(k),C):k===58?(o=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(k),e.exit("tableDelimiterMarker"),y):(e.exit("tableDelimiterFiller"),y(k))}function y(k){return z(k)?q(e,I,"whitespace")(k):I(k)}function I(k){return k===124?d(k):k===null||T(k)?!o||i!==a?v(k):(e.exit("tableDelimiterRow"),e.exit("tableHead"),n(k)):v(k)}function v(k){return t(k)}function w(k){return e.enter("tableRow"),F(k)}function F(k){return k===124?(e.enter("tableCellDivider"),e.consume(k),e.exit("tableCellDivider"),F):k===null||T(k)?(e.exit("tableRow"),n(k)):z(k)?q(e,F,"whitespace")(k):(e.enter("data"),M(k))}function M(k){return k===null||k===124||B(k)?(e.exit("data"),F(k)):(e.consume(k),k===92?V:M)}function V(k){return k===92||k===124?(e.consume(k),M):M(k)}}function wu(e,n){let t=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],l=!1,u=0,s,c,f,h=new Rt;for(;++tt[2]+1){let d=t[2]+1,S=t[3]-t[2]-1;e.add(d,S,[])}}e.add(t[3]+1,0,[["exit",f,n]])}return i!==void 0&&(a.end=Object.assign({},Ue(n.events,i)),e.add(i,0,[["exit",a,n]]),a=void 0),a}function Ni(e,n,t,r,i){let a=[],o=Ue(n.events,t);i&&(i.end=Object.assign({},o),a.push(["exit",i,n])),r.end=Object.assign({},o),a.push(["exit",r,n]),e.add(t+1,0,a)}function Ue(e,n){let t=e[n],r=t[0]==="enter"?"start":"end";return t[1][r]}var yu={name:"tasklistCheck",tokenize:Su};function Xn(){return{text:{91:yu}}}function Su(e,n,t){let r=this;return i;function i(u){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?t(u):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(u),e.exit("taskListCheckMarker"),a)}function a(u){return B(u)?(e.enter("taskListCheckValueUnchecked"),e.consume(u),e.exit("taskListCheckValueUnchecked"),o):u===88||u===120?(e.enter("taskListCheckValueChecked"),e.consume(u),e.exit("taskListCheckValueChecked"),o):t(u)}function o(u){return u===93?(e.enter("taskListCheckMarker"),e.consume(u),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),l):t(u)}function l(u){return T(u)?n(u):z(u)?e.check({tokenize:Eu},n,t)(u):t(u)}}function Eu(e,n,t){return q(e,r,"whitespace");function r(i){return i===null?t(i):n(i)}}function Oi(e){return pt([Yn(),Kn(),$n(e),Jn(),Xn()])}var Au={};function _t(e){let n=this,t=e||Au,r=n.data(),i=r.micromarkExtensions||(r.micromarkExtensions=[]),a=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),o=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);i.push(Oi(t)),a.push(Gn()),o.push(Wn(t))}var Ad={remarkParse:"11.0.0",remarkGfm:"4.0.1",unified:"11.0.5"},Cu=$t().use(Tt).use(_t);function Cd(e){return typeof e!="string"||!e?{type:"root",children:[]}:Cu.parse(e)}export{Ad as MARKDOWN_VERSIONS,Cd as parseMarkdown}; diff --git a/sources/minimax-ai/minimax-pet/package-lock.json b/sources/minimax-ai/minimax-pet/package-lock.json index bb047cd5..17136c13 100644 --- a/sources/minimax-ai/minimax-pet/package-lock.json +++ b/sources/minimax-ai/minimax-pet/package-lock.json @@ -1,14 +1,18 @@ { "name": "minimax-pet-source", - "version": "0.6.0", + "version": "0.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "minimax-pet-source", - "version": "0.6.0", + "version": "0.7.0", "devDependencies": { - "jsdom": "24.1.3" + "esbuild": "0.25.12", + "jsdom": "24.1.3", + "remark-gfm": "4.0.1", + "remark-parse": "11.0.0", + "unified": "11.0.5" }, "engines": { "node": ">=22" @@ -143,6 +147,482 @@ "node": ">=18" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -160,6 +640,17 @@ "dev": true, "license": "MIT" }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -174,6 +665,28 @@ "node": ">= 0.4" } }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -247,6 +760,20 @@ "dev": true, "license": "MIT" }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -257,16 +784,40 @@ "node": ">=0.4.0" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { "node": ">= 0.4" @@ -334,6 +885,68 @@ "node": ">= 0.4" } }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, "node_modules/form-data": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", @@ -449,130 +1062,982 @@ "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "24.1.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", + "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.4", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/markdown-table": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.1.0.tgz", + "integrity": "sha512-xpeSCdM+B+6P3ncfgaB7FoDbtJ30xAe6Z18TGT7AgXJsHqCElCICZovQqdRMm7kHgpTyYv36EupqewoFFSB8vw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.4.tgz", + "integrity": "sha512-z4B5c6jrnJ1ltOQemhWYPBSAo6y42Z8Gt2yEgfgNTMcLSU59B8bfj8Z8AnAlJrBGLnqkdAUZ7jdDEqQw3KuipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.1.0.tgz", + "integrity": "sha512-KRLgmPaP2H1ul2bpoJkOS+9pAcDAAj9Nu1mqLnh8NLeJG5tlvj42TH80PIGBpROWlRXLk0lDrWNuZCFy/tsB4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-Jx6QSK8wDo558Bcf7q+1pe0v81g2PVs09Hlvu9xJHmCFRF3sAPW7vXFVIAwBncs3sde92WbsVqNxwdqViA2XnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.1.tgz", + "integrity": "sha512-OuJHqvr455pwu2OaOrir7dbzqs4jlWKOtlu9L6GjcIjjQwNyw02VntQsr/Ek6/A13vgnXfUhBekWRUP1OkNivw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.1.tgz", + "integrity": "sha512-fiIjPrAy4kz68/eFbPHhsiWDGHhqUSVoU1XsfLM5DsEPXw7MxgiVVyulUggFRckVWeT1KXQXkg5vm3kv4oMSOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "mdast-util-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-jXVO1hvB2hs82g1esi7I9nIJDqiijbQLIyH2jDUb5s7jIAZMr/79h0VHSq7XHKTqpLARRm+DDNjduB7S9+6XZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.2.3.tgz", + "integrity": "sha512-dImdB6VZRMRac1SwAW6o1c0ESk/7pFFAMCMuKM+9v7LpTSthMM5nzXpqKw4Mjo66aXVKhNkyrP4bMB9MurPyWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.3.tgz", + "integrity": "sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-edit-map": "^1.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.4.tgz", + "integrity": "sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.1.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-edit-map": "^1.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.3" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.2.tgz", + "integrity": "sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.1.0.tgz", + "integrity": "sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "node_modules/micromark-util-edit-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-edit-map/-/micromark-util-edit-map-1.0.0.tgz", + "integrity": "sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "micromark-util-types": "^2.0.0" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } }, - "node_modules/jsdom": { - "version": "24.1.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", - "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==", + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.12", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true, - "license": "ISC" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/micromark-util-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.3.tgz", + "integrity": "sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, "node_modules/mime-db": { "version": "1.52.0", @@ -654,6 +2119,58 @@ "dev": true, "license": "MIT" }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -724,6 +2241,96 @@ "node": ">=18" } }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.2.0.tgz", + "integrity": "sha512-fpsYs/VVoZxfGY9/j3FQpZmN8wdLJaV1Pt38AaJNZu9uKIHcFU3halCdBveEq1HGKO1OEfJY65w1zvoFV1b3qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.1.0.tgz", + "integrity": "sha512-vKXxz6O38sKDj1mtx/k2cWvkkFBuYGx6uGrlzBkVeWCRF/F8sdI0j3Wbkz/5rVNRRuVc8UrgRdbCxNhmYXgP3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", @@ -745,6 +2352,36 @@ "requires-port": "^1.0.0" } }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.4.tgz", + "integrity": "sha512-66ycRswIkNmHH9PHku7ADtv5RVwgIrOcuv3J8Svz6h4qgGRrKVa+9/neuKyJZUXyOpYwLTvS+whZ4R2urHHgQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", @@ -843,6 +2480,17 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true, "license": "MIT" + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/sources/minimax-ai/minimax-pet/package.json b/sources/minimax-ai/minimax-pet/package.json index 88796304..869bc39f 100644 --- a/sources/minimax-ai/minimax-pet/package.json +++ b/sources/minimax-ai/minimax-pet/package.json @@ -1,6 +1,6 @@ { "name": "minimax-pet-source", - "version": "0.6.0", + "version": "0.7.0", "private": true, "type": "module", "description": "桌宠插件的开发与验证工具,不进入分发包。", @@ -13,9 +13,14 @@ "dev": "node dev/run-local.mjs", "package": "node scripts/package.mjs", "check:package": "node scripts/check-package.mjs", + "build:markdown": "node tools/build-markdown.mjs", "generate:art": "node scripts/generate-pet-art.mjs" }, "devDependencies": { - "jsdom": "24.1.3" + "esbuild": "0.25.12", + "jsdom": "24.1.3", + "remark-gfm": "4.0.1", + "remark-parse": "11.0.0", + "unified": "11.0.5" } } diff --git a/sources/minimax-ai/minimax-pet/scripts/markdown-vendor-header.txt b/sources/minimax-ai/minimax-pet/scripts/markdown-vendor-header.txt new file mode 100644 index 00000000..9754a01c --- /dev/null +++ b/sources/minimax-ai/minimax-pet/scripts/markdown-vendor-header.txt @@ -0,0 +1,10 @@ +/* + * Generated by tools/build-markdown.mjs — do not edit by hand. + * + * Bundles unified, remark-parse and remark-gfm into one browser ESM module. + * unified MIT, Copyright (c) Titus Wormer + * remark-parse MIT, Copyright (c) Titus Wormer + * remark-gfm MIT, Copyright (c) Titus Wormer + * See vendor/markdown.LICENSE.txt and the package's PROVENANCE.md. Rebuild with + * `npm run build:markdown`; the committed file is the distributable source of truth. + */ diff --git a/sources/minimax-ai/minimax-pet/tools/build-markdown.mjs b/sources/minimax-ai/minimax-pet/tools/build-markdown.mjs new file mode 100644 index 00000000..d0386a9e --- /dev/null +++ b/sources/minimax-ai/minimax-pet/tools/build-markdown.mjs @@ -0,0 +1,92 @@ +// MiniMax Pet — build the vendored markdown parser. Not part of the runtime payload. +// Usage: npm run build:markdown +// Writes miniapp/client/vendor/markdown.mjs and miniapp/client/vendor/markdown.LICENSE.txt. +// The committed files are the distributable source of truth; rebuild only when the +// pinned versions in package.json change. + +import { build } from 'esbuild'; +import { readFile, writeFile, mkdir } from 'node:fs/promises'; +import { existsSync } from 'node:fs'; +import { join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const root = fileURLToPath(new URL('..', import.meta.url)); +const modules = join(root, 'node_modules'); +const outdir = join(root, 'miniapp/client/vendor'); +const outfile = join(outdir, 'markdown.mjs'); +const licenseFile = join(outdir, 'markdown.LICENSE.txt'); +const LICENSE_FILES = ['LICENSE', 'LICENSE.md', 'LICENSE.txt', 'license', 'license.md']; + +const version = async (name) => JSON.parse(await readFile(join(modules, name, 'package.json'), 'utf8')).version; +const versions = { + remarkParse: await version('remark-parse'), + remarkGfm: await version('remark-gfm'), + unified: await version('unified'), +}; + +const entry = ` +import { unified } from 'unified'; +import remarkParse from 'remark-parse'; +import remarkGfm from 'remark-gfm'; + +export const MARKDOWN_VERSIONS = ${JSON.stringify(versions)}; + +const parser = unified().use(remarkParse).use(remarkGfm); + +/** Parse one markdown document into an mdast tree. Raw HTML stays an inert node; nothing is rendered here. */ +export function parseMarkdown(text) { + if (typeof text !== 'string' || !text) return { type: 'root', children: [] }; + return parser.parse(text); +} +`; + +await mkdir(outdir, { recursive: true }); +const result = await build({ + stdin: { contents: entry, resolveDir: root, sourcefile: 'markdown-entry.mjs', loader: 'js' }, + bundle: true, + format: 'esm', + platform: 'neutral', + target: 'chrome120', + minify: true, + legalComments: 'none', + write: false, + metafile: true, + logLevel: 'warning', +}); + +const header = await readFile(join(root, 'scripts/markdown-vendor-header.txt'), 'utf8'); +const bundled = result.outputFiles[0].text; +await writeFile(outfile, header + bundled); + +// Every bundled package keeps its own notice; a redistributed MIT or Apache bundle +// must carry them. Derived from the esbuild metafile so the list cannot drift. +const bundledNames = new Set(); +for (const input of Object.keys(result.metafile.inputs)) { + const parts = input.split('/'); + const at = parts.lastIndexOf('node_modules'); + if (at === -1) continue; + bundledNames.add(parts[at + 1].startsWith('@') ? `${parts[at + 1]}/${parts[at + 2]}` : parts[at + 1]); +} + +const sections = []; +for (const name of [...bundledNames].sort()) { + const dir = join(modules, name); + const manifest = JSON.parse(await readFile(join(dir, 'package.json'), 'utf8')); + const holder = (typeof manifest.author === 'string' ? manifest.author : manifest.author?.name) ?? ''; + const license = manifest.license ?? 'see notice'; + const noticePath = LICENSE_FILES.map((file) => join(dir, file)).find((path) => existsSync(path)); + const notice = noticePath ? (await readFile(noticePath, 'utf8')).trim() : '(no separate license file in the package)'; + sections.push(`### ${name}@${manifest.version} — ${license}${holder ? ` — ${holder}` : ''}\n\n${notice}`); +} + +await writeFile(licenseFile, [ + '# Third-party notices: vendored markdown parser', + '', + 'miniapp/client/vendor/markdown.mjs bundles the packages below into one module. Each is', + 'redistributed unmodified in bundled form; only these packages are included.', + '', + ...sections, + '', +].join('\n')); + +console.log(`${outfile} ${(bundled.length / 1024).toFixed(1)} KiB, ${bundledNames.size} packages attested in ${licenseFile}`); From cc19dd89b03b1e20bfdd142e57b83ddd3c9e7053 Mon Sep 17 00:00:00 2001 From: dazhi Date: Thu, 12 Nov 2026 17:38:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(minimax-pet):=20=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E5=AF=B9=E9=BD=90=E4=B8=8E=E6=B5=81=E5=BC=8F=E5=9B=9E=E5=A4=8D?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - renderMarkdown 替换节点时保留 scrollTop:流式回复每轮都会变,之前会把阅读位置拉回顶部。 - dataset.mdSource 改存短键(长度 + FNV-1a),不再把整段回复复制进属性。 - 表格对齐读 remark-gfm 记在 table 节点上的列对齐,之前读的是 cell.align,永远取不到。 - 补测试:列对齐、滚动位置、短键;DEVELOPMENT 与注释同步说明。 --- .../miniapp/client/compact-pet-view.mjs | 4 +- .../minimax-pet/miniapp/client/markdown.mjs | 39 ++++++++++++++----- sources/minimax-ai/minimax-pet/DEVELOPMENT.md | 1 + .../minimax-pet/dev/markdown.test.mjs | 15 +++++++ .../miniapp/client/compact-pet-view.mjs | 4 +- .../minimax-pet/miniapp/client/markdown.mjs | 39 ++++++++++++++----- 6 files changed, 80 insertions(+), 22 deletions(-) diff --git a/plugins/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs b/plugins/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs index 7f9651d2..ba2f2db6 100644 --- a/plugins/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs +++ b/plugins/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs @@ -143,8 +143,8 @@ export function createCompactPetView({ else if (!detail) text = '正在读取任务…'; else text = (detail.status === 'error' && textOf(detail.error)) || textOf(detail.lastAssistantText) || '该任务暂时没有可读取的最后回复。'; // Status copy stays plain text; an actual reply is markdown. renderMarkdown keeps - // the DOM when the text is unchanged, so a background refresh cannot reset the - // reader's scroll position. + // the DOM when the text is unchanged and restores the scroll offset when a + // streaming reply replaces it. if (needsAnswer || !available || taskSelection.detailLoading && !detail) { if (detailReply.dataset.mdSource !== text) { resetMarkdown(detailReply); setText(detailReply, text); } } else { diff --git a/plugins/minimax-ai/minimax-pet/miniapp/client/markdown.mjs b/plugins/minimax-ai/minimax-pet/miniapp/client/markdown.mjs index 0d4237e6..310445dc 100644 --- a/plugins/minimax-ai/minimax-pet/miniapp/client/markdown.mjs +++ b/plugins/minimax-ai/minimax-pet/miniapp/client/markdown.mjs @@ -14,6 +14,17 @@ const HEADING_LEVEL_BASE = 2; const parses = new Map(); const flats = new Map(); +// A reply can be 200k characters; keep a short identity for the DOM marker instead +// of copying the whole text into an attribute. +function sourceKey(text) { + let hash = 0x811c9dc5; + for (let index = 0; index < text.length; index++) { + hash ^= text.charCodeAt(index); + hash = Math.imul(hash, 0x01000193); + } + return `${text.length}:${(hash >>> 0).toString(36)}`; +} + function remember(map, key, value) { if (map.size >= MAX_CACHE) map.delete(map.keys().next().value); map.set(key, value); @@ -172,16 +183,17 @@ function blockNode(doc, node) { wrap.setAttribute('aria-label', '任务回复中的表格'); const table = doc.createElement('table'); const rows = Array.isArray(node.children) ? node.children : []; + const align = Array.isArray(node.align) ? node.align : []; const header = rows.find((row) => row.type === 'tableRow'); if (header) { const thead = doc.createElement('thead'); - thead.append(tableRow(doc, header, 'th')); + thead.append(tableRow(doc, header, 'th', align)); table.append(thead); } const body = rows.filter((row) => row.type === 'tableRow' && row !== header); if (body.length) { const tbody = doc.createElement('tbody'); - for (const row of body) tbody.append(tableRow(doc, row, 'td')); + for (const row of body) tbody.append(tableRow(doc, row, 'td', align)); table.append(tbody); } wrap.append(table); @@ -218,13 +230,15 @@ function textParagraph(doc, text) { return p; } -function tableRow(doc, row, cellTag) { +function tableRow(doc, row, cellTag, align = []) { const tr = doc.createElement('tr'); - for (const cell of Array.isArray(row.children) ? row.children : []) { - if (cell.type !== 'tableCell') continue; + const cells = Array.isArray(row.children) ? row.children.filter((cell) => cell.type === 'tableCell') : []; + for (const [index, cell] of cells.entries()) { const td = doc.createElement(cellTag); if (cellTag === 'th') td.scope = 'col'; - if (typeof cell.align === 'string') td.dataset.align = cell.align; + // remark-gfm records alignment once per column on the table, not on each cell. + const column = align[index]; + if (column === 'left' || column === 'center' || column === 'right') td.dataset.align = column; appendInline(doc, td, cell.children); tr.append(td); } @@ -251,10 +265,15 @@ function appendBlocks(doc, parent, children, { tight = false } = {}) { // Public API // --------------------------------------------------------------------------- -/** Renders markdown into `target`, replacing its content only when the text changed. */ +/** + * Renders markdown into `target`, replacing its content only when the text changed. + * A reply that is still streaming changes on every poll, so the reader's scroll + * position is captured and restored around the replace. + */ export function renderMarkdown(target, text) { const source = typeof text === 'string' ? text : ''; - if (target.dataset.mdSource === source) return false; + const key = sourceKey(source); + if (target.dataset.mdSource === key) return false; const doc = target.ownerDocument; const fragment = doc.createDocumentFragment(); for (const child of tree(source).children) { @@ -262,8 +281,10 @@ export function renderMarkdown(target, text) { const node = blockNode(doc, child); if (node) fragment.append(node); } + const keepTop = target.scrollTop; target.replaceChildren(fragment); - target.dataset.mdSource = source; + if (keepTop > 0) target.scrollTop = keepTop; + target.dataset.mdSource = key; target.classList.add('md'); return true; } diff --git a/sources/minimax-ai/minimax-pet/DEVELOPMENT.md b/sources/minimax-ai/minimax-pet/DEVELOPMENT.md index cab72173..812d2375 100644 --- a/sources/minimax-ai/minimax-pet/DEVELOPMENT.md +++ b/sources/minimax-ai/minimax-pet/DEVELOPMENT.md @@ -21,6 +21,7 @@ npm run check:package - Wide task views show list and detail together; narrow views provide a return action with focus/scroll restoration. Reading a reply must survive background polls without scroll reset. - The desktop pet uses compact five-line notification cards and keeps the pet visible while reading. Completed status and answer-needed state must agree across notification, list and detail. - One global observation plus three detailed observations share the Host budget. Cancellation does not free a slot until its subscription settles. Global reconnect also waits for the previous observation. +- A reply that is still streaming changes on every activity poll: `renderMarkdown` keeps the DOM when the text is unchanged and restores `scrollTop` when it replaces it, so reading is not interrupted. - A task's latest reply renders through `markdown.mjs`: the vendored parser produces an mdast tree and the module builds DOM nodes from it. Never assign parsed HTML to `innerHTML`; raw HTML in a reply is inert text, links are not opened, and images are not fetched. Notification cards and reminder previews use the flat-text output, which must stay one line per logical line. - **打开对话** / **去回答** calls `host.navigation.open` synchronously inside the click (the Host checks user activation), never retries automatically, and drops a late result once another task is selected. Without the API the button stays hidden. - The page follows `host.ui.subscribe` themes through `data-theme`; without it the CSS falls back to `prefers-color-scheme`. diff --git a/sources/minimax-ai/minimax-pet/dev/markdown.test.mjs b/sources/minimax-ai/minimax-pet/dev/markdown.test.mjs index c446a489..26ef959c 100644 --- a/sources/minimax-ai/minimax-pet/dev/markdown.test.mjs +++ b/sources/minimax-ai/minimax-pet/dev/markdown.test.mjs @@ -150,3 +150,18 @@ domTest('a task list keeps its checked state without form controls', (t) => { assert.equal(target.querySelector('input, checkbox'), null); assert.deepEqual([...target.querySelectorAll('.md-task')].map((node) => node.dataset.checked), ['false', 'true']); }); + +domTest('table alignment comes from the column spec and a streaming re-render keeps the scroll', (t) => { + const dom = new JSDOM('
'); + t.after(() => dom.window.close()); + const target = dom.window.document.getElementById('reply'); + renderMarkdown(target, '| 名称 | 数量 | 备注 |\n| :--- | ---: | :---: |\n| 新增 | 1204 | 含游客 |'); + const cells = [...target.querySelectorAll('.md-table tbody td')]; + assert.deepEqual(cells.map((cell) => cell.dataset.align), ['left', 'right', 'center']); + assert.deepEqual([...target.querySelectorAll('.md-table th')].map((cell) => cell.dataset.align), ['left', 'right', 'center']); + // A longer reply replaces the nodes; the reader's scroll offset survives. + target.scrollTop = 90; + assert.equal(renderMarkdown(target, '| 名称 | 数量 | 备注 |\n| :--- | ---: | :---: |\n| 新增 | 1204 | 含游客 |\n| 留存 | 41% | 次周 |'), true); + assert.equal(target.scrollTop, 90); + assert.equal(target.dataset.mdSource.length < 30, true, 'the marker is a short key, not the reply'); +}); diff --git a/sources/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs b/sources/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs index 7f9651d2..ba2f2db6 100644 --- a/sources/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs +++ b/sources/minimax-ai/minimax-pet/miniapp/client/compact-pet-view.mjs @@ -143,8 +143,8 @@ export function createCompactPetView({ else if (!detail) text = '正在读取任务…'; else text = (detail.status === 'error' && textOf(detail.error)) || textOf(detail.lastAssistantText) || '该任务暂时没有可读取的最后回复。'; // Status copy stays plain text; an actual reply is markdown. renderMarkdown keeps - // the DOM when the text is unchanged, so a background refresh cannot reset the - // reader's scroll position. + // the DOM when the text is unchanged and restores the scroll offset when a + // streaming reply replaces it. if (needsAnswer || !available || taskSelection.detailLoading && !detail) { if (detailReply.dataset.mdSource !== text) { resetMarkdown(detailReply); setText(detailReply, text); } } else { diff --git a/sources/minimax-ai/minimax-pet/miniapp/client/markdown.mjs b/sources/minimax-ai/minimax-pet/miniapp/client/markdown.mjs index 0d4237e6..310445dc 100644 --- a/sources/minimax-ai/minimax-pet/miniapp/client/markdown.mjs +++ b/sources/minimax-ai/minimax-pet/miniapp/client/markdown.mjs @@ -14,6 +14,17 @@ const HEADING_LEVEL_BASE = 2; const parses = new Map(); const flats = new Map(); +// A reply can be 200k characters; keep a short identity for the DOM marker instead +// of copying the whole text into an attribute. +function sourceKey(text) { + let hash = 0x811c9dc5; + for (let index = 0; index < text.length; index++) { + hash ^= text.charCodeAt(index); + hash = Math.imul(hash, 0x01000193); + } + return `${text.length}:${(hash >>> 0).toString(36)}`; +} + function remember(map, key, value) { if (map.size >= MAX_CACHE) map.delete(map.keys().next().value); map.set(key, value); @@ -172,16 +183,17 @@ function blockNode(doc, node) { wrap.setAttribute('aria-label', '任务回复中的表格'); const table = doc.createElement('table'); const rows = Array.isArray(node.children) ? node.children : []; + const align = Array.isArray(node.align) ? node.align : []; const header = rows.find((row) => row.type === 'tableRow'); if (header) { const thead = doc.createElement('thead'); - thead.append(tableRow(doc, header, 'th')); + thead.append(tableRow(doc, header, 'th', align)); table.append(thead); } const body = rows.filter((row) => row.type === 'tableRow' && row !== header); if (body.length) { const tbody = doc.createElement('tbody'); - for (const row of body) tbody.append(tableRow(doc, row, 'td')); + for (const row of body) tbody.append(tableRow(doc, row, 'td', align)); table.append(tbody); } wrap.append(table); @@ -218,13 +230,15 @@ function textParagraph(doc, text) { return p; } -function tableRow(doc, row, cellTag) { +function tableRow(doc, row, cellTag, align = []) { const tr = doc.createElement('tr'); - for (const cell of Array.isArray(row.children) ? row.children : []) { - if (cell.type !== 'tableCell') continue; + const cells = Array.isArray(row.children) ? row.children.filter((cell) => cell.type === 'tableCell') : []; + for (const [index, cell] of cells.entries()) { const td = doc.createElement(cellTag); if (cellTag === 'th') td.scope = 'col'; - if (typeof cell.align === 'string') td.dataset.align = cell.align; + // remark-gfm records alignment once per column on the table, not on each cell. + const column = align[index]; + if (column === 'left' || column === 'center' || column === 'right') td.dataset.align = column; appendInline(doc, td, cell.children); tr.append(td); } @@ -251,10 +265,15 @@ function appendBlocks(doc, parent, children, { tight = false } = {}) { // Public API // --------------------------------------------------------------------------- -/** Renders markdown into `target`, replacing its content only when the text changed. */ +/** + * Renders markdown into `target`, replacing its content only when the text changed. + * A reply that is still streaming changes on every poll, so the reader's scroll + * position is captured and restored around the replace. + */ export function renderMarkdown(target, text) { const source = typeof text === 'string' ? text : ''; - if (target.dataset.mdSource === source) return false; + const key = sourceKey(source); + if (target.dataset.mdSource === key) return false; const doc = target.ownerDocument; const fragment = doc.createDocumentFragment(); for (const child of tree(source).children) { @@ -262,8 +281,10 @@ export function renderMarkdown(target, text) { const node = blockNode(doc, child); if (node) fragment.append(node); } + const keepTop = target.scrollTop; target.replaceChildren(fragment); - target.dataset.mdSource = source; + if (keepTop > 0) target.scrollTop = keepTop; + target.dataset.mdSource = key; target.classList.add('md'); return true; }